This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Integrate mainline
authorNick Ing-Simmons <nik@tiuk.ti.com>
Fri, 3 Aug 2001 08:17:38 +0000 (08:17 +0000)
committerNick Ing-Simmons <nik@tiuk.ti.com>
Fri, 3 Aug 2001 08:17:38 +0000 (08:17 +0000)
p4raw-id: //depot/perlio@11557

96 files changed:
Changes
Configure
MANIFEST
Porting/Glossary
Porting/config.sh
Porting/config_H
README.ce [new file with mode: 0644]
cflags.SH
embedvar.h
ext/B/B/Deparse.pm
ext/B/Showlex.t
ext/DB_File/Changes
ext/DB_File/DB_File.pm
ext/DB_File/DB_File.xs
ext/DB_File/version.c
ext/IO/lib/IO/t/io_unix.t
hints/darwin.sh
lib/File/Copy.pm
lib/File/Copy.t
lib/Switch.pm
lib/Switch/Changes [new file with mode: 0755]
lib/Switch/README [new file with mode: 0644]
lib/Switch/t/given_when.t [new file with mode: 0644]
lib/Switch/t/switch_case.t [moved from lib/Switch/test.pl with 99% similarity]
mg.c
op.c
patchlevel.h
perl.c
perl.h
perlapi.h
perlio.c
pod/buildtoc.PL
pod/perl.pod
pod/perlapi.pod
pod/perlobj.pod
pod/perlport.pod
pod/perlre.pod
pod/perltoc.pod
pp.c
sv.c
t/TestInit.pm
t/harness
t/io/fs.t
t/lib/warnings/4lint
t/lib/warnings/9enabled
t/op/tiehandle.t
t/run/exit.t
thrdvar.h
toke.c
unixish.h
util.c
utils/h2xs.PL
win32/Makefile
win32/makefile.mk
wince/FindExt.pm [new file with mode: 0644]
wince/Makefile.ce [new file with mode: 0644]
wince/README.compile [new file with mode: 0644]
wince/README.perlce [new file with mode: 0644]
wince/bin/exetype.pl [new file with mode: 0644]
wince/bin/perlglob.pl [new file with mode: 0644]
wince/bin/pl2bat.pl [new file with mode: 0644]
wince/bin/runperl.pl [new file with mode: 0644]
wince/bin/search.pl [new file with mode: 0644]
wince/config.ce [new file with mode: 0644]
wince/config.h [new file with mode: 0644]
wince/config_H.ce [new file with mode: 0644]
wince/config_h.PL [new file with mode: 0644]
wince/config_sh.PL [new file with mode: 0644]
wince/dl_win32.xs [new file with mode: 0644]
wince/include/arpa/inet.h [new file with mode: 0644]
wince/include/cectype.h [new file with mode: 0644]
wince/include/errno.h [new file with mode: 0644]
wince/include/netdb.h [new file with mode: 0644]
wince/include/sys/socket.h [new file with mode: 0644]
wince/include/sys/stat.h [new file with mode: 0644]
wince/include/sys/types.h [new file with mode: 0644]
wince/include/sys/utime.h [new file with mode: 0644]
wince/include/time.h [new file with mode: 0644]
wince/perl.ico [new file with mode: 0644]
wince/perl.rc [new file with mode: 0644]
wince/perldll.def [new file with mode: 0644]
wince/perllib.c [new file with mode: 0644]
wince/perlmain.c [new file with mode: 0644]
wince/registry.bat [new file with mode: 0755]
wince/runperl.c [new file with mode: 0644]
wince/splittree.pl [new file with mode: 0644]
wince/win32.h [new file with mode: 0644]
wince/win32iop.h [new file with mode: 0644]
wince/win32thread.c [new file with mode: 0644]
wince/win32thread.h [new file with mode: 0644]
wince/wince.c [new file with mode: 0644]
wince/wince.h [new file with mode: 0644]
wince/wincesck.c [new file with mode: 0644]
wince/xbuildall.ksh [new file with mode: 0644]
wince/xdistclean.ksh [new file with mode: 0644]
wince/xmakediffs.ksh [new file with mode: 0644]

diff --git a/Changes b/Changes
index c30f0e1..ed3b8b4 100644 (file)
--- a/Changes
+++ b/Changes
@@ -31,6 +31,340 @@ or any other branch.
 Version v5.7.2         Development release working toward v5.8
 --------------
 ____________________________________________________________________________
+[ 11545] By: jhi                                   on 2001/08/02  00:48:55
+        Log: Subject: Re: [PATCH pp_ctl.c] proposed Windows safe-guard
+             From: Doug MacEachern <dougm@covalent.net>
+             Date: Wed, 1 Aug 2001 18:34:44 -0700 (PDT)
+             Message-ID: <Pine.LNX.4.21.0108011830080.8991-100000@mako.covalent.net>
+     Branch: perl
+          ! op.c
+____________________________________________________________________________
+[ 11544] By: jhi                                   on 2001/08/01  23:08:41
+        Log: The #11541 didn't work under threads.
+     Branch: perl
+          ! op.c
+____________________________________________________________________________
+[ 11543] By: jhi                                   on 2001/08/01  22:46:41
+        Log: Subject: Re: [ID 20010621.002] UnixWare 7.1.1 and Perl-5.6.1 problems
+             From: Hugo <hv@crypt.compulink.co.uk>
+             Date: Fri, 22 Jun 2001 01:19:08 +0100 
+             Message-Id: <200106220019.BAA03365@crypt.compulink.co.uk>
+             
+             (Skip tests if accept() failed)
+     Branch: perl
+          ! ext/IO/lib/IO/t/io_unix.t
+____________________________________________________________________________
+[ 11542] By: jhi                                   on 2001/08/01  22:40:09
+        Log: Subject: [ID 20010730.003] IRIX 6.5 already has struct sv in <sys/sema.h> (defined in perl.h)
+             From: "Stian Seeberg" <sseeberg@nimsoft.no>
+             Date: Mon, 30 Jul 2001 12:28:07 +0200
+             Message-Id: <68236D3FC2D92347B466639324391D1A0432AB@PONDUS.nimsoft.no>
+     Branch: perl
+          ! perl.h
+____________________________________________________________________________
+[ 11541] By: jhi                                   on 2001/08/01  22:38:31
+        Log: Subject: Pluggable optimizer
+             From: Simon Cozens <simon@netthink.co.uk>
+             Date: Wed, 1 Aug 2001 13:57:02 -0700
+             Message-ID: <20010801135702.I10442@netthink.co.uk>
+     Branch: perl
+          ! embedvar.h op.c perl.c perl.h perlapi.h sv.c thrdvar.h util.c
+____________________________________________________________________________
+[ 11540] By: jhi                                   on 2001/08/01  22:29:54
+        Log: Subject: [ID 20010801.039] perlre.pod message typo
+             From: Autrijus Tang <autrijus@geb.elixus.org>
+             Date: Thu, 2 Aug 2001 04:48:02 +0800 (CST)
+             Message-Id: <200108012048.f71Km2r79890@geb.elixus.org>                         
+     Branch: perl
+          ! pod/perlre.pod
+____________________________________________________________________________
+[ 11539] By: jhi                                   on 2001/08/01  16:32:52
+        Log: Test for change #11536.
+     Branch: perl
+          ! t/op/tiehandle.t
+____________________________________________________________________________
+[ 11538] By: jhi                                   on 2001/08/01  16:27:19
+        Log: More test fixups for #11537.
+     Branch: perl
+          ! t/lib/warnings/4lint t/lib/warnings/9enabled
+____________________________________________________________________________
+[ 11537] By: jhi                                   on 2001/08/01  16:26:25
+        Log: Subject: Re: [PATCH pp_ctl.c] proposed Windows safe-guard
+             From: Doug MacEachern <dougm@covalent.net>
+             Date: Mon, 30 Jul 2001 17:38:50 -0700 (PDT)
+             Message-ID: <Pine.LNX.4.21.0107301720310.25941-100000@mako.covalent.net>
+     Branch: perl
+          ! op.c t/TestInit.pm
+____________________________________________________________________________
+[ 11536] By: jhi                                   on 2001/08/01  16:08:08
+        Log: Subject: [patch] ithreads + refto bug
+             From: Doug MacEachern <dougm@covalent.net>
+             Date: Wed, 1 Aug 2001 09:47:28 -0700 (PDT)
+             Message-ID: <Pine.LNX.4.21.0108010937240.7498-100000@mako.covalent.net>
+             
+             (Test in change #11539)
+     Branch: perl
+          ! pp.c
+____________________________________________________________________________
+[ 11535] By: jhi                                   on 2001/08/01  16:05:56
+        Log: Subject: [PATCH: perl@11523] fixups for t/harness
+             From: Prymmer/Kahn <pvhp@best.com>
+             Date: Wed, 1 Aug 2001 09:24:23 -0700 (PDT)
+             Message-ID: <Pine.BSF.4.21.0108010910310.17655-100000@shell8.ba.best.com>
+     Branch: perl
+          ! t/harness
+____________________________________________________________________________
+[ 11534] By: jhi                                   on 2001/08/01  16:00:45
+        Log: Subject: [PATCH: perl@11523] add xsubpp and libnetcfg to installed *.bat files for win32 builds
+             From: Prymmer/Kahn <pvhp@best.com>
+             Date: Wed, 1 Aug 2001 09:07:13 -0700 (PDT)
+             Message-ID: <Pine.BSF.4.21.0108010859230.17655-100000@shell8.ba.best.com>
+     Branch: perl
+          ! win32/Makefile win32/makefile.mk
+____________________________________________________________________________
+[ 11533] By: jhi                                   on 2001/08/01  13:38:29
+        Log: Need to know the number of tests.
+     Branch: perl
+          ! t/run/exit.t
+____________________________________________________________________________
+[ 11532] By: jhi                                   on 2001/08/01  13:04:31
+        Log: Subject: Re: new exit tests on VMS
+             From: "Craig A. Berry" <craigberry@mac.com>
+             Date: Tue, 31 Jul 2001 12:19:29 -0500
+             Message-Id: <5.1.0.14.0.20010731114845.03743008@mail.telocity.com>
+     Branch: perl
+          ! t/run/exit.t
+____________________________________________________________________________
+[ 11531] By: jhi                                   on 2001/08/01  12:46:43
+        Log: Retract #11530 (the dTHX is needed under threads)
+     Branch: perl
+          ! perlio.c
+____________________________________________________________________________
+[ 11530] By: jhi                                   on 2001/08/01  12:39:35
+        Log: (Retracted by #11531)
+     Branch: perl
+          ! perlio.c
+____________________________________________________________________________
+[ 11529] By: jhi                                   on 2001/08/01  12:32:22
+        Log: Subject: [PATCH 1/4] -Wall cleanups: unixish.h
+             From: Richard Soderberg <rs@crystalflame.net>
+             Date: Tue, 31 Jul 2001 23:16:22 -0700 (PDT) 
+             Message-ID: <Pine.LNX.4.21.0107312313490.24341-100000@oregonnet.com>
+     Branch: perl
+          ! unixish.h
+____________________________________________________________________________
+[ 11528] By: jhi                                   on 2001/08/01  12:18:59
+        Log: Subject: [PATCH 5.7.2] Allow for long long in h2xs 
+             From: Ilya Zakharevich <ilya@math.ohio-state.edu>
+             Date: Tue, 31 Jul 2001 05:39:09 -0400
+             Message-ID: <20010731053909.A1810@math.ohio-state.edu>
+             
+             (with a note about the case of UV being equal to long long)
+     Branch: perl
+          ! utils/h2xs.PL
+____________________________________________________________________________
+[ 11527] By: jhi                                   on 2001/07/31  23:49:04
+        Log: Subject: [PATCH perl@11487] fix fs.t for VMS
+             From: "Craig A. Berry" <craigberry@mac.com>
+             Date: Tue, 31 Jul 2001 14:57:43 -0500
+             Message-Id: <5.1.0.14.0.20010731145015.03743008@exchi01>
+     Branch: perl
+          ! t/io/fs.t
+____________________________________________________________________________
+[ 11526] By: jhi                                   on 2001/07/31  23:47:57
+        Log: Fix for
+             
+             Subject: [ID 20010116.001] File::Copy truncates orig file 
+             From: arbor@al37al08.telecel.pt
+             Date: Tue, 16 Jan 2001 11:43:02 GMT
+             Message-Id: <200101161143.AA11184@al37al08.telecel.pt>
+             
+             (copy($foo, $foo) would truncate $foo)
+     Branch: perl
+          ! lib/File/Copy.pm lib/File/Copy.t
+____________________________________________________________________________
+[ 11525] By: jhi                                   on 2001/07/31  23:01:01
+        Log: Metaconfig unit change for #11524.
+     Branch: metaconfig/U/perl
+          ! Extras.U
+____________________________________________________________________________
+[ 11524] By: jhi                                   on 2001/07/31  23:00:36
+        Log: Multiple modules didn't work; plus typo fixes.
+     Branch: perl
+          ! Configure
+____________________________________________________________________________
+[ 11523] By: jhi                                   on 2001/07/31  15:29:58
+        Log: Update Changes.
+     Branch: perl
+          ! Changes patchlevel.h
+____________________________________________________________________________
+[ 11522] By: jhi                                   on 2001/07/31  15:25:35
+        Log: Regen perlapi.
+     Branch: perl
+          ! pod/perlapi.pod
+____________________________________________________________________________
+[ 11521] By: jhi                                   on 2001/07/31  15:19:01
+        Log: Subject: Re: [PATCH sv.c] mortal doc thinko
+             From: Dave Mitchell <davem@fdgroup.co.uk>
+             Date: Tue, 31 Jul 2001 11:52:42 +0100 (BST)
+             Message-Id: <200107311052.LAA14427@gizmo.fdgroup.co.uk>
+     Branch: perl
+          ! sv.c
+____________________________________________________________________________
+[ 11520] By: jhi                                   on 2001/07/31  15:17:43
+        Log: Regen toc.
+     Branch: perl
+          ! pod/perltoc.pod
+____________________________________________________________________________
+[ 11519] By: jhi                                   on 2001/07/31  15:17:17
+        Log: Regen Porting stuff.
+     Branch: perl
+          ! Porting/Glossary Porting/config.sh Porting/config_H
+____________________________________________________________________________
+[ 11518] By: jhi                                   on 2001/07/31  14:16:08
+        Log: Subject: [PATCH 5.7.2] Allow for GNU-isms in h2xs
+             From: Ilya Zakharevich <ilya@math.ohio-state.edu>
+             Date: Tue, 31 Jul 2001 05:34:38 -0400
+             Message-ID: <20010731053438.A1754@math.ohio-state.edu>
+     Branch: perl
+          ! utils/h2xs.PL
+____________________________________________________________________________
+[ 11517] By: jhi                                   on 2001/07/31  14:15:01
+        Log: Metaconfig unit change for #11516.        
+     Branch: metaconfig/U/perl
+          ! gccvers.U
+____________________________________________________________________________
+[ 11516] By: jhi                                   on 2001/07/31  14:14:35
+        Log: Add -Wall in cflags, not in Configure.
+             (This way -Wall affects only the core and the core XS,
+             not user modules' XS.  Concern from Paul Marquess,
+             implementation idea from Andy Dougherty.)
+     Branch: perl
+          ! Configure cflags.SH
+____________________________________________________________________________
+[ 11515] By: jhi                                   on 2001/07/31  13:57:15
+        Log: Metaconfig unit changes for #11514.
+     Branch: metaconfig
+          + U/modified/sysman.U
+          ! U/installdirs/man1dir.U
+____________________________________________________________________________
+[ 11514] By: jhi                                   on 2001/07/31  13:56:26
+        Log: Subject: Configure's detection of system manual
+             From: Sean Dague <sean@dague.net> 
+             Date: Sun, 13 May 2001 15:53:15 -0400
+             Message-ID: <20010513155315.A15833@underhill.dague.net>
+     Branch: perl
+          ! Configure
+____________________________________________________________________________
+[ 11513] By: jhi                                   on 2001/07/31  03:23:01
+        Log: Subject: [ID 20010621.004] Typo in perlobj.pod
+             From: Autrijus Tang <autrijus@autrijus.org> 
+             Date: Thu, 21 Jun 2001 23:56:48 +0800
+             Message-Id: <20010621235648.A57340@not.autrijus.org>
+     Branch: perl
+          ! pod/perlobj.pod
+____________________________________________________________________________
+[ 11512] By: jhi                                   on 2001/07/31  03:13:35
+        Log: Subject: Typo in DB_File.pm
+             From: "Philip Newton" <Philip.Newton@gmx.net>
+             Date: Tue, 31 Jul 2001 06:19:35 +0200
+             Message-Id: <200107310413.f6V4DmL11900@chaos.wustl.edu>
+     Branch: perl
+          ! ext/DB_File/DB_File.pm
+____________________________________________________________________________
+[ 11511] By: jhi                                   on 2001/07/31  03:01:49
+        Log: Subject: Re: [ID 20010529.002] typos in man page perlre 
+             From: "Stephen P. Potter" <spp@spotter.yi.org>
+             Date: Wed, 30 May 2001 13:59:34 -0400
+             Message-Id: <20010530175939.59DEC729E1@belgarath.spotter.yi.org>
+     Branch: perl
+          ! pod/perlre.pod
+____________________________________________________________________________
+[ 11510] By: jhi                                   on 2001/07/31  02:13:58
+        Log: eval "format foo=" would loop indefinitely; reported in
+             
+             Subject: A load of old rubbish
+             From: Mike Guy <mjtg@cam.ac.uk>
+             Date: Mon, 14 May 2001 16:12:22 +0100
+             Message-Id: <E14zK1G-0003a2-00@virgo.cus.cam.ac.uk>
+             
+             (The core dumps reported in there already fixed.)
+     Branch: perl
+          ! toke.c
+____________________________________________________________________________
+[ 11509] By: jhi                                   on 2001/07/31  00:37:49
+        Log: Upgrade to Switch 2.04, now with Perl 6 given+when.
+     Branch: perl
+          + lib/Switch/Changes lib/Switch/README lib/Switch/t/given_when.t
+          + lib/Switch/t/switch_case.t
+          - lib/Switch/test.pl
+          ! MANIFEST lib/Switch.pm
+____________________________________________________________________________
+[ 11508] By: jhi                                   on 2001/07/31  00:17:38
+        Log: Subject: [PATCH @11505] DB_File-1.78
+             From: "Paul Marquess" <Paul_Marquess@Yahoo.co.uk>
+             Date: Mon, 30 Jul 2001 22:54:37 +0100
+             Message-ID: <AIEAJICLCBDNAAOLLOKLGELNCLAA.Paul_Marquess@Yahoo.co.uk>
+     Branch: perl
+          ! ext/DB_File/Changes ext/DB_File/DB_File.pm
+          ! ext/DB_File/DB_File.xs ext/DB_File/version.c
+____________________________________________________________________________
+[ 11507] By: jhi                                   on 2001/07/30  23:11:10
+        Log: Explain in more detail why -pipe and -fno-common are good.
+     Branch: perl
+          ! hints/darwin.sh
+____________________________________________________________________________
+[ 11506] By: nick                                  on 2001/07/30  14:32:23
+        Log: Integrate mainline
+     Branch: perlio
+         !> INSTALL Makefile.SH doio.c hints/darwin.sh
+____________________________________________________________________________
+[ 11505] By: jhi                                   on 2001/07/30  14:14:39
+        Log: Perl hasn't been putting man pages into $prefix/lib for
+             a long time now; pointed out by Andy Dougherty. 
+     Branch: perl
+          ! hints/darwin.sh
+____________________________________________________________________________
+[ 11504] By: jhi                                   on 2001/07/30  14:13:15
+        Log: Document the extras Configure option.
+     Branch: perl
+          ! INSTALL
+____________________________________________________________________________
+[ 11503] By: jhi                                   on 2001/07/30  13:52:14
+        Log: Integrate change #11051 from macperl; O_RDONLY is not zero
+             everywhere.
+     Branch: perl
+         !> doio.c
+____________________________________________________________________________
+[ 11502] By: jhi                                   on 2001/07/30  13:45:27
+        Log: Doubly guard against invoking CPAN if no extras defined,
+             pointed out by H. Merijn Brand.
+     Branch: perl
+          ! Makefile.SH
+____________________________________________________________________________
+[ 11501] By: pudge                                 on 2001/07/30  12:57:56
+        Log: Fix O_RDONLY check to check for O_RDONLY.
+     Branch: maint-5.6/macperl
+          ! doio.c
+____________________________________________________________________________
+[ 11500] By: pudge                                 on 2001/07/30  12:41:11
+        Log: Integrate miscellaneous changes from maint-5.6/perl.
+     Branch: maint-5.6/macperl
+         !> MANIFEST t/TEST t/harness t/pod/testp2pt.pl t/run/runenv.t
+____________________________________________________________________________
+[ 11499] By: nick                                  on 2001/07/30  06:52:42
+        Log: Integrate mainline
+     Branch: perlio
+         +> macos/MacPerlTests.cmd macos/xsubpp.patch os2/perlrexx.c
+         +> win32/sync_ext.pl
+          - win32/sncfnmcs.pl
+         !> (integrate 71 files)
+____________________________________________________________________________
+[ 11498] By: jhi                                   on 2001/07/30  03:53:34
+        Log: Update Changes.
+     Branch: perl
+          ! Changes patchlevel.h
+____________________________________________________________________________
 [ 11497] By: jhi                                   on 2001/07/30  03:45:32
         Log: Now Configure -Dextras=Foo::Bar and "make install" will
              fetch and install Foo::Bar.
index 437d66b..98621ab 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 Mon Jul 30 06:47:25 EET DST 2001 [metaconfig 3.0 PL70]
+# Generated on Wed Aug  1 02:58:53 EET DST 2001 [metaconfig 3.0 PL70]
 # (with additional metaconfig patches by perlbug@perl.org)
 
 cat >c1$$ <<EOF
@@ -3519,14 +3519,6 @@ case "$ccname" in
 '') ccname="$cc" ;;
 esac
 
-case "$gccversion" in
-'') ;;
-*)  case "$ccflags" in
-    *-Wall*) ;;
-    *) ccflags="$ccflags -Wall" ;;
-    esac
-    ;;
-esac
 
 : decide how portable to be.  Allow command line overrides.
 case "$d_portable" in
@@ -6780,13 +6772,14 @@ be asked later to configure the CPAN.pm module which will in turn do
 the installation of the rest of the extra modules or bundles.)
 
 Notice also that if the modules require any external software such as
-libraries (the libz library for the Compress::Zlib module, for example)
-you *NEED* to have any such external software already installed, this
-configuration process will not install such things for you.
+libraries and headers (the libz library and the zlib.h header for the
+Compress::Zlib module, for example) you MUST have any such software
+already installed, this configuration process will NOT install such
+things for you.
 
 If this doesn't make any sense to you, just accept the default '$dflt'.
 EOM
-rp='Install any extra modules (y or n) ?'
+rp='Install any extra modules (y or n)?'
 . ./myread
 case "$ans" in
 y|Y)
@@ -6794,8 +6787,8 @@ y|Y)
 
 Please list any extra modules or bundles to be installed from CPAN,
 with spaces between the names.  The names can be in any format the
-'install' command of CPAN.pm will understand.  (Answer 'none' the
-quotes, to install no extra modules or bundles.)
+'install' command of CPAN.pm will understand.  (Answer 'none',
+without the quotes, to install no extra modules or bundles.)
 EOM
        rp='Extras?'
        dflt="$extras"
@@ -6808,8 +6801,8 @@ case "$extras" in
        $rm -f ../extras.lst
        ;;
 *)     echo "(Saving the list of extras for later...)"
-       echo $extras > ../extras.lst
-       val="$extras"
+       echo "$extras" > ../extras.lst
+       val="'$extras'"
        ;;
 esac
 set extras
@@ -7409,8 +7402,9 @@ esac
 echo " "
 case "$sysman" in
 '') 
-       syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
-       syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
+       syspath='/usr/share/man/man1 /usr/man/man1'
+       syspath="$syspath /usr/man/mann /usr/man/manl /usr/man/local/man1"
+       syspath="$syspath /usr/man/u_man/man1"
        syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
        syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
        syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
@@ -7442,7 +7436,8 @@ case "$man1dir" in
 ' ') dflt=none
        ;;
 '')
-       lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
+       lookpath="$prefixexp/share/man/man1"
+       lookpath="$lookpath $prefixexp/man/man1 $prefixexp/man/l_man/man1"
        lookpath="$lookpath $prefixexp/man/p_man/man1"
        lookpath="$lookpath $prefixexp/man/u_man/man1"
        lookpath="$lookpath $prefixexp/man/man.1"
index 3d7b42f..8f46b10 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -1094,7 +1094,10 @@ lib/strict.t                     See if strictures work
 lib/subs.pm                    Declare overriding subs
 lib/subs.t                     See if subroutine pseudo-importation works
 lib/Switch.pm                  Switch for Perl
-lib/Switch/test.pl             Test whether switch works
+lib/Switch/Changes     Switch for Perl
+lib/Switch/README      Switch for Perl
+lib/Switch/t/given_when.t      See if Perl 6 given (switch) works
+lib/Switch/t/switch_case.t     See if Perl 5 switch works
 lib/Symbol.pm                  Symbol table manipulation routines
 lib/Symbol.t                   See if Symbol works
 lib/syslog.pl                  Perl library supporting syslogging
@@ -1812,6 +1815,7 @@ README.amiga              Notes about AmigaOS port
 README.apollo          Notes about Apollo DomainOS port
 README.beos            Notes about BeOS port
 README.bs2000          Notes about BS2000 POSIX port
+README.ce              Notes about WinCE port
 README.cygwin          Notes about Cygwin port
 README.dgux            Notes about DG/UX port
 README.dos             Notes about DOS/DJGPP port
@@ -2247,6 +2251,48 @@ win32/win32iop.h         Win32 port
 win32/win32sck.c               Win32 port
 win32/win32thread.c            Win32 functions for threads
 win32/win32thread.h            Win32 port mapping to threads
+wince/bin/exetype.pl                   WinCE port
+wince/bin/perlglob.pl                  WinCE port
+wince/bin/pl2bat.pl                    WinCE port
+wince/bin/runperl.pl                   WinCE port
+wince/bin/search.pl                    WinCE port
+wince/config.ce                                WinCE port
+wince/config.h                         WinCE port
+wince/config_H.ce                      WinCE port
+wince/config_h.PL                      WinCE port
+wince/config_sh.PL                     WinCE port
+wince/dl_win32.xs                      WinCE port
+wince/FindExt.pm                       WinCE port
+wince/include/arpa/inet.h              WinCE port
+wince/include/cectype.h                        WinCE port
+wince/include/errno.h                  WinCE port
+wince/include/netdb.h                  WinCE port
+wince/include/sys/socket.h             WinCE port
+wince/include/sys/stat.h               WinCE port
+wince/include/sys/types.h              WinCE port
+wince/include/sys/utime.h              WinCE port
+wince/include/time.h                   WinCE port
+wince/Makefile.ce                      WinCE port
+wince/perl.ico                         WinCE port
+wince/perl.rc                          WinCE port
+wince/perldll.def                      WinCE port
+wince/perllib.c                                WinCE port
+wince/perlmain.c                       WinCE port
+wince/README.compile                   WinCE port
+wince/README.perlce                    WinCE port
+wince/registry.bat                     WinCE port
+wince/runperl.c                                WinCE port
+wince/splittree.pl                     WinCE port
+wince/win32.h                          WinCE port
+wince/win32iop.h                       WinCE port
+wince/win32thread.c                    WinCE port
+wince/win32thread.h                    WinCE port
+wince/wince.c                          WinCE port
+wince/wince.h                          WinCE port
+wince/wincesck.c                       WinCE port
+wince/xbuildall.ksh                    WinCE port
+wince/xdistclean.ksh                   WinCE port
+wince/xmakediffs.ksh                   WinCE port
 writemain.SH                   Generate perlmain.c from miniperlmain.c+extensions
 x2p/a2p.c                      Output of a2p.y run through byacc
 x2p/a2p.h                      Global declarations
index db66cb9..aaea2e7 100644 (file)
@@ -1955,6 +1955,9 @@ extensions (Extensions.U):
        and is typically used to test whether a particular extesion 
        is available.
 
+extras (Extras.U):
+       This variable holds a list of extra modules to install.
+
 fflushall (fflushall.U):
        This symbol, if defined, tells that to flush
        all pending stdio output one must loop through all
index 56e9faf..4bf2b8b 100644 (file)
@@ -8,7 +8,7 @@
 
 # Package name      : perl5
 # Source directory  : .
-# Configuration time: Fri Jul 13 03:15:46 EET DST 2001
+# Configuration time: Tue Jul 31 18:19:35 EET DST 2001
 # Configured by     : jhi
 # Target system     : osf1 alpha.hut.fi v4.0 878 alpha 
 
@@ -36,16 +36,16 @@ api_subversion='0'
 api_version='5'
 api_versionstring='5.005'
 ar='ar'
-archlib='/opt/perl/lib/5.7.2/alpha-dec_osf-thread'
-archlibexp='/opt/perl/lib/5.7.2/alpha-dec_osf-thread'
+archlib='/opt/perl/lib/5.7.2/alpha-dec_osf'
+archlibexp='/opt/perl/lib/5.7.2/alpha-dec_osf'
 archname64=''
-archname='alpha-dec_osf-thread'
+archname='alpha-dec_osf'
 archobjs=''
 awk='awk'
 baserev='5.0'
 bash=''
 bin='/opt/perl/bin'
-bincompat5005='undef'
+bincompat5005='define'
 binexp='/opt/perl/bin'
 bison='bison'
 byacc='byacc'
@@ -55,15 +55,15 @@ castflags='0'
 cat='cat'
 cc='cc'
 cccdlflags=' '
-ccdlflags='  -Wl,-rpath,/opt/perl/lib/5.7.2/alpha-dec_osf-thread/CORE'
-ccflags='-pthread -std -DLANGUAGE_C'
+ccdlflags='  -Wl,-rpath,/opt/perl/lib/5.7.2/alpha-dec_osf/CORE'
+ccflags='-std -fprm d -ieee -D_INTRINSICS -DLANGUAGE_C'
 ccflags_uselargefiles=''
 ccname='cc'
 ccsymbols='__alpha=1 __LANGUAGE_C__=1 __osf__=1 __unix__=1 _LONGLONG=1 _SYSTYPE_BSD=1 SYSTYPE_BSD=1 unix=1'
 ccversion='V5.6-082'
 cf_by='jhi'
 cf_email='yourname@yourhost.yourplace.com'
-cf_time='Fri Jul 13 03:15:46 EET DST 2001'
+cf_time='Tue Jul 31 18:19:35 EET DST 2001'
 charsize='1'
 chgrp=''
 chmod='chmod'
@@ -77,12 +77,12 @@ cpio=''
 cpp='cpp'
 cpp_stuff='42'
 cppccsymbols='LANGUAGE_C=1'
-cppflags='-pthread -std -DLANGUAGE_C'
+cppflags='-std -ieee -D_INTRINSICS -DLANGUAGE_C'
 cpplast=''
 cppminus=''
 cpprun='/usr/bin/cpp'
 cppstdin='cppstdin'
-cppsymbols='_AES_SOURCE=1 __alpha=1 __ALPHA=1 _ANSI_C_SOURCE=1 __LANGUAGE_C__=1 _LONGLONG=1 __osf__=1 _OSF_SOURCE=1 _POSIX_C_SOURCE=199506 _POSIX_SOURCE=1 _REENTRANT=1 __STDC__=1 _SYSTYPE_BSD=1 __unix__=1 _XOPEN_SOURCE=1'
+cppsymbols='_AES_SOURCE=1 __alpha=1 __ALPHA=1 _ANSI_C_SOURCE=1 _INTRINSICS=1 __LANGUAGE_C__=1 _LONGLONG=1 __osf__=1 _OSF_SOURCE=1 _POSIX_C_SOURCE=199506 _POSIX_SOURCE=1 __STDC__=1 _SYSTYPE_BSD=1 __unix__=1 _XOPEN_SOURCE=1'
 cryptlib=''
 csh='csh'
 d_Gconvert='sprintf((b),"%.*g",(n),(x))'
@@ -109,7 +109,7 @@ d_atoll='undef'
 d_attribut='undef'
 d_bcmp='define'
 d_bcopy='define'
-d_bincompat5005='undef'
+d_bincompat5005='define'
 d_bsd='undef'
 d_bsdgetpgrp='undef'
 d_bsdsetpgrp='define'
@@ -430,7 +430,7 @@ dlext='so'
 dlsrc='dl_dlopen.xs'
 doublesize='8'
 drand01='drand48()'
-dynamic_ext='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/Scalar PerlIO/Via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread Time/HiRes Time/Piece XS/Typemap attrs re'
+dynamic_ext='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/Scalar PerlIO/Via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Time/Piece XS/Typemap attrs re'
 eagain='EAGAIN'
 ebcdic='undef'
 echo='echo'
@@ -439,7 +439,8 @@ emacs=''
 eunicefix=':'
 exe_ext=''
 expr='expr'
-extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/Scalar PerlIO/Via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread Time/HiRes Time/Piece XS/Typemap attrs re Errno'
+extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/Scalar PerlIO/Via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Time/Piece XS/Typemap attrs re Errno'
+extras=''
 fflushNULL='define'
 fflushall='undef'
 find=''
@@ -560,7 +561,7 @@ inc_version_list=' '
 inc_version_list_init='0'
 incpath=''
 inews=''
-installarchlib='/opt/perl/lib/5.7.2/alpha-dec_osf-thread'
+installarchlib='/opt/perl/lib/5.7.2/alpha-dec_osf'
 installbin='/opt/perl/bin'
 installman1dir='/opt/perl/man/man1'
 installman3dir='/opt/perl/man/man3'
@@ -568,7 +569,7 @@ installprefix='/opt/perl'
 installprefixexp='/opt/perl'
 installprivlib='/opt/perl/lib/5.7.2'
 installscript='/opt/perl/bin'
-installsitearch='/opt/perl/lib/site_perl/5.7.2/alpha-dec_osf-thread'
+installsitearch='/opt/perl/lib/site_perl/5.7.2/alpha-dec_osf'
 installsitebin='/opt/perl/bin'
 installsitelib='/opt/perl/lib/site_perl/5.7.2'
 installstyle='lib'
@@ -593,12 +594,12 @@ lib_ext='.a'
 libc='/usr/shlib/libc.so'
 libperl='libperl.so'
 libpth='/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /var/shlib'
-libs='-lgdbm -ldbm -ldb -lm -liconv -lutil -lpthread -lexc'
+libs='-lgdbm -ldbm -ldb -lm -liconv -lutil'
 libsdirs=' /usr/shlib /usr/ccs/lib'
-libsfiles=' libgdbm.so libdbm.a libdb.so libm.so libiconv.so libutil.a libpthread.so libexc.so'
-libsfound=' /usr/shlib/libgdbm.so /usr/ccs/lib/libdbm.a /usr/shlib/libdb.so /usr/shlib/libm.so /usr/shlib/libiconv.so /usr/ccs/lib/libutil.a /usr/shlib/libpthread.so /usr/shlib/libexc.so'
+libsfiles=' libgdbm.so libdbm.a libdb.so libm.so libiconv.so libutil.a'
+libsfound=' /usr/shlib/libgdbm.so /usr/ccs/lib/libdbm.a /usr/shlib/libdb.so /usr/shlib/libm.so /usr/shlib/libiconv.so /usr/ccs/lib/libutil.a'
 libspath=' /usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /var/shlib'
-libswanted='sfio socket bind inet nsl nm gdbm dbm db malloc dld ld sun m cposix posix ndir dir crypt sec ucb BSD x iconv util pthread exc'
+libswanted='sfio socket bind inet nsl nm gdbm dbm db malloc dld ld sun m cposix posix ndir dir crypt sec ucb BSD x iconv util'
 libswanted_uselargefiles=''
 line=''
 lint=''
@@ -661,21 +662,21 @@ nvtype='double'
 o_nonblock='O_NONBLOCK'
 obj_ext='.o'
 old_pthread_create_joinable=''
-optimize='-O'
+optimize='-O4'
 orderlib='false'
 osname='dec_osf'
 osvers='4.0d'
 otherlibdirs=' '
 package='perl5'
-pager='/c/bin/less'
+pager='/usr/local/bin/less'
 passcat='cat /etc/passwd'
 patchlevel='7'
 path_sep=':'
 perl5='perl'
 perl=''
-perl_patchlevel='11326'
+perl_patchlevel='11497'
 perladmin='yourname@yourhost.yourplace.com'
-perllibs='-lm -liconv -lutil -lpthread -lexc'
+perllibs='-lm -liconv -lutil'
 perlpath='/opt/perl/bin/perl'
 pg='pg'
 phostname=''
@@ -737,8 +738,8 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 6, 6, 16, 20, 23, 23, 23, 29, 48, 0'
 sig_size='58'
 signal_t='void'
-sitearch='/opt/perl/lib/site_perl/5.7.2/alpha-dec_osf-thread'
-sitearchexp='/opt/perl/lib/site_perl/5.7.2/alpha-dec_osf-thread'
+sitearch='/opt/perl/lib/site_perl/5.7.2/alpha-dec_osf'
+sitearchexp='/opt/perl/lib/site_perl/5.7.2/alpha-dec_osf'
 sitebin='/opt/perl/bin'
 sitebinexp='/opt/perl/bin'
 sitelib='/opt/perl/lib/site_perl/5.7.2'
@@ -771,8 +772,8 @@ stdio_ptr='((fp)->_ptr)'
 stdio_stream_array='_iob'
 strings='/usr/include/string.h'
 submit=''
-subversion='1'
-sysman='/usr/man/man1'
+subversion='2'
+sysman='/usr/share/man/man1'
 tail=''
 tar=''
 targetarch=''
@@ -801,7 +802,7 @@ uidtype='uid_t'
 uname='uname'
 uniq='uniq'
 uquadtype='unsigned long'
-use5005threads='define'
+use5005threads='undef'
 use64bitall='define'
 use64bitint='define'
 usecrosscompile='undef'
@@ -820,7 +821,7 @@ usereentrant='undef'
 usesfio='false'
 useshrplib='true'
 usesocks='undef'
-usethreads='define'
+usethreads='undef'
 usevendorprefix='undef'
 usevfork='false'
 usrinc='/usr/include'
@@ -841,40 +842,37 @@ vendorlibexp=''
 vendorprefix=''
 vendorprefixexp=''
 version='5.7.2'
-version_patchlevel_string='version 7 subversion 1 patch 11326'
+version_patchlevel_string='version 7 subversion 2 patch 11497'
 versiononly='define'
 vi=''
 voidflags='15'
 xlibpth='/usr/lib/386 /lib/386'
-xs_apiversion='5.7.2'
-yacc='byacc'
+xs_apiversion='5.005'
+perl5='yacc'
 yaccflags=''
 zcat=''
 zip='zip'
 # Configure command line arguments.
 config_arg0='./Configure'
-config_args='-Dprefix=/opt/perl -Doptimize=-O -Dusethreads -Duse5005threads -Duse64bitint -Duselargefiles -Dcf_by=yourname -Dcf_email=yourname@yourhost.yourplace.com -Dperladmin=yourname@yourhost.yourplace.com -Dmydomain=.yourplace.com -Dmyhostname=yourhost -dE -Dusedevel'
-config_argc=13
+config_args='-Dprefix=/opt/perl -Duse64bitint -Duselargefiles -Dcf_by=yourname -Dcf_email=yourname@yourhost.yourplace.com -Dperladmin=yourname@yourhost.yourplace.com -Dmydomain=.yourplace.com -Dmyhostname=yourhost -dE -Dusedevel'
+config_argc=10
 config_arg1='-Dprefix=/opt/perl'
-config_arg2='-Doptimize=-O'
-config_arg3='-Dusethreads'
-config_arg4='-Duse5005threads'
-config_arg5='-Duse64bitint'
-config_arg6='-Duselargefiles'
-config_arg7='-Dcf_by=yourname'
-config_arg8='-Dcf_email=yourname@yourhost.yourplace.com'
-config_arg9='-Dperladmin=yourname@yourhost.yourplace.com'
-config_arg10='-Dmydomain=.yourplace.com'
-config_arg11='-Dmyhostname=yourhost'
-config_arg12='-dE'
-config_arg13='-Dusedevel'
+config_arg2='-Duse64bitint'
+config_arg3='-Duselargefiles'
+config_arg4='-Dcf_by=yourname'
+config_arg5='-Dcf_email=yourname@yourhost.yourplace.com'
+config_arg6='-Dperladmin=yourname@yourhost.yourplace.com'
+config_arg7='-Dmydomain=.yourplace.com'
+config_arg8='-Dmyhostname=yourhost'
+config_arg9='-dE'
+config_arg10='-Dusedevel'
 PERL_REVISION=5
 PERL_VERSION=7
-PERL_SUBVERSION=1
+PERL_SUBVERSION=2
 PERL_API_REVISION=5
 PERL_API_VERSION=5
 PERL_API_SUBVERSION=0
-PERL_PATCHLEVEL=11326
+PERL_PATCHLEVEL=11497
 PERL_CONFIG_SH=true
 # Variables propagated from previous config.sh file.
 pp_sys_cflags='ccflags="$ccflags -DNO_EFF_ONLY_OK"'
index c5ee735..6008f4c 100644 (file)
@@ -17,7 +17,7 @@
 /*
  * Package name      : perl5
  * Source directory  : .
- * Configuration time: Fri Jul 13 03:15:46 EET DST 2001
+ * Configuration time: Tue Jul 31 18:19:35 EET DST 2001
  * Configured by     : jhi
  * Target system     : osf1 alpha.hut.fi v4.0 878 alpha 
  */
  *     This symbol contains the ~name expanded version of ARCHLIB, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define ARCHLIB "/opt/perl/lib/5.7.2/alpha-dec_osf-thread"             /**/
-#define ARCHLIB_EXP "/opt/perl/lib/5.7.2/alpha-dec_osf-thread"         /**/
+#define ARCHLIB "/opt/perl/lib/5.7.2/alpha-dec_osf"            /**/
+#define ARCHLIB_EXP "/opt/perl/lib/5.7.2/alpha-dec_osf"                /**/
 
 /* ARCHNAME:
  *     This symbol holds a string representing the architecture name.
  *     where library files may be held under a private library, for
  *     instance.
  */
-#define ARCHNAME "alpha-dec_osf-thread"                /**/
+#define ARCHNAME "alpha-dec_osf"               /**/
 
 /* HAS_ATOLF:
  *     This symbol, if defined, indicates that the atolf routine is
  *     that use features like threads and multiplicity it is always 
  *     for those versions.
  */
-/*#define PERL_BINCOMPAT_5005                  / **/
+#define PERL_BINCOMPAT_5005                    /**/
 
 /* BYTEORDER:
  *     This symbol holds the hexadecimal constant defined in byteorder,
  *     This symbol contains the ~name expanded version of SITEARCH, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define SITEARCH "/opt/perl/lib/site_perl/5.7.2/alpha-dec_osf-thread"          /**/
-#define SITEARCH_EXP "/opt/perl/lib/site_perl/5.7.2/alpha-dec_osf-thread"              /**/
+#define SITEARCH "/opt/perl/lib/site_perl/5.7.2/alpha-dec_osf"         /**/
+#define SITEARCH_EXP "/opt/perl/lib/site_perl/5.7.2/alpha-dec_osf"             /**/
 
 /* SITELIB:
  *     This symbol contains the name of the private library for this package.
  *     try to use the various _r versions of library functions.
  *     This is extremely experimental.
  */
-#define        USE_5005THREADS         /**/
+/*#define      USE_5005THREADS         / **/
 /*#define      USE_ITHREADS            / **/
 #if defined(USE_5005THREADS) && !defined(USE_ITHREADS)
 #define                USE_THREADS             /* until src is revised*/
 /* PERL_XS_APIVERSION:
  *     This variable contains the version of the oldest perl binary
  *     compatible with the present perl.  perl.c:incpush() and
- *     lib/lib.pm will automatically search in /opt/perl/lib/site_perl/5.7.2/alpha-dec_osf-thread for older
+ *     lib/lib.pm will automatically search in /opt/perl/lib/site_perl/5.7.2/alpha-dec_osf for older
  *     directories across major versions back to xs_apiversion.
  *     This is only useful if you have a perl library directory tree
  *     structured like the default one.
  *     (presumably) be similar.
  *     See the INSTALL file for how this works.
  */
-#define PERL_XS_APIVERSION "5.7.2"
+#define PERL_XS_APIVERSION "5.005"
 #define PERL_PM_APIVERSION "5.005"
 
 /* SETUID_SCRIPTS_ARE_SECURE_NOW:
diff --git a/README.ce b/README.ce
new file mode 100644 (file)
index 0000000..a216f33
--- /dev/null
+++ b/README.ce
@@ -0,0 +1,59 @@
+If you read this file _as_is_, just ignore the funny characters you
+see.  It is written in the POD format (see pod/perlpod.pod) which is
+specifically designed to be readable as is.
+
+=head1 Name
+
+Perl for WinCE
+
+=head1 Description
+
+This file gives the instructions for building Perl5.6 and above for
+WinCE.  Please read and understand the terms under which this
+software is distributed.
+
+=head1 Build
+
+This section describes the steps to be performed to build PerlCE.
+
+=head2 Tools & SDK
+
+For compiling, you need Microsoft Embedded Visual Tools, my
+celib-sources, my console-sources and a perl for win32.
+
+Needed source files can be downloaded via:
+www.rainer-keuchel.de/wince/dirlist.html
+
+Some portions of the makefile need a shell for win32, rm, cp, mv,
+xmkdir (mkdir with a -p option).  It also uses my cecopy program for
+copying files to the ce device.
+
+=head2 Make
+
+Miniperl is not built. A pre-existent win32 perl is used.
+
+The paths for tools and additional libraries have to be changed in
+wince/makefile.ce.
+
+Different ce targets can be specified with the TARGET macro.
+
+Before you start, you need to build celib.dll and w32console.
+See instructions in these packages for building.
+
+In the wince directory, type "nmake -f makefile.ce". This should
+build perl.exe and and perl.dll. For building extension dlls,
+type "nmake -f makefile.ce dlls"
+
+When building ext dlls, you get lots of macro redefinition
+errors. Just ignore them.
+
+For further information, look in the text files in the wince
+sub-directory.
+
+=head1 Acknowledgements
+
+The port for Win32 was used as a reference.
+
+=head1 Author
+
+Rainer Keuchel (keuchel@netwave.de)
index c397d40..1bd5c94 100755 (executable)
--- a/cflags.SH
+++ b/cflags.SH
@@ -138,9 +138,25 @@ for file do
                optimize="$optdebug"
        fi
 
+# Add -Wall for the core and core modules iff gcc and not already -Wall
+warn=''
+case "$gccversion" in
+'') ;;
+*)  case "$ccflags" in
+    *-Wall*) ;;
+# Can't add -ansi here because it will fail e.g. in Solaris.
+# Off_t/off_t is a struct in Solaris with largefiles, and with -ansi
+# that struct cannot be compared with a flat integer, such as a STRLEN.
+# The -ansi will also cause a lot of noise in Solaris because of:
+# /usr/include/sys/resource.h:148: warning: `struct rlimit64' declared inside parameter list
+    *) warn='-Wall' ;;
+    esac
+    ;;
+esac
+
     : Can we perhaps use $ansi2knr here
-    echo "$cc -c -DPERL_CORE $ccflags $optimize $perltype"
-    eval "$also "'"$cc -DPERL_CORE -c $ccflags $optimize $perltype"'
+    echo "$cc -c -DPERL_CORE $ccflags $optimize $warn $perltype"
+    eval "$also "'"$cc -DPERL_CORE -c $ccflags $optimize $warn $perltype"'
 
     . $TOP/config.sh
 
index 34d781f..f6d6aac 100644 (file)
@@ -73,6 +73,7 @@
 #define PL_ofs_sv              (vTHX->Tofs_sv)
 #define PL_op                  (vTHX->Top)
 #define PL_opsave              (vTHX->Topsave)
+#define PL_peepp               (vTHX->Tpeepp)
 #define PL_protect             (vTHX->Tprotect)
 #define PL_reg_call_cc         (vTHX->Treg_call_cc)
 #define PL_reg_curpm           (vTHX->Treg_curpm)
 #define PL_ofs_sv              (aTHXo->interp.Tofs_sv)
 #define PL_op                  (aTHXo->interp.Top)
 #define PL_opsave              (aTHXo->interp.Topsave)
+#define PL_peepp               (aTHXo->interp.Tpeepp)
 #define PL_protect             (aTHXo->interp.Tprotect)
 #define PL_reg_call_cc         (aTHXo->interp.Treg_call_cc)
 #define PL_reg_curpm           (aTHXo->interp.Treg_curpm)
 #define PL_ofs_sv              (aTHX->Tofs_sv)
 #define PL_op                  (aTHX->Top)
 #define PL_opsave              (aTHX->Topsave)
+#define PL_peepp               (aTHX->Tpeepp)
 #define PL_protect             (aTHX->Tprotect)
 #define PL_reg_call_cc         (aTHX->Treg_call_cc)
 #define PL_reg_curpm           (aTHX->Treg_curpm)
 #define PL_Tofs_sv             PL_ofs_sv
 #define PL_Top                 PL_op
 #define PL_Topsave             PL_opsave
+#define PL_Tpeepp              PL_peepp
 #define PL_Tprotect            PL_protect
 #define PL_Treg_call_cc                PL_reg_call_cc
 #define PL_Treg_curpm          PL_reg_curpm
index 4c8dc74..11803c8 100644 (file)
@@ -773,6 +773,7 @@ sub deparse_format {
                = @$self{qw'curstash warnings hints'};
     my $op = $form->ROOT;
     my $kid;
+    return "\f." if $op->first->name eq 'stub';
     $op = $op->first->first; # skip leavewrite, lineseq
     while (not null $op) {
        $op = $op->sibling; # skip nextstate
index a21f03b..f25bc5c 100644 (file)
@@ -22,6 +22,7 @@ my $Is_VMS = $^O eq 'VMS';
 my $Is_MacOS = $^O eq 'MacOS';
 
 my $path = join " ", map { qq["-I$_"] } @INC;
+$path = '"-I../lib" "-Iperl_root:[lib]"' if $Is_VMS;   # gets too long otherwise
 my $redir = $Is_MacOS ? "" : "2>&1";
 my $is_thread = $Config{use5005threads} && $Config{use5005threads} eq 'define';
 
index 6d1ddb1..da6af57 100644 (file)
 
    * Modified Makefile.PL to only enable the warnings pragma if using perl
      5.6.1 or better.    
+
+1.78 30th July 2001
+
+   * the test in Makefile.PL for AIX used -plthreads. Should have been
+     -lpthreads
+
+   * merged Core patches 
+        10372, 10335, 10372, 10534, 10549, 10643, 11051, 11194, 11432
+
+   * added documentation patch regarding duplicate keys from Andrew Johnson
+
index 0a69214..1df9876 100644 (file)
@@ -1,8 +1,8 @@
 # DB_File.pm -- Perl 5 interface to Berkeley DB 
 #
 # written by Paul Marquess (Paul.Marquess@btinternet.com)
-# last modified 26th April 2001
-# version 1.77
+# last modified 30th July 2001
+# version 1.78
 #
 #     Copyright (c) 1995-2001 Paul Marquess. All rights reserved.
 #     This program is free software; you can redistribute it and/or
@@ -151,7 +151,7 @@ use vars qw($VERSION @ISA @EXPORT $AUTOLOAD $DB_BTREE $DB_HASH $DB_RECNO
 use Carp;
 
 
-$VERSION = "1.77" ;
+$VERSION = "1.78" ;
 
 #typedef enum { DB_BTREE, DB_HASH, DB_RECNO } DBTYPE;
 $DB_BTREE = new DB_File::BTREEINFO ;
@@ -943,6 +943,35 @@ You cannot change the ordering once the database has been created. Thus
 you must use the same compare function every time you access the
 database.
 
+=item 3
+
+Duplicate keys are entirely defined by the comparison function.
+In the case-insensitive example above, the keys: 'KEY' and 'key'
+would be considered duplicates, and assigning to the second one
+would overwrite the first. If duplicates are allowed for (with the
+R_DUPS flag discussed below), only a single copy of duplicate keys
+is stored in the database --- so (again with example above) assigning
+three values to the keys: 'KEY', 'Key', and 'key' would leave just
+the first key: 'KEY' in the database with three values. For some
+situations this results in information loss, so care should be taken
+to provide fully qualified comparison functions when necessary.
+For example, the above comparison routine could be modified to
+additionally compare case-sensitively if two keys are equal in the
+case insensitive comparison:
+
+    sub compare {
+        my($key1, $key2) = @_;
+        lc $key1 cmp lc $key2 ||
+        $key1 cmp $key2;
+    }
+
+And now you will only have duplicates when the keys themselves
+are truly the same. (note: in versions of the db library prior to
+about November 1996, such duplicate keys were retained so it was
+possible to recover the original keys in sets of keys that
+compared as equal).
+
+
 =back 
 
 =head2 Handling Duplicate Keys 
index c1040cc..d2dc572 100644 (file)
@@ -3,8 +3,8 @@
  DB_File.xs -- Perl 5 interface to Berkeley DB 
 
  written by Paul Marquess <Paul.Marquess@btinternet.com>
- last modified 26th April 2001
- version 1.77
+ last modified 30th July 2001
+ version 1.78
 
  All comments/suggestions/problems are welcome
 
@@ -92,6 +92,7 @@
                needed to be changed.
         1.76 -  No change to DB_File.xs
         1.77 -  Tidied up a few types used in calling newSVpvn.
+        1.78 -  Core patch 10335, 10372, 10534, 10549, 11051 included.
 
 */
 
  * shortly #included by the <db.h>) __attribute__ to the possibly
  * already defined __attribute__, for example by GNUC or by Perl. */
 
-#if DB_VERSION_MAJOR_CFG < 2
-
-#undef __attribute__
-
-/* Since we dropped the gccish definition of __attribute__ we will want
- * to redefine dNOOP, however (so that dTHX continues to work).  Yes,
- * all this means that we can't do attribute checking on the DB_File,
- * boo, hiss. */
-#undef  dNOOP
-#define dNOOP extern int Perl___notused
-/* Ditto for dXSARGS. */
-#undef  dXSARGS
-#define dXSARGS                                \
-       dSP; dMARK;                     \
-       I32 ax = mark - PL_stack_base + 1;      \
-       I32 items = sp - mark
-
+/* #if DB_VERSION_MAJOR_CFG < 2  */
+#ifndef DB_VERSION_MAJOR
+#    undef __attribute__
 #endif
 
-/* avoid -Wall; DB_File xsubs never make use of `ix' setup for ALIASes */
-#undef dXSI32
-#define dXSI32 dNOOP
+
 
 /* If Perl has been compiled with Threads support,the symbol op will
    be defined here. This clashes with a field name in db.h, so get rid of it.
 #    include <db.h>
 #endif
 
-#ifdef CAN_PROTOTYPE
-extern void __getBerkeleyDBInfo(void);
-#endif
+/* Wall starts with 5.7.x */
+
+#if PERL_REVISION > 5 || (PERL_REVISION == 5 && PERL_VERSION >= 7)
+
+/* Since we dropped the gccish definition of __attribute__ we will want
+ * to redefine dNOOP, however (so that dTHX continues to work).  Yes,
+ * all this means that we can't do attribute checking on the DB_File,
+ * boo, hiss. */
+#  ifndef DB_VERSION_MAJOR
+
+#    undef  dNOOP
+#    define dNOOP extern int Perl___notused
+
+    /* Ditto for dXSARGS. */
+#    undef  dXSARGS
+#    define dXSARGS                            \
+       dSP; dMARK;                     \
+       I32 ax = mark - PL_stack_base + 1;      \
+       I32 items = sp - mark
+
+#  endif
+
+/* avoid -Wall; DB_File xsubs never make use of `ix' setup for ALIASes */
+#  undef dXSI32
+#  define dXSI32 dNOOP
+
+#endif /* Perl >= 5.7 */
 
 #ifndef pTHX
 #    define pTHX
@@ -446,6 +455,10 @@ typedef DBT DBTKEY ;
        }
 
 
+#ifdef CAN_PROTOTYPE
+extern void __getBerkeleyDBInfo(void);
+#endif
+
 /* Internal Global Data */
 static recno_t Value ; 
 static recno_t zero = 0 ;
index 2801ffa..48c29a0 100644 (file)
@@ -3,8 +3,8 @@
  version.c -- Perl 5 interface to Berkeley DB 
 
  written by Paul Marquess <Paul.Marquess@btinternet.com>
- last modified 16th January 2000
- version 1.73
+ last modified 30th July 2001
+ version 1.78
 
  All comments/suggestions/problems are welcome
 
index c996e6d..f120c97 100644 (file)
@@ -60,19 +60,26 @@ print "ok 1\n";
 if($pid = fork()) {
 
     $sock = $listen->accept();
-    print "ok 2\n";
 
-    print $sock->getline();
+    if (defined $sock) {
+       print "ok 2\n";
 
-    print $sock "ok 4\n";
+       print $sock->getline();
 
-    $sock->close;
+       print $sock "ok 4\n";
 
-    waitpid($pid,0);
-    unlink($PATH) || $^O eq 'os2' || warn "Can't unlink $PATH: $!";
+       $sock->close;
 
-    print "ok 5\n";
+       waitpid($pid,0);
+       unlink($PATH) || $^O eq 'os2' || warn "Can't unlink $PATH: $!";
 
+       print "ok 5\n";
+    } else {
+       print "# accept() failed: $!\n";
+       for (2..5) {
+           print "not ok $_ # accept failed\n";
+       }
+    }
 } elsif(defined $pid) {
 
     $sock = IO::Socket::UNIX->new(Peer => $PATH) or die "$!";
index de5857c..c2e7606 100644 (file)
@@ -51,8 +51,12 @@ if [ "x$optimize" = 'x' ]; then
     optimize='-O3'
 fi
 
-# XXX Unclear why we require -pipe and -fno-common here. --Andy Dougherty
-# We don't like commons. --Fred Sánchez
+# -pipe: makes compilation go faster.
+# -fno-common: we don't like commons.  Common symbols are not allowed
+# in MH_DYLIB binaries, which is what libperl.dylib is.  You will fail
+# to link without that option, unless you otherwise eliminate all commons
+# by, for example, initializing all globals.
+# --Fred Sánchez
 ccflags="${ccflags} -pipe -fno-common"
 
 # At least on Darwin 1.3.x:
index fb57a9e..861f65f 100644 (file)
@@ -12,6 +12,7 @@ use strict;
 use warnings;
 use Carp;
 use File::Spec;
+use Config;
 our(@ISA, @EXPORT, @EXPORT_OK, $VERSION, $Too_Big, $Syscopy_is_copy);
 sub copy;
 sub syscopy;
@@ -65,6 +66,21 @@ sub copy {
                             || UNIVERSAL::isa($to, 'IO::Handle'))
                         : (ref(\$to) eq 'GLOB'));
 
+    if ($from eq $to) { # works for references, too
+       croak("'$from' and '$to' are identical (not copied)");
+    }
+
+    if ($Config{d_symlink} && $Config{d_readlink} &&
+       !($^O eq 'Win32' || $^O eq 'os2' || $^O eq 'vms')) {
+       if ((-e $from && -l $from) || (-e $to && -l $to)) {
+           my @fs = stat($from);
+           my @ts = stat($to);
+           if (@fs && @ts && $fs[0] == $ts[0] && $fs[1] == $ts[1]) {
+               croak("'$from' and '$to' are identical (not copied)");
+           }
+       }
+    }
+
     if (!$from_a_handle && !$to_a_handle && -d $to && ! -d $from) {
        $to = _catname($from, $to);
     }
@@ -275,7 +291,8 @@ argument may be a string, a FileHandle reference or a FileHandle
 glob. Obviously, if the first argument is a filehandle of some
 sort, it will be read from, and if it is a file I<name> it will
 be opened for reading. Likewise, the second argument will be
-written to (and created if need be).
+written to (and created if need be).  Trying to copy a file on top
+of itself is a fatal error.
 
 B<Note that passing in
 files as handles instead of names may lead to loss of information
index 44b5827..6f8c801 100755 (executable)
@@ -9,7 +9,7 @@ BEGIN {
 $| = 1;
 
 my @pass = (0,1);
-my $tests = $^O eq 'MacOS' ? 14 : 11;
+my $tests = $^O eq 'MacOS' ? 15 : 12;
 printf "1..%d\n", $tests * scalar(@pass);
 
 use File::Copy;
@@ -116,6 +116,11 @@ for my $pass (@pass) {
     print "not " unless $foo eq sprintf("ok %d\n", 3+$loopconst)
         and not -e "file-$$";;
     printf "ok %d\n", 14+$loopconst;
+
+    eval { copy("copy-$$", "copy-$$") };
+    printf "ok %d\n", 15+$loopconst
+       unless $@ =~ /are identical/ && -s "copy-$$";
+
     unlink ":lib:file-$$" or die "unlink: $!";
   
   } else {
@@ -131,6 +136,11 @@ for my $pass (@pass) {
     print "not " unless $foo eq sprintf("ok %d\n", 3+$loopconst)
         and not -e "file-$$";;
     printf "ok %d\n", 11+$loopconst;
+
+    eval { copy("copy-$$", "copy-$$") };
+    printf "ok %d\n", 12+$loopconst
+       unless $@ =~ /are identical/ && -s "copy-$$";
+
     unlink "lib/file-$$" or die "unlink: $!";
   
   }
index 910002e..405d201 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 use vars qw($VERSION);
 use Carp;
 
-$VERSION = '2.03';
+$VERSION = '2.04';
 
 
 # LOAD FILTERING MODULE...
@@ -14,10 +14,11 @@ sub __();
 
 # CATCH ATTEMPTS TO CALL case OUTSIDE THE SCOPE OF ANY switch
 
-$::_S_W_I_T_C_H = sub { croak "case statement not in switch block" };
+$::_S_W_I_T_C_H = sub { croak "case/when statement not in switch/given block" };
 
 my $offset;
 my $fallthrough;
+my ($Perl5, $Perl6) = (0,0);
 
 sub import
 {
@@ -32,6 +33,8 @@ sub import
                *{"${pkg}::$_"} = \&$_;
        }
        *{"${pkg}::__"} = \&__ if grep /__/, @_;
+       $Perl6 = 1 if grep(/Perl\s*6/i, @_);
+       $Perl5 = 1 if grep(/Perl\s*5/i, @_) || !grep(/Perl\s*6/i, @_);
        1;
 }
 
@@ -59,7 +62,7 @@ use Text::Balanced ':ALL';
 sub line
 {
        my ($pretext,$offset) = @_;
-       ($pretext=~tr/\n/\n/)+$offset,
+       ($pretext=~tr/\n/\n/)+($offset||0);
 }
 
 sub is_block
@@ -75,7 +78,8 @@ my $casecounter = 1;
 sub filter_blocks
 {
        my ($source, $line) = @_;
-       return $source unless $source =~ /case|switch/;
+       return $source unless $Perl5 && $source =~ /case|switch/
+                          || $Perl6 && $source =~ /when|given/;
        pos $source = 0;
        my $text = "";
        component: while (pos $source < length $source)
@@ -98,12 +102,14 @@ sub filter_blocks
                        next component;
                }
 
-               if ($source =~ m/\G(\n*)(\s*)switch\b(?=\s*[(])/gc)
+               if ($Perl5 && $source =~ m/\G(\n*)(\s*)(switch)\b(?=\s*[(])/gc
+                || $Perl6 && $source =~ m/\G(\n*)(\s*)(given)\b(?=\s*[(])/gc)
                {
+                       my $keyword = $3;
                        $text .= $1.$2.'S_W_I_T_C_H: while (1) ';
                        @pos = Text::Balanced::_match_codeblock(\$source,qr/\s*/,qr/\(/,qr/\)/,qr/[[{(<]/,qr/[]})>]/,undef) 
                        or do {
-                               die "Bad switch statement (problem in the parentheses?) near $Switch::file line ", line(substr($source,0,pos $source),$line), "\n";
+                               die "Bad $keyword statement (problem in the parentheses?) near $Switch::file line ", line(substr($source,0,pos $source),$line), "\n";
                        };
                        my $arg = filter_blocks(substr($source,$pos[0],$pos[4]-$pos[0]),line(substr($source,0,$pos[0]),$line));
                        $arg =~ s {^\s*[(]\s*%}   { ( \\\%}     ||
@@ -112,15 +118,17 @@ sub filter_blocks
                        $arg =~ s {^\s*[(]\s*qw}  { ( \\qw};
                        @pos = Text::Balanced::_match_codeblock(\$source,qr/\s*/,qr/\{/,qr/\}/,qr/\{/,qr/\}/,undef)
                        or do {
-                               die "Bad switch statement (problem in the code block?) near $Switch::file line ", line(substr($source,0, pos $source), $line), "\n";
+                               die "Bad $keyword statement (problem in the code block?) near $Switch::file line ", line(substr($source,0, pos $source), $line), "\n";
                        };
                        my $code = filter_blocks(substr($source,$pos[0],$pos[4]-$pos[0]),line(substr($source,0,$pos[0]),$line));
                        $code =~ s/{/{ local \$::_S_W_I_T_C_H; Switch::switch $arg;/;
                        $text .= $code . 'continue {last}';
                        next component;
                }
-               elsif ($source =~ m/\G(\s*)(case\b)(?!\s*=>)/gc)
+               elsif ($Perl5 && $source =~ m/\G(\s*)(case\b)(?!\s*=>)/gc
+                   || $Perl6 && $source =~ m/\G(\s*)(when\b)(?!\s*=>)/gc)
                {
+                       my $keyword = $2;
                        $text .= $1."if (Switch::case";
                        if (@pos = Text::Balanced::_match_codeblock(\$source,qr/\s*/,qr/\{/,qr/\}/,qr/\{/,qr/\}/,undef)) {
                                my $code = substr($source,$pos[0],$pos[4]-$pos[0]);
@@ -135,6 +143,12 @@ sub filter_blocks
                                $code =~ s {^\s*[(]\s*qw}  { ( \\qw};
                                $text .= " $code)";
                        }
+                       elsif ($Perl6 && do{@pos = Text::Balanced::_match_variable(\$source,qr/\s*/)}) {
+                               my $code = filter_blocks(substr($source,$pos[0],$pos[4]-$pos[0]),line(substr($source,0,$pos[0]),$line));
+                               $code =~ s {^\s*%}  { \%}       ||
+                               $code =~ s {^\s*@}  { \@};
+                               $text .= " $code)";
+                       }
                        elsif ( @pos = Text::Balanced::_match_quotelike(\$source,qr/\s*/,1,1)) {
                                my $code = substr($source,$pos[2],$pos[18]-$pos[2]);
                                $code = filter_blocks($code,line(substr($source,0,$pos[2]),$line));
@@ -143,22 +157,26 @@ sub filter_blocks
                                $code =~ s {^\s*qw} { \\qw};
                                $text .= " $code)";
                        }
-                       elsif ($source =~ m/\G\s*(([^\$\@{])[^\$\@{]*)(?=\s*{)/gc) {
+                       elsif ($Perl5 && $source =~ m/\G\s*(([^\$\@{])[^\$\@{]*)(?=\s*{)/gc
+                          ||  $Perl6 && $source =~ m/\G\s*([^:;]*)()/gc) {
                                my $code = filter_blocks($1,line(substr($source,0,pos $source),$line));
                                $text .= ' \\' if $2 eq '%';
                                $text .= " $code)";
                        }
                        else {
-                               die "Bad case statement (invalid case value?) near $Switch::file line ", line(substr($source,0,pos $source), $line), "\n";
+                               die "Bad $keyword statement (invalid $keyword value?) near $Switch::file line ", line(substr($source,0,pos $source), $line), "\n";
                        }
 
-                       @pos = Text::Balanced::_match_codeblock(\$source,qr/\s*/,qr/\{/,qr/\}/,qr/\{/,qr/\}/,undef)
+                       die "Missing colon or semi-colon after 'when' value near $Switch::file line ", line(substr($source,0,pos $source), $line), "\n"
+                               unless !$Perl6 || $source =~ m/\G(\s*)(:|(?=;))/gc;
+
+                       do{@pos = Text::Balanced::_match_codeblock(\$source,qr/\s*/,qr/\{/,qr/\}/,qr/\{/,qr/\}/,undef)}
                        or do {
                                if ($source =~ m/\G\s*(?=([};]|\Z))/gc) {
                                        $casecounter++;
                                        next component;
                                }
-                               die "Bad case statement (problem in the code block?) near $Switch::file line ", line(substr($source,0,pos $source),$line), "\n";
+                               die "Bad $keyword statement (problem in the code block?) near $Switch::file line ", line(substr($source,0,pos $source),$line), "\n";
                        };
                        my $code = filter_blocks(substr($source,$pos[0],$pos[4]-$pos[0]),line(substr($source,0,$pos[0]),$line));
                        $code =~ s/}(?=\s*\Z)/;last S_W_I_T_C_H }/
@@ -455,8 +473,8 @@ Switch - A switch statement for Perl
 
 =head1 VERSION
 
-This document describes version 2.03 of Switch,
-released May 15, 2001.
+This document describes version 2.04 of Switch,
+released July 30, 2001.
 
 =head1 SYNOPSIS
 
@@ -593,9 +611,9 @@ mechanism:
         while (<>) {
             switch ($_) {
 
-                case %special  { print "homer\n"; }       # if $special{$_}
-                case /a-z/i    { print "alpha\n"; }       # if $_ =~ /a-z/i
-                case [1..9]    { print "small num\n"; }   # if $_ in [1..9]
+                case (%special) { print "homer\n"; }      # if $special{$_}
+                case /a-z/i     { print "alpha\n"; }      # if $_ =~ /a-z/i
+                case [1..9]     { print "small num\n"; }  # if $_ in [1..9]
 
                 case { $_[0] >= 10 } {                    # if $_ >= 10
                     my $age = <>;
@@ -701,6 +719,34 @@ behaviour of the third case.
 
 
 
+=head2 Alternative syntax
+
+Perl 6 will provide a built-in switch statement with essentially the
+same semantics as those offered by Switch.pm, but with a different
+pair of keywords. In Perl 6 C<switch> with be spelled C<given>, and
+C<case> will be pronounced C<when>. In addition, the C<when> statement
+will use a colon between its case value and its block (removing the
+need to parenthesize variables.
+
+This future syntax is also available via the Switch.pm module, by
+importing it with the argument C<"Perl6">.  For example:
+
+        use Switch 'Perl6';
+
+        given ($val) {
+                when 1 :      { handle_num_1(); }
+                when $str1 :  { handle_str_1(); }
+                when [0..9] : { handle_num_any(); last }
+                when /\d/ :   { handle_dig_any(); }
+                when /.*/ :   { handle_str_any(); }
+        }
+
+Note that you can mix and match both syntaxes by importing the module
+with:
+
+       use Switch 'Perl5', 'Perl6';
+
+
 =head2 Higher-order Operations
 
 One situation in which C<switch> and C<case> do not provide a good
diff --git a/lib/Switch/Changes b/lib/Switch/Changes
new file mode 100755 (executable)
index 0000000..2f74241
--- /dev/null
@@ -0,0 +1,50 @@
+Revision history for Perl extension Switch.
+
+0.01  Wed Dec 15 05:58:01 1999
+       - original version; created by h2xs 1.18
+
+
+
+2.00   Mon Jan  8 17:12:20 2001
+
+       - Complete revamp (including syntactic and semantic changes)
+         in line with proposed Perl 6 semantics.
+
+
+2.01   Tue Jan  9 07:19:02 2001
+
+       - Fixed infinite loop problem under 5.6.0 caused by change
+         in goto semantics between 5.00503 and 5.6.0
+         (thanks Scott!)
+         
+
+
+2.02   Thu Apr 26 12:01:06 2001
+
+       - Fixed unwarranted whitespace squeezing before quotelikes
+         (thanks Ray)
+
+       - Fixed pernicious bug that cause switch to fail to recognize
+         certain complex switch values
+
+
+2.03   Tue May 15 09:34:11 2001
+
+       - Fixed bug in 'fallthrough' specifications.
+
+       - Silenced gratuitous warnings for undefined values as
+         switch or case values
+
+
+2.04   Mon Jul 30 13:17:35 2001
+
+       - Suppressed 'undef value' warning under -w (thanks Michael)
+
+       - Added support for Perl 6 given..when syntax
+
+
+2.04   Mon Jul 30 13:17:35 2001
+
+       - Suppressed 'undef value' warning under -w (thanks Michael)
+
+       - Added support for Perl 6 given..when syntax
diff --git a/lib/Switch/README b/lib/Switch/README
new file mode 100644 (file)
index 0000000..d5a7d28
--- /dev/null
@@ -0,0 +1,47 @@
+==============================================================================
+                      Release of version 2.04 of Switch
+==============================================================================
+
+
+NAME
+    Switch - A switch statement for Perl
+
+DESCRIPTION
+
+    Switch.pm provides the syntax and semantics for an explicit case
+    mechanism for Perl. The syntax is minimal, introducing only the
+    keywords C<switch> and C<case> and conforming to the general pattern
+    of existing Perl control structures. The semantics are particularly
+    rich, allowing any one (or more) of nearly 30 forms of matching to
+    be used when comparing a switch value with its various cases.
+
+AUTHOR
+    Damian Conway (damian@conway.org)
+
+COPYRIGHT
+    Copyright (c) 1997-2000, Damian Conway. All Rights Reserved. This module
+    is free software. It may be used, redistributed and/or modified under
+    the terms of the Perl Artistic License (see
+    http://www.perl.com/perl/misc/Artistic.html)
+
+
+==============================================================================
+
+CHANGES IN VERSION 2.04
+
+
+       - Suppressed 'undef value' warning under -w (thanks Michael)
+
+       - Added support for Perl 6 given..when syntax
+
+
+==============================================================================
+
+AVAILABILITY
+
+Switch has been uploaded to the CPAN
+and is also available from:
+
+       http://www.csse.monash.edu.au/~damian/CPAN/Switch.tar.gz
+
+==============================================================================
diff --git a/lib/Switch/t/given_when.t b/lib/Switch/t/given_when.t
new file mode 100644 (file)
index 0000000..57e72de
--- /dev/null
@@ -0,0 +1,274 @@
+#! /usr/local/bin/perl -w
+
+use Carp;
+use Switch qw(Perl6 __ fallthrough);
+
+my($C,$M);sub ok{$C++;$M.=$_[0]?"ok $C\n":"not ok $C (line ".(caller)[2].")\n"}
+END{print"1..$C\n$M"}
+
+# NON-when THINGS;
+
+$when->{when} = { when => "when" };
+
+*when = \&when;
+
+# PREMATURE when
+
+eval { when 1: { ok(0) }; ok(0) } || ok(1);
+
+# H.O. FUNCS
+
+given (__ > 2) {
+
+       when 1: { ok(0) } else { ok(1) }
+       when 2: { ok(0) } else { ok(1) }
+       when 3: { ok(1) } else { ok(0) }
+}
+
+given (3) {
+
+       eval { when __ <= 1 || __ > 2:  { ok(0) } } || ok(1);
+       when __ <= 2:           { ok(0) };
+       when __ <= 3:           { ok(1) };
+}
+
+# POSSIBLE ARGS: NUMERIC, STRING, ARRAY, HASH, REGEX, CODE
+
+# 1. NUMERIC SWITCH
+
+for (1..3)
+{
+       given ($_) {
+               # SELF
+               when $_: { ok(1) } else { ok(0) }
+
+               # NUMERIC
+               when 1: { ok ($_==1) } else { ok($_!=1) }
+               when (1):  { ok ($_==1) } else { ok($_!=1) }
+               when 3: { ok ($_==3) } else { ok($_!=3) }
+               when (4): { ok (0) } else { ok(1) }
+               when (2): { ok ($_==2) } else { ok($_!=2) }
+
+               # STRING
+               when ('a'): { ok (0) } else { ok(1) }
+               when  'a' : { ok (0) } else { ok(1) }
+               when ('3'): { ok ($_ == 3) } else { ok($_ != 3) }
+               when ('3.0'): { ok (0) } else { ok(1) }
+
+               # ARRAY
+               when ([10,5,1]): { ok ($_==1) } else { ok($_!=1) }
+               when  [10,5,1]:  { ok ($_==1) } else { ok($_!=1) }
+               when (['a','b']): { ok (0) } else { ok(1) }
+               when (['a','b',3]): { ok ($_==3) } else { ok ($_!=3) }
+               when (['a','b',2.0]) : { ok ($_==2) } else { ok ($_!=2) }
+               when ([]) : { ok (0) } else { ok(1) }
+
+               # HASH
+               when ({}) : { ok (0) } else { ok (1) }
+               when {} : { ok (0) } else { ok (1) }
+               when {1,1} : { ok ($_==1) } else { ok($_!=1) }
+               when ({1=>1, 2=>0}) : { ok ($_==1) } else { ok($_!=1) }
+
+               # SUB/BLOCK
+               when (sub {$_[0]==2}) : { ok ($_==2) } else { ok($_!=2) }
+               when {$_[0]==2} : { ok ($_==2) } else { ok($_!=2) }
+               when {0} : { ok (0) } else { ok (1) }   # ; -> SUB, NOT HASH
+               when {1} : { ok (1) } else { ok (0) }   # ; -> SUB, NOT HASH
+       }
+}
+
+
+# 2. STRING SWITCH
+
+for ('a'..'c','1')
+{
+       given ($_) {
+               # SELF
+               when ($_) : { ok(1) } else { ok(0) }
+
+               # NUMERIC
+               when (1)  : { ok ($_ !~ /[a-c]/) } else { ok ($_ =~ /[a-c]/) }
+               when (1.0) : { ok ($_ !~ /[a-c]/) } else { ok ($_ =~ /[a-c]/) }
+
+               # STRING
+               when ('a') : { ok ($_ eq 'a') } else { ok($_ ne 'a') }
+               when ('b') : { ok ($_ eq 'b') } else { ok($_ ne 'b') }
+               when ('c') : { ok ($_ eq 'c') } else { ok($_ ne 'c') }
+               when ('1') : { ok ($_ eq '1') } else { ok($_ ne '1') }
+               when ('d') : { ok (0) } else { ok (1) }
+
+               # ARRAY
+               when (['a','1']) : { ok ($_ eq 'a' || $_ eq '1') }
+                       else { ok ($_ ne 'a' && $_ ne '1') }
+               when (['z','2']) : { ok (0) } else { ok(1) }
+               when ([]) : { ok (0) } else { ok(1) }
+
+               # HASH
+               when ({}) : { ok (0) } else { ok (1) }
+               when ({a=>'a', 1=>1, 2=>0}) : { ok ($_ eq 'a' || $_ eq '1') }
+                       else { ok ($_ ne 'a' && $_ ne '1') }
+
+               # SUB/BLOCK
+               when (sub{$_[0] eq 'a' }) : { ok ($_ eq 'a') }
+                       else { ok($_ ne 'a') }
+               when {$_[0] eq 'a'} : { ok ($_ eq 'a') } else { ok($_ ne 'a') }
+               when {0} : { ok (0) } else { ok (1) }   # ; -> SUB, NOT HASH
+               when {1} : { ok (1) } else { ok (0) }   # ; -> SUB, NOT HASH
+       }
+}
+
+
+# 3. ARRAY SWITCH
+
+my $iteration = 0;
+for ([],[1,'a'],[2,'b'])
+{
+       given ($_) {
+       $iteration++;
+               # SELF
+               when ($_) : { ok(1) }
+
+               # NUMERIC
+               when (1) : { ok ($iteration==2) } else { ok ($iteration!=2) }
+               when (1.0) : { ok ($iteration==2) } else { ok ($iteration!=2) }
+
+               # STRING
+               when ('a') : { ok ($iteration==2) } else { ok ($iteration!=2) }
+               when ('b') : { ok ($iteration==3) } else { ok ($iteration!=3) }
+               when ('1') : { ok ($iteration==2) } else { ok ($iteration!=2) }
+
+               # ARRAY
+               when (['a',2]) : { ok ($iteration>=2) } else { ok ($iteration<2) }
+               when ([1,'a']) : { ok ($iteration==2) } else { ok($iteration!=2) }
+               when ([]) : { ok (0) } else { ok(1) }
+               when ([7..100]) : { ok (0) } else { ok(1) }
+
+               # HASH
+               when ({}) : { ok (0) } else { ok (1) }
+               when ({a=>'a', 1=>1, 2=>0}) : { ok ($iteration==2) }
+                       else { ok ($iteration!=2) }
+
+               # SUB/BLOCK
+               when {scalar grep /a/, @_} : { ok ($iteration==2) }
+                       else { ok ($iteration!=2) }
+               when (sub {scalar grep /a/, @_ }) : { ok ($iteration==2) }
+                       else { ok ($iteration!=2) }
+               when {0} : { ok (0) } else { ok (1) }   # ; -> SUB, NOT HASH
+               when {1} : { ok (1) } else { ok (0) }   # ; -> SUB, NOT HASH
+       }
+}
+
+
+# 4. HASH SWITCH
+
+$iteration = 0;
+for ({},{a=>1,b=>0})
+{
+       given ($_) {
+       $iteration++;
+
+               # SELF
+               when ($_) : { ok(1) } else { ok(0) }
+
+               # NUMERIC
+               when (1) : { ok (0) } else { ok (1) }
+               when (1.0) : { ok (0) } else { ok (1) }
+
+               # STRING
+               when ('a') : { ok ($iteration==2) } else { ok ($iteration!=2) }
+               when ('b') : { ok (0) } else { ok (1) }
+               when ('c') : { ok (0) } else { ok (1) }
+
+               # ARRAY
+               when (['a',2]) : { ok ($iteration==2) }
+                       else { ok ($iteration!=2) }
+               when (['b','a']) : { ok ($iteration==2) }
+                       else { ok ($iteration!=2) }
+               when (['b','c']) : { ok (0) } else { ok (1) }
+               when ([]) : { ok (0) } else { ok(1) }
+               when ([7..100]) : { ok (0) } else { ok(1) }
+
+               # HASH
+               when ({}) : { ok (0) } else { ok (1) }
+               when ({a=>'a', 1=>1, 2=>0}) : { ok (0) } else { ok (1) }
+
+               # SUB/BLOCK
+               when {$_[0]{a}} : { ok ($iteration==2) }
+                       else { ok ($iteration!=2) }
+               when (sub {$_[0]{a}}) : { ok ($iteration==2) }
+                       else { ok ($iteration!=2) }
+               when {0} : { ok (0) } else { ok (1) }   # ; -> SUB, NOT HASH
+               when {1} : { ok (1) } else { ok (0) }   # ; -> SUB, NOT HASH
+       }
+}
+
+
+# 5. CODE SWITCH
+
+$iteration = 0;
+for ( sub {1},
+      sub { return 0 unless @_;
+           my ($data) = @_;
+           my $type = ref $data;
+           return $type eq 'HASH'   && $data->{a}
+               || $type eq 'Regexp' && 'a' =~ /$data/
+               || $type eq ""       && $data eq '1';
+         },
+      sub {0} )
+{
+       given ($_) {
+       $iteration++;
+               # SELF
+               when ($_) : { ok(1) } else { ok(0) }
+
+               # NUMERIC
+               when (1) : { ok ($iteration<=2) } else { ok ($iteration>2) }
+               when (1.0) : { ok ($iteration<=2) } else { ok ($iteration>2) }
+               when (1.1) : { ok ($iteration==1) } else { ok ($iteration!=1) }
+
+               # STRING
+               when ('a') : { ok ($iteration==1) } else { ok ($iteration!=1) }
+               when ('b') : { ok ($iteration==1) } else { ok ($iteration!=1) }
+               when ('c') : { ok ($iteration==1) } else { ok ($iteration!=1) }
+               when ('1') : { ok ($iteration<=2) } else { ok ($iteration>2) }
+
+               # ARRAY
+               when ([1, 'a']) : { ok ($iteration<=2) }
+                       else { ok ($iteration>2) }
+               when (['b','a']) : { ok ($iteration==1) }
+                       else { ok ($iteration!=1) }
+               when (['b','c']) : { ok ($iteration==1) }
+                       else { ok ($iteration!=1) }
+               when ([]) : { ok ($iteration==1) } else { ok($iteration!=1) }
+               when ([7..100]) : { ok ($iteration==1) }
+                       else { ok($iteration!=1) }
+
+               # HASH
+               when ({}) : { ok ($iteration==1) } else { ok ($iteration!=1) }
+               when ({a=>'a', 1=>1, 2=>0}) : { ok ($iteration<=2) }
+                       else { ok ($iteration>2) }
+
+               # SUB/BLOCK
+               when {$_[0]->{a}} : { ok (0) } else { ok (1) }
+               when (sub {$_[0]{a}}) : { ok (0) } else { ok (1) }
+               when {0} : { ok (0) } else { ok (1) }   # ; -> SUB, NOT HASH
+               when {1} : { ok (0) } else { ok (1) }   # ; -> SUB, NOT HASH
+       }
+}
+
+
+# NESTED SWITCHES
+
+for my $count (1..3)
+{
+       given ([9,"a",11]) {
+               when (qr/\d/) : {
+                               given ($count) {
+                                       when (1)     : { ok($count==1) }
+                                               else { ok($count!=1) }
+                                       when ([5,6]) : { ok(0) } else { ok(1) }
+                               }
+                           }
+               ok(1) when 11;
+       }
+}
similarity index 99%
rename from lib/Switch/test.pl
rename to lib/Switch/t/switch_case.t
index d1a8af1..7b147c0 100644 (file)
@@ -1,7 +1,4 @@
-BEGIN {
-    chdir 't' if -d 't';
-    @INC = '../lib';
-}
+#! /usr/local/bin/perl -w
 
 use Carp;
 use Switch qw(__ fallthrough);
diff --git a/mg.c b/mg.c
index f3fc035..5a8c189 100644 (file)
--- a/mg.c
+++ b/mg.c
@@ -2084,12 +2084,12 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg)
         * the setproctitle() routine to manipulate that. */
        {
            s = SvPV(sv, len);
-#   if __FreeBSD_version >= 410001
+#   if __FreeBSD_version > 410001
            /* The leading "-" removes the "perl: " prefix,
             * but not the "(perl) suffix from the ps(1)
             * output, because that's what ps(1) shows if the
             * argv[] is modified. */
-           setproctitle("-%s", s, len + 1);
+           setproctitle("-%s", s);
 #   else       /* old FreeBSDs, NetBSD, OpenBSD, anyBSD */
            /* This doesn't really work if you assume that
             * $0 = 'foobar'; will wipe out 'perl' from the $0
diff --git a/op.c b/op.c
index 62309a1..7fad9a4 100644 (file)
--- a/op.c
+++ b/op.c
@@ -20,6 +20,8 @@
 #include "perl.h"
 #include "keywords.h"
 
+#define CALL_PEEP(o) CALL_FPTR(PL_peepp)(aTHX_ o)
+
 /* #define PL_OP_SLAB_ALLOC */
 
 #ifdef PL_OP_SLAB_ALLOC
@@ -2174,7 +2176,7 @@ Perl_newPROG(pTHX_ OP *o)
        PL_eval_root->op_private |= OPpREFCOUNTED;
        OpREFCNT_set(PL_eval_root, 1);
        PL_eval_root->op_next = 0;
-       peep(PL_eval_start);
+       CALL_PEEP(PL_eval_start);
     }
     else {
        if (!o)
@@ -2185,7 +2187,7 @@ Perl_newPROG(pTHX_ OP *o)
        PL_main_root->op_private |= OPpREFCOUNTED;
        OpREFCNT_set(PL_main_root, 1);
        PL_main_root->op_next = 0;
-       peep(PL_main_start);
+       CALL_PEEP(PL_main_start);
        PL_compcv = 0;
 
        /* Register with debugger */
@@ -2208,9 +2210,14 @@ Perl_localize(pTHX_ OP *o, I32 lex)
     if (o->op_flags & OPf_PARENS)
        list(o);
     else {
-       if (ckWARN(WARN_PARENTHESIS) && PL_bufptr > PL_oldbufptr && PL_bufptr[-1] == ',') {
-           char *s;
-           for (s = PL_bufptr; *s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s) || strchr("@$%, ",*s)); s++) ;
+       if (ckWARN(WARN_PARENTHESIS)
+           && PL_bufptr > PL_oldbufptr && PL_bufptr[-1] == ',')
+       {
+           char *s = PL_bufptr;
+
+           while (*s && (isALNUM(*s) || UTF8_IS_CONTINUED(*s) || strchr("@$%, ", *s)))
+               s++;
+
            if (*s == ';' || *s == '=')
                Perl_warner(aTHX_ WARN_PARENTHESIS,
                            "Parentheses missing around \"%s\" list",
@@ -2369,7 +2376,7 @@ Perl_gen_constant_list(pTHX_ register OP *o)
 
     PL_op = curop = LINKLIST(o);
     o->op_next = 0;
-    peep(curop);
+    CALL_PEEP(curop);
     pp_pushmark();
     CALLRUNOPS(aTHX);
     PL_op = curop;
@@ -3217,6 +3224,9 @@ Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *id, OP *arg)
     OP *pack;
     OP *imop;
     OP *veop;
+    char *packname = Nullch;
+    STRLEN packlen = 0;
+    SV *packsv;
 
     if (id->op_type != OP_CONST)
        Perl_croak(aTHX_ "Module name must be constant");
@@ -3274,6 +3284,15 @@ Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *id, OP *arg)
                                   newSVOP(OP_METHOD_NAMED, 0, meth)));
     }
 
+    if (ckWARN(WARN_MISC) &&
+        imop && (imop != arg) && /* no warning on use 5.0; or explicit () */
+        SvPOK(packsv = ((SVOP*)id)->op_sv))
+    {
+        /* BEGIN will free the ops, so we need to make a copy */
+        packlen = SvCUR(packsv);
+        packname = savepvn(SvPVX(packsv), packlen);
+    }
+
     /* Fake up the BEGIN {}, which does its thing immediately. */
     newATTRSUB(floor,
        newSVOP(OP_CONST, 0, newSVpvn("BEGIN", 5)),
@@ -3285,6 +3304,15 @@ Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *id, OP *arg)
                newSTATEOP(0, Nullch, veop)),
            newSTATEOP(0, Nullch, imop) ));
 
+    if (packname) {
+        if (ckWARN(WARN_MISC) && !gv_stashpvn(packname, packlen, FALSE)) {
+            Perl_warner(aTHX_ WARN_MISC,
+                        "Package `%s' not found "
+                        "(did you use the incorrect case?)", packname);
+        }
+        safefree(packname);
+    }
+
     PL_hints |= HINT_BLOCK_SCOPE;
     PL_copline = NOLINE;
     PL_expect = XSTATE;
@@ -4811,7 +4839,7 @@ Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
     OpREFCNT_set(CvROOT(cv), 1);
     CvSTART(cv) = LINKLIST(CvROOT(cv));
     CvROOT(cv)->op_next = 0;
-    peep(CvSTART(cv));
+    CALL_PEEP(CvSTART(cv));
 
     /* now that optimizer has done its work, adjust pad values */
     if (CvCLONE(cv)) {
@@ -5152,7 +5180,7 @@ Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block)
     OpREFCNT_set(CvROOT(cv), 1);
     CvSTART(cv) = LINKLIST(CvROOT(cv));
     CvROOT(cv)->op_next = 0;
-    peep(CvSTART(cv));
+    CALL_PEEP(CvSTART(cv));
     op_free(o);
     PL_copline = NOLINE;
     LEAVE_SCOPE(floor);
@@ -6325,7 +6353,7 @@ Perl_ck_sort(pTHX_ OP *o)
                    kid->op_next = 0;           /* just disconnect the leave */
                k = kLISTOP->op_first;
            }
-           peep(k);
+           CALL_PEEP(k);
 
            kid = firstkid;
            if (o->op_type == OP_SORT) {
@@ -6863,7 +6891,7 @@ Perl_peep(pTHX_ register OP *o)
            o->op_seq = PL_op_seqmax++;
            while (cLOGOP->op_other->op_type == OP_NULL)
                cLOGOP->op_other = cLOGOP->op_other->op_next;
-           peep(cLOGOP->op_other);
+           peep(cLOGOP->op_other); /* Recursive calls are not replaced by fptr calls */
            break;
 
        case OP_ENTERLOOP:
index 7a7de8c..56c046d 100644 (file)
@@ -70,7 +70,7 @@
 #if !defined(PERL_PATCHLEVEL_H_IMPLICIT) && !defined(LOCAL_PATCH_COUNT)
 static char    *local_patches[] = {
         NULL
-       ,"DEVEL11497"
+       ,"DEVEL11545"
        ,NULL
 };
 
diff --git a/perl.c b/perl.c
index 91efa0f..c5d3313 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -2396,6 +2396,11 @@ Perl_moreswitches(pTHX_ char *s)
        PerlIO_printf(PerlIO_stdout(),
                      "EPOC port by Olaf Flebbe, 1999-2000\n");
 #endif
+#ifdef UNDER_CE
+       printf("WINCE port by Rainer Keuchel, 2001\n");
+       printf("Built on " __DATE__ " " __TIME__ "\n\n");
+       wce_hitreturn();
+#endif
 #ifdef BINARY_BUILD_NOTICE
        BINARY_BUILD_NOTICE;
 #endif
@@ -3782,6 +3787,7 @@ S_init_main_thread(pTHX)
     (void) find_threadsv("@"); /* Ensure $@ is initialised early */
 
     PL_maxscream = -1;
+    PL_peepp = MEMBER_TO_FPTR(Perl_peep);
     PL_regcompp = MEMBER_TO_FPTR(Perl_pregcomp);
     PL_regexecp = MEMBER_TO_FPTR(Perl_regexec_flags);
     PL_regint_start = MEMBER_TO_FPTR(Perl_re_intuit_start);
diff --git a/perl.h b/perl.h
index 8e975f1..3c7304f 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -1548,8 +1548,11 @@ typedef struct pvop PVOP;
 typedef struct loop LOOP;
 
 typedef struct interpreter PerlInterpreter;
-#ifdef UTS
-#   define STRUCT_SV perl_sv /* Amdahl's <ksync.h> has struct sv */
+
+/* Amdahl's <ksync.h> has struct sv */
+/* SGI's <sys/sema.h> has struct sv */
+#if defined(UTS) || defined(__sgi)
+#   define STRUCT_SV perl_sv
 #else
 #   define STRUCT_SV sv
 #endif
@@ -2209,11 +2212,13 @@ struct ptr_tbl {
 #endif
 
 #ifndef __cplusplus
+#ifndef UNDER_CE
 Uid_t getuid (void);
 Uid_t geteuid (void);
 Gid_t getgid (void);
 Gid_t getegid (void);
 #endif
+#endif
 
 #ifndef Perl_debug_log
 #  define Perl_debug_log       PerlIO_stderr()
@@ -3019,6 +3024,7 @@ enum {            /* pass one of these to get_vtbl */
 #define RsRECORD(sv)  (SvROK(sv) && (SvIV(SvRV(sv)) > 0))
 
 /* Enable variables which are pointers to functions */
+typedef void (CPERLscope(*peep_t))(pTHX_ OP* o);
 typedef regexp*(CPERLscope(*regcomp_t)) (pTHX_ char* exp, char* xend, PMOP* pm);
 typedef I32 (CPERLscope(*regexec_t)) (pTHX_ regexp* prog, char* stringarg,
                                      char* strend, char* strbeg, I32 minend,
@@ -3884,4 +3890,8 @@ extern void moncontrol(int);
 
    so that Configure picks them up. */
 
+#ifdef UNDER_CE
+#include "wince.h"
+#endif
+
 #endif /* Include guard */
index 49e6eed..71384ac 100644 (file)
--- a/perlapi.h
+++ b/perlapi.h
@@ -728,6 +728,8 @@ START_EXTERN_C
 #define PL_op                  (*Perl_Top_ptr(aTHXo))
 #undef  PL_opsave
 #define PL_opsave              (*Perl_Topsave_ptr(aTHXo))
+#undef  PL_peepp
+#define PL_peepp               (*Perl_Tpeepp_ptr(aTHXo))
 #undef  PL_protect
 #define PL_protect             (*Perl_Tprotect_ptr(aTHXo))
 #undef  PL_reg_call_cc
index 093cc8a..e1730c8 100644 (file)
--- a/perlio.c
+++ b/perlio.c
@@ -771,7 +771,7 @@ PerlIO_default_layers(pTHX)
    PerlIO_funcs *osLayer = &PerlIO_unix;
    PerlIO_def_layerlist  = PerlIO_list_alloc();
    PerlIO_define_layer(aTHX_ &PerlIO_unix);
-#ifdef WIN32
+#if defined(WIN32) && !defined(UNDER_CE)
    PerlIO_define_layer(aTHX_ &PerlIO_win32);
 #if 0
    osLayer = &PerlIO_win32;
index 8bec944..2550851 100644 (file)
@@ -65,6 +65,7 @@ if (-d "pod") {
     perlamiga          
     perlbeos
     perlbs2000
+    perlce
     perlcygwin          
     perldgux             
     perldos             
index 634a38b..5274afc 100644 (file)
@@ -114,6 +114,7 @@ For ease of access, the Perl manual has been split up into several sections:
     perlapollo         Perl notes for Apollo DomainOS
     perlbeos           Perl notes for BeOS
     perlbs2000         Perl notes for POSIX-BC BS2000
+    perlce             Perl notes for WinCE
     perlcygwin         Perl notes for Cygwin
     perldgux           Perl notes for DG/UX
     perldos            Perl notes for DOS
index bee65f6..f62c626 100644 (file)
@@ -564,7 +564,7 @@ Found in file op.h
 Recognise (or not) a number.  The type of the number is returned
 (0 if unrecognised), otherwise it is a bit-ORed combination of
 IS_NUMBER_IN_UV, IS_NUMBER_GREATER_THAN_UV_MAX, IS_NUMBER_NOT_INT,
-IS_NUMBER_NEG, IS_NUMBER_INFINITY (defined in perl.h).
+IS_NUMBER_NEG, IS_NUMBER_INFINITY, IS_NUMBER_NAN (defined in perl.h).
 
 If the value of the number can fit an in UV, it is returned in the *valuep
 IS_NUMBER_IN_UV will be set to indicate that *valuep is valid, IS_NUMBER_IN_UV
@@ -1344,6 +1344,17 @@ 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
@@ -1357,17 +1368,6 @@ 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
@@ -2119,22 +2119,22 @@ version which guarantees to evaluate sv only once.
 =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
 
-=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
@@ -2850,8 +2850,9 @@ Found in file sv.c
 
 =item sv_2mortal
 
-Marks an existing SV as mortal.  The SV will be destroyed when the current
-context ends. See also C<sv_newmortal> and C<sv_mortalcopy>.
+Marks an existing SV as mortal.  The SV will be destroyed "soon", either
+by an explicit call to FREETMPS, or by an implicit call at places such as
+statement boundaries.  See also C<sv_newmortal> and C<sv_mortalcopy>.
 
        SV*     sv_2mortal(SV* sv)
 
@@ -3322,8 +3323,9 @@ Found in file sv.c
 =item sv_mortalcopy
 
 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
-The new SV is marked as mortal. It will be destroyed when the current
-context ends.  See also C<sv_newmortal> and C<sv_2mortal>.
+The new SV is marked as mortal. It will be destroyed "soon", either by an
+explicit call to FREETMPS, or by an implicit call at places such as
+statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
 
        SV*     sv_mortalcopy(SV* oldsv)
 
@@ -3333,8 +3335,9 @@ Found in file sv.c
 =item sv_newmortal
 
 Creates a new null SV which is mortal.  The reference count of the SV is
-set to 1. It will be destroyed when the current context ends.  See
-also C<sv_mortalcopy> and C<sv_2mortal>.
+set to 1. It will be destroyed "soon", either by an explicit call to
+FREETMPS, or by an implicit call at places such as statement boundaries.
+See also C<sv_mortalcopy> and C<sv_2mortal>.
 
        SV*     sv_newmortal()
 
index e466dc7..f719320 100644 (file)
@@ -559,7 +559,7 @@ breaks the circularities in the self-referential structure.
 =head1 SEE ALSO
 
 A kinder, gentler tutorial on object-oriented programming in Perl can
-be found in L<perltoot>, L<perlbootc> and L<perltootc>.  You should
+be found in L<perltoot>, L<perlboot> and L<perltootc>.  You should
 also check out L<perlbot> for other object tricks, traps, and tips, as
 well as L<perlmodlib> for some style guides on constructing both
 modules and classes.
index b67898f..7a7fd49 100644 (file)
@@ -2037,7 +2037,7 @@ http://www.perl.com/CPAN/ports/index.html for binary distributions.
 =head1 SEE ALSO
 
 L<perlaix>, L<perlapollo>, L<perlamiga>, L<perlbeos>, L<perlbs200>,
-L<perlcygwin>, L<perldgux>, L<perldos>, L<perlepoc>, L<perlebcdic>,
+L<perlce>, L<perlcygwin>, L<perldgux>, L<perldos>, L<perlepoc>, L<perlebcdic>,
 L<perlhurd>, L<perlhpux>, L<perlmachten>, L<perlmacos>, L<perlmint>,
 L<perlmpeix>, L<perlnetware>, L<perlos2>, L<perlos390>, L<perlplan9>,
 L<perlqnx>, L<perlsolaris>, L<perltru64>, L<perlunicode>,
index c295f60..874fed4 100644 (file)
@@ -683,7 +683,7 @@ this yourself would be a productive exercise), but finishes in a fourth
 the time when used on a similar string with 1000000 C<a>s.  Be aware,
 however, that this pattern currently triggers a warning message under
 the C<use warnings> pragma or B<-w> switch saying it
-C<"matches the null string many times">):
+C<"matches null string many times in regex">.
 
 On simple groups, such as the pattern C<< (?> [^()]+ ) >>, a comparable
 effect may be achieved by negative look-ahead, as in C<[^()]+ (?! [^()] )>.
@@ -791,7 +791,7 @@ and the first "bar" thereafter.
   got <d is under the >
 
 Here's another example: let's say you'd like to match a number at the end
-of a string, and you also want to keep the preceding of part the match.
+of a string, and you also want to keep the preceding part of the match.
 So you write this:
 
     $_ = "I have 2 numbers: 53147";
index 5481468..2c00af4 100644 (file)
@@ -3910,7 +3910,7 @@ 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,
+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,
@@ -3920,15 +3920,15 @@ 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,
+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,
+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,
+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,
@@ -4457,9 +4457,16 @@ work?, Patches speak louder than words
 =item Keeping in sync
 
 rsync'ing the source tree, Using rsync over the LAN, Using pushing over the
-NFS, rsync'ing the patches, It's easier, It's more recent, It's more
-reliable, It's easier, It's a good reference, Finding a start point,
-Finding how to fix a bug, Finding the source of misbehaviour
+NFS, rsync'ing the patches
+
+=item Why rsync the source tree
+
+It's easier to rsync the source tree, It's more recent, It's more reliable
+
+=item Why rsync the patches
+
+It's easier to rsync the patches, It's a good reference, Finding a start
+point, Finding how to fix a bug, Finding the source of misbehaviour
 
 =item Submitting patches
 
@@ -4468,7 +4475,7 @@ F<Porting/pumpkin.pod>, The perl5-porters FAQ
 
 =item Finding Your Way Around
 
-Core modules, Documentation, Configure, Interpreter
+Core modules, Tests, Documentation, Configure, Interpreter
 
 =item Elements of the interpreter
 
@@ -4495,6 +4502,13 @@ finish, 'enter', print
 
 =item Patching
 
+=item Patching a core module
+
+=item Writing a test
+
+F<t/base/>, F<t/cmd/>, F<t/comp/>, F<t/io/>, F<t/lib/>, F<t/op/>,
+F<t/pod/>, F<t/run/>
+
 =back
 
 =item EXTERNAL TOOLS FOR DEBUGGING PERL
@@ -5850,6 +5864,28 @@ R4 x86, R4 PPC
 
 =back
 
+=over 4
+
+=item Name
+
+=item Description
+
+=item Build
+
+=over 4
+
+=item Tools & SDK
+
+=item Make
+
+=back
+
+=item Acknowledgements
+
+=item Author
+
+=back
+
 =head2 perlcygwin, README.cygwin - Perl for Cygwin
 
 =over 4
@@ -5967,6 +6003,50 @@ Source, Compiled Module Source, Perl Modules/Scripts
 
 =back
 
+=head2 perldos - Perl under DOS, W31, W95.
+
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=over 4
+
+=item Prerequisites for Compiling Perl on DOS
+
+DJGPP, Pthreads
+
+=item Shortcomings of Perl under DOS
+
+=item Building Perl on DOS
+
+=item Testing Perl on DOS
+
+=item Installation of Perl on DOS
+
+=back
+
+=item BUILDING AND INSTALLING MODULES ON DOS
+
+=over 4
+
+=item Building Prerequisites for Perl on DOS
+
+=item Unpacking CPAN Modules on DOS
+
+=item Building Non-XS Modules on DOS
+
+=item Building XS Modules on DOS
+
+=back
+
+=item AUTHOR
+
+=item SEE ALSO
+
+=back
+
 =head2 perlepoc, README.epoc - Perl for EPOC
 
 =over 4
@@ -6837,6 +6917,48 @@ LIST, waitpid PID,FLAGS
 
 =back
 
+=head2 perlwin32 - Perl under Win32
+
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=over 4
+
+=item Setting Up Perl on Win32
+
+Make, Command Shell, Borland C++, Microsoft Visual C++, Mingw32 with GCC
+
+=item Building
+
+=item Testing Perl on Win32
+
+=item Installation of Perl on Win32
+
+=item Usage Hints for Perl on Win32
+
+Environment Variables, File Globbing, Using perl from the command line,
+Building Extensions, Command-line Wildcard Expansion, Win32 Specific
+Extensions, Running Perl Scripts, Miscellaneous Things
+
+=back
+
+=item BUGS AND CAVEATS
+
+=item AUTHORS
+
+Gary Ng E<lt>71564.1743@CompuServe.COME<gt>, Gurusamy Sarathy
+E<lt>gsar@activestate.comE<gt>, Nick Ing-Simmons
+E<lt>nick@ing-simmons.netE<gt>
+
+=item SEE ALSO
+
+=item HISTORY
+
+=back
+
 =head1 PRAGMA DOCUMENTATION
 
 =head2 attrs - set/get attributes of a subroutine (deprecated)
@@ -8785,7 +8907,7 @@ C<drand01>, C<dynamic_ext>
 =item e
 
 C<eagain>, C<ebcdic>, C<echo>, C<egrep>, C<emacs>, C<eunicefix>,
-C<exe_ext>, C<expr>, C<extensions>
+C<exe_ext>, C<expr>, C<extensions>, C<extras>
 
 =item f
 
@@ -11996,32 +12118,6 @@ set ( NAME => VALUE [, NAME => VALUE ...] ), setall ( VALUES ), setval ( N
 
 =back
 
-=head2 Langinfo - Perl extension for blah blah blah
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item EXPORT
-
-=item Exportable constants
-
-=back
-
-=item HISTORY
-
-=item SEE ALSO
-
-=item AUTHOR
-
-=item COPYRIGHT AND LICENSE
-
-=back
-
 =head2 List::Util - A selection of general-utility list subroutines
 
 =over 4
@@ -14115,8 +14211,8 @@ release, section
 =item DIAGNOSTICS
 
 roff font should be 1 or 2 chars, not "%s", Invalid link %s, Invalid quote
-specification "%s", %s:%d: Unknown command paragraph "%s", Unknown escape
-EE<lt>%sE<gt>, Unknown sequence %s, Unmatched =back
+specification "%s", %s:%d: Unknown command paragraph "%s", %s:%d: Unknown
+escape EE<lt>%sE<gt>, %s:%d: Unknown sequence %s, %s:%d: Unmatched =back
 
 =item BUGS
 
@@ -14937,6 +15033,8 @@ C<Storable::is_retrieving>
 
 =item Automating fall-through
 
+=item Alternative syntax
+
 =item Higher-order Operations
 
 =back
diff --git a/pp.c b/pp.c
index 658a890..1cb3a44 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -467,8 +467,8 @@ S_refto(pTHX_ SV *sv)
        SvTEMP_off(sv);
        (void)SvREFCNT_inc(sv);
     }
-    else if (SvPADTMP(sv))
-       sv = newSVsv(sv);
+    else if (SvPADTMP(sv) && !IS_PADGV(sv))
+        sv = newSVsv(sv);
     else {
        SvTEMP_off(sv);
        (void)SvREFCNT_inc(sv);
diff --git a/sv.c b/sv.c
index f74adea..9dd85d7 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -6050,8 +6050,9 @@ Perl_sv_dec(pTHX_ register SV *sv)
 =for apidoc sv_mortalcopy
 
 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
-The new SV is marked as mortal. It will be destroyed when the current
-context ends.  See also C<sv_newmortal> and C<sv_2mortal>.
+The new SV is marked as mortal. It will be destroyed "soon", either by an
+explicit call to FREETMPS, or by an implicit call at places such as
+statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
 
 =cut
 */
@@ -6078,8 +6079,9 @@ Perl_sv_mortalcopy(pTHX_ SV *oldstr)
 =for apidoc sv_newmortal
 
 Creates a new null SV which is mortal.  The reference count of the SV is
-set to 1. It will be destroyed when the current context ends.  See
-also C<sv_mortalcopy> and C<sv_2mortal>.
+set to 1. It will be destroyed "soon", either by an explicit call to
+FREETMPS, or by an implicit call at places such as statement boundaries.
+See also C<sv_mortalcopy> and C<sv_2mortal>.
 
 =cut
 */
@@ -6099,8 +6101,9 @@ Perl_sv_newmortal(pTHX)
 /*
 =for apidoc sv_2mortal
 
-Marks an existing SV as mortal.  The SV will be destroyed when the current
-context ends. See also C<sv_newmortal> and C<sv_mortalcopy>.
+Marks an existing SV as mortal.  The SV will be destroyed "soon", either
+by an explicit call to FREETMPS, or by an implicit call at places such as
+statement boundaries.  See also C<sv_newmortal> and C<sv_mortalcopy>.
 
 =cut
 */
@@ -9298,7 +9301,7 @@ Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, clone_params* param)
     GP *gp;
     IV iv;
     I32 i;
-    char *c;
+    char *c = NULL;
     void (*dptr) (void*);
     void (*dxptr) (pTHXo_ void*);
     OP *o;
@@ -10265,6 +10268,9 @@ perl_clone_using(PerlInterpreter *proto_perl, UV flags,
     PL_reginterp_cnt   = 0;
     PL_reg_starttry    = 0;
 
+    /* Pluggable optimizer */
+    PL_peepp           = proto_perl->Tpeepp;
+
     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
         ptr_table_free(PL_ptr_table);
         PL_ptr_table = NULL;
index be69c24..a2a074e 100644 (file)
@@ -13,6 +13,8 @@
 # PS this is not POD because this should be a very minimalist module in
 # case of funaemental perl breakage.
 
+package TestInit;
+
 chdir 't' if -d 't';
 @INC = '../lib';
 $0 =~ s/\.dp$//; # for the test.deparse make target
index 6f111f1..d5ddb51 100644 (file)
--- a/t/harness
+++ b/t/harness
@@ -5,10 +5,9 @@
 
 BEGIN {
     chdir 't' if -d 't';
-    unshift @INC, '../lib';
+    @INC = '../lib';              # pick up only this build's lib
     $ENV{PERL5LIB} = '../lib';    # so children will see it too
 }
-use lib '../lib';
 
 use Test::Harness;
 
@@ -35,18 +34,26 @@ foreach (keys %datahandle) {
      unlink "$_.t";
 }
 
+my @tests = ();
+
 if (@ARGV) {
     @tests = @ARGV;
 } else {
     unless (@tests) {
-       @tests = <base/*.t comp/*.t cmd/*.t run/*.t io/*.t op/*.t lib/*.t>;
+       push @tests, <base/*.t>;
+        push @tests, <comp/*.t>;
+        push @tests, <cmd/*.t>;
+        push @tests, <run/*.t>;
+        push @tests, <io/*.t>;
+        push @tests, <op/*.t>;
+        push @tests, <lib/*.t>;
        use File::Spec;
        my $updir = File::Spec->updir;
-       my $mani  = File::Spec->catdir(File::Spec->updir, "MANIFEST");
+       my $mani  = File::Spec->catfile(File::Spec->updir, "MANIFEST");
        if (open(MANI, $mani)) {
            while (<MANI>) { # similar code in t/TEST
            if (m!^(ext/\S+/([^/]+\.t|test\.pl)|lib/\S+?(\.t|test\.pl))\s!) {
-                   push @tests, File::Spec->catdir($updir, $1);
+                   push @tests, File::Spec->catfile($updir, $1);
                }
            }
        } else {
index fb8b8f1..bd07833 100755 (executable)
--- a/t/io/fs.t
+++ b/t/io/fs.t
@@ -256,6 +256,8 @@ chdir $wd || die "Can't cd back to $wd";
 
 # check if rename() works on directories
 if ($Is_VMSish) {
+    # must have delete access to rename a directory
+    `set file tmp.dir/protection=o:d`;
     rename 'tmp.dir', 'tmp1.dir' or print "not ";
 }
 else {
index 848822d..805bd98 100644 (file)
@@ -57,6 +57,7 @@ print() on closed filehandle STDIN at - line 5.
 ########
 -W
 --FILE-- abc.pm
+package abc;
 no warnings 'syntax' ;
 my $a = 0;
 $a =+ 1 ;
@@ -66,11 +67,12 @@ no warnings 'uninitialized' ;
 use abc;
 my $a ; chop $a ;
 EXPECT
-Reversed += operator at abc.pm line 3.
+Reversed += operator at abc.pm line 4.
 Use of uninitialized value in scalar chop at - line 3.
 ########
 -W
 --FILE-- abc
+package abc;
 no warnings 'syntax' ;
 my $a = 0;
 $a =+ 1 ;
@@ -80,11 +82,12 @@ no warnings 'uninitialized' ;
 require "./abc";
 my $a ; chop $a ;
 EXPECT
-Reversed += operator at ./abc line 3.
+Reversed += operator at ./abc line 4.
 Use of uninitialized value in scalar chop at - line 3.
 ########
 -W
 --FILE-- abc.pm
+package abc;
 BEGIN {$^W = 0}
 my $a = 0 ;
 $a =+ 1 ;
@@ -94,7 +97,7 @@ $^W = 0 ;
 use abc;
 my $a ; chop $a ;
 EXPECT
-Reversed += operator at abc.pm line 3.
+Reversed += operator at abc.pm line 4.
 Use of uninitialized value in scalar chop at - line 3.
 ########
 -W
index f5579b2..c3f2e39 100755 (executable)
@@ -151,6 +151,7 @@ print "ok1\n" if ! warnings::enabled('all') ;
 print "ok2\n" if ! warnings::enabled("io") ;
 1;
 --FILE-- def.pm
+package def;
 no warnings;
 use abc ;
 1;
index b04bdb7..cb9a290 100755 (executable)
@@ -77,7 +77,7 @@ package main;
 
 use Symbol;
 
-print "1..33\n";
+print "1..35\n";
 
 my $fh = gensym;
 
@@ -165,3 +165,27 @@ ok($r == 1);
     $r = print STDERR @expect[2,3];
     ok($r == 1);
 }
+
+{
+    # Test for change #11536
+    package Foo;
+    use strict;
+    sub TIEHANDLE { bless {} }
+    my $cnt = 'a';
+    sub READ {
+       $_[1] = $cnt++;
+       1;
+    }
+    sub do_read {
+       my $fh = shift;
+       read $fh, my $buff, 1;
+       main::ok(1);
+    }
+    $|=1;
+    tie *STDIN, 'Foo';
+    read STDIN, my $buff, 1;
+    main::ok(1);
+    do_read(\*STDIN);
+    untie *STDIN;
+}
+
index 20c2c49..d9fe8b4 100644 (file)
@@ -18,15 +18,42 @@ sub run {
     return system($cmd.$quote.$code.$quote);
 }
 
-use Test::More tests => 3;
+BEGIN {
+    $numtests = ($^O eq 'VMS') ? 7 : 3; 
+}
+
+use Test::More tests => $numtests;
 
-my $exit;
+my $exit, $exit_arg;
 
 $exit = run('exit');
 is( $exit >> 8, 0,              'Normal exit' );
 
-$exit = run('exit 42');
-is( $exit >> 8, 42,             'Non-zero exit' );
+if ($^O ne 'VMS') {
+
+  $exit = run('exit 42');
+  is( $exit >> 8, 42,             'Non-zero exit' );
+
+} else {
+
+# On VMS, successful returns from system() are always 0, warnings are 1,
+# errors are 2, and fatal errors are 4.
+
+  $exit = run("exit 196609"); # %CLI-S-NORMAL
+  is( $exit >> 8, 0,             'success exit' );
+
+  $exit = run("exit 196611");  # %CLI-I-NORMAL
+  is( $exit >> 8, 0,             'informational exit' );
+
+  $exit = run("exit 196608");  # %CLI-W-NORMAL
+  is( $exit >> 8, 1,             'warning exit' );
+
+  $exit = run("exit 196610");  # %CLI-E-NORMAL
+  is( $exit >> 8, 2,             'error exit' );
+
+  $exit = run("exit 196612");  # %CLI-F-NORMAL
+  is( $exit >> 8, 4,             'fatal error exit' );
+}
 
 $exit = run('END { $? = 42 }');
 is( $exit >> 8, 42,             'Changing $? in END block' );
index a739ecd..8e999fc 100644 (file)
--- a/thrdvar.h
+++ b/thrdvar.h
@@ -211,6 +211,8 @@ PERLVAR(Treg_leftiter,      I32)            /* wait until caching pos */
 PERLVARI(Treg_poscache, char *, Nullch)        /* cache of pos of WHILEM */
 PERLVAR(Treg_poscache_size, STRLEN)    /* size of pos cache of WHILEM */
 
+PERLVARI(Tpeepp,       peep_t, MEMBER_TO_FPTR(Perl_peep))
+                                       /* Pointer to peephole optimizer */
 PERLVARI(Tregcompp,    regcomp_t, MEMBER_TO_FPTR(Perl_pregcomp))
                                        /* Pointer to REx compiler */
 PERLVARI(Tregexecp,    regexec_t, MEMBER_TO_FPTR(Perl_regexec_flags))
diff --git a/toke.c b/toke.c
index 68db086..d535442 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -7359,15 +7359,19 @@ S_scan_formline(pTHX_ register char *s)
                if (*t == '@' || *t == '^')
                    needargs = TRUE;
            }
-           sv_catpvn(stuff, s, eol-s);
+           if (eol > s) {
+               sv_catpvn(stuff, s, eol-s);
 #ifndef PERL_STRICT_CR
-           if (eol-s > 1 && eol[-2] == '\r' && eol[-1] == '\n') {
-               char *end = SvPVX(stuff) + SvCUR(stuff);
-               end[-2] = '\n';
-               end[-1] = '\0';
-               SvCUR(stuff)--;
-           }
+               if (eol-s > 1 && eol[-2] == '\r' && eol[-1] == '\n') {
+                   char *end = SvPVX(stuff) + SvCUR(stuff);
+                   end[-2] = '\n';
+                   end[-1] = '\0';
+                   SvCUR(stuff)--;
+               }
 #endif
+           }
+           else
+             break;
        }
        s = eol;
        if (PL_rsfp) {
index fb3a995..a7e00d2 100644 (file)
--- a/unixish.h
+++ b/unixish.h
@@ -93,7 +93,7 @@
  */
 /* #define ALTERNATE_SHEBANG "#!" / **/
 
-#if !defined(NSIG) || defined(M_UNIX) || defined(M_XENIX) || defined(__NetBSD__)
+#if !defined(NSIG) || defined(M_UNIX) || defined(M_XENIX) || defined(__NetBSD__) || defined(__FreeBSD__)
 # include <signal.h>
 #endif
 
diff --git a/util.c b/util.c
index a88c25d..b615556 100644 (file)
--- a/util.c
+++ b/util.c
@@ -3037,6 +3037,8 @@ Perl_new_struct_thread(pTHX_ struct perl_thread *t)
     PL_reg_start_tmpl = 0;
     PL_reg_poscache = Nullch;
 
+    PL_peepp = MEMBER_TO_FPTR(Perl_peep);
+
     /* parent thread's data needs to be locked while we make copy */
     MUTEX_LOCK(&t->mutex);
 
index c27d24b..0a065ec 100644 (file)
@@ -808,8 +808,9 @@ if( ! $opt_X ){  # use XS, unless it was disabled
        $filter = $';
       }
       warn "Scanning $filename for functions...\n";
+      my @styles = $Config{gccversion} ? qw(C++ C9X GNU) : qw(C++ C9X);
       $c = new C::Scan 'filename' => $filename, 'filename_filter' => $filter,
-       'add_cppflags' => $addflags, 'c_styles' => [qw(C++ C9X)];
+       'add_cppflags' => $addflags, 'c_styles' => \@styles;
       $c->set('includeDirs' => ["$Config::Config{archlib}/CORE"]);
 
       push @$fdecls_parsed, @{ $c->get('parsed_fdecls') };
@@ -1586,6 +1587,8 @@ sub assign_typemap_entry {
     print "Type mutation via typedefs: $otype ==> $type\n" if $opt_d;
     $entry = assign_typemap_entry($type);
   }
+  # XXX good do better if our UV happens to be long long
+  return "T_NV" if $type =~ /^(unsigned\s+)?long\s+(long|double)\z/;
   $entry ||= $typemap{$otype}
     || (td_is_struct($type) ? "T_OPAQUE_STRUCT" : "T_PTROBJ");
   $typemap{$otype} = $entry;
index 9f2f5fd..f43c9ce 100644 (file)
@@ -457,6 +457,7 @@ UTILS               =                       \
                ..\utils\h2xs           \
                ..\utils\perldoc        \
                ..\utils\perlcc         \
+               ..\utils\libnetcfg      \
                ..\pod\checkpods        \
                ..\pod\pod2html         \
                ..\pod\pod2latex        \
@@ -467,6 +468,7 @@ UTILS               =                       \
                ..\pod\podselect        \
                ..\x2p\find2perl        \
                ..\x2p\s2p              \
+               ..\lib\ExtUtils\xsubpp  \
                bin\exetype.pl          \
                bin\runperl.pl          \
                bin\pl2bat.pl           \
@@ -941,6 +943,7 @@ utils: $(PERLEXE) $(X2P)
        copy ..\README.apollo   .\perlapollo.pod
        copy ..\README.beos     .\perlbeos.pod
        copy ..\README.bs2000   .\perlbs2000.pod
+       copy ..\README.ce       .\perlce.pod
        copy ..\README.cygwin   .\perlcygwin.pod
        copy ..\README.dgux     .\perldgux.pod
        copy ..\README.dos      .\perldos.pod
@@ -1019,7 +1022,7 @@ distclean: clean
        cd $(PODDIR)
        -del /f *.html *.bat checkpods \
            perlaix.pod perlamiga.pod perlapollo.pod perlbeos.pod \
-           perlbs2000.pod perlcygwin.pod perldgux.pod \
+           perlbs2000.pod perlce.pod perlcygwin.pod perldgux.pod \
            perldos.pod perlepoc.pod perlhurd.pod \
            perlhpux.pod perlmachten.pod \
            perlmacos.pod perlmint.pod perlmpeix.pod perlnetware.pod \
index 7a30552..bdab954 100644 (file)
@@ -593,6 +593,7 @@ UTILS               =                       \
                ..\utils\h2xs           \
                ..\utils\perldoc        \
                ..\utils\perlcc         \
+               ..\utils\libnetcfg      \
                ..\pod\checkpods        \
                ..\pod\pod2html         \
                ..\pod\pod2latex        \
@@ -603,6 +604,7 @@ UTILS               =                       \
                ..\pod\podselect        \
                ..\x2p\find2perl        \
                ..\x2p\s2p              \
+               ..\lib\ExtUtils\xsubpp  \
                bin\exetype.pl          \
                bin\runperl.pl          \
                bin\pl2bat.pl           \
@@ -1093,6 +1095,7 @@ utils: $(PERLEXE) $(X2P)
        copy ..\README.apollo   ..\pod\perlapollo.pod
        copy ..\README.beos     ..\pod\perlbeos.pod
        copy ..\README.bs2000   ..\pod\perlbs2000.pod
+       copy ..\README.ce       ..\pod\perlce.pod
        copy ..\README.cygwin   ..\pod\perlcygwin.pod
        copy ..\README.dgux     ..\pod\perldgux.pod
        copy ..\README.dos      ..\pod\perldos.pod
@@ -1155,7 +1158,7 @@ distclean: clean
        -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 \
+           perlbeos.pod perlbs2000.pod perlce.pod perlcygwin.pod perldgux.pod \
            perldos.pod perlepoc.pod perlhpux.pod perlhurd.pod \
            perlmachten.pod perlmint.pod \
            perlmacos.pod perlmpeix.pod perlnetware.pod \
diff --git a/wince/FindExt.pm b/wince/FindExt.pm
new file mode 100644 (file)
index 0000000..8312503
--- /dev/null
@@ -0,0 +1,63 @@
+package FindExt;
+use strict;
+use File::Find;
+use File::Basename;
+use Cwd;
+
+my $no = join('|',qw(DynaLoader GDBM_File ODBM_File NDBM_File DB_File
+                    Syslog SysV Langinfo));
+$no = qr/^(?:$no)$/i;
+
+my %ext;
+my $ext;
+sub scan_ext
+{
+ my $here = getcwd();
+ my $dir  = shift;
+ chdir($dir) || die "Cannot cd to $dir\n";
+ ($ext = getcwd()) =~ s,/,\\,g;
+ find(\&find_ext,'.');
+ chdir($here) || die "Cannot cd to $here\n";
+ my @ext = extensions();
+}
+
+sub dynamic_extensions
+{
+ return grep $ext{$_} eq 'dynamic',keys %ext;
+}
+
+sub noxs_extensions
+{
+ return grep $ext{$_} eq 'nonxs',keys %ext;
+}
+
+sub extensions
+{
+ return keys %ext;
+}
+
+sub find_ext
+{
+ if (/^(.*)\.pm$/i || /^(.*)_pm\.PL$/i || /^(.*)\.xs$/i)
+  {
+   my $name = $1;
+   return if $name =~ $no; 
+   my $dir = $File::Find::dir; 
+   $dir =~ s,./,,;
+   return if exists $ext{$dir};
+   return unless -f "$ext/$dir/Makefile.PL";
+   if ($dir =~ /$name$/i)
+    {
+     if (-f "$ext/$dir/$name.xs")
+      {
+       $ext{$dir} = 'dynamic'; 
+      }
+     else
+      {
+       $ext{$dir} = 'nonxs'; 
+      }
+    }
+  }
+}
+
+1;
diff --git a/wince/Makefile.ce b/wince/Makefile.ce
new file mode 100644 (file)
index 0000000..6b3449f
--- /dev/null
@@ -0,0 +1,1083 @@
+# perl makefile for wince\r
+#\r
+# Time-stamp: <01/08/01 21:11:35 keuchel@w2k>\r
+\r
+SRCDIR     = ..\r
+PV         = 57\r
+INST_VER   = 5.7.2\r
+PERLCEDIR  = H:\src\wince\perl\wince\r
+WCEROOT    = N:\Windows CE Tools\r
+#WCEROOT    = D:\Windows CE Tools\r
+NTPERL     = N:\Programme\perl\bin\perl.exe\r
+#NTPERL     = D:\Programme\ActiveState\perl-5.6\bin\Perl.exe\r
+CEPATH     = N:\Programme\Microsoft eMbedded Tools\EVC\WCE211\BIN\r
+#CEPATH     = D:\Programme\Microsoft eMbedded Tools\EVC\WCE211\BIN\r
+CELIBDLLDIR  = h:\src\wince\celib-palm\r
+CECONSOLEDIR = h:\src\wince\w32console\r
+# Only for WIN2000\r
+YES        = /y\r
+COPY       = copy $(YES)\r
+XCOPY      = xcopy $(YES) /f /r /i /d\r
+RCOPY     = xcopy $(YES) /f /r /i /e /d\r
+NOOP      = @echo\r
+# keep this untouched!\r
+NULL      =\r
+\r
+CFG=DEBUG\r
+#CFG=RELEASE\r
+\r
+!if "$(MACHINE)" == ""\r
+MACHINE=wince-arm-hpc-wce300\r
+#MACHINE=wince-arm-hpc-wce211\r
+#MACHINE=wince-sh3-hpc-wce211\r
+#MACHINE=wince-mips-hpc-wce211\r
+#MACHINE=wince-sh3-hpc-wce200\r
+#MACHINE=wince-mips-hpc-wce200\r
+#MACHINE=wince-arm-pocket-wce300\r
+#MACHINE=wince-mips-pocket-wce300\r
+#MACHINE=wince-sh3-pocket-wce300\r
+#MACHINE=wince-x86em-pocket-wce300\r
+#MACHINE=wince-mips-palm-wce211\r
+#MACHINE=wince-sh3-palm-wce211\r
+#MACHINE=wince-x86em-palm-wce211\r
+!endif\r
+\r
+######################################################################\r
+# machines\r
+\r
+!if "$(MACHINE)" == "wince-sh3-hpc-wce211"\r
+CC         = shcl.exe\r
+ARCH       = SH3\r
+CPU        = SH3\r
+TARGETCPU  = SH3\r
+CEVersion  = 211\r
+OSVERSION  = WCE211\r
+PLATFORM   = MS HPC Pro\r
+MCFLAGS    = -MDd -DSH3 -D_SH3_ -DSHx -DPROCESSOR_SH3 -DPALM_SIZE \\r
+             -I $(CELIBDLLDIR)\inc\r
+SUBSYS    = -subsystem:windowsce,2.11\r
+CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release\r
+LDLIBPATH  = -libpath:$(CELIBPATH)\r
+STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \\r
+             $(CECONSOLEDIR)/$(MACHINE)/w32console.obj\r
+!endif\r
+\r
+!if "$(MACHINE)" == "wince-mips-hpc-wce211"\r
+CC         = clmips.exe\r
+ARCH       = MIPS\r
+CPU        = MIPS\r
+TARGETCPU  = MIPS\r
+CEVersion  = 211\r
+OSVERSION  = WCE211\r
+PLATFORM   = MS HPC Pro\r
+MCFLAGS    = -D _MT -D _DLL \\r
+             -D MIPS -D mips -D _MIPS_ -D _mips_ -DPROCESSOR_MIPS \\r
+             -D PALM_SIZE \\r
+             -I $(CELIBDLLDIR)\inc\r
+SUBSYS    = -subsystem:windowsce,2.11\r
+CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release\r
+LDLIBPATH  = -libpath:$(CELIBPATH)\r
+STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \\r
+             $(CECONSOLEDIR)/$(MACHINE)/w32console.obj\r
+!endif\r
+\r
+!if "$(MACHINE)" == "wince-mips-hpc-wce200"\r
+CC         = clmips.exe\r
+ARCH       = MIPS\r
+CPU        = MIPS\r
+TARGETCPU  = MIPS\r
+CEVersion  = 200\r
+OSVERSION  = WCE200\r
+PLATFORM   = MS HPC\r
+# MUST USE -MD to get the right FPE stuff...\r
+MCFLAGS    = -D _MT -D _DLL -MD \\r
+             -D MIPS -D mips -D _MIPS_ -D _mips_ -DPROCESSOR_MIPS \\r
+             -D PALM_SIZE \\r
+             -I $(CELIBDLLDIR)\inc\r
+SUBSYS    = -subsystem:windowsce,2.00\r
+CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release\r
+LDLIBPATH  = -libpath:$(CELIBPATH)\r
+STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \\r
+             $(CECONSOLEDIR)/$(MACHINE)/w32console.obj\r
+!endif\r
+\r
+!if "$(MACHINE)" == "wince-sh3-hpc-wce200"\r
+CC         = shcl.exe\r
+ARCH       = SH3\r
+CPU        = SH3\r
+TARGETCPU  = SH3\r
+CEVersion  = 200\r
+OSVERSION  = WCE200\r
+PLATFORM   = MS HPC\r
+# MUST USE -MD to get the right FPE stuff...\r
+MCFLAGS    = -D _MT -D _DLL -MD \\r
+             -D SH3 -D sh3 -D _SH3_ -D _sh3_ -D SHx -DPROCESSOR_SH3 \\r
+             -D PALM_SIZE \\r
+             -I $(CELIBDLLDIR)\inc\r
+SUBSYS    = -subsystem:windowsce,2.00\r
+CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release\r
+LDLIBPATH  = -libpath:$(CELIBPATH)\r
+STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \\r
+             $(CECONSOLEDIR)/$(MACHINE)/w32console.obj\r
+!endif\r
+\r
+!if "$(MACHINE)" == "wince-arm-hpc-wce211"\r
+CC         = clarm.exe\r
+ARCH       = ARM\r
+CPU        = ARM\r
+TARGETCPU  = ARM\r
+CEVersion  = 211\r
+OSVERSION  = WCE211\r
+PLATFORM   = MS HPC Pro\r
+MCFLAGS    = -D _MT -D _DLL -D ARM -D arm -D _arm_ -D _ARM_ \\r
+             -DPROCESSOR_ARM -DPALM_SIZE \\r
+             -I $(CELIBDLLDIR)\inc\r
+SUBSYS    = -subsystem:windowsce,2.11\r
+CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release\r
+LDLIBPATH  = -libpath:$(CELIBPATH)\r
+STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \\r
+             $(CECONSOLEDIR)/$(MACHINE)/w32console.obj\r
+!endif\r
+\r
+!if "$(MACHINE)" == "wince-arm-hpc-wce300"\r
+CC         = clarm.exe\r
+ARCH       = ARM\r
+CPU        = ARM\r
+TARGETCPU  = ARM\r
+CEVersion  = 300\r
+OSVERSION  = WCE300\r
+PLATFORM   = HPC2000\r
+MCFLAGS    = -D _MT -D _DLL -D ARM -D arm -D _arm_ -D _ARM_ \\r
+             -DPROCESSOR_ARM -DPALM_SIZE \\r
+             -I $(CELIBDLLDIR)\inc\r
+SUBSYS    = -subsystem:windowsce,3.00\r
+CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release\r
+LDLIBPATH  = -libpath:$(CELIBPATH)\r
+STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \\r
+             $(CECONSOLEDIR)/$(MACHINE)/w32console.obj\r
+!endif\r
+\r
+!if "$(MACHINE)" == "wince-mips-palm-wce211"\r
+CC         = clmips.exe\r
+ARCH       = MIPS\r
+CPU        = MIPS\r
+TARGETCPU  = MIPS\r
+CEVersion  = 211\r
+OSVERSION  = WCE211\r
+PLATFORM   = MS Palm Size PC\r
+MCFLAGS    = -DMIPS -D_MIPS_ -DPROCESSOR_MIPS -D PALM_SIZE -D _DLL -D _MT \\r
+             -I $(CELIBDLLDIR)\inc\r
+SUBSYS    = -subsystem:windowsce,2.11\r
+CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release\r
+LDLIBPATH  = -libpath:$(CELIBPATH)\r
+STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \\r
+             $(CECONSOLEDIR)/$(MACHINE)/w32console.obj\r
+!endif\r
+\r
+!if "$(MACHINE)" == "wince-sh3-palm-wce211"\r
+CC         = shcl.exe\r
+ARCH       = SH3\r
+CPU        = SH3\r
+TARGETCPU  = SH3\r
+CEVersion  = 211\r
+OSVERSION  = WCE211\r
+PLATFORM   = MS Palm Size PC\r
+MCFLAGS    = -D _MT -D _DLL -DSH3 -D_SH3_ -DSHx -DPROCESSOR_SH3 -DPALM_SIZE \\r
+             -I $(CELIBDLLDIR)\inc\r
+SUBSYS    = -subsystem:windowsce,2.11\r
+CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release\r
+LDLIBPATH  = -libpath:$(CELIBPATH)\r
+STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \\r
+             $(CECONSOLEDIR)/$(MACHINE)/w32console.obj\r
+!endif\r
+\r
+!if "$(MACHINE)" == "wince-x86em-palm-wce211"\r
+CC         = cl.exe\r
+ARCH       = X86EM\r
+CPU        = X86\r
+TARGETCPU  = X86\r
+CEVersion  = 211\r
+OSVERSION  = WCE211\r
+PLATFORM   = MS Palm Size PC\r
+MCFLAGS    = -MDd -DX86 -D_X86_ -DPROCESSOR_X86 \\r
+             -D_WIN32_WCE_EMULATION -DPALM_SIZE \\r
+             -I $(CELIBDLLDIR)\inc\r
+MACH       = -machine:x86\r
+SUBSYS     = -subsystem:windows\r
+CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release\r
+LDLIBPATH  = -libpath:$(CELIBPATH)\r
+STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \\r
+             $(CECONSOLEDIR)/$(MACHINE)/w32console.obj\r
+!endif\r
+\r
+!if "$(MACHINE)" == "wince-x86em-pocket-wce300"\r
+CC         = cl.exe\r
+ARCH       = X86EM\r
+CPU        = X86\r
+TARGETCPU  = X86\r
+CEVersion  = 300\r
+OSVERSION  = WCE300\r
+PLATFORM   = MS Pocket PC\r
+MCFLAGS    = -DX86 -D_X86_ -DPROCESSOR_X86 -D _MT -D _DLL \\r
+             -D_WIN32_WCE_EMULATION -DPALM_SIZE -DPOCKET_SIZE \\r
+             -I $(CELIBDLLDIR)\inc \r
+MACH       = -machine:x86\r
+SUBSYS     = -subsystem:windows\r
+CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release\r
+LDLIBPATH  = -libpath:$(CELIBPATH)\r
+STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \\r
+             $(CECONSOLEDIR)/$(MACHINE)/w32console.obj\r
+!endif\r
+\r
+!if "$(MACHINE)" == "wince-mips-pocket-wce300"\r
+CC         = clmips.exe\r
+ARCH       = MIPS\r
+CPU        = MIPS\r
+TARGETCPU  = MIPS\r
+CEVersion  = 300\r
+OSVERSION  = WCE300\r
+PLATFORM   = MS Pocket PC\r
+MCFLAGS    = -D MIPS -D mips -D _MIPS_ -D _mips_ -DPROCESSOR_MIPS \\r
+             -D _MT -D _DLL -DPALM_SIZE -DPOCKET_SIZE \\r
+             -I $(CELIBDLLDIR)\inc \r
+MACH       = -machine:mips\r
+SUBSYS     = -subsystem:windowsce,3.00\r
+CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release\r
+LDLIBPATH  = -libpath:$(CELIBPATH)\r
+STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \\r
+             $(CECONSOLEDIR)/$(MACHINE)/w32console.obj\r
+!endif\r
+\r
+!if "$(MACHINE)" == "wince-sh3-pocket-wce300"\r
+CC         = shcl.exe\r
+ARCH       = SH3\r
+CPU        = SH3\r
+TARGETCPU  = SH3\r
+CEVersion  = 300\r
+OSVERSION  = WCE300\r
+PLATFORM   = MS Pocket PC\r
+MCFLAGS    = -D _MT -D _DLL -DSH3 -D_SH3_ -DSHx -DPROCESSOR_SH3 \\r
+             -DPALM_SIZE -DPOCKET_SIZE \\r
+             -I $(CELIBDLLDIR)\inc \r
+MACH       = -machine:mips\r
+SUBSYS     = -subsystem:windowsce,3.00\r
+CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release\r
+LDLIBPATH  = -libpath:$(CELIBPATH)\r
+STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \\r
+             $(CECONSOLEDIR)/$(MACHINE)/w32console.obj\r
+!endif\r
+\r
+!if "$(MACHINE)" == "wince-arm-pocket-wce300"\r
+CC         = clarm.exe\r
+ARCH       = ARM\r
+CPU        = ARM\r
+TARGETCPU  = ARM\r
+CEVersion  = 300\r
+OSVERSION  = WCE300\r
+PLATFORM   = MS Pocket PC\r
+MCFLAGS    = -D ARM -D arm -D _ARM_ -D _arm_ -DPROCESSOR_ARM \\r
+             -D _MT -D _DLL -DPALM_SIZE -DPOCKET_SIZE \\r
+             -I $(CELIBDLLDIR)\inc \r
+MACH       = -machine:arm\r
+SUBSYS     = -subsystem:windowsce,3.00\r
+CELIBPATH  = $(CELIBDLLDIR)\$(MACHINE)-release\r
+LDLIBPATH  = -libpath:$(CELIBPATH)\r
+STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \\r
+             $(CECONSOLEDIR)/$(MACHINE)/w32console.obj\r
+!endif\r
+\r
+######################################################################\r
+# common section\r
+\r
+CEDEFS    = -D_WINDOWS -D_WIN32_WCE=$(CEVersion) -DUNDER_CE=$(CEVersion) \\r
+            $(MCFLAGS) \r
+#CEDEFS    = $(CEDEFS) -DDEBUGGING_OPS\r
+\r
+CECFLAGS  = $(CEDEFS)\r
+\r
+!if "$(CFG)" == "DEBUG"\r
+CECFLAGS  = $(CECFLAGS) -Zi -Od\r
+!endif\r
+\r
+!if "$(CFG)" == "RELEASE"\r
+# -O2 and -Ot give internal compiler error in perl.c and lexer.\r
+# Also the dll cannot be loaded by perl.exe...\r
+CECFLAGS  = $(CECFLAGS)\r
+!endif\r
+\r
+RCDEFS    = /l 0x407 /r /d "UNICODE" /d UNDER_CE=$(CEVersion) \\r
+            /d _WIN32_WCE=$(CEVersion)\r
+\r
+PATH=$(CEPATH);$(PATH)\r
+\r
+INCLUDE=$(WCEROOT)\$(OSVERSION)\$(PLATFORM)\include\r
+LIB=$(WCEROOT)\$(OSVERSION)\$(PLATFORM)\lib\$(ARCH)\r
+\r
+######################################################################\r
+\r
+!message\r
+!message Compiling for $(MACHINE)\r
+!message LIB=$(LIB)\r
+!message INCLUDE=$(INCLUDE)\r
+!message PATH=$(CEPATH)\r
+!message\r
+\r
+######################################################################\r
+#\r
+# Additional compiler flags can be specified here.\r
+#\r
+\r
+BUILDOPT       = $(BUILDOPT) $(CECFLAGS)\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
+!IF "$(PERL_MALLOC)" == ""\r
+PERL_MALLOC    = undef\r
+!ENDIF\r
+\r
+!IF "$(USE_5005THREADS)" == ""\r
+USE_5005THREADS        = undef\r
+!ENDIF\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
+!IF "$(USE_MULTI)" == ""\r
+USE_MULTI      = undef\r
+!ENDIF\r
+\r
+!IF "$(USE_OBJECT)" == ""\r
+USE_OBJECT     = undef\r
+!ENDIF\r
+\r
+!IF "$(USE_ITHREADS)" == ""\r
+USE_ITHREADS   = undef\r
+!ENDIF\r
+\r
+!IF "$(USE_IMP_SYS)" == ""\r
+USE_IMP_SYS    = undef\r
+!ENDIF\r
+\r
+!IF "$(USE_PERLCRT)" == ""\r
+USE_PERLCRT    = undef\r
+!ENDIF\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       = $(BUILDOPT) -DPERL_IMPLICIT_CONTEXT\r
+!ENDIF\r
+\r
+!IF "$(USE_IMP_SYS)" != "undef"\r
+BUILDOPT       = $(BUILDOPT) -DPERL_IMPLICIT_SYS\r
+!ENDIF\r
+\r
+# new option - automatically defined in perl.h...\r
+#BUILDOPT        = $(BUILDOPT) -DUSE_ENVIRON_ARRAY\r
+\r
+PROCESSOR_ARCHITECTURE = $(TARGETCPU)\r
+ARCHNAME       = $(PLATFORM)-$(OSVERSION)-$(PROCESSOR_ARCHITECTURE)\r
+# unused yet\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
+LINK32         = link\r
+LIB32          = $(LINK32) -lib\r
+RSC            = rc\r
+\r
+INCLUDES       = -I.\include -I. -I..\r
+DEFINES                = -DWIN32 -D_CONSOLE -DNO_STRICT $(CRYPT_FLAG) $(CECFLAGS)\r
+LOCDEFS                = -DPERLDLL -DPERL_CORE\r
+CXX_FLAG       = -TP -GX\r
+\r
+PERLEXE_RES    = perl.res\r
+PERLDLL_RES    =\r
+\r
+!IF "$(USE_OBJECT)" == "define"\r
+OPTIMIZE       = $(OPTIMIZE) $(CXX_FLAG)\r
+BUILDOPT       = $(BUILDOPT) -DPERL_OBJECT\r
+!ENDIF\r
+\r
+!if "$(CFG)" == "RELEASE"\r
+CELIB           = celib.lib\r
+!endif\r
+\r
+!if "$(CFG)" == "DEBUG"\r
+CELIB           = celib.lib\r
+!endif\r
+\r
+CELIBS          = -nodefaultlib \\r
+                  winsock.lib $(CELIB) coredll.lib\r
+\r
+!if $(CEVersion) > 200\r
+CELIBS          = $(CELIBS) corelibc.lib \r
+!else\r
+CELIBS          = $(CELIBS) msvcrt.lib \r
+!endif\r
+\r
+LIBBASEFILES   = $(CRYPT_LIB) $(CELIBS)\r
+\r
+LIBFILES       = $(LIBBASEFILES) $(LIBC)\r
+\r
+CFLAGS         = -nologo -Gf -W3 $(INCLUDES) $(DEFINES) $(LOCDEFS) \\r
+               $(PCHFLAGS) $(OPTIMIZE)\r
+\r
+LINK_FLAGS     = -nologo -machine:$(PROCESSOR_ARCHITECTURE)\r
+\r
+!if "$(CFG)" == "DEBUG"\r
+LINK_FLAGS      = $(LINK_FLAGS) -debug:full -pdb:none \r
+!endif\r
+\r
+OBJOUT_FLAG    = -Fo\r
+EXEOUT_FLAG    = -Fe\r
+\r
+CFLAGS_O       = $(CFLAGS) $(BUILDOPT)\r
+\r
+o = .obj\r
+\r
+#\r
+# Rules\r
+# \r
+\r
+.SUFFIXES : .c $(o) .dll .lib .exe .rc .res\r
+\r
+.c$(o):\r
+       $(CC) -c -I$(<D) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $<\r
+\r
+.y.c:\r
+       $(NOOP)\r
+\r
+$(o).dll:\r
+       $(LINK32) -dll $(SUBSYS) $(LDLIBPATH) \\r
+            -implib:$(*B).lib -def:$(*B).def \\r
+           -out:$@ $(LINK_FLAGS) $(LIBFILES) $< $(LIBPERL)  \r
+\r
+.rc.res:\r
+       $(RSC) -i.. $<\r
+\r
+# This must be relative to ../lib/CORE, else the ext dll build fails...\r
+PERLIMPLIB_EXP = ..\..\wince\$(MACHINE)\perl$(PV).lib\r
+PERLIMPLIB     = $(PERLCEDIR)\$(MACHINE)\perl$(PV).lib\r
+PERLDLL                = $(MACHINE)\perl$(PV).dll\r
+\r
+DLLDIR          = $(MACHINE)\dll\r
+PERLEXE                = $(MACHINE)\perl.exe\r
+\r
+CONFIGPM       = ..\lib\Config.pm\r
+MINIMOD                = ..\lib\ExtUtils\Miniperl.pm\r
+\r
+MAKE           = nmake -nologo\r
+\r
+CFGSH_TMPL     = config.ce\r
+CFGH_TMPL      = config_H.ce\r
+\r
+#\r
+# filenames given to xsubpp must have forward slashes (since it puts\r
+# full pathnames in #line strings)\r
+XSUBPP         = $(NTPERL) -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
+               ..\mg.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_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  = $(EXTRACORE_SRC) perllib.c\r
+\r
+!IF "$(PERL_MALLOC)" == "define"\r
+EXTRACORE_SRC  = $(EXTRACORE_SRC) ..\malloc.c\r
+!ENDIF\r
+\r
+!IF "$(USE_OBJECT)" != "define"\r
+EXTRACORE_SRC  = $(EXTRACORE_SRC) ..\perlio.c\r
+!ENDIF\r
+\r
+WIN32_SRC      =               \\r
+               .\wince.c       \\r
+               .\wincesck.c    \\r
+               .\win32thread.c \r
+\r
+!IF "$(CRYPT_SRC)" != ""\r
+WIN32_SRC      = $(WIN32_SRC) .\$(CRYPT_SRC)\r
+!ENDIF\r
+\r
+DLL_SRC                = $(DYNALOADER).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
+!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\r
+\r
+STATIC_EXT     = DynaLoader\r
+NONXS_EXT      = Errno\r
+\r
+DYNALOADER     = $(EXTDIR)\DynaLoader\DynaLoader\r
+SOCKET         = $(EXTDIR)\Socket\Socket\r
+IO             = $(EXTDIR)\IO\IO\r
+DUMPER         = $(EXTDIR)\Data\Dumper\Dumper\r
+#\r
+FCNTL          = $(EXTDIR)\Fcntl\Fcntl\r
+OPCODE         = $(EXTDIR)\Opcode\Opcode\r
+SDBM_FILE      = $(EXTDIR)\SDBM_File\SDBM_File\r
+POSIX          = $(EXTDIR)\POSIX\POSIX\r
+ATTRS          = $(EXTDIR)\attrs\attrs\r
+THREAD         = $(EXTDIR)\Thread\Thread\r
+B              = $(EXTDIR)\B\B\r
+RE             = $(EXTDIR)\re\re\r
+ERRNO          = $(EXTDIR)\Errno\Errno\r
+PEEK           = $(EXTDIR)\Devel\Peek\Peek\r
+BYTELOADER     = $(EXTDIR)\ByteLoader\ByteLoader\r
+DPROF          = $(EXTDIR)\Devel\DProf\DProf\r
+GLOB           = $(EXTDIR)\File\Glob\Glob\r
+HOSTNAME       = $(EXTDIR)\Sys\Hostname\Hostname\r
+SOCKET_DLL     = $(AUTODIR)\Socket\Socket.dll\r
+FCNTL_DLL      = $(AUTODIR)\Fcntl\Fcntl.dll\r
+OPCODE_DLL     = $(AUTODIR)\Opcode\Opcode.dll\r
+SDBM_FILE_DLL  = $(AUTODIR)\SDBM_File\SDBM_File.dll\r
+IO_DLL         = $(AUTODIR)\IO\IO.dll\r
+POSIX_DLL      = $(AUTODIR)\POSIX\POSIX.dll\r
+ATTRS_DLL      = $(AUTODIR)\attrs\attrs.dll\r
+THREAD_DLL     = $(AUTODIR)\Thread\Thread.dll\r
+B_DLL          = $(AUTODIR)\B\B.dll\r
+DUMPER_DLL     = $(AUTODIR)\Data\Dumper\Dumper.dll\r
+PEEK_DLL       = $(AUTODIR)\Devel\Peek\Peek.dll\r
+RE_DLL         = $(AUTODIR)\re\re.dll\r
+BYTELOADER_DLL = $(AUTODIR)\ByteLoader\ByteLoader.dll\r
+DPROF_DLL      = $(AUTODIR)\Devel\DProf\DProf.dll\r
+GLOB_DLL       = $(AUTODIR)\File\Glob\Glob.dll\r
+HOSTNAME_DLL   = $(AUTODIR)\Sys\Hostname\Hostname.dll\r
+\r
+ERRNO_PM       = $(LIBDIR)\Errno.pm\r
+\r
+EXTENSION_C    =               \\r
+               $(SOCKET).c     \\r
+               $(FCNTL).c      \\r
+               $(OPCODE).c     \\r
+               $(SDBM_FILE).c  \\r
+               $(IO).c         \\r
+               $(POSIX).c      \\r
+               $(ATTRS).c      \\r
+               $(THREAD).c     \\r
+               $(RE).c         \\r
+               $(DUMPER).c     \\r
+               $(PEEK).c       \\r
+               $(B).c          \\r
+               $(BYTELOADER).c \\r
+               $(DPROF).c      \\r
+               $(GLOB).c       \\r
+               $(HOSTNAME).c\r
+\r
+EXTENSION_DLL  =               \\r
+               $(SOCKET_DLL)   \\r
+               $(FCNTL_DLL)    \\r
+               $(OPCODE_DLL)   \\r
+               $(SDBM_FILE_DLL)\\r
+               $(IO_DLL)       \\r
+               $(POSIX_DLL)    \\r
+               $(ATTRS_DLL)    \\r
+               $(DUMPER_DLL)   \\r
+               $(PEEK_DLL)     \\r
+               $(B_DLL)        \\r
+               $(RE_DLL)       \\r
+               $(THREAD_DLL)   \\r
+               $(BYTELOADER_DLL)       \\r
+               $(DPROF_DLL)    \\r
+               $(GLOB_DLL)     \\r
+               $(HOSTNAME_DLL)\r
+\r
+EXTENSION_PM   =               \\r
+               $(ERRNO_PM)\r
+\r
+POD2HTML       = $(PODDIR)\pod2html\r
+POD2MAN                = $(PODDIR)\pod2man\r
+POD2LATEX      = $(PODDIR)\pod2latex\r
+POD2TEXT       = $(PODDIR)\pod2text\r
+\r
+CFG_VARS = \\r
+ "INST_DRV=$(INST_DRV)" \\r
+ "INST_TOP=$(INST_TOP)" \\r
+ "INST_VER=$(INST_VER)" \\r
+ "INST_ARCH=$(INST_ARCH)" \\r
+ "archname=$(ARCHNAME)" \\r
+ "cc=$(CC)" \\r
+ "ccflags=$(OPTIMIZE) $(DEFINES) $(BUILDOPT)" \\r
+ "cf_by=Rainer Keuchel" \\r
+ "cf_email=coyxc@rainer-keuchel.de" \\r
+ "d_crypt=$(D_CRYPT)" \\r
+ "d_mymalloc=$(PERL_MALLOC)" \\r
+ "libs=$(LIBFILES)" \\r
+ "incpath=$(CCINCDIR)" \\r
+ "libperl=$(PERLIMPLIB_EXP)" \\r
+ "libpth=$(LIBPATH)" \\r
+ "libc=$(LIBC)" \\r
+ "make=nmake" \\r
+ "static_ext=$(STATIC_EXT)" \\r
+ "dynamic_ext=$(DYNAMIC_EXT)" \\r
+ "nonxs_ext=$(NONXS_EXT)" \\r
+ "use5005threads=$(USE_5005THREADS)" \\r
+ "useithreads=$(USE_ITHREADS)" \\r
+ "usethreads=$(USE_5005THREADS)" \\r
+ "usemultiplicity=$(USE_MULTI)" \\r
+ "LINK_FLAGS=$(LDLIBPATH) $(LINK_FLAGS) $(SUBSYS)" \\r
+ "optimize=$(OPTIMIZE)"\r
+\r
+#\r
+# Top targets\r
+#\r
+\r
+all: $(MINIMOD) $(CONFIGPM) $(PERLEXE)\r
+\r
+$(DYNALOADER)$(o) : $(DYNALOADER).c $(CORE_H) $(EXTDIR)\DynaLoader\dlutils.c\r
+\r
+$(CONFIGPM): config.h ..\config.sh ..\minimod.pl\r
+       cd .. && $(NTPERL) configpm\r
+       -mkdir $(COREDIR)\r
+       $(XCOPY) ..\*.h $(COREDIR)\*.*\r
+       $(XCOPY) *.h $(COREDIR)\*.*\r
+       $(XCOPY) ..\ext\re\re.pm $(LIBDIR)\*.*\r
+       $(RCOPY) include $(COREDIR)\*.*\r
+       $(NTPERL) -I..\lib config_h.PL "INST_VER=$(INST_VER)"\r
+\r
+..\config.sh config.h: config.ce config_sh.PL\r
+       $(NTPERL) -I..\lib config_sh.PL $(CFG_VARS) config.ce > ..\config.sh\r
+\r
+$(MINIMOD) : ..\minimod.pl\r
+       cd .. && $(NTPERL) minimod.pl > lib\ExtUtils\Miniperl.pm\r
+\r
+perlmain.c : runperl.c \r
+       $(COPY) runperl.c perlmain.c\r
+\r
+$(DYNALOADER).c: $(EXTDIR)\DynaLoader\dl_win32.xs $(CONFIGPM)\r
+       if not exist $(AUTODIR) mkdir $(AUTODIR)\r
+       cd $(EXTDIR)\$(*B)\r
+       $(NTPERL) -I..\..\lib $(*B)_pm.PL\r
+       $(NTPERL) -I..\..\lib XSLoader_pm.PL\r
+       cd ..\..\wince\r
+       $(XCOPY) $(EXTDIR)\$(*B)\$(*B).pm $(LIBDIR)\$(NULL)\r
+       $(XCOPY) $(EXTDIR)\$(*B)\XSLoader.pm $(LIBDIR)\$(NULL)\r
+       cd $(EXTDIR)\$(*B)\r
+       $(XSUBPP) dl_win32.xs > $(*B).c\r
+       cd ..\..\wince\r
+\r
+$(EXTDIR)\DynaLoader\dl_win32.xs: dl_win32.xs\r
+       $(COPY) dl_win32.xs $(EXTDIR)\DynaLoader\dl_win32.xs\r
+\r
+$(DUMPER_DLL): $(PERLEXE) $(DUMPER).xs\r
+       cd $(EXTDIR)\Data\$(*B)\r
+       $(NTPERL) -I..\..\..\lib Makefile.PL INSTALLDIRS=perl\r
+       $(MAKE)\r
+       cd ..\..\..\wince\r
+\r
+$(DPROF_DLL): $(PERLEXE) $(DPROF).xs\r
+       cd $(EXTDIR)\Devel\$(*B)\r
+       $(NTPERL) -I..\..\..\lib Makefile.PL INSTALLDIRS=perl\r
+       $(MAKE)\r
+       cd ..\..\..\wince\r
+\r
+$(GLOB_DLL): $(PERLEXE) $(GLOB).xs\r
+       cd $(EXTDIR)\File\$(*B)\r
+       $(NTPERL) -I..\..\..\lib Makefile.PL INSTALLDIRS=perl\r
+       $(MAKE)\r
+       cd ..\..\..\wince\r
+\r
+$(PEEK_DLL): $(PERLEXE) $(PEEK).xs\r
+       cd $(EXTDIR)\Devel\$(*B)\r
+       $(NTPERL) -I..\..\..\lib Makefile.PL INSTALLDIRS=perl\r
+       $(MAKE)\r
+       cd ..\..\..\wince\r
+\r
+$(RE_DLL): $(PERLEXE) $(RE).xs\r
+       cd $(EXTDIR)\$(*B)\r
+       $(NTPERL) -I..\..\lib Makefile.PL INSTALLDIRS=perl\r
+       $(MAKE)\r
+       cd ..\..\wince\r
+\r
+$(B_DLL): $(PERLEXE) $(B).xs\r
+       cd $(EXTDIR)\$(*B)\r
+       $(NTPERL) -I..\..\lib Makefile.PL INSTALLDIRS=perl\r
+       $(MAKE)\r
+       cd ..\..\wince\r
+\r
+$(THREAD_DLL): $(PERLEXE) $(THREAD).xs\r
+       cd $(EXTDIR)\$(*B)\r
+       $(NTPERL) -I..\..\lib Makefile.PL INSTALLDIRS=perl\r
+       $(MAKE)\r
+       cd ..\..\wince\r
+\r
+$(ATTRS_DLL): $(PERLEXE) $(ATTRS).xs\r
+       cd $(EXTDIR)\$(*B)\r
+       $(NTPERL) -I..\..\lib Makefile.PL INSTALLDIRS=perl\r
+       $(MAKE)\r
+       cd ..\..\wince\r
+\r
+$(POSIX_DLL): $(PERLEXE) $(POSIX).xs\r
+       cd $(EXTDIR)\$(*B)\r
+       $(NTPERL) -I..\..\lib Makefile.PL INSTALLDIRS=perl\r
+       $(MAKE)\r
+       cd ..\..\wince\r
+\r
+$(IO_DLL): $(PERLEXE) $(IO).xs\r
+       cd $(EXTDIR)\$(*B)\r
+       $(NTPERL) -I..\..\lib Makefile.PL INSTALLDIRS=perl\r
+       $(MAKE)\r
+       cd ..\..\wince\r
+\r
+$(SDBM_FILE_DLL) : $(PERLEXE) $(SDBM_FILE).xs\r
+       cd $(EXTDIR)\$(*B)\r
+       $(NTPERL) -I..\..\lib Makefile.PL INSTALLDIRS=perl\r
+       $(MAKE)\r
+       cd ..\..\wince\r
+\r
+$(FCNTL_DLL): $(PERLEXE) $(FCNTL).xs\r
+       cd $(EXTDIR)\$(*B)\r
+       $(NTPERL) -I..\..\lib Makefile.PL INSTALLDIRS=perl\r
+       $(MAKE)\r
+       cd ..\..\wince\r
+\r
+$(OPCODE_DLL): $(PERLEXE) $(OPCODE).xs\r
+       cd $(EXTDIR)\$(*B)\r
+       $(NTPERL) -I..\..\lib Makefile.PL INSTALLDIRS=perl\r
+       $(MAKE)\r
+       cd ..\..\wince\r
+\r
+$(SOCKET_DLL): $(PERLEXE) $(SOCKET).xs\r
+       cd $(EXTDIR)\$(*B)\r
+       $(NTPERL) -I..\..\lib Makefile.PL INSTALLDIRS=perl\r
+       $(MAKE)\r
+       cd ..\..\wince\r
+\r
+$(HOSTNAME_DLL): $(PERLEXE) $(HOSTNAME).xs\r
+       cd $(EXTDIR)\Sys\$(*B)\r
+       $(NTPERL) -I..\..\..\lib Makefile.PL INSTALLDIRS=perl\r
+       $(MAKE)\r
+       cd ..\..\..\wince\r
+\r
+$(BYTELOADER_DLL): $(PERLEXE) $(BYTELOADER).xs\r
+       cd $(EXTDIR)\$(*B)\r
+       $(NTPERL) -I..\..\lib Makefile.PL INSTALLDIRS=perl\r
+       $(MAKE)\r
+       cd ..\..\wince\r
+\r
+$(ERRNO_PM): $(PERLEXE) $(ERRNO)_pm.PL\r
+       cd $(EXTDIR)\$(*B)\r
+       $(NTPERL) -I..\..\lib Makefile.PL INSTALLDIRS=perl\r
+       $(MAKE)\r
+       cd ..\..\wince\r
+\r
+$(PERLEXE_RES): perl.rc\r
+       rc $(RCDEFS) perl.rc\r
+\r
+clean: \r
+       -rm -f $(MACHINE)/dll/*\r
+       -rm -f $(MACHINE)/*.obj\r
+       -rm -f $(MACHINE)/*.exe\r
+       -rm -f $(MACHINE)/*.dll\r
+       -rm -f $(MACHINE)/*.lib\r
+       -rm -f ../config.sh ../lib/Config.pm\r
+       -rm -f config.h perl.res\r
+\r
+!if "$(MACHINE)" == "wince-sh3-hpc"\r
+install_perlexe: $(PERLEXE)\r
+       cedel /speicherkarte2/bin/perl.exe\r
+       cecopy pc:../perl.exe ce:/speicherkarte2/bin\r
+\r
+install_perldll: $(PERLDLL)\r
+       cedel /speicherkarte2/bin/perl$(PV).dll\r
+       cecopy pc:../perl$(PV).dll ce:/speicherkarte2/bin\r
+\r
+install_perl: install_perlexe install_perldll\r
+\r
+test_perl:\r
+       cecopy pc:test.pl ce:/speicherkarte2/bin\r
+       ceexec /speicherkarte2/bin/perl.exe /speicherkarte2/bin/test.pl\r
+#      ceexec /speicherkarte2/bin/perl.exe -V\r
+\r
+install_lib: ../lib/Config.pm\r
+       cecopy  pc:../lib/Config.pm ce:/speicherkarte2/usr/lib/perl5\r
+!endif\r
+\r
+!if "$(MACHINE)" == "wince-arm-hpc"\r
+install_perlexe: $(PERLEXE)\r
+       -cedel /speicherkarte/bin/perl.exe\r
+       cecopy pc:$(MACHINE)/perl.exe ce:/speicherkarte/bin\r
+\r
+install_perldll: $(PERLDLL)\r
+       -cedel /speicherkarte/bin/perl$(PV).dll\r
+       cecopy pc:$(MACHINE)/perl$(PV).dll ce:/speicherkarte/bin\r
+\r
+install_perl: install_perlexe install_perldll\r
+\r
+test_perl:\r
+       cecopy pc:test.pl ce:/speicherkarte/bin\r
+       ceexec /speicherkarte/bin/perl.exe /speicherkarte/bin/test.pl\r
+#      ceexec /speicherkarte2/bin/perl.exe -V\r
+\r
+install_lib: ../lib/Config.pm\r
+       cecopy  pc:../lib/Config.pm ce:/speicherkarte/usr/lib/perl5\r
+!endif\r
+\r
+!if "$(MACHINE)" == "wince-mips-hpc"\r
+install_perlexe: $(PERLEXE)\r
+       cecopy pc:../perl.exe ce:/netzwerk/compaq/bin\r
+\r
+install_perldll: $(PERLDLL)\r
+       cecopy pc:../perl$(PV).dll ce:/netzwerk/compaq/bin\r
+\r
+install_perl: install_perlexe install_perldll\r
+\r
+test_perl:\r
+       cecopy pc:test.pl ce:/netzwerk/compaq/bin\r
+       ceexec /netzwerk/compaq/bin/perl.exe /netzwerk/compaq/bin/test.pl\r
+#      ceexec /netzwerk/compaq/bin/perl.exe -V\r
+\r
+install_lib: ../lib/Config.pm\r
+       cecopy  pc:../lib/Config.pm ce:/netzwerk/compaq/usr/lib/perl5\r
+!endif\r
+\r
+!if "$(MACHINE)" == "wince-x86em-pocket"\r
+install_lib:\r
+       ftpcopy ../lib/Config.pm ftp!ftp@localhost:/perl/lib\r
+       ftpcopy ../lib/Exporter.pm ftp!ftp@localhost:/perl/lib\r
+       ftpcopy ../lib/Exporter/Heavy.pm ftp!ftp@localhost:/perl/lib/Exporter\r
+\r
+install_perlexe: $(PERLEXE)\r
+       cecopy pc:../perl.exe ce:/netzwerk/compaq/bin\r
+\r
+install_perldll: $(PERLDLL)\r
+       cecopy pc:../perl$(PV).dll ce:/netzwerk/compaq/bin\r
+\r
+install_perl: install_perlexe install_perldll\r
+\r
+test_perl:\r
+       echo Not yet\r
+!endif\r
+\r
+\r
+XDLLOBJS = \\r
+$(DLLDIR)\av.obj \\r
+$(DLLDIR)\deb.obj \\r
+$(DLLDIR)\doio.obj \\r
+$(DLLDIR)\doop.obj \\r
+$(DLLDIR)\dump.obj \\r
+$(DLLDIR)\globals.obj \\r
+$(DLLDIR)\gv.obj \\r
+$(DLLDIR)\hv.obj \\r
+$(DLLDIR)\locale.obj \\r
+$(DLLDIR)\mg.obj \\r
+$(DLLDIR)\numeric.obj \\r
+$(DLLDIR)\op.obj \\r
+$(DLLDIR)\perl.obj \\r
+$(DLLDIR)\perlapi.obj \\r
+$(DLLDIR)\perlio.obj \\r
+$(DLLDIR)\perly.obj \\r
+$(DLLDIR)\pp.obj \\r
+$(DLLDIR)\pp_ctl.obj \\r
+$(DLLDIR)\pp_hot.obj \\r
+$(DLLDIR)\pp_pack.obj \\r
+$(DLLDIR)\pp_sys.obj \\r
+$(DLLDIR)\regcomp.obj \\r
+$(DLLDIR)\regexec.obj \\r
+$(DLLDIR)\run.obj \\r
+$(DLLDIR)\scope.obj \\r
+$(DLLDIR)\sv.obj \\r
+$(DLLDIR)\taint.obj \\r
+$(DLLDIR)\toke.obj \\r
+$(DLLDIR)\universal.obj \\r
+$(DLLDIR)\utf8.obj \\r
+$(DLLDIR)\util.obj \\r
+$(DLLDIR)\win32thread.obj \\r
+$(DLLDIR)\wince.obj \\r
+$(DLLDIR)\wincesck.obj \\r
+$(DLLDIR)\xsutils.obj \\r
+$(DLLDIR)\perllib.obj \\r
+$(DLLDIR)\DynaLoader.obj\r
+\r
+{$(SRCDIR)}.c{$(DLLDIR)}.obj:\r
+    $(CC) -c $(CFLAGS) -DPERL_EXTERNAL_GLOB -Fo$(DLLDIR)\ $<\r
+\r
+{$(SRCDIR)/wince}.c{$(DLLDIR)}.obj:\r
+    $(CC) -c $(CFLAGS) -DPERL_EXTERNAL_GLOB -Fo$(DLLDIR)\ $<\r
+\r
+$(PERLDLL) : $(DLLDIR) perldll.def $(XDLLOBJS) $(PERLDLL_RES)\r
+       $(LINK32) -dll -def:perldll.def -out:$@ \\r
+                  $(SUBSYS) $(LDLIBPATH) \\r
+                 $(LINK_FLAGS) $(LIBFILES) \\r
+                 $(XDLLOBJS) $(PERLDLL_RES)\r
+\r
+$(DLLDIR) :\r
+       if not exist "$(DLLDIR)" mkdir "$(DLLDIR)"\r
+\r
+$(DLLDIR)\DynaLoader.obj: $(EXTDIR)\DynaLoader\DynaLoader.c\r
+    $(CC) -c $(CFLAGS) -DPERL_EXTERNAL_GLOB -Fo$(DLLDIR)\ \\r
+          $(EXTDIR)\DynaLoader\DynaLoader.c\r
+\r
+XPERLEXEOBJS = \\r
+$(MACHINE)\perlmain.obj\r
+\r
+$(PERLEXE) : $(PERLDLL) $(CONFIGPM) $(XPERLEXEOBJS) $(PERLEXE_RES) $(STARTOBJS)\r
+       $(LINK32) $(SUBSYS) $(LDLIBPATH) \\r
+            -entry:wWinMainCRTStartup \\r
+            -out:$(MACHINE)\perl.exe \\r
+            -stack:0x100000 $(LINK_FLAGS) $(STARTOBJS) $(XPERLEXEOBJS) \\r
+            $(PERLIMPLIB) $(PERLEXE_RES) $(LIBFILES)\r
+\r
+$(MACHINE)\perlmain.obj : perlmain.c\r
+       $(CC) $(CFLAGS_O) -UPERLDLL -Fo$(MACHINE)\ -c perlmain.c\r
+\r
+iodll:     $(IO_DLL)\r
+socketdll: $(SOCKET_DLL)\r
+dumperdll: $(DUMPER_DLL)\r
+\r
+dlls: socketdll iodll dumperdll\r
+       -xmkdir -p $(MACHINE)/lib/auto/IO\r
+       cp ../lib/auto/IO/IO.bs $(MACHINE)/lib/auto/IO\r
+       cp ../lib/auto/IO/IO.dll $(MACHINE)/lib/auto/IO\r
+       -xmkdir $(MACHINE)/lib/auto/Socket\r
+       cp ../lib/auto/Socket/Socket.bs $(MACHINE)/lib/auto/Socket\r
+       cp ../lib/auto/Socket/Socket.dll $(MACHINE)/lib/auto/Socket\r
+       -xmkdir -p $(MACHINE)/lib/auto/Data/Dumper\r
+       cp ../lib/auto/Data/Dumper/Dumper.bs $(MACHINE)/lib/auto/Data/Dumper\r
+       cp ../lib/auto/Data/Dumper/Dumper.dll $(MACHINE)/lib/auto/Data/Dumper\r
+\r
+makedist: all dlls\r
+       $(COPY) $(CELIBPATH)\celib.dll $(MACHINE)\r
+       cp perl.txt $(MACHINE)\r
+       cp registry.bat $(MACHINE)\r
+       cp ../lib/Config.pm $(MACHINE)/lib\r
+       cd $(MACHINE)\r
+       rm -f perl-$(MACHINE).tar.gz\r
+       sh -c "tar cf perl-$(MACHINE).tar *.exe *.dll *.txt *.bat lib"\r
+       gzip -9 perl-$(MACHINE).tar\r
+       mv perl-$(MACHINE).tar.gz h:/freenet/new\r
+       cd ..\r
+\r
+!if "$(MACHINE)" == "wince-arm-hpc-wce300"\r
+install: all\r
+       cecopy pc:$(MACHINE)/perl.exe ce:/speicherkarte/bin\r
+       cecopy pc:$(MACHINE)/perl$(PV).dll ce:/speicherkarte/bin\r
+install_dlls: dlls\r
+       cecopy pc:../lib/auto/IO/io.dll ce:/speicherkarte/usr/lib/perl5/auto/IO/io.dll\r
+!endif\r
+\r
+!if "$(MACHINE)" == "wince-arm-hpc-wce211"\r
+install: all\r
+       cecopy pc:$(MACHINE)/perl.exe ce:/speicherkarte/bin\r
+       cecopy pc:$(MACHINE)/perl$(PV).dll ce:/speicherkarte/bin\r
+!endif\r
+\r
+!if "$(MACHINE)" == "wince-mips-hpc-wce211"\r
+install:\r
+       cecopy pc:$(MACHINE)/perl.exe ce:/bin\r
+       cecopy pc:$(MACHINE)/perl$(PV).dll ce:/bin\r
+!endif\r
+\r
+!if "$(MACHINE)" == "wince-mips-hpc-wce200"\r
+install:\r
+       cecopy pc:$(MACHINE)/perl.exe ce:/bin\r
+       cecopy pc:$(MACHINE)/perl$(PV).dll ce:/bin\r
+!endif\r
+\r
+!if "$(MACHINE)" == "wince-sh3-hpc-wce211"\r
+install:\r
+       cecopy pc:$(MACHINE)/perl.exe ce:/speicherkarte2/bin\r
+       cecopy pc:$(MACHINE)/perl$(PV).dll ce:/speicherkarte2/bin\r
+!endif\r
diff --git a/wince/README.compile b/wince/README.compile
new file mode 100644 (file)
index 0000000..0ab6b46
--- /dev/null
@@ -0,0 +1,16 @@
+Change config.ce. The makefile will automatically generate new\r
+config.h.\r
+\r
+To generate a new Config.pm, delete config.h or\r
+touch config.ce.\r
+\r
+The socket stuff has been rewritten so fds from ceio are used. This\r
+makes it easy to use them as perl file handles.\r
+\r
+Socket and IO dlls compiled. Seem to work.\r
+\r
+The sequence for building a new target is:\r
+\r
+make clean      # clean up\r
+make all       # build for target\r
+\r
diff --git a/wince/README.perlce b/wince/README.perlce
new file mode 100644 (file)
index 0000000..7496a4e
--- /dev/null
@@ -0,0 +1,168 @@
+NAME\r
+       PerlCE - perl for Windows CE\r
+\r
+DESCRIPTION\r
+       PerlCE is a simple port of perl to Windows CE. The program\r
+       is currently linked with a simple console window, so it also\r
+       works on non-hpc devices.\r
+\r
+       The simple stdio implementation creates the files stdin.txt,\r
+       stdout.txt and stderr.txt, so you might examine them if your\r
+       console has only a liminted number of cols.\r
+\r
+       When exitcode is non-zero, a message box appears, otherwise the\r
+       console closes, so you might have to catch an exit with\r
+       status 0 in your program to see any output.\r
+\r
+       stdout/stderr now go into the files /perl-stdout.txt and\r
+       /perl-stderr.txt.\r
+\r
+LIMITATIONS\r
+       No fork(), pipe(), popen() etc.\r
+\r
+ENVIRONMENT\r
+       All environment vars must be stored in HKLM\Environment as\r
+       strings. They are read at process startup.\r
+\r
+       PERL5LIB        - Usual perl lib path (semi-list).\r
+       PATH            - Semi-list for executables.\r
+       TMP             - Tempdir.\r
+       UNIXROOTPATH    - Root for accessing some special files,\r
+                         i.e. /dev/null, /etc/services.\r
+       ROWS/COLS       - Rows/cols for console.\r
+       HOME            - Home directory.\r
+       CONSOLEFONTSIZE - Size for console font.\r
+\r
+       You can set these with cereg.exe, a (remote) registry editor\r
+       or via the PerlIDE.\r
+\r
+REGISTRY\r
+       To start perl by clicking on a perl source file, you have\r
+       to make the according entries in HKCR (see wince-reg.bat).\r
+       cereg.exe (which must be executed on a desktop pc with\r
+       ActiveSync) is reported not to work on some devices.\r
+       You have to create the registry entries by hand using a \r
+       registry editor.\r
+\r
+FILES\r
+       $(UNIXROOTPATH)/dev/null - nul simulation, needed for perl -V\r
+       $(UNIXROOTPATH)/etc/services - services file\r
+\r
+       /perl-stdin.txt\r
+       /perl-stdout.txt\r
+       /perl-stderr.txt   \r
+\r
+PERLFILES \r
+       Only a limited set of perl files is provided in the\r
+       distribution archiv. You have to copy the original PERL5LIB\r
+       files from a perl for win32 installation and put the\r
+       distributed files into the right directories.\r
+\r
+       Do not copy any Win32/X86 dlls from your PC to the device...\r
+\r
+       The following files are a reasonable minimum if you want to do\r
+       some socket stuff:\r
+\r
+       ./auto\r
+       ./auto/DynaLoader\r
+       ./auto/DynaLoader/autosplit.ix\r
+       ./auto/DynaLoader/dl_expandspec.al\r
+       ./auto/DynaLoader/dl_findfile.al\r
+       ./auto/DynaLoader/dl_find_symbol_anywhere.al\r
+       ./auto/IO\r
+       ./auto/IO/IO.bs\r
+       ./auto/IO/IO.dll\r
+       ./auto/Socket\r
+       ./auto/Socket/Socket.bs\r
+       ./auto/Socket/Socket.dll\r
+       ./Carp\r
+       ./Carp/Heavy.pm\r
+       ./Carp.pm\r
+       ./Config.pm\r
+       ./DynaLoader.pm\r
+       ./Exporter\r
+       ./Exporter/Heavy.pm\r
+       ./Exporter.pm\r
+       ./IO\r
+       ./IO/File.pm\r
+       ./IO/Handle.pm\r
+       ./IO/Socket.pm\r
+       ./IO.pm\r
+       ./SelectSaver.pm\r
+       ./Socket.pm\r
+       ./strict.pm\r
+       ./Symbol.pm\r
+       ./warnings\r
+       ./warnings/register.pm\r
+       ./warnings.pm\r
+       ./XSLoader.pm\r
+\r
+XS\r
+       The following Win32-Methods are built-in:\r
+\r
+       newXS("Win32::GetCwd", w32_GetCwd, file);\r
+       newXS("Win32::SetCwd", w32_SetCwd, file);\r
+       newXS("Win32::GetTickCount", w32_GetTickCount, file);\r
+       newXS("Win32::GetOSVersion", w32_GetOSVersion, file);\r
+       newXS("Win32::IsWinNT", w32_IsWinNT, file);\r
+       newXS("Win32::IsWin95", w32_IsWin95, file);\r
+       newXS("Win32::IsWinCE", w32_IsWinCE, file);\r
+       newXS("Win32::CopyFile", w32_CopyFile, file);\r
+       newXS("Win32::Sleep", w32_Sleep, file);\r
+       newXS("Win32::MessageBox", w32_MessageBox, file);\r
+       newXS("Win32::GetPowerStatus", w32_GetPowerStatus, file);\r
+       newXS("Win32::GetOemInfo", w32_GetOemInfo, file);\r
+       newXS("Win32::ShellEx", w32_ShellEx, file);\r
+\r
+DLLS\r
+       In the newest version, my celib.dll is needed. Some XS dlls\r
+       might be needed. Currently, Socket and IO are provided.\r
+\r
+BUGS\r
+       Opening files for read-write is currently not supported if\r
+       they use stdio (normal perl file handles).\r
+\r
+       If you find bugs or if it does not work at all on your\r
+       device, send mail to the address below. Please report\r
+       the details of your device (processor, ceversion, \r
+       devicetype (hpc/palm/pocket)) and the date of the downloaded\r
+       files. \r
+\r
+       I currently have only a Compaq/MIPS HPC, a Jornada/SH3 HPC and\r
+       a Jornada/ARM HPC, so I can only test on these devices and\r
+       under the Emulators.\r
+\r
+INSTALLATION\r
+       This is only a suggestion...\r
+\r
+       * Unpack the tar archive on your desktop.\r
+       * Create directories /bin, /lib/perl5, /home, /dev and /etc,\r
+         possibly on a CF card with the path to the card \r
+         prepended (i.e. /memcard/bin etc).\r
+       * Copy perl.exe, perl56.dll and celib.dll from your desktop to\r
+         /bin. The dlls can also be copied to your /windows\r
+         directory, but if you use a CF card, you might want to store\r
+          them there.\r
+       * Copy the other DLLs to the corresponding auto directory.\r
+       * Copy any needed perl module-files to /lib/perl5.\r
+       * Create the registry entries.\r
+       * If you need tcp service-name resolution, create\r
+         the file "services" in /etc and put int the entries you need.\r
+\r
+       * Under WINCE200, all dlls must be copied to the windows\r
+          directory.\r
+\r
+MISC\r
+       If you think a certain XS module should be ported, send\r
+       me mail and explain why.\r
+\r
+       If you write useful scripts for perlce, please send me\r
+       a copy.\r
+\r
+TERMINAL\r
+       There are simple terminal control sequences now. See the\r
+       readme file that comes with the console program.\r
+\r
+AUTHOR\r
+       Rainer Keuchel <coyxc@rainer-keuchel.de> 2001\r
+\r
diff --git a/wince/bin/exetype.pl b/wince/bin/exetype.pl
new file mode 100644 (file)
index 0000000..27e3b94
--- /dev/null
@@ -0,0 +1,108 @@
+#!perl -w
+use strict;
+
+# All the IMAGE_* structures are defined in the WINNT.H file
+# of the Microsoft Platform SDK.
+
+my %subsys = (NATIVE    => 1,
+              WINDOWS   => 2,
+              CONSOLE   => 3,
+              POSIX     => 7,
+              WINDOWSCE => 9);
+
+unless (0 < @ARGV && @ARGV < 3) {
+    printf "Usage: $0 exefile [%s]\n", join '|', sort keys %subsys;
+    exit;
+}
+
+$ARGV[1] = uc $ARGV[1] if $ARGV[1];
+unless (@ARGV == 1 || defined $subsys{$ARGV[1]}) {
+    (my $subsys = join(', ', sort keys %subsys)) =~ s/, (\w+)$/ or $1/;
+    print "Invalid subsystem $ARGV[1], please use $subsys\n";
+    exit;
+}
+
+my ($record,$magic,$signature,$offset,$size);
+open EXE, "+< $ARGV[0]" or die "Cannot open $ARGV[0]: $!\n";
+binmode EXE;
+
+# read IMAGE_DOS_HEADER structure
+read EXE, $record, 64;
+($magic,$offset) = unpack "Sx58L", $record;
+
+die "$ARGV[0] is not an MSDOS executable file.\n"
+    unless $magic == 0x5a4d; # "MZ"
+
+# read signature, IMAGE_FILE_HEADER and first WORD of IMAGE_OPTIONAL_HEADER
+seek EXE, $offset, 0;
+read EXE, $record, 4+20+2;
+($signature,$size,$magic) = unpack "Lx16Sx2S", $record;
+
+die "PE header not found" unless $signature == 0x4550; # "PE\0\0"
+
+die "Optional header is neither in NT32 nor in NT64 format"
+    unless ($size == 224 && $magic == 0x10b) || # IMAGE_NT_OPTIONAL_HDR32_MAGIC
+           ($size == 240 && $magic == 0x20b);   # IMAGE_NT_OPTIONAL_HDR64_MAGIC
+
+# Offset 68 in the IMAGE_OPTIONAL_HEADER(32|64) is the 16 bit subsystem code
+seek EXE, $offset+4+20+68, 0;
+if (@ARGV == 1) {
+    read EXE, $record, 2;
+    my ($subsys) = unpack "S", $record;
+    $subsys = {reverse %subsys}->{$subsys} || "UNKNOWN($subsys)";
+    print "$ARGV[0] uses the $subsys subsystem.\n";
+}
+else {
+    print EXE pack "S", $subsys{$ARGV[1]};
+}
+close EXE;
+__END__
+
+=head1 NAME
+
+exetype - Change executable subsystem type between "Console" and "Windows"
+
+=head1 SYNOPSIS
+
+       C:\perl\bin> copy perl.exe guiperl.exe
+       C:\perl\bin> exetype guiperl.exe windows
+
+=head1 DESCRIPTION
+
+This program edits an executable file to indicate which subsystem the
+operating system must invoke for execution.
+
+You can specify any of the following subsystems:
+
+=over
+
+=item CONSOLE
+
+The CONSOLE subsystem handles a Win32 character-mode application that
+use a console supplied by the operating system.
+
+=item WINDOWS
+
+The WINDOWS subsystem handles an application that does not require a
+console and creates its own windows, if required.
+
+=item NATIVE
+
+The NATIVE subsystem handles a Windows NT device driver.
+
+=item WINDOWSCE
+
+The WINDOWSCE subsystem handles Windows CE consumer electronics
+applications.
+
+=item POSIX
+
+The POSIX subsystem handles a POSIX application in Windows NT.
+
+=back
+
+=head1 AUTHOR
+
+Jan Dubois <jand@activestate.com>
+
+=cut
diff --git a/wince/bin/perlglob.pl b/wince/bin/perlglob.pl
new file mode 100644 (file)
index 0000000..17843c8
--- /dev/null
@@ -0,0 +1,53 @@
+#!perl -w
+use File::DosGlob;
+$| = 1;
+while (@ARGV) {
+    my $arg = shift;
+    my @m = File::DosGlob::doglob(1,$arg);
+    print (@m ? join("\0", sort @m) : $arg);
+    print "\0" if @ARGV;
+}
+__END__
+
+=head1 NAME
+
+perlglob.bat - a more capable perlglob.exe replacement
+
+=head1 SYNOPSIS
+
+    @perlfiles = glob  "..\\pe?l/*.p?";
+    print <..\\pe?l/*.p?>;
+
+    # more efficient version
+    > perl -MFile::DosGlob=glob -e "print <../pe?l/*.p?>"
+
+=head1 DESCRIPTION
+
+This file is a portable replacement for perlglob.exe.  It
+is largely compatible with perlglob.exe (the Microsoft setargv.obj
+version) in all but one respect--it understands wildcards in
+directory components.
+
+It prints null-separated filenames to standard output.
+
+For details of the globbing features implemented, see
+L<File::DosGlob>.
+
+While one may replace perlglob.exe with this, usage by overriding
+CORE::glob with File::DosGlob::glob should be much more efficient,
+because it avoids launching a separate process, and is therefore
+strongly recommended.  See L<perlsub> for details of overriding
+builtins.
+
+=head1 AUTHOR
+
+Gurusamy Sarathy <gsar@activestate.com>
+
+=head1 SEE ALSO
+
+perl
+
+File::DosGlob
+
+=cut
+
diff --git a/wince/bin/pl2bat.pl b/wince/bin/pl2bat.pl
new file mode 100644 (file)
index 0000000..cdbac6f
--- /dev/null
@@ -0,0 +1,412 @@
+    eval 'exec perl -x -S "$0" ${1+"$@"}'
+       if 0;   # In case running under some shell
+
+require 5;
+use Getopt::Std;
+use Config;
+
+$0 =~ s|.*[/\\]||;
+
+my $usage = <<EOT;
+Usage:  $0 [-h]
+   or:  $0 [-w] [-u] [-a argstring] [-s stripsuffix] [files]
+   or:  $0 [-w] [-u] [-n ntargs] [-o otherargs] [-s stripsuffix] [files]
+        -n ntargs       arguments to invoke perl with in generated file
+                            when run from Windows NT.  Defaults to
+                            '-x -S "%0" %*'.
+        -o otherargs    arguments to invoke perl with in generated file
+                            other than when run from Windows NT.  Defaults
+                            to '-x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9'.
+        -a argstring    arguments to invoke perl with in generated file
+                            ignoring operating system (for compatibility
+                            with previous pl2bat versions).
+        -u              update files that may have already been processed
+                            by (some version of) pl2bat.
+        -w              include "-w" on the /^#!.*perl/ line (unless
+                            a /^#!.*perl/ line was already present).
+        -s stripsuffix  strip this suffix from file before appending ".bat"
+                            Not case-sensitive
+                            Can be a regex if it begins with `/'
+                            Defaults to "/\.plx?/"
+        -h              show this help
+EOT
+
+my %OPT = ();
+warn($usage), exit(0) if !getopts('whun:o:a:s:',\%OPT) or $OPT{'h'};
+$OPT{'n'} = '-x -S "%0" %*' unless exists $OPT{'n'};
+$OPT{'o'} = '-x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9' unless exists $OPT{'o'};
+$OPT{'s'} = '/\\.plx?/' unless exists $OPT{'s'};
+$OPT{'s'} = ($OPT{'s'} =~ m#^/([^/]*[^/\$]|)\$?/?$# ? $1 : "\Q$OPT{'s'}\E");
+
+my $head;
+if(  defined( $OPT{'a'} )  ) {
+    $head = <<EOT;
+       \@rem = '--*-Perl-*--
+       \@echo off
+       perl $OPT{'a'}
+       goto endofperl
+       \@rem ';
+EOT
+} else {
+    $head = <<EOT;
+       \@rem = '--*-Perl-*--
+       \@echo off
+       if "%OS%" == "Windows_NT" goto WinNT
+       perl $OPT{'o'}
+       goto endofperl
+       :WinNT
+       perl $OPT{'n'}
+       if NOT "%COMSPEC%" == "%SystemRoot%\\system32\\cmd.exe" goto endofperl
+       if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+       if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+       goto endofperl
+       \@rem ';
+EOT
+}
+$head =~ s/^\t//gm;
+my $headlines = 2 + ($head =~ tr/\n/\n/);
+my $tail = "\n__END__\n:endofperl\n";
+
+@ARGV = ('-') unless @ARGV;
+
+foreach ( @ARGV ) {
+    process($_);
+}
+
+sub process {
+ my( $file )= @_;
+    my $myhead = $head;
+    my $linedone = 0;
+    my $taildone = 0;
+    my $linenum = 0;
+    my $skiplines = 0;
+    my $line;
+    my $start= $Config{startperl};
+    $start= "#!perl"   unless  $start =~ /^#!.*perl/;
+    open( FILE, $file ) or die "$0: Can't open $file: $!";
+    @file = <FILE>;
+    foreach $line ( @file ) {
+       $linenum++;
+       if ( $line =~ /^:endofperl\b/ ) {
+           if(  ! exists $OPT{'u'}  ) {
+               warn "$0: $file has already been converted to a batch file!\n";
+               return;
+           }
+           $taildone++;
+       }
+       if ( not $linedone and $line =~ /^#!.*perl/ ) {
+           if(  exists $OPT{'u'}  ) {
+               $skiplines = $linenum - 1;
+               $line .= "#line ".(1+$headlines)."\n";
+           } else {
+               $line .= "#line ".($linenum+$headlines)."\n";
+           }
+           $linedone++;
+       }
+       if ( $line =~ /^#\s*line\b/ and $linenum == 2 + $skiplines ) {
+           $line = "";
+       }
+    }
+    close( FILE );
+    $file =~ s/$OPT{'s'}$//oi;
+    $file .= '.bat' unless $file =~ /\.bat$/i or $file =~ /^-$/;
+    open( FILE, ">$file" ) or die "Can't open $file: $!";
+    print FILE $myhead;
+    print FILE $start, ( $OPT{'w'} ? " -w" : "" ),
+              "\n#line ", ($headlines+1), "\n" unless $linedone;
+    print FILE @file[$skiplines..$#file];
+    print FILE $tail unless $taildone;
+    close( FILE );
+}
+__END__
+
+=head1 NAME
+
+pl2bat - wrap perl code into a batch file
+
+=head1 SYNOPSIS
+
+B<pl2bat> B<-h>
+
+B<pl2bat> [B<-w>] S<[B<-a> I<argstring>]> S<[B<-s> I<stripsuffix>]> [files]
+
+B<pl2bat> [B<-w>] S<[B<-n> I<ntargs>]> S<[B<-o> I<otherargs>]> S<[B<-s> I<stripsuffix>]> [files]
+
+=head1 DESCRIPTION
+
+This utility converts a perl script into a batch file that can be
+executed on DOS-like operating systems.  This is intended to allow
+you to use a Perl script like regular programs and batch files where
+you just enter the name of the script [probably minus the extension]
+plus any command-line arguments and the script is found in your B<PATH>
+and run.
+
+=head2 ADVANTAGES
+
+There are several alternatives to this method of running a Perl script. 
+They each have disadvantages that help you understand the motivation
+for using B<pl2bat>.
+
+=over
+
+=item 1
+
+    C:> perl x:/path/to/script.pl [args]
+
+=item 2
+
+    C:> perl -S script.pl [args]
+
+=item 3
+
+    C:> perl -S script [args]
+
+=item 4
+
+    C:> ftype Perl=perl.exe "%1" %*
+    C:> assoc .pl=Perl
+    then
+    C:> script.pl [args]
+
+=item 5
+
+    C:> ftype Perl=perl.exe "%1" %*
+    C:> assoc .pl=Perl
+    C:> set PathExt=%PathExt%;.PL
+    then
+    C:> script [args]
+
+=back
+
+B<1> and B<2> are the most basic invocation methods that should work on
+any system [DOS-like or not].  They require extra typing and require
+that the script user know that the script is written in Perl.  This
+is a pain when you have lots of scripts, some written in Perl and some
+not.  It can be quite difficult to keep track of which scripts need to
+be run through Perl and which do not.  Even worse, scripts often get
+rewritten from simple batch files into more powerful Perl scripts in
+which case these methods would require all existing users of the scripts
+be updated.
+
+B<3> works on modern Win32 versions of Perl.  It allows the user to
+omit the ".pl" or ".bat" file extension, which is a minor improvement.
+
+B<4> and B<5> work on some Win32 operating systems with some command
+shells.  One major disadvantage with both is that you can't use them
+in pipelines nor with file redirection.  For example, none of the
+following will work properly if you used method B<4> or B<5>:
+
+    C:> script.pl <infile
+    C:> script.pl >outfile
+    C:> echo y | script.pl
+    C:> script.pl | more
+
+This is due to a Win32 bug which Perl has no control over.  This bug
+is the major motivation for B<pl2bat> [which was originally written
+for DOS] being used on Win32 systems.
+
+Note also that B<5> works on a smaller range of combinations of Win32
+systems and command shells while B<4> requires that the user know
+that the script is a Perl script [because the ".pl" extension must
+be entered].  This makes it hard to standardize on either of these
+methods.
+
+=head2 DISADVANTAGES
+
+There are several potential traps you should be aware of when you
+use B<pl2bat>.
+
+The generated batch file is initially processed as a batch file each
+time it is run.  This means that, to use it from within another batch
+file you should preceed it with C<call> or else the calling batch
+file will not run any commands after the script:
+
+    call script [args]
+
+Except under Windows NT, if you specify more than 9 arguments to
+the generated batch file then the 10th and subsequent arguments
+are silently ignored.
+
+Except when using F<CMD.EXE> under Windows NT, if F<perl.exe> is not
+in your B<PATH>, then trying to run the script will give you a generic
+"Command not found"-type of error message that will probably make you
+think that the script itself is not in your B<PATH>.  When using
+F<CMD.EXE> under Windows NT, the generic error message is followed by
+"You do not have Perl in your PATH", to make this clearer.
+
+On most DOS-like operating systems, the only way to exit a batch file
+is to "fall off the end" of the file.  B<pl2bat> implements this by
+doing C<goto :endofperl> and adding C<__END__> and C<:endofperl> as
+the last two lines of the generated batch file.  This means:
+
+=over
+
+=item No line of your script should start with a colon.
+
+In particular, for this version of B<pl2bat>, C<:endofperl>,
+C<:WinNT>, and C<:script_failed_so_exit_with_non_zero_val> should not
+be used.
+
+=item Care must be taken when using C<__END__> and the C<DATA> file handle.
+
+One approach is:
+
+    .  #!perl
+    .  while( <DATA> ) {
+    .    last   if  /^__END__$/;
+    .    [...]
+    .  }
+    .  __END__
+    .  lines of data
+    .  to be processed
+    .  __END__
+    .  :endofperl
+
+The dots in the first column are only there to prevent F<cmd.exe> to interpret
+the C<:endofperl> line in this documentation.  Otherwise F<pl2bat.bat> itself
+wouldn't work.  See the previous item. :-)
+
+=item The batch file always "succeeds"
+
+The following commands illustrate the problem:
+
+    C:> echo exit(99); >fail.pl
+    C:> pl2bat fail.pl
+    C:> perl -e "print system('perl fail.pl')"
+    99
+    C:> perl -e "print system('fail.bat')"
+    0
+
+So F<fail.bat> always reports that it completed successfully.  Actually,
+under Windows NT, we have:
+
+    C:> perl -e "print system('fail.bat')"
+    1
+
+So, for Windows NT, F<fail.bat> fails when the Perl script fails, but
+the return code is always C<1>, not the return code from the Perl script.
+
+=back
+
+=head2 FUNCTION
+
+By default, the ".pl" suffix will be stripped before adding a ".bat" suffix
+to the supplied file names.  This can be controlled with the C<-s> option.
+
+The default behavior is to have the batch file compare the C<OS>
+environment variable against C<"Windows_NT">.  If they match, it
+uses the C<%*> construct to refer to all the command line arguments
+that were given to it, so you'll need to make sure that works on your
+variant of the command shell.  It is known to work in the F<CMD.EXE> shell
+under Windows NT.  4DOS/NT users will want to put a C<ParameterChar = *>
+line in their initialization file, or execute C<setdos /p*> in
+the shell startup file.
+
+On Windows95 and other platforms a nine-argument limit is imposed
+on command-line arguments given to the generated batch file, since
+they may not support C<%*> in batch files.
+
+These can be overridden using the C<-n> and C<-o> options or the
+deprecated C<-a> option.
+
+=head1 OPTIONS
+
+=over 8
+
+=item B<-n> I<ntargs>
+
+Arguments to invoke perl with in generated batch file when run from
+Windows NT (or Windows 98, probably).  Defaults to S<'-x -S "%0" %*'>.
+
+=item B<-o> I<otherargs>
+
+Arguments to invoke perl with in generated batch file except when
+run from Windows NT (ie. when run from DOS, Windows 3.1, or Windows 95).
+Defaults to S<'-x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9'>.
+
+=item B<-a> I<argstring>
+
+Arguments to invoke perl with in generated batch file.  Specifying
+B<-a> prevents the batch file from checking the C<OS> environment
+variable to determine which operating system it is being run from.
+
+=item B<-s> I<stripsuffix>
+
+Strip a suffix string from file name before appending a ".bat"
+suffix.  The suffix is not case-sensitive.  It can be a regex if
+it begins with `/' (the trailing '/' is optional and a trailing
+C<$> is always assumed).  Defaults to C</.plx?/>.
+
+=item B<-w>
+
+If no line matching C</^#!.*perl/> is found in the script, then such
+a line is inserted just after the new preamble.  The exact line
+depends on C<$Config{startperl}> [see L<Config>].  With the B<-w>
+option, C<" -w"> is added after the value of C<$Config{startperl}>.
+If a line matching C</^#!.*perl/> already exists in the script,
+then it is not changed and the B<-w> option is ignored.
+
+=item B<-u>
+
+If the script appears to have already been processed by B<pl2bat>,
+then the script is skipped and not processed unless B<-u> was
+specified.  If B<-u> is specified, the existing preamble is replaced.
+
+=item B<-h>
+
+Show command line usage.
+
+=back
+
+=head1 EXAMPLES
+
+       C:\> pl2bat foo.pl bar.PM 
+       [..creates foo.bat, bar.PM.bat..]
+       
+       C:\> pl2bat -s "/\.pl|\.pm/" foo.pl bar.PM
+       [..creates foo.bat, bar.bat..]
+       
+       C:\> pl2bat < somefile > another.bat
+       
+       C:\> pl2bat > another.bat
+       print scalar reverse "rekcah lrep rehtona tsuj\n";
+       ^Z
+       [..another.bat is now a certified japh application..]
+       
+       C:\> ren *.bat *.pl
+       C:\> pl2bat -u *.pl
+       [..updates the wrapping of some previously wrapped scripts..]
+       
+       C:\> pl2bat -u -s .bat *.bat
+       [..same as previous example except more dangerous..]
+
+=head1 BUGS
+
+C<$0> will contain the full name, including the ".bat" suffix
+when the generated batch file runs.  If you don't like this,
+see runperl.bat for an alternative way to invoke perl scripts.
+
+Default behavior is to invoke Perl with the B<-S> flag, so Perl will
+search the B<PATH> to find the script.   This may have undesirable
+effects.
+
+On really old versions of Win32 Perl, you can't run the script
+via
+
+    C:> script.bat [args]
+
+and must use
+
+    C:> script [args]
+
+A loop should be used to build up the argument list when not on
+Windows NT so more than 9 arguments can be processed.
+
+See also L</Disadvantages>.
+
+=head1 SEE ALSO
+
+perl, perlwin32, runperl.bat
+
+=cut
+
diff --git a/wince/bin/runperl.pl b/wince/bin/runperl.pl
new file mode 100644 (file)
index 0000000..95b33f9
--- /dev/null
@@ -0,0 +1,67 @@
+#!perl -w
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+       $_ = "." if $_ eq "";
+       $0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+       C:\> copy runperl.bat foo.bat
+       C:\> foo
+       [..runs the perl script `foo'..]
+       
+       C:\> foo.bat
+       [..runs the perl script `foo'..]
+       
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
diff --git a/wince/bin/search.pl b/wince/bin/search.pl
new file mode 100644 (file)
index 0000000..ad74001
--- /dev/null
@@ -0,0 +1,1866 @@
+#!/usr/local/bin/perl -w
+'di';
+'ig00';
+##############################################################################
+##
+## search
+##
+## Jeffrey Friedl (jfriedl@omron.co.jp), Dec 1994.
+## Copyright 19.... ah hell, just take it.
+##
+## BLURB:
+## A combo of find and grep -- more or less do a 'grep' on a whole
+## directory tree. Fast, with lots of options. Much more powerful than
+## the simple "find ... | xargs grep ....". Has a full man page.
+## Powerfully customizable.
+##
+## This file is big, but mostly comments and man page.
+##
+## See man page for usage info.
+## Return value: 2=error, 1=nothing found, 0=something found.
+##
+
+$version = "950918.5";
+##
+## "950918.5";
+##     Changed all 'sysread' to 'read' because Linux perl's don't seem
+##     to like sysread()
+##
+## "941227.4";
+##     Added -n, -u
+##
+## "941222.3"
+##      Added -nice (due to Lionel Cons <Lionel.Cons@cern.ch>)
+##     Removed any leading "./" from name.
+##      Added default flags for ~/.search, including TTY, -nice, -list, etc.
+##     Program name now has path removed when printed in diagnostics.
+##     Added simple tilde-expansion to -dir arg.
+##     Added -dskip, etc. Fixed -iregex bug.
+##     Changed -dir to be additive, adding -ddir.
+##     Now screen out devices, pipes, and sockets.
+##     More tidying and lots of expanding of the man page
+##
+##
+## "941217.2";
+##     initial release.
+
+$stripped=0;
+
+&init;
+$rc_file = join('/', $ENV{'HOME'}, ".search");
+
+&check_args;
+
+## Make sure we've got a regex.
+## Don't need one if -find or -showrc was specified.
+$!=2, die "expecting regex arguments.\n"
+       if $FIND_ONLY == 0 && $showrc == 0 && @ARGV == 0;
+
+&prepare_to_search($rc_file);
+
+&import_program if !defined &dodir; ## BIG key to speed.
+
+## do search while there are directories to be done.
+&dodir(shift(@todo)) while @todo;
+
+&clear_message if $VERBOSE && $STDERR_IS_TTY;
+exit($retval);
+###############################################################################
+
+sub init
+{
+  ## initialize variables that might be reset by command-line args
+  $DOREP=0;            ## set true by -dorep (redo multi-hardlink files)
+  $DOREP=1 if $^O eq 'MSWin32';
+  $DO_SORT=0;           ## set by -sort (sort files in a dir before checking)
+  $FIND_ONLY=0;         ## set by -find (don't search files)
+  $LIST_ONLY=0;                ## set true by -l (list filenames only)
+  $NEWER=0;             ## set by -newer, "-mtime -###"
+  $NICE=0;              ## set by -nice (print human-readable output)
+  $NOLINKS=0;          ## set true by -nolinks (don't follow symlinks)
+  $OLDER=0;             ## set by -older, "-mtime  ###"
+  $PREPEND_FILENAME=1;  ## set false by -h (don't prefix lines with filename)
+  $REPORT_LINENUM=0;    ## set true by -n (show line numbers)
+  $VERBOSE=0;          ## set to a value by -v, -vv, etc. (verbose messages)
+  $WHY=0;              ## set true by -why, -vvv+ (report why skipped)
+  $XDEV=0;             ## set true by -xdev (stay on one filesystem)
+  $all=0;              ## set true by -all (don't skip many kinds of files)
+  $iflag = '';         ## set to 'i' by -i (ignore case);
+  $norc=0;              ## set by -norc (don't load rc file)
+  $showrc=0;            ## set by -showrc (show what happens with rc file)
+  $underlineOK=0;       ## set true by -u (watch for underline stuff)
+  $words=0;             ## set true by -w (match whole-words only)
+  $DELAY=0;            ## inter-file delay (seconds)
+  $retval=1;            ## will set to 0 if we find anything.
+
+  ## various elements of stat() that we might access
+  $STAT_DEV   = 1;
+  $STAT_INODE = 2;
+  $STAT_MTIME = 9;
+
+  $VV_PRINT_COUNT = 50;  ## with -vv, print every VV_PRINT_COUNT files, or...
+  $VV_SIZE = 1024*1024;  ## ...every VV_SIZE bytes searched
+  $vv_print = $vv_size = 0; ## running totals.
+
+  ## set default options, in case the rc file wants them
+  $opt{'TTY'}= 1 if -t STDOUT;
+  
+  ## want to know this for debugging message stuff
+  $STDERR_IS_TTY = -t STDERR ? 1 : 0;
+  $STDERR_SCREWS_STDOUT = ($STDERR_IS_TTY && -t STDOUT) ? 1 : 0;
+
+  $0 =~ s,.*/,,;  ## clean up $0 for any diagnostics we'll be printing.
+}
+
+##
+## Check arguments.
+##
+sub check_args
+{
+  while (@ARGV && $ARGV[0] =~ m/^-/)
+  {
+      $arg = shift(@ARGV);
+
+      if ($arg eq '-version' || ($VERBOSE && $arg eq '-help')) {
+         print qq/Jeffrey's file search, version "$version".\n/;
+         exit(0) unless $arg eq '-help';
+      }
+      if ($arg eq '-help') {
+         print <<INLINE_LITERAL_TEXT;
+usage: $0 [options] [-e] [PerlRegex ....]
+OPTIONS TELLING *WHERE* TO SEARCH:
+  -dir DIR       start search at the named directory (default is current dir).
+  -xdev          stay on starting file system.
+  -sort          sort the files in each directory before processing.
+  -nolinks       don't follow symbolic links.
+OPTIONS TELLING WHICH FILES TO EVEN CONSIDER:
+  -mtime #       consider files modified > # days ago (-# for < # days old)
+  -newer FILE    consider files modified more recently than FILE (also -older)
+  -name GLOB     consider files whose name matches pattern (also -regex).
+  -skip GLOB     opposite of -name: identifies files to not consider.
+  -path GLOB     like -name, but for files whose whole path is described.
+  -dpath/-dregex/-dskip versions for selecting or pruning directories.
+  -all           don't skip any files marked to be skipped by the startup file.
+  -x<SPECIAL>    (see manual, and/or try -showrc).
+  -why           report why a file isn't checked (also implied by -vvvv).
+OPTIONS TELLING WHAT TO DO WITH FILES THAT WILL BE CONSIDERED:
+  -f  | -find    just list files (PerlRegex ignored). Default is to grep them.
+  -ff | -ffind   Does a faster -find (implies -find -all -dorep)
+OPTIONS CONTROLLING HOW THE SEARCH IS DONE (AND WHAT IS PRINTED):
+  -l | -list     only list files with matches, not the lines themselves.
+  -nice | -nnice print more "human readable" output.
+  -n             prefix each output line with its line number in the file.
+  -h             don't prefix output lines with file name.
+  -u             also look "inside" manpage-style underlined text
+  -i             do case-insensitive searching.
+  -w             match words only (as defined by perl's \\b).
+OTHER OPTIONS:
+  -v, -vv, -vvv  various levels of message verbosity.
+  -e             end of options (in case a regex looks like an option).
+  -showrc        show what the rc file sets, then exit.
+  -norc          don't load the rc file.
+  -dorep         check files with multiple hard links multiple times.
+INLINE_LITERAL_TEXT
+       print "Use -v -help for more verbose help.\n" unless $VERBOSE;
+       print "This script file is also a man page.\n" unless $stripped;
+       print <<INLINE_LITERAL_TEXT if $VERBOSE;
+
+If -f (or -find) given, PerlRegex is optional and ignored.
+Otherwise, will search for files with lines matching any of the given regexes.
+
+Combining things like -name and -mtime implies boolean AND.
+However, duplicating things (such as -name '*.c' -name '*.txt') implies OR.
+
+-mtime may be given floating point (i.e. 1.5 is a day and a half).
+-iskip/-idskip/-ipath/... etc are case-insensitive versions.
+
+If any letter in -newer/-older is upper case, "or equal" is
+inserted into the test.
+
+You can always find the latest version on the World Wide Web in
+   http://www.wg.omron.co.jp/~jfriedl/perl/
+INLINE_LITERAL_TEXT
+         exit(0);
+      }
+      $DOREP=1,             next if $arg eq '-dorep';   ## do repeats
+      $DO_SORT=1,           next if $arg eq '-sort';    ## sort files
+      $NOLINKS=1,           next if $arg eq '-nolinks'; ## no sym. links
+      $PREPEND_FILENAME=0,  next if $arg eq '-h';       ## no filename prefix
+      $REPORT_LINENUM=1,    next if $arg eq '-n';       ## show line numbers
+      $WHY=1,               next if $arg eq '-why';     ## tell why skipped
+      $XDEV=1,              next if $arg eq '-xdev';    ## don't leave F.S.
+      $all=1,$opt{'-all'}=1,next if $arg eq '-all';     ## don't skip *.Z, etc
+      $iflag='i',           next if $arg eq '-i';       ## ignore case
+      $norc=1,              next if $arg eq '-norc';    ## don't load rc file
+      $showrc=1,            next if $arg eq '-showrc';  ## show rc file
+      $underlineOK=1,       next if $arg eq '-u';       ## look throuh underln.
+      $words=1,             next if $arg eq '-w';       ## match "words" only
+      &strip                     if $arg eq '-strip';   ## dump this program
+      last                       if $arg eq '-e';
+      $DELAY=$1,            next if $arg =~ m/-delay(\d+)/;
+
+      $FIND_ONLY=1,         next if $arg =~/^-f(ind)?$/;## do "find" only
+
+      $FIND_ONLY=1, $DOREP=1, $all=1,
+                            next if $arg =~/^-ff(ind)?$/;## fast -find
+      $LIST_ONLY=1,$opt{'-list'}=1,
+                           next if $arg =~/^-l(ist)?$/;## only list files
+
+      if ($arg =~ m/^-(v+)$/) { ## verbosity
+       $VERBOSE =length($1);
+       foreach $len (1..$VERBOSE) { $opt{'-'.('v' x $len)}=1 }
+       next;
+      }
+      if ($arg =~ m/^-(n+)ice$/) { ## "nice" output
+        $NICE =length($1);
+       foreach $len (1..$NICE) { $opt{'-'.('n' x $len).'ice'}=1 }
+       next;
+      }
+
+      if ($arg =~ m/^-(i?)(d?)skip$/) {
+         local($i) = $1 eq 'i';
+         local($d) = $2 eq 'd';
+         $! = 2, die qq/$0: expecting glob arg to -$arg\n/ unless @ARGV;
+         foreach (split(/\s+/, shift @ARGV)) {
+             if ($d) {
+                 $idskip{$_}=1 if $i;
+                  $dskip{$_}=1;
+             } else {
+                 $iskip{$_}=1 if $i;
+                  $skip{$_}=1;
+             }
+         }
+         next;
+      }
+
+
+      if ($arg =~ m/^-(i?)(d?)(regex|path|name)$/) {
+         local($i) = $1 eq 'i';
+         $! = 2, die qq/$0: expecting arg to -$arg\n/ unless @ARGV;
+         foreach (split(/\s+/, shift @ARGV)) {
+             $iname{join(',', $arg, $_)}=1 if $i;
+              $name{join(',', $arg, $_)}=1;
+         }
+         next;
+      }
+
+      if ($arg =~ m/^-d?dir$/) {
+         $opt{'-dir'}=1;
+         $! = 2, die qq/$0: expecting filename arg to -$arg\n/ unless @ARGV;
+         $start = shift(@ARGV);
+         $start =~ s#^~(/+|$)#$ENV{'HOME'}$1# if defined $ENV{'HOME'};
+         $! = 2, die qq/$0: can't find ${arg}'s "$start"\n/ unless -e $start;
+         $! = 2, die qq/$0: ${arg}'s "$start" not a directory.\n/ unless -d _;
+         undef(@todo), $opt{'-ddir'}=1 if $arg eq '-ddir';
+         push(@todo, $start);
+         next;
+      }
+
+      if ($arg =~ m/^-(new|old)er$/i) {
+         $! = 2, die "$0: expecting filename arg to -$arg\n" unless @ARGV;
+         local($file, $time) = shift(@ARGV);
+         $! = 2, die qq/$0: can't stat -${arg}'s "$file"./
+                 unless $time = (stat($file))[$STAT_MTIME];
+         local($upper) = $arg =~ tr/A-Z//;
+         if ($arg =~ m/new/i) {
+            $time++ unless $upper;
+            $NEWER = $time if $NEWER < $time;
+         } else {
+            $time-- unless $upper;
+            $OLDER = $time if $OLDER == 0 || $OLDER > $time;
+         }
+         next;
+      }
+
+      if ($arg =~ m/-mtime/) {
+         $! = 2, die "$0: expecting numerical arg to -$arg\n" unless @ARGV;
+         local($days) = shift(@ARGV);
+         $! = 2, die qq/$0: inappropriate arg ($days) to $arg\n/ if $days==0;
+         $days *= 3600 * 24;
+         if ($days < 0) {
+             local($time) = $^T + $days;
+             $NEWER = $time if $NEWER < $time;
+         } else {
+             local($time) = $^T - $days;
+             $OLDER = $time if $OLDER == 0 || $OLDER > $time;
+         }
+         next;
+      }
+
+      ## special user options
+      if ($arg =~ m/^-x(.+)/) {
+         foreach (split(/[\s,]+/, $1)) {  $user_opt{$_} = $opt{$_}= 1;  }
+         next;
+      }
+
+      $! = 2, die "$0: unknown arg [$arg]\n";
+  }
+}
+
+##
+## Given a filename glob, return a regex.
+## If the glob has no globbing chars (no * ? or [..]), then
+## prepend an effective '*' to it.
+##
+sub glob_to_regex
+{
+    local($glob) = @_;
+    local(@parts) = $glob =~ m/\\.|[*?]|\[]?[^]]*]|[^[\\*?]+/g;
+    local($trueglob)=0;
+    foreach (@parts) {
+       if ($_ eq '*' || $_ eq '?') {
+           $_ = ".$_";
+           $trueglob=1;  ## * and ? are a real glob
+       } elsif (substr($_, 0, 1) eq '[') {
+           $trueglob=1;  ## [..] is a real glob
+       } else {
+           s/^\\//;     ## remove any leading backslash;
+           s/\W/\\$&/g; ## now quote anything dangerous;
+       }
+    }
+    unshift(@parts, '.*') unless $trueglob;
+    join('', '^', @parts, '$');
+}
+
+sub prepare_to_search
+{
+  local($rc_file) = @_;
+
+  $HEADER_BYTES=0;          ## Might be set nonzero in &read_rc;
+  $last_message_length = 0; ## For &message and &clear_message.
+
+  &read_rc($rc_file, $showrc) unless $norc;
+  exit(0) if $showrc;
+
+  $NEXT_DIR_ENTRY = $DO_SORT ? 'shift @files' : 'readdir(DIR)';
+  $WHY = 1 if $VERBOSE > 3; ## Arg -vvvv or above implies  -why.
+  @todo = ('.') if @todo == 0; ## Where we'll start looking
+
+  ## see if any user options were specified that weren't accounted for
+  foreach $opt (keys %user_opt) {
+      next if defined $seen_opt{$opt};
+      warn "warning: -x$opt never considered.\n";
+  }
+
+  die "$0: multiple time constraints exclude all possible files.\n"
+      if ($NEWER && $OLDER) && ($NEWER > $OLDER);
+
+  ##
+  ## Process any -skip/-iskip args that had been given
+  ##
+  local(@skip_test);
+  foreach $glob (keys %skip) {
+      $i = defined($iskip{$glob}) ? 'i': '';
+      push(@skip_test, '$name =~ m/'. &glob_to_regex($glob). "/$i");
+  }
+  if (@skip_test) {
+      $SKIP_TEST = join('||',@skip_test);
+      $DO_SKIP_TEST = 1;
+  } else {
+      $DO_SKIP_TEST = $SKIP_TEST = 0;
+  }
+
+  ##
+  ## Process any -dskip/-idskip args that had been given
+  ##
+  local(@dskip_test);
+  foreach $glob (keys %dskip) {
+      $i = defined($idskip{$glob}) ? 'i': '';
+      push(@dskip_test, '$name =~ m/'. &glob_to_regex($glob). "/$i");
+  }
+  if (@dskip_test) {
+      $DSKIP_TEST = join('||',@dskip_test);
+      $DO_DSKIP_TEST = 1;
+  } else {
+      $DO_DSKIP_TEST = $DSKIP_TEST = 0;
+  }
+
+
+  ##
+  ## Process any -name, -path, -regex, etc. args that had been given.
+  ##
+  undef @name_test;
+  undef @dname_test;
+  foreach $key (keys %name) {
+      local($type, $pat) = split(/,/, $key, 2);
+      local($i) = defined($iname{$key}) ? 'i' : '';
+      if ($type =~ /regex/) {
+         $pat =~ s/!/\\!/g;
+         $test = "\$name =~ m!^$pat\$!$i";
+      } else {
+         local($var) = $type eq 'name' ? '$name' : '$file';
+         $test = "$var =~ m/". &glob_to_regex($pat). "/$i";
+      }
+      if ($type =~ m/^-i?d/) {
+         push(@dname_test, $test);
+      } else {
+         push(@name_test, $test);
+      }
+  }
+  if (@name_test) {
+      $GLOB_TESTS = join('||', @name_test);
+
+      $DO_GLOB_TESTS = 1;
+  } else {
+      $GLOB_TESTS = $DO_GLOB_TESTS = 0;
+  }
+  if (@dname_test) {
+      $DGLOB_TESTS = join('||', @dname_test);
+      $DO_DGLOB_TESTS = 1;
+  } else {
+      $DGLOB_TESTS = $DO_DGLOB_TESTS = 0;
+  }
+
+
+  ##
+  ## Process any 'magic' things from the startup file.
+  ##
+  if (@magic_tests && $HEADER_BYTES) {
+      ## the $magic' one is for when &dodir is not inlined
+      $tests = join('||',@magic_tests);
+      $MAGIC_TESTS = " { package magic; \$val = ($tests) }";
+      $DO_MAGIC_TESTS = 1;
+  } else {
+      $MAGIC_TESTS = 1;
+      $DO_MAGIC_TESTS = 0;
+  }
+
+  ##
+  ## Prepare regular expressions.
+  ##
+  {
+      local(@regex_tests);
+
+      if ($LIST_ONLY) {
+        $mflag = '';
+        ## need to have $* set, but perl5 just won''t shut up about it.
+        if ($] >= 5) {
+             $mflag = 'm';
+        } else {
+             eval ' $* = 1 ';
+        }
+      }
+
+      ##
+      ## Until I figure out a better way to deal with it,
+      ## We have to worry about a regex like [^xyz] when doing $LIST_ONLY.
+      ## Such a regex *will* match \n, and if I'm pulling in multiple
+      ## lines, it can allow lines to match that would otherwise not match.
+      ##
+      ## Therefore, if there is a '[^' in a regex, we can NOT take a chance
+      ## an use the fast listonly.
+      ##
+      $CAN_USE_FAST_LISTONLY = $LIST_ONLY;
+
+      local(@extra);
+      local($underline_glue) = ($] >= 5) ? '(:?_\cH)?' : '(_\cH)?';
+      while (@ARGV) {
+          $regex = shift(@ARGV);
+         ##
+         ## If watching for underlined things too, add another regex.
+         ##
+         if ($underlineOK) {
+            if ($regex =~ m/[?*+{}()\\.|^\$[]/) {
+               warn "$0: warning, can't underline-safe ``$regex''.\n";
+            } else {
+               $regex = join($underline_glue, split(//, $regex));
+            }
+         }
+
+         ## If nothing special in the regex, just use index...
+         ## is quite a bit faster.
+         if (($iflag eq '') && ($words == 0) &&
+                       $regex !~ m/[?*+{}()\\.|^\$[]/)
+         {
+             push(@regex_tests, "(index(\$_, q+$regex+)>=0)");
+
+         } else {
+             $regex =~ s#[\$\@\/]\w#\\$&#;
+             if ($words) {
+                 if ($regex =~ m/\|/) {
+                     ## could be dangerous -- see if we can wrap in parens.
+                     if ($regex =~ m/\\\d/) {
+                         warn "warning: -w and a | in a regex is dangerous.\n"
+                     } else {
+                         $regex = join($regex, '(', ')');
+                     }
+                 }
+                 $regex = join($regex, '\b', '\b');
+             }
+             $CAN_USE_FAST_LISTONLY = 0 if substr($regex, "[^") >= 0;
+             push(@regex_tests, "m/$regex/$iflag$mflag");
+         }
+
+         ## If we're done, but still have @extra to do, get set for that.
+         if (@ARGV == 0 && @extra) {
+             @ARGV = @extra;   ## now deal with the extra stuff.
+             $underlineOK = 0; ## but no more of this.
+             undef @extra;     ## or this.
+         }
+      }
+      if (@regex_tests) {
+         $REGEX_TEST = join('||', @regex_tests);
+         ## print STDERR $REGEX_TEST, "\n"; exit;
+      } else {
+         ## must be doing -find -- just give something syntactically correct.
+         $REGEX_TEST = 1;
+      }
+  }
+
+  ##
+  ## Make sure we can read the first item(s).
+  ##
+  foreach $start (@todo) {
+      $! = 2, die qq/$0: can't stat "$start"\n/
+         unless ($dev,$inode) = (stat($start))[$STAT_DEV,$STAT_INODE];
+
+      if (defined $dir_done{"$dev,$inode"}) {
+         ## ignore the repeat.
+         warn(qq/ignoring "$start" (same as "$dir_done{"$dev,$inode"}").\n/)
+               if $VERBOSE;
+         next;
+      }
+
+      ## if -xdev was given, remember the device.
+      $xdev{$dev} = 1 if $XDEV;
+
+      ## Note that we won't want to do it again
+      $dir_done{"$dev,$inode"} = $start;
+  }
+}
+
+
+##
+## See the comment above the __END__ above the 'sub dodir' below.
+##
+sub import_program
+{
+    sub bad {
+       print STDERR "$0: internal error (@_)\n";
+       exit 2;
+    }
+
+    ## Read from data, up to next __END__. This will be &dodir.
+    local($/) = "\n__END__";
+    $prog = <DATA>;
+    close(DATA);
+
+    $prog =~ s/\beval\b//g;       ## remove any 'eval'
+
+    ## Inline uppercase $-variables by their current values.
+    if ($] >= 5) {
+       $prog =~ s/\$([A-Z][A-Z0-9_]{2,}\b)/
+                   &bad($1) if !defined ${$main::{$1}}; ${$main::{$1}};/eg;
+    } else {
+       $prog =~ s/\$([A-Z][A-Z0-9_]{2,}\b)/local(*VAR) = $_main{$1};
+                   &bad($1) if !defined $VAR; $VAR;/eg;
+    }
+
+    eval $prog;  ## now do it. This will define &dodir;
+    $!=2, die "$0 internal error: $@\n" if $@;
+}
+
+###########################################################################
+
+##
+## Read the .search file:
+##    Blank lines and lines that are only #-comments ignored.
+##    Newlines may be escaped to create long lines
+##    Other lines are directives.
+##
+##    A directive may begin with an optional tag in the form <...>
+##    Things inside the <...> are evaluated as with:
+##        <(this || that) && must>
+##    will be true if
+##       -xmust -xthis   or   -xmust -xthat
+##    were specified on the command line (order doesn't matter, though)
+##    A directive is not done if there is a tag and it's false.
+##    Any characters but whitespace and &|()>,! may appear after an -x
+##    (although "-xdev" is special).  -xmust,this is the same as -xmust -xthis.
+##    Something like -x~ would make <~> true, and <!~> false.
+##
+##    Directives are in the form:
+##      option: STRING
+##     magic : NUMBYTES : EXPR
+##
+##    With option:
+##      The STRING is parsed like a Bourne shell command line, and the
+##      options are used as if given on the command line.
+##      No comments are allowed on 'option' lines.
+##     Examples:
+##         # skip objects and libraries
+##         option: -skip '.o .a'
+##         # skip emacs *~ and *# files, unless -x~ given:
+##         <!~> option: -skip '~ #'
+##
+##    With magic:
+##     EXPR can be pretty much any perl (comments allowed!).
+##      If it evaluates to true for any particular file, it is skipped.
+##      The only info you'll have about a file is the variable $H, which
+##      will have at least the first NUMBYTES of the file (less if the file
+##      is shorter than that, of course, and maybe more). You'll also have
+##      any variables you set in previous 'magic' lines.
+##     Examples:
+##         magic: 6 : ($x6 = substr($H, 0, 6)) eq 'GIF87a'
+##         magic: 6 :  $x6                     eq 'GIF89a'
+##
+##          magic: 6 : (($x6 = substr($H, 0, 6)) eq 'GIF87a' ## old gif \
+##                                      || $x6  eq 'GIF89a' ## new gif
+##     (the above two sets are the same)
+##         ## Check the first 32 bytes for "binarish" looking bytes.
+##         ## Don't blindly dump on any high-bit set, as non-ASCII text
+##         ## often has them set. \x80 and \xff seem to be special, though.
+##         ## Require two in a row to not get things like perl's $^T.
+##         ## This is known to get *.Z, *.gz, pkzip, *.elc and about any
+##         ## executable you'll find.
+##         magic: 32 : $H =~ m/[\x00-\x06\x10-\x1a\x1c-\x1f\x80\xff]{2}/
+##
+sub read_rc
+{
+    local($file, $show) = @_;
+    local($line_num, $ln, $tag) = 0;
+    local($use_default, @default) = 0;
+
+    { package magic; $\17 = 0; } ## turn off warnings for when we run EXPR's
+
+    unless (open(RC, "$file")) {
+       $use_default=1;
+       $file = "<internal default startup file>";
+       ## no RC file -- use this default.
+       @default = split(/\n/,<<'--------INLINE_LITERAL_TEXT');
+            magic: 32 : $H =~ m/[\x00-\x06\x10-\x1a\x1c-\x1f\x80\xff]{2}/
+           option: -skip '.a .COM .elc .EXE .gz .o .pbm .xbm .dvi'
+           option: -iskip '.tarz .zip .z .lzh .jpg .jpeg .gif .uu'
+           <!~> option: -skip '~ #'
+--------INLINE_LITERAL_TEXT
+    }
+
+    ##
+    ## Make an eval error pretty.
+    ##
+    sub clean_eval_error {
+       local($_) = @_;
+       s/ in file \(eval\) at line \d+,//g; ## perl4-style error
+       s/ at \(eval \d+\) line \d+,//g;     ## perl5-style error
+       $_ = $` if m/\n/;                    ## remove all but first line
+       "$_\n";
+    }
+
+    print "reading RC file: $file\n" if $show;
+
+    while (defined($_ = ($use_default ? shift(@default) : <RC>))) {
+       $ln = ++$line_num;                           ## note starting line num.
+        $_ .= <RC>, $line_num++ while s/\\\n?$/\n/;  ## allow continuations
+       next if /^\s*(#.*)?$/;          ## skip blank or comment-only lines.
+        $do = '';
+       
+       ## look for an initial <...> tag.
+       if (s/^\s*<([^>]*)>//) {
+           ## This simple s// will make the tag ready to eval.
+           ($tag = $msg = $1) =~
+               s/[^\s&|(!)]+/
+                       $seen_opt{$&}=1;         ## note seen option
+                       "defined(\$opt{q>$&>})"  ## (q>> is safe quoting here)
+               /eg;
+           
+           ## see if the tag is true or not, abort this line if not.
+           $dothis = (eval $tag);
+           $!=2, die "$file $ln <$msg>: $_".&clean_eval_error($@) if $@;
+
+           if ($show) {
+               $msg =~ s/[^\s&|(!)]+/-x$&/;
+               $msg =~ s/\s*!\s*/ no /g;
+               $msg =~ s/\s*&&\s*/ and /g;
+               $msg =~ s/\s*\|\|\s*/ or /g;
+               $msg =~ s/^\s+//; $msg =~ s/\s+$//;
+               $do = $dothis ? "(doing because $msg)" :
+                               "(do if $msg)";
+           } elsif (!$dothis) {
+               next;
+           }
+       }
+
+       if (m/^\s*option\s*:\s*/) {
+           next if $all && !$show; ## -all turns off these checks;
+           local($_) = $';
+            s/\n$//;
+           local($orig) = $_;
+           print " $do option: $_\n" if $show;
+           local($0) = "$0 ($file)"; ## for any error message.
+           local(@ARGV);
+           local($this);
+           ##
+           ## Parse $_ as a Bourne shell line -- fill @ARGV
+           ##
+           while (length) {
+               if (s/^\s+//) {
+                   push(@ARGV, $this) if defined $this;
+                   undef $this;
+                   next;
+               }
+               $this = '' if !defined $this;
+               $this .= $1 while s/^'([^']*)'// ||
+                                 s/^"([^"]*)"// ||
+                                 s/^([^'"\s\\]+)//||
+                                 s/^(\\[\D\d])//;
+               die "$file $ln: error parsing $orig at $_\n" if m/^\S/;
+           }
+           push(@ARGV, $this) if defined $this;
+           &check_args;
+           die qq/$file $ln: unused arg "@ARGV".\n/ if @ARGV;
+           next;
+       }
+
+       if (m/^\s*magic\s*:\s*(\d+)\s*:\s*/) {
+           next if $all && !$show; ## -all turns off these checks;
+           local($bytes, $check) = ($1, $');
+
+           if ($show) {
+               $check =~ s/\n?$/\n/;
+               print " $do contents: $check";
+           }
+           ## Check to make sure the thing at least compiles.
+           eval  "package magic; (\$H = '1'x \$main'bytes) && (\n$check\n)\n";
+           $! = 2, die "$file $ln: ".&clean_eval_error($@) if $@;
+
+           $HEADER_BYTES = $bytes if $bytes > $HEADER_BYTES;
+           push(@magic_tests, "(\n$check\n)");
+           next;
+       }
+       $! = 2, die "$file $ln: unknown command\n";
+    }
+    close(RC);
+}
+
+sub message
+{
+    if (!$STDERR_IS_TTY) {
+       print STDERR $_[0], "\n";
+    } else {
+       local($text) = @_;
+       $thislength = length($text);
+       if ($thislength >= $last_message_length) {
+           print STDERR $text, "\r";
+       } else {
+           print STDERR $text, ' 'x ($last_message_length-$thislength),"\r";
+       }       
+       $last_message_length = $thislength;
+    }
+}
+
+sub clear_message
+{
+    print STDERR ' ' x $last_message_length, "\r" if $last_message_length;
+    $vv_print = $vv_size = $last_message_length = 0;
+}
+
+##
+## Output a copy of this program with comments, extra whitespace, and
+## the trailing man page removed. On an ultra slow machine, such a copy
+## might load faster (but I can't tell any difference on my machine).
+##
+sub strip {
+    seek(DATA, 0, 0) || die "$0: can't reset internal pointer.\n";
+    while(<DATA>) {
+      print, next if /INLINE_LITERAL_TEXT/.../INLINE_LITERAL_TEXT/;
+      ## must mention INLINE_LITERAL_TEXT on this line!
+      s/\#\#.*|^\s+|\s+$//; ## remove cruft
+      last if $_ eq '.00;';
+      next if ($_ eq '') || ($_ eq "'di'") || ($_ eq "'ig00'");
+      s/\$stripped=0;/\$stripped=1;/;
+      s/\s\s+/ /;  ## squish multiple whitespaces down to one.
+      print $_, "\n";
+    }
+    exit(0);
+}
+
+##
+## Just to shut up -w. Never executed.
+##
+sub dummy {
+
+    1 || &dummy || &dir_done || &bad || &message || $NEXT_DIR_ENTRY ||
+    $DELAY || $VV_SIZE || $VV_PRINT_COUNT || $STDERR_SCREWS_STDOUT ||
+    @files || @files || $magic'H || $magic'H || $xdev{''} || &clear_message;
+
+}
+
+##
+## If the following __END__ is in place, what follows will be
+## inlined when the program first starts up. Any $ variable name
+## all in upper case, specifically, any string matching
+##     \$([A-Z][A-Z0-9_]{2,}\b
+## will have the true value for that variable inlined. Also, any 'eval' is
+## removed
+##
+## The idea is that when the whole thing is then eval'ed to define &dodir,
+## the perl optimizer will make all the decisions that are based upon
+## command-line options (such as $VERBOSE), since they'll be inlined as
+## constants
+##
+## Also, and here's the big win, the tests for matching the regex, and a
+## few others, are all inlined. Should be blinding speed here.
+##
+## See the read from <DATA> above for where all this takes place.
+## But all-in-all, you *want* the __END__ here. Comment it out only for
+## debugging....
+##
+
+__END__
+
+##
+## Given a directory, check all "appropriate" files in it.
+## Shove any subdirectories into the global @todo, so they'll be done
+## later.
+##
+## Be careful about adding any upper-case variables, as they are subject
+## to being inlined. See comments above the __END__ above.
+##
+sub dodir
+{
+  local($dir) = @_;
+  $dir =~ s,/+$,,; ## remove any trailing slash.
+  unless (opendir(DIR, "$dir/.")) {
+      &clear_message if $VERBOSE && $STDERR_SCREWS_STDOUT;
+      warn qq($0: can't opendir "$dir/".\n);
+      return;
+  }
+
+  if ($VERBOSE) {
+      &message($dir);
+      $vv_print = $vv_size = 0;
+  }
+
+  @files = sort readdir(DIR) if $DO_SORT;
+
+  while (defined($name = eval $NEXT_DIR_ENTRY))
+  {
+    next if $name eq '.' || $name eq '..'; ## never follow these.
+
+    ## create full relative pathname.
+    $file = $dir eq '.' ? $name : "$dir/$name";
+
+    ## if link and skipping them, do so.
+    if ($NOLINKS && -l $file) {
+       warn qq/skip (symlink): $file\n/ if $WHY;
+       next;
+    }
+
+    ## skip things unless files or directories
+    unless (-f $file || -d _) {
+       if ($WHY) {
+           $why = (-S _ && "socket")       ||
+                  (-p _ && "pipe")         ||
+                  (-b _ && "block special")||
+                  (-c _ && "char special") || "somekinda special";
+           warn qq/skip ($why): $file\n/;
+       }
+       next;
+    }
+
+    ## skip things we can't read
+    unless (-r _) {
+       if ($WHY) {
+           $why = (-l $file) ? "follow" : "read";
+           warn qq/skip (can't $why): $file\n/;
+       }
+       next;
+    }
+
+    ## skip things that are empty
+    unless (-s _ || -d _) {
+       warn qq/skip (empty): $file\n/ if $WHY;
+       next;
+    }
+
+    ## Note file device & inode. If -xdev, skip if appropriate.
+    ($dev, $inode) = (stat(_))[$STAT_DEV, $STAT_INODE];
+    if ($XDEV && defined $xdev{$dev}) {
+       warn qq/skip (other device): $file\n/ if $WHY;
+       next;
+    }
+    $id = "$dev,$inode";
+
+    ## special work for a directory
+    if (-d _) {
+       ## Do checks for directory file endings.
+       if ($DO_DSKIP_TEST && (eval $DSKIP_TEST)) {
+           warn qq/skip (-dskip): $file\n/ if $WHY;
+           next;
+       }
+       ## do checks for -name/-regex/-path tests
+       if ($DO_DGLOB_TESTS && !(eval $DGLOB_TESTS)) {
+           warn qq/skip (dirname): $file\n/ if $WHY;
+           next;
+       }
+
+       ## _never_ redo a directory
+       if (defined $dir_done{$id} and $^O ne 'MSWin32') {
+           warn qq/skip (did as "$dir_done{$id}"): $file\n/ if $WHY;
+           next;
+       }
+       $dir_done{$id} = $file;     ## mark it done.
+       unshift(@todo, $file);      ## add to the list to do.
+       next;
+    }
+    if ($WHY == 0  && $VERBOSE > 1) {
+      if ($VERBOSE>2||$vv_print++>$VV_PRINT_COUNT||($vv_size+=-s _)>$VV_SIZE){
+         &message($file);
+         $vv_print = $vv_size = 0;
+      }
+    }
+
+    ## do time-related tests
+    if ($NEWER || $OLDER) {
+       $_ = (stat(_))[$STAT_MTIME];
+       if ($NEWER && $_ < $NEWER) {
+           warn qq/skip (too old): $file\n/ if $WHY;
+           next;
+       }
+       if ($OLDER && $_ > $OLDER) {
+           warn qq/skip (too new): $file\n/ if $WHY;
+           next;
+       }
+    }
+
+    ## do checks for file endings
+    if ($DO_SKIP_TEST && (eval $SKIP_TEST)) {
+       warn qq/skip (-skip): $file\n/ if $WHY;
+       next;
+    }
+
+    ## do checks for -name/-regex/-path tests
+    if ($DO_GLOB_TESTS && !(eval $GLOB_TESTS)) {
+       warn qq/skip (filename): $file\n/ if $WHY;
+       next;
+    }
+
+
+    ## If we're not repeating files,
+    ## skip this one if we've done it, or note we're doing it.
+    unless ($DOREP) {
+       if (defined $file_done{$id}) {
+           warn qq/skip (did as "$file_done{$id}"): $file\n/ if $WHY;
+           next;
+       }
+       $file_done{$id} = $file;
+    }
+
+    if ($DO_MAGIC_TESTS) {
+       if (!open(FILE_IN, $file)) {
+           &clear_message if $VERBOSE && $STDERR_SCREWS_STDOUT;
+           warn qq/$0: can't open: $file\n/;
+           next;
+       }
+       unless (read(FILE_IN, $magic'H, $HEADER_BYTES)) {
+           &clear_message if $VERBOSE && $STDERR_SCREWS_STDOUT;
+           warn qq/$0: can't read from "$file"\n"/;
+           close(FILE_IN);
+           next;
+       }
+
+       eval $MAGIC_TESTS;
+       if ($magic'val) {
+           close(FILE_IN);
+           warn qq/skip (magic): $file\n/ if $WHY;
+           next;
+       }
+       seek(FILE_IN, 0, 0);  ## reset for later <FILE_IN>
+    }
+
+    if ($WHY != 0  && $VERBOSE > 1) {
+      if ($VERBOSE>2||$vv_print++>$VV_PRINT_COUNT||($vv_size+=-s _)>$VV_SIZE){
+         &message($file);
+         $vv_print = $vv_size = 0;
+      }
+    }
+
+    if ($DELAY) {
+       sleep($DELAY);
+    }
+
+    if ($FIND_ONLY) {
+       &clear_message if $VERBOSE && $STDERR_SCREWS_STDOUT;
+       print $file, "\n";
+       $retval=0; ## we've found something
+       close(FILE_IN) if $DO_MAGIC_TESTS;
+       next;
+    } else {
+       ## if we weren't doing magic tests, file won't be open yet...
+       if (!$DO_MAGIC_TESTS && !open(FILE_IN, $file)) {
+           &clear_message if $VERBOSE && $STDERR_SCREWS_STDOUT;
+           warn qq/$0: can't open: $file\n/;
+           next;
+       }
+       if ($LIST_ONLY && $CAN_USE_FAST_LISTONLY) {
+           ##
+           ## This is rather complex, but buys us a LOT when we're just
+           ## listing files and not the individual internal lines.
+           ##
+           local($size) = 4096;  ## block-size in which to do reads
+           local($nl);           ## will point to $_'s ending newline.
+           local($read);         ## will be how many bytes read.
+           local($_) = '';       ## Starts out empty
+           local($hold);         ## (see below)
+
+           while (($read = read(FILE_IN,$_,$size,length($_)))||length($_))
+           {
+               undef @parts;
+               ## if read a full block, but no newline, need to read more.
+               while ($read == $size && ($nl = rindex($_, "\n")) < 0) {
+                   push(@parts, $_);                    ## save that part
+                   $read = read(FILE_IN, $_, $size); ## keep trying
+               }
+
+               ##
+               ## If we had to save parts, must now combine them together.
+               ## adjusting $nl to reflect the now-larger $_. This should
+               ## be a lot more efficient than using any kind of .= in the
+               ## loop above.
+               ##
+               if (@parts) {
+                   local($lastlen) = length($_); #only need if $nl >= 0
+                   $_ = join('', @parts, $_);
+                   $nl = length($_) - ($lastlen - $nl) if $nl >= 0;
+               }
+
+               ##
+               ## If we're at the end of the file, then we can use $_ as
+               ## is.  Otherwise, we need to remove the final partial-line
+               ## and save it so that it'll be at the beginning of the
+               ## next read (where the rest of the line will be layed in
+               ## right after it).  $hold will be what we should save
+               ## until next time.
+               ##
+               if ($read != $size || $nl < 0) {
+                   $hold = '';
+               } else {
+                   $hold = substr($_, $nl + 1);
+                   substr($_, $nl + 1) = '';
+               }
+
+               ##
+               ## Now have a bunch of full lines in $_. Use it.
+               ##
+               if (eval $REGEX_TEST) {
+                   &clear_message if $VERBOSE && $STDERR_SCREWS_STDOUT;
+                   print $file, "\n";
+                   $retval=0; ## we've found something
+
+                   last;
+               }
+
+               ## Prepare for next read....
+               $_ = $hold;
+           }
+
+       } else {  ## else not using faster block scanning.....
+
+            $lines_printed = 0 if $NICE;
+           while (<FILE_IN>) {
+               study;
+               next unless (eval $REGEX_TEST);
+
+               ##
+               ## We found a matching line.
+               ##
+               $retval=0;
+               &clear_message if $VERBOSE && $STDERR_SCREWS_STDOUT;
+               if ($LIST_ONLY) {
+                   print $file, "\n";
+                   last;
+               } else {
+                   ## prepare to print line.
+                   if ($NICE && $lines_printed++ == 0) {
+                       print '-' x 70, "\n" if $NICE > 1;
+                       print $file, ":\n";
+                   }
+
+                   ##
+                   ## Print all the prelim stuff. This looks less efficient
+                   ## than it needs to be, but that's so that when the eval
+                   ## is compiled (and the tests are optimized away), the
+                   ## result will be less actual PRINTs than the more natural
+                   ## way of doing these tests....
+                   ##
+                   if ($NICE) {
+                       if ($REPORT_LINENUM) {
+                           print " line $.:  ";
+                       } else {
+                           print "  ";
+                       }
+                   } elsif ($REPORT_LINENUM && $PREPEND_FILENAME) {
+                       print "$file,:$.: ";
+                   } elsif ($PREPEND_FILENAME) {
+                       print "$file: ";
+                   } elsif ($REPORT_LINENUM) {
+                       print "$.: ";
+                   }
+                   print $_;
+                   print "\n" unless m/\n$/;
+               }
+           }
+           print "\n" if ($NICE > 1) && $lines_printed;
+       }
+       close(FILE_IN);
+    }
+  }
+  closedir(DIR);
+}
+
+__END__
+.00;                   ## finish .ig
+'di                    \" finish diversion--previous line must be blank
+.nr nl 0-1             \" fake up transition to first page again
+.nr % 0                        \" start at page 1
+.\"__________________NORMAL_MAN_PAGE_BELOW_________________
+.ll+10n
+.TH search 1 "Dec 17, 1994"
+.SH SEARCH
+search \- search files (a'la grep) in a whole directory tree.
+.SH SYNOPSIS
+search [ grep-like and find-like options] [regex ....]
+.SH DESCRIPTION
+.I Search
+is more or less a combo of 'find' and 'grep' (although the regular
+expression flavor is that of the perl being used, which is closer to
+egrep's than grep's).
+
+.I Search
+does generally the same kind of thing that
+.nf
+   find <blah blah> | xargs egrep <blah blah>
+.fi
+does, but is
+.I much
+more powerful and efficient (and intuitive, I think).
+
+This manual describes
+.I search
+as of version "941227.4". You can always find the latest version at
+.nf
+   http://www.wg.omron.co.jp/~jfriedl/perl/index.html
+.fi
+
+.SH "QUICK EXAMPLE"
+Basic use is simple:
+.nf
+    % search jeff
+.fi
+will search files in the current directory, and all sub directories, for
+files that have "jeff" in them. The lines will be listed with the
+containing file's name prepended.
+.PP
+If you list more than one regex, such as with
+.nf
+    % search jeff Larry Randal+ 'Stoc?k' 'C.*son'
+.fi
+then a line containing any of the regexes will be listed.
+This makes it effectively the same as
+.nf
+    % search 'jeff|Larry|Randal+|Stoc?k|C.*son'
+.fi
+However, listing them separately is much more efficient (and is easier
+to type).
+.PP
+Note that in the case of these examples, the
+.B \-w
+(list whole-words only) option would be useful.
+.PP
+Normally, various kinds of files are automatically removed from consideration.
+If it has has a certain ending (such as ".tar", ".Z", ".o", .etc), or if
+the beginning of the file looks like a binary, it'll be excluded.
+You can control exactly how this works -- see below. One quick way to
+override this is to use the
+.B \-all
+option, which means to consider all the files that would normally be
+automatically excluded.
+Or, if you're curious, you can use
+.B \-why
+to have notes about what files are skipped (and why) printed to stderr.
+
+.SH "BASIC OVERVIEW"
+Normally, the search starts in the current directory, considering files in
+all subdirectories.
+
+You can use the
+.I ~/.search
+file to control ways to automatically exclude files.
+If you don't have this file, a default one will kick in, which automatically
+add
+.nf
+    -skip .o .Z .gif
+.fi
+(among others) to exclude those kinds of files (which you probably want to
+skip when searching for text, as is normal).
+Files that look to be be binary will also be excluded.
+
+Files ending with "#" and "~" will also be excluded unless the
+.B -x~
+option is given. 
+
+You can use
+.B -showrc
+to show what kinds of files will normally be skipped.
+See the section on the startup file
+for more info.
+
+You can use the
+.B -all
+option to indicate you want to consider all files that would otherwise be
+skipped by the startup file.
+
+Based upon various other flags (see "WHICH FILES TO CONSIDER" below),
+more files might be removed from consideration. For example
+.nf
+    -mtime 3
+.fi
+will exclude files that aren't at least three days old (change the 3 to -3
+to exclude files that are more than three days old), while
+.nf
+    -skip .*
+.fi
+would exclude any file beginning with a dot (of course, '.' and '..'  are
+special and always excluded).
+
+If you'd like to see what files are being excluded, and why, you can get the
+list via the
+.B \-why
+option.
+
+If a file makes it past all the checks, it is then "considered".
+This usually means it is greped for the regular expressions you gave
+on the command line.
+
+If any of the regexes match a line, the line is printed.
+However, if
+.B -list
+is given, just the filename is printed. Or, if
+.B -nice
+is given, a somewhat more (human-)readable output is generated.
+
+If you're searching a huge tree and want to keep informed about how
+the search is progressing,
+.B -v
+will print (to stderr) the current directory being searched.
+Using
+.B -vv
+will also print the current file "every so often", which could be useful
+if a directory is huge. Using
+.B -vvv
+will print the update with every file.
+
+Below is the full listing of options.
+
+.SH "OPTIONS TELLING *WHERE* TO SEARCH"
+.TP
+.BI -dir " DIR"
+Start searching at the named directory instead of the current directory.
+If multiple
+.B -dir
+arguments are given, multiple trees will be searched.
+.TP
+.BI -ddir " DIR"
+Like
+.B -dir
+except it flushes any previous
+.B -dir
+directories (i.e. "-dir A -dir B -dir C" will search A, B, and C, while
+"-dir A -ddir B -dir C" will search only B and C. This might be of use
+in the startup file (see that section below).
+.TP
+.B -xdev
+Stay on the same filesystem as the starting directory/directories.
+.TP
+.B -sort
+Sort the items in a directory before processing them.
+Normally they are processed in whatever order they happen to be read from
+the directory.
+.TP
+.B -nolinks
+Don't follow symbolic links. Normally they're followed.
+
+.SH "OPTIONS CONTROLLING WHICH FILES TO CONSIDER AND EXCLUDE"
+.TP
+.BI -mtime " NUM"
+Only consider files that were last changed more than
+.I NUM
+days ago
+(less than
+.I NUM
+days if
+.I NUM
+has '-' prepended, i.e. "-mtime -2.5" means to consider files that
+have been changed in the last two and a half days).
+.TP
+.B -older FILE
+Only consider files that have not changed since
+.I FILE
+was last changed.
+If there is any upper case in the "-older", "or equal" is added to the sense
+of the test.  Therefore, "search -older ./file regex" will never consider
+"./file", while "search -Older ./file regex" will.
+
+If a file is a symbolic link, the time used is that of the file and not the
+link.
+.TP
+.BI -newer " FILE"
+Opposite of
+.BR -older .
+.TP
+.BI -name " GLOB"
+Only consider files that match the shell filename pattern
+.IR GLOB .
+The check is only done on a file's name (use
+.B -path
+to check the whole path, and use
+.B -dname
+to check directory names).
+
+Multiple specifications can be given by separating them with spaces, a'la
+.nf
+    -name '*.c *.h'
+.fi
+to consider C source and header files.
+If
+.I GLOB
+doesn't contain any special pattern characters, a '*' is prepended.
+This last example could have been given as
+.nf
+   -name '.c .h'
+.fi
+It could also be given as
+.nf
+    -name .c -name .h
+.fi
+or
+.nf
+    -name '*.c' -name '*.h'
+.fi
+or
+.nf
+    -name '*.[ch]'
+.fi
+(among others)
+but in this last case, you have to be sure to supply the leading '*'.
+.TP
+.BI -path " GLOB"
+Like
+.B -name
+except the entire path is checked against the pattern.
+.TP
+.B -regex " REGEX"
+Considers files whose names (not paths) match the given perl regex
+exactly.
+.TP
+.BI -iname " GLOB"
+Case-insensitive version of
+.BR -name .
+.TP
+.BI -ipath " GLOB"
+Case-insensitive version of
+.BR -path .
+.TP
+.BI -iregex " REGEX"
+Case-insensitive version of
+.BR -regex .
+
+.TP
+.BI -dpath " GLOB"
+Only search down directories whose path matches the given pattern (this
+doesn't apply to the initial directory given by
+.BI -dir ,
+of course).
+Something like
+.nf
+    -dir /usr/man -dpath /usr/man/man*
+.fi
+would completely skip
+"/usr/man/cat1", "/usr/man/cat2", etc.
+.TP
+.BI -dskip " GLOB"
+Skips directories whose name (not path) matches the given pattern.
+Something like
+.nf
+    -dir /usr/man -dskip cat*
+.fi
+would completely skip any directory in the tree whose name begins with "cat"
+(including "/usr/man/cat1", "/usr/man/cat2", etc.).
+.TP
+.BI -dregex " REGEX"
+Like
+.BI -dpath ,
+but the pattern is a full perl regex. Note that this quite different
+from
+.B -regex
+which considers only file names (not paths). This option considers
+full directory paths (not just names). It's much more useful this way.
+Sorry if it's confusing.
+.TP
+.BI -dpath " GLOB"
+This option exists, but is probably not very useful. It probably wants to
+be like the '-below' or something I mention in the "TODO" section.
+.TP
+.BI -idpath " GLOB"
+Case-insensitive version of
+.BR -dpath .
+.TP
+.BI -idskip " GLOB"
+Case-insensitive version of
+.BR -dskip .
+.TP
+.BI -idregex " REGEX"
+Case-insensitive version of
+.BR -dregex .
+.TP
+.B -all
+Ignore any 'magic' or 'option' lines in the startup file.
+The effect is that all files that would otherwise be automatically
+excluded are considered.
+.TP
+.BI -x SPECIAL
+Arguments starting with
+.B -x
+(except
+.BR -xdev ,
+explained elsewhere) do special interaction with the
+.I ~/.search
+startup file. Something like
+.nf
+       -xflag1 -xflag2
+.fi
+will turn on "flag1" and "flag2" in the startup file (and is
+the same as "-xflag1,flag2"). You can use this to write your own
+rules for what kinds of files are to be considered.
+
+For example, the internal-default startup file contains the line
+.nf
+       <!~> option: -skip '~ #'
+.fi
+This means that if the
+.B -x~
+flag is
+.I not
+seen, the option
+.nf
+    -skip '~ #'
+.fi
+should be done.
+The effect is that emacs temp and backup files are not normally
+considered, but you can included them with the -x~ flag.
+
+You can write your own rules to customize
+.I search
+in powerful ways. See the STARTUP FILE section below.
+.TP
+.B -why
+Print a message (to stderr) when and why a file is not considered.
+
+.SH "OPTIONS TELLING WHAT TO DO WITH FILES THAT WILL BE CONSIDERED"
+.TP
+.B -find
+(you can use
+.B -f
+as well).
+This option changes the basic action of
+.IR search .
+
+Normally, if a file is considered, it is searched
+for the regular expressions as described earlier. However, if this option
+is given, the filename is printed and no searching takes place. This turns
+.I search
+into a 'find' of some sorts.
+
+In this case, no regular expressions are needed on the command line
+(any that are there are silently ignored).
+
+This is not intended to be a replacement for the 'find' program,
+but to aid
+you in understanding just what files are getting past the exclusion checks.
+If you really want to use it as a sort of replacement for the 'find' program,
+you might want to use
+.B -all
+so that it doesn't waste time checking to see if the file is binary, etc
+(unless you really want that, of course).
+
+If you use
+.BR -find ,
+none of the "GREP-LIKE OPTIONS" (below) matter.
+
+As a replacement for 'find',
+.I search
+is probably a bit slower (or in the case of GNU find, a lot slower --
+GNU find is
+.I unbelievably
+fast).
+However, "search -ffind"
+might be more useful than 'find' when options such as
+.B -skip
+are used (at least until 'find' gets such functionality).
+.TP
+.B -ffind
+(or
+.BR -ff )
+A faster more 'find'-like find. Does
+.nf
+    -find  -all -dorep
+.fi
+.SH "GREP-LIKE OPTIONS"
+These options control how a searched file is accessed,
+and how things are printed.
+.TP
+.B -i
+Ignore letter case when matching.
+.TP
+.B -w
+Consider only whole-word matches ("whole word" as defined by perl's "\\b"
+regex).
+.TP
+.B -u
+If the regex(es) is/are simple, try to modify them so that they'll work
+in manpage-like underlined text (i.e. like _^Ht_^Hh_^Hi_^Hs).
+This is very rudimentary at the moment.
+.TP
+.B -list
+(you can use
+.B -l
+too).
+Don't print matching lines, but the names of files that contain matching
+lines. This will likely be *much* faster, as special optimizations are
+made -- particularly with large files.
+.TP
+.B -n
+Pepfix each line by its line number.
+.TP
+.B -nice
+Not a grep-like option, but similar to
+.BR -list ,
+so included here.
+.B -nice
+will have the output be a bit more human-readable, with matching lines printed
+slightly indented after the filename, a'la
+.nf
+
+   % search foo
+   somedir/somefile: line with foo in it
+   somedir/somefile: some food for thought
+   anotherdir/x: don't be a buffoon!
+   %
+
+.fi
+will become
+.nf
+
+   % search -nice foo
+   somedir/somefile:
+     line with foo in it
+     some food for thought
+   anotherdir/x:
+     don't be a buffoon!
+   %
+
+.fi
+This option due to Lionel Cons.
+.TP
+.B -nnice
+Be a bit nicer than
+.BR -nice .
+Prefix each file's output by a rule line, and follow with an extra blank line.
+.TP
+.B -h
+Don't prepend each output line with the name of the file
+(meaningless when
+.B -find
+or
+.B -l
+are given).
+
+.SH "OTHER OPTIONS"
+.TP
+.B -help
+Print the usage information.
+.TP
+.B -version
+Print the version information and quit.
+.TP
+.B -v
+Set the level of message verbosity.
+.B -v
+will print a note whenever a new directory is entered.
+.B -vv
+will also print a note "every so often". This can be useful to see
+what's happening when searching huge directories.
+.B -vvv
+will print a new with every file.
+.B -vvvv
+is
+-vvv
+plus
+.BR -why .
+.TP
+.B -e
+This ends the options, and can be useful if the regex begins with '-'.
+.TP
+.B -showrc
+Shows what is being considered in the startup file, then exits.
+.TP
+.B -dorep
+Normally, an identical file won't be checked twice (even with multiple
+hard or symbolic links). If you're just trying to do a fast
+.BR -find ,
+the bookkeeping to remember which files have been seen is not desirable,
+so you can eliminate the bookkeeping with this flag.
+
+.SH "STARTUP FILE"
+When
+.I search
+starts up, it processes the directives in
+.IR ~/.search .
+If no such file exists, a default
+internal version is used.
+
+The internal version looks like:
+.nf
+
+   magic: 32 : $H =~ m/[\ex00-\ex06\ex10-\ex1a\ex1c-\ex1f\ex80\exff]{2}/
+   option: -skip '.a .COM .elc .EXE .gz .o .pbm .xbm .dvi'
+   option: -iskip '.tarz .zip .z .lzh .jpg .jpeg .gif .uu'
+   <!~> option: -skip '~ #'
+
+.fi
+If you wish to create your own "~/.search",
+you might consider copying the above, and then working from there.
+
+There are two kinds of directives in a startup file: "magic" and "option".
+.RS 0n
+.TP
+OPTION
+Option lines will automatically do the command-line options given.
+For example, the line
+.nf
+       option: -v
+.fi
+in you startup file will turn on -v every time, without needing to type it
+on the command line.
+
+The text on the line after the "option:" directive is processed
+like the Bourne shell, so make sure to pay attention to quoting.
+.nf
+       option: -skip .exe .com
+.fi
+will give an error (".com" by itself isn't a valid option), while
+.nf
+       option: -skip ".exe .com"
+.fi
+will properly include it as part of -skip's argument.
+
+.TP
+MAGIC
+Magic lines are used to determine if a file should be considered a binary
+or not (the term "magic" refers to checking a file's magic number).  These
+are described in more detail below.
+.RE
+
+Blank lines and comments (lines beginning with '#') are allowed.
+
+If a line begins with  <...>, then it's a check to see if the
+directive on the line should be done or not. The stuff inside the <...>
+can contain perl's && (and), || (or), ! (not), and parens for grouping,
+along with "flags" that might be indicated by the user with
+.BI -x flag
+options.
+
+For example, using "-xfoo" will cause "foo" to be true inside the <...>
+blocks. Therefore, a line beginning with "<foo>" would be done only when
+"-xfoo" had been specified, while a line beginning with "<!foo>" would be
+done only when "-xfoo" is not specified (of course, a line without any <...>
+is done in either case).
+
+A realistic example might be
+.nf
+       <!v> -vv
+.fi
+This will cause -vv messages to be the default, but allow "-xv" to override.
+
+There are a few flags that are set automatically:
+.RS
+.TP
+.B TTY
+true if the output is to the screen (as opposed to being redirected to a file).
+You can force this (as with all the other automatic flags) with -xTTY.
+.TP
+.B -v
+True if -v was specified. If -vv was specified, both 
+.B -v
+and
+.B -vv
+flags are true (and so on).
+.TP
+.B -nice
+True if -nice was specified. Same thing about -nnice as for -vv.
+.PP
+.TP
+.B -list
+true if -list (or -l) was given.
+.TP
+.B -dir
+true if -dir was given.
+.RE
+
+Using this info, you might change the last example to
+.nf
+
+    <!v && !-v> option: -vv
+
+.fi
+The added "&& !-v" means "and if the '-v' option not given".
+This will allow you to use "-v" alone on the command line, and not
+have this directive add the more verbose "-vv" automatically.
+
+.RS 0
+Some other examples:
+.TP
+<!-dir && !here> option: -dir ~/
+Effectively make the default directory your home directory (instead of the
+current directory). Using -dir or -xhere will undo this.
+.TP
+<tex> option: -name .tex -dir ~/pub
+Create '-xtex' to search only "*.tex" files in your ~/pub directory tree.
+Actually, this could be made a bit better. If you combine '-xtex' and '-dir'
+on the command line, this directive will add ~/pub to the list, when you
+probably want to use the -dir directory only. You could do
+.nf
+
+   <tex> option: -name .tex
+   <tex && !-dir> option: -dir ~/pub
+.fi
+
+to will allow '-xtex' to work as before, but allow a command-line "-dir"
+to take precedence with respect to ~/pub.
+.TP
+<fluff> option: -nnice -sort -i -vvv
+Combine a few user-friendly options into one '-xfluff' option.
+.TP
+<man> option: -ddir /usr/man -v -w
+When the '-xman' option is given, search "/usr/man" for whole-words
+(of whatever regex or regexes are given on the command line), with -v.
+.RE
+
+The lines in the startup file are executed from top to bottom, so something
+like
+.nf
+
+   <both> option: -xflag1 -xflag2
+   <flag1> option: ...whatever...
+   <flag2> option: ...whatever...
+
+.fi
+will allow '-xboth' to be the same as '-xflag1 -xflag2' (or '-xflag1,flag2'
+for that matter). However, if you put the "<both>" line below the others,
+they will not be true when encountered, so the result would be different
+(and probably undesired).
+
+The "magic" directives are used to determine if a file looks to be binary
+or not. The form of a magic line is
+.nf
+    magic: \fISIZE\fP : \fIPERLCODE\fP
+.fi
+where
+.I SIZE
+is the number of bytes of the file you need to check, and
+.I PERLCODE
+is the code to do the check. Within
+.IR PERLCODE ,
+the variable $H will hold at least the first
+.I SIZE
+bytes of the file (unless the file is shorter than that, of course).
+It might hold more bytes. The perl should evaluate to true if the file
+should be considered a binary.
+
+An example might be
+.nf
+    magic: 6 : substr($H, 0, 6) eq 'GIF87a'
+.fi
+to test for a GIF ("-iskip .gif" is better, but this might be useful
+if you have images in files without the ".gif" extension).
+
+Since the startup file is checked from top to bottom, you can be a bit
+efficient:
+.nf
+    magic: 6 : ($x6 = substr($H, 0, 6)) eq 'GIF87a'
+    magic: 6 :  $x6                     eq 'GIF89a'
+.fi
+You could also write the same thing as
+.nf
+  magic: 6 : (($x6 = substr($H, 0, 6)) eq 'GIF87a') || ## an old gif, or.. \e
+              $x6                     eq 'GIF89a'     ## .. a new one.
+.fi
+since newlines may be escaped.
+
+The default internal startup file includes
+.nf
+   magic: 32 : $H =~ m/[\ex00-\ex06\ex10-\ex1a\ex1c-\ex1f\ex80\exff]{2}/
+.fi
+which checks for certain non-printable characters, and catches a large
+number of binary files, including most system's executables, linkable
+objects, compressed, tarred, and otherwise folded, spindled, and mutilated
+files.
+
+Another example might be
+.nf
+    ## an archive library
+    magic: 17 : substr($H, 0, 17) eq "!<arch>\en__.SYMDEF"
+.fi
+
+.SH "RETURN VALUE"
+.I Search
+returns zero if lines (or files, if appropriate) were found,
+or if no work was requested (such as with
+.BR -help ).
+Returns 1 if no lines (or files) were found.
+Returns 2 on error.
+
+.SH TODO
+Things I'd like to add some day:
+.nf
+  + show surrounding lines (context).
+  + highlight matched portions of lines.
+  + add '-and', which can go between regexes to override
+    the default logical or of the regexes.
+  + add something like
+      -below GLOB
+    which will examine a tree and only consider files that
+    lie in a directory deeper than one named by the pattern.
+  + add 'warning' and 'error' directives.
+  + add 'help' directive.
+.fi
+.SH BUGS
+If -xdev and multiple -dir arguments are given, any file in any of the
+target filesystems are allowed. It would be better to allow each filesystem
+for each separate tree.
+
+Multiple -dir args might also cause some confusing effects. Doing
+.nf
+   -dir some/dir -dir other
+.fi
+will search "some/dir" completely, then search "other" completely. This
+is good. However, something like
+.nf
+   -dir some/dir -dir some/dir/more/specific
+.fi
+will search "some/dir" completely *except for* "some/dir/more/specific",
+after which it will return and be searched. Not really a bug, but just sort
+of odd.
+
+File times (for -newer, etc.) of symbolic links are for the file, not the
+link. This could cause some misunderstandings.
+
+Probably more. Please let me know.
+.SH AUTHOR
+Jeffrey Friedl, Omron Corp (jfriedl@omron.co.jp)
+.br
+http://www.wg.omron.co.jp/cgi-bin/j-e/jfriedl.html
+
+.SH "LATEST SOURCE"
+See http://www.wg.omron.co.jp/~jfriedl/perl/index.html
diff --git a/wince/config.ce b/wince/config.ce
new file mode 100644 (file)
index 0000000..5fd9d62
--- /dev/null
@@ -0,0 +1,787 @@
+## Configured by: ~cf_email~
+## Target system: WINCE
+Author='Rainer Keuchel <coyxc@rainer-keuchel.de'
+PERL_CONFIG_SH='true'
+CONFIGDOTSH='true'
+Date='$Date'
+Header=''
+Id='$Id'
+Locker=''
+Log='$Log'
+Mcc='Mcc'
+RCSfile='$RCSfile'
+Revision='$Revision'
+Source=''
+State=''
+_a='.lib'
+_exe='.exe'
+_o='.obj'
+afs='false'
+alignbytes='8'
+ansi2knr=''
+aphostname=''
+api_revision='~PERL_API_REVISION~'
+api_subversion='~PERL_API_SUBVERSION~'
+api_version='~PERL_API_VERSION~'
+api_versionstring='~PERL_API_REVISION~.~PERL_API_VERSION~.~PERL_API_SUBVERSION~'
+ar='lib'
+archlib='~INST_TOP~~INST_VER~\lib~INST_ARCH~'
+archlibexp='~INST_TOP~~INST_VER~\lib~INST_ARCH~'
+archname64=''
+archname='wince'
+archobjs=''
+awk='awk'
+baserev='5'
+bash=''
+bin='~INST_TOP~~INST_VER~\bin~INST_ARCH~'
+bincompat5005='undef'
+binexp='~INST_TOP~~INST_VER~\bin~INST_ARCH~'
+bison=''
+byacc='byacc'
+byteorder='1234'
+c=''
+castflags='0'
+cat='type'
+cc='cl'
+cccdlflags=' '
+ccdlflags=' '
+ccflags='-DWIN32'
+ccsymbols=''
+cf_by='nobody'
+cf_email='nobody@no.where.net'
+cf_time=''
+charsize='1'
+chgrp=''
+chmod=''
+chown=''
+clocktype='clock_t'
+comm=''
+compress=''
+contains='grep'
+cp='copy'
+cpio=''
+cpp='cl -nologo -E'
+cpp_stuff='42'
+cppccsymbols=''
+cppflags='-DWIN32'
+cpplast=''
+cppminus=''
+cpprun='cl -nologo -E'
+cppstdin='cl -nologo -E'
+cppsymbols=''
+crosscompile='undef'
+cryptlib=''
+csh='undef'
+d_Gconvert='sprintf((b),"%.*g",(n),(x))'
+d_PRIEldbl='undef'
+d_PRIFldbl='undef'
+d_PRIGldbl='undef'
+d_PRIX64='undef'
+d_PRId64='undef'
+d_PRIeldbl='undef'
+d_PRIfldbl='undef'
+d_PRIgldbl='undef'
+d_PRIi64='undef'
+d_PRIo64='undef'
+d_PRIu64='undef'
+d_PRIx64='undef'
+d_access='define'
+d_accessx='undef'
+d_alarm='undef'
+d_archlib='define'
+d_atolf='undef'
+d_atoll='undef'
+d_attribut='undef'
+d_bcmp='undef'
+d_bcopy='undef'
+d_bincompat5005='undef'
+d_bsd='define'
+d_bsdgetpgrp='undef'
+d_bsdsetpgrp='undef'
+d_bzero='undef'
+d_casti32='undef'
+d_castneg='define'
+d_charvspr='undef'
+d_chown='undef'
+d_chroot='undef'
+d_chsize='define'
+d_closedir='define'
+d_const='define'
+d_crypt='undef'
+d_csh='undef'
+d_cuserid='undef'
+d_dbl_dig='define'
+d_difftime='define'
+d_dirnamlen='define'
+d_dlerror='define'
+d_dlopen='define'
+d_dlsymun='undef'
+d_dosuid='undef'
+d_drand48proto='undef'
+d_dup2='define'
+d_eaccess='undef'
+d_endgrent='undef'
+d_endhent='undef'
+d_endnent='undef'
+d_endpent='undef'
+d_endpwent='undef'
+d_endsent='undef'
+d_endspent='undef'
+d_eofnblk='define'
+d_eunice='undef'
+d_fchmod='undef'
+d_fchown='undef'
+d_fcntl='undef'
+d_fd_macros='define'
+d_fd_set='define'
+d_fds_bits='define'
+d_fgetpos='define'
+d_flexfnam='define'
+d_flock='undef'
+d_fork='undef'
+d_fpathconf='undef'
+d_fpos64_t='undef'
+d_fs_data_s='undef'
+d_fseeko='undef'
+d_fsetpos='define'
+d_fstatfs='undef'
+d_fstatvfs='undef'
+d_ftello='undef'
+d_ftime='define'
+d_getcwd='undef'
+d_getfsstat='undef'
+d_getgrent='undef'
+d_getgrps='undef'
+d_gethbyaddr='define'
+d_gethbyname='define'
+d_gethent='undef'
+d_gethname='define'
+d_gethostprotos='define'
+d_getlogin='define'
+d_getmnt='undef'
+d_getmntent='undef'
+d_getnbyaddr='undef'
+d_getnbyname='undef'
+d_getnent='undef'
+d_getnetprotos='undef'
+d_getpbyname='define'
+d_getpbynumber='define'
+d_getpent='undef'
+d_getpgid='undef'
+d_getpgrp2='undef'
+d_getpgrp='undef'
+d_getppid='undef'
+d_getprior='undef'
+d_getprotoprotos='define'
+d_getpwent='undef'
+d_getsbyname='define'
+d_getsbyport='define'
+d_getsent='undef'
+d_getservprotos='define'
+d_getspent='undef'
+d_getspnam='undef'
+d_gettimeod='undef'
+d_gnulibc='undef'
+d_grpasswd='undef'
+d_hasmntopt='undef'
+d_htonl='define'
+d_iconv='undef'
+d_index='undef'
+d_inetaton='undef'
+d_int64_t='undef'
+d_isascii='define'
+d_killpg='undef'
+d_lchown='undef'
+d_ldbl_dig='define'
+d_link='define'
+d_locconv='define'
+d_lockf='undef'
+d_longdbl='undef'
+d_longlong='undef'
+d_lseekproto='define'
+d_lstat='undef'
+d_madvise='undef'
+d_mblen='define'
+d_mbstowcs='define'
+d_mbtowc='define'
+d_memchr='define'
+d_memcmp='define'
+d_memcpy='define'
+d_memmove='define'
+d_memset='define'
+d_mkdir='define'
+d_mkdtemp='undef'
+d_mkfifo='undef'
+d_mkstemp='undef'
+d_mkstemps='undef'
+d_mktime='define'
+d_mmap='undef'
+d_mprotect='undef'
+d_msg='undef'
+d_msg_ctrunc='undef'
+d_msg_dontroute='undef'
+d_msg_oob='undef'
+d_msg_peek='undef'
+d_msg_proxy='undef'
+d_msgctl='undef'
+d_msgget='undef'
+d_msgrcv='undef'
+d_msgsnd='undef'
+d_msync='undef'
+d_munmap='undef'
+d_mymalloc='undef'
+d_nice='undef'
+d_nv_preserves_uv='define'
+d_off64_t='undef'
+d_old_pthread_create_joinable='undef'
+d_oldpthreads='undef'
+d_oldsock='undef'
+d_open3='undef'
+d_pathconf='undef'
+d_pause='define'
+d_phostname='undef'
+d_pipe='undef'
+d_poll='undef'
+d_portable='define'
+d_pthread_yield='undef'
+d_pwage='undef'
+d_pwchange='undef'
+d_pwclass='undef'
+d_pwcomment='undef'
+d_pwexpire='undef'
+d_pwgecos='undef'
+d_pwpasswd='undef'
+d_pwquota='undef'
+d_qgcvt='undef'
+d_quad='undef'
+d_readdir='define'
+d_readlink='undef'
+d_rename='define'
+d_rewinddir='define'
+d_rmdir='define'
+d_safebcpy='undef'
+d_safemcpy='undef'
+d_sanemcmp='define'
+d_sched_yield='undef'
+d_scm_rights='undef'
+d_seekdir='define'
+d_select='define'
+d_sem='undef'
+d_semctl='undef'
+d_semctl_semid_ds='undef'
+d_semctl_semun='undef'
+d_semget='undef'
+d_semop='undef'
+d_setegid='undef'
+d_seteuid='undef'
+d_setgrent='undef'
+d_setgrps='undef'
+d_sethent='undef'
+d_setlinebuf='undef'
+d_setlocale='undef'
+d_setnent='undef'
+d_setpent='undef'
+d_setpgid='undef'
+d_setpgrp2='undef'
+d_setpgrp='undef'
+d_setprior='undef'
+d_setpwent='undef'
+d_setregid='undef'
+d_setresgid='undef'
+d_setresuid='undef'
+d_setreuid='undef'
+d_setrgid='undef'
+d_setruid='undef'
+d_setsent='undef'
+d_setsid='undef'
+d_setspent='undef'
+d_setvbuf='undef'
+d_sfio='undef'
+d_shm='undef'
+d_shmat='undef'
+d_shmatprototype='undef'
+d_shmctl='undef'
+d_shmdt='undef'
+d_shmget='undef'
+d_sigaction='undef'
+d_sigsetjmp='undef'
+d_socket='define'
+d_socklen_t='undef'
+d_sockpair='undef'
+d_sqrtl='undef'
+d_statblks='undef'
+d_statfs_f_flags='undef'
+d_statfs_s='undef'
+d_statvfs='undef'
+d_stdio_cnt_lval='undef'
+d_stdio_ptr_lval='undef'
+d_stdio_stream_array='undef'
+d_stdiobase='undef'
+d_stdstdio='undef'
+d_strchr='define'
+d_strcoll='undef'
+d_strctcpy='define'
+d_strerrm='strerror(e)'
+d_strerror='define'
+d_strtod='define'
+d_strtol='define'
+d_strtold='undef'
+d_strtoll='undef'
+d_strtoul='define'
+d_strtoull='undef'
+d_strtouq='undef'
+d_strxfrm='undef'
+d_suidsafe='undef'
+d_symlink='undef'
+d_syscall='undef'
+d_sysconf='undef'
+d_sysernlst=''
+d_syserrlst='define'
+d_system='define'
+d_tcgetpgrp='undef'
+d_tcsetpgrp='undef'
+d_telldir='define'
+d_telldirproto='define'
+d_time='define'
+d_times='define'
+d_truncate='undef'
+d_tzname='define'
+d_umask='define'
+d_uname='define'
+d_union_semun='define'
+d_ustat='undef'
+d_vendorarch='undef'
+d_vendorbin='undef'
+d_vendorlib='undef'
+d_vfork='undef'
+d_void_closedir='undef'
+d_voidsig='define'
+d_voidtty=''
+d_volatile='define'
+d_vprintf='define'
+d_wait4='undef'
+d_waitpid='define'
+d_wcstombs='define'
+d_wctomb='define'
+d_xenix='undef'
+date='date'
+db_hashtype='int'
+db_prefixtype='int'
+defvoidused='15'
+direntrytype='struct direct'
+dlext='dll'
+dlsrc='dl_win32.xs'
+doublesize='8'
+drand01='(rand()/(double)((unsigned)1<<RANDBITS))'
+dynamic_ext='Socket IO Fcntl Opcode SDBM_File attrs Thread'
+eagain='EAGAIN'
+ebcdic='undef'
+echo='echo'
+egrep='egrep'
+emacs=''
+eunicefix=':'
+exe_ext='.exe'
+expr='expr'
+extensions='~static_ext~ ~dynamic_ext~ ~nonxs_ext~'
+fflushNULL='define'
+fflushall='undef'
+find='find'
+firstmakefile='makefile'
+flex=''
+fpossize='4'
+fpostype='fpos_t'
+freetype='void'
+full_ar=''
+full_csh=''
+full_sed=''
+gccversion=''
+gidformat='"ld"'
+gidsign='-1'
+gidsize='4'
+gidtype='gid_t'
+glibpth='/usr/shlib  /lib/pa1.1 /usr/lib/large /lib /usr/lib /usr/lib/386 /lib/386 /lib/large /usr/lib/small /lib/small /usr/ccs/lib /usr/ucblib /usr/shlib '
+grep='grep'
+groupcat=''
+groupstype='gid_t'
+gzip='gzip'
+h_fcntl='true'
+h_sysfile='true'
+hint='recommended'
+hostcat='ypcat hosts'
+huge=''
+i16size='2'
+i16type='short'
+i32size='4'
+i32type='long'
+i64size='8'
+i64type='__int64'
+i8size='1'
+i8type='char'
+i_arpainet='define'
+i_bsdioctl=''
+i_db='undef'
+i_dbm='undef'
+i_dirent='define'
+i_dld='undef'
+i_dlfcn='define'
+i_fcntl='define'
+i_float='define'
+i_gdbm='undef'
+i_grp='undef'
+i_iconv='undef'
+i_ieeefp='undef'
+i_inttypes='undef'
+i_limits='define'
+i_locale='undef'
+i_machcthr='undef'
+i_malloc='define'
+i_math='define'
+i_memory='undef'
+i_mntent='undef'
+i_ndbm='undef'
+i_netdb='undef'
+i_neterrno='undef'
+i_netinettcp='undef'
+i_niin='undef'
+i_poll='undef'
+i_pthread='undef'
+i_pwd='undef'
+i_rpcsvcdbm='define'
+i_sfio='undef'
+i_sgtty='undef'
+i_shadow='undef'
+i_socks='undef'
+i_stdarg='define'
+i_stddef='define'
+i_stdlib='define'
+i_string='define'
+i_sunmath='undef'
+i_sysaccess='undef'
+i_sysdir='undef'
+i_sysfile='undef'
+i_sysfilio='define'
+i_sysin='undef'
+i_sysioctl='undef'
+i_syslog='undef'
+i_sysmman='undef'
+i_sysmode='undef'
+i_sysmount='undef'
+i_sysndir='undef'
+i_sysparam='undef'
+i_sysresrc='undef'
+i_syssecrt='undef'
+i_sysselct='undef'
+i_syssockio='undef'
+i_sysstatfs='undef'
+i_sysstatvfs='undef'
+i_sysstat='define'
+i_systime='undef'
+i_systimek='undef'
+i_systimes='undef'
+i_systypes='undef'
+i_sysuio='undef'
+i_sysun='undef'
+i_sysutsname='undef'
+i_sysvfs='undef'
+i_syswait='undef'
+i_termio='undef'
+i_termios='undef'
+i_time='undef'
+i_unistd='undef'
+i_ustat='undef'
+i_utime='define'
+i_values='undef'
+i_varargs='undef'
+i_varhdr='varargs.h'
+i_vfork='undef'
+ignore_versioned_solibs=''
+inc_version_list=''
+inc_version_list_init='0'
+incpath=''
+inews=''
+installarchlib='~INST_TOP~~INST_VER~\lib~INST_ARCH~'
+installbin='~INST_TOP~~INST_VER~\bin~INST_ARCH~'
+installman1dir='~INST_TOP~~INST_VER~\man\man1'
+installman3dir='~INST_TOP~~INST_VER~\man\man3'
+installprefix='~INST_TOP~~INST_VER~'
+installprefixexp='~INST_TOP~~INST_VER~'
+installhtmldir='~INST_TOP~~INST_VER~\html'
+installhtmlhelpdir='~INST_TOP~~INST_VER~\htmlhelp'
+installprivlib='~INST_TOP~~INST_VER~\lib'
+installscript='~INST_TOP~~INST_VER~\bin'
+installsitearch='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~'
+installsitebin='~INST_TOP~~INST_VER~\bin~INST_ARCH~'
+installsitelib='~INST_TOP~\site~INST_VER~\lib'
+installstyle='lib'
+installusrbinperl='undef'
+installvendorarch=''
+installvendorbin=''
+installvendorlib=''
+intsize='4'
+ivdformat='"ld"'
+ivsize='4'
+ivtype='long'
+known_extensions='~static_ext~ ~dynamic_ext~ ~nonxs_ext~'
+ksh=''
+large=''
+ld='link'
+lddlflags='-dll ~LINK_FLAGS~'
+ldflags='~LINK_FLAGS~'
+ldlibpthname=''
+less='less'
+lib_ext='.lib'
+libc='msvcrt.lib'
+libperl='perl.lib'
+libpth=''
+libs=''
+libsdirs=''
+libsfiles=''
+libsfound=''
+libspath=''
+libswanted='net socket inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun m c cposix posix ndir dir crypt ucb bsd BSD PW x'
+line='line'
+lint=''
+lkflags=''
+ln=''
+lns='copy'
+locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include'
+loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib'
+longdblsize='10'
+longlongsize='8'
+longsize='4'
+lp=''
+lpr=''
+ls='dir'
+lseeksize='4'
+lseektype='long'
+mail=''
+mailx=''
+make='nmake'
+make_set_make='#'
+mallocobj='malloc.o'
+mallocsrc='malloc.c'
+malloctype='void *'
+man1dir='~INST_TOP~~INST_VER~\man\man1'
+man1direxp='~INST_TOP~~INST_VER~\man\man1'
+man1ext='1'
+man3dir='~INST_TOP~~INST_VER~\man\man3'
+man3direxp='~INST_TOP~~INST_VER~\man\man3'
+man3ext='3'
+medium=''
+mips_type=''
+mkdir='mkdir'
+mmaptype='void *'
+models='none'
+modetype='mode_t'
+more='more /e'
+multiarch='undef'
+mv=''
+myarchname='wince'
+mydomain=''
+myhostname=''
+myuname=''
+n='-n'
+netdb_hlen_type='int'
+netdb_host_type='char *'
+netdb_name_type='char *'
+netdb_net_type='long'
+nm=''
+nm_opt=''
+nm_so_opt=''
+nonxs_ext='Errno'
+nroff=''
+nveformat='"e"'
+nvfformat='"f"'
+nvgformat='"g"'
+nvsize='8'
+nvtype='double'
+o_nonblock='O_NONBLOCK'
+obj_ext='.obj'
+old_pthread_create_joinable=''
+optimize='-O'
+orderlib='false'
+# keep this for WinCE, as it is used by some mods...
+osname='MSWin32'
+osvers='4.0'
+package='perl5'
+pager='more /e'
+passcat=''
+patchlevel='~PATCHLEVEL~'
+path_sep=';'
+perl5=''
+perl='perl'
+perladmin=''
+perlpath='~INST_TOP~~INST_VER~\bin~INST_ARCH~\perl.exe'
+pg=''
+phostname='hostname'
+pidtype='int'
+plibpth=''
+pm_apiversion='5.005'
+pmake=''
+pr=''
+prefix='~INST_TOP~'
+prefixexp='~INST_DRV~'
+privlib='~INST_TOP~~INST_VER~\lib'
+privlibexp='~INST_TOP~~INST_VER~\lib'
+prototype='define'
+ptrsize='4'
+quadkind='5'
+quadtype='__int64'
+randbits='15'
+randfunc='rand'
+randseedtype='unsigned'
+ranlib='rem'
+rd_nodata='-1'
+revision='5'
+rm='del'
+rmail=''
+runnm='true'
+sig_size='0'
+sPRIEldbl='"E"'
+sPRIFldbl='"F"'
+sPRIGldbl='"G"'
+sPRIX64='"lX"'
+sPRId64='"ld"'
+sPRIeldbl='"e"'
+sPRIfldbl='"f"'
+sPRIgldbl='"g"'
+sPRIi64='"li"'
+sPRIo64='"lo"'
+sPRIu64='"lu"'
+sPRIx64='"lx"'
+sched_yield=''
+scriptdir='~INST_TOP~~INST_VER~\bin'
+scriptdirexp='~INST_TOP~~INST_VER~\bin'
+sed='sed'
+seedfunc='srand'
+selectminbits='32'
+selecttype='Perl_fd_set *'
+sendmail='blat'
+sh='cmd /x /c'
+shar=''
+sharpbang='#!'
+shmattype='void *'
+shortsize='2'
+shrpenv=''
+shsharp='true'
+sig_count='26'
+sig_name='ZERO NUM01 INT QUIT ILL NUM05 NUM06 NUM07 FPE KILL NUM10 SEGV NUM12 PIPE ALRM TERM NUM16 NUM17 NUM18 NUM19 CHLD BREAK ABRT STOP NUM24 CONT CLD'
+sig_name_init='"ZERO", "NUM01", "INT", "QUIT", "ILL", "NUM05", "NUM06", "NUM07", "FPE", "KILL", "NUM10", "SEGV", "NUM12", "PIPE", "ALRM", "TERM", "NUM16", "NUM17", "NUM18", "NUM19", "CHLD", "BREAK", "ABRT", "STOP", "NUM24", "CONT", "CLD", 0'
+sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 20 0'
+sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 20, 0'
+signal_t='void'
+sitearch='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~'
+sitearchexp='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~'
+sitebin='~INST_TOP~\site~INST_VER~\bin~INST_ARCH~'
+sitebinexp='~INST_TOP~\site~INST_VER~\bin~INST_ARCH~'
+sitelib='~INST_TOP~\site~INST_VER~\lib'
+sitelib_stem=''
+sitelibexp='~INST_TOP~\site~INST_VER~\lib'
+siteprefix='~INST_TOP~\site~INST_VER~'
+siteprefixexp='~INST_TOP~\site~INST_VER~'
+sizesize='4'
+sizetype='size_t'
+sleep=''
+smail=''
+small=''
+so='dll'
+sockethdr=''
+socketlib=''
+socksizetype='int'
+sort='sort'
+spackage='Perl5'
+spitshell=''
+split=''
+src=''
+ssizetype='int'
+startperl='#!perl'
+startsh='#!/bin/sh'
+static_ext='DynaLoader'
+stdchar='char'
+stdio_base=''
+stdio_bufsiz=''
+stdio_cnt=''
+stdio_filbuf=''
+stdio_ptr=''
+stdio_stream_array=''
+strings='/usr/include/string.h'
+submit=''
+subversion='~SUBVERSION~'
+sysman='/usr/man/man1'
+tail=''
+tar=''
+tbl=''
+tee=''
+test=''
+timeincl='/usr/include/sys/time.h '
+timetype='time_t'
+touch='touch'
+tr=''
+trnl='\012'
+troff=''
+u16size='2'
+u16type='unsigned short'
+u32size='4'
+u32type='unsigned long'
+u64size='8'
+u64type='unsigned __int64'
+u8size='1'
+u8type='unsigned char'
+uidformat='"ld"'
+uidsign='-1'
+uidsize='4'
+uidtype='uid_t'
+uname='uname'
+uniq='uniq'
+uquadtype='unsigned __int64'
+use5005threads='undef'
+use64bitall='undef'
+use64bitint='undef'
+usedl='define'
+useithreads='undef'
+uselargefiles='undef'
+uselongdouble='undef'
+usemorebits='undef'
+usemultiplicity='undef'
+usemymalloc='n'
+usenm='false'
+useopcode='true'
+useperlio='define'
+useposix='true'
+usesfio='false'
+useshrplib='yes'
+usesocks='undef'
+usethreads='undef'
+usevendorprefix='undef'
+usevfork='false'
+usrinc='/usr/include'
+uuname=''
+uvoformat='"lo"'
+uvsize='4'
+uvtype='unsigned long'
+uvuformat='"lu"'
+uvxformat='"lx"'
+vendorarch=''
+vendorarchexp=''
+vendorbin=''
+vendorbinexp=''
+vendorlib=''
+vendorlib_stem=''
+vendorlibexp=''
+vendorprefix=''
+vendorprefixexp=''
+version='~VERSION~'
+vi=''
+voidflags='15'
+xlibpth='/usr/lib/386 /lib/386'
+xs_apiversion='5.6.0'
+zcat=''
+zip='zip'
+PERL_REVISION='~PERL_REVISION~'
+PERL_SUBVERSION='~PERL_SUBVERSION~'
+PERL_VERSION='~PERL_VERSION~'
+PERL_API_REVISION='~PERL_API_REVISION~'
+PERL_API_SUBVERSION='~PERL_API_SUBVERSION~'
+PERL_API_VERSION='~PERL_API_VERSION~'
+PATCHLEVEL='~PERL_VERSION~'
+SUBVERSION='~PERL_SUBVERSION~'
diff --git a/wince/config.h b/wince/config.h
new file mode 100644 (file)
index 0000000..beee70f
--- /dev/null
@@ -0,0 +1,3462 @@
+/*\r
+ * This file was produced by running the config_h.SH script, which\r
+ * gets its values from undef, which is generally produced by\r
+ * running Configure.\r
+ *\r
+ * Feel free to modify any of this as the need arises.  Note, however,\r
+ * that running config_h.SH again will wipe out any changes you've made.\r
+ * For a more permanent change edit undef and rerun config_h.SH.\r
+ *\r
+ * $Id: Config_h.U,v 3.0.1.5 1997/02/28 14:57:43 ram Exp $\r
+ */\r
+\r
+/*\r
+ * Package name      : perl5\r
+ * Source directory  : \r
+ * Configuration time: Wed Aug  1 21:35:14 2001\r
+ * Configured by     : Rainer Keuchel\r
+ * Target system     : \r
+ */\r
+\r
+#ifndef _config_h_\r
+#define _config_h_\r
+\r
+/* LOC_SED:\r
+ *     This symbol holds the complete pathname to the sed program.\r
+ */\r
+#define LOC_SED        ""      /**/\r
+\r
+/* HAS_ALARM:\r
+ *     This symbol, if defined, indicates that the alarm routine is\r
+ *     available.\r
+ */\r
+/*#define HAS_ALARM            /**/\r
+\r
+/* HASATTRIBUTE:\r
+ *     This symbol indicates the C compiler can check for function attributes,\r
+ *     such as printf formats. This is normally only supported by GNU cc.\r
+ */\r
+/*#define HASATTRIBUTE         /**/\r
+#ifndef HASATTRIBUTE\r
+#define __attribute__(_arg_)\r
+#endif\r
+\r
+/* HAS_BCMP:\r
+ *     This symbol is defined if the bcmp() routine is available to\r
+ *     compare blocks of memory.\r
+ */\r
+/*#define HAS_BCMP     /**/\r
+\r
+/* HAS_BCOPY:\r
+ *     This symbol is defined if the bcopy() routine is available to\r
+ *     copy blocks of memory.\r
+ */\r
+/*#define HAS_BCOPY    /**/\r
+\r
+/* HAS_BZERO:\r
+ *     This symbol is defined if the bzero() routine is available to\r
+ *     set a memory block to 0.\r
+ */\r
+/*#define HAS_BZERO    /**/\r
+\r
+/* HAS_CHOWN:\r
+ *     This symbol, if defined, indicates that the chown routine is\r
+ *     available.\r
+ */\r
+/*#define HAS_CHOWN            /**/\r
+\r
+/* HAS_CHROOT:\r
+ *     This symbol, if defined, indicates that the chroot routine is\r
+ *     available.\r
+ */\r
+/*#define HAS_CHROOT           /**/\r
+\r
+/* HAS_CHSIZE:\r
+ *     This symbol, if defined, indicates that the chsize routine is available\r
+ *     to truncate files.  You might need a -lx to get this routine.\r
+ */\r
+#define        HAS_CHSIZE              /**/\r
+\r
+/* HASCONST:\r
+ *     This symbol, if defined, indicates that this C compiler knows about\r
+ *     the const type. There is no need to actually test for that symbol\r
+ *     within your programs. The mere use of the "const" keyword will\r
+ *     trigger the necessary tests.\r
+ */\r
+#define HASCONST       /**/\r
+#ifndef HASCONST\r
+#define const\r
+#endif\r
+\r
+/* HAS_CRYPT:\r
+ *     This symbol, if defined, indicates that the crypt routine is available\r
+ *     to encrypt passwords and the like.\r
+ */\r
+/*#define HAS_CRYPT            /**/\r
+\r
+/* HAS_CUSERID:\r
+ *     This symbol, if defined, indicates that the cuserid routine is\r
+ *     available to get character login names.\r
+ */\r
+/*#define HAS_CUSERID          /**/\r
+\r
+/* HAS_DBL_DIG:\r
+ *     This symbol, if defined, indicates that this system's <float.h>\r
+ *     or <limits.h> defines the symbol DBL_DIG, which is the number\r
+ *     of significant digits in a double precision number.  If this\r
+ *     symbol is not defined, a guess of 15 is usually pretty good.\r
+ */\r
+#define HAS_DBL_DIG    /**/\r
+\r
+/* HAS_DIFFTIME:\r
+ *     This symbol, if defined, indicates that the difftime routine is\r
+ *     available.\r
+ */\r
+#define HAS_DIFFTIME           /**/\r
+\r
+/* HAS_DLERROR:\r
+ *     This symbol, if defined, indicates that the dlerror routine is\r
+ *     available to return a string describing the last error that\r
+ *     occurred from a call to dlopen(), dlclose() or dlsym().\r
+ */\r
+#define HAS_DLERROR    /**/\r
+\r
+/* HAS_DUP2:\r
+ *     This symbol, if defined, indicates that the dup2 routine is\r
+ *     available to duplicate file descriptors.\r
+ */\r
+#define HAS_DUP2       /**/\r
+\r
+/* HAS_FCHMOD:\r
+ *     This symbol, if defined, indicates that the fchmod routine is available\r
+ *     to change mode of opened files.  If unavailable, use chmod().\r
+ */\r
+/*#define HAS_FCHMOD           /**/\r
+\r
+/* HAS_FCHOWN:\r
+ *     This symbol, if defined, indicates that the fchown routine is available\r
+ *     to change ownership of opened files.  If unavailable, use chown().\r
+ */\r
+/*#define HAS_FCHOWN           /**/\r
+\r
+/* HAS_FCNTL:\r
+ *     This symbol, if defined, indicates to the C program that\r
+ *     the fcntl() function exists.\r
+ */\r
+/*#define HAS_FCNTL            /**/\r
+\r
+/* HAS_FGETPOS:\r
+ *     This symbol, if defined, indicates that the fgetpos routine is\r
+ *     available to get the file position indicator, similar to ftell().\r
+ */\r
+#define HAS_FGETPOS    /**/\r
+\r
+/* HAS_FLOCK:\r
+ *     This symbol, if defined, indicates that the flock routine is\r
+ *     available to do file locking.\r
+ */\r
+/*#define HAS_FLOCK            /**/\r
+\r
+/* HAS_FORK:\r
+ *     This symbol, if defined, indicates that the fork routine is\r
+ *     available.\r
+ */\r
+/*#define HAS_FORK             /**/\r
+\r
+/* HAS_FSETPOS:\r
+ *     This symbol, if defined, indicates that the fsetpos routine is\r
+ *     available to set the file position indicator, similar to fseek().\r
+ */\r
+#define HAS_FSETPOS    /**/\r
+\r
+/* HAS_GETTIMEOFDAY:\r
+ *     This symbol, if defined, indicates that the gettimeofday() system\r
+ *     call is available for a sub-second accuracy clock. Usually, the file\r
+ *     <sys/resource.h> needs to be included (see I_SYS_RESOURCE).\r
+ *     The type "Timeval" should be used to refer to "struct timeval".\r
+ */\r
+/*#define HAS_GETTIMEOFDAY     /**/\r
+#ifdef HAS_GETTIMEOFDAY\r
+#define Timeval struct timeval /* Structure used by gettimeofday() */\r
+#endif\r
+\r
+/* HAS_GETGROUPS:\r
+ *     This symbol, if defined, indicates that the getgroups() routine is\r
+ *     available to get the list of process groups.  If unavailable, multiple\r
+ *     groups are probably not supported.\r
+ */\r
+/*#define HAS_GETGROUPS                /**/\r
+\r
+/* HAS_GETLOGIN:\r
+ *     This symbol, if defined, indicates that the getlogin routine is\r
+ *     available to get the login name.\r
+ */\r
+#define HAS_GETLOGIN           /**/\r
+\r
+/* HAS_GETPGID:\r
+ *     This symbol, if defined, indicates to the C program that \r
+ *     the getpgid(pid) function is available to get the\r
+ *     process group id.\r
+ */\r
+/*#define HAS_GETPGID          /**/\r
+\r
+/* HAS_GETPGRP2:\r
+ *     This symbol, if defined, indicates that the getpgrp2() (as in DG/UX)\r
+ *     routine is available to get the current process group.\r
+ */\r
+/*#define HAS_GETPGRP2         /**/\r
+\r
+/* HAS_GETPPID:\r
+ *     This symbol, if defined, indicates that the getppid routine is\r
+ *     available to get the parent process ID.\r
+ */\r
+/*#define HAS_GETPPID          /**/\r
+\r
+/* HAS_GETPRIORITY:\r
+ *     This symbol, if defined, indicates that the getpriority routine is\r
+ *     available to get a process's priority.\r
+ */\r
+/*#define HAS_GETPRIORITY              /**/\r
+\r
+/* HAS_INET_ATON:\r
+ *     This symbol, if defined, indicates to the C program that the\r
+ *     inet_aton() function is available to parse IP address "dotted-quad"\r
+ *     strings.\r
+ */\r
+/*#define HAS_INET_ATON                /**/\r
+\r
+/* HAS_KILLPG:\r
+ *     This symbol, if defined, indicates that the killpg routine is available\r
+ *     to kill process groups.  If unavailable, you probably should use kill\r
+ *     with a negative process number.\r
+ */\r
+/*#define HAS_KILLPG   /**/\r
+\r
+/* HAS_LINK:\r
+ *     This symbol, if defined, indicates that the link routine is\r
+ *     available to create hard links.\r
+ */\r
+#define HAS_LINK       /**/\r
+\r
+/* HAS_LOCALECONV:\r
+ *     This symbol, if defined, indicates that the localeconv routine is\r
+ *     available for numeric and monetary formatting conventions.\r
+ */\r
+#define HAS_LOCALECONV /**/\r
+\r
+/* HAS_LOCKF:\r
+ *     This symbol, if defined, indicates that the lockf routine is\r
+ *     available to do file locking.\r
+ */\r
+/*#define HAS_LOCKF            /**/\r
+\r
+/* HAS_LSTAT:\r
+ *     This symbol, if defined, indicates that the lstat routine is\r
+ *     available to do file stats on symbolic links.\r
+ */\r
+/*#define HAS_LSTAT            /**/\r
+\r
+/* HAS_MBLEN:\r
+ *     This symbol, if defined, indicates that the mblen routine is available\r
+ *     to find the number of bytes in a multibye character.\r
+ */\r
+#define HAS_MBLEN              /**/\r
+\r
+/* HAS_MBSTOWCS:\r
+ *     This symbol, if defined, indicates that the mbstowcs routine is\r
+ *     available to covert a multibyte string into a wide character string.\r
+ */\r
+#define        HAS_MBSTOWCS            /**/\r
+\r
+/* HAS_MBTOWC:\r
+ *     This symbol, if defined, indicates that the mbtowc routine is available\r
+ *     to covert a multibyte to a wide character.\r
+ */\r
+#define HAS_MBTOWC             /**/\r
+\r
+/* HAS_MEMCMP:\r
+ *     This symbol, if defined, indicates that the memcmp routine is available\r
+ *     to compare blocks of memory.\r
+ */\r
+#define HAS_MEMCMP     /**/\r
+\r
+/* HAS_MEMCPY:\r
+ *     This symbol, if defined, indicates that the memcpy routine is available\r
+ *     to copy blocks of memory.\r
+ */\r
+#define HAS_MEMCPY     /**/\r
+\r
+/* HAS_MEMMOVE:\r
+ *     This symbol, if defined, indicates that the memmove routine is available\r
+ *     to copy potentially overlapping blocks of memory. This should be used\r
+ *     only when HAS_SAFE_BCOPY is not defined. If neither is there, roll your\r
+ *     own version.\r
+ */\r
+#define HAS_MEMMOVE    /**/\r
+\r
+/* HAS_MEMSET:\r
+ *     This symbol, if defined, indicates that the memset routine is available\r
+ *     to set blocks of memory.\r
+ */\r
+#define HAS_MEMSET     /**/\r
+\r
+/* HAS_MKDIR:\r
+ *     This symbol, if defined, indicates that the mkdir routine is available\r
+ *     to create directories.  Otherwise you should fork off a new process to\r
+ *     exec /bin/mkdir.\r
+ */\r
+#define HAS_MKDIR              /**/\r
+\r
+/* HAS_MKFIFO:\r
+ *     This symbol, if defined, indicates that the mkfifo routine is\r
+ *     available to create FIFOs. Otherwise, mknod should be able to\r
+ *     do it for you. However, if mkfifo is there, mknod might require\r
+ *     super-user privileges which mkfifo will not.\r
+ */\r
+/*#define HAS_MKFIFO           /**/\r
+\r
+/* HAS_MKTIME:\r
+ *     This symbol, if defined, indicates that the mktime routine is\r
+ *     available.\r
+ */\r
+#define HAS_MKTIME             /**/\r
+\r
+/* HAS_MSYNC:\r
+ *     This symbol, if defined, indicates that the msync system call is\r
+ *     available to synchronize a mapped file.\r
+ */\r
+/*#define HAS_MSYNC            /**/\r
+\r
+/* HAS_MUNMAP:\r
+ *     This symbol, if defined, indicates that the munmap system call is\r
+ *     available to unmap a region, usually mapped by mmap().\r
+ */\r
+/*#define HAS_MUNMAP           /**/\r
+\r
+/* HAS_NICE:\r
+ *     This symbol, if defined, indicates that the nice routine is\r
+ *     available.\r
+ */\r
+/*#define HAS_NICE             /**/\r
+\r
+/* HAS_PATHCONF:\r
+ *     This symbol, if defined, indicates that pathconf() is available\r
+ *     to determine file-system related limits and options associated\r
+ *     with a given filename.\r
+ */\r
+/* HAS_FPATHCONF:\r
+ *     This symbol, if defined, indicates that pathconf() is available\r
+ *     to determine file-system related limits and options associated\r
+ *     with a given open file descriptor.\r
+ */\r
+/*#define HAS_PATHCONF         /**/\r
+/*#define HAS_FPATHCONF                /**/\r
+\r
+/* HAS_PAUSE:\r
+ *     This symbol, if defined, indicates that the pause routine is\r
+ *     available to suspend a process until a signal is received.\r
+ */\r
+#define HAS_PAUSE              /**/\r
+\r
+/* HAS_PIPE:\r
+ *     This symbol, if defined, indicates that the pipe routine is\r
+ *     available to create an inter-process channel.\r
+ */\r
+/*#define HAS_PIPE             /**/\r
+\r
+/* HAS_POLL:\r
+ *     This symbol, if defined, indicates that the poll routine is\r
+ *     available to poll active file descriptors. You may safely\r
+ *     include <poll.h> when this symbol is defined.\r
+ */\r
+/*#define HAS_POLL             /**/\r
+\r
+/* HAS_READDIR:\r
+ *     This symbol, if defined, indicates that the readdir routine is\r
+ *     available to read directory entries. You may have to include\r
+ *     <dirent.h>. See I_DIRENT.\r
+ */\r
+#define HAS_READDIR            /**/\r
+\r
+/* HAS_SEEKDIR:\r
+ *     This symbol, if defined, indicates that the seekdir routine is\r
+ *     available. You may have to include <dirent.h>. See I_DIRENT.\r
+ */\r
+#define HAS_SEEKDIR            /**/\r
+\r
+/* HAS_TELLDIR:\r
+ *     This symbol, if defined, indicates that the telldir routine is\r
+ *     available. You may have to include <dirent.h>. See I_DIRENT.\r
+ */\r
+#define HAS_TELLDIR            /**/\r
+\r
+/* HAS_REWINDDIR:\r
+ *     This symbol, if defined, indicates that the rewinddir routine is\r
+ *     available. You may have to include <dirent.h>. See I_DIRENT.\r
+ */\r
+#define HAS_REWINDDIR          /**/\r
+\r
+/* HAS_READLINK:\r
+ *     This symbol, if defined, indicates that the readlink routine is\r
+ *     available to read the value of a symbolic link.\r
+ */\r
+/*#define HAS_READLINK         /**/\r
+\r
+/* HAS_RENAME:\r
+ *     This symbol, if defined, indicates that the rename routine is available\r
+ *     to rename files.  Otherwise you should do the unlink(), link(), unlink()\r
+ *     trick.\r
+ */\r
+#define HAS_RENAME     /**/\r
+\r
+/* HAS_RMDIR:\r
+ *     This symbol, if defined, indicates that the rmdir routine is\r
+ *     available to remove directories. Otherwise you should fork off a\r
+ *     new process to exec /bin/rmdir.\r
+ */\r
+#define HAS_RMDIR              /**/\r
+\r
+/* HAS_SELECT:\r
+ *     This symbol, if defined, indicates that the select routine is\r
+ *     available to select active file descriptors. If the timeout field\r
+ *     is used, <sys/time.h> may need to be included.\r
+ */\r
+#define HAS_SELECT     /**/\r
+\r
+/* HAS_SETEGID:\r
+ *     This symbol, if defined, indicates that the setegid routine is available\r
+ *     to change the effective gid of the current program.\r
+ */\r
+/*#define HAS_SETEGID          /**/\r
+\r
+/* HAS_SETEUID:\r
+ *     This symbol, if defined, indicates that the seteuid routine is available\r
+ *     to change the effective uid of the current program.\r
+ */\r
+/*#define HAS_SETEUID          /**/\r
+\r
+/* HAS_SETLINEBUF:\r
+ *     This symbol, if defined, indicates that the setlinebuf routine is\r
+ *     available to change stderr or stdout from block-buffered or unbuffered\r
+ *     to a line-buffered mode.\r
+ */\r
+/*#define HAS_SETLINEBUF               /**/\r
+\r
+/* HAS_SETLOCALE:\r
+ *     This symbol, if defined, indicates that the setlocale routine is\r
+ *     available to handle locale-specific ctype implementations.\r
+ */\r
+/*#define HAS_SETLOCALE        /**/\r
+\r
+/* HAS_SETPGID:\r
+ *     This symbol, if defined, indicates that the setpgid(pid, gpid)\r
+ *     routine is available to set process group ID.\r
+ */\r
+/*#define HAS_SETPGID  /**/\r
+\r
+/* HAS_SETPGRP2:\r
+ *     This symbol, if defined, indicates that the setpgrp2() (as in DG/UX)\r
+ *     routine is available to set the current process group.\r
+ */\r
+/*#define HAS_SETPGRP2         /**/\r
+\r
+/* HAS_SETPRIORITY:\r
+ *     This symbol, if defined, indicates that the setpriority routine is\r
+ *     available to set a process's priority.\r
+ */\r
+/*#define HAS_SETPRIORITY              /**/\r
+\r
+/* HAS_SETREGID:\r
+ *     This symbol, if defined, indicates that the setregid routine is\r
+ *     available to change the real and effective gid of the current\r
+ *     process.\r
+ */\r
+/* HAS_SETRESGID:\r
+ *     This symbol, if defined, indicates that the setresgid routine is\r
+ *     available to change the real, effective and saved gid of the current\r
+ *     process.\r
+ */\r
+/*#define HAS_SETREGID         /**/\r
+/*#define HAS_SETRESGID                /**/\r
+\r
+/* HAS_SETREUID:\r
+ *     This symbol, if defined, indicates that the setreuid routine is\r
+ *     available to change the real and effective uid of the current\r
+ *     process.\r
+ */\r
+/* HAS_SETRESUID:\r
+ *     This symbol, if defined, indicates that the setresuid routine is\r
+ *     available to change the real, effective and saved uid of the current\r
+ *     process.\r
+ */\r
+/*#define HAS_SETREUID         /**/\r
+/*#define HAS_SETRESUID                /**/\r
+\r
+/* HAS_SETRGID:\r
+ *     This symbol, if defined, indicates that the setrgid routine is available\r
+ *     to change the real gid of the current program.\r
+ */\r
+/*#define HAS_SETRGID          /**/\r
+\r
+/* HAS_SETRUID:\r
+ *     This symbol, if defined, indicates that the setruid routine is available\r
+ *     to change the real uid of the current program.\r
+ */\r
+/*#define HAS_SETRUID          /**/\r
+\r
+/* HAS_SETSID:\r
+ *     This symbol, if defined, indicates that the setsid routine is\r
+ *     available to set the process group ID.\r
+ */\r
+/*#define HAS_SETSID   /**/\r
+\r
+/* Shmat_t:\r
+ *     This symbol holds the return type of the shmat() system call.\r
+ *     Usually set to 'void *' or 'char *'.\r
+ */\r
+/* HAS_SHMAT_PROTOTYPE:\r
+ *     This symbol, if defined, indicates that the sys/shm.h includes\r
+ *     a prototype for shmat().  Otherwise, it is up to the program to\r
+ *     guess one.  Shmat_t shmat _((int, Shmat_t, int)) is a good guess,\r
+ *     but not always right so it should be emitted by the program only\r
+ *     when HAS_SHMAT_PROTOTYPE is not defined to avoid conflicting defs.\r
+ */\r
+#define Shmat_t void * /**/\r
+/*#define HAS_SHMAT_PROTOTYPE  /**/\r
+\r
+/* HAS_STRCHR:\r
+ *     This symbol is defined to indicate that the strchr()/strrchr()\r
+ *     functions are available for string searching. If not, try the\r
+ *     index()/rindex() pair.\r
+ */\r
+/* HAS_INDEX:\r
+ *     This symbol is defined to indicate that the index()/rindex()\r
+ *     functions are available for string searching.\r
+ */\r
+#define HAS_STRCHR     /**/\r
+/*#define HAS_INDEX    /**/\r
+\r
+/* HAS_STRCOLL:\r
+ *     This symbol, if defined, indicates that the strcoll routine is\r
+ *     available to compare strings using collating information.\r
+ */\r
+/*#define HAS_STRCOLL  /**/\r
+\r
+/* USE_STRUCT_COPY:\r
+ *     This symbol, if defined, indicates that this C compiler knows how\r
+ *     to copy structures.  If undefined, you'll need to use a block copy\r
+ *     routine of some sort instead.\r
+ */\r
+#define        USE_STRUCT_COPY /**/\r
+\r
+/* HAS_STRTOD:\r
+ *     This symbol, if defined, indicates that the strtod routine is\r
+ *     available to provide better numeric string conversion than atof().\r
+ */\r
+#define HAS_STRTOD     /**/\r
+\r
+/* HAS_STRTOL:\r
+ *     This symbol, if defined, indicates that the strtol routine is available\r
+ *     to provide better numeric string conversion than atoi() and friends.\r
+ */\r
+#define HAS_STRTOL     /**/\r
+\r
+/* HAS_STRXFRM:\r
+ *     This symbol, if defined, indicates that the strxfrm() routine is\r
+ *     available to transform strings.\r
+ */\r
+/*#define HAS_STRXFRM  /**/\r
+\r
+/* HAS_SYMLINK:\r
+ *     This symbol, if defined, indicates that the symlink routine is available\r
+ *     to create symbolic links.\r
+ */\r
+/*#define HAS_SYMLINK  /**/\r
+\r
+/* HAS_SYSCALL:\r
+ *     This symbol, if defined, indicates that the syscall routine is\r
+ *     available to call arbitrary system calls. If undefined, that's tough.\r
+ */\r
+/*#define HAS_SYSCALL  /**/\r
+\r
+/* HAS_SYSCONF:\r
+ *     This symbol, if defined, indicates that sysconf() is available\r
+ *     to determine system related limits and options.\r
+ */\r
+/*#define HAS_SYSCONF  /**/\r
+\r
+/* HAS_SYSTEM:\r
+ *     This symbol, if defined, indicates that the system routine is\r
+ *     available to issue a shell command.\r
+ */\r
+#define HAS_SYSTEM     /**/\r
+\r
+/* HAS_TCGETPGRP:\r
+ *     This symbol, if defined, indicates that the tcgetpgrp routine is\r
+ *     available to get foreground process group ID.\r
+ */\r
+/*#define HAS_TCGETPGRP                /**/\r
+\r
+/* HAS_TCSETPGRP:\r
+ *     This symbol, if defined, indicates that the tcsetpgrp routine is\r
+ *     available to set foreground process group ID.\r
+ */\r
+/*#define HAS_TCSETPGRP                /**/\r
+\r
+/* HAS_TRUNCATE:\r
+ *     This symbol, if defined, indicates that the truncate routine is\r
+ *     available to truncate files.\r
+ */\r
+/*#define HAS_TRUNCATE /**/\r
+\r
+/* HAS_TZNAME:\r
+ *     This symbol, if defined, indicates that the tzname[] array is\r
+ *     available to access timezone names.\r
+ */\r
+#define HAS_TZNAME             /**/\r
+\r
+/* HAS_UMASK:\r
+ *     This symbol, if defined, indicates that the umask routine is\r
+ *     available to set and get the value of the file creation mask.\r
+ */\r
+#define HAS_UMASK              /**/\r
+\r
+/* HAS_USLEEP:\r
+ *     This symbol, if defined, indicates that the usleep routine is\r
+ *     available to let the process sleep on a sub-second accuracy.\r
+ */\r
+/*#define HAS_USLEEP           /**/\r
+\r
+/* HASVOLATILE:\r
+ *     This symbol, if defined, indicates that this C compiler knows about\r
+ *     the volatile declaration.\r
+ */\r
+#define        HASVOLATILE     /**/\r
+#ifndef HASVOLATILE\r
+#define volatile\r
+#endif\r
+\r
+/* HAS_WAIT4:\r
+ *     This symbol, if defined, indicates that wait4() exists.\r
+ */\r
+/*#define HAS_WAIT4    /**/\r
+\r
+/* HAS_WAITPID:\r
+ *     This symbol, if defined, indicates that the waitpid routine is\r
+ *     available to wait for child process.\r
+ */\r
+#define HAS_WAITPID    /**/\r
+\r
+/* HAS_WCSTOMBS:\r
+ *     This symbol, if defined, indicates that the wcstombs routine is\r
+ *     available to convert wide character strings to multibyte strings.\r
+ */\r
+#define HAS_WCSTOMBS   /**/\r
+\r
+/* HAS_WCTOMB:\r
+ *     This symbol, if defined, indicates that the wctomb routine is available\r
+ *     to covert a wide character to a multibyte.\r
+ */\r
+#define HAS_WCTOMB             /**/\r
+\r
+/* I_ARPA_INET:\r
+ *     This symbol, if defined, indicates to the C program that it should\r
+ *     include <arpa/inet.h> to get inet_addr and friends declarations.\r
+ */\r
+#define        I_ARPA_INET             /**/\r
+\r
+/* I_DBM:\r
+ *     This symbol, if defined, indicates that <dbm.h> exists and should\r
+ *     be included.\r
+ */\r
+/* I_RPCSVC_DBM:\r
+ *     This symbol, if defined, indicates that <rpcsvc/dbm.h> exists and\r
+ *     should be included.\r
+ */\r
+/*#define I_DBM        /**/\r
+#define I_RPCSVC_DBM   /**/\r
+\r
+/* I_DIRENT:\r
+ *     This symbol, if defined, indicates to the C program that it should\r
+ *     include <dirent.h>. Using this symbol also triggers the definition\r
+ *     of the Direntry_t define which ends up being 'struct dirent' or\r
+ *     'struct direct' depending on the availability of <dirent.h>.\r
+ */\r
+/* DIRNAMLEN:\r
+ *     This symbol, if defined, indicates to the C program that the length\r
+ *     of directory entry names is provided by a d_namlen field.  Otherwise\r
+ *     you need to do strlen() on the d_name field.\r
+ */\r
+/* Direntry_t:\r
+ *     This symbol is set to 'struct direct' or 'struct dirent' depending on\r
+ *     whether dirent is available or not. You should use this pseudo type to\r
+ *     portably declare your directory entries.\r
+ */\r
+#define I_DIRENT               /**/\r
+#define DIRNAMLEN      /**/\r
+#define Direntry_t struct direct\r
+\r
+/* I_DLFCN:\r
+ *     This symbol, if defined, indicates that <dlfcn.h> exists and should\r
+ *     be included.\r
+ */\r
+#define I_DLFCN                /**/\r
+\r
+/* I_FCNTL:\r
+ *     This manifest constant tells the C program to include <fcntl.h>.\r
+ */\r
+#define I_FCNTL        /**/\r
+\r
+/* I_FLOAT:\r
+ *     This symbol, if defined, indicates to the C program that it should\r
+ *     include <float.h> to get definition of symbols like DBL_MAX or\r
+ *     DBL_MIN, i.e. machine dependent floating point values.\r
+ */\r
+#define I_FLOAT                /**/\r
+\r
+/* I_LIMITS:\r
+ *     This symbol, if defined, indicates to the C program that it should\r
+ *     include <limits.h> to get definition of symbols like WORD_BIT or\r
+ *     LONG_MAX, i.e. machine dependant limitations.\r
+ */\r
+#define I_LIMITS               /**/\r
+\r
+/* I_LOCALE:\r
+ *     This symbol, if defined, indicates to the C program that it should\r
+ *     include <locale.h>.\r
+ */\r
+/*#define      I_LOCALE                /**/\r
+\r
+/* I_MATH:\r
+ *     This symbol, if defined, indicates to the C program that it should\r
+ *     include <math.h>.\r
+ */\r
+#define I_MATH         /**/\r
+\r
+/* I_MEMORY:\r
+ *     This symbol, if defined, indicates to the C program that it should\r
+ *     include <memory.h>.\r
+ */\r
+/*#define I_MEMORY             /**/\r
+\r
+/* I_NDBM:\r
+ *     This symbol, if defined, indicates that <ndbm.h> exists and should\r
+ *     be included.\r
+ */\r
+/*#define I_NDBM       /**/\r
+\r
+/* I_NET_ERRNO:\r
+ *     This symbol, if defined, indicates that <net/errno.h> exists and \r
+ *     should be included.\r
+ */\r
+/*#define I_NET_ERRNO          /**/\r
+\r
+/* I_NETINET_IN:\r
+ *     This symbol, if defined, indicates to the C program that it should\r
+ *     include <netinet/in.h>. Otherwise, you may try <sys/in.h>.\r
+ */\r
+/*#define I_NETINET_IN /**/\r
+\r
+/* I_SFIO:\r
+ *     This symbol, if defined, indicates to the C program that it should\r
+ *     include <sfio.h>.\r
+ */\r
+/*#define      I_SFIO          /**/\r
+\r
+/* I_STDDEF:\r
+ *     This symbol, if defined, indicates that <stddef.h> exists and should\r
+ *     be included.\r
+ */\r
+#define I_STDDEF       /**/\r
+\r
+/* I_STDLIB:\r
+ *     This symbol, if defined, indicates that <stdlib.h> exists and should\r
+ *     be included.\r
+ */\r
+#define I_STDLIB               /**/\r
+\r
+/* I_STRING:\r
+ *     This symbol, if defined, indicates to the C program that it should\r
+ *     include <string.h> (USG systems) instead of <strings.h> (BSD systems).\r
+ */\r
+#define I_STRING               /**/\r
+\r
+/* I_SYS_DIR:\r
+ *     This symbol, if defined, indicates to the C program that it should\r
+ *     include <sys/dir.h>.\r
+ */\r
+/*#define I_SYS_DIR            /**/\r
+\r
+/* I_SYS_FILE:\r
+ *     This symbol, if defined, indicates to the C program that it should\r
+ *     include <sys/file.h> to get definition of R_OK and friends.\r
+ */\r
+/*#define I_SYS_FILE           /**/\r
+\r
+/* I_SYS_IOCTL:\r
+ *     This symbol, if defined, indicates that <sys/ioctl.h> exists and should\r
+ *     be included. Otherwise, include <sgtty.h> or <termio.h>.\r
+ */\r
+/* I_SYS_SOCKIO:\r
+ *     This symbol, if defined, indicates the <sys/sockio.h> should be included\r
+ *     to get socket ioctl options, like SIOCATMARK.\r
+ */\r
+/*#define      I_SYS_IOCTL             /**/\r
+/*#define I_SYS_SOCKIO /**/\r
+\r
+/* I_SYS_NDIR:\r
+ *     This symbol, if defined, indicates to the C program that it should\r
+ *     include <sys/ndir.h>.\r
+ */\r
+/*#define I_SYS_NDIR   /**/\r
+\r
+/* I_SYS_PARAM:\r
+ *     This symbol, if defined, indicates to the C program that it should\r
+ *     include <sys/param.h>.\r
+ */\r
+/*#define I_SYS_PARAM          /**/\r
+\r
+/* I_SYS_RESOURCE:\r
+ *     This symbol, if defined, indicates to the C program that it should\r
+ *     include <sys/resource.h>.\r
+ */\r
+/*#define I_SYS_RESOURCE               /**/\r
+\r
+/* I_SYS_SELECT:\r
+ *     This symbol, if defined, indicates to the C program that it should\r
+ *     include <sys/select.h> in order to get definition of struct timeval.\r
+ */\r
+/*#define I_SYS_SELECT /**/\r
+\r
+/* I_SYS_STAT:\r
+ *     This symbol, if defined, indicates to the C program that it should\r
+ *     include <sys/stat.h>.\r
+ */\r
+#define        I_SYS_STAT              /**/\r
+\r
+/* I_SYS_TIMES:\r
+ *     This symbol, if defined, indicates to the C program that it should\r
+ *     include <sys/times.h>.\r
+ */\r
+/*#define      I_SYS_TIMES             /**/\r
+\r
+/* I_SYS_TYPES:\r
+ *     This symbol, if defined, indicates to the C program that it should\r
+ *     include <sys/types.h>.\r
+ */\r
+/*#define      I_SYS_TYPES             /**/\r
+\r
+/* I_SYS_UN:\r
+ *     This symbol, if defined, indicates to the C program that it should\r
+ *     include <sys/un.h>