Integrate mainline
Nick Ing-Simmons [Fri, 6 Jul 2001 16:27:40 +0000 (16:27 +0000)]
p4raw-id: //depot/perlio@11183

260 files changed:
AUTHORS
Changes
Configure
INSTALL
MANIFEST
NetWare/Makefile
NetWare/interface.c
NetWare/interface.h
NetWare/iperlhost.h
NetWare/nwtinfo.h
NetWare/perlsdio.h [deleted file]
README.qnx
README.vos
djgpp/djgppsed.sh
doio.c
dump.c
embed.h
embed.pl
ext/B/B/Deparse.pm
ext/B/Deparse.t
ext/Cwd/Cwd.xs
ext/Encode/Encode/Tcl.pm
ext/Encode/Encode/Tcl.t
ext/IO/lib/IO/t/io_sock.t
ext/NDBM_File/hints/linux.pl
ext/POSIX/POSIX.t
ext/POSIX/POSIX.xs
ext/Thread/Thread.xs
ext/Time/Piece/Piece.t
ext/util/make_ext
ext/util/mkbootstrap [deleted file]
global.sym
gv.c
gv.h
hints/aix.sh
hints/dos_djgpp.sh
hints/posix-bc.sh
hints/qnx.sh
hv.c
lib/CPAN.pm
lib/Cwd.pm
lib/ExtUtils.t
lib/ExtUtils/MM_NW5.pm
lib/ExtUtils/MM_Unix.pm
lib/ExtUtils/MM_VMS.pm
lib/ExtUtils/MM_Win32.pm
lib/ExtUtils/MakeMaker.pm
lib/File/Find/taint.t
lib/File/Spec/Unix.pm
lib/FindBin.pm
lib/Net/DummyInetd.pm [deleted file]
lib/Net/PH.pm [deleted file]
lib/Net/SNPP.pm [deleted file]
lib/Net/t/ph.t [deleted file]
lib/Net/t/require.t
lib/Test/Harness.pm
lib/Tie/Hash.pm
lib/Unicode/UCD.pm
lib/Unicode/UCD.t
lib/perl5db.pl
lib/unicode/Blocks.pl
lib/unicode/In.pl
lib/unicode/In/0.pl
lib/unicode/In/1.pl
lib/unicode/In/10.pl
lib/unicode/In/100.pl [new file with mode: 0644]
lib/unicode/In/101.pl [new file with mode: 0644]
lib/unicode/In/102.pl [new file with mode: 0644]
lib/unicode/In/103.pl [new file with mode: 0644]
lib/unicode/In/104.pl [new file with mode: 0644]
lib/unicode/In/105.pl [new file with mode: 0644]
lib/unicode/In/106.pl [new file with mode: 0644]
lib/unicode/In/107.pl [new file with mode: 0644]
lib/unicode/In/108.pl [new file with mode: 0644]
lib/unicode/In/109.pl [new file with mode: 0644]
lib/unicode/In/11.pl
lib/unicode/In/110.pl [new file with mode: 0644]
lib/unicode/In/111.pl [new file with mode: 0644]
lib/unicode/In/112.pl [new file with mode: 0644]
lib/unicode/In/113.pl [new file with mode: 0644]
lib/unicode/In/114.pl [new file with mode: 0644]
lib/unicode/In/115.pl [new file with mode: 0644]
lib/unicode/In/116.pl [new file with mode: 0644]
lib/unicode/In/117.pl [new file with mode: 0644]
lib/unicode/In/118.pl [new file with mode: 0644]
lib/unicode/In/119.pl [new file with mode: 0644]
lib/unicode/In/12.pl
lib/unicode/In/120.pl [new file with mode: 0644]
lib/unicode/In/121.pl [new file with mode: 0644]
lib/unicode/In/122.pl [new file with mode: 0644]
lib/unicode/In/123.pl [new file with mode: 0644]
lib/unicode/In/124.pl [new file with mode: 0644]
lib/unicode/In/125.pl [new file with mode: 0644]
lib/unicode/In/126.pl [new file with mode: 0644]
lib/unicode/In/127.pl [new file with mode: 0644]
lib/unicode/In/128.pl [new file with mode: 0644]
lib/unicode/In/129.pl [new file with mode: 0644]
lib/unicode/In/13.pl
lib/unicode/In/130.pl [new file with mode: 0644]
lib/unicode/In/131.pl [new file with mode: 0644]
lib/unicode/In/132.pl [new file with mode: 0644]
lib/unicode/In/133.pl [new file with mode: 0644]
lib/unicode/In/134.pl [new file with mode: 0644]
lib/unicode/In/135.pl [new file with mode: 0644]
lib/unicode/In/14.pl
lib/unicode/In/15.pl
lib/unicode/In/16.pl
lib/unicode/In/17.pl
lib/unicode/In/18.pl
lib/unicode/In/19.pl
lib/unicode/In/2.pl
lib/unicode/In/20.pl
lib/unicode/In/21.pl
lib/unicode/In/22.pl
lib/unicode/In/23.pl
lib/unicode/In/24.pl
lib/unicode/In/25.pl
lib/unicode/In/26.pl
lib/unicode/In/27.pl
lib/unicode/In/28.pl
lib/unicode/In/29.pl
lib/unicode/In/3.pl
lib/unicode/In/30.pl
lib/unicode/In/31.pl
lib/unicode/In/32.pl
lib/unicode/In/33.pl
lib/unicode/In/34.pl
lib/unicode/In/35.pl
lib/unicode/In/36.pl
lib/unicode/In/37.pl
lib/unicode/In/38.pl
lib/unicode/In/39.pl
lib/unicode/In/4.pl
lib/unicode/In/40.pl
lib/unicode/In/41.pl
lib/unicode/In/42.pl
lib/unicode/In/43.pl
lib/unicode/In/44.pl
lib/unicode/In/45.pl
lib/unicode/In/46.pl
lib/unicode/In/47.pl
lib/unicode/In/48.pl
lib/unicode/In/49.pl
lib/unicode/In/5.pl
lib/unicode/In/50.pl
lib/unicode/In/51.pl
lib/unicode/In/52.pl
lib/unicode/In/53.pl
lib/unicode/In/54.pl
lib/unicode/In/55.pl
lib/unicode/In/56.pl
lib/unicode/In/57.pl
lib/unicode/In/58.pl
lib/unicode/In/59.pl
lib/unicode/In/6.pl
lib/unicode/In/60.pl
lib/unicode/In/61.pl
lib/unicode/In/62.pl
lib/unicode/In/63.pl
lib/unicode/In/64.pl
lib/unicode/In/65.pl
lib/unicode/In/66.pl
lib/unicode/In/67.pl
lib/unicode/In/68.pl
lib/unicode/In/69.pl
lib/unicode/In/7.pl
lib/unicode/In/70.pl
lib/unicode/In/71.pl
lib/unicode/In/72.pl
lib/unicode/In/73.pl
lib/unicode/In/74.pl
lib/unicode/In/75.pl
lib/unicode/In/76.pl
lib/unicode/In/77.pl
lib/unicode/In/78.pl
lib/unicode/In/79.pl
lib/unicode/In/8.pl
lib/unicode/In/80.pl
lib/unicode/In/81.pl
lib/unicode/In/82.pl
lib/unicode/In/83.pl
lib/unicode/In/84.pl
lib/unicode/In/85.pl
lib/unicode/In/86.pl
lib/unicode/In/87.pl
lib/unicode/In/88.pl
lib/unicode/In/89.pl
lib/unicode/In/9.pl
lib/unicode/In/90.pl
lib/unicode/In/91.pl
lib/unicode/In/92.pl
lib/unicode/In/93.pl
lib/unicode/In/94.pl
lib/unicode/In/95.pl
lib/unicode/In/96.pl [new file with mode: 0644]
lib/unicode/In/97.pl [new file with mode: 0644]
lib/unicode/In/98.pl [new file with mode: 0644]
lib/unicode/In/99.pl [new file with mode: 0644]
lib/unicode/Scripts.pl [new file with mode: 0644]
lib/unicode/mktables.PL
makedef.pl
numeric.c
objXSUB.h
op.c
op.h
opcode.h
opcode.pl
os2/OS2/Process/Process.pm
os2/os2.c
patchlevel.h
perl.c
perl.h
perlapi.c
perlio.h
perlsdio.h
pod/perl572delta.pod
pod/perlapi.pod
pod/perldiag.pod
pod/perlfaq4.pod
pod/perlfunc.pod
pod/perlmodlib.pod
pod/perlretut.pod
pod/perltoc.pod
pod/perltodo.pod
pod/perlunicode.pod
pod/perlvar.pod
pp.c
pp.sym
pp_ctl.c
pp_hot.c
pp_pack.c
pp_proto.h
pp_sys.c
proto.h
sv.c
t/lib/warnings/op
t/lib/warnings/toke
t/op/numconvert.t
t/op/pack.t
t/op/pat.t
t/op/pos.t
t/op/study.t
t/op/write.t
thread.h
toke.c
uconfig.h
util.c
utils/pl2pm.PL
warnings.pl
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
win32/mdelete.bat [moved from win32/bin/mdelete.bat with 97% similarity]
win32/win32thread.h
xsutils.c

diff --git a/AUTHORS b/AUTHORS
index 8e0a16e..c06cb7b 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -433,7 +433,6 @@ 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                 <murray@nesbitt.ca>
 Nathan Kurz                    <nate@valleytel.net>
 Nathan Torkington              <gnat@frii.com>
diff --git a/Changes b/Changes
index 6505845..804fd3c 100644 (file)
--- a/Changes
+++ b/Changes
@@ -31,6 +31,904 @@ or any other branch.
 Version v5.7.1         Development release working toward v5.8
 --------------
 ____________________________________________________________________________
+[ 11180] By: jhi                                   on 2001/07/06  13:20:08
+        Log: Regen toc.
+     Branch: perl
+          ! pod/perltoc.pod
+____________________________________________________________________________
+[ 11179] By: jhi                                   on 2001/07/06  12:57:13
+        Log: Nit from Abhijit.
+     Branch: perl
+          ! lib/CPAN.pm
+____________________________________________________________________________
+[ 11178] By: jhi                                   on 2001/07/06  12:53:04
+        Log: Retract #11172.
+     Branch: perl
+          ! t/op/method.t
+____________________________________________________________________________
+[ 11177] By: jhi                                   on 2001/07/06  12:44:51
+        Log: Subject: [PATCH lib/Cwd.pm] QNX patch extended for NTO
+             From: Norton Allen <allen@huarp.harvard.edu>
+             Date: Fri, 6 Jul 2001 09:39:57 -0400 (edt)
+             Message-Id: <200107061339.JAA12582@bottesini.harvard.edu>
+     Branch: perl
+          ! lib/Cwd.pm
+____________________________________________________________________________
+[ 11176] By: jhi                                   on 2001/07/06  12:42:45
+        Log: Subject: [PATCH lib/Cwd.pm] QNX patch extended for NTO
+             From: Norton Allen <allen@huarp.harvard.edu>
+             Date: Fri, 6 Jul 2001 09:39:57 -0400 (edt)
+             Message-Id: <200107061339.JAA12582@bottesini.harvard.edu>
+     Branch: perl
+          ! utf8.h
+____________________________________________________________________________
+[ 11175] By: jhi                                   on 2001/07/06  12:29:56
+        Log: Retract #11165 since Sarathy pointed out it'll not
+             work properly under threads, the problem should be
+             solved using "the savestack, either via SSNEW() or
+             using a newSVpv()+SAVEFREESV() combo."
+     Branch: perl
+          ! ext/POSIX/POSIX.xs
+____________________________________________________________________________
+[ 11174] By: jhi                                   on 2001/07/06  12:27:31
+        Log: Retract #11125 since NI-S pointed out it'll not work in
+             cases where the extension has their own handcrafted INC
+             et alia.
+     Branch: perl
+          ! lib/ExtUtils/MM_Unix.pm
+____________________________________________________________________________
+[ 11173] By: jhi                                   on 2001/07/06  12:20:50
+        Log: Subject: RE: [PATCH] -I and MakeMaker again
+             From: "Konovalov, Vadim Vladimirovich (Vadim)" <vkonovalov@lucent.com>
+             Date: Fri, 6 Jul 2001 09:18:29 +0200
+             Message-ID: <E3FB32585BF1D411B9E900805FF51A0808C221@RU0022EXCH001U>
+     Branch: perl
+          ! lib/ExtUtils/MM_NW5.pm lib/ExtUtils/MM_VMS.pm
+          ! lib/ExtUtils/MM_Win32.pm
+____________________________________________________________________________
+[ 11172] By: jhi                                   on 2001/07/06  12:18:39
+        Log: (Retracted by #11178)
+             Subject: [PATCH t/op/method.t] SUPER:: strangeness
+             From: Piers Cawley <pdcawley@iterative-software.com>
+             Date: 06 Jul 2001 10:49:01 +0100
+             Message-ID: <m2ith6xu9e.fsf@despairon.bofh.org.uk>
+     Branch: perl
+          ! t/op/method.t
+____________________________________________________________________________
+[ 11171] By: jhi                                   on 2001/07/06  01:38:55
+        Log: VOS README update from Paul Green.
+     Branch: perl
+          ! README.vos
+____________________________________________________________________________
+[ 11170] By: jhi                                   on 2001/07/06  01:19:33
+        Log: Subject: [PATCH README.qnx hints/qnx.sh]
+             From: Norton Allen <allen@huarp.harvard.edu>
+             Message-Id: <200107051755.NAA21422@bottesini.harvard.edu>
+             Date: Thu, 5 Jul 2001 13:55:11 -0400 (edt)
+     Branch: perl
+          ! README.qnx hints/qnx.sh
+____________________________________________________________________________
+[ 11169] By: jhi                                   on 2001/07/06  01:17:43
+        Log: Subject: [PATCH] Doc patch for Tie::Hash
+             From: Artur Bergman <artur@contiller.se>
+             Date: Thu, 05 Jul 2001 22:51:18 +0200
+             Message-ID: <B76A9FE6.1F04%artur@contiller.se>
+     Branch: perl
+          ! lib/Tie/Hash.pm
+____________________________________________________________________________
+[ 11168] By: jhi                                   on 2001/07/06  01:16:27
+        Log: Subject: [PATCH] perlfaq4.pod
+             From: "Liney, Dave" <dave.liney@gbr.conoco.com>
+             Message-ID: <1BB544A41666D311836C00902751FF6D01FD2D07@LONEX02>
+             Date: Thu, 5 Jul 2001 18:44:10 +0100 
+     Branch: perl
+          ! pod/perlfaq4.pod
+____________________________________________________________________________
+[ 11167] By: jhi                                   on 2001/07/06  01:14:41
+        Log: Subject: [PATCH B::Deparse] Make warnings handling more robust
+             From: Robin Houston <robin@kitsite.com>
+             Date: Thu, 5 Jul 2001 18:33:21 +0100
+             Message-ID: <20010705183321.A27345@robin.kitsite.com>
+     Branch: perl
+          ! ext/B/B/Deparse.pm
+____________________________________________________________________________
+[ 11166] By: jhi                                   on 2001/07/06  01:11:50
+        Log: Subject: Re: [PATCH] mkdir() mode argument is missing initial 0
+             From: Abhijit Menon-Sen <ams@wiw.org>
+             Date: Fri, 6 Jul 2001 01:26:32 +0530
+             Message-ID: <20010706012632.A28327@lustre.dyn.wiw.org>
+     Branch: perl
+          ! dump.c op.c op.h opcode.h opcode.pl pod/perldiag.pod pp.sym
+          ! pp_proto.h t/lib/warnings/op t/lib/warnings/toke toke.c
+          ! warnings.pl
+____________________________________________________________________________
+[ 11165] By: jhi                                   on 2001/07/06  00:19:26
+        Log: (Retracted by #11175)
+             Subject: [PATCH ext/POSIX/POSIX.pm] Re: sigaction.t under QNX
+             From: Norton Allen <allen@huarp.harvard.edu>
+             Message-Id: <200107051734.NAA13375@bottesini.harvard.edu>
+             Date: Thu, 5 Jul 2001 13:34:51 -0400 (edt)
+     Branch: perl
+          ! ext/POSIX/POSIX.xs
+____________________________________________________________________________
+[ 11164] By: jhi                                   on 2001/07/06  00:14:57
+        Log: Unterminated C< (noticed by Richard Hatch), and few other
+             small Unicode doc tweaks.
+     Branch: perl
+          ! pod/perlretut.pod
+____________________________________________________________________________
+[ 11163] By: jhi                                   on 2001/07/05  19:33:34
+        Log: More flexible argument understanding; add charblocks() and
+             charscripts(); make charblock() and charscript() two-way;
+             add charinrange(); separate the $Unicode::UCD::VERSION and
+             the version of the Unicode by adding UnicodeVersion().
+     Branch: perl
+          ! lib/Unicode/UCD.pm lib/Unicode/UCD.t
+____________________________________________________________________________
+[ 11162] By: jhi                                   on 2001/07/05  13:38:36
+        Log: Update Unicode::UCD on \p{In...}.
+     Branch: perl
+          ! lib/Unicode/UCD.pm
+____________________________________________________________________________
+[ 11161] By: jhi                                   on 2001/07/05  13:26:00
+        Log: Subject: Re: [PATCH lib/ExtUtils.t] Extra Files for QNX
+             From: Norton Allen <allen@huarp.harvard.edu>
+             Date: Thu, 5 Jul 2001 09:57:14 -0400 (edt)
+             Message-Id: <200107051357.JAA06285@bottesini.harvard.edu>
+     Branch: perl
+          ! lib/ExtUtils/MM_Unix.pm
+____________________________________________________________________________
+[ 11160] By: jhi                                   on 2001/07/05  13:06:53
+        Log: POSIX-BC tweaks from Thomas Dorner.
+     Branch: perl
+          ! hints/posix-bc.sh perlio.h
+____________________________________________________________________________
+[ 11159] By: jhi                                   on 2001/07/05  04:17:18
+        Log: Module updates for the delta.
+     Branch: perl
+          ! pod/perl572delta.pod
+____________________________________________________________________________
+[ 11158] By: jhi                                   on 2001/07/05  03:45:19
+        Log: Subject: [PATCH ext/IO/lib/IO/t/io_sock.t] for QNX
+             From: Norton Allen <allen@huarp.harvard.edu>
+             Message-Id: <200107050259.WAA06843@bottesini.harvard.edu>
+             Date: Wed, 4 Jul 2001 22:59:00 -0400 (edt)
+     Branch: perl
+          ! ext/IO/lib/IO/t/io_sock.t
+____________________________________________________________________________
+[ 11157] By: jhi                                   on 2001/07/05  03:44:19
+        Log: Subject: [PATCH perldiag.pod] Quick fixes
+             From: Simon Cozens <simon@netthink.co.uk>
+             Date: Wed, 4 Jul 2001 20:22:12 +0100
+             Message-ID: <20010704202212.A3690@deep-dark-truthful-mirror>
+     Branch: perl
+          ! pod/perldiag.pod
+____________________________________________________________________________
+[ 11156] By: jhi                                   on 2001/07/05  03:43:28
+        Log: Subject: [PATCH perl@11099]Re: [ID 20010704.003] Taint mode breaks global match
+             From: Radu Greab <radu@netsoft.ro>
+             Date: Wed, 4 Jul 2001 22:13:31 +0300
+             Message-ID: <15171.27355.895094.128142@ix.netsoft.ro>
+     Branch: perl
+          ! op.c sv.c t/op/pos.t
+____________________________________________________________________________
+[ 11155] By: jhi                                   on 2001/07/05  03:40:24
+        Log: Subject: [PATCH] -I and MakeMaker again
+             From: Michael G Schwern <schwern@pobox.com>
+             Date: Wed, 4 Jul 2001 15:03:07 -0400
+             Message-ID: <20010704150307.I20340@blackrider>
+             
+             (and retract #11145)
+     Branch: perl
+          ! ext/util/make_ext lib/ExtUtils/MM_Unix.pm
+          ! lib/ExtUtils/MakeMaker.pm
+____________________________________________________________________________
+[ 11154] By: jhi                                   on 2001/07/05  03:32:43
+        Log: Subject: Re: PERFORCE change 11142 for review
+             From: "Philip Newton" <Philip.Newton@gmx.net>
+             Date: Wed, 4 Jul 2001 20:46:26 +0200
+             Message-Id: <200107041841.VAA25380@taas.iki.fi>
+     Branch: perl
+          ! lib/ExtUtils/MakeMaker.pm
+____________________________________________________________________________
+[ 11153] By: jhi                                   on 2001/07/05  03:29:21
+        Log: Subject: Re: [PATCH 2 pl2pm.PL] (was Re: [PATCH pl2pm.PL] Make pl2pm be nice with 'strict' and 'warnings')
+             From: Jonathan Stowe <gellyfish@gellyfish.com>
+             Date: Mon, 2 Jul 2001 20:45:53 +0100 (BST)
+             Message-ID: <Pine.LNX.4.33.0107022042570.8640-100000@orpheus.gellyfish.com>
+     Branch: perl
+          ! utils/pl2pm.PL
+____________________________________________________________________________
+[ 11152] By: gsar                                  on 2001/07/05  00:52:57
+        Log: fix the binary compatibility issue when building with/without
+             usemymalloc by exporting Perl_malloc() et al as simple wrappers
+             around the system functions (this allows most extensions built
+             using one mode to coexist with perls built in the other mode)
+             
+             XXX the Perl_mfree() wrapper might need to do return(free()) on
+             platforms where Free_t isn't "void"
+     Branch: perl
+          ! embed.h embed.pl makedef.pl proto.h util.c
+____________________________________________________________________________
+[ 11151] By: gsar                                  on 2001/07/05  00:42:49
+        Log: perl built with USE_ITHREADS can deadlock during fork() or backticks
+             since it doesn't ensure threads other than the one calling fork()
+             aren't holding any locks; the fix is to use pthread_atfork() to
+             hold global locks
+             
+             building perl with -Dusemymalloc exacerbates the problem since
+             Perl_malloc() holds a mutex, and perl's exec() calls New()
+             
+             XXX the code in win32thread.h may be needed on platforms that have
+             no pthread_atfork()
+     Branch: perl
+          ! perl.c thread.h win32/win32thread.h
+____________________________________________________________________________
+[ 11150] By: pudge                                 on 2001/07/04  20:07:54
+        Log: Integrate #11009 from maintperl.
+     Branch: maint-5.6/macperl
+         !> lib/ExtUtils/Manifest.pm
+____________________________________________________________________________
+[ 11149] By: pudge                                 on 2001/07/04  19:54:46
+        Log: Flexing my Perforce muscles.
+     Branch: maint-5.6/macperl
+          ! README.macos
+____________________________________________________________________________
+[ 11148] By: jhi                                   on 2001/07/04  17:14:51
+        Log: Update Changes.
+     Branch: perl
+          ! Changes patchlevel.h
+____________________________________________________________________________
+[ 11147] By: jhi                                   on 2001/07/04  16:41:25
+        Log: Metaconfig unit change for #11146.
+     Branch: metaconfig/U/perl
+          ! d_fcntl_can_lock.U
+____________________________________________________________________________
+[ 11146] By: jhi                                   on 2001/07/04  16:36:31
+        Log: Somehow the #ifdefs of the added code (in #11093) made
+             HP-UX to fail the fcntl locking test, without the ifdefs
+             the test seems to be working again.  Reason unknown:
+             HP-UX cc doesn't complain either way.
+     Branch: perl
+          ! Configure
+____________________________________________________________________________
+[ 11145] By: jhi                                   on 2001/07/04  16:08:00
+        Log: PERLRUNINST needed in some spots.
+     Branch: perl
+          ! lib/ExtUtils/MM_Unix.pm
+____________________________________________________________________________
+[ 11144] By: jhi                                   on 2001/07/04  16:07:35
+        Log: gcc -Wall nit.
+     Branch: perl
+          ! pp_hot.c
+____________________________________________________________________________
+[ 11143] By: jhi                                   on 2001/07/04  15:08:26
+        Log: When removing tests updating the test count is a good idea, too.
+     Branch: perl
+          ! lib/Net/t/require.t
+____________________________________________________________________________
+[ 11142] By: jhi                                   on 2001/07/04  14:57:51
+        Log: Document #11134 and add the new symbols to the list of
+             of MakeMaker known ones.
+     Branch: perl
+          ! lib/ExtUtils/MakeMaker.pm
+____________________________________________________________________________
+[ 11141] By: jhi                                   on 2001/07/04  14:34:11
+        Log: Microperl update.
+     Branch: perl
+          ! uconfig.h
+____________________________________________________________________________
+[ 11140] By: jhi                                   on 2001/07/04  14:32:27
+        Log: Update the libnet tests as per #11138.
+     Branch: perl
+          - lib/Net/t/ph.t
+          ! MANIFEST lib/Net/t/require.t
+____________________________________________________________________________
+[ 11139] By: jhi                                   on 2001/07/04  14:14:33
+        Log: Regen toc and modlib.
+     Branch: perl
+          ! pod/perlmodlib.pod pod/perltoc.pod
+____________________________________________________________________________
+[ 11138] By: jhi                                   on 2001/07/04  14:10:38
+        Log: Remove DummyInetd, PH, and SNPP from the libnet, as per
+             Graham's request.
+     Branch: perl
+          - lib/Net/DummyInetd.pm lib/Net/PH.pm lib/Net/SNPP.pm
+          ! MANIFEST
+____________________________________________________________________________
+[ 11137] By: jhi                                   on 2001/07/04  14:06:35
+        Log: Add the OS/390 harness results to the delta.
+     Branch: perl
+          ! pod/perl572delta.pod
+____________________________________________________________________________
+[ 11136] By: jhi                                   on 2001/07/04  13:59:01
+        Log: Avoid the two study tests in OS/390 until the bug has been solved.
+     Branch: perl
+          ! t/op/study.t
+____________________________________________________________________________
+[ 11135] By: jhi                                   on 2001/07/04  13:49:08
+        Log: DOS/DJGPP tweaks from Laszlo Molnar.
+     Branch: perl
+          ! AUTHORS djgpp/djgppsed.sh hints/dos_djgpp.sh t/op/write.t
+____________________________________________________________________________
+[ 11134] By: jhi                                   on 2001/07/04  13:47:46
+        Log: Subject: [PATCH lib/ExtUtils/MM_Unix.pm and others] Fixing extra -I's with PERL_CORE
+             From: Michael G Schwern <schwern@pobox.com>
+             Date: Wed, 4 Jul 2001 00:01:16 -0400
+             Message-ID: <20010704000116.C591@blackrider>
+     Branch: perl
+          ! ext/util/make_ext lib/ExtUtils.t lib/ExtUtils/MM_Unix.pm
+____________________________________________________________________________
+[ 11133] By: jhi                                   on 2001/07/04  01:55:20
+        Log: The #11132 missed singleton characters (not part
+             of a unilo..unihi range) in Unicode scripts.
+     Branch: perl
+          ! lib/unicode/In/0.pl lib/unicode/In/1.pl lib/unicode/In/10.pl
+          ! lib/unicode/In/11.pl lib/unicode/In/12.pl lib/unicode/In/13.pl
+          ! lib/unicode/In/15.pl lib/unicode/In/16.pl lib/unicode/In/17.pl
+          ! lib/unicode/In/18.pl lib/unicode/In/19.pl lib/unicode/In/20.pl
+          ! lib/unicode/In/21.pl lib/unicode/In/24.pl lib/unicode/In/29.pl
+          ! lib/unicode/In/3.pl lib/unicode/In/30.pl lib/unicode/In/34.pl
+          ! lib/unicode/In/35.pl lib/unicode/In/37.pl lib/unicode/In/39.pl
+          ! lib/unicode/In/4.pl lib/unicode/In/5.pl lib/unicode/In/6.pl
+          ! lib/unicode/In/8.pl lib/unicode/In/9.pl lib/unicode/Scripts.pl
+          ! lib/unicode/mktables.PL t/op/pat.t
+____________________________________________________________________________
+[ 11132] By: jhi                                   on 2001/07/04  01:32:11
+        Log: Support preferentially the Unicode 'scripts' definition
+             in the \p{In...} notation since according to Unicode the
+             scripts concept is more natural for matching than using
+             the somewhat artificial block names.  The block names are
+             still available, though, and if there's a name conflict,
+             the scripts one wins and the blocks one has to do with
+             'Block' appended to its name.  For more information see
+             
+             http://www.unicode.org/unicode/reports/tr24/
+     Branch: perl
+          + lib/unicode/In/100.pl lib/unicode/In/101.pl
+          + lib/unicode/In/102.pl lib/unicode/In/103.pl
+          + lib/unicode/In/104.pl lib/unicode/In/105.pl
+          + lib/unicode/In/106.pl lib/unicode/In/107.pl
+          + lib/unicode/In/108.pl lib/unicode/In/109.pl
+          + lib/unicode/In/110.pl lib/unicode/In/111.pl
+          + lib/unicode/In/112.pl lib/unicode/In/113.pl
+          + lib/unicode/In/114.pl lib/unicode/In/115.pl
+          + lib/unicode/In/116.pl lib/unicode/In/117.pl
+          + lib/unicode/In/118.pl lib/unicode/In/119.pl
+          + lib/unicode/In/120.pl lib/unicode/In/121.pl
+          + lib/unicode/In/122.pl lib/unicode/In/123.pl
+          + lib/unicode/In/124.pl lib/unicode/In/125.pl
+          + lib/unicode/In/126.pl lib/unicode/In/127.pl
+          + lib/unicode/In/128.pl lib/unicode/In/129.pl
+          + lib/unicode/In/130.pl lib/unicode/In/131.pl
+          + lib/unicode/In/132.pl lib/unicode/In/133.pl
+          + lib/unicode/In/134.pl lib/unicode/In/135.pl
+          + lib/unicode/In/96.pl lib/unicode/In/97.pl lib/unicode/In/98.pl
+          + lib/unicode/In/99.pl lib/unicode/Scripts.pl
+          ! (edit 106 files)
+____________________________________________________________________________
+[ 11131] By: jhi                                   on 2001/07/03  23:02:02
+        Log: Better document the difference between a block and a script.
+     Branch: perl
+          ! lib/Unicode/UCD.pm
+____________________________________________________________________________
+[ 11130] By: jhi                                   on 2001/07/03  22:49:15
+        Log: Subject: [ perl 5.6.1 ] CPAN.pm doc patch
+             From: Elaine -HFB- Ashton <elaine@chaos.wustl.edu>
+             Date: Tue, 3 Jul 2001 15:04:23 -0500
+             Message-ID: <20010703150423.C9787@chaos.wustl.edu>
+     Branch: perl
+          ! lib/CPAN.pm
+____________________________________________________________________________
+[ 11129] By: jhi                                   on 2001/07/03  22:45:41
+        Log: Add tests for charscript().
+     Branch: perl
+          ! lib/Unicode/UCD.pm lib/Unicode/UCD.t
+____________________________________________________________________________
+[ 11128] By: jhi                                   on 2001/07/03  20:41:54
+        Log: Add charscript() to get the UTR#24 script names of characters.
+     Branch: perl
+          ! lib/Unicode/UCD.pm
+____________________________________________________________________________
+[ 11127] By: jhi                                   on 2001/07/03  19:53:29
+        Log: Todo updates.
+     Branch: perl
+          ! pod/perltodo.pod
+____________________________________________________________________________
+[ 11126] By: jhi                                   on 2001/07/03  19:45:30
+        Log: Unicode::UCD updates.
+     Branch: perl
+          ! lib/Unicode/UCD.pm
+____________________________________________________________________________
+[ 11125] By: jhi                                   on 2001/07/03  16:12:20
+        Log: Subject: MakeMaker should pass through DEFINE and INC to subdirs
+             From: Alan Burlison <Alan.Burlison@sun.com>
+             Date: Tue, 03 Jul 2001 15:20:13 +0100
+             Message-ID: <3B41D49D.A923D4F9@sun.com>
+     Branch: perl
+          ! lib/ExtUtils/MM_Unix.pm
+____________________________________________________________________________
+[ 11124] By: jhi                                   on 2001/07/03  16:06:53
+        Log: Subject: Patch needed for UTS
+             From: hom00@utsglobal.com (Hal Morris)
+             Date: Tue, 3 Jul 2001 09:38:22 -0700 (PDT)
+             Message-Id: <200107031638.JAA11998@cepheus.utsglobal.com>
+             
+             Replace #11113 with a better version.
+     Branch: perl
+          ! perl.h
+____________________________________________________________________________
+[ 11123] By: jhi                                   on 2001/07/03  16:04:49
+        Log: Subject: Re: POINTERRIGOR
+             From: Andy Dougherty <doughera@lafayette.edu>
+             Date: Tue, 3 Jul 2001 11:49:28 -0400 (EDT)
+             Message-ID: <Pine.SOL.4.10.10107031040030.1982-100000@maxwell.phys.lafayette.edu>
+     Branch: perl
+          ! util.c
+____________________________________________________________________________
+[ 11122] By: jhi                                   on 2001/07/03  16:03:31
+        Log: Subject: Re: [PATCH @11016] Fixes compile errors in four files
+             From: "Philip Newton" <pnewton@gmx.de>
+             Date: Tue, 3 Jul 2001 17:03:34 +0200
+             Message-ID: <3B41FAE6.29564.660E117@localhost>
+     Branch: perl
+          ! pp_hot.c
+____________________________________________________________________________
+[ 11121] By: jhi                                   on 2001/07/03  13:26:08
+        Log: Typos.
+     Branch: perl
+          ! INSTALL
+____________________________________________________________________________
+[ 11120] By: jhi                                   on 2001/07/03  11:34:47
+        Log: Subject: [PATCH 5.6.1] debugger fixes
+             From: Ilya Zakharevich <ilya@math.ohio-state.edu>
+             Date: Tue, 3 Jul 2001 03:38:18 -0400
+             Message-ID: <20010703033818.A16788@math.ohio-state.edu>
+             
+             The $^S is working again.
+     Branch: perl
+          ! lib/perl5db.pl
+____________________________________________________________________________
+[ 11119] By: jhi                                   on 2001/07/03  11:33:27
+        Log: Subject: Re: [PATCH 5.6.1] OS/2 improvements
+             From: Ilya Zakharevich <ilya@math.ohio-state.edu>
+             Date: Tue, 3 Jul 2001 03:34:06 -0400
+             Message-ID: <20010703033406.A16776@math.ohio-state.edu>
+     Branch: perl
+          ! os2/OS2/Process/Process.pm
+____________________________________________________________________________
+[ 11118] By: jhi                                   on 2001/07/03  11:29:54
+        Log: Subject: [PATCH bleadperl] Bad lishp in change 11084
+             From: "Philip Newton" <Philip.Newton@gmx.net>
+             Date: Tue, 3 Jul 2001 09:11:27 +0200
+             Message-Id: <200107030706.KAA04596@taas.iki.fi>
+     Branch: perl
+          ! lib/FindBin.pm
+____________________________________________________________________________
+[ 11117] By: jhi                                   on 2001/07/03  11:25:14
+        Log: Delta delta.
+     Branch: perl
+          ! pod/perl572delta.pod
+____________________________________________________________________________
+[ 11116] By: jhi                                   on 2001/07/02  23:06:50
+        Log: Metaconfig unit change for 11115.
+     Branch: metaconfig
+          ! U/modified/libc.U
+____________________________________________________________________________
+[ 11115] By: jhi                                   on 2001/07/02  23:06:27
+        Log: Whitespace allowed at the ends of /lib/syscalls.exp lines
+             (from Richard Hatch) (this was the cause of pipes() and
+             times() myeteriously not being found)
+     Branch: perl
+          ! Configure
+____________________________________________________________________________
+[ 11114] By: jhi                                   on 2001/07/02  22:58:41
+        Log: Retract #10142, the real culprit found by Richard Hatch,
+             coming soon to Configure near you.
+     Branch: perl
+          ! hints/aix.sh
+____________________________________________________________________________
+[ 11113] By: jhi                                   on 2001/07/02  22:56:09
+        Log: (Replaced by #11124) UTS workaround from Hal Morris.
+     Branch: perl
+          ! perl.h
+____________________________________________________________________________
+[ 11112] By: jhi                                   on 2001/07/02  22:53:29
+        Log: Subject: [PATCH] grok not grocking correctly
+             From: Nicholas Clark <nick@ccl4.org>
+             Date: Tue, 3 Jul 2001 00:19:08 +0100
+             Message-ID: <20010703001908.H59620@plum.flirble.org>
+     Branch: perl
+          ! numeric.c
+____________________________________________________________________________
+[ 11111] By: jhi                                   on 2001/07/02  22:48:42
+        Log: Subject: [PATCH Deparse.t] test just-posted patches
+             From: Robin Houston <robin@kitsite.com>
+             Date: Mon, 2 Jul 2001 23:46:15 +0100
+             Message-Id: <E15HCUN-0000Rh-00.2001-07-02-23-48-19@mail18.svr.pol.co.uk>
+     Branch: perl
+          ! ext/B/Deparse.t
+____________________________________________________________________________
+[ 11110] By: jhi                                   on 2001/07/02  22:27:10
+        Log: Subject: [PATCH toke.c] autosplit into @F
+             From: Robin Houston <robin@kitsite.com>
+             Date: Mon, 2 Jul 2001 23:18:20 +0100
+             Message-Id: <E15HC3M-0007jL-00.2001-07-02-23-20-24@mail18.svr.pol.co.uk>
+     Branch: perl
+          ! perl.c toke.c
+____________________________________________________________________________
+[ 11109] By: jhi                                   on 2001/07/02  22:25:03
+        Log: Subject: [PATCH B::Deparse] hash key auto-quoting
+             From: Robin Houston <robin@kitsite.com>
+             Date: Mon, 2 Jul 2001 23:00:48 +0100
+             Message-Id: <E15HBmR-0006mc-00.2001-07-02-23-02-55@mail18.svr.pol.co.uk>
+     Branch: perl
+          ! ext/B/B/Deparse.pm
+____________________________________________________________________________
+[ 11108] By: jhi                                   on 2001/07/02  19:21:18
+        Log: Subject: Re: [PATCH perlsnap] '-' !~ /\w/
+             From: "Philip Newton" <Philip.Newton@gmx.net>
+             Date: Mon, 2 Jul 2001 22:06:22 +0200
+             (no Message-Id)
+     Branch: perl
+          ! ext/NDBM_File/hints/linux.pl
+____________________________________________________________________________
+[ 11107] By: jhi                                   on 2001/07/02  19:19:25
+        Log: Subject: Re: Fixed pack problem - sort of
+             From: Nicholas Clark <nick@ccl4.org>
+             Date: Mon, 2 Jul 2001 20:59:20 +0100
+             Message-ID: <20010702205919.F59620@plum.flirble.org>
+     Branch: perl
+          ! pp_pack.c t/op/pack.t
+____________________________________________________________________________
+[ 11106] By: jhi                                   on 2001/07/02  19:18:28
+        Log: Subject: Re: [PATCH 5.6.1] OS/2 cwd
+             From: Ilya Zakharevich <ilya@math.ohio-state.edu>
+             Date: Mon, 2 Jul 2001 15:45:41 -0400
+             Message-ID: <20010702154541.B24295@math.ohio-state.edu>
+     Branch: perl
+          ! os2/os2.c
+____________________________________________________________________________
+[ 11105] By: jhi                                   on 2001/07/02  19:17:27
+        Log: (Mistaken retraction)
+     Branch: perl
+          ! utils/pl2pm.PL
+____________________________________________________________________________
+[ 11104] By: jhi                                   on 2001/07/02  18:56:15
+        Log: Detypo in #11103.
+     Branch: perl
+          ! utils/pl2pm.PL
+____________________________________________________________________________
+[ 11103] By: jhi                                   on 2001/07/02  18:54:53
+        Log: Subject: [PATCH 2 pl2pm.PL] (was Re: [PATCH pl2pm.PL] Make pl2pm be nice with 'strict' and 'warnings')
+             From: Jonathan Stowe <gellyfish@gellyfish.com>
+             Date: Mon, 2 Jul 2001 19:17:21 +0100 (BST)
+             Message-ID: <Pine.LNX.4.33.0107021904530.7401-100000@orpheus.gellyfish.com>
+     Branch: perl
+          ! utils/pl2pm.PL
+____________________________________________________________________________
+[ 11102] By: jhi                                   on 2001/07/02  18:16:09
+        Log: Subject: [PATCH perl@11059] UCD.pm: if at first you don't succeed, croak?
+             From: "Craig A. Berry" <craigberry@mac.com>
+             Date: Mon, 02 Jul 2001 14:11:23 -0500
+             Message-Id: <5.1.0.14.0.20010702140058.01b6c9c0@exchi01>
+     Branch: perl
+          ! lib/Unicode/UCD.pm
+____________________________________________________________________________
+[ 11101] By: jhi                                   on 2001/07/02  18:14:51
+        Log: Subject: [PATCH] Re: op/numconvert.t failures
+             From: Nicholas Clark <nick@ccl4.org>
+             Date: Mon, 2 Jul 2001 20:10:48 +0100
+             Message-ID: <20010702201048.E59620@plum.flirble.org>
+     Branch: perl
+          ! t/op/numconvert.t
+____________________________________________________________________________
+[ 11100] By: jhi                                   on 2001/07/02  17:51:44
+        Log: Update Changes.
+     Branch: perl
+          ! Changes patchlevel.h
+____________________________________________________________________________
+[ 11099] By: jhi                                   on 2001/07/02  17:46:31
+        Log: Retract #11055, didn't help much (2736 bytes vs 2725 bytes leaked).
+             The real fix must be more involved.  The line of code all the leaky
+             call stacks seem to go through is op.c:2949, the PmopSTASH_set()
+             line of Perl_newPMOP().
+     Branch: perl
+          ! op.h
+____________________________________________________________________________
+[ 11098] By: jhi                                   on 2001/07/02  17:37:44
+        Log: Based on
+             
+             Subject: Re: sizeof(struct sembuf)
+             From: Nicholas Clark <nick@ccl4.org>
+             Date: Sun, 1 Jul 2001 22:26:48 +0100
+             Message-ID: <20010701222648.W59620@plum.flirble.org>
+             
+             but do semop() always the slow way.
+     Branch: perl
+          ! doio.c
+____________________________________________________________________________
+[ 11097] By: jhi                                   on 2001/07/02  17:22:14
+        Log: Subject: [PATCH] Encode/Tcl.t, for esc-seq encodings
+             From: SADAHIRO Tomoyuki <BQW10602@nifty.com>
+             Date: Tue, 03 Jul 2001 00:56:30 +0900
+             Message-Id: <20010703005600.2225.BQW10602@nifty.com>
+     Branch: perl
+          ! ext/Encode/Encode/Tcl.t
+____________________________________________________________________________
+[ 11096] By: jhi                                   on 2001/07/02  17:11:24
+        Log: Subject: [PATCH] Encode/Tcl.pm, continuous sequences
+             From: SADAHIRO Tomoyuki <BQW10602@nifty.com>
+             Date: Tue, 03 Jul 2001 00:55:46 +0900
+             Message-Id: <20010703005516.2222.BQW10602@nifty.com>
+     Branch: perl
+          ! ext/Encode/Encode/Tcl.pm
+____________________________________________________________________________
+[ 11095] By: jhi                                   on 2001/07/02  17:07:14
+        Log: Regen api and toc.
+     Branch: perl
+          ! pod/perlapi.pod pod/perltoc.pod
+____________________________________________________________________________
+[ 11094] By: jhi                                   on 2001/07/02  16:29:42
+        Log: Metaconfig unit change for #11093.
+     Branch: metaconfig/U/perl
+          ! d_fcntl_can_lock.U
+____________________________________________________________________________
+[ 11093] By: jhi                                   on 2001/07/02  16:28:56
+        Log: The fcntl locking test may hang if NFS locking messed up;
+             break out with alarm(10).
+     Branch: perl
+          ! Configure
+____________________________________________________________________________
+[ 11092] By: jhi                                   on 2001/07/02  14:11:31
+        Log: Move the mdelete.bat from win32/bin to win32.
+     Branch: perl
+          ! MANIFEST
+____________________________________________________________________________
+[ 11091] By: jhi                                   on 2001/07/02  14:10:01
+        Log: Typo in #11083.
+     Branch: perl
+          ! ext/Time/Piece/Piece.t
+____________________________________________________________________________
+[ 11090] By: jhi                                   on 2001/07/02  13:36:58
+        Log: Netware tweaks from Guruprasad.
+     Branch: perl
+          - NetWare/perlsdio.h
+          ! MANIFEST NetWare/Makefile NetWare/interface.c
+          ! NetWare/interface.h NetWare/iperlhost.h NetWare/nwtinfo.h
+          ! perlsdio.h
+____________________________________________________________________________
+[ 11089] By: jhi                                   on 2001/07/02  13:25:40
+        Log: Subject: Re: [PATH] shared -> unique;
+             From: Abhijit Menon-Sen <ams@wiw.org>
+             Date: Wed, 27 Jun 2001 03:51:27 +0530
+             Message-ID: <20010627035127.A17623@lustre.lustre.dyn.wiw.org>
+     Branch: perl
+          ! dump.c gv.c gv.h op.c pp_sys.c sv.c toke.c xsutils.c
+____________________________________________________________________________
+[ 11088] By: jhi                                   on 2001/07/02  13:24:27
+        Log: Subject: Re: AIX / gcc-3.0
+             From: "H.Merijn Brand" <h.m.brand@hccnet.nl>
+             Date: Mon, 02 Jul 2001 15:20:21 +0200
+             Message-Id: <20010702151904.49BB.H.M.BRAND@hccnet.nl>
+     Branch: perl
+          ! hints/aix.sh
+____________________________________________________________________________
+[ 11087] By: jhi                                   on 2001/07/02  13:23:21
+        Log: Subject: Re: Bug report: split splits on wrong pattern
+             From: Abhijit Menon-Sen <ams@wiw.org>
+             Message-ID: <20010702163133.A23186@lustre.dyn.wiw.org>
+             Date: Mon, 2 Jul 2001 16:31:33 +0530
+     Branch: perl
+          ! pp_ctl.c
+____________________________________________________________________________
+[ 11086] By: jhi                                   on 2001/07/02  13:22:30
+        Log: Subject: [PATCH 5.6.1] test harness
+             From: Ilya Zakharevich <ilya@math.ohio-state.edu>
+             Date: Mon, 2 Jul 2001 06:29:21 -0400
+             Message-ID: <20010702062921.A1810@math.ohio-state.edu>
+     Branch: perl
+          ! lib/Test/Harness.pm
+____________________________________________________________________________
+[ 11085] By: jhi                                   on 2001/07/02  13:21:39
+        Log: Subject: [PATCH 5.6.1] debugger goof
+             From: Ilya Zakharevich <ilya@math.ohio-state.edu>
+             Date: Mon, 2 Jul 2001 06:27:22 -0400
+             Message-ID: <20010702062722.A1746@math.ohio-state.edu>
+     Branch: perl
+          ! lib/perl5db.pl
+____________________________________________________________________________
+[ 11084] By: jhi                                   on 2001/07/02  13:20:50
+        Log: Subject: [PATCH 5.6.1] OS/2 cwd
+             From: Ilya Zakharevich <ilya@math.ohio-state.edu>
+             Date: Mon, 2 Jul 2001 06:21:17 -0400
+             Message-ID: <20010702062117.A1401@math.ohio-state.edu>
+     Branch: perl
+          ! lib/Cwd.pm lib/File/Find/taint.t lib/FindBin.pm os2/os2.c
+____________________________________________________________________________
+[ 11083] By: jhi                                   on 2001/07/02  13:19:18
+        Log: Make #11082 more OS/2-specific.
+     Branch: perl
+          ! ext/Time/Piece/Piece.t
+____________________________________________________________________________
+[ 11082] By: jhi                                   on 2001/07/02  13:14:36
+        Log: Subject: [PATCH 5.6.1] OS/2 gmtime()
+             From: Ilya Zakharevich <ilya@math.ohio-state.edu>
+             Date: Mon, 2 Jul 2001 06:06:34 -0400
+             Message-ID: <20010702060634.A1356@math.ohio-state.edu>
+     Branch: perl
+          ! ext/Time/Piece/Piece.t
+____________________________________________________________________________
+[ 11081] By: jhi                                   on 2001/07/02  13:13:08
+        Log: Subject: [PATCH B::Deparse] version number & changes
+             From: Robin Houston <robin@kitsite.com>  
+             Date: Sun, 1 Jul 2001 17:17:29 +0100
+             Message-ID: <20010701171729.A30678@puffinry.freeserve.co.uk>
+     Branch: perl
+          ! ext/B/B/Deparse.pm
+____________________________________________________________________________
+[ 11080] By: jhi                                   on 2001/07/02  13:11:48
+        Log: Subject: a small fix.
+             From: "Konovalov, Vadim Vladimirovich (Vadim)" <vkonovalov@lucent.com>
+             Date: Mon, 2 Jul 2001 12:17:53 +0200
+             Message-ID: <E3FB32585BF1D411B9E900805FF51A08074B35@RU0022EXCH001U>
+     Branch: perl
+          ! ext/Thread/Thread.xs
+____________________________________________________________________________
+[ 11079] By: jhi                                   on 2001/07/02  13:10:39
+        Log: Subject: RE: perl@10907
+             From: "Konovalov, Vadim Vladimirovich (Vadim)" <vkonovalov@lucent.com>
+             Date: Mon, 2 Jul 2001 12:06:16 +0200
+             Message-ID: <E3FB32585BF1D411B9E900805FF51A08074B2C@RU0022EXCH001U>
+             
+             Borland C vs PerlIO.
+     Branch: perl
+          ! win32/config.bc win32/config_H.bc
+____________________________________________________________________________
+[ 11078] By: jhi                                   on 2001/07/02  13:03:44
+        Log: Subject: [PATCH] Report /pro/3gl/CPAN/perl-5.7.1
+             From: "H.M. Brand" <merijn@l1.procura.nl>
+             Date: Mon, 02 Jul 2001 11:18:57 +0200
+             Message-Id: <20010702100811.4999.MERIJN@l1.procura.nl>
+     Branch: perl
+          ! t/op/write.t
+____________________________________________________________________________
+[ 11077] By: jhi                                   on 2001/07/02  12:58:27
+        Log: Subject: [PATCH] Deleting ext/util/mkbootstrap
+             From: Michael G Schwern <schwern@pobox.com>
+             Date: Mon, 2 Jul 2001 00:26:24 -0400
+             Message-ID: <20010702002624.A18302@blackrider>
+     Branch: perl
+          - ext/util/mkbootstrap
+____________________________________________________________________________
+[ 11076] By: jhi                                   on 2001/07/02  12:56:20
+        Log: Subject: [PATCH op.h] v minor comment tweak
+             From: Robin Houston <robin@puffinry.freeserve.co.uk>
+             Date: Mon, 2 Jul 2001 00:42:01 +0100
+             Message-Id: <E15GqxK-0006WZ-00.2001-07-02-00-48-46@mail18.svr.pol.co.uk>
+     Branch: perl
+          ! op.h
+____________________________________________________________________________
+[ 11075] By: jhi                                   on 2001/07/02  12:53:48
+        Log: SysV IPC semops use native shorts, not forced-to-16-bit-shorts.
+     Branch: perl
+          ! pod/perlfunc.pod
+____________________________________________________________________________
+[ 11074] By: jhi                                   on 2001/07/02  12:52:28
+        Log: Subject: Re: sizeof(struct sembuf)
+             From: Nicholas Clark <nick@ccl4.org>
+             Date: Sun, 1 Jul 2001 19:23:16 +0100
+             Message-ID: <20010701192316.V59620@plum.flirble.org>
+             
+             s/signaling/signalling/
+     Branch: perl
+          ! pod/perlfunc.pod
+____________________________________________________________________________
+[ 11073] By: jhi                                   on 2001/07/02  12:49:51
+        Log: Subject: [PATCH perlsnap] Suggestion for mnemonic for $^N
+             From: "Philip Newton" <Philip.Newton@gmx.net>
+             Date: Sun, 1 Jul 2001 09:37:56 +0200
+             Message-Id: <200107010733.KAA03920@taas.iki.fi>
+     Branch: perl
+          ! pod/perlvar.pod
+____________________________________________________________________________
+[ 11072] By: jhi                                   on 2001/07/02  12:48:03
+        Log: Subject: [PATCH perlsnap] /^qnx|nto$/ --> /^(?:qnx|nto)$/
+             From: "Philip Newton" <Philip.Newton@gmx.net>
+             Date: Sun, 1 Jul 2001 09:37:56 +0200
+             Message-Id: <200107010733.KAA03925@taas.iki.fi>
+     Branch: perl
+          ! lib/ExtUtils/MM_Unix.pm lib/File/Spec/Unix.pm
+____________________________________________________________________________
+[ 11071] By: jhi                                   on 2001/07/02  12:45:12
+        Log: Metaconfig unit change for #11070.
+     Branch: metaconfig
+          ! U/compline/randfunc.U
+____________________________________________________________________________
+[ 11070] By: jhi                                   on 2001/07/02  12:43:58
+        Log: Subject: [PATCH perlsnap] its --> it's --> its
+             From: "Philip Newton" <Philip.Newton@gmx.net>
+             Date: Sun, 1 Jul 2001 09:37:56 +0200
+             Message-Id: <200107010733.KAA03914@taas.iki.fi>
+     Branch: perl
+          ! Porting/config_H
+____________________________________________________________________________
+[ 11069] By: jhi                                   on 2001/07/02  12:01:52
+        Log: Sync with Sarathy; integrate with perlio.
+     Branch: perl
+         !> gv.c
+____________________________________________________________________________
+[ 11068] By: gsar                                  on 2001/07/02  08:07:54
+        Log: regenerate win32/config_H.?c files
+     Branch: perl
+          ! win32/config_H.bc win32/config_H.gc win32/config_H.vc
+____________________________________________________________________________
+[ 11067] By: gsar                                  on 2001/07/02  08:03:55
+        Log: rename s/sv_getcwd/getcwd_sv/ for better conformance to existing
+             naming discipline
+             
+             win32 fix: enable getcwd_sv() to work on windows (POSIX.t was failing
+             because of this)
+             
+             fix a warning about "fd" being used without being set in Cwd.xs
+     Branch: perl
+          ! embed.h embed.pl ext/Cwd/Cwd.xs ext/POSIX/POSIX.t
+          ! ext/POSIX/POSIX.xs global.sym objXSUB.h perlapi.c
+          ! pod/perlapi.pod proto.h util.c win32/config.bc win32/config.gc
+          ! win32/config.vc
+____________________________________________________________________________
+[ 11066] By: gsar                                  on 2001/07/02  07:12:10
+        Log: win32 fixes: fix various syntax errors ("no preprocessor directives
+             within macro arguments") and warnings ("unary minus applied to
+             unsigned type", among others)
+     Branch: perl
+          ! gv.c hv.c op.c pp.c sv.c toke.c
+____________________________________________________________________________
+[ 11065] By: gsar                                  on 2001/07/02  06:26:22
+        Log: win32 fixes: more spurious CRs
+     Branch: perl
+          ! win32/mdelete.bat
+____________________________________________________________________________
+[ 11064] By: gsar                                  on 2001/07/02  06:25:22
+        Log: win32 tweaks: remove extra CRs from makefile.mk; move mdelete.bat
+             from win32/bin (or it gets deleted by distclean); don't delete
+             lib/Cwd.pm during distclean; mdelete.bat doesn't work properly on
+             NT (should be made Win9x specific, and added to makefile.mk)
+     Branch: perl
+         +> win32/mdelete.bat
+          - win32/bin/mdelete.bat
+          ! win32/Makefile win32/makefile.mk
+____________________________________________________________________________
+[ 11063] By: nick                                  on 2001/07/01  18:54:09
+        Log: Quick for for #ifdef mess
+     Branch: perlio
+          ! gv.c
+____________________________________________________________________________
+[ 11062] By: nick                                  on 2001/07/01  18:47:42
+        Log: Raw integrate - does not build #if mess in gv.c
+     Branch: perlio
+         !> (integrate 29 files)
+____________________________________________________________________________
+[ 11061] By: jhi                                   on 2001/07/01  15:20:38
+        Log: Make 'compile' target a little less broken.
+             Still very broken, though: -Wall warnings from
+             the generated code, boot_Foo prototypes missing,
+             can't autoload Fcntl::SEEK_CUR et alia, ...
+     Branch: perl
+          ! ext/B/B/C.pm pod/Makefile.SH t/TEST utils/Makefile
+          ! utils/perlcc.PL x2p/Makefile.SH
+____________________________________________________________________________
+[ 11060] By: jhi                                   on 2001/07/01  14:04:20
+        Log: Upgrade to Storable 1.0.12, from Raphael Manfredi.
+     Branch: perl
+          ! ext/Storable/ChangeLog ext/Storable/Storable.pm
+          ! ext/Storable/Storable.xs ext/Storable/t/freeze.t
+____________________________________________________________________________
+[ 11059] By: jhi                                   on 2001/07/01  05:02:59
+        Log: Update Changes.
+     Branch: perl
+          ! Changes patchlevel.h
+____________________________________________________________________________
 [ 11058] By: jhi                                   on 2001/07/01  04:57:05
         Log: Still one typo, regen toc.
      Branch: perl
index f91462e..87547b0 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -20,7 +20,7 @@
 
 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
 #
-# Generated on Fri Jun 29 17:44:53 EET DST 2001 [metaconfig 3.0 PL70]
+# Generated on Wed Jul  4 20:30:41 EET DST 2001 [metaconfig 3.0 PL70]
 # (with additional metaconfig patches by perlbug@perl.org)
 
 cat >c1$$ <<EOF
@@ -5576,7 +5576,7 @@ 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
+       $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*[        ]*$/\1/p' /lib/syscalls.exp >>libc.list
 fi
 ;;
 esac
@@ -9860,10 +9860,12 @@ eval $inlibc
 
 echo " "
 : See if fcntl-based locking works.
-$cat >try.c <<'EOCP'
+$cat >try.c <<EOCP
 #include <stdlib.h>
 #include <unistd.h>
 #include <fcntl.h>
+#include <signal.h>
+$signal_t blech(x) int x; { exit(3); }
 int main() {
 #if defined(F_SETLK) && defined(F_SETLKW)
      struct flock flock;
@@ -9872,6 +9874,8 @@ int main() {
      flock.l_type = F_RDLCK;
      flock.l_whence = SEEK_SET;
      flock.l_start = flock.l_len = 0;
+     signal(SIGALRM, blech);
+     alarm(10);
      retval = fcntl(fd, F_SETLK, &flock);
      close(fd);
      (retval < 0 ? exit(2) : exit(0));
@@ -9891,6 +9895,18 @@ case "$d_fcntl" in
                else
                        echo "Nope, it didn't work."
                        val="$undef"
+                       case "$?" in
+                       3) $cat >&4 <<EOM
+***
+*** I had to forcibly timeout from fcntl(..., F_SETLK, ...).
+*** This is (almost) impossible.
+*** If your NFS lock daemons are not feeling well, something like
+*** this may happen, please investigate.  Cannot continue, aborting.
+***
+EOM
+                               exit 1
+                               ;;
+                       esac
                fi
        else
                echo "I'm unable to compile the test program, so I'll assume not."
diff --git a/INSTALL b/INSTALL
index f6801f7..312b101 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -1416,7 +1416,7 @@ Study also how other non-UNIX ports have solved problems.
 
 =head1 suidperl
 
-suiperl is an optional component, which is built or installed by default.
+suidperl is an optional component, which is built or installed by default.
 From perlfaq1:
 
        On some systems, setuid and setgid scripts (scripts written
@@ -1750,7 +1750,7 @@ the main Makefile.
 
 Since the functionality is so lacking, it must be considered
 highly experimental.  It is so experimental that it is not even
-mentioned during an interactive Configure session, a direct comand
+mentioned during an interactive Configure session, a direct command
 line invocation (detailed shortly) is required to access the
 functionality.
 
index 12b7047..118481f 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -550,7 +550,6 @@ ext/Time/Piece/Piece.xs             Time::Piece extension
 ext/Time/Piece/README          Time::Piece extension
 ext/Time/Piece/Seconds.pm      Time::Piece extension
 ext/util/make_ext              Used by Makefile to execute extension Makefiles
-ext/util/mkbootstrap           Turns ext/*/*_BS into bootstrap info
 ext/XS/Typemap/Makefile.PL     XS::Typemap extension
 ext/XS/Typemap/README          XS::Typemap extension
 ext/XS/Typemap/stdio.c         XS::Typemap extension
@@ -1005,7 +1004,6 @@ lib/Net/demos/smtp.self           libnet
 lib/Net/demos/snpp             libnet
 lib/Net/demos/time             libnet
 lib/Net/Domain.pm              libnet
-lib/Net/DummyInetd.pm          libnet
 lib/Net/FTP.pm                 libnet
 lib/Net/FTP/A.pm               libnet
 lib/Net/FTP/dataconn.pm                libnet
@@ -1021,7 +1019,6 @@ lib/Net/netent.pm         By-name interface to Perl's builtin getnet*
 lib/Net/netent.t               See if Net::netent works
 lib/Net/Netrc.pm               libnet
 lib/Net/NNTP.pm                        libnet
-lib/Net/PH.pm                  libnet
 lib/Net/Ping.pm                        Hello, anybody home?
 lib/Net/POP3.pm                        libnet
 lib/Net/protoent.pm            By-name interface to Perl's builtin getproto*
@@ -1031,11 +1028,9 @@ lib/Net/README.libnet            libnet
 lib/Net/servent.pm             By-name interface to Perl's builtin getserv*
 lib/Net/servent.t              See if Net::servtent works
 lib/Net/SMTP.pm                        libnet
-lib/Net/SNPP.pm                        libnet
 lib/Net/t/ftp.t                        libnet
 lib/Net/t/hostname.t           libnet
 lib/Net/t/nntp.t               libnet
-lib/Net/t/ph.t                 libnet
 lib/Net/t/require.t            libnet
 lib/Net/t/smtp.t               libnet
 lib/Net/Time.pm                        libnet
@@ -1161,8 +1156,6 @@ lib/Time/localtime.pm             By-name interface to Perl's builtin localtime
 lib/Time/localtime.t           Test for Time::localtime
 lib/Time/tm.pm                 Internal object for Time::{gm,local}time
 lib/timelocal.pl               Perl library supporting inverse of localtime, gmtime
-lib/Unicode/UCD.pm                     Unicode character database
-lib/Unicode/UCD.t                      See if Unicode character database works
 lib/unicode/ArabLink.pl                Unicode character database
 lib/unicode/ArabLnkGrp.pl      Unicode character database
 lib/unicode/ArabShap.txt       Unicode character database
@@ -1181,9 +1174,45 @@ lib/unicode/In.pl                Unicode character database
 lib/unicode/In/0.pl            Unicode character database
 lib/unicode/In/1.pl            Unicode character database
 lib/unicode/In/10.pl           Unicode character database
+lib/unicode/In/100.pl          Unicode character database
+lib/unicode/In/101.pl          Unicode character database
+lib/unicode/In/102.pl          Unicode character database
+lib/unicode/In/103.pl          Unicode character database
+lib/unicode/In/104.pl          Unicode character database
+lib/unicode/In/105.pl          Unicode character database
+lib/unicode/In/106.pl          Unicode character database
+lib/unicode/In/107.pl          Unicode character database
+lib/unicode/In/108.pl          Unicode character database
+lib/unicode/In/109.pl          Unicode character database
 lib/unicode/In/11.pl           Unicode character database
+lib/unicode/In/110.pl          Unicode character database
+lib/unicode/In/111.pl          Unicode character database
+lib/unicode/In/112.pl          Unicode character database
+lib/unicode/In/113.pl          Unicode character database
+lib/unicode/In/114.pl          Unicode character database
+lib/unicode/In/115.pl          Unicode character database
+lib/unicode/In/116.pl          Unicode character database
+lib/unicode/In/117.pl          Unicode character database
+lib/unicode/In/118.pl          Unicode character database
+lib/unicode/In/119.pl          Unicode character database
 lib/unicode/In/12.pl           Unicode character database
+lib/unicode/In/120.pl          Unicode character database
+lib/unicode/In/121.pl          Unicode character database
+lib/unicode/In/122.pl          Unicode character database
+lib/unicode/In/123.pl          Unicode character database
+lib/unicode/In/124.pl          Unicode character database
+lib/unicode/In/125.pl          Unicode character database
+lib/unicode/In/126.pl          Unicode character database
+lib/unicode/In/127.pl          Unicode character database
+lib/unicode/In/128.pl          Unicode character database
+lib/unicode/In/129.pl          Unicode character database
 lib/unicode/In/13.pl           Unicode character database
+lib/unicode/In/130.pl          Unicode character database
+lib/unicode/In/131.pl          Unicode character database
+lib/unicode/In/132.pl          Unicode character database
+lib/unicode/In/133.pl          Unicode character database
+lib/unicode/In/134.pl          Unicode character database
+lib/unicode/In/135.pl          Unicode character database
 lib/unicode/In/14.pl           Unicode character database
 lib/unicode/In/15.pl           Unicode character database
 lib/unicode/In/16.pl           Unicode character database
@@ -1274,6 +1303,10 @@ lib/unicode/In/92.pl             Unicode character database
 lib/unicode/In/93.pl           Unicode character database
 lib/unicode/In/94.pl           Unicode character database
 lib/unicode/In/95.pl           Unicode character database
+lib/unicode/In/96.pl           Unicode character database
+lib/unicode/In/97.pl           Unicode character database
+lib/unicode/In/98.pl           Unicode character database
+lib/unicode/In/99.pl           Unicode character database
 lib/unicode/Index.txt          Unicode character database
 lib/unicode/Is/Alnum.pl                Unicode character database
 lib/unicode/Is/Alpha.pl                Unicode character database
@@ -1434,6 +1467,7 @@ lib/unicode/PropList.txt  Unicode character database
 lib/unicode/README.perl                Unicode character database
 lib/unicode/ReadMe.txt         Unicode character database info
 lib/unicode/rename             Filename mappings used
+lib/unicode/Scripts.pl         Unicode character database
 lib/unicode/Scripts.txt                Unicode character database
 lib/unicode/SpecCase.txt       Unicode character database
 lib/unicode/syllables.txt      Unicode character database
@@ -1442,6 +1476,8 @@ 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/UCD.html           Unicode character database
+lib/Unicode/UCD.pm                     Unicode character database
+lib/Unicode/UCD.t                      See if Unicode character database works
 lib/unicode/Unicode.html       Unicode character database
 lib/unicode/Unicode.txt                Unicode character database
 lib/unicode/version            The version of the Unicode
@@ -1529,7 +1565,6 @@ NetWare/NWTInfo.c         Netware port
 NetWare/nwtinfo.h              Netware port
 NetWare/NWUtil.c               Netware port
 NetWare/nwutil.h               Netware port
-NetWare/perlsdio.h             Netware port
 NetWare/t/NWModify.pl          Netware port
 NetWare/t/NWScripts.pl         Netware port
 NetWare/t/Readme.txt           Netware port
@@ -2148,7 +2183,6 @@ vos/vos_dummies.c         Wrappers to soak up undefined functions
 warnings.h                     The warning numbers
 warnings.pl                    Program to write warnings.h and lib/warnings.pm
 win32/bin/exetype.pl           Set executable type to CONSOLE or WINDOWS
-win32/bin/mdelete.bat          multifile delete
 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
@@ -2173,6 +2207,7 @@ win32/include/netdb.h             Win32 port
 win32/include/sys/socket.h     Win32 port
 win32/Makefile                 Win32 makefile for NMAKE (Visual C++ build)
 win32/makefile.mk              Win32 makefile for DMAKE (BC++, VC++ builds)
+win32/mdelete.bat              multifile delete
 win32/perlglob.c               Win32 port
 win32/perlhost.h               Perl "host" implementation
 win32/perllib.c                        Win32 port
index 4ac2091..10b3d23 100644 (file)
@@ -15,7 +15,7 @@
 ## This file is created by using the makefile that creates Windows Perl as the reference
 ## Author: sgp
 ## Date Created: 13th July 2000
-## Date Modified: 30th June 2001
+## Date Modified: 2nd July 2001
 
 # Name of the NLM
 NLM_NAME               = perl.nlm
@@ -1479,8 +1479,11 @@ distclean: clean nwclean
        cd ..\netware
 !if "$(NW_EXTNS)"=="yes"
        cd cgi2perl
-       -del *.obj *.bs Makefile *$(o) *.c pm_to_blib *.xdc *.err
+       -del *.obj *.bs Makefile *$(o) *.c pm_to_blib *.xdc *.err *.sym *.map
        cd ..
+       cd $(EXTDIR)\Perl2UCS
+       -del *.obj *.bs Makefile *$(o) *.c pm_to_blib *.xdc *.err *.sym *.map *.c
+       cd ..\..\netware
 !endif
        -rmdir /s /q $(AUTODIR) || rmdir /s $(AUTODIR)
        -rmdir /s /q $(COREDIR) || rmdir /s $(COREDIR)
index 3525dcc..c526fbd 100644 (file)
@@ -8,17 +8,17 @@
  */
 
 /*
- * FILENAME            :       interface.c
- * DESCRIPTION :       Perl parsing and running functions.
- * Author              :       SGP
- * Date                        :       January 2001.
- *
+ * FILENAME     :   interface.c
+ * DESCRIPTION  :   Calling Perl APIs.
+ * Author       :   SGP
+ * Date        Created :   January 2001.
+ * Date Modified:   July 2nd 2001.
  */
 
 
 
 #include "interface.h"
-
+#include "nwtinfo.h"
 
 static void xs_init(pTHX);
 
@@ -42,6 +42,18 @@ ClsPerlHost::VersionNumber()
        return 0;
 }
 
+bool
+ClsPerlHost::RegisterWithThreadTable()
+{
+       return(fnRegisterWithThreadTable());
+}
+
+bool
+ClsPerlHost::UnregisterWithThreadTable()
+{
+       return(fnUnregisterWithThreadTable());
+}
+
 int
 ClsPerlHost::PerlCreate(PerlInterpreter *my_perl)
 {
index f574166..ab24e5c 100644 (file)
@@ -8,11 +8,11 @@
  */
 
 /*
- * FILENAME            :       interface.c
- * DESCRIPTION :       Perl parsing and running functions.
- * Author              :       SGP
- * Date                        :       January 2001.
- *
+ * FILENAME     :   interface.c
+ * DESCRIPTION  :   Perl parsing and running functions.
+ * Author       :   SGP
+ * Date Created :   January 2001.
+ * Date Modified:   July 2nd 2001. 
  */
 
 
@@ -36,7 +36,8 @@ public:
        int PerlParse(PerlInterpreter *my_perl, int argc, char** argv, char** env);
        int PerlRun(PerlInterpreter *my_perl);
        void PerlDestroy(PerlInterpreter *my_perl);
-
+       bool RegisterWithThreadTable(void);
+       bool UnregisterWithThreadTable(void);
 };
 
 
index e07a14f..4079a6e 100644 (file)
@@ -8,11 +8,11 @@
  */
 
 /*
- * FILENAME            :       iperlhost.h
- * DESCRIPTION :       IPerlHost class file.
- * Author              :       SGP
- * Date                        :       January 2001.
- *
+ * FILENAME     :   iperlhost.h
+ * DESCRIPTION  :   IPerlHost class file.
+ * Author       :   SGP
+ * Date Created :   January 2001.
+ * Date Modified:   July 2nd 2001.
  */
 
 
@@ -34,7 +34,8 @@ public:
        virtual int PerlParse(PerlInterpreter *my_perl,int argc, char** argv, char** env) = 0;
        virtual int PerlRun(PerlInterpreter *my_perl) = 0;
        virtual void PerlDestroy(PerlInterpreter *my_perl) = 0;
-
+       virtual bool RegisterWithThreadTable(void)=0;
+       virtual bool UnregisterWithThreadTable(void)=0;
 };
 
 extern "C" IPerlHost* AllocStdPerl();
index fd004bc..25d78a7 100644 (file)
@@ -8,11 +8,11 @@
  */
 
 /*
- * FILENAME            :       NWTInfo.h
- * DESCRIPTION :       Thread-local storage for Perl.
- * Author              :       SGP, HYAK
- * Date                        :       January 2001.
- *
+ * FILENAME     :   NWTInfo.h
+ * DESCRIPTION  :   Thread-local storage for Perl.
+ * Author       :   SGP, HYAK
+ * Date        Created :   January 2001.
+ * Date Modified:   July 2nd 2001.
  */
 
 
@@ -33,19 +33,25 @@ typedef struct tagThreadInfo
 
 void fnInitializeThreadInfo(void);
 BOOL fnTerminateThreadInfo(void);
-BOOL fnRegisterWithThreadTable(void);
-BOOL fnUnregisterWithThreadTable(void);
 
 ThreadInfo* fnAddThreadInfo(int tid);
 BOOL fnRemoveThreadInfo(int tid);
 ThreadInfo* fnGetThreadInfo(int tid);
 
-//For storing and retrieving Watcom Hash list address
 #ifdef __cplusplus
+       //For storing and retrieving Watcom Hash list address
        extern "C" BOOL fnInsertHashListAddrs(void *addrs, BOOL dontTouchHashList);
+       //Registering with the Thread table
+       extern "C" BOOL fnRegisterWithThreadTable(void);
+       extern "C" BOOL fnUnregisterWithThreadTable(void);
 #else
+       //For storing and retrieving Watcom Hash list address
        BOOL fnInsertHashListAddrs(void *addrs, BOOL dontTouchHashList);
+       //Registering with the Thread table
+       BOOL fnRegisterWithThreadTable(void);
+       BOOL fnUnregisterWithThreadTable(void);
 #endif
+
 BOOL fnGetHashListAddrs(void **addrs, BOOL *dontTouchHashList);
 
 //New TLS to set and get the thread contex - may be redundant,
diff --git a/NetWare/perlsdio.h b/NetWare/perlsdio.h
deleted file mode 100644 (file)
index fad4277..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
---- perlsdio.h.old     Sat Jun 30 14:42:22 2001
-+++ perlsdio.h Sat Jun 30 14:59:49 2001
-@@ -1,4 +1,9 @@
- #ifdef PERLIO_IS_STDIO
-+
-+#ifdef NETWARE
-+      #include "nwstdio.h"
-+#else
-+
- /*
-  * This file #define-s the PerlIO_xxx abstraction onto stdio functions.
-  * Make this as close to original stdio as possible.
-@@ -136,4 +141,5 @@
- #define PerlIO_get_bufsiz(f)          (abort(),0)
- #endif
-+#endif        /* NETWARE */
- #endif /* PERLIO_IS_STDIO */
index c841bd6..f59455b 100644 (file)
@@ -8,14 +8,14 @@ README.qnx - Perl version 5 on QNX
 
 =head1 DESCRIPTION
 
-As of perl5.004_04, all tests pass under:
+As of perl5.8.0 all tests pass under:
 
-  QNX 4.23A
+  QNX 4.24G
   Watcom 10.6 with Beta/970211.wcc.update.tar.F
   socket3r.lib Nov21 1996.
 
-Update June 2001: Perl 5.6.1 works fine in QNX4 with
-a few 'known' failures in the test suite.
+Some tests may complain under known circumstances. See
+below and hints/qnx.sh for more information.
 
 [ Perl 5.6.0 is shipping with QNX RTP (aka QNX6, Neutrino), but
 the build does not appear to be straightforward. If anyone has
@@ -85,8 +85,11 @@ lib/File/Find/taint.t will complain if '.' is in your
 PATH. The PATH test is triggered because cwd calls
 `fullpath -t`.
 
-ext/IO/lib/IO/t/io_sock.t Still investigating
-ext/POSIX/sigaction.t Still investigating
+ext/IO/lib/IO/t/io_sock.t: Subtest 14 is skipped due to
+the fact that the functionality to read back the non-blocking
+status of a socket is not implemented in QNX's TCP/IP. This
+has been reported to QNX and it may work with later versions
+of TCP/IP.
 
 =head2 QNX auxiliary files
 
index 06fe061..97ed838 100644 (file)
@@ -8,19 +8,19 @@ README.vos - Perl for Stratus VOS
 
 =head1 SYNOPSIS
 
-This is a port of Perl version 5, revision 7, to VOS.  Perl is a
-scripting or macro language that is popular on many systems.  See your
-local computer bookstore for a number of good books on Perl.
+This is a port of Perl version 5 to VOS.  Perl is a scripting or
+macro language that is popular on many systems.  See your local
+computer bookstore for a number of good books on Perl.
 
 =head2 Stratus POSIX Support
 
 Note that there are two different implementations of POSIX.1
 support on VOS.  There is an alpha version of POSIX that is
 available from the Stratus anonymous ftp site
-(ftp://ftp.stratus.com/pub/vos/posix/alpha/alpha.html).  There
-is a generally-available version of POSIX that comes with the
-VOS Standard C compiler and C runtime in VOS Release 14.3.0 or
-higher.  This port of POSIX will compile and bind with either
+(ftp://ftp.stratus.com/pub/vos/posix/alpha/alpha.html).  There is
+a generally-available version of POSIX that comes with the VOS
+Standard C Compiler or VOS C runtime in VOS Release 14.3.0 or
+higher.  This port of perl will compile and bind with either
 version of POSIX.
 
 Most of the Perl features should work on VOS regardless of which
@@ -29,11 +29,11 @@ of POSIX is missing a number of key functions, and therefore any
 attempt by perl.pm to call the following unimplemented POSIX
 functions will result in an error message and an immediate and
 fatal call to the VOS debugger.  They are "dup", "fork", and
-"waitpid".  The lack of these functions pretty much prevents you
-from starting VOS commands and grabbing their output in perl.
-The workaround is to run the commands outside of perl, then have
-perl process the output file.  These functions are all available
-in the generally-available version of POSIX.
+"waitpid".  The lack of these functions prevents you from
+starting VOS commands and grabbing their output in perl.  The
+workaround is to run the commands outside of perl, then have perl
+process the output file.  These functions are all available in
+the generally-available version of POSIX.
 
 =head1 INSTALLING PERL IN VOS
 
@@ -91,12 +91,13 @@ execute on VOS Release 12 or earlier.
 
 =item 5
 
-If you are using the generally-available version of VOS
-POSIX support, then you should also acquire the VOS GNU
-C/C++ Compiler and GNU Tools product.  When perl is built
-with this version of POSIX support, it assumes that it can
-find "bash", "sed" and other POSIX-compatible commands in
-the directory /system/gnu_library/bin.
+If you are using the generally-available version of VOS POSIX
+support, then you should also acquire the VOS GNU C/C++ Compiler
+and GNU Tools product because it provides many common Unix or
+POSIX commands.  When perl is built with this version of POSIX
+support, it assumes that it can find "bash", "sed" and other
+POSIX-compatible commands in the directory
+/system/gnu_library/bin.
 
 =back
 
@@ -236,6 +237,6 @@ Paul Green (Paul_Green@stratus.com)
 
 =head1 LAST UPDATE
 
-June 11, 2001
+July 4, 2001
 
 =cut
index bb95ad8..76911fd 100644 (file)
@@ -36,9 +36,7 @@ sed -e $SCC -e $SLIST -e $SFILEC -e $SCOR -e $SDEPTMP -e $SHSED makedepend.SH |t
 sed -e $SCPP t/comp/cpp.aux |tr -d '\r' >s; mv -f s t/comp/cpp.aux
 sed -e $SARGV -e $SDOTTMP t/io/argv.t >s; mv -f s t/io/argv.t
 sed -e $SABC t/io/inplace.t >s; mv -f s t/io/inplace.t
-sed -e $SDBMX t/lib/anydbm.t >s; mv -f s t/lib/anydbm.t
-sed -e $SDBMX -e $SDBHASH t/lib/gdbm.t >s; mv -f s t/lib/gdbm.t
-sed -e $SDBMX -e $SDBHASH t/lib/sdbm.t >s; mv -f s t/lib/sdbm.t
+sed -e $SDBMX -e $SDBHASH ext/GDBM_File/gdbm.t >s; mv -f s ext/GDBM_File/gdbm.t
 sed -e $SSTAT -e $STMP2 t/op/stat.t >s; mv -f s t/op/stat.t
 sed -e $SLIST x2p/Makefile.SH |tr -d '\r' >s; mv -f s x2p/Makefile.SH
 sed -e 's=^#define.\([A-Z]\+\)_EXP.*$=#define \1_EXP djgpp_pathexp("\1")=g' config_h.SH >s; mv -f s config_h.SH
diff --git a/doio.c b/doio.c
index dfd8710..d0d28b0 100644 (file)
--- a/doio.c
+++ b/doio.c
@@ -2029,13 +2029,42 @@ Perl_do_semop(pTHX_ SV **mark, SV **sp)
     id = SvIVx(*++mark);
     opstr = *++mark;
     opbuf = SvPV(opstr, opsize);
-    if (opsize < sizeof(struct sembuf)
-       || (opsize % sizeof(struct sembuf)) != 0) {
+    if (opsize < 3 * SHORTSIZE
+       || (opsize % (3 * SHORTSIZE))) {
        SETERRNO(EINVAL,LIB$_INVARG);
        return -1;
     }
     SETERRNO(0,0);
-    return semop(id, (struct sembuf *)opbuf, opsize/sizeof(struct sembuf));
+    /* We can't assume that sizeof(struct sembuf) == 3 * sizeof(short). */
+    {
+        int nsops  = opsize / (3 * sizeof (short));
+        int i      = nsops;
+        short *ops = (short *) opbuf;
+        short *o   = ops;
+        struct sembuf *temps, *t;
+        I32 result;
+
+        New (0, temps, nsops, struct sembuf);
+        t = temps;
+        while (i--) {
+            t->sem_num = *o++;
+            t->sem_op  = *o++;
+            t->sem_flg = *o++;
+            t++;
+        }
+        result = semop(id, temps, nsops);
+        t = temps;
+        o = ops;
+        i = nsops;
+        while (i--) {
+            *o++ = t->sem_num;
+            *o++ = t->sem_op;
+            *o++ = t->sem_flg;
+            t++;
+        }
+        Safefree(temps);
+        return result;
+    }
 #else
     Perl_croak(aTHX_ "semop not implemented");
 #endif
diff --git a/dump.c b/dump.c
index 2a8fec6..1ec2a60 100644 (file)
--- a/dump.c
+++ b/dump.c
@@ -519,6 +519,8 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, OP *o)
        else if (o->op_type == OP_CONST) {
            if (o->op_private & OPpCONST_BARE)
                sv_catpv(tmpsv, ",BARE");
+           if (o->op_private & OPpCONST_OCTAL)
+               sv_catpv(tmpsv, ",OCTAL");
            if (o->op_private & OPpCONST_STRICT)
                sv_catpv(tmpsv, ",STRICT");
            if (o->op_private & OPpCONST_ARYBASE)
@@ -960,7 +962,7 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo
     case SVt_PVGV:
        if (GvINTRO(sv))        sv_catpv(d, "INTRO,");
        if (GvMULTI(sv))        sv_catpv(d, "MULTI,");
-       if (GvSHARED(sv))       sv_catpv(d, "SHARED,");
+       if (GvUNIQUE(sv))       sv_catpv(d, "UNIQUE,");
        if (GvASSUMECV(sv))     sv_catpv(d, "ASSUMECV,");
        if (GvIN_PAD(sv))       sv_catpv(d, "IN_PAD,");
        if (flags & SVpad_OUR)  sv_catpv(d, "OUR,");
diff --git a/embed.h b/embed.h
index 42013a1..21bde98 100644 (file)
--- a/embed.h
+++ b/embed.h
 #define sv_collxfrm            Perl_sv_collxfrm
 #endif
 #define sv_compile_2op         Perl_sv_compile_2op
-#define sv_getcwd              Perl_sv_getcwd
+#define getcwd_sv              Perl_getcwd_sv
 #define sv_dec                 Perl_sv_dec
 #define sv_dump                        Perl_sv_dump
 #define sv_derived_from                Perl_sv_derived_from
 #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_getcwd(a)           Perl_sv_getcwd(aTHX_ a)
+#define getcwd_sv(a)           Perl_getcwd_sv(aTHX_ a)
 #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)
 #  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
+#if defined(MYMALLOC)
 #define malloced_size          Perl_malloced_size
 #endif
 #define get_context            Perl_get_context
 #endif
 #define Perl_sv_compile_2op    CPerlObj::Perl_sv_compile_2op
 #define sv_compile_2op         Perl_sv_compile_2op
-#define Perl_sv_getcwd         CPerlObj::Perl_sv_getcwd
-#define sv_getcwd              Perl_sv_getcwd
+#define Perl_getcwd_sv         CPerlObj::Perl_getcwd_sv
+#define getcwd_sv              Perl_getcwd_sv
 #define Perl_sv_dec            CPerlObj::Perl_sv_dec
 #define sv_dec                 Perl_sv_dec
 #define Perl_sv_dump           CPerlObj::Perl_sv_dump
index 9ad4767..e322ae2 100755 (executable)
--- a/embed.pl
+++ b/embed.pl
@@ -1359,11 +1359,11 @@ Ajno    |PerlInterpreter*|perl_clone_using|PerlInterpreter *interp|UV flags \
 #  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
+#if defined(MYMALLOC)
 jnp    |MEM_SIZE|malloced_size |void *p
 #endif
 
@@ -2031,7 +2031,7 @@ Apd       |I32    |sv_cmp_locale  |SV* sv1|SV* sv2
 Apd    |char*  |sv_collxfrm    |SV* sv|STRLEN* nxp
 #endif
 Ap     |OP*    |sv_compile_2op |SV* sv|OP** startp|char* code|AV** avp
-Apd    |int    |sv_getcwd      |SV* sv
+Apd    |int    |getcwd_sv      |SV* sv
 Apd    |void   |sv_dec         |SV* sv
 Ap     |void   |sv_dump        |SV* sv
 Apd    |bool   |sv_derived_from|SV* sv|const char* name
index 1560420..08f073e 100644 (file)
@@ -19,7 +19,7 @@ use B qw(class main_root main_start main_cv svref_2object opnumber cstring
          CVf_METHOD CVf_LOCKED CVf_LVALUE
         PMf_KEEP PMf_GLOBAL PMf_CONTINUE PMf_EVAL PMf_ONCE PMf_SKIPWHITE
         PMf_MULTILINE PMf_SINGLELINE PMf_FOLD PMf_EXTENDED);
-$VERSION = 0.60;
+$VERSION = 0.61;
 use strict;
 use warnings ();
 
@@ -92,6 +92,19 @@ use warnings ();
 # - separate recognition of constant subs
 # - rewrote continue block handling, now recoginizing for loops
 # - added more control of expanding control structures
+# Changes between 0.60 and 0.61 (mostly by Robin Houston)
+# - many bug-fixes
+# - support for pragmas and 'use'
+# - support for the little-used $[ variable
+# - support for __DATA__ sections
+# - UTF8 support
+# - BEGIN, CHECK, INIT and END blocks
+# - scoping of subroutine declarations fixed
+# - compile-time output from the input program can be suppressed, so that the
+#   output is just the deparsed code. (a change to O.pm in fact)
+# - our() declarations
+# - *all* the known bugs are now listed in the BUGS section
+# - comprehensive test mechanism (TEST -deparse)
 
 # Todo:
 #  (See also BUGS section at the end of this file)
@@ -483,9 +496,15 @@ sub new {
     return $self;
 }
 
-sub WARN_MASK () {
-    # Mask out the bits that C<use vars> uses
-    $warnings::Bits{all} | $warnings::DeadBits{all};
+{
+    # Mask out the bits that L<warnings::register> uses
+    my $WARN_MASK;
+    BEGIN {
+       $WARN_MASK = $warnings::Bits{all} | $warnings::DeadBits{all};
+    }
+    sub WARN_MASK () {
+       return $WARN_MASK;
+    }
 }
 
 # Initialise the contextual information, either from
@@ -613,7 +632,7 @@ sub ambient_pragmas {
 
        elsif ($name eq 'warnings') {
            if ($val eq 'none') {
-               $warning_bits = "\0"x12;
+               $warning_bits = $warnings::NONE;
                next();
            }
 
@@ -625,7 +644,7 @@ sub ambient_pragmas {
                @names = split/\s+/, $val;
            }
 
-           $warning_bits = "\0"x12 if !defined ($warning_bits);
+           $warning_bits = $warnings::NONE if !defined ($warning_bits);
            $warning_bits |= warnings::bits(@names);
        }
 
@@ -1257,10 +1276,10 @@ sub pp_nextstate {
     my $warnings = $op->warnings;
     my $warning_bits;
     if ($warnings->isa("B::SPECIAL") && $$warnings == 4) {
-       $warning_bits = $warnings::Bits{"all"};
+       $warning_bits = $warnings::Bits{"all"} & WARN_MASK;
     }
     elsif ($warnings->isa("B::SPECIAL") && $$warnings == 5) {
-        $warning_bits = "\0"x12;
+        $warning_bits = $warnings::NONE;
     }
     elsif ($warnings->isa("B::SPECIAL")) {
        $warning_bits = undef;
@@ -2656,6 +2675,16 @@ sub elem {
     #
     $idx =~ s/^\((.*)\)$/$1/ if $self->{'parens'};
 
+    # Hash-element braces will autoquote a bareword inside themselves.
+    # We need to make sure that C<$hash{warn()}> doesn't come out as
+    # C<$hash{warn}>, which has a quite different meaning. Currently
+    # B::Deparse will always quote strings, even if the string was a
+    # bareword in the original (i.e. the OPpCONST_BARE flag is ignored
+    # for constant strings.) So we can cheat slightly here - if we see
+    # a bareword, we know that it is supposed to be a function call.
+    #
+    $idx =~ s/^([A-Za-z_]\w*)$/$1()/;
+
     return "\$" . $array . $left . $idx . $right;
 }
 
@@ -4100,9 +4129,22 @@ than in the input file.
 
 =item *
 
+In fact, the above is a specific instance of a more general problem:
+we can't guarantee to produce BEGIN blocks or C<use> declarations in
+exactly the right place. So if you use a module which affects compilation
+(such as by over-riding keywords, overloading constants or whatever)
+then the output code might not work as intended.
+
+This is the most serious outstanding problem, and will be very hard
+to fix.
+
+=item *
+
 If a keyword is over-ridden, and your program explicitly calls
 the built-in version by using CORE::keyword, the output of B::Deparse
-will not reflect this.
+will not reflect this. If you run the resulting code, it will call
+the over-ridden version rather than the built-in one. (Maybe there
+should be an option to B<always> print keyword calls as C<CORE::name>.)
 
 =item *
 
index 0979d7e..20cef75 100644 (file)
@@ -15,7 +15,7 @@ use warnings;
 use strict;
 use Config;
 
-print "1..14\n";
+print "1..15\n";
 
 use B::Deparse;
 my $deparse = B::Deparse->new() or print "not ";
@@ -105,7 +105,7 @@ $b = <<'EOF';
 
 LINE: while (defined($_ = <ARGV>)) {
     chomp $_;
-    @F = split(" ", $_, 0);
+    our(@F) = split(" ", $_, 0);
     '???';
 }
 
@@ -114,27 +114,27 @@ print "# [$a]\n\# vs expected\n# [$b]\nnot " if $a ne $b;
 print "ok " . $i++ . "\n";
 
 __DATA__
-# 1
+# 2
 1;
 ####
-# 2
+# 3
 {
     no warnings;
     '???';
     2;
 }
 ####
-# 3
+# 4
 my $test;
 ++$test and $test /= 2;
 >>>>
 my $test;
 $test /= 2 if ++$test;
 ####
-# 4
+# 5
 -((1, 2) x 2);
 ####
-# 5
+# 6
 {
     my $test = sub : lvalue {
        my $x;
@@ -142,7 +142,7 @@ $test /= 2 if ++$test;
     ;
 }
 ####
-# 6
+# 7
 {
     my $test = sub : method {
        my $x;
@@ -150,7 +150,7 @@ $test /= 2 if ++$test;
     ;
 }
 ####
-# 7
+# 8
 {
     my $test = sub : locked method {
        my $x;
@@ -158,7 +158,7 @@ $test /= 2 if ++$test;
     ;
 }
 ####
-# 8
+# 9
 {
     234;
 }
@@ -166,10 +166,14 @@ continue {
     123;
 }
 ####
-# 9
+# 10
 my $x;
 print $main::x;
 ####
-# 10
+# 11
 my @x;
 print $main::x[1];
+####
+# 12
+my %x;
+$x{warn()};
index be9427b..b6f27b8 100644 (file)
@@ -194,7 +194,11 @@ err1:      serrno = errno;
 #else
        (void)chdir(wd);
 #endif
-err2:  (void)close(fd);
+
+err2:
+#ifdef HAS_FCHDIR
+       (void)close(fd);
+#endif
        errno = serrno;
        return (NULL);
 #endif
@@ -209,7 +213,7 @@ fastcwd()
 PPCODE:
 {
     dXSTARG;
-    sv_getcwd(TARG);
+    getcwd_sv(TARG);
     XSprePUSH; PUSHTARG;
 }
 
index f862eef..84d107f 100644 (file)
@@ -230,7 +230,7 @@ use Carp;
 sub read
 {
  my ($obj,$fh,$name) = @_;
- my(%tbl, @esc, $enc);
+ my(%tbl, @seq, $enc, @esc);
  while (<$fh>)
   {
    my ($key,$val) = /^(\S+)\s+(.*)$/;
@@ -238,13 +238,15 @@ sub read
    $val =~ s/\\x([0-9a-f]{2})/chr(hex($1))/ge;
    if($enc = Encode->getEncoding($key)){
      $tbl{$val} = ref($enc) eq 'Encode::Tcl' ? $enc->loadEncoding : $enc;
-     push @esc, $val;
+     push @seq, $val;
    }else{
      $obj->{$key} = $val;
    }
+   if($val =~ /^\e(.*)/){ push(@esc, quotemeta $1) }
   }
- $obj->{'Ctl'} = \@esc;
- $obj->{'Tbl'} = \%tbl;
+ $obj->{'Seq'} = \@seq; # escape sequences
+ $obj->{'Tbl'} = \%tbl; # encoding tables
+ $obj->{'Esc'} = join('|', @esc); # regex of sequences following ESC
  return $obj;
 }
 
@@ -252,33 +254,41 @@ sub decode
 {
  my ($obj,$str,$chk) = @_;
  my $tbl = $obj->{'Tbl'};
- my $ctl = $obj->{'Ctl'};
+ my $seq = $obj->{'Seq'};
+ my $esc = $obj->{'Esc'};
  my $ini = $obj->{'init'};
  my $fin = $obj->{'final'};
- my $std = $ctl->[0];
+ my $std = $seq->[0];
  my $cur = $std;
  my $uni;
  while (length($str)){
    my $uch = substr($str,0,1,'');
    if($uch eq "\e"){
-    $str =~ s/^([\x20-\x2F]*[\x30-\x7E](?:\x1b[\x20-\x2F]*[\x30-\x7E])*)//;
-    my $esc = "\e$1";
-    if($tbl->{$esc}){ $cur = $esc }
-    elsif($esc eq $ini || $esc eq $fin){ $cur = $std }
-    else{carp "unknown escape sequence" }
+    if($str =~ s/^($esc)//)
+     {
+      my $esc = "\e$1";
+      $cur = $tbl->{$esc} ? $esc :
+             ($esc eq $ini || $esc eq $fin) ? $std :
+             $cur;
+     }
+    else
+     {
+      $str =~ s/^([\x20-\x2F]*[\x30-\x7E])//;
+      carp "unknown escape sequence: ESC $1";
+     }
     next;
    }
    if($uch eq "\x0e" || $uch eq "\x0f"){
     $cur = $uch and next;
    }
-   my $x;
    if(ref($tbl->{$cur}) eq 'Encode::XS'){
      $uni .= $tbl->{$cur}->decode($uch);
      next;
    }
-   my $ch = ord($uch);
+   my $ch    = ord($uch);
    my $rep   = $tbl->{$cur}->{'Rep'};
    my $touni = $tbl->{$cur}->{'ToUni'};
+   my $x;
    if (&$rep($ch) eq 'C')
     {
      $x = $touni->[0][$ch];
@@ -303,10 +313,10 @@ sub encode
 {
  my ($obj,$uni,$chk) = @_;
  my $tbl = $obj->{'Tbl'};
- my $ctl = $obj->{'Ctl'};
+ my $seq = $obj->{'Seq'};
  my $ini = $obj->{'init'};
  my $fin = $obj->{'final'};
- my $std = $ctl->[0];
+ my $std = $seq->[0];
  my $str = $ini;
  my $pre = $std;
  my $cur = $pre;
@@ -318,11 +328,11 @@ sub encode
        : $tbl->{$pre}->{FmUni}->{$ch};
 
   unless(defined $x){
-   foreach my $esc (@$ctl){
-    $x = ref($tbl->{$esc}) eq 'Encode::XS'
-       ? $tbl->{$esc}->encode($ch,1)
-       : $tbl->{$esc}->{FmUni}->{$ch};
-    $cur = $esc and last if defined $x;
+   foreach my $e_seq (@$seq){
+    $x = ref($tbl->{$e_seq}) eq 'Encode::XS'
+       ? $tbl->{$e_seq}->encode($ch,1)
+       : $tbl->{$e_seq}->{FmUni}->{$ch};
+    $cur = $e_seq and last if defined $x;
    }
   }
   if($x == 0x0d && !($ini eq '' && $fin eq '') && substr($uni,0,1) eq "\x0a")
index e26cf7c..5e5d8f9 100644 (file)
@@ -41,7 +41,37 @@ my %ideodigit = ( # cjk ideograph 'one' to 'ten'
 );
 my @ideodigit = qw(one two three four five six seven eight nine ten);
 
-plan test => $n*@encodings + $n*@encodings*@greek + $n*@encodings*@ideodigit;
+my $jis = '7bit-jis';
+my $kr  = '7bit-kr';
+my %esc_str;
+
+$esc_str{$jis} = {qw(
+  1b24422422242424262428242a1b2842
+  3042304430463048304a
+  1b284931323334355d1b2842
+  ff71ff72ff73ff74ff75ff9d
+  1b2442467c4b5c1b2842
+  65e5672c
+  3132331b244234413b7a1b28425065726c
+  0031003200336f225b57005000650072006c
+  546573740a1b24422546253925481b28420a
+  0054006500730074000a30c630b930c8000a
+)};
+
+$esc_str{$kr} = {qw(
+  1b2429430e2a22213e0f410d0a
+  304200b10041000d000a
+  1b2429430e3021332a34593673383639593b673e46405a0f0d0a
+  ac00b098b2e4b77cb9c8bc14c0acc544c790000d000a
+  1b2429434142430d0a
+  004100420043000d000a
+)};
+
+my $num_esc = $n * keys(%esc_str);
+foreach (values %esc_str){ $num_esc += $n * keys %$_ }
+
+plan test => $n*@encodings + $n*@encodings*@greek
+  + $n*@encodings*@ideodigit + $num_esc;
 
 foreach my $enc (@encodings)
  {
@@ -81,3 +111,35 @@ foreach my $enc (@encodings)
    }
  }
 
+{
+ sub to_unicode
+  {
+   my $enc = shift;
+   return unpack('H*', pack 'n*', unpack 'U*',
+   decode $enc, pack 'H*', join '', @_);
+  }
+
+ sub from_unicode
+  {
+   my $enc = shift;
+   return unpack('H*', encode $enc,
+   pack 'U*', unpack 'n*', pack 'H*', join '', @_);
+  }
+
+ foreach my $enc (sort keys %esc_str)
+  {
+   my $tab = Encode->getEncoding($enc);
+   ok(1,defined($tab),"Could not load $enc");
+   my %strings = %{ $esc_str{$enc} };
+   foreach my $estr (sort keys %strings)
+    {
+     my $ustr = to_unicode($enc, $estr);
+     ok($ustr, $strings{$estr},
+        "$enc mangled translating to Unicode");
+     ok(from_unicode($enc, $ustr), $estr,
+        "$enc mangled translating from Unicode");
+    }
+   ok(to_unicode($enc, keys %strings), join('', values %strings),
+   "$enc mangled translating to Unicode");
+  }
+}
index 1c9bcc7..6b241c5 100755 (executable)
@@ -205,9 +205,15 @@ if ($^O eq 'mpeix') {
 print "not " unless $server->blocking;
 print "ok 13\n";
 
-$server->blocking(0);
-print "not " if $server->blocking;
-print "ok 14\n";
+if ( $^O eq 'qnx' ) {
+  # QNX library bug: Can set non-blocking on socket, but
+  # cannot return that status.
+  print "ok 14 # skipped\n";
+} else {
+  $server->blocking(0);
+  print "not " if $server->blocking;
+  print "ok 14\n";
+}
 
 ### TEST 15
 ### Set up some data to be transfered between the server and
index 47f9d2c..405afa7 100644 (file)
@@ -3,4 +3,4 @@
 # (no null key support)
 # Jonathan Stowe <gellyfish@gellyfish.com>
 use Config;
-$self->{LIBS} = ['-lgdbm'] if $Config{libs} =~ /\b-lgdbm\b/;
+$self->{LIBS} = ['-lgdbm'] if $Config{libs} =~ /(?:^|\s)-lgdbm(?:\s|$)/;
index aae4cf3..87a2aea 100755 (executable)
@@ -79,7 +79,7 @@ if ($Is_MPE) {
     print &_POSIX_OPEN_MAX > $fds[1] ? "ok 12\n" : "not ok 12\n"
 }
 
-print getcwd() =~ m#/t$# ? "ok 13\n" : "not ok 13\n";
+print getcwd() =~ m#[/\\]t$# ? "ok 13\n" : "not ok 13\n";
 
 # Check string conversion functions.
 
index 6f27ea3..1bf8521 100644 (file)
@@ -1751,7 +1751,7 @@ getcwd()
     PPCODE:
       {
        dXSTARG;
-       sv_getcwd(TARG);
+       getcwd_sv(TARG);
        XSprePUSH; PUSHTARG;
       }
 
index b209d3b..4816efc 100644 (file)
@@ -342,6 +342,7 @@ static Signal_t
 handle_thread_signal(int sig)
 {
     unsigned char c = (unsigned char) sig;
+    dTHX;
     /*
      * We're not really allowed to call fprintf in a signal handler
      * so don't be surprised if this isn't robust while debugging
index c62e36d..f200696 100644 (file)
@@ -82,11 +82,18 @@ print "ok 21\n";
 
 # In GMT there should be no daylight savings ever.
 
-print "not " unless $t->isdst == 0;
-print "ok 22\n";
-
-print "not " unless $t->daylight_savings == 0;
-print "ok 23\n";
+my $dst      = 0;
+my $dst_mess = '';
+if ($^O eq 'os2') {
+    # OS/2 EMX bug
+    $dst      = (CORE::gmtime(0))[8];
+    $dst_mess = ' # skipped: gmtime(0) thinks DST gmtime 0 == -1';
+}      
+print "not " unless $t->isdst == $dst;
+print "ok 22$dst_mess\n";
+
+print "not " unless $t->daylight_savings == $dst;
+print "ok 23$dst_mess\n";
 
 print "not " unless $t->hms eq '12:34:56';
 print "ok 24\n";
index 54caf7d..317dd5c 100644 (file)
@@ -116,7 +116,7 @@ nonxs)      makeargs="";
 esac
 
 if test ! -f $makefile ; then
-       test -f Makefile.PL && ../$depth/miniperl -I../$depth/lib Makefile.PL INSTALLDIRS=perl $passthru
+       test -f Makefile.PL && ../$depth/miniperl -I../$depth/lib Makefile.PL INSTALLDIRS=perl PERL_CORE=1 $passthru
 fi
 if test ! -f $makefile ; then
        if test -f Makefile.SH; then
diff --git a/ext/util/mkbootstrap b/ext/util/mkbootstrap
deleted file mode 100644 (file)
index 6c3a7e1..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#!../../miniperl -w -I../../lib
-
-use ExtUtils::MakeMaker;
-&mkbootstrap(join(" ",@ARGV));
-exit;
index 50b6bd1..5301739 100644 (file)
@@ -413,7 +413,7 @@ Perl_sv_cmp
 Perl_sv_cmp_locale
 Perl_sv_collxfrm
 Perl_sv_compile_2op
-Perl_sv_getcwd
+Perl_getcwd_sv
 Perl_sv_dec
 Perl_sv_dump
 Perl_sv_derived_from
diff --git a/gv.c b/gv.c
index 3ac5306..e4951a0 100644 (file)
--- a/gv.c
+++ b/gv.c
@@ -46,9 +46,9 @@ Perl_gv_IOadd(pTHX_ register GV *gv)
     if (!gv || SvTYPE((SV*)gv) != SVt_PVGV)
        Perl_croak(aTHX_ "Bad symbol for filehandle");
     if (!GvIOp(gv)) {
-#ifdef GV_SHARED_CHECK
-        if (GvSHARED(gv)) {
-            Perl_croak(aTHX_ "Bad symbol for filehandle (GV is shared)");
+#ifdef GV_UNIQUE_CHECK
+        if (GvUNIQUE(gv)) {
+            Perl_croak(aTHX_ "Bad symbol for filehandle (GV is unique)");
         }
 #endif
        GvIOp(gv) = newIO();
@@ -488,7 +488,7 @@ S_require_errno(pTHX_ GV *gv)
 {
     HV* stash = gv_stashpvn("Errno",5,FALSE);
 
-    if (!stash || !(gv_fetchmethod(stash, "TIEHASH"))) {
+    if (!stash || !(gv_fetchmethod(stash, "TIEHASH"))) { 
        dSP;
        PUTBACK;
        ENTER;
@@ -740,7 +740,7 @@ Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, I32 sv_type)
     gv_init(gv, stash, name, len, add & GV_ADDMULTI);
     gv_init_sv(gv, sv_type);
 
-    if (isALPHA(name[0]) && ! (isLEXWARN_on ? ckWARN(WARN_ONCE)
+    if (isALPHA(name[0]) && ! (isLEXWARN_on ? ckWARN(WARN_ONCE) 
                                            : (PL_dowarn & G_WARN_ON ) ) )
         GvMULTI_on(gv) ;
 
@@ -1359,13 +1359,13 @@ Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
   AMT *amtp=NULL, *oamtp=NULL;
   int off=0, off1, lr=0, assign=AMGf_assign & flags, notfound=0;
   int postpr = 0, force_cpy = 0, assignshift = assign ? 1 : 0;
+#ifdef DEBUGGING
   int fl=0;
+#endif
   HV* stash=NULL;
   if (!(AMGf_noleft & flags) && SvAMAGIC(left)
-      && (mg = mg_find((SV*)(
-                            stash=
-                            SvSTASH(SvRV(left))),
-                       PERL_MAGIC_overload_table))
+      && (stash = SvSTASH(SvRV(left)))
+      && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
       && (ocvp = cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
                        ? (oamtp = amtp = (AMT*)mg->mg_ptr)->table
                        : (CV **) NULL))
@@ -1373,7 +1373,9 @@ Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
          || (assign && amtp->fallback > AMGfallNEVER && /* fallback to
                                                          * usual method */
                  (
+#ifdef DEBUGGING
                   fl = 1,
+#endif 
                   cv = cvp[off=method])))) {
     lr = -1;                   /* Call method for left argument */
   } else {
@@ -1480,10 +1482,8 @@ Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
         }
         if (!cv) goto not_found;
     } else if (!(AMGf_noright & flags) && SvAMAGIC(right)
-              && (mg = mg_find((SV*)(
-                                     stash=
-                                     SvSTASH(SvRV(right))),
-                       PERL_MAGIC_overload_table))
+              && (stash = SvSTASH(SvRV(right)))
+              && (mg = mg_find((SV*)stash, PERL_MAGIC_overload_table))
               && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr)
                          ? (amtp = (AMT*)mg->mg_ptr)->table
                          : (CV **) NULL))
@@ -1582,7 +1582,7 @@ Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags)
                     flags & AMGf_unary? "" :
                     lr==1 ? " for right argument": " for left argument",
                     flags & AMGf_unary? " for argument" : "",
-                    HvNAME(stash),
+                    stash ? HvNAME(stash) : "null",
                     fl? ",\n\tassignment variant used": "") );
   }
 #endif
diff --git a/gv.h b/gv.h
index 01764e3..428ab77 100644 (file)
--- a/gv.h
+++ b/gv.h
@@ -133,15 +133,15 @@ HV *GvHVn();
 
 /* XXX: all GvFLAGS options are used, borrowing GvGPFLAGS for the moment */
 
-#define GVf_SHARED           0x0001
-#define GvSHARED(gv)         (GvGP(gv) && (GvGPFLAGS(gv) & GVf_SHARED))
-#define GvSHARED_on(gv)      (GvGPFLAGS(gv) |= GVf_SHARED)
-#define GvSHARED_off(gv)     (GvGPFLAGS(gv) &= ~GVf_SHARED)
+#define GVf_UNIQUE           0x0001
+#define GvUNIQUE(gv)         (GvGP(gv) && (GvGPFLAGS(gv) & GVf_UNIQUE))
+#define GvUNIQUE_on(gv)      (GvGPFLAGS(gv) |= GVf_UNIQUE)
+#define GvUNIQUE_off(gv)     (GvGPFLAGS(gv) &= ~GVf_UNIQUE)
 
 #ifdef USE_ITHREADS
-#define GV_SHARED_CHECK
+#define GV_UNIQUE_CHECK
 #else
-#undef  GV_SHARED_CHECK
+#undef  GV_UNIQUE_CHECK
 #endif
 
 #define Nullgv Null(GV*)
index b637391..10d5d64 100644 (file)
@@ -351,11 +351,6 @@ EOM
                exit 1
                ;;
            esac
-           # XXX In 64-bit AIX 5L (oslevel 5.1.0.0, ccversion 5.0.2.0)
-           # the Configure library symbol probe mysteriously finds all
-           # symbols but these two --jhi XXX
-           d_pipe='define'
-           d_times='define'
            ;;
 esac
 EOCBU
@@ -474,8 +469,11 @@ EOCBU
 
 if test $usenativedlopen = 'true'
 then
-        ccflags="$ccflags -DUSE_NATIVE_DLOPEN"
-       ldflags="$ldflags -brtl"
+    ccflags="$ccflags -DUSE_NATIVE_DLOPEN"
+    case "$cc" in
+      *gcc*) ldflags="$ldflags -Wl,-brtl" ;;
+      *)     ldflags="$ldflags -brtl" ;;
+      esac
 else
     # If the C++ libraries, libC and libC_r, are available we will prefer them
     # over the vanilla libc, because the libC contain loadAndInit() and
index ebbd786..f46bed8 100644 (file)
@@ -71,3 +71,5 @@ $define|true|[yY]*)
        ;;
 esac
 EOCBU
+
+useperlio='undef'
index 8a4f289..f844525 100644 (file)
@@ -21,10 +21,7 @@ esac
 # -D_XOPEN_SOURCE_EXTENDED alters system headers.
 # -DPERL_IGNORE_FPUSIG=SIGFPE
 # 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 -D_XOPEN_SOURCE_EXTENDED -DPERL_IGNORE_FPUSIG=SIGFPE' ;;
-*) ccflags='$ccflags -Kenum_long,llm_case_lower,llm_keep,no_integer_overflow -DPOSIX_BC -DUSE_PURE_BISON -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED -DPERL_IGNORE_FPUSIG=SIGFPE' ;;
-esac
+ccflags="$ccflags -Kenum_long,llm_case_lower,llm_keep,no_integer_overflow -DPOSIX_BC -DUSE_PURE_BISON -D_XOPEN_SOURCE_EXTENDED -DPERL_IGNORE_FPUSIG=SIGFPE"
 
 # ccdlflags have yet to be determined.
 #case "$ccdlflags" in
index 24199c9..a90ac37 100644 (file)
 #   PATH. The PATH test is triggered because cwd calls
 #   `fullpath -t`.
 #
-#   lib/ExtUtils.t: If you follow these hints and include
-#   -w4 in your ccflags, this test will complain about
-#   extra .err files appearing in its test directory.
-#
-#   ext/IO/lib/IO/t/io_sock.t Still investigating
-#   ext/POSIX/sigaction.t Still investigating
+#   ext/IO/lib/IO/t/io_sock.t: Subtest 14 is skipped due to
+#   the fact that the functionality to read back the non-blocking
+#   status of a socket is not implemented in QNX's TCP/IP. This
+#   has been reported to QNX and it may work with later versions
+#   of TCP/IP.
 #
 # Older issues:
 #   lib/posix.t test failed on test 17 because acos(1) != 0.
diff --git a/hv.c b/hv.c
index 48cb2cc..76180f2 100644 (file)
--- a/hv.c
+++ b/hv.c
@@ -441,7 +441,7 @@ Perl_hv_store(pTHX_ HV *hv, const char *key, I32 klen, SV *val, register U32 has
 #ifdef ENV_IS_CASELESS
            else if (mg_find((SV*)hv, PERL_MAGIC_env)) {
                 key = savepvn(key,klen);
-               key = strupr(key);
+               key = (const char*)strupr((char*)key);
                hash = 0;
            }
 #endif
@@ -598,9 +598,9 @@ Perl_hv_store_ent(pTHX_ HV *hv, SV *keysv, SV *val, register U32 hash)
 
     entry = new_HE();
     if (HvSHAREKEYS(hv))
-       HeKEY_hek(entry) = share_hek(key, is_utf8?-klen:klen, hash);
+       HeKEY_hek(entry) = share_hek(key, is_utf8?-(I32)klen:klen, hash);
     else                                       /* gotta do the real thing */
-       HeKEY_hek(entry) = save_hek(key, is_utf8?-klen:klen, hash);
+       HeKEY_hek(entry) = save_hek(key, is_utf8?-(I32)klen:klen, hash);
     if (key != keysave)
        Safefree(key);
     HeVAL(entry) = val;
index 817e970..5ee7dc8 100644 (file)
@@ -4418,7 +4418,7 @@ or
        } else {
          $self->{writemakefile} =
              qq{NO Makefile.PL refused to write a Makefile.};
-         # It's probably worth to record the reason, so let's retry
+         # It's probably worth it to record the reason, so let's retry
          # local $/;
          # my $fh = IO::File->new("$system |"); # STDERR? STDIN?
          # $self->{writemakefile} .= <$fh>;
@@ -6064,10 +6064,11 @@ separated):
 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
+module version number which will also be reflected in the distribution
+name when you run 'make dist'), so the really hottest and newest 
+distribution 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
 
index 27a3105..7192665 100644 (file)
@@ -85,6 +85,25 @@ use base qw/ Exporter /;
 our @EXPORT = qw(cwd getcwd fastcwd fastgetcwd);
 our @EXPORT_OK = qw(chdir abs_path fast_abs_path realpath fast_realpath);
 
+# sys_cwd may keep the builtin command
+
+# All the functionality of this module may provided by builtins,
+# there is no sense to process the rest of the file.
+# The best choice may be to have this in BEGIN, but how to return from BEGIN?
+
+if ($^O eq 'os2' && defined &sys_cwd && defined &sys_abspath) {
+    local $^W = 0;
+    *cwd               = \&sys_cwd;
+    *getcwd            = \&cwd;
+    *fastgetcwd                = \&cwd;
+    *fastcwd           = \&cwd;
+    *abs_path          = \&sys_abspath;
+    *fast_abs_path     = \&abs_path;
+    *realpath          = \&abs_path;
+    *fast_realpath     = \&abs_path;
+    return 1;
+}
+
 eval {
     require XSLoader;
     XSLoader::load('Cwd');
@@ -315,7 +334,7 @@ sub _epoc_cwd {
         *fastcwd       = \&_dos_cwd;
         *abs_path      = \&fast_abs_path;
     }
-    elsif ($^O eq 'qnx') {
+    elsif ($^O =~ m/^(?:qnx|nto)$/ ) {
         *cwd           = \&_qnx_cwd;
         *getcwd                = \&_qnx_cwd;
         *fastgetcwd    = \&_qnx_cwd;
index 2ade74d..3c76657 100644 (file)
@@ -371,7 +371,7 @@ close FH or die "close $makefilePL: $!\n";
 chdir $dir or die $!; push @INC,  '../../lib';
 END {chdir ".." or warn $!};
 
-my @perlout = `$runperl Makefile.PL`;
+my @perlout = `$runperl Makefile.PL PERL_CORE=1`;
 if ($?) {
   print "not ok 1 # $runperl Makefile.PL failed: $?\n";
   print "# $_" foreach @perlout;
index dc691e9..70dafe8 100644 (file)
@@ -280,7 +280,8 @@ sub constants {
              INSTALLSITEARCH INSTALLBIN INSTALLSCRIPT PERL_LIB
              PERL_ARCHLIB SITELIBEXP SITEARCHEXP LIBPERL_A MYEXTLIB
              FIRST_MAKEFILE MAKE_APERL_FILE PERLMAINCC PERL_SRC
-             PERL_INC PERL FULLPERL LIBPTH BASE_IMPORT
+             PERL_INC PERL FULLPERL LIBPTH BASE_IMPORT PERLRUN
+             PERLRUNINST TEST_LIBS FULL_AR PERL_CORE
                  NLM_VERSION MPKTOOL TOOLPATH
 
              / ) {
index 5e06b16..da6a032 100644 (file)
@@ -84,7 +84,7 @@ sub canonpath {
     
     # Handle POSIX-style node names beginning with double slash
     my $node = '';
-    if ( $^O =~ m/^qnx|nto$/ && $path =~ s:^(//[^/]+)(/|\z):/:s ) {
+    if ( $^O =~ m/^(?:qnx|nto)$/ && $path =~ s:^(//[^/]+)(/|\z):/:s ) {
       $node = $1;
     }
     $path =~ s|(?<=[^/])/+|/|g ;                   # xx////xx  -> xx/xx
@@ -464,6 +464,13 @@ EOT
     }
 
     my(@otherfiles) = values %{$self->{XS}}; # .c files from *.xs files
+    if ( $^O eq 'qnx' ) {
+      my @errfiles = @{$self->{C}};
+      for ( @errfiles ) {
+       s/.c$/.err/;
+      }
+      push( @otherfiles, @errfiles, 'perlmain.err' );
+    }
     push(@otherfiles, $attribs{FILES}) if $attribs{FILES};
     push(@otherfiles, qw[./blib $(MAKE_APERL_FILE) $(INST_ARCHAUTODIR)/extralibs.all
                         perlmain.c tmon.out mon.out core core.*perl.*.?
@@ -568,7 +575,8 @@ sub constants {
              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
+             PERL_INC PERL FULLPERL PERLRUN PERLRUNINST TEST_LIBS 
+              FULL_AR PERL_CORE
 
              / ) {
        next unless defined $self->{$tmp};
@@ -841,19 +849,19 @@ distclean :: realclean distcheck
 
     push @m, q{
 distcheck :
-       $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=fullcheck \\
+       $(PERLRUN) -MExtUtils::Manifest=fullcheck \\
                -e fullcheck
 };
 
     push @m, q{
 skipcheck :
-       $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=skipcheck \\
+       $(PERLRUN) -MExtUtils::Manifest=skipcheck \\
                -e skipcheck
 };
 
     push @m, q{
 manifest :
-       $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=mkmanifest \\
+       $(PERLRUN) -MExtUtils::Manifest=mkmanifest \\
                -e mkmanifest
 };
 
@@ -875,7 +883,7 @@ sub dist_ci {
     my @m;
     push @m, q{
 ci :
-       $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=maniread \\
+       $(PERLRUN) -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");'
@@ -942,7 +950,7 @@ sub dist_dir {
     push @m, q{
 distdir :
        $(RM_RF) $(DISTVNAME)
-       $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=manicopy,maniread \\
+       $(PERLRUN) -MExtUtils::Manifest=manicopy,maniread \\
                -e "manicopy(maniread(),'$(DISTVNAME)', '$(DIST_CP)');"
 };
     join "", @m;
@@ -961,7 +969,7 @@ sub dist_test {
     my @m;
     push @m, q{
 disttest : distdir
-       cd $(DISTVNAME) && $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) Makefile.PL
+       cd $(DISTVNAME) && $(PERLRUN) Makefile.PL
        cd $(DISTVNAME) && $(MAKE)
        cd $(DISTVNAME) && $(MAKE) test
 };
@@ -997,7 +1005,7 @@ static :: $self->{BASEEXT}.exp
 
     push(@m,"
 $self->{BASEEXT}.exp: Makefile.PL
-",'    $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e \'use ExtUtils::Mksymlists; \\
+",'    $(PERLRUN) -e \'use ExtUtils::Mksymlists; \\
        Mksymlists("NAME" => "',$self->{NAME},'", "DL_FUNCS" => ',
        neatvalue($funcs), ', "FUNCLIST" => ', neatvalue($funclist),
        ', "DL_VARS" => ', neatvalue($vars), ');\'
@@ -1045,7 +1053,7 @@ BOOTSTRAP = '."$self->{BASEEXT}.bs".'
 # 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)" \
+       '.$self->{NOECHO}.'$(PERLRUN) \
                -MExtUtils::Mkbootstrap \
                -e "Mkbootstrap(\'$(BASEEXT)\',\'$(BSLOADLIBS)\');"
        '.$self->{NOECHO}.'$(TOUCH) $(BOOTSTRAP)
@@ -1400,7 +1408,7 @@ 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 'system(q[$(PERLRUN) $(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 ";
@@ -2043,6 +2051,25 @@ usually solves this kind of problem.
     # Define 'FULLPERL' to be a non-miniperl (used in test: target)
     ($self->{FULLPERL} = $self->{PERL}) =~ s/miniperl/perl/i
        unless ($self->{FULLPERL});
+
+    # Are we building the core?
+    $self->{PERL_CORE} = 0 unless exists $self->{PERL_CORE};
+
+    # How do we run perl?
+    $self->{PERLRUN}      = $self->{PERL};
+
+    # How do we run perl when installing libraries?
+    $self->{PERLRUNINST} .= $self->{PERL}. ' -I$(INST_ARCHLIB) -I$(INST_LIB)';
+
+    # What extra library dirs do we need when running the tests?
+    $self->{TEST_LIBS}   .= ' -I$(INST_ARCHLIB) -I$(INST_LIB)';
+
+    # When building the core, we need to add some helper libs since
+    # perl's @INC won't work (we're not installed yet).
+    foreach my $targ (qw(PERLRUN PERLRUNINST TEST_LIBS)) {
+        $self->{$targ} .= ' -I$(PERL_ARCHLIB) -I$(PERL_LIB)'
+          if $self->{PERL_CORE};
+    }
 }
 
 =item init_others
@@ -2238,9 +2265,9 @@ sub installbin {
 EXE_FILES = @{$self->{EXE_FILES}}
 
 } . ($Is_Win32
-  ? q{FIXIN = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
+  ? q{FIXIN = $(PERLRUN) \
     -e "system qq[pl2bat.bat ].shift"
-} : q{FIXIN = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::MakeMaker \
+} : q{FIXIN = $(PERLRUN) -MExtUtils::MakeMaker \
     -e "MY->fixin(shift)"
 }).qq{
 pure_all :: @to
@@ -2365,7 +2392,7 @@ $(MAP_TARGET) :: static $(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) \
+       }.$self->{NOECHO}.q{$(PERLRUNINST) \
                Makefile.PL DIR=}, $dir, q{ \
                MAKEFILE=$(MAKE_APERL_FILE) LINKTYPE=static \
                MAKEAPERL=1 NORECURS=1 CCCDLFLAGS=};
@@ -2601,7 +2628,7 @@ $(OBJECT) : $(FIRST_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{
+       $(PERLRUN) 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
@@ -2654,7 +2681,7 @@ 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 'system(q[$(PERLRUN) $(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 ";
@@ -3061,8 +3088,7 @@ sub pm_to_blib {
     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 \
+       }.$self->{NOECHO}.q{$(PERLRUNINST) -MExtUtils::Install \
         -e "pm_to_blib({qw{$(PM_TO_BLIB)}},'}.$autodir.q{','$(PM_FILTER)')"
        }.$self->{NOECHO}.q{$(TOUCH) $@
 };
@@ -3142,7 +3168,7 @@ all :: $target
        $self->{NOECHO}\$(NOOP)
 
 $target :: $plfile
-       \$(PERL) -I\$(INST_ARCHLIB) -I\$(INST_LIB) -I\$(PERL_ARCHLIB) -I\$(PERL_LIB) $plfile $target
+       \$(PERLRUNINST) $plfile $target
 ";
        }
     }
@@ -3462,7 +3488,7 @@ Helper method to write the test targets
 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";
+    "\t$perl".q! $(TEST_LIBS) -e 'use Test::Harness qw(&runtests $$verbose); $$verbose=$(TEST_VERBOSE); runtests @ARGV;' !."$tests\n";
 }
 
 =item test_via_script (o)
@@ -3474,7 +3500,7 @@ Other helper method for test.
 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
+    qq{\t$perl}.q{ $(TEST_LIBS) }.qq{$script
 };
 }
 
@@ -3493,7 +3519,7 @@ sub tool_autosplit {
     $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) ;'
+AUTOSPLITFILE = $(PERLRUN) -e 'use AutoSplit;}.$asl.q{autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1) ;'
 };
 }
 
@@ -3520,13 +3546,13 @@ SHELL = $bin_sh
     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
+MKPATH = $(PERLRUN) -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
+EQUALIZE_TIMESTAMP = $(PERLRUN) -MExtUtils::Command -e eqtime
 };
 
 
@@ -3759,7 +3785,7 @@ help:
 
     push @m, q{
 Version_check:
-       }.$self->{NOECHO}.q{$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
+       }.$self->{NOECHO}.q{$(PERLRUN) \
                -MExtUtils::MakeMaker=Version_check \
                -e "Version_check('$(MM_VERSION)')"
 };
@@ -3793,7 +3819,7 @@ sub xs_c {
     return '' unless $self->needs_linking();
     '
 .xs.c:
-       $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $(XSUBPP_EXTRA_ARGS) $*.xs > $*.xsc && $(MV) $*.xsc $*.c
+       $(PERLRUN) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $(XSUBPP_EXTRA_ARGS) $*.xs > $*.xsc && $(MV) $*.xsc $*.c
 ';
 }
 
@@ -3808,7 +3834,7 @@ sub xs_cpp {
     return '' unless $self->needs_linking();
     '
 .xs.cpp:
-       $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.xsc && $(MV) $*.xsc $*.cpp
+       $(PERLRUN) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.xsc && $(MV) $*.xsc $*.cpp
 ';
 }
 
@@ -3824,7 +3850,7 @@ sub xs_o {        # many makes are too dumb to use xs_c then c_o
     return '' unless $self->needs_linking();
     '
 .xs$(OBJ_EXT):
-       $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.xsc && $(MV) $*.xsc $*.c
+       $(PERLRUN) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.xsc && $(MV) $*.xsc $*.c
        $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.c
 ';
 }
index 816074a..41a11bb 100644 (file)
@@ -538,7 +538,8 @@ sub constants {
              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
+             PERL_INC PERL FULLPERL PERLRUN PERLRUNINST TEST_LIBS 
+             FULL_AR PERL_CORE
              / ) {
        next unless defined $self->{$macro};
        push @m, "$macro = $self->{$macro}\n";
index 7bcf1f1..be00a6b 100644 (file)
@@ -254,7 +254,8 @@ sub constants {
              INSTALLSITEARCH INSTALLBIN INSTALLSCRIPT PERL_LIB
              PERL_ARCHLIB SITELIBEXP SITEARCHEXP LIBPERL_A MYEXTLIB
              FIRST_MAKEFILE MAKE_APERL_FILE PERLMAINCC PERL_SRC
-             PERL_INC PERL FULLPERL
+             PERL_INC PERL FULLPERL PERLRUN PERLRUNINST TEST_LIBS 
+             FULL_AR PERL_CORE
 
              / ) {
        next unless defined $self->{$tmp};
index 4e258ce..cef46bc 100644 (file)
@@ -205,13 +205,13 @@ sub full_setup {
     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
+    PERLRUN PERLRUNINST PERL_ARCHLIB PERL_CORE
+    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
+    PPM_INSTALL_SCRIPT PREFIX
+    PREREQ_PM SKIP TEST_LIBS 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
        /;
@@ -411,7 +411,7 @@ sub ExtUtils::MakeMaker::new {
        }
        if ($self->{PARENT}) {
            $self->{PARENT}->{CHILDREN}->{$newclass} = $self;
-           foreach my $opt (qw(CAPI POLLUTE)) {
+           foreach my $opt (qw(CAPI POLLUTE PERL_CORE)) {
                if (exists $self->{PARENT}->{$opt}
                    and not exists $self->{$opt})
                    {
@@ -1060,7 +1060,7 @@ 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,
+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
@@ -1591,6 +1591,11 @@ passed to subdirectory makes.
 
 Perl binary for tasks that can be done by miniperl
 
+=item PERL_CORE
+
+Set only when MakeMaker is building the extensions of the Perl core
+distribution.
+
 =item PERLMAINCC
 
 The call to the program that is able to compile perlmain.c. Defaults
@@ -1598,12 +1603,20 @@ to $(CC).
 
 =item PERL_ARCHLIB
 
-Same as below, but for architecture dependent files.
+Same as for PERL_LIB, but for architecture dependent files.
+
+Used only when MakeMaker is building the extensions of the Perl core
+distribution (because normally $(PERL_ARCHLIB) is automatically in @INC,
+and adding it would get in the way of PERL5LIB).
 
 =item PERL_LIB
 
 Directory containing the Perl library to use.
 
+Used only when MakeMaker is building the extensions of the Perl core
+distribution (because normally $(PERL_LIB) is automatically in @INC,
+and adding it would get in the way of PERL5LIB).
+
 =item PERL_MALLOC_OK
 
 defaults to 0.  Should be set to TRUE if the extension can work with
@@ -1632,6 +1645,17 @@ 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 PERLRUN
+
+Use this instead of $(PERL) or $(FULLPERL) when you wish to run perl.
+It will set up extra necessary flags for you.
+  
+=item PERLRUNINST
+  
+Use this instead of $(PERL) or $(FULLPERL) when you wish to run
+perl to work with modules.  It will add things like -I$(INST_ARCH)
+and other necessary flags.
+  
 =item PERL_SRC
 
 Directory containing the Perl source code (use of this should be
@@ -1744,11 +1768,16 @@ only check if any version is installed already.
 
 =item SKIP
 
-Arryref. E.g. [qw(name1 name2)] skip (do not write) sections of the
+Arrayref. 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 TEST_LIBS
+
+The set of -I's necessary to run a "make test".  Use as:
+$(PERL) $(TEST_LIBS) -e '...' for example.
+  
 =item TYPEMAPS
 
 Ref to array of typemap file names.  Use this when the typemaps are
index f640ef7..e4a292b 100644 (file)
@@ -44,7 +44,7 @@ use File::Spec;
 use Cwd;
 
 
-my $NonTaintedCwd = $^O eq 'MSWin32' || $^O eq 'cygwin';
+my $NonTaintedCwd = $^O eq 'MSWin32' || $^O eq 'cygwin' || $^O eq 'os2';
 
 cleanup();
 
index bd4d77b..00899e7 100644 (file)
@@ -37,7 +37,7 @@ sub canonpath {
     
     # Handle POSIX-style node names beginning with double slash
     my $node = '';
-    if ( $^O =~ m/^qnx|nto$/ && $path =~ s:^(//[^/]+)(/|\z):/:s ) {
+    if ( $^O =~ m/^(?:qnx|nto)$/ && $path =~ s:^(//[^/]+)(/|\z):/:s ) {
       $node = $1;
     }
     $path =~ s|/+|/|g unless($^O eq 'cygwin');     # xx////xx  -> xx/xx
index 5d4c575..c1b782c 100644 (file)
@@ -107,15 +107,15 @@ BEGIN
     }
    else
     {
-     my $IsWin32 = $^O eq 'MSWin32';
-     unless(($script =~ m#/# || ($IsWin32 && $script =~ m#\\#))
+     my $dosish = ($^O eq 'MSWin32' or $^O eq 'os2');
+     unless(($script =~ m#/# || ($dosish && $script =~ m#\\#))
             && -f $script)
       {
        my $dir;
        foreach $dir (File::Spec->path)
        {
         my $scr = File::Spec->catfile($dir, $script);
-       if(-r $scr && (!$IsWin32 || -x _))
+       if(-r $scr && (!$dosish || -x _))
          {
           $script = $scr;
 
diff --git a/lib/Net/DummyInetd.pm b/lib/Net/DummyInetd.pm
deleted file mode 100644 (file)
index 2ffddf7..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-# Net::DummyInetd.pm
-#
-# Copyright (c) 1995-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 Net::DummyInetd;
-
-require 5.002;
-
-use IO::Handle;
-use IO::Socket;
-use strict;
-use vars qw($VERSION);
-use Carp;
-
-$VERSION = do { my @r=(q$Revision: 1.6 $=~/\d+/g); sprintf "%d."."%02d"x$#r,@r};
-
-
-sub _process
-{
- my $listen = shift;
- my @cmd = @_;
- my $vec = '';
- my $r;
-
- vec($vec,fileno($listen),1) = 1;
-
- while(select($r=$vec,undef,undef,undef))
-  {
-   my $sock = $listen->accept;
-   my $pid;
-
-   if($pid = fork())
-    {
-     sleep 1;
-     close($sock);
-    }
-   elsif(defined $pid)
-    {
-     my $x =  IO::Handle->new_from_fd($sock,"r");
-     open(STDIN,"<&=".fileno($x)) || die "$! $@";
-     close($x);
-
-     my $y = IO::Handle->new_from_fd($sock,"w");
-     open(STDOUT,">&=".fileno($y)) || die "$! $@";
-     close($y);
-
-     close($sock);
-     exec(@cmd) || carp "$! $@";
-    }
-   else
-    {
-     close($sock);
-     carp $!;
-    }
-  }
- exit -1; 
-}
-
-sub new
-{
- my $self = shift;
- my $type = ref($self) || $self;
-
- my $listen = IO::Socket::INET->new(Listen => 5, Proto => 'tcp');
- my $pid;
-
- return bless [ $listen->sockport, $pid ]
-       if($pid = fork());
-
- _process($listen,@_);
-}
-
-sub port
-{
- my $self = shift;
- $self->[0];
-}
-
-sub DESTROY
-{
- my $self = shift;
- kill 9, $self->[1];
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-Net::DummyInetd - A dummy Inetd server
-
-=head1 SYNOPSIS
-
-    use Net::DummyInetd;
-    use Net::SMTP;
-    
-    $inetd = new Net::DummyInetd qw(/usr/lib/sendmail -ba -bs);
-    
-    $smtp  = Net::SMTP->new('localhost', Port => $inetd->port);
-
-=head1 DESCRIPTION
-
-C<Net::DummyInetd> is just what its name says, it is a dummy inetd server.
-Creation of a C<Net::DummyInetd> will cause a child process to be spawned off
-which will listen to a socket. When a connection arrives on this socket
-the specified command is fork'd and exec'd with STDIN and STDOUT file
-descriptors duplicated to the new socket.
-
-This package was added as an example of how to use C<Net::SMTP> to connect
-to a C<sendmail> process, which is not the default, via SIDIN and STDOUT.
-A C<Net::Inetd> package will be available in the next release of C<libnet>
-
-=head1 CONSTRUCTOR
-
-=over 4
-
-=item new ( CMD )
-
-Creates a new object and spawns a child process which listens to a socket.
-C<CMD> is a list, which will be passed to C<exec> when a new process needs
-to be created.
-
-=back
-
-=head1 METHODS
-
-=over 4
-
-=item port
-
-Returns the port number on which the I<DummyInetd> object is listening
-
-=back
-
-=head1 AUTHOR
-
-Graham Barr <gbarr@pobox.com>
-
-=head1 COPYRIGHT
-
-Copyright (c) 1995-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/lib/Net/PH.pm b/lib/Net/PH.pm
deleted file mode 100644 (file)
index d245b5c..0000000
+++ /dev/null
@@ -1,784 +0,0 @@
-#
-# Copyright (c) 1995-1997 Graham Barr <gbarr@pobox.com> and
-# Alex Hristov <hristov@slb.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 Net::PH;
-
-require 5.001;
-
-use strict;
-use vars qw(@ISA $VERSION);
-use Carp;
-
-use Socket 1.3;
-use IO::Socket;
-use Net::Cmd;
-use Net::Config;
-
-$VERSION = "2.20"; # $Id: //depot/libnet/Net/PH.pm#7$
-@ISA     = qw(Exporter Net::Cmd IO::Socket::INET);
-
-sub new
-{
- my $pkg  = shift;
- my $host = shift if @_ % 2;
- my %arg  = @_; 
- my $hosts = defined $host ? [ $host ] : $NetConfig{ph_hosts};
- my $ph;
-
- my $h;
- foreach $h (@{$hosts})
-  {
-   $ph = $pkg->SUPER::new(PeerAddr => ($host = $h), 
-                         PeerPort => $arg{Port} || 'csnet-ns(105)',
-                         Proto    => 'tcp',
-                         Timeout  => defined $arg{Timeout}
-                                       ? $arg{Timeout}
-                                       : 120
-                        ) and last;
-  }
-
- return undef
-       unless defined $ph;
-
- ${*$ph}{'net_ph_host'} = $host;
-
- $ph->autoflush(1);
-
- $ph->debug(exists $arg{Debug} ? $arg{Debug} : undef);
-
- $ph;
-}
-
-sub status
-{
- my $ph = shift;
-
- $ph->command('status')->response;
- $ph->code;
-}
-
-sub login
-{
- my $ph = shift;
- my($user,$pass,$encrypted) = @_;
- my $resp;
-
- $resp = $ph->command("login",$user)->response;
-
- if(defined($pass) && $resp == CMD_MORE)
-  {
-   if($encrypted)
-    {
-     my $challenge_str = $ph->message;
-     chomp($challenge_str);
-     Net::PH::crypt::crypt_start($pass);
-     my $cryptstr = Net::PH::crypt::encryptit($challenge_str);
-
-     $ph->command("answer", $cryptstr);
-    }
-   else
-    {
-     $ph->command("clear", $pass);
-    }
-   $resp = $ph->response;
-  }
-
- $resp == CMD_OK;
-}
-
-sub logout
-{
- my $ph = shift;
-
- $ph->command("logout")->response == CMD_OK;
-}
-
-sub id
-{
- my $ph = shift;
- my $id = @_ ? shift : $<;
-
- $ph->command("id",$id)->response == CMD_OK;
-}
-
-sub siteinfo
-{
- my $ph = shift;
-
- $ph->command("siteinfo");
-
- my $ln;
- my %resp;
- my $cur_num = 0;
-
- while(defined($ln = $ph->getline))
-  {
-   $ph->debug_print(0,$ln)
-     if ($ph->debug & 2);
-   chomp($ln);
-   my($code,$num,$tag,$data);
-
-   if($ln =~ /^-(\d+):(\d+):(?:\s*([^:]+):)?\s*(.*)/o)
-    {
-     ($code,$num,$tag,$data) = ($1, $2, $3 || "",$4);
-     $resp{$tag} = bless [$code, $num, $tag, $data], "Net::PH::Result";
-    }
-   else
-    {
-     $ph->set_status($ph->parse_response($ln));
-     return \%resp;
-    }
-  }
-
- return undef;
-}
-
-sub query
-{
- my $ph = shift;
- my $search = shift;
-
- my($k,$v);
-
- my @args = ('query', _arg_hash($search));
-
- push(@args,'return',_arg_list( shift ))
-       if @_;
-
- unless($ph->command(@args)->response == CMD_INFO)
-  {
-   return $ph->code == 501
-       ? []
-       : undef;
-  }
-
- my $ln;
- my @resp;
- my $cur_num = 0;
-
- my($last_tag);
-
- while(defined($ln = $ph->getline))
-  {
-   $ph->debug_print(0,$ln)
-     if ($ph->debug & 2);
-   chomp($ln);
-   my($code,$idx,$num,$tag,$data);
-
-   if($ln =~ /^-(\d+):(\d+):\s*([^:]*):\s*(.*)/o)
-    {
-     ($code,$idx,$tag,$data) = ($1,$2,$3,$4);
-     my $num = $idx - 1;
-
-     $resp[$num] ||= {};
-
-     $tag = $last_tag
-       unless(length($tag));
-
-     $last_tag = $tag;
-
-     if(exists($resp[$num]->{$tag}))
-      {
-       $resp[$num]->{$tag}->[3] .= "\n" . $data;
-      }
-     else
-      {
-       $resp[$num]->{$tag} = bless [$code, $idx, $tag, $data], "Net::PH::Result";
-      }
-    }
-   else
-    {
-     $ph->set_status($ph->parse_response($ln));
-     return \@resp;
-    }
-  }
-
- return undef;
-}
-
-sub change
-{
- my $ph = shift;
- my $search = shift;
- my $make = shift;
-
- $ph->command(
-       "change", _arg_hash($search),
-       "make",   _arg_hash($make)
- )->response == CMD_OK;
-}
-
-sub _arg_hash
-{
- my $hash = shift;
-
- return $hash
-       unless(ref($hash));
-
- my($k,$v);
- my @r;
-
- while(($k,$v) = each %$hash)
-  {
-   my $a = $v;
-   $a =~ s/\n/\\n/sog;
-   $a =~ s/\t/\\t/sog;
-   $a = '"' . $a . '"'
-       if $a =~ /\W/;
-   $a = '""'
-       unless length $a;
-
-   push(@r, "$k=$a");   
-  }
- join(" ", @r);
-}
-
-sub _arg_list
-{
- my $arr = shift;
-
- return $arr
-       unless(ref($arr));
-
- my $v;
- my @r;
-
- foreach $v (@$arr)
-  {
-   my $a = $v;
-   $a =~ s/\n/\\n/sog;
-   $a =~ s/\t/\\t/sog;
-   $a = '"' . $a . '"'
-       if $a =~ /\W/;
-   push(@r, $a);   
-  }
-
- join(" ",@r);
-}
-
-sub add
-{
- my $ph = shift;
- my $arg = @_ > 1 ? { @_ } : shift;
-
- $ph->command('add', _arg_hash($arg))->response == CMD_OK;
-}
-
-sub delete
-{
- my $ph = shift;
- my $arg = @_ > 1 ? { @_ } : shift;
-
- $ph->command('delete', _arg_hash($arg))->response == CMD_OK;
-}
-
-sub force
-{
- my $ph = shift; 
- my $search = shift;
- my $force = shift;
-
- $ph->command(
-       "change", _arg_hash($search),
-       "force",  _arg_hash($force)
- )->response == CMD_OK;
-}
-
-
-sub fields
-{
- my $ph = shift;
-
- $ph->command("fields", _arg_list(\@_));
-
- my $ln;
- my %resp;
- my $cur_num = 0;
- my @tags = ();
- while(defined($ln = $ph->getline))
-  {
-   $ph->debug_print(0,$ln)
-     if ($ph->debug & 2);
-   chomp($ln);
-
-   my($code,$num,$tag,$data,$last_tag);
-
-   if($ln =~ /^-(\d+):(\d+):\s*([^:]*):\s*(.*)/o)
-    {
-     ($code,$num,$tag,$data) = ($1,$2,$3,$4);
-
-     $tag = $last_tag
-       unless(length($tag));
-
-     $last_tag = $tag;
-
-     if(exists $resp{$tag})
-      {
-       $resp{$tag}->[3] .= "\n" . $data;
-      }
-     else
-      {
-       $resp{$tag} = bless [$code, $num, $tag, $data], "Net::PH::Result";
-       push @tags, $tag;
-      }
-    }
-   else
-    {
-     $ph->set_status($ph->parse_response($ln));
-     return wantarray ? (\%resp, \@tags) : \%resp;
-    }
-  }
-
- return;
-}
-
-sub quit
-{
- my $ph = shift;
-
- $ph->close
-       if $ph->command("quit")->response == CMD_OK;
-}
-
-##
-## Net::Cmd overrides
-##
-
-sub parse_response
-{
- return ()
-    unless $_[1] =~ s/^(-?)(\d\d\d):?//o;
- ($2, $1 eq "-");
-}
-
-sub debug_text { $_[2] =~ /^(clear)/i ? "$1 ....\n" : $_[2]; }
-
-package Net::PH::Result;
-
-sub code  { shift->[0] }
-sub value { shift->[1] }
-sub field { shift->[2] }
-sub text  { shift->[3] }
-
-package Net::PH::crypt;
-
-#  The code in this package is based upon 'cryptit.c', Copyright (C) 1988 by
-#  Steven Dorner, and Paul Pomes, and the University of Illinois Board
-#  of Trustees, and by CSNET.
-
-use integer;
-use strict;
-sub ROTORSZ () { 256 }
-sub MASK () { 255 }
-
-my(@t1,@t2,@t3,$n1,$n2);
-
-sub crypt_start {
-    my $pass = shift;
-    $n1 = 0;
-    $n2 = 0;
-    crypt_init($pass);
-}
-
-sub crypt_init {
-    my $pw = shift;
-    my $i;
-
-    @t2 = @t3 = (0) x ROTORSZ;
-
-    my $buf = crypt($pw,$pw);
-    return -1 unless length($buf) > 0;
-    $buf = substr($buf . "\0" x 13,0,13);
-    my @buf = map { ord $_ } split(//, $buf);
-
-
-    my $seed = 123;
-    for($i = 0 ; $i < 13 ; $i++) {
-       $seed = $seed * $buf[$i] + $i;
-    }
-    @t1 = (0 .. ROTORSZ-1);
-    
-    for($i = 0 ; $i < ROTORSZ ; $i++) {
-       $seed = 5 * $seed + $buf[$i % 13];
-       my $random = $seed % 65521;
-       my $k = ROTORSZ - 1 - $i;
-       my $ic = ($random & MASK) % ($k + 1);
-       $random >>= 8;
-       @t1[$k,$ic] = @t1[$ic,$k];
-       next if $t3[$k] != 0;
-       $ic = ($random & MASK) % $k;
-       while($t3[$ic] != 0) {
-           $ic = ($ic + 1) % $k;
-       }
-       $t3[$k] = $ic;
-       $t3[$ic] = $k;
-    }
-    for($i = 0 ; $i < ROTORSZ ; $i++) {
-       $t2[$t1[$i] & MASK] = $i
-    }
-}
-
-sub encode {
-    my $sp = shift;
-    my $ch;
-    my $n = scalar(@$sp);
-    my @out = ($n);
-    my $i;
-
-    for($i = 0 ; $i < $n ; ) {
-       my($f0,$f1,$f2) = splice(@$sp,0,3);
-       push(@out,
-           $f0 >> 2,
-           ($f0 << 4) & 060 | ($f1 >> 4) & 017,
-           ($f1 << 2) & 074 | ($f2 >> 6) & 03,
-           $f2 & 077);
-       $i += 3;
-   }
-   join("", map { chr((($_ & 077) + 35) & 0xff) } @out);  # ord('#') == 35
-}
-
-sub encryptit {
-    my $from = shift;
-    my @from = map { ord $_ } split(//, $from);
-    my @sp = ();
-    my $ch;
-    while(defined($ch = shift @from)) {
-       push(@sp,
-           $t2[($t3[($t1[($ch + $n1) & MASK] + $n2) & MASK] - $n2) & MASK] - $n1);
-
-       $n1++;
-       if($n1 == ROTORSZ) {
-           $n1 = 0;
-           $n2++;
-           $n2 = 0 if $n2 == ROTORSZ;
-       }
-    }
-    encode(\@sp);
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-Net::PH - CCSO Nameserver Client class
-
-=head1 SYNOPSIS
-
-    use Net::PH;
-    
-    $ph = Net::PH->new("some.host.name",
-                       Port    => 105,
-                       Timeout => 120,
-                       Debug   => 0);
-
-    if($ph) {
-        $q = $ph->query({ field1 => "value1" },
-                        [qw(name address pobox)]);
-    
-        if($q) {
-        }
-    }
-    
-    # Alternative syntax
-    
-    if($ph) {
-        $q = $ph->query('field1=value1',
-                        'name address pobox');
-    
-        if($q) {
-        }
-    }
-
-=head1 DESCRIPTION
-
-C<Net::PH> is a class implementing a simple Nameserver/PH client in Perl
-as described in the CCSO Nameserver -- Server-Client Protocol. Like other
-modules in the Net:: family the C<Net::PH> object inherits methods from
-C<Net::Cmd>.
-
-=head1 CONSTRUCTOR
-
-=over 4
-
-=item new ( [ HOST ] [, OPTIONS ])
-
-    $ph = Net::PH->new("some.host.name",
-                       Port    => 105,
-                       Timeout => 120,
-                       Debug   => 0
-                      );
-
-This is the constructor for a new Net::PH object. C<HOST> is the
-name of the remote host to which a PH connection is required.
-
-If C<HOST> is not given, then the C<SNPP_Host> specified in C<Net::Config>
-will be used.
-
-C<OPTIONS> is an optional list of named options which are passed in
-a hash like fashion, using key and value pairs. Possible options are:-
-
-B<Port> - Port number to connect to on remote host.
-
-B<Timeout> - Maximum time, in seconds, to wait for a response from the
-Nameserver, a value of zero will cause all IO operations to block.
-(default: 120)
-
-B<Debug> - Enable the printing of debugging information to STDERR
-
-=back
-
-=head1 METHODS
-
-Unless otherwise stated all methods return either a I<true> or I<false>
-value, with I<true> meaning that the operation was a success. When a method
-states that it returns a value, failure will be returned as I<undef> or an
-empty list.
-
-=over 4
-
-=item query( SEARCH [, RETURN ] )
-
-    $q = $ph->query({ name => $myname },
-                   [qw(name email schedule)]);
-    
-    foreach $handle (@{$q}) {
-       foreach $field (keys %{$handle}) {
-            $c = ${$handle}{$field}->code;
-            $v = ${$handle}{$field}->value;
-            $f = ${$handle}{$field}->field;
-            $t = ${$handle}{$field}->text;
-            print "field:[$field] [$c][$v][$f][$t]\n" ;
-       }
-    }
-
-    
-
-Search the database and return fields from all matching entries.
-
-The C<SEARCH> argument is a reference to a HASH which contains field/value
-pairs which will be passed to the Nameserver as the search criteria.
-
-C<RETURN> is optional, but if given it should be a reference to a list which
-contains field names to be returned.
-
-The alternative syntax is to pass strings instead of references, for example
-
-    $q = $ph->query('name=myname',
-                   'name email schedule');
-
-The C<SEARCH> argument is a string that is passed to the Nameserver as the 
-search criteria. The strings being passed should B<not> contain any carriage
-returns, or else the query command might fail or return invalid data.
-
-C<RETURN> is optional, but if given it should be a string which will
-contain field names to be returned.
-
-Each match from the server will be returned as a HASH where the keys are the
-field names and the values are C<Net::PH:Result> objects (I<code>, I<value>, 
-I<field>, I<text>).
-
-Returns a reference to an ARRAY which contains references to HASHs, one
-per match from the server.
-
-=item change( SEARCH , MAKE )
-
-    $r = $ph->change({ email => "*.domain.name" },
-                     { schedule => "busy");
-
-Change field values for matching entries.
-
-The C<SEARCH> argument is a reference to a HASH which contains field/value
-pairs which will be passed to the Nameserver as the search criteria.
-
-The C<MAKE> argument is a reference to a HASH which contains field/value
-pairs which will be passed to the Nameserver that
-will set new values to designated fields.
-
-The alternative syntax is to pass strings instead of references, for example
-
-    $r = $ph->change('email="*.domain.name"',
-                     'schedule="busy"');
-
-The C<SEARCH> argument is a string to be passed to the Nameserver as the 
-search criteria. The strings being passed should B<not> contain any carriage
-returns, or else the query command might fail or return invalid data.
-
-
-The C<MAKE> argument is a string to be passed to the Nameserver that
-will set new values to designated fields.
-
-Upon success all entries that match the search criteria will have
-the field values, given in the Make argument, changed.
-
-=item login( USER, PASS [, ENCRYPT ])
-
-    $r = $ph->login('username','password',1);
-
-Enter login mode using C<USER> and C<PASS>. If C<ENCRYPT> is given and
-is I<true> then the password will be used to encrypt a challenge text 
-string provided by the server, and the encrypted string will be sent back
-to the server. If C<ENCRYPT> is not given, or I<false> then the password 
-will be sent in clear text (I<this is not recommended>)
-
-=item logout()
-
-    $r = $ph->logout();
-
-Exit login mode and return to anonymous mode.
-
-=item fields( [ FIELD_LIST ] )
-
-    $fields = $ph->fields();
-    foreach $field (keys %{$fields}) {
-        $c = ${$fields}{$field}->code;
-        $v = ${$fields}{$field}->value;
-        $f = ${$fields}{$field}->field;
-        $t = ${$fields}{$field}->text;
-        print "field:[$field] [$c][$v][$f][$t]\n";
-    }
-
-In a scalar context, returns a reference to a HASH. The keys of the HASH are
-the field names and the values are C<Net::PH:Result> objects (I<code>,
-I<value>, I<field>, I<text>).
-
-In an array context, returns a two element array. The first element is a
-reference to a HASH as above, the second element is a reference to an array
-which contains the tag names in the order that they were returned from the
-server.
-
-C<FIELD_LIST> is a string that lists the fields for which info will be
-returned.
-
-=item add( FIELD_VALUES )
-
-    $r = $ph->add( { name => $name, phone => $phone });
-
-This method is used to add new entries to the Nameserver database. You
-must successfully call L<login> before this method can be used.
-
-B<Note> that this method adds new entries to the database. To modify
-an existing entry use L<change>.
-
-C<FIELD_VALUES> is a reference to a HASH which contains field/value
-pairs which will be passed to the Nameserver and will be used to 
-initialize the new entry.
-
-The alternative syntax is to pass a string instead of a reference, for example
-
-    $r = $ph->add('name=myname phone=myphone');
-
-C<FIELD_VALUES> is a string that consists of field/value pairs which the
-new entry will contain. The strings being passed should B<not> contain any
-carriage returns, or else the query command might fail or return invalid data.
-
-
-=item delete( FIELD_VALUES )
-
-    $r = $ph->delete('name=myname phone=myphone');
-
-This method is used to delete existing entries from the Nameserver database.
-You must successfully call L<login> before this method can be used.
-
-B<Note> that this method deletes entries to the database. To modify
-an existing entry use L<change>.
-
-C<FIELD_VALUES> is a string that serves as the search criteria for the
-records to be deleted. Any entry in the database which matches this search 
-criteria will be deleted.
-
-=item id( [ ID ] )
-
-    $r = $ph->id('709');
-
-Sends C<ID> to the Nameserver, which will enter this into its
-logs. If C<ID> is not given then the UID of the user running the
-process will be sent.
-
-=item status()
-
-Returns the current status of the Nameserver.
-
-=item siteinfo()
-
-    $siteinfo = $ph->siteinfo();
-    foreach $field (keys %{$siteinfo}) {
-        $c = ${$siteinfo}{$field}->code;
-        $v = ${$siteinfo}{$field}->value;
-        $f = ${$siteinfo}{$field}->field;
-        $t = ${$siteinfo}{$field}->text;
-        print "field:[$field] [$c][$v][$f][$t]\n";
-    }
-
-Returns a reference to a HASH containing information about the server's 
-site. The keys of the HASH are the field names and values are
-C<Net::PH:Result> objects (I<code>, I<value>, I<field>, I<text>).
-
-=item quit()
-
-    $r = $ph->quit();
-
-Quit the connection
-
-=back
-
-=head1 Q&A
-
-How do I get the values of a Net::PH::Result object?
-
-    foreach $handle (@{$q}) {
-        foreach $field (keys %{$handle}) {
-            $my_code  = ${$q}{$field}->code;
-            $my_value = ${$q}{$field}->value;
-            $my_field = ${$q}{$field}->field;
-            $my_text  = ${$q}{$field}->text;
-        }
-    }
-
-How do I get a count of the returned matches to my query?
-
-    $my_count = scalar(@{$query_result});
-
-How do I get the status code and message of the last C<$ph> command?
-
-    $status_code    = $ph->code;
-    $status_message = $ph->message;
-
-=head1 SEE ALSO
-
-L<Net::Cmd>
-
-=head1 AUTHORS
-
-Graham Barr <gbarr@pobox.com>
-Alex Hristov <hristov@slb.com>
-
-=head1 ACKNOWLEDGMENTS
-
-Password encryption code ported to perl by Broc Seib <bseib@purdue.edu>,
-Purdue University Computing Center.
-
-Otis Gospodnetic <otisg@panther.middlebury.edu> suggested
-passing parameters as string constants. Some queries cannot be 
-executed when passing parameters as string references.
-
-        Example: query first_name last_name email="*.domain"
-
-=head1 COPYRIGHT
-
-The encryption code is based upon cryptit.c, Copyright (C) 1988 by
-Steven Dorner, and Paul Pomes, and the University of Illinois Board
-of Trustees, and by CSNET.
-
-All other code is Copyright (c) 1996-1997 Graham Barr <gbarr@pobox.com>
-and Alex Hristov <hristov@slb.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/lib/Net/SNPP.pm b/lib/Net/SNPP.pm
deleted file mode 100644 (file)
index 60781b3..0000000
+++ /dev/null
@@ -1,414 +0,0 @@
-# Net::SNPP.pm
-#
-# Copyright (c) 1995-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 Net::SNPP;
-
-require 5.001;
-
-use strict;
-use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
-use Socket 1.3;
-use Carp;
-use IO::Socket;
-use Net::Cmd;
-use Net::Config;
-
-$VERSION = "1.11"; # $Id:$
-@ISA     = qw(Net::Cmd IO::Socket::INET);
-@EXPORT  = (qw(CMD_2WAYERROR CMD_2WAYOK CMD_2WAYQUEUED), @Net::Cmd::EXPORT);
-
-sub CMD_2WAYERROR  () { 7 }
-sub CMD_2WAYOK     () { 8 }
-sub CMD_2WAYQUEUED () { 9 }
-
-sub new
-{
- my $self = shift;
- my $type = ref($self) || $self;
- my $host = shift if @_ % 2;
- my %arg  = @_; 
- my $hosts = defined $host ? [ $host ] : $NetConfig{snpp_hosts};
- my $obj;
-
- my $h;
- foreach $h (@{$hosts})
-  {
-   $obj = $type->SUPER::new(PeerAddr => ($host = $h), 
-                           PeerPort => $arg{Port} || 'snpp(444)',
-                           Proto    => 'tcp',
-                           Timeout  => defined $arg{Timeout}
-                                               ? $arg{Timeout}
-                                               : 120
-                           ) and last;
-  }
-
- return undef
-       unless defined $obj;
-
- ${*$obj}{'net_snpp_host'} = $host;
-
- $obj->autoflush(1);
-
- $obj->debug(exists $arg{Debug} ? $arg{Debug} : undef);
-
- unless ($obj->response() == CMD_OK)
-  {
-   $obj->close();
-   return undef;
-  }
-
- $obj;
-}
-
-##
-## User interface methods
-##
-
-sub pager_id
-{
- @_ == 2 or croak 'usage: $snpp->pager_id( PAGER_ID )';
- shift->_PAGE(@_);
-}
-
-sub content
-{
- @_ == 2 or croak 'usage: $snpp->content( MESSAGE )';
- shift->_MESS(@_);
-}
-
-sub send
-{
- my $me = shift;
-
- if(@_)
-  {
-   my %arg = @_;
-
-   if(exists $arg{Pager})
-    {
-     my $pagers = ref($arg{Pager}) ? $arg{Pager} : [ $arg{Pager} ];
-     my $pager;
-     foreach $pager (@$pagers)
-      {
-       $me->_PAGE($pager) || return 0
-      }
-    }
-
-   $me->_MESS($arg{Message}) || return 0
-       if(exists $arg{Message});
-
-   $me->hold($arg{Hold}) || return 0
-       if(exists $arg{Hold});
-
-   $me->hold($arg{HoldLocal},1) || return 0
-       if(exists $arg{HoldLocal});
-
-   $me->_COVE($arg{Coverage}) || return 0
-       if(exists $arg{Coverage});
-
-   $me->_ALER($arg{Alert} ? 1 : 0) || return 0
-       if(exists $arg{Alert});
-
-   $me->service_level($arg{ServiceLevel}) || return 0
-       if(exists $arg{ServiceLevel});
-  }
-
- $me->_SEND();
-}
-
-sub data
-{
- my $me = shift;
-
- my $ok = $me->_DATA() && $me->datasend(@_);
-
- return $ok
-       unless($ok && @_);
-
- $me->dataend;
-}
-
-sub login
-{
- @_ == 2 || @_ == 3 or croak 'usage: $snpp->login( USER [, PASSWORD ])';
- shift->_LOGI(@_);
-}
-
-sub help
-{
- @_ == 1 or croak 'usage: $snpp->help()';
- my $me = shift;
-
- return $me->_HELP() ? $me->message
-                    : undef;
-}
-
-sub xwho
-{
- @_ == 1 or croak 'usage: $snpp->xwho()';
- my $me = shift;
-
- $me->_XWHO or return undef;
-
- my(%hash,$line);
- my @msg = $me->message;
- pop @msg; # Remove command complete line
-
- foreach $line (@msg) {
-   $line =~ /^\s*(\S+)\s*(.*)/ and $hash{$1} = $2;
- }
-
- \%hash;
-}
-
-sub service_level
-{
- @_ == 2 or croak 'usage: $snpp->service_level( LEVEL )';
- my $me = shift;
- my $level = int(shift);
-
- if($level < 0 || $level > 11)
-  {
-   $me->set_status(550,"Invalid Service Level");
-   return 0;
-  }
-
- $me->_LEVE($level);
-}
-
-sub alert
-{
- @_ == 1 || @_ == 2 or croak 'usage: $snpp->alert( VALUE )';
- my $me = shift;
- my $value  = (@_ == 1 || shift) ? 1 : 0;
-
- $me->_ALER($value);
-}
-
-sub coverage
-{
- @_ == 1 or croak 'usage: $snpp->coverage( AREA )';
- shift->_COVE(@_);
-}
-
-sub hold
-{
- @_ == 2 || @_ == 3 or croak 'usage: $snpp->hold( TIME [, LOCAL ] )';
- my $me = shift;
- my $time = shift;
- my $local = (shift) ? "" : " +0000";
-
- my @g = reverse((gmtime($time))[0..5]);
- $g[1] += 1;
- $g[0] %= 100;
-
- $me->_HOLD( sprintf("%02d%02d%02d%02d%02d%02d%s",@g,$local));
-}
-
-sub caller_id
-{
- @_ == 2 or croak 'usage: $snpp->caller_id( CALLER_ID )';
- shift->_CALL(@_);
-}
-
-sub subject
-{
- @_ == 2 or croak 'usage: $snpp->subject( SUBJECT )';
- shift->_SUBJ(@_);
-}
-
-sub two_way
-{
- @_ == 1 or croak 'usage: $snpp->two_way()';
- shift->_2WAY();
-}
-
-sub quit
-{
- @_ == 1 or croak 'usage: $snpp->quit()';
- my $snpp = shift;
-
- $snpp->_QUIT;
- $snpp->close;
-}
-
-##
-## IO/perl methods
-##
-
-sub DESTROY
-{
- my $snpp = shift;
- defined(fileno($snpp)) && $snpp->quit
-}
-
-##
-## Over-ride methods (Net::Cmd)
-##
-
-sub debug_text
-{
- $_[2] =~ s/^((logi|page)\s+\S+\s+)\S+/$1 xxxx/io;
- $_[2];
-}
-
-sub parse_response
-{
- return ()
-    unless $_[1] =~ s/^(\d\d\d)(.?)//o;
- my($code,$more) = ($1, $2 eq "-");
-
- $more ||= $code == 214;
-
- ($code,$more);
-}
-
-##
-## RFC1861 commands
-##
-
-# Level 1
-
-sub _PAGE { shift->command("PAGE", @_)->response()  == CMD_OK }   
-sub _MESS { shift->command("MESS", @_)->response()  == CMD_OK }   
-sub _RESE { shift->command("RESE")->response()  == CMD_OK }   
-sub _SEND { shift->command("SEND")->response()  == CMD_OK }   
-sub _QUIT { shift->command("QUIT")->response()  == CMD_OK }   
-sub _HELP { shift->command("HELP")->response()  == CMD_OK }   
-sub _DATA { shift->command("DATA")->response()  == CMD_MORE }   
-sub _SITE { shift->command("SITE",@_) }   
-
-# Level 2
-
-sub _LOGI { shift->command("LOGI", @_)->response()  == CMD_OK }   
-sub _LEVE { shift->command("LEVE", @_)->response()  == CMD_OK }   
-sub _ALER { shift->command("ALER", @_)->response()  == CMD_OK }   
-sub _COVE { shift->command("COVE", @_)->response()  == CMD_OK }   
-sub _HOLD { shift->command("HOLD", @_)->response()  == CMD_OK }   
-sub _CALL { shift->command("CALL", @_)->response()  == CMD_OK }   
-sub _SUBJ { shift->command("SUBJ", @_)->response()  == CMD_OK }   
-
-# NonStandard
-
-sub _XWHO { shift->command("XWHO")->response()  == CMD_OK }   
-
-1;
-__END__
-
-=head1 NAME
-
-Net::SNPP - Simple Network Pager Protocol Client
-
-=head1 SYNOPSIS
-
-    use Net::SNPP;
-    
-    # Constructors
-    $snpp = Net::SNPP->new('snpphost');
-    $snpp = Net::SNPP->new('snpphost', Timeout => 60);
-
-=head1 NOTE
-
-This module is not complete, yet !
-
-=head1 DESCRIPTION
-
-This module implements a client interface to the SNPP protocol, enabling
-a perl5 application to talk to SNPP servers. This documentation assumes
-that you are familiar with the SNPP protocol described in RFC1861.
-
-A new Net::SNPP object must be created with the I<new> method. Once
-this has been done, all SNPP commands are accessed through this object.
-
-=head1 EXAMPLES
-
-This example will send a pager message in one hour saying "Your lunch is ready"
-
-    #!/usr/local/bin/perl -w
-    
-    use Net::SNPP;
-    
-    $snpp = Net::SNPP->new('snpphost');
-    
-    $snpp->send( Pager   => $some_pager_number,
-                Message => "Your lunch is ready",
-                Alert   => 1,
-                Hold    => time + 3600, # lunch ready in 1 hour :-)
-              ) || die $snpp->message;
-    
-    $snpp->quit;
-
-=head1 CONSTRUCTOR
-
-=over 4
-
-=item new ( [ HOST, ] [ OPTIONS ] )
-
-This is the constructor for a new Net::SNPP object. C<HOST> is the
-name of the remote host to which a SNPP connection is required.
-
-If C<HOST> is not given, then the C<SNPP_Host> specified in C<Net::Config>
-will be used.
-
-C<OPTIONS> are passed in a hash like fashion, using key and value pairs.
-Possible options are:
-
-B<Timeout> - Maximum time, in seconds, to wait for a response from the
-SNPP server (default: 120)
-
-B<Debug> - Enable debugging information
-
-
-Example:
-
-
-    $snpp = Net::SNPP->new('snpphost',
-                          Debug => 1,
-                         );
-
-=head1 METHODS
-
-Unless otherwise stated all methods return either a I<true> or I<false>
-value, with I<true> meaning that the operation was a success. When a method
-states that it returns a value, failure will be returned as I<undef> or an
-empty list.
-
-=over 4
-
-=item reset ()
-
-=item help ()
-
-Request help text from the server. Returns the text or undef upon failure
-
-=item quit ()
-
-Send the QUIT command to the remote SNPP server and close the socket connection.
-
-=back
-
-=head1 EXPORTS
-
-C<Net::SNPP> exports all that C<Net::CMD> exports, plus three more subroutines
-that can bu used to compare against the result of C<status>. These are :-
-C<CMD_2WAYERROR>, C<CMD_2WAYOK>, and C<CMD_2WAYQUEUED>.
-
-=head1 SEE ALSO
-
-L<Net::Cmd>
-RFC1861
-
-=head1 AUTHOR
-
-Graham Barr <gbarr@pobox.com>
-
-=head1 COPYRIGHT
-
-Copyright (c) 1995-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/lib/Net/t/ph.t b/lib/Net/t/ph.t
deleted file mode 100644 (file)
index 41ddab6..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-#!./perl -w
-
-use Net::Config;
-use Net::PH;
-
-unless(@{$NetConfig{ph_hosts}} && $NetConfig{test_hosts}) {
-    print "1..0\n";
-    exit 0;
-}
-
-print "1..5\n";
-
-my $i = 1;
-
-$ph = Net::PH->new(Debug => 0)
-       or (print("not ok 1\n"), exit);
-
-print "ok 1\n";
-
-$ph->fields or print "not ";
-print "ok 2\n";
-
-$ph->siteinfo or print "not ";
-print "ok 3\n";
-
-$ph->id or print "not ";
-print "ok 4\n";
-
-$ph->quit or print "not ";
-print "ok 5\n";
-
index f9eba4d..39d8f7e 100644 (file)
@@ -1,5 +1,5 @@
 
-print "1..11\n";
+print "1..9\n";
 my $i = 1;
 eval { require Net::Config; } || print "not "; print "ok ",$i++,"\n";
 eval { require Net::Domain; } || print "not "; print "ok ",$i++,"\n";
@@ -8,8 +8,6 @@ eval { require Net::Netrc; }  || print "not "; print "ok ",$i++,"\n";
 eval { require Net::FTP; }    || print "not "; print "ok ",$i++,"\n";
 eval { require Net::SMTP; }   || print "not "; print "ok ",$i++,"\n";
 eval { require Net::NNTP; }   || print "not "; print "ok ",$i++,"\n";
-eval { require Net::SNPP; }   || print "not "; print "ok ",$i++,"\n";
-eval { require Net::PH; }     || print "not "; print "ok ",$i++,"\n";
 eval { require Net::POP3; }   || print "not "; print "ok ",$i++,"\n";
 eval { require Net::Time; }   || print "not "; print "ok ",$i++,"\n";
 
index e5df1f8..0a7a762 100644 (file)
@@ -714,6 +714,8 @@ sub _parse_test_line {
                $tot->{ok}++;
                $test->{skipped}++ if $isskip;
 
+               $reason = '[no reason given]'
+                   if $isskip and not defined $reason;
                if (defined $reason and defined $test->{skip_reason}) {
                    # print "was: '$skip_reason' new '$reason'\n";
                    $test->{skip_reason} = 'various reasons'
index 3231155..91ccbee 100644 (file)
@@ -65,11 +65,11 @@ 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.
+Return the first key in the hash.
 
 =item NEXTKEY this, lastkey
 
-Return the next key for the hash.
+Return the next key in the hash.
 
 =item EXISTS this, key
 
index ce657a1..ff819cd 100644 (file)
@@ -3,12 +3,15 @@ package Unicode::UCD;
 use strict;
 use warnings;
 
-our $VERSION = '3.1.0';
+our $VERSION = '0.1';
 
 require Exporter;
 
 our @ISA = qw(Exporter);
-our @EXPORT_OK = qw(charinfo charblock);
+our @EXPORT_OK = qw(charinfo
+                   charblock charscript
+                   charblocks charscripts
+                   charinrange);
 
 use Carp;
 
@@ -18,14 +21,14 @@ Unicode::UCD - Unicode character database
 
 =head1 SYNOPSIS
 
-    use Unicode::UCD 3.1.0;
-    # requires that level of the Unicode character database
-
     use Unicode::UCD 'charinfo';
-    my %charinfo  = charinfo($codepoint);
+    my %charinfo   = charinfo($codepoint);
 
     use Unicode::UCD 'charblock';
-    my $charblock = charblock($codepoint);
+    my $charblock  = charblock($codepoint);
+
+    use Unicode::UCD 'charscript';
+    my $charscript = charblock($codepoint);
 
 =head1 DESCRIPTION
 
@@ -34,8 +37,10 @@ Database.
 
 =cut
 
-my $UNICODE;
-my $BLOCKS;
+my $UNICODEFH;
+my $BLOCKSFH;
+my $SCRIPTSFH;
+my $VERSIONFH;
 
 sub openunicode {
     my ($rfh, @path) = @_;
@@ -44,14 +49,12 @@ sub openunicode {
        for my $d (@INC) {
            use File::Spec;
            $f = File::Spec->catfile($d, "unicode", @path);
-           if (open($$rfh, $f)) {
-               last;
-           } else {
-               croak __PACKAGE__, ": open '$f' failed: $!\n";
-           }
+           last if open($$rfh, $f);
+           undef $f;
        }
-       croak __PACKAGE__, ": failed to find ",join("/",@path)," in @INC\n"
-           unless defined $rfh;
+       croak __PACKAGE__, ": failed to find ",
+              File::Spec->catfile(@path), " in @INC"
+           unless defined $f;
     }
     return $f;
 }
@@ -82,25 +85,49 @@ by the Unicode standard:
     upper            uppercase equivalent mapping
     lower            lowercase equivalent mapping
     title            titlecase equivalent mapping
+
     block            block the character belongs to (used in \p{In...})
+    script           script the character belongs to 
 
 If no match is found, an empty hash is returned.
 
-The C<block> property is the same as as returned by charinfo().
-(It is not defined in the Unicode Character Database proper but
-instead in an auxiliary database.)
+The C<block> property is the same as as returned by charinfo().  It is
+not defined in the Unicode Character Database proper (Chapter 4 of the
+Unicode 3.0 Standard) but instead in an auxiliary database (Chapter 14
+of TUS3).  Similarly for the C<script> property.
+
+Note that you cannot do (de)composition and casing based solely on the
+above C<decomposition> and C<lower>, C<upper>, C<title>, properties,
+you will need also the I<Composition Exclusions>, I<Case Folding>, and
+I<SpecialCasing> tables, available as files F<CompExcl.txt>,
+F<CaseFold.txt>, and F<SpecCase.txt> in the Perl distribution.
 
 =cut
 
+sub _getcode {
+    my $arg = shift;
+
+    if ($arg =~ /^\d+$/) {
+       return $arg;
+    } elsif ($arg =~ /^(?:U\+|0x)?([[:xdigit:]]+)$/) {
+       return hex($1);
+    }
+
+    return;
+}
+
 sub charinfo {
-    my $code = shift;
+    my $arg  = shift;
+    my $code = _getcode($arg);
+    croak __PACKAGE__, "::charinfo: unknown code '$arg'"
+       unless defined $code;
     my $hexk = sprintf("%04X", $code);
 
-    openunicode(\$UNICODE, "Unicode.txt");
-    if (defined $UNICODE) {
+    openunicode(\$UNICODEFH, "Unicode.txt");
+    if (defined $UNICODEFH) {
        use Search::Dict;
-       if (look($UNICODE, "$hexk;") >= 0) {
-           my $line = <$UNICODE>;
+       if (look($UNICODEFH, "$hexk;") >= 0) {
+           my $line = <$UNICODEFH>;
            chomp $line;
            my %prop;
            @prop{qw(
@@ -111,7 +138,8 @@ sub charinfo {
                     upper lower title
                    )} = split(/;/, $line, -1);
            if ($prop{code} eq $hexk) {
-               $prop{block} = charblock($code);
+               $prop{block}  = charblock($code);
+               $prop{script} = charscript($code);
                return %prop;
            }
        }
@@ -119,61 +147,268 @@ sub charinfo {
     return;
 }
 
+sub _search { # Binary search in a [[lo,hi,prop],[...],...] table.
+    my ($table, $lo, $hi, $code) = @_;
+
+    return if $lo > $hi;
+
+    my $mid = int(($lo+$hi) / 2);
+
+    if ($table->[$mid]->[0] < $code) {
+       if ($table->[$mid]->[1] >= $code) {
+           return $table->[$mid]->[2];
+       } else {
+           _search($table, $mid + 1, $hi, $code);
+       }
+    } elsif ($table->[$mid]->[0] > $code) {
+       _search($table, $lo, $mid - 1, $code);
+    } else {
+       return $table->[$mid]->[2];
+    }
+}
+
+sub charinrange {
+    my ($range, $arg) = @_;
+    my $code = _getcode($arg);
+    croak __PACKAGE__, "::charinrange: unknown code '$arg'"
+       unless defined $code;
+    _search($range, 0, $#$range, $code);
+}
+
 =head2 charblock
 
     use Unicode::UCD 'charblock';
 
     my $charblock = charblock(0x41);
-
-charblock() returns the block the character belongs to, e.g.
-C<Basic Latin>.  Note that not all the character positions within all
-block are defined.
-
-The name is the same name that is used in the C<\p{In...}> construct,
-for example C<\p{InBasicLatin}> (spaces and dashes ('-') are squished
-away from the names for the C<\p{In...}>.
+    my $charblock = charblock(1234);
+    my $charblock = charblock("0x263a");
+    my $charblock = charblock("U+263a");
+
+    my $ranges    = charblock('Armenian');
+
+With a B<code point argument> charblock() returns the block the character
+belongs to, e.g.  C<Basic Latin>.  Note that not all the character
+positions within all blocks are defined.  A <code point argument>
+is either a decimal or a hexadecimal scalar, or "U+" followed
+by hexadecimals.
+
+If supplied with an argument that can't be a code point, charblock()
+tries to do the opposite and interpret the argument as a character
+block.  The return value is a I<range>: an anonymous list that
+contains anonymous lists, which in turn contain I<start-of-range>,
+I<end-of-range> code point pairs.  You can test whether a code point
+is in a range using the L</charinrange> function.  If the argument is
+not a known charater block, C<undef> is returned.
 
 =cut
 
 my @BLOCKS;
+my %BLOCKS;
+
+sub _charblocks {
+    unless (@BLOCKS) {
+       if (openunicode(\$BLOCKSFH, "Blocks.txt")) {
+           while (<$BLOCKSFH>) {
+               if (/^([0-9A-F]+)\.\.([0-9A-F]+);\s+(.+)/) {
+                   my ($lo, $hi) = (hex($1), hex($2));
+                   my $subrange = [ $lo, $hi, $3 ];
+                   push @BLOCKS, $subrange;
+                   push @{$BLOCKS{$3}}, $subrange;
+               }
+           }
+           close($BLOCKSFH);
+       }
+    }
+}
 
-sub _charblock {
-    my ($code, $lo, $hi) = @_;
+sub charblock {
+    my $arg = shift;
 
-    return if $lo > $hi;
+    _charblocks() unless @BLOCKS;
 
-    my $mid = int(($lo+$hi) / 2);
+    my $code = _getcode($arg);
 
-    if ($BLOCKS[$mid]->[0] < $code) {
-       if ($BLOCKS[$mid]->[1] >= $code) {
-           return $BLOCKS[$mid]->[2];
+    if (defined $code) {
+       _search(\@BLOCKS, 0, $#BLOCKS, $code);
+    } else {
+       if (exists $BLOCKS{$arg}) {
+           return $BLOCKS{$arg};
        } else {
-           _charblock($code, $mid + 1, $hi);
+           return;
        }
-    } elsif ($BLOCKS[$mid]->[0] > $code) {
-       _charblock($code, $lo, $mid - 1);
-    } else {
-       return $BLOCKS[$mid]->[2];
     }
 }
 
-sub charblock {
-    my $code = shift;
+=head2 charscript
 
-    unless (@BLOCKS) {
-       if (openunicode(\$BLOCKS, "Blocks.pl")) {
-           while (<$BLOCKS>) {
-               if (/^([0-9A-F]+)\s+([0-9A-F]+)\s+(.+)/) {
-                   push @BLOCKS, [ hex($1), hex($2), $3 ];
+    use Unicode::UCD 'charscript';
+
+    my $charscript = charscript(0x41);
+    my $charscript = charscript(1234);
+    my $charscript = charscript("U+263a");
+
+    my $ranges     = charscript('Thai');
+
+With a B<code point argument> charscript() returns the script the
+character belongs to, e.g.  C<Latin>, C<Greek>, C<Han>.  A <code point
+argument> is either a decimal or a hexadecimal scalar, or "U+"
+followed by hexadecimals.
+
+If supplied with an argument that can't be a code point, charscript()
+tries to do the opposite and interpret the argument as a character
+script.  The return value is a I<range>: an anonymous list that
+contains anonymous lists, which in turn contain I<start-of-range>,
+I<end-of-range> code point pairs.  You can test whether a code point
+is in a range using the L</charinrange> function.  If the argument is
+not a known charater script, C<undef> is returned.
+
+=cut
+
+my @SCRIPTS;
+my %SCRIPTS;
+
+sub _charscripts {
+    unless (@SCRIPTS) {
+       if (openunicode(\$SCRIPTSFH, "Scripts.txt")) {
+           while (<$SCRIPTSFH>) {
+               if (/^([0-9A-F]+)(?:\.\.([0-9A-F]+))?\s+;\s+(\w+)/) {
+                   my ($lo, $hi) = (hex($1), $2 ? hex($2) : hex($1));
+                   my $script = lc($3);
+                   $script =~ s/\b(\w)/uc($1)/ge;
+                   my $subrange = [ $lo, $hi, $script ];
+                   push @SCRIPTS, $subrange;
+                   push @{$SCRIPTS{$script}}, $subrange;
                }
            }
-           close($BLOCKS);
+           close($SCRIPTSFH);
+           @SCRIPTS = sort { $a->[0] <=> $b->[0] } @SCRIPTS;
+       }
+    }
+}
+
+sub charscript {
+    my $arg = shift;
+
+    _charscripts() unless @SCRIPTS;
+
+    my $code = _getcode($arg);
+
+    if (defined $code) {
+       _search(\@SCRIPTS, 0, $#SCRIPTS, $code);
+    } else {
+       if (exists $SCRIPTS{$arg}) {
+           return $SCRIPTS{$arg};
+       } else {
+           return;
        }
     }
+}
+
+=head2 charblocks
+
+    use Unicode::UCD 'charblocks';
+
+    my %charblocks = charblocks();
+
+charblocks() returns a hash with the known block names as the keys,
+and the code point ranges (see L</charblock>) as the values.
+
+=cut
+
+sub charblocks {
+    _charblocks() unless @BLOCKS;
+    return %BLOCKS;
+}
+
+=head2 charscripts
+
+    use Unicode::UCD 'charscripts';
+
+    my %charscripts = charscripts();
+
+charscripts() returns a hash with the known script names as the keys,
+and the code point ranges (see L</charscript>) as the values.
+
+=cut
+
+sub charscripts {
+    _charscripts() unless @SCRIPTS;
+    return %SCRIPTS;
+}
+
+=head2 Blocks versus Scripts
+
+The difference between a block and a script is that scripts are closer
+to the linguistic notion of a set of characters required to present
+languages, while block is more of an artifact of the Unicode character
+numbering and separation into blocks of 256 characters.
+
+For example the Latin B<script> is spread over several B<blocks>, such
+as C<Basic Latin>, C<Latin 1 Supplement>, C<Latin Extended-A>, and
+C<Latin Extended-B>.  On the other hand, the Latin script does not
+contain all the characters of the C<Basic Latin> block (also known as
+the ASCII): it includes only the letters, not for example the digits
+or the punctuation.
+
+For blocks see http://www.unicode.org/Public/UNIDATA/Blocks.txt
+
+For scripts see UTR #24: http://www.unicode.org/unicode/reports/tr24/
+
+=head2 Matching Scripts and Blocks
+
+Both scripts and blocks can be matched using the regular expression
+construct C<\p{In...}> and its negation C<\P{In...}>.
+
+The name of the script or the block comes after the C<In>, for example
+C<\p{InCyrillic}>, C<\P{InBasicLatin}>.  Spaces and dashes ('-') are
+removed from the names for the C<\p{In...}>, for example
+C<LatinExtendedA> instead of C<Latin Extended-A>.
+
+There are a few cases where there exists both a script and a block by
+the same name, in these cases the block version has C<Block> appended:
+C<\p{InKatakana}> is the script, C<\p{InKatakanaBlock}> is the block.
+
+=head2 charinrange
+
+In addition to using the C<\p{In...}> and C<\P{In...}> constructs, you
+can also test whether a code point is in the I<range> as returned by
+L</charblock> and L</charscript> or as the values of the hash returned
+by L</charblocks> and </charscripts> by using charinrange():
 
-    _charblock($code, 0, $#BLOCKS);
+    use Unicode::UCD qw(charscript charinrange);
+
+    $range = charscript('Hiragana');
+    print "looks like hiragana\n" if charinrange($range, $code);
+
+=cut
+
+=head2 Unicode::UCD::UnicodeVersion
+
+Unicode::UCD::UnicodeVersion() returns the version of the Unicode Character
+Database, in other words, the version of the Unicode standard the
+database implements.
+
+=cut
+
+my $UNICODEVERSION;
+
+sub UnicodeVersion {
+    unless (defined $UNICODEVERSION) {
+       openunicode(\$VERSIONFH, "version");
+       chomp($UNICODEVERSION = <$VERSIONFH>);
+       close($VERSIONFH);
+       croak __PACKAGE__, "::VERSION: strange version '$UNICODEVERSION'"
+           unless $UNICODEVERSION =~ /^\d+(?:\.\d+)+$/;
+    }
+    return $UNICODEVERSION;
 }
 
+=head2 Implementation Note
+
+The first use of charinfo() opens a read-only filehandle to the Unicode
+Character Database (the database is included in the Perl distribution).
+The filehandle is then kept open for further queries.
+
 =head1 AUTHOR
 
 Jarkko Hietaniemi
index 731ac8f..51e200b 100644 (file)
@@ -1,9 +1,9 @@
-use Unicode::UCD 3.1.0;
+use Unicode::UCD;
 
 use Test;
 use strict;
 
-BEGIN { plan tests => 81 };
+BEGIN { plan tests => 103 };
 
 use Unicode::UCD 'charinfo';
 
@@ -27,6 +27,7 @@ ok($charinfo{upper},          '');
 ok($charinfo{lower},          '0061');
 ok($charinfo{title},          '');
 ok($charinfo{block},          'Basic Latin');
+ok($charinfo{script},         'LATIN');
 
 %charinfo = charinfo(0x100);
 
@@ -46,6 +47,9 @@ ok($charinfo{upper},          '');
 ok($charinfo{lower},          '0101');
 ok($charinfo{title},          '');
 ok($charinfo{block},          'Latin Extended-A');
+ok($charinfo{script},         'LATIN');
+
+# 0x0590 is in the Hebrew block but unused.
 
 %charinfo = charinfo(0x590);
 
@@ -65,6 +69,9 @@ ok($charinfo{upper},         undef);
 ok($charinfo{lower},         undef);
 ok($charinfo{title},         undef);
 ok($charinfo{block},         undef);
+ok($charinfo{script},        undef);
+
+# 0x05d0 is in the Hebrew block and used.
 
 %charinfo = charinfo(0x5d0);
 
@@ -84,10 +91,14 @@ ok($charinfo{upper},          '');
 ok($charinfo{lower},          '');
 ok($charinfo{title},          '');
 ok($charinfo{block},          'Hebrew');
+ok($charinfo{script},         'Hebrew');
 
-use Unicode::UCD 'charblock';
+use Unicode::UCD qw(charblock charscript);
+
+# 0x0590 is in the Hebrew block but unused.
 
 ok(charblock(0x590),          'Hebrew');
+ok(charscript(0x590),         undef);
 
 %charinfo = charinfo(0xbe);
 
@@ -107,4 +118,45 @@ ok($charinfo{upper},          '');
 ok($charinfo{lower},          '');
 ok($charinfo{title},          '');
 ok($charinfo{block},          'Latin-1 Supplement');
+ok($charinfo{script},         undef);
+
+use Unicode::UCD qw(charblocks charscripts);
+
+my %charblocks = charblocks();
+
+ok(exists $charblocks{Thai});
+ok($charblocks{Thai}->[0]->[0], hex('0e00'));
+ok(!exists $charblocks{PigLatin});
+
+my %charscripts = charscripts();
+
+ok(exists $charscripts{Armenian});
+ok($charscripts{Armenian}->[0]->[0], hex('0531'));
+ok(!exists $charscripts{PigLatin});
+
+my $charscript;
+
+$charscript = charscript("12ab");
+ok($charscript, 'Ethiopic');
+
+$charscript = charscript("0x12ab");
+ok($charscript, 'Ethiopic');
+
+$charscript = charscript("U+12ab");
+ok($charscript, 'Ethiopic');
+
+my $ranges;
+
+$ranges = charscript('Ogham');
+ok($ranges->[0]->[0], hex('1681'));
+ok($ranges->[0]->[1], hex('169a'));
+
+use Unicode::UCD qw(charinrange);
+
+$ranges = charscript('Cherokee');
+ok(!charinrange($ranges, "139f"));
+ok( charinrange($ranges, "13a0"));
+ok( charinrange($ranges, "13f4"));
+ok(!charinrange($ranges, "13f5"));
 
+ok(Unicode::UCD::UnicodeVersion, 3.1);
index 2257e71..1c20f57 100644 (file)
@@ -342,8 +342,8 @@ $inhibit_exit = $option{PrintRet} = 1;
 
 # These guys may be defined in $ENV{PERL5DB} :
 $rl            = 1     unless defined $rl;
-$warnLevel     = 0     unless defined $warnLevel;
-$dieLevel      = 0     unless defined $dieLevel;
+$warnLevel     = 1     unless defined $warnLevel;
+$dieLevel      = 1     unless defined $dieLevel;
 $signalLevel   = 1     unless defined $signalLevel;
 $pre           = []    unless defined $pre;
 $post          = []    unless defined $post;
@@ -889,6 +889,7 @@ EOP
                            $i = $end;
                        } else {
                            for (; $i <= $end; $i++) {
+                               my ($stop,$action);
                                ($stop,$action) = split(/\0/, $dbline{$i}) if
                                    $dbline{$i};
                                $arrow = ($i==$line 
@@ -2681,7 +2682,8 @@ sub dbdie {
   if ($dieLevel < 2) {
     die @_ if $^S;             # in eval propagate
   }
-  eval { require Carp } if defined $^S;        # If error/warning during compilation,
+  # No need to check $^S, eval is much more robust nowadays
+  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")
@@ -2691,7 +2693,13 @@ sub dbdie {
   # inside DB::DB, but not in Carp).
   my ($mysingle,$mytrace) = ($single,$trace);
   $single = 0; $trace = 0;
-  my $mess = Carp::longmess(@_);
+  my $mess = "@_";
+  { 
+    package Carp;              # Do not include us in the list
+    eval {
+      $mess = Carp::longmess(@_);
+    };
+  }
   ($single,$trace) = ($mysingle,$mytrace);
   die $mess;
 }
index ef60058..e45026a 100644 (file)
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-0000   007F    Basic Latin
-# In/0.pl BasicLatin
-0080   00FF    Latin-1 Supplement
-# In/1.pl Latin1Supplement
-0100   017F    Latin Extended-A
-# In/2.pl LatinExtendedA
-0180   024F    Latin Extended-B
-# In/3.pl LatinExtendedB
-0250   02AF    IPA Extensions
-# In/4.pl IPAExtensions
-02B0   02FF    Spacing Modifier Letters
-# In/5.pl SpacingModifierLetters
-0300   036F    Combining Diacritical Marks
-# In/6.pl CombiningDiacriticalMarks
-0370   03FF    Greek
-# In/7.pl Greek
-0400   04FF    Cyrillic
-# In/8.pl Cyrillic
-0530   058F    Armenian
-# In/9.pl Armenian
-0590   05FF    Hebrew
-# In/10.pl Hebrew
-0600   06FF    Arabic
-# In/11.pl Arabic
-0700   074F    Syriac  
-# In/12.pl Syriac
-0780   07BF    Thaana
-# In/13.pl Thaana
-0900   097F    Devanagari
-# In/14.pl Devanagari
-0980   09FF    Bengali
-# In/15.pl Bengali
-0A00   0A7F    Gurmukhi
-# In/16.pl Gurmukhi
-0A80   0AFF    Gujarati
-# In/17.pl Gujarati
-0B00   0B7F    Oriya
-# In/18.pl Oriya
-0B80   0BFF    Tamil
-# In/19.pl Tamil
-0C00   0C7F    Telugu
-# In/20.pl Telugu
-0C80   0CFF    Kannada
-# In/21.pl Kannada
-0D00   0D7F    Malayalam
-# In/22.pl Malayalam
-0D80   0DFF    Sinhala
-# In/23.pl Sinhala
-0E00   0E7F    Thai
-# In/24.pl Thai
-0E80   0EFF    Lao
-# In/25.pl Lao
-0F00   0FFF    Tibetan
-# In/26.pl Tibetan
-1000   109F    Myanmar 
-# In/27.pl Myanmar
-10A0   10FF    Georgian
-# In/28.pl Georgian
-1100   11FF    Hangul Jamo
-# In/29.pl HangulJamo
-1200   137F    Ethiopic
-# In/30.pl Ethiopic
-13A0   13FF    Cherokee
-# In/31.pl Cherokee
-1400   167F    Unified Canadian Aboriginal Syllabics
-# In/32.pl UnifiedCanadianAboriginalSyllabics
-1680   169F    Ogham
-# In/33.pl Ogham
-16A0   16FF    Runic
-# In/34.pl Runic
-1780   17FF    Khmer
-# In/35.pl Khmer
-1800   18AF    Mongolian
-# In/36.pl Mongolian
-1E00   1EFF    Latin Extended Additional
-# In/37.pl LatinExtendedAdditional
-1F00   1FFF    Greek Extended
-# In/38.pl GreekExtended
-2000   206F    General Punctuation
-# In/39.pl GeneralPunctuation
-2070   209F    Superscripts and Subscripts
-# In/40.pl SuperscriptsandSubscripts
-20A0   20CF    Currency Symbols
-# In/41.pl CurrencySymbols
-20D0   20FF    Combining Marks for Symbols
-# In/42.pl CombiningMarksforSymbols
-2100   214F    Letterlike Symbols
-# In/43.pl LetterlikeSymbols
-2150   218F    Number Forms
-# In/44.pl NumberForms
-2190   21FF    Arrows
-# In/45.pl Arrows
-2200   22FF    Mathematical Operators
-# In/46.pl MathematicalOperators
-2300   23FF    Miscellaneous Technical
-# In/47.pl MiscellaneousTechnical
-2400   243F    Control Pictures
-# In/48.pl ControlPictures
-2440   245F    Optical Character Recognition
-# In/49.pl OpticalCharacterRecognition
-2460   24FF    Enclosed Alphanumerics
-# In/50.pl EnclosedAlphanumerics
-2500   257F    Box Drawing
-# In/51.pl BoxDrawing
-2580   259F    Block Elements
-# In/52.pl BlockElements
-25A0   25FF    Geometric Shapes
-# In/53.pl GeometricShapes
-2600   26FF    Miscellaneous Symbols
-# In/54.pl MiscellaneousSymbols
-2700   27BF    Dingbats
-# In/55.pl Dingbats
-2800   28FF    Braille Patterns
-# In/56.pl BraillePatterns
-2E80   2EFF    CJK Radicals Supplement
-# In/57.pl CJKRadicalsSupplement
-2F00   2FDF    Kangxi Radicals
-# In/58.pl KangxiRadicals
-2FF0   2FFF    Ideographic Description Characters
-# In/59.pl IdeographicDescriptionCharacters
-3000   303F    CJK Symbols and Punctuation
-# In/60.pl CJKSymbolsandPunctuation
-3040   309F    Hiragana
-# In/61.pl Hiragana
-30A0   30FF    Katakana
-# In/62.pl Katakana
-3100   312F    Bopomofo
-# In/63.pl Bopomofo
-3130   318F    Hangul Compatibility Jamo
-# In/64.pl HangulCompatibilityJamo
-3190   319F    Kanbun
-# In/65.pl Kanbun
-31A0   31BF    Bopomofo Extended
-# In/66.pl BopomofoExtended
-3200   32FF    Enclosed CJK Letters and Months
-# In/67.pl EnclosedCJKLettersandMonths
-3300   33FF    CJK Compatibility
-# In/68.pl CJKCompatibility
-3400   4DB5    CJK Unified Ideographs Extension A
-# In/69.pl CJKUnifiedIdeographsExtensionA
-4E00   9FFF    CJK Unified Ideographs
-# In/70.pl CJKUnifiedIdeographs
-A000   A48F    Yi Syllables
-# In/71.pl YiSyllables
-A490   A4CF    Yi Radicals
-# In/72.pl YiRadicals
-AC00   D7A3    Hangul Syllables
-# In/73.pl HangulSyllables
-D800   DB7F    High Surrogates
-# In/74.pl HighSurrogates
-DB80   DBFF    High Private Use Surrogates
-# In/75.pl HighPrivateUseSurrogates
-DC00   DFFF    Low Surrogates
-# In/76.pl LowSurrogates
-E000   F8FF    Private Use
-# In/77.pl PrivateUse
-F900   FAFF    CJK Compatibility Ideographs
-# In/78.pl CJKCompatibilityIdeographs
-FB00   FB4F    Alphabetic Presentation Forms
-# In/79.pl AlphabeticPresentationForms
-FB50   FDFF    Arabic Presentation Forms-A
-# In/80.pl ArabicPresentationFormsA
-FE20   FE2F    Combining Half Marks
-# In/81.pl CombiningHalfMarks
-FE30   FE4F    CJK Compatibility Forms
-# In/82.pl CJKCompatibilityForms
-FE50   FE6F    Small Form Variants
-# In/83.pl SmallFormVariants
-FE70   FEFE    Arabic Presentation Forms-B
-# In/84.pl ArabicPresentationFormsB
-FEFF   FEFF    Specials
-# In/85.pl Specials
-FF00   FFEF    Halfwidth and Fullwidth Forms
-# In/86.pl HalfwidthandFullwidthForms
-FFF0   FFFD    Specials
-# In/85.pl Specials
-10300  1032F   Old Italic
-# In/87.pl OldItalic
-10330  1034F   Gothic
-# In/88.pl Gothic
-10400  1044F   Deseret
-# In/89.pl Deseret
-1D000  1D0FF   Byzantine Musical Symbols
-# In/90.pl ByzantineMusicalSymbols
-1D100  1D1FF   Musical Symbols
-# In/91.pl MusicalSymbols
-1D400  1D7FF   Mathematical Alphanumeric Symbols
-# In/92.pl MathematicalAlphanumericSymbols
-20000  2A6D6   CJK Unified Ideographs Extension B
-# In/93.pl CJKUnifiedIdeographsExtensionB
-2F800  2FA1F   CJK Compatibility Ideographs Supplement
-# In/94.pl CJKCompatibilityIdeographsSupplement
-E0000  E007F   Tags
-# In/95.pl Tags
-F0000  FFFFD   Private Use
-# In/77.pl PrivateUse
-100000 10FFFD  Private Use
-# In/77.pl PrivateUse
+0000   007F    Basic Latin     # BasicLatin In/40.pl
+0080   00FF    Latin-1 Supplement      # Latin1Supplement In/41.pl
+0100   017F    Latin Extended-A        # LatinExtendedA In/42.pl
+0180   024F    Latin Extended-B        # LatinExtendedB In/43.pl
+0250   02AF    IPA Extensions  # IPAExtensions In/44.pl
+02B0   02FF    Spacing Modifier Letters        # SpacingModifierLetters In/45.pl
+0300   036F    Combining Diacritical Marks     # CombiningDiacriticalMarks In/46.pl
+0370   03FF    Greek   # GreekBlock In/47.pl
+0400   04FF    Cyrillic        # CyrillicBlock In/48.pl
+0530   058F    Armenian        # ArmenianBlock In/49.pl
+0590   05FF    Hebrew  # HebrewBlock In/50.pl
+0600   06FF    Arabic  # ArabicBlock In/51.pl
+0700   074F    Syriac          # SyriacBlock In/52.pl
+0780   07BF    Thaana  # ThaanaBlock In/53.pl
+0900   097F    Devanagari      # DevanagariBlock In/54.pl
+0980   09FF    Bengali # BengaliBlock In/55.pl
+0A00   0A7F    Gurmukhi        # GurmukhiBlock In/56.pl
+0A80   0AFF    Gujarati        # GujaratiBlock In/57.pl
+0B00   0B7F    Oriya   # OriyaBlock In/58.pl
+0B80   0BFF    Tamil   # TamilBlock In/59.pl
+0C00   0C7F    Telugu  # TeluguBlock In/60.pl
+0C80   0CFF    Kannada # KannadaBlock In/61.pl
+0D00   0D7F    Malayalam       # MalayalamBlock In/62.pl
+0D80   0DFF    Sinhala # SinhalaBlock In/63.pl
+0E00   0E7F    Thai    # ThaiBlock In/64.pl
+0E80   0EFF    Lao     # LaoBlock In/65.pl
+0F00   0FFF    Tibetan # TibetanBlock In/66.pl
+1000   109F    Myanmar         # MyanmarBlock In/67.pl
+10A0   10FF    Georgian        # GeorgianBlock In/68.pl
+1100   11FF    Hangul Jamo     # HangulJamo In/69.pl
+1200   137F    Ethiopic        # EthiopicBlock In/70.pl
+13A0   13FF    Cherokee        # CherokeeBlock In/71.pl
+1400   167F    Unified Canadian Aboriginal Syllabics   # UnifiedCanadianAboriginalSyllabics In/72.pl
+1680   169F    Ogham   # OghamBlock In/73.pl
+16A0   16FF    Runic   # RunicBlock In/74.pl
+1780   17FF    Khmer   # KhmerBlock In/75.pl
+1800   18AF    Mongolian       # MongolianBlock In/76.pl
+1E00   1EFF    Latin Extended Additional       # LatinExtendedAdditional In/77.pl
+1F00   1FFF    Greek Extended  # GreekExtended In/78.pl
+2000   206F    General Punctuation     # GeneralPunctuation In/79.pl
+2070   209F    Superscripts and Subscripts     # SuperscriptsandSubscripts In/80.pl
+20A0   20CF    Currency Symbols        # CurrencySymbols In/81.pl
+20D0   20FF    Combining Marks for Symbols     # CombiningMarksforSymbols In/82.pl
+2100   214F    Letterlike Symbols      # LetterlikeSymbols In/83.pl
+2150   218F    Number Forms    # NumberForms In/84.pl
+2190   21FF    Arrows  # Arrows In/85.pl
+2200   22FF    Mathematical Operators  # MathematicalOperators In/86.pl
+2300   23FF    Miscellaneous Technical # MiscellaneousTechnical In/87.pl
+2400   243F    Control Pictures        # ControlPictures In/88.pl
+2440   245F    Optical Character Recognition   # OpticalCharacterRecognition In/89.pl
+2460   24FF    Enclosed Alphanumerics  # EnclosedAlphanumerics In/90.pl
+2500   257F    Box Drawing     # BoxDrawing In/91.pl
+2580   259F    Block Elements  # BlockElements In/92.pl
+25A0   25FF    Geometric Shapes        # GeometricShapes In/93.pl
+2600   26FF    Miscellaneous Symbols   # MiscellaneousSymbols In/94.pl
+2700   27BF    Dingbats        # Dingbats In/95.pl
+2800   28FF    Braille Patterns        # BraillePatterns In/96.pl
+2E80   2EFF    CJK Radicals Supplement # CJKRadicalsSupplement In/97.pl
+2F00   2FDF    Kangxi Radicals # KangxiRadicals In/98.pl
+2FF0   2FFF    Ideographic Description Characters      # IdeographicDescriptionCharacters In/99.pl
+3000   303F    CJK Symbols and Punctuation     # CJKSymbolsandPunctuation In/100.pl
+3040   309F    Hiragana        # HiraganaBlock In/101.pl
+30A0   30FF    Katakana        # KatakanaBlock In/102.pl
+3100   312F    Bopomofo        # BopomofoBlock In/103.pl
+3130   318F    Hangul Compatibility Jamo       # HangulCompatibilityJamo In/104.pl
+3190   319F    Kanbun  # Kanbun In/105.pl
+31A0   31BF    Bopomofo Extended       # BopomofoExtended In/106.pl
+3200   32FF    Enclosed CJK Letters and Months # EnclosedCJKLettersandMonths In/107.pl
+3300   33FF    CJK Compatibility       # CJKCompatibility In/108.pl
+3400   4DB5    CJK Unified Ideographs Extension A      # CJKUnifiedIdeographsExtensionA In/109.pl
+4E00   9FFF    CJK Unified Ideographs  # CJKUnifiedIdeographs In/110.pl
+A000   A48F    Yi Syllables    # YiSyllables In/111.pl
+A490   A4CF    Yi Radicals     # YiRadicals In/112.pl
+AC00   D7A3    Hangul Syllables        # HangulSyllables In/113.pl
+D800   DB7F    High Surrogates # HighSurrogates In/114.pl
+DB80   DBFF    High Private Use Surrogates     # HighPrivateUseSurrogates In/115.pl
+DC00   DFFF    Low Surrogates  # LowSurrogates In/116.pl
+E000   F8FF    Private Use     # PrivateUse In/117.pl
+F900   FAFF    CJK Compatibility Ideographs    # CJKCompatibilityIdeographs In/118.pl
+FB00   FB4F    Alphabetic Presentation Forms   # AlphabeticPresentationForms In/119.pl
+FB50   FDFF    Arabic Presentation Forms-A     # ArabicPresentationFormsA In/120.pl
+FE20   FE2F    Combining Half Marks    # CombiningHalfMarks In/121.pl
+FE30   FE4F    CJK Compatibility Forms # CJKCompatibilityForms In/122.pl
+FE50   FE6F    Small Form Variants     # SmallFormVariants In/123.pl
+FE70   FEFE    Arabic Presentation Forms-B     # ArabicPresentationFormsB In/124.pl
+FEFF   FEFF    Specials        # Specials In/125.pl
+FF00   FFEF    Halfwidth and Fullwidth Forms   # HalfwidthandFullwidthForms In/126.pl
+FFF0   FFFD    Specials        # Specials In/125.pl
+10300  1032F   Old Italic      # OldItalicBlock In/127.pl
+10330  1034F   Gothic  # GothicBlock In/128.pl
+10400  1044F   Deseret # DeseretBlock In/129.pl
+1D000  1D0FF   Byzantine Musical Symbols       # ByzantineMusicalSymbols In/130.pl
+1D100  1D1FF   Musical Symbols # MusicalSymbols In/131.pl
+1D400  1D7FF   Mathematical Alphanumeric Symbols       # MathematicalAlphanumericSymbols In/132.pl
+20000  2A6D6   CJK Unified Ideographs Extension B      # CJKUnifiedIdeographsExtensionB In/133.pl
+2F800  2FA1F   CJK Compatibility Ideographs Supplement # CJKCompatibilityIdeographsSupplement In/134.pl
+E0000  E007F   Tags    # Tags In/135.pl
+F0000  FFFFD   Private Use     # PrivateUse In/117.pl
+100000 10FFFD  Private Use     # PrivateUse In/117.pl
 END
index e0b7a5a..a6c2419 100644 (file)
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 %utf8::In = (
-'BasicLatin'                            =>   0,
-'Latin1Supplement'                      =>   1,
-'LatinExtendedA'                        =>   2,
-'LatinExtendedB'                        =>   3,
-'IPAExtensions'                         =>   4,
-'SpacingModifierLetters'                =>   5,
-'CombiningDiacriticalMarks'             =>   6,
-'Greek'                                 =>   7,
-'Cyrillic'                              =>   8,
-'Armenian'                              =>   9,
-'Hebrew'                                =>  10,
-'Arabic'                                =>  11,
-'Syriac'                                =>  12,
-'Thaana'                                =>  13,
-'Devanagari'                            =>  14,
-'Bengali'                               =>  15,
-'Gurmukhi'                              =>  16,
-'Gujarati'                              =>  17,
-'Oriya'                                 =>  18,
-'Tamil'                                 =>  19,
-'Telugu'                                =>  20,
-'Kannada'                               =>  21,
-'Malayalam'                             =>  22,
-'Sinhala'                               =>  23,
-'Thai'                                  =>  24,
-'Lao'                                   =>  25,
-'Tibetan'                               =>  26,
-'Myanmar'                               =>  27,
-'Georgian'                              =>  28,
-'HangulJamo'                            =>  29,
-'Ethiopic'                              =>  30,
-'Cherokee'                              =>  31,
-'UnifiedCanadianAboriginalSyllabics'    =>  32,
-'Ogham'                                 =>  33,
-'Runic'                                 =>  34,
-'Khmer'                                 =>  35,
-'Mongolian'                             =>  36,
-'LatinExtendedAdditional'               =>  37,
-'GreekExtended'                         =>  38,
-'GeneralPunctuation'                    =>  39,
-'SuperscriptsandSubscripts'             =>  40,
-'CurrencySymbols'                       =>  41,
-'CombiningMarksforSymbols'              =>  42,
-'LetterlikeSymbols'                     =>  43,
-'NumberForms'                           =>  44,
-'Arrows'                                =>  45,
-'MathematicalOperators'                 =>  46,
-'MiscellaneousTechnical'                =>  47,
-'ControlPictures'                       =>  48,
-'OpticalCharacterRecognition'           =>  49,
-'EnclosedAlphanumerics'                 =>  50,
-'BoxDrawing'                            =>  51,
-'BlockElements'                         =>  52,
-'GeometricShapes'                       =>  53,
-'MiscellaneousSymbols'                  =>  54,
-'Dingbats'                              =>  55,
-'BraillePatterns'                       =>  56,
-'CJKRadicalsSupplement'                 =>  57,
-'KangxiRadicals'                        =>  58,
-'IdeographicDescriptionCharacters'      =>  59,
-'CJKSymbolsandPunctuation'              =>  60,
-'Hiragana'                              =>  61,
-'Katakana'                              =>  62,
-'Bopomofo'                              =>  63,
-'HangulCompatibilityJamo'               =>  64,
-'Kanbun'                                =>  65,
-'BopomofoExtended'                      =>  66,
-'EnclosedCJKLettersandMonths'           =>  67,
-'CJKCompatibility'                      =>  68,
-'CJKUnifiedIdeographsExtensionA'        =>  69,
-'CJKUnifiedIdeographs'                  =>  70,
-'YiSyllables'                           =>  71,
-'YiRadicals'                            =>  72,
-'HangulSyllables'                       =>  73,
-'HighSurrogates'                        =>  74,
-'HighPrivateUseSurrogates'              =>  75,
-'LowSurrogates'                         =>  76,
-'PrivateUse'                            =>  77,
-'CJKCompatibilityIdeographs'            =>  78,
-'AlphabeticPresentationForms'           =>  79,
-'ArabicPresentationFormsA'              =>  80,
-'CombiningHalfMarks'                    =>  81,
-'CJKCompatibilityForms'                 =>  82,
-'SmallFormVariants'                     =>  83,
-'ArabicPresentationFormsB'              =>  84,
-'Specials'                              =>  85,
-'HalfwidthandFullwidthForms'            =>  86,
-'OldItalic'                             =>  87,
-'Gothic'                                =>  88,
-'Deseret'                               =>  89,
-'ByzantineMusicalSymbols'               =>  90,
-'MusicalSymbols'                        =>  91,
-'MathematicalAlphanumericSymbols'       =>  92,
-'CJKUnifiedIdeographsExtensionB'        =>  93,
-'CJKCompatibilityIdeographsSupplement'  =>  94,
-'Tags'                                  =>  95,
+'Latin'                                  =>   0,
+'Greek'                                  =>   1,
+'Cyrillic'                               =>   2,
+'Armenian'                               =>   3,
+'Hebrew'                                 =>   4,
+'Arabic'                                 =>   5,
+'Syriac'                                 =>   6,
+'Thaana'                                 =>   7,
+'Devanagari'                             =>   8,
+'Bengali'                                =>   9,
+'Gurmukhi'                               =>  10,
+'Gujarati'                               =>  11,
+'Oriya'                                  =>  12,
+'Tamil'                                  =>  13,
+'Telugu'                                 =>  14,
+'Kannada'                                =>  15,
+'Malayalam'                              =>  16,
+'Sinhala'                                =>  17,
+'Thai'                                   =>  18,
+'Lao'                                    =>  19,
+'Tibetan'                                =>  20,
+'Myanmar'                                =>  21,
+'Georgian'                               =>  22,
+'Hangul'                                 =>  23,
+'Ethiopic'                               =>  24,
+'Cherokee'                               =>  25,
+'CanadianAboriginal'                     =>  26,
+'Ogham'                                  =>  27,
+'Runic'                                  =>  28,
+'Khmer'                                  =>  29,
+'Mongolian'                              =>  30,
+'Hiragana'                               =>  31,
+'Katakana'                               =>  32,
+'Bopomofo'                               =>  33,
+'Han'                                    =>  34,
+'Yi'                                     =>  35,
+'OldItalic'                              =>  36,
+'Gothic'                                 =>  37,
+'Deseret'                                =>  38,
+'Inherited'                              =>  39,
+'BasicLatin'                             =>  40,
+'Latin1Supplement'                       =>  41,
+'LatinExtendedA'                         =>  42,
+'LatinExtendedB'                         =>  43,
+'IPAExtensions'                          =>  44,
+'SpacingModifierLetters'                 =>  45,
+'CombiningDiacriticalMarks'              =>  46,
+'GreekBlock'                             =>  47,
+'CyrillicBlock'                          =>  48,
+'ArmenianBlock'                          =>  49,
+'HebrewBlock'                            =>  50,
+'ArabicBlock'                            =>  51,
+'SyriacBlock'                            =>  52,
+'ThaanaBlock'                            =>  53,
+'DevanagariBlock'                        =>  54,
+'BengaliBlock'                           =>  55,
+'GurmukhiBlock'                          =>  56,
+'GujaratiBlock'                          =>  57,
+'OriyaBlock'                             =>  58,
+'TamilBlock'                             =>  59,
+'TeluguBlock'                            =>  60,
+'KannadaBlock'                           =>  61,
+'MalayalamBlock'                         =>  62,
+'SinhalaBlock'                           =>  63,
+'ThaiBlock'                              =>  64,
+'LaoBlock'                               =>  65,
+'TibetanBlock'                           =>  66,
+'MyanmarBlock'                           =>  67,
+'GeorgianBlock'                          =>  68,
+'HangulJamo'                             =>  69,
+'EthiopicBlock'                          =>  70,
+'CherokeeBlock'                          =>  71,
+'UnifiedCanadianAboriginalSyllabics'     =>  72,
+'OghamBlock'                             =>  73,
+'RunicBlock'                             =>  74,
+'KhmerBlock'                             =>  75,
+'MongolianBlock'                         =>  76,
+'LatinExtendedAdditional'                =>  77,
+'GreekExtended'                          =>  78,
+'GeneralPunctuation'                     =>  79,
+'SuperscriptsandSubscripts'              =>  80,
+'CurrencySymbols'                        =>  81,
+'CombiningMarksforSymbols'               =>  82,
+'LetterlikeSymbols'                      =>  83,
+'NumberForms'                            =>  84,
+'Arrows'                                 =>  85,
+'MathematicalOperators'                  =>  86,
+'MiscellaneousTechnical'                 =>  87,
+'ControlPictures'                        =>  88,
+'OpticalCharacterRecognition'            =>  89,
+'EnclosedAlphanumerics'                  =>  90,
+'BoxDrawing'                             =>  91,
+'BlockElements'                          =>  92,
+'GeometricShapes'                        =>  93,
+'MiscellaneousSymbols'                   =>  94,
+'Dingbats'                               =>  95,
+'BraillePatterns'                        =>  96,
+'CJKRadicalsSupplement'                  =>  97,
+'KangxiRadicals'                         =>  98,
+'IdeographicDescriptionCharacters'       =>  99,
+'CJKSymbolsandPunctuation'               => 100,
+'HiraganaBlock'                          => 101,
+'KatakanaBlock'                          => 102,
+'BopomofoBlock'                          => 103,
+'HangulCompatibilityJamo'                => 104,
+'Kanbun'                                 => 105,
+'BopomofoExtended'                       => 106,
+'EnclosedCJKLettersandMonths'            => 107,
+'CJKCompatibility'                       => 108,
+'CJKUnifiedIdeographsExtensionA'         => 109,
+'CJKUnifiedIdeographs'                   => 110,
+'YiSyllables'                            => 111,
+'YiRadicals'                             => 112,
+'HangulSyllables'                        => 113,
+'HighSurrogates'                         => 114,
+'HighPrivateUseSurrogates'               => 115,
+'LowSurrogates'                          => 116,
+'PrivateUse'                             => 117,
+'CJKCompatibilityIdeographs'             => 118,
+'AlphabeticPresentationForms'            => 119,
+'ArabicPresentationFormsA'               => 120,
+'CombiningHalfMarks'                     => 121,
+'CJKCompatibilityForms'                  => 122,
+'SmallFormVariants'                      => 123,
+'ArabicPresentationFormsB'               => 124,
+'Specials'                               => 125,
+'HalfwidthandFullwidthForms'             => 126,
+'OldItalicBlock'                         => 127,
+'GothicBlock'                            => 128,
+'DeseretBlock'                           => 129,
+'ByzantineMusicalSymbols'                => 130,
+'MusicalSymbols'                         => 131,
+'MathematicalAlphanumericSymbols'        => 132,
+'CJKUnifiedIdeographsExtensionB'         => 133,
+'CJKCompatibilityIdeographsSupplement'   => 134,
+'Tags'                                   => 135,
 );
index 475c1df..5b223f6 100644 (file)
@@ -2,5 +2,26 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-0000   007F
+0041   005A
+0061   007A
+00AA   
+00BA   
+00C0   00D6
+00D8   00F6
+00F8   01BA
+01BB   
+01BC   01BF
+01C0   01C3
+01C4   021F
+0222   0233
+0250   02AD
+02B0   02B8
+02E0   02E4
+1E00   1E9B
+1EA0   1EF9
+207F   
+212A   212B
+FB00   FB06
+FF21   FF3A
+FF41   FF5A
 END
index 5a5aa0e..0b86882 100644 (file)
@@ -2,5 +2,33 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-0080   00FF
+00B5   
+037A   
+0386   
+0388   038A
+038C   
+038E   03A1
+03A3   03CE
+03D0   03D7
+03DA   03F5
+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
+2126   
 END
index f1d866c..0631ba7 100644 (file)
@@ -2,5 +2,22 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-0590   05FF
+0A02   
+0A05   0A0A
+0A0F   0A10
+0A13   0A28
+0A2A   0A30
+0A32   0A33
+0A35   0A36
+0A38   0A39
+0A3C   
+0A3E   0A40
+0A41   0A42
+0A47   0A48
+0A4B   0A4D
+0A59   0A5C
+0A5E   
+0A66   0A6F
+0A70   0A71
+0A72   0A74
 END
diff --git a/lib/unicode/In/100.pl b/lib/unicode/In/100.pl
new file mode 100644 (file)
index 0000000..0c66f05
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+3000   303F
+END
diff --git a/lib/unicode/In/101.pl b/lib/unicode/In/101.pl
new file mode 100644 (file)
index 0000000..49b4e49
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+3040   309F
+END
diff --git a/lib/unicode/In/102.pl b/lib/unicode/In/102.pl
new file mode 100644 (file)
index 0000000..e5568a2
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+30A0   30FF
+END
diff --git a/lib/unicode/In/103.pl b/lib/unicode/In/103.pl
new file mode 100644 (file)
index 0000000..4f9b5f4
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+3100   312F
+END
diff --git a/lib/unicode/In/104.pl b/lib/unicode/In/104.pl
new file mode 100644 (file)
index 0000000..b15c4cc
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+3130   318F
+END
diff --git a/lib/unicode/In/105.pl b/lib/unicode/In/105.pl
new file mode 100644 (file)
index 0000000..d78c208
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+3190   319F
+END
diff --git a/lib/unicode/In/106.pl b/lib/unicode/In/106.pl
new file mode 100644 (file)
index 0000000..96150b4
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+31A0   31BF
+END
diff --git a/lib/unicode/In/107.pl b/lib/unicode/In/107.pl
new file mode 100644 (file)
index 0000000..2708fec
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+3200   32FF
+END
diff --git a/lib/unicode/In/108.pl b/lib/unicode/In/108.pl
new file mode 100644 (file)
index 0000000..d504529
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+3300   33FF
+END
diff --git a/lib/unicode/In/109.pl b/lib/unicode/In/109.pl
new file mode 100644 (file)
index 0000000..83adb81
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+3400   4DB5
+END
index 7546a74..fac0301 100644 (file)
@@ -2,5 +2,24 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-0600   06FF
+0A81   0A82
+0A83   
+0A85   0A8B
+0A8D   
+0A8F   0A91
+0A93   0AA8
+0AAA   0AB0
+0AB2   0AB3
+0AB5   0AB9
+0ABC   
+0ABD   
+0ABE   0AC0
+0AC1   0AC5
+0AC7   0AC8
+0AC9   
+0ACB   0ACC
+0ACD   
+0AD0   
+0AE0   
+0AE6   0AEF
 END
diff --git a/lib/unicode/In/110.pl b/lib/unicode/In/110.pl
new file mode 100644 (file)
index 0000000..f74552e
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+4E00   9FFF
+END
diff --git a/lib/unicode/In/111.pl b/lib/unicode/In/111.pl
new file mode 100644 (file)
index 0000000..0636a82
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+A000   A48F
+END
diff --git a/lib/unicode/In/112.pl b/lib/unicode/In/112.pl
new file mode 100644 (file)
index 0000000..56404c5
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+A490   A4CF
+END
diff --git a/lib/unicode/In/113.pl b/lib/unicode/In/113.pl
new file mode 100644 (file)
index 0000000..e1e2694
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+AC00   D7A3
+END
diff --git a/lib/unicode/In/114.pl b/lib/unicode/In/114.pl
new file mode 100644 (file)
index 0000000..0f4eb57
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+D800   DB7F
+END
diff --git a/lib/unicode/In/115.pl b/lib/unicode/In/115.pl
new file mode 100644 (file)
index 0000000..ec4ca07
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+DB80   DBFF
+END
diff --git a/lib/unicode/In/116.pl b/lib/unicode/In/116.pl
new file mode 100644 (file)
index 0000000..d056168
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+DC00   DFFF
+END
diff --git a/lib/unicode/In/117.pl b/lib/unicode/In/117.pl
new file mode 100644 (file)
index 0000000..530166d
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+100000 10FFFD
+END
diff --git a/lib/unicode/In/118.pl b/lib/unicode/In/118.pl
new file mode 100644 (file)
index 0000000..0c553d6
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+F900   FAFF
+END
diff --git a/lib/unicode/In/119.pl b/lib/unicode/In/119.pl
new file mode 100644 (file)
index 0000000..42cc1ca
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+FB00   FB4F
+END
index e5247ad..5e9f01f 100644 (file)
@@ -2,5 +2,26 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-0700   074F
+0B01   
+0B02   0B03
+0B05   0B0C
+0B0F   0B10
+0B13   0B28
+0B2A   0B30
+0B32   0B33
+0B36   0B39
+0B3C   
+0B3D   
+0B3E   
+0B3F   
+0B40   
+0B41   0B43
+0B47   0B48
+0B4B   0B4C
+0B4D   
+0B56   
+0B57   
+0B5C   0B5D
+0B5F   0B61
+0B66   0B6F
 END
diff --git a/lib/unicode/In/120.pl b/lib/unicode/In/120.pl
new file mode 100644 (file)
index 0000000..ffb4f1e
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+FB50   FDFF
+END
diff --git a/lib/unicode/In/121.pl b/lib/unicode/In/121.pl
new file mode 100644 (file)
index 0000000..cc8a4a2
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+FE20   FE2F
+END
diff --git a/lib/unicode/In/122.pl b/lib/unicode/In/122.pl
new file mode 100644 (file)
index 0000000..4e462b8
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+FE30   FE4F
+END
diff --git a/lib/unicode/In/123.pl b/lib/unicode/In/123.pl
new file mode 100644 (file)
index 0000000..4eff1ea
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+FE50   FE6F
+END
diff --git a/lib/unicode/In/124.pl b/lib/unicode/In/124.pl
new file mode 100644 (file)
index 0000000..dc5a32e
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+FE70   FEFE
+END
diff --git a/lib/unicode/In/125.pl b/lib/unicode/In/125.pl
new file mode 100644 (file)
index 0000000..931fc5b
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+FFF0   FFFD
+END
diff --git a/lib/unicode/In/126.pl b/lib/unicode/In/126.pl
new file mode 100644 (file)
index 0000000..03e8515
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+FF00   FFEF
+END
diff --git a/lib/unicode/In/127.pl b/lib/unicode/In/127.pl
new file mode 100644 (file)
index 0000000..44a5e47
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+10300  1032F
+END
diff --git a/lib/unicode/In/128.pl b/lib/unicode/In/128.pl
new file mode 100644 (file)
index 0000000..8030411
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+10330  1034F
+END
diff --git a/lib/unicode/In/129.pl b/lib/unicode/In/129.pl
new file mode 100644 (file)
index 0000000..d2c50bb
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+10400  1044F
+END
index 5bda401..30e9791 100644 (file)
@@ -2,5 +2,25 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-0780   07BF
+0B82   
+0B83   
+0B85   0B8A
+0B8E   0B90
+0B92   0B95
+0B99   0B9A
+0B9C   
+0B9E   0B9F
+0BA3   0BA4
+0BA8   0BAA
+0BAE   0BB5
+0BB7   0BB9
+0BBE   0BBF
+0BC0   
+0BC1   0BC2
+0BC6   0BC8
+0BCA   0BCC
+0BCD   
+0BD7   
+0BE7   0BEF
+0BF0   0BF2
 END
diff --git a/lib/unicode/In/130.pl b/lib/unicode/In/130.pl
new file mode 100644 (file)
index 0000000..f1073c7
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+1D000  1D0FF
+END
diff --git a/lib/unicode/In/131.pl b/lib/unicode/In/131.pl
new file mode 100644 (file)
index 0000000..7435889
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+1D100  1D1FF
+END
diff --git a/lib/unicode/In/132.pl b/lib/unicode/In/132.pl
new file mode 100644 (file)
index 0000000..7e40edc
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+1D400  1D7FF
+END
diff --git a/lib/unicode/In/133.pl b/lib/unicode/In/133.pl
new file mode 100644 (file)
index 0000000..931aec3
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+20000  2A6D6
+END
diff --git a/lib/unicode/In/134.pl b/lib/unicode/In/134.pl
new file mode 100644 (file)
index 0000000..c025148
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+2F800  2FA1F
+END
diff --git a/lib/unicode/In/135.pl b/lib/unicode/In/135.pl
new file mode 100644 (file)
index 0000000..495d2d5
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+E0000  E007F
+END
index a20b68d..f82057d 100644 (file)
@@ -2,5 +2,17 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-0900   097F
+0C01   0C03
+0C05   0C0C
+0C0E   0C10
+0C12   0C28
+0C2A   0C33
+0C35   0C39
+0C3E   0C40
+0C41   0C44
+0C46   0C48
+0C4A   0C4D
+0C55   0C56
+0C60   0C61
+0C66   0C6F
 END
index 306f653..65ce557 100644 (file)
@@ -2,5 +2,21 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-0980   09FF
+0C82   0C83
+0C85   0C8C
+0C8E   0C90
+0C92   0CA8
+0CAA   0CB3
+0CB5   0CB9
+0CBE   
+0CBF   
+0CC0   0CC4
+0CC6   
+0CC7   0CC8
+0CCA   0CCB
+0CCC   0CCD
+0CD5   0CD6
+0CDE   
+0CE0   0CE1
+0CE6   0CEF
 END
index d37d484..64c6bb6 100644 (file)
@@ -2,5 +2,17 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-0A00   0A7F
+0D02   0D03
+0D05   0D0C
+0D0E   0D10
+0D12   0D28
+0D2A   0D39
+0D3E   0D40
+0D41   0D43
+0D46   0D48
+0D4A   0D4C
+0D4D   
+0D57   
+0D60   0D61
+0D66   0D6F
 END
index 65d853b..47f26a1 100644 (file)
@@ -2,5 +2,16 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-0A80   0AFF
+0D82   0D83
+0D85   0D96
+0D9A   0DB1
+0DB3   0DBB
+0DBD   
+0DC0   0DC6
+0DCA   
+0DCF   0DD1
+0DD2   0DD4
+0DD6   
+0DD8   0DDF
+0DF2   0DF3
 END
index 14e1027..b7df87e 100644 (file)
@@ -2,5 +2,12 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-0B00   0B7F
+0E01   0E30
+0E31   
+0E32   0E33
+0E34   0E3A
+0E40   0E45
+0E46   
+0E47   0E4E
+0E50   0E59
 END
index a28ba3d..45e0d26 100644 (file)
@@ -2,5 +2,26 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-0B80   0BFF
+0E81   0E82
+0E84   
+0E87   0E88
+0E8A   
+0E8D   
+0E94   0E97
+0E99   0E9F
+0EA1   0EA3
+0EA5   
+0EA7   
+0EAA   0EAB
+0EAD   0EB0
+0EB1   
+0EB2   0EB3
+0EB4   0EB9
+0EBB   0EBC
+0EBD   
+0EC0   0EC4
+0EC6   
+0EC8   0ECD
+0ED0   0ED9
+0EDC   0EDD
 END
index 0f6acf9..4c8985f 100644 (file)
@@ -2,5 +2,11 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-0100   017F
+0400   0481
+0483   0486
+048C   04C4
+04C7   04C8
+04CB   04CC
+04D0   04F5
+04F8   04F9
 END
index aff6cc9..1d990b9 100644 (file)
@@ -2,5 +2,21 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-0C00   0C7F
+0F00   
+0F18   0F19
+0F20   0F29
+0F2A   0F33
+0F35   
+0F37   
+0F39   
+0F40   0F47
+0F49   0F6A
+0F71   0F7E
+0F7F   
+0F80   0F84
+0F86   0F87
+0F88   0F8B
+0F90   0F97
+0F99   0FBC
+0FC6   
 END
index 41e05bd..d376e0e 100644 (file)
@@ -2,5 +2,18 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-0C80   0CFF
+1000   1021
+1023   1027
+1029   102A
+102C   
+102D   1030
+1031   
+1032   
+1036   1037
+1038   
+1039   
+1040   1049
+1050   1055
+1056   1057
+1058   1059
 END
index b42bbee..df0b241 100644 (file)
@@ -2,5 +2,6 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-0D00   0D7F
+10A0   10C5
+10D0   10F6
 END
index 00da6d1..902b03c 100644 (file)
@@ -2,5 +2,14 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-0D80   0DFF
+1100   1159
+115F   11A2
+11A8   11F9
+3131   318E
+AC00   D7A3
+FFA0   FFBE
+FFC2   FFC7
+FFCA   FFCF
+FFD2   FFD7
+FFDA   FFDC
 END
index 2fa00eb..38afd29 100644 (file)
@@ -2,5 +2,31 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-0E00   0E7F
+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   1371
+1372   137C
 END
index 5fd607c..42d0af4 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-0E80   0EFF
+13A0   13F4
 END
index 3ae5e62..fda7338 100644 (file)
@@ -2,5 +2,6 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-0F00   0FFF
+1401   166C
+166F   1676
 END
index ecc3448..31dfc66 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-1000   109F
+1681   169A
 END
index 73a8818..77b12e1 100644 (file)
@@ -2,5 +2,6 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-10A0   10FF
+16A0   16EA
+16EE   16F0
 END
index 692be7d..5216ca2 100644 (file)
@@ -2,5 +2,12 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-1100   11FF
+1780   17B3
+17B4   17B6
+17B7   17BD
+17BE   17C5
+17C6   
+17C7   17C8
+17C9   17D3
+17E0   17E9
 END
index 68f0932..2e61fcb 100644 (file)
@@ -2,5 +2,8 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-0180   024F
+0531   0556
+0559   
+0561   0587
+FB13   FB17
 END
index ad4776d..950056f 100644 (file)
@@ -2,5 +2,10 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-1200   137F
+1810   1819
+1820   1842
+1843   
+1844   1877
+1880   18A8
+18A9   
 END
index f40dfa2..df3dd8c 100644 (file)
@@ -2,5 +2,6 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-13A0   13FF
+3041   3094
+309D   309E
 END
index 7318008..87fe407 100644 (file)
@@ -2,5 +2,8 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-1400   167F
+30A1   30FA
+30FD   30FE
+FF66   FF6F
+FF71   FF9D
 END
index 5d7bd97..bafc4c7 100644 (file)
@@ -2,5 +2,6 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-1680   169F
+3105   312C
+31A0   31B7
 END
index d404cb6..be241af 100644 (file)
@@ -2,5 +2,16 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-16A0   16FF
+2E80   2E99
+2E9B   2EF3
+2F00   2FD5
+3005   
+3007   
+3021   3029
+3038   303A
+3400   4DB5
+4E00   9FA5
+F900   FA2D
+20000  2A6D6
+2F800  2FA1D
 END
index 2b0b198..dcf9811 100644 (file)
@@ -2,5 +2,10 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-1780   17FF
+A000   A48C
+A490   A4A1
+A4A4   A4B3
+A4B5   A4C0
+A4C2   A4C4
+A4C6   
 END
index 06526c6..a2dcdc2 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-1800   18AF
+10300  1031E
 END
index c288810..175b67a 100644 (file)
@@ -2,5 +2,6 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-1E00   1EFF
+10330  10349
+1034A  
 END
index 74cd2c8..98b1f16 100644 (file)
@@ -2,5 +2,6 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-1F00   1FFF
+10400  10425
+10428  1044D
 END
index b9b0e7e..fd764cf 100644 (file)
@@ -2,5 +2,32 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-2000   206F
+0300   034E
+0360   0362
+0488   0489
+0591   05A1
+05A3   05B9
+05BB   05BD
+05BF   
+05C1   05C2
+05C4   
+064B   0655
+0670   
+06D6   06DC
+06DD   06DE
+06DF   06E4
+06E7   06E8
+06EA   06ED
+20D0   20DC
+20DD   20E0
+20E1   
+20E2   20E3
+302A   302F
+3099   309A
+FB1E   
+FE20   FE23
+1D167  1D169
+1D17B  1D182
+1D185  1D18B
+1D1AA  1D1AD
 END
index f6e9454..2dfa229 100644 (file)
@@ -2,5 +2,14 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-0250   02AF
+05D0   05EA
+05F0   05F2
+FB1D   
+FB1F   FB28
+FB2A   FB36
+FB38   FB3C
+FB3E   
+FB40   FB41
+FB43   FB44
+FB46   FB4F
 END
index 2e36ac3..475c1df 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-2070   209F
+0000   007F
 END
index 12c6737..5a5aa0e 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-20A0   20CF
+0080   00FF
 END
index 2d58a56..0f6acf9 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-20D0   20FF
+0100   017F
 END
index c735821..68f0932 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-2100   214F
+0180   024F
 END
index a1949a1..f6e9454 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-2150   218F
+0250   02AF
 END
index 799f739..a242e02 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-2190   21FF
+02B0   02FF
 END
index 8bc8295..cf9bb94 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-2200   22FF
+0300   036F
 END
index 6786795..8d89b71 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-2300   23FF
+0370   03FF
 END
index 7aad2fc..0075ce1 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-2400   243F
+0400   04FF
 END
index c7cecd0..a6d50e3 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-2440   245F
+0530   058F
 END
index a242e02..172d600 100644 (file)
@@ -2,5 +2,18 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-02B0   02FF
+0621   063A
+0641   064A
+0671   06D3
+06D5   
+06E5   06E6
+06FA   06FC
+FB50   FBB1
+FBD3   FD3D
+FD50   FD8F
+FD92   FDC7
+FDF0   FDFB
+FE70   FE72
+FE74   
+FE76   FEFC
 END
index 7b1b778..f1d866c 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-2460   24FF
+0590   05FF
 END
index 4d44686..7546a74 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-2500   257F
+0600   06FF
 END
index 6135c93..e5247ad 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-2580   259F
+0700   074F
 END
index 855d98e..5bda401 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-25A0   25FF
+0780   07BF
 END
index 0949bc2..a20b68d 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-2600   26FF
+0900   097F
 END
index 3013f73..306f653 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-2700   27BF
+0980   09FF
 END
index d785c31..d37d484 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-2800   28FF
+0A00   0A7F
 END
index 2bf5651..65d853b 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-2E80   2EFF
+0A80   0AFF
 END
index 3903f15..14e1027 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-2F00   2FDF
+0B00   0B7F
 END
index 07799e6..a28ba3d 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-2FF0   2FFF
+0B80   0BFF
 END
index cf9bb94..4c5a3a8 100644 (file)
@@ -2,5 +2,8 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-0300   036F
+0710   
+0711   
+0712   072C
+0730   074A
 END
index 0c66f05..aff6cc9 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-3000   303F
+0C00   0C7F
 END
index 49b4e49..41e05bd 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-3040   309F
+0C80   0CFF
 END
index e5568a2..b42bbee 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-30A0   30FF
+0D00   0D7F
 END
index 4f9b5f4..00da6d1 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-3100   312F
+0D80   0DFF
 END
index b15c4cc..2fa00eb 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-3130   318F
+0E00   0E7F
 END
index d78c208..5fd607c 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-3190   319F
+0E80   0EFF
 END
index 96150b4..3ae5e62 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-31A0   31BF
+0F00   0FFF
 END
index 2708fec..ecc3448 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-3200   32FF
+1000   109F
 END
index d504529..73a8818 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-3300   33FF
+10A0   10FF
 END
index 83adb81..692be7d 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-3400   4DB5
+1100   11FF
 END
index 8d89b71..2421d05 100644 (file)
@@ -2,5 +2,6 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-0370   03FF
+0780   07A5
+07A6   07B0
 END
index f74552e..ad4776d 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-4E00   9FFF
+1200   137F
 END
index 0636a82..f40dfa2 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-A000   A48F
+13A0   13FF
 END
index 56404c5..7318008 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-A490   A4CF
+1400   167F
 END
index e1e2694..5d7bd97 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-AC00   D7A3
+1680   169F
 END
index 0f4eb57..d404cb6 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-D800   DB7F
+16A0   16FF
 END
index ec4ca07..2b0b198 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-DB80   DBFF
+1780   17FF
 END
index d056168..06526c6 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-DC00   DFFF
+1800   18AF
 END
index 530166d..c288810 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-100000 10FFFD
+1E00   1EFF
 END
index 0c553d6..74cd2c8 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-F900   FAFF
+1F00   1FFF
 END
index 42cc1ca..b9b0e7e 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-FB00   FB4F
+2000   206F
 END
index 0075ce1..b67827f 100644 (file)
@@ -2,5 +2,18 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-0400   04FF
+0901   0902
+0903   
+0905   0939
+093C   
+093D   
+093E   0940
+0941   0948
+0949   094C
+094D   
+0950   
+0951   0954
+0958   0961
+0962   0963
+0966   096F
 END
index ffb4f1e..2e36ac3 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-FB50   FDFF
+2070   209F
 END
index cc8a4a2..12c6737 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-FE20   FE2F
+20A0   20CF
 END
index 4e462b8..2d58a56 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-FE30   FE4F
+20D0   20FF
 END
index 4eff1ea..c735821 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-FE50   FE6F
+2100   214F
 END
index dc5a32e..a1949a1 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-FE70   FEFE
+2150   218F
 END
index 931fc5b..799f739 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-FFF0   FFFD
+2190   21FF
 END
index 03e8515..8bc8295 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-FF00   FFEF
+2200   22FF
 END
index 44a5e47..6786795 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-10300  1032F
+2300   23FF
 END
index 8030411..7aad2fc 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-10330  1034F
+2400   243F
 END
index d2c50bb..c7cecd0 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-10400  1044F
+2440   245F
 END
index a6d50e3..90d1ab7 100644 (file)
@@ -2,5 +2,23 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-0530   058F
+0981   
+0985   098C
+098F   0990
+0993   09A8
+09AA   09B0
+09B2   
+09B6   09B9
+09BC   
+09BE   09C0
+09C1   09C4
+09C7   09C8
+09CB   09CC
+09CD   
+09D7   
+09DC   09DD
+09DF   09E1
+09E2   09E3
+09E6   09EF
+09F0   09F1
 END
index f1073c7..7b1b778 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-1D000  1D0FF
+2460   24FF
 END
index 7435889..4d44686 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-1D100  1D1FF
+2500   257F
 END
index 7e40edc..6135c93 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-1D400  1D7FF
+2580   259F
 END
index 931aec3..855d98e 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-20000  2A6D6
+25A0   25FF
 END
index c025148..0949bc2 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-2F800  2FA1F
+2600   26FF
 END
index 495d2d5..3013f73 100644 (file)
@@ -2,5 +2,5 @@
 # This file is built by mktables.PL from e.g. Unicode.txt.
 # Any changes made here will be lost!
 return <<'END';
-E0000  E007F
+2700   27BF
 END
diff --git a/lib/unicode/In/96.pl b/lib/unicode/In/96.pl
new file mode 100644 (file)
index 0000000..d785c31
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+2800   28FF
+END
diff --git a/lib/unicode/In/97.pl b/lib/unicode/In/97.pl
new file mode 100644 (file)
index 0000000..2bf5651
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+2E80   2EFF
+END
diff --git a/lib/unicode/In/98.pl b/lib/unicode/In/98.pl
new file mode 100644 (file)
index 0000000..3903f15
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+2F00   2FDF
+END
diff --git a/lib/unicode/In/99.pl b/lib/unicode/In/99.pl
new file mode 100644 (file)
index 0000000..07799e6
--- /dev/null
@@ -0,0 +1,6 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+2FF0   2FFF
+END
diff --git a/lib/unicode/Scripts.pl b/lib/unicode/Scripts.pl
new file mode 100644 (file)
index 0000000..ed0168e
--- /dev/null
@@ -0,0 +1,445 @@
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by mktables.PL from e.g. Unicode.txt.
+# Any changes made here will be lost!
+return <<'END';
+0041   005A    LATIN   # Latin In/0.pl
+0061   007A    LATIN   # Latin In/0.pl
+00AA           LATIN   # Latin In/0.pl
+00BA           LATIN   # Latin In/0.pl
+00C0   00D6    LATIN   # Latin In/0.pl
+00D8   00F6    LATIN   # Latin In/0.pl
+00F8   01BA    LATIN   # Latin In/0.pl
+01BB           LATIN   # Latin In/0.pl
+01BC   01BF    LATIN   # Latin In/0.pl
+01C0   01C3    LATIN   # Latin In/0.pl
+01C4   021F    LATIN   # Latin In/0.pl
+0222   0233    LATIN   # Latin In/0.pl
+0250   02AD    LATIN   # Latin In/0.pl
+02B0   02B8    LATIN   # Latin In/0.pl
+02E0   02E4    LATIN   # Latin In/0.pl
+1E00   1E9B    LATIN   # Latin In/0.pl
+1EA0   1EF9    LATIN   # Latin In/0.pl
+207F           LATIN   # Latin In/0.pl
+212A   212B    LATIN   # Latin In/0.pl
+FB00   FB06    LATIN   # Latin In/0.pl
+FF21   FF3A    LATIN   # Latin In/0.pl
+FF41   FF5A    LATIN   # Latin In/0.pl
+00B5           GREEK   # Greek In/1.pl
+037A           GREEK   # Greek In/1.pl
+0386           GREEK   # Greek In/1.pl
+0388   038A    GREEK   # Greek In/1.pl
+038C           GREEK   # Greek In/1.pl
+038E   03A1    GREEK   # Greek In/1.pl
+03A3   03CE    GREEK   # Greek In/1.pl
+03D0   03D7    GREEK   # Greek In/1.pl
+03DA   03F5    GREEK   # Greek In/1.pl
+1F00   1F15    GREEK   # Greek In/1.pl
+1F18   1F1D    GREEK   # Greek In/1.pl
+1F20   1F45    GREEK   # Greek In/1.pl
+1F48   1F4D    GREEK   # Greek In/1.pl
+1F50   1F57    GREEK   # Greek In/1.pl
+1F59           GREEK   # Greek In/1.pl
+1F5B           GREEK   # Greek In/1.pl
+1F5D           GREEK   # Greek In/1.pl
+1F5F   1F7D    GREEK   # Greek In/1.pl
+1F80   1FB4    GREEK   # Greek In/1.pl
+1FB6   1FBC    GREEK   # Greek In/1.pl
+1FBE           GREEK   # Greek In/1.pl
+1FC2   1FC4    GREEK   # Greek In/1.pl
+1FC6   1FCC    GREEK   # Greek In/1.pl
+1FD0   1FD3    GREEK   # Greek In/1.pl
+1FD6   1FDB    GREEK   # Greek In/1.pl
+1FE0   1FEC    GREEK   # Greek In/1.pl
+1FF2   1FF4    GREEK   # Greek In/1.pl
+1FF6   1FFC    GREEK   # Greek In/1.pl
+2126           GREEK   # Greek In/1.pl
+0400   0481    CYRILLIC        # Cyrillic In/2.pl
+0483   0486    CYRILLIC        # Cyrillic In/2.pl
+048C   04C4    CYRILLIC        # Cyrillic In/2.pl
+04C7   04C8    CYRILLIC        # Cyrillic In/2.pl
+04CB   04CC    CYRILLIC        # Cyrillic In/2.pl
+04D0   04F5    CYRILLIC        # Cyrillic In/2.pl
+04F8   04F9    CYRILLIC        # Cyrillic In/2.pl
+0531   0556    ARMENIAN        # Armenian In/3.pl
+0559           ARMENIAN        # Armenian In/3.pl
+0561   0587    ARMENIAN        # Armenian In/3.pl
+FB13   FB17    ARMENIAN        # Armenian In/3.pl
+05D0   05EA    HEBREW  # Hebrew In/4.pl
+05F0   05F2    HEBREW  # Hebrew In/4.pl
+FB1D           HEBREW  # Hebrew In/4.pl
+FB1F   FB28    HEBREW  # Hebrew In/4.pl
+FB2A   FB36    HEBREW  # Hebrew In/4.pl
+FB38   FB3C    HEBREW  # Hebrew In/4.pl
+FB3E           HEBREW  # Hebrew In/4.pl
+FB40   FB41    HEBREW  # Hebrew In/4.pl
+FB43   FB44    HEBREW  # Hebrew In/4.pl
+FB46   FB4F    HEBREW  # Hebrew In/4.pl
+0621   063A    ARABIC  # Arabic In/5.pl
+0641   064A    ARABIC  # Arabic In/5.pl
+0671   06D3    ARABIC  # Arabic In/5.pl
+06D5           ARABIC  # Arabic In/5.pl
+06E5   06E6    ARABIC  # Arabic In/5.pl
+06FA   06FC    ARABIC  # Arabic In/5.pl
+FB50   FBB1    ARABIC  # Arabic In/5.pl
+FBD3   FD3D    ARABIC  # Arabic In/5.pl
+FD50   FD8F    ARABIC  # Arabic In/5.pl
+FD92   FDC7    ARABIC  # Arabic In/5.pl
+FDF0   FDFB    ARABIC  # Arabic In/5.pl
+FE70   FE72    ARABIC  # Arabic In/5.pl
+FE74           ARABIC  # Arabic In/5.pl
+FE76   FEFC    ARABIC  # Arabic In/5.pl
+0710           SYRIAC  # Syriac In/6.pl
+0711           SYRIAC  # Syriac In/6.pl
+0712   072C    SYRIAC  # Syriac In/6.pl
+0730   074A    SYRIAC  # Syriac In/6.pl
+0780   07A5    THAANA  # Thaana In/7.pl
+07A6   07B0    THAANA  # Thaana In/7.pl
+0901   0902    DEVANAGARI      # Devanagari In/8.pl
+0903           DEVANAGARI      # Devanagari In/8.pl
+0905   0939    DEVANAGARI      # Devanagari In/8.pl
+093C           DEVANAGARI      # Devanagari In/8.pl
+093D           DEVANAGARI      # Devanagari In/8.pl
+093E   0940    DEVANAGARI      # Devanagari In/8.pl
+0941   0948    DEVANAGARI      # Devanagari In/8.pl
+0949   094C    DEVANAGARI      # Devanagari In/8.pl
+094D           DEVANAGARI      # Devanagari In/8.pl
+0950           DEVANAGARI      # Devanagari In/8.pl
+0951   0954    DEVANAGARI      # Devanagari In/8.pl
+0958   0961    DEVANAGARI      # Devanagari In/8.pl
+0962   0963    DEVANAGARI      # Devanagari In/8.pl
+0966   096F    DEVANAGARI      # Devanagari In/8.pl
+0981           BENGALI # Bengali In/9.pl
+0985   098C    BENGALI # Bengali In/9.pl
+098F   0990    BENGALI # Bengali In/9.pl
+0993   09A8    BENGALI # Bengali In/9.pl
+09AA   09B0    BENGALI # Bengali In/9.pl
+09B2           BENGALI # Bengali In/9.pl
+09B6   09B9    BENGALI # Bengali In/9.pl
+09BC           BENGALI # Bengali In/9.pl
+09BE   09C0    BENGALI # Bengali In/9.pl
+09C1   09C4    BENGALI # Bengali In/9.pl
+09C7   09C8    BENGALI # Bengali In/9.pl
+09CB   09CC    BENGALI # Bengali In/9.pl
+09CD           BENGALI # Bengali In/9.pl
+09D7           BENGALI # Bengali In/9.pl
+09DC   09DD    BENGALI # Bengali In/9.pl
+09DF   09E1    BENGALI # Bengali In/9.pl
+09E2   09E3    BENGALI # Bengali In/9.pl
+09E6   09EF    BENGALI # Bengali In/9.pl
+09F0   09F1    BENGALI # Bengali In/9.pl
+0A02           GURMUKHI        # Gurmukhi In/10.pl
+0A05   0A0A    GURMUKHI        # Gurmukhi In/10.pl
+0A0F   0A10    GURMUKHI        # Gurmukhi In/10.pl
+0A13   0A28    GURMUKHI        # Gurmukhi In/10.pl
+0A2A   0A30    GURMUKHI        # Gurmukhi In/10.pl
+0A32   0A33    GURMUKHI        # Gurmukhi In/10.pl
+0A35   0A36    GURMUKHI        # Gurmukhi In/10.pl
+0A38   0A39    GURMUKHI        # Gurmukhi In/10.pl
+0A3C           GURMUKHI        # Gurmukhi In/10.pl
+0A3E   0A40    GURMUKHI        # Gurmukhi In/10.pl
+0A41   0A42    GURMUKHI        # Gurmukhi In/10.pl
+0A47   0A48    GURMUKHI        # Gurmukhi In/10.pl
+0A4B   0A4D    GURMUKHI        # Gurmukhi In/10.pl
+0A59   0A5C    GURMUKHI        # Gurmukhi In/10.pl
+0A5E           GURMUKHI        # Gurmukhi In/10.pl
+0A66   0A6F    GURMUKHI        # Gurmukhi In/10.pl
+0A70   0A71    GURMUKHI        # Gurmukhi In/10.pl
+0A72   0A74    GURMUKHI        # Gurmukhi In/10.pl
+0A81   0A82    GUJARATI        # Gujarati In/11.pl
+0A83           GUJARATI        # Gujarati In/11.pl
+0A85   0A8B    GUJARATI        # Gujarati In/11.pl
+0A8D           GUJARATI        # Gujarati In/11.pl
+0A8F   0A91    GUJARATI        # Gujarati In/11.pl
+0A93   0AA8    GUJARATI        # Gujarati In/11.pl
+0AAA   0AB0    GUJARATI        # Gujarati In/11.pl
+0AB2   0AB3    GUJARATI        # Gujarati In/11.pl
+0AB5   0AB9    GUJARATI        # Gujarati In/11.pl
+0ABC           GUJARATI        # Gujarati In/11.pl
+0ABD           GUJARATI        # Gujarati In/11.pl
+0ABE   0AC0    GUJARATI        # Gujarati In/11.pl
+0AC1   0AC5    GUJARATI        # Gujarati In/11.pl
+0AC7   0AC8    GUJARATI        # Gujarati In/11.pl
+0AC9           GUJARATI        # Gujarati In/11.pl
+0ACB   0ACC    GUJARATI        # Gujarati In/11.pl
+0ACD           GUJARATI        # Gujarati In/11.pl
+0AD0           GUJARATI        # Gujarati In/11.pl
+0AE0           GUJARATI        # Gujarati In/11.pl
+0AE6   0AEF    GUJARATI        # Gujarati In/11.pl
+0B01           ORIYA   # Oriya In/12.pl
+0B02   0B03    ORIYA   # Oriya In/12.pl
+0B05   0B0C    ORIYA   # Oriya In/12.pl
+0B0F   0B10    ORIYA   # Oriya In/12.pl
+0B13   0B28    ORIYA   # Oriya In/12.pl
+0B2A   0B30    ORIYA   # Oriya In/12.pl
+0B32   0B33    ORIYA   # Oriya In/12.pl
+0B36   0B39    ORIYA   # Oriya In/12.pl
+0B3C           ORIYA   # Oriya In/12.pl
+0B3D           ORIYA   # Oriya In/12.pl
+0B3E           ORIYA   # Oriya In/12.pl
+0B3F           ORIYA   # Oriya In/12.pl
+0B40           ORIYA   # Oriya In/12.pl
+0B41   0B43    ORIYA   # Oriya In/12.pl
+0B47   0B48    ORIYA   # Oriya In/12.pl
+0B4B   0B4C    ORIYA   # Oriya In/12.pl
+0B4D           ORIYA   # Oriya In/12.pl
+0B56           ORIYA   # Oriya In/12.pl
+0B57           ORIYA   # Oriya In/12.pl
+0B5C   0B5D    ORIYA   # Oriya In/12.pl
+0B5F   0B61    ORIYA   # Oriya In/12.pl
+0B66   0B6F    ORIYA   # Oriya In/12.pl
+0B82           TAMIL   # Tamil In/13.pl
+0B83           TAMIL   # Tamil In/13.pl
+0B85   0B8A    TAMIL   # Tamil In/13.pl
+0B8E   0B90    TAMIL   # Tamil In/13.pl
+0B92   0B95    TAMIL   # Tamil In/13.pl
+0B99   0B9A    TAMIL   # Tamil In/13.pl
+0B9C           TAMIL   # Tamil In/13.pl
+0B9E   0B9F    TAMIL   # Tamil In/13.pl
+0BA3   0BA4    TAMIL   # Tamil In/13.pl
+0BA8   0BAA    TAMIL   # Tamil In/13.pl
+0BAE   0BB5    TAMIL   # Tamil In/13.pl
+0BB7   0BB9    TAMIL   # Tamil In/13.pl
+0BBE   0BBF    TAMIL   # Tamil In/13.pl
+0BC0           TAMIL   # Tamil In/13.pl
+0BC1   0BC2    TAMIL   # Tamil In/13.pl
+0BC6   0BC8    TAMIL   # Tamil In/13.pl
+0BCA   0BCC    TAMIL   # Tamil In/13.pl
+0BCD           TAMIL   # Tamil In/13.pl
+0BD7           TAMIL   # Tamil In/13.pl
+0BE7   0BEF    TAMIL   # Tamil In/13.pl
+0BF0   0BF2    TAMIL   # Tamil In/13.pl
+0C01   0C03    TELUGU  # Telugu In/14.pl
+0C05   0C0C    TELUGU  # Telugu In/14.pl
+0C0E   0C10    TELUGU  # Telugu In/14.pl
+0C12   0C28    TELUGU  # Telugu In/14.pl
+0C2A   0C33    TELUGU  # Telugu In/14.pl
+0C35   0C39    TELUGU  # Telugu In/14.pl
+0C3E   0C40    TELUGU  # Telugu In/14.pl
+0C41   0C44    TELUGU  # Telugu In/14.pl
+0C46   0C48    TELUGU  # Telugu In/14.pl
+0C4A   0C4D    TELUGU  # Telugu In/14.pl
+0C55   0C56    TELUGU  # Telugu In/14.pl
+0C60   0C61    TELUGU  # Telugu In/14.pl
+0C66   0C6F    TELUGU  # Telugu In/14.pl
+0C82   0C83    KANNADA # Kannada In/15.pl
+0C85   0C8C    KANNADA # Kannada In/15.pl
+0C8E   0C90    KANNADA # Kannada In/15.pl
+0C92   0CA8    KANNADA # Kannada In/15.pl
+0CAA   0CB3    KANNADA # Kannada In/15.pl
+0CB5   0CB9    KANNADA # Kannada In/15.pl
+0CBE           KANNADA # Kannada In/15.pl
+0CBF           KANNADA # Kannada In/15.pl
+0CC0   0CC4    KANNADA # Kannada In/15.pl
+0CC6           KANNADA # Kannada In/15.pl
+0CC7   0CC8    KANNADA # Kannada In/15.pl
+0CCA   0CCB    KANNADA # Kannada In/15.pl
+0CCC   0CCD    KANNADA # Kannada In/15.pl
+0CD5   0CD6    KANNADA # Kannada In/15.pl
+0CDE           KANNADA # Kannada In/15.pl
+0CE0   0CE1    KANNADA # Kannada In/15.pl
+0CE6   0CEF    KANNADA # Kannada In/15.pl
+0D02   0D03    MALAYALAM       # Malayalam In/16.pl
+0D05   0D0C    MALAYALAM       # Malayalam In/16.pl
+0D0E   0D10    MALAYALAM       # Malayalam In/16.pl
+0D12   0D28    MALAYALAM       # Malayalam In/16.pl
+0D2A   0D39    MALAYALAM       # Malayalam In/16.pl
+0D3E   0D40    MALAYALAM       # Malayalam In/16.pl
+0D41   0D43    MALAYALAM       # Malayalam In/16.pl
+0D46   0D48    MALAYALAM       # Malayalam In/16.pl
+0D4A   0D4C    MALAYALAM       # Malayalam In/16.pl
+0D4D           MALAYALAM       # Malayalam In/16.pl
+0D57           MALAYALAM       # Malayalam In/16.pl
+0D60   0D61    MALAYALAM       # Malayalam In/16.pl
+0D66   0D6F    MALAYALAM       # Malayalam In/16.pl
+0D82   0D83    SINHALA # Sinhala In/17.pl
+0D85   0D96    SINHALA # Sinhala In/17.pl
+0D9A   0DB1    SINHALA # Sinhala In/17.pl
+0DB3   0DBB    SINHALA # Sinhala In/17.pl
+0DBD           SINHALA # Sinhala In/17.pl
+0DC0   0DC6    SINHALA # Sinhala In/17.pl
+0DCA           SINHALA # Sinhala In/17.pl
+0DCF   0DD1    SINHALA # Sinhala In/17.pl
+0DD2   0DD4    SINHALA # Sinhala In/17.pl
+0DD6           SINHALA # Sinhala In/17.pl
+0DD8   0DDF    SINHALA # Sinhala In/17.pl
+0DF2   0DF3    SINHALA # Sinhala In/17.pl
+0E01   0E30    THAI    # Thai In/18.pl
+0E31           THAI    # Thai In/18.pl
+0E32   0E33    THAI    # Thai In/18.pl
+0E34   0E3A    THAI    # Thai In/18.pl
+0E40   0E45    THAI    # Thai In/18.pl
+0E46           THAI    # Thai In/18.pl
+0E47   0E4E    THAI    # Thai In/18.pl
+0E50   0E59    THAI    # Thai In/18.pl
+0E81   0E82    LAO     # Lao In/19.pl
+0E84           LAO     # Lao In/19.pl
+0E87   0E88    LAO     # Lao In/19.pl
+0E8A           LAO     # Lao In/19.pl
+0E8D           LAO     # Lao In/19.pl
+0E94   0E97    LAO     # Lao In/19.pl
+0E99   0E9F    LAO     # Lao In/19.pl
+0EA1   0EA3    LAO     # Lao In/19.pl
+0EA5           LAO     # Lao In/19.pl
+0EA7           LAO     # Lao In/19.pl
+0EAA   0EAB    LAO     # Lao In/19.pl
+0EAD   0EB0    LAO     # Lao In/19.pl
+0EB1           LAO     # Lao In/19.pl
+0EB2   0EB3    LAO     # Lao In/19.pl
+0EB4   0EB9    LAO     # Lao In/19.pl
+0EBB   0EBC    LAO     # Lao In/19.pl
+0EBD           LAO     # Lao In/19.pl
+0EC0   0EC4    LAO     # Lao In/19.pl
+0EC6           LAO     # Lao In/19.pl
+0EC8   0ECD    LAO     # Lao In/19.pl
+0ED0   0ED9    LAO     # Lao In/19.pl
+0EDC   0EDD    LAO     # Lao In/19.pl
+0F00           TIBETAN # Tibetan In/20.pl
+0F18   0F19    TIBETAN # Tibetan In/20.pl
+0F20   0F29    TIBETAN # Tibetan In/20.pl
+0F2A   0F33    TIBETAN # Tibetan In/20.pl
+0F35           TIBETAN # Tibetan In/20.pl
+0F37           TIBETAN # Tibetan In/20.pl
+0F39           TIBETAN # Tibetan In/20.pl
+0F40   0F47    TIBETAN # Tibetan In/20.pl
+0F49   0F6A    TIBETAN # Tibetan In/20.pl
+0F71   0F7E    TIBETAN # Tibetan In/20.pl
+0F7F           TIBETAN # Tibetan In/20.pl
+0F80   0F84    TIBETAN # Tibetan In/20.pl
+0F86   0F87    TIBETAN # Tibetan In/20.pl
+0F88   0F8B    TIBETAN # Tibetan In/20.pl
+0F90   0F97    TIBETAN # Tibetan In/20.pl
+0F99   0FBC    TIBETAN # Tibetan In/20.pl
+0FC6           TIBETAN # Tibetan In/20.pl
+1000   1021    MYANMAR # Myanmar In/21.pl
+1023   1027    MYANMAR # Myanmar In/21.pl
+1029   102A    MYANMAR # Myanmar In/21.pl
+102C           MYANMAR # Myanmar In/21.pl
+102D   1030    MYANMAR # Myanmar In/21.pl
+1031           MYANMAR # Myanmar In/21.pl
+1032           MYANMAR # Myanmar In/21.pl
+1036   1037    MYANMAR # Myanmar In/21.pl
+1038           MYANMAR # Myanmar In/21.pl
+1039           MYANMAR # Myanmar In/21.pl
+1040   1049    MYANMAR # Myanmar In/21.pl
+1050   1055    MYANMAR # Myanmar In/21.pl
+1056   1057    MYANMAR # Myanmar In/21.pl
+1058   1059    MYANMAR # Myanmar In/21.pl
+10A0   10C5    GEORGIAN        # Georgian In/22.pl
+10D0   10F6    GEORGIAN        # Georgian In/22.pl
+1100   1159    HANGUL  # Hangul In/23.pl
+115F   11A2    HANGUL  # Hangul In/23.pl
+11A8   11F9    HANGUL  # Hangul In/23.pl
+3131   318E    HANGUL  # Hangul In/23.pl
+AC00   D7A3    HANGUL  # Hangul In/23.pl
+FFA0   FFBE    HANGUL  # Hangul In/23.pl
+FFC2   FFC7    HANGUL  # Hangul In/23.pl
+FFCA   FFCF    HANGUL  # Hangul In/23.pl
+FFD2   FFD7    HANGUL  # Hangul In/23.pl
+FFDA   FFDC    HANGUL  # Hangul In/23.pl
+1200   1206    ETHIOPIC        # Ethiopic In/24.pl
+1208   1246    ETHIOPIC        # Ethiopic In/24.pl
+1248           ETHIOPIC        # Ethiopic In/24.pl
+124A   124D    ETHIOPIC        # Ethiopic In/24.pl
+1250   1256    ETHIOPIC        # Ethiopic In/24.pl
+1258           ETHIOPIC        # Ethiopic In/24.pl
+125A   125D    ETHIOPIC        # Ethiopic In/24.pl
+1260   1286    ETHIOPIC        # Ethiopic In/24.pl
+1288           ETHIOPIC        # Ethiopic In/24.pl
+128A   128D    ETHIOPIC        # Ethiopic In/24.pl
+1290   12AE    ETHIOPIC        # Ethiopic In/24.pl
+12B0           ETHIOPIC        # Ethiopic In/24.pl
+12B2   12B5    ETHIOPIC        # Ethiopic In/24.pl
+12B8   12BE    ETHIOPIC        # Ethiopic In/24.pl
+12C0           ETHIOPIC        # Ethiopic In/24.pl
+12C2   12C5    ETHIOPIC        # Ethiopic In/24.pl
+12C8   12CE    ETHIOPIC        # Ethiopic In/24.pl
+12D0   12D6    ETHIOPIC        # Ethiopic In/24.pl
+12D8   12EE    ETHIOPIC        # Ethiopic In/24.pl
+12F0   130E    ETHIOPIC        # Ethiopic In/24.pl
+1310           ETHIOPIC        # Ethiopic In/24.pl
+1312   1315    ETHIOPIC        # Ethiopic In/24.pl
+1318   131E    ETHIOPIC        # Ethiopic In/24.pl
+1320   1346    ETHIOPIC        # Ethiopic In/24.pl
+1348   135A    ETHIOPIC        # Ethiopic In/24.pl
+1369   1371    ETHIOPIC        # Ethiopic In/24.pl
+1372   137C    ETHIOPIC        # Ethiopic In/24.pl
+13A0   13F4    CHEROKEE        # Cherokee In/25.pl
+1401   166C    CANADIAN-ABORIGINAL     # CanadianAboriginal In/26.pl
+166F   1676    CANADIAN-ABORIGINAL     # CanadianAboriginal In/26.pl
+1681   169A    OGHAM   # Ogham In/27.pl
+16A0   16EA    RUNIC   # Runic In/28.pl
+16EE   16F0    RUNIC   # Runic In/28.pl
+1780   17B3    KHMER   # Khmer In/29.pl
+17B4   17B6    KHMER   # Khmer In/29.pl
+17B7   17BD    KHMER   # Khmer In/29.pl
+17BE   17C5    KHMER   # Khmer In/29.pl
+17C6           KHMER   # Khmer In/29.pl
+17C7   17C8    KHMER   # Khmer In/29.pl
+17C9   17D3    KHMER   # Khmer In/29.pl
+17E0   17E9    KHMER   # Khmer In/29.pl
+1810   1819    MONGOLIAN       # Mongolian In/30.pl
+1820   1842    MONGOLIAN       # Mongolian In/30.pl
+1843           MONGOLIAN       # Mongolian In/30.pl
+1844   1877    MONGOLIAN       # Mongolian In/30.pl
+1880   18A8    MONGOLIAN       # Mongolian In/30.pl
+18A9           MONGOLIAN       # Mongolian In/30.pl
+3041   3094    HIRAGANA        # Hiragana In/31.pl
+309D   309E    HIRAGANA        # Hiragana In/31.pl
+30A1   30FA    KATAKANA        # Katakana In/32.pl
+30FD   30FE    KATAKANA        # Katakana In/32.pl
+FF66   FF6F    KATAKANA        # Katakana In/32.pl
+FF71   FF9D    KATAKANA        # Katakana In/32.pl
+3105   312C    BOPOMOFO        # Bopomofo In/33.pl
+31A0   31B7    BOPOMOFO        # Bopomofo In/33.pl
+2E80   2E99    HAN     # Han In/34.pl
+2E9B   2EF3    HAN     # Han In/34.pl
+2F00   2FD5    HAN     # Han In/34.pl
+3005           HAN     # Han In/34.pl
+3007           HAN     # Han In/34.pl
+3021   3029    HAN     # Han In/34.pl
+3038   303A    HAN     # Han In/34.pl
+3400   4DB5    HAN     # Han In/34.pl
+4E00   9FA5    HAN     # Han In/34.pl
+F900   FA2D    HAN     # Han In/34.pl
+20000  2A6D6   HAN     # Han In/34.pl
+2F800  2FA1D   HAN     # Han In/34.pl
+A000   A48C    YI      # Yi In/35.pl
+A490   A4A1    YI      # Yi In/35.pl
+A4A4   A4B3    YI      # Yi In/35.pl
+A4B5   A4C0    YI      # Yi In/35.pl
+A4C2   A4C4    YI      # Yi In/35.pl
+A4C6           YI      # Yi In/35.pl
+10300  1031E   OLD-ITALIC      # OldItalic In/36.pl
+10330  10349   GOTHIC  # Gothic In/37.pl
+1034A          GOTHIC  # Gothic In/37.pl
+10400  10425   DESERET # Deseret In/38.pl
+10428  1044D   DESERET # Deseret In/38.pl
+0300   034E    INHERITED       # Inherited In/39.pl
+0360   0362    INHERITED       # Inherited In/39.pl
+0488   0489    INHERITED       # Inherited In/39.pl
+0591   05A1    INHERITED       # Inherited In/39.pl
+05A3   05B9    INHERITED       # Inherited In/39.pl
+05BB   05BD    INHERITED       # Inherited In/39.pl
+05BF           INHERITED       # Inherited In/39.pl
+05C1   05C2    INHERITED       # Inherited In/39.pl
+05C4           INHERITED       # Inherited In/39.pl
+064B   0655    INHERITED       # Inherited In/39.pl
+0670           INHERITED       # Inherited In/39.pl
+06D6   06DC    INHERITED       # Inherited In/39.pl
+06DD   06DE    INHERITED       # Inherited In/39.pl
+06DF   06E4    INHERITED       # Inherited In/39.pl
+06E7   06E8    INHERITED       # Inherited In/39.pl
+06EA   06ED    INHERITED       # Inherited In/39.pl
+20D0   20DC    INHERITED       # Inherited In/39.pl
+20DD   20E0    INHERITED       # Inherited In/39.pl
+20E1           INHERITED       # Inherited In/39.pl
+20E2   20E3    INHERITED       # Inherited In/39.pl
+302A   302F    INHERITED       # Inherited In/39.pl
+3099   309A    INHERITED       # Inherited In/39.pl
+FB1E           INHERITED       # Inherited In/39.pl
+FE20   FE23    INHERITED       # Inherited In/39.pl
+1D167  1D169   INHERITED       # Inherited In/39.pl
+1D17B  1D182   INHERITED       # Inherited In/39.pl
+1D185  1D18B   INHERITED       # Inherited In/39.pl
+1D1AA  1D1AD   INHERITED       # Inherited In/39.pl
+END
index 637050a..f86ff69 100755 (executable)
@@ -239,16 +239,7 @@ foreach $file (@todo) {
     next if @ARGV and not grep { $_ eq $table } @ARGV;
     print $table, "\n";
     $table =~ s/\W+//g;
-    if ($table =~ /^In(.+)/) {
-       my $id;
-        unless (exists $InId{$1}) {
-           $InId{$1} = $InId++;
-       }
-       $id = $InId{$1};
-       open(OUT, ">In/$id.pl") or die "Can't create In/$id.pl: $!\n";
-       print OUT "# In/$id.pl $1\n";
-    }
-    elsif ($table =~ /^(Is|To)(.+)/) {
+    if ($table =~ /^(Is|To)(.+)/) {
        open(OUT, ">$1/$2.pl") or die "Can't create $1/$2.pl: $!\n";
     }
     else {
@@ -267,6 +258,68 @@ END
     close OUT;
 }
 
+# Do Scripts before Blocks so that in case of naming conflicts
+# the more natural one (Script) wins over the artificial one (Block).
+
+print "Scripts\n";
+open(UD, 'Scripts.txt') or die "Can't open Scripts.txt: $!\n";
+open(OUT, ">Scripts.pl") or die "Can't create Scripts.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
+
+my %Scripts;
+
+while (<UD>) {
+    next if /^#/;
+    next if /^$/;
+    chomp;
+    ($code, $last, $name) = /^([0-9a-f]+)(?:\.\.([0-9a-f]+))?\s+;\s+(.+)\s+\#/i;
+    if ($name) {
+       my $InName = lc($name);
+       $InName =~ s/\b(\w)/uc($1)/ge;
+       $InName =~ s/\W+//g;
+       my $id;
+        unless (exists $InId{$InName}) {
+           print "\t$InName\n";
+           $id = $Scripts{$InName} = $InId{$InName} = $InId++;
+           open(SCRIPT, ">In/$id.pl") or die "create In/$id.pl: $!\n";
+           print SCRIPT <<EOH;
+# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
+# This file is built by $0 from e.g. $UnicodeData.
+# Any changes made here will be lost!
+return <<'END';
+EOH
+            close(SCRIPT);
+       } else {
+           $id = $InId{$InName};
+       }
+       $last = "" unless defined $last;
+       print OUT "$code\t$last\t$name\t# $InName In/$id.pl\n";
+        open(SCRIPT, ">>In/$id.pl");
+       print SCRIPT <<END;
+$code  $last
+END
+       close SCRIPT;
+    }
+}
+
+for my $id (values %InId) {
+    open(SCRIPT, ">>In/$id.pl");
+    print SCRIPT <<END2;
+END
+END2
+    close(SCRIPT);
+}
+
+print OUT "END\n";
+close OUT;
+
 # Must treat blocks specially.
 
 exit if @ARGV and not grep { $_ eq Block } @ARGV;
@@ -288,15 +341,20 @@ while (<UD>) {
     chomp;
     ($code, $last, $name) = /^([0-9a-f]+)\.\.([0-9a-f]+); (.+)/i;
     if ($name) {
-       print OUT "$code        $last   $name\n";
-       $name =~ s/\W+//g;
+       my $InName = $name;
+       $InName =~ s/\W+//g;
+       print "\t$InName\n";
        my $id;
-        unless (exists $InId{$name}) {
-           $InId{$name} = $InId++;
+       # TODO: only the first one of Private Use blocks qualifies
+        unless (exists $InId{$InName}) {
+           $InId{$InName} = $InId++;
+       } elsif (exists $Scripts{$InName}) {
+           $InName .= 'Block';
+           $InId{$InName} = $InId++;
        }
-       $id = $InId{$name};
-       open(BLOCK, ">In/$id.pl");
-       print OUT "# In/$id.pl $name\n";
+       $id = $InId{$InName};
+       open(BLOCK, ">In/$id.pl") or die "create In/$id.pl: $!\n";
+       print OUT "$code\t$last\t$name\t# $InName In/$id.pl\n";
        print BLOCK <<EOH;
 # !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
 # This file is built by $0 from e.g. $UnicodeData.
index 9c8a65e..12eab67 100644 (file)
@@ -473,10 +473,6 @@ if ($define{'MYMALLOC'}) {
     emit_symbols [qw(
                    Perl_dump_mstats
                    Perl_get_mstats
-                   Perl_malloc
-                   Perl_mfree
-                   Perl_realloc
-                   Perl_calloc
                    Perl_strdup
                    Perl_putenv
                    )];
@@ -496,10 +492,6 @@ else {
                    PL_malloc_mutex
                    Perl_dump_mstats
                    Perl_get_mstats
-                   Perl_malloc
-                   Perl_mfree
-                   Perl_realloc
-                   Perl_calloc
                    Perl_malloced_size
                    )];
 }
index 1aadce5..00d58bc 100644 (file)
--- a/numeric.c
+++ b/numeric.c
@@ -448,7 +448,7 @@ Perl_grok_number(pTHX_ const char *pv, STRLEN len, UV *valuep)
                                           break;
                                       }
                                       if (digit >= 0 && digit <= 9
-                                          && !(s < send)) {
+                                          && (s < send)) {
                                         /* value overflowed.
                                            skip the remaining digits, don't
                                            worry about setting *valuep.  */
index 6c7dcdd..43a10fa 100644 (file)
--- a/objXSUB.h
+++ b/objXSUB.h
 #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_getcwd
-#define Perl_sv_getcwd         pPerl->Perl_sv_getcwd
-#undef  sv_getcwd
-#define sv_getcwd              Perl_sv_getcwd
+#undef  Perl_getcwd_sv
+#define Perl_getcwd_sv         pPerl->Perl_getcwd_sv
+#undef  getcwd_sv
+#define getcwd_sv              Perl_getcwd_sv
 #undef  Perl_sv_dec
 #define Perl_sv_dec            pPerl->Perl_sv_dec
 #undef  sv_dec
diff --git a/op.c b/op.c
index 90e86e0..92d15da 100644 (file)
--- a/op.c
+++ b/op.c
@@ -2035,9 +2035,15 @@ Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
        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))
+       if ((right->op_type != OP_MATCH &&
+            ! (right->op_type == OP_TRANS &&
+               right->op_private & OPpTRANS_IDENTICAL)) ||
+           /* if SV has magic, then match on original SV, not on its copy.
+              see note in pp_helem() */
+           (right->op_type == OP_MATCH &&      
+            (left->op_type == OP_AELEM ||
+             left->op_type == OP_HELEM ||
+             left->op_type == OP_AELEMFAST)))
            left = mod(left, right->op_type);
        if (right->op_type == OP_TRANS)
            o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right);
@@ -4598,9 +4604,9 @@ Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
 
     cv = (!name || GvCVGEN(gv)) ? Nullcv : GvCV(gv);
 
-#ifdef GV_SHARED_CHECK
-    if (cv && GvSHARED(gv) && SvREADONLY(cv)) {
-        Perl_croak(aTHX_ "Can't define subroutine %s (GV is shared)", name);
+#ifdef GV_UNIQUE_CHECK
+    if (cv && GvUNIQUE(gv) && SvREADONLY(cv)) {
+        Perl_croak(aTHX_ "Can't define subroutine %s (GV is unique)", name);
     }
 #endif
 
@@ -4612,9 +4618,9 @@ Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
     if (cv) {
         bool exists = CvROOT(cv) || CvXSUB(cv);
 
-#ifdef GV_SHARED_CHECK
-        if (exists && GvSHARED(gv)) {
-            Perl_croak(aTHX_ "Can't redefine shared subroutine %s", name);
+#ifdef GV_UNIQUE_CHECK
+        if (exists && GvUNIQUE(gv)) {
+            Perl_croak(aTHX_ "Can't redefine unique subroutine %s", name);
         }
 #endif
 
@@ -5102,9 +5108,9 @@ Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
     else
        name = "STDOUT";
     gv = gv_fetchpv(name,TRUE, SVt_PVFM);
-#ifdef GV_SHARED_CHECK
-    if (GvSHARED(gv)) {
-        Perl_croak(aTHX_ "Bad symbol for form (GV is shared)");
+#ifdef GV_UNIQUE_CHECK
+    if (GvUNIQUE(gv)) {
+        Perl_croak(aTHX_ "Bad symbol for form (GV is unique)");
     }
 #endif
     GvMULTI_on(gv);
@@ -6111,6 +6117,39 @@ Perl_ck_null(pTHX_ OP *o)
 }
 
 OP *
+Perl_ck_octmode(pTHX_ OP *o)
+{
+    OP *p;
+
+    if ((ckWARN(WARN_OCTMODE)
+       /* Add WARN_MKDIR instead of getting rid of WARN_{CHMOD,UMASK}.
+          Backwards compatibility and consistency are terrible things.
+          AMS 20010705 */
+       || (o->op_type == OP_CHMOD && ckWARN(WARN_CHMOD))
+       || (o->op_type == OP_UMASK && ckWARN(WARN_UMASK))
+       || (o->op_type == OP_MKDIR && ckWARN(WARN_MKDIR)))
+       && o->op_flags & OPf_KIDS)
+    {
+       if (o->op_type == OP_MKDIR)
+           p = cLISTOPo->op_last;              /* mkdir $foo, 0777 */
+       else if (o->op_type == OP_CHMOD)
+           p = cLISTOPo->op_first->op_sibling; /* chmod 0777, $foo */
+       else
+           p = cUNOPo->op_first;               /* umask 0222 */
+
+       if (p->op_type == OP_CONST && !(p->op_private & OPpCONST_OCTAL)) {
+           int mode = SvIV(cSVOPx_sv(p));
+
+           Perl_warner(aTHX_ WARN_OCTMODE,
+                       "Non-octal literal mode (%d) specified", mode);
+           Perl_warner(aTHX_ WARN_OCTMODE,
+                       "\t(Did you mean 0%d instead?)\n", mode);
+       }
+    }
+    return ck_fun(o);
+}
+
+OP *
 Perl_ck_open(pTHX_ OP *o)
 {
     HV *table = GvHV(PL_hintgv);
@@ -6901,9 +6940,9 @@ Perl_peep(pTHX_ register OP *o)
            svp = cSVOPx_svp(((BINOP*)o)->op_last);
            if ((!SvFAKE(sv = *svp) || !SvREADONLY(sv)) && !IS_PADCONST(sv)) {
                key = SvPV(sv, keylen);
-               if (SvUTF8(sv))
-                 keylen = -keylen;
-               lexname = newSVpvn_share(key, keylen, 0);
+               lexname = newSVpvn_share(key,
+                                        SvUTF8(sv) ? -(I32)keylen : keylen,
+                                        0);
                SvREFCNT_dec(sv);
                *svp = lexname;
            }
@@ -6921,9 +6960,8 @@ Perl_peep(pTHX_ register OP *o)
            if (!fields || !GvHV(*fields))
                break;
            key = SvPV(*svp, keylen);
-           if (SvUTF8(*svp))
-               keylen = -keylen;
-           indsvp = hv_fetch(GvHV(*fields), key, keylen, FALSE);
+           indsvp = hv_fetch(GvHV(*fields), key,
+                             SvUTF8(*svp) ? -(I32)keylen : 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)));
@@ -6988,9 +7026,8 @@ Perl_peep(pTHX_ register OP *o)
                 key_op = (SVOP*)key_op->op_sibling) {
                svp = cSVOPx_svp(key_op);
                key = SvPV(*svp, keylen);
-               if (SvUTF8(*svp))
-                   keylen = -keylen;
-               indsvp = hv_fetch(GvHV(*fields), key, keylen, FALSE);
+               indsvp = hv_fetch(GvHV(*fields), key,
+                                 SvUTF8(*svp) ? -(I32)keylen : keylen, FALSE);
                if (!indsvp) {
                    Perl_croak(aTHX_ "No such pseudo-hash field \"%s\" "
                               "in variable %s of type %s",
diff --git a/op.h b/op.h
index eaf8499..05e4580 100644 (file)
--- a/op.h
+++ b/op.h
@@ -166,6 +166,7 @@ Deprecated.  Use C<GIMME_V> instead.
 #define OPpTARGET_MY           16      /* Target is PADMY. */
 
 /* Private for OP_CONST */
+#define        OPpCONST_OCTAL          4       /* Octal constant. */
 #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. */
@@ -277,7 +278,7 @@ struct pmop {
 
 #ifdef USE_ITHREADS
 #  define PmopSTASHPV(o)       ((o)->op_pmstashpv)
-#  define PmopSTASHPV_set(o,pv)        (Safefree((o)->op_pmstashpv), (o)->op_pmstashpv = ((pv) ? savepv(pv) : Nullch))
+#  define PmopSTASHPV_set(o,pv)        ((o)->op_pmstashpv = ((pv) ? savepv(pv) : Nullch))
 #  define PmopSTASH(o)         (PmopSTASHPV(o) \
                                 ? gv_stashpv(PmopSTASHPV(o),GV_ADD) : Nullhv)
 #  define PmopSTASH_set(o,hv)  PmopSTASHPV_set(o, (hv) ? HvNAME(hv) : Nullch)
@@ -383,7 +384,7 @@ struct loop {
 
 #define Nullop Null(OP*)
 
-/* Lowest byte of PL_opargs */
+/* Lowest byte-and-a-bit of PL_opargs */
 #define OA_MARK 1
 #define OA_FOLDCONST 2
 #define OA_RETSCALAR 4
index 28f1345..fd12e46 100644 (file)
--- a/opcode.h
+++ b/opcode.h
@@ -1289,7 +1289,7 @@ EXT OP * (CPERLscope(*PL_check)[]) (pTHX_ OP *op) = {
        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_octmode),        /* umask */
        MEMBER_TO_FPTR(Perl_ck_fun),    /* binmode */
        MEMBER_TO_FPTR(Perl_ck_fun),    /* tie */
        MEMBER_TO_FPTR(Perl_ck_fun),    /* untie */
@@ -1361,13 +1361,13 @@ EXT OP * (CPERLscope(*PL_check)[]) (pTHX_ OP *op) = {
        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_octmode),        /* 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_octmode),        /* mkdir */
        MEMBER_TO_FPTR(Perl_ck_fun),    /* rmdir */
        MEMBER_TO_FPTR(Perl_ck_fun),    /* open_dir */
        MEMBER_TO_FPTR(Perl_ck_fun),    /* readdir */
index 4053671..942d8d2 100755 (executable)
--- a/opcode.pl
+++ b/opcode.pl
@@ -674,7 +674,7 @@ 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?
+umask          umask                   ck_octmode      ist%    S?
 binmode                binmode                 ck_fun          s@      F S?
 
 tie            tie                     ck_fun          idms@   R S L
@@ -767,13 +767,13 @@ 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
+chmod          chmod                   ck_octmode      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?
+mkdir          mkdir                   ck_octmode      isT@    S S?
 rmdir          rmdir                   ck_fun          isTu%   S?
 
 # Directory calls.
index 6ce93c0..3015430 100644 (file)
@@ -94,6 +94,9 @@ BEGIN {
        WindowFromId
        WindowFromPoint
        EnumDlgItem
+
+       get_title
+       set_title
 );
 
 sub AUTOLOAD {
@@ -225,6 +228,10 @@ sub ChildWindows ($) {
   @kids;
 }
 
+# backward compatibility
+*set_title = \&Title_set;
+*get_title = \&Title;
+
 # Autoload methods go after __END__, and are processed by the autosplit program.
 
 1;
index 03c06ed..bfe6e9f 100644 (file)
--- a/os2/os2.c
+++ b/os2/os2.c
@@ -1971,9 +1971,11 @@ XS(XS_Cwd_sys_abspath)
     {
        STRLEN n_a;
        char *  path = (char *)SvPV(ST(0),n_a);
-       char *  dir;
+       char *  dir, *s, *t, *e;
        char p[MAXPATHLEN];
        char *  RETVAL;
+       int l;
+       SV *sv;
 
        if (items < 2)
            dir = NULL;
@@ -2063,8 +2065,31 @@ XS(XS_Cwd_sys_abspath)
              done:
            }
        }
+       if (!RETVAL)
+           XSRETURN_EMPTY;
+       /* Backslashes are already converted to slashes. */
+       /* Remove trailing slashes */
+       l = strlen(RETVAL);
+       while (l > 0 && RETVAL[l-1] == '/')
+           l--;
        ST(0) = sv_newmortal();
-       sv_setpv((SV*)ST(0), RETVAL);
+       sv_setpvn( sv = (SV*)ST(0), RETVAL, l);
+       /* Remove duplicate slashes, skipping the first three, which
+          may be parts of a server-based path */
+       s = t = 3 + SvPV_force(sv, n_a);
+       e = SvEND(sv);
+       /* Do not worry about multibyte chars here, this would contradict the
+          eventual UTFization, and currently most other places break too... */
+       while (s < e) {
+           if (s[0] == t[-1] && s[0] == '/')
+               s++;                            /* Skip duplicate / */
+           else
+               *t++ = *s++;
+       }
+       if (t < e) {
+           *t = 0;
+           SvCUR_set(sv, t - SvPVX(sv));
+       }
     }
     XSRETURN(1);
 }
index a1de5a1..66f6f76 100644 (file)
@@ -70,7 +70,7 @@
 #if !defined(PERL_PATCHLEVEL_H_IMPLICIT) && !defined(LOCAL_PATCH_COUNT)
 static char    *local_patches[] = {
         NULL
-       ,"DEVEL11058"
+       ,"DEVEL11180"
        ,NULL
 };
 
diff --git a/perl.c b/perl.c
index 7bb7dee..cef5c47 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -58,6 +58,32 @@ static I32 read_e_script(pTHXo_ int idx, SV *buf_sv, int maxlen);
     } STMT_END
 #else
 #  if defined(USE_ITHREADS)
+
+static void S_atfork_lock(void);
+static void S_atfork_unlock(void);
+
+/* this is called in parent before the fork() */
+static void
+S_atfork_lock(void)
+{
+    /* locks must be held in locking order (if any) */
+#ifdef MYMALLOC
+    MUTEX_LOCK(&PL_malloc_mutex);
+#endif
+    OP_REFCNT_LOCK;
+}
+
+/* this is called in both parent and child after the fork() */
+static void
+S_atfork_unlock(void)
+{
+    /* locks must be released in same order as in S_atfork_lock() */
+#ifdef MYMALLOC
+    MUTEX_UNLOCK(&PL_malloc_mutex);
+#endif
+    OP_REFCNT_UNLOCK;
+}
+
 #  define INIT_TLS_AND_INTERP \
     STMT_START {                               \
        if (!PL_curinterp) {                    \
@@ -66,6 +92,9 @@ static I32 read_e_script(pTHXo_ int idx, SV *buf_sv, int maxlen);
            ALLOC_THREAD_KEY;                   \
            PERL_SET_THX(my_perl);              \
            OP_REFCNT_INIT;                     \
+           PTHREAD_ATFORK(S_atfork_lock,       \
+                          S_atfork_unlock,     \
+                          S_atfork_unlock);    \
        }                                       \
        else {                                  \
            PERL_SET_THX(my_perl);              \
@@ -2037,7 +2066,7 @@ 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? */
+     * Removed -h because the user already knows that option. Others? */
 
     static char *usage_msg[] = {
 "-0[octal]       specify record separator (\\0, if no argument)",
diff --git a/perl.h b/perl.h
index 27393f6..8f1cad3 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -1131,23 +1131,9 @@ typedef UVTYPE UV;
 #  endif
 #endif
 
-/*
-  I've tracked down a weird bug in Perl5.6.1 to the UTS compiler's
-  mishandling of MY_UV_MAX in util.c.  It is defined as
-    #ifndef MY_UV_MAX
-    #  define MY_UV_MAX ((UV)IV_MAX * (UV)2 + (UV)1)
-    #endif
-  The compiler handles {double floating point value} >= MY_UV_MAX as if
-  MY_UV_MAX were the signed integer -1.  In fact it will do the same
-  thing with (UV)(0xffffffff), in place of MY_UV_MAX, though 0xffffffff
-  *without* the typecast to UV works fine.
-
-  hom00@utsglobal.com (Hal Morris) 2001-05-02
-
-  */
-
-#ifdef UTS
-#  define MY_UV_MAX 0xffffffff 
+#if defined(uts) || defined(UTS)
+#      undef UV_MAX
+#      define UV_MAX (4294967295u)
 #endif
 
 #define IV_DIG (BIT_DIGITS(IVSIZE * 8))
index b554ed5..df16150 100644 (file)
--- a/perlapi.c
+++ b/perlapi.c
@@ -3002,11 +3002,11 @@ 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_getcwd
+#undef  Perl_getcwd_sv
 int
-Perl_sv_getcwd(pTHXo_ SV* sv)
+Perl_getcwd_sv(pTHXo_ SV* sv)
 {
-    return ((CPerlObj*)pPerl)->Perl_sv_getcwd(sv);
+    return ((CPerlObj*)pPerl)->Perl_getcwd_sv(sv);
 }
 
 #undef  Perl_sv_dec
index 78bd06a..e510929 100644 (file)
--- a/perlio.h
+++ b/perlio.h
 #define fseek fseeko
 #endif
 
+/* BS2000 includes are sometimes a bit non standard :-( */
+#if defined(POSIX_BC) && defined(O_BINARY) && !defined(O_TEXT)
+#undef O_BINARY
+#endif
+
 #ifdef PERLIO_IS_STDIO
 /* #define PerlIO_xxxx() as equivalent stdio function */
 #include "perlsdio.h"
index da45c32..a1d2bec 100644 (file)
@@ -1,4 +1,9 @@
 #ifdef PERLIO_IS_STDIO
+
+#ifdef NETWARE
+       #include "nwstdio.h"
+#else
+
 /*
  * This file #define-s the PerlIO_xxx abstraction onto stdio functions.
  * Make this as close to original stdio as possible.
 #define PerlIO_get_bufsiz(f)           (abort(),0)
 #endif
 
+#endif /* NETWARE */
 #endif /* PERLIO_IS_STDIO */
index ab34b68..9873636 100644 (file)
@@ -49,6 +49,34 @@ statically built in.  This may or may not be a problem with ancient
 TCP/IP stacks of VMS: we do not know since we weren't able to test
 Perl in such configurations.
 
+=head2 Different Definition of the Unicode Character Classes \p{In...}
+
+As suggested by the Unicode consortium, the Unicode character classes
+now prefer I<scripts> as opposed to I<blocks> (as defined by Unicode);
+in Perl, when the C<\p{In....}> and the C<\p{In....}> regular expression
+constructs are used.  This has changed the definition of some of those
+character classes.
+
+The difference between scripts and blocks is that scripts are the
+glyphs used by a language or a group of languages, while the blocks
+are more artificial groupings of 256 characters based on the Unicode
+numbering.
+
+In general this change results in more inclusive Unicode character
+classes, but changes to the other direction also do take place:
+for example while the script C<Latin> includes all the Latin
+characters and their various diacritic-adorned versions, it
+does not include the various punctuation or digits (since they
+are not solely C<Latin>).
+
+Changes in the character class semantics may have happened if a script
+and a block happen to have the same name, for example C<Hebrew>.
+In such cases the script wins and C<\p{InHebrew}> now means the script
+definition of Hebrew.  The block definition in still available,
+though, by appending C<Block> to the name: C<\p{InHebrewBlock}> means
+what C<\p{InHebrew}> meant in perl 5.6.0.  For the full list
+of affected character classes, see L<perlunicode/Blocks>.
+
 =head2 Deprecations
 
 The current user-visible implementation of pseudo-hashes (the weird
@@ -132,7 +160,7 @@ VMS now works under PerlIO.
 
 =head1 Modules and Pragmata
 
-=head2 New Modules and Distribution
+=head2 New Modules and Distributions
 
 =over 4
 
@@ -192,6 +220,14 @@ L<Time::Piece> - Object Oriented time objects
 
 (Previously known as L<Time::Object>.)
 
+=item *
+
+L<Time::Seconds> - a simple API to convert seconds to other date values
+
+=item *
+
+L<Unicode::UCD> - Unicode Character Database
+
 =back
 
 =head2 Updated And Improved Modules and Pragmata
@@ -553,6 +589,34 @@ subtest 9 failed.
 
 No known fix.
 
+=head2 OS/390
+
+OS/390 has rather many test failures but the situation is actually
+better than it was in 5.6.0, it's just that so many new modules and
+tests have been added.
+
+ Failed Test                     Stat Wstat Total Fail  Failed  List of Failed
+ -----------------------------------------------------------------------------
+ ../ext/B/Deparse.t                            14    1   7.14%  14
+ ../ext/B/Showlex.t                             1    1 100.00%  1
+ ../ext/Encode/Encode/Tcl.t                   610   13   2.13%  592 594 596 598
+                                                                600 602 604-610
+ ../ext/IO/lib/IO/t/io_unix.t     113 28928     5    3  60.00%  3-5
+ ../ext/POSIX/POSIX.t                          29    1   3.45%  14
+ ../ext/Storable/t/lock.t         255 65280     5    3  60.00%  3-5
+ ../lib/locale.t                  129 33024   117   19  16.24%  99-117
+ ../lib/warnings.t                            434    1   0.23%  75
+ ../lib/ExtUtils.t                             27    1   3.70%  25
+ ../lib/Math/BigInt/t/bigintpm.t             1190    1   0.08%  1145
+ ../lib/Unicode/UCD.t                          81   48  59.26%  1-16 49-64 66-81
+ ../lib/User/pwent.t                            9    1  11.11%  4
+ op/pat.t                                     660    6   0.91%  242-243 424-425
+                                                                626-627
+ op/split.t                         0     9    ??   ??       %  ??
+ op/taint.t                                   174    3   1.72%  156 162 168
+ op/tr.t                                       70    3   4.29%  50 58-59
+ Failed 16/422 test scripts, 96.21% okay. 105/23251 subtests failed, 99.55% okay.
+
 =head2 op/sprintf tests 129 and 130
 
 The op/sprintf tests 129 and 130 are known to fail on some platforms.
@@ -618,6 +682,12 @@ Many floating point inaccuracies:
 
 =head2 VMS
 
+Rather many tests are failing in VMS but that actually more tests
+succeed in VMS than they used to, it's just that there are many,
+many more tests than there used to be.
+
+Here are the known failures from some compiler/platform combinations.
+
 DEC C V5.3-006 on OpenVMS VAX V6.2
  
   [-.ext.list.util.t]tainted..............FAILED on test 3
@@ -638,6 +708,16 @@ DEC C V6.0-001 on OpenVMS Alpha V7.2-1
   [.lib]vmsish............................FAILED on test 13
   Failed 4/399 tests, 92.48% okay.
 
+Compac C V6.4-005 on OpenVMS Alpha 7.2.1
+
+  [-.ext.b]showlex........................FAILED on test 1
+  [-.ext.list.util.t]tainted..............FAILED on test 3
+  [-.lib.file.find]taint..................FAILED on test 17 
+  [-.lib.test.simple.t]exit...............FAILED on test 1
+  [.lib]vmsish............................FAILED on test 13
+  [.op]misc...............................FAILED on test 49
+  Failed 6/401 tests, 92.77% okay.
+
 =head2 Localising a Tied Variable Leaks Memory
 
     use Tie::Hash;
index 747838c..bee65f6 100644 (file)
@@ -475,6 +475,15 @@ L<perlcall>.
 =for hackers
 Found in file scope.h
 
+=item getcwd_sv
+
+Fill the sv with current working directory
+
+       int     getcwd_sv(SV* sv)
+
+=for hackers
+Found in file util.c
+
 =item get_av
 
 Returns the AV of the specified Perl array.  If C<create> is set and the
@@ -1335,17 +1344,6 @@ SV is B<not> incremented.
 =for hackers
 Found in file sv.c
 
-=item newSV
-
-Create a new null SV, or if len > 0, create a new empty SVt_PV type SV
-with an initial PV allocation of len+1. Normally accessed via the C<NEWSV>
-macro.
-
-       SV*     newSV(STRLEN len)
-
-=for hackers
-Found in file sv.c
-
 =item NEWSV
 
 Creates a new SV.  A non-zero C<len> parameter indicates the number of
@@ -1359,6 +1357,17 @@ C<id> is an integer id between 0 and 1299 (used to identify leaks).
 =for hackers
 Found in file handy.h
 
+=item newSV
+
+Create a new null SV, or if len > 0, create a new empty SVt_PV type SV
+with an initial PV allocation of len+1. Normally accessed via the C<NEWSV>
+macro.
+
+       SV*     newSV(STRLEN len)
+
+=for hackers
+Found in file sv.c
+
 =item newSViv
 
 Creates a new SV and copies an integer into it.  The reference count for the
@@ -2110,22 +2119,22 @@ version which guarantees to evaluate sv only once.
 =for hackers
 Found in file sv.h
 
-=item SvIVX
+=item SvIVx
 
-Returns the raw value in the SV's IV slot, without checks or conversions.
-Only use when you are sure SvIOK is true. See also C<SvIV()>.
+Coerces the given SV to an integer and returns it. Guarantees to evaluate
+sv only once. Use the more efficent C<SvIV> otherwise.
 
-       IV      SvIVX(SV* sv)
+       IV      SvIVx(SV* sv)
 
 =for hackers
 Found in file sv.h
 
-=item SvIVx
+=item SvIVX
 
-Coerces the given SV to an integer and returns it. Guarantees to evaluate
-sv only once. Use the more efficent C<SvIV> otherwise.
+Returns the raw value in the SV's IV slot, without checks or conversions.
+Only use when you are sure SvIOK is true. See also C<SvIV()>.
 
-       IV      SvIVx(SV* sv)
+       IV      SvIVX(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -2434,21 +2443,21 @@ Like C<SvPV_nolen>, but converts sv to uft8 first if necessary.
 =for hackers
 Found in file sv.h
 
-=item SvPVX
+=item SvPVx
 
-Returns a pointer to the physical string in the SV.  The SV must contain a
-string.
+A version of C<SvPV> which guarantees to evaluate sv only once.
 
-       char*   SvPVX(SV* sv)
+       char*   SvPVx(SV* sv, STRLEN len)
 
 =for hackers
 Found in file sv.h
 
-=item SvPVx
+=item SvPVX
 
-A version of C<SvPV> which guarantees to evaluate sv only once.
+Returns a pointer to the physical string in the SV.  The SV must contain a
+string.
 
-       char*   SvPVx(SV* sv, STRLEN len)
+       char*   SvPVX(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -2655,19 +2664,19 @@ false, defined or undefined.  Does not handle 'get' magic.
 =for hackers
 Found in file sv.h
 
-=item svtype
+=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.
+Returns the type of the SV.  See C<svtype>.
+
+       svtype  SvTYPE(SV* sv)
 
 =for hackers
 Found in file sv.h
 
-=item SvTYPE
-
-Returns the type of the SV.  See C<svtype>.
+=item svtype
 
-       svtype  SvTYPE(SV* sv)
+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
@@ -3205,15 +3214,6 @@ Normally called via a wrapper macro C<SvREFCNT_dec>.
 =for hackers
 Found in file sv.c
 
-=item sv_getcwd
-
-Fill the sv with current working directory
-
-       int     sv_getcwd(SV* sv)
-
-=for hackers
-Found in file util.c
-
 =item sv_gets
 
 Get a line from the filehandle and store it into the SV, optionally
index de8956b..c754333 100644 (file)
@@ -72,7 +72,7 @@ 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
+on the operator (e.g. C<CORE::log($x)>) or declare the subroutine
 to be an object method (see L<perlsub/"Subroutine Attributes"> or
 L<attributes>).
 
@@ -112,8 +112,8 @@ which 'splits' output into two streams, such as
 
 =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
+(W misc) The pattern match (C<//>), substitution (C<s///>), and
+transliteration (C<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
@@ -184,7 +184,7 @@ 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
+(F) When C<vec> is called in an lvalue context, the second argument must be
 greater than or equal to zero.
 
 =item Attempt to bless into a reference
@@ -270,7 +270,7 @@ S<sizeof(struct shmid_ds *)>.
 
 =item Bad evalled substitution pattern
 
-(F) You've used the /e switch to evaluate the replacement for a
+(F) You've used the C</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 '}'.
 
@@ -1106,16 +1106,6 @@ and so on) and not for Unicode characters, so Perl behaved as if you meant
 If you actually want to pack Unicode codepoints, use the C<"U"> format
 instead.
 
-=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.
@@ -1247,6 +1237,12 @@ 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 0%d instead?)
+
+(W octmode) The mode argument to chmod, mkdir, and umask is usually
+given in octal (octal constants start with a 0, as in C). Did you really
+mean to use a non-octal number?
+
 =item (Did you mean &%s instead?)
 
 (W) You probably referred to an imported subroutine &FOO as $FOO or some
@@ -2207,6 +2203,12 @@ not know about the field name.  The field names are looked up in the
 not recognized.  Say C<kill -l> in your shell to see the valid signal
 names on your system.
 
+=item Non-octal literal mode (%d) specified
+
+(W octmode) The mode argument to chmod, mkdir, and umask is usually
+given in octal (octal constants start with a 0, as in C). Did you really
+mean to use a non-octal number?
+
 =item Not a CODE reference
 
 (F) Perl was trying to evaluate a reference to a code value (that is, a
@@ -3497,11 +3499,6 @@ 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
@@ -3930,16 +3927,17 @@ program.
 
 =item Using a hash as a reference is deprecated
 
-(D deprecated) You tried to use a hash as a reference, as in C<%foo->{"bar"}>
-or C<%$ref->{"hello"}.  Versions of perl <= 5.6.1 used to allow this syntax,
-but shouldn't have. It is now deprecated, and will be removed in a future
-version.
+(D deprecated) You tried to use a hash as a reference, as in
+C<< %foo->{"bar"} >> or C<< %$ref->{"hello"} >>.  Versions of perl <= 5.6.1 
+used to allow this syntax, but shouldn't have. It is now deprecated, and will 
+be removed in a future version.
 
 =item Using an array as a reference is deprecated
 
-(D deprecated) You tried to use an array as a reference, as in C<@foo->[23]>
-or C<@$ref->[99]>.  Versions of perl <= 5.6.1 used to allow this syntax, but
-shouldn't have. It is now deprecated, and will be removed in a future version.
+(D deprecated) You tried to use an array as a reference, as in
+C<< @foo->[23] >> or C<< @$ref->[99] >>.  Versions of perl <= 5.6.1 used to 
+allow this syntax, but shouldn't have. It is now deprecated, and will be 
+removed in a future version.
 
 =item Value of %s can be "0"; test with defined()
 
@@ -4104,8 +4102,8 @@ Use a filename instead.
 
 (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.
+about what you want.  Your best bet is to put a setuid C wrapper around 
+your script.
 
 =item You need to quote "%s"
 
index 0d23e24..cf27c0f 100644 (file)
@@ -1018,7 +1018,7 @@ Like (d), but @in contains only small positive integers:
 
 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?
+=head2 How can I tell whether a certain element is contained in a list or array?
 
 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
index bb0c195..1039cd0 100644 (file)
@@ -4066,14 +4066,14 @@ 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
+such as signalling 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
+C<pack("s!3", $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);
+    $semop = pack("s!3", $semnum, -1, 0);
     die "Semaphore trouble: $!\n" unless semop($semid, $semop);
 
 To signal the semaphore, replace C<-1> with C<1>.  See also
index fbd3686..6628242 100644 (file)
@@ -666,10 +666,6 @@ Local configuration data for libnet
 
 Attempt to evaluate the current host's internet name and domain
 
-=item Net::DummyInetd
-
-A dummy Inetd server
-
 =item Net::FTP
 
 FTP Client class
@@ -682,10 +678,6 @@ NNTP Client class
 
 OO interface to users netrc file
 
-=item Net::PH
-
-CCSO Nameserver Client class
-
 =item Net::POP3
 
 Post Office Protocol 3 Client class (RFC1081)
@@ -698,10 +690,6 @@ Check a remote host for reachability
 
 Simple Mail Transfer Protocol Client
 
-=item Net::SNPP
-
-Simple Network Pager Protocol Client
-
 =item Net::Time
 
 Time and daytime network client interface
@@ -966,6 +954,10 @@ Internal object used by Time::gmtime and Time::localtime
 
 Base class for ALL classes (blessed references)
 
+=item Unicode::UCD
+
+Unicode character database
+
 =item User::grent
 
 By-name interface to Perl's built-in getgr*() functions
index 3e83c13..869a422 100644 (file)
@@ -1751,11 +1751,10 @@ letter, the braces can be dropped.  For instance, C<\pM> is the
 character class of Unicode 'marks', for example accent marks.
 For the full list see L<perlunicode>.
 
-The Unicode has also been separated into blocks of charaters which you
-can test with C<\p{InBlock}> and C<\P{InBlock}>, for example C<\p{InGreek}>
-and C<\P{InKatakana}>.  For the full list see L<perlunicode>.
-
-For the the full and latest information see the latest Unicode standard.
+The Unicode has also been separated into various sets of charaters
+which you can test with C<\p{In...}> (in) and C<\P{In...}> (not in),
+for example C<\p{InLatin}>, C<\p{InGreek}>, or C<\P{InKatakana}>.
+For the full list see L<perlunicode>.
 
 C<\X> is an abbreviation for a character class sequence that includes
 the Unicode 'combining character sequences'.  A 'combining character
@@ -1767,6 +1766,9 @@ 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.
 
+For the the full and latest information about Unicode see the latest
+Unicode standard, or the Unicode Consortium's website http://www.unicode.org/
+
 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>,
index d299d03..7d06108 100644 (file)
@@ -1996,6 +1996,10 @@ to enable a few features
 
 =item Effects of character semantics
 
+=item Scripts
+
+=item Blocks
+
 =item Character encodings for input and output
 
 =back
@@ -2222,21 +2226,21 @@ Locale::Maketext, Locale::Maketext::TPJ13, Math::BigFloat, Math::BigInt,
 Math::Complex, Math::Trig, Memoize, Memoize::AnyDBM_File, Memoize::Expire,
 Memoize::ExpireFile, Memoize::ExpireTest, Memoize::NDBM_File,
 Memoize::SDBM_File, Memoize::Saves, Memoize::Storable, NDBM_File, NEXT,
-Net::Cmd, Net::Config, Net::Domain, Net::DummyInetd, Net::FTP, Net::NNTP,
-Net::Netrc, Net::PH, Net::POP3, Net::Ping, Net::SMTP, Net::SNPP, Net::Time,
-Net::hostent, Net::libnetFAQ, Net::netent, Net::protoent, Net::servent, O,
-ODBM_File, Opcode, POSIX, PerlIO, 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, Storable, Switch,
-Symbol, Term::ANSIColor, Term::Cap, Term::Complete, Term::ReadLine, Test,
-Test::Harness, Test::More, Test::Simple, Text::Abbrev, Text::Balanced,
-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
+Net::Cmd, Net::Config, Net::Domain, Net::FTP, Net::NNTP, Net::Netrc,
+Net::POP3, Net::Ping, Net::SMTP, Net::Time, Net::hostent, Net::libnetFAQ,
+Net::netent, Net::protoent, Net::servent, O, ODBM_File, Opcode, POSIX,
+PerlIO, 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, Storable, Switch, Symbol, Term::ANSIColor, Term::Cap,
+Term::Complete, Term::ReadLine, Test, Test::Harness, Test::More,
+Test::Simple, Text::Abbrev, Text::Balanced, 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,
+Unicode::UCD, User::grent, User::pwent, Win32
 
 =item Extension Modules
 
@@ -2645,7 +2649,8 @@ the tag
 
 a), b), c), d), e)
 
-=item How can I tell whether a list or array contains a certain element?
+=item How can I tell whether a certain element is contained in a list or
+array?
 
 =item How do I compute the difference of two arrays?  How do I compute the
 intersection of two arrays?
@@ -3889,46 +3894,46 @@ av_len, av_make, av_pop, av_push, av_shift, av_store, av_undef, av_unshift,
 ax, bytes_from_utf8, bytes_to_utf8, call_argv, call_method, call_pv,
 call_sv, CLASS, Copy, croak, CvSTASH, cv_const_sv, dAX, dITEMS, 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, grok_number, grok_numeric_radix, 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, load_module, 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, NEWSV, newSViv,
-newSVnv, newSVpv, newSVpvf, newSVpvn, newSVpvn_share, newSVrv, newSVsv,
-newSVuv, newXS, newXSproto, Newz, Nullav, Nullch, Nullcv, Nullhv, Nullsv,
-ORIGMARK, perl_alloc, perl_clone, 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, POPpbytex, POPpx, 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, SvIVx, SvLEN, SvNIOK,
-SvNIOKp, SvNIOK_off, SvNOK, SvNOKp, SvNOK_off, SvNOK_on, SvNOK_only, SvNV,
-SvNVX, SvNVx, SvOK, SvOOK, SvPOK, SvPOKp, SvPOK_off, SvPOK_on, SvPOK_only,
-SvPOK_only_UTF8, SvPV, SvPVbyte, SvPVbytex, SvPVbytex_force,
-SvPVbyte_force, SvPVbyte_nolen, SvPVutf8, SvPVutf8x, SvPVutf8x_force,
-SvPVutf8_force, SvPVutf8_nolen, SvPVX, SvPVx, SvPV_force, SvPV_force_nomg,
-SvPV_nolen, SvREFCNT, SvREFCNT_dec, SvREFCNT_inc, SvROK, SvROK_off,
-SvROK_on, SvRV, SvSETMAGIC, SvSetMagicSV, SvSetMagicSV_nosteal, 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, SvUOK, SvUPGRADE, SvUTF8, SvUTF8_off, SvUTF8_on, SvUV,
-SvUVX, SvUVx, sv_2bool, sv_2cv, sv_2io, sv_2iv, sv_2mortal, sv_2nv,
-sv_2pvbyte, sv_2pvbyte_nolen, sv_2pvutf8, sv_2pvutf8_nolen, sv_2pv_flags,
-sv_2pv_nolen, sv_2uv, sv_backoff, sv_bless, sv_catpv, sv_catpvf,
-sv_catpvf_mg, sv_catpvn, sv_catpvn_flags, sv_catpvn_mg, sv_catpv_mg,
-sv_catsv, sv_catsv_flags, sv_catsv_mg, sv_chop, sv_clear, sv_cmp,
-sv_cmp_locale, sv_collxfrm, sv_dec, sv_derived_from, sv_eq,
-sv_force_normal, sv_force_normal_flags, sv_free, sv_getcwd, sv_gets,
-sv_grow, sv_inc, sv_insert, sv_isa, sv_isobject, sv_iv, sv_len,
+fbm_compile, fbm_instr, FREETMPS, getcwd_sv, get_av, get_cv, get_hv,
+get_sv, GIMME, GIMME_V, grok_number, grok_numeric_radix, 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, load_module,
+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, NEWSV, newSViv, newSVnv, newSVpv, newSVpvf,
+newSVpvn, newSVpvn_share, newSVrv, newSVsv, newSVuv, newXS, newXSproto,
+Newz, Nullav, Nullch, Nullcv, Nullhv, Nullsv, ORIGMARK, perl_alloc,
+perl_clone, 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, POPpbytex, POPpx, 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, SvIVx, SvLEN, SvNIOK, SvNIOKp, SvNIOK_off, SvNOK,
+SvNOKp, SvNOK_off, SvNOK_on, SvNOK_only, SvNV, SvNVx, SvNVX, SvOK, SvOOK,
+SvPOK, SvPOKp, SvPOK_off, SvPOK_on, SvPOK_only, SvPOK_only_UTF8, SvPV,
+SvPVbyte, SvPVbytex, SvPVbytex_force, SvPVbyte_force, SvPVbyte_nolen,
+SvPVutf8, SvPVutf8x, SvPVutf8x_force, SvPVutf8_force, SvPVutf8_nolen,
+SvPVX, SvPVx, SvPV_force, SvPV_force_nomg, SvPV_nolen, SvREFCNT,
+SvREFCNT_dec, SvREFCNT_inc, SvROK, SvROK_off, SvROK_on, SvRV, SvSETMAGIC,
+SvSetMagicSV, SvSetMagicSV_nosteal, 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, SvUOK,
+SvUPGRADE, SvUTF8, SvUTF8_off, SvUTF8_on, SvUV, SvUVX, SvUVx, sv_2bool,
+sv_2cv, sv_2io, sv_2iv, sv_2mortal, sv_2nv, sv_2pvbyte, sv_2pvbyte_nolen,
+sv_2pvutf8, sv_2pvutf8_nolen, sv_2pv_flags, sv_2pv_nolen, sv_2uv,
+sv_backoff, sv_bless, sv_catpv, sv_catpvf, sv_catpvf_mg, sv_catpvn,
+sv_catpvn_flags, sv_catpvn_mg, sv_catpv_mg, sv_catsv, sv_catsv_flags,
+sv_catsv_mg, sv_chop, sv_clear, sv_cmp, sv_cmp_locale, sv_collxfrm, sv_dec,
+sv_derived_from, sv_eq, sv_force_normal, sv_force_normal_flags, sv_free,
+sv_gets, sv_grow, sv_inc, sv_insert, sv_isa, sv_isobject, sv_iv, sv_len,
 sv_len_utf8, sv_magic, sv_mortalcopy, sv_newmortal, sv_newref, sv_nv,
 sv_pos_b2u, sv_pos_u2b, sv_pv, sv_pvbyte, sv_pvbyten, sv_pvbyten_force,
 sv_pvn, sv_pvn_force, sv_pvn_force_flags, sv_pvutf8, sv_pvutf8n,
@@ -4089,7 +4094,7 @@ PerlIO_apply_layers(f,mode,layers), PerlIO_binmode(f,ptype,imode,layers),
 
 =item Eliminate need for "use utf8";
 
-=item Create a char *sv_printify(sv, STRLEN *lenp, UV flags)
+=item Create a char *sv_pvprintify(sv, STRLEN *lenp, UV flags)
 
 =item Autoload byte.pm
 
@@ -4199,6 +4204,8 @@ PerlIO_apply_layers(f,mode,layers), PerlIO_binmode(f,ptype,imode,layers),
 
 =item Support for rerunning debugger
 
+=item Test Suite for the Debugger
+
 =item my sub foo { }
 
 =item One-pass global destruction
@@ -4585,6 +4592,8 @@ I<The Road goes ever on and on, down from the door where it began.>
 
 =item Socket Extension Dynamic in VMS
 
+=item Different Definition of the Unicode Character Classes \p{In...}
+
 =item Deprecations
 
 =back
@@ -4595,7 +4604,7 @@ I<The Road goes ever on and on, down from the door where it began.>
 
 =over 4
 
-=item New Modules and Distribution
+=item New Modules and Distributions
 
 =item Updated And Improved Modules and Pragmata
 
@@ -4659,6 +4668,8 @@ I<The Road goes ever on and on, down from the door where it began.>
 
 =item Linux With Sfio Fails op/misc Test 48
 
+=item OS/390
+
 =item op/sprintf tests 129 and 130
 
 =item  Failure of Thread tests
@@ -10223,10 +10234,10 @@ 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,
+NEEDS_LINKING, NOECHO, NORECURS, NO_VC, OBJECT, OPTIMIZE, PERL, PERL_CORE,
+PERLMAINCC, PERL_ARCHLIB, PERL_LIB, PERL_MALLOC_OK, PERLRUN, PERM_RW,
+PERM_RWX, PL_FILES, PM, PMLIBDIRS, PM_FILTER, POLLUTE, PPM_INSTALL_EXEC,
+PPM_INSTALL_SCRIPT, PREFIX, PREREQ_PM, SKIP, TEST_LIBS, VERSION,
 VERSION_FROM, XS, XSOPT, XSPROTOARG, XS_VERSION
 
 =item Additional lowercase attributes
@@ -12748,28 +12759,6 @@ hostfqdn (), hostname (), hostdomain ()
 
 =back
 
-=head2 Net::DummyInetd - A dummy Inetd server
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( CMD )
-
-=item METHODS
-
-port
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
 =head2 Net::FTP - FTP Client class
 
 =over 4
@@ -12876,36 +12865,6 @@ MESSAGE-SPEC, PATTERN, Examples, C<[^]-]>, C<*bdc>, C<[0-9a-zA-Z]>, C<a??d>
 
 =back
 
-=head2 Net::PH - CCSO Nameserver Client class
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=item CONSTRUCTOR
-
-new ( [ HOST ] [, OPTIONS ])
-
-=item METHODS
-
-query( SEARCH [, RETURN ] ), change( SEARCH , MAKE ), login( USER, PASS [,
-ENCRYPT ]), logout(), fields( [ FIELD_LIST ] ), add( FIELD_VALUES ),
-delete( FIELD_VALUES ), id( [ ID ] ), status(), siteinfo(), quit()
-
-=item Q&A
-
-=item SEE ALSO
-
-=item AUTHORS
-
-=item ACKNOWLEDGMENTS
-
-=item COPYRIGHT
-
-=back
-
 =head2 Net::POP3 - Post Office Protocol 3 Client class (RFC1081)
 
 =over 4
@@ -12990,36 +12949,6 @@ verify ( ADDRESS ), help ( [ $subject ] ), quit ()
 
 =back
 
-=head2 Net::SNPP - Simple Network Pager Protocol Client
-
-=over 4
-
-=item SYNOPSIS
-
-=item NOTE
-
-=item DESCRIPTION
-
-=item EXAMPLES
-
-=item CONSTRUCTOR
-
-new ( [ HOST, ] [ OPTIONS ] )
-
-=item METHODS
-
-reset (), help (), quit ()
-
-=item EXPORTS
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT
-
-=back
-
 =head2 Net::Time - time and daytime network client interface
 
 =over 4
@@ -15762,6 +15691,46 @@ VAL, TYPE ), UNIVERSAL::can ( VAL, METHOD )
 
 =over 4
 
+=item charscript
+
+=back
+
+=over 4
+
+=item charblocks
+
+=back
+
+=over 4
+
+=item charscripts
+
+=back
+
+=over 4
+
+=item Blocks versus Scripts
+
+=item Matching Scripts and Blocks
+
+=item charinrange
+
+=back
+
+=over 4
+
+=item Unicode::UCD::UnicodeVersion
+
+=back
+
+=over 4
+
+=item Implementation Note
+
+=back
+
+=over 4
+
 =item AUTHOR
 
 =back
index dab73b9..3c72432 100644 (file)
@@ -28,7 +28,7 @@ always be set to true, but it needs to be set to false when F<utf8.pm>
 is being compiled. (To stop Perl trying to autoload the C<utf8>
 pragma...)
 
-=head2 Create a char *sv_printify(sv, STRLEN *lenp, UV flags)
+=head2 Create a char *sv_pvprintify(sv, STRLEN *lenp, UV flags)
 
 For displaying PVs with control characters, embedded nulls, and Unicode.
 This would be useful for printing warnings, or data and regex dumping,
@@ -82,7 +82,8 @@ Simon Cozens promises to work on this.
 
 =head2 Unicode regular expression character classes
 
-They have some tricks Perl doesn't yet implement.
+They have some tricks Perl doesn't yet implement like character
+class subtraction.
 
        http://www.unicode.org/unicode/reports/tr18/
 
@@ -328,6 +329,12 @@ has changed. Detecting a change is perhaps the difficult bit.
 
 There should be a way of restarting the debugger on demand.
 
+=head2 Test Suite for the Debugger
+
+The debugger is a complex piece of software and fixing something
+here may inadvertently break something else over there.  To tame
+this chaotic behaviour, a test suite is necessary. 
+
 =head2 my sub foo { }
 
 The basic principle is sound, but there are problems with the semantics
index d629cab..877b497 100644 (file)
@@ -105,13 +105,14 @@ 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.
-For C1 controls or Latin 1 characters on an EBCDIC platform the character
-may be stored in a UTF-EBCDIC multi byte sequence.
-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.
+
+For C1 controls or Latin 1 characters on an EBCDIC platform the
+character may be stored in a UTF-EBCDIC multi byte sequence.  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
 
@@ -166,7 +167,8 @@ with all non-alphanumeric characters removed, for example the block
 name C<"Latin-1 Supplement"> becomes C<\p{InLatin1Supplement}>.
 
 Here is the list as of Unicode 3.1.0 (the two-letter classes) and
-Perl 5.8.0 (the one-letter classes):
+as defined by Perl (the one-letter classes) (in Unicode materials
+what Perl calls C<L> is often called C<L&>):
 
    L  Letter
    Lu Letter, Uppercase
@@ -232,105 +234,174 @@ have their directionality defined:
    BidiWS  Whitespace
    BidiON  Other Neutrals
 
-The blocks available for C<\p{InBlock}> and C<\P{InBlock}>, for
-example \p{InCyrillic>, are as follows:
-
-    BasicLatin
-    Latin1Supplement
-    LatinExtendedA
-    LatinExtendedB
-    IPAExtensions
-    SpacingModifierLetters
-    CombiningDiacriticalMarks
-    Greek
-    Cyrillic
-    Armenian
-    Hebrew
-    Arabic
-    Syriac
-    Thaana
-    Devanagari
-    Bengali
-    Gurmukhi
-    Gujarati
-    Oriya
-    Tamil
-    Telugu
-    Kannada
-    Malayalam
-    Sinhala
-    Thai
-    Lao
-    Tibetan
-    Myanmar
-    Georgian
-    HangulJamo
-    Ethiopic
-    Cherokee
-    UnifiedCanadianAboriginalSyllabics
-    Ogham
-    Runic
-    Khmer
-    Mongolian
-    LatinExtendedAdditional
-    GreekExtended
-    GeneralPunctuation
-    SuperscriptsandSubscripts
-    CurrencySymbols
-    CombiningMarksforSymbols
-    LetterlikeSymbols
-    NumberForms
-    Arrows
-    MathematicalOperators
-    MiscellaneousTechnical
-    ControlPictures
-    OpticalCharacterRecognition
-    EnclosedAlphanumerics
-    BoxDrawing
-    BlockElements
-    GeometricShapes
-    MiscellaneousSymbols
-    Dingbats
-    BraillePatterns
-    CJKRadicalsSupplement
-    KangxiRadicals
-    IdeographicDescriptionCharacters
-    CJKSymbolsandPunctuation
-    Hiragana
-    Katakana
-    Bopomofo
-    HangulCompatibilityJamo
-    Kanbun
-    BopomofoExtended
-    EnclosedCJKLettersandMonths
-    CJKCompatibility
-    CJKUnifiedIdeographsExtensionA
-    CJKUnifiedIdeographs
-    YiSyllables
-    YiRadicals
-    HangulSyllables
-    HighSurrogates
-    HighPrivateUseSurrogates
-    LowSurrogates
-    PrivateUse
-    CJKCompatibilityIdeographs
-    AlphabeticPresentationForms
-    ArabicPresentationFormsA
-    CombiningHalfMarks
-    CJKCompatibilityForms
-    SmallFormVariants
-    ArabicPresentationFormsB
-    Specials
-    HalfwidthandFullwidthForms
-    OldItalic
-    Gothic
-    Deseret
-    ByzantineMusicalSymbols
-    MusicalSymbols
-    MathematicalAlphanumericSymbols
-    CJKUnifiedIdeographsExtensionB
-    CJKCompatibilityIdeographsSupplement
-    Tags
+=head2 Scripts
+
+The scripts available for C<\p{In...}> and C<\P{In...}>, for
+example \p{InCyrillic>, are as follows, for example C<\p{InLatin}>
+or C<\P{InHan}>:
+
+   Latin
+   Greek
+   Cyrillic
+   Armenian
+   Hebrew
+   Arabic
+   Syriac
+   Thaana
+   Devanagari
+   Bengali
+   Gurmukhi
+   Gujarati
+   Oriya
+   Tamil
+   Telugu
+   Kannada
+   Malayalam
+   Sinhala
+   Thai
+   Lao
+   Tibetan
+   Myanmar
+   Georgian
+   Hangul
+   Ethiopic
+   Cherokee
+   CanadianAboriginal
+   Ogham
+   Runic
+   Khmer
+   Mongolian
+   Hiragana
+   Katakana
+   Bopomofo
+   Han
+   Yi
+   OldItalic
+   Gothic
+   Deseret
+   Inherited
+
+=head2 Blocks
+
+In addition to B<scripts>, Unicode also defines B<blocks> of
+characters.  The difference between scripts and blocks is that the
+former concept is closer to natural languages, while the latter
+concept is more an artificial grouping based on groups of 256 Unicode
+characters.  For example, the C<Latin> script contains letters from
+many blocks, but it does not contain all the characters from those
+blocks, it does not for example contain digits.
+
+For more about scripts see the UTR #24:
+http://www.unicode.org/unicode/reports/tr24/
+For more about blocks see
+http://www.unicode.org/Public/UNIDATA/Blocks.txt
+
+Because there are overlaps in naming (there are, for example, both
+a script called C<Katakana> and a block called C<Katakana>, the block
+version has C<Block> appended to its name, C<\p{InKatakanaBlock}>.
+
+Notice that this definition was introduced in Perl 5.8.0: in Perl
+5.6.0 only the blocks were used; in Perl 5.8.0 scripts became the
+preferential character class definition; this meant that the
+definitions of some character classes changed (the ones in the
+below list that have the C<Block> appended).
+
+   BasicLatin
+   Latin1Supplement
+   LatinExtendedA
+   LatinExtendedB
+   IPAExtensions
+   SpacingModifierLetters
+   CombiningDiacriticalMarks
+   GreekBlock
+   CyrillicBlock
+   ArmenianBlock
+   HebrewBlock
+   ArabicBlock
+   SyriacBlock
+   ThaanaBlock
+   DevanagariBlock
+   BengaliBlock
+   GurmukhiBlock
+   GujaratiBlock
+   OriyaBlock
+   TamilBlock
+   TeluguBlock
+   KannadaBlock
+   MalayalamBlock
+   SinhalaBlock
+   ThaiBlock
+   LaoBlock
+   TibetanBlock
+   MyanmarBlock
+   GeorgianBlock
+   HangulJamo
+   EthiopicBlock
+   CherokeeBlock
+   UnifiedCanadianAboriginalSyllabics
+   OghamBlock
+   RunicBlock
+   KhmerBlock
+   MongolianBlock
+   LatinExtendedAdditional
+   GreekExtended
+   GeneralPunctuation
+   SuperscriptsandSubscripts
+   CurrencySymbols
+   CombiningMarksforSymbols
+   LetterlikeSymbols
+   NumberForms
+   Arrows
+   MathematicalOperators
+   MiscellaneousTechnical
+   ControlPictures
+   OpticalCharacterRecognition
+   EnclosedAlphanumerics
+   BoxDrawing
+   BlockElements
+   GeometricShapes
+   MiscellaneousSymbols
+   Dingbats
+   BraillePatterns
+   CJKRadicalsSupplement
+   KangxiRadicals
+   IdeographicDescriptionCharacters
+   CJKSymbolsandPunctuation
+   HiraganaBlock
+   KatakanaBlock
+   BopomofoBlock
+   HangulCompatibilityJamo
+   Kanbun
+   BopomofoExtended
+   EnclosedCJKLettersandMonths
+   CJKCompatibility
+   CJKUnifiedIdeographsExtensionA
+   CJKUnifiedIdeographs
+   YiSyllables
+   YiRadicals
+   HangulSyllables
+   HighSurrogates
+   HighPrivateUseSurrogates
+   LowSurrogates
+   PrivateUse
+   CJKCompatibilityIdeographs
+   AlphabeticPresentationForms
+   ArabicPresentationFormsA
+   CombiningHalfMarks
+   CJKCompatibilityForms
+   SmallFormVariants
+   ArabicPresentationFormsB
+   Specials
+   HalfwidthandFullwidthForms
+   OldItalicBlock
+   GothicBlock
+   DeseretBlock
+   ByzantineMusicalSymbols
+   MusicalSymbols
+   MathematicalAlphanumericSymbols
+   CJKUnifiedIdeographsExtensionB
+   CJKCompatibilityIdeographsSupplement
+   Tags
 
 =item *
 
index d70f22d..817f1e5 100644 (file)
@@ -193,7 +193,10 @@ This variable is read-only and dynamically scoped to the current BLOCK.
 
 The text matched by the used group most-recently closed (i.e. the group
 with the rightmost closing parenthesis) of the last successful search
-pattern. This is primarly used inside C<(?{...})> blocks for examining text
+pattern.  (Mnemonic: the (possibly) Nested parenthesis that most
+recently closed.)
+
+This is primarly used inside C<(?{...})> blocks for examining text
 recently matched. For example, to effectively capture text to a variable
 (in addition to C<$1>, C<$2>, etc.), replace C<(...)> with
 
diff --git a/pp.c b/pp.c
index 0b74794..51e10de 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -943,7 +943,7 @@ PP(pp_multiply)
                    /* 2s complement assumption that (UV)-IV_MIN is correct.  */
                    /* -ve result, which could overflow an IV  */
                    SP--;
-                   SETi( -product );
+                   SETi( -(IV)product );
                    RETURN;
                } /* else drop to NVs below. */
            } else {
@@ -980,7 +980,7 @@ PP(pp_multiply)
                            /* 2s complement assumption again  */
                            /* -ve result, which could overflow an IV  */
                            SP--;
-                           SETi( -product_low );
+                           SETi( -(IV)product_low );
                            RETURN;
                        } /* else drop to NVs below. */
                    }
diff --git a/pp.sym b/pp.sym
index 151b7c3..2aa4a92 100644 (file)
--- a/pp.sym
+++ b/pp.sym
@@ -26,6 +26,7 @@ Perl_ck_listiob
 Perl_ck_match
 Perl_ck_method
 Perl_ck_null
+Perl_ck_octmode
 Perl_ck_open
 Perl_ck_repeat
 Perl_ck_require
index 4970bd0..ca82350 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -147,11 +147,10 @@ PP(pp_regcomp)
 
     if (!PM_GETRE(pm)->prelen && PL_curpm)
        pm = PL_curpm;
+    else if (strEQ("\\s+", PM_GETRE(pm)->precomp))
+       pm->op_pmflags |= PMf_WHITE;
     else
-       if (strEQ("\\s+", PM_GETRE(pm)->precomp))
-           pm->op_pmflags |= PMf_WHITE;
-       else
-           pm->op_pmflags &= ~PMf_WHITE;
+       pm->op_pmflags &= ~PMf_WHITE;
 
     /* XXX runtime compiled output needs to move to the pad */
     if (pm->op_pmflags & PMf_KEEP) {
index 296ed44..9d51b1e 100644 (file)
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -1719,12 +1719,12 @@ PP(pp_leave)
        SP = newsp;
     else if (gimme == G_SCALAR) {
        MARK = newsp + 1;
-       if (MARK <= SP)
+       if (MARK <= SP) {
            if (SvFLAGS(TOPs) & (SVs_PADTMP|SVs_TEMP))
                *MARK = TOPs;
            else
                *MARK = sv_mortalcopy(TOPs);
-       else {
+       } else {
            MEXTEND(mark,0);
            *MARK = &PL_sv_undef;
        }
@@ -2651,7 +2651,7 @@ try_autoload:
            }
            DEBUG_S(if (CvDEPTH(cv) != 0)
                        PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
-                                     CvDEPTH(cv)));;
+                                     CvDEPTH(cv)));
            SAVEDESTRUCTOR_X(unset_cvowner, (void*) cv);
        }
     }
@@ -3116,7 +3116,7 @@ unset_cvowner(pTHXo_ void *cvarg)
     MUTEX_LOCK(CvMUTEXP(cv));
     DEBUG_S(if (CvDEPTH(cv) != 0)
                PerlIO_printf(Perl_debug_log, "depth %ld != 0\n",
-                             CvDEPTH(cv)));;
+                             CvDEPTH(cv)));
     assert(thr == CvOWNER(cv));
     CvOWNER(cv) = 0;
     MUTEX_UNLOCK(CvMUTEXP(cv));
index be6ff6f..7dc2874 100644 (file)
--- a/pp_pack.c
+++ b/pp_pack.c
@@ -1669,7 +1669,6 @@ PP(pp_pack)
                        *--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 */
index 86ab4c2..97ba330 100644 (file)
@@ -25,6 +25,7 @@ PERL_CKDEF(Perl_ck_listiob)
 PERL_CKDEF(Perl_ck_match)
 PERL_CKDEF(Perl_ck_method)
 PERL_CKDEF(Perl_ck_null)
+PERL_CKDEF(Perl_ck_octmode)
 PERL_CKDEF(Perl_ck_open)
 PERL_CKDEF(Perl_ck_repeat)
 PERL_CKDEF(Perl_ck_require)
index 83dfb19..29bc12a 100644 (file)
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -758,9 +758,9 @@ PP(pp_tie)
            methname = "TIEARRAY";
            break;
        case SVt_PVGV:
-#ifdef GV_SHARED_CHECK
-           if (GvSHARED((GV*)varsv)) {
-                Perl_croak(aTHX_ "Attempt to tie shared GV");
+#ifdef GV_UNIQUE_CHECK
+           if (GvUNIQUE((GV*)varsv)) {
+                Perl_croak(aTHX_ "Attempt to tie unique GV");
            }
 #endif
            methname = "TIEHANDLE";
diff --git a/proto.h b/proto.h
index 2d6e432..50d552a 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -24,11 +24,11 @@ PERL_CALLCONV PerlInterpreter*      perl_clone_using(PerlInterpreter *interp, UV flag
 #  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);
+#if defined(MYMALLOC)
 PERL_CALLCONV MEM_SIZE Perl_malloced_size(void *p);
 #endif
 
@@ -755,7 +755,7 @@ PERL_CALLCONV I32   Perl_sv_cmp_locale(pTHX_ SV* sv1, SV* sv2);
 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 int      Perl_sv_getcwd(pTHX_ SV* sv);
+PERL_CALLCONV int      Perl_getcwd_sv(pTHX_ SV* sv);
 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);
diff --git a/sv.c b/sv.c
index 6ed638c..a7e1bda 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -3613,8 +3613,8 @@ Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
                Perl_croak(aTHX_ "Can't redefine active sort subroutine %s",
                      GvNAME(dstr));
 
-#ifdef GV_SHARED_CHECK
-                if (GvSHARED((GV*)dstr)) {
+#ifdef GV_UNIQUE_CHECK
+                if (GvUNIQUE((GV*)dstr)) {
                     Perl_croak(aTHX_ PL_no_modify);
                 }
 #endif
@@ -3659,8 +3659,8 @@ Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
                SV *dref = 0;
                int intro = GvINTRO(dstr);
 
-#ifdef GV_SHARED_CHECK
-                if (GvSHARED((GV*)dstr)) {
+#ifdef GV_UNIQUE_CHECK
+                if (GvUNIQUE((GV*)dstr)) {
                     Perl_croak(aTHX_ PL_no_modify);
                 }
 #endif
@@ -4101,7 +4101,7 @@ Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
            *SvEND(sv) = '\0';
            SvFAKE_off(sv);
            SvREADONLY_off(sv);
-           unsharepvn(pvx,SvUTF8(sv)?-len:len,hash);
+           unsharepvn(pvx, SvUTF8(sv) ? -(I32)len : len, hash);
        }
        else if (PL_curcop != &PL_compiling)
            Perl_croak(aTHX_ PL_no_modify);
@@ -4415,9 +4415,9 @@ Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 nam
     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
+    /* Some magic contains a reference loop, where the sv and object refer to
+       each other.  To 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 == PERL_MAGIC_arylen ||
@@ -4946,7 +4946,9 @@ Perl_sv_clear(pTHX_ register SV *sv)
        else if (SvPVX(sv) && SvLEN(sv))
            Safefree(SvPVX(sv));
        else if (SvPVX(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
-           unsharepvn(SvPVX(sv),SvUTF8(sv)?-SvCUR(sv):SvCUR(sv),SvUVX(sv));
+           unsharepvn(SvPVX(sv),
+                      SvUTF8(sv) ? -(I32)SvCUR(sv) : SvCUR(sv),
+                      SvUVX(sv));
            SvFAKE_off(sv);
        }
        break;
@@ -8634,7 +8636,7 @@ S_gv_share(pTHX_ SV *sstr)
     SV *sv = &PL_sv_no; /* just need SvREADONLY-ness */
 
     if (GvIO(gv) || GvFORM(gv)) {
-        GvSHARED_off(gv); /* GvIOs cannot be shared. nor can GvFORMs */
+        GvUNIQUE_off(gv); /* GvIOs cannot be shared. nor can GvFORMs */
     }
     else if (!GvCV(gv)) {
         GvCV(gv) = (CV*)sv;
@@ -8642,11 +8644,11 @@ S_gv_share(pTHX_ SV *sstr)
     else {
         /* CvPADLISTs cannot be shared */
         if (!CvXSUB(GvCV(gv))) {
-            GvSHARED_off(gv);
+            GvUNIQUE_off(gv);
         }
     }
 
-    if (!GvSHARED(gv)) {
+    if (!GvUNIQUE(gv)) {
 #if 0
         PerlIO_printf(Perl_debug_log, "gv_share: unable to share %s::%s\n",
                       HvNAME(GvSTASH(gv)), GvNAME(gv));
@@ -8830,7 +8832,7 @@ Perl_sv_dup(pTHX_ SV *sstr, clone_params* param)
        LvTYPE(dstr)    = LvTYPE(sstr);
        break;
     case SVt_PVGV:
-       if (GvSHARED((GV*)sstr)) {
+       if (GvUNIQUE((GV*)sstr)) {
             SV *share;
             if ((share = gv_share(sstr))) {
                 del_SV(dstr);
index 2f847ad..0079146 100644 (file)
     %s() called too early to check prototype           [Perl_peep]
         fred() ; sub fred ($$) {}
 
+     Non-octal literal mode (%d) specified
+       (Did you mean 0%d instead?)
+       chmod 777, "foo";
+       mkdir "foo", 777;
+       umask 222;
 
     Mandatory Warnings 
     ------------------
@@ -926,3 +931,30 @@ unshift(@x);
 EXPECT
 Useless use of push with no values at - line 4.
 Useless use of unshift with no values at - line 5.
+########
+# op.c
+use warnings 'chmod' ;
+chmod 777;
+no warnings 'chmod' ;
+chmod 777;
+EXPECT
+Non-octal literal mode (777) specified at - line 3.
+       (Did you mean 0777 instead?)
+########
+# op.c
+use warnings 'umask' ;
+umask 222;
+no warnings 'umask' ;
+umask 222;
+EXPECT
+Non-octal literal mode (222) specified at - line 3.
+       (Did you mean 0222 instead?)
+########
+# op.c
+use warnings 'mkdir' ;
+mkdir "", 777;
+no warnings 'mkdir' ;
+mkdir "", 777;
+EXPECT
+Non-octal literal mode (777) specified at - line 3.
+       (Did you mean 0777 instead?)
index 242b005..14b745d 100644 (file)
@@ -46,18 +46,12 @@ toke.c      AOK
      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 ("")
@@ -262,14 +256,6 @@ 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' ;
@@ -286,14 +272,6 @@ 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
index d41594e..084092e 100755 (executable)
@@ -224,9 +224,15 @@ for my $num_chain (1..$max_chain) {
                     and $ans[0] == $ans[1] and $ans[0] <= ~0
                      # First must be in E notation (ie not just digits) and
                      # second must still be an integer.
+                    # eg 1.84467440737095516e+19
+                    # 1.84467440737095516e+19 for 64 bit mantissa is in the
+                    # integer range, so 1.84467440737095516e+19 + 0 is treated
+                    # as integer addition. [should it be?]
+                    # and 18446744073709551600 + 0 is 18446744073709551600
+                    # Which isn't the string you first thought of.
                      # I can't remember why there isn't symmetry in this
                      # exception, ie why only the first ops are tested for 'N'
-                     and $ans[0] !~ /^-?\d+$/ and $ans[0] !~ /^-?\d+$/) {
+                     and $ans[0] != /^-?\d+$/ and $ans[1] !~ /^-?\d+$/) {
              print "# ok, numerically equal - notation changed due to adding zero\n";
            } else {
              $nok++,
index f9b35ae..dfecc6e 100755 (executable)
@@ -6,7 +6,8 @@ BEGIN {
     require Config; import Config;
 }
 
-print "1..160\n";
+print "1..161\n";
+# Note: All test numbers in comments are off by 1 after the comment below..
 
 $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
@@ -57,12 +58,17 @@ print +($x = unpack("I",pack("I", 0xFFFFFFFF))) == 0xFFFFFFFF
 
 # check 'w'
 my $test=10;
-my @x = (5,130,256,560,32000,3097152,268435455,1073741844,
+my @x = (5,130,256,560,32000,3097152,268435455,1073741844, 2**33,
          '4503599627365785','23728385234614992549757750638446');
 my $x = pack('w*', @x);
-my $y = pack 'H*', '0581028200843081fa0081bd8440ffffff7f848080801487ffffffffffdb19caefe8e1eeeea0c2e1e3e8ede1ee6e';
+my $y = pack 'H*', '0581028200843081fa0081bd8440ffffff7f8480808014A08080800087ffffffffffdb19caefe8e1eeeea0c2e1e3e8ede1ee6e';
 
-print $x eq $y ? "ok $test\n" : "not ok $test\n"; $test++;
+if ($x eq $y) {
+  print "ok $test\n";
+} else {
+  printf "not ok $test # %s\n", unpack 'H*', $x;
+}
+$test++;
 
 @y = unpack('w*', $y);
 my $a;
@@ -71,10 +77,12 @@ while ($a = pop @x) {
   print $a eq $b ? "ok $test\n" : "not ok $test\n$a\n$b\n"; $test++;
 }
 
+# XXX All test numbers in comments are off by 1 after this point.
+
 @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++;
+print $y[1] == 130 ? "ok $test\n" : "not ok $test # $y[1]\n"; $test++;
 
 # test exeptions
 eval { $x = unpack 'w', pack 'C*', 0xff, 0xff};
@@ -362,6 +370,23 @@ print "ok ", $test++, "\n";
 
 # 144..152: /
 
+# Using Test considered bad plan in op/*.t ?
+
+sub report {
+  my ($pass, $test, $err, $wrong) = @_;
+  if ($pass) {
+    print "ok $test\n"
+  } else {
+    if ($err) {
+      chomp $err;
+      print "not ok $test # \$\@ = $err\n";
+    } else {
+      $wrong =~ s/([[:cntrl:]\177 ])/sprintf "\\%03o", ord $1/ge;
+      print "not ok $test # got $wrong\n";
+    }
+  }
+}
+
 my $z;
 eval { ($x) = unpack '/a*','hello' };
 print 'not ' unless $@; print "ok $test\n"; $test++;
@@ -373,8 +398,8 @@ 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++;
+my $expect = "\000\006string\0\0\0\012hi there \000\003etc";
+report ($z eq $expect, $test++, '', $z);
 
 eval { ($x) = unpack 'a/a*/a*', '212ab345678901234567' };
 print $@ eq '' && $x eq 'ab3456789012' ? "ok $test\n" : "#$x,$@\nnot ok $test\n";
@@ -405,7 +430,8 @@ $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++;
+$expect = "\000\006string\003etc";
+report ($z eq $expect, $test++, '', $z);
 
 print 'not ' unless "1.20.300.4000" eq sprintf "%vd", pack("U*",1,20,300,4000);
 print "ok $test\n"; $test++;
index 57f7cb7..57dc2f2 100755 (executable)
@@ -6,7 +6,7 @@
 
 $| = 1;
 
-print "1..660\n";
+print "1..672\n";
 
 BEGIN {
     chdir 't' if -d 't';
@@ -1889,3 +1889,43 @@ $T="ok 659\n";if ($x =~ /(a([abcdefg]+)(?{$y=$^N})d)(?{$z=$^N})e/ and $y eq "bc"
               {print $T} else {print "not $T"};
 $T="ok 660\n";if ($x =~ /(a([abcdefg]+)(?{$y=$^N})de)(?{$z=$^N})/ and $y eq "bc" and $z eq "abcde")
               {print $T} else {print "not $T"};
+
+# Test the Unicode script classes
+
+print "not " unless chr(0x100) =~ /\p{InLatin}/; # outside Latin-1
+print "ok 661\n";
+
+print "not " unless chr(0x212b) =~ /\p{InLatin}/; # Angstrom sign, very outside
+print "ok 662\n";
+
+print "not " unless chr(0x5d0) =~ /\p{InHebrew}/; # inside HebrewBlock
+print "ok 663\n";
+
+print "not " unless chr(0xfb4f) =~ /\p{InHebrew}/; # outside HebrewBlock
+print "ok 664\n";
+
+print "not " unless chr(0xb5) =~ /\p{InGreek}/; # singleton (not in a range)
+print "ok 665\n";
+
+print "not " unless chr(0x37a) =~ /\p{InGreek}/; # singleton
+print "ok 666\n";
+
+print "not " unless chr(0x386) =~ /\p{InGreek}/; # singleton
+print "ok 667\n";
+
+print "not " unless chr(0x387) =~ /\P{InGreek}/; # not there
+print "ok 668\n";
+
+print "not " unless chr(0x388) =~ /\p{InGreek}/; # range
+print "ok 669\n";
+
+print "not " unless chr(0x38a) =~ /\p{InGreek}/; # range
+print "ok 670\n";
+
+print "not " unless chr(0x38b) =~ /\P{InGreek}/; # not there
+print "ok 671\n";
+
+print "not " unless chr(0x38c) =~ /\p{InGreek}/; # singleton
+print "ok 672\n";
+
+
index f3bc23c..7c4c1c5 100755 (executable)
@@ -1,6 +1,6 @@
 #!./perl
 
-print "1..4\n";
+print "1..7\n";
 
 $x='banana';
 $x=~/.a/g;
@@ -19,5 +19,21 @@ $x = "test string?"; $x =~ s/\w/pos($x)/eg;
 print "not " unless $x eq "0123 5678910?";
 print "ok 4\n";
 
-
-
+# bug ID 20010704.003
+use Tie::Scalar;
+tie $y[0], Tie::StdScalar or die $!;
+$y[0] = "aaa";
+$y[0] =~ /./g;
+if (pos($y[0]) == 1) {print "ok 5\n"} else {print "not ok 5\n"}
+
+$x = 0;
+$y[0] = "aaa";
+$y[$x] =~ /./g;
+if (pos($y[$x]) == 1) {print "ok 6\n"} else {print "not ok 6\n"}
+untie $y[0];
+
+tie $y{'abc'}, Tie::StdScalar or die $!;
+$y{'abc'} = "aaa";
+$y{'abc'} =~ /./g;
+if (pos($y{'abc'}) == 1) {print "ok 7\n"} else {print "not ok 7\n"}
+untie $y{'abc'};
index 348de79..0c111ea 100755 (executable)
@@ -71,8 +71,12 @@ 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";}
 
-# [ID 20010618.006] tests 25..26 may loop
-{
+if ($^O eq 'os390') {
+    # Even with the alarm() OS/390 can't manage these tests
+    # (Perl just goes into a busy loop, luckily an interruptable one)
+    for (25..26) { print "not ok $_ # compiler bug?\n" }
+} else {
+    # [ID 20010618.006] tests 25..26 may loop
     use Config;
     my $have_alarm = $Config{d_alarm};
     local $SIG{ALRM} = sub { die "timeout\n" };
@@ -96,3 +100,4 @@ if ("ab\ncd\n" =~ /^cd/) {print "ok 24\n";} else {print "not ok 24\n";}
        print "not ok 26\t# " . $@ || "should not match\n";
     }
 }
+
index ac6c035..c37de85 100755 (executable)
@@ -273,7 +273,7 @@ else
 
 # 12..44: scary format testing from Merijn H. Brand
 
-if ($^O eq 'VMS' || $^O eq 'MSWin32') {
+if ($^O eq 'VMS' || $^O eq 'MSWin32' || $^O eq 'dos') {
   foreach (12..44) { print "ok $_ # skipped: '|-' and '-|' not supported\n"; }
   exit(0);
 }
@@ -289,7 +289,9 @@ my $tm =  1;                # Top margin (empty lines before first output)
 my $bm =  2;           # Bottom marging (empty lines between last text and footer)
 my $lm =  4;           # Left margin (indent in spaces)
 
+select ((select (STDOUT), $| = 1)[0]);
 if ($lm > 0 and !open STDOUT, "|-") {  # Left margin (in this test ALWAYS set)
+    select ((select (STDOUT), $| = 1)[0]);
     my $i = 12;
     my $s = " " x $lm;
     while (<STDIN>) {
index 87fcdbe..a1e8fdc 100644 (file)
--- a/thread.h
+++ b/thread.h
     } STMT_END
 #endif
 
+#ifndef PTHREAD_ATFORK
+#  define PTHREAD_ATFORK(prepare,parent,child)                 \
+    pthread_atfork(prepare,parent,child)
+#endif
+
 #ifndef THREAD_RET_TYPE
 #  define THREAD_RET_TYPE      void *
 #  define THREAD_RET_CAST(p)   ((void *)(p))
@@ -456,3 +461,7 @@ typedef struct condpair {
 #ifndef INIT_THREADS
 #  define INIT_THREADS NOOP
 #endif
+
+#ifndef PTHREAD_ATFORK
+#  define PTHREAD_ATFORK(prepare,parent,child) NOOP
+#endif
diff --git a/toke.c b/toke.c
index e177cef..47dacaf 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -1257,7 +1257,7 @@ S_scan_const(pTHX_ char *start)
                    char *e = d++;
                    while (e-- > c)
                        *(e + 1) = *e;
-                   *c = UTF_TO_NATIVE(0xff);
+                   *c = (char)UTF_TO_NATIVE(0xff);
                    /* mark the range as done, and continue */
                    dorange = FALSE;
                    didrange = TRUE;
@@ -1308,7 +1308,7 @@ S_scan_const(pTHX_ char *start)
                    Perl_croak(aTHX_ "Ambiguous range in transliteration operator");
                }
                if (has_utf8) {
-                   *d++ = UTF_TO_NATIVE(0xff); /* use illegal utf8 byte--see pmtrans */
+                   *d++ = (char)UTF_TO_NATIVE(0xff);   /* use illegal utf8 byte--see pmtrans */
                    s++;
                    continue;
                }
@@ -2545,9 +2545,6 @@ Perl_yylex(pTHX)
                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))
@@ -2557,7 +2554,7 @@ Perl_yylex(pTHX)
                            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",
+                           Perl_sv_catpvf(aTHX_ PL_linestr, "our @F=split(%s%c",
                                      "q" + (delim == '\''), delim);
                            for (s = PL_splitstr; *s; s++) {
                                if (*s == '\\')
@@ -2568,7 +2565,7 @@ Perl_yylex(pTHX)
                        }
                    }
                    else
-                       sv_catpv(PL_linestr,"@F=split(' ');");
+                       sv_catpv(PL_linestr,"our @F=split(' ');");
                }
            }
            sv_catpv(PL_linestr, "\n");
@@ -3092,7 +3089,7 @@ Perl_yylex(pTHX)
                        CvMETHOD_on(PL_compcv);
 #ifdef USE_ITHREADS
       else if (PL_in_my == KEY_our && len == 6 && strnEQ(s, "unique", len))
-                       GvSHARED_on(cGVOPx_gv(yylval.opval));
+                       GvUNIQUE_on(cGVOPx_gv(yylval.opval));
 #endif
                    /* After we've set the flags, it could be argued that
                       we don't need to do the attributes.pm-based setting
@@ -4302,12 +4299,6 @@ Perl_yylex(pTHX)
            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:
@@ -5165,12 +5156,6 @@ Perl_yylex(pTHX)
            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:
@@ -6917,7 +6902,8 @@ Perl_scan_num(pTHX_ char *start, YYSTYPE* lvalp)
     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? */
+    bool floatit,                      /* boolean: int or float? */
+       octal = 0;                      /* Is this an octal number? */
     char *lastub = 0;                  /* position of last underbar */
     static char number_too_long[] = "Number too long";
 
@@ -6971,6 +6957,7 @@ Perl_scan_num(pTHX_ char *start, YYSTYPE* lvalp)
            /* so it must be octal */
            else {
                shift = 3;
+               octal = 1;
                s++;
            }
 
@@ -7376,8 +7363,11 @@ vstring:
 
     /* make the op for the constant and return */
 
-    if (sv)
+    if (sv) {
        lvalp->opval = newSVOP(OP_CONST, 0, sv);
+       if (octal)
+           ((SVOP *)lvalp->opval)->op_private |= OPpCONST_OCTAL;
+    }
     else
        lvalp->opval = Nullop;
 
index 62ce1f0..dfea3c1 100644 (file)
--- a/uconfig.h
+++ b/uconfig.h
  */
 /*#define      HAS_USLEEP_PROTO        / **/
 
+/* I_LANGINFO:
+ *     This symbol, if defined, indicates that <langinfo.h> exists and
+ *     should be included.
+ */
+/*#define      I_LANGINFO              / **/
+
 #endif
diff --git a/util.c b/util.c
index 1ab05e6..b72a8f2 100644 (file)
--- a/util.c
+++ b/util.c
@@ -336,6 +336,37 @@ S_xstat(pTHX_ int flag)
 
 #endif /* LEAKTEST */
 
+/* These must be defined when not using Perl's malloc for binary
+ * compatibility */
+
+#ifndef MYMALLOC
+
+Malloc_t Perl_malloc (MEM_SIZE nbytes)
+{
+    dTHXs;
+    return PerlMem_malloc(nbytes);
+}
+
+Malloc_t Perl_calloc (MEM_SIZE elements, MEM_SIZE size)
+{
+    dTHXs;
+    return PerlMem_calloc(elements, size);
+}
+
+Malloc_t Perl_realloc (Malloc_t where, MEM_SIZE nbytes)
+{
+    dTHXs;
+    return PerlMem_realloc(where, nbytes);
+}
+
+Free_t   Perl_mfree (Malloc_t where)
+{
+    dTHXs;
+    PerlMem_free(where);
+}
+
+#endif
+
 /* copy a string up to some (non-backslashed) delimiter, if any */
 
 char *
@@ -692,16 +723,8 @@ Perl_fbm_instr(pTHX_ unsigned char *big, register unsigned char *bigend, SV *lit
          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() */
@@ -795,25 +818,6 @@ Perl_screaminstr(pTHX_ SV *bigstr, SV *littlestr, I32 start_shift, I32 end_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;
@@ -833,7 +837,6 @@ Perl_screaminstr(pTHX_ SV *bigstr, SV *littlestr, I32 start_shift, I32 end_shift
     } 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;
@@ -3614,7 +3617,7 @@ return FALSE
         (dp->d_name[1] == '.' && dp->d_name[2] == '\0')))
 
 /*
-=for apidoc sv_getcwd
+=for apidoc getcwd_sv
 
 Fill the sv with current working directory
 
@@ -3630,7 +3633,7 @@ Fill the sv with current working directory
  *     back into. */
 
 int
-Perl_sv_getcwd(pTHX_ register SV *sv)
+Perl_getcwd_sv(pTHX_ register SV *sv)
 {
 #ifndef PERL_MICRO
 
index 48e281d..f4ca79d 100644 (file)
@@ -61,43 +61,50 @@ Larry Wall <larry@wall.org>
 
 =cut
 
+use strict;
+use warnings;
+
+my %keyword = ();
+
 while (<DATA>) {
-    chop;
+    chomp;
     $keyword{$_} = 1;
 }
 
-undef $/;
-$* = 1;
+local $/;
+
 while (<>) {
-    $newname = $ARGV;
+    my $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;
+    my $oldpack = $2;
+    my $newpack = "\u$2";
+    my @export = ();
 
     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;
+    if (/sub\s+\w+'/) {
+       @export = m/sub\s+\w+'(\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);
+    my @export_ok = grep($keyword{$_}, @export);
     @export = grep(!$keyword{$_}, @export);
+
+    my %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;
+    s/([\$\@%&*])'(\w+)/&xlate($1,"",$2,$newpack,$oldpack,\%export)/eg;
+    s/([\$\@%&*]?)(\w+)'(\w+)/&xlate($1,$2,$3,$newpack,$oldpack,\%export)/eg;
     if (!/\$\[\s*\)?\s*=\s*[^0\s]/) {
        s/^\s*(local\s*\()?\s*\$\[\s*\)?\s*=\s*0\s*;[ \t]*\n//g;
        s/\$\[\s*\+\s*//g;
@@ -106,24 +113,23 @@ while (<>) {
     }
     s/open\s+(\w+)/open($1)/g;
  
+    my $export_ok = '';
+    my $carp      ='';
+
+
     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";
+    if ( open(PM, ">$newname") ) {
+        print PM <<"END";
 package $newpack;
-require 5.000;
+require 5.6.0;
 require Exporter;
 $carp
 \@ISA = qw(Exporter);
@@ -131,27 +137,35 @@ $carp
 $export_ok
 $_
 END
+    }
+    else {
+      warn "Can't create $newname: $!\n";
+    }
 }
 
 sub xlate {
-    local($prefix, $pack, $ident) = @_;
+    my ($prefix, $pack, $ident,$newpack,$oldpack,$export) = @_;
+
+    my $xlated ;
     if ($prefix eq '' && $ident =~ /^(t|s|m|d|ing|ll|ed|ve|re)$/) {
-       "${pack}'$ident";
+       $xlated = "${pack}'$ident";
     }
-    elsif ($pack eq "" || $pack eq "main") {
-       if ($export{$ident}) {
-           "$prefix$ident";
+    elsif ($pack eq '' || $pack eq 'main') {
+       if ($export->{$ident}) {
+           $xlated = "$prefix$ident";
        }
        else {
-           "$prefix${pack}::$ident";
+           $xlated = "$prefix${pack}::$ident";
        }
     }
     elsif ($pack eq $oldpack) {
-       "$prefix${newpack}::$ident";
+       $xlated = "$prefix${newpack}::$ident";
     }
     else {
-       "$prefix${pack}::$ident";
+       $xlated = "$prefix${pack}::$ident";
     }
+
+    return $xlated;
 }
 __END__
 AUTOLOAD
@@ -159,6 +173,8 @@ BEGIN
 CORE
 DESTROY
 END
+INIT
+CHECK
 abs
 accept
 alarm
@@ -170,6 +186,7 @@ bless
 caller
 chdir
 chmod
+chomp
 chop
 chown
 chr
@@ -201,6 +218,7 @@ eof
 eq
 eval
 exec
+exists
 exit
 exp
 fcntl
@@ -260,10 +278,12 @@ link
 listen
 local
 localtime
+lock
 log
 lstat
 lt
 m
+map
 mkdir
 msgctl
 msgget
@@ -279,16 +299,21 @@ open
 opendir
 or
 ord
+our
 pack
 package
 pipe
 pop
+pos
 print
 printf
+prototype
 push
 q
 qq
+qr
 quotemeta
+qu
 qw
 qx
 rand
@@ -348,12 +373,15 @@ sub
 substr
 symlink
 syscall
+sysopen
 sysread
+sysseek
 system
 syswrite
 tell
 telldir
 tie
+tied
 time
 times
 tr
index 138b1db..c7b28e9 100644 (file)
@@ -37,6 +37,11 @@ my $tree = {
                                'debugging'     => DEFAULT_ON,
                                'malloc'        => DEFAULT_ON,
                           },
+       'octmode'       => {
+                               'chmod'         => DEFAULT_OFF,
+                               'mkdir'         => DEFAULT_OFF,
+                               'umask'         => DEFAULT_OFF,
+                          },
                'void'          => DEFAULT_OFF,
                'recursion'     => DEFAULT_OFF,
                'redefine'      => DEFAULT_OFF,
@@ -47,8 +52,6 @@ my $tree = {
                'regexp'        => DEFAULT_OFF,
                'glob'          => DEFAULT_OFF,
                'y2k'           => DEFAULT_OFF,
-               'chmod'         => DEFAULT_OFF,
-               'umask'         => DEFAULT_OFF,
                'untie'         => DEFAULT_OFF,
        'substr'        => DEFAULT_OFF,
        'taint'         => DEFAULT_OFF,
index c5a15ed..c103f82 100644 (file)
@@ -484,7 +484,7 @@ RCOPY               = xcopy /f /r /i /e /d
 NOOP           = @echo
 NULL           =
 
-DEL            = bin\mdelete.bat
+DEL            = del
 
 #
 # filenames given to xsubpp must have forward slashes (since it puts
@@ -995,7 +995,6 @@ distclean: clean
        -del /f $(LIBDIR)\Scalar\Util.pm
        -del /f $(LIBDIR)\Time\HiRes.pm
        -del /f $(LIBDIR)\Time\Piece.pm
-       -del /f $(LIBDIR)\Cwd.pm
        -del /f $(LIBDIR)\XS\Typemap.pm
        -if exist $(LIBDIR)\IO rmdir /s /q $(LIBDIR)\IO
        -rmdir /s $(LIBDIR)\IO
index 16598d1..1ffa2f8 100644 (file)
@@ -153,7 +153,7 @@ d_fstatvfs='undef'
 d_fsync='undef'
 d_ftello='undef'
 d_ftime='define'
-d_getcwd='undef'
+d_getcwd='define'
 d_getespwnam='undef'
 d_getfsstat='undef'
 d_getgrent='undef'
@@ -341,7 +341,7 @@ d_statfs_s='undef'
 d_statvfs='undef'
 d_stdio_cnt_lval='define'
 d_stdio_ptr_lval='define'
-d_stdio_ptr_lval_nochange_cnt='undef'
+d_stdio_ptr_lval_nochange_cnt='define'
 d_stdio_ptr_lval_sets_cnt='undef'
 d_stdio_stream_array='undef'
 d_stdiobase='define'
index 0bf588d..bd3f401 100644 (file)
@@ -153,7 +153,7 @@ d_fstatvfs='undef'
 d_fsync='undef'
 d_ftello='undef'
 d_ftime='define'
-d_getcwd='undef'
+d_getcwd='define'
 d_getespwnam='undef'
 d_getfsstat='undef'
 d_getgrent='undef'
index b5025fb..486c5e2 100644 (file)
@@ -153,7 +153,7 @@ d_fstatvfs='undef'
 d_fsync='undef'
 d_ftello='undef'
 d_ftime='define'
-d_getcwd='undef'
+d_getcwd='define'
 d_getespwnam='undef'
 d_getfsstat='undef'
 d_getgrent='undef'
index 3fcbce8..9d0a660 100644 (file)
@@ -13,8 +13,8 @@
 /*
  * Package name      : perl5
  * Source directory  : 
- * Configuration time: Fri Jun 15 15:35:49 2001
- * Configured by     : nick
+ * Configuration time: Mon Jul  2 02:03:57 2001
+ * Configured by     : gsar
  * Target system     : 
  */
 
  */
 #define HAS_DUP2       /**/
 
-/* HAS_FCHDIR:
- *     This symbol, if defined, indicates that the fchdir routine is
- *     available to change directory using a file descriptor.
- */
-/*#define HAS_FCHDIR           /**/
-
 /* 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_ENDSERVENT               /**/
 
+/* HAS_FCHDIR:
+ *     This symbol, if defined, indicates that the fchdir routine is
+ *     available to change directory using a file descriptor.
+ */
+/*#define HAS_FCHDIR           /**/
+
 /* FCNTL_CAN_LOCK:
  *     This symbol, if defined, indicates that fcntl() can be used
  *     for file locking.  Normally on Unix systems this is defined.
  *     This symbol, if defined, indicates that the getcwd routine is
  *     available to get the current working directory.
  */
-/*#define HAS_GETCWD           /**/
+#define HAS_GETCWD             /**/
 
 /* HAS_GETESPWNAM:
  *     This symbol, if defined, indicates that the getespwnam system call is
 
 /* HAS_SAFE_BCOPY:
  *     This symbol, if defined, indicates that the bcopy routine is available
- *     to copy potentially overlapping memory blocks. Otherwise you should
+ *     to copy potentially overlapping memory blocks. Normally, you should
  *     probably use memmove() or memcpy(). If neither is defined, roll your
  *     own version.
  */
 
 /* 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.
+ *     to copy potentially overlapping memory blocks.  If you need to
+ *     copy overlapping memory blocks, you should check HAS_MEMMOVE and
+ *     use memmove() instead, if available.
  */
 /*#define HAS_SAFE_MEMCPY      /**/
 
 #define FILE_cnt(fp)   ((fp)->level)
 #define STDIO_CNT_LVALUE               /**/
 /*#define STDIO_PTR_LVAL_SETS_CNT      /**/
-/*#define STDIO_PTR_LVAL_NOCHANGE_CNT  /**/
+#define STDIO_PTR_LVAL_NOCHANGE_CNT    /**/
 #endif
 
 /* USE_STDIO_BASE:
  */
 /*#define      HAS_FLOCK_PROTO /**/
 
+/* HAS_NL_LANGINFO:
+ *     This symbol, if defined, indicates that the nl_langinfo routine is
+ *     available to return local data.  You will also need <langinfo.h>
+ *     and therefore I_LANGINFO.
+ */
+/*#define HAS_NL_LANGINFO              /**/
+
 /* HAS_SIGPROCMASK:
  *     This symbol, if defined, indicates that the sigprocmask
  *     system call is available to examine or change the signal mask
  */
 /*#define      HAS_USLEEP_PROTO        /**/
 
+/* I_LANGINFO:
+ *     This symbol, if defined, indicates that <langinfo.h> exists and
+ *     should be included.
+ */
+/*#define      I_LANGINFO              /**/
+
 #endif
index cd73f0b..5556170 100644 (file)
@@ -13,8 +13,8 @@
 /*
  * Package name      : perl5
  * Source directory  : 
- * Configuration time: Fri Jun 15 15:35:34 2001
- * Configured by     : nick
+ * Configuration time: Mon Jul  2 02:03:50 2001
+ * Configured by     : gsar
  * Target system     : 
  */
 
  */
 #define HAS_DUP2       /**/
 
-/* HAS_FCHDIR:
- *     This symbol, if defined, indicates that the fchdir routine is
- *     available to change directory using a file descriptor.
- */
-/*#define HAS_FCHDIR           /**/
-
 /* 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_ENDSERVENT               /**/
 
+/* HAS_FCHDIR:
+ *     This symbol, if defined, indicates that the fchdir routine is
+ *     available to change directory using a file descriptor.
+ */
+/*#define HAS_FCHDIR           /**/
+
 /* FCNTL_CAN_LOCK:
  *     This symbol, if defined, indicates that fcntl() can be used
  *     for file locking.  Normally on Unix systems this is defined.
  *     This symbol, if defined, indicates that the getcwd routine is
  *     available to get the current working directory.
  */
-/*#define HAS_GETCWD           /**/
+#define HAS_GETCWD             /**/
 
 /* HAS_GETESPWNAM:
  *     This symbol, if defined, indicates that the getespwnam system call is
 
 /* HAS_SAFE_BCOPY:
  *     This symbol, if defined, indicates that the bcopy routine is available
- *     to copy potentially overlapping memory blocks. Otherwise you should
+ *     to copy potentially overlapping memory blocks. Normally, you should
  *     probably use memmove() or memcpy(). If neither is defined, roll your
  *     own version.
  */
 
 /* 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.
+ *     to copy potentially overlapping memory blocks.  If you need to
+ *     copy overlapping memory blocks, you should check HAS_MEMMOVE and
+ *     use memmove() instead, if available.
  */
 /*#define HAS_SAFE_MEMCPY      /**/
 
  */
 /*#define      HAS_FLOCK_PROTO /**/
 
+/* HAS_NL_LANGINFO:
+ *     This symbol, if defined, indicates that the nl_langinfo routine is
+ *     available to return local data.  You will also need <langinfo.h>
+ *     and therefore I_LANGINFO.
+ */
+/*#define HAS_NL_LANGINFO              /**/
+
 /* HAS_SIGPROCMASK:
  *     This symbol, if defined, indicates that the sigprocmask
  *     system call is available to examine or change the signal mask
  */
 /*#define      HAS_USLEEP_PROTO        /**/
 
+/* I_LANGINFO:
+ *     This symbol, if defined, indicates that <langinfo.h> exists and
+ *     should be included.
+ */
+/*#define      I_LANGINFO              /**/
+
 #endif
index cb63dba..53da567 100644 (file)
@@ -13,8 +13,8 @@
 /*
  * Package name      : perl5
  * Source directory  : 
- * Configuration time: Fri Jun 15 15:36:07 2001
- * Configured by     : nick
+ * Configuration time: Mon Jul  2 02:04:03 2001
+ * Configured by     : gsar
  * Target system     : 
  */
 
  */
 #define HAS_DUP2       /**/
 
-/* HAS_FCHDIR:
- *     This symbol, if defined, indicates that the fchdir routine is
- *     available to change directory using a file descriptor.
- */
-/*#define HAS_FCHDIR           /**/
-
 /* 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_ENDSERVENT               /**/
 
+/* HAS_FCHDIR:
+ *     This symbol, if defined, indicates that the fchdir routine is
+ *     available to change directory using a file descriptor.
+ */
+/*#define HAS_FCHDIR           /**/
+
 /* FCNTL_CAN_LOCK:
  *     This symbol, if defined, indicates that fcntl() can be used
  *     for file locking.  Normally on Unix systems this is defined.
  *     This symbol, if defined, indicates that the getcwd routine is
  *     available to get the current working directory.
  */
-/*#define HAS_GETCWD           /**/
+#define HAS_GETCWD             /**/
 
 /* HAS_GETESPWNAM:
  *     This symbol, if defined, indicates that the getespwnam system call is
 
 /* HAS_SAFE_BCOPY:
  *     This symbol, if defined, indicates that the bcopy routine is available
- *     to copy potentially overlapping memory blocks. Otherwise you should
+ *     to copy potentially overlapping memory blocks. Normally, you should
  *     probably use memmove() or memcpy(). If neither is defined, roll your
  *     own version.
  */
 
 /* 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.
+ *     to copy potentially overlapping memory blocks.  If you need to
+ *     copy overlapping memory blocks, you should check HAS_MEMMOVE and
+ *     use memmove() instead, if available.
  */
 /*#define HAS_SAFE_MEMCPY      /**/
 
  */
 /*#define      HAS_FLOCK_PROTO /**/
 
+/* HAS_NL_LANGINFO:
+ *     This symbol, if defined, indicates that the nl_langinfo routine is
+ *     available to return local data.  You will also need <langinfo.h>
+ *     and therefore I_LANGINFO.
+ */
+/*#define HAS_NL_LANGINFO              /**/
+
 /* HAS_SIGPROCMASK:
  *     This symbol, if defined, indicates that the sigprocmask
  *     system call is available to examine or change the signal mask
  */
 /*#define      HAS_USLEEP_PROTO        /**/
 
+/* I_LANGINFO:
+ *     This symbol, if defined, indicates that <langinfo.h> exists and
+ *     should be included.
+ */
+/*#define      I_LANGINFO              /**/
+
 #endif
index f99b4ce..142bc2e 100644 (file)
-#\r
-# Makefile to build perl on Windows NT using DMAKE.\r
-# Supported compilers:\r
-#      Visual C++ 2.0 thro 6.0\r
-#      Borland C++ 5.02\r
-#      Mingw32 with gcc-2.95.2 or better  **experimental**\r
-#\r
-# This is set up to build a perl.exe that runs off a shared library\r
-# (perl57.dll).  Also makes individual DLLs for the XS extensions.\r
-#\r
-\r
-##\r
-## Make sure you read README.win32 *before* you mess with anything here!\r
-##\r
-\r
-##\r
-## Build configuration.  Edit the values below to suit your needs.\r
-##\r
-\r
-#\r
-# Set these to wherever you want "dmake install" to put your\r
-# newly built perl.\r
-#\r
-INST_DRV       *= c:\r
-INST_TOP       *= $(INST_DRV)\perl\r
-\r
-#\r
-# Comment this out if you DON'T want your perl installation to be versioned.\r
-# This means that the new installation will overwrite any files from the\r
-# old installation at the same INST_TOP location.  Leaving it enabled is\r
-# the safest route, as perl adds the extra version directory to all the\r
-# locations it installs files to.  If you disable it, an alternative\r
-# versioned installation can be obtained by setting INST_TOP above to a\r
-# path that includes an arbitrary version string.\r
-#\r
-INST_VER       *= \5.7.1\r
-\r
-#\r
-# Comment this out if you DON'T want your perl installation to have\r
-# architecture specific components.  This means that architecture-\r
-# specific files will be installed along with the architecture-neutral\r
-# files.  Leaving it enabled is safer and more flexible, in case you\r
-# want to build multiple flavors of perl and install them together in\r
-# the same location.  Commenting it out gives you a simpler\r
-# installation that is easier to understand for beginners.\r
-#\r
-INST_ARCH      *= \$(ARCHNAME)\r
-\r
-#\r
-# uncomment to enable multiple interpreters.  This is need for fork()\r
-# emulation.\r
-#\r
-USE_MULTI      *= define\r
-\r
-#\r
-# Beginnings of interpreter cloning/threads; still very incomplete.\r
-# This should be enabled to get the fork() emulation.  This needs\r
-# USE_MULTI as well.\r
-#\r
-USE_ITHREADS   *= define\r
-\r
-#\r
-# uncomment to enable the implicit "host" layer for all system calls\r
-# made by perl.  This needs USE_MULTI above.  This is also needed to\r
-# get fork().\r
-#\r
-USE_IMP_SYS    *= define\r
-\r
-#\r
-# uncomment to enable the experimental PerlIO I/O subsystem.\r
-USE_PERLIO     = define\r
-\r
-#\r
-# WARNING! This option is deprecated and will eventually go away (enable\r
-# USE_ITHREADS instead).\r
-#\r
-# uncomment to enable threads-capabilities.  This is incompatible with\r
-# USE_ITHREADS, and is only here for people who may have come to rely\r
-# on the experimental Thread support that was in 5.005.\r
-#\r
-#USE_5005THREADS       *= define\r
-\r
-#\r
-# WARNING! This option is deprecated and will eventually go away (enable\r
-# USE_MULTI instead).\r
-#\r
-# uncomment next line if you want to use the PERL_OBJECT build option.\r
-# DO NOT ENABLE unless you have legacy code that relies on the C++\r
-# CPerlObj class that was available in 5.005.  This cannot be enabled\r
-# if you ask for USE_5005THREADS above.\r
-#\r
-#USE_OBJECT    *= define\r
-\r
-#\r
-# uncomment exactly one of the following\r
-#\r
-# Visual C++ 2.x\r
-#CCTYPE                *= MSVC20\r
-# Visual C++ > 2.x and < 6.x\r
-#CCTYPE                *= MSVC\r
-# Visual C++ >= 6.x\r
-CCTYPE         *= MSVC60\r
-# Borland 5.02 or later\r
-#CCTYPE                *= BORLAND\r
-# mingw32+gcc-2.95.2 or better\r
-#CCTYPE                *= GCC\r
-\r
-#\r
-# uncomment this if your Borland compiler is older than v5.4.\r
-BCCOLD = define\r
-#\r
-# uncomment this if you want to use Borland's VCL as your CRT\r
-#BCCVCL = define\r
-\r
-#\r
-# uncomment this if you are compiling under Windows 95/98 and command.com\r
-# (not needed if you're running under 4DOS/NT 6.01 or later)\r
-#IS_WIN95      *= define\r
-\r
-#\r
-# uncomment next line if you want debug version of perl (big,slow)\r
-# If not enabled, we automatically try to use maximum optimization\r
-# with all compilers that are known to have a working optimizer.\r
-#\r
-CFG            *= Debug\r
-\r
-#\r
-# uncomment to enable use of PerlCRT.DLL when using the Visual C compiler.\r
-# It has patches that fix known bugs in older versions of MSVCRT.DLL.\r
-# This currently requires VC 5.0 with Service Pack 3 or later.\r
-# Get it from CPAN at http://www.perl.com/CPAN/authors/id/D/DO/DOUGL/\r
-# and follow the directions in the package to install.\r
-#\r
-# Not recommended if you have VC 6.x and you're not running Windows 9x.\r
-#\r
-#USE_PERLCRT   *= define\r
-\r
-#\r
-# uncomment to enable linking with setargv.obj under the Visual C\r
-# compiler. Setting this options enables perl to expand wildcards in\r
-# arguments, but it may be harder to use alternate methods like\r
-# File::DosGlob that are more powerful.  This option is supported only with\r
-# Visual C.\r
-#\r
-#USE_SETARGV   *= define\r
-\r
-#\r
-# if you have the source for des_fcrypt(), uncomment this and make sure the\r
-# file exists (see README.win32).  File should be located in the same\r
-# directory as this file.\r
-#\r
-#CRYPT_SRC     *= fcrypt.c\r
-\r
-#\r
-# if you didn't set CRYPT_SRC and if you have des_fcrypt() available in a\r
-# library, uncomment this, and make sure the library exists (see README.win32)\r
-# Specify the full pathname of the library.\r
-#\r
-#CRYPT_LIB     *= fcrypt.lib\r
-\r
-#\r
-# set this if you wish to use perl's malloc\r
-# WARNING: Turning this on/off WILL break binary compatibility with extensions\r
-# you may have compiled with/without it.  Be prepared to recompile all\r
-# extensions if you change the default.  Currently, this cannot be enabled\r
-# if you ask for USE_IMP_SYS above.\r
-#\r
-#PERL_MALLOC   *= define\r
-\r
-#\r
-# set the install locations of the compiler include/libraries\r
-# Running VCVARS32.BAT is *required* when using Visual C.\r
-# Some versions of Visual C don't define MSVCDIR in the environment,\r
-# so you may have to set CCHOME explicitly (spaces in the path name should\r
-# not be quoted)\r
-#\r
-#CCHOME                *= F:\borland\bc5\r
-CCHOME         *= $(MSVCDIR)\r
-#CCHOME                *= c:\gcc-2.95.2\r
-CCINCDIR       *= $(CCHOME)\include\r
-CCLIBDIR       *= $(CCHOME)\lib\r
-\r
-#\r
-# Additional compiler flags can be specified here.\r
-#\r
-\r
-#\r
-# This should normally be disabled.  Adding -DPERL_POLLUTE enables support\r
-# for old symbols by default, at the expense of extreme pollution.  You most\r
-# probably just want to build modules that won't compile with\r
-#         perl Makefile.PL POLLUTE=1\r
-# instead of enabling this.  Please report such modules to the respective\r
-# authors.\r
-#\r
-#BUILDOPT      += -DPERL_POLLUTE\r
-\r
-#\r
-# This should normally be disabled.  Enabling it will disable the File::Glob\r
-# implementation of CORE::glob.\r
-#\r
-#BUILDOPT      += -DPERL_EXTERNAL_GLOB\r
-\r
-#\r
-# This should normally be disabled.  Enabling it causes perl to read scripts\r
-# in text mode (which is the 5.005 behavior) and will break ByteLoader.\r
-#BUILDOPT      += -DPERL_TEXTMODE_SCRIPTS\r
-\r
-#\r
-# specify semicolon-separated list of extra directories that modules will\r
-# look for libraries (spaces in path names need not be quoted)\r
-#\r
-EXTRALIBDIRS   *=\r
-\r
-#\r
-# set this to point to cmd.exe (only needed if you use some\r
-# alternate shell that doesn't grok cmd.exe style commands)\r
-#\r
-#SHELL         *= g:\winnt\system32\cmd.exe\r
-\r
-#\r
-# set this to your email address (perl will guess a value from\r
-# from your loginname and your hostname, which may not be right)\r
-#\r
-#EMAIL         *=\r
-\r
-##\r
-## Build configuration ends.\r
-##\r
-\r
-##################### CHANGE THESE ONLY IF YOU MUST #####################\r
-\r
-.IF "$(CRYPT_SRC)$(CRYPT_LIB)" == ""\r
-D_CRYPT                = undef\r
-.ELSE\r
-D_CRYPT                = define\r
-CRYPT_FLAG     = -DHAVE_DES_FCRYPT\r
-.ENDIF\r
-\r
-.IF "$(USE_OBJECT)" == "define"\r
-PERL_MALLOC    != undef\r
-USE_5005THREADS        != undef\r
-USE_MULTI      != undef\r
-USE_IMP_SYS    != define\r
-.ENDIF\r
-\r
-PERL_MALLOC    *= undef\r
-\r
-USE_5005THREADS        *= undef\r
-\r
-.IF "$(USE_5005THREADS)" == "define"\r
-USE_ITHREADS   != undef\r
-.ENDIF\r
-\r
-.IF "$(USE_IMP_SYS)" == "define"\r
-PERL_MALLOC    != undef\r
-.ENDIF\r
-\r
-USE_MULTI      *= undef\r
-USE_OBJECT     *= undef\r
-USE_ITHREADS   *= undef\r
-USE_IMP_SYS    *= undef\r
-USE_PERLIO     *= undef\r
-USE_PERLCRT    *= undef\r
-\r
-.IF "$(USE_IMP_SYS)$(USE_MULTI)$(USE_5005THREADS)$(USE_OBJECT)" == "defineundefundefundef"\r
-USE_MULTI      != define\r
-.ENDIF\r
-\r
-.IF "$(USE_ITHREADS)$(USE_MULTI)$(USE_OBJECT)" == "defineundefundef"\r
-USE_MULTI      != define\r
-USE_5005THREADS        != undef\r
-.ENDIF\r
-\r
-.IF "$(USE_MULTI)$(USE_5005THREADS)$(USE_OBJECT)" != "undefundefundef"\r
-BUILDOPT       += -DPERL_IMPLICIT_CONTEXT\r
-.ENDIF\r
-\r
-.IF "$(USE_IMP_SYS)" != "undef"\r
-BUILDOPT       += -DPERL_IMPLICIT_SYS\r
-.ENDIF\r
-\r
-.IMPORT .IGNORE : PROCESSOR_ARCHITECTURE\r
-\r
-PROCESSOR_ARCHITECTURE *= x86\r
-\r
-.IF "$(USE_OBJECT)" == "define"\r
-ARCHNAME       = MSWin32-$(PROCESSOR_ARCHITECTURE)-object\r
-.ELIF "$(USE_5005THREADS)" == "define"\r
-ARCHNAME       = MSWin32-$(PROCESSOR_ARCHITECTURE)-thread\r
-.ELIF "$(USE_MULTI)" == "define"\r
-ARCHNAME       = MSWin32-$(PROCESSOR_ARCHITECTURE)-multi\r
-.ELSE\r
-.IF "$(USE_PERLIO)" == "define"\r
-ARCHNAME       = MSWin32-$(PROCESSOR_ARCHITECTURE)-perlio\r
-.ELSE\r
-ARCHNAME       = MSWin32-$(PROCESSOR_ARCHITECTURE)\r
-.ENDIF\r
-ARCHNAME       = MSWin32-$(PROCESSOR_ARCHITECTURE)\r
-.ENDIF\r
-\r
-.IF "$(USE_ITHREADS)" == "define"\r
-ARCHNAME       !:= $(ARCHNAME)-thread\r
-.ENDIF\r
-\r
-# Visual Studio 98 specific\r
-.IF "$(CCTYPE)" == "MSVC60"\r
-\r
-# VC 6.0 can load the socket dll on demand.  Makes the test suite\r
-# run in about 10% less time.\r
-DELAYLOAD      *= -DELAYLOAD:wsock32.dll -DELAYLOAD:shell32.dll delayimp.lib\r
-\r
-.IF "$(CFG)" == "Debug"\r
-.ELSE\r
-# VC 6.0 seems capable of compiling perl correctly with optimizations\r
-# enabled.  Anything earlier fails tests.\r
-CFG            *= Optimize\r
-.ENDIF\r
-.ENDIF\r
-\r
-ARCHDIR                = ..\lib\$(ARCHNAME)\r
-COREDIR                = ..\lib\CORE\r
-AUTODIR                = ..\lib\auto\r
-LIBDIR         = ..\lib\r
-EXTDIR         = ..\ext\r
-PODDIR         = ..\pod\r
-EXTUTILSDIR    = $(LIBDIR)\ExtUtils\r
-\r
-#\r
-INST_SCRIPT    = $(INST_TOP)$(INST_VER)\bin\r
-INST_BIN       = $(INST_SCRIPT)$(INST_ARCH)\r
-INST_LIB       = $(INST_TOP)$(INST_VER)\lib\r
-INST_ARCHLIB   = $(INST_LIB)$(INST_ARCH)\r
-INST_COREDIR   = $(INST_ARCHLIB)\CORE\r
-INST_POD       = $(INST_LIB)\pod\r
-INST_HTML      = $(INST_TOP)$(INST_VER)\html\r
-\r
-#\r
-# Programs to compile, build .lib files and link\r
-#\r
-\r
-.USESHELL :\r
-\r
-.IF "$(CCTYPE)" == "BORLAND"\r
-\r
-CC             = bcc32\r
-.IF "$(BCCOLD)" != "define"\r
-LINK32         = ilink32\r
-.ELSE\r
-LINK32         = tlink32\r
-.ENDIF\r
-LIB32          = tlib /P128\r
-IMPLIB         = implib -c\r
-RSC            = rc\r
-\r
-#\r
-# Options\r
-#\r
-INCLUDES       = -I$(COREDIR) -I.\include -I. -I.. -I"$(CCINCDIR)"\r
-#PCHFLAGS      = -H -Hc -H=c:\temp\bcmoduls.pch \r
-DEFINES                = -DWIN32 $(CRYPT_FLAG)\r
-LOCDEFS                = -DPERLDLL -DPERL_CORE\r
-SUBSYS         = console\r
-CXX_FLAG       = -P\r
-\r
-LIBC           = cw32mti.lib\r
-LIBFILES       = $(CRYPT_LIB) import32.lib $(LIBC)\r
-\r
-.IF  "$(CFG)" == "Debug"\r
-OPTIMIZE       = -v -D_RTLDLL -DDEBUGGING\r
-LINK_DBG       = -v\r
-.ELSE\r
-OPTIMIZE       = -O2 -D_RTLDLL\r
-LINK_DBG       =\r
-.ENDIF\r
-\r
-CFLAGS         = -w -g0 -tWM -tWD $(INCLUDES) $(DEFINES) $(LOCDEFS) \\r
-               $(PCHFLAGS) $(OPTIMIZE)\r
-LINK_FLAGS     = $(LINK_DBG) -L"$(INST_COREDIR)"  -L"$(CCLIBDIR)"\r
-OBJOUT_FLAG    = -o\r
-EXEOUT_FLAG    = -e\r
-LIBOUT_FLAG    =\r
-.IF "$(BCCOLD)" != "define"\r
-LINK_FLAGS     += -Gn\r
-DEFINES  += -D_MT -D__USELOCALES__ -D_WIN32_WINNT=0x0410\r
-.END\r
-.IF "$(BCCVCL)" == "define"\r
-LIBC           = cp32mti.lib vcl.lib vcl50.lib vclx50.lib vcle50.lib\r
-LINK_FLAGS     += -L"$(CCLIBDIR)\Release"\r
-.END\r
-\r
-\r
-.ELIF "$(CCTYPE)" == "GCC"\r
-\r
-CC             = gcc\r
-LINK32         = gcc\r
-LIB32          = ar rc\r
-IMPLIB         = dlltool\r
-RSC            = rc\r
-\r
-i = .i\r
-o = .o\r
-a = .a\r
-\r
-#\r
-# Options\r
-#\r
-\r
-INCLUDES       = -I.\include -I. -I.. -I$(COREDIR)\r
-DEFINES                = -DWIN32 $(CRYPT_FLAG)\r
-LOCDEFS                = -DPERLDLL -DPERL_CORE\r
-SUBSYS         = console\r
-CXX_FLAG       = -xc++\r
-\r
-LIBC           = -lmsvcrt\r
-\r
-# same libs as MSVC\r
-LIBFILES       = $(CRYPT_LIB) $(LIBC) \\r
-                 -lmoldname -lkernel32 -luser32 -lgdi32 \\r
-                 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 \\r
-                 -loleaut32 -lnetapi32 -luuid -lwsock32 -lmpr \\r
-                 -lwinmm -lversion -lodbc32\r
-\r
-.IF  "$(CFG)" == "Debug"\r
-OPTIMIZE       = -g -O2 -DDEBUGGING\r
-LINK_DBG       = -g\r
-.ELSE\r
-OPTIMIZE       = -g -O2\r
-LINK_DBG       = -g\r
-.ENDIF\r
-\r
-CFLAGS         = $(INCLUDES) $(DEFINES) $(LOCDEFS) $(OPTIMIZE)\r
-LINK_FLAGS     = $(LINK_DBG) -L"$(INST_COREDIR)" -L"$(CCLIBDIR)"\r
-OBJOUT_FLAG    = -o\r
-EXEOUT_FLAG    = -o\r
-LIBOUT_FLAG    =\r
-\r
-# NOTE: we assume that GCC uses MSVCRT.DLL\r
-BUILDOPT       += -fno-strict-aliasing -DPERL_MSVCRT_READFIX\r
-\r
-.ELSE\r
-\r
-CC             = cl\r
-LINK32         = link\r
-LIB32          = $(LINK32) -lib\r
-RSC            = rc\r
-\r
-#\r
-# Options\r
-#\r
-\r
-INCLUDES       = -I$(COREDIR) -I.\include -I. -I..\r
-#PCHFLAGS      = -Fpc:\temp\vcmoduls.pch -YX\r
-DEFINES                = -DWIN32 -D_CONSOLE -DNO_STRICT $(CRYPT_FLAG)\r
-LOCDEFS                = -DPERLDLL -DPERL_CORE\r
-SUBSYS         = console\r
-CXX_FLAG       = -TP -GX\r
-\r
-.IF "$(USE_PERLCRT)" != "define"\r
-LIBC   = msvcrt.lib\r
-.ELSE\r
-LIBC   = PerlCRT.lib\r
-.ENDIF\r
-\r
-PERLEXE_RES    =\r
-PERLDLL_RES    =\r
-\r
-.IF  "$(CFG)" == "Debug"\r
-.IF "$(CCTYPE)" == "MSVC20"\r
-OPTIMIZE       = -Od -MD -Z7 -DDEBUGGING\r
-LINK_DBG       = -debug -pdb:none\r
-.ELSE\r
-# -Zi requires .pdb file(s)\r
-#OPTIMIZE      = -Od -MD -Zi -DDEBUGGING\r
-#LINK_DBG      = -debug\r
-OPTIMIZE       = -O1 -MD -Z7 -DDEBUGGING\r
-LINK_DBG       = -debug -debugtype:both -pdb:none\r
-.ENDIF\r
-.ELSE\r
-.IF "$(CFG)" == "Optimize"\r
-# -O1 yields smaller code, which turns out to be faster than -O2\r
-#OPTIMIZE      = -O2 -MD -DNDEBUG\r
-OPTIMIZE       = -O1 -MD -DNDEBUG\r
-.ELSE\r
-OPTIMIZE       = -Od -MD -DNDEBUG\r
-.ENDIF\r
-LINK_DBG       = -release\r
-.ENDIF\r
-\r
-LIBBASEFILES   = $(CRYPT_LIB) \\r
-               oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib \\r
-               comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib \\r
-               netapi32.lib uuid.lib wsock32.lib mpr.lib winmm.lib \\r
-               version.lib odbc32.lib odbccp32.lib\r
-\r
-# we add LIBC here, since we may be using PerlCRT.dll\r
-LIBFILES       = $(LIBBASEFILES) $(LIBC)\r
-\r
-CFLAGS         = -nologo -Gf -W3 $(INCLUDES) $(DEFINES) $(LOCDEFS) \\r
-               $(PCHFLAGS) $(OPTIMIZE)\r
-LINK_FLAGS     = -nologo -nodefaultlib $(LINK_DBG) \\r
-               -libpath:"$(INST_COREDIR)" \\r
-               -machine:$(PROCESSOR_ARCHITECTURE)\r
-OBJOUT_FLAG    = -Fo\r
-EXEOUT_FLAG    = -Fe\r
-LIBOUT_FLAG    = /out:\r
-\r
-.IF "$(USE_PERLCRT)" != "define"\r
-BUILDOPT       += -DPERL_MSVCRT_READFIX\r
-.ENDIF\r
-\r
-.ENDIF\r
-\r
-.IF "$(USE_OBJECT)" == "define"\r
-OPTIMIZE       += $(CXX_FLAG)\r
-BUILDOPT       += -DPERL_OBJECT\r
-.ENDIF\r
-\r
-CFLAGS_O       = $(CFLAGS) $(BUILDOPT)\r
-\r
-# used to allow local linking flags that are not propogated into Config.pm,\r
-# currently unused\r
-#   -- BKS, 12-12-1999\r
-PRIV_LINK_FLAGS        *=\r
-BLINK_FLAGS    = $(PRIV_LINK_FLAGS) $(LINK_FLAGS)\r
-\r
-#################### do not edit below this line #######################\r
-############# NO USER-SERVICEABLE PARTS BEYOND THIS POINT ##############\r
-\r
-o *= .obj\r
-a *= .lib\r
-\r
-LKPRE          = INPUT (\r
-LKPOST         = )\r
-\r
-#\r
-# Rules\r
-#\r
-\r
-.SUFFIXES : .c .i $(o) .dll $(a) .exe .rc .res\r
-\r
-.c$(o):\r
-       $(CC) -c $(null,$(<:d) $(NULL) -I$(<:d)) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $<\r
-\r
-.c.i:\r
-       $(CC) -c $(null,$(<:d) $(NULL) -I$(<:d)) $(CFLAGS_O) -E $< >$@\r
-\r
-.y.c:\r
-       $(NOOP)\r
-\r
-$(o).dll:\r
-.IF "$(CCTYPE)" == "BORLAND"\r
-       $(LINK32) -Tpd -ap $(BLINK_FLAGS) c0d32$(o) $<,$@,,$(LIBFILES),$(*B).def\r
-       $(IMPLIB) $(*B).lib $@\r
-.ELIF "$(CCTYPE)" == "GCC"\r
-       $(LINK32) -o $@ $(BLINK_FLAGS) $< $(LIBFILES)\r
-       $(IMPLIB) --input-def $(*B).def --output-lib $(*B).a $@\r
-.ELSE\r
-       $(LINK32) -dll -subsystem:windows -implib:$(*B).lib -def:$(*B).def \\r
-           -out:$@ $(BLINK_FLAGS) $(LIBFILES) $< $(LIBPERL)\r
-.ENDIF\r
-\r
-.rc.res:\r
-       $(RSC) -i.. $<\r
-\r
-#\r
-# various targets\r
-MINIPERL       = ..\miniperl.exe\r
-MINIDIR                = .\mini\r
-PERLEXE                = ..\perl.exe\r
-WPERLEXE       = ..\wperl.exe\r
-GLOBEXE                = ..\perlglob.exe\r
-CONFIGPM       = ..\lib\Config.pm\r
-MINIMOD                = ..\lib\ExtUtils\Miniperl.pm\r
-X2P            = ..\x2p\a2p.exe\r
-\r
-# Nominate a target which causes extensions to be re-built\r
-# This used to be $(PERLEXE), but at worst it is the .dll that they depend\r
-# on and really only the interface - i.e. the .def file used to export symbols\r
-# from the .dll\r
-PERLDEP = perldll.def\r
-\r
-\r
-PL2BAT         = bin\pl2bat.pl\r
-GLOBBAT                = bin\perlglob.bat\r
-\r
-UTILS          =                       \\r
-               ..\utils\h2ph           \\r
-               ..\utils\splain         \\r
-               ..\utils\dprofpp        \\r
-               ..\utils\perlbug        \\r
-               ..\utils\pl2pm          \\r
-               ..\utils\c2ph           \\r
-               ..\utils\h2xs           \\r
-               ..\utils\perldoc        \\r
-               ..\utils\perlcc         \\r
-               ..\pod\checkpods        \\r
-               ..\pod\pod2html         \\r
-               ..\pod\pod2latex        \\r
-               ..\pod\pod2man          \\r
-               ..\pod\pod2text         \\r
-               ..\pod\pod2usage        \\r
-               ..\pod\podchecker       \\r
-               ..\pod\podselect        \\r
-               ..\x2p\find2perl        \\r
-               ..\x2p\s2p              \\r
-               bin\exetype.pl          \\r
-               bin\runperl.pl          \\r
-               bin\pl2bat.pl           \\r
-               bin\perlglob.pl         \\r
-               bin\search.pl\r
-\r
-.IF "$(CCTYPE)" == "BORLAND"\r
-\r
-CFGSH_TMPL     = config.bc\r
-CFGH_TMPL      = config_H.bc\r
-\r
-.ELIF "$(CCTYPE)" == "GCC"\r
-\r
-CFGSH_TMPL     = config.gc\r
-CFGH_TMPL      = config_H.gc\r
-PERLIMPLIB     = ..\libperl57$(a)\r
-\r
-.ELSE\r
-\r
-CFGSH_TMPL     = config.vc\r
-CFGH_TMPL      = config_H.vc\r
-\r
-.ENDIF\r
-\r
-# makedef.pl must be updated if this changes, and this should normally\r
-# only change when there is an incompatible revision of the public API.\r
-# XXX so why did we change it from perl56 to perl57?\r
-PERLIMPLIB     *= ..\perl57$(a)\r
-PERLDLL                = ..\perl57.dll\r
-\r
-XCOPY          = xcopy /f /r /i /d\r
-RCOPY          = xcopy /f /r /i /e /d\r
-NOOP           = @echo\r
-\r
-#\r
-# filenames given to xsubpp must have forward slashes (since it puts\r
-# full pathnames in #line strings)\r
-XSUBPP         = ..\$(MINIPERL) -I..\..\lib ..\$(EXTUTILSDIR)\xsubpp \\r
-               -C++ -prototypes\r
-\r
-MICROCORE_SRC  =               \\r
-               ..\av.c         \\r
-               ..\deb.c        \\r
-               ..\doio.c       \\r
-               ..\doop.c       \\r
-               ..\dump.c       \\r
-               ..\globals.c    \\r
-               ..\gv.c         \\r
-               ..\hv.c         \\r
-               ..\locale.c     \\r
-               ..\mg.c         \\r
-               ..\numeric.c    \\r
-               ..\op.c         \\r
-               ..\perl.c       \\r
-               ..\perlapi.c    \\r
-               ..\perly.c      \\r
-               ..\pp.c         \\r
-               ..\pp_ctl.c     \\r
-               ..\pp_hot.c     \\r
-               ..\pp_pack.c    \\r
-               ..\pp_sys.c     \\r
-               ..\regcomp.c    \\r
-               ..\regexec.c    \\r
-               ..\run.c        \\r
-               ..\scope.c      \\r
-               ..\sv.c         \\r
-               ..\taint.c      \\r
-               ..\toke.c       \\r
-               ..\universal.c  \\r
-               ..\utf8.c       \\r
-               ..\util.c       \\r
-               ..\xsutils.c\r
-\r
-EXTRACORE_SRC  += perllib.c\r
-\r
-.IF "$(PERL_MALLOC)" == "define"\r
-EXTRACORE_SRC  += ..\malloc.c\r
-.ENDIF\r
-\r
-.IF "$(USE_OBJECT)" != "define"\r
-EXTRACORE_SRC  += ..\perlio.c\r
-.ENDIF\r
-\r
-WIN32_SRC      =               \\r
-               .\win32.c       \\r
-               .\win32io.c     \\r
-               .\win32sck.c    \\r
-               .\win32thread.c\r
-\r
-.IF "$(CRYPT_SRC)" != ""\r
-WIN32_SRC      += .\$(CRYPT_SRC)\r
-.ENDIF\r
-\r
-DLL_SRC                = $(DYNALOADER).c\r
-\r
-X2P_SRC                =               \\r
-               ..\x2p\a2p.c    \\r
-               ..\x2p\hash.c   \\r
-               ..\x2p\str.c    \\r
-               ..\x2p\util.c   \\r
-               ..\x2p\walk.c\r
-\r
-CORE_NOCFG_H   =               \\r
-               ..\av.h         \\r
-               ..\cop.h        \\r
-               ..\cv.h         \\r
-               ..\dosish.h     \\r
-               ..\embed.h      \\r
-               ..\form.h       \\r
-               ..\gv.h         \\r
-               ..\handy.h      \\r
-               ..\hv.h         \\r
-               ..\iperlsys.h   \\r
-               ..\mg.h         \\r
-               ..\nostdio.h    \\r
-               ..\op.h         \\r
-               ..\opcode.h     \\r
-               ..\perl.h       \\r
-               ..\perlapi.h    \\r
-               ..\perlsdio.h   \\r
-               ..\perlsfio.h   \\r
-               ..\perly.h      \\r
-               ..\pp.h         \\r
-               ..\proto.h      \\r
-               ..\regexp.h     \\r
-               ..\scope.h      \\r
-               ..\sv.h         \\r
-               ..\thread.h     \\r
-               ..\unixish.h    \\r
-               ..\utf8.h       \\r
-               ..\util.h       \\r
-               ..\warnings.h   \\r
-               ..\XSUB.h       \\r
-               ..\EXTERN.h     \\r
-               ..\perlvars.h   \\r
-               ..\intrpvar.h   \\r
-               ..\thrdvar.h    \\r
-               .\include\dirent.h      \\r
-               .\include\netdb.h       \\r
-               .\include\sys\socket.h  \\r
-               .\win32.h\r
-\r
-CORE_H         = $(CORE_NOCFG_H) .\config.h\r
-\r
-MICROCORE_OBJ  = $(MICROCORE_SRC:db:+$(o))\r
-CORE_OBJ       = $(MICROCORE_OBJ) $(EXTRACORE_SRC:db:+$(o))\r
-WIN32_OBJ      = $(WIN32_SRC:db:+$(o))\r
-MINICORE_OBJ   = $(MINIDIR)\{$(MICROCORE_OBJ:f) miniperlmain$(o) perlio$(o)}\r
-MINIWIN32_OBJ  = $(MINIDIR)\{$(WIN32_OBJ:f)}\r
-MINI_OBJ       = $(MINICORE_OBJ) $(MINIWIN32_OBJ)\r
-DLL_OBJ                = $(DLL_SRC:db:+$(o))\r
-X2P_OBJ                = $(X2P_SRC:db:+$(o))\r
-\r
-PERLDLL_OBJ    = $(CORE_OBJ)\r
-PERLEXE_OBJ    = perlmain$(o)\r
-\r
-PERLDLL_OBJ    += $(WIN32_OBJ) $(DLL_OBJ)\r
-\r
-.IF "$(USE_SETARGV)" != ""\r
-SETARGV_OBJ    = setargv$(o)\r
-.ENDIF\r
-\r
-DYNAMIC_EXT    = Socket IO Fcntl Opcode SDBM_File POSIX attrs Thread B re \\r
-               Data/Dumper Devel/Peek ByteLoader Devel/DProf File/Glob \\r
-               Sys/Hostname Storable Filter/Util/Call Encode \\r
-               Digest/MD5 PerlIO/Scalar MIME/Base64 Time/HiRes Time/Piece\r
-STATIC_EXT     = DynaLoader\r
-NONXS_EXT      = Errno\r
-\r
-DYNALOADER     = $(EXTDIR)\DynaLoader\DynaLoader\r
-\r
-POD2HTML       = $(PODDIR)\pod2html\r
-POD2MAN                = $(PODDIR)\pod2man\r
-POD2LATEX      = $(PODDIR)\pod2latex\r
-POD2TEXT       = $(PODDIR)\pod2text\r
-\r
-# vars must be separated by "\t+~\t+", since we're using the tempfile\r
-# version of config_sh.pl (we were overflowing someone's buffer by\r
-# trying to fit them all on the command line)\r
-#      -- BKS 10-17-1999\r
-CFG_VARS       =                                       \\r
-               INST_DRV=$(INST_DRV)            ~       \\r
-               INST_TOP=$(INST_TOP:s/\/\\/)    ~       \\r
-               INST_VER=$(INST_VER:s/\/\\/)    ~       \\r
-               INST_ARCH=$(INST_ARCH)          ~       \\r
-               archname=$(ARCHNAME)            ~       \\r
-               cc=$(CC)                        ~       \\r
-               ld=$(LINK32)                    ~       \\r
-               ccflags=$(OPTIMIZE) $(DEFINES) $(BUILDOPT)      ~       \\r
-               cf_email=$(EMAIL)               ~       \\r
-               d_crypt=$(D_CRYPT)              ~       \\r
-               d_mymalloc=$(PERL_MALLOC)       ~       \\r
-               libs=$(LIBFILES:f)              ~       \\r
-               incpath=$(CCINCDIR:s/\/\\/)     ~       \\r
-               libperl=$(PERLIMPLIB:f)         ~       \\r
-               libpth=$(CCLIBDIR:s/\/\\/);$(EXTRALIBDIRS:s/\/\\/)      ~       \\r
-               libc=$(LIBC)                    ~       \\r
-               make=dmake                      ~       \\r
-               _o=$(o) obj_ext=$(o)            ~       \\r
-               _a=$(a) lib_ext=$(a)            ~       \\r
-               static_ext=$(STATIC_EXT)        ~       \\r
-               use5005threads=$(USE_5005THREADS)       ~       \\r
-               useithreads=$(USE_ITHREADS)     ~       \\r
-               usethreads=$(USE_5005THREADS)   ~       \\r
-               usemultiplicity=$(USE_MULTI)    ~       \\r
-               useperlio=$(USE_PERLIO)         ~       \\r
-               LINK_FLAGS=$(LINK_FLAGS:s/\/\\/)                ~       \\r
-               optimize=$(OPTIMIZE)\r
-\r
-#\r
-# set up targets varying between Win95 and WinNT builds\r
-#\r
-\r
-.IF "$(IS_WIN95)" == "define"\r
-MK2            = .\makefile.95\r
-RIGHTMAKE      = __switch_makefiles\r
-NOOP           = @rem\r
-.ELSE\r
-MK2            = __not_needed\r
-RIGHTMAKE      =\r
-.ENDIF\r
-\r
-#\r
-# Top targets\r
-#\r
-\r
-all : .\config.h $(GLOBEXE) $(MINIPERL) $(MK2)         \\r
-       $(RIGHTMAKE) $(MINIMOD) $(CONFIGPM) $(PERLEXE)  \\r
-       $(X2P) Extensions \r
-\r
-$(DYNALOADER)$(o) : $(DYNALOADER).c $(CORE_H) $(EXTDIR)\DynaLoader\dlutils.c\r
-\r
-#----------------------------------------------------------------\r
-\r
-#-------------------- BEGIN Win95 SPECIFIC ----------------------\r
-\r
-# this target is a jump-off point for Win95\r
-#  1. it switches to the Win95-specific makefile if it exists\r
-#     (__do_switch_makefiles)\r
-#  2. it prints a message when the Win95-specific one finishes (__done)\r
-#  3. it then kills this makefile by trying to make __no_such_target\r
-\r
-__switch_makefiles: __do_switch_makefiles __done __no_such_target\r
-\r
-__do_switch_makefiles:\r
-.IF "$(NOTFIRST)" != "true"\r
-       if exist $(MK2) $(MAKE:s/-S//) -f $(MK2) $(MAKETARGETS) NOTFIRST=true\r
-.ELSE\r
-       $(NOOP)\r
-.ENDIF\r
-\r
-.IF "$(NOTFIRST)" != "true"\r
-__done:\r
-       @echo Build process complete. Ignore any errors after this message.\r
-       @echo Run "dmake test" to test and "dmake install" to install\r
-\r
-.ELSE\r
-# dummy targets for Win95-specific makefile\r
-\r
-__done:\r
-       $(NOOP)\r
-\r
-__no_such_target:\r
-       $(NOOP)\r
-\r
-.ENDIF\r
-\r
-# This target is used to generate the new makefile (.\makefile.95) for Win95\r
-\r
-.\makefile.95: .\makefile.mk\r
-       $(MINIPERL) genmk95.pl makefile.mk $(MK2)\r
-\r
-#--------------------- END Win95 SPECIFIC ---------------------\r
-\r
-# a blank target for when builds don't need to do certain things\r
-# this target added for Win95 port but used to keep the WinNT port able to\r
-# use this file\r
-__not_needed:\r
-       $(NOOP)\r
-\r
-$(GLOBEXE) : perlglob$(o)\r
-.IF "$(CCTYPE)" == "BORLAND"\r
-       $(CC) -c -w -v -tWM -I"$(CCINCDIR)" perlglob.c\r
-       $(LINK32) -Tpe -ap $(BLINK_FLAGS) c0x32$(o) perlglob$(o) \\r
-           "$(CCLIBDIR)\32BIT\wildargs$(o)",$@,,import32.lib cw32mt.lib,\r
-.ELIF "$(CCTYPE)" == "GCC"\r
-       $(LINK32) $(BLINK_FLAGS) -mconsole -o $@ perlglob$(o) $(LIBFILES)\r
-.ELSE\r
-       $(LINK32) $(BLINK_FLAGS) $(LIBFILES) -out:$@ -subsystem:$(SUBSYS) \\r
-           perlglob$(o) setargv$(o)\r
-.ENDIF\r
-\r
-perlglob$(o)  : perlglob.c\r
-\r
-config.w32 : $(CFGSH_TMPL)\r
-       copy $(CFGSH_TMPL) config.w32\r
-\r
-.\config.h : $(CFGH_TMPL) $(CORE_NOCFG_H)\r
-       -del /f config.h\r
-       copy $(CFGH_TMPL) config.h\r
-\r
-..\config.sh : config.w32 $(MINIPERL) config_sh.PL FindExt.pm\r
-       $(MINIPERL) -I..\lib config_sh.PL --cfgsh-option-file \\r
-           $(mktmp $(CFG_VARS)) config.w32 > ..\config.sh\r
-\r
-# this target is for when changes to the main config.sh happen\r
-# edit config.{b,v,g}c and make this target once for each supported\r
-# compiler (e.g. `dmake CCTYPE=BORLAND regen_config_h`)\r
-regen_config_h:\r
-       perl config_sh.PL --cfgsh-option-file $(mktmp $(CFG_VARS)) \\r
-           $(CFGSH_TMPL) > ..\config.sh\r
-       -cd .. && del /f perl.exe\r
-       cd .. && perl configpm\r
-       -del /f $(CFGH_TMPL)\r
-       -mkdir $(COREDIR)\r
-       -perl -I..\lib config_h.PL "INST_VER=$(INST_VER)"\r
-       rename config.h $(CFGH_TMPL)\r
-\r
-$(CONFIGPM) : $(MINIPERL) ..\config.sh config_h.PL ..\minimod.pl\r
-       cd .. && miniperl configpm\r
-       if exist lib\* $(RCOPY) lib\*.* ..\lib\$(NULL)\r
-       $(XCOPY) ..\*.h $(COREDIR)\*.*\r
-       $(XCOPY) *.h $(COREDIR)\*.*\r
-       $(XCOPY) ..\ext\re\re.pm $(LIBDIR)\*.*\r
-       $(RCOPY) include $(COREDIR)\*.*\r
-       $(MINIPERL) -I..\lib config_h.PL "INST_VER=$(INST_VER)" \\r
-           || $(MAKE) $(MAKEMACROS) $(CONFIGPM) $(MAKEFILE)\r
-\r
-$(MINIPERL) : $(MINIDIR) $(MINI_OBJ) $(CRTIPMLIBS)\r
-.IF "$(CCTYPE)" == "BORLAND"\r
-       $(LINK32) -Tpe -ap $(BLINK_FLAGS) \\r
-           @$(mktmp c0x32$(o) $(MINI_OBJ:s,\,\\),$(@:s,\,\\),,$(LIBFILES),)\r
-.ELIF "$(CCTYPE)" == "GCC"\r
-       $(LINK32) -v -mconsole -o $@ $(BLINK_FLAGS) \\r
-           $(mktmp $(LKPRE) $(MINI_OBJ:s,\,\\) $(LIBFILES) $(LKPOST))\r
-.ELSE\r
-       $(LINK32) -subsystem:console -out:$@ \\r
-           @$(mktmp $(BLINK_FLAGS) $(LIBFILES) $(MINI_OBJ:s,\,\\))\r
-.ENDIF\r
-\r
-$(MINIDIR) :\r
-       if not exist "$(MINIDIR)" mkdir "$(MINIDIR)"\r
-\r
-$(MINICORE_OBJ) : $(CORE_NOCFG_H)\r
-       $(CC) -c $(CFLAGS) -DPERL_EXTERNAL_GLOB $(OBJOUT_FLAG)$@ ..\$(*B).c\r
-\r
-$(MINIWIN32_OBJ) : $(CORE_NOCFG_H)\r
-       $(CC) -c $(CFLAGS) $(OBJOUT_FLAG)$@ $(*B).c\r
-\r
-# -DPERL_IMPLICIT_SYS needs C++ for perllib.c\r
-# rules wrapped in .IFs break Win9X build (we end up with unbalanced []s unless\r
-# unless the .IF is true), so instead we use a .ELSE with the default.\r
-# This is the only file that depends on perlhost.h, vmem.h, and vdir.h\r
-\r
-perllib$(o)    : perllib.c .\perlhost.h .\vdir.h .\vmem.h\r
-.IF "$(USE_IMP_SYS)$(USE_OBJECT)" == "defineundef"\r
-       $(CC) -c -I. $(CFLAGS_O) $(CXX_FLAG) $(OBJOUT_FLAG)$@ perllib.c\r
-.ELSE\r
-       $(CC) -c -I. $(CFLAGS_O) $(OBJOUT_FLAG)$@ perllib.c\r
-.ENDIF\r
-\r
-# 1. we don't want to rebuild miniperl.exe when config.h changes\r
-# 2. we don't want to rebuild miniperl.exe with non-default config.h\r
-$(MINI_OBJ)    : $(CORE_NOCFG_H)\r
-\r
-$(WIN32_OBJ)   : $(CORE_H)\r
-$(CORE_OBJ)    : $(CORE_H)\r
-$(DLL_OBJ)     : $(CORE_H)\r
-$(X2P_OBJ)     : $(CORE_H)\r
-\r
-perldll.def : $(MINIPERL) $(CONFIGPM) ..\global.sym ..\pp.sym ..\makedef.pl\r
-       $(MINIPERL) -w ..\makedef.pl PLATFORM=win32 $(OPTIMIZE) $(DEFINES) \\r
-       $(BUILDOPT) CCTYPE=$(CCTYPE) > perldll.def\r
-\r
-$(PERLDLL): perldll.def $(PERLDLL_OBJ) $(PERLDLL_RES)\r
-.IF "$(CCTYPE)" == "BORLAND"\r
-       $(LINK32) -Tpd -ap $(BLINK_FLAGS) \\r
-           @$(mktmp c0d32$(o) $(PERLDLL_OBJ:s,\,\\)\n \\r
-               $@,\n \\r
-               $(LIBFILES)\n \\r
-               perldll.def\n)\r
-       $(IMPLIB) $*.lib $@\r
-.ELIF "$(CCTYPE)" == "GCC"\r
-       $(LINK32) -mdll -o $@ -Wl,--base-file -Wl,perl.base $(BLINK_FLAGS) \\r
-           $(mktmp $(LKPRE) $(PERLDLL_OBJ:s,\,\\) $(LIBFILES) $(LKPOST))\r
-       dlltool --output-lib $(PERLIMPLIB) \\r
-               --dllname $(PERLDLL:b).dll \\r
-               --def perldll.def \\r
-               --base-file perl.base \\r
-               --output-exp perl.exp\r
-       $(LINK32) -mdll -o $@ $(BLINK_FLAGS) \\r
-           $(mktmp $(LKPRE) $(PERLDLL_OBJ:s,\,\\) $(LIBFILES) \\r
-               perl.exp $(LKPOST))\r
-.ELSE\r
-       $(LINK32) -dll -def:perldll.def -out:$@ \\r
-           @$(mktmp -base:0x28000000 $(BLINK_FLAGS) $(DELAYLOAD) $(LIBFILES) \\r
-               $(PERLDLL_RES) $(PERLDLL_OBJ:s,\,\\))\r
-.ENDIF\r
-       $(XCOPY) $(PERLIMPLIB) $(COREDIR)\r
-\r
-$(MINIMOD) : $(MINIPERL) ..\minimod.pl\r
-       cd .. && miniperl minimod.pl > lib\ExtUtils\Miniperl.pm\r
-\r
-..\x2p\a2p$(o) : ..\x2p\a2p.c\r
-       $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\a2p.c\r
-\r
-..\x2p\hash$(o) : ..\x2p\hash.c\r
-       $(CC) -I..\x2p  $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\hash.c\r
-\r
-..\x2p\str$(o) : ..\x2p\str.c\r
-       $(CC) -I..\x2p  $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\str.c\r
-\r
-..\x2p\util$(o) : ..\x2p\util.c\r
-       $(CC) -I..\x2p  $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\util.c\r
-\r
-..\x2p\walk$(o) : ..\x2p\walk.c\r
-       $(CC) -I..\x2p  $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\walk.c\r
-\r
-$(X2P) : $(MINIPERL) $(X2P_OBJ)\r
-       $(MINIPERL) ..\x2p\find2perl.PL\r
-       $(MINIPERL) ..\x2p\s2p.PL\r
-.IF "$(CCTYPE)" == "BORLAND"\r
-       $(LINK32) -Tpe -ap $(BLINK_FLAGS) \\r
-           @$(mktmp c0x32$(o) $(X2P_OBJ:s,\,\\),$(@:s,\,\\),,$(LIBFILES),)\r
-.ELIF "$(CCTYPE)" == "GCC"\r
-       $(LINK32) -v -o $@ $(BLINK_FLAGS) \\r
-           $(mktmp $(LKPRE) $(X2P_OBJ:s,\,\\) $(LIBFILES) $(LKPOST))\r
-.ELSE\r
-       $(LINK32) -subsystem:console -out:$@ \\r
-           @$(mktmp $(BLINK_FLAGS) $(LIBFILES) $(X2P_OBJ:s,\,\\))\r
-.ENDIF\r
-\r
-perlmain.c : runperl.c\r
-       copy runperl.c perlmain.c\r
-\r
-perlmain$(o) : perlmain.c\r
-       $(CC) $(CFLAGS_O) -UPERLDLL $(OBJOUT_FLAG)$@ -c perlmain.c\r
-\r
-$(PERLEXE): $(PERLDLL) $(CONFIGPM) $(PERLEXE_OBJ) $(PERLEXE_RES)\r
-.IF "$(CCTYPE)" == "BORLAND"\r
-       $(LINK32) -Tpe -ap $(BLINK_FLAGS) \\r
-           @$(mktmp c0x32$(o) $(PERLEXE_OBJ:s,\,\\)\n \\r
-           $(@:s,\,\\),\n \\r
-           $(PERLIMPLIB) $(LIBFILES)\n)\r
-.ELIF "$(CCTYPE)" == "GCC"\r
-       $(LINK32) -mconsole -o $@ $(BLINK_FLAGS)  \\r
-           $(PERLEXE_OBJ) $(PERLIMPLIB) $(LIBFILES)\r
-.ELSE\r
-       $(LINK32) -subsystem:console -out:$@ -stack:0x1000000 $(BLINK_FLAGS) \\r
-           $(LIBFILES) $(PERLEXE_OBJ) $(SETARGV_OBJ) $(PERLIMPLIB) $(PERLEXE_RES)\r
-.ENDIF\r
-       copy $(PERLEXE) $(WPERLEXE)\r
-       $(MINIPERL) -I..\lib bin\exetype.pl $(WPERLEXE) WINDOWS\r
-       copy splittree.pl ..\r
-       $(MINIPERL) -I..\lib ..\splittree.pl "../LIB" $(AUTODIR)\r
-\r
-$(DYNALOADER).c: $(MINIPERL) $(EXTDIR)\DynaLoader\dl_win32.xs $(CONFIGPM)\r
-       if not exist $(AUTODIR) mkdir $(AUTODIR)\r
-       cd $(EXTDIR)\$(*B) && ..\$(MINIPERL) -I..\..\lib $(*B)_pm.PL\r
-       cd $(EXTDIR)\$(*B) && ..\$(MINIPERL) -I..\..\lib XSLoader_pm.PL\r
-       $(XCOPY) $(EXTDIR)\$(*B)\$(*B).pm $(LIBDIR)\$(NULL)\r
-       $(XCOPY) $(EXTDIR)\$(*B)\XSLoader.pm $(LIBDIR)\$(NULL)\r
-       cd $(EXTDIR)\$(*B) && $(XSUBPP) dl_win32.xs > $(*B).c\r
-       $(XCOPY) $(EXTDIR)\$(*B)\dlutils.c .\r
-\r
-$(EXTDIR)\DynaLoader\dl_win32.xs: dl_win32.xs\r
-       copy dl_win32.xs $(EXTDIR)\DynaLoader\dl_win32.xs\r
-\r
-#----------------------------------------------------------------------------------\r
-Extensions : buildext.pl $(PERLDEP) $(CONFIGPM) \r
-       $(MINIPERL) -I..\lib buildext.pl $(MAKE) $(PERLDEP) $(EXTDIR)\r
-\r
-Extensions_clean : \r
-       -if exist $(MINIPERL) $(MINIPERL) -I..\lib buildext.pl $(MAKE) $(PERLDEP) $(EXTDIR) clean\r
-\r
-#----------------------------------------------------------------------------------\r
-\r
-\r
-doc: $(PERLEXE)\r
-       $(PERLEXE) -I..\lib ..\installhtml --podroot=.. --htmldir=./html \\r
-           --podpath=pod:lib:ext:utils --htmlroot="file://$(INST_HTML:s,:,|,)"\\r
-           --libpod=perlfunc:perlguts:perlvar:perlrun:perlop --recurse\r
-\r
-utils: $(PERLEXE) $(X2P)\r
-       cd ..\utils && $(MAKE) PERL=$(MINIPERL)\r
-       copy ..\README.aix      ..\pod\perlaix.pod\r
-       copy ..\README.amiga    ..\pod\perlamiga.pod\r
-       copy ..\README.apollo   ..\pod\perlapollo.pod\r
-       copy ..\README.beos     ..\pod\perlbeos.pod\r
-       copy ..\README.bs2000   ..\pod\perlbs2000.pod\r
-       copy ..\README.cygwin   ..\pod\perlcygwin.pod\r
-       copy ..\README.dgux     ..\pod\perldgux.pod\r
-       copy ..\README.dos      ..\pod\perldos.pod\r
-       copy ..\README.epoc     ..\pod\perlepoc.pod\r
-       copy ..\README.hpux     ..\pod\perlhpux.pod\r
-       copy ..\README.hurd     ..\pod\perlhurd.pod\r
-       copy ..\README.machten  ..\pod\perlmachten.pod\r
-       copy ..\README.macos    ..\pod\perlmacos.pod\r
-       copy ..\README.mint     ..\pod\perlmint.pod\r
-       copy ..\README.mpeix    ..\pod\perlmpeix.pod\r
-       copy ..\README.netware  ..\pod\perlnetware.pod\r
-       copy ..\README.os2      ..\pod\perlos2.pod\r
-       copy ..\README.os390    ..\pod\perlos390.pod\r
-       copy ..\README.plan9    ..\pod\perlplan9.pod\r
-       copy ..\README.qnx      ..\pod\perlqnx.pod\r
-       copy ..\README.solaris  ..\pod\perlsolaris.pod\r
-       copy ..\README.tru64    ..\pod\perltru64.pod\r
-       copy ..\README.vmesa    ..\pod\perlvmesa.pod\r
-       copy ..\vms\perlvms.pod ..\pod\perlvms.pod\r
-       copy ..\README.vos      ..\pod\perlvos.pod\r
-       copy ..\README.win32    ..\pod\perlwin32.pod\r
-       cd ..\pod && $(MAKE) -f ..\win32\pod.mak converters\r
-       cd ..\lib && $(PERLEXE) lib_pm.PL\r
-       $(PERLEXE) $(PL2BAT) $(UTILS)\r
-\r
-distclean: clean\r
-       -del /f $(MINIPERL) $(PERLEXE) $(PERLDLL) $(GLOBEXE) \\r
-               $(PERLIMPLIB) ..\miniperl$(a) $(MINIMOD)\r
-       -del /f *.def *.map\r
-       -del /f $(EXTDIR)\DynaLoader\dl_win32.xs\r
-       -del /f $(LIBDIR)\.exists $(LIBDIR)\attrs.pm $(LIBDIR)\DynaLoader.pm\r
-       -del /f $(LIBDIR)\XSLoader.pm\r
-       -del /f $(LIBDIR)\Fcntl.pm $(LIBDIR)\IO.pm $(LIBDIR)\Opcode.pm\r
-       -del /f $(LIBDIR)\ops.pm $(LIBDIR)\Safe.pm $(LIBDIR)\Thread.pm\r
-       -del /f $(LIBDIR)\SDBM_File.pm $(LIBDIR)\Socket.pm $(LIBDIR)\POSIX.pm\r
-       -del /f $(LIBDIR)\B.pm $(LIBDIR)\O.pm $(LIBDIR)\re.pm\r
-       -del /f $(LIBDIR)\Data\Dumper.pm $(LIBDIR)\ByteLoader.pm\r
-       -del /f $(LIBDIR)\PerlIO\Scalar.pm\r
-       -del /f $(LIBDIR)\Devel\Peek.pm $(LIBDIR)\Devel\DProf.pm\r
-       -del /f $(LIBDIR)\File\Glob.pm\r
-       -del /f $(LIBDIR)\Storable.pm\r
-       -del /f $(LIBDIR)\Filter\Util\Call.pm\r
-       -del /f $(LIBDIR)\Digest\MD5.pm\r
-       -del /f $(LIBDIR)\MIME\Base64.pm\r
-       -del /f $(LIBDIR)\MIME\QuotedPrint.pm\r
-       -del /f $(LIBDIR)\Time\HiRes.pm\r
-       -del /f $(LIBDIR)\List\Util.pm\r
-       -del /f $(LIBDIR)\Scalar\Util.pm\r
-       -del /f $(LIBDIR)\Time\Piece.pm\r
-       -if exist $(LIBDIR)\IO rmdir /s /q $(LIBDIR)\IO || rmdir /s $(LIBDIR)\IO\r
-       -if exist $(LIBDIR)\Thread rmdir /s /q $(LIBDIR)\Thread || rmdir /s $(LIBDIR)\Thread\r
-       -if exist $(LIBDIR)\B rmdir /s /q $(LIBDIR)\B || rmdir /s $(LIBDIR)\B\r
-       -if exist $(LIBDIR)\Data rmdir /s /q $(LIBDIR)\Data || rmdir /s $(LIBDIR)\Data\r
-       -if exist $(LIBDIR)\Filter\Util\Call rmdir /s /q $(LIBDIR)\Filter\Util\Call || rmdir /s $(LIBDIR)\Filter\r
-       -if exist $(LIBDIR)\Filter\Util rmdir /s /q $(LIBDIR)\Filter\Util || rmdir /s $(LIBDIR)\Filter\r
-       -if exist $(LIBDIR)\Digest rmdir /s /q $(LIBDIR)\Digest || rmdir /s $(LIBDIR)\Digest\r
-       -if exist $(LIBDIR)\MIME rmdir /s /q $(LIBDIR)\MIME || rmdir /s $(LIBDIR)\MIME\r
-       -if exist $(LIBDIR)\List rmdir /s /q $(LIBDIR)\List || rmdir /s $(LIBDIR)\List\r
-       -if exist $(LIBDIR)\Scalar rmdir /s /q $(LIBDIR)\Scalar || rmdir /s $(LIBDIR)\Scalar\r
-       -cd $(PODDIR) && del /f *.html *.bat checkpods \\r
-           perlaix.pod perlamiga.pod perlapollo.pod \\r
-           perlbeos.pod perlbs2000.pod perlcygwin.pod perldgux.pod \\r
-           perldos.pod perlepoc.pod perlhpux.pod perlhurd.pod \\r
-           perlmachten.pod perlmint.pod \\r
-           perlmacos.pod perlmpeix.pod perlnetware.pod \\r
-           perlos2.pod perlos390.pod \\r
-           perlplan9.pod perlqnx.pod \\r
-           perlsolaris.pod perlvmesa.pod perlvms.pod perlvos.pod \\r
-           perlwin32.pod pod2html pod2latex pod2man pod2text pod2usage \\r
-           podchecker podselect\r
-       -cd ..\utils && del /f h2ph splain perlbug pl2pm c2ph h2xs perldoc \\r
-           dprofpp *.bat\r
-       -cd ..\x2p && del /f find2perl s2p *.bat\r
-       -del /f ..\config.sh ..\splittree.pl perlmain.c dlutils.c config.h.new\r
-       -del /f $(CONFIGPM)\r
-       -del /f bin\*.bat\r
-       -cd $(EXTDIR) && del /s *$(a) *.def *.map *.pdb *.bs Makefile *$(o) \\r
-           pm_to_blib\r
-       -if exist $(AUTODIR) rmdir /s /q $(AUTODIR) || rmdir /s $(AUTODIR)\r
-       -if exist $(COREDIR) rmdir /s /q $(COREDIR) || rmdir /s $(COREDIR)\r
-\r
-install : all installbare installhtml\r
-\r
-installbare : $(RIGHTMAKE) utils\r
-       $(PERLEXE) ..\installperl\r
-       if exist $(WPERLEXE) $(XCOPY) $(WPERLEXE) $(INST_BIN)\*.*\r
-       $(XCOPY) $(GLOBEXE) $(INST_BIN)\*.*\r
-       $(XCOPY) bin\*.bat $(INST_SCRIPT)\*.*\r
-\r
-installhtml : doc\r
-       $(RCOPY) html\*.* $(INST_HTML)\*.*\r
-\r
-inst_lib : $(CONFIGPM)\r
-       copy splittree.pl ..\r
-       $(MINIPERL) -I..\lib ..\splittree.pl "../LIB" $(AUTODIR)\r
-       $(RCOPY) ..\lib $(INST_LIB)\*.*\r
-\r
-minitest : $(MINIPERL) $(GLOBEXE) $(CONFIGPM) utils\r
-       $(XCOPY) $(MINIPERL) ..\t\perl.exe\r
-.IF "$(CCTYPE)" == "BORLAND"\r
-       $(XCOPY) $(GLOBBAT) ..\t\$(NULL)\r
-.ELSE\r
-       $(XCOPY) $(GLOBEXE) ..\t\$(NULL)\r
-.ENDIF\r
-       attrib -r ..\t\*.*\r
-       copy test ..\t\r
-       cd ..\t && \\r
-       $(MINIPERL) -I..\lib test base/*.t comp/*.t cmd/*.t io/*.t op/*.t pragma/*.t\r
-\r
-test-prep : all utils\r
-       $(XCOPY) $(PERLEXE) ..\t\$(NULL)\r
-       $(XCOPY) $(PERLDLL) ..\t\$(NULL)\r
-.IF "$(CCTYPE)" == "BORLAND"\r
-       $(XCOPY) $(GLOBBAT) ..\t\$(NULL)\r
-.ELSE\r
-       $(XCOPY) $(GLOBEXE) ..\t\$(NULL)\r
-.ENDIF\r
-\r
-test : $(RIGHTMAKE) test-prep\r
-       cd ..\t && $(PERLEXE) -I..\lib harness\r
-\r
-test-notty : test-prep\r
-       set PERL_SKIP_TTY_TEST=1 && \\r
-           cd ..\t && $(PERLEXE) -I.\lib harness\r
-\r
-test-wide : test-prep\r
-       set HARNESS_PERL_SWITCHES=-C && \\r
-           cd ..\t && $(PERLEXE) -I..\lib harness\r
-\r
-test-wide-notty : test-prep\r
-       set PERL_SKIP_TTY_TEST=1 && \\r
-           set HARNESS_PERL_SWITCHES=-C && \\r
-           cd ..\t && $(PERLEXE) -I..\lib harness\r
-\r
-clean : Extensions_clean\r
-       -@erase miniperlmain$(o)\r
-       -@erase $(MINIPERL)\r
-       -@erase perlglob$(o)\r
-       -@erase perlmain$(o)\r
-       -@erase config.w32\r
-       -@erase /f config.h\r
-       -@erase $(GLOBEXE)\r
-       -@erase $(PERLEXE)\r
-       -@erase $(WPERLEXE)\r
-       -@erase $(PERLDLL)\r
-       -@erase $(CORE_OBJ)\r
-       -if exist $(MINIDIR) rmdir /s /q $(MINIDIR) || rmdir /s $(MINIDIR)\r
-       -@erase $(WIN32_OBJ)\r
-       -@erase $(DLL_OBJ)\r
-       -@erase $(X2P_OBJ)\r
-       -@erase ..\*$(o) ..\*$(a) ..\*.exp *$(o) *$(a) *.exp *.res\r
-       -@erase ..\t\*.exe ..\t\*.dll ..\t\*.bat\r
-       -@erase ..\x2p\*.exe ..\x2p\*.bat\r
-       -@erase *.ilk\r
-       -@erase *.pdb\r
-\r
-# Handy way to run perlbug -ok without having to install and run the\r
-# installed perlbug. We don't re-run the tests here - we trust the user.\r
-# Please *don't* use this unless all tests pass.\r
-# If you want to report test failures, use "dmake nok" instead.\r
-ok: utils\r
-       $(PERLEXE) -I..\lib ..\utils\perlbug -ok -s "(UNINSTALLED)"\r
-\r
-okfile: utils\r
-       $(PERLEXE) -I..\lib ..\utils\perlbug -ok -s "(UNINSTALLED)" -F perl.ok\r
-\r
-nok: utils\r
-       $(PERLEXE) -I..\lib ..\utils\perlbug -nok -s "(UNINSTALLED)"\r
-\r
-nokfile: utils\r
-       $(PERLEXE) -I..\lib ..\utils\perlbug -nok -s "(UNINSTALLED)" -F perl.nok\r
+#
+# Makefile to build perl on Windows NT using DMAKE.
+# Supported compilers:
+#      Visual C++ 2.0 thro 6.0
+#      Borland C++ 5.02
+#      Mingw32 with gcc-2.95.2 or better  **experimental**
+#
+# This is set up to build a perl.exe that runs off a shared library
+# (perl57.dll).  Also makes individual DLLs for the XS extensions.
+#
+
+##
+## Make sure you read README.win32 *before* you mess with anything here!
+##
+
+##
+## Build configuration.  Edit the values below to suit your needs.
+##
+
+#
+# Set these to wherever you want "dmake install" to put your
+# newly built perl.
+#
+INST_DRV       *= c:
+INST_TOP       *= $(INST_DRV)\perl
+
+#
+# Comment this out if you DON'T want your perl installation to be versioned.
+# This means that the new installation will overwrite any files from the
+# old installation at the same INST_TOP location.  Leaving it enabled is
+# the safest route, as perl adds the extra version directory to all the
+# locations it installs files to.  If you disable it, an alternative
+# versioned installation can be obtained by setting INST_TOP above to a
+# path that includes an arbitrary version string.
+#
+INST_VER       *= \5.7.1
+
+#
+# Comment this out if you DON'T want your perl installation to have
+# architecture specific components.  This means that architecture-
+# specific files will be installed along with the architecture-neutral
+# files.  Leaving it enabled is safer and more flexible, in case you
+# want to build multiple flavors of perl and install them together in
+# the same location.  Commenting it out gives you a simpler
+# installation that is easier to understand for beginners.
+#
+INST_ARCH      *= \$(ARCHNAME)
+
+#
+# uncomment to enable multiple interpreters.  This is need for fork()
+# emulation.
+#
+USE_MULTI      *= define
+
+#
+# Beginnings of interpreter cloning/threads; still very incomplete.
+# This should be enabled to get the fork() emulation.  This needs
+# USE_MULTI as well.
+#
+USE_ITHREADS   *= define
+
+#
+# uncomment to enable the implicit "host" layer for all system calls
+# made by perl.  This needs USE_MULTI above.  This is also needed to
+# get fork().
+#
+USE_IMP_SYS    *= define
+
+#
+# uncomment to enable the experimental PerlIO I/O subsystem.
+USE_PERLIO     = define
+
+#
+# WARNING! This option is deprecated and will eventually go away (enable
+# USE_ITHREADS instead).
+#
+# uncomment to enable threads-capabilities.  This is incompatible with
+# USE_ITHREADS, and is only here for people who may have come to rely
+# on the experimental Thread support that was in 5.005.
+#
+#USE_5005THREADS       *= define
+
+#
+# WARNING! This option is deprecated and will eventually go away (enable
+# USE_MULTI instead).
+#
+# uncomment next line if you want to use the PERL_OBJECT build option.
+# DO NOT ENABLE unless you have legacy code that relies on the C++
+# CPerlObj class that was available in 5.005.  This cannot be enabled
+# if you ask for USE_5005THREADS above.
+#
+#USE_OBJECT    *= define
+
+#
+# uncomment exactly one of the following
+#
+# Visual C++ 2.x
+#CCTYPE                *= MSVC20
+# Visual C++ > 2.x and < 6.x
+#CCTYPE                *= MSVC
+# Visual C++ >= 6.x
+CCTYPE         *= MSVC60
+# Borland 5.02 or later
+#CCTYPE                *= BORLAND
+# mingw32+gcc-2.95.2 or better
+#CCTYPE                *= GCC
+
+#
+# uncomment this if your Borland compiler is older than v5.4.
+BCCOLD = define
+#
+# uncomment this if you want to use Borland's VCL as your CRT
+#BCCVCL = define
+
+#
+# uncomment this if you are compiling under Windows 95/98 and command.com
+# (not needed if you're running under 4DOS/NT 6.01 or later)
+#IS_WIN95      *= define
+
+#
+# uncomment next line if you want debug version of perl (big,slow)
+# If not enabled, we automatically try to use maximum optimization
+# with all compilers that are known to have a working optimizer.
+#
+CFG            *= Debug
+
+#
+# uncomment to enable use of PerlCRT.DLL when using the Visual C compiler.
+# It has patches that fix known bugs in older versions of MSVCRT.DLL.
+# This currently requires VC 5.0 with Service Pack 3 or later.
+# Get it from CPAN at http://www.perl.com/CPAN/authors/id/D/DO/DOUGL/
+# and follow the directions in the package to install.
+#
+# Not recommended if you have VC 6.x and you're not running Windows 9x.
+#
+#USE_PERLCRT   *= define
+
+#
+# uncomment to enable linking with setargv.obj under the Visual C
+# compiler. Setting this options enables perl to expand wildcards in
+# arguments, but it may be harder to use alternate methods like
+# File::DosGlob that are more powerful.  This option is supported only with
+# Visual C.
+#
+#USE_SETARGV   *= define
+
+#
+# if you have the source for des_fcrypt(), uncomment this and make sure the
+# file exists (see README.win32).  File should be located in the same
+# directory as this file.
+#
+#CRYPT_SRC     *= fcrypt.c
+
+#
+# if you didn't set CRYPT_SRC and if you have des_fcrypt() available in a
+# library, uncomment this, and make sure the library exists (see README.win32)
+# Specify the full pathname of the library.
+#
+#CRYPT_LIB     *= fcrypt.lib
+
+#
+# set this if you wish to use perl's malloc
+# WARNING: Turning this on/off WILL break binary compatibility with extensions
+# you may have compiled with/without it.  Be prepared to recompile all
+# extensions if you change the default.  Currently, this cannot be enabled
+# if you ask for USE_IMP_SYS above.
+#
+#PERL_MALLOC   *= define
+
+#
+# set the install locations of the compiler include/libraries
+# Running VCVARS32.BAT is *required* when using Visual C.
+# Some versions of Visual C don't define MSVCDIR in the environment,
+# so you may have to set CCHOME explicitly (spaces in the path name should
+# not be quoted)
+#
+#CCHOME                *= F:\borland\bc5
+CCHOME         *= $(MSVCDIR)
+#CCHOME                *= c:\gcc-2.95.2
+CCINCDIR       *= $(CCHOME)\include
+CCLIBDIR       *= $(CCHOME)\lib
+
+#
+# Additional compiler flags can be specified here.
+#
+
+#
+# This should normally be disabled.  Adding -DPERL_POLLUTE enables support
+# for old symbols by default, at the expense of extreme pollution.  You most
+# probably just want to build modules that won't compile with
+#         perl Makefile.PL POLLUTE=1
+# instead of enabling this.  Please report such modules to the respective
+# authors.
+#
+#BUILDOPT      += -DPERL_POLLUTE
+
+#
+# This should normally be disabled.  Enabling it will disable the File::Glob
+# implementation of CORE::glob.
+#
+#BUILDOPT      += -DPERL_EXTERNAL_GLOB
+
+#
+# This should normally be disabled.  Enabling it causes perl to read scripts
+# in text mode (which is the 5.005 behavior) and will break ByteLoader.
+#BUILDOPT      += -DPERL_TEXTMODE_SCRIPTS
+
+#
+# specify semicolon-separated list of extra directories that modules will
+# look for libraries (spaces in path names need not be quoted)
+#
+EXTRALIBDIRS   *=
+
+#
+# set this to point to cmd.exe (only needed if you use some
+# alternate shell that doesn't grok cmd.exe style commands)
+#
+#SHELL         *= g:\winnt\system32\cmd.exe
+
+#
+# set this to your email address (perl will guess a value from
+# from your loginname and your hostname, which may not be right)
+#
+#EMAIL         *=
+
+##
+## Build configuration ends.
+##
+
+##################### CHANGE THESE ONLY IF YOU MUST #####################
+
+.IF "$(CRYPT_SRC)$(CRYPT_LIB)" == ""
+D_CRYPT                = undef
+.ELSE
+D_CRYPT                = define
+CRYPT_FLAG     = -DHAVE_DES_FCRYPT
+.ENDIF
+
+.IF "$(USE_OBJECT)" == "define"
+PERL_MALLOC    != undef
+USE_5005THREADS        != undef
+USE_MULTI      != undef
+USE_IMP_SYS    != define
+.ENDIF
+
+PERL_MALLOC    *= undef
+
+USE_5005THREADS        *= undef
+
+.IF "$(USE_5005THREADS)" == "define"
+USE_ITHREADS   != undef
+.ENDIF
+
+.IF "$(USE_IMP_SYS)" == "define"
+PERL_MALLOC    != undef
+.ENDIF
+
+USE_MULTI      *= undef
+USE_OBJECT     *= undef
+USE_ITHREADS   *= undef
+USE_IMP_SYS    *= undef
+USE_PERLIO     *= undef
+USE_PERLCRT    *= undef
+
+.IF "$(USE_IMP_SYS)$(USE_MULTI)$(USE_5005THREADS)$(USE_OBJECT)" == "defineundefundefundef"
+USE_MULTI      != define
+.ENDIF
+
+.IF "$(USE_ITHREADS)$(USE_MULTI)$(USE_OBJECT)" == "defineundefundef"
+USE_MULTI      != define
+USE_5005THREADS        != undef
+.ENDIF
+
+.IF "$(USE_MULTI)$(USE_5005THREADS)$(USE_OBJECT)" != "undefundefundef"
+BUILDOPT       += -DPERL_IMPLICIT_CONTEXT
+.ENDIF
+
+.IF "$(USE_IMP_SYS)" != "undef"
+BUILDOPT       += -DPERL_IMPLICIT_SYS
+.ENDIF
+
+.IMPORT .IGNORE : PROCESSOR_ARCHITECTURE
+
+PROCESSOR_ARCHITECTURE *= x86
+
+.IF "$(USE_OBJECT)" == "define"
+ARCHNAME       = MSWin32-$(PROCESSOR_ARCHITECTURE)-object
+.ELIF "$(USE_5005THREADS)" == "define"
+ARCHNAME       = MSWin32-$(PROCESSOR_ARCHITECTURE)-thread
+.ELIF "$(USE_MULTI)" == "define"
+ARCHNAME       = MSWin32-$(PROCESSOR_ARCHITECTURE)-multi
+.ELSE
+.IF "$(USE_PERLIO)" == "define"
+ARCHNAME       = MSWin32-$(PROCESSOR_ARCHITECTURE)-perlio
+.ELSE
+ARCHNAME       = MSWin32-$(PROCESSOR_ARCHITECTURE)
+.ENDIF
+ARCHNAME       = MSWin32-$(PROCESSOR_ARCHITECTURE)
+.ENDIF
+
+.IF "$(USE_ITHREADS)" == "define"
+ARCHNAME       !:= $(ARCHNAME)-thread
+.ENDIF
+
+# Visual Studio 98 specific
+.IF "$(CCTYPE)" == "MSVC60"
+
+# VC 6.0 can load the socket dll on demand.  Makes the test suite
+# run in about 10% less time.
+DELAYLOAD      *= -DELAYLOAD:wsock32.dll -DELAYLOAD:shell32.dll delayimp.lib
+
+.IF "$(CFG)" == "Debug"
+.ELSE
+# VC 6.0 seems capable of compiling perl correctly with optimizations
+# enabled.  Anything earlier fails tests.
+CFG            *= Optimize
+.ENDIF
+.ENDIF
+
+ARCHDIR                = ..\lib\$(ARCHNAME)
+COREDIR                = ..\lib\CORE
+AUTODIR                = ..\lib\auto
+LIBDIR         = ..\lib
+EXTDIR         = ..\ext
+PODDIR         = ..\pod
+EXTUTILSDIR    = $(LIBDIR)\ExtUtils
+
+#
+INST_SCRIPT    = $(INST_TOP)$(INST_VER)\bin
+INST_BIN       = $(INST_SCRIPT)$(INST_ARCH)
+INST_LIB       = $(INST_TOP)$(INST_VER)\lib
+INST_ARCHLIB   = $(INST_LIB)$(INST_ARCH)
+INST_COREDIR   = $(INST_ARCHLIB)\CORE
+INST_POD       = $(INST_LIB)\pod
+INST_HTML      = $(INST_TOP)$(INST_VER)\html
+
+#
+# Programs to compile, build .lib files and link
+#
+
+.USESHELL :
+
+.IF "$(CCTYPE)" == "BORLAND"
+
+CC             = bcc32
+.IF "$(BCCOLD)" != "define"
+LINK32         = ilink32
+.ELSE
+LINK32         = tlink32
+.ENDIF
+LIB32          = tlib /P128
+IMPLIB         = implib -c
+RSC            = rc
+
+#
+# Options
+#
+INCLUDES       = -I$(COREDIR) -I.\include -I. -I.. -I"$(CCINCDIR)"
+#PCHFLAGS      = -H -Hc -H=c:\temp\bcmoduls.pch 
+DEFINES                = -DWIN32 $(CRYPT_FLAG)
+LOCDEFS                = -DPERLDLL -DPERL_CORE
+SUBSYS         = console
+CXX_FLAG       = -P
+
+LIBC           = cw32mti.lib
+LIBFILES       = $(CRYPT_LIB) import32.lib $(LIBC)
+
+.IF  "$(CFG)" == "Debug"
+OPTIMIZE       = -v -D_RTLDLL -DDEBUGGING
+LINK_DBG       = -v
+.ELSE
+OPTIMIZE       = -O2 -D_RTLDLL
+LINK_DBG       =
+.ENDIF
+
+CFLAGS         = -w -g0 -tWM -tWD $(INCLUDES) $(DEFINES) $(LOCDEFS) \
+               $(PCHFLAGS) $(OPTIMIZE)
+LINK_FLAGS     = $(LINK_DBG) -L"$(INST_COREDIR)"  -L"$(CCLIBDIR)"
+OBJOUT_FLAG    = -o
+EXEOUT_FLAG    = -e
+LIBOUT_FLAG    =
+.IF "$(BCCOLD)" != "define"
+LINK_FLAGS     += -Gn
+DEFINES  += -D_MT -D__USELOCALES__ -D_WIN32_WINNT=0x0410
+.END
+.IF "$(BCCVCL)" == "define"
+LIBC           = cp32mti.lib vcl.lib vcl50.lib vclx50.lib vcle50.lib
+LINK_FLAGS     += -L"$(CCLIBDIR)\Release"
+.END
+
+
+.ELIF "$(CCTYPE)" == "GCC"
+
+CC             = gcc
+LINK32         = gcc
+LIB32          = ar rc
+IMPLIB         = dlltool
+RSC            = rc
+
+i = .i
+o = .o
+a = .a
+
+#
+# Options
+#
+
+INCLUDES       = -I.\include -I. -I.. -I$(COREDIR)
+DEFINES                = -DWIN32 $(CRYPT_FLAG)
+LOCDEFS                = -DPERLDLL -DPERL_CORE
+SUBSYS         = console
+CXX_FLAG       = -xc++
+
+LIBC           = -lmsvcrt
+
+# same libs as MSVC
+LIBFILES       = $(CRYPT_LIB) $(LIBC) \
+                 -lmoldname -lkernel32 -luser32 -lgdi32 \
+                 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 \
+                 -loleaut32 -lnetapi32 -luuid -lwsock32 -lmpr \
+                 -lwinmm -lversion -lodbc32
+
+.IF  "$(CFG)" == "Debug"
+OPTIMIZE       = -g -O2 -DDEBUGGING
+LINK_DBG       = -g
+.ELSE
+OPTIMIZE       = -g -O2
+LINK_DBG       = -g
+.ENDIF
+
+CFLAGS         = $(INCLUDES) $(DEFINES) $(LOCDEFS) $(OPTIMIZE)
+LINK_FLAGS     = $(LINK_DBG) -L"$(INST_COREDIR)" -L"$(CCLIBDIR)"
+OBJOUT_FLAG    = -o
+EXEOUT_FLAG    = -o
+LIBOUT_FLAG    =
+
+# NOTE: we assume that GCC uses MSVCRT.DLL
+BUILDOPT       += -fno-strict-aliasing -DPERL_MSVCRT_READFIX
+
+.ELSE
+
+CC             = cl
+LINK32         = link
+LIB32          = $(LINK32) -lib
+RSC            = rc
+
+#
+# Options
+#
+
+INCLUDES       = -I$(COREDIR) -I.\include -I. -I..
+#PCHFLAGS      = -Fpc:\temp\vcmoduls.pch -YX
+DEFINES                = -DWIN32 -D_CONSOLE -DNO_STRICT $(CRYPT_FLAG)
+LOCDEFS                = -DPERLDLL -DPERL_CORE
+SUBSYS         = console
+CXX_FLAG       = -TP -GX
+
+.IF "$(USE_PERLCRT)" != "define"
+LIBC   = msvcrt.lib
+.ELSE
+LIBC   = PerlCRT.lib
+.ENDIF
+
+PERLEXE_RES    =
+PERLDLL_RES    =
+
+.IF  "$(CFG)" == "Debug"
+.IF "$(CCTYPE)" == "MSVC20"
+OPTIMIZE       = -Od -MD -Z7 -DDEBUGGING
+LINK_DBG       = -debug -pdb:none
+.ELSE
+# -Zi requires .pdb file(s)
+#OPTIMIZE      = -Od -MD -Zi -DDEBUGGING
+#LINK_DBG      = -debug
+OPTIMIZE       = -O1 -MD -Z7 -DDEBUGGING
+LINK_DBG       = -debug -debugtype:both -pdb:none
+.ENDIF
+.ELSE
+.IF "$(CFG)" == "Optimize"
+# -O1 yields smaller code, which turns out to be faster than -O2
+#OPTIMIZE      = -O2 -MD -DNDEBUG
+OPTIMIZE       = -O1 -MD -DNDEBUG
+.ELSE
+OPTIMIZE       = -Od -MD -DNDEBUG
+.ENDIF
+LINK_DBG       = -release
+.ENDIF
+
+LIBBASEFILES   = $(CRYPT_LIB) \
+               oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib \
+               comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib \
+               netapi32.lib uuid.lib wsock32.lib mpr.lib winmm.lib \
+               version.lib odbc32.lib odbccp32.lib
+
+# we add LIBC here, since we may be using PerlCRT.dll
+LIBFILES       = $(LIBBASEFILES) $(LIBC)
+
+CFLAGS         = -nologo -Gf -W3 $(INCLUDES) $(DEFINES) $(LOCDEFS) \
+               $(PCHFLAGS) $(OPTIMIZE)
+LINK_FLAGS     = -nologo -nodefaultlib $(LINK_DBG) \
+               -libpath:"$(INST_COREDIR)" \
+               -machine:$(PROCESSOR_ARCHITECTURE)
+OBJOUT_FLAG    = -Fo
+EXEOUT_FLAG    = -Fe
+LIBOUT_FLAG    = /out:
+
+.IF "$(USE_PERLCRT)" != "define"
+BUILDOPT       += -DPERL_MSVCRT_READFIX
+.ENDIF
+
+.ENDIF
+
+.IF "$(USE_OBJECT)" == "define"
+OPTIMIZE       += $(CXX_FLAG)
+BUILDOPT       += -DPERL_OBJECT
+.ENDIF
+
+CFLAGS_O       = $(CFLAGS) $(BUILDOPT)
+
+# used to allow local linking flags that are not propogated into Config.pm,
+# currently unused
+#   -- BKS, 12-12-1999
+PRIV_LINK_FLAGS        *=
+BLINK_FLAGS    = $(PRIV_LINK_FLAGS) $(LINK_FLAGS)
+
+#################### do not edit below this line #######################
+############# NO USER-SERVICEABLE PARTS BEYOND THIS POINT ##############
+
+o *= .obj
+a *= .lib
+
+LKPRE          = INPUT (
+LKPOST         = )
+
+#
+# Rules
+#
+
+.SUFFIXES : .c .i $(o) .dll $(a) .exe .rc .res
+
+.c$(o):
+       $(CC) -c $(null,$(<:d) $(NULL) -I$(<:d)) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $<
+
+.c.i:
+       $(CC) -c $(null,$(<:d) $(NULL) -I$(<:d)) $(CFLAGS_O) -E $< >$@
+
+.y.c:
+       $(NOOP)
+
+$(o).dll:
+.IF "$(CCTYPE)" == "BORLAND"
+       $(LINK32) -Tpd -ap $(BLINK_FLAGS) c0d32$(o) $<,$@,,$(LIBFILES),$(*B).def
+       $(IMPLIB) $(*B).lib $@
+.ELIF "$(CCTYPE)" == "GCC"
+       $(LINK32) -o $@ $(BLINK_FLAGS) $< $(LIBFILES)
+       $(IMPLIB) --input-def $(*B).def --output-lib $(*B).a $@
+.ELSE
+       $(LINK32) -dll -subsystem:windows -implib:$(*B).lib -def:$(*B).def \
+           -out:$@ $(BLINK_FLAGS) $(LIBFILES) $< $(LIBPERL)
+.ENDIF
+
+.rc.res:
+       $(RSC) -i.. $<
+
+#
+# various targets
+MINIPERL       = ..\miniperl.exe
+MINIDIR                = .\mini
+PERLEXE                = ..\perl.exe
+WPERLEXE       = ..\wperl.exe
+GLOBEXE                = ..\perlglob.exe
+CONFIGPM       = ..\lib\Config.pm
+MINIMOD                = ..\lib\ExtUtils\Miniperl.pm
+X2P            = ..\x2p\a2p.exe
+
+# Nominate a target which causes extensions to be re-built
+# This used to be $(PERLEXE), but at worst it is the .dll that they depend
+# on and really only the interface - i.e. the .def file used to export symbols
+# from the .dll
+PERLDEP = perldll.def
+
+
+PL2BAT         = bin\pl2bat.pl
+GLOBBAT                = bin\perlglob.bat
+
+UTILS          =                       \
+               ..\utils\h2ph           \
+               ..\utils\splain         \
+               ..\utils\dprofpp        \
+               ..\utils\perlbug        \
+               ..\utils\pl2pm          \
+               ..\utils\c2ph           \
+               ..\utils\h2xs           \
+               ..\utils\perldoc        \
+               ..\utils\perlcc         \
+               ..\pod\checkpods        \
+               ..\pod\pod2html         \
+               ..\pod\pod2latex        \
+               ..\pod\pod2man          \
+               ..\pod\pod2text         \
+               ..\pod\pod2usage        \
+               ..\pod\podchecker       \
+               ..\pod\podselect        \
+               ..\x2p\find2perl        \
+               ..\x2p\s2p              \
+               bin\exetype.pl          \
+               bin\runperl.pl          \
+               bin\pl2bat.pl           \
+               bin\perlglob.pl         \
+               bin\search.pl
+
+.IF "$(CCTYPE)" == "BORLAND"
+
+CFGSH_TMPL     = config.bc
+CFGH_TMPL      = config_H.bc
+
+.ELIF "$(CCTYPE)" == "GCC"
+
+CFGSH_TMPL     = config.gc
+CFGH_TMPL      = config_H.gc
+PERLIMPLIB     = ..\libperl57$(a)
+
+.ELSE
+
+CFGSH_TMPL     = config.vc
+CFGH_TMPL      = config_H.vc
+
+.ENDIF
+
+# makedef.pl must be updated if this changes, and this should normally
+# only change when there is an incompatible revision of the public API.
+# XXX so why did we change it from perl56 to perl57?
+PERLIMPLIB     *= ..\perl57$(a)
+PERLDLL                = ..\perl57.dll
+
+XCOPY          = xcopy /f /r /i /d
+RCOPY          = xcopy /f /r /i /e /d
+NOOP           = @echo
+
+#
+# filenames given to xsubpp must have forward slashes (since it puts
+# full pathnames in #line strings)
+XSUBPP         = ..\$(MINIPERL) -I..\..\lib ..\$(EXTUTILSDIR)\xsubpp \
+               -C++ -prototypes
+
+MICROCORE_SRC  =               \
+               ..\av.c         \
+               ..\deb.c        \
+               ..\doio.c       \
+               ..\doop.c       \
+               ..\dump.c       \
+               ..\globals.c    \
+               ..\gv.c         \
+               ..\hv.c         \
+               ..\locale.c     \
+               ..\mg.c         \
+               ..\numeric.c    \
+               ..\op.c         \
+               ..\perl.c       \
+               ..\perlapi.c    \
+               ..\perly.c      \
+               ..\pp.c         \
+               ..\pp_ctl.c     \
+               ..\pp_hot.c     \
+               ..\pp_pack.c    \
+               ..\pp_sys.c     \
+               ..\regcomp.c    \
+               ..\regexec.c    \
+               ..\run.c        \
+               ..\scope.c      \
+               ..\sv.c         \
+               ..\taint.c      \
+               ..\toke.c       \
+               ..\universal.c  \
+               ..\utf8.c       \
+               ..\util.c       \
+               ..\xsutils.c
+
+EXTRACORE_SRC  += perllib.c
+
+.IF "$(PERL_MALLOC)" == "define"
+EXTRACORE_SRC  += ..\malloc.c
+.ENDIF
+
+.IF "$(USE_OBJECT)" != "define"
+EXTRACORE_SRC  += ..\perlio.c
+.ENDIF
+
+WIN32_SRC      =               \
+               .\win32.c       \
+               .\win32io.c     \
+               .\win32sck.c    \
+               .\win32thread.c
+
+.IF "$(CRYPT_SRC)" != ""
+WIN32_SRC      += .\$(CRYPT_SRC)
+.ENDIF
+
+DLL_SRC                = $(DYNALOADER).c
+
+X2P_SRC                =               \
+               ..\x2p\a2p.c    \
+               ..\x2p\hash.c   \
+               ..\x2p\str.c    \
+               ..\x2p\util.c   \
+               ..\x2p\walk.c
+
+CORE_NOCFG_H   =               \
+               ..\av.h         \
+               ..\cop.h        \
+               ..\cv.h         \
+               ..\dosish.h     \
+               ..\embed.h      \
+               ..\form.h       \
+               ..\gv.h         \
+               ..\handy.h      \
+               ..\hv.h         \
+               ..\iperlsys.h   \
+               ..\mg.h         \
+               ..\nostdio.h    \
+               ..\op.h         \
+               ..\opcode.h     \
+               ..\perl.h       \
+               ..\perlapi.h    \
+               ..\perlsdio.h   \
+               ..\perlsfio.h   \
+               ..\perly.h      \
+               ..\pp.h         \
+               ..\proto.h      \
+               ..\regexp.h     \
+               ..\scope.h      \
+               ..\sv.h         \
+               ..\thread.h     \
+               ..\unixish.h    \
+               ..\utf8.h       \
+               ..\util.h       \
+               ..\warnings.h   \
+               ..\XSUB.h       \
+               ..\EXTERN.h     \
+               ..\perlvars.h   \
+               ..\intrpvar.h   \
+               ..\thrdvar.h    \
+               .\include\dirent.h      \
+               .\include\netdb.h       \
+               .\include\sys\socket.h  \
+               .\win32.h
+
+CORE_H         = $(CORE_NOCFG_H) .\config.h
+
+MICROCORE_OBJ  = $(MICROCORE_SRC:db:+$(o))
+CORE_OBJ       = $(MICROCORE_OBJ) $(EXTRACORE_SRC:db:+$(o))
+WIN32_OBJ      = $(WIN32_SRC:db:+$(o))
+MINICORE_OBJ   = $(MINIDIR)\{$(MICROCORE_OBJ:f) miniperlmain$(o) perlio$(o)}
+MINIWIN32_OBJ  = $(MINIDIR)\{$(WIN32_OBJ:f)}
+MINI_OBJ       = $(MINICORE_OBJ) $(MINIWIN32_OBJ)
+DLL_OBJ                = $(DLL_SRC:db:+$(o))
+X2P_OBJ                = $(X2P_SRC:db:+$(o))
+
+PERLDLL_OBJ    = $(CORE_OBJ)
+PERLEXE_OBJ    = perlmain$(o)
+
+PERLDLL_OBJ    += $(WIN32_OBJ) $(DLL_OBJ)
+
+.IF "$(USE_SETARGV)" != ""
+SETARGV_OBJ    = setargv$(o)
+.ENDIF
+
+DYNAMIC_EXT    = Socket IO Fcntl Opcode SDBM_File POSIX attrs Thread B re \
+               Data/Dumper Devel/Peek ByteLoader Devel/DProf File/Glob \
+               Sys/Hostname Storable Filter/Util/Call Encode \
+               Digest/MD5 PerlIO/Scalar MIME/Base64 Time/HiRes Time/Piece
+STATIC_EXT     = DynaLoader
+NONXS_EXT      = Errno
+
+DYNALOADER     = $(EXTDIR)\DynaLoader\DynaLoader
+
+POD2HTML       = $(PODDIR)\pod2html
+POD2MAN                = $(PODDIR)\pod2man
+POD2LATEX      = $(PODDIR)\pod2latex
+POD2TEXT       = $(PODDIR)\pod2text
+
+# vars must be separated by "\t+~\t+", since we're using the tempfile
+# version of config_sh.pl (we were overflowing someone's buffer by
+# trying to fit them all on the command line)
+#      -- BKS 10-17-1999
+CFG_VARS       =                                       \
+               INST_DRV=$(INST_DRV)            ~       \
+               INST_TOP=$(INST_TOP:s/\/\\/)    ~       \
+               INST_VER=$(INST_VER:s/\/\\/)    ~       \
+               INST_ARCH=$(INST_ARCH)          ~       \
+               archname=$(ARCHNAME)            ~       \
+               cc=$(CC)                        ~       \
+               ld=$(LINK32)                    ~       \
+               ccflags=$(OPTIMIZE) $(DEFINES) $(BUILDOPT)      ~       \
+               cf_email=$(EMAIL)               ~       \
+               d_crypt=$(D_CRYPT)              ~       \
+               d_mymalloc=$(PERL_MALLOC)       ~       \
+               libs=$(LIBFILES:f)              ~       \
+               incpath=$(CCINCDIR:s/\/\\/)     ~       \
+               libperl=$(PERLIMPLIB:f)         ~       \
+               libpth=$(CCLIBDIR:s/\/\\/);$(EXTRALIBDIRS:s/\/\\/)      ~       \
+               libc=$(LIBC)                    ~       \
+               make=dmake                      ~       \
+               _o=$(o) obj_ext=$(o)            ~       \
+               _a=$(a) lib_ext=$(a)            ~       \
+               static_ext=$(STATIC_EXT)        ~       \
+               use5005threads=$(USE_5005THREADS)       ~       \
+               useithreads=$(USE_ITHREADS)     ~       \
+               usethreads=$(USE_5005THREADS)   ~       \
+               usemultiplicity=$(USE_MULTI)    ~       \
+               useperlio=$(USE_PERLIO)         ~       \
+               LINK_FLAGS=$(LINK_FLAGS:s/\/\\/)                ~       \
+               optimize=$(OPTIMIZE)
+
+#
+# set up targets varying between Win95 and WinNT builds
+#
+
+.IF "$(IS_WIN95)" == "define"
+MK2            = .\makefile.95
+RIGHTMAKE      = __switch_makefiles
+NOOP           = @rem
+.ELSE
+MK2            = __not_needed
+RIGHTMAKE      =
+.ENDIF
+
+#
+# Top targets
+#
+
+all : .\config.h $(GLOBEXE) $(MINIPERL) $(MK2)         \
+       $(RIGHTMAKE) $(MINIMOD) $(CONFIGPM) $(PERLEXE)  \
+       $(X2P) Extensions 
+
+$(DYNALOADER)$(o) : $(DYNALOADER).c $(CORE_H) $(EXTDIR)\DynaLoader\dlutils.c
+
+#----------------------------------------------------------------
+
+#-------------------- BEGIN Win95 SPECIFIC ----------------------
+
+# this target is a jump-off point for Win95
+#  1. it switches to the Win95-specific makefile if it exists
+#     (__do_switch_makefiles)
+#  2. it prints a message when the Win95-specific one finishes (__done)
+#  3. it then kills this makefile by trying to make __no_such_target
+
+__switch_makefiles: __do_switch_makefiles __done __no_such_target
+
+__do_switch_makefiles:
+.IF "$(NOTFIRST)" != "true"
+       if exist $(MK2) $(MAKE:s/-S//) -f $(MK2) $(MAKETARGETS) NOTFIRST=true
+.ELSE
+       $(NOOP)
+.ENDIF
+
+.IF "$(NOTFIRST)" != "true"
+__done:
+       @echo Build process complete. Ignore any errors after this message.
+       @echo Run "dmake test" to test and "dmake install" to install
+
+.ELSE
+# dummy targets for Win95-specific makefile
+
+__done:
+       $(NOOP)
+
+__no_such_target:
+       $(NOOP)
+
+.ENDIF
+
+# This target is used to generate the new makefile (.\makefile.95) for Win95
+
+.\makefile.95: .\makefile.mk
+       $(MINIPERL) genmk95.pl makefile.mk $(MK2)
+
+#--------------------- END Win95 SPECIFIC ---------------------
+
+# a blank target for when builds don't need to do certain things
+# this target added for Win95 port but used to keep the WinNT port able to
+# use this file
+__not_needed:
+       $(NOOP)
+
+$(GLOBEXE) : perlglob$(o)
+.IF "$(CCTYPE)" == "BORLAND"
+       $(CC) -c -w -v -tWM -I"$(CCINCDIR)" perlglob.c
+       $(LINK32) -Tpe -ap $(BLINK_FLAGS) c0x32$(o) perlglob$(o) \
+           "$(CCLIBDIR)\32BIT\wildargs$(o)",$@,,import32.lib cw32mt.lib,
+.ELIF "$(CCTYPE)" == "GCC"
+       $(LINK32) $(BLINK_FLAGS) -mconsole -o $@ perlglob$(o) $(LIBFILES)
+.ELSE
+       $(LINK32) $(BLINK_FLAGS) $(LIBFILES) -out:$@ -subsystem:$(SUBSYS) \
+           perlglob$(o) setargv$(o)
+.ENDIF
+
+perlglob$(o)  : perlglob.c
+
+config.w32 : $(CFGSH_TMPL)
+       copy $(CFGSH_TMPL) config.w32
+
+.\config.h : $(CFGH_TMPL) $(CORE_NOCFG_H)
+       -del /f config.h
+       copy $(CFGH_TMPL) config.h
+
+..\config.sh : config.w32 $(MINIPERL) config_sh.PL FindExt.pm
+       $(MINIPERL) -I..\lib config_sh.PL --cfgsh-option-file \
+           $(mktmp $(CFG_VARS)) config.w32 > ..\config.sh
+
+# this target is for when changes to the main config.sh happen
+# edit config.{b,v,g}c and make this target once for each supported
+# compiler (e.g. `dmake CCTYPE=BORLAND regen_config_h`)
+regen_config_h:
+       perl config_sh.PL --cfgsh-option-file $(mktmp $(CFG_VARS)) \
+           $(CFGSH_TMPL) > ..\config.sh
+       -cd .. && del /f perl.exe
+       cd .. && perl configpm
+       -del /f $(CFGH_TMPL)
+       -mkdir $(COREDIR)
+       -perl -I..\lib config_h.PL "INST_VER=$(INST_VER)"
+       rename config.h $(CFGH_TMPL)
+
+$(CONFIGPM) : $(MINIPERL) ..\config.sh config_h.PL ..\minimod.pl
+       cd .. && miniperl configpm
+       if exist lib\* $(RCOPY) lib\*.* ..\lib\$(NULL)
+       $(XCOPY) ..\*.h $(COREDIR)\*.*
+       $(XCOPY) *.h $(COREDIR)\*.*
+       $(XCOPY) ..\ext\re\re.pm $(LIBDIR)\*.*
+       $(RCOPY) include $(COREDIR)\*.*
+       $(MINIPERL) -I..\lib config_h.PL "INST_VER=$(INST_VER)" \
+           || $(MAKE) $(MAKEMACROS) $(CONFIGPM) $(MAKEFILE)
+
+$(MINIPERL) : $(MINIDIR) $(MINI_OBJ) $(CRTIPMLIBS)
+.IF "$(CCTYPE)" == "BORLAND"
+       $(LINK32) -Tpe -ap $(BLINK_FLAGS) \
+           @$(mktmp c0x32$(o) $(MINI_OBJ:s,\,\\),$(@:s,\,\\),,$(LIBFILES),)
+.ELIF "$(CCTYPE)" == "GCC"
+       $(LINK32) -v -mconsole -o $@ $(BLINK_FLAGS) \
+           $(mktmp $(LKPRE) $(MINI_OBJ:s,\,\\) $(LIBFILES) $(LKPOST))
+.ELSE
+       $(LINK32) -subsystem:console -out:$@ \
+           @$(mktmp $(BLINK_FLAGS) $(LIBFILES) $(MINI_OBJ:s,\,\\))
+.ENDIF
+
+$(MINIDIR) :
+       if not exist "$(MINIDIR)" mkdir "$(MINIDIR)"
+
+$(MINICORE_OBJ) : $(CORE_NOCFG_H)
+       $(CC) -c $(CFLAGS) -DPERL_EXTERNAL_GLOB $(OBJOUT_FLAG)$@ ..\$(*B).c
+
+$(MINIWIN32_OBJ) : $(CORE_NOCFG_H)
+       $(CC) -c $(CFLAGS) $(OBJOUT_FLAG)$@ $(*B).c
+
+# -DPERL_IMPLICIT_SYS needs C++ for perllib.c
+# rules wrapped in .IFs break Win9X build (we end up with unbalanced []s unless
+# unless the .IF is true), so instead we use a .ELSE with the default.
+# This is the only file that depends on perlhost.h, vmem.h, and vdir.h
+
+perllib$(o)    : perllib.c .\perlhost.h .\vdir.h .\vmem.h
+.IF "$(USE_IMP_SYS)$(USE_OBJECT)" == "defineundef"
+       $(CC) -c -I. $(CFLAGS_O) $(CXX_FLAG) $(OBJOUT_FLAG)$@ perllib.c
+.ELSE
+       $(CC) -c -I. $(CFLAGS_O) $(OBJOUT_FLAG)$@ perllib.c
+.ENDIF
+
+# 1. we don't want to rebuild miniperl.exe when config.h changes
+# 2. we don't want to rebuild miniperl.exe with non-default config.h
+$(MINI_OBJ)    : $(CORE_NOCFG_H)
+
+$(WIN32_OBJ)   : $(CORE_H)
+$(CORE_OBJ)    : $(CORE_H)
+$(DLL_OBJ)     : $(CORE_H)
+$(X2P_OBJ)     : $(CORE_H)
+
+perldll.def : $(MINIPERL) $(CONFIGPM) ..\global.sym ..\pp.sym ..\makedef.pl
+       $(MINIPERL) -w ..\makedef.pl PLATFORM=win32 $(OPTIMIZE) $(DEFINES) \
+       $(BUILDOPT) CCTYPE=$(CCTYPE) > perldll.def
+
+$(PERLDLL): perldll.def $(PERLDLL_OBJ) $(PERLDLL_RES)
+.IF "$(CCTYPE)" == "BORLAND"
+       $(LINK32) -Tpd -ap $(BLINK_FLAGS) \
+           @$(mktmp c0d32$(o) $(PERLDLL_OBJ:s,\,\\)\n \
+               $@,\n \
+               $(LIBFILES)\n \
+               perldll.def\n)
+       $(IMPLIB) $*.lib $@
+.ELIF "$(CCTYPE)" == "GCC"
+       $(LINK32) -mdll -o $@ -Wl,--base-file -Wl,perl.base $(BLINK_FLAGS) \
+           $(mktmp $(LKPRE) $(PERLDLL_OBJ:s,\,\\) $(LIBFILES) $(LKPOST))
+       dlltool --output-lib $(PERLIMPLIB) \
+               --dllname $(PERLDLL:b).dll \
+               --def perldll.def \
+               --base-file perl.base \
+               --output-exp perl.exp
+       $(LINK32) -mdll -o $@ $(BLINK_FLAGS) \
+           $(mktmp $(LKPRE) $(PERLDLL_OBJ:s,\,\\) $(LIBFILES) \
+               perl.exp $(LKPOST))
+.ELSE
+       $(LINK32) -dll -def:perldll.def -out:$@ \
+           @$(mktmp -base:0x28000000 $(BLINK_FLAGS) $(DELAYLOAD) $(LIBFILES) \
+               $(PERLDLL_RES) $(PERLDLL_OBJ:s,\,\\))
+.ENDIF
+       $(XCOPY) $(PERLIMPLIB) $(COREDIR)
+
+$(MINIMOD) : $(MINIPERL) ..\minimod.pl
+       cd .. && miniperl minimod.pl > lib\ExtUtils\Miniperl.pm
+
+..\x2p\a2p$(o) : ..\x2p\a2p.c
+       $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\a2p.c
+
+..\x2p\hash$(o) : ..\x2p\hash.c
+       $(CC) -I..\x2p  $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\hash.c
+
+..\x2p\str$(o) : ..\x2p\str.c
+       $(CC) -I..\x2p  $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\str.c
+
+..\x2p\util$(o) : ..\x2p\util.c
+       $(CC) -I..\x2p  $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\util.c
+
+..\x2p\walk$(o) : ..\x2p\walk.c
+       $(CC) -I..\x2p  $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\walk.c
+
+$(X2P) : $(MINIPERL) $(X2P_OBJ)
+       $(MINIPERL) ..\x2p\find2perl.PL
+       $(MINIPERL) ..\x2p\s2p.PL
+.IF "$(CCTYPE)" == "BORLAND"
+       $(LINK32) -Tpe -ap $(BLINK_FLAGS) \
+           @$(mktmp c0x32$(o) $(X2P_OBJ:s,\,\\),$(@:s,\,\\),,$(LIBFILES),)
+.ELIF "$(CCTYPE)" == "GCC"
+       $(LINK32) -v -o $@ $(BLINK_FLAGS) \
+           $(mktmp $(LKPRE) $(X2P_OBJ:s,\,\\) $(LIBFILES) $(LKPOST))
+.ELSE
+       $(LINK32) -subsystem:console -out:$@ \
+           @$(mktmp $(BLINK_FLAGS) $(LIBFILES) $(X2P_OBJ:s,\,\\))
+.ENDIF
+
+perlmain.c : runperl.c
+       copy runperl.c perlmain.c
+
+perlmain$(o) : perlmain.c
+       $(CC) $(CFLAGS_O) -UPERLDLL $(OBJOUT_FLAG)$@ -c perlmain.c
+
+$(PERLEXE): $(PERLDLL) $(CONFIGPM) $(PERLEXE_OBJ) $(PERLEXE_RES)
+.IF "$(CCTYPE)" == "BORLAND"
+       $(LINK32) -Tpe -ap $(BLINK_FLAGS) \
+           @$(mktmp c0x32$(o) $(PERLEXE_OBJ:s,\,\\)\n \
+           $(@:s,\,\\),\n \
+           $(PERLIMPLIB) $(LIBFILES)\n)
+.ELIF "$(CCTYPE)" == "GCC"
+       $(LINK32) -mconsole -o $@ $(BLINK_FLAGS)  \
+           $(PERLEXE_OBJ) $(PERLIMPLIB) $(LIBFILES)
+.ELSE
+       $(LINK32) -subsystem:console -out:$@ -stack:0x1000000 $(BLINK_FLAGS) \
+           $(LIBFILES) $(PERLEXE_OBJ) $(SETARGV_OBJ) $(PERLIMPLIB) $(PERLEXE_RES)
+.ENDIF
+       copy $(PERLEXE) $(WPERLEXE)
+       $(MINIPERL) -I..\lib bin\exetype.pl $(WPERLEXE) WINDOWS
+       copy splittree.pl ..
+       $(MINIPERL) -I..\lib ..\splittree.pl "../LIB" $(AUTODIR)
+
+$(DYNALOADER).c: $(MINIPERL) $(EXTDIR)\DynaLoader\dl_win32.xs $(CONFIGPM)
+       if not exist $(AUTODIR) mkdir $(AUTODIR)
+       cd $(EXTDIR)\$(*B) && ..\$(MINIPERL) -I..\..\lib $(*B)_pm.PL
+       cd $(EXTDIR)\$(*B) && ..\$(MINIPERL) -I..\..\lib XSLoader_pm.PL
+       $(XCOPY) $(EXTDIR)\$(*B)\$(*B).pm $(LIBDIR)\$(NULL)
+       $(XCOPY) $(EXTDIR)\$(*B)\XSLoader.pm $(LIBDIR)\$(NULL)
+       cd $(EXTDIR)\$(*B) && $(XSUBPP) dl_win32.xs > $(*B).c
+       $(XCOPY) $(EXTDIR)\$(*B)\dlutils.c .
+
+$(EXTDIR)\DynaLoader\dl_win32.xs: dl_win32.xs
+       copy dl_win32.xs $(EXTDIR)\DynaLoader\dl_win32.xs
+
+#----------------------------------------------------------------------------------
+Extensions : buildext.pl $(PERLDEP) $(CONFIGPM) 
+       $(MINIPERL) -I..\lib buildext.pl $(MAKE) $(PERLDEP) $(EXTDIR)
+
+Extensions_clean : 
+       -if exist $(MINIPERL) $(MINIPERL) -I..\lib buildext.pl $(MAKE) $(PERLDEP) $(EXTDIR) clean
+
+#----------------------------------------------------------------------------------
+
+
+doc: $(PERLEXE)
+       $(PERLEXE) -I..\lib ..\installhtml --podroot=.. --htmldir=./html \
+           --podpath=pod:lib:ext:utils --htmlroot="file://$(INST_HTML:s,:,|,)"\
+           --libpod=perlfunc:perlguts:perlvar:perlrun:perlop --recurse
+
+utils: $(PERLEXE) $(X2P)
+       cd ..\utils && $(MAKE) PERL=$(MINIPERL)
+       copy ..\README.aix      ..\pod\perlaix.pod
+       copy ..\README.amiga    ..\pod\perlamiga.pod
+       copy ..\README.apollo   ..\pod\perlapollo.pod
+       copy ..\README.beos     ..\pod\perlbeos.pod
+       copy ..\README.bs2000   ..\pod\perlbs2000.pod
+       copy ..\README.cygwin   ..\pod\perlcygwin.pod
+       copy ..\README.dgux     ..\pod\perldgux.pod
+       copy ..\README.dos      ..\pod\perldos.pod
+       copy ..\README.epoc     ..\pod\perlepoc.pod
+       copy ..\README.hpux     ..\pod\perlhpux.pod
+       copy ..\README.hurd     ..\pod\perlhurd.pod
+       copy ..\README.machten  ..\pod\perlmachten.pod
+       copy ..\README.macos    ..\pod\perlmacos.pod
+       copy ..\README.mint     ..\pod\perlmint.pod
+       copy ..\README.mpeix    ..\pod\perlmpeix.pod
+       copy ..\README.netware  ..\pod\perlnetware.pod
+       copy ..\README.os2      ..\pod\perlos2.pod
+       copy ..\README.os390    ..\pod\perlos390.pod
+       copy ..\README.plan9    ..\pod\perlplan9.pod
+       copy ..\README.qnx      ..\pod\perlqnx.pod
+       copy ..\README.solaris  ..\pod\perlsolaris.pod
+       copy ..\README.tru64    ..\pod\perltru64.pod
+       copy ..\README.vmesa    ..\pod\perlvmesa.pod
+       copy ..\vms\perlvms.pod ..\pod\perlvms.pod
+       copy ..\README.vos      ..\pod\perlvos.pod
+       copy ..\README.win32    ..\pod\perlwin32.pod
+       cd ..\pod && $(MAKE) -f ..\win32\pod.mak converters
+       cd ..\lib && $(PERLEXE) lib_pm.PL
+       $(PERLEXE) $(PL2BAT) $(UTILS)
+
+distclean: clean
+       -del /f $(MINIPERL) $(PERLEXE) $(PERLDLL) $(GLOBEXE) \
+               $(PERLIMPLIB) ..\miniperl$(a) $(MINIMOD)
+       -del /f *.def *.map
+       -del /f $(EXTDIR)\DynaLoader\dl_win32.xs
+       -del /f $(LIBDIR)\.exists $(LIBDIR)\attrs.pm $(LIBDIR)\DynaLoader.pm
+       -del /f $(LIBDIR)\XSLoader.pm
+       -del /f $(LIBDIR)\Fcntl.pm $(LIBDIR)\IO.pm $(LIBDIR)\Opcode.pm
+       -del /f $(LIBDIR)\ops.pm $(LIBDIR)\Safe.pm $(LIBDIR)\Thread.pm
+       -del /f $(LIBDIR)\SDBM_File.pm $(LIBDIR)\Socket.pm $(LIBDIR)\POSIX.pm
+       -del /f $(LIBDIR)\B.pm $(LIBDIR)\O.pm $(LIBDIR)\re.pm
+       -del /f $(LIBDIR)\Data\Dumper.pm $(LIBDIR)\ByteLoader.pm
+       -del /f $(LIBDIR)\PerlIO\Scalar.pm
+       -del /f $(LIBDIR)\Devel\Peek.pm $(LIBDIR)\Devel\DProf.pm
+       -del /f $(LIBDIR)\File\Glob.pm
+       -del /f $(LIBDIR)\Storable.pm
+       -del /f $(LIBDIR)\Filter\Util\Call.pm
+       -del /f $(LIBDIR)\Digest\MD5.pm
+       -del /f $(LIBDIR)\MIME\Base64.pm
+       -del /f $(LIBDIR)\MIME\QuotedPrint.pm
+       -del /f $(LIBDIR)\Time\HiRes.pm
+       -del /f $(LIBDIR)\List\Util.pm
+       -del /f $(LIBDIR)\Scalar\Util.pm
+       -del /f $(LIBDIR)\Time\Piece.pm
+       -if exist $(LIBDIR)\IO rmdir /s /q $(LIBDIR)\IO || rmdir /s $(LIBDIR)\IO
+       -if exist $(LIBDIR)\Thread rmdir /s /q $(LIBDIR)\Thread || rmdir /s $(LIBDIR)\Thread
+       -if exist $(LIBDIR)\B rmdir /s /q $(LIBDIR)\B || rmdir /s $(LIBDIR)\B
+       -if exist $(LIBDIR)\Data rmdir /s /q $(LIBDIR)\Data || rmdir /s $(LIBDIR)\Data
+       -if exist $(LIBDIR)\Filter\Util\Call rmdir /s /q $(LIBDIR)\Filter\Util\Call || rmdir /s $(LIBDIR)\Filter
+       -if exist $(LIBDIR)\Filter\Util rmdir /s /q $(LIBDIR)\Filter\Util || rmdir /s $(LIBDIR)\Filter
+       -if exist $(LIBDIR)\Digest rmdir /s /q $(LIBDIR)\Digest || rmdir /s $(LIBDIR)\Digest
+       -if exist $(LIBDIR)\MIME rmdir /s /q $(LIBDIR)\MIME || rmdir /s $(LIBDIR)\MIME
+       -if exist $(LIBDIR)\List rmdir /s /q $(LIBDIR)\List || rmdir /s $(LIBDIR)\List
+       -if exist $(LIBDIR)\Scalar rmdir /s /q $(LIBDIR)\Scalar || rmdir /s $(LIBDIR)\Scalar
+       -cd $(PODDIR) && del /f *.html *.bat checkpods \
+           perlaix.pod perlamiga.pod perlapollo.pod \
+           perlbeos.pod perlbs2000.pod perlcygwin.pod perldgux.pod \
+           perldos.pod perlepoc.pod perlhpux.pod perlhurd.pod \
+           perlmachten.pod perlmint.pod \
+           perlmacos.pod perlmpeix.pod perlnetware.pod \
+           perlos2.pod perlos390.pod \
+           perlplan9.pod perlqnx.pod \
+           perlsolaris.pod perlvmesa.pod perlvms.pod perlvos.pod \
+           perlwin32.pod pod2html pod2latex pod2man pod2text pod2usage \
+           podchecker podselect
+       -cd ..\utils && del /f h2ph splain perlbug pl2pm c2ph h2xs perldoc \
+           dprofpp *.bat
+       -cd ..\x2p && del /f find2perl s2p *.bat
+       -del /f ..\config.sh ..\splittree.pl perlmain.c dlutils.c config.h.new
+       -del /f $(CONFIGPM)
+       -del /f bin\*.bat
+       -cd $(EXTDIR) && del /s *$(a) *.def *.map *.pdb *.bs Makefile *$(o) \
+           pm_to_blib
+       -if exist $(AUTODIR) rmdir /s /q $(AUTODIR) || rmdir /s $(AUTODIR)
+       -if exist $(COREDIR) rmdir /s /q $(COREDIR) || rmdir /s $(COREDIR)
+
+install : all installbare installhtml
+
+installbare : $(RIGHTMAKE) utils
+       $(PERLEXE) ..\installperl
+       if exist $(WPERLEXE) $(XCOPY) $(WPERLEXE) $(INST_BIN)\*.*
+       $(XCOPY) $(GLOBEXE) $(INST_BIN)\*.*
+       $(XCOPY) bin\*.bat $(INST_SCRIPT)\*.*
+
+installhtml : doc
+       $(RCOPY) html\*.* $(INST_HTML)\*.*
+
+inst_lib : $(CONFIGPM)
+       copy splittree.pl ..
+       $(MINIPERL) -I..\lib ..\splittree.pl "../LIB" $(AUTODIR)
+       $(RCOPY) ..\lib $(INST_LIB)\*.*
+
+minitest : $(MINIPERL) $(GLOBEXE) $(CONFIGPM) utils
+       $(XCOPY) $(MINIPERL) ..\t\perl.exe
+.IF "$(CCTYPE)" == "BORLAND"
+       $(XCOPY) $(GLOBBAT) ..\t\$(NULL)
+.ELSE
+       $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
+.ENDIF
+       attrib -r ..\t\*.*
+       copy test ..\t
+       cd ..\t && \
+       $(MINIPERL) -I..\lib test base/*.t comp/*.t cmd/*.t io/*.t op/*.t pragma/*.t
+
+test-prep : all utils
+       $(XCOPY) $(PERLEXE) ..\t\$(NULL)
+       $(XCOPY) $(PERLDLL) ..\t\$(NULL)
+.IF "$(CCTYPE)" == "BORLAND"
+       $(XCOPY) $(GLOBBAT) ..\t\$(NULL)
+.ELSE
+       $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
+.ENDIF
+
+test : $(RIGHTMAKE) test-prep
+       cd ..\t && $(PERLEXE) -I..\lib harness
+
+test-notty : test-prep
+       set PERL_SKIP_TTY_TEST=1 && \
+           cd ..\t && $(PERLEXE) -I.\lib harness
+
+test-wide : test-prep
+       set HARNESS_PERL_SWITCHES=-C && \
+           cd ..\t && $(PERLEXE) -I..\lib harness
+
+test-wide-notty : test-prep
+       set PERL_SKIP_TTY_TEST=1 && \
+           set HARNESS_PERL_SWITCHES=-C && \
+           cd ..\t && $(PERLEXE) -I..\lib harness
+
+clean : Extensions_clean
+       -@erase miniperlmain$(o)
+       -@erase $(MINIPERL)
+       -@erase perlglob$(o)
+       -@erase perlmain$(o)
+       -@erase config.w32
+       -@erase /f config.h
+       -@erase $(GLOBEXE)
+       -@erase $(PERLEXE)
+       -@erase $(WPERLEXE)
+       -@erase $(PERLDLL)
+       -@erase $(CORE_OBJ)
+       -if exist $(MINIDIR) rmdir /s /q $(MINIDIR) || rmdir /s $(MINIDIR)
+       -@erase $(WIN32_OBJ)
+       -@erase $(DLL_OBJ)
+       -@erase $(X2P_OBJ)
+       -@erase ..\*$(o) ..\*$(a) ..\*.exp *$(o) *$(a) *.exp *.res
+       -@erase ..\t\*.exe ..\t\*.dll ..\t\*.bat
+       -@erase ..\x2p\*.exe ..\x2p\*.bat
+       -@erase *.ilk
+       -@erase *.pdb
+
+# 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 "dmake nok" instead.
+ok: utils
+       $(PERLEXE) -I..\lib ..\utils\perlbug -ok -s "(UNINSTALLED)"
+
+okfile: utils
+       $(PERLEXE) -I..\lib ..\utils\perlbug -ok -s "(UNINSTALLED)" -F perl.ok
+
+nok: utils
+       $(PERLEXE) -I..\lib ..\utils\perlbug -nok -s "(UNINSTALLED)"
+
+nokfile: utils
+       $(PERLEXE) -I..\lib ..\utils\perlbug -nok -s "(UNINSTALLED)" -F perl.nok
similarity index 97%
rename from win32/bin/mdelete.bat
rename to win32/mdelete.bat
index 0e7e8bd..69a19b7 100644 (file)
@@ -13,18 +13,17 @@ del %file%
 goto nextfile
 :end
 
-@echo off\r
-rem ! This is a batch file to delete all the files on its\r
-rem ! command line, to work around command.com's del command's\r
-rem ! braindeadness\r
-rem !\r
-rem !    -- BKS, 11-11-2000\r
-\r
-:nextfile\r
-set file=%1\r
-shift\r
-if "%file%"=="" goto end\r
-del %file%\r
-goto nextfile\r
-:end\r
-\r
+@echo off
+rem ! This is a batch file to delete all the files on its
+rem ! command line, to work around command.com's del command's
+rem ! braindeadness
+rem !
+rem !    -- BKS, 11-11-2000
+
+:nextfile
+set file=%1
+shift
+if "%file%"=="" goto end
+del %file%
+goto nextfile
+:end
index 1f8840c..7105eca 100644 (file)
@@ -180,6 +180,8 @@ END_EXTERN_C
        TlsFree(PL_thr_key);                                            \
     } STMT_END
 
+#define PTHREAD_ATFORK(prepare,parent,child)   NOOP
+
 #if defined(USE_RTL_THREAD_API) && !defined(_MSC_VER)
 #define JOIN(t, avp)                                                   \
     STMT_START {                                                       \
index fd43e23..382befb 100644 (file)
--- a/xsutils.c
+++ b/xsutils.c
@@ -87,9 +87,9 @@ modify_SV_attributes(pTHXo_ SV *sv, SV **retlist, SV **attrlist, int numattrs)
                case 's':
       if (strEQ(name, "unique")) {
                        if (negated)
-                           GvSHARED_off(CvGV((CV*)sv));
+                           GvUNIQUE_off(CvGV((CV*)sv));
                        else
-                           GvSHARED_on(CvGV((CV*)sv));
+                           GvUNIQUE_on(CvGV((CV*)sv));
                        continue;
                    }
                    break;
@@ -103,7 +103,7 @@ modify_SV_attributes(pTHXo_ SV *sv, SV **retlist, SV **attrlist, int numattrs)
                switch (*name) {
                   case 's':
       if (strEQ(name, "unique")) {
-                        /* toke.c has already marked as GvSHARED */
+                        /* toke.c has already marked as GVf_UNIQUE */
                         continue;
                     }
                 }
@@ -189,7 +189,7 @@ usage:
 #endif
        if (cvflags & CVf_METHOD)
            XPUSHs(sv_2mortal(newSVpvn("method", 6)));
-        if (GvSHARED(CvGV((CV*)sv)))
+        if (GvUNIQUE(CvGV((CV*)sv)))
      XPUSHs(sv_2mortal(newSVpvn("unique", 6)));
        break;
     default: