This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
integrate changes#6613..6616,6620..6665 from mainline
authorGurusamy Sarathy <gsar@cpan.org>
Mon, 27 Nov 2000 14:13:05 +0000 (14:13 +0000)
committerGurusamy Sarathy <gsar@cpan.org>
Mon, 27 Nov 2000 14:13:05 +0000 (14:13 +0000)
VMS configure.com update continues.

Subject: Test fails / warnings with perl-current #6612

Subject: [PATCH] @+, @- readonly (was Re: @<punct> interpolating in "")

Subject: Re: [ID 20000807.003] [PATCH] Debugger treatment of condition "0"

For now remove the mail code.

Subject: Re: [PATCH] @+, @- readonly

Subject: warning: storage class after type is obsolescent

Subject: sfio2000

Subject: Re: File::Temp problems on VMS in bleedperl

README.os2 update.
Subject: Re: [PATCH perl-current] Make op/sprintf.t more comprehensive,

Make the user to give up his firstborn, err, to knowingly
verify installing an unstable developer release.  Also bump
the release to 5.7.0, but leave a patch tag in the local
patches saying that this is not yet the real thing.

Update (kinda) to Test 1.14, from Joshua Pritikin.

make ok etc also for win32.

Subject: [ID 20000815.005] [PATCH] perldoc not looking in the right place for script pod

Don't blow limited stacks, a lower number is enough to
tickle the lookbehind limit.

Use -Dusedevel; regen Configure and the respective Porting stuff.

Subject: [PATCH] debugger exit code should reflect user exit code

Subject: [PATCH perl@6620] cygwin port

Missed a file from #6638.

Subject: [PATCH] for t/lib/peek.t (was Re: [ID 20000814.005] Not OK: perl v5.6.0 on i686-linux-64int 2.2.13)

magic callbacks all need to have same type signature

Subject: [ID 20000815.014] [PATCH] INSTALL doesn't mention 64 bit support.

Fix a dependency problem.
Subject: [PATCH: 6640] VMS Makefile.SH update

The numeric locale was reset to "C" by s?printf and never restored.
Subject: [ID 20000809.003] setlocale(LC_NUMERIC...) produces different results in 5.005 and 5.6
No test since adding the failing example to locale.t
does not fail -- probably because the locale settings are so
thoroughly tweaked by that time.  Running the example standalone
does fail, though.  UPDATE: test case added at change #7540.

Subject: [ID 20000324.040] minor fix to perlhpux.pod

Update to CPAN 1.57.

Subject: [PATCH] Cwd::_backtick_pwd does not check return value

Change the perlbug address to perl.org since it's more forgiving.

Change the regx compilation error markers to use = instead of <
since pod makes using the latter quite messy.  Reported in
ID 20000814.006 by Abigail and in
Subject: Unknown escape E<> ?

Update to perldebtut 1.9, from Richard Foley.

check that the number pseudo children doesn't exceed
MAXIMUM_WAIT_OBJECTS, which is currently 64 (avoids overflowing
the WaitForMultipleObjects() limit that would cause wait()
to crash)
wait() and waitpid() could potentially be rewritten to use
more than one thread to do the waiting to eliminate this
limitation

change#6328 could make close(SOCKET) return false on windows
when it shouldn't

pod nit seen in passing

on windows, the return values from wait() and waitpid() don't
match those of pseudo-pids

waitpid() now handles externally spawned pids correctly;
fixes for backtick/wait/waitpid failures on Windows 9x
these changes make the pid returned by process functions on
Windows 9x always positive by clearing the high bit (which
is always set on Win9x); pseudo-process PIDs are likewise
always negative now on Win9x (just as on NT/2000)

trailing new %ENV entries weren't being pushed into the real
environment of subprocesses on Windows

Tweak the regex compilation errors once more.

avoid warnings from dense compiler

add "ok" targets from change#6632 in makefile.mk

p4raw-link: @7540 on //depot/perl: dd8482fcac1d87406d052ae3262cc452d6d23e15
p4raw-link: @6665 on //depot/perl: a6f858fb2719161c2b122286fdbda3043da1ded3
p4raw-link: @6632 on //depot/perl: 017e10814b1e1d25c7506a0b0903863aee5cb0ca
p4raw-link: @6620 on //depot/perl: a29d06eddb19ab1d6c524328bb98500ebb28dcdb
p4raw-link: @6616 on //depot/perl: 3170649431eb5688b22560d1c824cf4b7252a79c
p4raw-link: @6613 on //depot/perl: 570bb66edbdc88644c2ce13efdf5f85f3d05be88
p4raw-link: @6328 on //depot/perl: 4e94524934c1af4124b2888d9716e5304ee50ad9

p4raw-id: //depot/maint-5.6/perl@7887
p4raw-deleted: from //depot/perl@7885 'delete in' lib/Pod/PlainText.pm
(@6600..) vms/configure.com (@6603..)
p4raw-integrated: from //depot/perl@7885 'copy in' regcomp.pl (@3372..)
jpl/README (@4159..) globvar.sym (@4602..) XSUB.h (@5008..)
pod/perlcompile.pod (@5917..) regnodes.h (@6355..)
t/pragma/warn/regcomp (@6653..)
p4raw-integrated: from //depot/perl@6665 'copy in' pod/perlport.pod
(@6638..) 'merge in' win32/makefile.mk (@6375..) win32/Makefile
(@6632..)
p4raw-integrated: from //depot/perl@6664 'copy in' win32/win32.c
(@6661..)
p4raw-integrated: from //depot/perl@6663 'copy in' regcomp.c
t/op/misc.t t/op/re_tests (@6653..) 'edit in' t/op/regmesg.t
(@6653..) 'merge in' pod/perldiag.pod (@6653..)
p4raw-integrated: from //depot/perl@6662 'copy in' t/op/magic.t
(@5712..) win32/perlhost.h (@6661..)
p4raw-integrated: from //depot/perl@6661 'merge in' pp_sys.c (@6659..)
p4raw-integrated: from //depot/perl@6660 'copy in' Porting/Glossary
Porting/config.sh Porting/config_H t/op/sprintf.t (@6645..)
'edit in' Configure (@6645..) sv.c (@6648..) 'ignore'
config_h.SH (@6645..) 'merge in' pod/perlfunc.pod (@6658..)
p4raw-integrated: from //depot/perl@6659 'copy in' t/op/fork.t
(@5266..) 'merge in' util.c (@6562..)
p4raw-integrated: from //depot/perl@6657 'copy in' win32/win32sck.c
(@6375..)
p4raw-integrated: from //depot/perl@6654 'copy in' pod/perldebtut.pod
(@6599..)
p4raw-integrated: from //depot/perl@6652 'copy in' utils/perlbug.PL
(@6451..)
p4raw-integrated: from //depot/perl@6651 'copy in' lib/Cwd.pm (@6537..)
p4raw-integrated: from //depot/perl@6650 'copy in' lib/CPAN.pm
(@6609..)
p4raw-integrated: from //depot/perl@6649 'copy in' README.hpux
(@6470..)
p4raw-integrated: from //depot/perl@6648 'copy in' dump.c (@6516..)
pp_ctl.c (@6532..) 'edit in' perl.h (@6620..) 'merge in' pp.c
(@6545..)
p4raw-integrated: from //depot/perl@6646 'copy in'
vms/descrip_mms.template (@6414..)
p4raw-integrated: from //depot/perl@6644 'copy in' INSTALL (@6001..)
p4raw-integrated: from //depot/perl@6643 'copy in' lib/CGI.pm (@6611..)
p4raw-integrated: from //depot/perl@6642 'edit in' embed.pl mg.c
proto.h (@6629..)
p4raw-integrated: from //depot/perl@6641 'edit in' t/lib/peek.t
(@6614..)
p4raw-integrated: from //depot/perl@6639 'edit in' lib/File/Temp.pm
(@6626..)
p4raw-integrated: from //depot/perl@6638 'copy in' README.cygwin
hints/cygwin.sh (@6564..) 'edit in' t/lib/b.t (@6614..)
p4raw-integrated: from //depot/perl@6637 'edit in' lib/perl5db.pl
(@6616..)
p4raw-integrated: from //depot/perl@6633 'copy in' utils/perldoc.PL
(@6005..)
p4raw-integrated: from //depot/perl@6631 'copy in' lib/Test.pm
(@4860..)
p4raw-integrated: from //depot/perl@6627 'copy in' README.os2 (@5917..)
p4raw-integrated: from //depot/perl@6626 'copy in'
t/lib/ftmp-tempfile.t (@6169..)
p4raw-integrated: from //depot/perl@6624 'copy in' perlsdio.h (@4769..)
perlsfio.h (@6143..)
p4raw-integrated: from //depot/perl@6620 'copy in' embed.h (@6528..)
'edit in' gv.c t/op/pat.t (@6615..)
p4raw-integrated: from //depot/perl@6618 'merge in' perl.c (@6547..)
p4raw-integrated: from //depot/perl@6617 'copy in'
lib/ExtUtils/Embed.pm (@4720..) pod/perlfaq8.pod (@5493..)
pod/perlsec.pod (@5822..)
p4raw-integrated: from //depot/perl@6613 'copy in' configure.com
(@5769..) 'merge in' MANIFEST (@6603..)

63 files changed:
Configure
INSTALL
MANIFEST
Porting/Glossary
Porting/config.sh
Porting/config_H
README.cygwin
README.hpux
README.os2
configure.com
dump.c
embed.h
embed.pl
gv.c
hints/cygwin.sh
jpl/README
lib/CPAN.pm
lib/Cwd.pm
lib/ExtUtils/Embed.pm
lib/File/Temp.pm
lib/Pod/PlainText.pm [deleted file]
lib/Test.pm
lib/perl5db.pl
mg.c
perl.c
perl.h
perlsdio.h
perlsfio.h
pod/perlcompile.pod
pod/perldebtut.pod
pod/perldiag.pod
pod/perlfaq8.pod
pod/perlfunc.pod
pod/perlport.pod
pod/perlsec.pod
pp.c
pp_ctl.c
pp_sys.c
proto.h
regcomp.c
regcomp.pl
regnodes.h
sv.c
t/lib/b.t
t/lib/ftmp-tempfile.t
t/lib/peek.t
t/op/fork.t
t/op/magic.t
t/op/misc.t
t/op/pat.t
t/op/re_tests
t/op/regmesg.t
t/pragma/warn/regcomp
util.c
utils/perlbug.PL
utils/perldoc.PL
vms/configure.com [deleted file]
vms/descrip_mms.template
win32/Makefile
win32/makefile.mk
win32/perlhost.h
win32/win32.c
win32/win32sck.c

index 1c7764d..ac3cfa7 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 Sat Aug  5 00:21:09 EET DST 2000 [metaconfig 3.0 PL70]
+# Generated on Thu Aug 17 02:52:39 EET DST 2000 [metaconfig 3.0 PL70]
 # (with additional metaconfig patches by perlbug@perl.com)
 
 cat >/tmp/c1$$ <<EOF
@@ -1758,6 +1758,40 @@ persist across sessions for $package.
 You may safely delete it if you wish.
 EOF
 
+xpatchlevel=`awk '/define[     ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
+case "$usedevel" in
+$define|true|[yY]*) ;;
+*) case "$xpatchlevel" in
+   *[13579])
+       cat >&4 <<EOH
+*** WHOA THERE!!! ***
+
+    This is an UNSTABLE DEVELOPMENT release.
+    (The patchlevel, $xpatchlevel, is odd--as opposed to even,
+     and that signifies a development release.  If you want a
+     maintenance release, you want an even-numbered release.)
+
+    Do ***NOT*** install this into production use.
+    Data corruption and crashes are possible.
+
+    It is most seriously suggested that you do not continue any further
+    unless you want to help in developing and debugging Perl.
+
+EOH
+       rp='Do you really want to continue?'
+       dflt='n'
+       . ./myread
+       case "$ans" in
+       [yY]) echo >&4 "Okay, continuing." ;;
+       *) echo >&4 "Okay, bye."
+          exit 1
+          ;;
+       esac
+       ;;
+    esac
+    ;;
+esac
+
 : general instructions
 needman=true
 firsttime=true
diff --git a/INSTALL b/INSTALL
index 2b21edb..21eaa0a 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -670,6 +670,52 @@ or by
 Eventually (by perl v5.6.0) this internal confusion ought to disappear,
 and these options may disappear as well.
 
+=head2 64 bit support.
+
+If your platform does not have 64 bits natively, but can simulate them with
+compiler flags and/or C<long long> or C<int64_t>, you can build a perl that
+uses 64 bits.
+
+There are actually two modes of 64-bitness: the first one is achieved
+using Configure -Duse64bitint and the second one using Configure
+-Duse64bitall.  The difference is that the first one is minimal and
+the second one maximal.  The first works in more places than the second.
+
+The C<use64bitint> does only as much as is required to get 64-bit
+integers into Perl (this may mean, for example, using "long longs")
+while your memory may still be limited to 2 gigabytes (because your
+pointers could still be 32-bit).  Note that the name C<64bitint> does
+not imply that your C compiler will be using 64-bit C<int>s (it might,
+but it doesn't have to): the C<use64bitint> means that you will be
+able to have 64 bits wide scalar values.
+
+The C<use64bitall> goes all the way by attempting to switch also
+integers (if it can), longs (and pointers) to being 64-bit.  This may
+create an even more binary incompatible Perl than -Duse64bitint: the
+resulting executable may not run at all in a 32-bit box, or you may
+have to reboot/reconfigure/rebuild your operating system to be 64-bit
+aware.
+
+Natively 64-bit systems like Alpha and Cray need neither -Duse64bitint
+nor -Duse64bitall.
+
+    NOTE: 64-bit support is still experimental on most platforms.
+    Existing support only covers the LP64 data model.  In particular, the
+    LLP64 data model is not yet supported.  64-bit libraries and system
+    APIs on many platforms have not stabilized--your mileage may vary.
+
+=head2 Long doubles
+
+In some systems you may be able to use long doubles to enhance the
+range and precision of your double precision floating point numbers
+(that is, Perl's numbers).  Use Configure -Duselongdouble to enable
+this support (if it is available).
+
+=head2 "more bits"
+
+You can "Configure -Dusemorebits" to turn on both the 64-bit support
+and the long double support.
+
 =head2 Selecting File IO mechanisms
 
 Previous versions of perl used the standard IO mechanisms as defined in
index 12aec29..fe638c3 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -1589,7 +1589,6 @@ utils/splain.PL           Stand-alone version of diagnostics.pm
 vmesa/Makefile         VM/ESA Makefile
 vmesa/vmesa.c          VM/ESA-specific C code for Perl core
 vmesa/vmesaish.h       VM/ESA-specific C header for Perl core
-vms/configure.com      performs compiler checks and writes config.sh, config.h, and descrip.mms
 vms/descrip_mms.template               Template MM[SK] description file for build
 vms/ext/DCLsym/0README.txt     ReadMe file for VMS::DCLsym
 vms/ext/DCLsym/DCLsym.pm       Perl access to CLI symbols
index f1e7b8e..f289baa 100644 (file)
@@ -175,6 +175,7 @@ cc (cc.U):
        This variable holds the name of a command to execute a C compiler which
        can resolve multiple global references that happen to have the same
        name.  Usual values are 'cc', 'Mcc', 'cc -M', and 'gcc'.
+       Fervent ANSI compilers may be called 'c89'. AIX has xlc.
 
 cccdlflags (dlsrc.U):
        This variable contains any special flags that might need to be
@@ -192,6 +193,10 @@ ccflags (ccflags.U):
        This variable contains any additional C compiler flags desired by
        the user.  It is up to the Makefile to use this.
 
+ccflags_uselargefiles (uselfs.U):
+       This variable contains the compiler flags needed by large file builds
+       and added to ccflags by hints files.
+
 ccsymbols (Cppsym.U):
        The variable contains the symbols defined by the C compiler alone.
        The symbols defined by cpp or by cc when it calls cpp are not in
@@ -1312,6 +1317,11 @@ d_setprior (d_setprior.U):
        This variable conditionally defines HAS_SETPRIORITY if setpriority()
        is available to set a process's priority.
 
+d_setproctitle (d_setproctitle.U):
+       This variable conditionally defines the HAS_SETPROCTITLE symbol,
+       which indicates to the C program that the setproctitle() routine
+       is available.
+
 d_setpwent (d_setpwent.U):
        This variable conditionally defines the HAS_SETPWENT symbol, which
        indicates to the C program that the setpwent() routine is available
@@ -1803,7 +1813,12 @@ full_sed (Loc_sed.U):
        can share this executable will have the same full pathname to
        'sed.'
 
-gccversion (cc.U):
+gccosandvers (gccvers.U):
+       If GNU cc (gcc) is used, this variable the operating system and
+       version used to compile the gcc.  It is set to '' if not gcc,
+       or if nothing useful can be parsed as the os version.
+
+gccversion (gccvers.U):
        If GNU cc (gcc) is used, this variable holds '1' or '2' to 
        indicate whether the compiler is version 1 or 2.  This is used in
        setting some of the default cflags.  It is set to '' if not gcc.
@@ -1962,6 +1977,10 @@ i_inttypes (i_inttypes.U):
        This variable conditionally defines the I_INTTYPES symbol,
        and indicates whether a C program should include <inttypes.h>.
 
+i_libutil (i_libutil.U):
+       This variable conditionally defines the I_LIBUTIL symbol, and indicates
+       whether a C program should include <libutil.h>.
+
 i_limits (i_limits.U):
        This variable conditionally defines the I_LIMITS symbol, and indicates
        whether a C program may include <limits.h> to get symbols like WORD_BIT
@@ -2406,6 +2425,10 @@ ldflags (ccflags.U):
        This variable contains any additional C loader flags desired by
        the user.  It is up to the Makefile to use this.
 
+ldflags_uselargefiles (uselfs.U):
+       This variable contains the loader flags needed by large file builds
+       and added to ldflags by hints files.
+
 ldlibpthname (libperl.U):
        This variable holds the name of the shared library
        search path, often LD_LIBRARY_PATH.  To get an empty
@@ -2458,6 +2481,12 @@ libswanted (Myinit.U):
        search.  The order is chosen to pick up the c library
        ahead of ucb or bsd libraries for SVR4.
 
+libswanted_uselargefiles (uselfs.U):
+       This variable contains the libraries needed by large file builds
+       and added to ldflags by hints files.  It is a space separated list
+       of the library names without the "lib" prefix or any suffix, just
+       like libswanted..
+
 line (Loc.U):
        This variable is defined but not used by Configure.
        The value is a plain '' and is not useful.
index c9e9f71..a6c619f 100644 (file)
@@ -7,8 +7,8 @@
 #
 
 # Package name      : perl5
-# Source directory  : .
-# Configuration time: Wed May 31 01:48:08 EET DST 2000
+# Source directory  : /m/fs/work/work/permanent/perl/pp4/perl
+# Configuration time: Thu Aug 17 02:55:55 EET DST 2000
 # Configured by     : jhi
 # Target system     : osf1 alpha.hut.fi v4.0 878 alpha 
 
@@ -35,10 +35,10 @@ api_subversion='0'
 api_version='5'
 api_versionstring='5.005'
 ar='ar'
-archlib='/opt/perl/lib/5.6.0/alpha-dec_osf-thread-multi'
-archlibexp='/opt/perl/lib/5.6.0/alpha-dec_osf-thread-multi'
+archlib='/opt/perl/lib/5.7.0/alpha-dec_osf-thread'
+archlibexp='/opt/perl/lib/5.7.0/alpha-dec_osf-thread'
 archname64=''
-archname='alpha-dec_osf-thread-multi'
+archname='alpha-dec_osf-thread'
 archobjs=''
 awk='awk'
 baserev='5.0'
@@ -54,12 +54,13 @@ castflags='0'
 cat='cat'
 cc='cc'
 cccdlflags=' '
-ccdlflags='  -Wl,-rpath,/opt/perl/lib/5.6.0/alpha-dec_osf-thread-multi/CORE'
+ccdlflags='  -Wl,-rpath,/opt/perl/lib/5.7.0/alpha-dec_osf-thread/CORE'
 ccflags='-pthread -std -DLANGUAGE_C'
+ccflags_uselargefiles=''
 ccsymbols='__alpha=1 __LANGUAGE_C__=1 __osf__=1 __unix__=1 _LONGLONG=1 _SYSTYPE_BSD=1 SYSTYPE_BSD=1 unix=1'
 cf_by='jhi'
 cf_email='yourname@yourhost.yourplace.com'
-cf_time='Wed May 31 01:48:08 EET DST 2000'
+cf_time='Thu Aug 17 02:55:55 EET DST 2000'
 charsize='1'
 chgrp=''
 chmod=''
@@ -301,6 +302,7 @@ d_setpgid='define'
 d_setpgrp2='undef'
 d_setpgrp='define'
 d_setprior='define'
+d_setproctitle='undef'
 d_setpwent='define'
 d_setregid='define'
 d_setresgid='undef'
@@ -409,6 +411,7 @@ freetype='void'
 full_ar='/usr/bin/ar'
 full_csh='/usr/bin/csh'
 full_sed='/usr/bin/sed'
+gccosandvers=''
 gccversion=''
 gidformat='"u"'
 gidsign='1'
@@ -446,6 +449,7 @@ i_grp='define'
 i_iconv='define'
 i_ieeefp='undef'
 i_inttypes='undef'
+i_libutil='undef'
 i_limits='define'
 i_locale='define'
 i_machcthr='undef'
@@ -515,17 +519,17 @@ inc_version_list=' '
 inc_version_list_init='0'
 incpath=''
 inews=''
-installarchlib='/opt/perl/lib/5.6.0/alpha-dec_osf-thread-multi'
+installarchlib='/opt/perl/lib/5.7.0/alpha-dec_osf-thread'
 installbin='/opt/perl/bin'
 installman1dir='/opt/perl/man/man1'
 installman3dir='/opt/perl/man/man3'
 installprefix='/opt/perl'
 installprefixexp='/opt/perl'
-installprivlib='/opt/perl/lib/5.6.0'
+installprivlib='/opt/perl/lib/5.7.0'
 installscript='/opt/perl/bin'
-installsitearch='/opt/perl/lib/site_perl/5.6.0/alpha-dec_osf-thread-multi'
+installsitearch='/opt/perl/lib/site_perl/5.7.0/alpha-dec_osf-thread'
 installsitebin='/opt/perl/bin'
-installsitelib='/opt/perl/lib/site_perl/5.6.0'
+installsitelib='/opt/perl/lib/site_perl/5.7.0'
 installstyle='lib'
 installusrbinperl='define'
 installvendorarch=''
@@ -541,18 +545,20 @@ large=''
 ld='ld'
 lddlflags='-shared -expect_unresolved "*" -msym -std -s'
 ldflags=''
+ldflags_uselargefiles=''
 ldlibpthname='LD_LIBRARY_PATH'
 less='less'
 lib_ext='.a'
 libc='/usr/shlib/libc.so'
 libperl='libperl.so'
 libpth='/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /var/shlib'
-libs='-lgdbm -ldbm -ldb -lm -liconv -lpthread -lexc'
+libs='-lgdbm -ldbm -ldb -lm -liconv -lutil -lpthread -lexc'
 libsdirs=' /usr/shlib /usr/ccs/lib'
-libsfiles=' libgdbm.so libdbm.a libdb.so libm.so libiconv.so 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/shlib/libpthread.so /usr/shlib/libexc.so'
+libsfiles=' libgdbm.so libdbm.a libdb.so libm.so libiconv.so libutil.a libpthread.so libexc.so'
+libsfound=' /usr/shlib/libgdbm.so /usr/ccs/lib/libdbm.a /usr/shlib/libdb.so /usr/shlib/libm.so /usr/shlib/libiconv.so /usr/ccs/lib/libutil.a /usr/shlib/libpthread.so /usr/shlib/libexc.so'
 libspath=' /usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /var/shlib'
-libswanted='sfio socket bind inet nsl nm gdbm dbm db malloc dld ld sun m cposix posix ndir dir crypt sec ucb BSD x iconv 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 pthread exc'
+libswanted_uselargefiles=''
 line=''
 lint=''
 lkflags=''
@@ -612,12 +618,12 @@ old_pthread_create_joinable=''
 optimize='-O'
 orderlib='false'
 osname='dec_osf'
-osvers='4.0'
+osvers='4.0d'
 otherlibdirs=' '
 package='perl5'
 pager='/c/bin/less'
 passcat='cat /etc/passwd'
-patchlevel='6'
+patchlevel='7'
 path_sep=':'
 perl5='/u/vieraat/vieraat/jhi/Perl/bin/perl'
 perl=''
@@ -632,8 +638,8 @@ pmake=''
 pr=''
 prefix='/opt/perl'
 prefixexp='/opt/perl'
-privlib='/opt/perl/lib/5.6.0'
-privlibexp='/opt/perl/lib/5.6.0'
+privlib='/opt/perl/lib/5.7.0'
+privlibexp='/opt/perl/lib/5.7.0'
 prototype='define'
 ptrsize='8'
 quadkind='2'
@@ -680,13 +686,13 @@ sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "EMT", "FPE"
 sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 6 6 16 20 23 23 23 29 48 '
 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 6, 6, 16, 20, 23, 23, 23, 29, 48, 0'
 signal_t='void'
-sitearch='/opt/perl/lib/site_perl/5.6.0/alpha-dec_osf-thread-multi'
-sitearchexp='/opt/perl/lib/site_perl/5.6.0/alpha-dec_osf-thread-multi'
+sitearch='/opt/perl/lib/site_perl/5.7.0/alpha-dec_osf-thread'
+sitearchexp='/opt/perl/lib/site_perl/5.7.0/alpha-dec_osf-thread'
 sitebin='/opt/perl/bin'
 sitebinexp='/opt/perl/bin'
-sitelib='/opt/perl/lib/site_perl/5.6.0'
+sitelib='/opt/perl/lib/site_perl/5.7.0'
 sitelib_stem='/opt/perl/lib/site_perl'
-sitelibexp='/opt/perl/lib/site_perl/5.6.0'
+sitelibexp='/opt/perl/lib/site_perl/5.7.0'
 siteprefix='/opt/perl'
 siteprefixexp='/opt/perl'
 sizesize='8'
@@ -702,7 +708,7 @@ sort='sort'
 spackage='Perl5'
 spitshell='cat'
 split=''
-src='.'
+src='/m/fs/work/work/permanent/perl/pp4/perl'
 ssizetype='ssize_t'
 startperl='#!/opt/perl/bin/perl'
 startsh='#!/bin/sh'
@@ -744,15 +750,15 @@ uidtype='uid_t'
 uname='uname'
 uniq='uniq'
 uquadtype='unsigned long'
-use5005threads='undef'
+use5005threads='define'
 use64bitall='define'
 use64bitint='define'
 usedl='define'
-useithreads='define'
+useithreads='undef'
 uselargefiles='define'
 uselongdouble='undef'
 usemorebits='undef'
-usemultiplicity='define'
+usemultiplicity='undef'
 usemymalloc='n'
 usenm='true'
 useopcode='true'
@@ -780,30 +786,32 @@ vendorlib_stem=''
 vendorlibexp=''
 vendorprefix=''
 vendorprefixexp=''
-version='5.6.0'
+version='5.7.0'
 vi=''
 voidflags='15'
 xlibpth='/usr/lib/386 /lib/386'
-xs_apiversion='5.6.0'
+xs_apiversion='5.7.0'
 zcat=''
 zip='zip'
 # Configure command line arguments.
-config_arg0='Configure'
-config_args='-Dprefix=/opt/perl -Doptimize=-O -Dusethreads -Duse64bitint -Duselargefiles -Dcf_by=yourname -Dcf_email=yourname@yourhost.yourplace.com -Dperladmin=yourname@yourhost.yourplace.com -Dmydomain=.yourplace.com -Dmyhostname=yourhost -dE'
-config_argc=11
+config_arg0='./Configure'
+config_args='-Dprefix=/opt/perl -Doptimize=-O -Dusethreads -Duse5005threads -Duse64bitint -Duselargefiles -Dcf_by=yourname -Dcf_email=yourname@yourhost.yourplace.com -Dperladmin=yourname@yourhost.yourplace.com -Dmydomain=.yourplace.com -Dmyhostname=yourhost -dE -Dusedevel'
+config_argc=13
 config_arg1='-Dprefix=/opt/perl'
 config_arg2='-Doptimize=-O'
 config_arg3='-Dusethreads'
-config_arg4='-Duse64bitint'
-config_arg5='-Duselargefiles'
-config_arg6='-Dcf_by=yourname'
-config_arg7='-Dcf_email=yourname@yourhost.yourplace.com'
-config_arg8='-Dperladmin=yourname@yourhost.yourplace.com'
-config_arg9='-Dmydomain=.yourplace.com'
-config_arg10='-Dmyhostname=yourhost'
-config_arg11='-dE'
+config_arg4='-Duse5005threads'
+config_arg5='-Duse64bitint'
+config_arg6='-Duselargefiles'
+config_arg7='-Dcf_by=yourname'
+config_arg8='-Dcf_email=yourname@yourhost.yourplace.com'
+config_arg9='-Dperladmin=yourname@yourhost.yourplace.com'
+config_arg10='-Dmydomain=.yourplace.com'
+config_arg11='-Dmyhostname=yourhost'
+config_arg12='-dE'
+config_arg13='-Dusedevel'
 PERL_REVISION=5
-PERL_VERSION=6
+PERL_VERSION=7
 PERL_SUBVERSION=0
 PERL_API_REVISION=5
 PERL_API_VERSION=5
index a2c196d..88e7967 100644 (file)
@@ -16,8 +16,8 @@
 
 /*
  * Package name      : perl5
- * Source directory  : .
- * Configuration time: Wed May 31 01:48:08 EET DST 2000
+ * Source directory  : /m/fs/work/work/permanent/perl/pp4/perl
+ * Configuration time: Thu Aug 17 02:55:55 EET DST 2000
  * 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.6.0/alpha-dec_osf-thread-multi"               /**/
-#define ARCHLIB_EXP "/opt/perl/lib/5.6.0/alpha-dec_osf-thread-multi"           /**/
+#define ARCHLIB "/opt/perl/lib/5.7.0/alpha-dec_osf-thread"             /**/
+#define ARCHLIB_EXP "/opt/perl/lib/5.7.0/alpha-dec_osf-thread"         /**/
 
 /* 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-multi"          /**/
+#define ARCHNAME "alpha-dec_osf-thread"                /**/
 
 /* HAS_ATOLF:
  *     This symbol, if defined, indicates that the atolf routine is
  *     This macro surrounds its token with double quotes.
  */
 #if 42 == 1
-#  define CAT2(a,b)    a/**/b
-#  define STRINGIFY(a) "a"
+#define CAT2(a,b)      a/**/b
+#define STRINGIFY(a)   "a"
                /* If you can get stringification with catify, tell me how! */
 #endif
 #if 42 == 42
-#  define PeRl_CaTiFy(a, b)    a ## b  
-#  define PeRl_StGiFy(a)       #a
+#define PeRl_CaTiFy(a, b)      a ## b  
+#define PeRl_StGiFy(a) #a
 /* the additional level of indirection enables these macros to be
  * used as arguments to other macros.  See K&R 2nd ed., page 231. */
-#  define CAT2(a,b)    PeRl_CaTiFy(a,b)
-#  define StGiFy(a)    PeRl_StGiFy(a)
-#  define STRINGIFY(a) PeRl_StGiFy(a)
+#define CAT2(a,b)      PeRl_CaTiFy(a,b)
+#define StGiFy(a)      PeRl_StGiFy(a)
+#define STRINGIFY(a)   PeRl_StGiFy(a)
 #endif
 #if 42 != 1 && 42 != 42
 #   include "Bletch: How does this C preprocessor catenate tokens?"
  */
 #define HAS_SETPROTOENT                /**/
 
+/* HAS_SETPROCTITLE:
+ *     This symbol, if defined, indicates that the setproctitle routine is
+ *     available to set process title.
+ */
+/*#define HAS_SETPROCTITLE             / **/
+
 /* HAS_SETPWENT:
  *     This symbol, if defined, indicates that the setpwent routine is
  *     available for initializing sequential access of the passwd database.
  *     This symbol contains the ~name expanded version of PRIVLIB, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define PRIVLIB "/opt/perl/lib/5.6.0"          /**/
-#define PRIVLIB_EXP "/opt/perl/lib/5.6.0"              /**/
+#define PRIVLIB "/opt/perl/lib/5.7.0"          /**/
+#define PRIVLIB_EXP "/opt/perl/lib/5.7.0"              /**/
 
 /* PTRSIZE:
  *     This symbol contains the size of a pointer, so that the C preprocessor
  *     This symbol contains the ~name expanded version of SITEARCH, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define SITEARCH "/opt/perl/lib/site_perl/5.6.0/alpha-dec_osf-thread-multi"            /**/
-#define SITEARCH_EXP "/opt/perl/lib/site_perl/5.6.0/alpha-dec_osf-thread-multi"                /**/
+#define SITEARCH "/opt/perl/lib/site_perl/5.7.0/alpha-dec_osf-thread"          /**/
+#define SITEARCH_EXP "/opt/perl/lib/site_perl/5.7.0/alpha-dec_osf-thread"              /**/
 
 /* SITELIB:
  *     This symbol contains the name of the private library for this package.
  *     removed.  The elements in inc_version_list (inc_version_list.U) can
  *     be tacked onto this variable to generate a list of directories to search.
  */
-#define SITELIB "/opt/perl/lib/site_perl/5.6.0"                /**/
-#define SITELIB_EXP "/opt/perl/lib/site_perl/5.6.0"            /**/
+#define SITELIB "/opt/perl/lib/site_perl/5.7.0"                /**/
+#define SITELIB_EXP "/opt/perl/lib/site_perl/5.7.0"            /**/
 #define SITELIB_STEM "/opt/perl/lib/site_perl"         /**/
 
 /* Size_t_size:
  *     be built to use multiplicity.
  */
 #ifndef MULTIPLICITY
-#define        MULTIPLICITY            /**/
+/*#define      MULTIPLICITY            / **/
 #endif
 
 /* USE_PERLIO:
  *     This symbol, if defined, indicates that Perl should
  *     be built to use the old draft POSIX threads API.
  */
-/*#define      USE_5005THREADS         / **/
-#define        USE_ITHREADS            /**/
+#define        USE_5005THREADS         /**/
+/*#define      USE_ITHREADS            / **/
 #if defined(USE_5005THREADS) && !defined(USE_ITHREADS)
 #define                USE_THREADS             /* until src is revised*/
 #endif
 /* PERL_XS_APIVERSION:
  *     This variable contains the version of the oldest perl binary
  *     compatible with the present perl.  perl.c:incpush() and
- *     lib/lib.pm will automatically search in /opt/perl/lib/site_perl/5.6.0/alpha-dec_osf-thread-multi for older
+ *     lib/lib.pm will automatically search in /opt/perl/lib/site_perl/5.7.0/alpha-dec_osf-thread for older
  *     directories across major versions back to xs_apiversion.
  *     This is only useful if you have a perl library directory tree
  *     structured like the default one.
  *     compatible with the present perl.  (That is, pure perl modules
  *     written for pm_apiversion will still work for the current
  *     version).  perl.c:incpush() and lib/lib.pm will automatically
- *     search in /opt/perl/lib/site_perl/5.6.0 for older directories across major versions
+ *     search in /opt/perl/lib/site_perl/5.7.0 for older directories across major versions
  *     back to pm_apiversion.  This is only useful if you have a perl
  *     library directory tree structured like the default one.  The
  *     versioned site_perl library was introduced in 5.005, so that's
  *     (presumably) be similar.
  *     See the INSTALL file for how this works.
  */
-#define PERL_XS_APIVERSION "5.6.0"
+#define PERL_XS_APIVERSION "5.7.0"
 #define PERL_PM_APIVERSION "5.005"
 
+/* I_LIBUTIL:
+ *     This symbol, if defined, indicates that <libutil.h> exists and
+ *     should be included.
+ */
+/*#define      I_LIBUTIL               / **/
+
 #endif
index 886954c..9718bb5 100644 (file)
@@ -205,7 +205,7 @@ These are B<not> yet available with Cygwin.
 
 I<gcc> supports long doubles (12 bytes).  However, several additional
 long double math functions are necessary to use them within Perl
-(I<{atan2,cos,exp,floor,fmod,frexp,log,modf,pow,sin,sqrt}l,strtold>).
+(I<{atan2,cos,exp,floor,fmod,frexp,isnan,log,modf,pow,sin,sqrt}l,strtold>).
 These are B<not> yet available with Cygwin.
 
 =item * C<-Dusethreads>
@@ -267,7 +267,7 @@ The following error occurs because of the Cygwin C<#define> of
 C<_LONG_DOUBLE>:
 
   Guessing which symbols your C compiler and preprocessor define...
-  try.c:3847: parse error
+  try.c:<line#>: parse error
 
 This failure does not seem to cause any problems.
 
@@ -501,10 +501,11 @@ be kept as clean as possible.
 =item Documentation
 
   INSTALL README.cygwin
-  Changes Changes5.005 Changes5.004
+  Changes Changes5.005 Changes5.004 Changes5.6
   AUTHORS MAINTAIN MANIFEST README.win32
-  pod/perl.pod pod/perlfaq3.pod pod/perlhist.pod pod/perlmodlib.pod
-  pod/perlport.pod pod/perltoc.pod pod/perldelta.pod pod/perl5004delta.pod
+  pod/buildtoc.PL pod/perl.pod pod/perl5004delta.pod pod/perl56delta.pod
+  pod/perlfaq3.pod pod/perlhist.pod pod/perlmodlib.pod pod/perlport.pod
+  pod/perltoc.pod
 
 =item Build, Configure, Make, Install
 
@@ -526,6 +527,7 @@ be kept as clean as possible.
 =item Tests
 
   t/io/tell.t           - binmode
+  t/lib/b.t             - ignore Cwd from os_extras
   t/lib/glob-basic.t    - Win32 directory list access differs from read mode
   t/op/magic.t          - $^X/symlink WORKAROUND, s/.exe//
   t/op/stat.t           - no /dev, skip Win32 ftCreationTime quirk
@@ -562,8 +564,8 @@ be kept as clean as possible.
                         - canonpath, cflags, manifypods, perl_archive
   lib/File/Find.pm      - on remote drives stat() always sets st_nlink to 1
   lib/File/Spec/Unix.pm - preserve //unc
+  lib/File/Temp.pm      - no directory sticky bit
   lib/perl5db.pl        - use stdin not /dev/tty
-  utils/perlcc.PL       - DynaLoader.a in compile, -DUSEIMPORTLIB
   utils/perldoc.PL      - version comment
 
 =back
@@ -594,4 +596,4 @@ Teun Burgers <burgers@ecn.nl>.
 
 =head1 HISTORY
 
-Last updated: 10 August 2000
+Last updated: 15 August 2000
index 47d1afc..e12c60d 100644 (file)
@@ -124,7 +124,7 @@ If these dependent libraries are not listed at shared library creation
 time, you will get fatal "Unresolved symbol" errors at run time when the
 library is loaded.
 
-You may create a shared library that referers to another library, which
+You may create a shared library that refers to another library, which
 may be either an archive library or a shared library.  If this second
 library is a shared library, this is called a "dependent library".  The
 dependent library's name is recorded in the main shared library, but it
index 1e7464b..2383ee8 100644 (file)
@@ -178,13 +178,14 @@ has much more functions working (like C<fork>, C<popen> and so on). In
 fact RSX is required if there is no VCPI present. Note the
 RSX requires DPMI.
 
-Only the latest runtime is supported, currently C<0.9c>. Perl may run
+Only the latest runtime is supported, currently C<0.9d fix 03>. Perl may run
 under earlier versions of EMX, but this is not tested.
 
 One can get different parts of EMX from, say
 
-  ftp://ftp.cdrom.com/pub/os2/emx09c/
-  ftp://hobbes.nmsu.edu/os2/unix/emx09c/
+  http://www.leo.org/pub/comp/os/os2/leo/gnu/emx+gcc/
+  http://powerusersbbs.com/pub/os2/dev/   [EMX+GCC Development]
+  http://hobbes.nmsu.edu/pub/os2/dev/emx/v0.9d/
 
 The runtime component should have the name F<emxrt.zip>.
 
@@ -1060,6 +1061,10 @@ You did not run C<omflibs>. See L<Prerequisites>.
 
 You use an old version of GNU make. See L<Prerequisites>.
 
+=head2 op/sprintf test failure
+
+This can result from a bug in emx sprintf which was fixed in 0.9d fix 03.
+
 =head1 Specific (mis)features of OS/2 port
 
 =head2 C<setpriority>, C<getpriority>
index 003a047..f8a1b8a 100644 (file)
@@ -1,7 +1,7 @@
-$ sav_ver = 'F$VERIFY(0)'
+$ sav_ver = 'F$VERIFY(0)
 $! SET VERIFY
 $!
-$! For example, if you unpacked perl into: [USER.PERL5_00n...] then you will 
+$! For example, if you unpacked perl into: [USER.PERL-5n...] then you will 
 $! want to cd into the tree and execute Configure:
 $!
 $! $ SET DEFAULT [USER.PERL5_xxx]
@@ -36,6 +36,7 @@ $! VMS-isms we will need:
 $ echo = "write sys$output "
 $ cat  = "type"
 $ gcc_symbol = "gcc"
+$ ld = "Link"
 $ ans = ""
 $ macros = ""
 $ extra_flags = ""
@@ -50,12 +51,10 @@ $ Thread_Live_Dangerously = "MT="
 $ use_two_pot_malloc = "N"
 $ use_pack_malloc = "N"
 $ use_debugmalloc = "N"
-$ d_secintgenv = "N"
-$ cc_flags = ""
-$ use_multiplicity = "N"
+$ ccflags = ""
 $ vms_default_directory_name = F$ENVIRONMENT("DEFAULT")
-$ max_allowed_dir_depth = 3  ! e.g. [A.B.PERL5_xxx] not [A.B.C.PERL5_xxx]
-$! max_allowed_dir_depth = 2  ! e.g. [A.PERL5_xxx] not [A.B.PERL5_xxx]
+$ max_allowed_dir_depth = 3  ! e.g. [A.B.PERLxxx] not [A.B.C.PERLxxx]
+$! max_allowed_dir_depth = 2 ! e.g. [A.PERLxxx] not [A.B.PERLxxx]
 $!
 $ vms_filcnt = F$GETJPI ("","FILCNT")
 $!
@@ -118,16 +117,18 @@ $!: set up default values
 $ fastread=""
 $ reuseval="false"
 $ maniskip = "false"
-$ config_sh=""
+$ IF F$TYPE(config_sh) .EQS. "" THEN config_sh=""
 $ alldone=""
 $ error=""
 $ silent=""
 $ extractsh=""
 $ override=""
 $ knowitall=""
-$ Using_Dec_C = ""
-$ Using_Gnu_C = ""
+$ Using_Dec_C = "n"
+$ Using_Gnu_C = "n"
+$ using_cxx = "n"
 $ Dec_C_Version = ""
+$ cxxversion = ""
 $ use_threads = "F"
 $ use_5005_threads = "N"
 $ use_ithreads = "N"
@@ -170,7 +171,7 @@ $     gotopt = "t"
 $     P'i' = P'i' - "e"
 $     gotshortopt = "t"
 $   ENDIF
-$   IF (F$EXTRACT(0,1,P'i') .EQS. "f") !"-f")
+$   IF (F$EXTRACT(0,1,P'i') .EQS. "f") ! "-f"
 $   THEN
 $     P'i' = P'i' - "f"
 $     config_sh = P'i'
@@ -179,6 +180,7 @@ $     THEN
 $       test_config_sh = F$FILE_ATTRIBUTES(config_sh,"PRO")
 $       IF (F$LOCATE("R",test_config_sh).NE.F$LENGTH(test_config_sh)) 
 $       THEN
+$         config_dflt = "y"
 $         CONTINUE !at this point check UIC && if test allows...
 $                  !to be continued ?
 $       ELSE
@@ -191,68 +193,68 @@ $       error="true"
 $     ENDIF
 $     gotopt = "t"
 $   ENDIF
-$   IF (F$EXTRACT(0,1,P'i') .EQS. "h")
+$   IF (F$EXTRACT(0,1,P'i') .EQS. "h") ! "-h"
 $   THEN
 $     error = "true"
 $     gotopt = "t"
 $     P'i' = P'i' - "h"
 $     gotshortopt = "t"
 $   ENDIF
-$   IF (F$EXTRACT(0,1,P'i') .EQS. "m")
+$   IF (F$EXTRACT(0,1,P'i') .EQS. "m")  ! "-m"
 $   THEN
 $     maniskip = "true"
 $     gotopt = "t"
 $     P'i' = P'i' - "m"
 $     gotshortopt = "t"
 $   ENDIF
-$   IF (F$EXTRACT(0,1,P'i') .EQS. "r")
+$   IF (F$EXTRACT(0,1,P'i') .EQS. "r")  ! "-r"
 $   THEN
 $     reuseval = "true"
 $     gotopt = "t"
 $     P'i' = P'i' - "r"
 $     gotshortopt = "t"
 $   ENDIF
-$   IF (F$EXTRACT(0,1,P'i') .EQS. "s")
+$   IF (F$EXTRACT(0,1,P'i') .EQS. "s") ! "-s"
 $   THEN
 $     silent = "true"
 $     gotopt = "t"
 $     P'i' = P'i' - "s"
 $     gotshortopt = "t"
 $   ENDIF
-$   IF (F$EXTRACT(0,1,P'i') .EQS. "E") !"-E")
+$   IF (F$EXTRACT(0,1,P'i') .EQS. "E") ! "-E"
 $   THEN
 $     alldone = "exit"
 $     gotopt = "t"
 $   ENDIF
-$   IF (F$EXTRACT(0,1,P'i') .EQS. "K") !"-K")
+$   IF (F$EXTRACT(0,1,P'i') .EQS. "K") ! "-K"
 $   THEN
 $     knowitall = "true"
 $     gotopt = "t"
 $     P'i' = P'i' - "K"
 $     gotshortopt = "t"
 $   ENDIF
-$   IF (F$EXTRACT(0,1,P'i') .EQS. "O")
+$   IF (F$EXTRACT(0,1,P'i') .EQS. "O") ! "-O"
 $   THEN
 $     override = "true"
 $     gotopt = "t"
 $     P'i' = P'i' - "O"
 $     gotshortopt = "t"
 $   ENDIF
-$   IF (F$EXTRACT(0,1,P'i') .EQS. "S") !"-S")
+$   IF (F$EXTRACT(0,1,P'i') .EQS. "S") ! "-S"
 $   THEN
-$     extractsh = "true" !VMS?
+$     extractsh = "true"  !VMS?  Yes with munchconfig
 $     gotopt = "t"
 $     P'i' = P'i' - "S"
 $     gotshortopt = "t"
 $   ENDIF
-$   IF (F$EXTRACT(0,1,P'i') .EQS. "D") !"-D")
+$   IF (F$EXTRACT(0,1,P'i') .EQS. "D") ! "-D"
 $   THEN
 $     P'i' = P'i' - "D"
-$!Hmm.. this part needs work
-$!       P'i'
 $     IF (F$LOCATE("=",P'i') .EQ. F$LENGTH(P'i'))
 $     THEN
-$       P'i' = "define"
+$       tmp = P'i' + "=""define"""
+$       'tmp
+$       DELETE/SYMBOL tmp
 $     ELSE 
 $       IF (F$LOCATE("=",P'i') .EQ. (F$LENGTH(P'i') - 1))
 $       THEN
@@ -260,20 +262,22 @@ $         me = F$PARSE(me,,,"NAME") + F$PARSE(me,,,"TYPE")
 $         echo "''me': use '-Usymbol=val' not '-Dsymbol='."
 $         echo "''me': ignoring -D",P'i'
 $       ELSE
-$!Hmm.. this part needs work
-$!           'F$EXTRACT(0,F$LOCATE("=",P'i'),P'i')' = -
-$! 'F$EXTRACT(F$LOCATE("=",P'i'),P'i'),F$LENGTH(P'i'),P'i')'
+$          tmp = F$EXTRACT(0,F$LOCATE("=",P'i'),P'i')
+$          tmp = tmp + "=""" + F$EXTRACT(F$LOCATE("=",P'i')+1,F$LENGTH(P'i'),P'i') + """"
+$         'tmp
+$         DELETE/SYMBOL tmp
 $       ENDIF
 $     ENDIF
-$     ECHO "P''i' =>",P'i',"<="  !Diag
 $     gotopt = "t"
 $   ENDIF
-$   IF (F$EXTRACT(0,1,P'i') .EQS. "U") !"-U")
+$   IF (F$EXTRACT(0,1,P'i') .EQS. "U") ! "-U"
 $   THEN
 $     P'i' = P'i' - "U"
 $     IF (F$LOCATE("=",P'i') .EQ. F$LENGTH(P'i'))
 $     THEN
-$       P'i' = ""
+$       tmp = P'i' + "="""""
+$       'tmp
+$       DELETE/SYMBOL tmp
 $     ELSE 
 $       IF (F$LOCATE("=",P'i') .LT. (F$LENGTH(P'i') - 1))
 $       THEN
@@ -281,10 +285,11 @@ $         me = F$PARSE(me,,,"NAME") + F$PARSE(me,,,"TYPE")
 $         echo "''me': use '-Dsymbol=val' not '-Usymbol=val'."
 $         echo "''me': ignoring -U",P'i'
 $       ELSE
-$         P'i' = "undef"
+$         tmp = P'i' + "=""undef"""
+$         'tmp
+$         DELETE/SYMBOL tmp
 $       ENDIF
 $     ENDIF
-$     ECHO "P''i' =>",P'i',"<="  !Diag
 $     gotopt = "t"
 $   ENDIF
 $   IF (F$EXTRACT(0,1,P'i') .EQS. "V")
@@ -292,7 +297,7 @@ $   THEN
 $     me = F$PARSE(me,,,"NAME") + F$PARSE(me,,,"TYPE")
 $     echo "''me' generated by an unknown version of EDT."
 $     STOP
-$     EXIT !0
+$     EXIT
 $   ENDIF
 $   IF .NOT.gotopt 
 $   THEN
@@ -699,10 +704,40 @@ $   configshfound = F$SEARCH(config_sh)
 $   IF (configshfound.NES."") THEN GOTO Config_sh_found
 $ ENDIF
 $ IF (i.LT.max) THEN GOTO Config_sh_look
-$ IF (configshfound.EQS."") THEN GOTO Beyond_config_sh
+$! genconfig.pl has "osname='VMS'"
+$ osname = F$EDIT(F$GETSYI("NODE_SWTYPE"),"COLLAPSE") 
+$ IF (configshfound.EQS."")
+$ THEN
+$   config_sh = "[-]config.sh" ! the fallback default
+$   GOTO Beyond_config_sh
+$ ENDIF
 $Config_sh_found:
-$ echo ""
-$ echo "Fetching default answers from ''config_sh'..."
+$ IF F$TYPE(config_dflt) .EQS. "" THEN config_dflt = "n"
+$ rp = "Shall I @ ''config_sh' for default answers? [''config_dflt'] "
+$ GOSUB myread
+$ IF ans
+$ THEN
+$   echo ""
+$   echo "Fetching default answers from ''config_sh'..."
+$!
+$! This @ is why config_sh must employ DCL syntax.  Note that for
+$! symbols to be returned to this procedure they must be global.
+$! Which implies that assignments must be of the :== or == variety.
+$! Note further that the [-]config.sh file written by this procedure
+$! employs shell syntax.  In order to convert shell syntax to DCL
+$! you might try:
+$!
+$! perl -ni -e "s/^#/!#/;s/='/==""/;s/'$/""/;print ""\$ $_"";" config.sh
+$!
+$! However, watch out for sig_nam, sig_nam_init, sig_num, startperl 
+$! and any of the lower case double quoted variables such as the *format
+$! variables in such a config."sh".
+$!
+$   @'config_sh
+$!
+$ ENDIF
+$ DELETE/SYMBOL config_dflt
+$!
 $!we actually do not have "hints/" for VMS
 $!     TYPE SYS$INPUT:
 $!
@@ -723,8 +758,6 @@ $Beyond_config_sh:
 $!
 $!: Restore computed paths          !sfn
 $!
-$! genconfig.pl has "osname='VMS'"
-$ osname = F$EDIT(F$GETSYI("NODE_SWTYPE"),"COLLAPSE") 
 $! %Config-I-VMS, a necessary error trap (could be PC running VCL)
 $!
 $ IF (osname .NES. "VMS")
@@ -768,9 +801,7 @@ $   ENDIF
 $ ENDIF !(osname .NES./.EQS. "VMS")
 $!
 $!: who configured the system
-$! see 'user' above.
 $ cf_by = F$EDIT(user,"LOWERCASE")
-$! cf_time = F$CVTIME()                 !superceded by procedure below
 $ osvers = F$EDIT(F$GETSYI("VERSION"),"TRIM")
 $!
 $! Peter Prymmer has seen:
@@ -793,7 +824,6 @@ $!   "WIN$Time_Zone"
 $!
 $! This snippet o' DCL returns a string in default Unix `date` format,
 $! and it will prompt to set SYS$TIMEZONE_DIFFERENTIAL.
-$! Peter Prymmer pvhp@lns62.lns.cornell.edu
 $!
 $ MIN_TZO = -840  !units are minutes here
 $ MAX_TZO =  840
@@ -832,7 +862,6 @@ $     tzhour = -1*tzhour                          !keeps !UL happy
 $     direction = "west of "
 $   ENDIF
 $   echo ""
-$   echo "%Config-I-VMS,"
 $   echo "According to the setting of your ""SYS$TIMEZONE_DIFFERENTIAL"" (= ''systz')"
 $   IF tzminrem.ne.0
 $   THEN
@@ -842,7 +871,7 @@ $     tzspan = "''tzhour' hours"
 $   ENDIF
 $   dflt = "y"
 $   echo "Your system is ''tzspan' ''direction'UTC in England."
-$   rp = "%Config-I-VMS, (''systz') Is this UTC Time Zone Offset correct? [''dflt'] "
+$   rp = "(''systz') Is this UTC Time Zone Offset correct? [''dflt'] "
 $   GOSUB myread
 $   IF ans.OR.(ans.EQS."") 
 $   THEN 
@@ -852,7 +881,6 @@ $     GOTO Beyond_TimeZone
 $   ENDIF
 $ ELSE
 $   echo ""
-$   echo4 "%Config-I-VMS,"
 $   echo4 """SYS$TIMEZONE_DIFFERENTIAL"" does not appear to be DEFINEd on your system"
 $ ENDIF
 $!
@@ -899,6 +927,8 @@ $ cf_time = "''wkday' ''mon' ''mday' ''hour':''min':''sec' ''tz' ''year'"
 $!
 $!: determine the architecture name  
 $! genconfig.pl has either archname='VMS_AXP' or 'VMS_VAX'
+$! Note that DCL in VMS V5.4 does not have F$GETSYI("ARCH_NAME")
+$! but does have F$GETSYI("HW_MODEL").
 $!
 $ IF (F$GETSYI("HW_MODEL") .LT. 1024)
 $ THEN 
@@ -923,7 +953,9 @@ $     echo4 "I'll go with ''archname' anyway..."
 $   ENDIF
 $ ENDIF
 $ dflt = "n"
-$ rp = "Will you be sharing your PERL_ROOT with ''otherarch'? [''dflt'] "
+$ vms_prefix = "perl_root"
+$ vms_prefixup = F$EDIT(vms_prefix,"UPCASE")
+$ rp = "Will you be sharing your ''vms_prefixup' with ''otherarch'? [''dflt'] "
 $ GOSUB myread
 $ if ans.NES.""
 $ THEN
@@ -946,22 +978,26 @@ $!: set up shell script to do ~ expansion !sfn
 $!: expand filename                       !sfn
 $!: now set up to get a file name         !sfn
 $!
-$ prefix = F$ENVIRONMENT("DEFAULT") - ".UU]" + "]"
-$ prefix = F$PARSE(prefix,,,,"NO_CONCEAL") - "][" - ".;"
-$ prefixbase = prefix - "]"
-$ prefix = prefixbase + ".]"
+$ IF F$TYPE(prefix) .EQS. ""
+$ THEN
+$   prefix = F$ENVIRONMENT("DEFAULT") - ".UU]" + "]"
+$   prefix = F$PARSE(prefix,,,,"NO_CONCEAL") - "][" - ".;"
+$   prefixbase = prefix - "]"
+$   prefix = prefixbase + ".]"
+$ ENDIF
+$ src = prefix
 $!: determine root of directory hierarchy where package will be installed.
 $ dflt = prefix
 $ IF .NOT.silent 
 $ THEN 
 $   echo ""
 $   echo "By default, ''package' will be installed in ''dflt', pod"
-$   echo "pages under ''prefixbase'LIB.POD], etc..., i.e. with ''dflt' as prefix for"
+$   echo "pages under ''prefixbase'.LIB.POD], etc..., i.e. with ''dflt' as prefix for"
 $   echo "all installation directories."
-$   echo "On ''osname' the ''prefix' is used to DEFINE the ''packageup'_ROOT prior to installation"
+$   echo "On ''osname' the prefix is used to DEFINE the ''vms_prefixup' prior to installation"
 $   echo "as well as during subsequent use of ''package' via ''packageup'_SETUP.COM."
 $ ENDIF
-$ rp = "Installation prefix to use (for ''packageup'_ROOT)? [ ''dflt' ] "
+$ rp = "Installation prefix to use (for ''vms_prefixup')? [ ''dflt' ] "
 $ GOSUB myread
 $ IF ans.NES.""
 $ THEN 
@@ -970,6 +1006,7 @@ $   IF F$LOCATE(".]",ans) .EQ. F$LENGTH(ans) THEN prefix = prefix - "]" + ".]"
 $ ELSE 
 $   prefix = dflt
 $ ENDIF
+$ perl_root = prefix
 $!
 $! Check here for pre-existing PERL_ROOT.
 $!  -> ask if removal desired.
@@ -979,7 +1016,7 @@ $!
 $ vms_skip_install = "true"
 $ dflt = "y"
 $! echo ""
-$ rp = "%Config-I-VMS, Skip the remaining """"where install"""" questions? [''dflt'] "
+$ rp = "Skip the remaining """"where install"""" questions? [''dflt'] "
 $ GOSUB myread
 $ IF (.NOT.ans).AND.(ans.NES."") THEN vms_skip_install = "false"
 $ IF (.NOT.vms_skip_install)
@@ -996,7 +1033,10 @@ $   THEN TYPE SYS$INPUT:
 There are some auxiliary files for perl5 that need to be put into a
 private library directory that is accessible by everyone.
 $   ENDIF
-$   dflt = prefix - ".]" + ".LIB]"
+$   IF F$TYPE(privlib) .NES. ""
+$   THEN dflt = privlib
+$   ELSE dflt = "''vms_prefix':[lib]"
+$   ENDIF
 $   rp = "Pathname where the private library files will reside? " 
 $   rp = F$FAO("!AS!/!AS",rp,"[ ''dflt' ] ")
 $   GOSUB myread
@@ -1013,12 +1053,12 @@ $ dflt = "y"
 $ IF .NOT.silent 
 $ THEN 
 $   echo ""
-$   echo "%Config-I-VMS, You may choose to write ''packageup'_SETUP.COM to assign a foreign"
-$   echo "-Config-I-VMS, symbol to invoke ''package', which is the usual method."
-$   echO "-Config-I-VMS, If you do not do so then you would need a DCL command verb at the"
-$   echo "-Config-I-VMS, process or the system wide level."
+$   echo "You may choose to write ''packageup'_SETUP.COM to assign a foreign"
+$   echo "symbol to invoke ''package', which is the usual method."
+$   echO "If you do not do so then you would need a DCL command verb at the"
+$   echo "process or the system wide level."
 $ ENDIF
-$ rp = "Invoke perl as a global symbol foreign command [''dflt'] "
+$ rp = "Invoke perl as a global symbol foreign command? [''dflt'] "
 $ GOSUB myread
 $ IF (.NOT.ans).AND.(ans.NES."") THEN perl_symbol = "false"
 $!
@@ -1028,11 +1068,11 @@ $   dflt = "y"
 $   IF .NOT.silent 
 $   THEN 
 $     echo ""
-$     echo "%Config-I-VMS, Since you won't be using a symbol you must choose to put the ''packageup'"
-$     echo "-Config-I-VMS, verb in a per-process table or in the system wide DCLTABLES (which"
-$     echo "-Config-I-VMS, would require write privilege)."
+$     echo "Since you won't be using a symbol you must choose to put the ''packageup'"
+$     echo "verb in a per-process table or in the system wide DCLTABLES (which"
+$     echo "would require write privilege)."
 $   ENDIF
-$   rp = "Invoke perl as a per process command verb [ ''dflt' ] "
+$   rp = "Invoke perl as a per process command verb? [ ''dflt' ] "
 $   GOSUB myread
 $   IF (.NOT.ans).AND.(ans.NES."")
 $   THEN perl_verb = "DCLTABLES"
@@ -1045,7 +1085,7 @@ $ baserev="5.0"
 $ revision = baserev - ".0"
 $!: get the patchlevel
 $ echo ""
-$ echo4 "Getting the current patchlevel..." !>&4
+$ echo4 "Getting the current patchlevel..."
 $ patchlevel_h = F$SEARCH("[-]patchlevel.h")
 $ IF (patchlevel_h.NES."")
 $ THEN
@@ -1056,7 +1096,7 @@ $   got_api_version    = "false"
 $   got_api_subversion = "false"
 $   OPEN/READONLY CONFIG 'patchlevel_h' 
 $Patchlevel_h_loop:
-$   READ/END_Of_File=Close_patch CONFIG line
+$   READ/END_Of_File=Close_patch/ERROR=Close_patch CONFIG line
 $   IF ((F$LOCATE("#define PERL_VERSION",line).NE.F$LENGTH(line)).AND.(.NOT.got_patch))
 $   THEN
 $     line = F$EDIT(line,"COMPRESS, TRIM")
@@ -1090,9 +1130,9 @@ $   ENDIF
 $   IF (.NOT.got_patch).OR.(.NOT.got_sub) THEN GOTO Patchlevel_h_loop
 $Close_patch:
 $   CLOSE CONFIG
-$   ELSE
-$     patchlevel="0"
-$     subversion="0"
+$ ELSE
+$   patchlevel="0"
+$   subversion="0"
 $ ENDIF
 $ IF (F$STRING(subversion) .NES. "0")
 $ THEN
@@ -1105,7 +1145,6 @@ $ version = revision + "_" + patchlevel + "_" + subversion
 $!
 $ IF (.NOT.vms_skip_install)
 $ THEN
-$!: set the prefixup variable, to restore leading tilda escape !sfn
 $!: set the prefixup variable, to restore leading tilde escape !sfn
 $!
 $!: determine where public architecture dependent libraries go
@@ -1120,7 +1159,10 @@ sharing libraries in a heterogeneous environment, you might store
 these files in a separate location.  Otherwise, you can just include
 them with the rest of the public library files.
 $   ENDIF
-$   dflt = privlib - "]" + "." + archname + "." + version + "]"
+$   IF F$TYPE(archlib) .NES. ""
+$   THEN dflt = archlib
+$   ELSE dflt = privlib - "]" + "." + archname + "." + version + "]"
+$   ENDIF
 $   rp = "Where do you want to put the public architecture-dependent libraries? "
 $   rp = F$FAO("!AS!/!AS",rp,"[ ''dflt' ] ")
 $   GOSUB myread
@@ -1129,11 +1171,10 @@ $   THEN archlib = ans
 $   ELSE archlib = dflt
 $   ENDIF
 $!
-$!: set up the script used to warn in case of inconsistency !sfn
-$!: function used to set $1 to $val                         !sfn
-$!
 $ ENDIF !%Config-I-VMS, skip "where install" questions
+$!
 $! This quotation from Configure has to be included on VMS:
+$!
 $ TYPE SYS$INPUT:
 
 There is, however, a strange, musty smell in the air that reminds me of
@@ -1155,7 +1196,10 @@ site-specific extensions and modules.  Some users find it convenient
 to place all local files in this directory rather than in the main
 distribution directory.
 $   ENDIF
-$   dflt = privlib - "]" + ".SITE_PERL]"
+$   IF F$TYPE(sitelib) .NES. ""
+$   THEN dflt = sitelib
+$   ELSE dflt = privlib - "]" + ".SITE_PERL]"
+$   ENDIF
 $   rp = "Pathname for the site-specific library files? "
 $   rp = F$FAO("!AS!/!AS",rp,"[ ''dflt' ] ")
 $   GOSUB myread
@@ -1171,7 +1215,10 @@ $   THEN TYPE SYS$INPUT:
 The installation process will also create a directory for
 architecture-dependent site-specific extensions and modules.
 $   ENDIF
-$   dflt = sitelib - "]" + "." + archname + "]"
+$   IF F$TYPE(sitearch) .NES. ""
+$   THEN dflt = sitearch
+$   ELSE dflt = sitelib - "]" + "." + archname + "]"
+$   ENDIF
 $   rp = "Pathname for the site-specific architecture-dependent library files? "
 $   rp = F$FAO("!AS!/!AS",rp,"[ ''dflt' ] ")
 $   GOSUB myread
@@ -1183,7 +1230,11 @@ $!
 $!: determine where old public architecture dependent libraries might be
 $!
 $!: determine where public executables go
-$   dflt = prefix - ".]" + ".BIN]"
+$   IF F$TYPE(bin) .NES. ""
+$   THEN dflt = bin
+$!   ELSE dflt = prefix - ".]" + ".BIN]"
+$   ELSE dflt = "/''vms_prefix'/000000"
+$   ENDIF
 $   rp = "Pathname where the public executables will reside? "
 $   rp = F$FAO("!AS!/!AS",rp,"[ ''dflt' ] ")
 $   GOSUB myread
@@ -1199,8 +1250,57 @@ $!: determine where library module manual pages go
 $!: What suffix to use on installed man pages
 $!: see what memory models we can support
 $!
+$ ELSE ! skipping "where install" questions, we must set some symbols
+$   IF F$TYPE(archlib).EQS."" THEN -
+      archlib="''vms_prefix':[lib.''archname'.''version']"
+$   IF F$TYPE(bin) .EQS. "" THEN -
+      bin="/''vms_prefix'/000000"
+$   IF F$TYPE(privlib) .EQS. "" THEN -
+      privlib ="''vms_prefix':[lib]"
+$   IF F$TYPE(sitearch) .EQS. "" THEN -
+      sitearch="''vms_prefix':[lib.site_perl.''archname']"
+$   IF F$TYPE(sitelib) .EQS. "" THEN -
+      sitelib ="''vms_prefix':[lib.site_perl]"
 $ ENDIF !%Config-I-VMS, skip "where install" questions
 $!
+$! These derived locations can be set whether we've opted to
+$! skip the where install questions or not.
+$!
+$ IF F$TYPE(archlibexp) .EQS. "" THEN -
+    archlibexp="''vms_prefix':[lib.''archname'.''version']"
+$ IF F$TYPE(binexp) .EQS. "" THEN -
+    binexp ="''vms_prefix':[000000]"
+$ IF F$TYPE(builddir) .EQS. "" THEN -
+    builddir ="''vms_prefix':[000000]"
+$ IF F$TYPE(installarchlib) .EQS. "" THEN -
+    installarchlib="''vms_prefix':[lib.''archname'.''version']"
+$ IF F$TYPE(installbin) .EQS. "" THEN -
+    installbin ="''vms_prefix':[000000]"
+$ IF F$TYPE(installscript) .EQS. "" THEN -
+    installscript ="''vms_prefix':[utils]"
+$ IF F$TYPE(installman1dir) .EQS. "" THEN -
+    installman1dir ="''vms_prefix':[man.man1]"
+$ IF F$TYPE(installman3dir) .EQS. "" THEN -
+    installman3dir ="''vms_prefix':[man.man3]"
+$ IF F$TYPE(installprivlib) .EQS. "" THEN -
+    installprivlib ="''vms_prefix':[lib]"
+$ IF F$TYPE(installsitearch) .EQS. "" THEN -
+    installsitearch="''vms_prefix':[lib.site_perl.''archname']"
+$ IF F$TYPE(installsitelib) .EQS. "" THEN -
+    installsitelib ="''vms_prefix':[lib.site_perl]"
+$ IF F$TYPE(oldarchlib) .EQS. "" THEN -
+    oldarchlib="''vms_prefix':[lib.''archname']"
+$ IF F$TYPE(oldarchlibexp) .EQS. "" THEN -
+    oldarchlibexp="''vms_prefix':[lib.''archname']"
+$ IF F$TYPE(privlibexp) .EQS. "" THEN -
+    privlibexp ="''vms_prefix':[lib]"
+$ IF F$TYPE(sitearchexp) .EQS. "" THEN -
+    sitearchexp ="''vms_prefix':[lib.site_perl.''archname']"
+$ IF F$TYPE(sitelib_stem) .EQS. "" THEN -
+    sitelib_stem ="''vms_prefix':[lib.site_perl]"
+$ IF F$TYPE(sitelibexp) .EQS. "" THEN -
+    sitelibexp ="''vms_prefix':[lib.site_perl]"
+$!
 $!: see if we need a special compiler
 $! cc_list = "cc/decc|gcc" !%Config-I-VMS, compiler symbols/commands
 $!
@@ -1209,7 +1309,9 @@ $ vms_cc_dflt = ""
 $ vms_cc_available = ""
 $!
 $ OPEN/WRITE CONFIG ccvms.c
+$ WRITE CONFIG "#ifdef __DECC"
 $ WRITE CONFIG "#include <stdlib.h>"  !DECC is sooo picky
+$ WRITE CONFIG "#endif"
 $ WRITE CONFIG "#include <stdio.h>"
 $ WRITE CONFIG "int main() {"
 $ WRITE CONFIG "#ifdef __DECC"
@@ -1228,8 +1330,6 @@ $ tmp = $status
 $! DEASSIGN SYS$OUTPUT
 $! DEASSIGN SYS$ERROR
 $ IF (silent) THEN GOSUB Shut_up
-$! echo "%Config-I-VMS, After cc compile $status = >''tmp'<" !diagnostic
-$!
 $ IF tmp.NE.%X10B90001
 $ THEN 
 $  IF tmp.NE.%X10000001
@@ -1241,28 +1341,26 @@ $ ENDIF
 $!
 $ GOSUB List_Parse
 $ IF .NOT.silent THEN echo ""
-$ echo "%Config-I-VMS, Default ""cc"" is ''line' ''archsufx' ''F$GETSYI("VERSION")'" 
+$ echo "Default ""cc"" is ''line' ''archsufx' ''F$GETSYI("VERSION")'" 
 $ IF F$LOCATE("VAX",line).NE.F$LENGTH(line) 
 $ THEN 
 $   IF .NOT.silent
 $   THEN 
-$     echo "%Config-I-VMS, Will try cc/decc..."
+$     echo "Will try cc/decc..."
 $   ENDIF
-$   DEFINE SYS$ERROR _NLA0:
-$   DEFINE SYS$OUTPUT _NLA0:
+$   DEFINE/USER_MODE SYS$ERROR NL:
+$   DEFINE/USER_MODE SYS$OUTPUT NL:
 $   SET NOON
 $   cc/decc/NoObj/list=ccvms.lis ccvms.c
 $   tmp = $status
-$   DEASSIGN SYS$OUTPUT
-$   DEASSIGN SYS$ERROR
 $   SET ON
 $   IF (silent) THEN GOSUB Shut_up
 $   IF tmp.NE.%X10B90001
 $   THEN
-$     echo "%Config-I-VMS, Apparently you don't have that one."
+$     echo "Apparently you don't have that one."
 $   ELSE
 $     GOSUB List_parse
-$     echo "%Config-I-VMS, You also have: ''line' ''archsufx' ''F$GETSYI("VERSION")'"
+$     echo "You also have: ''line' ''archsufx' ''F$GETSYI("VERSION")'"
 $     vms_cc_available = vms_cc_available + "cc/decc "
 $   ENDIF
 $ ELSE
@@ -1274,20 +1372,19 @@ $   ENDIF
 $ ENDIF
 $!
 $Gcc_initial_check:
-$ echo "%Config-I-VMS, Checking for Gcc"
+$ echo "Checking for gcc"
 $ OPEN/WRITE CONFIG gccvers.lis
-$ DEFINE SYS$ERROR CONFIG
-$ DEFINE SYS$OUTPUT CONFIG
+$ DEFINE/USER_MODE SYS$ERROR CONFIG
+$ DEFINE/USER_MODE SYS$OUTPUT CONFIG
 $ 'gcc_symbol'/noobj/version _nla0:
 $ tmp = $status
-$ DEASSIGN SYS$OUTPUT
-$ DEASSIGN SYS$ERROR
 $ IF (silent) THEN GOSUB Shut_up
 $ CLOSE CONFIG
 $ IF (tmp.NE.%X10000001).and.(tmp.ne.%X00030001)
 $ THEN
-$   echo "%Config-I-VMS, Symbol ""''gcc_symbol'"" is not defined. I guess you don't have it."
-$   goto cc_cleanup
+$   echo "Symbol ""''gcc_symbol'"" is not defined. I guess you don't have it."
+$   DELETE/NOLOG/NOCONFIRM gccvers.lis;
+$   GOTO Cxx_initial_check
 $ ENDIF
 $ OPEN/READ CONFIG gccvers.lis
 $GCC_List_Read:
@@ -1299,12 +1396,93 @@ $ echo line
 $ vms_cc_available = vms_cc_available + "''gcc_symbol' "
 $ DELETE/NOLOG/NOCONFIRM gccvers.lis;
 $!
+$Cxx_initial_check:
+$!
+$! Do note that [vms]perl source files have a ways to go before they will 
+$! compile under CXX.
+$! In order to test Configure.com with CXX swap the '!' comment character 
+$! between the following two lines.  
+$!
+$! IF 1 .eq. 1
+$ IF 1 .eq. 0
+$!
+$ THEN
+$!
+$ echo "Checking for CXX..."
+$ OPEN/WRITE CONFIG ccvms.c
+$ WRITE CONFIG "#include <iostream>"
+$ WRITE CONFIG "int main() {"
+$ WRITE CONFIG "#ifdef __DECCXX"
+$ WRITE CONFIG "        cout << __DECCXX, endl;"
+$ WRITE CONFIG "#else"
+$ WRITE CONFIG "        cout << 0,endl;"
+$ WRITE CONFIG "#endif"
+$! Todo: add G++ identifier check ??
+$ WRITE CONFIG "        return(0);"
+$ WRITE CONFIG "}"
+$ CLOSE CONFIG
+$ SET NOON
+$ DEFINE/USER_MODE SYS$OUTPUT NL:
+$ DEFINE/USER_MODE SYS$ERROR NL:
+$ cxx ccvms.c
+$ tmp = $status
+$ SET ON
+$! success $status with:
+$! DEC C++ V1.1-001 on VMS VAX V5.5-2
+$! DEC C++ V5.6-013 on OpenVMS VAX V7.1
+$! DEC C++ V6.1-003 on OpenVMS Alpha V7.1
+$! Compaq C++ V6.2-016 for OpenVMS Alpha V7.2-1
+$ IF tmp .eq. %X15F60001  
+$ THEN
+$! Which linker?
+$   SET NOON
+$   DEFINE/USER_MODE SYS$OUTPUT NL:
+$   DEFINE/USER_MODE SYS$ERROR NL:
+$   link ccvms.obj
+$   tmp = $status
+$   SET ON
+$   ! success $status with:
+$   ! link && DEC C++ V1.1-001 on VMS VAX V5.5-2
+$   ! link && DEC C++ V5.6-013 on OpenVMS VAX V7.1
+$   IF tmp .eq. %X10000001
+$   THEN
+$     ld_try = "Link"
+$     vms_cc_available = vms_cc_available + "cxx "
+$     echo "CXX and LINK are available."
+$   ELSE
+$     IF F$SEARCH("ccvms.exe") .NES. "" THEN DELETE/NOLOG/NOCONFIRM ccvms.exe;
+$     SET NOON
+$     DEFINE/USER_MODE SYS$OUTPUT NL:
+$     DEFINE/USER_MODE SYS$ERROR NL:
+$     cxxlink ccvms.obj
+$     tmp = $status
+$     SET ON
+$     ! success $status with:
+$     ! cxxlink && DEC C++ V6.1-003 on OpenVMS Alpha V7.1
+$     ! cxxlink && Compaq C++ V6.2-016 for OpenVMS Alpha V7.2-1
+$     IF tmp .eq. %X10000001 
+$     THEN 
+$       ld_try = "cxxlink"
+$       vms_cc_available = vms_cc_available + "cxx "
+$       echo "CXX and CXXLINK are available."
+$     ENDIF
+$   ENDIF
+$   IF F$SEARCH("ccvms.exe") .NES. "" THEN DELETE/NOLOG/NOCONFIRM ccvms.exe;
+$ ELSE
+$   echo "Nope."
+$ ENDIF
+$ DELETE/NOLOG/NOCONFIRM ccvms.c;
+$ IF F$SEARCH("ccvms.obj") .NES. "" THEN DELETE/NOLOG/NOCONFIRM ccvms.obj;
+$ CALL Cxx_demangler_cleanup
+$!
+$ ENDIF ! 1 .eq. 0 or 1 .eq. 1
+$!
 $CC_Cleanup:
 $ DELETE/NOLOG/NOCONFIRM ccvms.*;
 $CC_Desired:
 $!: see if we need a special compiler
 $! echo ""
-$ echo "%Config-I-VMS, available compiler(s):"
+$ echo "Available compiler(s):"
 $ echo "( ''vms_cc_available')"
 $ IF .NOT.nocc 
 $ THEN
@@ -1321,21 +1499,29 @@ $   Mcc = ans
 $   IF (F$LOCATE("dec",ans).NE.F$LENGTH(ans)).or.(F$LOCATE("compaq",ans).NE.F$LENGTH(ans))
 $   THEN
 $     Mcc = "cc/decc"
-$     Using_Dec_C = "Yes"
+$     Using_Dec_C := Y
 $     C_COMPILER_Replace = "CC=cc=''Mcc'"
 $   ENDIF
+$   IF F$LOCATE("cxx",F$EDIT(ans,"COLLAPSE,LOWERCASE")) .NE. F$LENGTH(ans)
+$   THEN
+$     Mcc = "cxx"
+$     using_cxx := Y
+$     ld = ld_try
+$!     C_COMPILER_Replace = "CC=cc=''Mcc'"
+$   ENDIF
 $   IF Mcc.NES.dflt
 $   THEN
-$     IF (F$LOCATE("dec",dflt).NE.F$LENGTH(dflt)).or(F$LOCATE("compaq",dflt).NE.F$LENGTH(dflt))
+$     IF F$LOCATE("dec",dflt) .NE. F$LENGTH(dflt) .or. -
+         F$LOCATE("compaq",dflt) .NE. F$LENGTH(dflt)
 $     THEN 
 $       C_COMPILER_Replace = "CC=cc=''Mcc'"
 $     ELSE
-$       Using_Dec_C = "Yes"
+$       Using_Dec_C := Y
 $     ENDIF
 $   ELSE
 $     IF Mcc .EQS. "cc/decc"
 $     THEN
-$       Using_Dec_C = "Yes"
+$       Using_Dec_C := Y
 $       C_COMPILER_Replace = "CC=cc=''Mcc'"
 $     ENDIF
 $   ENDIF
@@ -1343,20 +1529,21 @@ $ ELSE
 $   Mcc = dflt
 $   IF Mcc .EQS. "cc/decc"
 $   THEN
-$     Using_Dec_C = "Yes"
+$     Using_Dec_C := Y
 $     C_COMPILER_Replace = "CC=cc=''Mcc'"
 $   ENDIF
 $   IF Mcc .EQS. "gcc"
 $   THEN
-$     Using_Gnu_C = "Yes"
+$     Using_Gnu_C := Y
 $     C_COMPILER_Replace = "CC=cc=''Mcc'"
 $   ENDIF
 $ ENDIF
 $Decc_Version_check:
-$ IF "''Using_Dec_C'".EQS."Yes"
+$ ccversion=""
+$ IF Using_Dec_C
 $ THEN
 $   echo ""
-$   echo4 "Checking for Dec C's version number..." !>&4
+$   echo4 "Checking for Dec C's version number..."
 $   OPEN/WRITE CONFIG deccvers.c
 $   WRITE CONFIG "#include <stdlib.h>"  !DECC is sooo picky
 $   WRITE CONFIG "#include <stdio.h>"
@@ -1371,153 +1558,220 @@ $   WRITE CONFIG "#endif"
 $   WRITE CONFIG "        exit(0);"
 $   WRITE CONFIG "}"
 $   CLOSE CONFIG
-$   DEFINE SYS$ERROR _NLA0:
-$   DEFINE SYS$OUTPUT _NLA0:
+$   SET NOON
+$   DEFINE/USER_MODE SYS$ERROR NL:
+$   DEFINE/USER_MODE SYS$OUTPUT NL:
 $   'Mcc' deccvers.c
 $   tmp = $status
-$   DEASSIGN SYS$ERROR _NLA0:
-$   DEASSIGN SYS$OUTPUT _NLA0:
 $   IF (silent) THEN GOSUB Shut_up
-$   DEFINE SYS$ERROR _NLA0:
-$   DEFINE SYS$OUTPUT _NLA0:
+$   DEFINE/USER_MODE SYS$ERROR NL:
+$   DEFINE/USER_MODE SYS$OUTPUT NL:
 $   link deccvers.obj
 $   tmp = $status
-$   DEASSIGN SYS$ERROR
-$   DEASSIGN SYS$OUTPUT
 $   IF (silent) THEN GOSUB Shut_up
 $   OPEN/WRITE CONFIG deccvers.out
-$   DEFINE SYS$ERROR CONFIG
-$   DEFINE SYS$OUTPUT CONFIG
+$   DEFINE/USER_MODE SYS$ERROR CONFIG
+$   DEFINE/USER_MODE SYS$OUTPUT CONFIG
 $   mcr []deccvers.exe
 $   tmp = $status
+$   SET ON
 $   CLOSE CONFIG
-$   DEASSIGN SYS$OUTPUT
-$   DEASSIGN SYS$ERROR
 $   IF (silent) THEN GOSUB Shut_up
 $   OPEN/READ CONFIG deccvers.out
 $   READ/END_OF_FILE=Dec_c_cleanup CONFIG line
 $Dec_c_cleanup:
 $   CLOSE CONFIG
-$!   DELETE/NOLOG/NOCONFIRM deccvers.*;
 $   echo "You are using Dec C ''line'"
-$   Dec_C_Version = line
-$   Dec_C_Version = Dec_C_Version + 0
-$   if Dec_C_Version.ge.60200000 THEN CC_FLAGS = CC_FLAGS + "/NOANSI_ALIAS"
+$   ccversion = line
+$   Dec_C_Version = F$INTEGER(line)
+$   IF Dec_C_Version .GE. 60200000
+$   THEN
+$     echo4 "adding /NOANSI_ALIAS qualifier to ccflags."
+$     ccflags = ccflags + "/NOANSI_ALIAS"
+$   ENDIF
+$   DELETE/NOLOG/NOCONFIRM deccvers.*;
 $ ENDIF
 $Gcc_check:
-$ if "''using_gnu_c'" .eqs. "Yes"
+$ gccversion = ""
+$ IF Using_Gnu_C
 $ THEN
-$ vaxcrtl_olb = F$SEARCH("SYS$LIBRARY:VAXCRTL.OLB")
-$ vaxcrtl_exe = F$SEARCH("SYS$SHARE:VAXCRTL.EXE")
-$ gcclib_olb  = F$SEARCH("GNU_CC:[000000]GCCLIB.OLB")
-$ IF gcclib_olb .EQS. "" 
-$ THEN 
-$! These objects/libs come w/ gcc 2.7.2 for AXP:
-$   tmp = F$SEARCH("GNU_CC:[000000]libgcc2.olb")
-$   IF tmp .NES. "" then gcclib_olb = tmp
-$   tmp = F$SEARCH("GNU_CC:[000000]libgcclib.olb")
-$   IF tmp .NES. "" 
+$   vaxcrtl_olb = F$SEARCH("SYS$LIBRARY:VAXCRTL.OLB")
+$   vaxcrtl_exe = F$SEARCH("SYS$SHARE:VAXCRTL.EXE")
+$   gcclib_olb  = F$SEARCH("GNU_CC:[000000]GCCLIB.OLB")
+$   IF gcclib_olb .EQS. "" 
 $   THEN 
-$     IF gcclib_olb .EQS. "" 
-$     THEN gcclib_olb = tmp
-$     ELSE gcclib_olb = gcclib_olb + "/lib," + tmp
+$!    These objects/libs come w/ gcc 2.7.2 for AXP:
+$     tmp = F$SEARCH("GNU_CC:[000000]libgcc2.olb")
+$     IF tmp .NES. "" then gcclib_olb = tmp
+$     tmp = F$SEARCH("GNU_CC:[000000]libgcclib.olb")
+$     IF tmp .NES. "" 
+$     THEN 
+$       IF gcclib_olb .EQS. "" 
+$       THEN gcclib_olb = tmp
+$       ELSE gcclib_olb = gcclib_olb + "/lib," + tmp
+$       ENDIF
 $     ENDIF
-$   ENDIF
-$   tmp = F$SEARCH("SYS$LIBRARY:VAXCRTL.OLB")
-$   IF tmp .NES. "" 
-$   THEN 
-$     IF gcclib_olb .EQS. "" 
-$     THEN gcclib_olb = tmp
-$     ELSE gcclib_olb = gcclib_olb + "/lib," + tmp
+$     tmp = F$SEARCH("SYS$LIBRARY:VAXCRTL.OLB")
+$     IF tmp .NES. "" 
+$     THEN 
+$       IF gcclib_olb .EQS. "" 
+$       THEN gcclib_olb = tmp
+$       ELSE gcclib_olb = gcclib_olb + "/lib," + tmp
+$       ENDIF
 $     ENDIF
-$   ENDIF
-$   tmp = F$SEARCH("GNU_CC:[000000]crt0.obj")
-$   IF tmp .NES. "" 
-$   THEN 
-$     IF gcclib_olb .EQS. "" 
-$     THEN gcclib_olb = tmp
-$     ELSE gcclib_olb = gcclib_olb + "/lib," + tmp
+$     tmp = F$SEARCH("GNU_CC:[000000]crt0.obj")
+$     IF tmp .NES. "" 
+$     THEN 
+$       IF gcclib_olb .EQS. "" 
+$       THEN gcclib_olb = tmp
+$       ELSE gcclib_olb = gcclib_olb + "/lib," + tmp
+$       ENDIF
 $     ENDIF
+$     IF gcclib_olb .EQS. vaxcrtl_olb THEN gcclib_olb = "" !goofy order of axplibs
+$   ELSE
+$     gcclib_olb = gcclib_olb + "/lib"
 $   ENDIF
-$   IF gcclib_olb .EQS. vaxcrtl_olb THEN gcclib_olb = "" !goofy order of axplibs
-$ ELSE
-$   gcclib_olb = gcclib_olb + "/lib"
-$ ENDIF
-$ IF   gcclib_olb .NES. "" .AND. -
+$   IF   gcclib_olb .NES. "" .AND. -
      (vaxcrtl_olb .NES. "" .OR. -
       vaxcrtl_exe .NES. "" )
+$   THEN
+$     echo ""
+$     echo4 "Checking for GNU cc in disguise and/or its version number..." !>&4
+$     OPEN/WRITE CONFIG gccvers.c
+$!     WRITE CONFIG "#include <stdlib.h>"  !DECC is sooo picky
+$     WRITE CONFIG "#include <stdio.h>"
+$     WRITE CONFIG "int main() {"
+$     WRITE CONFIG "#ifdef __GNUC__"
+$     WRITE CONFIG "#ifdef __VERSION__"
+$     WRITE CONFIG "        printf(""%s\n"", __VERSION__);"
+$     WRITE CONFIG "#else"
+$     WRITE CONFIG "        printf(""%s\n"", ""1"");"
+$     WRITE CONFIG "#endif"
+$     WRITE CONFIG "#endif"
+$     WRITE CONFIG "        exit(0);"
+$     WRITE CONFIG "}"
+$     CLOSE CONFIG
+$     DEFINE SYS$ERROR _NLA0:
+$     DEFINE SYS$OUTPUT _NLA0:
+$     'Mcc' gccvers.c
+$     tmp = $status
+$     DEASSIGN SYS$ERROR _NLA0:
+$     DEASSIGN SYS$OUTPUT _NLA0:
+$     IF (silent) THEN GOSUB Shut_up
+$     DEFINE SYS$ERROR _NLA0:
+$     DEFINE SYS$OUTPUT _NLA0:
+$     IF vaxcrtl_exe .EQS. ""
+$     THEN 
+$       IF F$LOCATE("VAXCRTL",gcclib_olb).NE.F$LENGTH(gcclib_olb)
+$       THEN 
+$         link gccvers.obj,'gcclib_olb',SYS$LIBRARY:VAXCRTL/Library
+$         tmp = $status
+$       ELSE
+$         link gccvers.obj,'gcclib_olb'
+$         tmp = $status
+$       ENDIF
+$     ELSE
+$       OPEN/WRITE CONFIG GCCVERS.OPT
+$       WRITE CONFIG "SYS$SHARE:VAXCRTL/SHARE"
+$       CLOSE CONFIG
+$       link gccvers.obj,GCCVERS.OPT/OPT,'gcclib_olb'
+$       tmp = $status
+$     ENDIF
+$     DEASSIGN SYS$ERROR
+$     DEASSIGN SYS$OUTPUT
+$     IF (silent) THEN GOSUB Shut_up
+$     OPEN/WRITE CONFIG gccvers.out
+$     DEFINE SYS$ERROR CONFIG
+$     DEFINE SYS$OUTPUT CONFIG
+$     mcr []gccvers.exe
+$     tmp = $status
+$     CLOSE CONFIG
+$     DEASSIGN SYS$OUTPUT
+$     DEASSIGN SYS$ERROR
+$     IF (silent) THEN GOSUB Shut_up
+$     OPEN/READ CONFIG gccvers.out
+$     READ/END_OF_FILE=Gcc_cleanup CONFIG line
+$Gcc_cleanup:
+$     CLOSE CONFIG
+$     DELETE/NOLOG/NOCONFIRM gccvers.*;
+$     IF F$LOCATE("GNU C version ",line).NE.F$LENGTH(line)
+$     THEN 
+$       echo "You are not using GNU cc."
+$       GOTO Host_name
+$     ELSE 
+$       echo "You are using GNU cc ''line'"
+$       gccversion = line
+$       Using_Gnu_C := Y
+$       C_COMPILER_Replace = "CC=cc=''Mcc'"
+$       GOTO Include_dirs
+$     ENDIF
+$   ENDIF
+$ ENDIF
+$Cxx_Version_check:
+$ IF using_cxx
 $ THEN
-$   echo ""
-$   echo4 "Checking for GNU cc in disguise and/or its version number..." !>&4
-$   OPEN/WRITE CONFIG gccvers.c
-$   WRITE CONFIG "#include <stdlib.h>"  !DECC is sooo picky
+$   OPEN/WRITE CONFIG cxxvers.c
 $   WRITE CONFIG "#include <stdio.h>"
 $   WRITE CONFIG "int main() {"
-$   WRITE CONFIG "#ifdef __GNUC__"
-$   WRITE CONFIG "#ifdef __VERSION__"
-$   WRITE CONFIG "        printf(""%s\n"", __VERSION__);"
+$   WRITE CONFIG "#ifdef __DECCXX_VER"
+$   WRITE CONFIG "        printf(""%i\n"", __DECCXX_VER);"
 $   WRITE CONFIG "#else"
-$   WRITE CONFIG "        printf(""%s\n"", ""1"");"
-$   WRITE CONFIG "#endif"
+$   WRITE CONFIG "        printf(""%i\n"", ""0"");"
 $   WRITE CONFIG "#endif"
-$   WRITE CONFIG "        exit(0);"
+$   WRITE CONFIG "        return(0);"
 $   WRITE CONFIG "}"
 $   CLOSE CONFIG
-$   DEFINE SYS$ERROR _NLA0:
-$   DEFINE SYS$OUTPUT _NLA0:
-$   'Mcc' gccvers.c
+$   SET NOON
+$   DEFINE/USER_MODE SYS$ERROR NL:
+$   DEFINE/USER_MODE SYS$OUTPUT NL:
+$   'Mcc' cxxvers.c
 $   tmp = $status
-$   DEASSIGN SYS$ERROR _NLA0:
-$   DEASSIGN SYS$OUTPUT _NLA0:
+$   SET ON
 $   IF (silent) THEN GOSUB Shut_up
-$   DEFINE SYS$ERROR _NLA0:
-$   DEFINE SYS$OUTPUT _NLA0:
-$   IF vaxcrtl_exe .EQS. ""
-$   THEN 
-$     IF F$LOCATE("VAXCRTL",gcclib_olb).NE.F$LENGTH(gcclib_olb)
-$     THEN 
-$       link gccvers.obj,'gcclib_olb',SYS$LIBRARY:VAXCRTL/Library
-$       tmp = $status
-$     ELSE
-$       link gccvers.obj,'gcclib_olb'
-$       tmp = $status
-$     ENDIF
-$   ELSE
-$     OPEN/WRITE CONFIG GCCVERS.OPT
-$     WRITE CONFIG "SYS$SHARE:VAXCRTL/SHARE"
-$     CLOSE CONFIG
-$     link gccvers.obj,GCCVERS.OPT/OPT,'gcclib_olb'
-$     tmp = $status
-$   ENDIF
-$   DEASSIGN SYS$ERROR
-$   DEASSIGN SYS$OUTPUT
+$   SET NOON
+$   DEFINE/USER_MODE SYS$ERROR NL:
+$   DEFINE/USER_MODE SYS$OUTPUT NL:
+$   'ld' cxxvers.obj
+$   tmp = $status
+$   SET ON
 $   IF (silent) THEN GOSUB Shut_up
-$   OPEN/WRITE CONFIG gccvers.out
-$   DEFINE SYS$ERROR CONFIG
-$   DEFINE SYS$OUTPUT CONFIG
-$   mcr []gccvers.exe
+$   OPEN/WRITE CONFIG cxxvers.out
+$   SET NOON
+$   DEFINE/USER_MODE SYS$ERROR CONFIG
+$   DEFINE/USER_MODE SYS$OUTPUT CONFIG
+$   mcr []cxxvers.exe
 $   tmp = $status
+$   SET ON
 $   CLOSE CONFIG
-$   DEASSIGN SYS$OUTPUT
-$   DEASSIGN SYS$ERROR
 $   IF (silent) THEN GOSUB Shut_up
-$   OPEN/READ CONFIG gccvers.out
-$   READ/END_OF_FILE=Gcc_cleanup CONFIG line
-$Gcc_cleanup:
+$   OPEN/READ CONFIG cxxvers.out
+$   READ/END_OF_FILE=Cxx_cleanup CONFIG line
+$Cxx_cleanup:
 $   CLOSE CONFIG
-$   DELETE/NOLOG/NOCONFIRM gccvers.*;
-$   IF F$LOCATE("GNU C version ",line).NE.F$LENGTH(line)
-$   THEN 
-$     echo "You are not using GNU cc."
-$     GOTO Host_name
-$   ELSE 
-$     echo "You are using GNU cc ''line'"
-$     Using_Gnu_C = "Yes"
-$     C_COMPILER_Replace = "CC=cc=''Mcc'"
-$     GOTO Include_dirs
-$   ENDIF
+$   DELETE/NOLOG/NOCONFIRM cxxvers.*;
+$   echo "You are using CXX ''line'"
+$   cxxversion = line
+$   ccversion = line
+$   CALL Cxx_demangler_cleanup
+$ ENDIF
+$!
+$Cxx_demangler_cleanup: SUBROUTINE
+$!
+$!  If we do build with CXX these demangler Dbs will be left all over.
+$!  However, configure.com does try to remove the [.UU] sub directory.
+$!  Be sure to set default to the correct place before calling this sub.
+$!
+$ SET NOON
+$ IF F$SEARCH("[.CXX_REPOSITORY]*.*") .NES. "" THEN DELETE/NOLOG/NOCONFIRM [.CXX_REPOSITORY]*.*;*
+$ IF F$SEARCH("CXX_REPOSITORY.DIR") .NES. ""
+$ THEN
+$   SET PROTECTION=(SYSTEM:RWED,OWNER:RWED) CXX_REPOSITORY.DIR
+$   DELETE/NOLOG/NOCONFIRM CXX_REPOSITORY.DIR;
 $ ENDIF
-$endif
+$ SET ON
+$ EXIT
+$ ENDSUBROUTINE ! Cxx_demangler_cleanup
+$!
 $ GOTO Host_name
 $!
 $List_Parse:
@@ -1542,7 +1796,7 @@ $ DELETE/NOLOG/NOCONFIRM ccvms.lis;
 $ RETURN
 $!
 $Include_dirs:
-$!: What should the include directory be ?
+$!: What should the include directory be ? (.TLB text libraries)
 $ dflt = gcclib_olb 
 $ rp = "Where are the include files you want to use? "
 $ IF f$length( rp + "[''dflt'] " ).gt.76
@@ -1667,40 +1921,44 @@ $!: see if we have sigaction
 $!: see whether socketshr exists
 $ IF (F$SEARCH(F$PARSE("SocketShr","Sys$Share:.Exe")).NES."")
 $ THEN
-$   has_socketshr     = "T"
+$   Has_socketshr     = "T"
 $   echo ""
 $   echo4 "Hmm... Looks like you have SOCKETSHR's Berkeley networking support."
-$ endif
-$ if (Dec_C_Version .ge. 50200000)
+$ ELSE
+$   Has_socketshr     = "F"
+$ ENDIF
+$ IF (Dec_C_Version .GE. 50200000)
 $ THEN
 $   Has_Dec_C_Sockets = "T"
 $   echo ""
 $   echo4 "Hmm... Looks like you've got Dec C's Berkeley networking support."
+$ ELSE
+$   Has_Dec_C_Sockets = "F"
 $ ENDIF
 $ ! Hey, we've got both. Default to Dec C, then, since it's better
-$ if ("''Has_socketshr'".eq."T") .or.("''has_dec_c_sockets'".eq."T")
+$ IF Has_socketshr .OR. Has_Dec_C_Sockets
 $ THEN
 $   echo ""
 $   echo "You've got sockets available. Which socket stack do you want to"
 $   echo "build into perl?"
-$   if "''has_dec_c_sockets'".eqs."T"
+$   IF Has_Dec_C_Sockets
 $   THEN
 $     dflt = "DECC"
 $   else
 $     dflt = "SOCKETSHR"
 $   endif
 $   rp = "Choose socket stack (NONE"
-$   if "''has_socketshr'".eqs."T" THEN rp = rp + ",SOCKETSHR"
-$   if "''has_dec_c_sockets'".eqs."T" THEN rp = rp + ",DECC"
+$   IF Has_socketshr THEN rp = rp + ",SOCKETSHR"
+$   IF Has_Dec_C_Sockets THEN rp = rp + ",DECC"
 $   rp = rp + ") [''dflt'] "
 $   GOSUB myread
-$   IF "''ans'".eqs."" THEN ans = "''dflt'"
-$   has_dec_c_sockets = "F"
-$   has_socketshr = "F"
+$   IF ans .EQS. "" THEN ans = "''dflt'"
+$   Has_Dec_C_Sockets = "F"
+$   Has_socketshr = "F"
 $   ans = F$EDIT(ans,"TRIM,COMPRESS,LOWERCASE")
-$   IF ans.eqs."decc" then has_dec_c_sockets = "T"
-$   IF ans.eqs."socketshr" then has_socketshr = "T"
-$ endif
+$   IF ans.eqs."decc" then Has_Dec_C_Sockets = "T"
+$   IF ans.eqs."socketshr" then Has_socketshr = "T"
+$ ENDIF
 $!
 $!
 $! Ask if they want to build with VMS_DEBUG perl
@@ -1741,25 +1999,24 @@ $ ENDIF
 $!
 $! Ask if they want to build with MULTIPLICITY
 $ echo ""
-$ echo "The perl interpreter engine can be built in a way that makes it
-$ echo "possible for a program that embeds perl into it (and yes, you can
-$ echo "do that--it's pretty keen) to have multiple perl interpreters active
-$ echo "at once. There is some performance overhead, however, so you
+$ echo "Perl can be built so that multiple Perl interpreters can coexist"
+$ echo "within the same Perl executable."
+$ echo "There is some performance overhead, however, so you
 $ echo "probably don't want to choose this unless you're going to be doing
-$ echo "funky perl embedding."
+$ echo "things with embedded perl."
 $ dflt = "n"
-$ rp = "Build with MULTIPLICITY? [''dflt'] "
+$ rp = "Build Perl for multiplicity? [''dflt'] "
 $ GOSUB myread
-$ if ans.eqs."" then ans = dflt
-$ IF F$EXTRACT(0, 1, F$EDIT(ans,"COLLAPSE,UPCASE")) .eqs. "Y"
+$ IF ans.eqs."" then ans = dflt
+$ IF ans
 $ THEN
-$   use_multiplicity="Y"
+$   usemultiplicity="define"
 $ ELSE
-$   use_multiplicity="N"
+$   usemultiplicity="undef"
 $ ENDIF
 $!
 $! Ask if they want to build with 64-bit support
-$ IF (Archname.eqs."VMS_AXP").and.("''f$extract(1,3, f$getsyi(""version""))'".ges."7.1")
+$ IF (archname.eqs."VMS_AXP").and.("''f$extract(1,3, f$getsyi(""version""))'".ges."7.1")
 $ THEN
 $   dflt = use64bitint
 $   echo ""
@@ -1806,7 +2063,7 @@ $   ENDIF
 $ ENDIF ! AXP && >= 7.1
 $!
 $! Ask about threads, if appropriate
-$ if (Using_Dec_C.eqs."Yes")
+$ if Using_Dec_C
 $ THEN
 $   echo ""
 $   echo "This version of Perl can be built with threads. While really nifty,
@@ -1846,7 +2103,7 @@ $       use_ithreads="N"
 $       use_5005_threads="Y"
 $     ENDIF
 $     ! Are they on VMS 7.1 on an alpha?
-$     if (Archname.eqs."VMS_AXP").and.("''f$extract(1,3, f$getsyi(""version""))'".ges."7.1")
+$     if (archname.eqs."VMS_AXP").and.("''f$extract(1,3, f$getsyi(""version""))'".ges."7.1")
 $     THEN
 $       echo ""
 $       echo "Threaded perl can be linked to use multiple kernel threads
@@ -1929,8 +2186,11 @@ $ echo "name translation."
 $ dflt = "y"
 $ rp = "Use secure logical name translation? [''dflt'] "
 $ GOSUB myread
-$ if ans.eqs."" then ans="''dflt'"
-$ d_secintgenv = f$extract(0, 1, f$edit(ans,"TRIM,COMPRESS,UPCASE"))
+$ IF ans .eqs. "" THEN ans = dflt
+$ IF ans
+$ THEN d_secintgenv := Y
+$ ELSE d_secintgenv := N
+$ ENDIF
 $!
 $! Ask whether they want to default filetypes
 $ echo ""
@@ -1944,11 +2204,14 @@ $ echo "finally foo.com)."
 $ echo ""
 $ echo "This is currently broken in some configurations. Only enable it if
 $ echo "you know what you're doing. "
-$ dflt = "N"
+$ dflt = "n"
 $ rp = "Always use default file types? [''dflt'] "
 $ GOSUB myread
-$ if ans.eqs."" then ans="''dflt'"
-$ d_alwdeftype = f$extract(0, 1, f$edit(ans,"COLLAPSE,UPCASE"))
+$ IF ans .EQS. "" THEN ans = dflt
+$ IF ans
+$ THEN d_alwdeftype := Y
+$ ELSE d_alwdeftype := N
+$ ENDIF
 $!
 $! Ask if they want to use perl's memory allocator
 $ echo ""
@@ -1959,11 +2222,14 @@ $ echo "memory allocation statistics, if you choose to enable them.
 $ dflt = "n"
 $ rp = "Build with perl's memory allocator? [''dflt'] "
 $ GOSUB myread
-$ if ans.eqs."" then ans="''dflt'"
-$ mymalloc = f$extract(0, 1, f$edit(ans,"COLLAPSE,UPCASE"))
-$ if mymalloc.eqs."Y"
+$ IF ans .eqs. "" THEN ans = dflt
+$ IF ans
+$ THEN mymalloc := Y
+$ ELSE mymalloc := N
+$ ENDIF
+$ IF mymalloc
 $ THEN
-$   if use_debugging_perl.eqs."Y"
+$   IF use_debugging_perl
 $   THEN
 $     echo ""
 $     echo "Perl can keep statistics on memory usage if you choose to use
@@ -2004,7 +2270,7 @@ $ echo "
 $ echo "Which modules do you want to build into perl?"
 $! dflt = "Fcntl Errno File::Glob IO Opcode Byteloader Devel::Peek Devel::DProf Data::Dumper attrs re VMS::Stdio VMS::DCLsym B SDBM_File"
 $ dflt = "re Fcntl Errno File::Glob IO Opcode Devel::Peek Devel::DProf Data::Dumper attrs VMS::Stdio VMS::DCLsym B SDBM_File Thread Sys::Hostname"
-$ if Using_Dec_C.eqs."Yes"
+$ if Using_Dec_C
 $ THEN
 $   dflt = dflt + " POSIX"
 $ ENDIF
@@ -2046,11 +2312,11 @@ $ exloop3:
 $ dflt = f$edit(a,"trim")
 $!
 $ extensions = "''ans'"
-$ perl_known_extensions = "''dflt'"
+$ known_extensions = "''dflt'"
 $!
 $! %Config-I-VMS, determine build/make utility here (make gmake mmk mms)
 $ echo ""
-$ echo "%Config-I-VMS, Checking your ""make"" utilities..."
+$ echo "Checking your ""make"" utilities..."
 $! If the 'build' that you use is not here add it and it's test
 $! switch to the _END_ of these strings (and increment max_build)
 $! (e.g. builders = builders + "/FOOMAKE" 
@@ -2073,11 +2339,16 @@ $Build_probe:
 $ build = F$ELEMENT(n,"/",builders)
 $ probe  = F$ELEMENT(n,"!",probers)
 $ echo "Testing whether you have ''build' on your system..."
+$!
+$! Noted with GNU Make version 3.60  that the $status and $severity
+$! with the 'probe' Makefile appear to be: $STATUS == "%X1000000C"
+$! $SEVERITY == "4".
+$!
 $ SET NOON
 $ ON CONTROL_Y THEN GOTO Reenable_messages_build
 $ SET MESSAGE/NOFAC/NOSEV/NOIDENT/NOTEXT
 $ 'build' 'probe'
-$ IF ($SEVERITY .EQ. 1)
+$ IF ($SEVERITY .EQ. 1) ! not adequate?
 $ THEN 
 $   echo "OK."
 $   IF (build .EQS. orig_dflt) 
@@ -2117,7 +2388,7 @@ $   TYPE SYS$INPUT:
  utility of some sort and after checking my "builders" list I cannot find
  the symbol or command you use on your system to compile programs.
 
-$   READ SYS$COMMAND/PROMPT="%Config-I-VMS, Which ""MMS"" do you use? " ans
+$   READ SYS$COMMAND/PROMPT="Which ""MMS"" do you use? " ans
 $   ans = F$EDIT(ans,"TRIM, COMPRESS")
 $   ans = F$EXTRACT(0,F$LOCATE(" ",ans),ans) !throw out "-f Makefile." here
 $   IF (ans .EQS. "") 
@@ -2167,10 +2438,12 @@ $ THEN
 $   makefile    = ""              !wrt MANIFEST dir
 $   UUmakefile  = "[-]DESCRIP.MMS" !wrt CWD dir
 $   DEFmakefile = "DESCRIP.MMS"    !wrt DEF dir (?)
+$   Makefile_SH = "descrip_mms.template"
 $ ELSE
 $   makefile    = " -f Makefile."  !wrt MANIFEST dir
 $   UUmakefile  = "[-]Makefile."   !wrt CWD dir
 $   DEFmakefile = "Makefile."      !wrt DEF dir (?)
+$   Makefile_SH = "Makefile.in"
 $ ENDIF
 $!
 $ IF macros.NES."" 
@@ -2191,14 +2464,2861 @@ $   extra_flags = "''extra_flags'" + "/Names=As_Is"
 $ endif
 $ extra_flags = "''extra_flags'" + "''user_c_flags'"
 $!
-$! Invoke the subconfig piece
+$ min_pgflquota = "100000"
+$ pgflquota = F$STRING(F$GETJPI("","PGFLQUOTA"))
+$ IF pgflquota .LES. min_pgflquota
+$ THEN
+$   echo4 "Your PGFLQUOTA of ''pgflquota' appears too small to build ''package'."
+$   READ SYS$COMMAND/PROMPT="Continue? [n] " ans
+$   IF ans
+$   THEN
+$     echo4 "Continuing..."
+$   ELSE
+$     echo4 "ABORTING..."
+$     GOTO Clean_up
+$   ENDIF
+$ ENDIF
 $!
 $ echo ""
-$ echo4 "Checking the C run-time library"
-$ dflt = F$ENVIRONMENT("DEFAULT")
-$ SET DEFAULT [-.vms]
-$ @subconfigure
-$ SET DEFAULT 'dflt
+$ echo4 "Checking the C run-time library."
+$!
+$! SUBCONFIGURE.COM
+$!
+$!  - build a config.sh for VMS Perl.
+$!  - use built config.sh to take config_h.SH -> config.h
+$!  - also take vms/descrip_mms.template -> descrip.mms (VMS Makefile)
+$!              vms/Makefile.in -> Makefile. (VMS GNU Makefile?)
+$!              vms/Makefile.SH -> Makefile. (VMS GNU Makefile?)
+$!  - build Build_Ext.Com extension builder procedure.
+$!
+$! Note for folks from other platforms changing things in here:
+$!
+$!   Fancy changes (based on compiler capabilities or VMS version or
+$!   whatever) are tricky, so go ahead and punt on those.
+$!
+$!   Simple changes, though (say, always setting something to 1, or undef,
+$!   or something like that) are straightforward.  Adding a new constant 
+$!   item for the ultimately created config.sh requires at least one 
+$!   (possibly more) line(s) to this file.
+$!
+$!   Add a line in the format:
+$!
+$!     $ WC "foo='undef'"
+$!
+$!   somewhere between the line tagged '##BEGIN WRITE NEW CONSTANTS HERE##'
+$!   and the one tagged '##END WRITE NEW CONSTANTS HERE##' (note the order
+$!   is sorted ASCII and corresponds to the output of config.sh in the 
+$!   Bourne shell version of Configure).
+$!   Be very careful with quoting, as it can be tricky.
+$!   For example if instead of a constant string like 'undef' or 'define' 
+$!   you wanted to add something to VMS's config.sh that looks like:
+$!
+$!     blank_string=''
+$!
+$!   then add a line that looks like this before the 
+$!   '##END WRITE NEW CONSTANTS HERE##' tagged line:
+$!
+$!     $ WC "blank_string='" + "'"
+$!
+$!   (+ is the string concatenator and "''var'" has the effect 
+$!    of "${var}" in perl or sh, but "'const'" is not interpolated).
+$!
+$!   Note that unitialized variables, such as a line like:
+$!
+$!     $ WC "new_var='" + new_var + "'"
+$!
+$!   should be avoided unless new_var has a value assigned prior 
+$!   to that line (think of perl's -w warnings).
+$!
+$!     %DCL-W-UNDSYM, undefined symbol - check validity and spelling
+$!     \NEW_VAR\
+$!
+$!
+$ vms_ver = F$EXTRACT(1,3, osvers)
+$ IF F$LENGTH(Mcc) .EQ. 0 THEN Mcc := "cc"
+$ MCC = f$edit(mcc, "UPCASE")
+$ C_Compiler_Replace := "CC=CC=''Mcc'''ccflags'"
+$ IF Using_Dec_C
+$ THEN
+$   Checkcc := "''Mcc'/prefix=all"
+$ ELSE
+$   IF using_cxx
+$   THEN
+$     Checkcc := cxx
+$   ELSE
+$     Checkcc := "''Mcc'"
+$   ENDIF
+$ ENDIF
+$ ccflags = ccflags + extra_flags
+$ IF be_case_sensitive
+$ THEN
+$   d_vms_be_case_sensitive = "define"
+$ ELSE
+$   d_vms_be_case_sensitive = "undef"
+$ ENDIF
+$! Some constant defaults.
+$ hwname = f$getsyi("HW_NAME")
+$ myname = myhostname
+$ IF myname .EQS. "" THEN myname = F$TRNLNM("SYS$NODE")
+$!
+$ ccdlflags=""
+$ cccdlflags=""
+$!
+$ IF use64bitint .OR. use64bitint .EQS. "define"
+$ THEN
+$   use64bitint = "define"
+$   uselargefiles = "define"
+$   uselongdouble = "define"
+$   usemorebits = "define"
+$ ELSE
+$   use64bitint = "undef"
+$   uselargefiles = "undef"
+$   uselongdouble = "undef"
+$   usemorebits = "undef"
+$ ENDIF
+$ IF use64bitall .OR. use64bitall .EQS. "define"
+$ THEN
+$   use64bitall = "define"
+$ ELSE
+$   use64bitall = "undef"
+$ ENDIF
+$!
+$ usemymalloc=mymalloc
+$!
+$ perl_cc=Mcc
+$!
+$ IF (sharedperl .AND. F$GETSYI("HW_MODEL") .GE. 1024)
+$ THEN
+$   obj_ext=".abj"
+$   so="axe"
+$   dlext="axe"
+$   exe_ext=".axe"
+$   lib_ext=".alb"
+$ ELSE
+$   obj_ext=".obj"
+$   so="exe"
+$   dlext="exe"
+$   exe_ext=".exe"
+$   lib_ext=".olb"
+$ ENDIF
+$ dlobj="dl_vms''obj_ext'"
+$!
+$ cppstdin="''perl_cc'/noobj/preprocess=sys$output sys$input"
+$ cppminus=" "
+$ cpprun="''perl_cc'/noobj/preprocess=sys$output sys$input"
+$ cpplast=" "
+$!
+$ timetype="time_t"
+$ signal_t="void"
+$ stdchar="char"
+$!
+$ IF mymalloc
+$ THEN d_mymalloc="define"
+$ ELSE d_mymalloc="undef"
+$ ENDIF
+$!
+$ usedl="define"
+$ startperl="""$ perl 'f$env(\""procedure\"")' 'p1' 'p2' 'p3' 'p4' 'p5' 'p6' 'p7' 'p8'  !\n$ exit++ + ++$status != 0 and $exit = $status = undef;"""
+$!: locate the preferred pager for this system
+$! rp="What pager is used on your system?"
+$ pager="most"
+$!
+$ IF ((Use_Threads) .AND. (vms_ver .LES. "6.2"))
+$ THEN
+$   libs="SYS$SHARE:CMA$LIB_SHR.EXE/SHARE SYS$SHARE:CMA$RTL.EXE/SHARE SYS$SHARE:CMA$OPEN_LIB_SHR.exe/SHARE SYS$SHARE:CMA$OPEN_RTL.exe/SHARE"
+$ ELSE
+$   libs=" "
+$ ENDIF
+$ IF Using_Dec_C
+$ THEN
+$   libc="(DECCRTL)"
+$ ELSE
+$   libc=" "
+$ ENDIF
+$!
+$! Are we 64 bit?
+$!
+$ IF use64bitint .OR. use64bitint .EQS. "define"
+$ THEN
+$   d_PRId64 = "define"
+$   d_PRIfldbl = "define"
+$   d_PRIgldbl = "define"
+$   d_PRIu64 = "define"
+$   d_PRIo64 = "define"
+$   d_PRIx64 = "define"
+$   sPRId64 = """Ld"""
+$!   sPRIeldbl = """Lf"""
+$   sPRIfldbl = """Lf"""
+$   sPRIgldbl = """Lg"""
+$!   sPRIi64 = """Li"""
+$   sPRIo64 = """Lo"""
+$   sPRIu64 = """Lu"""
+$   sPRIx64 = """Lx"""
+$   d_quad = "define"
+$   quadtype = "long long"
+$   uquadtype = "unsigned long long"
+$   quadkind  = "QUAD_IS_LONG_LONG"
+$   d_frexpl = "define"
+$   d_isnanl = "define"
+$   d_modfl = "define"
+$ ELSE
+$   d_PRId64 = "undef"
+$   d_PRIfldbl = "undef"
+$   d_PRIgldbl = "undef"
+$   d_PRIu64 = "undef"
+$   d_PRIo64 = "undef"
+$   d_PRIx64 = "undef"
+$   sPRId64 = ""
+$!   sPRIeldbl = ""
+$   sPRIfldbl = ""
+$   sPRIgldbl = ""
+$!   sPRIi64 = ""
+$   sPRIo64 = ""
+$   sPRIu64 = ""
+$   sPRIx64 = ""
+$   d_quad = "undef"
+$   quadtype = "long"
+$   uquadtype = "unsigned long"
+$   quadkind  = "QUAD_IS_LONG"
+$   d_frexpl = "undef"
+$   d_isnanl = "undef"
+$   d_modfl = "undef"
+$ ENDIF
+$!
+$! Now some that we build up
+$!
+$ IF Use_Threads
+$ THEN
+$   IF use_5005_threads
+$   THEN
+$     arch = "''arch'-thread"
+$     archname = "''archname'-thread"
+$     d_old_pthread_create_joinable = "undef"
+$     old_pthread_create_joinable = " "
+$     use5005threads = "define"
+$     useithreads = "undef"
+$   ELSE
+$     arch = "''arch'-ithread"
+$     archname = "''archname'-ithread"
+$     d_old_pthread_create_joinable = "undef"
+$     old_pthread_create_joinable = " "
+$     use5005threads = "undef"
+$     useithreads = "define"
+$   ENDIF
+$ ELSE
+$   d_old_pthread_create_joinable = "undef"
+$   old_pthread_create_joinable = " "
+$   use5005threads = "undef"
+$   useithreads = "undef"
+$ ENDIF
+$!
+$! Some that we need to invoke the compiler for
+$!
+$!
+$! handy construction aliases/symbols
+$!
+$ OS := "open/write CONFIG []try.c"
+$ WS := "write CONFIG"
+$ CS := "close CONFIG"
+$ DS := "delete/nolog/noconfirm []try.*;*"
+$ Needs_Opt := N
+$ good_compile = %X10B90001
+$ IF Using_Gnu_C
+$ THEN
+$   open/write OPTCHAN []try.opt
+$   write OPTCHAN "Gnu_CC:[000000]gcclib.olb/library"
+$   write OPTCHAN "Sys$Share:VAXCRTL/Share"
+$   Close OPTCHAN
+$   Needs_Opt := Y
+$   good_compile = %X10000001
+$ ENDIF
+$ IF using_cxx
+$ THEN
+$   good_compile = %X15F60001
+$ ENDIF
+$ good_link = %X10000001
+$ tmp = "" ! null string default
+$!
+$ GOTO beyond_compile_ok
+$!
+$! Check for type sizes 
+$!
+$type_size_check: 
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "int main()
+$ WS "{"
+$ WS "printf(""%d\n"", sizeof(''tmp'));"
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ GOSUB compile
+$ RETURN
+$!
+$!: locate header file
+$findhdr:
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "#include <''tmp'>"
+$ WS "int main()
+$ WS "{"
+$ WS "printf(""define\n"");"
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ GOSUB link_ok
+$ RETURN
+$!
+$!: define an alternate in-header-list? function
+$inhdr:
+$!
+$ GOSUB findhdr
+$ IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
+$ THEN
+$   echo4 "<''tmp'> found."
+$   tmp = "define"
+$ ELSE
+$   echo4 "<''tmp'> NOT found."
+$   tmp = "undef"
+$ ENDIF
+$ RETURN
+$!
+$!: define an is-in-libc? function
+$inlibc: 
+$ GOSUB link_ok
+$ IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
+$ THEN
+$   echo4 "''tmp'() found."
+$   tmp = "define"
+$ ELSE
+$   echo4 "''tmp'() NOT found."
+$   tmp = "undef"
+$ ENDIF
+$ RETURN
+$!
+$!: define a shorthand compile call
+$compile:
+$ GOSUB link_ok
+$just_mcr_it:
+$ IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
+$ THEN
+$   OPEN/WRITE CONFIG []try.out
+$   DEFINE/USER_MODE SYS$ERROR CONFIG
+$   DEFINE/USER_MODE  SYS$OUTPUT CONFIG
+$   MCR []try.exe
+$   CLOSE CONFIG
+$   OPEN/READ CONFIG []try.out
+$   READ CONFIG tmp
+$   CLOSE CONFIG
+$   DELETE/NOLOG/NOCONFIRM []try.out;
+$   DELETE/NOLOG/NOCONFIRM []try.exe;
+$ ELSE
+$   tmp = "" ! null string default
+$ ENDIF
+$ RETURN
+$!
+$link_ok:
+$ GOSUB compile_ok
+$ DEFINE/USER_MODE SYS$ERROR _NLA0:
+$ DEFINE/USER_MODE SYS$OUTPUT _NLA0:
+$ SET NOON
+$ IF Needs_Opt
+$ THEN
+$   'ld' try.obj,try.opt/opt
+$   link_status = $status
+$ ELSE
+$   'ld' try.obj
+$   link_status = $status
+$ ENDIF
+$ SET ON
+$ IF F$SEARCH("try.obj") .NES. "" THEN DELETE/NOLOG/NOCONFIRM try.obj;
+$ RETURN
+$!
+$!: define a shorthand compile call for compilations that should be ok.
+$compile_ok:
+$ DEFINE/USER_MODE SYS$ERROR _NLA0:
+$ DEFINE/USER_MODE SYS$OUTPUT _NLA0:
+$ SET NOON
+$ 'Checkcc' try.c
+$ compile_status = $status
+$ SET ON
+$ DELETE/NOLOG/NOCONFIRM try.c;
+$ RETURN
+$!
+$beyond_compile_ok:
+$!
+$! Check for __STDC__
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "int main()
+$ WS "{"
+$ WS "#ifdef __STDC__
+$ WS "printf(""42\n"");
+$ WS "#else
+$ WS "printf(""1\n"");
+$ WS "#endif
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ GOSUB compile
+$ cpp_stuff=tmp
+$ IF F$INTEGER(tmp) .eq. 42
+$ THEN
+$   echo4 "Your C compiler and pre-processor defines the symbol:"
+$   echo4 "__STDC__"
+$ ENDIF
+$!
+$! Check for double size
+$!
+$ echo4 "Checking to see how big your double precision numbers are..."
+$ tmp="double"
+$ GOSUB type_size_check
+$ doublesize = tmp
+$ echo "Your double is ''doublesize' bytes long."
+$!
+$! Check for long double size
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "int main()
+$ WS "{"
+$ WS "printf(""%d\n"", sizeof(long double));
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ echo4 "Checking to see if you have long double..."
+$ GOSUB link_ok
+$ IF link_status .NE. good_link
+$ THEN
+$   longdblsize="0"
+$   d_longdbl="undef"
+$   echo "You do not have long double."
+$ ELSE
+$   echo "You have long double."
+$   echo4 "Checking to see how big your long doubles are..."
+$   GOSUB just_mcr_it
+$   longdblsize = tmp
+$   d_longdbl = "define"
+$   echo "Your long doubles are ''longdblsize' bytes long."
+$ ENDIF
+$!
+$!: check for long long
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "int main()
+$ WS "{"
+$ WS "printf(""%d\n"", sizeof(long long));
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ echo4 "Checking to see if you have long long..."
+$ GOSUB link_ok
+$ IF link_status .NE. good_link
+$ THEN
+$   longlongsize="0"
+$   d_longlong="undef"
+$   echo "You do not have long long."
+$ ELSE
+$   echo "You have long long."
+$   echo4 "Checking to see how big your long longs are..."
+$   GOSUB just_mcr_it
+$   longlongsize = tmp
+$   d_longlong = "define"
+$   echo "Your long longs are ''longlongsize' bytes long."
+$ ENDIF
+$!
+$! Check the prototype for getgid
+$!
+$ echo "Looking for the type for group ids returned by getgid()."
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "#include <types.h>
+$ WS "int main()
+$ WS "{"
+$ WS "gid_t foo;
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ GOSUB compile_ok
+$ IF compile_status .NE. good_compile
+$ THEN
+$!   Okay, gid_t failed. Must be unsigned int
+$   gidtype = "unsigned int"
+$   echo4 "assuming ""''gidtype'""."
+$ ELSE
+$   gidtype = "gid_t"
+$   echo4 "gid_t found."
+$ ENDIF
+$!
+$! Check to see if we've got dev_t
+$!
+$ echo "Looking for the type for dev."
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "#include <types.h>
+$ WS "int main()
+$ WS "{"
+$ WS "dev_t foo;
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ GOSUB compile_ok
+$ IF compile_status .NE. good_compile
+$ THEN
+$!   Okay, dev_t failed. Must be unsigned int
+$   devtype = "unsigned int"
+$   echo4 "assuming ""''devtype'""."
+$ ELSE
+$   devtype = "dev_t"
+$   echo4 "dev_t found."
+$ ENDIF
+$!
+$! Check to see if we've got unistd.h (which we ought to, but you never know)
+$!
+$ i_netdb = "undef"
+$ tmp = "unistd.h"
+$ GOSUB inhdr
+$ i_unistd = tmp
+$!
+$!: see if this is a libutil.h system
+$!
+$ tmp = "libutil.h"
+$ GOSUB inhdr
+$ i_libutil = tmp
+$!
+$! Check to see if we've got shadow.h (probably not, but...)
+$!
+$ tmp = "shadow.h"
+$ GOSUB inhdr
+$ i_shadow = tmp
+$!
+$! Check to see if we've got socks.h (probably not, but...)
+$!
+$ tmp = "socks.h"
+$ GOSUB inhdr
+$ i_socks = tmp
+$!
+$! Check the prototype for select
+$!
+$ IF Has_Dec_C_Sockets .OR. Has_Socketshr
+$ THEN
+$   OS
+$   WS "#ifdef __DECC
+$   WS "#include <stdlib.h>
+$   WS "#endif
+$   WS "#include <stdio.h>
+$   WS "#include <types.h>
+$   IF i_unistd .EQS. "define" THEN WS "#include <unistd.h>
+$   IF Has_Socketshr
+$   THEN
+$     WS "#include <socketshr.h>"
+$   ELSE
+$     WS "#include <time.h>
+$     WS "#include <socket.h>
+$   ENDIF
+$   WS "int main()
+$   WS "{"
+$   WS "fd_set *foo;
+$   WS "int bar;
+$   WS "foo = NULL;
+$   WS "bar = select(2, foo, foo, foo, NULL);
+$   WS "exit(0);
+$   WS "}"
+$   CS
+$   GOSUB compile_ok
+$   IF compile_status .NE. good_compile
+$   THEN
+$!   Okay, select failed.  Must be an int *
+$     selecttype = "int *"
+$     echo4 "select() NOT found."
+$   ELSE
+$     selecttype="fd_set *"
+$     echo4 "select() found."
+$   ENDIF
+$ ELSE
+$   ! No sockets, so stick in an int * : no select, so pick a harmless default
+$   selecttype = "int *"
+$ ENDIF
+$!
+$! Check to see if fd_set exists
+$!
+$ echo "Checking to see how well your C compiler handles fd_set and friends ..."
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "#include <types.h>
+$ IF Has_Socketshr
+$ THEN
+$   WS "#include <socketshr.h>"
+$ ENDIF
+$ IF Has_Dec_C_Sockets
+$ THEN
+$   WS "#include <time.h>
+$   WS "#include <socket.h>
+$ ENDIF
+$ WS "int main()
+$ WS "{"
+$ WS "fd_set *foo;
+$ WS "int bar;
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ GOSUB compile_ok
+$ IF compile_status .ne. good_compile
+$ THEN
+$!  Okay, fd_set failed. Must not exist
+$   d_fd_set = "undef"
+$   echo4 "Hmm, your compiler has some difficulty with fd_set."
+$ ELSE
+$   d_fd_set="define"
+$   echo4 "Well, your system knows about the normal fd_set typedef..."
+$ ENDIF
+$!
+$! Check for inttypes.h
+$!
+$ tmp = "inttypes.h"
+$ GOSUB inhdr
+$ i_inttypes = tmp
+$!
+$! Check to see if off64_t exists
+$!
+$ echo4 "Checking to see if you have off64_t..."
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "#include <types.h>
+$ WS "#''i_inttypes IIH
+$ WS "#ifdef IIH
+$ WS "#include <inttypes.h>
+$ WS "#endif
+$ WS "int main()
+$ WS "{"
+$ WS "off64_t bar;
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ GOSUB compile_ok
+$ IF compile_status .EQ. good_compile
+$ THEN
+$   d_off64_t="define"
+$   echo "You have off64_t."
+$ ELSE
+$   d_off64_t = "undef"
+$   echo "You do not have off64_t."
+$ ENDIF
+$!
+$! Check to see if fpos64_t exists
+$!
+$ echo4 "Checking to see if you have fpos64_t..."
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "#include <types.h>
+$ WS "#''i_inttypes IIH
+$ WS "#ifdef IIH
+$ WS "#include <inttypes.h>
+$ WS "#endif
+$ WS "int main()
+$ WS "{"
+$ WS "fpos64_t bar;
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ GOSUB compile_ok
+$ IF compile_status .EQ. good_compile
+$ THEN
+$   d_fpos64_t="define"
+$   echo "You have fpos64_t."
+$ ELSE
+$   d_fpos64_t = "undef"
+$   echo "You do not have fpos64_t."
+$ ENDIF
+$!
+$! Check to see if int64_t exists
+$!
+$ echo4 "Checking to see if you have int64_t..."
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "#include <types.h>
+$ WS "#''i_inttypes IIH
+$ WS "#ifdef IIH
+$ WS "#include <inttypes.h>
+$ WS "#endif
+$ WS "int main()
+$ WS "{"
+$ WS "int64_t bar;
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ GOSUB compile_ok
+$ IF compile_status .EQ. good_compile
+$ THEN
+$   d_int64_t="define"
+$   echo "You have int64_t."
+$ ELSE
+$   d_int64_t = "undef"
+$   echo "You do not have int64_t."
+$ ENDIF
+$!
+$!: see if this is a netdb.h system
+$ IF Has_Dec_C_Sockets
+$ THEN 
+$   tmp = "netdb.h"
+$   GOSUB inhdr
+$   i_netdb = tmp
+$ ENDIF
+$!
+$! Check for h_errno
+$!
+$ echo4 "Checking to see if you have h_errno..."
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ IF i_unistd .EQS. "define" THEN WS "#include <unistd.h>
+$ IF i_netdb  .EQS. "define" THEN WS "#include <netdb.h>
+$ WS "int main()
+$ WS "{"
+$ WS "h_errno = 3;
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ GOSUB link_ok
+$ IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
+$ THEN
+$   d_herrno="define"
+$   echo "You have h_errno."
+$ ELSE
+$   d_herrno="undef"
+$   echo "You do not have h_errno."
+$ ENDIF
+$!
+$! Check to see if gethostname exists
+$!
+$ IF Has_Dec_C_Sockets .OR. Has_Socketshr
+$ THEN
+$   OS
+$   WS "#ifdef __DECC
+$   WS "#include <stdlib.h>
+$   WS "#endif
+$   WS "#include <stdio.h>
+$   WS "#include <types.h>
+$   IF Has_Socketshr
+$   THEN
+$     WS "#include <socketshr.h>"
+$   ELSE
+$     WS "#include <time.h>
+$     WS "#include <socket.h>
+$   ENDIF
+$   WS "int main()
+$   WS "{"
+$   WS "char name[100];
+$   WS "int bar, baz;
+$   WS "bar = 100;
+$   WS "baz = gethostname(name, bar);
+$   WS "exit(0);
+$   WS "}"
+$   CS
+$   GOSUB link_ok
+$   IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
+$   THEN
+$     d_gethname="define"
+$     echo4 "gethostname() found."
+$   ELSE
+$     d_gethname="undef"
+$   ENDIF
+$ ELSE
+$   ! No sockets, so no gethname
+$   d_gethname = "undef"
+$ ENDIF
+$!
+$! Check for sys/file.h
+$!
+$ tmp = "sys/file.h"
+$ GOSUB inhdr
+$ i_sysfile = tmp
+$!
+$! Check for sys/utsname.h
+$!
+$ tmp = "sys/utsname.h"
+$ GOSUB inhdr
+$ i_sysutsname = tmp
+$!
+$! Check for syslog.h
+$!
+$ tmp = "syslog.h"
+$ GOSUB inhdr
+$ i_syslog = tmp
+$!
+$! Check for poll.h
+$!
+$ tmp = "poll.h"
+$ GOSUB inhdr
+$ i_poll = tmp
+$!
+$! Check for sys/uio.h
+$!
+$ tmp = "sys/uio.h"
+$ GOSUB inhdr
+$ i_sysuio = tmp
+$!
+$! Check for sys/mode.h
+$!
+$ tmp = "sys/mode.h"
+$ GOSUB inhdr
+$ i_sysmode = tmp
+$!
+$! Check for sys/access.h
+$!
+$ tmp = "sys/access.h"
+$ GOSUB inhdr
+$ i_sysaccess = tmp
+$!
+$! Check for sys/security.h
+$!
+$ tmp = "sys/security.h"
+$ GOSUB inhdr
+$ i_syssecrt = tmp
+$!
+$! Check for fcntl.h
+$!
+$ tmp = "fcntl.h"
+$ GOSUB inhdr
+$ i_fcntl = tmp
+$!
+$! Check for fcntl
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "#include <fcntl.h>
+$ WS "int main()
+$ WS "{"
+$ WS "fcntl(1,2,3);
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ tmp = "fcntl"
+$ GOSUB inlibc
+$ d_fcntl = tmp
+$!
+$! Check for memchr
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <string.h>
+$ WS "int main()
+$ WS "{"
+$ WS "char * place;
+$ WS "place = memchr(""foo"", 47, 3)
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ tmp = "memchr"
+$ GOSUB inlibc
+$ d_memchr = tmp
+$!
+$! Check for strtoull
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <string.h>
+$ WS "int main()
+$ WS "{"
+$ WS "unsigned __int64 result;
+$ WS "result = strtoull(""123123"", NULL, 10);
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ tmp = "strtoull"
+$ GOSUB inlibc
+$ d_strtoull = tmp
+$!
+$! Check for strtouq
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <string.h>
+$ WS "int main()
+$ WS "{"
+$ WS "unsigned __int64 result;
+$ WS "result = strtouq(""123123"", NULL, 10);
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ tmp = "strtouq"
+$ GOSUB inlibc
+$ d_strtouq = tmp
+$!
+$! Check for strtoll
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <string.h>
+$ WS "int main()
+$ WS "{"
+$ WS "__int64 result;
+$ WS "result = strtoll(""123123"", NULL, 10);
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ tmp = "strtoll"
+$ GOSUB inlibc
+$ d_strtoll = tmp
+$!
+$! Check for strtold
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <string.h>
+$ WS "int main()
+$ WS "{"
+$ WS "long double result;
+$ WS "result = strtold(""123123"", NULL, 10);
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ tmp = "strtold"
+$ GOSUB inlibc
+$ d_strtold = tmp
+$!
+$! Check for atoll
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <string.h>
+$ WS "int main()
+$ WS "{"
+$ WS " __int64 result;
+$ WS "result = atoll(""123123"");
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ tmp = "atoll"
+$ GOSUB inlibc
+$ d_atoll = tmp
+$!
+$! Check for atolf
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <string.h>
+$ WS "int main()
+$ WS "{"
+$ WS "long double
+$ WS "result = atolf(""123123"");
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ tmp = "atolf"
+$ GOSUB inlibc
+$ d_atolf = tmp
+$!
+$! Check for access
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "int main()
+$ WS "{"
+$ WS "access("foo", F_OK);
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ tmp = "acess"
+$ GOSUB inlibc
+$ d_access = tmp
+$!
+$! Check for bzero
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "#include <strings.h>
+$ WS "int main()
+$ WS "{"
+$ WS "char foo[10];
+$ WS "bzero(foo, 10);
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ tmp = "bzero"
+$ GOSUB inlibc
+$ d_bzero = tmp
+$!
+$! Check for bcopy
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "#include <strings.h>
+$ WS "int main()
+$ WS "{"
+$ WS "char foo[10], bar[10];
+$ WS "bcopy(""foo"", bar, 3);
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ tmp = "bcopy"
+$ GOSUB inlibc
+$ d_bcopy = tmp
+$!
+$! Check for mkstemp
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "int main()
+$ WS "{"
+$ WS "mkstemp(""foo"");
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ tmp = "mkstemp"
+$ GOSUB inlibc
+$ d_mkstemp = tmp
+$!
+$! Check for mkstemps
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "int main()
+$ WS "{"
+$ WS "mkstemps(""foo"", 1);
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ tmp = "mkstemps"
+$ GOSUB inlibc
+$ d_mkstemps = tmp
+$!
+$! Check for iconv
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "#include <iconv.h>
+$ WS "int main()
+$ WS "{"
+$ WS "  iconv_t cd = (iconv_t)0;"
+$ WS "  char *inbuf, *outbuf;"
+$ WS "  size_t inleft, outleft;"
+$ WS "  iconv(cd, &inbuf, &inleft, &outbuf, &outleft);"
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ GOSUB link_ok
+$ IF compile_status .ne. good_compile
+$ THEN
+$   d_iconv="undef"
+$   i_iconv="undef"
+$ ELSE
+$   IF link_status .ne. good_link
+$   THEN
+$     d_iconv="undef"
+$     i_iconv="undef"
+$   ELSE
+$     d_iconv="define"
+$     i_iconv="define"
+$   ENDIF
+$ ENDIF
+$ IF i_iconv .eqs. "define" 
+$ THEN echo4 "<iconv.h> found."
+$ ELSE echo4 "<iconv.h> NOT found."
+$ ENDIF
+$!
+$! Check for mkdtemp
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "int main()
+$ WS "{"
+$ WS "mkdtemp(""foo"");
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ tmp = "mkdtemp"
+$ GOSUB inlibc
+$ d_mkdtemp = tmp
+$!
+$! Check for setvbuf
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "int main()
+$ WS "{"
+$ WS "FILE *foo;
+$ WS "char Buffer[99];
+$ WS "foo = fopen(""foo"", ""r"");
+$ WS "setvbuf(foo, Buffer, 0, 0);
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ tmp = "setvbuf"
+$ GOSUB inlibc
+$ d_setvbuf = tmp
+$!
+$! Check for setenv
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "int main()
+$ WS "{"
+$ WS "setenv(""FOO"", ""BAR"", 0);
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ tmp = "setenv"
+$ GOSUB inlibc
+$ d_setenv = tmp
+$!
+$! Check for setproctitle
+$!
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "int main()
+$ WS "{"
+$ WS "setproctitle(""%s"", ""FOO"");
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ tmp = "setproctitle"
+$ GOSUB inlibc
+$ d_setproctitle = tmp
+$!
+$! Check for <netinet/in.h>
+$!
+$ IF Has_Dec_C_Sockets .or. Has_Socketshr
+$ THEN
+$   tmp = "netinet/in.h"
+$   GOSUB inhdr
+$   i_niin = tmp
+$ ELSE
+$   i_niin="undef"
+$ ENDIF
+$!
+$! Check for <netinet/tcp.h>
+$!
+$ IF Has_Dec_C_Sockets .or. Has_Socketshr
+$ THEN
+$   tmp = "netinet/tcp.h"
+$   GOSUB inhdr
+$   i_netinettcp = tmp
+$ ELSE
+$   i_netinettcp="undef"
+$ ENDIF
+$!
+$! Check for endhostent
+$!
+$ IF Has_Dec_C_Sockets .or. Has_Socketshr
+$ THEN
+$   OS
+$   WS "#ifdef __DECC
+$   WS "#include <stdlib.h>
+$   WS "#endif
+$   WS "#include <stdio.h>
+$   IF Has_Socketshr
+$   THEN WS "#include <socketshr.h>"
+$   ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>
+$   ENDIF
+$   WS "int main()
+$   WS "{"
+$   WS "endhostent();
+$   WS "exit(0);
+$   WS "}"
+$   CS
+$   tmp = "endhostent"
+$   GOSUB inlibc
+$   d_endhent = tmp
+$ ELSE
+$   d_endhent="undef"
+$ ENDIF
+$!
+$! Check for endnetent
+$!
+$ IF Has_Dec_C_Sockets .or. Has_Socketshr
+$ THEN
+$   OS
+$   WS "#ifdef __DECC
+$   WS "#include <stdlib.h>
+$   WS "#endif
+$   WS "#include <stdio.h>
+$   IF Has_Socketshr
+$   THEN WS "#include <socketshr.h>"
+$   ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>
+$   ENDIF
+$   WS "int main()"
+$   WS "{"
+$   WS "endnetent();"
+$   WS "exit(0);"
+$   WS "}"
+$   CS
+$   tmp = "endnetent"
+$   GOSUB inlibc
+$   d_endnent = tmp
+$ ELSE
+$   d_endnent="undef"
+$ ENDIF
+$!
+$! Check for endprotoent
+$!
+$ IF Has_Dec_C_Sockets .OR. Has_Socketshr
+$ THEN
+$   OS
+$   WS "#ifdef __DECC
+$   WS "#include <stdlib.h>
+$   WS "#endif
+$   WS "#include <stdio.h>
+$   IF Has_Socketshr
+$   THEN WS "#include <socketshr.h>"
+$   ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>
+$   ENDIF
+$   WS "int main()
+$   WS "{"
+$   WS "endprotoent();
+$   WS "exit(0);
+$   WS "}"
+$   CS
+$   tmp = "endprotoent"
+$   GOSUB inlibc
+$   d_endpent = tmp
+$ ELSE
+$   d_endpent="undef"
+$ ENDIF
+$!
+$! Check for endservent
+$!
+$ IF Has_Dec_C_Sockets .OR. Has_Socketshr
+$ THEN
+$   OS
+$   WS "#ifdef __DECC
+$   WS "#include <stdlib.h>
+$   WS "#endif
+$   WS "#include <stdio.h>
+$   IF Has_Socketshr
+$   THEN WS "#include <socketshr.h>"
+$   ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>
+$   ENDIF
+$   WS "int main()
+$   WS "{"
+$   WS "endservent();
+$   WS "exit(0);
+$   WS "}"
+$   CS
+$   tmp = "endservent"
+$   GOSUB inlibc
+$   d_endsent = tmp
+$ ELSE
+$   d_endsent="undef"
+$ ENDIF
+$!
+$! Check for sethostent
+$!
+$ IF Has_Dec_C_Sockets .OR. Has_Socketshr
+$ THEN
+$   OS
+$   WS "#ifdef __DECC
+$   WS "#include <stdlib.h>
+$   WS "#endif
+$   WS "#include <stdio.h>
+$   IF Has_Socketshr
+$   THEN WS "#include <socketshr.h>"
+$   ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>
+$   ENDIF
+$   WS "int main()
+$   WS "{"
+$   WS "sethostent(1);
+$   WS "exit(0);
+$   WS "}"
+$   CS
+$   tmp = "sethostent"
+$   GOSUB inlibc
+$   d_sethent = tmp
+$ ELSE
+$   d_sethent="undef"
+$ ENDIF
+$!
+$! Check for setnetent
+$!
+$ IF Has_Dec_C_Sockets .OR. Has_Socketshr
+$ THEN
+$   OS
+$   WS "#ifdef __DECC
+$   WS "#include <stdlib.h>
+$   WS "#endif
+$   WS "#include <stdio.h>
+$   IF Has_Socketshr
+$   THEN WS "#include <socketshr.h>"
+$   ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>
+$   ENDIF
+$   WS "int main()
+$   WS "{"
+$   WS "setnetent(1);
+$   WS "exit(0);
+$   WS "}"
+$   CS
+$   tmp = "setnetent"
+$   GOSUB inlibc
+$   d_setnent = tmp
+$ ELSE
+$   d_setnent="undef"
+$ ENDIF
+$!
+$! Check for setprotoent
+$!
+$ IF Has_Dec_C_Sockets .OR. Has_Socketshr
+$ THEN
+$   OS
+$   WS "#ifdef __DECC
+$   WS "#include <stdlib.h>
+$   WS "#endif
+$   WS "#include <stdio.h>
+$   IF Has_Socketshr
+$   THEN WS "#include <socketshr.h>"
+$   ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>
+$   ENDIF
+$   WS "int main()
+$   WS "{"
+$   WS "setprotoent(1);
+$   WS "exit(0);
+$   WS "}"
+$   CS
+$   tmp = "setprotoent"
+$   GOSUB inlibc
+$   d_setpent = tmp
+$ ELSE
+$   d_setpent="undef"
+$ ENDIF
+$!
+$! Check for setservent
+$!
+$ IF Has_Dec_C_Sockets .OR. Has_Socketshr
+$ THEN
+$   OS
+$   WS "#ifdef __DECC
+$   WS "#include <stdlib.h>
+$   WS "#endif
+$   WS "#include <stdio.h>
+$   IF Has_Socketshr
+$   THEN WS "#include <socketshr.h>"
+$   ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>
+$   ENDIF
+$   WS "int main()
+$   WS "{"
+$   WS "setservent(1);
+$   WS "exit(0);
+$   WS "}"
+$   CS
+$   tmp = "setservent"
+$   GOSUB inlibc
+$   d_setsent = tmp
+$ ELSE
+$   d_setsent="undef"
+$ ENDIF
+$!
+$! Check for gethostent
+$!
+$ IF Has_Dec_C_Sockets .OR. Has_Socketshr
+$ THEN
+$   OS
+$   WS "#ifdef __DECC
+$   WS "#include <stdlib.h>
+$   WS "#endif
+$   WS "#include <stdio.h>
+$   IF Has_Socketshr
+$   THEN WS "#include <socketshr.h>"
+$   ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>
+$   ENDIF
+$   WS "int main()
+$   WS "{"
+$   WS "gethostent();
+$   WS "exit(0);
+$   WS "}"
+$   CS
+$   tmp = "gethostent"
+$   GOSUB inlibc
+$   d_gethent = tmp
+$ ELSE
+$   d_gethent="undef"
+$ ENDIF
+$!
+$! Check for getnetent
+$!
+$ IF Has_Dec_C_Sockets .OR. Has_Socketshr
+$ THEN
+$   OS
+$   WS "#ifdef __DECC
+$   WS "#include <stdlib.h>
+$   WS "#endif
+$   WS "#include <stdio.h>
+$   IF Has_Socketshr
+$   THEN WS "#include <socketshr.h>"
+$   ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>
+$   ENDIF
+$   WS "int main()
+$   WS "{"
+$   WS "getnetent();
+$   WS "exit(0);
+$   WS "}"
+$   CS
+$   tmp = "getnetent"
+$   GOSUB inlibc
+$   d_getnent = tmp
+$ ELSE
+$   d_getnent="undef"
+$ ENDIF
+$!
+$! Check for getprotoent
+$!
+$ IF Has_Dec_C_Sockets .OR. Has_Socketshr
+$ THEN
+$   OS
+$   WS "#ifdef __DECC
+$   WS "#include <stdlib.h>
+$   WS "#endif
+$   WS "#include <stdio.h>
+$   IF Has_Socketshr
+$   THEN WS "#include <socketshr.h>"
+$   ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>
+$   ENDIF
+$   WS "int main()
+$   WS "{"
+$   WS "getprotoent();
+$   WS "exit(0);
+$   WS "}"
+$   CS
+$   tmp = "getprotoent"
+$   GOSUB inlibc
+$   d_getpent = tmp
+$ ELSE
+$   d_getpent="undef"
+$ ENDIF
+$!
+$! Check for getservent
+$!
+$ IF Has_Dec_C_Sockets .OR. Has_Socketshr
+$ THEN
+$   OS
+$   WS "#ifdef __DECC
+$   WS "#include <stdlib.h>
+$   WS "#endif
+$   WS "#include <stdio.h>
+$   IF Has_Socketshr
+$   THEN WS "#include <socketshr.h>"
+$   ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>
+$   ENDIF
+$   WS "int main()
+$   WS "{"
+$   WS "getservent();
+$   WS "exit(0);
+$   WS "}"
+$   CS
+$   tmp = "getservent"
+$   GOSUB inlibc
+$   d_getsent = tmp
+$ ELSE
+$   d_getsent="undef"
+$ ENDIF
+$!
+$! Check for socklen_t
+$!
+$ IF Has_Dec_C_Sockets .OR. Has_Socketshr
+$ THEN
+$   echo4 "Checking to see if you have socklen_t..."
+$   OS
+$   WS "#ifdef __DECC
+$   WS "#include <stdlib.h>
+$   WS "#endif
+$   WS "#include <stdio.h>
+$   IF Has_Socketshr
+$   THEN WS "#include <socketshr.h>"
+$   ELSE IF i_netdb .EQS. "define" THEN WS "#include <netdb.h>
+$   ENDIF
+$   WS "int main()
+$   WS "{"
+$   WS "socklen_t x = 16;
+$   WS "exit(0);
+$   WS "}"
+$   CS
+$   GOSUB link_ok
+$   IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
+$   THEN
+$     d_socklen_t="define"
+$     echo "You have socklen_t."
+$   ELSE
+$     d_socklen_t="undef"
+$     echo "You do not have socklen_t."
+$   ENDIF
+$ ELSE
+$   d_socklen_t="undef"
+$ ENDIF
+$!
+$! Check for pthread_yield
+$!
+$ IF use_threads
+$ THEN
+$   OS
+$   WS "#ifdef __DECC
+$   WS "#include <stdlib.h>
+$   WS "#endif
+$   WS "#include <pthread.h>
+$   WS "#include <stdio.h>
+$   WS "int main()
+$   WS "{"
+$   WS "pthread_yield();
+$   WS "exit(0);
+$   WS "}"
+$   CS
+$   tmp = "pthread_yield"
+$   GOSUB inlibc
+$   d_pthread_yield = tmp
+$ ELSE
+$   d_pthread_yield="undef"
+$ ENDIF
+$!
+$! Check for sched_yield
+$!
+$ IF use_threads
+$ THEN
+$   OS
+$   WS "#ifdef __DECC
+$   WS "#include <stdlib.h>
+$   WS "#endif
+$   WS "#include <pthread.h>
+$   WS "#include <stdio.h>
+$   WS "int main()
+$   WS "{"
+$   WS "sched_yield();
+$   WS "exit(0);
+$   WS "}"
+$   CS
+$   tmp = "sched_yield"
+$   GOSUB inlibc
+$   d_sched_yield = tmp
+$   IF d_sched_yield .EQS. "define"
+$   THEN sched_yield = "sched_yield"
+$   ELSE sched_yield = " "
+$   ENDIF
+$ ELSE
+$   d_sched_yield="undef"
+$   sched_yield = " "
+$ ENDIF
+$!
+$! Check for generic pointer size
+$!
+$ echo4 "Checking to see how big your pointers are..." 
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "int main()
+$ WS "{"
+$ WS "int foo;
+$ WS "foo = sizeof(char *);
+$ WS "printf(""%d\n"", foo);
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ tmp = "char *"
+$ GOSUB type_size_check
+$ ptrsize = tmp
+$ echo "Your pointers are ''ptrsize' bytes long."
+$!
+$! Check for size_t size
+$!
+$ tmp = "size_t"
+$ zzz = tmp
+$ echo4 "Checking the size of ''zzz'..."
+$ GOSUB type_size_check
+$ sizesize = tmp
+$ echo "Your ''zzz' size is ''sizesize' bytes."
+$!
+$! Check rand48 and its ilk
+$!
+$ echo4 "Looking for a random number function..."
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "int main()
+$ WS "{"
+$ WS "srand48(12L);"
+$ WS "exit(0);
+$ WS "}"
+$ CS
+$ GOSUB link_ok
+$ IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
+$ THEN
+$   drand01 = "drand48()"
+$   randseedtype = "long int"
+$   seedfunc = "srand48"
+$   echo4 "Good, found drand48()."
+$   d_drand48proto = "define"
+$ ELSE
+$   d_drand48proto = "undef"
+$   drand01="random()"
+$   randseedtype = "unsigned"
+$   seedfunc = "srandom"
+$   OS
+$   WS "#ifdef __DECC
+$   WS "#include <stdlib.h>
+$   WS "#endif
+$   WS "#include <stdio.h>
+$   WS "int main()
+$   WS "{"
+$   WS "srandom(12);"
+$   WS "exit(0);
+$   WS "}"
+$   CS
+$   GOSUB link_ok
+$   IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
+$   THEN
+$     echo4 "OK, found random()."
+$   ELSE
+$     drand01="(((float)rand())/((float)RAND_MAX))"
+$     randseedtype = "unsigned"
+$     seedfunc = "srand"
+$     echo4 "Yick, looks like I have to use rand()."
+$   ENDIF
+$ ENDIF
+$!
+$! Done with compiler checks. Clean up.
+$ IF F$SEARCH("try.c")  .NES."" THEN DELETE/NOLOG/NOCONFIRM try.c;*
+$ IF F$SEARCH("try.obj").NES."" THEN DELETE/NOLOG/NOCONFIRM try.obj;*
+$ IF F$SEARCH("try.exe").NES."" THEN DELETE/NOLOG/NOCONFIRM try.exe;*
+$ IF F$SEARCH("try.opt").NES."" THEN DELETE/NOLOG/NOCONFIRM try.opt;*
+$ IF F$SEARCH("try.out").NES."" THEN DELETE/NOLOG/NOCONFIRM try.out;*
+$ IF using_cxx
+$ THEN
+$   CALL Cxx_demangler_cleanup
+$ ENDIF
+$!
+$! Some that are compiler or VMS version sensitive
+$!
+$! Gnu C stuff
+$ IF Using_Gnu_C
+$ THEN
+$   d_attribut="define"
+$   vms_cc_type="gcc"
+$ ELSE
+$   vms_cc_type="cc"
+$   d_attribut="undef"
+$ ENDIF
+$!
+$! Dec C >= 5.2 and VMS ver >= 7.0
+$ IF (Using_Dec_C).AND.(F$INTEGER(Dec_C_Version).GE.50200000).AND.(vms_ver .GES. "7.0")
+$ THEN
+$   d_bcmp="define"
+$   d_gettimeod="define"
+$   d_uname="define"
+$   d_sigaction="define"
+$   d_truncate="define"
+$   d_wait4="define"
+$   d_index="define"
+$   pidtype="pid_t"
+$   sig_name="ZERO HUP INT QUIT ILL TRAP IOT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM ABRT USR1 USR2 SPARE18 SPARE19 CHLD CONT STOP TSTP TTIN TTOU DEBUG SPARE27 SPARE28 SPARE29 SPARE30 SPARE31 SPARE32 RTMIN RTMAX"",0"
+$   psnwc1="""ZERO"",""HUP"",""INT"",""QUIT"",""ILL"",""TRAP"",""IOT"",""EMT"",""FPE"",""KILL"",""BUS"",""SEGV"",""SYS"","
+$   psnwc2="""PIPE"",""ALRM"",""TERM"",""ABRT"",""USR1"",""USR2"",""SPARE18"",""SPARE19"",""CHLD"",""CONT"",""STOP"",""TSTP"","
+$   psnwc3="""TTIN"",""TTOU"",""DEBUG"",""SPARE27"",""SPARE28"",""SPARE29"",""SPARE30"",""SPARE31"",""SPARE32"",""RTMIN"",""RTMAX"",0"
+$   sig_name_init = psnwc1 + psnwc2 + psnwc3
+$   sig_num="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 6 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 64"","0"
+$   sig_num_init="0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,6,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,64,0"
+$!   perl_sig_num_with_commas=sig_num_init
+$   uidtype="uid_t"
+$   d_pathconf="define"
+$   d_fpathconf="define"
+$   d_sysconf="define"
+$   d_sigsetjmp="define"
+$ ELSE
+$   pidtype="unsigned int"
+$   d_gettimeod="undef"
+$   d_bcmp="undef"
+$   d_uname="undef"
+$   d_sigaction="undef"
+$   d_truncate="undef"
+$   d_wait4="undef"
+$   d_index="undef"
+$   sig_name="ZERO HUP INT QUIT ILL TRAP IOT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM ABRT USR1 USR2"",0"
+$   psnwc1="""ZERO"",""HUP"",""INT"",""QUIT"",""ILL"",""TRAP"",""IOT"",""EMT"",""FPE"",""KILL"",""BUS"",""SEGV"",""SYS"","
+$   psnwc2="""PIPE"",""ALRM"",""TERM"",""ABRT"",""USR1"",""USR2"",0"
+$   sig_name_init = psnwc1 + psnwc2
+$   sig_num="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 6 16 17"",0"
+$   sig_num_init="0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,6,16,17,0"
+$!   perl_sig_num_with_commas=sig_num_init
+$   uidtype="unsigned int"
+$   d_pathconf="undef"
+$   d_fpathconf="undef"
+$   d_sysconf="undef"
+$   d_sigsetjmp="undef"
+$ ENDIF
+$!
+$! Dec C alone
+$ IF Using_Dec_C
+$ THEN
+$   d_mbstowcs="define"
+$   d_mbtowc="define"
+$   d_stdiobase="define"
+$   d_stdio_cnt_lval="define"
+$   d_stdio_ptr_lval="define"
+$   d_stdstdio="define"
+$   d_wcstombs="define"
+$   d_mblen="define"
+$   d_mktime="define"
+$   d_strcoll="define"
+$   d_strxfrm="define"
+$   d_wctomb="define"
+$   i_locale="define"
+$   d_locconv="define"
+$   d_setlocale="define"
+$   vms_cc_type="decc"
+$ ELSE
+$   d_mbstowcs="undef"
+$   d_mbtowc="undef"
+$   d_stdiobase="undef"
+$   d_stdio_cnt_lval="undef"
+$   d_stdio_ptr_lval="undef"
+$   d_stdstdio="undef"
+$   d_wcstombs="undef"
+$   d_mblen="undef"
+$   d_mktime="undef"
+$   d_strcoll="undef"
+$   d_strxfrm="undef"
+$   d_wctomb="undef"
+$   i_locale="undef"
+$   d_locconv="undef"
+$   d_setlocale="undef"
+$ ENDIF
+$!
+$! Sockets?
+$ if Has_Socketshr .OR. Has_Dec_C_Sockets
+$ THEN
+$   d_vms_do_sockets="define"
+$   d_htonl="define"
+$   d_socket="define"
+$   d_select="define"
+$   netdb_hlen_type="int"
+$   netdb_host_type="char *"
+$   netdb_name_type="char *"
+$   netdb_net_type="long"
+$   d_gethbyaddr="define"
+$   d_gethbyname="define"
+$   d_getnbyaddr="define"
+$   d_getnbyname="define"
+$   d_getpbynumber="define"
+$   d_getpbyname="define"
+$   d_getsbyport="define"
+$   d_getsbyname="define"
+$   d_gethostprotos="define"
+$   d_getnetprotos="define"
+$   d_getprotoprotos="define"
+$   d_getservprotos="define"
+$   IF Using_Dec_C
+$   THEN
+$     socksizetype="unsigned int"
+$   ELSE
+$     socksizetype="int *"
+$   ENDIF
+$ ELSE
+$   d_vms_do_sockets="undef"
+$   d_htonl="undef"
+$   d_socket="undef"
+$   d_select="undef"
+$   netdb_hlen_type="int"
+$   netdb_host_type="char *"
+$   netdb_name_type="char *"
+$   netdb_net_type="long"
+$   d_gethbyaddr="undef"
+$   d_gethbyname="undef"
+$   d_getnbyaddr="undef"
+$   d_getnbyname="undef"
+$   d_getpbynumber="undef"
+$   d_getpbyname="undef"
+$   d_getsbyport="undef"
+$   d_getsbyname="undef"
+$   d_gethostprotos="undef"
+$   d_getnetprotos="undef"
+$   d_getprotoprotos="undef"
+$   d_getservprotos="undef"
+$   socksizetype="undef"
+$ ENDIF
+$! Threads
+$ IF use_threads
+$ THEN
+$   usethreads="define"
+$   d_pthreads_created_joinable="define"
+$   if (vms_ver .GES. "7.0")
+$   THEN
+$     d_oldpthreads="undef"
+$   ELSE
+$     d_oldpthreads="define"
+$   ENDIF
+$ ELSE
+$   d_oldpthreads="undef"
+$   usethreads="undef"
+$   d_pthreads_created_joinable="undef"
+$ ENDIF
+$! 
+$! new (5.005_62++) typedefs for primitives
+$!
+$ echo "Choosing the C types to be used for Perl's internal types..."
+$ ivtype="long"
+$ uvtype="unsigned long"
+$ i8type="char"
+$ u8type="unsigned char"
+$ i16type="short"
+$ u16type="unsigned short"
+$ i32type="int"
+$ u32type="unsigned int"
+$ i64type="long long"
+$ u64type="unsigned long long"
+$ nvtype="double"
+$!
+$ IF use64bitint .OR. use64bitint .EQS. "define"
+$ THEN
+$   ivtype = "''i64type'"
+$   uvtype = "''u64type'"
+$   nvtype="long double"
+$ ELSE
+$   i64size="undef"
+$   u64size="undef"
+$ ENDIF
+$!
+$ tmp = "''ivtype'"
+$ GOSUB type_size_check
+$ ivsize = tmp
+$ IF use64bitint .OR. use64bitint .EQS. "define" THEN i64size = tmp
+$ IF ivtype .eqs. "long"
+$ THEN longsize = tmp
+$ ELSE
+$   tmp = "long"
+$   GOSUB type_size_check
+$   longsize = tmp
+$ ENDIF
+$
+$ tmp = "''uvtype'"
+$ GOSUB type_size_check
+$ uvsize = tmp
+$ IF use64bitint .OR. use64bitint .EQS. "define" THEN u64size = tmp
+$
+$ tmp = "''i8type'"
+$ GOSUB type_size_check
+$ i8size = tmp
+$
+$ tmp = "''u8type'"
+$ GOSUB type_size_check
+$ u8size = tmp
+$
+$ tmp = "''i16type'"
+$ GOSUB type_size_check
+$ i16size = tmp
+$ IF i16type .eqs. "short"
+$ THEN shortsize = tmp
+$ ELSE
+$   tmp = "short"
+$   gosub type_size_check
+$   shortsize = tmp
+$ ENDIF
+$
+$ tmp = "''u16type'"
+$ GOSUB type_size_check
+$ u16size = tmp
+$
+$ tmp = "''i32type'"
+$ GOSUB type_size_check
+$ i32size = tmp
+$ IF i32type .eqs. "int"
+$ THEN intsize = tmp
+$ ELSE
+$   tmp = "int"
+$   gosub type_size_check
+$   intsize = tmp
+$ ENDIF
+$
+$ tmp = "''u32type'"
+$ gosub type_size_check
+$ u32size = tmp
+$
+$ tmp = "''nvtype'"
+$ GOSUB type_size_check
+$ nvsize = tmp
+$!
+$ echo "(IV will be ""''ivtype'"", ''ivsize' bytes)"
+$ echo "(UV will be ""''uvtype'"", ''uvsize' bytes)"
+$ echo "(NV will be ""''nvtype'"", ''nvsize' bytes)"
+$!
+$ echo4 "Checking whether your NVs can preserve your UVs..."
+$ OS
+$ WS "#ifdef __DECC
+$ WS "#include <stdlib.h>
+$ WS "#endif
+$ WS "#include <stdio.h>
+$ WS "int main() {
+$ WS "    ''uvtype' k = (''uvtype')~0, l;
+$ WS "    ''nvtype' d;
+$ WS "    l = k;
+$ WS "    d = (''nvtype')l;
+$ WS "    l = (''uvtype')d;
+$ WS "    if (l == k)
+$ WS "       printf(""preserve\n"");
+$ WS "    exit(0);
+$ WS "}
+$ CS
+$ GOSUB compile
+$ IF tmp .EQS. "preserve"
+$ THEN 
+$   d_nv_preserves_uv = "define"
+$   echo "Yes, they can." 
+$   d_nv_preserves_uv_bits = F$STRING(F$INTEGER(uvsize) * 8)
+$ ELSE
+$   d_nv_preserves_uv = "undef"
+$   echo "No, they can't."
+$   echo4 "Checking how many bits of your UVs your NVs can preserve..."
+$   OS
+$   WS "#ifdef __DECC
+$   WS "#include <stdlib.h>
+$   WS "#endif
+$   WS "#include <stdio.h>
+$   WS "int main() {
+$   WS "    ''uvtype' u = 0;
+$   WS "    int     n = 8 * ''uvsize';
+$   WS "    int     i;
+$   WS "    for (i = 0; i < n; i++) {
+$   WS "      u = u << 1 | (''uvtype')1;
+$   WS "      if ((''uvtype')(''nvtype')u != u)
+$   WS "        break;
+$   WS "    }
+$   WS "    printf(""%d\n"", i);
+$   WS "    exit(0);
+$   WS "}
+$   GOSUB compile
+$   d_nv_preserves_uv_bits = tmp
+$ ENDIF
+$ DELETE/SYMBOL tmp
+$!
+$ ivdformat="""ld"""
+$ uvuformat="""lu"""
+$ uvoformat="""lo"""
+$ uvxformat="""lx"""
+$! 
+$! Finally the composite ones. All config
+$!
+$ myuname="''osname' ''myname' ''osvers' ''F$EDIT(hwname, "TRIM")'"
+$!
+$ IF Using_Dec_C
+$ THEN
+$   ccflags="/Include=[]/Standard=Relaxed_ANSI/Prefix=All/Obj=''obj_ext'/NoList''ccflags'"
+$ ENDIF
+$ IF use_vmsdebug_perl
+$ THEN
+$   optimize="/Debug/NoOpt"
+$   dbgprefix = "DBG"
+$ ELSE
+$   optimize= ""
+$   dbgprefix = ""
+$ ENDIF
+$!
+$! Okay, we've got everything configured. Now go write out a config.sh.
+$ basename_config_sh = F$PARSE(config_sh,,,"NAME",)+F$PARSE(config_sh,,,"TYPE",)
+$ echo4 "Creating ''basename_config_sh'..."
+$ open/write CONFIG 'config_sh
+$ WC := write CONFIG
+$!
+$! ##BEGIN WRITE NEW CONSTANTS HERE##
+$!
+$ WC "#!/bin/sh"
+$ WC "#"
+$ WC "# This file was produced by Configure.COM on a ''osname' system."
+$ WC "#"
+$ WC "# Package name      : ''package'"
+$ WC "# Source directory  : ''src'"
+$ WC "# Configuration time: " + cf_time
+$ WC "# Configuration by  : " + cf_by
+$ WC "# Target system     : " + myuname
+$ WC ""
+$ WC "CONFIG='true'"
+$ WC "Makefile_SH='" + Makefile_SH + "'"
+$ WC "Mcc='" + Mcc + "'"
+$! WC "PERL_SUBVERSION='" + subversion + "'" ! VMS specific to descrip_mms.template
+$ WC "PERL_VERSION='" + patchlevel + "'" ! VMS specific to descrip_mms.template
+$ WC "alignbytes='" + alignbytes + "'"
+$ WC "aphostname='" + "'"
+$ WC "ar='" + "'"
+$ WC "archlib='" + archlib + "'"
+$ WC "archlibexp='" + archlibexp + "'"
+$ WC "archname='" + archname + "'"
+$ WC "baserev='" + baserev + "'"
+$ WC "bin='" + bin + "'"
+$ WC "binexp='" + binexp + "'"
+$ WC "builddir='" + builddir + "'"
+$ WC "byteorder='1234'"
+$ WC "castflags='0'"
+$ WC "cc='" + perl_cc + "'"
+$ WC "cccdlflags='" + cccdlflags + "'"
+$ WC "ccdlflags='" + ccdlflags + "'"
+$ WC "ccflags='" + ccflags + "'"
+$ WC "ccversion='" + ccversion + "'" ! VMS specific, oddly enough
+$ WC "cf_by='" + cf_by + "'"
+$ WC "cf_email='" + cf_email + "'"
+$ WC "cf_time='" + cf_time + "'"
+$ WC "config_args='" + config_args + "'"
+$ WC "config_sh='" + config_sh + "'"
+$ WC "cpp_stuff='" + cpp_stuff + "'"
+$ WC "cpplast='" + cpplast + "'"
+$ WC "cppminus='" + cppminus + "'"
+$ WC "cpprun='" + cpprun + "'"
+$ WC "cppstdin='" + cppstdin + "'"
+$ WC "crosscompile='undef'"
+$ WC "d_Gconvert='my_gconvert(x,n,t,b)'"
+$ WC "d_PRId64='" + d_PRId64 + "'"
+$ WC "d_PRIfldbl='" + d_PRIfldbl + "'"
+$ WC "d_PRIgldbl='" + d_PRIgldbl + "'"
+$ WC "d_PRIo64='" + d_PRIo64 + "'"
+$ WC "d_PRIu64='" + d_PRIu64 + "'"
+$ WC "d_PRIx64='" + d_PRIx64 + "'"
+$ WC "d_access='" + d_access + "'"
+$ WC "d_accessx='undef'"
+$ WC "d_alarm='define'"
+$ WC "d_archlib='define'"
+$ WC "d_atolf='" + d_atolf + "'"
+$ WC "d_atoll='" + d_atoll + "'"
+$ WC "d_attribut='" + d_attribut + "'"
+$ WC "d_bcmp='" + d_bcmp + "'"
+$ WC "d_bcopy='" + d_bcopy + "'"
+$ WC "d_bincompat3='undef'"
+$ WC "d_bincompat5005='undef'"
+$ WC "d_bsdgetpgrp='undef'"
+$! WC "d_bsdpgrp='undef'"
+$ WC "d_bsdsetpgrp='undef'"
+$ WC "d_bzero='" + d_bzero + "'"
+$ WC "d_casti32='define'"
+$ WC "d_castneg='define'"
+$ WC "d_charvspr='undef'"
+$ WC "d_chown='define'"
+$ WC "d_chroot='undef'"
+$ WC "d_chsize='undef'"
+$ WC "d_cmsghdr_s='undef'"
+$ WC "d_const='define'"
+$ WC "d_crypt='define'"
+$ WC "d_csh='undef'"
+$ WC "d_cuserid='define'"
+$ WC "d_dbl_dig='define'"
+$ WC "d_difftime='define'"
+$ WC "d_dirnamlen='define'"
+$ WC "d_dlerror='undef'"
+$ WC "d_dlsymun='undef'"
+$ WC "d_dosuid='undef'"
+$ WC "d_drand48proto='" + d_drand48proto + "'"
+$ WC "d_dup2='define'"
+$ WC "d_eaccess='undef'"
+$ WC "d_endgrent='define'"
+$ WC "d_endhent='" + d_endhent + "'"
+$ WC "d_endnent='" + d_endnent + "'"
+$ WC "d_endpent='" + d_endpent + "'"
+$ WC "d_endpwent='define'"
+$ WC "d_endsent='" + d_endsent + "'"
+$ WC "d_eofnblk='undef'"
+$ WC "d_eunice='undef'"
+$ WC "d_fchmod='undef'"
+$ WC "d_fchown='undef'"
+$ WC "d_fcntl='" + d_fcntl + "'"
+$ WC "d_fd_set='" + d_fd_set + "'"
+$ WC "d_fgetpos='define'"
+$ WC "d_flexfnam='define'"
+$ WC "d_flock='undef'"
+$ WC "d_fork='undef'"
+$ WC "d_fpathconf='" + d_fpathconf + "'"
+$ WC "d_fpos64_t='" + d_fpos64_t + "'"
+$ WC "d_frexpl='" + d_frexpl + "'"
+$ WC "d_fs_data_s='undef'"
+$ WC "d_fseeko='undef'"
+$ WC "d_fsetpos='define'"
+$ WC "d_fstatfs='undef'"
+$ WC "d_fstatvfs='undef'"
+$ WC "d_ftello='undef'"
+$ WC "d_getcwd='undef'"
+$ WC "d_getespwnam='undef'"
+$ WC "d_getfsstat='undef'"
+$ WC "d_getgrent='define'"
+$ WC "d_getgrps='undef'"
+$ WC "d_gethbyaddr='" + d_gethbyaddr + "'"
+$ WC "d_gethbyname='" + d_gethbyname + "'"
+$ WC "d_gethent='" + d_gethent + "'"
+$ WC "d_gethname='" + d_gethname + "'"
+$ WC "d_gethostprotos='" + d_gethostprotos + "'"
+$ WC "d_getlogin='define'"
+$ WC "d_getmnt='undef'"
+$ WC "d_getmntent='undef'"
+$ WC "d_getnbyaddr='" + d_getnbyaddr + "'"
+$ WC "d_getnbyname='" + d_getnbyname + "'"
+$ WC "d_getnent='" + d_getnent + "'"
+$ WC "d_getnetprotos='" + d_getnetprotos + "'"
+$ WC "d_getpbyname='" + d_getpbyname + "'"
+$ WC "d_getpbynumber='" + d_getpbynumber + "'"
+$ WC "d_getpent='" + d_getpent + "'"
+$ WC "d_getpgid='undef'"
+$ WC "d_getpgrp2='undef'"
+$ WC "d_getpgrp='undef'"
+$ WC "d_getppid='undef'"
+$ WC "d_getprior='undef'"
+$ WC "d_getprotoprotos='" + d_getprotoprotos + "'"
+$ WC "d_getprpwnam='undef'"
+$ WC "d_getpwent='define'"
+$ WC "d_getsbyname='" + d_getsbyname + "'"
+$ WC "d_getsbyport='" + d_getsbyport + "'"
+$ WC "d_getsent='" + d_getsent + "'"
+$ WC "d_getservprotos='" + d_getservprotos + "'"
+$ WC "d_getspnam='undef'"
+$ WC "d_gettimeod='" + d_gettimeod + "'"
+$ WC "d_gnulibc='undef'"
+$ WC "d_grpasswd='undef'"
+$ WC "d_hasmntopt='undef'"
+$ WC "d_htonl='" + d_htonl + "'"
+$ WC "d_iconv='" + d_iconv +"'"
+$ WC "d_index='" + d_index + "'"
+$ WC "d_inetaton='undef'"
+$ WC "d_int64_t='" + d_int64_t + "'"
+$ WC "d_isascii='define'"
+$ WC "d_isnan='define'"
+$ WC "d_isnanl='" + d_isnanl + "'"
+$ WC "d_killpg='undef'"
+$ WC "d_lchown='undef'"
+$ WC "d_ldbl_dig='define'"
+$ WC "d_link='undef'"
+$ WC "d_llseek='undef'"
+$ WC "d_locconv='" + d_locconv + "'"
+$ WC "d_lockf='undef'"
+$ WC "d_longdbl='" + d_longdbl + "'"
+$ WC "d_longlong='" + d_longlong + "'"
+$ WC "d_lseekproto='define'"
+$ WC "d_lstat='undef'"
+$ WC "d_madvise='undef'"
+$ WC "d_mblen='" + d_mblen + "'"
+$ WC "d_mbstowcs='" + d_mbstowcs + "'"
+$ WC "d_mbtowc='" + d_mbtowc + "'"
+$ WC "d_memchr='" + d_memchr + "'"
+$ WC "d_memcmp='define'"
+$ WC "d_memcpy='define'"
+$ WC "d_memmove='define'"
+$ WC "d_memset='define'"
+$ WC "d_mkdir='define'"
+$ WC "d_mkdtemp='" + d_mkdtemp + "'"
+$ WC "d_mkfifo='undef'"
+$ WC "d_mknod='undef'"
+$ WC "d_mkstemp='" + d_mkstemp + "'"
+$ WC "d_mkstemps='" + d_mkstemps + "'"
+$ WC "d_mktime='" + d_mktime + "'"
+$ WC "d_mmap='undef'"
+$ WC "d_modfl='" + d_modfl + "'"
+$ WC "d_mprotect='undef'"
+$ WC "d_msg='undef'"
+$ WC "d_msg_ctrunc='undef'"
+$ WC "d_msg_dontroute='undef'"
+$ WC "d_msg_oob='undef'"
+$ WC "d_msg_peek='undef'"
+$ WC "d_msg_proxy='undef'"
+$ WC "d_msghdr_s='undef'"
+$ WC "d_msync='undef'"
+$ WC "d_munmap='undef'"
+$ WC "d_mymalloc='" + d_mymalloc + "'"
+$ WC "d_nice='define'"
+$ WC "d_nv_preserves_uv='" + d_nv_preserves_uv + "'"
+$ WC "d_nv_preserves_uv_bits='" + d_nv_preserves_uv_bits + "'"
+$ WC "d_off64_t='" + d_off64_t + "'"
+$ WC "d_old_pthread_create_joinable='" + d_old_pthread_create_joinable + "'"
+$ WC "d_oldarchlib='define'"
+$ WC "d_oldpthreads='" + d_oldpthreads + "'"
+$ WC "d_open3='define'"
+$ WC "d_pathconf='" + d_pathconf + "'"
+$ WC "d_pause='define'"
+$ WC "d_perl_otherlibdirs='undef'"
+$ WC "d_phostname='undef'"
+$ WC "d_pipe='define'"
+$ WC "d_poll='undef'"
+$ WC "d_pthread_yield='" + d_pthread_yield + "'"
+$ WC "d_pthreads_created_joinable='" + d_pthreads_created_joinable + "'"
+$ WC "d_pwage='undef'"
+$ WC "d_pwchange='undef'"
+$ WC "d_pwclass='undef'"
+$ WC "d_pwcomment='define'"
+$ WC "d_pwexpire='undef'"
+$ WC "d_pwgecos='define'"
+$ WC "d_pwpasswd='define'"
+$ WC "d_pwquota='undef'"
+$ WC "d_qgcvt='undef'"
+$ WC "d_quad='" + d_quad + "'"
+$ WC "d_readdir='define'"
+$ WC "d_readlink='undef'"
+$ WC "d_readv='undef'"
+$ WC "d_recvmsg='undef'"
+$ WC "d_rename='define'"
+$ WC "d_rewinddir='define'"
+$ WC "d_rmdir='define'"
+$ WC "d_safebcpy='undef'"
+$ WC "d_safemcpy='define'"
+$ WC "d_sanemcmp='define'"
+$ WC "d_sched_yield='" + d_sched_yield + "'"
+$ WC "d_scm_rights='undef'"
+$ WC "d_seekdir='define'"
+$ WC "d_select='" + d_select + "'"
+$ WC "d_sem='undef'"
+$ WC "d_semctl_semid_ds='undef'"
+$ WC "d_semctl_semun='undef'"
+$ WC "d_sendmsg='undef'"
+$ WC "d_setegid='undef'"
+$ WC "d_setenv='" + d_setenv + "'"
+$ WC "d_seteuid='undef'"
+$ WC "d_setgrent='undef'"
+$ WC "d_setgrps='undef'"
+$ WC "d_sethent='" + d_sethent + "'"
+$ WC "d_setlinebuf='undef'"
+$ WC "d_setlocale='" + d_setlocale + "'"
+$ WC "d_setnent='" + d_setnent + "'"
+$ WC "d_setpent='" + d_setpent + "'"
+$ WC "d_setpgid='undef'"
+$ WC "d_setpgrp2='undef'"
+$ WC "d_setpgrp='undef'"
+$ WC "d_setprior='undef'"
+$ WC "d_setproctitle='" + d_setproctitle + "'"
+$ WC "d_setpwent='define'"
+$ WC "d_setregid='undef'"
+$ WC "d_setresgid='undef'"
+$ WC "d_setresuid='undef'"
+$ WC "d_setreuid='undef'"
+$ WC "d_setrgid='undef'"
+$ WC "d_setruid='undef'"
+$ WC "d_setsent='" + d_setsent + "'"
+$ WC "d_setsid='undef'"
+$ WC "d_setvbuf='" + d_setvbuf + "'"
+$ WC "d_sfio='undef'"
+$ WC "d_shm='undef'"
+$ WC "d_shmatprototype='undef'"
+$ WC "d_sigaction='" + d_sigaction + "'"
+$ WC "d_sigsetjmp='" + d_sigsetjmp + "'"
+$ WC "d_socket='" + d_socket + "'"
+$ WC "d_socklen_t='" + d_socklen_t + "'"
+$ WC "d_sockpair='undef'"
+$ WC "d_sqrtl='define'"
+$ WC "d_statblks='undef'"
+$ WC "d_statfs_f_flags='undef'"
+$ WC "d_statfs_s='undef'"
+$ WC "d_statfsflags='undef'"
+$ WC "d_stdio_cnt_lval='" + d_stdio_cnt_lval + "'"
+$ WC "d_stdio_ptr_lval='" + d_stdio_ptr_lval + "'"
+$ WC "d_stdio_stream_array='undef'"
+$ WC "d_stdiobase='" + d_stdiobase + "'"
+$ WC "d_stdstdio='" + d_stdstdio + "'"
+$ WC "d_strchr='define'"
+$ WC "d_strcoll='" + d_strcoll + "'"
+$ WC "d_strctcpy='define'"
+$ WC "d_strerrm='strerror((e),vaxc$errno)'"
+$ WC "d_strerror='define'"
+$ WC "d_strtod='define'"
+$ WC "d_strtol='define'"
+$ WC "d_strtold='" + d_strtold + "'"
+$ WC "d_strtoll='" + d_strtoll + "'"
+$ WC "d_strtoul='define'"
+$ WC "d_strtoull='" + d_strtoull + "'"
+$ WC "d_strtouq='" + d_strtouq + "'"
+$ WC "d_strxfrm='" + d_strxfrm  + "'"
+$ WC "d_suidsafe='undef'"
+$ WC "d_symlink='undef'"
+$ WC "d_syscall='undef'"
+$ WC "d_sysconf='" + d_sysconf + "'"
+$ WC "d_syserrlst='undef'"
+$ WC "d_system='define'"
+$ WC "d_tcgetpgrp='undef'"
+$ WC "d_tcsetpgrp='undef'"
+$ WC "d_telldir='define'"
+$ WC "d_telldirproto='define'"
+$ WC "d_times='define'"
+$ WC "d_truncate='" + d_truncate + "'"
+$ WC "d_tzname='undef'"
+$ WC "d_umask='define'"
+$ WC "d_uname='" + d_uname + "'"
+$ WC "d_union_semun='undef'"
+$ WC "d_unlink_all_versions='undef'"
+$ WC "d_ustat='undef'"
+$ WC "d_vendorarch='undef'"
+$ WC "d_vendorlib='undef'"
+$ WC "d_vfork='define'"
+$ WC "d_vms_case_sensitive_symbols='" + d_vms_be_case_sensitive + "'" ! VMS
+$ WC "d_vms_do_sockets='" + d_vms_do_sockets + "'" ! VMS
+$ WC "d_void_closedir='define'"
+$ WC "d_volatile='define'"
+$ WC "d_vprintf='define'"
+$ WC "d_wait4='" + d_wait4 + "'"
+$ WC "d_waitpid='define'"
+$ WC "d_wcstombs='" + d_wcstombs + "'"
+$ WC "d_wctomb='" + d_wctomb + "'"
+$ WC "d_writev='undef'"
+$ WC "db_hashtype=' '"
+$ WC "db_prefixtype=' '"
+$ WC "dbgprefix='" + dbgprefix + "'"
+$ WC "defvoidused='15'"
+$ WC "devtype='" + devtype + "'"
+$ WC "direntrytype='struct dirent'"
+$ WC "dlext='" + dlext + "'"
+$ WC "dlobj='" + dlobj + "'"
+$ WC "dlsrc='dl_vms.c'"
+$ WC "doublesize='" + doublesize + "'"
+$ WC "drand01='" + drand01 + "'"
+$ WC "dynamic_ext='" + extensions + "'"
+$ WC "eagain=' '"
+$ WC "ebcdic='undef'"
+$ WC "eunicefix=':'"
+$ WC "exe_ext='" + exe_ext + "'"
+$ WC "extensions='" + extensions + "'"
+$ WC "fflushNULL='define'"
+$ WC "fflushall='undef'"
+$ WC "fpostype='fpos_t'"
+$ WC "freetype='void'"
+$ WC "full_ar='" + "'"
+$ WC "full_csh='" + " '"
+$ WC "full_sed='_NLA0:'"
+$ WC "gccversion='" + gccversion + "'"
+$ WC "gidformat='lu'"
+$ WC "gidsign='1'"
+$ WC "gidsize='4'"
+$ WC "gidtype='" + gidtype + "'"
+$ WC "groupstype='Gid_t'"
+$ WC "hint='none'"
+$ WC "hintfile='" + "'"
+$ WC "i16size='" + i16size + "'"
+$ WC "i16type='" + i16type + "'"
+$ WC "i32size='" + i32size + "'"
+$ WC "i32type='" + i32type + "'"
+$ WC "i64size='" + i64size + "'"
+$ WC "i64type='" + i64type + "'"
+$ WC "i8size='" + i8size + "'"
+$ WC "i8type='" + i8type + "'"
+$ WC "i_arpainet='undef'"
+$ WC "i_dbm='undef'"
+$ WC "i_dirent='undef'"
+$ WC "i_dlfcn='undef'"
+$ WC "i_fcntl='" + i_fcntl + "'"
+$ WC "i_float='define'"
+$ WC "i_grp='undef'"
+$ WC "i_iconv='" + i_iconv +"'"
+$ WC "i_ieeefp='undef'"
+$ WC "i_inttypes='" + i_inttypes + "'"
+$ WC "i_libutil='" + i_libutil + "'"
+$ WC "i_limits='define'"
+$ WC "i_locale='" + i_locale + "'"
+$ WC "i_machcthr='undef'"
+$ WC "i_machcthreads='undef'"
+$ WC "i_math='define'"
+$ WC "i_memory='undef'"
+$ WC "i_mntent='undef'"
+$ WC "i_ndbm='undef'"
+$ WC "i_netdb='" + i_netdb + "'"
+$ WC "i_neterrno='define'"
+$ WC "i_netinettcp='" + i_netinettcp + "'"
+$ WC "i_niin='" + i_niin + "'"
+$ WC "i_poll='" + i_poll + "'"
+$ WC "i_prot='undef'"
+$ WC "i_pthread='define'"
+$ WC "i_pwd='undef'"
+$ WC "i_rpcsvcdbm='undef'"
+$ WC "i_sfio='undef'"
+$ WC "i_sgtty='undef'"
+$ WC "i_shadow='" + i_shadow + "'"
+$ WC "i_socks='" + i_socks + "'"
+$ WC "i_stdarg='define'"
+$ WC "i_stddef='define'"
+$ WC "i_stdlib='define'"
+$ WC "i_string='define'"
+$ WC "i_sunmath='undef'"
+$ WC "i_sysaccess='" + i_sysaccess + "'"
+$ WC "i_sysdir='undef'"
+$ WC "i_sysfile='" + i_sysfile + "'"
+$ WC "i_sysioctl='undef'"
+$ WC "i_syslog='" + i_syslog + "'"
+$ WC "i_sysmman='undef'"
+$ WC "i_sysmode='" + i_sysmode + "'"
+$ WC "i_sysmount='undef'"
+$ WC "i_sysndir='undef'"
+$ WC "i_sysparam='undef'"
+$ WC "i_sysresrc='undef'"
+$ WC "i_syssecrt='" + i_syssecrt + "'"
+$ WC "i_sysselct='undef'"
+$ WC "i_sysstat='define'"
+$ WC "i_sysstatfs='undef'"
+$ WC "i_sysstatvfs='undef'"
+$ WC "i_systime='undef'"
+$ WC "i_systimek='undef'"
+$ WC "i_systimes='undef'"
+$ WC "i_systypes='define'"
+$ WC "i_sysuio='" + i_sysuio + "'"
+$ WC "i_sysun='undef'"
+$ WC "i_sysutsname='" + i_sysutsname + "'"
+$ WC "i_sysvfs='undef'"
+$ WC "i_syswait='undef'"
+$ WC "i_termio='undef'"
+$ WC "i_termios='undef'"
+$ WC "i_time='define'"
+$ WC "i_unistd='" + i_unistd + "'"
+$ WC "i_ustat='undef'"
+$ WC "i_utime='undef'"
+$ WC "i_values='undef'"
+$ WC "i_varargs='undef'"
+$ WC "i_vfork='undef'"
+$ WC "inc_version_list='0'"
+$ WC "inc_version_list_init='0'"
+$ WC "installarchlib='" + installarchlib + "'"
+$ WC "installbin='" + installbin + "'"
+$ WC "installman1dir='" + installman1dir + "'"
+$ WC "installman3dir='" + installman3dir + "'"
+$ WC "installprivlib='" + installprivlib + "'"
+$ WC "installscript='" + installscript + "'"
+$ WC "installsitearch='" + installsitearch + "'"
+$ WC "installsitelib='" + installsitelib + "'"
+$ WC "installusrbinperl='undef'"
+$ WC "intsize='" + intsize + "'"
+$ WC "ivdformat='" + ivdformat + "'"
+$ WC "ivsize='" + ivsize + "'"
+$ WC "ivtype='" + ivtype + "'"
+$ WC "known_extensions='" + known_extensions + "'"
+$ WC "ld='" + ld + "'"
+$ WC "lddlflags='/Share'"
+$ WC "ldflags='/NoTrace/NoMap'"
+$ WC "lib_ext='" + lib_ext + "'"
+$ WC "libc='" + libc + "'"
+$ WC "libpth='/sys$share /sys$library'"
+$ WC "libs='" + libs + "'"
+$ WC "longdblsize='" + longdblsize + "'"
+$ WC "longlongsize='" + longlongsize + "'"
+$ WC "longsize='" + longsize + "'"
+$ WC "lseeksize='4'"
+$ WC "lseektype='int'"
+$ WC "mab='" + "'"
+$ WC "make='" + make + "'"
+$ WC "malloctype='void *'"
+$ WC "man1ext='rno'"
+$ WC "man3ext='rno'"
+$ WC "mmaptype='" + "'"
+$ WC "modetype='unsigned int'"
+$ WC "multiarch='undef'"
+$ WC "mydomain='" + mydomain + "'"
+$ WC "myhostname='" + myhostname + "'"
+$ WC "myuname='" + myuname + "'"
+$ WC "netdb_hlen_type='" + netdb_hlen_type + "'"
+$ WC "netdb_host_type='" + netdb_host_type + "'"
+$ WC "netdb_name_type='" + netdb_name_type + "'"
+$ WC "netdb_net_type='" + netdb_net_type + "'"
+$ WC "nvsize='" + nvsize + "'"
+$ WC "nvtype='" + nvtype + "'"
+$ WC "o_nonblock=' '"
+$ WC "obj_ext='" + obj_ext + "'"
+$ WC "old_pthread_create_joinable='" + old_pthread_create_joinable + "'"
+$ WC "oldarchlib='" + oldarchlib + "'"
+$ WC "oldarchlibexp='" + oldarchlibexp + "'"
+$ WC "optimize='" + optimize + "'"
+$ WC "osname='" + osname + "'"
+$ WC "osvers='" + osvers + "'"
+$ WC "otherlibdirs='" + "'"
+$ WC "package='" + package + "'"
+$ WC "pager='" + pager + "'"
+$ WC "patchlevel='" + patchlevel + "'"
+$ WC "path_sep='|'"
+$ WC "perl_root='" + perl_root + "'" ! VMS specific $trnlnm()
+$ WC "perladmin='" + perladmin + "'"
+$ WC "pgflquota='" + pgflquota + "'"
+$ WC "pidtype='" + pidtype + "'"
+$ WC "pm_apiversion='" + version + "'"
+$! WC "prefix='" + vms_prefix + "'"
+$ WC "prefix='" + prefix + "'"
+$ WC "privlib='" + privlib + "'"
+$ WC "privlibexp='" + privlibexp + "'"
+$ WC "prototype='define'"
+$ WC "ptrsize='" + ptrsize + "'"
+$ WC "quadkind='" + quadkind + "'"
+$ WC "quadtype='" + quadtype + "'" 
+$ WC "randbits='31'"
+$ WC "randseedtype='" + randseedtype + "'"
+$ WC "ranlib='" + "'"
+$ WC "rd_nodata=' '"
+$ WC "revision='" + revision + "'"
+$! WC "sPRIEldbl='$sPRIEldbl'
+$! WC "sPRIFldbl='$sPRIFldbl'
+$! WC "sPRIGldbl='$sPRIGldbl'
+$! WC "sPRIX64='$sPRIX64'
+$ WC "sPRId64='" + sPRId64 + "'"
+$! WC "sPRIeldbl='" + sPRIeldbl + "'"
+$ WC "sPRIfldbl='" + sPRIfldbl + "'"
+$ WC "sPRIgldbl='" + sPRIgldbl + "'"
+$! WC "sPRIi64='" + sPRIi64 + "'"
+$ WC "sPRIo64='" + sPRIo64 + "'"
+$ WC "sPRIu64='" + sPRIu64 + "'"
+$ WC "sPRIx64='" + sPRIx64 + "'"
+$ WC "sched_yield='" + sched_yield + "'"
+$ WC "seedfunc='" + seedfunc + "'"
+$ WC "selectminbits='32'"
+$ WC "selecttype='" + selecttype + "'"
+$ WC "sh='MCR'"
+$ WC "shmattype='" + "'"
+$ WC "shortsize='" + shortsize + "'"
+$ WC "shrplib='define'"
+$ WC "sig_name='" + sig_name + "'"
+$ tmp = "sig_name_init='" + sig_name_init + "'"
+$ WC/symbol tmp
+$ DELETE/SYMBOL tmp
+$ WC "sig_num='" + sig_num + "'"
+$ WC "sig_num_init='" + sig_num_init + "'"
+$ WC "signal_t='" + signal_t + "'"
+$ WC "sitearch='" + sitearch + "'"
+$ WC "sitearchexp='" + sitearchexp + "'"
+$ WC "sitelib='" + sitelib + "'"
+$ WC "sitelib_stem='" + sitelib_stem + "'"
+$ WC "sitelibexp='" + sitelibexp + "'"
+$ WC "sizesize='" + sizesize + "'"
+$ WC "sizetype='size_t'"
+$ WC "so='" + so + "'"
+$ WC "socksizetype='" + socksizetype + "'"
+$ WC "spitshell='write sys$output '"
+$ WC "src='" + src + "'"
+$ WC "ssizetype='int'"
+$ WC "startperl=" + startperl ! This one's special--no enclosing single quotes
+$ WC "static_ext='" + "'"
+$ WC "stdchar='" + stdchar + "'"
+$ WC "stdio_base='((*fp)->_base)'"
+$ WC "stdio_bufsiz='((*fp)->_cnt + (*fp)->_ptr - (*fp)->_base)'"
+$ WC "stdio_cnt='((*fp)->_cnt)'"
+$ WC "stdio_ptr='((*fp)->_ptr)'"
+$ WC "stdio_stream_array='" + "'"
+$ WC "subversion='" + subversion + "'"
+$ WC "timetype='" + timetype + "'"
+$ WC "u16size='" + u16size + "'"
+$ WC "u16type='" + u16type + "'"
+$ WC "u32size='" + u32size + "'"
+$ WC "u32type='" + u32type + "'"
+$ WC "u64size='" + u64size + "'"
+$ WC "u64type='" + u64type + "'"
+$ WC "u8size='" + u8size + "'"
+$ WC "u8type='" + u8type + "'"
+$ WC "uidformat='lu'"
+$ WC "uidsign='1'"
+$ WC "uidsize='4'"
+$ WC "uidtype='" + uidtype + "'"
+$ WC "uquadtype='" + uquadtype + "'" 
+$ WC "use5005threads='" + use5005threads + "'"
+$ WC "use64bitall='" + use64bitall + "'"
+$ WC "use64bitint='" + use64bitint + "'"
+$ WC "usedl='" + usedl + "'"
+$ WC "useithreads='" + useithreads + "'"
+$ WC "uselargefiles='" + uselargefiles + "'"
+$ WC "uselongdouble='" + uselongdouble + "'"
+$ WC "usemorebits='" + usemorebits + "'"
+$ WC "usemultiplicity='" + usemultiplicity + "'"
+$ WC "usemymalloc='" + usemymalloc + "'"
+$ WC "useperlio='undef'"
+$ WC "useposix='false'"
+$ WC "usesocks='undef'"
+$ WC "usethreads='" + usethreads + "'"
+$ WC "usevfork='true'"
+$ WC "uvoformat='" + uvoformat + "'"
+$ WC "uvsize='" + uvsize + "'"
+$ WC "uvtype='" + uvtype + "'"
+$ WC "uvuformat='" + uvuformat + "'"
+$ WC "uvxformat='" + uvxformat + "'"
+$ WC "vendorarchexp='" + "'"
+$ WC "vendorlib_stem='" + "'"
+$ WC "vendorlibexp='" + "'"
+$ WC "version='" + version + "'"
+$ WC "vms_cc_type='" + vms_cc_type + "'" ! VMS specific
+$ WC "vms_prefix='" + vms_prefix + "'" ! VMS specific
+$ WC "vms_ver='" + vms_ver + "'" ! VMS specific
+$ WC "voidflags='15'"
+$ WC "xs_apiversion='" + version + "'"
+$ WC "CONFIGDOTSH='true'"
+$!
+$! ##END WRITE NEW CONSTANTS HERE##
+$!
+$ CLOSE CONFIG
+$!
+$! Okay, we've gotten here. Build munchconfig.exe
+$ COPY/NOLOG [-.vms]munchconfig.c []
+$ COPY/NOLOG [-.vms]'Makefile_SH []
+$ 'Perl_CC' munchconfig.c
+$ IF Needs_Opt
+$ THEN
+$   OPEN/WRITE CONFIG []munchconfig.opt
+$   IF Using_Gnu_C
+$   THEN
+$     WRITE CONFIG "Gnu_CC:[000000]gcclib.olb/library"
+$   ENDIF
+$   WRITE CONFIG "Sys$Share:VAXCRTL/Share"
+$   CLOSE CONFIG
+$   'ld' munchconfig.obj,munchconfig.opt/opt
+$   DELETE/NOLOG/NOCONFIRM munchconfig.opt;
+$ ELSE
+$   'ld' munchconfig.obj
+$ ENDIF
+$ IF F$SEARCH("munchconfig.obj") .NES. "" THEN DELETE/NOLOG/NOCONFIRM munchconfig.obj;
+$ IF F$SEARCH("munchconfig.c") .NES. "" THEN DELETE/NOLOG/NOCONFIRM munchconfig.c;
+$ IF using_cxx
+$ THEN
+$   CALL Cxx_demangler_cleanup
+$ ENDIF
+$!
+$ IF alldone .EQS. ""
+$ THEN
+$   cat4 SYS$INPUT:
+
+If you'd like to make any changes to the config.sh file before I begin
+to configure things, answer yes to the following question.
+
+$   dflt="n"
+$   rp="Do you wish to edit ''basename_config_sh'? "
+$   GOSUB myread
+$   IF ans .EQS. "" then ans = dflt
+$   IF ans
+$   THEN
+$     echo4 ""
+$     echo4 "Be sure to type LOGOUT after you have edited the file,"
+$     echo4 "then this procedure will resume."
+$     echo4 ""
+$     default = F$ENVIRONMENT("DEFAULT")
+$     DIRECTORY 'config_sh
+$     SET DEFAULT [-]
+$     SPAWN/WAIT
+$     SET DEFAULT 'default
+$   ENDIF
+$ ENDIF
+$!
+$ echo ""
+$ echo4 "Adding ''osname' specific preprocessor commands."
+$ !
+$ ! we need an fdl file
+$ CREATE [-]CONFIG.FDL
+RECORD
+  FORMAT STREAM_LF
+$ CREATE /FDL=[-]CONFIG.FDL [-]CONFIG.LOCAL
+$ ! First spit out the header info with the local defines (to get
+$ ! around the 255 character command line limit)
+$ OPEN/APPEND CONFIG [-]config.local
+$ IF use_debugging_perl THEN WC "#define DEBUGGING"
+$ IF use_two_pot_malloc THEN WC "#define TWO_POT_OPTIMIZE"
+$ IF mymalloc THEN WC "#define EMBEDMYMALLOC"
+$ IF use_pack_malloc THEN WC "#define PACK_MALLOC"
+$ IF use_debugmalloc THEN WC "#define DEBUGGING_MSTATS"
+$ IF Using_Gnu_C THEN WC "#define GNUC_ATTRIBUTE_CHECK"
+$ IF (Has_Dec_C_Sockets)
+$ THEN
+$    WC "#define VMS_DO_SOCKETS"
+$    WC "#define DECCRTL_SOCKETS"
+$ ELSE
+$    IF Has_Socketshr THEN WC "#define VMS_DO_SOCKETS"
+$ ENDIF
+$! This is VMS-specific for now
+$ WC "#''d_setenv' HAS_SETENV"
+$ IF d_secintgenv THEN WC "#define SECURE_INTERNAL_GETENV"
+$ IF d_alwdeftype THEN WC "#define ALWAYS_DEFTYPES"
+$ IF use64bitint .OR. use64bitint .EQS. "define"
+$ THEN
+$   WC "#define USE_64_BIT_INT"
+$   WC "#define USE_LONG_DOUBLE"
+$ ENDIF
+$ IF use64bitall .OR. use64bitall .EQS. "define" THEN -
+    WC "#define USE_64_BIT_ALL"
+$ IF be_case_sensitive THEN WC "#define VMS_WE_ARE_CASE_SENSITIVE"
+$ IF d_herrno .EQS. "undef" THEN WC "#define NEED_AN_H_ERRNO"
+$ WC "#define HAS_ENVGETENV"
+$ WC "#define PERL_EXTERNAL_GLOB"
+$ CLOSE CONFIG
+$!
+$ echo4 "Doing variable substitutions on .SH files..."
+$ echo4 "Extracting config.h (with variable substitutions)"
+$!
+$! Now build the normal config.h
+$ DEFINE/USER_MODE sys$output [-]config.main
+$ mcr []munchconfig 'config_sh [-]config_h.sh
+$ ! Concatenate them together
+$ copy [-]config.local,[-]config.main [-]config.h
+$! Clean up
+$ DELETE/NOLOG [-]CONFIG.MAIN;*
+$ DELETE/NOLOG [-]CONFIG.LOCAL;*
+$ DELETE/NOLOG [-]CONFIG.FDL;*
+$!
+$ IF Using_Dec_C
+$ THEN
+$   DECC_REPLACE = "DECC=decc=1"
+$ ELSE
+$   DECC_REPLACE = "DECC=" 
+$ ENDIF
+$ IF Using_Gnu_C
+$ THEN
+$   GNUC_REPLACE = "GNUC=gnuc=1"
+$ ELSE
+$   GNUC_REPLACE = "GNUC=" 
+$ ENDIF
+$ IF Has_Dec_C_Sockets
+$ THEN
+$   SOCKET_REPLACE = "SOCKET=DECC_SOCKETS=1"
+$ ELSE
+$   IF Has_Socketshr
+$   THEN
+$     SOCKET_REPLACE = "SOCKET=SOCKETSHR_SOCKETS=1"
+$   ELSE
+$     SOCKET_REPLACE = "SOCKET="
+$   ENDIF
+$ ENDIF
+$ IF Use_Threads
+$ THEN
+$   IF (vms_ver .LES. "6.2")
+$   THEN
+$     THREAD_REPLACE = "THREAD=OLDTHREADED=1"
+$   ELSE
+$     THREAD_REPLACE = "THREAD=THREADED=1"
+$   ENDIF
+$ ELSE
+$   THREAD_REPLACE = "THREAD="
+$ ENDIF
+$ IF mymalloc
+$ THEN
+$   MALLOC_REPLACE = "MALLOC=MALLOC=1"
+$ ELSE
+$   MALLOC_REPLACE = "MALLOC="
+$ ENDIF
+$ echo4 "Extracting ''defmakefile' (with variable substitutions)"
+$ DEFINE/USER_MODE sys$output 'UUmakefile 
+$ mcr []munchconfig 'config_sh 'Makefile_SH "''DECC_REPLACE'" "''ARCH_TYPE'" "''GNUC_REPLACE'" "''SOCKET_REPLACE'" "''THREAD_REPLACE'" -
+"''C_Compiler_Replace'" "''MALLOC_REPLACE'" "''Thread_Live_Dangerously'" "PV=''version'" "FLAGS=FLAGS=''extra_flags'"
+$ echo4 "Extracting Build_Ext.Com (without variable substitutions)"
+$ Create Sys$Disk:[-]Build_Ext.Com
+$ Deck/Dollar="$EndOfTpl$"
+$!++ Build_Ext.Com
+$!   NOTE: This file is extracted as part of the VMS configuration process.
+$!   Any changes made to it directly will be lost.  If you need to make any
+$!   changes, please edit the template in [.vms]SubConfigure.Com instead.
+$    def = F$Environment("Default")
+$    exts1 = F$Edit(p1,"Compress")
+$    p2 = F$Edit(p2,"Upcase,Compress,Trim")
+$    If F$Locate("MCR ",p2).eq.0 Then p2 = F$Extract(3,255,p2)
+$    miniperl = "$" + F$Search(F$Parse(p2,".Exe"))
+$    makeutil = p3
+$    if f$type('p3') .nes. "" then makeutil = 'p3'
+$    targ = F$Edit(p4,"Lowercase")
+$    i = 0
+$ next_ext:
+$    ext = F$Element(i," ",p1)
+$    If ext .eqs. " " Then Goto done
+$    Define/User_mode Perl_Env_Tables CLISYM_LOCAL
+$    miniperl
+     ($extdir = $ENV{'ext'}) =~ s/::/./g;
+     $extdir =~ s#/#.#g;
+     if ($extdir =~ /^vms/i) { $extdir =~ s/vms/.vms.ext/i; }
+     else                    { $extdir = ".ext.$extdir";   }
+     ($ENV{'extdir'} = "[$extdir]");
+     ($ENV{'up'} = ('-') x ($extdir =~ tr/././));
+$    Set Default &extdir
+$    redesc = 0
+$    If F$Locate("clean",targ) .eqs. F$Length(targ)
+$    Then
+$      Write Sys$Output "Building ''ext' . . ."
+$      On Error Then Goto done
+$      If F$Search("Descrip.MMS") .eqs. ""
+$      Then
+$        redesc = 1
+$      Else
+$        If F$CvTime(F$File("Descrip.MMS","rdt")) .lts. -
+            F$CvTime(F$File("Makefile.PL","rdt")) Then redesc = 1
+$      EndIf
+$    Else
+$      Write Sys$Output "''targ'ing ''ext' . . ."
+$      On Error Then Continue
+$    EndIf
+$    If redesc Then -
+       miniperl "-I[''up'.lib]" Makefile.PL "INST_LIB=[''up'.lib]" "INST_ARCHLIB=[''up'.lib]"
+$    makeutil 'targ'
+$    i = i + 1
+$    Set Def &def
+$    Goto next_ext
+$ done:
+$    sts = $Status
+$    Set Def &def
+$    Exit sts
+$!-- Build_Ext.Com
+$EndOfTpl$
+$!
+$! Clean up after ourselves
+$ DELETE/NOLOG/NOCONFIRM []munchconfig.exe;
 $!
 $!  Warn of dangerous symbols or logical names
 $!
@@ -2243,7 +5363,7 @@ $   ENDIF
 $ EXIT
 $ ENDSUBROUTINE ! Bad_environment
 $ echo ""
-$ echo4 "%Config-I-VMS, Checking for dangerous pre-existing global symbols and logical names."
+$ echo4 "Checking for dangerous pre-existing global symbols and logical names."
 $ CALL Bad_environment "TMP"
 $ CALL Bad_environment "LIB"
 $ CALL Bad_environment "T"
@@ -2258,28 +5378,28 @@ $ IF (.NOT.perl_symbol)
 $ THEN
 $   file_2_find = "[-]''packageup'.cld"
 $   echo ""
-$   echo4 "%Config-I-VMS, The perl.cld file is now being written..."
+$   echo4 "The perl.cld file is now being written..."
 $   OPEN/WRITE CONFIG 'file_2_find'
 $   ext = ".exe"
-$   IF ((sharedperl) .AND. (f$getsyi("ARCH_NAME") .NES. "VAX")) THEN ext := .AXE
+$   IF ((sharedperl) .AND. (F$GETSYI("HW_MODEL") .GE. 1024)) THEN ext := .AXE
 $   IF (use_vmsdebug_perl)
 $   THEN
 $     WRITE CONFIG "define verb dbgperl"
-$     WRITE CONFIG F$FAO("!_!AS","image ''packageup'_root:[000000]dbgperl''ext'")
+$     WRITE CONFIG F$FAO("!_!AS","image ''vms_prefix':[000000]dbgperl''ext'")
 $     WRITE CONFIG F$FAO("!_!AS","cliflags (foreign)")
 $     WRITE CONFIG ""
 $     WRITE CONFIG "define verb perl"
-$     WRITE CONFIG F$FAO("!_!AS","image ''packageup'_root:[000000]ndbgPerl''ext'")
+$     WRITE CONFIG F$FAO("!_!AS","image ''vms_prefix':[000000]ndbgPerl''ext'")
 $     WRITE CONFIG F$FAO("!_!AS","cliflags (foreign)")
 $   ELSE
 $     WRITE CONFIG "define verb perl"
-$     WRITE CONFIG F$FAO("!_!AS","image ''packageup'_root:[000000]perl''ext'")
+$     WRITE CONFIG F$FAO("!_!AS","image ''vms_prefix':[000000]perl''ext'")
 $     WRITE CONFIG F$FAO("!_!AS","cliflags (foreign)")
 $   ENDIF
 $   CLOSE CONFIG
 $ ENDIF ! (.NOT.perl_symbol)
 $ echo ""
-$ echo4 "%Config-I-VMS, The perl_setup.com file is now being written..."
+$ echo4 "The perl_setup.com file is now being written..."
 $ file_2_find = "[-]perl_setup.com"
 $ OPEN/WRITE CONFIG 'file_2_find'
 $ WRITE CONFIG "$!"
@@ -2294,38 +5414,38 @@ $ WRITE CONFIG "$!"
 $ prefix = prefix - "000000."
 $ IF F$LOCATE(".]",prefix) .EQ. F$LENGTH(prefix) THEN -
     prefix = prefix - "]" + ".]" 
-$ WRITE CONFIG "$ define/translation=concealed Perl_Root ''prefix'"
+$ WRITE CONFIG "$ define/translation=concealed ''vms_prefix' ''prefix'"
 $ WRITE CONFIG "$ ext = "".exe"""
-$ IF sharedperl .EQS. "Y"
+$ IF sharedperl
 $ THEN
-$   write config "$ if f$getsyi(""ARCH_NAME"") .nes. ""VAX"" then ext = "".AXE"""
+$   write config "$ if f$getsyi(""HW_MODEL"") .ge. 1024 then ext = "".AXE"""
 $ ENDIF
 $ IF (perl_symbol)
 $ THEN
 $   IF (use_vmsdebug_perl)
 $   THEN
-$     WRITE CONFIG "$ dbgperl :== $Perl_Root:[000000]dbgPerl'ext'"
-$     WRITE CONFIG "$ perl    :== $Perl_Root:[000000]ndbgPerl'ext'"
-$     WRITE CONFIG "$ define dbgPerlShr Perl_Root:[000000]dbgPerlShr'ext'"
+$     WRITE CONFIG "$ dbgperl :== $''vms_prefix':[000000]dbgPerl'ext'"
+$     WRITE CONFIG "$ perl    :== $''vms_prefix':[000000]ndbgPerl'ext'"
+$     WRITE CONFIG "$ define dbgPerlShr ''vms_prefix':[000000]dbgPerlShr'ext'"
 $   ELSE
-$     WRITE CONFIG "$ perl :== $Perl_Root:[000000]Perl'ext'"
-$     WRITE CONFIG "$ define PerlShr Perl_Root:[000000]PerlShr'ext'"
+$     WRITE CONFIG "$ perl :== $''vms_prefix':[000000]Perl'ext'"
+$     WRITE CONFIG "$ define PerlShr ''vms_prefix':[000000]PerlShr'ext'"
 $   ENDIF
 $ ELSE ! .NOT.perl_symbol
 $   IF (use_vmsdebug_perl)
 $   THEN
-$     WRITE CONFIG "$ define dbgPerlShr Perl_Root:[000000]dbgPerlShr'ext'"
+$     WRITE CONFIG "$ define dbgPerlShr ''vms_prefix':[000000]dbgPerlShr'ext'"
 $   ELSE
-$     WRITE CONFIG "$ define PerlShr Perl_Root:[000000]PerlShr'ext'"
+$     WRITE CONFIG "$ define PerlShr ''vms_prefix':[000000]PerlShr'ext'"
 $   ENDIF
 $   IF perl_verb .EQS. "PROCESS"
 $   THEN
-$     WRITE CONFIG "$ set command ''packagup'_ROOT:[000000]''packageup'.CLD"
+$     WRITE CONFIG "$ set command ''vms_prefix':[000000]''packageup'.CLD"
 $   ENDIF
 $ ENDIF !  perl_symbol
-$ WRITE CONFIG "$ define/nolog pod2text Perl_Root:[lib.pod]pod2text.com"
-$ WRITE CONFIG "$ define/nolog pod2html Perl_Root:[lib.pod]pod2html.com"
-$ WRITE CONFIG "$ define/nolog pod2man  Perl_Root:[lib.pod]pod2man.com"
+$ WRITE CONFIG "$ define/nolog pod2text ''vms_prefix':[lib.pod]pod2text.com"
+$ WRITE CONFIG "$ define/nolog pod2html ''vms_prefix':[lib.pod]pod2html.com"
+$ WRITE CONFIG "$ define/nolog pod2man  ''vms_prefix':[lib.pod]pod2man.com"
 $!
 $ IF (tzneedset)
 $ THEN
@@ -2338,46 +5458,46 @@ $ WRITE CONFIG "$! Symbols for commonly used scripts:"
 $ WRITE CONFIG "$!"
 $ IF (perl_symbol)
 $ THEN
-$   WRITE CONFIG "$ Perldoc  == ""'"+"'Perl' Perl_Root:[lib.pod]Perldoc.com -t"""
+$   WRITE CONFIG "$ Perldoc  == ""'"+"'Perl' ''vms_prefix':[lib.pod]Perldoc.com -t"""
 $   WRITE CONFIG "$ pod2text == ""'"+"'Perl' pod2text"""
 $   WRITE CONFIG "$ pod2html == ""'"+"'Perl' pod2html"""
-$   WRITE CONFIG "$ pod2latex == ""'"+"'Perl' Perl_Root:[lib.pod]pod2latex.com"""
+$   WRITE CONFIG "$ pod2latex == ""'"+"'Perl' ''vms_prefix':[lib.pod]pod2latex.com"""
 $   WRITE CONFIG "$!pod2man  == ""'"+"'Perl' pod2man"""
-$   WRITE CONFIG "$!Perlbug  == ""'"+"'Perl' Perl_Root:[lib]Perlbug.com"""
-$   WRITE CONFIG "$ c2ph     == ""'"+"'Perl' Perl_Root:[utils]c2ph.com"""
+$   WRITE CONFIG "$!Perlbug  == ""'"+"'Perl' ''vms_prefix':[lib]Perlbug.com"""
+$   WRITE CONFIG "$ c2ph     == ""'"+"'Perl' ''vms_prefix':[utils]c2ph.com"""
 $   IF F$LOCATE("Devel::DProf",extensions) .LT. F$LENGTH(extensions)
 $   THEN
-$     WRITE CONFIG "$ dprofpp     == ""'"+"'Perl' Perl_Root:[utils]dprofpp.com"""
+$     WRITE CONFIG "$ dprofpp     == ""'"+"'Perl' ''vms_prefix':[utils]dprofpp.com"""
 $   ENDIF 
-$   WRITE CONFIG "$ h2ph     == ""'"+"'Perl' Perl_Root:[utils]h2ph.com"""
-$   WRITE CONFIG "$ h2xs     == ""'"+"'Perl' Perl_Root:[utils]h2xs.com"""
-$   WRITE CONFIG "$!perlcc   == ""'"+"'Perl' Perl_Root:[utils]perlcc.com"""
-$   WRITE CONFIG "$ splain   == ""'"+"'Perl' Perl_Root:[utils]splain.com"""
+$   WRITE CONFIG "$ h2ph     == ""'"+"'Perl' ''vms_prefix':[utils]h2ph.com"""
+$   WRITE CONFIG "$ h2xs     == ""'"+"'Perl' ''vms_prefix':[utils]h2xs.com"""
+$   WRITE CONFIG "$!perlcc   == ""'"+"'Perl' ''vms_prefix':[utils]perlcc.com"""
+$   WRITE CONFIG "$ splain   == ""'"+"'Perl' ''vms_prefix':[utils]splain.com"""
 $ ELSE
-$   WRITE CONFIG "$ Perldoc  == ""Perl Perl_Root:[lib.pod]Perldoc.com -t"""
+$   WRITE CONFIG "$ Perldoc  == ""Perl ''vms_prefix':[lib.pod]Perldoc.com -t"""
 $   WRITE CONFIG "$ pod2text == ""Perl pod2text"""
 $   WRITE CONFIG "$ pod2html == ""Perl pod2html"""
-$   WRITE CONFIG "$ pod2latex == ""Perl Perl_Root:[lib.pod]pod2latex.com"""
+$   WRITE CONFIG "$ pod2latex == ""Perl ''vms_prefix':[lib.pod]pod2latex.com"""
 $   WRITE CONFIG "$!pod2man  == ""Perl pod2man"""
-$   WRITE CONFIG "$!Perlbug  == ""Perl Perl_Root:[lib]Perlbug.com"""
-$   WRITE CONFIG "$ c2ph     == ""Perl Perl_Root:[utils]c2ph.com"""
+$   WRITE CONFIG "$!Perlbug  == ""Perl ''vms_prefix':[lib]Perlbug.com"""
+$   WRITE CONFIG "$ c2ph     == ""Perl ''vms_prefix':[utils]c2ph.com"""
 $   IF F$LOCATE("Devel::DProf",extensions) .LT. F$LENGTH(extensions)
 $   THEN
-$     WRITE CONFIG "$ dprofpp     == ""Perl Perl_Root:[utils]dprofpp.com"""
+$     WRITE CONFIG "$ dprofpp     == ""Perl ''vms_prefix':[utils]dprofpp.com"""
 $   ENDIF 
-$   WRITE CONFIG "$ h2ph     == ""Perl Perl_Root:[utils]h2ph.com"""
-$   WRITE CONFIG "$ h2xs     == ""Perl Perl_Root:[utils]h2xs.com"""
-$   WRITE CONFIG "$!perlcc   == ""Perl Perl_Root:[utils]perlcc.com"""
-$   WRITE CONFIG "$ splain   == ""Perl Perl_Root:[utils]splain.com"""
+$   WRITE CONFIG "$ h2ph     == ""Perl ''vms_prefix':[utils]h2ph.com"""
+$   WRITE CONFIG "$ h2xs     == ""Perl ''vms_prefix':[utils]h2xs.com"""
+$   WRITE CONFIG "$!perlcc   == ""Perl ''vms_prefix':[utils]perlcc.com"""
+$   WRITE CONFIG "$ splain   == ""Perl ''vms_prefix':[utils]splain.com"""
 $ ENDIF
 $ CLOSE CONFIG
 $!
 $ echo  ""
-$ echo  "%Config-I-VMS, The file can be found at:"
-$ echo4 "-Config-I-VMS, ''F$SEARCH(file_2_find)'"
-$ echo  "-Config-I-VMS, Add that file (or an @ call to it) to your [SY]LOGIN.COM"
-$ echo  "-Config-I-VMS, when you are satisfied with a successful compilation,"
-$ echo  "-Config-I-VMS, testing, and installation of your perl."
+$ echo  "The file can be found at:"
+$ echo4 "    ''F$SEARCH(file_2_find)'"
+$ echo  "Add that file (or an @ call to it) to your [SY]LOGIN.COM"
+$ echo  "when you are satisfied with a successful compilation,"
+$ echo  "testing, and installation of your perl."
 $ echo  ""
 $ IF ((.NOT.perl_symbol) .AND. (perl_verb .EQS. "DCLTABLES"))
 $ THEN
@@ -2388,9 +5508,9 @@ $   WRITE CONFIG "    /output=sys$common:[syslib]dcltables.exe"
 $   WRITE CONFIG "$ install replace sys$common:[syslib]dcltables.exe"
 $   CLOSE CONFIG
 $   echo4 ""
-$   echo4 "%Config-I-VMS, In order to install the ''packageup' verb into DCLTABLES run:"
-$   echo4 "-Config-I-VMS, @ ''F$SEARCH(file_2_find)'"
-$   echo4 "-Config-I-VMS, after a successful build, test, and install.  Do so with CMKRNL privilege."
+$   echo4 "In order to install the ''packageup' verb into DCLTABLES run:"
+$   echo4 "    @ ''F$SEARCH(file_2_find)'"
+$   echo4 "after a successful build, test, and install.  Do so with CMKRNL privilege."
 $   echo4 ""
 $ ENDIF
 $!
diff --git a/dump.c b/dump.c
index 1570a91..d0190f5 100644 (file)
--- a/dump.c
+++ b/dump.c
@@ -279,9 +279,12 @@ Perl_sv_peek(pTHX_ SV *sv)
        }
     }
     else if (SvNOKp(sv)) {
-       RESTORE_NUMERIC_STANDARD();
+       bool was_local = PL_numeric_local;
+       if (!was_local)
+           SET_NUMERIC_STANDARD();
        Perl_sv_catpvf(aTHX_ t, "(%g)",SvNVX(sv));
-       RESTORE_NUMERIC_LOCAL();
+       if (was_local)
+           SET_NUMERIC_LOCAL();
     }
     else if (SvIOKp(sv)) {
        if (SvIsUV(sv))
@@ -929,14 +932,17 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo
        PerlIO_putc(file, '\n');
     }
     if (type >= SVt_PVNV || type == SVt_NV) {
-       RESTORE_NUMERIC_STANDARD();
+       bool was_local = PL_numeric_local;
+       if (!was_local)
+           SET_NUMERIC_STANDARD();
        /* %Vg doesn't work? --jhi */
 #ifdef USE_LONG_DOUBLE
        Perl_dump_indent(aTHX_ level, file, "  NV = %.*" PERL_PRIgldbl "\n", LDBL_DIG, SvNVX(sv));
 #else
        Perl_dump_indent(aTHX_ level, file, "  NV = %.*g\n", DBL_DIG, SvNVX(sv));
 #endif
-       RESTORE_NUMERIC_LOCAL();
+       if (was_local)
+           SET_NUMERIC_LOCAL();
     }
     if (SvROK(sv)) {
        Perl_dump_indent(aTHX_ level, file, "  RV = 0x%"UVxf"\n", PTR2UV(SvRV(sv)));
diff --git a/embed.h b/embed.h
index d40e270..ced6e9d 100644 (file)
--- a/embed.h
+++ b/embed.h
 #define magic_nextpack         Perl_magic_nextpack
 #define magic_regdata_cnt      Perl_magic_regdata_cnt
 #define magic_regdatum_get     Perl_magic_regdatum_get
+#define magic_regdatum_set     Perl_magic_regdatum_set
 #define magic_set              Perl_magic_set
 #define magic_setamagic                Perl_magic_setamagic
 #define magic_setarylen                Perl_magic_setarylen
 #define magic_nextpack(a,b,c)  Perl_magic_nextpack(aTHX_ a,b,c)
 #define magic_regdata_cnt(a,b) Perl_magic_regdata_cnt(aTHX_ a,b)
 #define magic_regdatum_get(a,b)        Perl_magic_regdatum_get(aTHX_ a,b)
+#define magic_regdatum_set(a,b)        Perl_magic_regdatum_set(aTHX_ a,b)
 #define magic_set(a,b)         Perl_magic_set(aTHX_ a,b)
 #define magic_setamagic(a,b)   Perl_magic_setamagic(aTHX_ a,b)
 #define magic_setarylen(a,b)   Perl_magic_setarylen(aTHX_ a,b)
 #define magic_regdata_cnt      Perl_magic_regdata_cnt
 #define Perl_magic_regdatum_get        CPerlObj::Perl_magic_regdatum_get
 #define magic_regdatum_get     Perl_magic_regdatum_get
+#define Perl_magic_regdatum_set        CPerlObj::Perl_magic_regdatum_set
+#define magic_regdatum_set     Perl_magic_regdatum_set
 #define Perl_magic_set         CPerlObj::Perl_magic_set
 #define magic_set              Perl_magic_set
 #define Perl_magic_setamagic   CPerlObj::Perl_magic_setamagic
index 3e4c7d5..9353435 100755 (executable)
--- a/embed.pl
+++ b/embed.pl
@@ -1680,6 +1680,7 @@ p |int    |magic_mutexfree|SV* sv|MAGIC* mg
 p      |int    |magic_nextpack |SV* sv|MAGIC* mg|SV* key
 p      |U32    |magic_regdata_cnt|SV* sv|MAGIC* mg
 p      |int    |magic_regdatum_get|SV* sv|MAGIC* mg
+p      |int    |magic_regdatum_set|SV* sv|MAGIC* mg
 p      |int    |magic_set      |SV* sv|MAGIC* mg
 p      |int    |magic_setamagic|SV* sv|MAGIC* mg
 p      |int    |magic_setarylen|SV* sv|MAGIC* mg
diff --git a/gv.c b/gv.c
index 836fdb2..6dc45e7 100644 (file)
--- a/gv.c
+++ b/gv.c
@@ -819,6 +819,7 @@ Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, I32 sv_type)
        else {
             AV* av = GvAVn(gv);
             sv_magic((SV*)av, Nullsv, 'D', Nullch, 0);
+           SvREADONLY_on(av);
         }
        goto magicalize;
     case '#':
@@ -869,6 +870,7 @@ Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, I32 sv_type)
        else {
             AV* av = GvAVn(gv);
             sv_magic((SV*)av, (SV*)av, 'D', Nullch, 0);
+           SvREADONLY_on(av);
         }
        /* FALL THROUGH */
     case '1':
index 1fbe5a6..7be1735 100644 (file)
@@ -19,9 +19,11 @@ then
     plibpth=`cd $plibpth && pwd`
 fi
 so='dll'
-# - eliminate -lc, implied by gcc
+# - eliminate -lc, implied by gcc and a symlink to libcygwin.a
 libswanted=`echo " $libswanted " | sed -e 's/ c / /g'`
-libswanted="$libswanted cygipc cygwin kernel32"
+# - eliminate -lm, symlink to libcygwin.a
+libswanted=`echo " $libswanted " | sed -e 's/ m / /g'`
+libswanted="$libswanted cygipc"
 test -z "$optimize" && optimize='-O2'
 # - otherwise i686-cygwin
 archname='cygwin'
index 57f52c4..66da2ec 100644 (file)
@@ -224,8 +224,7 @@ Information on accessing the bleeding edge JPL via CVS can be found at:
 More Info
 ---------
 
-You can look at the Sample and Test directories, as well as the ../eg
-directory for examples.
+You can look at the Sample and Test directories.
 
 Perhaps the most important bit of advice we can give you is to watch
 
index 641ff36..2d13335 100644 (file)
@@ -6,13 +6,13 @@ use vars qw{$Try_autoload
            $Frontend  $Defaultsite
           }; #};
 
-$VERSION = '1.56';
+$VERSION = '1.57';
 
-# $Id: CPAN.pm,v 1.303 2000/08/01 15:57:15 k Exp $
+# $Id: CPAN.pm,v 1.305 2000/08/16 12:42:32 k Exp $
 
 # only used during development:
 $Revision = "";
-# $Revision = "[".substr(q$Revision: 1.303 $, 10)."]";
+# $Revision = "[".substr(q$Revision: 1.305 $, 10)."]";
 
 use Carp ();
 use Config ();
@@ -182,7 +182,7 @@ ReadLine support $rl_avail
            my $command = shift @line;
            eval { CPAN::Shell->$command(@line) };
            warn $@ if $@;
-           chdir $cwd;
+           chdir $cwd or $CPAN::Frontend->mydie(qq{Could not chdir to "$cwd": $!});
            $CPAN::Frontend->myprint("\n");
            $continuation = "";
            $prompt = "cpan> ";
@@ -295,7 +295,7 @@ sub try_dot_al {
        $pkg =~ s|::|/|g;
        if (defined($name=$INC{"$pkg.pm"}))
            {
-               $name =~ s|^(.*)$pkg\.pm$|$1auto/$pkg/$func.al|s;
+               $name =~ s|^(.*)$pkg\.pm(?!\n)\Z|$1auto/$pkg/$func.al|s;
                $name = undef unless (-r $name);
            }
        unless (defined $name)
@@ -311,7 +311,7 @@ sub try_dot_al {
            *$autoload = sub {};
            $ok = 1;
        } else {
-           if ($name =~ s{(\w{12,})\.al$}{substr($1,0,11).".al"}e){
+           if ($name =~ s{(\w{12,})\.al(?!\n)\Z}{substr($1,0,11).".al"}e){
                eval {local $SIG{__DIE__};require $name};
            }
            if ($@){
@@ -995,11 +995,11 @@ sub edit {
        $class->$o(@args);
        return 1;
     } else {
-        CPAN->debug("o[$o]");
+        CPAN->debug("o[$o]") if $CPAN::DEBUG;
        if ($o =~ /list$/) {
            $func = shift @args;
            $func ||= "";
-            CPAN->debug("func[$func]");
+            CPAN->debug("func[$func]") if $CPAN::DEBUG;
             my $changed;
            # Let's avoid eval, it's easier to comprehend without.
            if ($func eq "push") {
@@ -1319,7 +1319,7 @@ sub b {
            my($entry);
            for $entry ($dh->read) {
                next if -d MM->catdir($bdir,$entry);
-               next unless $entry =~ s/\.pm$//;
+               next unless $entry =~ s/\.pm(?!\n)\Z//;
                $CPAN::META->instance('CPAN::Bundle',"Bundle::$entry");
            }
        }
@@ -1436,7 +1436,8 @@ sub o {
            my($k,$v);
            for $k (sort {$CPAN::DEBUG{$a} <=> $CPAN::DEBUG{$b}} keys %CPAN::DEBUG) {
                $v = $CPAN::DEBUG{$k};
-               $CPAN::Frontend->myprint(sprintf "    %-14s(%s)\n", $k, $v) if $v & $CPAN::DEBUG;
+               $CPAN::Frontend->myprint(sprintf "    %-14s(%s)\n", $k, $v)
+                    if $v & $CPAN::DEBUG;
            }
        } else {
            $CPAN::Frontend->myprint("Debugging turned off completely.\n");
@@ -1491,21 +1492,12 @@ index    re-reads the index files\n});
 sub _binary_extensions {
     my($self) = shift @_;
     my(@result,$module,%seen,%need,$headerdone);
-    my $isaperl = q{ perl
-                     -?
-                     5[._-]
-                     (
-                      \\d{3}(_[0-4][0-9])?
-                      |
-                      \\d*[24680]\\.\\d+
-                     )
-                     \\.tar[._-]gz$
-                    };
     for $module ($self->expand('Module','/./')) {
        my $file  = $module->cpan_file;
        next if $file eq "N/A";
        next if $file =~ /^Contact Author/;
-       next if $file =~ / $isaperl /x;
+        my $dist = $CPAN::META->instance('CPAN::Distribution',$file);
+       next if $dist->isa_perl;
        next unless $module->xs_file;
        local($|) = 1;
        $CPAN::Frontend->myprint(".");
@@ -1554,15 +1546,15 @@ sub _u_r_common {
     for $module ($self->expand('Module',@args)) {
        my $file  = $module->cpan_file;
        next unless defined $file; # ??
-       my($latest) = $module->cpan_version;
+       my($latest) = $module->cpan_version; # %vd
        my($inst_file) = $module->inst_file;
        my($have);
        return if $CPAN::Signal;
        if ($inst_file){
            if ($what eq "a") {
-               $have = $module->inst_version;
+               $have = $module->inst_version; # %vd
            } elsif ($what eq "r") {
-               $have = $module->inst_version;
+               $have = $module->inst_version; # %vd
                local($^W) = 0;
                if ($have eq "undef"){
                    $version_undefs++;
@@ -1607,9 +1599,26 @@ sub _u_r_common {
                   "in CPAN file"
                   ));
        }
-       $latest = substr($latest,0,8) if length($latest) > 8;
-       $have = substr($have,0,8) if length($have) > 8;
-       $CPAN::Frontend->myprint(sprintf $sprintf, $module->id, $have, $latest, $file);
+        for ($have,$latest) {
+          if ($] >= 5.006) { # people start using v-strings
+            local($^W) = 0;
+            unless (/^([+-]?)([\d_]*)(\.([\d_]*))?([Ee]([+-]?[\d_]+))?$/
+                    && "$2$4" ne ""
+                    ||
+                    /^undef$/
+                    ||
+                    /^-$/ # not installed
+                   ) {
+              $_ = sprintf "%vd", $_;
+            }
+          }
+          $_ = substr($_,0,8) if length($_) > 8;
+        }
+       $CPAN::Frontend->myprint(sprintf $sprintf,
+                                 $module->id,
+                                 $have,
+                                 $latest,
+                                 $file);
        $need{$module->id}++;
     }
     unless (%need) {
@@ -2184,7 +2193,7 @@ sub hosteasy {
            utime $now, $now, $aslocal; # download time is more
                                         # important than upload time
            return $aslocal;
-         } elsif ($url !~ /\.gz$/) {
+         } elsif ($url !~ /\.gz(?!\n)\Z/) {
            my $gzurl = "$url.gz";
            $CPAN::Frontend->myprint("Fetching with LWP:
   $gzurl
@@ -2221,7 +2230,7 @@ sub hosteasy {
                    $Thesite = $i;
                    return $aslocal;
                }
-               if ($aslocal !~ /\.gz$/) {
+               if ($aslocal !~ /\.gz(?!\n)\Z/) {
                    my $gz = "$aslocal.gz";
                    $CPAN::Frontend->myprint("Fetching with Net::FTP
   $url.gz
@@ -2327,7 +2336,7 @@ Trying with "$funkyftp$src_switch" to get
            }
            $Thesite = $i;
            return $aslocal;
-         } elsif ($url !~ /\.gz$/) {
+         } elsif ($url !~ /\.gz(?!\n)\Z/) {
            unlink $asl_ungz if
                -f $asl_ungz && -s _ == 0;
            my $gz = "$aslocal.gz";
@@ -2847,7 +2856,7 @@ sub userid {
 
 #-> sub CPAN::Index::rd_modpacks ;
 sub rd_modpacks {
-    my($cl, $index_target) = @_;
+    my($self, $index_target) = @_;
     my @lines;
     return unless defined $index_target;
     $CPAN::Frontend->myprint("Going to read $index_target\n");
@@ -2868,10 +2877,13 @@ sub rd_modpacks {
        last if $shift =~ /^\s*$/;
     }
     if (not defined $line_count) {
+
        warn qq{Warning: Your $index_target does not contain a Line-Count header.
-Please check the validity of the index file by comparing it to more than one CPAN
-mirror. I'll continue but problems seem likely to happen.\a
+Please check the validity of the index file by comparing it to more
+than one CPAN mirror. I'll continue but problems seem likely to
+happen.\a
 };
+
        sleep 5;
     } elsif ($line_count != scalar @lines) {
 
@@ -2884,7 +2896,10 @@ $index_target, $line_count, scalar(@lines);
     }
     foreach (@lines) {
        chomp;
-       my($mod,$version,$dist) = split;
+        # before 1.56 we split into 3 and discarded the rest. From
+        # 1.57 we assign remaining text to $comment thus allowing to
+        # influence isa_perl
+       my($mod,$version,$dist,$comment) = split " ", $_, 4;
 ###    $version =~ s/^\+//;
 
        # if it is a bundle, instantiate a bundle object
@@ -2935,11 +2950,12 @@ $index_target, $line_count, scalar(@lines);
        }
 
        if ($id->cpan_file ne $dist){
-           $userid = $cl->userid($dist);
+           $userid = $self->userid($dist);
            $id->set(
                     'CPAN_USERID' => $userid,
-                    'CPAN_VERSION' => $version,
-                    'CPAN_FILE' => $dist
+                    'CPAN_VERSION' => $version, # %vd
+                    'CPAN_FILE' => $dist,
+                     'CPAN_COMMENT' => $comment,
                    );
        }
 
@@ -3167,74 +3183,77 @@ sub get {
     $self->debug("Removing tmp") if $CPAN::DEBUG;
     File::Path::rmtree("tmp");
     mkdir "tmp", 0755 or Carp::croak "Couldn't mkdir tmp: $!";
-    chdir "tmp";
+    chdir "tmp" or $CPAN::Frontend->mydie(qq{Could not chdir to "tmp": $!});;
     $self->debug("Changed directory to tmp") if $CPAN::DEBUG;
     if (! $local_file) {
        Carp::croak "bad download, can't do anything :-(\n";
-    } elsif ($local_file =~ /(\.tar\.(gz|Z)|\.tgz)$/i){
+    } elsif ($local_file =~ /(\.tar\.(gz|Z)|\.tgz)(?!\n)\Z/i){
        $self->untar_me($local_file);
-    } elsif ( $local_file =~ /\.zip$/i ) {
+    } elsif ( $local_file =~ /\.zip(?!\n)\Z/i ) {
        $self->unzip_me($local_file);
-    } elsif ( $local_file =~ /\.pm\.(gz|Z)$/) {
+    } elsif ( $local_file =~ /\.pm\.(gz|Z)(?!\n)\Z/) {
        $self->pm2dir_me($local_file);
     } else {
        $self->{archived} = "NO";
     }
-    chdir File::Spec->updir;
+    my $cwd = File::Spec->updir;
+    chdir $cwd or $CPAN::Frontend->mydie(qq{Could not chdir to "": $!});
     if ($self->{archived} ne 'NO') {
-       chdir File::Spec->catdir(File::Spec->curdir, "tmp");
-       # Let's check if the package has its own directory.
-       my $dh = DirHandle->new(File::Spec->curdir)
-           or Carp::croak("Couldn't opendir .: $!");
-       my @readdir = grep $_ !~ /^\.\.?$/s, $dh->read; ### MAC??
-       $dh->close;
-       my ($distdir,$packagedir);
-       if (@readdir == 1 && -d $readdir[0]) {
-           $distdir = $readdir[0];
-           $packagedir = MM->catdir($builddir,$distdir);
-           -d $packagedir and $CPAN::Frontend->myprint("Removing previously used $packagedir\n");
-           File::Path::rmtree($packagedir);
-           rename($distdir,$packagedir) or Carp::confess("Couldn't rename $distdir to $packagedir: $!");
-       } else {
-           my $pragmatic_dir = $self->{'CPAN_USERID'} . '000';
-           $pragmatic_dir =~ s/\W_//g;
-           $pragmatic_dir++ while -d "../$pragmatic_dir";
-           $packagedir = MM->catdir($builddir,$pragmatic_dir);
-           File::Path::mkpath($packagedir);
-           my($f);
-           for $f (@readdir) { # is already without "." and ".."
-               my $to = MM->catdir($packagedir,$f);
-               rename($f,$to) or Carp::confess("Couldn't rename $f to $to: $!");
-           }
-       }
-       $self->{'build_dir'} = $packagedir;
-       chdir File::Spec->updir;
-
-       $self->debug("Changed directory to .. (self is $self [".$self->as_string."])")
-           if $CPAN::DEBUG;
-       File::Path::rmtree("tmp");
-       if ($CPAN::Config->{keep_source_where} =~ /^no/i ){
-           $CPAN::Frontend->myprint("Going to unlink $local_file\n");
-           unlink $local_file or Carp::carp "Couldn't unlink $local_file";
-       }
-       my($makefilepl) = MM->catfile($packagedir,"Makefile.PL");
-       unless (-f $makefilepl) {
-         my($configure) = MM->catfile($packagedir,"Configure");
-         if (-f $configure) {
-           # do we have anything to do?
-           $self->{'configure'} = $configure;
-         } elsif (-f MM->catfile($packagedir,"Makefile")) {
-           $CPAN::Frontend->myprint(qq{
+      $cwd = File::Spec->catdir(File::Spec->curdir, "tmp");
+      chdir $cwd or $CPAN::Frontend->mydie(qq{Could not chdir to "$cwd": $!});
+      # Let's check if the package has its own directory.
+      my $dh = DirHandle->new(File::Spec->curdir)
+          or Carp::croak("Couldn't opendir .: $!");
+      my @readdir = grep $_ !~ /^\.\.?(?!\n)\Z/s, $dh->read; ### MAC??
+      $dh->close;
+      my ($distdir,$packagedir);
+      if (@readdir == 1 && -d $readdir[0]) {
+        $distdir = $readdir[0];
+        $packagedir = MM->catdir($builddir,$distdir);
+        -d $packagedir and $CPAN::Frontend->myprint("Removing previously used $packagedir\n");
+        File::Path::rmtree($packagedir);
+        rename($distdir,$packagedir) or Carp::confess("Couldn't rename $distdir to $packagedir: $!");
+      } else {
+        my $pragmatic_dir = $self->{'CPAN_USERID'} . '000';
+        $pragmatic_dir =~ s/\W_//g;
+        $pragmatic_dir++ while -d "../$pragmatic_dir";
+        $packagedir = MM->catdir($builddir,$pragmatic_dir);
+        File::Path::mkpath($packagedir);
+        my($f);
+        for $f (@readdir) { # is already without "." and ".."
+          my $to = MM->catdir($packagedir,$f);
+          rename($f,$to) or Carp::confess("Couldn't rename $f to $to: $!");
+        }
+      }
+      $self->{'build_dir'} = $packagedir;
+      $cwd = File::Spec->updir;
+      chdir $cwd or $CPAN::Frontend->mydie(qq{Could not chdir to "$cwd": $!});
+
+      $self->debug("Changed directory to .. (self is $self [".$self->as_string."])")
+          if $CPAN::DEBUG;
+      File::Path::rmtree("tmp");
+      if ($CPAN::Config->{keep_source_where} =~ /^no/i ){
+        $CPAN::Frontend->myprint("Going to unlink $local_file\n");
+        unlink $local_file or Carp::carp "Couldn't unlink $local_file";
+      }
+      my($makefilepl) = MM->catfile($packagedir,"Makefile.PL");
+      unless (-f $makefilepl) {
+        my($configure) = MM->catfile($packagedir,"Configure");
+        if (-f $configure) {
+          # do we have anything to do?
+          $self->{'configure'} = $configure;
+        } elsif (-f MM->catfile($packagedir,"Makefile")) {
+          $CPAN::Frontend->myprint(qq{
 Package comes with a Makefile and without a Makefile.PL.
 We\'ll try to build it with that Makefile then.
 });
-           $self->{writemakefile} = "YES";
-           sleep 2;
-         } else {
-           my $fh = FileHandle->new(">$makefilepl")
-               or Carp::croak("Could not open >$makefilepl");
-           my $cf = $self->called_for || "unknown";
-           $fh->print(
+          $self->{writemakefile} = "YES";
+          sleep 2;
+        } else {
+          my $fh = FileHandle->new(">$makefilepl")
+              or Carp::croak("Could not open >$makefilepl");
+          my $cf = $self->called_for || "unknown";
+          $fh->print(
 qq{# This Makefile.PL has been autogenerated by the module CPAN.pm
 # because there was no Makefile.PL supplied.
 # Autogenerated on: }.scalar localtime().qq{
@@ -3243,10 +3262,10 @@ use ExtUtils::MakeMaker;
 WriteMakefile(NAME => q[$cf]);
 
 });
-           $CPAN::Frontend->myprint(qq{Package comes without Makefile.PL.
+          $CPAN::Frontend->myprint(qq{Package comes without Makefile.PL.
   Writing one on our own (calling it $cf)\n});
-           }
-       }
+        }
+      }
     }
     return $self;
 }
@@ -3263,13 +3282,17 @@ sub untar_me {
 
 sub unzip_me {
     my($self,$local_file) = @_;
+    $self->{archived} = "zip";
     if ($CPAN::META->has_inst("Archive::Zip")) {
-      $CPAN::Frontend->mywarn("Archive::Zip not yet supported. ".
-                              "Will use external unzip");
+      if (CPAN::Tarzip->unzip($local_file)) {
+       $self->{unwrapped} = "YES";
+      } else {
+       $self->{unwrapped} = "NO";
+      }
+      return;
     }
     my $unzip = $CPAN::Config->{unzip} or
         $CPAN::Frontend->mydie("Cannot unzip, no unzip program available");
-    $self->{archived} = "zip";
     my @system = ($unzip, $local_file);
     if (system(@system) == 0) {
        $self->{unwrapped} = "YES";
@@ -3282,7 +3305,7 @@ sub pm2dir_me {
     my($self,$local_file) = @_;
     $self->{archived} = "pm";
     my $to = File::Basename::basename($local_file);
-    $to =~ s/\.(gz|Z)$//;
+    $to =~ s/\.(gz|Z)(?!\n)\Z//;
     if (CPAN::Tarzip->gunzip($local_file,$to)) {
        $self->{unwrapped} = "YES";
     } else {
@@ -3326,11 +3349,11 @@ Please define it with "o conf shell <your shell>"
     my $getcwd;
     $getcwd = $CPAN::Config->{'getcwd'} || 'cwd';
     my $pwd  = CPAN->$getcwd();
-    chdir($dir);
+    chdir($dir) or $CPAN::Frontend->mydie(qq{Could not chdir to "$dir": $!});
     $CPAN::Frontend->myprint(qq{Working directory is $dir\n});
     system($CPAN::Config->{'shell'}) == 0
        or $CPAN::Frontend->mydie("Subprocess shell error");
-    chdir($pwd);
+    chdir($pwd) or $CPAN::Frontend->mydie(qq{Could not chdir to "$pwd": $!});
 }
 
 sub cvs_import {
@@ -3340,12 +3363,12 @@ sub cvs_import {
 
     my $package = $self->called_for;
     my $module = $CPAN::META->instance('CPAN::Module', $package);
-    my $version = $module->cpan_version;
+    my $version = $module->cpan_version; # %vd
 
     my $userid = $self->{CPAN_USERID};
 
     my $cvs_dir = (split '/', $dir)[-1];
-    $cvs_dir =~ s/-\d+[^-]+$//;
+    $cvs_dir =~ s/-\d+[^-]+(?!\n)\Z//;
     my $cvs_root = 
       $CPAN::Config->{cvsroot} || $ENV{CVSROOT};
     my $cvs_site_perl = 
@@ -3361,14 +3384,14 @@ sub cvs_import {
     my $getcwd;
     $getcwd = $CPAN::Config->{'getcwd'} || 'cwd';
     my $pwd  = CPAN->$getcwd();
-    chdir($dir);
+    chdir($dir) or $CPAN::Frontend->mydie(qq{Could not chdir to "$dir": $!});
 
     $CPAN::Frontend->myprint(qq{Working directory is $dir\n});
 
     $CPAN::Frontend->myprint(qq{@cmd\n});
     system(@cmd) == 0 or
        $CPAN::Frontend->mydie("cvs import failed");
-    chdir($pwd);
+    chdir($pwd) or $CPAN::Frontend->mydie(qq{Could not chdir to "$pwd": $!});
 }
 
 #-> sub CPAN::Distribution::readme ;
@@ -3442,7 +3465,7 @@ sub verifyMD5 {
        $lc_file = CPAN::FTP->localize("authors/id/@local",
                                       "$lc_want.gz",1);
        if ($lc_file) {
-           $lc_file =~ s/\.gz$//;
+           $lc_file =~ s/\.gz(?!\n)\Z//;
            CPAN::Tarzip->gunzip("$lc_file.gz",$lc_file);
        } else {
            return;
@@ -3565,19 +3588,22 @@ sub force {
 sub isa_perl {
   my($self) = @_;
   my $file = File::Basename::basename($self->id);
-  return unless $file =~ m{ ^ perl
-                            -?
-                           (5)
-                           ([._-])
-                           (
-                             \d{3}(_[0-4][0-9])?
-                             |
-                             \d*[24680]\.\d+
-                            )
-                           \.tar[._-]gz
-                           $
-                         }xs;
-  "$1.$3";
+  if ($file =~ m{ ^ perl
+                  -?
+                 (5)
+                 ([._-])
+                 (
+                   \d{3}(_[0-4][0-9])?
+                   |
+                   \d*[24680]\.\d+
+                  )
+                 \.tar[._-]gz
+                 (?!\n)\Z
+               }xs){
+    return "$1.$3";
+  } elsif ($self->{'CPAN_COMMENT'} && $self->{'CPAN_COMMENT'} =~ /isa_perl\(.+?\)/){
+    return $1;
+  }
 }
 
 #-> sub CPAN::Distribution::perl ;
@@ -3626,7 +3652,7 @@ or
                               $CPAN::META->instance(
                                                     'CPAN::Module',
                                                     $self->called_for
-                                                   )->cpan_version,
+                                                   )->cpan_version, # %vd
                               $self->called_for,
                               $self->isa_perl,
                               $self->called_for,
@@ -3804,7 +3830,7 @@ sub needs_prereq {
     {
       local($^W) = 0;
       if (defined $mo->inst_file &&
-          $mo->inst_version >= $need_version){
+          $mo->inst_version >= $need_version){ # %vd
         CPAN->debug(sprintf "inst_file[%s]inst_version[%s]need_version[%s]",
                     $mo->inst_file, $mo->inst_version, $need_version
                    );
@@ -3961,7 +3987,7 @@ package CPAN::Bundle;
 sub as_string {
     my($self) = @_;
     $self->contains;
-    $self->{INST_VERSION} = $self->inst_version;
+    $self->{INST_VERSION} ||= $self->inst_version; # %vd
     return $self->SUPER::as_string;
 }
 
@@ -4034,9 +4060,9 @@ sub find_bundle_file {
        require ExtUtils::Manifest;
        my $getcwd = $CPAN::Config->{'getcwd'} || 'cwd';
        my $cwd = CPAN->$getcwd();
-       chdir $where;
+       chdir $where or $CPAN::Frontend->mydie(qq{Could not chdir to "$where": $!});
        ExtUtils::Manifest::mkmanifest();
-       chdir $cwd;
+       chdir $cwd or $CPAN::Frontend->mydie(qq{Could not chdir to "$cwd": $!});
     }
     my $fh = FileHandle->new($manifest)
        or Carp::croak("Couldn't open $manifest: $!");
@@ -4242,8 +4268,8 @@ sub as_string {
                          );
        }
     }
-    push @m, sprintf($sprintf, 'CPAN_VERSION', $self->{CPAN_VERSION})
-       if $self->{CPAN_VERSION};
+    push @m, sprintf($sprintf, 'CPAN_VERSION', $self->{CPAN_VERSION}) # %vd
+       if $self->{CPAN_VERSION}; # %vd
     push @m, sprintf($sprintf, 'CPAN_FILE', $self->{CPAN_FILE})
        if $self->{CPAN_FILE};
     my $sprintf3 = "    %-12s %1s%1s%1s%1s (%s,%s,%s,%s)\n";
@@ -4283,14 +4309,14 @@ sub as_string {
     push @m, sprintf($sprintf, 'INST_FILE',
                     $local_file || "(not installed)");
     push @m, sprintf($sprintf, 'INST_VERSION',
-                    $self->inst_version) if $local_file;
+                    $self->inst_version) if $local_file; #%vd
     join "", @m, "\n";
 }
 
 sub manpage_headline {
   my($self,$local_file) = @_;
   my(@local_file) = $local_file;
-  $local_file =~ s/\.pm$/.pod/;
+  $local_file =~ s/\.pm(?!\n)\Z/.pod/;
   push @local_file, $local_file;
   my(@result,$locf);
   for $locf (@local_file) {
@@ -4352,7 +4378,7 @@ sub cpan_version {
                                                 # and do not want to
                                                 # provoke too many
                                                 # bugreports
-    $self->{'CPAN_VERSION'};
+    $self->{'CPAN_VERSION'}; # %vd
 }
 
 #-> sub CPAN::Module::force ;
@@ -4401,17 +4427,17 @@ sub test   { shift->rematein('test') }
 #-> sub CPAN::Module::uptodate ;
 sub uptodate {
     my($self) = @_;
-    my($latest) = $self->cpan_version;
+    my($latest) = $self->cpan_version; # %vd
     $latest ||= 0;
     my($inst_file) = $self->inst_file;
     my($have) = 0;
     if (defined $inst_file) {
-       $have = $self->inst_version;
+       $have = $self->inst_version; # %vd?
     }
     local($^W)=0;
     if ($inst_file
        &&
-       $have >= $latest
+       $have >= $latest # %vd
        ) {
       return 1;
     }
@@ -4482,7 +4508,22 @@ sub inst_version {
                                    warn $w;
                                  };
     $have = MM->parse_version($parsefile) || "undef";
+    $have =~ s/^ //; # since the %vd hack these two lines here are needed
+    $have =~ s/ $//; # trailing whitespace happens all the time
+
     # local($SIG{__WARN__}) =  sub { warn "2. have[$have]"; };
+
+    if ($] >= 5.006) { # people start using v-strings
+      unless ($have =~ /^([+-]?)([\d_]*)(\.([\d_]*))?([Ee]([+-]?[\d_]+))?$/
+              && "$2$4" ne ""
+              ||
+              /^undef$/
+              ||
+              /^-$/
+             ) {
+        $have = sprintf "%vd", $have;
+      }
+    }
     $have =~ s/\s*//g; # stringify to float around floating point issues
     # local($SIG{__WARN__}) =  sub { warn "3. have[$have]"; };
     $have; # no stringify needed, \s* above matches always
@@ -4635,7 +4676,7 @@ sub untar {
                               qq{Couldn\'t uncompress $file\n}
                              );
       }
-      $file =~ s/\.gz$//;
+      $file =~ s/\.gz(?!\n)\Z//;
       $system = "$CPAN::Config->{tar} xvf $file";
       $CPAN::Frontend->myprint(qq{Using Tar:$system:\n});
       if (system($system)==0) {
@@ -4667,6 +4708,26 @@ is available. Can\'t continue.
   }
 }
 
+sub unzip {
+  my($class,$file) = @_;
+  return unless $CPAN::META->has_inst("Archive::Zip");
+  # blueprint of the code from Archive::Zip::Tree::extractTree();
+  my $zip = Archive::Zip->new();
+  my $status;
+  $status = $zip->read($file);
+  die "Read of file[$file] failed\n" if $status != Archive::Zip::AZ_OK();
+  $CPAN::META->debug("Successfully read file[$file]") if $CPAN::DEBUG;
+  my @members = $zip->members();
+  for my $member ( @members ) {
+    my $f = $member->fileName();
+    my $status = $member->extractToFileNamed( $f );
+    $CPAN::META->debug("f[$f]status[$status]") if $CPAN::DEBUG;
+    die "Extracting of file[$f] from zipfile[$file] failed\n" if
+        $status != Archive::Zip::AZ_OK();
+  }
+  return 1;
+}
+
 package CPAN;
 
 1;
@@ -5172,7 +5233,8 @@ works like the corresponding perl commands.
 =head2 Note on urllist parameter's format
 
 urllist parameters are URLs according to RFC 1738. We do a little
-guessing if your URL is not compliant, but if you have problems with file URLs, please try the correct format. Either:
+guessing if your URL is not compliant, but if you have problems with
+file URLs, please try the correct format. Either:
 
     file://localhost/whatever/ftp/pub/CPAN/
 
index 9a92829..ecd0882 100644 (file)
@@ -81,8 +81,9 @@ require Exporter;
 # The 'natural and safe form' for UNIX (pwd may be setuid root)
 
 sub _backtick_pwd {
-    my $cwd;
-    chop($cwd = `pwd`);
+    my $cwd = `pwd`;
+    # `pwd` may fail e.g. if the disk is full
+    chomp($cwd) if defined $cwd;
     $cwd;
 }
 
index b649b6b..863ab7e 100644 (file)
@@ -484,7 +484,7 @@ B<xsinit()> uses the xsi_* functions to generate most of it's code.
 =head1 EXAMPLES
 
 For examples on how to use B<ExtUtils::Embed> for building C/C++ applications
-with embedded perl, see the eg/ directory and L<perlembed>.
+with embedded perl, see L<perlembed>.
 
 =head1 SEE ALSO
 
index 48b1184..bf24ed3 100644 (file)
@@ -91,8 +91,9 @@ use File::Spec 0.8;
 use File::Path qw/ rmtree /;
 use Fcntl 1.03;
 use Errno qw( EEXIST ENOENT ENOTDIR EINVAL );
+require VMS::Stdio if $^O eq 'VMS';
 
-# Need the Symbol package if we are running older perl 
+# Need the Symbol package if we are running older perl
 require Symbol if $] < 5.006;
 
 
@@ -131,7 +132,7 @@ Exporter::export_tags('POSIX','mktemp');
 
 # Version number 
 
-$VERSION = '0.09';
+$VERSION = '0.10';
 
 # This is a list of characters that can be used in random filenames
 
@@ -162,12 +163,25 @@ use constant HIGH     => 2;
 
 my $OPENFLAGS = O_CREAT | O_EXCL | O_RDWR;
 
-for my $oflag (qw/FOLLOW BINARY LARGEFILE EXLOCK NOINHERIT TEMPORARY/) {
+for my $oflag (qw/ FOLLOW BINARY LARGEFILE EXLOCK NOINHERIT /) {
   my ($bit, $func) = (0, "Fcntl::O_" . $oflag);
   no strict 'refs';
   $OPENFLAGS |= $bit if eval { $bit = &$func(); 1 };
 }
 
+# On some systems the O_TEMPORARY flag can be used to tell the OS
+# to automatically remove the file when it is closed. This is fine
+# in most cases but not if tempfile is called with UNLINK=>0 and
+# the filename is requested -- in the case where the filename is to
+# be passed to another routine. This happens on windows. We overcome
+# this by using a second open flags variable
+
+my $OPENTEMPFLAGS = $OPENFLAGS;
+for my $oflag (qw/ TEMPORARY /) {
+  my ($bit, $func) = (0, "Fcntl::O_" . $oflag);
+  no strict 'refs';
+  $OPENTEMPFLAGS |= $bit if eval { $bit = &$func(); 1 };
+}
 
 
 # INTERNAL ROUTINES - not to be used outside of package
@@ -190,7 +204,13 @@ for my $oflag (qw/FOLLOW BINARY LARGEFILE EXLOCK NOINHERIT TEMPORARY/) {
 #             default is 0
 #   "suffixlen" => number of characters at end of PATH to be ignored.
 #                  default is 0.
+#   "unlink_on_close" => indicates that, if possible,  the OS should remove
+#                        the file as soon as it is closed. Usually indicates
+#                        use of the O_TEMPORARY flag to sysopen. 
+#                        Usually irrelevant on unix
+
 # "open" and "mkdir" can not both be true
+# "unlink_on_close" is not used when "mkdir" is true.
 
 # The default options are equivalent to mktemp().
 
@@ -214,6 +234,7 @@ sub _gettemp {
                 "open" => 0,
                 "mkdir" => 0,
                 "suffixlen" => 0,
+                "unlink_on_close" => 0,
                );
 
   # Read the template
@@ -338,21 +359,6 @@ sub _gettemp {
   }
 
 
-  # Calculate the flags that we wish to use for the sysopen
-  # Some of these are not always available
-#  my $openflags;
-#  if ($options{"open"}) {
-    # Default set
-#    $openflags = O_CREAT | O_EXCL | O_RDWR;
-
-#    for my $oflag (qw/FOLLOW BINARY LARGEFILE EXLOCK NOINHERIT TEMPORARY/) {
-#        my ($bit, $func) = (0, "Fcntl::O_" . $oflag);
-#        no strict 'refs';
-#        $openflags |= $bit if eval { $bit = &$func(); 1 };
-#    }
-
-#  }
-
   # Now try MAX_TRIES time to open the file
   for (my $i = 0; $i < MAX_TRIES; $i++) {
 
@@ -377,7 +383,17 @@ sub _gettemp {
       umask(066);
 
       # Attempt to open the file
-      if ( sysopen($fh, $path, $OPENFLAGS, 0600) ) {
+      my $open_success = undef;
+      if ( $^O eq 'VMS' ) { # make it auto delete on close
+       $fh = VMS::Stdio::vmssysopen($path, $OPENFLAGS, 0600, 'fop=dlt');
+       $open_success = $fh;
+      } else {
+       my $flags = ( $options{"unlink_on_close"} ?
+                     $OPENTEMPFLAGS :
+                     $OPENFLAGS );
+       $open_success = sysopen($fh, $path, $flags, 0600);
+      }
+      if ( $open_success ) {
 
        # Reset umask
        umask($umask);
@@ -681,7 +697,7 @@ sub _can_do_level {
   return 1 if $level == STANDARD;
 
   # Currently, the systems that can do HIGH or MEDIUM are identical
-  if ( $^O eq 'MSWin32' || $^O eq 'os2') {
+  if ( $^O eq 'MSWin32' || $^O eq 'os2' || $^O eq 'cygwin') {
     return 0;
   } else {
     return 1;
@@ -703,7 +719,7 @@ sub _can_do_level {
 #   - isdir      (flag to indicate that we are being given a directory)
 #                 [and hence no filehandle]
 
-# Status is not referred to since all the magic is done with and END block
+# Status is not referred to since all the magic is done with an END block
 
 {
   # Will set up two lexical variables to contain all the files to be
@@ -723,6 +739,10 @@ sub _can_do_level {
       # probably a better way to do this
       close($file->[0]);  # file handle is [0]
 
+      # On VMS, the file will be automatically deleted on close,
+      # so we are through with the file already.
+      next if $^O eq 'VMS';
+
       if (-f $file->[1]) {  # file name is [1]
        unlink $file->[1] or warn "Error removing ".$file->[1];
       }
@@ -758,10 +778,12 @@ sub _can_do_level {
       if (-d $fname) {
 
        # Directory exists so store it
+       # first on VMS turn []foo into [.foo] for rmtree
+       $fname = VMS::Filespec::vmspath($fname) if $^O eq 'VMS';
        push (@dirs_to_unlink, $fname);
 
       } else {
-       carp "Request to remove directory $fname could not be completed since it does not exists!\n";
+       carp "Request to remove directory $fname could not be completed since it does not exist!\n";
       }
 
     } else {
@@ -818,6 +840,13 @@ But see the WARNING at the end.
 Translates the template as before except that a directory name
 is specified.
 
+  ($fh, $filename) = tempfile($template, UNLINK => 1);
+
+Return the filename and filehandle as before except that the file is
+automatically removed when the program exits. Default is for the file
+to be removed if a file handle is requested and to be kept if the
+filename is requested.
+
 If the template is not specified, a template is always
 automatically generated. This temporary file is placed in tmpdir()
 (L<File::Spec>) unless a directory is specified explicitly with the 
@@ -844,6 +873,8 @@ if warnings are turned on. Consider using the tmpnam()
 and mktemp() functions described elsewhere in this document
 if opening the file is not required.
 
+Options can be combined as required.
+
 =cut
 
 sub tempfile {
@@ -909,7 +940,7 @@ sub tempfile {
   my ($fh, $path);
   croak "Error in tempfile() using $template"
     unless (($fh, $path) = _gettemp($template,
-                                   "open" => $options{'OPEN'}, 
+                                   "open" => $options{'OPEN'},
                                    "mkdir"=> 0 ,
                                    "suffixlen" => length($options{'SUFFIX'}),
                                   ) );
@@ -1023,8 +1054,9 @@ sub tempdir  {
     if ($options{'TMPDIR'} || $options{'DIR'}) {
 
       # Strip parent directory from the filename
-      # 
+      #
       # There is no filename at the end
+      $template = VMS::Filespec::vmspath($template) if $^O eq 'VMS';
       my ($volume, $directories, undef) = File::Spec->splitpath( $template, 1);
 
       # Last directory is then our template
@@ -1402,8 +1434,8 @@ the time the end block is executed since the deferred removal may not
 have access to the filehandle).
 
 Additionally, on Windows NT not all the fields returned by stat() can
-be compared. For example, the C<dev> and C<rdev> fields seem to be different
-and also. Also, it seems that the size of the file returned by stat()
+be compared. For example, the C<dev> and C<rdev> fields seem to be
+different.  Also, it seems that the size of the file returned by stat()
 does not always agree, with C<stat(FH)> being more accurate than
 C<stat(filename)>, presumably because of caching issues even when
 using autoflush (this is usually overcome by waiting a while after
@@ -1456,6 +1488,8 @@ sub unlink0 {
     @okstat = (1,2,3,4,5,7,8,9,10);
   } elsif ($^O eq 'os2') {
     @okstat = (0, 2..$#fh);
+  } elsif ($^O eq 'VMS') { # device and file ID are sufficient
+    @okstat = (0, 1);
   }
 
   # Now compare each entry explicitly by number
diff --git a/lib/Pod/PlainText.pm b/lib/Pod/PlainText.pm
deleted file mode 100644 (file)
index 4250ebb..0000000
+++ /dev/null
@@ -1,700 +0,0 @@
-# Pod::PlainText -- Convert POD data to formatted ASCII text.
-# $Id: Text.pm,v 2.1 1999/09/20 11:53:33 eagle Exp $
-#
-# Copyright 1999-2000 by Russ Allbery <rra@stanford.edu>
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the same terms as Perl itself.
-#
-# This module is intended to be a replacement for Pod::Text, and attempts to
-# match its output except for some specific circumstances where other
-# decisions seemed to produce better output.  It uses Pod::Parser and is
-# designed to be very easy to subclass.
-
-############################################################################
-# Modules and declarations
-############################################################################
-
-package Pod::PlainText;
-
-require 5.005;
-
-use Carp qw(carp croak);
-use Pod::Select ();
-
-use strict;
-use vars qw(@ISA %ESCAPES $VERSION);
-
-# We inherit from Pod::Select instead of Pod::Parser so that we can be used
-# by Pod::Usage.
-@ISA = qw(Pod::Select);
-
-($VERSION = (split (' ', q$Revision: 2.1 $ ))[1]) =~ s/\.(\d)$/.0$1/;
-
-
-############################################################################
-# Table of supported E<> escapes
-############################################################################
-
-# This table is taken near verbatim from Pod::PlainText in Pod::Parser,
-# which got it near verbatim from the original Pod::Text.  It is therefore
-# credited to Tom Christiansen, and I'm glad I didn't have to write it.  :)
-%ESCAPES = (
-    'amp'       =>    '&',      # ampersand
-    'lt'        =>    '<',      # left chevron, less-than
-    'gt'        =>    '>',      # right chevron, greater-than
-    'quot'      =>    '"',      # double quote
-
-    "Aacute"    =>    "\xC1",   # capital A, acute accent
-    "aacute"    =>    "\xE1",   # small a, acute accent
-    "Acirc"     =>    "\xC2",   # capital A, circumflex accent
-    "acirc"     =>    "\xE2",   # small a, circumflex accent
-    "AElig"     =>    "\xC6",   # capital AE diphthong (ligature)
-    "aelig"     =>    "\xE6",   # small ae diphthong (ligature)
-    "Agrave"    =>    "\xC0",   # capital A, grave accent
-    "agrave"    =>    "\xE0",   # small a, grave accent
-    "Aring"     =>    "\xC5",   # capital A, ring
-    "aring"     =>    "\xE5",   # small a, ring
-    "Atilde"    =>    "\xC3",   # capital A, tilde
-    "atilde"    =>    "\xE3",   # small a, tilde
-    "Auml"      =>    "\xC4",   # capital A, dieresis or umlaut mark
-    "auml"      =>    "\xE4",   # small a, dieresis or umlaut mark
-    "Ccedil"    =>    "\xC7",   # capital C, cedilla
-    "ccedil"    =>    "\xE7",   # small c, cedilla
-    "Eacute"    =>    "\xC9",   # capital E, acute accent
-    "eacute"    =>    "\xE9",   # small e, acute accent
-    "Ecirc"     =>    "\xCA",   # capital E, circumflex accent
-    "ecirc"     =>    "\xEA",   # small e, circumflex accent
-    "Egrave"    =>    "\xC8",   # capital E, grave accent
-    "egrave"    =>    "\xE8",   # small e, grave accent
-    "ETH"       =>    "\xD0",   # capital Eth, Icelandic
-    "eth"       =>    "\xF0",   # small eth, Icelandic
-    "Euml"      =>    "\xCB",   # capital E, dieresis or umlaut mark
-    "euml"      =>    "\xEB",   # small e, dieresis or umlaut mark
-    "Iacute"    =>    "\xCD",   # capital I, acute accent
-    "iacute"    =>    "\xED",   # small i, acute accent
-    "Icirc"     =>    "\xCE",   # capital I, circumflex accent
-    "icirc"     =>    "\xEE",   # small i, circumflex accent
-    "Igrave"    =>    "\xCD",   # capital I, grave accent
-    "igrave"    =>    "\xED",   # small i, grave accent
-    "Iuml"      =>    "\xCF",   # capital I, dieresis or umlaut mark
-    "iuml"      =>    "\xEF",   # small i, dieresis or umlaut mark
-    "Ntilde"    =>    "\xD1",   # capital N, tilde
-    "ntilde"    =>    "\xF1",   # small n, tilde
-    "Oacute"    =>    "\xD3",   # capital O, acute accent
-    "oacute"    =>    "\xF3",   # small o, acute accent
-    "Ocirc"     =>    "\xD4",   # capital O, circumflex accent
-    "ocirc"     =>    "\xF4",   # small o, circumflex accent
-    "Ograve"    =>    "\xD2",   # capital O, grave accent
-    "ograve"    =>    "\xF2",   # small o, grave accent
-    "Oslash"    =>    "\xD8",   # capital O, slash
-    "oslash"    =>    "\xF8",   # small o, slash
-    "Otilde"    =>    "\xD5",   # capital O, tilde
-    "otilde"    =>    "\xF5",   # small o, tilde
-    "Ouml"      =>    "\xD6",   # capital O, dieresis or umlaut mark
-    "ouml"      =>    "\xF6",   # small o, dieresis or umlaut mark
-    "szlig"     =>    "\xDF",   # small sharp s, German (sz ligature)
-    "THORN"     =>    "\xDE",   # capital THORN, Icelandic
-    "thorn"     =>    "\xFE",   # small thorn, Icelandic
-    "Uacute"    =>    "\xDA",   # capital U, acute accent
-    "uacute"    =>    "\xFA",   # small u, acute accent
-    "Ucirc"     =>    "\xDB",   # capital U, circumflex accent
-    "ucirc"     =>    "\xFB",   # small u, circumflex accent
-    "Ugrave"    =>    "\xD9",   # capital U, grave accent
-    "ugrave"    =>    "\xF9",   # small u, grave accent
-    "Uuml"      =>    "\xDC",   # capital U, dieresis or umlaut mark
-    "uuml"      =>    "\xFC",   # small u, dieresis or umlaut mark
-    "Yacute"    =>    "\xDD",   # capital Y, acute accent
-    "yacute"    =>    "\xFD",   # small y, acute accent
-    "yuml"      =>    "\xFF",   # small y, dieresis or umlaut mark
-
-    "lchevron"  =>    "\xAB",   # left chevron (double less than)
-    "rchevron"  =>    "\xBB",   # right chevron (double greater than)
-);
-
-
-############################################################################
-# Initialization
-############################################################################
-
-# Initialize the object.  Must be sure to call our parent initializer.
-sub initialize {
-    my $self = shift;
-
-    $$self{alt}      = 0  unless defined $$self{alt};
-    $$self{indent}   = 4  unless defined $$self{indent};
-    $$self{loose}    = 0  unless defined $$self{loose};
-    $$self{sentence} = 0  unless defined $$self{sentence};
-    $$self{width}    = 76 unless defined $$self{width};
-
-    $$self{INDENTS}  = [];              # Stack of indentations.
-    $$self{MARGIN}   = $$self{indent};  # Current left margin in spaces.
-
-    $self->SUPER::initialize;
-}
-
-
-############################################################################
-# Core overrides
-############################################################################
-
-# Called for each command paragraph.  Gets the command, the associated
-# paragraph, the line number, and a Pod::Paragraph object.  Just dispatches
-# the command to a method named the same as the command.  =cut is handled
-# internally by Pod::Parser.
-sub command {
-    my $self = shift;
-    my $command = shift;
-    return if $command eq 'pod';
-    return if ($$self{EXCLUDE} && $command ne 'end');
-    $self->item ("\n") if defined $$self{ITEM};
-    $command = 'cmd_' . $command;
-    $self->$command (@_);
-}
-
-# Called for a verbatim paragraph.  Gets the paragraph, the line number, and
-# a Pod::Paragraph object.  Just output it verbatim, but with tabs converted
-# to spaces.
-sub verbatim {
-    my $self = shift;
-    return if $$self{EXCLUDE};
-    $self->item if defined $$self{ITEM};
-    local $_ = shift;
-    return if /^\s*$/;
-    s/^(\s*\S+)/(' ' x $$self{MARGIN}) . $1/gme;
-    $self->output ($_);
-}
-
-# Called for a regular text block.  Gets the paragraph, the line number, and
-# a Pod::Paragraph object.  Perform interpolation and output the results.
-sub textblock {
-    my $self = shift;
-    return if $$self{EXCLUDE};
-    $self->output ($_[0]), return if $$self{VERBATIM};
-    local $_ = shift;
-    my $line = shift;
-
-    # Perform a little magic to collapse multiple L<> references.  This is
-    # here mostly for backwards-compatibility.  We'll just rewrite the whole
-    # thing into actual text at this part, bypassing the whole internal
-    # sequence parsing thing.
-    s{
-        (
-          L<                    # A link of the form L</something>.
-              /
-              (
-                  [:\w]+        # The item has to be a simple word...
-                  (\(\))?       # ...or simple function.
-              )
-          >
-          (
-              ,?\s+(and\s+)?    # Allow lots of them, conjuncted.
-              L<  
-                  /
-                  (
-                      [:\w]+
-                      (\(\))?
-                  )
-              >
-          )+
-        )
-    } {
-        local $_ = $1;
-        s%L</([^>]+)>%$1%g;
-        my @items = split /(?:,?\s+(?:and\s+)?)/;
-        my $string = "the ";
-        my $i;
-        for ($i = 0; $i < @items; $i++) {
-            $string .= $items[$i];
-            $string .= ", " if @items > 2 && $i != $#items;
-            $string .= " and " if ($i == $#items - 1);
-        }
-        $string .= " entries elsewhere in this document";
-        $string;
-    }gex;
-
-    # Now actually interpolate and output the paragraph.
-    $_ = $self->interpolate ($_, $line);
-    s/\s+$/\n/;
-    if (defined $$self{ITEM}) {
-        $self->item ($_ . "\n");
-    } else {
-        $self->output ($self->reformat ($_ . "\n"));
-    }
-}
-
-# Called for an interior sequence.  Gets the command, argument, and a
-# Pod::InteriorSequence object and is expected to return the resulting text.
-# Calls code, bold, italic, file, and link to handle those types of
-# sequences, and handles S<>, E<>, X<>, and Z<> directly.
-sub interior_sequence {
-    my $self = shift;
-    my $command = shift;
-    local $_ = shift;
-    return '' if ($command eq 'X' || $command eq 'Z');
-
-    # Expand escapes into the actual character now, carping if invalid.
-    if ($command eq 'E') {
-        return $ESCAPES{$_} if defined $ESCAPES{$_};
-        carp "Unknown escape: E<$_>";
-        return "E<$_>";
-    }
-
-    # For all the other sequences, empty content produces no output.
-    return if $_ eq '';
-
-    # For S<>, compress all internal whitespace and then map spaces to \01.
-    # When we output the text, we'll map this back.
-    if ($command eq 'S') {
-        s/\s{2,}/ /g;
-        tr/ /\01/;
-        return $_;
-    }
-
-    # Anything else needs to get dispatched to another method.
-    if    ($command eq 'B') { return $self->seq_b ($_) }
-    elsif ($command eq 'C') { return $self->seq_c ($_) }
-    elsif ($command eq 'F') { return $self->seq_f ($_) }
-    elsif ($command eq 'I') { return $self->seq_i ($_) }
-    elsif ($command eq 'L') { return $self->seq_l ($_) }
-    else { carp "Unknown sequence $command<$_>" }
-}
-
-# Called for each paragraph that's actually part of the POD.  We take
-# advantage of this opportunity to untabify the input.
-sub preprocess_paragraph {
-    my $self = shift;
-    local $_ = shift;
-    1 while s/^(.*?)(\t+)/$1 . ' ' x (length ($2) * 8 - length ($1) % 8)/me;
-    $_;
-}
-
-
-############################################################################
-# Command paragraphs
-############################################################################
-
-# All command paragraphs take the paragraph and the line number.
-
-# First level heading.
-sub cmd_head1 {
-    my $self = shift;
-    local $_ = shift;
-    s/\s+$//;
-    $_ = $self->interpolate ($_, shift);
-    if ($$self{alt}) {
-        $self->output ("\n==== $_ ====\n\n");
-    } else {
-        $_ .= "\n" if $$self{loose};
-        $self->output ($_ . "\n");
-    }
-}
-
-# Second level heading.
-sub cmd_head2 {
-    my $self = shift;
-    local $_ = shift;
-    s/\s+$//;
-    $_ = $self->interpolate ($_, shift);
-    if ($$self{alt}) {
-        $self->output ("\n==   $_   ==\n\n");
-    } else {
-        $self->output (' ' x ($$self{indent} / 2) . $_ . "\n\n");
-    }
-}
-
-# Start a list.
-sub cmd_over {
-    my $self = shift;
-    local $_ = shift;
-    unless (/^[-+]?\d+\s+$/) { $_ = $$self{indent} }
-    push (@{ $$self{INDENTS} }, $$self{MARGIN});
-    $$self{MARGIN} += ($_ + 0);
-}
-
-# End a list.
-sub cmd_back {
-    my $self = shift;
-    $$self{MARGIN} = pop @{ $$self{INDENTS} };
-    unless (defined $$self{MARGIN}) {
-        carp "Unmatched =back";
-        $$self{MARGIN} = $$self{indent};
-    }
-}
-
-# An individual list item.
-sub cmd_item {
-    my $self = shift;
-    if (defined $$self{ITEM}) { $self->item }
-    local $_ = shift;
-    s/\s+$//;
-    $$self{ITEM} = $self->interpolate ($_);
-}
-
-# Begin a block for a particular translator.  Setting VERBATIM triggers
-# special handling in textblock().
-sub cmd_begin {
-    my $self = shift;
-    local $_ = shift;
-    my ($kind) = /^(\S+)/ or return;
-    if ($kind eq 'text') {
-        $$self{VERBATIM} = 1;
-    } else {
-        $$self{EXCLUDE} = 1;
-    }
-}
-
-# End a block for a particular translator.  We assume that all =begin/=end
-# pairs are properly closed.
-sub cmd_end {
-    my $self = shift;
-    $$self{EXCLUDE} = 0;
-    $$self{VERBATIM} = 0;
-}    
-
-# One paragraph for a particular translator.  Ignore it unless it's intended
-# for text, in which case we treat it as a verbatim text block.
-sub cmd_for {
-    my $self = shift;
-    local $_ = shift;
-    my $line = shift;
-    return unless s/^text\b[ \t]*\n?//;
-    $self->verbatim ($_, $line);
-}
-
-
-############################################################################
-# Interior sequences
-############################################################################
-
-# The simple formatting ones.  These are here mostly so that subclasses can
-# override them and do more complicated things.
-sub seq_b { return $_[0]{alt} ? "``$_[1]''" : $_[1] }
-sub seq_c { return $_[0]{alt} ? "``$_[1]''" : "`$_[1]'" }
-sub seq_f { return $_[0]{alt} ? "\"$_[1]\"" : $_[1] }
-sub seq_i { return '*' . $_[1] . '*' }
-
-# The complicated one.  Handle links.  Since this is plain text, we can't
-# actually make any real links, so this is all to figure out what text we
-# print out.
-sub seq_l {
-    my $self = shift;
-    local $_ = shift;
-
-    # Smash whitespace in case we were split across multiple lines.
-    s/\s+/ /g;
-
-    # If we were given any explicit text, just output it.
-    if (/^([^|]+)\|/) { return $1 }
-
-    # Okay, leading and trailing whitespace isn't important; get rid of it.
-    s/^\s+//;
-    s/\s+$//;
-
-    # Default to using the whole content of the link entry as a section
-    # name.  Note that L<manpage/> forces a manpage interpretation, as does
-    # something looking like L<manpage(section)>.  The latter is an
-    # enhancement over the original Pod::Text.
-    my ($manpage, $section) = ('', $_);
-    if (/^"\s*(.*?)\s*"$/) {
-        $section = '"' . $1 . '"';
-    } elsif (m/^[-:.\w]+(?:\(\S+\))?$/) {
-        ($manpage, $section) = ($_, '');
-    } elsif (m%/%) {
-        ($manpage, $section) = split (/\s*\/\s*/, $_, 2);
-    }
-
-    # Now build the actual output text.
-    my $text = '';
-    if (!length $section) {
-        $text = "the $manpage manpage" if length $manpage;
-    } elsif ($section =~ /^[:\w]+(?:\(\))?/) {
-        $text .= 'the ' . $section . ' entry';
-        $text .= (length $manpage) ? " in the $manpage manpage"
-                                   : " elsewhere in this document";
-    } else {
-        $section =~ s/^\"\s*//;
-        $section =~ s/\s*\"$//;
-        $text .= 'the section on "' . $section . '"';
-        $text .= " in the $manpage manpage" if length $manpage;
-    }
-    $text;
-}
-
-
-############################################################################
-# List handling
-############################################################################
-
-# This method is called whenever an =item command is complete (in other
-# words, we've seen its associated paragraph or know for certain that it
-# doesn't have one).  It gets the paragraph associated with the item as an
-# argument.  If that argument is empty, just output the item tag; if it
-# contains a newline, output the item tag followed by the newline.
-# Otherwise, see if there's enough room for us to output the item tag in the
-# margin of the text or if we have to put it on a separate line.
-sub item {
-    my $self = shift;
-    local $_ = shift;
-    my $tag = $$self{ITEM};
-    unless (defined $tag) {
-        carp "item called without tag";
-        return;
-    }
-    undef $$self{ITEM};
-    my $indent = $$self{INDENTS}[-1];
-    unless (defined $indent) { $indent = $$self{indent} }
-    my $space = ' ' x $indent;
-    $space =~ s/^ /:/ if $$self{alt};
-    if (!$_ || /^\s+$/ || ($$self{MARGIN} - $indent < length ($tag) + 1)) {
-        my $margin = $$self{MARGIN};
-        $$self{MARGIN} = $indent;
-        my $output = $self->reformat ($tag);
-        $output =~ s/\n*$/\n/;
-        $self->output ($output);
-        $$self{MARGIN} = $margin;
-        $self->output ($self->reformat ($_)) if /\S/;
-    } else {
-        $_ = $self->reformat ($_);
-        s/^ /:/ if ($$self{alt} && $indent > 0);
-        my $tagspace = ' ' x length $tag;
-        s/^($space)$tagspace/$1$tag/ or warn "Bizarre space in item";
-        $self->output ($_);
-    }
-}
-
-
-############################################################################
-# Output formatting
-############################################################################
-
-# Wrap a line, indenting by the current left margin.  We can't use
-# Text::Wrap because it plays games with tabs.  We can't use formline, even
-# though we'd really like to, because it screws up non-printing characters.
-# So we have to do the wrapping ourselves.
-sub wrap {
-    my $self = shift;
-    local $_ = shift;
-    my $output = '';
-    my $spaces = ' ' x $$self{MARGIN};
-    my $width = $$self{width} - $$self{MARGIN};
-    while (length > $width) {
-        if (s/^([^\n]{0,$width})\s+// || s/^([^\n]{$width})//) {
-            $output .= $spaces . $1 . "\n";
-        } else {
-            last;
-        }
-    }
-    $output .= $spaces . $_;
-    $output =~ s/\s+$/\n\n/;
-    $output;
-}
-
-# Reformat a paragraph of text for the current margin.  Takes the text to
-# reformat and returns the formatted text.
-sub reformat {
-    my $self = shift;
-    local $_ = shift;
-
-    # If we're trying to preserve two spaces after sentences, do some
-    # munging to support that.  Otherwise, smash all repeated whitespace.
-    if ($$self{sentence}) {
-        s/ +$//mg;
-        s/\.\n/. \n/g;
-        s/\n/ /g;
-        s/   +/  /g;
-    } else {
-        s/\s+/ /g;
-    }
-    $self->wrap ($_);
-}
-
-# Output text to the output device.
-sub output { $_[1] =~ tr/\01/ /; print { $_[0]->output_handle } $_[1] }
-
-
-############################################################################
-# Backwards compatibility
-############################################################################
-
-# The old Pod::Text module did everything in a pod2text() function.  This
-# tries to provide the same interface for legacy applications.
-sub pod2text {
-    my @args;
-
-    # This is really ugly; I hate doing option parsing in the middle of a
-    # module.  But the old Pod::Text module supported passing flags to its
-    # entry function, so handle -a and -<number>.
-    while ($_[0] =~ /^-/) {
-        my $flag = shift;
-        if    ($flag eq '-a')       { push (@args, alt => 1)    }
-        elsif ($flag =~ /^-(\d+)$/) { push (@args, width => $1) }
-        else {
-            unshift (@_, $flag);
-            last;
-        }
-    }
-
-    # Now that we know what arguments we're using, create the parser.
-    my $parser = Pod::PlainText->new (@args);
-
-    # If two arguments were given, the second argument is going to be a file
-    # handle.  That means we want to call parse_from_filehandle(), which
-    # means we need to turn the first argument into a file handle.  Magic
-    # open will handle the <&STDIN case automagically.
-    if (defined $_[1]) {
-        local *IN;
-        unless (open (IN, $_[0])) {
-            croak ("Can't open $_[0] for reading: $!\n");
-            return;
-        }
-        $_[0] = \*IN;
-        return $parser->parse_from_filehandle (@_);
-    } else {
-        return $parser->parse_from_file (@_);
-    }
-}
-
-
-############################################################################
-# Module return value and documentation
-############################################################################
-
-1;
-__END__
-
-=head1 NAME
-
-Pod::PlainText - Convert POD data to formatted ASCII text
-
-=head1 SYNOPSIS
-
-    use Pod::PlainText;
-    my $parser = Pod::PlainText->new (sentence => 0, width => 78);
-
-    # Read POD from STDIN and write to STDOUT.
-    $parser->parse_from_filehandle;
-
-    # Read POD from file.pod and write to file.txt.
-    $parser->parse_from_file ('file.pod', 'file.txt');
-
-=head1 DESCRIPTION
-
-Pod::PlainText is a module that can convert documentation in the POD format (the
-preferred language for documenting Perl) into formatted ASCII.  It uses no
-special formatting controls or codes whatsoever, and its output is therefore
-suitable for nearly any device.
-
-As a derived class from Pod::Parser, Pod::PlainText supports the same methods and
-interfaces.  See L<Pod::Parser> for all the details; briefly, one creates a
-new parser with C<Pod::PlainText-E<gt>new()> and then calls either
-parse_from_filehandle() or parse_from_file().
-
-new() can take options, in the form of key/value pairs, that control the
-behavior of the parser.  The currently recognized options are:
-
-=over 4
-
-=item alt
-
-If set to a true value, selects an alternate output format that, among other
-things, uses a different heading style and marks C<=item> entries with a
-colon in the left margin.  Defaults to false.
-
-=item indent
-
-The number of spaces to indent regular text, and the default indentation for
-C<=over> blocks.  Defaults to 4.
-
-=item loose
-
-If set to a true value, a blank line is printed after a C<=head1> heading.
-If set to false (the default), no blank line is printed after C<=head1>,
-although one is still printed after C<=head2>.  This is the default because
-it's the expected formatting for manual pages; if you're formatting
-arbitrary text documents, setting this to true may result in more pleasing
-output.
-
-=item sentence
-
-If set to a true value, Pod::PlainText will assume that each sentence ends in two
-spaces, and will try to preserve that spacing.  If set to false, all
-consecutive whitespace in non-verbatim paragraphs is compressed into a
-single space.  Defaults to true.
-
-=item width
-
-The column at which to wrap text on the right-hand side.  Defaults to 76.
-
-=back
-
-The standard Pod::Parser method parse_from_filehandle() takes up to two
-arguments, the first being the file handle to read POD from and the second
-being the file handle to write the formatted output to.  The first defaults
-to STDIN if not given, and the second defaults to STDOUT.  The method
-parse_from_file() is almost identical, except that its two arguments are the
-input and output disk files instead.  See L<Pod::Parser> for the specific
-details.
-
-=head1 DIAGNOSTICS
-
-=over 4
-
-=item Bizarre space in item
-
-(W) Something has gone wrong in internal C<=item> processing.  This message
-indicates a bug in Pod::PlainText; you should never see it.
-
-=item Can't open %s for reading: %s
-
-(F) Pod::PlainText was invoked via the compatibility mode pod2text() interface
-and the input file it was given could not be opened.
-
-=item Unknown escape: %s
-
-(W) The POD source contained an C<EE<lt>E<gt>> escape that Pod::PlainText didn't
-know about.
-
-=item Unknown sequence: %s
-
-(W) The POD source contained a non-standard internal sequence (something of
-the form C<XE<lt>E<gt>>) that Pod::PlainText didn't know about.
-
-=item Unmatched =back
-
-(W) Pod::PlainText encountered a C<=back> command that didn't correspond to an
-C<=over> command.
-
-=back
-
-=head1 RESTRICTIONS
-
-Embedded Ctrl-As (octal 001) in the input will be mapped to spaces on
-output, due to an internal implementation detail.
-
-=head1 NOTES
-
-This is a replacement for an earlier Pod::Text module written by Tom
-Christiansen.  It has a revamped interface, since it now uses Pod::Parser,
-but an interface roughly compatible with the old Pod::Text::pod2text()
-function is still available.  Please change to the new calling convention,
-though.
-
-The original Pod::Text contained code to do formatting via termcap
-sequences, although it wasn't turned on by default and it was problematic to
-get it to work at all.  This rewrite doesn't even try to do that, but a
-subclass of it does.  Look for L<Pod::Text::Termcap|Pod::Text::Termcap>.
-
-=head1 SEE ALSO
-
-L<Pod::Parser|Pod::Parser>, L<Pod::Text::Termcap|Pod::Text::Termcap>,
-pod2text(1)
-
-=head1 AUTHOR
-
-Russ Allbery E<lt>rra@stanford.eduE<gt>, based I<very> heavily on the
-original Pod::Text by Tom Christiansen E<lt>tchrist@mox.perl.comE<gt> and
-its conversion to Pod::Parser by Brad Appleton
-E<lt>bradapp@enteract.comE<gt>.
-
-=cut
index c708f57..c18d381 100644 (file)
@@ -1,11 +1,10 @@
 use strict;
 package Test;
-use 5.005_64;
 use Test::Harness 1.1601 ();
 use Carp;
 our($VERSION, @ISA, @EXPORT, @EXPORT_OK, $ntest, $TestLevel); #public-ish
 our($TESTOUT, $ONFAIL, %todo, %history, $planned, @FAILDETAIL); #private-ish
-$VERSION = '1.13';
+$VERSION = '1.14';
 require Exporter;
 @ISA=('Exporter');
 @EXPORT=qw(&plan &ok &skip);
index 9629121..586cfd8 100644 (file)
@@ -617,7 +617,7 @@ EOP
                            next CMD;
                        } 
                    }
-                   $cmd =~ /^q$/ && ($exiting = 1) && exit 0;
+                   $cmd =~ /^q$/ && ($exiting = 1) && exit $?;
                    $cmd =~ /^h$/ && do {
                        print_help($help);
                        next CMD; };
@@ -931,7 +931,7 @@ EOP
                        next CMD; };
                    $cmd =~ /^b\b\s*(\d*)\s*(.*)/ && do {
                        $i = $1 || $line;
-                       $cond = defined $2 ? $2 : '1';
+                       $cond = length $2 ? $2 : '1';
                        if ($dbline[$i] == 0) {
                            print $OUT "Line $i not breakable.\n";
                        } else {
diff --git a/mg.c b/mg.c
index 81e7226..fc5123e 100644 (file)
--- a/mg.c
+++ b/mg.c
@@ -379,6 +379,15 @@ Perl_magic_regdatum_get(pTHX_ SV *sv, MAGIC *mg)
     return 0;
 }
 
+int
+Perl_magic_regdatum_set(pTHX_ SV *sv, MAGIC *mg)
+{
+    dTHR;
+    Perl_croak(aTHX_ PL_no_modify);
+    /* NOT REACHED */
+    return 0;
+}
+
 U32
 Perl_magic_len(pTHX_ SV *sv, MAGIC *mg)
 {
diff --git a/perl.c b/perl.c
index d5edcd0..3d3651f 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -2863,18 +2863,6 @@ S_validate_suid(pTHX_ char *validarg, char *scriptname, int fdscript)
            if (tmpstatbuf.st_dev != PL_statbuf.st_dev ||
                tmpstatbuf.st_ino != PL_statbuf.st_ino) {
                (void)PerlIO_close(PL_rsfp);
-#ifdef MAIL_CAN_BE_USED_SAFELY /* No, it can't.  As of Aug 05 200, there's bugtraq exploit.  */
-               if (PL_rsfp = PerlProc_popen("/bin/mail root","w")) {   /* heh, heh */
-                   PerlIO_printf(PL_rsfp,
-"User %"Uid_t_f" tried to run dev %ld ino %ld in place of dev %ld ino %ld!\n\
-(Filename of set-id script was %s, uid %"Uid_t_f" gid %"Gid_t_f".)\n\nSincerely,\nperl\n",
-                       PL_uid,(long)tmpstatbuf.st_dev, (long)tmpstatbuf.st_ino,
-                       (long)PL_statbuf.st_dev, (long)PL_statbuf.st_ino,
-                       CopFILE(PL_curcop),
-                       PL_statbuf.st_uid, PL_statbuf.st_gid);
-                   (void)PerlProc_pclose(PL_rsfp);
-               }
-#endif
                Perl_croak(aTHX_ "Permission denied\n");
            }
            if (
diff --git a/perl.h b/perl.h
index c4add20..943c103 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -2833,7 +2833,8 @@ EXT MGVTBL PL_vtbl_defelem = {MEMBER_TO_FPTR(Perl_magic_getdefelem),MEMBER_TO_FP
 
 EXT MGVTBL PL_vtbl_regexp = {0,0,0,0, MEMBER_TO_FPTR(Perl_magic_freeregexp)};
 EXT MGVTBL PL_vtbl_regdata = {0, 0, MEMBER_TO_FPTR(Perl_magic_regdata_cnt), 0, 0};
-EXT MGVTBL PL_vtbl_regdatum = {MEMBER_TO_FPTR(Perl_magic_regdatum_get), 0, 0, 0, 0};
+EXT MGVTBL PL_vtbl_regdatum = {MEMBER_TO_FPTR(Perl_magic_regdatum_get),
+                              MEMBER_TO_FPTR(Perl_magic_regdatum_set), 0, 0, 0};
 
 #ifdef USE_LOCALE_COLLATE
 EXT MGVTBL PL_vtbl_collxfrm = {0,
@@ -3076,8 +3077,20 @@ typedef struct am_table_short AMTS;
        ((PL_hints & HINT_LOCALE) && \
          PL_numeric_radix && (c) == PL_numeric_radix)
 
-#define RESTORE_NUMERIC_LOCAL()                if ((PL_hints & HINT_LOCALE) && PL_numeric_standard) SET_NUMERIC_LOCAL()
-#define RESTORE_NUMERIC_STANDARD()     if ((PL_hints & HINT_LOCALE) && PL_numeric_local) SET_NUMERIC_STANDARD()
+#define STORE_NUMERIC_LOCAL_SET_STANDARD() \
+       bool was_local = (PL_hints & HINT_LOCALE) && PL_numeric_local; \
+       if (!was_local) SET_NUMERIC_STANDARD();
+
+#define STORE_NUMERIC_STANDARD_SET_LOCAL() \
+       bool was_standard = !(PL_hints & HINT_LOCALE) || PL_numeric_standard; \
+       if (!was_standard) SET_NUMERIC_LOCAL();
+
+#define RESTORE_NUMERIC_LOCAL() \
+       if (was_local) SET_NUMERIC_LOCAL();
+
+#define RESTORE_NUMERIC_STANDARD() \
+       if (was_standard) SET_NUMERIC_STANDARD();
+
 #define Atof                           my_atof
 
 #else /* !USE_LOCALE_NUMERIC */
@@ -3085,6 +3098,8 @@ typedef struct am_table_short AMTS;
 #define SET_NUMERIC_STANDARD()         /**/
 #define SET_NUMERIC_LOCAL()            /**/
 #define IS_NUMERIC_RADIX(c)            (0)
+#define STORE_NUMERIC_LOCAL_SET_STANDARD()     /**/
+#define STORE_NUMERIC_STANDARD_SET_LOCAL()     /**/
 #define RESTORE_NUMERIC_LOCAL()                /**/
 #define RESTORE_NUMERIC_STANDARD()     /**/
 #define Atof                           Perl_atof
index 7afda68..c4a1179 100644 (file)
 #define _flsbuf(c,f)  _CANNOT _flsbuf_
 #define fdopen(fd,p)  _CANNOT _fdopen_
 #define fileno(f)  _CANNOT _fileno_
+#if SFIO_VERSION < 20000101L
 #define flockfile(f)  _CANNOT _flockfile_
 #define ftrylockfile(f)  _CANNOT _ftrylockfile_
 #define funlockfile(f)  _CANNOT _funlockfile_
+#endif
 #define getc_unlocked(f)  _CANNOT _getc_unlocked_
 #define putc_unlocked(c,f)  _CANNOT _putc_unlocked_
 #define popen(c,m)  _CANNOT _popen_
 #define _flsbuf(c,f)           _CANNOT _flsbuf_
 #define getw(f)                        _CANNOT _getw_
 #define putw(v,f)              _CANNOT _putw_
+#if SFIO_VERSION < 20000101L
 #define flockfile(f)           _CANNOT _flockfile_
 #define ftrylockfile(f)                _CANNOT _ftrylockfile_
 #define funlockfile(f)         _CANNOT _funlockfile_
+#endif
 #define freopen(p,m,f)         _CANNOT _freopen_
 #define setbuf(f,b)            _CANNOT _setbuf_
 #define setvbuf(f,b,x,s)       _CANNOT _setvbuf_
index 00568d1..d0f6471 100644 (file)
@@ -3,6 +3,11 @@
 #include <sfio.h>
 #endif
 
+/* sfio 2000 changed _stdopen to _stdfdopen */
+#if SFIO_VERSION >= 20000101L
+#define _stdopen _stdfdopen 
+#endif
+
 extern Sfio_t* _stdopen _ARG_((int, const char*));
 extern int     _stdprintf _ARG_((const char*, ...));
 
index e5544ec..282592e 100644 (file)
@@ -183,9 +183,6 @@ one-liners:
       rename $was, $_ unless $was eq $_;
   }
 
-(this is the I<rename> program that comes in the I<eg/> directory
-of the Perl source distribution).
-
 The decompiler has several options for the code it generates.  For
 instance, you can set the size of each indent from 4 (as above) to
 2 with:
index 35eb89e..7511d33 100644 (file)
@@ -6,7 +6,7 @@ perldebtut - Perl debugging tutorial
 
 A (very) lightweight introduction in the use of the perl debugger, and a
 pointer to existing, deeper sources of information on the subject of debugging
-perl programs. 
+perl programs.  
 
 There's an extraordinary number of people out there who don't appear to know
 anything about using the perl debugger, though they use the language every
@@ -16,9 +16,9 @@ This is for them.
 
 =head1 use strict
 
-There's a few things you can do to make your life a lot more straightforward
-when it comes to debugging perl programs.  To demonstrate, here's a simple
-script with a problem:
+First of all, there's a few things you can do to make your life a lot more
+straightforward when it comes to debugging perl programs, without using the
+debugger at all.  To demonstrate, here's a simple script with a problem:
 
        #!/usr/bin/perl
        
@@ -50,7 +50,7 @@ get four error messages because one variable is referenced twice:
  Global symbol "$var2" requires explicit package name at ./t1 line 5.
  Global symbol "$varl" requires explicit package name at ./t1 line 5.
  Global symbol "$var2" requires explicit package name at ./t1 line 7.
- Execution of ./t1 aborted due to compilation errors.     
+ Execution of ./hello aborted due to compilation errors.     
 
 Luvverly! and to fix this we declare all variables explicitly and now our
 script looks like this:        
@@ -75,7 +75,7 @@ getting this script to compile has exposed the '$varl' (with the letter 'l)
 variable, and simply changing $varl to $var1 solves the problem.
 
 
-=head1 Looking at data and -w
+=head1 Looking at data and -w and w
 
 Ok, but how about when you want to really see your data, what's in that
 dynamic variable, just before using it?
@@ -115,7 +115,7 @@ And try again:
 
 After much staring at the same piece of code and not seeing the wood for the
 trees for some time, we get a cup of coffee and try another approach.  That
-is, we bring in the cavalry by giving perl the C<-d> switch on the command
+is, we bring in the cavalry by giving perl the 'B<-d>' switch on the command
 line:
 
        > perl -d data 
@@ -133,65 +133,76 @@ script.  It's stopped at the first line of executable code and is waiting for
 input.
 
 Before we go any further, you'll want to know how to quit the debugger: use
-just the letter 'q', not the words 'quit' or 'exit':
+just the letter 'B<q>', not the words 'quit' or 'exit':
 
        DB<1> q
        >
        
 That's it, you're back on home turf again.
 
+
+=head1 help
+
 Fire the debugger up again on your script and we'll look at the help menu. 
-There's a couple of ways of calling help: a simple 'h' will get you a long
-scrolled list of help, '|h' (pipe-h) will pipe the help through your pager
-('more' or 'less' probably), and finally, 'h h' (h-space-h) will give you a
+There's a couple of ways of calling help: a simple 'B<h>' will get you a long
+scrolled list of help, 'B<|h>' (pipe-h) will pipe the help through your pager
+('more' or 'less' probably), and finally, 'B<h h>' (h-space-h) will give you a
 helpful mini-screen snapshot:
 
      DB<1> h h
      List/search source lines:               Control script execution:
      l [ln|sub]  List source code            T           Stack trace
      - or .      List previous/current line  s [expr]    Single step [in expr]
      w [line]    List around line            n [expr]    Next, steps over subs
      f filename  View source in file         <CR/Enter>  Repeat last n or s
      /pattern/ ?patt?   Search forw/backw    r           Return from subroutine
      v           Show versions of modules    c [ln|sub]  Continue until position
      Debugger controls:                        L           List
+ DB<1> h h
+ List/search source lines:               Control script execution:
+ l [ln|sub]  List source code            T           Stack trace
+ - or .      List previous/current line  s [expr]    Single step [in expr]
+ w [line]    List around line            n [expr]    Next, steps over subs
+ f filename  View source in file         <CR/Enter>  Repeat last n or s
+ /pattern/ ?patt?   Search forw/backw    r           Return from subroutine
+ v           Show versions of modules    c [ln|sub]  Continue until position
+ Debugger controls:                        L           List
 break/watch/actions
      O [...]     Set debugger options        t [expr]    Toggle trace [trace expr]
      <[<]|{[{]|>[>] [cmd] Do pre/post-prompt b [ln|event|sub] [cnd] Set breakpoint
      ! [N|pat]   Redo a previous command     d [ln] or D Delete a/all breakpoints
      H [-num]    Display last num commands   a [ln] cmd  Do cmd before line
      = [a val]   Define/list an alias        W expr      Add a watch expression
      h [db_cmd]  Get help on command         A or W      Delete all actions/watch
      |[|]db_cmd  Send output to pager        ![!] syscmd Run cmd in a subprocess
      q or ^D     Quit                        R           Attempt a restart
      Data Examination:       expr     Execute perl code, also see: s,n,t expr
      x|m expr      Evals expr in array context, dumps the result or lists methods.
      p expr        Print expression (uses script's current package).
      S [[!]pat]    List subroutine names [not] matching pattern
      V [Pk [Vars]] List Variables in Package.  Vars can be ~pattern or !pattern.
      X [Vars]      Same as "V current_package [Vars]".
      For more help, type h cmd_letter, or run man perldebug for all docs.       
+ O [...]     Set debugger options        t [expr]    Toggle trace [trace expr]
+ <[<]|{[{]|>[>] [cmd] Do pre/post-prompt b [ln|event|sub] [cnd] Set breakpoint
+ ! [N|pat]   Redo a previous command     d [ln] or D Delete a/all breakpoints
+ H [-num]    Display last num commands   a [ln] cmd  Do cmd before line
+ = [a val]   Define/list an alias        W expr      Add a watch expression
+ h [db_cmd]  Get help on command         A or W      Delete all actions/watch
+ |[|]db_cmd  Send output to pager        ![!] syscmd Run cmd in a subprocess
+ q or ^D     Quit                        R           Attempt a restart
+ Data Examination:       expr     Execute perl code, also see: s,n,t expr
+ x|m expr      Evals expr in array context, dumps the result or lists methods.
+ p expr        Print expression (uses script's current package).
+ S [[!]pat]    List subroutine names [not] matching pattern
+ V [Pk [Vars]] List Variables in Package.  Vars can be ~pattern or !pattern.
+ X [Vars]      Same as "V current_package [Vars]".
+ For more help, type h cmd_letter, or run man perldebug for all docs.       
        
 More confusing options than you can shake a big stick at!  It's not as bad as
 it looks and it's very useful to know more about all of it, and fun too!
 
-There's a couple of useful ones to know about straight away: 
-You wouldn't think we're using any libraries at all at the moment, but 'v'
-will show which modules are currently loaded, by the debugger as well your
-script.  'V' and 'X' show variables in the program by package scope and can be
-constrained by pattern.  'S' shows all subroutines (by pattern):
+There's a couple of useful ones to know about straight away.  You wouldn't
+think we're using any libraries at all at the moment, but 'B<v>' will show
+which modules are currently loaded, by the debugger as well your script. 
+'B<V>' and 'B<X>' show variables in the program by package scope and can be
+constrained by pattern.  'B<m>' shows methods and 'B<S>' shows all subroutines
+(by pattern):
 
        DB<2>S str 
        dumpvar::stringify
        strict::bits
        strict::import
        strict::unimport  
+
+Using 'X' and cousins requires you not to use the type identifiers ($@%), just
+the 'name':
+
+       DM<3>X ~err
+       FileHandle(stderr) => fileno(2)    
        
-Remember we're in our tiny program with a problem, we want to have a look at
+Remember we're in our tiny program with a problem, we should have a look at
 where we are, and what our data looks like. First of all let's have a window
-on our present position (the first line of code), via the letter 'w':
+on our present position (the first line of code in this case), via the letter
+'B<w>':
 
-       DB<3> w
+       DB<4> w
        1       #!/usr/bin/perl
        2:      use strict;
        3
@@ -206,7 +217,7 @@ on our present position (the first line of code), via the letter 'w':
 At line number 4 is a helpful pointer, that tells you where you are now.  To
 see more code, type 'w' again:
        
-       DB<3> w
+       DB<4> w
        8               'welcome' => q(Hello World),
        9               'zip' => q(welcome),
        10      );
@@ -216,22 +227,22 @@ see more code, type 'w' again:
        14:     print "done: '$data{$key}'\n";
        15:     exit;      
 
-And if you wanted to list line 5 again, type 'l 5', note the space:
+And if you wanted to list line 5 again, type 'l 5', (note the space):
 
        DB<4> l 5
        5:      my %data = (
        
 In this case, there's not much to see, but of course normally there's pages of
-stuff to wade through.  To reset your view to the line we're about to execute,
-type a lone period '.':
+stuff to wade through, and 'l' can be very useful.  To reset your view to the
+line we're about to execute, type a lone period '.':
 
-       DB<6> .
+       DB<5> .
        main::(./data_a:4):     my $key = 'welcome';  
        
 The line shown is the one that is about to be executed B<next>, it hasn't
-happened yet.  So while we can print a variable with the letter 'p', at this
-point all we'd get is an empty (undefined) value back.  What we need to do is
-to step to the next executable statement with an 's':
+happened yet.  So while we can print a variable with the letter 'B<p>', at
+this point all we'd get is an empty (undefined) value back.  What we need to
+do is to step through the next executable statement with an 'B<s>':
        
        DB<6> s
        main::(./data_a:5):     my %data = (
@@ -247,7 +258,8 @@ Now we can have a look at that first ($key) variable:
        welcome 
 
 line 13 is where the action is, so let's continue down to there via the letter
-'c':
+'B<c>', which by the way, inserts a 'one-time-only' breakpoint at the given
+line or sub routine:
 
        DB<8> c 13
        All OK
@@ -259,7 +271,7 @@ to see what is happening:
 
        DB<9> p $data{$key}
        
-Nothing!       
+Not much in there, lets have a look at our hash:
        
        DB<10> p %data
        Hello Worldziptomandwelcomejerrywelcomethisthat 
@@ -267,7 +279,8 @@ Nothing!
        DB<11> p keys %data
        Hello Worldtomwelcomejerrythis  
        
-Reading the helpful manual (h h), the 'x' command looks promising:
+Well, this isn't very easy to read, and using the helpful manual (B<h h>), the
+'B<x>' command looks promising:
 
        DB<12> x %data
        0  'Hello World'
@@ -282,7 +295,7 @@ Reading the helpful manual (h h), the 'x' command looks promising:
        9  'that'     
 
 That's not much help, a couple of welcome's in there, but no indication of
-which are keys, and which are values, it's just a straight array dump and, in
+which are keys, and which are values, it's just a listed array dump and, in
 this case, not particularly helpful.  The trick here, is to use a B<reference>
 to the data structure:
 
@@ -299,7 +312,7 @@ Our quoting was perfectly valid but wrong for our purposes, with 'and jerry'
 being treated as 2 separate words rather than a phrase, thus throwing the
 evenly paired hash structure out of alignment.
 
-The '-w' switch would have told us about this, had we used it at the start,
+The 'B<-w>' switch would have told us about this, had we used it at the start,
 and saved us a lot of trouble: 
 
        > perl -w data
@@ -312,7 +325,7 @@ our expected output:
        Hello World
 
 
-While we're here, take a closer look at the 'x' command, it's really useful
+While we're here, take a closer look at the 'B<x>' command, it's really useful
 and will merrily dump out nested references, complete objects, partial objects
 - justabout whatever you throw at it:
 
@@ -362,7 +375,7 @@ of code or regexes until the cows come home:
        theory  
        saw -> 6
 
-If you want to see all the command history, an 'H':
+If you want to see the command History, type an 'B<H>':
 
        DB<5> H
        4: p 'saw -> '.($cnt += map { print "\t:\t$_\n" } grep(/the/, sort @data))
@@ -372,7 +385,7 @@ If you want to see all the command history, an 'H':
        {'col' => 'black', 'things' => [qw(this that etc)]}}, 'MY_class')
        DB<5>
        
-And if you want to repeat any previous command, use the exclamation: '!':
+And if you want to repeat any previous command, use the exclamation: 'B<!>':
 
        DB<5> !4
        p 'saw -> '.($cnt += map { print "$_\n" } grep(/the/, sort @data))
@@ -384,6 +397,8 @@ And if you want to repeat any previous command, use the exclamation: '!':
        theory  
        saw -> 12
 
+For more on references see L<perlref> and L<perlreftut>
+
 
 =head1 Stepping through code
 
@@ -457,14 +472,14 @@ little messy, to leave in production code.
 
        main::(temp:4): my $arg = $ARGV[0] || '-c100';     
 
-We'll simply continue down to our pre-set breakpoint with a 'c':
+We'll simply continue down to our pre-set breakpoint with a 'B<c>':
 
        DB<1> c
        main::(temp:10):                if ($deg eq 'c') {   
 
 Followed by a window command to see where we are:
        
-       DB<2> w
+       DB<1> w
        7:              my ($deg, $num) = ($1, $2);
        8:              my ($in, $out) = ($num, $num);
        9:              $DB::single=2;
@@ -478,19 +493,19 @@ Followed by a window command to see where we are:
 
 And a print to show what values we're currently using:
 
-       DB<3> p $deg, $num
+       DB<1> p $deg, $num
        f33.3
                
 We can put another break point on any line beginning with a colon, we'll use
 line 17 as that's just as we come out of the subroutine, and we'd like to
 pause there later on:
        
-       DB<4> b 17
+       DB<2> b 17
        
 There's no feedback from this, but you can see what breakpoints are set by
 using the list 'L' command:
 
-       DB<5> L
+       DB<3> L
        temp:
                17:            print "$out $deg\n";
                break if (1)     
@@ -500,60 +515,62 @@ Note that to delete a breakpoint you use 'd' or 'D'.
 Now we'll continue down into our subroutine, this time rather than by line
 number, we'll use the subroutine name, followed by the now familiar 'w':
 
-       DB<6> c f2c
+       DB<3> c f2c
        main::f2c(temp:30):             my $f = shift;  
 
-       DB<7> w
-       27      }
-       28
-       29      sub f2c {
-       30==>           my $f = shift;
-       31:             my $c = 5 * $f - 32 / 9;
-       32:             return $c;
-       33      }
-       34           
-
-
-Note that if there was a subroutine call between us and line 32, and we didn't
-want to single-step through it, we could use the next command 'n', which would
-execute the sub, but not descend into it for inspection.  In this case though,
-we simply single step down to line 32:
-
-       DB<8> s 32 
-       main::f2c(temp:28):             return $c; 
-       
+       DB<4> w
+       24:     exit;
+       25
+       26      sub f2c {
+       27==>           my $f = shift;
+       28:             my $c = 5 * $f - 32 / 9; 
+       29:             return $c;
+       30      }
+       31
+       32      sub c2f {
+       33:             my $c = shift;   
+
+
+Note that if there was a subroutine call between us and line 29, and we wanted
+to B<single-step> through it, we could use the 'B<s>' command, and to step
+over it we would use 'B<n>' which would execute the sub, but not descend into
+it for inspection.  In this case though, we simply continue down to line 29:
+
+       DB<4> c 29  
+       main::f2c(temp:29):             return $c;
+   
 And have a look at the return value:
 
-       DB<9> p $c
+       DB<5> p $c
        162.944444444444
 
 This is not the right answer at all, but the sum looks correct.  I wonder if
 it's anything to do with operator precedence?  We'll try a couple of other
 possibilities with our sum:
 
-       DB<10> p (5 * $f - 32 / 9)
+       DB<6> p (5 * $f - 32 / 9)
        162.944444444444
        
-       DB<11> p 5 * $f - (32 / 9) 
+       DB<7> p 5 * $f - (32 / 9) 
        162.944444444444
        
-       DB<12> p (5 * $f) - 32 / 9
+       DB<8> p (5 * $f) - 32 / 9
        162.944444444444
        
-       DB<13> p 5 * ($f - 32) / 9
+       DB<9> p 5 * ($f - 32) / 9
        0.722222222222221
 
 :-) that's more like it!  Ok, now we can set our return variable and we'll
 return out of the sub with an 'r':
 
-       DB<14> $c = 5 * ($f - 32) / 9
+       DB<10> $c = 5 * ($f - 32) / 9
        
-       DB<15> r
+       DB<11> r
        scalar context return from main::f2c: 0.722222222222221
        
 Looks good, let's just continue off the end of the script:
 
-       DB<16> c
+       DB<12> c
        0.72 c 
        Debugged program terminated.  Use q to quit or R to restart,
        use O inhibit_exit to avoid stopping after program termination,
@@ -565,7 +582,7 @@ actual program and we're finished.
 
 =head1 Placeholder for a, w, t, T
 
-Actions, watch variables, stack traces on the TODO list.
+Actions, watch variables, stack traces etc.: on the TODO list.
 
        a 
        
@@ -576,7 +593,7 @@ Actions, watch variables, stack traces on the TODO list.
        T
 
 
-=head1 Regular expressions
+=head1 REGULAR EXPRESSIONS
 
 Ever wanted to know what a regex looked like?  You'll need perl compiled with
 the DEBUGGING flag for this one:
@@ -605,9 +622,12 @@ anchored(BOL) minlen 4
        Freeing REx: `^pe(a)*rl$'  
 
 Did you really want to know? :-)
+For more gory details on getting regular expressions to work, have a look at
+L<perlre>, L<perlretut>, and to decode the mysterious labels (BOL and CURLYN,
+etc. above), see L<perldebguts>.
 
 
-=head1 Some ideas for output
+=head1 OUTPUT TIPS
 
 To get all the output from your error log, and not miss any messages via
 helpful operating system buffering, insert a line like this, at the start of
@@ -622,16 +642,17 @@ To watch the tail of a dynamically growing logfile, (from the command line):
 Wrapping all die calls in a handler routine can be useful to see how, and from
 where, they're being called, L<perlvar> has more information:
 
-       BEGIN { $SIG{__DIE__} = sub { use Carp; Carp::confess(@_) } }
+       BEGIN { $SIG{__DIE__} = sub { require Carp; Carp::confess(@_) } }
 
 Various useful techniques for the redirection of STDOUT and STDERR filehandles
-are explained in L<perlfunc> and L<perlopentut> and L<perlfaq8>
+are explained in L<perlopentut> and L<perlfaq8>.
 
 
 =head1 CGI
 
-Just a hint here for all those CGI programmers who can't figure out how on
-earth to get past that 'waiting for input' prompt, try something like this:
+Just a quick hint here for all those CGI programmers who can't figure out how
+on earth to get past that 'waiting for input' prompt, when running their CGI
+script from the command-line, try something like this:
 
        > perl -d my_cgi.pl -nodebug 
 
@@ -659,7 +680,7 @@ B<PerlDevKit> and B<PerlBuilder> are NT specific
 NB. (more info on these and others would be appreciated).
 
 
-=head1 Summary
+=head1 SUMMARY
 
 We've seen how to encourage good coding practices with B<use strict> and
 B<-w>.  We can run the perl debugger B<perl -d scriptname> to inspect your
@@ -694,5 +715,7 @@ Various people have made helpful suggestions and contributions, in particular:
 
 Ronald J Kimball <rjk@linguist.dartmouth.edu>
 
-Hugo <hv@crypt.compulink.co.uk>
+Hugo van der Sanden <hv@crypt0.demon.co.uk>
+
+Peter Scott <Peter.J.Scott@jpl.nasa.gov>
 
index 76b08bc..fb366c5 100644 (file)
@@ -532,10 +532,10 @@ C<-i.bak>, or some such.
 characters and Perl was unable to create a unique filename during
 inplace editing with the B<-i> switch.  The file was ignored.
 
-=item Can't do {n,m} with n > m at <HERE< in regex m/%s/
+=item Can't do {n,m} with n > m before << HERE in regex m/%s/
 
 (F) Minima must be less than or equal to maxima. If you really want your
-regexp to match something 0 times, just put {0}. The <HERE< shows in the
+regexp to match something 0 times, just put {0}. The << HERE shows in the
 regular expression about where the problem was discovered. See L<perlre>.
 
 =item Can't do setegid!
@@ -1354,10 +1354,10 @@ some time before now.  Check your logic flow.  flock() operates on
 filehandles.  Are you attempting to call flock() on a dirhandle by the
 same name?
 
-=item Quantifier follows nothing at <HERE< in regex m/%s/
+=item Quantifier follows nothing before << HERE in regex m/%s/
 
 (F) You started a regular expression with a quantifier. Backslash it if you
-meant it literally. The <HERE< shows in the regular expression about where the
+meant it literally. The << HERE shows in the regular expression about where the
 problem was discovered. See L<perlre>.
 
 =item Format not terminated
@@ -1604,10 +1604,10 @@ transparently promotes all numbers to a floating point representation
 internally--subject to loss of precision errors in subsequent
 operations.
 
-=item Internal disaster at <HERE< in regex m/%s/
+=item Internal disaster before << HERE in regex m/%s/
 
 (P) Something went badly wrong in the regular expression parser.
-The <HERE< shows in the regular expression about where the problem was
+The << HERE shows in the regular expression about where the problem was
 discovered.
 
 
@@ -1620,9 +1620,9 @@ L<perlvms/"exec LIST">).  Somehow, this count has become scrambled, so
 Perl is making a guess and treating this C<exec> as a request to
 terminate the Perl script and execute the specified command.
 
-=item Internal urp at <HERE< in regex m/%s/
+=item Internal urp before << HERE in regex m/%s/
 
-(P) Something went badly awry in the regular expression parser. The <HERE<
+(P) Something went badly awry in the regular expression parser. The <<<HERE
 shows in the regular expression about where the problem was discovered.
 
 
@@ -1722,10 +1722,10 @@ regular expression construct.
 values cannot be returned in subroutines used in lvalue context.  See
 L<perlsub/"Lvalue subroutines">.
 
-=item Lookbehind longer than %d not implemented at <HERE< in reges m/%s/
+=item Lookbehind longer than %d not implemented before << HERE in reges m/%s/
 
 (F) There is currently a limit on the length of string which lookbehind can
-handle. This restriction may be eased in a future release. The <HERE< shows in
+handle. This restriction may be eased in a future release. The << HERE shows in
 the regular expression about where the problem was discovered.
        
 =item Malformed PERLLIB_PREFIX
@@ -1904,10 +1904,10 @@ provided for this purpose.
 (F) You tried to do a read/write/send/recv operation with a buffer
 length that is less than 0.  This is difficult to imagine.
 
-=item Nested quantifiers at <HERE< in regex m/%s/
+=item Nested quantifiers before << HERE in regex m/%s/
 
 (F) You can't quantify a quantifier without intervening parentheses. So
-things like ** or +* or ?* are illegal. The <HERE< shows in the regular
+things like ** or +* or ?* are illegal. The << HERE shows in the regular
 expression about where the problem was discovered.
 
 Note, however, that the minimal matching quantifiers, C<*?>, C<+?>, and
@@ -2673,13 +2673,13 @@ in L<perlos2>.
 (S unsafe) The subroutine being declared or defined had previously been
 declared or defined with a different function prototype.
 
-=item Quantifier in {,} bigger than %d at <HERE< in regex m/%s/
+=item Quantifier in {,} bigger than %d before << HERE in regex m/%s/
 
 (F) There is currently a limit to the size of the min and max values of the
-{min,max} construct. The <HERE< shows in the regular expression about where
+{min,max} construct. The << HERE shows in the regular expression about where
 the problem was discovered. See L<perlre>.
 
-=item Quantifier unexpected on zero-length expression at <HERE< in regex m/%s/
+=item Quantifier unexpected on zero-length expression before << HERE in regex m/%s/
 
 (W regexp) You applied a regular expression quantifier in a place where
 it makes no sense, such as on a zero-width assertion.  Try putting the
@@ -2747,14 +2747,14 @@ Doing so has no effect.
 (W internal) The internal sv_replace() function was handed a new SV with
 a reference count of other than 1.
 
-=item Reference to nonexistant group at <HERE< in regex m/%s/
+=item Reference to nonexistant group before << HERE in regex m/%s/
 
 (F) You used something like C<\7> in your regular expression, but there are
 not at least seven sets of capturing parentheses in the expression. If you
 wanted to have the character with value 7 inserted into the regular expression,
 prepend a zero to make the number at least two digits: C<\07>
 
-The <HERE< shows in the regular expression about where the problem was
+The << HERE shows in the regular expression about where the problem was
 discovered.
 
 =item regexp memory corruption
@@ -2859,9 +2859,9 @@ scalar that had previously been marked as free.
 (W closed) The socket you're sending to got itself closed sometime
 before now.  Check your logic flow.
 
-=item Sequence (? incomplete at <HERE< mark in regex m/%s/
+=item Sequence (? incomplete before << HERE mark in regex m/%s/
 
-(F) A regular expression ended with an incomplete extension (?. The <HERE<
+(F) A regular expression ended with an incomplete extension (?. The <<<HERE
 shows in the regular expression about where the problem was discovered. See
 L<perlre>.
 
@@ -2870,16 +2870,16 @@ L<perlre>.
 (F) If the contents of a (?{...}) clause contains braces, they must balance
 for Perl to properly detect the end of the clause. See L<perlre>.
 
-=item Sequence (?%s...) not implemented at <HERE< mark in regex m/%s/
+=item Sequence (?%s...) not implemented before << HERE mark in regex m/%s/
 
 (F) A proposed regular expression extension has the character reserved but
-has not yet been written. The <HERE< shows in the regular expression about
+has not yet been written. The << HERE shows in the regular expression about
 where the problem was discovered. See L<perlre>.
 
-=item Sequence (?%s...) not recognized at <HERE< mark in regex m/%s/
+=item Sequence (?%s...) not recognized before << HERE mark in regex m/%s/
 
 (F) You used a regular expression extension that doesn't make sense.
-The <HERE< shows in the regular expression about
+The << HERE shows in the regular expression about
 where the problem was discovered. 
 See L<perlre>.
 
@@ -3067,7 +3067,7 @@ assignment or as a subroutine argument for example).
 (F) Your Perl was compiled with B<-D>SETUID_SCRIPTS_ARE_SECURE_NOW, but
 a version of the setuid emulator somehow got run anyway.
 
-=item Switch (?(condition)... contains too many branches at <HERE< in regex m/%s/
+=item Switch (?(condition)... contains too many branches before << HERE in regex m/%s/
 
 (F) A (?(condition)if-clause|else-clause) construct can have at most two
 branches (the if-clause and the else-clause). If you want one or both to
@@ -3076,13 +3076,13 @@ clustering parentheses:
 
     (?(condition)(?:this|that|other)|else-clause)
 
-The <HERE< shows in the regular expression about where the problem was
+The << HERE shows in the regular expression about where the problem was
 discovered. See L<perlre>.
 
-=item Switch condition not recognized at <HERE< in regex m/%s/
+=item Switch condition not recognized before << HERE in regex m/%s/
 
 (F) If the argument to the (?(...)if-clause|else-clause) construct is a
-number, it can be only a number. The <HERE< shows in the regular expression
+number, it can be only a number. The << HERE shows in the regular expression
 about where the problem was discovered. See L<perlre>.
 
 =item switching effective %s is not implemented
@@ -3360,7 +3360,7 @@ representative, who probably put it there in the first place.
 (F) There are no byte-swapping functions for a machine with this byte
 order.
 
-=item Unknown switch condition (?(%.2s at <HERE< in regex m/%s/
+=item Unknown switch condition (?(%.2s before << HERE in regex m/%s/
 
 (F) The condition of a (?(condition)if-clause|else-clause) construct is not
 known. The condition may be lookaround (the condition is true if the
@@ -3368,7 +3368,7 @@ lookaround is true), a (?{...}) construct (the condition is true if the
 code evaluates to a true value), or a number (the condition is true if the
 set of capturing parentheses named by the number is defined).
 
-The <HERE< shows in the regular expression about where the problem was
+The << HERE shows in the regular expression about where the problem was
 discovered.  See L<perlre>.
 
 =item Unknown open() mode '%s'
@@ -3384,14 +3384,14 @@ iterating over it, and someone else stuck a message in the stream of
 data Perl expected.  Someone's very confused, or perhaps trying to
 subvert Perl's population of %ENV for nefarious purposes.
 
-=item unmatched [ at <HERE< mark in regex m/%s/
+=item unmatched [ before << HERE mark in regex m/%s/
 
 (F) The brackets around a character class must match. If you wish to
 include a closing bracket in a character class, backslash it or put it
-first. See L<perlre>. The <HERE< shows in the regular expression about
+first. See L<perlre>. The << HERE shows in the regular expression about
 where the escape was discovered.
 
-=item unmatched ( in regexp at <HERE< mark in regex m/%s/
+=item unmatched ( in regexp before << HERE mark in regex m/%s/
 
 (F) Unbackslashed parentheses must always be balanced in regular
 expressions.  If you're a vi user, the % key is valuable for finding the
@@ -3423,12 +3423,12 @@ script, a binary program, or a directory as a Perl program.
 recognized by Perl inside character classes.  The character was
 understood literally.
 
-=item Unrecognized escape \\%c passed through at <HERE< in m/%s/
+=item Unrecognized escape \\%c passed through before << HERE in m/%s/
 
 (W regexp) You used a backslash-character combination which is not
 recognized by Perl. This combination appears in an interpolated variable or
 a C<'>-delimited regular expression. The character was understood
-literally. The <HERE< shows in the regular expression about where the escape
+literally. The << HERE shows in the regular expression about where the escape
 was discovered.
 
 
@@ -3717,10 +3717,10 @@ anonymous, using the C<sub {}> syntax.  When inner anonymous subs that
 reference variables in outer subroutines are called or referenced, they
 are automatically rebound to the current values of such variables.
 
-=item Variable length lookbehind not implemented at <HERE< in regex m/%s/
+=item Variable length lookbehind not implemented before << HERE in regex m/%s/
 
 (F) Lookbehind is allowed only for subexpressions whose length is fixed and
-known at compile time. The <HERE< shows in the regular expression about where
+known at compile time. The << HERE shows in the regular expression about where
 the problem was discovered.
 
 =item Version number must be a constant number
index ed22ba0..0ac4620 100644 (file)
@@ -443,9 +443,8 @@ probably get away with setting an environment variable:
 
 If you want finer granularity than the 1 second that the sleep()
 function provides, the easiest way is to use the select() function as
-documented in L<perlfunc/"select">.  If your system has itimers and
-syscall() support, you can check out the old example in
-http://www.perl.com/CPAN/doc/misc/ancient/tutorial/eg/itimers.pl .
+documented in L<perlfunc/"select">.  Try the Time::HiRes and
+the BSD::Itimer modules (available from CPAN).
 
 =head2 How can I measure time under a second?
 
@@ -906,10 +905,6 @@ Background yourself like this:
 The Proc::Daemon module, available from CPAN, provides a function to
 perform these actions for you.
 
-=head2 How do I make my program run with sh and csh?
-
-See the F<eg/nih> script (part of the perl source distribution).
-
 =head2 How do I find out if I'm running interactively or not?
 
 Good question.  Sometimes C<-t STDIN> and C<-t STDOUT> can give clues,
index 5e06324..de8592c 100644 (file)
@@ -795,6 +795,8 @@ to check the condition at the top of the loop.
 
 =item cos EXPR
 
+=item cos
+
 Returns the cosine of EXPR (expressed in radians).  If EXPR is omitted,
 takes cosine of C<$_>.
 
@@ -3285,10 +3287,10 @@ Examples:
 
 The same template may generally also be used in unpack().
 
-=item package 
-
 =item package NAMESPACE
 
+=item package 
+
 Declares the compilation unit as being in the given namespace.  The scope
 of the package declaration is from the declaration itself through the end
 of the enclosing block, file, or eval (the same as the C<my> operator).
@@ -3346,7 +3348,7 @@ array in subroutines, just like C<shift>.
 =item pos
 
 Returns the offset of where the last C<m//g> search left off for the variable
-is in question (C<$_> is used when the variable is not specified).  May be
+in question (C<$_> is used when the variable is not specified).  May be
 modified to change that offset.  Such modification will also influence
 the C<\G> zero-width assertion in regular expressions.  See L<perlre> and
 L<perlop>.
@@ -4446,6 +4448,10 @@ permits these unnecessary but widely-supported conversions:
    %O  a synonym for %lo
    %F  a synonym for %f
 
+Conversions to scientific notation by C<%e>, C<%E>, C<%g> and C<%G>
+always have a two-digit exponent unless the modulus of the exponent is
+greater than 99.
+
 Perl permits the following universally-known flags between the C<%>
 and the conversion letter:
 
index ee147e9..97bbd5e 100644 (file)
@@ -681,7 +681,7 @@ The ActiveState Pages, http://www.activestate.com/
 =item *
 
 The Cygwin environment for Win32; F<README.cygwin> (installed 
-as L<perlcygwin>), http://sourceware.cygnus.com/cygwin/
+as L<perlcygwin>), http://sources.redhat.com/cygwin/
 
 =item *
 
@@ -1753,7 +1753,7 @@ two seconds. (Win32)
 Not implemented. (S<Mac OS>, VOS)
 
 Can only be applied to process handles returned for processes spawned
-using C<system(1, ...)>. (Win32)
+using C<system(1, ...)> or pseudo processes created with C<fork()>. (Win32)
 
 Not useful. (S<RISC OS>)
 
index 4185e84..6b50b92 100644 (file)
@@ -291,12 +291,6 @@ in C:
 Compile this wrapper into a binary executable and then make I<it> rather
 than your script setuid or setgid.
 
-See the program B<wrapsuid> in the F<eg> directory of your Perl
-distribution for a convenient way to do this automatically for all your
-setuid Perl programs.  It moves setuid scripts into files with the same
-name plus a leading dot, and then compiles a wrapper like the one above
-for each of them.
-
 In recent years, vendors have begun to supply systems free of this
 inherent security bug.  On such systems, when the kernel passes the name
 of the set-id script to open to the interpreter, rather than using a
@@ -308,9 +302,8 @@ program that builds Perl tries to figure this out for itself, so you
 should never have to specify this yourself.  Most modern releases of
 SysVr4 and BSD 4.4 use this approach to avoid the kernel race condition.
 
-Prior to release 5.003 of Perl, a bug in the code of B<suidperl> could
-introduce a security hole in systems compiled with strict POSIX
-compliance.
+Prior to release 5.6.1 of Perl, bugs in the code of B<suidperl> could
+introduce a security hole.
 
 =head2 Protecting Your Programs
 
diff --git a/pp.c b/pp.c
index 66800aa..dade2ad 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -1813,7 +1813,7 @@ PP(pp_log)
       NV value;
       value = POPn;
       if (value <= 0.0) {
-       RESTORE_NUMERIC_STANDARD();
+       SET_NUMERIC_STANDARD();
        DIE(aTHX_ "Can't take log of %g", value);
       }
       value = Perl_log(value);
@@ -1829,7 +1829,7 @@ PP(pp_sqrt)
       NV value;
       value = POPn;
       if (value < 0.0) {
-       RESTORE_NUMERIC_STANDARD();
+       SET_NUMERIC_STANDARD();
        DIE(aTHX_ "Can't take sqrt of %g", value);
       }
       value = Perl_sqrt(value);
index 06b29ec..45f9a7e 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -598,7 +598,7 @@ PP(pp_formline)
            value = SvNV(sv);
            /* Formats aren't yet marked for locales, so assume "yes". */
            {
-               RESTORE_NUMERIC_LOCAL();
+               STORE_NUMERIC_STANDARD_SET_LOCAL();
 #if defined(USE_LONG_DOUBLE)
                if (arg & 256) {
                    sprintf(t, "%#*.*" PERL_PRIfldbl,
index 5186025..cd61b78 100644 (file)
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -3735,7 +3735,12 @@ PP(pp_wait)
     int argflags;
 
     childpid = wait4pid(-1, &argflags, 0);
+#  if defined(USE_ITHREADS) && defined(PERL_IMPLICIT_SYS)
+    /* 0 and -1 are both error returns (the former applies to WNOHANG case) */
+    STATUS_NATIVE_SET((childpid && childpid != -1) ? argflags : -1);
+#  else
     STATUS_NATIVE_SET((childpid > 0) ? argflags : -1);
+#  endif
     XPUSHi(childpid);
     RETURN;
 #else
@@ -3754,7 +3759,12 @@ PP(pp_waitpid)
     optype = POPi;
     childpid = TOPi;
     childpid = wait4pid(childpid, &argflags, optype);
+#  if defined(USE_ITHREADS) && defined(PERL_IMPLICIT_SYS)
+    /* 0 and -1 are both error returns (the former applies to WNOHANG case) */
+    STATUS_NATIVE_SET((childpid && childpid != -1) ? argflags : -1);
+#  else
     STATUS_NATIVE_SET((childpid > 0) ? argflags : -1);
+#  endif
     SETi(childpid);
     RETURN;
 #else
@@ -3851,6 +3861,8 @@ PP(pp_system)
     }
     PerlProc__exit(-1);
 #else /* ! FORK or VMS or OS/2 */
+    PL_statusvalue = 0;
+    result = 0;
     if (PL_op->op_flags & OPf_STACKED) {
        SV *really = *++MARK;
        value = (I32)do_aspawn(really, (void **)MARK, (void **)SP);
@@ -3860,10 +3872,12 @@ PP(pp_system)
     else {
        value = (I32)do_spawn(SvPVx(sv_mortalcopy(*SP), n_a));
     }
+    if (PL_statusvalue == -1)  /* hint that value must be returned as is */
+       result = 1;
     STATUS_NATIVE_SET(value);
     do_execfree();
     SP = ORIGMARK;
-    PUSHi(STATUS_CURRENT);
+    PUSHi(result ? value : STATUS_CURRENT);
 #endif /* !FORK or VMS */
     RETURN;
 }
diff --git a/proto.h b/proto.h
index b3e5f99..841e32a 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -427,6 +427,7 @@ PERL_CALLCONV int   Perl_magic_mutexfree(pTHX_ SV* sv, MAGIC* mg);
 PERL_CALLCONV int      Perl_magic_nextpack(pTHX_ SV* sv, MAGIC* mg, SV* key);
 PERL_CALLCONV U32      Perl_magic_regdata_cnt(pTHX_ SV* sv, MAGIC* mg);
 PERL_CALLCONV int      Perl_magic_regdatum_get(pTHX_ SV* sv, MAGIC* mg);
+PERL_CALLCONV int      Perl_magic_regdatum_set(pTHX_ SV* sv, MAGIC* mg);
 PERL_CALLCONV int      Perl_magic_set(pTHX_ SV* sv, MAGIC* mg);
 PERL_CALLCONV int      Perl_magic_setamagic(pTHX_ SV* sv, MAGIC* mg);
 PERL_CALLCONV int      Perl_magic_setarylen(pTHX_ SV* sv, MAGIC* mg);
index 2da9911..f0b7c5c 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -210,10 +210,10 @@ static scan_data_t zero_scan_data = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  * of t/op/regmesg.t, the tests in t/op/re_tests, and those in
  * op/pragma/warn/regcomp.
  */
-#define MARKER1 "<HERE<"      /* marker as it appears in the description */
-#define MARKER2 " <<<HERE<<< "  /* marker as it appears within the regex */
+#define MARKER1 "HERE"      /* marker as it appears in the description */
+#define MARKER2 " << HERE "  /* marker as it appears within the regex */
    
-#define REPORT_LOCATION " at " MARKER1 " mark in regex m/%.*s" MARKER2 "%s/"
+#define REPORT_LOCATION " before " MARKER1 " mark in regex m/%.*s" MARKER2 "%s/"
 
 /*
  * Calls SAVEDESTRUCTOR_X if needed, then calls Perl_croak with the given
index d7d0733..6ae8478 100644 (file)
@@ -57,7 +57,7 @@ print OUT <<EOP;
 
 
 #ifdef REG_COMP_C
-const static U8 regarglen[] = {
+static const U8 regarglen[] = {
 EOP
 
 $ind = 0;
@@ -73,7 +73,7 @@ EOP
 print OUT <<EOP;
 };
 
-const static char reg_off_by_arg[] = {
+static const char reg_off_by_arg[] = {
 EOP
 
 $ind = 0;
@@ -89,7 +89,7 @@ print OUT <<EOP;
 };
 
 #ifdef DEBUGGING
-const static char * const reg_name[] = {
+static const char * const reg_name[] = {
 EOP
 
 $ind = 0;
@@ -105,7 +105,7 @@ EOP
 print OUT <<EOP;
 };
 
-const static int reg_num = $tot;
+static const int reg_num = $tot;
 
 #endif /* DEBUGGING */
 #endif /* REG_COMP_C */
index c5725cd..89c78e6 100644 (file)
@@ -173,7 +173,7 @@ EXTCONST U8 PL_regkind[] = {
 
 
 #ifdef REG_COMP_C
-const static U8 regarglen[] = {
+static const U8 regarglen[] = {
        0,              /* END */
        0,              /* SUCCEED */
        0,              /* BOL */
@@ -256,7 +256,7 @@ const static U8 regarglen[] = {
        0,              /* OPTIMIZED */
 };
 
-const static char reg_off_by_arg[] = {
+static const char reg_off_by_arg[] = {
        0,              /* END */
        0,              /* SUCCEED */
        0,              /* BOL */
@@ -340,7 +340,7 @@ const static char reg_off_by_arg[] = {
 };
 
 #ifdef DEBUGGING
-const static char * const reg_name[] = {
+static const char * const reg_name[] = {
        "END",          /*    0 */
        "SUCCEED",              /*  0x1 */
        "BOL",          /*  0x2 */
@@ -423,7 +423,7 @@ const static char * const reg_name[] = {
        "OPTIMIZED",            /* 0x4f */
 };
 
-const static int reg_num = 80;
+static const int reg_num = 80;
 
 #endif /* DEBUGGING */
 #endif /* REG_COMP_C */
diff --git a/sv.c b/sv.c
index 9f5cc77..8c9d22a 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -1803,7 +1803,7 @@ Perl_sv_2nv(pTHX_ register SV *sv)
            sv_upgrade(sv, SVt_NV);
 #if defined(USE_LONG_DOUBLE)
        DEBUG_c({
-           RESTORE_NUMERIC_STANDARD();
+           STORE_NUMERIC_LOCAL_SET_STANDARD();
            PerlIO_printf(Perl_debug_log,
                          "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
                          PTR2UV(sv), SvNVX(sv));
@@ -1811,7 +1811,7 @@ Perl_sv_2nv(pTHX_ register SV *sv)
        });
 #else
        DEBUG_c({
-           RESTORE_NUMERIC_STANDARD();
+           STORE_NUMERIC_LOCAL_SET_STANDARD();
            PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%g)\n",
                          PTR2UV(sv), SvNVX(sv));
            RESTORE_NUMERIC_LOCAL();
@@ -1843,14 +1843,14 @@ Perl_sv_2nv(pTHX_ register SV *sv)
     SvNOK_on(sv);
 #if defined(USE_LONG_DOUBLE)
     DEBUG_c({
-       RESTORE_NUMERIC_STANDARD();
+       STORE_NUMERIC_LOCAL_SET_STANDARD();
        PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
                      PTR2UV(sv), SvNVX(sv));
        RESTORE_NUMERIC_LOCAL();
     });
 #else
     DEBUG_c({
-       RESTORE_NUMERIC_STANDARD();
+       STORE_NUMERIC_LOCAL_SET_STANDARD();
        PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%g)\n",
                      PTR2UV(sv), SvNVX(sv));
        RESTORE_NUMERIC_LOCAL();
@@ -6545,9 +6545,11 @@ Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV
            *--eptr = '%';
 
            {
-               RESTORE_NUMERIC_STANDARD();
+               STORE_NUMERIC_STANDARD_SET_LOCAL();
+               if (!was_standard && maybe_tainted)
+                   *maybe_tainted = TRUE;
                (void)sprintf(PL_efloatbuf, eptr, nv);
-               RESTORE_NUMERIC_LOCAL();
+               RESTORE_NUMERIC_STANDARD();
            }
 
            eptr = PL_efloatbuf;
index dbcfc30..f562e15 100755 (executable)
--- a/t/lib/b.t
+++ b/t/lib/b.t
@@ -114,7 +114,8 @@ $a =~ s/\s+/ /g;
 $a =~ s/\b(s|foo|bar|ullsv)\b\s?//g;
 $a =~ s/^\s+//;
 $a =~ s/\s+$//;
-if ($Config{use5005threads} eq 'define') {
+my $is_thread = $Config{use5005threads} && $Config{use5005threads} eq 'define';
+if ($is_thread) {
     $b=<<EOF;
 leave enter nextstate label leaveloop enterloop null and defined null
 threadsv readline gv lineseq nextstate aassign null pushmark split pushre
@@ -141,6 +142,7 @@ else {
 $a = join ',', sort split /,/, $a;
 $a =~ s/-uWin32,// if $^O eq 'MSWin32';
 $a =~ s/-u(Cwd|File|File::Copy|OS2),//g if $^O eq 'os2';
+$a =~ s/-uCwd,// if $^O eq 'cygwin';
 if ($Config{static_ext} eq ' ') {
   $b = '-uCarp,-uCarp::Heavy,-uDB,-uExporter,-uExporter::Heavy,-uattributes,'
      . '-umain,-uwarnings';
@@ -150,7 +152,7 @@ if ($Config{static_ext} eq ' ') {
   print "ok $test # skipped: one or more static extensions\n"; $test++;
 }
 
-if ($Config{use5005threads} eq 'define') {
+if ($is_thread) {
     print "# use5005threads: test $test skipped\n";
 } else {
     if ($Is_VMS) {
index 3cb73c2..4811007 100755 (executable)
@@ -1,26 +1,37 @@
-#!/usr/bin/perl -w
+#!/usr/local/bin/perl -w
 # Test for File::Temp - tempfile function
 
 BEGIN {
        chdir 't' if -d 't';
        unshift @INC, '../lib';
        require Test; import Test;
-       plan(tests => 11);
+       plan(tests => 16);
 }
 
 use strict;
 use File::Spec;
 
 # Will need to check that all files were unlinked correctly
-# Set up an END block here to do it 
-
-my (@files, @dirs); # Array containing list of dirs/files to test
+# Set up an END block here to do it
+
+# Arrays containing list of dirs/files to test
+my (@files, @dirs, @still_there);
+
+# And a test for files that should still be around
+# These are tidied up
+END {
+  foreach (@still_there) {
+    ok( -f $_ );
+    ok( unlink( $_ ) );
+    ok( !(-f $_) );
+  }
+}
 
 # Loop over an array hoping that the files dont exist
 END { foreach (@files) { ok( !(-e $_) )} }
 
 # And a test for directories
-END { foreach (@dirs)  { ok( !(-d $_) )} } 
+END { foreach (@dirs)  { ok( !(-d $_) )} }
 
 # Need to make sure that the END blocks are setup before
 # the ones that File::Temp configures since END blocks are evaluated
@@ -93,5 +104,14 @@ print "# TEMPFILE: Created $tempfile\n";
 ok( (-f $tempfile) );
 push(@files, $tempfile);
 
+
+# Create a temporary file that should stay around after
+# it has been closed
+($fh, $tempfile) = tempfile( 'permXXXXXXX', UNLINK => 0 );
+print "# TEMPFILE: Created $tempfile\n";
+ok( -f $tempfile );
+ok( close( $fh ) );
+push( @still_there, $tempfile); # check at END
+
 # Now END block will execute to test the removal of directories
 
index 43df33e..b51287a 100644 (file)
@@ -44,7 +44,7 @@ sub do_test {
 our   $a;
 our   $b;
 my    $c;
-local $d;
+local $d = 0;
 
 do_test( 1,
        $a = "foo",
@@ -204,12 +204,12 @@ do_test(13,
     ROOT = $ADDR
     XSUB = 0x0
     XSUBANY = 0
-    GVGV::GV = $ADDR\\t"main" :: "__ANON__"
-    FILE = ".+\\b(?i:peek\\.t)"
+    GVGV::GV = $ADDR\\t"main" :: "__ANON__[^"]*"
+    FILE = ".*\\b(?i:peek\\.t)"
     DEPTH = 0
 (?:    MUTEXP = $ADDR
-    OWNER = $ADDR)?
-    FLAGS = 0x4
+    OWNER = $ADDR
+)?    FLAGS = 0x4
     PADLIST = $ADDR
     OUTSIDE = $ADDR \\(MAIN\\)');
 
@@ -230,11 +230,11 @@ do_test(14,
     XSUB = 0x0
     XSUBANY = 0
     GVGV::GV = $ADDR\\t"main" :: "do_test"
-    FILE = ".+\\b(?i:peek\\.t)"
+    FILE = ".*\\b(?i:peek\\.t)"
     DEPTH = 1
 (?:    MUTEXP = $ADDR
-    OWNER = $ADDR)?
-    FLAGS = 0x0
+    OWNER = $ADDR
+)?    FLAGS = 0x0
     PADLIST = $ADDR
       \\d+\\. $ADDR \\("\\$pattern" \\d+-\\d+\\)
      \\d+\\. $ADDR \\(FAKE "\\$DEBUG" 0-\\d+\\)
@@ -303,7 +303,7 @@ do_test(17,
     CVGEN = 0x0
     GPFLAGS = 0x0
     LINE = \\d+
-    FILE = ".+\\b(?i:peek\\.t)"
+    FILE = ".*\\b(?i:peek\\.t)"
     FLAGS = $ADDR
     EGV = $ADDR\\t"a"');
 
index 80c0b72..beb64f9 100755 (executable)
@@ -374,3 +374,27 @@ else {
 EXPECT
 pipe_from_fork
 pipe_to_fork
+########
+if ($pid = fork()) {
+    print "forked first kid\n";
+    print "waitpid() returned ok\n" if waitpid($pid,0) == $pid;
+}
+else {
+    print "first child\n";
+    exit(0);
+}
+if ($pid = fork()) {
+    print "forked second kid\n";
+    print "wait() returned ok\n" if wait() == $pid;
+}
+else {
+    print "second child\n";
+    exit(0);
+}
+EXPECT
+forked first kid
+first child
+waitpid() returned ok
+forked second kid
+second child
+wait() returned ok
index 7739276..27be423 100755 (executable)
@@ -195,10 +195,10 @@ else {
        ok 29, ($Is_MSWin32 ? (`cmd /x /c set foo 2>NUL` eq "")
                                : (`echo \$foo` eq "\n") );
 
-       $ENV{NoNeSuCh} = "foo";
+       $ENV{__NoNeSuCh} = "foo";
        $0 = "bar";
-       ok 30, ($Is_MSWin32 ? (`cmd /x /c set NoNeSuCh` eq "NoNeSuCh=foo\n")
-                                               : (`echo \$NoNeSuCh` eq "foo\n") );
+       ok 30, ($Is_MSWin32 ? (`cmd /x /c set __NoNeSuCh` eq "__NoNeSuCh=foo\n")
+                           : (`echo \$__NoNeSuCh` eq "foo\n") );
 }
 
 {
index 900e014..39719b4 100755 (executable)
@@ -346,7 +346,7 @@ print "you die joe!\n" unless "@x" eq 'x y z';
 /(?{"{"})/     # Check it outside of eval too
 EXPECT
 Sequence (?{...}) not terminated or not {}-balanced at - line 1, within pattern
-Sequence (?{...}) not terminated or not {}-balanced at <HERE< mark in regex m/(?{ <<<HERE<<< "{"})/ at - line 1.
+Sequence (?{...}) not terminated or not {}-balanced before HERE mark in regex m/(?{ << HERE "{"})/ at - line 1.
 ########
 /(?{"{"}})/    # Check it outside of eval too
 EXPECT
index fbc234b..91c4b7d 100755 (executable)
@@ -4,7 +4,7 @@
 # the format supported by op/regexp.t.  If you want to add a test
 # that does fit that format, add it to op/re_tests, not here.
 
-print "1..216\n";
+print "1..220\n";
 
 BEGIN {
     chdir 't' if -d 't';
@@ -693,6 +693,30 @@ print "not "
 print "ok $test\n";
 $test++;
 
+eval { $+[0] = 13; };
+print "not " 
+   if $@ !~ /^Modification of a read-only value attempted/;
+print "ok $test\n";
+$test++;
+
+eval { $-[0] = 13; };
+print "not " 
+   if $@ !~ /^Modification of a read-only value attempted/;
+print "ok $test\n";
+$test++;
+
+eval { @+ = (7, 6, 5); };
+print "not " 
+   if $@ !~ /^Modification of a read-only value attempted/;
+print "ok $test\n";
+$test++;
+
+eval { @- = qw(foo bar); };
+print "not " 
+   if $@ !~ /^Modification of a read-only value attempted/;
+print "ok $test\n";
+$test++;
+
 /.(a)(ba*)?/;
 print "#$#-..$#+\nnot " if $#+ != 2 or $#- != 1;
 print "ok $test\n";
index 246a838..c2753e5 100644 (file)
@@ -45,9 +45,9 @@ a[b-d]e       ace     y       $&      ace
 a[b-d] aac     y       $&      ac
 a[-b]  a-      y       $&      a-
 a[b-]  a-      y       $&      a-
-a[b-a] -       c       -       Invalid [] range "b-a" at <HERE< mark in regex m/a[b-a <<<HERE<<< ]/
-a[]b   -       c       -       Unmatched [ at <HERE< mark in regex m/a[ <<<HERE<<< ]b/ at (eval 96) line 1, <TESTS> line 49.
-a[     -       c       -       Unmatched [ at <HERE< mark in regex m/a[ <<<HERE<<< / at (eval 97) line 1, <TESTS> line 50.
+a[b-a] -       c       -       Invalid [] range "b-a" before HERE mark in regex m/a[b-a << HERE ]/
+a[]b   -       c       -       Unmatched [ before HERE mark in regex m/a[ << HERE ]b/ at (eval 96) line 1, <TESTS> line 49.
+a[     -       c       -       Unmatched [ before HERE mark in regex m/a[ << HERE / at (eval 97) line 1, <TESTS> line 50.
 a]     a]      y       $&      a]
 a[]]b  a]b     y       $&      a]b
 a[^bc]d        aed     y       $&      aed
@@ -95,21 +95,21 @@ a[\S]b      a-b     y       -       -
 ab|cd  abc     y       $&      ab
 ab|cd  abcd    y       $&      ab
 ()ef   def     y       $&-$1   ef-
-*a     -       c       -       Quantifier follows nothing at <HERE< mark in regex m/* <<<HERE<<< a/ at (eval 192) line 1, <TESTS> line 98.
-(*)b   -       c       -       Quantifier follows nothing at <HERE< mark in regex m/(* <<<HERE<<< )b/ at (eval 193) line 1, <TESTS> line 99.
+*a     -       c       -       Quantifier follows nothing before HERE mark in regex m/* << HERE a/ at (eval 192) line 1, <TESTS> line 98.
+(*)b   -       c       -       Quantifier follows nothing before HERE mark in regex m/(* << HERE )b/ at (eval 193) line 1, <TESTS> line 99.
 $b     b       n       -       -
 a\     -       c       -       Search pattern not terminated
 a\(b   a(b     y       $&-$1   a(b-
 a\(*b  ab      y       $&      ab
 a\(*b  a((b    y       $&      a((b
 a\\b   a\b     y       $&      a\b
-abc)   -       c       -       Unmatched ) at <HERE< mark in regex m/abc) <<<HERE<<< / at (eval 205) line 1, <TESTS> line 106.
-(abc   -       c       -       Unmatched ( at <HERE< mark in regex m/( <<<HERE<<< abc/ at (eval 206) line 1, <TESTS> line 107.
+abc)   -       c       -       Unmatched ) before HERE mark in regex m/abc) << HERE / at (eval 205) line 1, <TESTS> line 106.
+(abc   -       c       -       Unmatched ( before HERE mark in regex m/( << HERE abc/ at (eval 206) line 1, <TESTS> line 107.
 ((a))  abc     y       $&-$1-$2        a-a-a
 (a)b(c)        abc     y       $&-$1-$2        abc-a-c
 a+b+c  aabbabc y       $&      abc
 a{1,}b{1,}c    aabbabc y       $&      abc
-a**    -       c       -       Nested quantifiers at <HERE< mark in regex m/a** <<<HERE<<< / at (eval 215) line 1, <TESTS> line 112.
+a**    -       c       -       Nested quantifiers before HERE mark in regex m/a** << HERE / at (eval 215) line 1, <TESTS> line 112.
 a.+?c  abcabc  y       $&      abc
 (a+|b)*        ab      y       $&-$1   ab-b
 (a+|b){0,}     ab      y       $&-$1   ab-b
@@ -117,7 +117,7 @@ a.+?c       abcabc  y       $&      abc
 (a+|b){1,}     ab      y       $&-$1   ab-b
 (a+|b)?        ab      y       $&-$1   a-a
 (a+|b){0,1}    ab      y       $&-$1   a-a
-)(     -       c       -       Unmatched ) at <HERE< mark in regex m/) <<<HERE<<< (/ at (eval 230) line 1, <TESTS> line 120.
+)(     -       c       -       Unmatched ) before HERE mark in regex m/) << HERE (/ at (eval 230) line 1, <TESTS> line 120.
 [^ab]* cde     y       $&      cde
 abc            n       -       -
 a*             y       $&      
@@ -218,9 +218,9 @@ a[-]?c      ac      y       $&      ac
 'a[b-d]'i      AAC     y       $&      AC
 'a[-b]'i       A-      y       $&      A-
 'a[b-]'i       A-      y       $&      A-
-'a[b-a]'i      -       c       -       Invalid [] range "b-a" at <HERE< mark in regex m/a[b-a <<<HERE<<< ]/
-'a[]b'i        -       c       -       Unmatched [ at <HERE< mark in regex m/a[ <<<HERE<<< ]b/ at (eval 431) line 1, <TESTS> line 222.
-'a['i  -       c       -       Unmatched [ at <HERE< mark in regex m/a[ <<<HERE<<< / at (eval 432) line 1, <TESTS> line 223.
+'a[b-a]'i      -       c       -       Invalid [] range "b-a" before HERE mark in regex m/a[b-a << HERE ]/
+'a[]b'i        -       c       -       Unmatched [ before HERE mark in regex m/a[ << HERE ]b/ at (eval 431) line 1, <TESTS> line 222.
+'a['i  -       c       -       Unmatched [ before HERE mark in regex m/a[ << HERE / at (eval 432) line 1, <TESTS> line 223.
 'a]'i  A]      y       $&      A]
 'a[]]b'i       A]B     y       $&      A]B
 'a[^bc]d'i     AED     y       $&      AED
@@ -232,21 +232,21 @@ a[-]?c    ac      y       $&      ac
 'ab|cd'i       ABC     y       $&      AB
 'ab|cd'i       ABCD    y       $&      AB
 '()ef'i        DEF     y       $&-$1   EF-
-'*a'i  -       c       -       Quantifier follows nothing at <HERE< mark in regex m/* <<<HERE<<< a/ at (eval 455) line 1, <TESTS> line 235.
-'(*)b'i        -       c       -       Quantifier follows nothing at <HERE< mark in regex m/(* <<<HERE<<< )b/ at (eval 456) line 1, <TESTS> line 236.
+'*a'i  -       c       -       Quantifier follows nothing before HERE mark in regex m/* << HERE a/ at (eval 455) line 1, <TESTS> line 235.
+'(*)b'i        -       c       -       Quantifier follows nothing before HERE mark in regex m/(* << HERE )b/ at (eval 456) line 1, <TESTS> line 236.
 '$b'i  B       n       -       -
 'a\'i  -       c       -       Search pattern not terminated
 'a\(b'i        A(B     y       $&-$1   A(B-
 'a\(*b'i       AB      y       $&      AB
 'a\(*b'i       A((B    y       $&      A((B
 'a\\b'i        A\B     y       $&      A\B
-'abc)'i        -       c       -       Unmatched ) at <HERE< mark in regex m/abc) <<<HERE<<< / at (eval 468) line 1, <TESTS> line 243.
-'(abc'i        -       c       -       Unmatched ( at <HERE< mark in regex m/( <<<HERE<<< abc/ at (eval 469) line 1, <TESTS> line 244.
+'abc)'i        -       c       -       Unmatched ) before HERE mark in regex m/abc) << HERE / at (eval 468) line 1, <TESTS> line 243.
+'(abc'i        -       c       -       Unmatched ( before HERE mark in regex m/( << HERE abc/ at (eval 469) line 1, <TESTS> line 244.
 '((a))'i       ABC     y       $&-$1-$2        A-A-A
 '(a)b(c)'i     ABC     y       $&-$1-$2        ABC-A-C
 'a+b+c'i       AABBABC y       $&      ABC
 'a{1,}b{1,}c'i AABBABC y       $&      ABC
-'a**'i -       c       -       Nested quantifiers at <HERE< mark in regex m/a** <<<HERE<<< / at (eval 478) line 1, <TESTS> line 249.
+'a**'i -       c       -       Nested quantifiers before HERE mark in regex m/a** << HERE / at (eval 478) line 1, <TESTS> line 249.
 'a.+?c'i       ABCABC  y       $&      ABC
 'a.*?c'i       ABCABC  y       $&      ABC
 'a.{0,5}?c'i   ABCABC  y       $&      ABC
@@ -257,7 +257,7 @@ a[-]?c      ac      y       $&      ac
 '(a+|b)?'i     AB      y       $&-$1   A-A
 '(a+|b){0,1}'i AB      y       $&-$1   A-A
 '(a+|b){0,1}?'i        AB      y       $&-$1   -
-')('i  -       c       -       Unmatched ) at <HERE< mark in regex m/) <<<HERE<<< (/ at (eval 499) line 1, <TESTS> line 260.
+')('i  -       c       -       Unmatched ) before HERE mark in regex m/) << HERE (/ at (eval 499) line 1, <TESTS> line 260.
 '[^ab]*'i      CDE     y       $&      CDE
 'abc'i         n       -       -
 'a*'i          y       $&      
@@ -346,7 +346,7 @@ a(?:b|(c|e){1,2}?|d)+?(.)   ace     y       $1$2    ce
 (?<!c)b        cb      n       -       -
 (?<!c)b        b       y       -       -
 (?<!c)b        b       y       $&      b
-(?<%)b -       c       -       Sequence (?<%...) not recognized at <HERE< mark in regex m/(?<% <<<HERE<<< )b/
+(?<%)b -       c       -       Sequence (?<%...) not recognized before HERE mark in regex m/(?<% << HERE )b/
 (?:..)*a       aba     y       $&      aba
 (?:..)*?a      aba     y       $&      a
 ^(?:b|a(?=(.)))*\1     abc     y       $&      ab
@@ -397,10 +397,10 @@ a(?:b|(c|e){1,2}?|d)+?(.) ace     y       $1$2    ce
 '(ab)\d\1'i    ab4Ab   y       $1      ab
 foo\w*\d{4}baz foobar1234baz   y       $&      foobar1234baz
 a(?{})b        cabd    y       $&      ab
-a(?{)b -       c       -       Sequence (?{...}) not terminated or not {}-balanced at <HERE< mark in regex m/a(?{ <<<HERE<<< )b/ at (eval 780) line 1, <TESTS> line 400.
-a(?{{})b       -       c       -       Sequence (?{...}) not terminated or not {}-balanced at <HERE< mark in regex m/a(?{ <<<HERE<<< {})b/ at (eval 781) line 1, <TESTS> line 401.
+a(?{)b -       c       -       Sequence (?{...}) not terminated or not {}-balanced before HERE mark in regex m/a(?{ << HERE )b/ at (eval 780) line 1, <TESTS> line 400.
+a(?{{})b       -       c       -       Sequence (?{...}) not terminated or not {}-balanced before HERE mark in regex m/a(?{ << HERE {})b/ at (eval 781) line 1, <TESTS> line 401.
 a(?{}})b       -       c       -       
-a(?{"{"})b     -       c       -       Sequence (?{...}) not terminated or not {}-balanced at <HERE< mark in regex m/a(?{ <<<HERE<<< "{"})b/ at (eval 783) line 1, <TESTS> line 403.
+a(?{"{"})b     -       c       -       Sequence (?{...}) not terminated or not {}-balanced before HERE mark in regex m/a(?{ << HERE "{"})b/ at (eval 783) line 1, <TESTS> line 403.
 a(?{"\{"})b    cabd    y       $&      ab
 a(?{"{"}})b    -       c       -       Unmatched right curly bracket
 a(?{$bl="\{"}).b       caxbd   y       $bl     {
@@ -441,7 +441,7 @@ x(~~)*(?:(?:F)?)?   x~~     y       -       -
 ^(\(+)?blah(?(1)(\)))$ blah    y       ($2)    ()
 ^(\(+)?blah(?(1)(\)))$ blah)   n       -       -
 ^(\(+)?blah(?(1)(\)))$ (blah   n       -       -
-(?(1?)a|b)     a       c       -       Switch condition not recognized at <HERE< mark in regex m/(?(1? <<<HERE<<< )a|b)/ at (eval 868) line 1, <TESTS> line 444.
+(?(1?)a|b)     a       c       -       Switch condition not recognized before HERE mark in regex m/(?(1? << HERE )a|b)/ at (eval 868) line 1, <TESTS> line 444.
 (?(1)a|b|c)    a       c       -       Switch (?(condition)... contains too many branches
 (?(?{0})a|b)   a       n       -       -
 (?(?{0})b|a)   a       y       $&      a
@@ -473,10 +473,10 @@ $(?<=^(a))        a       y       $1      a
 ([[:]+)        a:[b]:  y       $1      :[
 ([[=]+)        a=[b]=  y       $1      =[
 ([[.]+)        a.[b].  y       $1      .[
-[a[:xyz:       -       c       -       Unmatched [ at <HERE< mark in regex m/[ <<<HERE<<< a[:xyz:/ at (eval 950) line 1, <TESTS> line 476.
-[a[:xyz:]      -       c       -       POSIX class [:xyz:] unknown at <HERE< mark in regex m/[a[:xyz:] <<<HERE<<< /
+[a[:xyz:       -       c       -       Unmatched [ before HERE mark in regex m/[ << HERE a[:xyz:/ at (eval 950) line 1, <TESTS> line 476.
+[a[:xyz:]      -       c       -       POSIX class [:xyz:] unknown before HERE mark in regex m/[a[:xyz:] << HERE /
 [a[:]b[:c]     abc     y       $&      abc
-([a[:xyz:]b]+) pbaq    c       -       POSIX class [:xyz:] unknown at <HERE< mark in regex m/([a[:xyz:] <<<HERE<<< b]+)/
+([a[:xyz:]b]+) pbaq    c       -       POSIX class [:xyz:] unknown before HERE mark in regex m/([a[:xyz:] << HERE b]+)/
 [a[:]b[:c]     abc     y       $&      abc
 ([[:alpha:]]+) ABcd01Xy__--  ${nulnul}${ffff}  y       $1      ABcd
 ([[:alnum:]]+) ABcd01Xy__--  ${nulnul}${ffff}  y       $1      ABcd01Xy
@@ -503,8 +503,8 @@ $(?<=^(a))  a       y       $1      a
 ([[:^word:]]+) ABcd01Xy__--  ${nulnul}${ffff}  y       $1      --  ${nulnul}${ffff}
 ([[:^upper:]]+)        ABcd01Xy__--  ${nulnul}${ffff}  y       $1      cd01
 ([[:^xdigit:]]+)       ABcd01Xy__--  ${nulnul}${ffff}  y       $1      Xy__--  ${nulnul}${ffff}
-[[:foo:]]      -       c       -       POSIX class [:foo:] unknown at <HERE< mark in regex m/[[:foo:] <<<HERE<<< ]/
-[[:^foo:]]     -       c       -       POSIX class [:^foo:] unknown at <HERE< mark in regex m/[[:^foo:] <<<HERE<<< ]/
+[[:foo:]]      -       c       -       POSIX class [:foo:] unknown before HERE mark in regex m/[[:foo:] << HERE ]/
+[[:^foo:]]     -       c       -       POSIX class [:^foo:] unknown before HERE mark in regex m/[[:^foo:] << HERE ]/
 ((?>a+)b)      aaab    y       $1      aaab
 (?>(a+))b      aaab    y       $1      aaa
 ((?>[^()]+)|\([^()]*\))+       ((abc(ade)ufh()()x      y       $&      abc(ade)ufh()()x
index fa22c06..2267206 100644 (file)
+++ b/