summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changes166
-rw-r--r--INSTALL43
-rw-r--r--MANIFEST8
-rw-r--r--README.win3230
-rw-r--r--doio.c6
-rw-r--r--dosish.h36
-rw-r--r--embed.h1
-rw-r--r--ext/Opcode/Safe.pm21
-rw-r--r--global.sym3
-rw-r--r--lib/ExtUtils/Command.pm66
-rw-r--r--op.c101
-rw-r--r--patchlevel.h2
-rw-r--r--plan9/buildinfo2
-rw-r--r--pod/perldelta.pod39
-rw-r--r--pod/perldiag.pod6
-rw-r--r--pod/perlfaq.pod19
-rw-r--r--pod/perlfaq1.pod2
-rw-r--r--pod/perlfaq2.pod31
-rw-r--r--pod/perlfaq3.pod2
-rw-r--r--pod/perlfaq4.pod9
-rw-r--r--pod/perlfaq5.pod2
-rw-r--r--pod/perlfaq6.pod24
-rw-r--r--pod/perlfaq7.pod4
-rw-r--r--pod/perlfaq8.pod17
-rw-r--r--pod/perlfaq9.pod19
-rw-r--r--pod/perlsub.pod14
-rw-r--r--pod/perltoc.pod108
-rw-r--r--pp_sys.c6
-rw-r--r--proto.h3
-rw-r--r--sv.c23
-rwxr-xr-xt/comp/multiline.t2
-rwxr-xr-xt/comp/redef.t16
-rwxr-xr-xt/lib/db-btree.t19
-rwxr-xr-xt/lib/db-hash.t14
-rwxr-xr-xt/lib/db-recno.t14
-rwxr-xr-xt/op/magic.t2
-rwxr-xr-xt/op/misc.t3
-rwxr-xr-xt/op/mkdir.t2
-rwxr-xr-xt/op/runlevel.t5
-rwxr-xr-xt/op/stat.t18
-rwxr-xr-xt/op/write.t8
-rwxr-xr-xt/pragma/locale.t1
-rw-r--r--vms/config.vms2
-rw-r--r--vms/descrip.mms2
-rw-r--r--win32/EXTERN.h47
-rw-r--r--win32/Makefile18
-rw-r--r--win32/SDBM_File.mak2
-rw-r--r--win32/Socket.mak8
-rw-r--r--win32/VC-2.0/Fcntl.mak247
-rw-r--r--win32/VC-2.0/IO.mak245
-rw-r--r--win32/VC-2.0/Opcode.mak247
-rw-r--r--win32/VC-2.0/SDBM_File.mak8
-rw-r--r--win32/VC-2.0/Socket.mak14
-rw-r--r--win32/VC-2.0/libperl.mak6
-rw-r--r--win32/VC-2.0/miniperl.mak10
-rw-r--r--win32/VC-2.0/modules.mak24
-rw-r--r--win32/VC-2.0/perl.mak6
-rw-r--r--win32/VC-2.0/perldll.mak14
-rw-r--r--win32/VC-2.0/perlglob.mak201
-rw-r--r--win32/VC-2.0/vc2.patch16
-rw-r--r--win32/config.H2
-rw-r--r--win32/config.w322
-rw-r--r--win32/dosish.h89
-rw-r--r--win32/libperl.mak2
-rw-r--r--win32/miniperl.mak4
-rw-r--r--win32/modules.mak20
-rw-r--r--win32/perldll.mak8
-rw-r--r--win32/perlmain.c10
-rw-r--r--win32/win32.c18
-rw-r--r--win32/win32.h7
-rw-r--r--win32/win32aux.c3
71 files changed, 1703 insertions, 496 deletions
diff --git a/Changes b/Changes
index b7f1ad5f70..62c1b45217 100644
--- a/Changes
+++ b/Changes
@@ -9,6 +9,172 @@ releases.)
----------------
+Version 5.003_95
+----------------
+
+ CORE LANGUAGE CHANGES
+
+ Title: "Don't compile scalar mods of aggregates, like C<@a =~ s/a/b/>"
+ From: Chip Salzenberg
+ Files: op.c t/op/misc.t
+
+ Title: "Automatically flush on C< $| = 1 >"
+ From: Chip Salzenberg
+ Files: mg.c
+
+ Title: "Refine modulus ("%") per suggestion of Tim Goodwin"
+ From: Chip Salzenberg
+ Files: pp.c
+
+ Title: "If C<perl -a>, do equivalent of C<use vars '@F'>"
+ From: Chip Salzenberg
+ Files: toke.c
+
+ Title: "Warn about undef magic values just like non-magic"
+ From: Chip Salzenberg
+ Files: ext/Opcode/Safe.pm sv.c t/lib/db-btree.t t/lib/db-hash.t
+ t/lib/db-recno.t t/pragma/locale.t
+
+ CORE PORTABILITY
+
+ Title: "Remove redundant patch to hints/bsdos.sh"
+ From: Shigeya Suzuki <shigeya@foretune.co.jp>
+ Msg-ID: <19970322222244K.shigeya@foretune.co.jp>
+ Date: Sat, 22 Mar 1997 22:22:44 +0900
+ Files: hints/bsdos.sh
+
+ Title: "Another MachTen Patch"
+ From: Tom Phoenix <rootbeer@teleport.com>
+ Msg-ID: <Pine.GSO.3.96.970324152150.20610P-100000@kelly.teleport.com>
+ Date: Mon, 24 Mar 1997 15:26:48 -0800 (PST)
+ Files: hints/machten_2.sh
+
+ Title: "Win32 update (five patches)"
+ From: Gurusamy Sarathy <gsar@engin.umich.edu> and
+ nick@ni-s.u-net.com (Nick Ing-Simmons)
+ Files: MANIFEST README.win32 doio.c dosish.h pp_sys.c
+ lib/ExtUtils/Command.pm t/comp/multiline.t t/op/magic.t
+ t/op/mkdir.t t/op/runlevel.t t/op/stat.t t/op/write.t
+ win32/Makefile win32/config.H win32/config.w32 win32/win32.c
+ win32/win32.h win32/win32aux.c win32/*.mak win32/VC-2.0/*.mak
+
+ OTHER CORE CHANGES
+
+ Title: "Fix botch with G_NOARGS; PUSHMARK *is* required"
+ From: Chip Salzenberg
+ Files: perl.c
+
+ Title: "Improve 'prototype mismatch' warning"
+ From: Chip Salzenberg
+ Files: global.sym op.c pod/perldiag.pod proto.h sv.c t/comp/redef.t
+
+ Title: "In perlio, fix vprintf() definition and define vfprintf()"
+ From: Chip Salzenberg
+ Files: perlio.c
+
+ BUILD PROCESS
+
+ (no changes)
+
+ LIBRARY AND EXTENSIONS
+
+ Title: "Fix C<require> in Getopt::Long to work with 5.003"
+ From: Chip Salzenberg
+ Files: lib/Getopt/Long.pm
+
+ Title: "Extraneous blank lines from Pod::Text"
+ From: Russ Allbery <rra@stanford.edu>
+ Msg-ID: <qumend4qq08.fsf@cyclone.stanford.edu>
+ Date: 25 Mar 1997 01:28:55 -0800
+ Files: lib/Pod/Text.pm
+
+ Title: "Exporting UNIVERSAL::can"
+ From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
+ Msg-ID: <E0w9DwX-0000Zr-00@taurus.cus.cam.ac.uk>
+ Date: Mon, 24 Mar 1997 17:54:01 +0000
+ Files: lib/UNIVERSAL.pm
+
+ Title: "Term::Readline patch for AmigaOS"
+ From: "Norbert Pueschel" <pueschel@imsdd.meb.uni-bonn.de>
+ Msg-ID: <77724797@Armageddon.meb.uni-bonn.de>
+ Date: Sun, 23 Mar 1997 18:57:22 +0100
+ Files: lib/Term/ReadLine.pm
+
+ TESTS
+
+ Title: "Reduce memory footprint of complex.t"
+ From: Dominic Dunlop <domo@slipper.ip.lu>
+ Msg-ID: <v03020902af5d8e03c5ab@[194.51.248.84]>
+ Date: Tue, 25 Mar 1997 15:39:26 +0100
+ Files: t/lib/complex.t
+
+ UTILITIES
+
+ Title: "Improve pod2man diagnostic when NAME is invalid"
+ From: Chip Salzenberg
+ Files: pod/pod2man.PL
+
+ DOCUMENTATION
+
+ Title: "INSTALL-1.8 to INSTALL-1.9 updates"
+ From: Andy Dougherty <doughera@fractal.phys.lafayette.edu>
+ Msg-ID: <Pine.SOL.3.95q.970325135138.3374A-100000@fractal.lafayette.e
+ Date: Tue, 25 Mar 1997 13:52:53 -0500 (EST)
+ Files: INSTALL
+
+ Title: "Document possible problems with -Mdiagnostics after upgrade"
+ From: Chip Salzenberg
+ Files: INSTALL
+
+ Title: "Mention perldelta in INSTALL"
+ From: Chip Salzenberg
+ Files: INSTALL
+
+ Title: "Describe pod format at top of INSTALL"
+ From: Chip Salzenberg
+ Files: INSTALL
+
+ Title: "Document C</a *b/x> fix"
+ From: Chip Salzenberg
+ Files: pod/perldelta.pod
+
+ Title: "pods for subroutine argument autovivication"
+ From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
+ Msg-ID: <E0w9489-0005YT-00@ursa.cus.cam.ac.uk>
+ Date: Mon, 24 Mar 1997 07:25:21 +0000
+ Files: pod/perldelta.pod pod/perlsub.pod
+
+ Title: "Missing item in perldiag"
+ From: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>
+ Msg-ID: <E0w8jVZ-0005va-00@ursa.cus.cam.ac.uk>
+ Date: Sun, 23 Mar 1997 09:24:09 +0000
+ Files: pod/perldiag.pod
+
+ Title: "Mention and discourage use of term 'soft reference'"
+ From: Chip Salzenberg
+ Files: pod/perlref.pod
+
+ Title: "Pod problems & fixes"
+ From: Hallvard B Furuseth <h.b.furuseth@usit.uio.no>
+ Msg-ID: <199703242031.VAA14997@bombur2.uio.no>
+ Date: Mon, 24 Mar 1997 21:31:51 +0100 (MET)
+ Files: INSTALL lib/Term/Complete.pm lib/subs.pm pod/perlcall.pod
+ pod/perldata.pod pod/perldiag.pod pod/perlembed.pod
+ pod/perlguts.pod pod/perlmod.pod pod/perlop.pod
+ pod/perlpod.pod pod/pod2html.PL
+
+ Title: "DB_File documentation fix"
+ From: pmarquess@bfsec.bt.co.uk (Paul Marquess)
+ Msg-ID: <9703240854.AA08401@claudius.bfsec.bt.co.uk>
+ Date: Mon, 24 Mar 97 08:54:16 GMT
+ Files: ext/DB_File/DB_File.pm
+
+ Title: "FAQ update"
+ From: Nathan Torkington <gnat@prometheus.frii.com>
+ Files: pod/perlfaq*.pod
+
+
+----------------
Version 5.003_94
----------------
diff --git a/INSTALL b/INSTALL
index 4155add996..3376508cd2 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,3 +1,15 @@
+This document is written in a format called Plain Old Documentation,
+or "pod" for short. For a description of the pod format, please read
+"pod/perlpod.pod".
+
+Here's the short version: lines that begin with "=" are special, like
+headings and list items; lines that begin with whitespace are to be
+read verbatim, perhaps because they are source code; B<> surrounds
+bold text, I<> surrounds italicized text, C<> surrounds verbatim text
+like source code, F<> surrounds a filename, L<> surrounds a link to
+another document (e.g. L<perlpod> means "pod/perlpod.pod"), and E<>
+represents a special character (E<lt> is "<" and E<gt> is ">").
+
=head1 NAME
Install - Build and Installation guide for perl5.
@@ -38,7 +50,7 @@ provide additional or different instructions for building Perl.
=head1 Space Requirements
The complete perl5 source tree takes up about 7 MB of disk space.
-The complete tree after completing C<make> takes roughly
+The complete tree after completing B<make> takes roughly
15 MB, though the actual total is likely to be quite
system-dependent. The installation directories need something
on the order of 7 MB, though again that value is system-dependent.
@@ -216,14 +228,14 @@ F</usr/local/lib/libgdbm.a>. Configure should figure all the
necessary steps out automatically.
Specifically, when Configure prompts you for flags for
-your C compiler, you should include C<-I/usr/local/include>.
+your C compiler, you should include B<-I/usr/local/include>.
When Configure prompts you for linker flags, you should include
-C<-L/usr/local/lib>.
+B<-L/usr/local/lib>.
If you are using dynamic loading, then when Configure prompts you for
linker flags for dynamic loading, you should again include
-C<-L/usr/local/lib>.
+B<-L/usr/local/lib>.
Again, this should all happen automatically. If you want to accept the
defaults for all the questions and have Configure print out only terse
@@ -420,6 +432,10 @@ answer "n" when B<Configure> asks if you want binary compatibility.
The default answer of "y" to maintain binary compatibility is probably
appropriate for almost everyone.
+In a related issue, old extensions may also be affected by the changes
+in the Perl language from 5.003 to 5.004. Please see L<perldelta> for
+a description of what's changed.
+
=head2 Selecting File IO mechanisms
Previous versions of perl used the standard IO mechanisms as defined in
@@ -668,7 +684,7 @@ you probably want to do
This will do two things: First, it will force compilation to use
B<cc -g> so that you can use your system's debugger on the executable.
-Second, it will add a C<-DDEBUGGING> to your ccflags variable in
+Second, it will add a B<-DDEBUGGING> to your ccflags variable in
F<config.sh> so that you can use B<perl -D> to access perl's internal
state. Note, however, that Configure will only add -DDEBUGGING by
default if you are not reusing your old F<config.sh>. If you want to
@@ -692,7 +708,7 @@ following:
sh Configure -Dccflags='-Drand=random -Dsrand=srandom'
-or by adding C<-Drand=random> and C<-Dsrandom=srandom> to your ccflags
+or by adding B<-Drand=random> and B<-Dsrandom=srandom> to your ccflags
at the appropriate Configure prompt. (You may also have to adjust
Configure's guess for 'randbits' as well.)
@@ -990,7 +1006,7 @@ with B<make depend; make>.
=item *
-If you still can't compile successfully, try adding a C<-DCRIPPLED_CC>
+If you still can't compile successfully, try adding a B<-DCRIPPLED_CC>
flag. (Just because you get no errors doesn't mean it compiled right!)
This simplifies some complicated expressions for compilers that get
indigestion easily.
@@ -1098,7 +1114,7 @@ comments that apply to your system.
B<Note>: One possible reason for errors is that some external programs
may be broken due to the combination of your environment and the way
-C<make test> exercises them. For example, this may happen if you have
+B<make test> exercises them. For example, this may happen if you have
one or more of these environment variables set: C<LC_ALL LC_CTYPE
LC_COLLATE LANG>. In some versions of UNIX, the non-English locales
are known to cause programs to exhibit mysterious errors.
@@ -1111,7 +1127,7 @@ If you have any of the above environment variables set, please try
LC_ALL=C;export LC_ALL
-for Bourne or Korn shell) from the command line and then retry C<make
+for Bourne or Korn shell) from the command line and then retry B<make
test>. If the tests then succeed, you may have a broken program that
is confusing the testing. Please run the troublesome test by hand as
shown above and see whether you can locate the program. Look for
@@ -1197,8 +1213,12 @@ directory. They are simply in F</usr/local/lib/perl5/$archname>. If
you will not be using 5.000 or 5.001, you may safely remove those
files.
-The standard library files in F</usr/local/lib/perl5>
-should be usable by all versions of perl5.
+The standard library files in F</usr/local/lib/perl5> should be usable
+by all versions of perl5. However, the L<diagnostics> module uses the
+F<pod/perldiag.pod> documentation file relative to this directory. So
+after you install 5.004, the C<use diagnostics> pragma and the
+B<splain> script may not correctly identify and explain any warnings
+or errors that Perl 5.004 would not have generated.
Most extensions will probably not need to be recompiled to use with a newer
version of perl. If you do run into problems, and you want to continue
@@ -1313,3 +1333,4 @@ from the original README by Larry Wall.
=head1 LAST MODIFIED
$Id: INSTALL,v 1.9 1997/03/25 18:50:19 doughera Released $
+Additional modification by Chip Salzenberg, 1997/03/25
diff --git a/MANIFEST b/MANIFEST
index 987d22c10a..a0585d5a9a 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -773,7 +773,6 @@ vms/vms.c VMS-specific C code for Perl core
vms/vms_yfix.pl convert Unix perly.[ch] to VMS perly_[ch].vms
vms/vmsish.h VMS-specific C header for Perl core
vms/writemain.pl Generate perlmain.c from miniperlmain.c+extensions
-win32/EXTERN.h Win32 port
win32/Fcntl.mak Win32 port
win32/IO.mak Win32 port
win32/Makefile Win32 port
@@ -781,6 +780,9 @@ win32/Opcode.mak Win32 port
win32/SDBM_File.mak Win32 port
win32/Socket.mak Win32 port
win32/TEST Win32 port
+win32/VC-2.0/Fcntl.mak Win32 port
+win32/VC-2.0/IO.mak Win32 port
+win32/VC-2.0/Opcode.mak Win32 port
win32/VC-2.0/SDBM_File.mak Win32 port
win32/VC-2.0/Socket.mak Win32 port
win32/VC-2.0/libperl.mak Win32 port
@@ -788,7 +790,7 @@ win32/VC-2.0/miniperl.mak Win32 port
win32/VC-2.0/modules.mak Win32 port
win32/VC-2.0/perl.mak Win32 port
win32/VC-2.0/perldll.mak Win32 port
-win32/VC-2.0/vc2.patch Win32 port
+win32/VC-2.0/perlglob.mak Win32 port
win32/autosplit.pl Win32 port
win32/bin/PL2BAT.BAT Win32 port
win32/bin/network.pl Win32 port
@@ -800,7 +802,6 @@ win32/config.H Win32 config header (suffix not ".h" for metaconfig)
win32/config.w32 Win32 port
win32/dl_win32.xs Win32 port
win32/dosish.diff Win32 port
-win32/dosish.h Win32 port
win32/genxsdef.pl Win32 port
win32/include/arpa/inet.h Win32 port
win32/include/dirent.h Win32 port
@@ -817,7 +818,6 @@ win32/perldll.mak Win32 port
win32/perlglob.c Win32 port
win32/perlglob.mak Win32 port
win32/perllib.c Win32 port
-win32/perlmain.c Win32 port
win32/runperl.c Win32 port
win32/splittree.pl Win32 port
win32/win32.c Win32 port
diff --git a/README.win32 b/README.win32
index 36953ec0da..82c9bacfab 100644
--- a/README.win32
+++ b/README.win32
@@ -13,12 +13,12 @@ These are instructions for building Perl under WindowsNT (versions
=head1 DESCRIPTION
-Before you start, you should glance through the README file found
+Before you start, you should glance through the README file
found in the top-level directory where the Perl distribution
was extracted. Make sure you read and understand the terms under
which this software is being distributed.
-Make sure you read the L<BUGS AND CAVEATS> section below for the
+Also make sure you read the L<BUGS AND CAVEATS> section below for the
known limitations of this port.
The INSTALL file in the perl top-level has much information that is
@@ -76,8 +76,8 @@ but it doesn't hurt to do so.
The "win32" directory contains *.mak files for use with the NMAKE that
comes with Visual C++ ver. 4.0 and above. If you wish to build perl
-using Visual C++ versions between 2.0 and 4.0, do the following three
-additional steps (these three steps are not required if you are
+using Visual C++ versions between 2.0 and 4.0, do the following two
+additional steps (these steps are not required if you are
using Visual C++ versions 4.0 and above):
=over 8
@@ -85,9 +85,7 @@ using Visual C++ versions 4.0 and above):
=item 1.
Overwrite the *.mak files in the win32 subdirectory with the versions
-in the win32\VC-2.0 directory. (The only difference in those makefiles
-is in how the $(INCLUDE) variable is handled--VC 2.0 NMAKE does not
-grok a path list in $(INCLUDE)).
+in the win32\VC-2.0 directory.
=item 2.
@@ -100,15 +98,6 @@ This must have only one directory (a list of directories will not work).
VCVARS32.BAT may put multiple locations in there, which is why this step
is required.
-=item 3.
-
-Apply the patch found in win32\VC-2.0\vc2.patch, like so:
-
- cd win32
- patch -p2 -N < VC-2.0\vc2.patch
-
-You may have to edit win32\win32.c manually if you don't have GNU patch.
-
=back
=item *
@@ -152,16 +141,17 @@ This should produce a summary very similar to the following:
Failed Test Status Wstat Total Fail Failed List of failed
------------------------------------------------------------------------------
io/fs.t 26 16 61.54% 1-5, 7-11, 16-18, 23-25
- io/tell.t 13 1 7.69% 10
lib/anydbm.t 12 1 8.33% 2
lib/findbin.t 1 1 100.00% 1
lib/sdbm.t 12 1 8.33% 2
+ op/magic.t 28 1 3.57% 16
op/mkdir.t 7 2 28.57% 3, 7
op/runlevel.t 8 1 12.50% 4
- op/stat.t 56 3 5.36% 3-4, 20
+ op/stat.t 56 3 5.36% 2-3, 20
op/taint.t 98 20 20.41% 1-6, 14, 16, 19-21, 24, 26, 35-3
pragma/locale.t 98 40 40.82% 1, 13-14, 21-27, 33, 39, 45-53,
- Failed 10/149 test scripts, 93.29% okay. 86/3506 subtests failed, 97.55% okay.
+ Failed 10/149 test scripts, 93.29% okay. 86/3871 subtests failed, 97.78% okay.
+
Check if any additional tests other than the ones shown here
failed. The standard testsuite will ultimately be modified so
@@ -173,7 +163,7 @@ This is still very much an experimental port, and should be considered
alpha quality software. You can expect changes in virtually all of
these areas: build process, installation structure, supported
utilities/modules, and supported perl functionality. Specifically,
-functionality that supports the Win32 environment may be ultimately
+functionality that supports the Win32 environment may ultimately
be supported as either core modules or extensions.
Many tests from the standard testsuite either fail or produce different
diff --git a/doio.c b/doio.c
index 8c4c2678e2..271de285fa 100644
--- a/doio.c
+++ b/doio.c
@@ -34,7 +34,11 @@
#endif
#ifdef I_UTIME
-#include <utime.h>
+# ifdef WIN32
+# include <sys/utime.h>
+# else
+# include <utime.h>
+# endif
#endif
#ifdef I_FCNTL
#include <fcntl.h>
diff --git a/dosish.h b/dosish.h
index 58fdb28aac..dfc5e358b5 100644
--- a/dosish.h
+++ b/dosish.h
@@ -3,20 +3,28 @@
#define SH_PATH "/bin/sh"
#ifdef DJGPP
-#define BIT_BUCKET "nul"
-#define OP_BINARY O_BINARY
+# define BIT_BUCKET "nul"
+# define OP_BINARY O_BINARY
void Perl_DJGPP_init();
-#define PERL_SYS_INIT(argcp, argvp) STMT_START { \
+# define PERL_SYS_INIT(argcp, argvp) STMT_START { \
Perl_DJGPP_init(); } STMT_END
-#else
-#define PERL_SYS_INIT(c,v)
-#define BIT_BUCKET "\dev\nul"
-#endif
+#else /* DJGPP */
+# define PERL_SYS_INIT(c,v)
+# ifdef WIN32
+# define BIT_BUCKET "nul"
+# else
+# define BIT_BUCKET "\\dev\\nul" /* "wanna be like, umm, Newlined, or somethin?" */
+# endif
+#endif /* DJGPP */
#define PERL_SYS_TERM()
#define dXSUB_SYS int dummy
#define TMPPATH "plXXXXXX"
+#ifdef WIN32
+#define HAS_UTIME
+#endif
+
/*
* 5.003_07 and earlier keyed on #ifdef MSDOS for determining if we were
* running on DOS, *and* if we had to cope with 16 bit memory addressing
@@ -75,6 +83,18 @@ void Perl_DJGPP_init();
*/
#define fwrite1 fwrite
-#define Stat(fname,bufptr) stat((fname),(bufptr))
#define Fstat(fd,bufptr) fstat((fd),(bufptr))
#define Fflush(fp) fflush(fp)
+
+#ifndef WIN32
+# define Stat(fname,bufptr) stat((fname),(bufptr))
+#else
+# define Stat(fname,bufptr) win32_stat((fname),(bufptr))
+# define my_getenv(var) getenv(var)
+/*
+ * the following are standard library calls (stdio in particular)
+ * that is being redirected to the perl DLL. This is needed for
+ * Dynaloading any modules that called stdio functions
+ */
+# include <win32iop.h>
+#endif /* WIN32 */
diff --git a/embed.h b/embed.h
index 3beabb649c..a408584852 100644
--- a/embed.h
+++ b/embed.h
@@ -124,6 +124,7 @@
#define cshname Perl_cshname
#define curinterp Perl_curinterp
#define curpad Perl_curpad
+#define cv_ckproto Perl_cv_ckproto
#define cv_clone Perl_cv_clone
#define cv_const_sv Perl_cv_const_sv
#define cv_undef Perl_cv_undef
diff --git a/ext/Opcode/Safe.pm b/ext/Opcode/Safe.pm
index 22772796e2..c9d741647e 100644
--- a/ext/Opcode/Safe.pm
+++ b/ext/Opcode/Safe.pm
@@ -150,26 +150,27 @@ sub share_from {
my $vars = shift;
my $no_record = shift || 0;
my $root = $obj->root();
- my ($var, $arg);
croak("vars not an array ref") unless ref $vars eq 'ARRAY';
no strict 'refs';
# Check that 'from' package actually exists
croak("Package \"$pkg\" does not exist")
unless keys %{"$pkg\::"};
+ my $arg;
foreach $arg (@$vars) {
# catch some $safe->share($var) errors:
croak("'$arg' not a valid symbol table name")
unless $arg =~ /^[\$\@%*&]?\w[\w:]*$/
or $arg =~ /^\$\W$/;
- ($var = $arg) =~ s/^(\W)//; # get type char
- # warn "share_from $pkg $1 $var";
- *{$root."::$var"} = ($1 eq '$') ? \${$pkg."::$var"}
- : ($1 eq '@') ? \@{$pkg."::$var"}
- : ($1 eq '%') ? \%{$pkg."::$var"}
- : ($1 eq '*') ? *{$pkg."::$var"}
- : ($1 eq '&') ? \&{$pkg."::$var"}
- : (!$1) ? \&{$pkg."::$var"}
- : croak(qq(Can't share "$1$var" of unknown type));
+ my ($var, $type);
+ $type = $1 if ($var = $arg) =~ s/^(\W)//;
+ # warn "share_from $pkg $type $var";
+ *{$root."::$var"} = (!$type) ? \&{$pkg."::$var"}
+ : ($type eq '&') ? \&{$pkg."::$var"}
+ : ($type eq '$') ? \${$pkg."::$var"}
+ : ($type eq '@') ? \@{$pkg."::$var"}
+ : ($type eq '%') ? \%{$pkg."::$var"}
+ : ($type eq '*') ? *{$pkg."::$var"}
+ : croak(qq(Can't share "$type$var" of unknown type));
}
$obj->share_record($pkg, $vars) unless $no_record or !$vars;
}
diff --git a/global.sym b/global.sym
index ddfe93130c..91372705c0 100644
--- a/global.sym
+++ b/global.sym
@@ -45,7 +45,6 @@ cshlen
cshname
curinterp
curpad
-cv_const_sv
dc
debug
dec_amg
@@ -363,7 +362,9 @@ ck_trunc
convert
cpytill
croak
+cv_ckproto
cv_clone
+cv_const_sv
cv_undef
cx_dump
cxinc
diff --git a/lib/ExtUtils/Command.pm b/lib/ExtUtils/Command.pm
index 8c4fd7a916..7bdbea9dd7 100644
--- a/lib/ExtUtils/Command.pm
+++ b/lib/ExtUtils/Command.pm
@@ -1,6 +1,7 @@
package ExtUtils::Command;
use strict;
# use AutoLoader;
+use Carp;
use File::Copy;
use File::Compare;
use File::Basename;
@@ -35,14 +36,22 @@ Most commands are wrapers on generic modules File::Path and File::Basename.
=over 4
+=cut
+
+sub expand_wildcards
+{
+ @ARGV = map(/[\*\?]/ ? glob($_) : $_,@ARGV);
+}
+
=item cat
-Concatenates all files menthion on command line to STDOUT.
+Concatenates all files mentioned on command line to STDOUT.
=cut
sub cat ()
{
+ expand_wildcards();
print while (<>);
}
@@ -68,7 +77,7 @@ Removes directories - recursively (even if readonly)
sub rm_rf
{
- rmtree([@ARGV],0,0);
+ rmtree([grep -e $_,expand_wildcards()],0,0);
}
=item rm_f files....
@@ -79,12 +88,13 @@ Removes files (even if readonly)
sub rm_f
{
- foreach (@ARGV)
+ foreach (expand_wildcards())
{
- next unless -e $_;
- chmod(0777,$_);
- next if (-f $_ and unlink($_));
- die "Cannot delete $_:$!";
+ next unless -f $_;
+ next if unlink($_);
+ chmod(0777,$_);
+ next if unlink($_);
+ carp "Cannot delete $_:$!";
}
}
@@ -96,6 +106,7 @@ Makes files exist, with current timestamp
sub touch
{
+ expand_wildcards();
while (@ARGV)
{
my $file = shift(@ARGV);
@@ -114,19 +125,12 @@ Multiple sources are allowed if destination is an existing directory.
sub mv
{
my $dst = pop(@ARGV);
- if (-d $dst)
- {
- while (@ARGV)
- {
- my $src = shift(@ARGV);
- my $leaf = basename($src);
- move($src,"$dst/$leaf"); # fixme
- }
- }
- else
+ expand_wildcards();
+ croak("Too many arguments") if (@ARGV > 1 && ! -d $dst);
+ while (@ARGV)
{
- my $src = shift(@ARGV);
- move($src,$dst) || die "Cannot move $src $dst:$!";
+ my $src = shift(@ARGV);
+ move($src,$dst);
}
}
@@ -140,18 +144,12 @@ Multiple sources are allowed if destination is an existing directory.
sub cp
{
my $dst = pop(@ARGV);
- if (-d $dst)
- {
- while (@ARGV)
- {
- my $src = shift(@ARGV);
- my $leaf = basename($src);
- copy($src,"$dst/$leaf"); # fixme
- }
- }
- else
+ expand_wildcards();
+ croak("Too many arguments") if (@ARGV > 1 && ! -d $dst);
+ while (@ARGV)
{
- copy(shift,$dst);
+ my $src = shift(@ARGV);
+ copy($src,$dst);
}
}
@@ -163,7 +161,8 @@ Sets UNIX like permissions 'mode' on all the files.
sub chmod
{
- chmod(@ARGV) || die "Cannot chmod ".join(' ',@ARGV).":$!";
+ my $mode = shift(@ARGV);
+ chmod($mode,expand_wildcards()) || die "Cannot chmod ".join(' ',$mode,@ARGV).":$!";
}
=item mkpath directory...
@@ -174,7 +173,7 @@ Creates directory, including any parent directories.
sub mkpath
{
- File::Path::mkpath([@ARGV],1,0777);
+ File::Path::mkpath([expand_wildcards()],1,0777);
}
=item test_f file
@@ -195,9 +194,6 @@ __END__
=head1 BUGS
-eqtime does not work right on Win32 due to problems with utime() built-in
-command.
-
Should probably be Auto/Self loaded.
=head1 SEE ALSO
diff --git a/op.c b/op.c
index 55b0422b4f..7aa4cbd70d 100644
--- a/op.c
+++ b/op.c
@@ -39,6 +39,7 @@ static I32 list_assignment _((OP *op));
static OP *bad_type _((I32 n, char *t, char *name, OP *kid));
static OP *modkids _((OP *op, I32 type));
static OP *no_fh_allowed _((OP *op));
+static bool scalar_mod_type _((OP *op, I32 type));
static OP *scalarboolean _((OP *op));
static OP *too_few_arguments _((OP *op, char* name));
static OP *too_many_arguments _((OP *op, char* name));
@@ -1031,6 +1032,8 @@ I32 type;
}
/* FALL THROUGH */
case OP_RV2GV:
+ if (scalar_mod_type(op, type))
+ goto nomod;
ref(cUNOP->op_first, op->op_type);
/* FALL THROUGH */
case OP_AASSIGN:
@@ -1059,6 +1062,8 @@ I32 type;
modcount = 10000;
if (type == OP_REFGEN && op->op_flags & OPf_PARENS)
return op; /* Treat \(@foo) like ordinary list. */
+ if (scalar_mod_type(op, type))
+ goto nomod;
/* FALL THROUGH */
case OP_PADSV:
modcount++;
@@ -1126,6 +1131,52 @@ I32 type;
return op;
}
+static bool
+scalar_mod_type(op, type)
+OP *op;
+I32 type;
+{
+ switch (type) {
+ case OP_SASSIGN:
+ if (op->op_type == OP_RV2GV)
+ return FALSE;
+ /* FALL THROUGH */
+ case OP_PREINC:
+ case OP_PREDEC:
+ case OP_POSTINC:
+ case OP_POSTDEC:
+ case OP_I_PREINC:
+ case OP_I_PREDEC:
+ case OP_I_POSTINC:
+ case OP_I_POSTDEC:
+ case OP_POW:
+ case OP_MULTIPLY:
+ case OP_DIVIDE:
+ case OP_MODULO:
+ case OP_REPEAT:
+ case OP_ADD:
+ case OP_SUBTRACT:
+ case OP_I_MULTIPLY:
+ case OP_I_DIVIDE:
+ case OP_I_MODULO:
+ case OP_I_ADD:
+ case OP_I_SUBTRACT:
+ case OP_LEFT_SHIFT:
+ case OP_RIGHT_SHIFT:
+ case OP_BIT_AND:
+ case OP_BIT_XOR:
+ case OP_BIT_OR:
+ case OP_CONCAT:
+ case OP_SUBST:
+ case OP_TRANS:
+ case OP_ANDASSIGN: /* may work later */
+ case OP_ORASSIGN: /* may work later */
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
OP *
refkids(op, type)
OP *op;
@@ -3051,9 +3102,39 @@ CV* proto;
return cv_clone2(proto, CvOUTSIDE(proto));
}
+void
+cv_ckproto(cv, gv, p)
+CV* cv;
+GV* gv;
+char* p;
+{
+ if ((!p != !SvPOK(cv)) || (p && strNE(p, SvPVX(cv)))) {
+ char* buf;
+ SV* name = Nullsv;
+
+ if (gv)
+ gv_efullname3(name = NEWSV(606, 40), gv, Nullch);
+ New(607, buf, ((name ? SvCUR(name) : 0)
+ + (SvPOK(cv) ? SvCUR(cv) : 0)
+ + (p ? strlen(p) : 0)
+ + 60), char);
+ strcpy(buf, "Prototype mismatch:");
+ if (name) {
+ sprintf(buf + strlen(buf), " sub %s", SvPVX(name));
+ SvREFCNT_dec(name);
+ }
+ if (SvPOK(cv))
+ sprintf(buf + strlen(buf), " (%s)", SvPVX(cv));
+ strcat(buf, " vs ");
+ sprintf(buf + strlen(buf), p ? "(%s)" : "none", p);
+ warn("%s", buf);
+ Safefree(buf);
+ }
+}
+
SV *
cv_const_sv(cv)
-CV *cv;
+CV* cv;
{
OP *o;
SV *sv = Nullsv;
@@ -3084,21 +3165,20 @@ OP *block;
{
char *name = op ? SvPVx(cSVOP->op_sv, na) : Nullch;
GV *gv = gv_fetchpv(name ? name : "__ANON__", GV_ADDMULTI, SVt_PVCV);
+ char *ps = proto ? SvPVx(((SVOP*)proto)->op_sv, na) : Nullch;
register CV *cv;
AV *av;
I32 ix;
if (op)
SAVEFREEOP(op);
+ if (proto)
+ SAVEFREEOP(proto);
+
if (!name || GvCVGEN(gv))
cv = Nullcv;
else if (cv = GvCV(gv)) {
- /* prototype mismatch? */
- char *p = proto ? SvPVx(((SVOP*)proto)->op_sv, na) : Nullch;
- if ((!proto != !SvPOK(cv)) || (p && strNE(p, SvPVX(cv)))) {
- warn("Prototype mismatch: (%s) vs (%s)",
- SvPOK(cv) ? SvPVX(cv) : "none", p ? p : "none");
- }
+ cv_ckproto(cv, gv, ps);
/* already defined (or promised)? */
if (CvROOT(cv) || CvXSUB(cv) || GvASSUMECV(gv)) {
SV* const_sv;
@@ -3142,11 +3222,8 @@ OP *block;
CvFILEGV(cv) = curcop->cop_filegv;
CvSTASH(cv) = curstash;
- if (proto) {
- char *p = SvPVx(((SVOP*)proto)->op_sv, na);
- sv_setpv((SV*)cv, p);
- op_free(proto);
- }
+ if (ps)
+ sv_setpv((SV*)cv, ps);
if (error_count) {
op_free(block);
diff --git a/patchlevel.h b/patchlevel.h
index f7cc9dda21..6d4fe6eea1 100644
--- a/patchlevel.h
+++ b/patchlevel.h
@@ -1,5 +1,5 @@
#define PATCHLEVEL 3
-#define SUBVERSION 94
+#define SUBVERSION 95
/*
local_patches -- list of locally applied less-than-subversion patches.
diff --git a/plan9/buildinfo b/plan9/buildinfo
index 49489adae9..99818464e8 100644
--- a/plan9/buildinfo
+++ b/plan9/buildinfo
@@ -1 +1 @@
-p9pvers = 5.003_94
+p9pvers = 5.003_95
diff --git a/pod/perldelta.pod b/pod/perldelta.pod
index 1e329909e8..46bd59b04f 100644
--- a/pod/perldelta.pod
+++ b/pod/perldelta.pod
@@ -27,23 +27,29 @@ might have symbol conflicts if you embed Perl in another application,
just as in the 5.003 release. By default, binary compatibility
is preserved at the expense of symbol table pollution.
-=head2 Creation of Subroutine argumnets only when necessary
+=head2 Subroutine arguments created only when they're modified
-In Perl 5.004, array and hash elements used as subroutine parameters
-are brought into existence if they did not already exist only if the
-argument is actually assigned to. In Perl versions 5.002 and 5.003,
-such arguments were always brought into existence. Versions before
-5.002 never brought such arguments into existence.
-For example, after
+In Perl 5.004, nonexistent array and hash elements used as subroutine
+parameters are brought into existence only if they are actually
+assigned to (via C<@_>).
+
+Earlier versions of Perl vary in their handling of such arguments.
+Perl versions 5.002 and 5.003 always brought them into existence.
+Perl versions 5.000, 5.001, and 5.002 brought them into existence only
+if they were not the first argument (which was almost certainly a
+bug). Earlier versions of Perl never brought them into existence.
+
+For example, given this code:
undef @a; undef %a;
- sub foo { print $_[0] };
- sub bar { $_[0]++ };
- foo($a[2]);
- bar($a{b});
+ sub show { print $_[0] };
+ sub change { $_[0]++ };
+ show($a[2]);
+ change($a{b});
-$a{b} exists but $a[2] does not in Perl5.004; in Perl 5.002 and 5.003
-both would exist.
+After this code executes in Perl 5.004, $a{b} exists but $a[2] does
+not. In Perl 5.002 and 5.003, both $a{b} and $a[2] would have existed
+(but $a[2]'s value would have been undefined).
=head2 Fixed Parsing of $$<digit>, &$<digit>, etc.
@@ -273,6 +279,13 @@ string in some way. This change makes it practical to chain C<m//g>
matches together in conjunction with ordinary matches using the C<\G>
zero-width assertion. See L<perlop> and L<perlre>.
+=item C<m//x> ignores whitespace before ?*+{}
+
+The C<m//x> construct has always been intended to ignore all unescaped
+whitespace. However, before Perl 5.004, whitespace had the effect of
+esacping repeat modifier like "*" or "?". For example, C</a *b/x> was
+(mis)interpreted as C</a\*b/x>. This bug has been fixed in 5.004.
+
=item nested C<sub{}> closures work now
Prior to the 5.004 release, nested anonymous functions didn't work
diff --git a/pod/perldiag.pod b/pod/perldiag.pod
index cd48335074..90b811f691 100644
--- a/pod/perldiag.pod
+++ b/pod/perldiag.pod
@@ -1875,10 +1875,10 @@ last argument of the previous construct, for example:
open FOO || die;
-=item Prototype mismatch: (%s) vs (%s)
+=item Prototype mismatch: %s vs %s
-(S) The subroutine being defined had a pre-declared (forward) declaration
-with a different function prototype.
+(S) The subroutine being declared or defined had previously been declared
+or defined with a different function prototype.
=item Read on closed filehandle E<lt>%sE<gt>
diff --git a/pod/perlfaq.pod b/pod/perlfaq.pod
index 8db316c24b..8cbb343e7b 100644
--- a/pod/perlfaq.pod
+++ b/pod/perlfaq.pod
@@ -1,6 +1,6 @@
=head1 NAME
-perlfaq - frequently asked questions about Perl ($Date: 1997/03/17 22:17:56 $)
+perlfaq - frequently asked questions about Perl ($Date: 1997/03/25 18:20:48 $)
=head1 DESCRIPTION
@@ -124,6 +124,23 @@ in respect of this information or its use.
=over 4
+=item 25/March/97
+
+Added more info to the binary distribution section of L<perlfaq2>.
+Added Net::Telnet to L<perlfaq6>. Fixed typos in L<perlfaq8>. Added
+mail sending example to L<perlfaq9>. Added Merlyn's columns to
+L<perlfaq2>.
+
+=item 18/March/97
+
+Added the DATE to the NAME section, indicating which sections have
+changed.
+
+Mentioned SIGPIPE and L<perlipc> in the forking open answer in
+L<perlfaq8>.
+
+Fixed description of a regular expression in L<perlfaq4>.
+
=item 17/March/97 Version
Various typos fixed throughout.
diff --git a/pod/perlfaq1.pod b/pod/perlfaq1.pod
index 2510a4b1f1..ad7c68a124 100644
--- a/pod/perlfaq1.pod
+++ b/pod/perlfaq1.pod
@@ -1,6 +1,6 @@
=head1 NAME
-perlfaq1 - General Questions About Perl ($Revision: 1.10 $)
+perlfaq1 - General Questions About Perl ($Revision: 1.11 $, $Date: 1997/03/19 17:23:09 $)
=head1 DESCRIPTION
diff --git a/pod/perlfaq2.pod b/pod/perlfaq2.pod
index b4c3e9f1dc..7fa34d9c27 100644
--- a/pod/perlfaq2.pod
+++ b/pod/perlfaq2.pod
@@ -1,6 +1,6 @@
=head1 NAME
-perlfaq2 - Obtaining and Learning about Perl ($Revision: 1.13 $)
+perlfaq2 - Obtaining and Learning about Perl ($Revision: 1.15 $, $Date: 1997/03/25 18:15:48 $)
=head1 DESCRIPTION
@@ -39,6 +39,21 @@ grab a binary version of gcc from the net and use that to compile perl
with. CPAN only has binaries for systems that are terribly hard to
get free compilers for, not for Unix systems.
+Your first stop should be http://www.perl.com/CPAN/ports to see what
+information is already available. A simple installation guide for
+MS-DOS is available at http://www.cs.ruu.nl/~piet/perl5dos.html , and
+similarly for Windows 3.1 at http://www.cs.ruu.nl/~piet/perlwin3.html
+.
+
+=head2 I don't have a C compiler on my system. How can I compile perl?
+
+Since you don't have a C compiler, you're doomed and your vendor
+should be sacrificed to the Sun gods. But that doesn't help you.
+
+What you need to do is get a binary version of gcc for your system
+first. Consult the Usenet FAQs for your operating system for
+information on where to get such a binary version.
+
=head2 I copied the Perl binary from one machine to another, but scripts don't work.
That's probably because you forgot libraries, or library paths differ.
@@ -55,6 +70,9 @@ If this command lists any paths which don't exist on your system, then you
may need to move the appropriate libraries to these locations, or create
symlinks, aliases, or shortcuts appropriately.
+You might also want to check out L<perlfaq8/"How do I keep my own
+module/library directory?">.
+
=head2 I grabbed the sources and tried to compile but gdbm/dynamic loading/malloc/linking/... failed. How do I make it work?
Read the F<INSTALL> file, which is part of the source distribution.
@@ -222,15 +240,18 @@ It is published (on paper, not online) quarterly by Jon Orwant
(orwant@tpj.com), editor. Subscription information is at http://tpj.com
or via email to subscriptions@tpj.com.
-Beyond this, two other magazines that frequently carry high-quality articles
-on Perl are Web Techniques (see http://www.webtechniques.com/) and
-Unix Review (http://www.unixreview.com/).
+Beyond this, two other magazines that frequently carry high-quality
+articles on Perl are Web Techniques (see
+http://www.webtechniques.com/) and Unix Review
+(http://www.unixreview.com/). Randal Schwartz's Web Technique's
+columns are available on the web at
+http://www.stonehenge.com/merlyn/WebTechniques/ .
=head2 Perl on the Net: FTP and WWW Access
To get the best (and possibly cheapest) performance, pick a site from
the list below and use it to grab the complete list of mirror sites.
->From there you can find the quickest site for you. Remember, the
+From there you can find the quickest site for you. Remember, the
following list is I<not> the complete list of CPAN mirrors.
http://www.perl.com/CPAN (redirects to another mirror)
diff --git a/pod/perlfaq3.pod b/pod/perlfaq3.pod
index 121743ddbf..64dec98234 100644
--- a/pod/perlfaq3.pod
+++ b/pod/perlfaq3.pod
@@ -1,6 +1,6 @@
=head1 NAME
-perlfaq3 - Programming Tools ($Revision: 1.19 $)
+perlfaq3 - Programming Tools ($Revision: 1.20 $, $Date: 1997/03/19 17:23:43 $)
=head1 DESCRIPTION
diff --git a/pod/perlfaq4.pod b/pod/perlfaq4.pod
index 1c1edfa467..34b7e5b0f3 100644
--- a/pod/perlfaq4.pod
+++ b/pod/perlfaq4.pod
@@ -1,6 +1,6 @@
=head1 NAME
-perlfaq4 - Data Manipulation ($Revision: 1.15 $)
+perlfaq4 - Data Manipulation ($Revision: 1.17 $, $Date: 1997/03/25 18:16:24 $)
=head1 DESCRIPTION
@@ -254,7 +254,7 @@ Although those with a regexp kind of thought process will likely prefer
You have to keep track. For example, let's say you want
to change the fifth occurrence of "whoever" or "whomever"
-into "whosoever", case insensitively.
+into "whosoever" or "whomsoever", case insensitively.
$count = 0;
s{((whom?)ever)}{
@@ -286,12 +286,15 @@ integers:
=head2 How do I capitalize all the words on one line?
To make the first letter of each word upper case:
+
$line =~ s/\b(\w)/\U$1/g;
To make the whole line upper case:
+
$line = uc($line);
To force each word to be lower case, with the first letter upper case:
+
$line =~ s/(\w+)/\u\L$1/g;
=head2 How can I split a [character] delimited string except when inside
@@ -770,7 +773,7 @@ find one of the associated keys. This may or may not worry you.
If you mean how many keys, then all you have to do is
take the scalar sense of the keys() function:
- $num_keys = scalar keys %hash;
+ $num_keys = scalar keys %hash;
In void context it just resets the iterator, which is faster
for tied hashes.
diff --git a/pod/perlfaq5.pod b/pod/perlfaq5.pod
index c36576ff7f..9c5e842793 100644
--- a/pod/perlfaq5.pod
+++ b/pod/perlfaq5.pod
@@ -1,6 +1,6 @@
=head1 NAME
-perlfaq5 - Files and Formats ($Revision: 1.19 $)
+perlfaq5 - Files and Formats ($Revision: 1.20 $, $Date: 1997/03/19 17:24:51 $)
=head1 DESCRIPTION
diff --git a/pod/perlfaq6.pod b/pod/perlfaq6.pod
index 589d89e495..0adebd72fe 100644
--- a/pod/perlfaq6.pod
+++ b/pod/perlfaq6.pod
@@ -1,6 +1,6 @@
=head1 NAME
-perlfaq6 - Regexps ($Revision: 1.14 $)
+perlfaq6 - Regexps ($Revision: 1.16 $, $Date: 1997/03/25 18:16:56 $)
=head1 DESCRIPTION
@@ -143,6 +143,26 @@ Actually, you could do this if you don't mind reading the whole file into
undef $/;
@records = split /your_pattern/, <FH>;
+The Net::Telnet module (available from CPAN) has the capability to
+wait for a pattern in the input stream, or timeout if it doesn't
+appear within a certain time.
+
+ ## Create a file with three lines.
+ open FH, ">file";
+ print FH "The first line\nThe second line\nThe third line\n";
+ close FH;
+
+ ## Get a read/write filehandle to it.
+ $fh = new FileHandle "+<file";
+
+ ## Attach it to a "stream" object.
+ use Net::Telnet;
+ $file = new Net::Telnet (-fhopen => $fh);
+
+ ## Search for the second line and print out the third.
+ $file->waitfor('/second line\n/');
+ print $file->getline;
+
=head2 How do I substitute case insensitively on the LHS, but preserving case on the RHS?
It depends on what you mean by "preserving case". The following
@@ -542,7 +562,7 @@ This is a big problem.
Here are a few ways, all painful, to deal with it:
- $martian =~ s/([A-Z][A-Z])/ $1 /g; # Make sure adjacent ``maritan'' bytes
+ $martian =~ s/([A-Z][A-Z])/ $1 /g; # Make sure adjacent ``martian'' bytes
# are no longer adjacent.
print "found GX!\n" if $martian =~ /GX/;
diff --git a/pod/perlfaq7.pod b/pod/perlfaq7.pod
index 14bfc678fc..54380e62a4 100644
--- a/pod/perlfaq7.pod
+++ b/pod/perlfaq7.pod
@@ -1,6 +1,6 @@
=head1 NAME
-perlfaq7 - Perl Language Issues ($Revision: 1.15 $)
+perlfaq7 - Perl Language Issues ($Revision: 1.16 $, $Date: 1997/03/19 17:25:23 $)
=head1 DESCRIPTION
@@ -169,7 +169,7 @@ own module. Make sure to change the names appropriately.
# if using RCS/CVS, this next line may be preferred,
# but beware two-digit versions.
- $VERSION = do{my@r=q$Revision: 1.15 $=~/\d+/g;sprintf '%d.'.'%02d'x$#r,@r};
+ $VERSION = do{my@r=q$Revision: 1.16 $=~/\d+/g;sprintf '%d.'.'%02d'x$#r,@r};
@ISA = qw(Exporter);
@EXPORT = qw(&func1 &func2 &func3);
diff --git a/pod/perlfaq8.pod b/pod/perlfaq8.pod
index 6ad5c15750..7250afbca5 100644
--- a/pod/perlfaq8.pod
+++ b/pod/perlfaq8.pod
@@ -1,6 +1,6 @@
=head1 NAME
-perlfaq8 - System Interaction ($Revision: 1.15 $)
+perlfaq8 - System Interaction ($Revision: 1.17 $, $Date: 1997/03/25 18:17:12 $)
=head1 DESCRIPTION
@@ -379,6 +379,17 @@ easy-to-use approach that internally uses pipe(), fork(), and exec()
to do the job. Make sure you read the deadlock warnings in its
documentation, though (see L<IPC::Open2>).
+=head2 Why can't I get the output of a command with system()?
+
+You're confusing the purpose of system() and backticks (''). system()
+runs a command and returns exit status information (as a 16 bit value
+-- the low 8 bits are the signal the process died from, if any, and
+the high 8 bits are the actual exit value). Backticks ('') run a
+command and return what it sent to STDOUT.
+
+ $status = system("mail-users");
+ $output = `ls`;
+
=head2 How can I capture STDERR from an external command?
There are three basic ways of running external commands:
@@ -437,7 +448,9 @@ process ID of the child. The child exec()s the command to be piped
to/from. The parent can't know whether the exec() was successful or
not - all it can return is whether the fork() succeeded or not. To
find out if the command succeeded, you have to catch SIGCHLD and
-wait() to get the exit status.
+wait() to get the exit status. You should also catch SIGPIPE if
+you're writing to the child -- you may not have found out the exec()
+failed by the time you write. This is documented in L<perlipc>.
On systems that follow the spawn() paradigm, open() I<might> do what
you expect - unless perl uses a shell to start your command. In this
diff --git a/pod/perlfaq9.pod b/pod/perlfaq9.pod
index e62dac4bd3..2c9a3e063b 100644
--- a/pod/perlfaq9.pod
+++ b/pod/perlfaq9.pod
@@ -1,6 +1,6 @@
=head1 NAME
-perlfaq9 - Networking ($Revision: 1.13 $)
+perlfaq9 - Networking ($Revision: 1.15 $, $Date: 1997/03/25 18:17:20 $)
=head1 DESCRIPTION
@@ -229,6 +229,23 @@ not UNIX-centric. Reading mail: use the Mail::Folder module from CPAN
(part of the MailFolder package) or the Mail::Internet module from
CPAN (also part of the MailTools package).
+ # sending mail
+ use Mail::Internet;
+ use Mail::Header;
+ # say which mail host to use
+ $ENV{SMTPHOSTS} = 'mail.frii.com';
+ # create headers
+ $header = new Mail::Header;
+ $header->add('From', 'gnat@frii.com');
+ $header->add('Subject', 'Testing');
+ $header->add('To', 'gnat@frii.com');
+ # create body
+ $body = 'This is a test, ignore';
+ # create mail object
+ $mail = new Mail::Internet(undef, Header => $header, Body => \[$body]);
+ # send it
+ $mail->smtpsend or die;
+
=head2 How do I find out my hostname/domainname/IP address?
A lot of code has historically cavalierly called the C<`hostname`>
diff --git a/pod/perlsub.pod b/pod/perlsub.pod
index 2710774f20..6e2309dfb2 100644
--- a/pod/perlsub.pod
+++ b/pod/perlsub.pod
@@ -48,14 +48,14 @@ there's really no difference from the language's perspective.)
Any arguments passed to the routine come in as the array @_. Thus if you
called a function with two arguments, those would be stored in C<$_[0]>
and C<$_[1]>. The array @_ is a local array, but its elements are
-aliases for the actual scalar parameters. In particular, if an element
+aliases for the actual scalar parameters. In particular, if an element
C<$_[0]> is updated, the corresponding argument is updated (or an error
-occurs if it is not updatable). If an argument is an array or
-hash element which does not exist, the element is created if it is
-assigned to or if a reference to it is taken. (Some earlier versions
-of Perl created the element whether or not it was assigned to.)
-Note that assigning to the whole array @_ removes the aliasing,
-and does not update any arguments.
+occurs if it is not updatable). If an argument is an array or hash
+element which did not exist when the function was called, that element is
+created only when (and if) it is modified or if a reference to it is
+taken. (Some earlier versions of Perl created the element whether or not
+it was assigned to.) Note that assigning to the whole array @_ removes
+the aliasing, and does not update any arguments.
The return value of the subroutine is the value of the last expression
evaluated. Alternatively, a return statement may be used to specify the
diff --git a/pod/perltoc.pod b/pod/perltoc.pod
index 4e412bd7b8..baef9320aa 100644
--- a/pod/perltoc.pod
+++ b/pod/perltoc.pod
@@ -38,8 +38,8 @@ expression enhancements, Innumerable Unbundled Modules, Compilability
=item NOTES
-=head2 perlfaq - frequently asked questions about Perl ($Date: 1997/03/17
-22:17:56 $)
+=head2 perlfaq - frequently asked questions about Perl ($Date: 1997/03/25
+18:20:48 $)
=item DESCRIPTION
@@ -76,9 +76,10 @@ authors
=item Changes
-17/March/97 Version, Initial Release: 11/March/97
+25/March/97, 18/March/97, 17/March/97 Version, Initial Release: 11/March/97
-=head2 perlfaq1 - General Questions About Perl ($Revision: 1.10 $)
+=head2 perlfaq1 - General Questions About Perl ($Revision: 1.11 $, $Date:
+1997/03/19 17:23:09 $)
=item DESCRIPTION
@@ -118,7 +119,8 @@ Scheme, or Tcl?
=item AUTHOR AND COPYRIGHT
-=head2 perlfaq2 - Obtaining and Learning about Perl ($Revision: 1.13 $)
+=head2 perlfaq2 - Obtaining and Learning about Perl ($Revision: 1.15 $,
+$Date: 1997/03/25 18:15:48 $)
=item DESCRIPTION
@@ -128,6 +130,8 @@ Scheme, or Tcl?
=item How can I get a binary version of Perl?
+=item I don't have a C compiler on my system. How can I compile perl?
+
=item I copied the Perl binary from one machine to another, but scripts
don't work.
@@ -171,7 +175,8 @@ MacPerl, Perl5-Porters, NTPerl, Perl-Packrats
=item AUTHOR AND COPYRIGHT
-=head2 perlfaq3 - Programming Tools ($Revision: 1.19 $)
+=head2 perlfaq3 - Programming Tools ($Revision: 1.20 $, $Date: 1997/03/19
+17:23:43 $)
=item DESCRIPTION
@@ -245,7 +250,8 @@ mean?
=item AUTHOR AND COPYRIGHT
-=head2 perlfaq4 - Data Manipulation ($Revision: 1.15 $)
+=head2 perlfaq4 - Data Manipulation ($Revision: 1.17 $, $Date: 1997/03/25
+18:16:24 $)
=item DESCRIPTION
@@ -435,7 +441,8 @@ or array of hashes or arrays?
=item AUTHOR AND COPYRIGHT
-=head2 perlfaq5 - Files and Formats ($Revision: 1.19 $)
+=head2 perlfaq5 - Files and Formats ($Revision: 1.20 $, $Date: 1997/03/19
+17:24:51 $)
=item DESCRIPTION
@@ -518,7 +525,7 @@ protected files? Isn't this a bug in Perl?
=item AUTHOR AND COPYRIGHT
-=head2 perlfaq6 - Regexps ($Revision: 1.14 $)
+=head2 perlfaq6 - Regexps ($Revision: 1.16 $, $Date: 1997/03/25 18:16:56 $)
=item DESCRIPTION
@@ -579,7 +586,8 @@ file?
=item AUTHOR AND COPYRIGHT
-=head2 perlfaq7 - Perl Language Issues ($Revision: 1.15 $)
+=head2 perlfaq7 - Perl Language Issues ($Revision: 1.16 $, $Date:
+1997/03/19 17:25:23 $)
=item DESCRIPTION
@@ -645,7 +653,8 @@ is in scope?
=item AUTHOR AND COPYRIGHT
-=head2 perlfaq8 - System Interaction ($Revision: 1.15 $)
+=head2 perlfaq8 - System Interaction ($Revision: 1.17 $, $Date: 1997/03/25
+18:17:12 $)
=item DESCRIPTION
@@ -694,6 +703,8 @@ does the error message "Protocol not supported" mean?
=item How can I open a pipe both to and from a command?
+=item Why can't I get the output of a command with system()?
+
=item How can I capture STDERR from an external command?
=item Why doesn't open() return an error when a pipe open fails?
@@ -749,7 +760,8 @@ complete?
=item AUTHOR AND COPYRIGHT
-=head2 perlfaq9 - Networking ($Revision: 1.13 $)
+=head2 perlfaq9 - Networking ($Revision: 1.15 $, $Date: 1997/03/25 18:17:20
+$)
=item DESCRIPTION
@@ -813,7 +825,7 @@ file on another machine?
=item Compilation Option: Binary Compatibility With 5.003
-=item No Autovivification of Subroutine Parameters
+=item Subroutine arguments created only when they're modified
=item Fixed Parsing of $$<digit>, &$<digit>, etc.
@@ -838,8 +850,8 @@ $^E, $^H, $^M
delete on slices, flock, printf and sprintf, keys as an lvalue, my() in
Control Structures, unpack() and pack(), use VERSION, use Module VERSION
LIST, prototype(FUNCTION), srand, $_ as Default, C<m//g> does not trigger a
-pos() reset on failure, nested C<sub{}> closures work now, formats work
-right on changing lexicals
+pos() reset on failure, C<m//x> ignores whitespace before ?*+{}, nested
+C<sub{}> closures work now, formats work right on changing lexicals
=item New Built-in Methods
@@ -2296,38 +2308,34 @@ G_NOARGS, G_SCALAR, gv_fetchmeth, gv_fetchmethod, gv_stashpv, gv_stashsv,
GvSV, HEf_SVKEY, HeHASH, HeKEY, HeKLEN, HePV, HeSVKEY, HeSVKEY_force,
HeSVKEY_set, HeVAL, hv_clear, hv_delayfree_ent, hv_delete, hv_delete_ent,
hv_exists, hv_exists_ent, hv_fetch, hv_fetch_ent, hv_free_ent, hv_iterinit,
-hv_iterkey, hv_iterkeysv
-Returns the key as an C<SV*> from the current position of the hash
-iterator. The return value will always be a mortal copy of the
-key. Also see C<hv_iterinit>, hv_iternext, hv_iternextsv, hv_iterval,
-hv_magic, HvNAME, hv_store, hv_store_ent, hv_undef, isALNUM, isALPHA,
-isDIGIT, isLOWER, isSPACE, isUPPER, items, ix, LEAVE, MARK, mg_clear,
-mg_copy, mg_find, mg_free, mg_get, mg_len, mg_magical, mg_set, Move, na,
-New, Newc, Newz, newAV, newHV, newRV_inc, newRV_noinc, newSV, newSViv,
-newSVnv, newSVpv, newSVrv, newSVsv, newXS, newXSproto, Nullav, Nullch,
-Nullcv, Nullhv, Nullsv, ORIGMARK, perl_alloc, perl_call_argv,
-perl_call_method, perl_call_pv, perl_call_sv, perl_construct,
-perl_destruct, perl_eval_sv, perl_free, perl_get_av, perl_get_cv,
-perl_get_hv, perl_get_sv, perl_parse, perl_require_pv, perl_run, POPi,
-POPl, POPp, POPn, POPs, PUSHMARK, PUSHi, PUSHn, PUSHp, PUSHs, PUTBACK,
-Renew, Renewc, RETVAL, safefree, safemalloc, saferealloc, savepv, savepvn,
-SAVETMPS, SP, SPAGAIN, ST, strEQ, strGE, strGT, strLE, strLT, strNE,
-strnEQ, strnNE, sv_2mortal, sv_bless, sv_catpv, sv_catpvn, sv_catsv,
-sv_cmp, sv_cmp, SvCUR, SvCUR_set, sv_dec, sv_dec, SvEND, sv_eq, SvGROW,
-sv_grow, sv_inc, SvIOK, SvIOK_off, SvIOK_on, SvIOK_only, SvIOK_only,
-SvIOKp, sv_isa, SvIV, sv_isobject, SvIVX, SvLEN, sv_len, sv_len, sv_magic,
-sv_mortalcopy, SvOK, sv_newmortal, sv_no, SvNIOK, SvNIOK_off, SvNIOKp,
-SvNOK, SvNOK_off, SvNOK_on, SvNOK_only, SvNOK_only, SvNOKp, SvNV, SvNVX,
-SvPOK, SvPOK_off, SvPOK_on, SvPOK_only, SvPOK_only, SvPOKp, SvPV, SvPVX,
-SvREFCNT, SvREFCNT_dec, SvREFCNT_inc, SvROK, SvROK_off, SvROK_on, SvRV,
-sv_setiv, sv_setnv, sv_setpv, sv_setpvn, sv_setref_iv, sv_setref_nv,
-sv_setref_pv, sv_setref_pvn, sv_setsv, SvSTASH, SVt_IV, SVt_PV, SVt_PVAV,
-SVt_PVCV, SVt_PVHV, SVt_PVMG, SVt_NV, SvTRUE, SvTYPE, svtype, SvUPGRADE,
-sv_upgrade, sv_undef, sv_unref, sv_usepvn, sv_yes, THIS, toLOWER, toUPPER,
-warn, XPUSHi, XPUSHn, XPUSHp, XPUSHs, XS, XSRETURN, XSRETURN_EMPTY,
-XSRETURN_IV, XSRETURN_NO, XSRETURN_NV, XSRETURN_PV, XSRETURN_UNDEF,
-XSRETURN_YES, XST_mIV, XST_mNV, XST_mNO, XST_mPV, XST_mUNDEF, XST_mYES,
-XS_VERSION, XS_VERSION_BOOTCHECK, Zero
+hv_iterkey, hv_iterkeysv, hv_iternext, hv_iternextsv, hv_iterval, hv_magic,
+HvNAME, hv_store, hv_store_ent, hv_undef, isALNUM, isALPHA, isDIGIT,
+isLOWER, isSPACE, isUPPER, items, ix, LEAVE, MARK, mg_clear, mg_copy,
+mg_find, mg_free, mg_get, mg_len, mg_magical, mg_set, Move, na, New, Newc,
+Newz, newAV, newHV, newRV_inc, newRV_noinc, newSV, newSViv, newSVnv,
+newSVpv, newSVrv, newSVsv, newXS, newXSproto, Nullav, Nullch, Nullcv,
+Nullhv, Nullsv, ORIGMARK, perl_alloc, perl_call_argv, perl_call_method,
+perl_call_pv, perl_call_sv, perl_construct, perl_destruct, perl_eval_sv,
+perl_free, perl_get_av, perl_get_cv, perl_get_hv, perl_get_sv, perl_parse,
+perl_require_pv, perl_run, POPi, POPl, POPp, POPn, POPs, PUSHMARK, PUSHi,
+PUSHn, PUSHp, PUSHs, PUTBACK, Renew, Renewc, RETVAL, safefree, safemalloc,
+saferealloc, savepv, savepvn, SAVETMPS, SP, SPAGAIN, ST, strEQ, strGE,
+strGT, strLE, strLT, strNE, strnEQ, strnNE, sv_2mortal, sv_bless, sv_catpv,
+sv_catpvn, sv_catsv, sv_cmp, sv_cmp, SvCUR, SvCUR_set, sv_dec, sv_dec,
+SvEND, sv_eq, SvGROW, sv_grow, sv_inc, SvIOK, SvIOK_off, SvIOK_on,
+SvIOK_only, SvIOK_only, SvIOKp, sv_isa, SvIV, sv_isobject, SvIVX, SvLEN,
+sv_len, sv_len, sv_magic, sv_mortalcopy, SvOK, sv_newmortal, sv_no, SvNIOK,
+SvNIOK_off, SvNIOKp, SvNOK, SvNOK_off, SvNOK_on, SvNOK_only, SvNOK_only,
+SvNOKp, SvNV, SvNVX, SvPOK, SvPOK_off, SvPOK_on, SvPOK_only, SvPOK_only,
+SvPOKp, SvPV, SvPVX, SvREFCNT, SvREFCNT_dec, SvREFCNT_inc, SvROK,
+SvROK_off, SvROK_on, SvRV, sv_setiv, sv_setnv, sv_setpv, sv_setpvn,
+sv_setref_iv, sv_setref_nv, sv_setref_pv, sv_setref_pvn, sv_setsv, SvSTASH,
+SVt_IV, SVt_PV, SVt_PVAV, SVt_PVCV, SVt_PVHV, SVt_PVMG, SVt_NV, SvTRUE,
+SvTYPE, svtype, SvUPGRADE, sv_upgrade, sv_undef, sv_unref, sv_usepvn,
+sv_yes, THIS, toLOWER, toUPPER, warn, XPUSHi, XPUSHn, XPUSHp, XPUSHs, XS,
+XSRETURN, XSRETURN_EMPTY, XSRETURN_IV, XSRETURN_NO, XSRETURN_NV,
+XSRETURN_PV, XSRETURN_UNDEF, XSRETURN_YES, XST_mIV, XST_mNV, XST_mNO,
+XST_mPV, XST_mUNDEF, XST_mYES, XS_VERSION, XS_VERSION_BOOTCHECK, Zero
=item EDITOR
@@ -4207,8 +4215,7 @@ setlogmask $mask_priority, closelog
=item DESCRIPTION
-E<lt>tabE<gt>Attempts word completion.
-Cannot be changed, ^D, ^U, E<lt>delE<gt>, E<lt>bsE<gt>
+E<lt>tabE<gt>, ^D, ^U, E<lt>delE<gt>, E<lt>bsE<gt>
=item DIAGNOSTICS
@@ -4401,7 +4408,8 @@ function
=item DESCRIPTION
-isa ( TYPE ), can ( METHOD ), VERSION ( [ REQUIRE ] ), isa ( REF, TYPE )
+isa ( TYPE ), can ( METHOD ), VERSION ( [ REQUIRE ] ), isa ( VAL, TYPE ),
+can ( VAL, METHOD )
=head2 User::grent - by-name interface to Perl's built-in getgr*()
functions
diff --git a/pp_sys.c b/pp_sys.c
index f99bf29ab3..998d271758 100644
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -78,7 +78,11 @@ extern int h_errno;
#endif
#ifdef I_UTIME
-#include <utime.h>
+# ifdef WIN32
+# include <sys/utime.h>
+# else
+# include <utime.h>
+# endif
#endif
#ifdef I_FCNTL
#include <fcntl.h>
diff --git a/proto.h b/proto.h
index 4f8318265d..671c085f5d 100644
--- a/proto.h
+++ b/proto.h
@@ -45,9 +45,10 @@ OP* convert _((I32 optype, I32 flags, OP* op));
char* cpytill _((char* to, char* from, char* fromend, int delim, I32* retlen));
void croak _((const char* pat,...))
__attribute__((format(printf,1,2),noreturn));
+void cv_ckproto _((CV* cv, GV* gv, char* p));
CV* cv_clone _((CV* proto));
-void cv_undef _((CV* cv));
SV* cv_const_sv _((CV* cv));
+void cv_undef _((CV* cv));
#ifdef DEBUGGING
void cx_dump _((CONTEXT* cs));
#endif
diff --git a/sv.c b/sv.c
index 855f608b9c..f8b1904802 100644
--- a/sv.c
+++ b/sv.c
@@ -1261,8 +1261,11 @@ register SV *sv;
}
if (SvPOKp(sv) && SvLEN(sv))
return asIV(sv);
- if (!SvROK(sv))
+ if (!SvROK(sv)) {
+ if (dowarn && !localizing && !(SvFLAGS(sv) & SVs_PADTMP))
+ warn(warn_uninit);
return 0;
+ }
}
if (SvTHINKFIRST(sv)) {
if (SvROK(sv)) {
@@ -1333,8 +1336,11 @@ register SV *sv;
return U_V(SvNVX(sv));
if (SvPOKp(sv) && SvLEN(sv))
return asUV(sv);
- if (!SvROK(sv))
+ if (!SvROK(sv)) {
+ if (dowarn && !localizing && !(SvFLAGS(sv) & SVs_PADTMP))
+ warn(warn_uninit);
return 0;
+ }
}
if (SvTHINKFIRST(sv)) {
if (SvROK(sv)) {
@@ -1404,6 +1410,8 @@ register SV *sv;
if (SvIOKp(sv))
return (double)SvIVX(sv);
if (!SvROK(sv)) {
+ if (dowarn && !localizing && !(SvFLAGS(sv) & SVs_PADTMP))
+ warn(warn_uninit);
return 0;
}
}
@@ -1605,6 +1613,8 @@ STRLEN *lp;
goto tokensave;
}
if (!SvROK(sv)) {
+ if (dowarn && !localizing && !(SvFLAGS(sv) & SVs_PADTMP))
+ warn(warn_uninit);
*lp = 0;
return "";
}
@@ -1985,13 +1995,8 @@ register SV *sstr;
warn("Subroutine %s redefined",
GvENAME((GV*)dstr));
}
- if (SvPOK(cv) != SvPOK(sref)
- || (SvPOK(cv)
- && strNE(SvPVX(cv), SvPVX(sref)))) {
- warn("Prototype mismatch: (%s) vs (%s)",
- SvPOK(cv) ? SvPVX(cv) : "none",
- SvPOK(sref) ? SvPVX(sref) : "none");
- }
+ cv_ckproto(cv, (GV*)dstr,
+ SvPOK(sref) ? SvPVX(sref) : Nullch);
}
GvCV(dstr) = (CV*)sref;
GvCVGEN(dstr) = 0; /* Switch off cacheness. */
diff --git a/t/comp/multiline.t b/t/comp/multiline.t
index 0e022e9992..fc1eedc8d2 100755
--- a/t/comp/multiline.t
+++ b/t/comp/multiline.t
@@ -32,7 +32,7 @@ if ($z eq $y) {print "ok 2\n";} else {print "not ok 2\n";}
if ($count == 3) {print "ok 3\n";} else {print "not ok 3\n";}
-$_ = `cat Comp.try`;
+$_ = ($^O eq 'MSWin32') ? `type Comp.try` : `cat Comp.try`;
if (/.*\n.*\n.*\n$/) {print "ok 4\n";} else {print "not ok 4\n";}
diff --git a/t/comp/redef.t b/t/comp/redef.t
index ad28bfd5e2..07e978bb86 100755
--- a/t/comp/redef.t
+++ b/t/comp/redef.t
@@ -13,6 +13,8 @@ sub ok ($$) {
print "1..18\n";
+my $NEWPROTO = 'Prototype mismatch:';
+
sub sub0 { 1 }
sub sub0 { 2 }
@@ -21,19 +23,19 @@ ok 1, $warn =~ s/Subroutine sub0 redefined[^\n]+\n//s;
sub sub1 { 1 }
sub sub1 () { 2 }
-ok 2, $warn =~ s/Prototype mismatch: \Q(none) vs ()\E[^\n]+\n//s;
+ok 2, $warn =~ s/$NEWPROTO \Qsub main::sub1 vs ()\E[^\n]+\n//s;
ok 3, $warn =~ s/Subroutine sub1 redefined[^\n]+\n//s;
sub sub2 { 1 }
sub sub2 ($) { 2 }
-ok 4, $warn =~ s/Prototype mismatch: \Q(none) vs ($)\E[^\n]+\n//s;
+ok 4, $warn =~ s/$NEWPROTO \Qsub main::sub2 vs ($)\E[^\n]+\n//s;
ok 5, $warn =~ s/Subroutine sub2 redefined[^\n]+\n//s;
sub sub3 () { 1 }
sub sub3 { 2 }
-ok 6, $warn =~ s/Prototype mismatch: \Q() vs (none)\E[^\n]+\n//s;
+ok 6, $warn =~ s/$NEWPROTO \Qsub main::sub3 () vs none\E[^\n]+\n//s;
ok 7, $warn =~ s/Constant subroutine sub3 redefined[^\n]+\n//s;
sub sub4 () { 1 }
@@ -44,19 +46,19 @@ ok 8, $warn =~ s/Constant subroutine sub4 redefined[^\n]+\n//s;
sub sub5 () { 1 }
sub sub5 ($) { 2 }
-ok 9, $warn =~ s/Prototype mismatch: \Q() vs ($)\E[^\n]+\n//s;
+ok 9, $warn =~ s/$NEWPROTO \Qsub main::sub5 () vs ($)\E[^\n]+\n//s;
ok 10, $warn =~ s/Constant subroutine sub5 redefined[^\n]+\n//s;
sub sub6 ($) { 1 }
sub sub6 { 2 }
-ok 11, $warn =~ s/Prototype mismatch: \Q($) vs (none)\E[^\n]+\n//s;
+ok 11, $warn =~ s/$NEWPROTO \Qsub main::sub6 ($) vs none\E[^\n]+\n//s;
ok 12, $warn =~ s/Subroutine sub6 redefined[^\n]+\n//s;
sub sub7 ($) { 1 }
sub sub7 () { 2 }
-ok 13, $warn =~ s/Prototype mismatch: \Q($) vs ()\E[^\n]+\n//s;
+ok 13, $warn =~ s/$NEWPROTO \Qsub main::sub7 ($) vs ()\E[^\n]+\n//s;
ok 14, $warn =~ s/Subroutine sub7 redefined[^\n]+\n//s;
sub sub8 ($) { 1 }
@@ -67,7 +69,7 @@ ok 15, $warn =~ s/Subroutine sub8 redefined[^\n]+\n//s;
sub sub9 ($@) { 1 }
sub sub9 ($) { 2 }
-ok 16, $warn =~ s/Prototype mismatch: \(\$\Q@) vs ($)\E[^\n]+\n//s;
+ok 16, $warn =~ s/$NEWPROTO sub main::sub9 \(\$\Q@) vs ($)\E[^\n]+\n//s;
ok 17, $warn =~ s/Subroutine sub9 redefined[^\n]+\n//s;
ok 18, $_ eq '';
diff --git a/t/lib/db-btree.t b/t/lib/db-btree.t
index 10f585304a..897548585b 100755
--- a/t/lib/db-btree.t
+++ b/t/lib/db-btree.t
@@ -46,17 +46,14 @@ umask(0);
# Check the interface to BTREEINFO
my $dbh = new DB_File::BTREEINFO ;
-ok(1, $dbh->{flags} == 0) ;
-ok(2, $dbh->{cachesize} == 0) ;
-ok(3, $dbh->{psize} == 0) ;
-ok(4, $dbh->{lorder} == 0) ;
-ok(5, $dbh->{minkeypage} == 0) ;
-ok(6, $dbh->{maxkeypage} == 0) ;
-{
- local $^W = 0 ;
- ok(7, $dbh->{compare} == undef) ;
- ok(8, $dbh->{prefix} == undef) ;
-}
+ok(1, ! defined $dbh->{flags}) ;
+ok(2, ! defined $dbh->{cachesize}) ;
+ok(3, ! defined $dbh->{psize}) ;
+ok(4, ! defined $dbh->{lorder}) ;
+ok(5, ! defined $dbh->{minkeypage}) ;
+ok(6, ! defined $dbh->{maxkeypage}) ;
+ok(7, ! defined $dbh->{compare}) ;
+ok(8, ! defined $dbh->{prefix}) ;
$dbh->{flags} = 3000 ;
ok(9, $dbh->{flags} == 3000) ;
diff --git a/t/lib/db-hash.t b/t/lib/db-hash.t
index 9ebd060e0a..9765e2ed86 100755
--- a/t/lib/db-hash.t
+++ b/t/lib/db-hash.t
@@ -32,14 +32,12 @@ umask(0);
my $dbh = new DB_File::HASHINFO ;
-ok(1, $dbh->{bsize} == 0) ;
-ok(2, $dbh->{ffactor} == 0) ;
-ok(3, $dbh->{nelem} == 0) ;
-ok(4, $dbh->{cachesize} == 0) ;
-$^W = 0 ;
-ok(5, $dbh->{hash} == undef) ;
-$^W = 1 ;
-ok(6, $dbh->{lorder} == 0) ;
+ok(1, ! defined $dbh->{bsize}) ;
+ok(2, ! defined $dbh->{ffactor}) ;
+ok(3, ! defined $dbh->{nelem}) ;
+ok(4, ! defined $dbh->{cachesize}) ;
+ok(5, ! defined $dbh->{hash}) ;
+ok(6, ! defined $dbh->{lorder}) ;
$dbh->{bsize} = 3000 ;
ok(7, $dbh->{bsize} == 3000 );
diff --git a/t/lib/db-recno.t b/t/lib/db-recno.t
index b5b4f9404d..5df5af1808 100755
--- a/t/lib/db-recno.t
+++ b/t/lib/db-recno.t
@@ -51,13 +51,13 @@ umask(0);
# Check the interface to RECNOINFO
my $dbh = new DB_File::RECNOINFO ;
-ok(1, $dbh->{bval} == 0 ) ;
-ok(2, $dbh->{cachesize} == 0) ;
-ok(3, $dbh->{psize} == 0) ;
-ok(4, $dbh->{flags} == 0) ;
-ok(5, $dbh->{lorder} == 0);
-ok(6, $dbh->{reclen} == 0);
-ok(7, $dbh->{bfname} eq "");
+ok(1, ! defined $dbh->{bval}) ;
+ok(2, ! defined $dbh->{cachesize}) ;
+ok(3, ! defined $dbh->{psize}) ;
+ok(4, ! defined $dbh->{flags}) ;
+ok(5, ! defined $dbh->{lorder}) ;
+ok(6, ! defined $dbh->{reclen}) ;
+ok(7, ! defined $dbh->{bfname}) ;
$dbh->{bval} = 3000 ;
ok(8, $dbh->{bval} == 3000 );
diff --git a/t/op/magic.t b/t/op/magic.t
index fa19716c14..b338d9600a 100755
--- a/t/op/magic.t
+++ b/t/op/magic.t
@@ -25,7 +25,7 @@ $PERL = ($Is_MSWin32 ? '.\perl' : './perl');
print "1..28\n";
eval '$ENV{"foo"} = "hi there";'; # check that ENV is inited inside eval
-if ($Is_MSWin32) { ok 1, `set foo` eq "foo=hi there\n"; }
+if ($Is_MSWin32) { ok 1, `cmd /x /c set foo` eq "foo=hi there\n"; }
else { ok 1, `echo \$foo` eq "hi there\n"; }
unlink 'ajslkdfpqjsjfk';
diff --git a/t/op/misc.t b/t/op/misc.t
index 02d32bd5c5..1a5afe544a 100755
--- a/t/op/misc.t
+++ b/t/op/misc.t
@@ -95,7 +95,8 @@ EXPECT
########
%@x=0;
EXPECT
-Can't coerce HASH to string in repeat at - line 1.
+Can't modify hash deref in repeat at - line 1, near "0;"
+Execution of - aborted due to compilation errors.
########
$_="foo";
printf(STDOUT "%s\n", $_);
diff --git a/t/op/mkdir.t b/t/op/mkdir.t
index 7db5ec91e4..1ffeaa1d66 100755
--- a/t/op/mkdir.t
+++ b/t/op/mkdir.t
@@ -4,7 +4,7 @@
print "1..7\n";
-`rm -rf blurfl`;
+$^O eq 'MSWin32' ? `cmd /x /c del /s /q blurfl` : `rm -rf blurfl`;
print (mkdir('blurfl',0777) ? "ok 1\n" : "not ok 1\n");
print (mkdir('blurfl',0777) ? "not ok 2\n" : "ok 2\n");
diff --git a/t/op/runlevel.t b/t/op/runlevel.t
index 2fc2174596..336b164f5d 100755
--- a/t/op/runlevel.t
+++ b/t/op/runlevel.t
@@ -17,6 +17,7 @@
chdir 't' if -d 't';
@INC = "../lib";
$Is_VMS = $^O eq 'VMS';
+$Is_MSWin32 = $^O eq 'MSWin32';
$ENV{PERL5LIB} = "../lib" unless $Is_VMS;
$|=1;
@@ -40,7 +41,9 @@ for (@prgs){
close TEST;
my $results = $Is_VMS ?
`MCR $^X "-I[-.lib]" $switch $tmpfile` :
- `sh -c './perl $switch $tmpfile' 2>&1`;
+ $Is_MSWin32 ?
+ `.\\perl -I../lib $switch $tmpfile 2>&1` :
+ `sh -c './perl $switch $tmpfile' 2>&1`;
my $status = $?;
$results =~ s/\n+$//;
# allow expected output to be written as if $prog is on STDIN
diff --git a/t/op/stat.t b/t/op/stat.t
index d7271522c2..0713007db5 100755
--- a/t/op/stat.t
+++ b/t/op/stat.t
@@ -34,7 +34,10 @@ close(FOO);
sleep 2;
-`rm -f Op.stat.tmp2; ln Op.stat.tmp Op.stat.tmp2; chmod 644 Op.stat.tmp`;
+if ($Is_MSWin32) { unlink "Op.stat.tmp2" }
+else {
+ `rm -f Op.stat.tmp2;ln Op.stat.tmp Op.stat.tmp2; chmod 644 Op.stat.tmp`;
+}
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
$blksize,$blocks) = stat('Op.stat.tmp');
@@ -52,19 +55,20 @@ else {
}
print "#4 :$mtime: != :$ctime:\n";
-`rm -f Op.stat.tmp`;
-`touch Op.stat.tmp`;
+unlink "Op.stat.tmp";
+if ($Is_MSWin32) { open F, '>Op.stat.tmp' and close F }
+else { `touch Op.stat.tmp` }
if (-z 'Op.stat.tmp') {print "ok 5\n";} else {print "not ok 5\n";}
if (! -s 'Op.stat.tmp') {print "ok 6\n";} else {print "not ok 6\n";}
-`echo hi >Op.stat.tmp`;
+$Is_MSWin32 ? `cmd /c echo hi > Op.stat.tmp` : `echo hi >Op.stat.tmp`;
if (! -z 'Op.stat.tmp') {print "ok 7\n";} else {print "not ok 7\n";}
if (-s 'Op.stat.tmp') {print "ok 8\n";} else {print "not ok 8\n";}
unlink 'Op.stat.tmp';
$olduid = $>; # can't test -r if uid == 0
-`echo hi >Op.stat.tmp`;
+$Is_MSWin32 ? `cmd /c echo hi > Op.stat.tmp` : `echo hi >Op.stat.tmp`;
chmod 0,'Op.stat.tmp';
eval '$> = 1;'; # so switch uid (may not be implemented)
if (!$> || ! -r 'Op.stat.tmp') {print "ok 9\n";} else {print "not ok 9\n";}
@@ -98,7 +102,7 @@ else {
if (-o 'Op.stat.tmp') {print "ok 26\n";} else {print "not ok 26\n";}
if (-e 'Op.stat.tmp') {print "ok 27\n";} else {print "not ok 27\n";}
-`rm -f Op.stat.tmp Op.stat.tmp2`;
+unlink 'Op.stat.tmp', 'Op.stat.tmp2';
if (! -e 'Op.stat.tmp') {print "ok 28\n";} else {print "not ok 28\n";}
if ($Is_MSWin32)
@@ -169,7 +173,7 @@ else {
}
if (! -t tty) {print "ok 38\n";} else {print "not ok 38\n";}
open(null,"/dev/null");
-if (! -t null || -e '/xenix' || -e '/MachTen')
+if (! -t null || -e '/xenix' || -e '/MachTen' || $Is_MSWin32)
{print "ok 39\n";} else {print "not ok 39\n";}
close(null);
if (-t) {print "ok 40\n";} else {print "not ok 40\n";}
diff --git a/t/op/write.t b/t/op/write.t
index 46ec8130b9..705fa7977b 100755
--- a/t/op/write.t
+++ b/t/op/write.t
@@ -4,6 +4,8 @@
print "1..5\n";
+my $CAT = ($^O eq 'MSWin32') ? 'type' : 'cat';
+
format OUT =
the quick brown @<<
$fox
@@ -42,7 +44,7 @@ the course
of huma...
now is the time for all good men to come to\n";
-if (`cat Op_write.tmp` eq $right)
+if (`$CAT Op_write.tmp` eq $right)
{ print "ok 1\n"; unlink 'Op_write.tmp'; }
else
{ print "not ok 1\n"; }
@@ -84,7 +86,7 @@ becomes
necessary
now is the time for all good men to come to\n";
-if (`cat Op_write.tmp` eq $right)
+if (`$CAT Op_write.tmp` eq $right)
{ print "ok 2\n"; unlink 'Op_write.tmp'; }
else
{ print "not ok 2\n"; }
@@ -128,7 +130,7 @@ becomes
necessary
now is the time for all good men to come to\n";
-if (`cat Op_write.tmp` eq $right)
+if (`$CAT Op_write.tmp` eq $right)
{ print "ok 3\n"; unlink 'Op_write.tmp'; }
else
{ print "not ok 3\n"; }
diff --git a/t/pragma/locale.t b/t/pragma/locale.t
index 05891fad77..d4b73b8f91 100755
--- a/t/pragma/locale.t
+++ b/t/pragma/locale.t
@@ -40,6 +40,7 @@ sub ok {
# even the default locale will taint under 'use locale'.
sub is_tainted { # hello, camel two.
+ local $^W; # no warnings 'undef'
my $dummy;
not eval { $dummy = join("", @_), kill 0; 1 }
}
diff --git a/vms/config.vms b/vms/config.vms
index 5a362c9d50..a189724240 100644
--- a/vms/config.vms
+++ b/vms/config.vms
@@ -76,7 +76,7 @@
* when Perl is built. Please do not change it by hand; make
* any changes to FndVers.Com instead.
*/
-#define ARCHLIB_EXP "/perl_root/lib/VMS_VAX/5_00394" /**/
+#define ARCHLIB_EXP "/perl_root/lib/VMS_VAX/5_00395" /**/
#define ARCHLIB ARCHLIB_EXP /*config-skip*/
/* ARCHNAME:
diff --git a/vms/descrip.mms b/vms/descrip.mms
index 06c523eb48..de8d07a090 100644
--- a/vms/descrip.mms
+++ b/vms/descrip.mms
@@ -65,7 +65,7 @@ OBJVAL = $(MMS$TARGET_NAME)$(O)
.endif
# Updated by fndvers.com -- do not edit by hand
-PERL_VERSION = 5_00394#
+PERL_VERSION = 5_00395#
ARCHDIR = [.lib.$(ARCH).$(PERL_VERSION)]
diff --git a/win32/EXTERN.h b/win32/EXTERN.h
deleted file mode 100644
index 3ce63772a4..0000000000
--- a/win32/EXTERN.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* EXTERN.h
- *
- * Copyright (c) 1991-1997, Larry Wall
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- */
-
-/*
- * EXT designates a global var which is defined in perl.h
- * dEXT designates a global var which is defined in another
- * file, so we can't count on finding it in perl.h
- * (this practice should be avoided).
- */
-#undef EXT
-#undef dEXT
-#undef EXTCONST
-#undef dEXTCONST
-#if defined(VMS) && !defined(__GNUC__)
-# define EXT globalref
-# define dEXT globaldef {"$GLOBAL_RW_VARS"} noshare
-# define EXTCONST globalref
-# define dEXTCONST globaldef {"$GLOBAL_RO_VARS"} readonly
-#elif defined(_MSC_VER) && defined(_WIN32)
-# ifdef PERLDLL
-# define EXT __declspec(dllexport)
-# define dEXT
-# define EXTCONST __declspec(dllexport) const
-# define dEXTCONST const
-# else
-# define EXT __declspec(dllimport)
-# define dEXT
-# define EXTCONST __declspec(dllimport) const
-# define dEXTCONST const
-# endif
-#else
-# define EXT extern
-# define dEXT
-# define EXTCONST extern const
-# define dEXTCONST const
-#endif
-
-#undef INIT
-#define INIT(x)
-
-#undef DOINIT
diff --git a/win32/Makefile b/win32/Makefile
index 05c2c48b36..5dbfb3c92f 100644
--- a/win32/Makefile
+++ b/win32/Makefile
@@ -40,7 +40,7 @@ GLOBEXE=..\perlglob.exe
PL2BAT=bin\PL2BAT.BAT
MAKE=nmake /nologo
-XCOPY=xcopy /d /f /r
+XCOPY=xcopy /i /d /f /r
NULL=
#
@@ -117,9 +117,6 @@ $(GLOBEXE):
$(MAKE) -f perlglob.mak CFG="perlglob - Win32 Release"
$(PERLLIB): $(CORE_C)
- attrib -r ..\*.h
- copy dosish.h ..
- copy EXTERN.h ..
$(MAKE) -f libperl.mak CFG="libperl - Win32 $(CFG)"
$(MINIPERL): $(PERLLIB)
@@ -136,8 +133,6 @@ $(PERLDLL): $(MINIPERL) $(PERLLIB)
$(MAKE) -A -f perldll.mak CFG="perldll - Win32 $(CFG)"
$(PERLEXE): $(MINIPERL) modules.lib $(PERLDLL)
- attrib -r perlmain.c
- attrib -r perl.def
# $(MINIPERL) makemain.pl $(STATICLINKMODUES) > perlmain.c
# $(MINIPERL) makeperldef.pl $(STATICLINKMODUES) > perl.def
$(MINIPERL) makeperldef.pl $(NULL) > perl.def
@@ -236,6 +231,14 @@ doc: $(PERLEXE)
$(PERLEXE) pod2html.bat *.pod
cd ..\win32
+utils: $(PERLEXE)
+ cd ..\utils
+ nmake PERL=$(MINIPERL)
+ $(PERLEXE) ..\win32\$(PL2BAT) h2ph splain perlbug pl2pm c2ph \
+ h2xs perldoc pstruct
+ $(XCOPY) *.bat ..\win32\bin\*.*
+ cd ..\win32
+
distclean:
-del /f $(MINIPERL) $(PERLEXE) $(PERLDLL) $(GLOBEXE) \
$(PERLLIB) modules.lib
@@ -249,12 +252,13 @@ distclean:
-rmdir /s /q release
-rmdir /s /q debug
-install : ALL doc
+install : ALL doc utils
if not exist $(INST_TOP) mkdir $(INST_TOP)
echo I $(INST_TOP) L $(LIBDIR)
$(XCOPY) $(PERLEXE) $(INST_BIN)\*.*
$(XCOPY) $(GLOBEXE) $(INST_BIN)\*.*
$(XCOPY) $(PERLDLL) $(INST_BIN)\*.*
+ $(XCOPY) bin\*.* $(INST_BIN)\*.*
$(XCOPY) /e ..\lib $(INST_LIB)\*.*
$(XCOPY) ..\pod\*.bat $(INST_BIN)\*.*
$(XCOPY) ..\pod\*.pod $(INST_POD)\*.*
diff --git a/win32/SDBM_File.mak b/win32/SDBM_File.mak
index 379ba26e2e..95f59c0570 100644
--- a/win32/SDBM_File.mak
+++ b/win32/SDBM_File.mak
@@ -211,7 +211,7 @@ LINK32_OBJS= \
SOURCE=..\ext\SDBM_File\SDBM_File.c
DEP_CPP_SDBM_=\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\..\perl.h"\
".\..\XSUB.h"\
".\..\ext\SDBM_File\sdbm\sdbm.h"\
diff --git a/win32/Socket.mak b/win32/Socket.mak
index fd26c99049..6bd318a3f8 100644
--- a/win32/Socket.mak
+++ b/win32/Socket.mak
@@ -116,7 +116,7 @@ ALL : "$(OUTDIR)\Socket.dll"
CLEAN :
-@erase ".\debug\vc40.pdb"
-@erase ".\debug\vc40.idb"
- -@erase ".\debug\Socket.dll"
+ -@erase "..\lib\auto\Socket\Socket.dll"
-@erase ".\debug\Socket.obj"
-@erase ".\debug\Socket.ilk"
-@erase ".\debug\Socket.lib"
@@ -148,8 +148,8 @@ LINK32=link.exe
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:I386
LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo\
- /subsystem:windows /dll /incremental:yes /pdb:"$(OUTDIR)/Socket.pdb" /debug\
- /machine:I386 /def:".\Socket.def" /out:"$(OUTDIR)/Socket.dll"\
+ /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)/Socket.pdb" /debug\
+ /machine:I386 /def:".\Socket.def" /out:"..\lib\auto\Socket\Socket.dll"\
/implib:"$(OUTDIR)/Socket.lib"
DEF_FILE= \
".\Socket.def"
@@ -199,7 +199,7 @@ LINK32_OBJS= \
SOURCE=..\ext\Socket\Socket.c
DEP_CPP_SOCKE=\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\..\perl.h"\
".\..\XSUB.h"\
{$(INCLUDE)}"\sys\Types.h"\
diff --git a/win32/VC-2.0/Fcntl.mak b/win32/VC-2.0/Fcntl.mak
new file mode 100644
index 0000000000..40bebb701a
--- /dev/null
+++ b/win32/VC-2.0/Fcntl.mak
@@ -0,0 +1,247 @@
+# Microsoft Developer Studio Generated NMAKE File, Format Version 4.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+!IF "$(CFG)" == ""
+CFG=Fcntl - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to Fcntl - Win32 Debug.
+!ENDIF
+
+!IF "$(CFG)" != "Fcntl - Win32 Release" && "$(CFG)" != "Fcntl - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE on this makefile
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Fcntl.mak" CFG="Fcntl - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Fcntl - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "Fcntl - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+################################################################################
+# Begin Project
+CPP=cl.exe
+RSC=rc.exe
+MTL=mktyplib.exe
+
+!IF "$(CFG)" == "Fcntl - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Fcntl___"
+# PROP BASE Intermediate_Dir "Fcntl___"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+OUTDIR=.\Release
+INTDIR=.\Release
+
+ALL : "$(OUTDIR)\Fcntl.dll"
+
+CLEAN :
+ -@erase "..\lib\auto\Fcntl\Fcntl.dll"
+ -@erase ".\Release\Fcntl.obj"
+ -@erase ".\Release\Fcntl.lib"
+ -@erase ".\Release\Fcntl.exp"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+# ADD BASE CPP /nologo /MT /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
+# ADD CPP /nologo /MT /W3 /O2 /I ".\include" /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
+CPP_PROJ=/nologo /MT /W3 /O2 /I ".\include" /I "." /I ".." /D "WIN32" /D\
+ "NDEBUG" /D "_WINDOWS" /Fp"$(INTDIR)/Fcntl.pch" /YX /Fo"$(INTDIR)/" /c
+CPP_OBJS=.\Release/
+CPP_SBRS=
+# ADD BASE MTL /nologo /D "NDEBUG" /win32
+# ADD MTL /nologo /D "NDEBUG" /win32
+MTL_PROJ=/nologo /D "NDEBUG" /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+BSC32_FLAGS=/nologo /o"$(OUTDIR)/Fcntl.bsc"
+BSC32_SBRS=
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /pdb:none /machine:I386 /out:"../lib/auto/Fcntl/Fcntl.dll"
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
+ advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo\
+ /subsystem:windows /dll /pdb:none /machine:I386 /def:".\Fcntl.def"\
+ /out:"../lib/auto/Fcntl/Fcntl.dll" /implib:"$(OUTDIR)/Fcntl.lib"
+DEF_FILE= \
+ ".\Fcntl.def"
+LINK32_OBJS= \
+ ".\Release\Fcntl.obj" \
+ "..\perl.lib"
+
+"$(OUTDIR)\Fcntl.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "Fcntl - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Fcntl__0"
+# PROP BASE Intermediate_Dir "Fcntl__0"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+OUTDIR=.\Debug
+INTDIR=.\Debug
+
+ALL : "$(OUTDIR)\Fcntl.dll"
+
+CLEAN :
+ -@erase "..\lib\auto\Fcntl\Fcntl.dll"
+ -@erase ".\Debug\Fcntl.obj"
+ -@erase ".\Debug\vc40.pdb"
+ -@erase ".\Debug\vc40.idb"
+ -@erase ".\Debug\Fcntl.lib"
+ -@erase ".\Debug\Fcntl.exp"
+ -@erase ".\Debug\Fcntl.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+# ADD BASE CPP /nologo /MT /W3 /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
+# ADD CPP /nologo /MT /W3 /Zi /Od /I ".\include" /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
+CPP_PROJ=/nologo /MT /W3 /Zi /Od /I ".\include" /I "." /I ".." /D\
+ "WIN32" /D "_DEBUG" /D "_WINDOWS" /Fp"$(INTDIR)/Fcntl.pch" /YX /Fo"$(INTDIR)/"\
+ /Fd"$(INTDIR)/" /c
+CPP_OBJS=.\Debug/
+CPP_SBRS=
+# ADD BASE MTL /nologo /D "_DEBUG" /win32
+# ADD MTL /nologo /D "_DEBUG" /win32
+MTL_PROJ=/nologo /D "_DEBUG" /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+BSC32_FLAGS=/nologo /o"$(OUTDIR)/Fcntl.bsc"
+BSC32_SBRS=
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"../lib/auto/Fcntl/Fcntl.dll"
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
+ advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo\
+ /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)/Fcntl.pdb" /debug\
+ /machine:I386 /def:".\Fcntl.def" /out:"../lib/auto/Fcntl/Fcntl.dll"\
+ /implib:"$(OUTDIR)/Fcntl.lib"
+DEF_FILE= \
+ ".\Fcntl.def"
+LINK32_OBJS= \
+ ".\Debug\Fcntl.obj" \
+ "..\perl.lib"
+
+"$(OUTDIR)\Fcntl.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+.c{$(CPP_OBJS)}.obj:
+ $(CPP) $(CPP_PROJ) $<
+
+.cpp{$(CPP_OBJS)}.obj:
+ $(CPP) $(CPP_PROJ) $<
+
+.cxx{$(CPP_OBJS)}.obj:
+ $(CPP) $(CPP_PROJ) $<
+
+.c{$(CPP_SBRS)}.sbr:
+ $(CPP) $(CPP_PROJ) $<
+
+.cpp{$(CPP_SBRS)}.sbr:
+ $(CPP) $(CPP_PROJ) $<
+
+.cxx{$(CPP_SBRS)}.sbr:
+ $(CPP) $(CPP_PROJ) $<
+
+################################################################################
+# Begin Target
+
+# Name "Fcntl - Win32 Release"
+# Name "Fcntl - Win32 Debug"
+
+!IF "$(CFG)" == "Fcntl - Win32 Release"
+
+!ELSEIF "$(CFG)" == "Fcntl - Win32 Debug"
+
+!ENDIF
+
+################################################################################
+# Begin Source File
+
+SOURCE=..\ext\Fcntl\Fcntl.c
+NODEP_CPP_FCNTL=\
+ "..\ext\Fcntl\EXTERN.h"\
+ "..\ext\Fcntl\perl.h"\
+ "..\ext\Fcntl\XSUB.h"\
+
+
+!IF "$(CFG)" == "Fcntl - Win32 Release"
+
+
+"$(INTDIR)\Fcntl.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "Fcntl - Win32 Debug"
+
+
+"$(INTDIR)\Fcntl.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF
+
+# End Source File
+################################################################################
+# Begin Source File
+
+SOURCE=.\Fcntl.def
+
+!IF "$(CFG)" == "Fcntl - Win32 Release"
+
+!ELSEIF "$(CFG)" == "Fcntl - Win32 Debug"
+
+!ENDIF
+
+# End Source File
+################################################################################
+# Begin Source File
+
+SOURCE=..\perl.lib
+
+!IF "$(CFG)" == "Fcntl - Win32 Release"
+
+!ELSEIF "$(CFG)" == "Fcntl - Win32 Debug"
+
+!ENDIF
+
+# End Source File
+# End Target
+# End Project
+################################################################################
diff --git a/win32/VC-2.0/IO.mak b/win32/VC-2.0/IO.mak
new file mode 100644
index 0000000000..2b71bc6fb1
--- /dev/null
+++ b/win32/VC-2.0/IO.mak
@@ -0,0 +1,245 @@
+# Microsoft Developer Studio Generated NMAKE File, Format Version 4.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+!IF "$(CFG)" == ""
+CFG=IO - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to IO - Win32 Debug.
+!ENDIF
+
+!IF "$(CFG)" != "IO - Win32 Release" && "$(CFG)" != "IO - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE on this makefile
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "IO.mak" CFG="IO - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "IO - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "IO - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+################################################################################
+# Begin Project
+CPP=cl.exe
+RSC=rc.exe
+MTL=mktyplib.exe
+
+!IF "$(CFG)" == "IO - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "IO___Win"
+# PROP BASE Intermediate_Dir "IO___Win"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+OUTDIR=.\Release
+INTDIR=.\Release
+
+ALL : "$(OUTDIR)\IO.dll"
+
+CLEAN :
+ -@erase "..\lib\auto\IO\IO.dll"
+ -@erase ".\Release\IO.obj"
+ -@erase ".\Release\IO.lib"
+ -@erase ".\Release\IO.exp"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+# ADD BASE CPP /nologo /MT /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
+# ADD CPP /nologo /MT /W3 /O2 /I ".\include" /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
+CPP_PROJ=/nologo /MT /W3 /O2 /I ".\include" /I "." /I ".." /D "WIN32" /D\
+ "NDEBUG" /D "_WINDOWS" /Fp"$(INTDIR)/IO.pch" /YX /Fo"$(INTDIR)/" /c
+CPP_OBJS=.\Release/
+CPP_SBRS=
+# ADD BASE MTL /nologo /D "NDEBUG" /win32
+# ADD MTL /nologo /D "NDEBUG" /win32
+MTL_PROJ=/nologo /D "NDEBUG" /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+BSC32_FLAGS=/nologo /o"$(OUTDIR)/IO.bsc"
+BSC32_SBRS=
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /pdb:none /machine:I386 /out:"..\lib\auto\IO\IO.dll"
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
+ advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo\
+ /subsystem:windows /dll /pdb:none /machine:I386 /def:".\IO.def"\
+ /out:"..\lib\auto\IO\IO.dll" /implib:"$(OUTDIR)/IO.lib"
+DEF_FILE= \
+ ".\IO.def"
+LINK32_OBJS= \
+ ".\Release\IO.obj" \
+ "..\perl.lib"
+
+"$(OUTDIR)\IO.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "IO - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+OUTDIR=.\Debug
+INTDIR=.\Debug
+
+ALL : "$(OUTDIR)\IO.dll"
+
+CLEAN :
+ -@erase ".\Debug\IO.lib"
+ -@erase ".\Debug\IO.obj"
+ -@erase ".\Debug\IO.exp"
+ -@erase ".\Debug\vc40.pdb"
+ -@erase ".\Debug\vc40.idb"
+ -@erase "..\lib\auto\IO\IO.dll"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+# ADD BASE CPP /nologo /MT /W3 /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
+# ADD CPP /nologo /MT /W3 /Zi /Od /I ".\include" /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
+CPP_PROJ=/nologo /MT /W3 /Zi /Od /I ".\include" /I "." /I ".." /D\
+ "WIN32" /D "_DEBUG" /D "_WINDOWS" /Fp"$(INTDIR)/IO.pch" /YX /Fo"$(INTDIR)/"\
+ /Fd"$(INTDIR)/" /c
+CPP_OBJS=.\Debug/
+CPP_SBRS=
+# ADD BASE MTL /nologo /D "_DEBUG" /win32
+# ADD MTL /nologo /D "_DEBUG" /win32
+MTL_PROJ=/nologo /D "_DEBUG" /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+BSC32_FLAGS=/nologo /o"$(OUTDIR)/IO.bsc"
+BSC32_SBRS=
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /pdb:none /debug /machine:I386 /out:"..\lib\auto\IO\IO.dll"
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
+ advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo\
+ /subsystem:windows /dll /pdb:none /debug /machine:I386 /def:".\IO.def"\
+ /out:"..\lib\auto\IO\IO.dll" /implib:"$(OUTDIR)/IO.lib"
+DEF_FILE= \
+ ".\IO.def"
+LINK32_OBJS= \
+ ".\Debug\IO.obj" \
+ "..\perl.lib"
+
+"$(OUTDIR)\IO.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+.c{$(CPP_OBJS)}.obj:
+ $(CPP) $(CPP_PROJ) $<
+
+.cpp{$(CPP_OBJS)}.obj:
+ $(CPP) $(CPP_PROJ) $<
+
+.cxx{$(CPP_OBJS)}.obj:
+ $(CPP) $(CPP_PROJ) $<
+
+.c{$(CPP_SBRS)}.sbr:
+ $(CPP) $(CPP_PROJ) $<
+
+.cpp{$(CPP_SBRS)}.sbr:
+ $(CPP) $(CPP_PROJ) $<
+
+.cxx{$(CPP_SBRS)}.sbr:
+ $(CPP) $(CPP_PROJ) $<
+
+################################################################################
+# Begin Target
+
+# Name "IO - Win32 Release"
+# Name "IO - Win32 Debug"
+
+!IF "$(CFG)" == "IO - Win32 Release"
+
+!ELSEIF "$(CFG)" == "IO - Win32 Debug"
+
+!ENDIF
+
+################################################################################
+# Begin Source File
+
+SOURCE=..\ext\Io\IO.c
+NODEP_CPP_IO_C0=\
+ "..\ext\Io\EXTERN.h"\
+ "..\ext\Io\perl.h"\
+ "..\ext\Io\XSUB.h"\
+
+
+!IF "$(CFG)" == "IO - Win32 Release"
+
+
+"$(INTDIR)\IO.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "IO - Win32 Debug"
+
+
+"$(INTDIR)\IO.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF
+
+# End Source File
+################################################################################
+# Begin Source File
+
+SOURCE=.\IO.def
+
+!IF "$(CFG)" == "IO - Win32 Release"
+
+!ELSEIF "$(CFG)" == "IO - Win32 Debug"
+
+!ENDIF
+
+# End Source File
+################################################################################
+# Begin Source File
+
+SOURCE=..\perl.lib
+
+!IF "$(CFG)" == "IO - Win32 Release"
+
+!ELSEIF "$(CFG)" == "IO - Win32 Debug"
+
+!ENDIF
+
+# End Source File
+# End Target
+# End Project
+################################################################################
diff --git a/win32/VC-2.0/Opcode.mak b/win32/VC-2.0/Opcode.mak
new file mode 100644
index 0000000000..8ec2812e6b
--- /dev/null
+++ b/win32/VC-2.0/Opcode.mak
@@ -0,0 +1,247 @@
+# Microsoft Developer Studio Generated NMAKE File, Format Version 4.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+!IF "$(CFG)" == ""
+CFG=Opcode - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to Opcode - Win32 Debug.
+!ENDIF
+
+!IF "$(CFG)" != "Opcode - Win32 Release" && "$(CFG)" != "Opcode - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE on this makefile
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Opcode.mak" CFG="Opcode - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Opcode - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "Opcode - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+################################################################################
+# Begin Project
+CPP=cl.exe
+RSC=rc.exe
+MTL=mktyplib.exe
+
+!IF "$(CFG)" == "Opcode - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Opcode__"
+# PROP BASE Intermediate_Dir "Opcode__"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+OUTDIR=.\Release
+INTDIR=.\Release
+
+ALL : "$(OUTDIR)\Opcode.dll"
+
+CLEAN :
+ -@erase "..\lib\auto\Opcode\Opcode.dll"
+ -@erase ".\Release\Opcode.obj"
+ -@erase ".\Release\Opcode.lib"
+ -@erase ".\Release\Opcode.exp"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+# ADD BASE CPP /nologo /MT /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
+# ADD CPP /nologo /MT /W3 /O2 /I ".\include" /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
+CPP_PROJ=/nologo /MT /W3 /O2 /I ".\include" /I "." /I ".." /D "WIN32" /D\
+ "NDEBUG" /D "_WINDOWS" /Fp"$(INTDIR)/Opcode.pch" /YX /Fo"$(INTDIR)/" /c
+CPP_OBJS=.\Release/
+CPP_SBRS=
+# ADD BASE MTL /nologo /D "NDEBUG" /win32
+# ADD MTL /nologo /D "NDEBUG" /win32
+MTL_PROJ=/nologo /D "NDEBUG" /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+BSC32_FLAGS=/nologo /o"$(OUTDIR)/Opcode.bsc"
+BSC32_SBRS=
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /pdb:none /machine:I386 /out:"../lib/auto/Opcode/Opcode.dll"
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
+ advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo\
+ /subsystem:windows /dll /pdb:none /machine:I386 /def:".\Opcode.def"\
+ /out:"../lib/auto/Opcode/Opcode.dll" /implib:"$(OUTDIR)/Opcode.lib"
+DEF_FILE= \
+ ".\Opcode.def"
+LINK32_OBJS= \
+ ".\Release\Opcode.obj" \
+ "..\perl.lib"
+
+"$(OUTDIR)\Opcode.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "Opcode - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Opcode_0"
+# PROP BASE Intermediate_Dir "Opcode_0"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+OUTDIR=.\Debug
+INTDIR=.\Debug
+
+ALL : "$(OUTDIR)\Opcode.dll"
+
+CLEAN :
+ -@erase "..\lib\auto\Opcode\Opcode.dll"
+ -@erase ".\Debug\Opcode.obj"
+ -@erase ".\Debug\vc40.pdb"
+ -@erase ".\Debug\vc40.idb"
+ -@erase ".\Debug\Opcode.lib"
+ -@erase ".\Debug\Opcode.exp"
+ -@erase ".\Debug\Opcode.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+# ADD BASE CPP /nologo /MT /W3 /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
+# ADD CPP /nologo /MT /W3 /Zi /Od /I ".\include" /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
+CPP_PROJ=/nologo /MT /W3 /Zi /Od /I ".\include" /I "." /I ".." /D\
+ "WIN32" /D "_DEBUG" /D "_WINDOWS" /Fp"$(INTDIR)/Opcode.pch" /YX /Fo"$(INTDIR)/"\
+ /Fd"$(INTDIR)/" /c
+CPP_OBJS=.\Debug/
+CPP_SBRS=
+# ADD BASE MTL /nologo /D "_DEBUG" /win32
+# ADD MTL /nologo /D "_DEBUG" /win32
+MTL_PROJ=/nologo /D "_DEBUG" /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+BSC32_FLAGS=/nologo /o"$(OUTDIR)/Opcode.bsc"
+BSC32_SBRS=
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /incremental:no /debug /machine:I386 /out:"../lib/auto/Opcode/Opcode.dll"
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
+ advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo\
+ /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)/Opcode.pdb" /debug\
+ /machine:I386 /def:".\Opcode.def" /out:"../lib/auto/Opcode/Opcode.dll"\
+ /implib:"$(OUTDIR)/Opcode.lib"
+DEF_FILE= \
+ ".\Opcode.def"
+LINK32_OBJS= \
+ ".\Debug\Opcode.obj" \
+ "..\perl.lib"
+
+"$(OUTDIR)\Opcode.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+.c{$(CPP_OBJS)}.obj:
+ $(CPP) $(CPP_PROJ) $<
+
+.cpp{$(CPP_OBJS)}.obj:
+ $(CPP) $(CPP_PROJ) $<
+
+.cxx{$(CPP_OBJS)}.obj:
+ $(CPP) $(CPP_PROJ) $<
+
+.c{$(CPP_SBRS)}.sbr:
+ $(CPP) $(CPP_PROJ) $<
+
+.cpp{$(CPP_SBRS)}.sbr:
+ $(CPP) $(CPP_PROJ) $<
+
+.cxx{$(CPP_SBRS)}.sbr:
+ $(CPP) $(CPP_PROJ) $<
+
+################################################################################
+# Begin Target
+
+# Name "Opcode - Win32 Release"
+# Name "Opcode - Win32 Debug"
+
+!IF "$(CFG)" == "Opcode - Win32 Release"
+
+!ELSEIF "$(CFG)" == "Opcode - Win32 Debug"
+
+!ENDIF
+
+################################################################################
+# Begin Source File
+
+SOURCE=.\Opcode.def
+
+!IF "$(CFG)" == "Opcode - Win32 Release"
+
+!ELSEIF "$(CFG)" == "Opcode - Win32 Debug"
+
+!ENDIF
+
+# End Source File
+################################################################################
+# Begin Source File
+
+SOURCE=..\ext\Opcode\Opcode.c
+NODEP_CPP_OPCOD=\
+ "..\ext\Opcode\EXTERN.h"\
+ "..\ext\Opcode\perl.h"\
+ "..\ext\Opcode\XSUB.h"\
+
+
+!IF "$(CFG)" == "Opcode - Win32 Release"
+
+
+"$(INTDIR)\Opcode.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF "$(CFG)" == "Opcode - Win32 Debug"
+
+
+"$(INTDIR)\Opcode.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF
+
+# End Source File
+################################################################################
+# Begin Source File
+
+SOURCE=..\perl.lib
+
+!IF "$(CFG)" == "Opcode - Win32 Release"
+
+!ELSEIF "$(CFG)" == "Opcode - Win32 Debug"
+
+!ENDIF
+
+# End Source File
+# End Target
+# End Project
+################################################################################
diff --git a/win32/VC-2.0/SDBM_File.mak b/win32/VC-2.0/SDBM_File.mak
index 6ebaa15f2f..0eb689727c 100644
--- a/win32/VC-2.0/SDBM_File.mak
+++ b/win32/VC-2.0/SDBM_File.mak
@@ -136,9 +136,9 @@ CLEAN :
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
-# ADD BASE CPP /nologo /MTd /W3 /Gm /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /c
-# ADD CPP /nologo /MTd /W3 /Gm /Zi /Od /I ".\include" /I "." /I ".." /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "MSDOS" /c
-CPP_PROJ=/nologo /MTd /W3 /Gm /Zi /Od /I ".\include" /I "." /I ".." /D\
+# ADD BASE CPP /nologo /MT /W3 /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /c
+# ADD CPP /nologo /MT /W3 /Zi /Od /I ".\include" /I "." /I ".." /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "MSDOS" /c
+CPP_PROJ=/nologo /MT /W3 /Zi /Od /I ".\include" /I "." /I ".." /D\
"_DEBUG" /D "WIN32" /D "_WINDOWS" /D "MSDOS" \
/Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c
CPP_OBJS=.\Debug/
@@ -211,7 +211,7 @@ LINK32_OBJS= \
SOURCE=..\ext\SDBM_File\SDBM_File.c
DEP_CPP_SDBM_=\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\..\perl.h"\
".\..\XSUB.h"\
".\..\ext\SDBM_File\sdbm\sdbm.h"\
diff --git a/win32/VC-2.0/Socket.mak b/win32/VC-2.0/Socket.mak
index 69a774c279..f7475e2a05 100644
--- a/win32/VC-2.0/Socket.mak
+++ b/win32/VC-2.0/Socket.mak
@@ -116,7 +116,7 @@ ALL : "$(OUTDIR)\Socket.dll"
CLEAN :
-@erase ".\debug\vc40.pdb"
-@erase ".\debug\vc40.idb"
- -@erase ".\debug\Socket.dll"
+ -@erase "..\lib\auto\Socket\Socket.dll"
-@erase ".\debug\Socket.obj"
-@erase ".\debug\Socket.ilk"
-@erase ".\debug\Socket.lib"
@@ -126,9 +126,9 @@ CLEAN :
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
-# ADD BASE CPP /nologo /MTd /W3 /Gm /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
-# ADD CPP /nologo /MTd /W3 /Gm /Zi /Od /I ".\include" /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
-CPP_PROJ=/nologo /MTd /W3 /Gm /Zi /Od /I ".\include" /I "." /I ".." /D\
+# ADD BASE CPP /nologo /MT /W3 /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
+# ADD CPP /nologo /MT /W3 /Zi /Od /I ".\include" /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
+CPP_PROJ=/nologo /MT /W3 /Zi /Od /I ".\include" /I "." /I ".." /D\
"WIN32" /D "_DEBUG" /D "_WINDOWS" /Fp"$(INTDIR)/Socket.pch" /YX /Fo"$(INTDIR)/"\
/Fd"$(INTDIR)/" /c
CPP_OBJS=.\debug/
@@ -148,8 +148,8 @@ LINK32=link.exe
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:I386
LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo\
- /subsystem:windows /dll /incremental:yes /pdb:"$(OUTDIR)/Socket.pdb" /debug\
- /machine:I386 /def:".\Socket.def" /out:"$(OUTDIR)/Socket.dll"\
+ /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)/Socket.pdb" /debug\
+ /machine:I386 /def:".\Socket.def" /out:"..\lib\auto\Socket\Socket.dll"\
/implib:"$(OUTDIR)/Socket.lib"
DEF_FILE= \
".\Socket.def"
@@ -199,7 +199,7 @@ LINK32_OBJS= \
SOURCE=..\ext\Socket\Socket.c
DEP_CPP_SOCKE=\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\..\perl.h"\
".\..\XSUB.h"\
"$(INCLUDE)\sys\Types.h"\
diff --git a/win32/VC-2.0/libperl.mak b/win32/VC-2.0/libperl.mak
index ab94be02e4..97d31c4f5d 100644
--- a/win32/VC-2.0/libperl.mak
+++ b/win32/VC-2.0/libperl.mak
@@ -189,9 +189,9 @@ CLEAN :
if not exist "$(INTDIR)/$(NULL)" mkdir "$(INTDIR)"
# ADD BASE CPP /nologo /W3 /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
-# ADD CPP /nologo /MTd /W3 /Z7 /Od /I ".\include" /I ".." /I "." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
-CPP_PROJ=/nologo /MTd /W3 /Z7 /Od /I ".\include" /I ".." /I "." /D "WIN32"\
- /D "_DEBUG" /D "_WINDOWS" /Fp"$(INTDIR)/libperl.pch" /YX /Fo"$(INTDIR)/" /c
+# ADD CPP /nologo /MT /W3 /Z7 /Od /I ".\include" /I ".." /I "." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
+CPP_PROJ=/nologo /MT /W3 /Z7 /Od /I ".\include" /I ".." /I "." /D "WIN32"\
+/D "PERLDLL" /D "_DEBUG" /D "_WINDOWS" /Fp"$(INTDIR)/libperl.pch" /YX /Fo"$(INTDIR)/" /c
CPP_OBJS=.\Debug/
CPP_SBRS=.\.
BSC32=bscmake.exe
diff --git a/win32/VC-2.0/miniperl.mak b/win32/VC-2.0/miniperl.mak
index 3fce97fde1..241a0eaf2b 100644
--- a/win32/VC-2.0/miniperl.mak
+++ b/win32/VC-2.0/miniperl.mak
@@ -131,9 +131,9 @@ CLEAN :
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
-# ADD BASE CPP /nologo /W3 /Gm /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
-# ADD CPP /nologo /MTd /W3 /Gm /Zi /Od /I "." /I ".\include" /I ".." /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "PERLDLL" /YX /c
-CPP_PROJ=/nologo /MTd /W3 /Gm /Zi /Od /I "." /I ".\include" /I ".." /D\
+# ADD BASE CPP /nologo /W3 /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
+# ADD CPP /nologo /MT /W3 /Zi /Od /I "." /I ".\include" /I ".." /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "PERLDLL" /YX /c
+CPP_PROJ=/nologo /MT /W3 /Zi /Od /I "." /I ".\include" /I ".." /D\
"_DEBUG" /D "WIN32" /D "_CONSOLE" /D "PERLDLL" /Fp"$(INTDIR)/miniperl.pch" /YX\
/Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c
CPP_OBJS=.\Debug/
@@ -293,7 +293,7 @@ DEP_CPP_WIN32=\
".\..\unixish.h"\
".\..\util.h"\
".\config.h"\
- ".\EXTERN.h"\
+ ".\..\EXTERN.h"\
".\include\dirent.h"\
".\include\netdb.h"\
".\include\sys/socket.h"\
@@ -343,7 +343,7 @@ DEP_CPP_WIN32S=\
".\..\unixish.h"\
".\..\util.h"\
".\config.h"\
- ".\EXTERN.h"\
+ ".\..\EXTERN.h"\
".\include\dirent.h"\
".\include\netdb.h"\
".\include\sys/socket.h"\
diff --git a/win32/VC-2.0/modules.mak b/win32/VC-2.0/modules.mak
index 198ca3120f..4340285530 100644
--- a/win32/VC-2.0/modules.mak
+++ b/win32/VC-2.0/modules.mak
@@ -108,8 +108,8 @@ CLEAN :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
# ADD BASE CPP /nologo /W3 /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
-# ADD CPP /nologo /MTd /W3 /Z7 /Od /I ".\include" /I "." /I ".." /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "MSDOS" /YX /c
-CPP_PROJ=/nologo /MTd /W3 /Z7 /Od /I ".\include" /I "." /I ".." /D "_DEBUG"\
+# ADD CPP /nologo /MT /W3 /Z7 /Od /I ".\include" /I "." /I ".." /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "MSDOS" /YX /c
+CPP_PROJ=/nologo /MT /W3 /Z7 /Od /I ".\include" /I "." /I ".." /D "_DEBUG"\
/D "WIN32" /D "_WINDOWS" /D "MSDOS" /Fp"$(INTDIR)/modules.pch" /YX\
/Fo"$(INTDIR)/" /c
CPP_OBJS=.\Debug/
@@ -201,7 +201,7 @@ DEP_CPP_DYNAL=\
"..\XSUB.h"\
".\..\ext\DynaLoader\dlutils.c"\
".\config.h"\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\include\dirent.h"\
".\include\netdb.h"\
".\include\sys/socket.h"\
@@ -250,7 +250,7 @@ DEP_CPP_DYNAL=\
"..\XSUB.h"\
".\..\ext\DynaLoader\dlutils.c"\
".\config.h"\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\include\dirent.h"\
".\include\netdb.h"\
".\include\sys/socket.h"\
@@ -308,7 +308,7 @@ DEP_CPP_FCNTL=\
"..\util.h"\
"..\XSUB.h"\
".\config.h"\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\include\dirent.h"\
".\include\netdb.h"\
".\include\sys/socket.h"\
@@ -356,7 +356,7 @@ DEP_CPP_FCNTL=\
"..\util.h"\
"..\XSUB.h"\
".\config.h"\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\include\dirent.h"\
".\include\netdb.h"\
".\include\sys/socket.h"\
@@ -414,7 +414,7 @@ DEP_CPP_IO_C4=\
"..\util.h"\
"..\XSUB.h"\
".\config.h"\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\include\dirent.h"\
".\include\netdb.h"\
".\include\sys/socket.h"\
@@ -462,7 +462,7 @@ DEP_CPP_IO_C4=\
"..\util.h"\
"..\XSUB.h"\
".\config.h"\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\include\dirent.h"\
".\include\netdb.h"\
".\include\sys/socket.h"\
@@ -520,7 +520,7 @@ DEP_CPP_OPCOD=\
"..\util.h"\
"..\XSUB.h"\
".\config.h"\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\include\dirent.h"\
".\include\netdb.h"\
".\include\sys/socket.h"\
@@ -568,7 +568,7 @@ DEP_CPP_OPCOD=\
"..\util.h"\
"..\XSUB.h"\
".\config.h"\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\include\dirent.h"\
".\include\netdb.h"\
".\include\sys/socket.h"\
@@ -624,7 +624,7 @@ DEP_CPP_SDBM_=\
"..\XSUB.h"\
".\..\ext\SDBM_File\sdbm\sdbm.h"\
".\config.h"\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\include\dirent.h"\
".\include\netdb.h"\
".\include\sys/socket.h"\
@@ -675,7 +675,7 @@ DEP_CPP_SOCKE=\
"..\util.h"\
"..\XSUB.h"\
".\config.h"\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\include\arpa/inet.h"\
".\include\dirent.h"\
".\include\netdb.h"\
diff --git a/win32/VC-2.0/perl.mak b/win32/VC-2.0/perl.mak
index bee99fda0e..7e10283b2c 100644
--- a/win32/VC-2.0/perl.mak
+++ b/win32/VC-2.0/perl.mak
@@ -119,9 +119,9 @@ CLEAN :
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
-# ADD BASE CPP /nologo /W3 /Gm /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
-# ADD CPP /nologo /MTd /W3 /Gm /Zi /Od /I "." /I ".\include" /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
-CPP_PROJ=/nologo /MTd /W3 /Gm /Zi /Od /I "." /I ".\include" /I ".." /D\
+# ADD BASE CPP /nologo /W3 /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
+# ADD CPP /nologo /MT /W3 /Zi /Od /I "." /I ".\include" /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
+CPP_PROJ=/nologo /MT /W3 /Zi /Od /I "." /I ".\include" /I ".." /D\
"WIN32" /D "_DEBUG" /D "_CONSOLE" /Fp"$(INTDIR)/perl.pch" /YX /Fo"$(INTDIR)/"\
/Fd"$(INTDIR)/" /c
CPP_OBJS=.\Debug/
diff --git a/win32/VC-2.0/perldll.mak b/win32/VC-2.0/perldll.mak
index ab9460e2c8..c7fc5a676c 100644
--- a/win32/VC-2.0/perldll.mak
+++ b/win32/VC-2.0/perldll.mak
@@ -145,9 +145,9 @@ CLEAN :
"$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
-# ADD BASE CPP /nologo /MTd /W3 /Gm /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
-# ADD CPP /nologo /MTd /W3 /Gm /Zi /Od /I "." /I ".\include" /I ".." /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "PERLDLL" /YX /c
-CPP_PROJ=/nologo /MTd /W3 /Gm /Zi /Od /I "." /I ".\include" /I ".." /D\
+# ADD BASE CPP /nologo /MT /W3 /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
+# ADD CPP /nologo /MT /W3 /Zi /Od /I "." /I ".\include" /I ".." /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "PERLDLL" /YX /c
+CPP_PROJ=/nologo /MT /W3 /Zi /Od /I "." /I ".\include" /I ".." /D\
"_DEBUG" /D "WIN32" /D "_WINDOWS" /D "PERLDLL" /Fp"$(INTDIR)/perldll.pch" /YX\
/Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c
CPP_OBJS=.\debug/
@@ -251,7 +251,7 @@ DEP_CPP_PERLL=\
"..\unixish.h"\
"..\util.h"\
".\config.h"\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\include\dirent.h"\
".\include\netdb.h"\
".\include\sys/socket.h"\
@@ -326,7 +326,7 @@ DEP_CPP_WIN32=\
"..\unixish.h"\
"..\util.h"\
".\config.h"\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\include\dirent.h"\
".\include\netdb.h"\
".\include\sys/socket.h"\
@@ -360,7 +360,7 @@ DEP_CPP_WIN32_=\
"..\perlsdio.h"\
"..\perlsfio.h"\
".\config.h"\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\include\dirent.h"\
".\include\netdb.h"\
".\include\sys/socket.h"\
@@ -376,7 +376,7 @@ DEP_CPP_WIN32_=\
DEP_CPP_WIN32_=\
"..\perl.h"\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
"$(INCLUDE)\sys\stat.h"\
"$(INCLUDE)\sys\types.h"\
diff --git a/win32/VC-2.0/perlglob.mak b/win32/VC-2.0/perlglob.mak
new file mode 100644
index 0000000000..f11a8a52b2
--- /dev/null
+++ b/win32/VC-2.0/perlglob.mak
@@ -0,0 +1,201 @@
+# Microsoft Developer Studio Generated NMAKE File, Format Version 4.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+!IF "$(CFG)" == ""
+CFG=perlglob - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to perlglob - Win32 Debug.
+!ENDIF
+
+!IF "$(CFG)" != "perlglob - Win32 Release" && "$(CFG)" !=\
+ "perlglob - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE on this makefile
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "perlglob.mak" CFG="perlglob - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "perlglob - Win32 Release" (based on\
+ "Win32 (x86) Console Application")
+!MESSAGE "perlglob - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+################################################################################
+# Begin Project
+# PROP Target_Last_Scanned "perlglob - Win32 Debug"
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "perlglob - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "perlglob"
+# PROP BASE Intermediate_Dir "perlglob"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "release"
+# PROP Intermediate_Dir "release"
+# PROP Target_Dir ""
+OUTDIR=.\release
+INTDIR=.\release
+
+ALL : "$(OUTDIR)\perlglob.exe"
+
+CLEAN :
+ -@erase "..\perlglob.exe"
+ -@erase ".\release\perlglob.obj"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+# ADD BASE CPP /nologo /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c
+# ADD CPP /nologo /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c
+CPP_PROJ=/nologo /ML /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE"\
+ /Fp"$(INTDIR)/perlglob.pch" /YX /Fo"$(INTDIR)/" /c
+CPP_OBJS=.\release/
+CPP_SBRS=
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+BSC32_FLAGS=/nologo /o"$(OUTDIR)/perlglob.bsc"
+BSC32_SBRS=
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib setargv.obj /nologo /subsystem:console /machine:I386 /out:"../perlglob.exe"
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
+ advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib setargv.obj /nologo\
+ /subsystem:console /incremental:no /pdb:"$(OUTDIR)/perlglob.pdb" /machine:I386\
+ /out:"../perlglob.exe"
+LINK32_OBJS= \
+ "$(INTDIR)/perlglob.obj"
+
+"$(OUTDIR)\perlglob.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "perlglob - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "perlglo0"
+# PROP BASE Intermediate_Dir "perlglo0"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "debug"
+# PROP Intermediate_Dir "debug"
+# PROP Target_Dir ""
+OUTDIR=.\debug
+INTDIR=.\debug
+
+ALL : "$(OUTDIR)\perlglob.exe"
+
+CLEAN :
+ -@erase "..\perlglob.exe"
+ -@erase ".\debug\perlglob.obj"
+ -@erase "..\perlglob.ilk"
+ -@erase ".\debug\perlglob.pdb"
+ -@erase ".\debug\vc40.pdb"
+ -@erase ".\debug\vc40.idb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+# ADD BASE CPP /nologo /W3 /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
+# ADD CPP /nologo /W3 /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
+CPP_PROJ=/nologo /MLd /W3 /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE"\
+ /Fp"$(INTDIR)/perlglob.pch" /YX /Fo"$(INTDIR)/" /Fd"$(INTDIR)/" /c
+CPP_OBJS=.\debug/
+CPP_SBRS=
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+BSC32_FLAGS=/nologo /o"$(OUTDIR)/perlglob.bsc"
+BSC32_SBRS=
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:console /debug /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib setargv.obj /nologo /subsystem:console /debug /machine:I386 /out:"..\perlglob.exe"
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\
+ advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib setargv.obj /nologo\
+ /subsystem:console /incremental:yes /pdb:"$(OUTDIR)/perlglob.pdb" /debug\
+ /machine:I386 /out:"..\perlglob.exe"
+LINK32_OBJS= \
+ "$(INTDIR)/perlglob.obj"
+
+"$(OUTDIR)\perlglob.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+.c{$(CPP_OBJS)}.obj:
+ $(CPP) $(CPP_PROJ) $<
+
+.cpp{$(CPP_OBJS)}.obj:
+ $(CPP) $(CPP_PROJ) $<
+
+.cxx{$(CPP_OBJS)}.obj:
+ $(CPP) $(CPP_PROJ) $<
+
+.c{$(CPP_SBRS)}.sbr:
+ $(CPP) $(CPP_PROJ) $<
+
+.cpp{$(CPP_SBRS)}.sbr:
+ $(CPP) $(CPP_PROJ) $<
+
+.cxx{$(CPP_SBRS)}.sbr:
+ $(CPP) $(CPP_PROJ) $<
+
+################################################################################
+# Begin Target
+
+# Name "perlglob - Win32 Release"
+# Name "perlglob - Win32 Debug"
+
+!IF "$(CFG)" == "perlglob - Win32 Release"
+
+!ELSEIF "$(CFG)" == "perlglob - Win32 Debug"
+
+!ENDIF
+
+################################################################################
+# Begin Source File
+
+SOURCE=.\perlglob.c
+
+!IF "$(CFG)" == "perlglob - Win32 Release"
+
+
+"$(INTDIR)\perlglob.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF "$(CFG)" == "perlglob - Win32 Debug"
+
+
+"$(INTDIR)\perlglob.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ENDIF
+
+# End Source File
+# End Target
+# End Project
+################################################################################
diff --git a/win32/VC-2.0/vc2.patch b/win32/VC-2.0/vc2.patch
deleted file mode 100644
index ea7031b3c8..0000000000
--- a/win32/VC-2.0/vc2.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-You will need this patch to win32.c when compiling with VC++ ver. 2.0.
-
-
-diff -ur /y/src/perl5.003_93/win32/win32.c perl5.003_93-w32/win32/win32.c
---- /y/src/perl5.003_93/win32/win32.c Fri Jan 31 21:38:10 1997
-+++ perl5.003_93-w32/win32/win32.c Tue Mar 11 01:51:08 1997
-@@ -41,7 +41,8 @@
- char szPerlLibRoot[MAX_PATH+1];
- HANDLE PerlDllHandle = INVALID_HANDLE_VALUE;
-
--#define IsWin95() (Win32System == VER_PLATFORM_WIN32_WINDOWS)
-+/* #define IsWin95() (Win32System == VER_PLATFORM_WIN32_WINDOWS) */
-+#define IsWin95() (0)
- #define IsWinNT() (Win32System == VER_PLATFORM_WIN32_NT)
-
- void *
diff --git a/win32/config.H b/win32/config.H
index f71ddc8151..420afcccac 100644
--- a/win32/config.H
+++ b/win32/config.H
@@ -1241,7 +1241,7 @@
* This symbol, if defined, indicates to the C program that it should
* include <utime.h>.
*/
-/*#define I_UTIME /**/
+#define I_UTIME /**/
/* I_STDARG:
* This symbol, if defined, indicates that <stdarg.h> exists and should
diff --git a/win32/config.w32 b/win32/config.w32
index 116762202e..e8a1c03af8 100644
--- a/win32/config.w32
+++ b/win32/config.w32
@@ -342,7 +342,7 @@ i_termio='undef'
i_termios='undef'
i_time='define'
i_unistd='undef'
-i_utime='undef'
+i_utime='define'
i_values='undef'
i_varargs='undef'
i_varhdr='varargs.h'
diff --git a/win32/dosish.h b/win32/dosish.h
deleted file mode 100644
index 8e423fa8fa..0000000000
--- a/win32/dosish.h
+++ /dev/null
@@ -1,89 +0,0 @@
-#define ABORT() abort();
-
-#define SH_PATH "/bin/sh"
-
-#ifdef DJGPP
-#define BIT_BUCKET "nul"
-#define OP_BINARY O_BINARY
-void Perl_DJGPP_init();
-#define PERL_SYS_INIT(argcp, argvp) STMT_START { \
- Perl_DJGPP_init(); } STMT_END
-#else
-#define PERL_SYS_INIT(c,v)
-#define BIT_BUCKET "nul"
-#endif
-
-#define PERL_SYS_TERM()
-#define dXSUB_SYS int dummy
-#define TMPPATH "plXXXXXX"
-
-/*
- * 5.003_07 and earlier keyed on #ifdef MSDOS for determining if we were
- * running on DOS, *and* if we had to cope with 16 bit memory addressing
- * constraints, *and* we need to have memory allocated as unsigned long.
- *
- * with the advent of *real* compilers for DOS, they are not locked together.
- * MSDOS means "I am running on MSDOS". HAS_64K_LIMIT means "I have
- * 16 bit memory addressing constraints".
- *
- * if you need the last, try #DEFINE MEM_SIZE unsigned long.
- */
-#ifdef MSDOS
- #ifndef DJGPP
- #define HAS_64K_LIMIT
- #endif
-#endif
-
-/* USEMYBINMODE
- * This symbol, if defined, indicates that the program should
- * use the routine my_binmode(FILE *fp, char iotype) to insure
- * that a file is in "binary" mode -- that is, that no translation
- * of bytes occurs on read or write operations.
- */
-#undef USEMYBINMODE
-
-/* USE_STAT_RDEV:
- * This symbol is defined if this system has a stat structure declaring
- * st_rdev
- */
-#define USE_STAT_RDEV /**/
-
-/* ACME_MESS:
- * This symbol, if defined, indicates that error messages should be
- * should be generated in a format that allows the use of the Acme
- * GUI/editor's autofind feature.
- */
-#undef ACME_MESS /**/
-
-/* ALTERNATE_SHEBANG:
- * This symbol, if defined, contains a "magic" string which may be used
- * as the first line of a Perl program designed to be executed directly
- * by name, instead of the standard Unix #!. If ALTERNATE_SHEBANG
- * begins with a character other then #, then Perl will only treat
- * it as a command line if if finds the string "perl" in the first
- * word; otherwise it's treated as the first line of code in the script.
- * (IOW, Perl won't hand off to another interpreter via an alternate
- * shebang sequence that might be legal Perl code.)
- */
-/* #define ALTERNATE_SHEBANG "#!" / **/
-
-/*
- * fwrite1() should be a routine with the same calling sequence as fwrite(),
- * but which outputs all of the bytes requested as a single stream (unlike
- * fwrite() itself, which on some systems outputs several distinct records
- * if the number_of_items parameter is >1).
- */
-#define fwrite1 fwrite
-
-#define Stat(fname,bufptr) win32_stat((fname),(bufptr))
-#define Fstat(fd,bufptr) fstat((fd),(bufptr))
-#define Fflush(fp) fflush(fp)
-
-#define my_getenv(var) getenv(var)
-/*
- * the following are standard library calls (stdio in particular)
- * that is being redirected to the perl DLL. This is needed for
- * Dynaloading any modules that called stdio functions
- */
-
-#include <win32iop.h>
diff --git a/win32/libperl.mak b/win32/libperl.mak
index 3fe30ffa8d..f25b2c4a66 100644
--- a/win32/libperl.mak
+++ b/win32/libperl.mak
@@ -191,7 +191,7 @@ CLEAN :
# ADD BASE CPP /nologo /W3 /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
# ADD CPP /nologo /MTd /W3 /Z7 /Od /I ".\include" /I ".." /I "." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
CPP_PROJ=/nologo /MTd /W3 /Z7 /Od /I ".\include" /I ".." /I "." /D "WIN32"\
- /D "_DEBUG" /D "_WINDOWS" /Fp"$(INTDIR)/libperl.pch" /YX /Fo"$(INTDIR)/" /c
+/D "PERLDLL" /D "_DEBUG" /D "_WINDOWS" /Fp"$(INTDIR)/libperl.pch" /YX /Fo"$(INTDIR)/" /c
CPP_OBJS=.\Debug/
CPP_SBRS=.\.
BSC32=bscmake.exe
diff --git a/win32/miniperl.mak b/win32/miniperl.mak
index 9e6e2a4a15..55fcb5a8af 100644
--- a/win32/miniperl.mak
+++ b/win32/miniperl.mak
@@ -293,7 +293,7 @@ DEP_CPP_WIN32=\
".\..\unixish.h"\
".\..\util.h"\
".\config.h"\
- ".\EXTERN.h"\
+ ".\..\EXTERN.h"\
".\include\dirent.h"\
".\include\netdb.h"\
".\include\sys/socket.h"\
@@ -343,7 +343,7 @@ DEP_CPP_WIN32S=\
".\..\unixish.h"\
".\..\util.h"\
".\config.h"\
- ".\EXTERN.h"\
+ ".\..\EXTERN.h"\
".\include\dirent.h"\
".\include\netdb.h"\
".\include\sys/socket.h"\
diff --git a/win32/modules.mak b/win32/modules.mak
index 8c0a546ec2..2c4b0bf591 100644
--- a/win32/modules.mak
+++ b/win32/modules.mak
@@ -201,7 +201,7 @@ DEP_CPP_DYNAL=\
"..\XSUB.h"\
".\..\ext\DynaLoader\dlutils.c"\
".\config.h"\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\include\dirent.h"\
".\include\netdb.h"\
".\include\sys/socket.h"\
@@ -250,7 +250,7 @@ DEP_CPP_DYNAL=\
"..\XSUB.h"\
".\..\ext\DynaLoader\dlutils.c"\
".\config.h"\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\include\dirent.h"\
".\include\netdb.h"\
".\include\sys/socket.h"\
@@ -308,7 +308,7 @@ DEP_CPP_FCNTL=\
"..\util.h"\
"..\XSUB.h"\
".\config.h"\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\include\dirent.h"\
".\include\netdb.h"\
".\include\sys/socket.h"\
@@ -356,7 +356,7 @@ DEP_CPP_FCNTL=\
"..\util.h"\
"..\XSUB.h"\
".\config.h"\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\include\dirent.h"\
".\include\netdb.h"\
".\include\sys/socket.h"\
@@ -414,7 +414,7 @@ DEP_CPP_IO_C4=\
"..\util.h"\
"..\XSUB.h"\
".\config.h"\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\include\dirent.h"\
".\include\netdb.h"\
".\include\sys/socket.h"\
@@ -462,7 +462,7 @@ DEP_CPP_IO_C4=\
"..\util.h"\
"..\XSUB.h"\
".\config.h"\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\include\dirent.h"\
".\include\netdb.h"\
".\include\sys/socket.h"\
@@ -520,7 +520,7 @@ DEP_CPP_OPCOD=\
"..\util.h"\
"..\XSUB.h"\
".\config.h"\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\include\dirent.h"\
".\include\netdb.h"\
".\include\sys/socket.h"\
@@ -568,7 +568,7 @@ DEP_CPP_OPCOD=\
"..\util.h"\
"..\XSUB.h"\
".\config.h"\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\include\dirent.h"\
".\include\netdb.h"\
".\include\sys/socket.h"\
@@ -624,7 +624,7 @@ DEP_CPP_SDBM_=\
"..\XSUB.h"\
".\..\ext\SDBM_File\sdbm\sdbm.h"\
".\config.h"\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\include\dirent.h"\
".\include\netdb.h"\
".\include\sys/socket.h"\
@@ -675,7 +675,7 @@ DEP_CPP_SOCKE=\
"..\util.h"\
"..\XSUB.h"\
".\config.h"\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\include\arpa/inet.h"\
".\include\dirent.h"\
".\include\netdb.h"\
diff --git a/win32/perldll.mak b/win32/perldll.mak
index eb308771a3..5b589c853b 100644
--- a/win32/perldll.mak
+++ b/win32/perldll.mak
@@ -251,7 +251,7 @@ DEP_CPP_PERLL=\
"..\unixish.h"\
"..\util.h"\
".\config.h"\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\include\dirent.h"\
".\include\netdb.h"\
".\include\sys/socket.h"\
@@ -326,7 +326,7 @@ DEP_CPP_WIN32=\
"..\unixish.h"\
"..\util.h"\
".\config.h"\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\include\dirent.h"\
".\include\netdb.h"\
".\include\sys/socket.h"\
@@ -360,7 +360,7 @@ DEP_CPP_WIN32_=\
"..\perlsdio.h"\
"..\perlsfio.h"\
".\config.h"\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
".\include\dirent.h"\
".\include\netdb.h"\
".\include\sys/socket.h"\
@@ -376,7 +376,7 @@ DEP_CPP_WIN32_=\
DEP_CPP_WIN32_=\
"..\perl.h"\
- ".\EXTERN.h"\
+ "..\EXTERN.h"\
{$(INCLUDE)}"\sys\stat.h"\
{$(INCLUDE)}"\sys\types.h"\
diff --git a/win32/perlmain.c b/win32/perlmain.c
deleted file mode 100644
index 507b3831f5..0000000000
--- a/win32/perlmain.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <stdio.h>
-#include <win32io.h>
-
-extern WIN32_IOSUBSYSTEM win32stdio;
-extern int RunPerl(int argc, char **argv, char **env, void *iosubsystem);
-
-main(int argc, char **argv, char **env)
-{
- return (RunPerl(argc, argv, env, &win32stdio));
-}
diff --git a/win32/win32.c b/win32/win32.c
index 2e025ce152..5efca7c711 100644
--- a/win32/win32.c
+++ b/win32/win32.c
@@ -41,8 +41,15 @@ char szShellPath[MAX_PATH+1];
char szPerlLibRoot[MAX_PATH+1];
HANDLE PerlDllHandle = INVALID_HANDLE_VALUE;
-#define IsWin95() (Win32System == VER_PLATFORM_WIN32_WINDOWS)
-#define IsWinNT() (Win32System == VER_PLATFORM_WIN32_NT)
+int
+IsWin95(void) {
+ return (Win32System == VER_PLATFORM_WIN32_WINDOWS);
+}
+
+int
+IsWinNT(void) {
+ return (Win32System == VER_PLATFORM_WIN32_NT);
+}
void *
SetIOSubSystem(void *p)
@@ -344,7 +351,8 @@ do_aspawn(void* really, void** mark, void** arglast)
cmd = SvPV(sv, length);
}
else {
- cmd = GetShell();
+ argv[index++] = cmd = GetShell();
+ argv[index++] = "/x"; /* always enable command extensions */
argv[index++] = "/c";
}
@@ -410,6 +418,7 @@ do_spawn(char *cmd)
status = win32_spawnle(P_WAIT,
shell,
shell,
+ "/x",
"/c", cmd, (char*)0, environ);
}
@@ -1039,8 +1048,9 @@ win32_spawnle(int mode, const char *cmdname, const char *arglist,...)
argp = &arglist;
while (*argp++) ;
+ envp = (const char* const*)*argp;
- return pIOSubSystem->pfnspawnvpe(mode, cmdname, &arglist, argp);
+ return pIOSubSystem->pfnspawnvpe(mode, cmdname, &arglist, envp);
}
int
diff --git a/win32/win32.h b/win32/win32.h
index 0a18645d9c..7d252f78e5 100644
--- a/win32/win32.h
+++ b/win32/win32.h
@@ -105,4 +105,11 @@ typedef char * caddr_t; /* In malloc.c (core address). */
#pragma warning(disable: 4018 4035 4101 4102 4244 4245 4761)
+int IsWin95(void);
+int IsWinNT(void);
+
+#ifndef VER_PLATFORM_WIN32_WINDOWS /* VC-2.0 headers dont have this */
+#define VER_PLATFORM_WIN32_WINDOWS 1
+#endif
+
#endif /* _INC_WIN32_PERL5 */
diff --git a/win32/win32aux.c b/win32/win32aux.c
index 526b6999c9..1af2c7abd2 100644
--- a/win32/win32aux.c
+++ b/win32/win32aux.c
@@ -16,6 +16,7 @@ extern "C" {
#include <assert.h>
#include <errno.h>
+#include "win32.h"
#include "win32iop.h"
struct servent*
@@ -24,7 +25,7 @@ win32_savecopyservent(struct servent*d, struct servent*s, const char *proto)
d->s_name = s->s_name;
d->s_aliases = s->s_aliases;
d->s_port = s->s_port;
- if (s->s_proto && strlen(s->s_proto))
+ if (!IsWin95() && s->s_proto && strlen(s->s_proto))
d->s_proto = s->s_proto;
else if (proto && strlen(proto))
d->s_proto = (char *)proto;