This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
integrate vmsperl contents into mainline (where VMS files conflicted,
authorGurusamy Sarathy <gsar@cpan.org>
Fri, 17 Sep 1999 20:16:28 +0000 (20:16 +0000)
committerGurusamy Sarathy <gsar@cpan.org>
Fri, 17 Sep 1999 20:16:28 +0000 (20:16 +0000)
vmsperl contents have prevailed)

p4raw-id: //depot/perl@4182

183 files changed:
AUTHORS
Changes
Configure
INSTALL
MANIFEST
README.dos
XSUB.h
av.h
bytecode.pl
configure.com
cop.h
cv.h
djgpp/config.over
djgpp/configure.bat
djgpp/djgpp.c
djgpp/djgppsed.sh
doio.c
dosish.h
dump.c
embed.h
embed.pl
embedvar.h
ext/B/B.pm
ext/B/B.xs
ext/B/B/Bblock.pm
ext/B/B/Bytecode.pm
ext/B/B/C.pm
ext/B/B/Debug.pm
ext/B/B/Terse.pm
ext/B/Makefile.PL
ext/B/defsubs_h.PL [moved from ext/B/defsubs.h.PL with 100% similarity]
ext/B/typemap
ext/ByteLoader/bytecode.h
ext/ByteLoader/byterun.h
ext/DB_File/Changes
ext/DB_File/DB_File.pm
ext/DB_File/DB_File.xs
ext/DB_File/Makefile.PL
ext/DB_File/dbinfo
ext/DB_File/typemap
ext/DB_File/version.c [new file with mode: 0644]
ext/Data/Dumper/Changes
ext/Data/Dumper/Dumper.pm
ext/Data/Dumper/Dumper.xs
ext/Data/Dumper/Todo
ext/Devel/DProf/DProf.xs
ext/DynaLoader/dl_aix.xs
ext/DynaLoader/dl_beos.xs
ext/DynaLoader/dl_cygwin.xs
ext/DynaLoader/dl_dld.xs
ext/DynaLoader/dl_dlopen.xs
ext/DynaLoader/dl_hpux.xs
ext/DynaLoader/dl_mpeix.xs
ext/DynaLoader/dl_next.xs
ext/DynaLoader/dl_rhapsody.xs
ext/DynaLoader/dl_vmesa.xs
ext/DynaLoader/dl_vms.xs
ext/Opcode/Opcode.pm
ext/Opcode/Safe.pm
ext/POSIX/POSIX.xs
ext/SDBM_File/sdbm/sdbm.c
ext/attrs/attrs.pm
ext/attrs/attrs.xs
handy.h
hints/hpux.sh
intrpvar.h
jpl/JNI/Closer.java [new file with mode: 0755]
jpl/JNI/JNI.pm
jpl/JNI/JNI.xs
jpl/JNI/JNIConfig [new file with mode: 0644]
jpl/JNI/JNIConfig.Win32 [new file with mode: 0644]
jpl/JNI/JNIConfig.kaffe [new file with mode: 0644]
jpl/JNI/JNIConfig.noembed [new file with mode: 0644]
jpl/JNI/JNIConfig.standard [new file with mode: 0644]
jpl/JNI/Makefile.PL
jpl/JNI/test.pl
jpl/JNI/typemap
jpl/JNI/typemap.gcc [new file with mode: 0644]
jpl/JNI/typemap.win32 [new file with mode: 0644]
jpl/JPL/Makefile.PL
jpl/PerlInterpreter/Makefile.PL
jpl/PerlInterpreter/PerlInterpreter.c
jpl/PerlInterpreter/PerlInterpreter.h
jpl/README
jpl/SETVARS.PL [new file with mode: 0644]
jpl/Sample/Makefile.PL
jpl/install-jpl
lib/Benchmark.pm
lib/ExtUtils/MM_Unix.pm
lib/ExtUtils/MakeMaker.pm
lib/ExtUtils/typemap
lib/File/Spec/Functions.pm
lib/Getopt/Long.pm
lib/Pod/Functions.pm
lib/Pod/Html.pm
lib/Test/Harness.pm
lib/Time/Local.pm
lib/perl5db.pl
lib/warning.pm [deleted file]
malloc.c
objXSUB.h
op.c
op.h
opcode.h
opcode.pl
opnames.h
patchlevel.h
perl.c
perl.h
perlapi.c [changed mode: 0755->0644]
perlapi.h [changed mode: 0755->0644]
pod/Makefile
pod/buildtoc
pod/perl.pod
pod/perlcompile.pod [new file with mode: 0644]
pod/perldata.pod
pod/perldelta.pod
pod/perldiag.pod
pod/perlfunc.pod
pod/perlguts.pod
pod/perlhist.pod
pod/perllexwarn.pod
pod/perlop.pod
pod/perlre.pod
pod/perlsub.pod
pod/perlsyn.pod
pod/pod2usage.PL
pod/podchecker.PL
pod/podselect.PL
pod/roffitall
pp.c
pp.h
pp.sym
pp_ctl.c
pp_hot.c
pp_proto.h
pp_sys.c
proto.h
regcomp.c
regexec.c
sv.c
sv.h
t/TEST
t/UTEST
t/harness
t/io/openpid.t
t/lib/bigfltpm.t [moved from t/lib/bigfloatpm.t with 100% similarity]
t/lib/db-btree.t
t/lib/dumper.t
t/lib/gol-basic.t [new file with mode: 0755]
t/lib/gol-compat.t [new file with mode: 0755]
t/lib/gol-linkage.t [new file with mode: 0755]
t/op/64bit.t
t/op/lex_assign.t
t/op/misc.t
t/op/pat.t
t/op/sprintf.t
t/pragma/locale.t
t/pragma/sub_lval.t [new file with mode: 0755]
t/pragma/warn/doio
t/pragma/warn/op
t/pragma/warn/pp_ctl
t/pragma/warn/pp_hot
t/pragma/warn/pp_sys
t/pragma/warn/regcomp
t/pragma/warn/sv
t/pragma/warn/toke
t/pragma/warn/universal
t/pragma/warn/utf8
t/pragma/warn/util
taint.c
thrdvar.h
toke.c
util.c
utils/Makefile
utils/perlcc.PL
vms/vms.c
warning.h [deleted file]
win32/Makefile
win32/config_sh.PL
win32/makefile.mk
x2p/s2p.PL
xsutils.c

diff --git a/AUTHORS b/AUTHORS
index ed52400..3ed8133 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -39,7 +39,7 @@ mbiggar               Mark A Biggar           mab@wdl.loral.com
 mbligh         Martin J. Bligh         mbligh@sequent.com
 mike           Mike Stok               mike@stok.co.uk
 millert                Todd Miller             millert@openbsd.org
-molnarl                Laszlo Molnar           molnarl@cdata.tvnet.hu
+laszlo.molnar  Laszlo Molnar           Laszlo.Molnar@eth.ericsson.se
 mpeix          Mark Bixby              markb@cccd.edu
 muir           David Muir Sharnoff     muir@idiom.com
 neale          Neale Ferguson          neale@VMA.TABNSW.COM.AU
@@ -86,7 +86,7 @@ cygwin                win32
 dec_osf                jhi,spider
 dgux           roderick
 doc            tchrist
-dos            lmolnarl
+dos            laszlo.molnar
 dynix/ptx      mbligh
 ebcdic         vms,vmesa,posixbc
 filespec       kjahds
@@ -99,7 +99,6 @@ locale                jhi,domo
 lynxos         lynxos
 machten                domo
 mm             makemaker
-msdos          molnarl
 mvs            pvhp
 netbsd         jhi
 openbsd                millert
diff --git a/Changes b/Changes
index e23e88e..8f0fb75 100644 (file)
--- a/Changes
+++ b/Changes
@@ -31,7 +31,7 @@ current addresses (as of July 1998):
     Doug MacEachern     <dougm@opengroup.org>
     Paul Marquess       <pmarquess@bfsec.bt.co.uk>
     Stephen McCamant    <alias@mcs.com>
-    Laszlo Molnar      <molnarl@cdata.tvnet.hu>
+    Laszlo Molnar       <laszlo.molnar@eth.ericsson.se>
     Hans Mulder         <hansmu@xs4all.nl>
     Matthias Neeracher  <neeri@iis.ee.ethz.ch>
     Jeff Okamoto        <okamoto@hpcc123.corp.hp.com>
@@ -75,7 +75,1153 @@ indicator:
 
 
 ----------------
-Version 5.005_61        Development release working toward 5.006
+Version 5.005_62        Development release working toward 5.006
+----------------
+
+____________________________________________________________________________
+[  4161] By: gsar                                  on 1999/09/15  04:08:25
+        Log: missing perlhist dates from Jeff Okamoto
+     Branch: perl
+          ! pod/perlhist.pod
+____________________________________________________________________________
+[  4160] By: gsar                                  on 1999/09/15  03:13:08
+        Log: jpl tweak
+     Branch: perl
+          ! MANIFEST jpl/JNI/Makefile.PL
+____________________________________________________________________________
+[  4159] By: gsar                                  on 1999/09/15  02:57:08
+        Log: update to JPL snapshot v09141999, with minor tweaks (from Brian
+             Jepson <bjepson@home.com>)
+     Branch: perl
+          + jpl/JNI/Closer.java jpl/JNI/JNIConfig jpl/JNI/JNIConfig.Win32
+          + jpl/JNI/JNIConfig.kaffe jpl/JNI/JNIConfig.noembed
+          + jpl/JNI/JNIConfig.standard jpl/JNI/typemap.gcc
+          + jpl/JNI/typemap.win32 jpl/SETVARS.PL
+          ! jpl/JNI/JNI.pm jpl/JNI/JNI.xs jpl/JNI/Makefile.PL
+          ! jpl/JNI/test.pl jpl/JNI/typemap jpl/JPL/Makefile.PL
+          ! jpl/PerlInterpreter/Makefile.PL
+          ! jpl/PerlInterpreter/PerlInterpreter.c
+          ! jpl/PerlInterpreter/PerlInterpreter.h jpl/README
+          ! jpl/Sample/Makefile.PL jpl/install-jpl
+____________________________________________________________________________
+[  4158] By: gsar                                  on 1999/09/15  01:27:14
+        Log: From:    Ilya Zakharevich <ilya@math.ohio-state.edu>
+             Date:    Tue, 14 Sep 1999 21:26:15 EDT
+             Message-Id: <199909150126.VAA24720@monk.mps.ohio-state.edu>
+             Subject: [PATCH 5.005_58+] Re: [ID 19990914.001] Perl_re_intuit_start() hangs in a loop
+     Branch: perl
+          ! regexec.c t/op/pat.t
+____________________________________________________________________________
+[  4157] By: jhi                                   on 1999/09/14  21:18:09
+        Log: config.h will define USE_64_BITS if need be.
+     Branch: cfgperl
+          ! hints/irix_6.sh
+____________________________________________________________________________
+[  4156] By: jhi                                   on 1999/09/14  20:30:00
+        Log: Change #4149 necessitates also a small code change.
+     Branch: cfgperl
+          ! ext/B/defsubs_h.PL
+____________________________________________________________________________
+[  4155] By: jhi                                   on 1999/09/14  20:15:53
+        Log: Update EPOC libdir names.
+     Branch: cfgperl
+          ! epoc/config.h
+____________________________________________________________________________
+[  4154] By: jhi                                   on 1999/09/14  20:13:41
+        Log: Obsolete epoc/config.h caused #4153 to re-introduce already
+             deceased HAS.*DBM.*64 mumblings.
+     Branch: cfgperl
+          ! Configure config_h.SH epoc/config.h
+____________________________________________________________________________
+[  4153] By: jhi                                   on 1999/09/14  20:04:53
+        Log: Configure nits.
+     Branch: cfgperl
+          ! Configure config_h.SH
+     Branch: metaconfig
+          ! U/compline/d_sigaction.U U/threads/i_pthread.U
+____________________________________________________________________________
+[  4152] By: jhi                                   on 1999/09/14  19:30:22
+        Log: Integrate with Sarathy.
+     Branch: cfgperl
+         +> ext/B/defsubs_h.PL t/lib/bigfltpm.t
+          - ext/B/defsubs.h.PL t/lib/bigfloatpm.t
+         !> INSTALL MANIFEST ext/B/Makefile.PL pod/perldiag.pod
+         !> win32/config_sh.PL
+____________________________________________________________________________
+[  4151] By: jhi                                   on 1999/09/14  10:25:01
+        Log: Update Unicode database and recompute the tables.
+             Rename the .txt files to be more Unicode 3.0-like.
+             Unihan-3.0.txt not included because it is 16 MB.
+             syllables.txt is manually maintained.
+             See ReadMe.txt for description of the .txt files.
+             (not all of them are used yet)
+     Branch: cfgperl
+          + lib/unicode/ArabShap.txt lib/unicode/Blocks.txt
+          + lib/unicode/CompExcl.txt lib/unicode/EAWidth.txt
+          + lib/unicode/Index.txt lib/unicode/Jamo-2.txt
+          + lib/unicode/LineBrk.txt lib/unicode/Names.txt
+          + lib/unicode/Props.txt lib/unicode/ReadMe.txt
+          + lib/unicode/SpecCase.txt
+          - lib/unicode/arabshp.txt lib/unicode/blocks.txt
+          - lib/unicode/index2.txt lib/unicode/jamo2.txt
+          - lib/unicode/names2.txt lib/unicode/props2.txt
+          - lib/unicode/readme.txt
+          ! MANIFEST lib/unicode/ArabLink.pl lib/unicode/ArabLnkGrp.pl
+          ! lib/unicode/Bidirectional.pl lib/unicode/Block.pl
+          ! lib/unicode/Category.pl lib/unicode/CombiningClass.pl
+          ! lib/unicode/Decomposition.pl
+          ! lib/unicode/In/ArabicPresentationForms-B.pl
+          ! lib/unicode/In/Specials.pl lib/unicode/In/Tibetan.pl
+          ! lib/unicode/Is/Alnum.pl lib/unicode/Is/Alpha.pl
+          ! lib/unicode/Is/BidiCS.pl lib/unicode/Is/BidiL.pl
+          ! lib/unicode/Is/BidiON.pl lib/unicode/Is/BidiWS.pl
+          ! lib/unicode/Is/DCcompat.pl lib/unicode/Is/DecoCanon.pl
+          ! lib/unicode/Is/DecoCompat.pl lib/unicode/Is/L.pl
+          ! lib/unicode/Is/Ll.pl lib/unicode/Is/Lo.pl
+          ! lib/unicode/Is/Lower.pl lib/unicode/Is/Lu.pl
+          ! lib/unicode/Is/Pd.pl lib/unicode/Is/Po.pl lib/unicode/Is/S.pl
+          ! lib/unicode/Is/Sm.pl lib/unicode/Is/So.pl
+          ! lib/unicode/Is/Upper.pl lib/unicode/Is/Word.pl
+          ! lib/unicode/JamoShort.pl lib/unicode/UnicodeData-Latest.txt
+          ! lib/unicode/mktables.PL
+____________________________________________________________________________
+[  4150] By: gsar                                  on 1999/09/14  09:31:57
+        Log: INSTALL tweak
+     Branch: perl
+          ! INSTALL
+____________________________________________________________________________
+[  4149] By: gsar                                  on 1999/09/14  09:00:45
+        Log: change some filenames to be 8.3-friendly
+     Branch: perl
+         +> ext/B/defsubs_h.PL t/lib/bigfltpm.t
+          - ext/B/defsubs.h.PL t/lib/bigfloatpm.t
+          ! MANIFEST ext/B/Makefile.PL pod/perldiag.pod
+____________________________________________________________________________
+[  4148] By: gsar                                  on 1999/09/14  08:35:00
+        Log: win32 config tweak (suggested by Greg Chapman <glc@well.com>)
+     Branch: perl
+          ! win32/config_sh.PL
+____________________________________________________________________________
+[  4147] By: jhi                                   on 1999/09/14  08:07:49
+        Log: Not that UVSIZE normally differs that much from IVSIZE...
+     Branch: cfgperl
+          ! perl.h
+____________________________________________________________________________
+[  4146] By: jhi                                   on 1999/09/14  08:04:40
+        Log: Integrate with Sarathy.
+     Branch: cfgperl
+         !> Changes ext/DB_File/DB_File.xs
+____________________________________________________________________________
+[  4145] By: jhi                                   on 1999/09/14  07:10:02
+        Log: I_PTHREAD was PTHREADEAD.
+     Branch: cfgperl
+          ! Configure config_h.SH
+     Branch: metaconfig
+          ! U/threads/i_pthread.U
+____________________________________________________________________________
+[  4144] By: gsar                                  on 1999/09/14  06:46:47
+        Log: change#4113 was missing DB_File.xs changes
+     Branch: perl
+          ! ext/DB_File/DB_File.xs
+____________________________________________________________________________
+[  4143] By: jhi                                   on 1999/09/13  20:16:20
+        Log: Small doc and whitespace edits.
+     Branch: cfgperl
+          ! ext/DynaLoader/dl_aix.xs ext/DynaLoader/dl_beos.xs
+          ! ext/DynaLoader/dl_cygwin.xs ext/DynaLoader/dl_dld.xs
+          ! ext/DynaLoader/dl_hpux.xs ext/DynaLoader/dl_mpeix.xs
+          ! ext/DynaLoader/dl_next.xs ext/DynaLoader/dl_rhapsody.xs
+          ! ext/DynaLoader/dl_vmesa.xs ext/DynaLoader/dl_vms.xs
+          ! pod/perldelta.pod
+____________________________________________________________________________
+[  4142] By: gsar                                  on 1999/09/13  19:32:31
+        Log: integrate cfgperl contents into mainline, update Changes
+     Branch: perl
+         +> ext/DB_File/version.c
+          ! Changes
+         !> (integrate 44 files)
+____________________________________________________________________________
+[  4141] By: jhi                                   on 1999/09/13  16:16:56
+        Log: Scan for <pthread.h> always.
+     Branch: cfgperl
+          ! Configure config_h.SH perl.h
+     Branch: metaconfig
+          ! U/threads/i_pthread.U
+____________________________________________________________________________
+[  4140] By: jhi                                   on 1999/09/13  16:00:08
+        Log: Integrate with Sarathy.
+     Branch: cfgperl
+         !> (integrate 27 files)
+____________________________________________________________________________
+[  4139] By: jhi                                   on 1999/09/13  15:35:18
+        Log: Add -A option to Configure to diddle with variables
+             after the hints file has been applied.
+     Branch: cfgperl
+          ! Configure config_h.SH
+     Branch: metaconfig
+          ! U/modified/Oldconfig.U U/modified/Options.U
+____________________________________________________________________________
+[  4138] By: jhi                                   on 1999/09/13  13:42:56
+        Log: Change #4136 edited DynaLoader.xs which is kind of fruitless.
+     Branch: cfgperl
+          ! ext/DynaLoader/dl_aix.xs ext/DynaLoader/dl_beos.xs
+          ! ext/DynaLoader/dl_cygwin.xs ext/DynaLoader/dl_dld.xs
+          ! ext/DynaLoader/dl_hpux.xs ext/DynaLoader/dl_mpeix.xs
+          ! ext/DynaLoader/dl_next.xs ext/DynaLoader/dl_rhapsody.xs
+          ! ext/DynaLoader/dl_vmesa.xs ext/DynaLoader/dl_vms.xs
+____________________________________________________________________________
+[  4137] By: jhi                                   on 1999/09/13  13:25:31
+        Log: Applying change #4136 manually introduced patch residue.
+     Branch: cfgperl
+          ! perl.h
+____________________________________________________________________________
+[  4136] By: jhi                                   on 1999/09/13  13:23:04
+        Log: Replace change #4100 with
+             From: Robin Barker <rmb1@cise.npl.co.uk>
+             To: gsar@activestate.com
+             Cc: perl5-porters@perl.org
+             Subject: Re: [ID 19990907.004] [PATCH perl5.005_61] compiler warnings with -Duse64bits
+             Date: Mon, 13 Sep 1999 14:15:11 +0100 (BST)
+             Message-Id: <199909131315.OAA24012@tempest.npl.co.uk>
+     Branch: cfgperl
+          ! doio.c dump.c ext/B/B.xs ext/B/typemap
+          ! ext/ByteLoader/bytecode.h ext/Devel/DProf/DProf.xs
+          ! ext/DynaLoader/dl_dlopen.xs ext/ODBM_File/ODBM_File.xs
+          ! ext/POSIX/POSIX.xs lib/ExtUtils/typemap malloc.c perl.h pp.c
+          ! pp_ctl.c pp_hot.c pp_sys.c sv.c
+____________________________________________________________________________
+[  4135] By: jhi                                   on 1999/09/13  10:22:31
+        Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
+             To: perl5-porters@perl.org (Mailing list Perl5)
+             Subject: [PATCH 5.005_61] MakeMaker supports uninstalled Perls
+             Date: Sat, 11 Sep 1999 05:31:03 -0400 (EDT)
+             Message-Id: <199909110931.FAA11036@monk.mps.ohio-state.edu>
+             
+             From: andreas.koenig@anima.de (Andreas J. Koenig)
+             To: Ilya Zakharevich <ilya@math.ohio-state.edu>
+             Cc: perl5-porters@perl.org (Mailing list Perl5)
+             Subject: Re: [PATCH 5.005_61] MakeMaker supports uninstalled Perls
+             Date: 11 Sep 1999 15:36:26 +0200
+             Message-ID: <sfc906dr2n9.fsf@hohenstaufen.in-berlin.de>
+     Branch: cfgperl
+          ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MakeMaker.pm
+____________________________________________________________________________
+[  4134] By: jhi                                   on 1999/09/13  10:20:14
+        Log: From: Tom Phoenix <rootbeer@redcat.com>
+             To: Perl Porters Mailing List <perl5-porters@perl.org>
+             Subject: [DOCPATCH] Server errors and perldiag
+             Date: Fri, 10 Sep 1999 16:45:02 -0700 (PDT)
+             Message-ID: <Pine.GSO.4.10.9909101639490.16999-100000@user2.teleport.com>
+     Branch: cfgperl
+          ! pod/perldiag.pod
+____________________________________________________________________________
+[  4133] By: gsar                                  on 1999/09/13  03:25:43
+        Log: avoid assertion failure on C<@a'>
+     Branch: perl
+          ! toke.c
+____________________________________________________________________________
+[  4132] By: gsar                                  on 1999/09/13  03:03:57
+        Log: add -DPERL_Y2KWARN build option that will generate additional
+             warnings on "19$yy" etc (reworked a patch suggested by
+             Ulrich Pfeifer <upf@de.uu.net>)
+     Branch: perl
+          ! pod/perldelta.pod pod/perldiag.pod pod/perllexwarn.pod
+          ! pp_hot.c sv.c t/pragma/warn/pp_hot t/pragma/warn/sv
+____________________________________________________________________________
+[  4131] By: gsar                                  on 1999/09/12  22:06:25
+        Log: fix DATA leaks; reword documentation about the DATA filehandle
+     Branch: perl
+          ! ext/Opcode/Safe.pm lib/Pod/Functions.pm pod/perldata.pod
+____________________________________________________________________________
+[  4130] By: gsar                                  on 1999/09/12  20:08:56
+        Log: make sprintf("%g",...) threadsafe; only taint its result iff the
+             formatted result looks nonstandard
+     Branch: perl
+          ! embed.pl embedvar.h intrpvar.h objXSUB.h perl.c perlapi.c
+          ! pod/perlfunc.pod pod/perlguts.pod proto.h sv.c
+          ! t/pragma/locale.t thrdvar.h
+____________________________________________________________________________
+[  4129] By: gsar                                  on 1999/09/12  17:04:11
+        Log: From: Doug MacEachern <dougm@cp.net>
+             Date: Sun, 25 Jul 1999 15:49:00 -0700 (PDT)
+             Message-ID: <Pine.LNX.4.10.9907251538380.373-100000@mojo.eng.cp.net>
+             Subject: [PATCH 5.005_57] B::clearsym
+     Branch: perl
+          ! ext/B/B.pm ext/B/B/Bblock.pm ext/B/B/Debug.pm ext/B/B/Terse.pm
+____________________________________________________________________________
+[  4128] By: gsar                                  on 1999/09/12  16:59:12
+        Log: better debugger help output (from Ilya Zakharevich)
+     Branch: perl
+          ! lib/perl5db.pl
+____________________________________________________________________________
+[  4127] By: jhi                                   on 1999/09/11  20:50:37
+        Log: Integrate with Sarathy.
+     Branch: cfgperl
+         +> pod/perlcompile.pod t/lib/gol-basic.t t/lib/gol-compat.t
+         +> t/lib/gol-linkage.t
+         !> (integrate 43 files)
+____________________________________________________________________________
+[  4126] By: nick                                  on 1999/09/10  20:44:22
+        Log: Get resolve -at mainline
+     Branch: utfperl
+         +> (branch 297 files)
+          - README.cygwin32 XSlock.h bytecode.h byterun.c byterun.h
+          - cygwin32/cw32imp.h cygwin32/gcc2 cygwin32/ld2 cygwin32/perlgcc
+          - cygwin32/perlld ext/B/byteperl.c ext/DynaLoader/dl_cygwin32.xs
+          - hints/cygwin32.sh interp.sym myconfig objpp.h perl_exp.SH
+          - t/pragma/warn-1global t/pragma/warning.t thread.sym
+          - win32/GenCAPI.pl win32/TEST win32/autosplit.pl
+          - win32/bin/network.pl win32/bin/webget.pl win32/bin/www.pl
+          - win32/genxsdef.pl win32/makedef.pl win32/makemain.pl
+          - win32/makeperldef.pl win32/perlhost.h
+         !> (integrate 847 files)
+____________________________________________________________________________
+[  4125] By: gsar                                  on 1999/09/10  19:22:14
+        Log: s/dXS_TARGET/dXSTARG/ in change#4044 (to match dARGS vs dXSARGS
+             etc.)
+     Branch: perl
+          ! XSUB.h pp.h
+____________________________________________________________________________
+[  4124] By: gsar                                  on 1999/09/10  19:14:35
+        Log: rewrote substantive parts of patch
+             From: Ilya Zakharevich <ilya@math.ohio-state.edu>
+             Date: Fri, 27 Aug 1999 19:02:18 -0400
+             Message-ID: <19990827190218.A19561@monk.mps.ohio-state.edu>
+             Subject: [PATCH 5.005_58] REx documentation
+     Branch: perl
+          ! pod/perlre.pod
+____________________________________________________________________________
+[  4123] By: gsar                                  on 1999/09/10  18:21:53
+        Log: note about AVf_*
+     Branch: perl
+          ! av.h
+____________________________________________________________________________
+[  4122] By: gsar                                  on 1999/09/10  17:55:42
+        Log: allow 'text' in L<text|A::B/"C"> (from Martin Lichtin
+             <lichtin@bivio.com>)
+     Branch: perl
+          ! lib/Pod/Html.pm
+____________________________________________________________________________
+[  4121] By: gsar                                  on 1999/09/10  17:49:35
+        Log: dos-djgpp update (from Laszlo Molnar <laszlo.molnar@eth.ericsson.se>)
+     Branch: perl
+          ! AUTHORS Changes README.dos djgpp/config.over
+          ! djgpp/configure.bat djgpp/djgpp.c djgpp/djgppsed.sh dosish.h
+          ! lib/ExtUtils/MM_Unix.pm pod/pod2usage.PL pod/podchecker.PL
+          ! pod/podselect.PL sv.h t/io/openpid.t util.c
+____________________________________________________________________________
+[  4120] By: gsar                                  on 1999/09/10  12:25:01
+        Log: add perlcompile.pod (edited content from Nathan Torkington
+             <gnat@frii.com> and others)
+     Branch: perl
+          + pod/perlcompile.pod
+          ! MANIFEST pod/Makefile pod/buildtoc pod/perl.pod pod/roffitall
+____________________________________________________________________________
+[  4119] By: gsar                                  on 1999/09/10  11:05:13
+        Log: avoid leaking static local_patches unless patchlevel.h is
+             explicitly included
+     Branch: perl
+          ! patchlevel.h perl.c
+____________________________________________________________________________
+[  4118] By: gsar                                  on 1999/09/10  10:44:54
+        Log: upgrade to Getopt::Long v2.20 (from Johan Vromans
+             <jvromans@squirrel.nl>)
+     Branch: perl
+          + t/lib/gol-basic.t t/lib/gol-compat.t t/lib/gol-linkage.t
+          ! Changes MANIFEST lib/Getopt/Long.pm
+____________________________________________________________________________
+[  4117] By: jhi                                   on 1999/09/09  18:24:30
+        Log: Remove ill-designed %B introduced by change #4111.
+     Branch: cfgperl
+          ! sv.c t/op/sprintf.t
+____________________________________________________________________________
+[  4116] By: jhi                                   on 1999/09/09  15:56:52
+        Log: perldeltify change #4115.
+     Branch: cfgperl
+          ! pod/perldelta.pod
+____________________________________________________________________________
+[  4115] By: jhi                                   on 1999/09/09  15:48:56
+        Log: From: "John L. Allen" <allen@grumman.com> 
+             To: perl5-porters@perl.org 
+             Subject: [ID 19990901.003] Time::Local should not croak on "out-of-range" days
+             Date: Wed, 1 Sep 1999 13:33:39 -0400 (EDT) 
+             Message-Id: <199909011733.NAA17356@gateway.grumman.com> 
+     Branch: cfgperl
+          ! lib/Time/Local.pm
+____________________________________________________________________________
+[  4114] By: jhi                                   on 1999/09/09  15:42:30
+        Log: From: "Daniel S. Lewart" <lewart@www.cvm.uiuc.edu>
+             To: perl5-porters@perl.org
+             Subject: [ID 19990909.003] MAXINT redefined warning on HP-UX 10.20
+             Date: Thu, 9 Sep 1999 10:33:37 -0500 (CDT)
+             Message-Id: <199909091533.KAA01242@www.cvm.uiuc.edu>
+     Branch: cfgperl
+          ! pp_sys.c
+____________________________________________________________________________
+[  4113] By: jhi                                   on 1999/09/09  10:17:45
+        Log: From: paul.marquess@bt.com
+             To: gsar@ActiveState.com
+             Cc: perl5-porters@perl.org
+             Subject: [PATCH 5.005_61] DB_File 1.71
+             Date: Thu, 9 Sep 1999 11:20:13 +0100
+             Message-ID: <5104D4DBC598D211B5FE0000F8FE7EB202D49BBE@mbtlipnt02.btlabs.bt.co.uk>
+     Branch: cfgperl
+          + ext/DB_File/version.c
+          ! MANIFEST ext/DB_File/Changes ext/DB_File/DB_File.pm
+          ! ext/DB_File/Makefile.PL ext/DB_File/dbinfo ext/DB_File/typemap
+          ! t/lib/db-btree.t
+____________________________________________________________________________
+[  4112] By: jhi                                   on 1999/09/09  09:05:32
+        Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
+             To: perl5-porters@perl.org (Mailing list Perl5)
+             Subject: [PATCH 5.005_58] Fix interaction of (?p{}) and (?>)
+             Date: Thu, 9 Sep 1999 04:40:11 -0400 (EDT)
+             Message-Id: <199909090840.EAA26471@monk.mps.ohio-state.edu>
+     Branch: cfgperl
+          ! regexec.c t/op/pat.t
+____________________________________________________________________________
+[  4111] By: jhi                                   on 1999/09/09  07:50:07
+        Log: %#b in particular and %B in general were kaputt.
+     Branch: cfgperl
+          ! sv.c t/op/sprintf.t
+____________________________________________________________________________
+[  4110] By: jhi                                   on 1999/09/09  07:29:17
+        Log: Tidy up 64-bit situation in perldelta.
+     Branch: cfgperl
+          ! pod/perldelta.pod
+____________________________________________________________________________
+[  4109] By: jhi                                   on 1999/09/09  07:26:53
+        Log: Clear up PL_regcc issues.
+             
+             From: Ilya Zakharevich <ilya@math.ohio-state.edu>
+             To: perl5-porters@perl.org (Mailing list Perl5)
+             Subject: [PATCH 5.005_60] Another regexec.c unobfuscation
+             Date: Thu, 9 Sep 1999 02:49:49 -0400 (EDT)
+             Message-Id: <199909090649.CAA26119@monk.mps.ohio-state.edu>
+     Branch: cfgperl
+          ! regexec.c
+____________________________________________________________________________
+[  4108] By: gsar                                  on 1999/09/08  20:52:51
+        Log: avoid ass_u_ming uppercase types are not user objects (spotted
+             by Kurt Starsinic)
+     Branch: perl
+          ! ext/Data/Dumper/Dumper.pm
+____________________________________________________________________________
+[  4107] By: gsar                                  on 1999/09/08  20:35:18
+        Log: From: akim@epita.fr (DEMAILLE Akim)
+             Date: Wed, 8 Sep 1999 18:18:44 +0200 (CEST)
+             Message-Id: <m11OkQm-003A4IC@beyrouth.lrde.epita.fr>
+             Subject: [ID 19990908.014] s2p does not quote @
+     Branch: perl
+          ! x2p/s2p.PL
+____________________________________________________________________________
+[  4106] By: gsar                                  on 1999/09/08  20:25:12
+        Log: integrate cfgperl contents into mainline
+     Branch: perl
+         !> (integrate 30 files)
+____________________________________________________________________________
+[  4105] By: jhi                                   on 1999/09/08  09:02:37
+        Log: Minor touches at the [:class:] description.
+     Branch: cfgperl
+          ! pod/perlre.pod
+____________________________________________________________________________
+[  4104] By: jhi                                   on 1999/09/08  08:57:58
+        Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
+             To: Mailing list Perl5 <perl5-porters@perl.org>
+             Subject: [PATCH 5.005_58] Fix debugging output for REx
+             Date: Wed, 8 Sep 1999 05:02:02 -0400
+             Message-ID: <19990908050201.A17682@monk.mps.ohio-state.edu>
+     Branch: cfgperl
+          ! regcomp.c
+____________________________________________________________________________
+[  4103] By: gsar                                  on 1999/09/08  00:53:50
+        Log: fix memory leak in C<sub f { split ' ', "a b" } f() while 1>
+     Branch: perl
+          ! pp.c
+____________________________________________________________________________
+[  4102] By: gsar                                  on 1999/09/08  00:52:50
+        Log: fix memory leak in C<sub f { @_ = 1 } f() while 1>
+     Branch: perl
+          ! cop.h pp_hot.c
+____________________________________________________________________________
+[  4101] By: gsar                                  on 1999/09/07  17:25:07
+        Log: various fixups for windows
+     Branch: perl
+          ! embed.h embed.pl objXSUB.h op.c perlapi.c proto.h
+          ! win32/Makefile win32/makefile.mk xsutils.c
+____________________________________________________________________________
+[  4100] By: jhi                                   on 1999/09/07  12:49:15
+        Log: Fix pointer casts.
+             
+             From: Robin Barker <rmb1@cise.npl.co.uk>
+             To: perl5-porters@perl.org
+             Subject: [ID 19990907.004] [PATCH perl5.005_61] compiler warnings with
+             -Duse64bits
+             Date: Tue, 7 Sep 1999 12:30:18 +0100 (BST)
+             Message-Id: <199909071130.MAA11435@tempest.npl.co.uk>
+     Branch: cfgperl
+          ! doio.c dump.c ext/B/B.xs ext/B/typemap
+          ! ext/ByteLoader/bytecode.h ext/Devel/DProf/DProf.xs
+          ! ext/DynaLoader/dl_dlopen.xs ext/ODBM_File/ODBM_File.xs
+          ! ext/POSIX/POSIX.xs lib/ExtUtils/typemap malloc.c perl.h pp.c
+          ! pp_ctl.c pp_hot.c pp_sys.c sv.c
+____________________________________________________________________________
+[  4099] By: jhi                                   on 1999/09/07  10:29:04
+        Log: Add sig/pid/uid size and sign probes.
+     Branch: metaconfig
+          + U/typedefs/gidsign.U U/typedefs/gidsize.U U/typedefs/pidsign.U
+          + U/typedefs/pidsize.U U/typedefs/uidsign.U U/typedefs/uidsize.U
+____________________________________________________________________________
+[  4098] By: jhi                                   on 1999/09/07  10:27:06
+        Log: Band-aid until we've got %{Uid_t} or something similar
+             for sv_catpvfn().
+     Branch: cfgperl
+          ! taint.c
+____________________________________________________________________________
+[  4097] By: jhi                                   on 1999/09/07  09:41:23
+        Log: Fix a printf thinko: now quads must have the ll L q prefix.
+             (in other words, a bare %d is an int/unsigned)
+     Branch: cfgperl
+          ! pp_sys.c sv.c t/op/64bit.t
+____________________________________________________________________________
+[  4096] By: jhi                                   on 1999/09/07  07:36:17
+        Log: HP-UX 10.20 and gcc 2.8.1 break UINT32_MAX.
+             
+             From: "Daniel S. Lewart" <lewart@www.cvm.uiuc.edu>
+             To: perl5-porters@perl.org
+             Subject: [ID 19990906.007] Not OK: perl 5.00561 on PA-RISC1.1 10.20
+             Date: Mon, 6 Sep 1999 21:18:12 -0500 (CDT)
+             Message-Id: <199909070218.VAA29232@www.cvm.uiuc.edu>
+     Branch: cfgperl
+          ! hints/hpux.sh perl.h
+____________________________________________________________________________
+[  4095] By: gsar                                  on 1999/09/06  20:47:02
+        Log: applied suggested patch with suitable test to detect MSVC
+             From: "Vishal Bhatia" <vishalb@my-deja.com>
+             Date: Wed, 11 Aug 1999 01:43:28 -0700
+             Message-ID: <GFCJELIOGEENAAAA@my-deja.com>
+             Subject: compiler on  win32
+     Branch: perl
+          ! ext/B/B/C.pm
+____________________________________________________________________________
+[  4094] By: jhi                                   on 1999/09/06  20:34:44
+        Log: Integrate with Sarathy.
+     Branch: cfgperl
+         !> ext/B/B/Bytecode.pm lib/Test/Harness.pm t/TEST t/UTEST
+         !> t/harness t/pragma/sub_lval.t utils/Makefile utils/perlcc.PL
+____________________________________________________________________________
+[  4093] By: jhi                                   on 1999/09/06  20:33:43
+        Log: Fix UV_SIZEOF to UVSIZE; change the overflow tests
+             so that they overflow also on 64-bit platforms.
+     Branch: cfgperl
+          ! t/pragma/warn/toke t/pragma/warn/util toke.c util.c
+____________________________________________________________________________
+[  4092] By: gsar                                  on 1999/09/06  20:16:58
+        Log: support bytecode and C backends in perlcc (patch suggested
+             by Tom Hughes <tom@compton.au>); s/-opt/-noopt/ and make the
+             C backend the default; describe new switches in pod; introduce
+             PERLCC_OPTS and s/COMPILE_TIMEOUT/PERLCC_TIMEOUT/;
+             s/COMPILE_TEST/HARNESS_COMPILE_TEST/; document these %ENV
+             entries
+     Branch: perl
+          ! ext/B/B/Bytecode.pm lib/Test/Harness.pm t/TEST t/UTEST
+          ! t/harness utils/Makefile utils/perlcc.PL
+____________________________________________________________________________
+[  4091] By: jhi                                   on 1999/09/06  19:10:41
+        Log: Integrate with Sarathy.
+     Branch: cfgperl
+         +> t/pragma/sub_lval.t
+         !> (integrate 52 files)
+____________________________________________________________________________
+[  4090] By: gsar                                  on 1999/09/06  19:09:06
+        Log: propagate changed error text
+     Branch: perl
+          ! t/pragma/sub_lval.t
+____________________________________________________________________________
+[  4089] By: gsar                                  on 1999/09/06  18:54:43
+        Log: sprintf doc tweak (from Ian Phillipps <ian@dial.pipex.com>)
+     Branch: perl
+          ! pod/perlfunc.pod
+____________________________________________________________________________
+[  4088] By: gsar                                  on 1999/09/06  18:52:10
+        Log: From: paul.marquess@bt.com
+             Date: Sun, 5 Sep 1999 15:11:08 +0100 
+             Message-ID: <5104D4DBC598D211B5FE0000F8FE7EB202D49BAB@mbtlipnt02.btlabs.bt.co.uk>
+             Subject: [PATCH 5.005_61] Another patch for Lexical Warnings
+     Branch: perl
+          ! pp_sys.c t/pragma/warn/doio t/pragma/warn/op
+          ! t/pragma/warn/pp_hot t/pragma/warn/pp_sys
+          ! t/pragma/warn/regcomp t/pragma/warn/sv t/pragma/warn/toke
+          ! t/pragma/warn/universal t/pragma/warn/utf8 t/pragma/warn/util
+          ! toke.c
+____________________________________________________________________________
+[  4087] By: gsar                                  on 1999/09/06  18:06:06
+        Log: change#3612 is buggy when quotemeta argument matches target
+             (hope this is the last of the optimized-OP_SASSIGN bugs)
+             From: Ilya Zakharevich <ilya@math.ohio-state.edu>
+             Date: Sun, 5 Sep 1999 06:07:42 -0400 (EDT)
+             Message-Id: <199909051007.GAA06423@monk.mps.ohio-state.edu>
+             Subject: Re: [BUG: quotemeta]
+     Branch: perl
+          ! Changes op.c t/op/lex_assign.t
+____________________________________________________________________________
+[  4086] By: gsar                                  on 1999/09/06  17:57:52
+        Log: misc tweaks
+     Branch: perl
+          ! bytecode.pl ext/ByteLoader/byterun.h pod/perlsyn.pod toke.c
+____________________________________________________________________________
+[  4085] By: gsar                                  on 1999/09/06  03:54:23
+        Log: applied patch suggested by Hans Mulder to fix problems on
+             OPENSTEP-Mach; be more careful about PERL_POLLUTE_MALLOC
+             when they ask for bincompat (platforms that used to default
+             to EMBEDMYMALLOC continue to do so); disable warnings.t#192
+             (appears unsalvageable on some platforms)
+     Branch: perl
+          ! embed.h embed.pl handy.h perl.h pp_sys.c t/pragma/warn/pp_hot
+____________________________________________________________________________
+[  4084] By: bailey                                on 1999/09/06  02:39:11
+        Log: Integrate mainline 5.05_61
+     Branch: vmsperl
+         +> (branch 32 files)
+          - lib/unicode/EthiopicSyllables.txt
+          - lib/unicode/MakeEthiopicSyllables.PL t/pragma/warning.t
+          - warning.pl
+          ! vms/descrip_mms.template vms/gen_shrfls.pl vms/perly_c.vms
+          ! vms/perly_h.vms vms/vms.c
+         !> (integrate 346 files)
+____________________________________________________________________________
+[  4083] By: gsar                                  on 1999/09/06  00:10:40
+        Log: optional warning on join(/foo/...) (reworked suggested patch
+             by Mark-Jason Dominus <mjd@plover.com>)
+     Branch: perl
+          ! embed.h objXSUB.h op.c opcode.h opcode.pl perlapi.c
+          ! pod/perldelta.pod pod/perldiag.pod pod/perlfunc.pod pp.sym
+          ! pp_proto.h t/pragma/warn/op
+____________________________________________________________________________
+[  4082] By: gsar                                  on 1999/09/05  22:28:57
+        Log: fix data loss when more than one block is read from SDBM
+             *.dir file (suggested by Uwe Ohse <uwe@ohse.de>)
+     Branch: perl
+          ! ext/SDBM_File/sdbm/sdbm.c
+____________________________________________________________________________
+[  4081] By: gsar                                  on 1999/09/05  22:07:18
+        Log: initial implementation of lvalue subroutines (slightly fixed
+             version of patch suggested by Ilya Zakharevich, which in turn
+             is based on the one suggested by Tuomas J. Lukka <lukka@iki.fi>)
+     Branch: perl
+          + t/pragma/sub_lval.t
+          ! MANIFEST cop.h cv.h dump.c embed.h ext/Opcode/Opcode.pm
+          ! ext/attrs/attrs.pm ext/attrs/attrs.xs global.sym objXSUB.h
+          ! op.c op.h opcode.h opcode.pl opnames.h perlapi.c
+          ! pod/perldiag.pod pod/perlsub.pod pp.c pp.sym pp_hot.c
+          ! pp_proto.h proto.h t/pragma/warn/pp_ctl
+____________________________________________________________________________
+[  4080] By: jhi                                   on 1999/09/05  22:02:18
+        Log: Undo #4055 (related to #4079).
+     Branch: cfgperl
+          ! pod/perlop.pod
+____________________________________________________________________________
+[  4079] By: jhi                                   on 1999/09/05  21:30:54
+        Log: Time is not yet ripe.
+     Branch: cfgperl
+          ! pod/perldelta.pod pod/perlop.pod pp.c t/op/64bit.t t/op/misc.t
+____________________________________________________________________________
+[  4078] By: gsar                                  on 1999/09/05  18:17:32
+        Log: modified suggested patch to handle cross-refs and qr// objects
+             correctly; unfollowed refs are represented as simple string
+             value, not just the bare type; $VERSION stays the same until
+             it is ready for prime time (avoids CPAN confustication)
+             From:    John Nolan <jpnolan@Op.Net>
+             Date:    Wed, 04 Aug 1999 20:21:10 EDT
+             Message-Id: <199908050021.UAA09693@monet.op.net>
+             Subject: [ID 19990804.006] [PATCH]5.005_60 (Data::Dumper) - implements Maxdepth setting
+     Branch: perl
+          ! Changes ext/Data/Dumper/Changes ext/Data/Dumper/Dumper.pm
+          ! ext/Data/Dumper/Dumper.xs ext/Data/Dumper/Todo t/lib/dumper.t
+____________________________________________________________________________
+[  4077] By: jhi                                   on 1999/09/04  21:54:42
+        Log: timesum() wasn't @EXPORTed as promised by the documentation.
+             Bug reported by Alex Efros <powerman@inart.kharkov.com>.
+     Branch: cfgperl
+          ! lib/Benchmark.pm
+____________________________________________________________________________
+[  4076] By: gsar                                  on 1999/09/04  20:21:59
+        Log: integrate cfgperl contents into mainline
+     Branch: perl
+         +> lib/attributes.pm lib/warnings.pm t/lib/attrs.t t/op/attrs.t
+         +> t/pragma/warn/7fatal t/pragma/warn/8signal t/pragma/warnings.t
+         +> warnings.h warnings.pl xsutils.c
+          - lib/warning.pm t/pragma/warning.t warning.h warning.pl
+         !> (integrate 109 files)
+____________________________________________________________________________
+[  4075] By: jhi                                   on 1999/09/04  18:04:47
+        Log: use integer on the problematic subtest.
+     Branch: cfgperl
+          ! t/op/misc.t
+____________________________________________________________________________
+[  4074] By: jhi                                   on 1999/09/04  17:57:40
+        Log: Warn about numconvert.t in case somebody
+             wants to make sv_2pv more 64-bit aware.
+     Branch: cfgperl
+          ! sv.c
+____________________________________________________________________________
+[  4073] By: jhi                                   on 1999/09/04  17:54:51
+        Log: Comment upgrading: the quad situation isn't quite as
+             bad as it used to be.
+     Branch: cfgperl
+          ! perl.h
+____________________________________________________________________________
+[  4072] By: jhi                                   on 1999/09/04  15:35:37
+        Log: Integrate with Sarathy.
+     Branch: cfgperl
+         !> win32/win32.c
+____________________________________________________________________________
+[  4071] By: jhi                                   on 1999/09/04  15:28:11
+        Log: Fix LFS with -Duseperlio in Solaris.  Reported in
+             
+             From: Robin Barker <rmb1@cise.npl.co.uk>
+             To: perl5-porters@perl.org
+             Subject: [ID 19990823.009] [PATCH perl5.005_61] typo in perl.h
+             Date: Mon, 23 Aug 1999 16:41:11 +0100 (BST)
+             Message-Id: <199908231541.QAA10043@tempest.npl.co.uk>
+             
+             and later (in private email) found to be dependent
+             on useperlio.
+             
+             Mental note: the cpp magic done in perlsdio.h (and assumedly
+             also in perlsfio.h) may cause trouble later with lfs because
+             both the perlio scheme by Perl and the lfs support by vendors
+             like to play cpp games to map the stdio namespace back and forth.
+             The problem fixed here (fseek vs fseeko, ftell vs ftello) may be
+             just the beginning.
+     Branch: cfgperl
+          ! perlio.c
+____________________________________________________________________________
+[  4070] By: jhi                                   on 1999/09/04  13:12:14
+        Log: Enable 64-bit clean bit ops.
+             (Disables the t/op/misc.t substest 3 in 64-bit platforms.)
+     Branch: cfgperl
+          ! pod/perldelta.pod pod/perlop.pod pp.c pp_hot.c t/op/64bit.t
+          ! t/op/misc.t
+____________________________________________________________________________
+[  4069] By: jhi                                   on 1999/09/03  21:17:30
+        Log: Turn on USE_64_BIT_OFFSETS implicitly.
+     Branch: cfgperl
+          ! perl.h
+____________________________________________________________________________
+[  4068] By: jhi                                   on 1999/09/03  08:19:59
+        Log: Fix from Spider for the sub attributes (there was an undocumented
+             dependency between force_word() and skipspace()).
+     Branch: cfgperl
+          ! toke.c
+____________________________________________________________________________
+[  4067] By: jhi                                   on 1999/09/01  23:17:06
+        Log: From: John Tobey <spam@john-edwin-tobey.org>
+             To: ilya@math.ohio-state.edu
+             CC: perl5-porters@perl.org
+             Subject: Re: [PATCH 5.005_60] distclean forgot two
+             Date: Mon, 23 Aug 1999 02:10:11 -0400 (EDT)
+             Message-Id: <m11InJ5-000FPCC@feynman.localnet>
+     Branch: cfgperl
+          ! t/lib/dprof.t
+____________________________________________________________________________
+[  4066] By: jhi                                   on 1999/09/01  23:14:50
+        Log: From: "Fifer, Eric" <EFifer@sanwaint.com>
+             To: perl5-porters@perl.org
+             Subject: [ID 19990821.001] [PATCH] perl5.005_60 cygwin port
+             Date: Fri, 20 Aug 1999 15:37:27 +0100
+             Message-Id: <8A160D637356D311BC4300600849EC8122E217@POST>
+     Branch: cfgperl
+          ! cygwin/Makefile.SHs ext/ByteLoader/byterun.h
+          ! ext/SDBM_File/sdbm/sdbm.c hints/cygwin.sh perl.h pp_sys.c
+          ! t/io/fs.t t/io/tell.t t/lib/anydbm.t t/op/stat.t
+____________________________________________________________________________
+[  4065] By: jhi                                   on 1999/09/01  22:06:43
+        Log: From: Dominic Dunlop <domo@vo.lu>
+             To: perl5-porters@perl.org
+             Subject: [ID 19990819.001] Not OK: perl 5.00560 on powerpc-machten 4.1.1
+             (UNINSTALLED) [PATCH]
+             Date: Thu, 19 Aug 1999 09:48:03 +0200
+             Message-Id: <v03110709b3e165b51dda@[212.24.192.132]>
+             
+             The PERL_POLLUTE_MALLOC part had to be manually applied.
+     Branch: cfgperl
+          ! hints/machten.sh perl.h
+____________________________________________________________________________
+[  4064] By: jhi                                   on 1999/09/01  13:56:14
+        Log: From: Martin Lichtin <lichtin@bivio.com>
+             To: jhi@iki.fi
+             CC: perl5-porters@perl.org
+             Subject: Re: [ID 19990829.001] ExtUtils::Install.pm, minor umask problem
+             Date: Wed, 01 Sep 1999 15:50:04 +0200
+             Message-ID: <37CD2F0C.944BFACE@bivio.com>
+     Branch: cfgperl
+          ! lib/ExtUtils/Install.pm
+____________________________________________________________________________
+[  4063] By: jhi                                   on 1999/09/01  13:16:11
+        Log: Enhance lfs tests: check every seek and sysseek
+             and test also that -e and -f detect largefiles.
+     Branch: cfgperl
+          ! t/lib/syslfs.t t/op/lfs.t
+____________________________________________________________________________
+[  4062] By: jhi                                   on 1999/09/01  12:08:04
+        Log: From: Colin Kuskie <ckuskie@Cadence.COM>
+             To: Ronald J Kimball <rjk@linguist.dartmouth.edu>
+             cc: "M.J.T. Guy" <mjtg@cus.cam.ac.uk>,
+             The Perl Porters Mailing List <perl5-porters@perl.org>
+             Subject: [REPATCH 5.005_61] Re: perldiag.pod omissions
+             Date: Tue, 31 Aug 1999 11:24:31 -0700 (PDT)
+             Message-ID: <Pine.GSO.4.10.9908311055460.11290-100000@pdxult10a.cadence.com>
+     Branch: cfgperl
+          ! pod/perldiag.pod
+____________________________________________________________________________
+[  4061] By: jhi                                   on 1999/09/01  12:03:03
+        Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
+             To: ilya@math.ohio-state.edu (Ilya Zakharevich)
+             Cc: perl5-porters@perl.org, cloos@adamsmith.ai
+             Subject: Re: [ID 19990830.005] Assigning value of an op on an SV to said SV
+             Date: Wed, 1 Sep 1999 02:56:06 -0400 (EDT)
+             Message-Id: <199909010656.CAA04478@monk.mps.ohio-state.edu>
+     Branch: cfgperl
+          ! op.c t/op/join.t
+____________________________________________________________________________
+[  4060] By: jhi                                   on 1999/09/01  07:59:42
+        Log: IV_DIG and NV_DIG fixes.
+     Branch: cfgperl
+          ! perl.h
+____________________________________________________________________________
+[  4059] By: jhi                                   on 1999/08/31  14:47:18
+        Log: \C{} -> \N{} residue.
+     Branch: cfgperl
+          ! toke.c
+____________________________________________________________________________
+[  4058] By: jhi                                   on 1999/08/31  08:57:35
+        Log: For some odd reason #4056 didn't undo #3922 completely.
+     Branch: cfgperl
+          ! pp.c
+____________________________________________________________________________
+[  4057] By: gsar                                  on 1999/08/30  22:08:19
+        Log: avoid hiding child process window
+     Branch: perl
+          ! win32/win32.c
+____________________________________________________________________________
+[  4056] By: jhi                                   on 1999/08/30  21:36:24
+        Log: Retract #3922 (Rule #1 was invoked).
+             (See also #4058).
+     Branch: cfgperl
+          ! pod/perldiag.pod pp.c regexp.h
+____________________________________________________________________________
+[  4055] By: jhi                                   on 1999/08/30  21:20:50
+        Log: Document the undefinedness of overshifting.
+     Branch: cfgperl
+          ! pod/perlop.pod
+____________________________________________________________________________
+[  4054] By: jhi                                   on 1999/08/30  20:18:18
+        Log: History fixes and updates.
+     Branch: cfgperl
+          ! pod/perlhist.pod
+____________________________________________________________________________
+[  4053] By: jhi                                   on 1999/08/30  19:34:02
+        Log: Shell quoting thinko broke installdirs.
+             From: JVromans@Squirrel.nl (Johan Vromans)
+             To: perl5-porters@perl.org
+             Subject: [ID 19990830.001] 5.005_61 Configure does not substitute
+             installprefix
+             Date: Mon, 30 Aug 1999 16:10:10 +0200 (MEST)
+             Message-Id: <14282.37058.934928.805633@plume.nl.compuware.com>
+     Branch: cfgperl
+          ! Configure config_h.SH
+     Branch: metaconfig
+          ! U/installdirs/archlib.U U/installdirs/bin.U
+          ! U/installdirs/html1dir.U U/installdirs/html3dir.U
+          ! U/installdirs/installprefix.U U/installdirs/man1dir.U
+          ! U/installdirs/man3dir.U U/installdirs/privlib.U
+          ! U/installdirs/scriptdir.U U/installdirs/sitearch.U
+          ! U/installdirs/sitebin.U U/installdirs/sitehtml1dir.U
+          ! U/installdirs/sitehtml3dir.U U/installdirs/sitelib.U
+          ! U/installdirs/siteman1dir.U U/installdirs/siteman3dir.U
+          ! U/installdirs/sitescriptdir.U U/installdirs/vendorarch.U
+          ! U/installdirs/vendorbin.U U/installdirs/vendorhtml1dir.U
+          ! U/installdirs/vendorhtml3dir.U U/installdirs/vendorlib.U
+          ! U/installdirs/vendorman1dir.U U/installdirs/vendorman3dir.U
+          ! U/installdirs/vendorscriptdir.U
+____________________________________________________________________________
+[  4052] By: jhi                                   on 1999/08/30  02:57:05
+        Log: Use \N{named characters} instead of \C.
+             From: Ilya Zakharevich <ilya@math.ohio-state.edu>
+             To: jhi@iki.fi
+             Cc: larry@wall.org (Larry Wall), Tim.Bunce@ig.co.uk (Tim Bunce),
+             perl5-porters@perl.org (Mailing list Perl5)
+             Subject: Re: [PATCH 5.005_58] Named characters in Perl
+             Date: Sun, 29 Aug 1999 16:46:53 -0400 (EDT)
+             Message-Id: <199908292046.QAA05510@monk.mps.ohio-state.edu>
+     Branch: cfgperl
+          ! lib/charnames.pm lib/utf8.pm pod/perldiag.pod pod/perlop.pod
+          ! pod/perlre.pod regcomp.c t/lib/charnames.t toke.c
+____________________________________________________________________________
+[  4051] By: jhi                                   on 1999/08/30  02:54:20
+        Log: From: Spider Boardman <spider@Orb.Nashua.NH.US>
+             To: perl5-porters@perl.org
+             Subject: [ID 19990829.004] Autoloaded &VERSION and UNIVERSAL::VERSION
+             don't mix
+             Date: Sun, 29 Aug 1999 19:04:53 -0400
+             Message-Id: <199908292304.TAA13738@Orb.Nashua.NH.US>
+     Branch: cfgperl
+          ! universal.c
+____________________________________________________________________________
+[  4050] By: jhi                                   on 1999/08/29  16:38:58
+        Log: Conditionally socksify the LIBS of Socket.
+     Branch: cfgperl
+          ! ext/Socket/Makefile.PL
+____________________________________________________________________________
+[  4049] By: jhi                                   on 1999/08/29  15:33:30
+        Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
+             To: Mailing list Perl5 <perl5-porters@perl.org>
+             Subject: Re: [PATCH 5.005_60] fix @DB::typeahead
+             Date: Wed, 25 Aug 1999 16:19:58 -0400
+             Message-ID: <19990825161958.A4658@monk.mps.ohio-state.edu>
+     Branch: cfgperl
+          ! lib/perl5db.pl
+____________________________________________________________________________
+[  4048] By: jhi                                   on 1999/08/29  15:31:36
+        Log: From: Stephen McCamant <smccam@uclink4.berkeley.edu>
+             To: perl5-porters@perl.org
+             Subject: [PATCH _61] Lost arguments to simplified sort
+             Date: Wed, 25 Aug 1999 23:22:32 -0700 (PDT)
+             Message-ID: <14276.56616.879390.562685@metonymy.hip.berkeley.edu>
+     Branch: cfgperl
+          ! op.c t/op/sort.t
+____________________________________________________________________________
+[  4047] By: jhi                                   on 1999/08/29  15:29:29
+        Log: From: Olaf Flebbe <olaf@science-computing.de>
+             Sender: owner-perl5-porters@perl.org
+             To: perl5-porters@perl.org
+             Subject: [ID 19990827.003] [PATCH]5.005_60 Patch for EPOC Support
+             Date: Fri, 27 Aug 1999 21:50:41 +0200 (MEST)
+     Branch: cfgperl
+          ! README.epoc epoc/config.h epoc/epoc.c epoc/epocish.h
+          ! epoc/perl.mmp epoc/perl.pkg
+____________________________________________________________________________
+[  4046] By: jhi                                   on 1999/08/29  15:21:18
+        Log: From: pvhp@forte.com (Peter Prymmer)
+             To: perl5-porters@perl.org
+             Subject: [PATCH: 5.005_61] an EBCDIC friendly cgi-html.t test
+             Date: Fri, 27 Aug 99 18:51:04 PDT
+             Message-Id: <9908280151.AA05010@forte.com>
+     Branch: cfgperl
+          ! t/lib/cgi-html.t
+____________________________________________________________________________
+[  4045] By: jhi                                   on 1999/08/29  15:18:38
+        Log: Fix scalar gmtime (and localtime) in quad environments,
+             bug reported by Robin Parker.
+             
+             From: Robin Barker <rmb1@cise.npl.co.uk>
+             To: jhi@iki.fi
+             Cc: perl5-porters@perl.org
+             Subject: Re: [ID 19990823.009] [PATCH perl5.005_61] typo in perl.h
+             Date: Tue, 24 Aug 1999 11:09:24 +0100 (BST)
+             Message-Id: <199908241009.LAA24394@tempest.npl.co.uk>
+     Branch: cfgperl
+          ! pp_sys.c t/op/time.t
+____________________________________________________________________________
+[  4044] By: jhi                                   on 1999/08/29  11:24:03
+        Log: From: Ilya Zakharevich <ilya@math.ohio-state.edu>
+             To: perl5-porters@perl.org (Mailing list Perl5)
+             Subject: [PATCH 5.005_60] Speeding up XSUB calls up to 66%
+             Date: Fri, 27 Aug 1999 03:33:01 -0400 (EDT)
+             Message-Id: <199908270733.DAA16927@monk.mps.ohio-state.edu>
+             
+             Addendum: it's "only" 33% speedup.
+     Branch: cfgperl
+          ! dump.c op.c op.h pp.h
+____________________________________________________________________________
+[  4043] By: jhi                                   on 1999/08/29  11:10:33
+        Log: From: spider-perl@Orb.Nashua.NH.US
+             To: Mailing list Perl5 <perl5-porters@perl.org>
+             Subject: [PATCH 5.005_61 CORE] sub : attrlist
+             Date: Sun, 29 Aug 1999 03:02:11 -0400
+             Message-Id: <199908290702.DAA32191@Orb.Nashua.NH.US>
+     Branch: cfgperl
+          + lib/attributes.pm t/lib/attrs.t t/op/attrs.t xsutils.c
+          ! MANIFEST Makefile.SH embed.h embed.pl embedvar.h global.sym
+          ! gv.c lib/AutoSplit.pm lib/SelfLoader.pm objXSUB.h op.c perl.c
+          ! perl.h perlapi.c perlapi.h perly.c perly.fixer perly.h perly.y
+          ! perly_c.diff pod/perldelta.pod pod/perldiag.pod
+          ! pod/perlfunc.pod pod/perlmodlib.pod pod/perlsub.pod proto.h
+          ! toke.c vms/perly_c.vms vms/perly_h.vms warnings.h
+____________________________________________________________________________
+[  4042] By: jhi                                   on 1999/08/29  11:08:50
+        Log: Turn off gcc-2.95's strict-alias optimization.
+             This, of course, should be only temporary.
+             From Andy Dougherty.
+     Branch: cfgperl
+          ! Configure config_h.SH
+     Branch: metaconfig
+          ! U/compline/ccflags.U U/modified/cc.U
+____________________________________________________________________________
+[  4041] By: jhi                                   on 1999/08/29  10:47:30
+        Log: Fix a typo in #4036.
+     Branch: cfgperl
+          ! mg.c
+____________________________________________________________________________
+[  4040] By: jhi                                   on 1999/08/29  10:34:58
+        Log: Add a missing #endif forgotten by #4035.
+     Branch: cfgperl
+          ! doop.c
+____________________________________________________________________________
+[  4039] By: jhi                                   on 1999/08/29  10:31:19
+        Log: Remove an extra #endif introduced by #4036.
+     Branch: cfgperl
+          ! perl.h
+____________________________________________________________________________
+[  4038] By: jhi                                   on 1999/08/29  10:18:59
+        Log: Rename warning to warnings, from Paul Marquess.
+     Branch: cfgperl
+          + lib/warnings.pm t/pragma/warn/7fatal t/pragma/warn/8signal
+          + t/pragma/warnings.t warnings.h warnings.pl
+          - lib/warning.pm t/pragma/warning.t warning.h warning.pl
+          ! MANIFEST Makefile.SH gv.c mg.c perl.h pod/perldelta.pod
+          ! pod/perldiag.pod pod/perlfunc.pod pod/perllexwarn.pod
+          ! pod/perlmodlib.pod pod/perlrun.pod pod/perltoc.pod
+          ! pod/perlvar.pod t/op/64bit.t t/op/tie.t t/pragma/warn/2use
+          ! t/pragma/warn/3both t/pragma/warn/4lint t/pragma/warn/5nolint
+          ! t/pragma/warn/6default t/pragma/warn/doio t/pragma/warn/doop
+          ! t/pragma/warn/gv t/pragma/warn/mg t/pragma/warn/op
+          ! t/pragma/warn/perl t/pragma/warn/perly t/pragma/warn/pp
+          ! t/pragma/warn/pp_ctl t/pragma/warn/pp_hot t/pragma/warn/pp_sys
+          ! t/pragma/warn/regcomp t/pragma/warn/regexec t/pragma/warn/sv
+          ! t/pragma/warn/taint t/pragma/warn/toke t/pragma/warn/universal
+          ! t/pragma/warn/utf8 t/pragma/warn/util toke.c
+____________________________________________________________________________
+[  4037] By: jhi                                   on 1999/08/29  10:08:47
+        Log: Create the equivalence tables based on
+             the real Unicode decomposition, not on
+             the character name.
+     Branch: cfgperl
+          ! lib/unicode/Eq/Latin1 lib/unicode/Eq/Unicode
+          ! lib/unicode/mktables.PL
+____________________________________________________________________________
+[  4036] By: jhi                                   on 1999/08/29  09:29:08
+        Log: Integrate with Sarathy.
+     Branch: cfgperl
+         +> lib/unicode/Is/SylA.pl lib/unicode/Is/SylC.pl
+         +> lib/unicode/Is/SylE.pl lib/unicode/Is/SylI.pl
+         +> lib/unicode/Is/SylO.pl lib/unicode/Is/SylU.pl
+         +> lib/unicode/Is/SylV.pl lib/unicode/Is/SylWA.pl
+         +> lib/unicode/Is/SylWC.pl lib/unicode/Is/SylWE.pl
+         +> lib/unicode/Is/SylWI.pl lib/unicode/Is/SylWV.pl
+         !> (integrate 190 files)
+____________________________________________________________________________
+[  4035] By: jhi                                   on 1999/08/29  08:56:15
+        Log: Implement 64-bit vec().
+     Branch: cfgperl
+          ! doop.c pod/perldelta.pod pod/perldiag.pod pod/perlfunc.pod
+          ! pp.h t/op/64bit.t
+____________________________________________________________________________
+[  4034] By: gsar                                  on 1999/08/29  03:35:18
+        Log: deadcode removal
+     Branch: perl
+          ! XSUB.h embed.h embed.pl global.sym mg.c op.c perl.h perlapi.h
+          ! pp_ctl.c proto.h run.c sv.c
+____________________________________________________________________________
+[  4033] By: jhi                                   on 1999/08/28  17:31:07
+        Log: From: Robin Barker <rmb1@cise.npl.co.uk>
+             To: perl5-porters@perl.org
+             Subject: [ID 19990823.009] [PATCH perl5.005_61] typo in perl.h
+             Date: Mon, 23 Aug 1999 16:41:11 +0100 (BST)
+             Message-Id: <199908231541.QAA10043@tempest.npl.co.uk>
+     Branch: cfgperl
+          ! perl.h
+____________________________________________________________________________
+[  4032] By: gsar                                  on 1999/08/26  23:53:33
+        Log: new thread should set current interp in TLS
+     Branch: perl
+          ! ext/Thread/Thread.xs
+____________________________________________________________________________
+[  4031] By: bailey                                on 1999/08/23  03:40:07
+        Log: When extension doesn't have a "main" object file to anchor linker search, pull in all objct files
+     Branch: vmsperl
+          ! lib/ExtUtils/MM_VMS.pm
+____________________________________________________________________________
+[  4030] By: bailey                                on 1999/08/23  03:37:43
+        Log: Patch up holes in realclean target
+     Branch: vmsperl
+          ! vms/descrip_mms.template
+____________________________________________________________________________
+[  4029] By: bailey                                on 1999/08/23  03:36:24
+        Log: Fix handling of PERL_POLLUTE
+     Branch: vmsperl
+          ! lib/ExtUtils/MM_VMS.pm
+____________________________________________________________________________
+[  4028] By: bailey                                on 1999/08/23  03:34:08
+        Log: Update VMS version of perly.h
+     Branch: vmsperl
+          ! vms/perly_h.vms
+____________________________________________________________________________
+[  4027] By: bailey                                on 1999/08/23  03:32:45
+        Log: Update dependencies in Descrip.MMS
+     Branch: vmsperl
+          ! vms/descrip_mms.template
+____________________________________________________________________________
+[  4026] By: bailey                                on 1999/08/23  03:30:01
+        Log: Fix prototypes in perlapi.c (64-bit?)
+             Clear prior definition of getenv_len before defining VMS-specific macro
+     Branch: vmsperl
+          ! perlapi.c vms/vmsish.h
+____________________________________________________________________________
+[  4025] By: bailey                                on 1999/08/23  03:25:51
+        Log: Add '-m' option to Configure.com which skips the MANIFEST check
+     Branch: vmsperl
+          ! configure.com
+____________________________________________________________________________
+[  4024] By: bailey                                on 1999/08/23  03:23:34
+        Log: Skip open() tests that rely on Unix fork semantics
+     Branch: vmsperl
+          ! t/io/open.t
+____________________________________________________________________________
+[  4023] By: bailey                                on 1999/08/23  03:21:46
+        Log: Loosen conditons for recognizing a function name in perl.h to accomodate revisions
+     Branch: vmsperl
+          ! vms/gen_shrfls.pl
+____________________________________________________________________________
+[  4022] By: bailey                                on 1999/08/23  03:17:33
+        Log: update MM_VMS to use new File::Spec routines
+     Branch: vmsperl
+          ! lib/ExtUtils/MM_VMS.pm lib/File/Spec/VMS.pm
+____________________________________________________________________________
+[  4021] By: bailey                                on 1999/08/23  03:13:40
+        Log: byteperl is now part of the ByteLoader ext
+     Branch: vmsperl
+          ! ext/ByteLoader/byterun.h vms/descrip_mms.template
+____________________________________________________________________________
+[  4020] By: bailey                                on 1999/08/23  03:10:41
+        Log: Allow option to treat barewords at start of Unix paths as simple words rather than logicals
+     Branch: vmsperl
+          ! vms/vms.c
+____________________________________________________________________________
+[  4019] By: bailey                                on 1999/08/23  03:07:28
+        Log: Update calls for new thread context handling
+     Branch: vmsperl
+          ! ext/Devel/DProf/DProf.xs ext/DynaLoader/dl_vms.xs
+          ! ext/POSIX/POSIX.xs vms/vms.c vms/vmsish.h vms/writemain.pl
+____________________________________________________________________________
+[  4018] By: bailey                                on 1999/08/23  03:01:31
+        Log: Allow for file versions in library when looking for .bs files
+     Branch: vmsperl
+          ! ext/DynaLoader/DynaLoader_pm.PL
+____________________________________________________________________________
+[  4017] By: bailey                                on 1999/08/23  02:58:55
+        Log: Update VMS configuration procedures for 5.005_60
+     Branch: vmsperl
+          ! configure.com vms/subconfigure.com
+____________________________________________________________________________
+[  4016] By: gsar                                  on 1999/08/20  22:19:56
+        Log: update Changes
+     Branch: perl
+          ! Changes
+
+----------------
+Version 5.005_61
 ----------------
 
 ____________________________________________________________________________
index 4b55fa6..78443d0 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -20,7 +20,7 @@
 
 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
 #
-# Generated on Mon Aug 30 22:33:03 EET DST 1999 [metaconfig 3.0 PL70]
+# Generated on Mon Sep 13 19:24:34 EET DST 1999 [metaconfig 3.0 PL70]
 # (with additional metaconfig patches by perlbug@perl.com)
 
 cat >/tmp/c1$$ <<EOF
@@ -1101,7 +1101,7 @@ done
 : produce awk script to parse command line options
 cat >options.awk <<'EOF'
 BEGIN {
-       optstr = "dD:eEf:hKOrsSU:V";    # getopt-style specification
+       optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
 
        len = length(optstr);
        for (i = 1; i <= len; i++) {
@@ -1161,7 +1161,7 @@ silent=''
 extractsh=''
 override=''
 knowitall=''
-rm -f optdef.sh
+rm -f optdef.sh posthint.sh
 cat >optdef.sh <<EOS
 $startsh
 EOS
@@ -1215,6 +1215,57 @@ while test $# -gt 0; do
                esac
                shift
                ;;
+       -A)
+           shift
+           xxx=''
+           yyy="$1"
+           case "$yyy" in
+           *:*) xxx=`echo $yyy|sed 's!:.*!!'`
+                yyy=`echo $yyy|sed 's!^[^:]*:!!'`
+                ;;
+           esac
+           case "$xxx" in
+           '') xxx=define ;;
+           esac
+           zzz=''
+           uuu='undef'
+           case "$yyy" in
+           *=*) zzz=`echo $yyy|sed 's!^[^=]*=!!'`
+                yyy=`echo $yyy|sed 's!=.*!!'`
+                case "$yyy:$zzz" in
+                undef:) uuu='' ;;
+                esac
+                ;;
+           esac
+           case "$xxx" in
+           append)
+               echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh
+               ;;
+           clear)
+               echo "$yyy=''"                  >> posthint.sh
+               ;;
+           define)
+               case "$zzz" in
+               '') zzz=define ;;
+               esac
+               echo "$yyy='$zzz'"              >> posthint.sh
+               ;; 
+           eval)
+               echo "eval \"$yyy=$zzz\""       >> posthint.sh
+               ;; 
+           prepend)
+               echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh
+               ;; 
+           undef)
+               case "$zzz" in
+               '') zzz="$uuu" ;;
+               esac
+               echo "$yyy=$zzz"                >> posthint.sh
+               ;; 
+            *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2
+               ;;
+           esac
+           ;;
        -V) echo "$me generated by metaconfig 3.0 PL70." >&2
                exit 0;;
        --) break;;
@@ -1227,7 +1278,7 @@ case "$error" in
 true)
        cat >&2 <<EOM
 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
-                 [-U symbol] [-U symbol=]
+                 [-U symbol] [-U symbol=] [-A command:symbol...]
   -d : use defaults for all answers.
   -e : go on without questioning past the production of config.sh.
   -f : specify an alternate default configuration file.
@@ -1244,6 +1295,16 @@ Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
   -U : undefine symbol:
          -U symbol    symbol gets the value 'undef'
          -U symbol=   symbol gets completely empty
+  -A : manipulate symbol after the platform specific hints have been applied:
+        -A append:symbol=value         append value to symbol
+        -A define:symbol=value         define symbol to have value
+        -A symbol=value                define symbol to have value
+         -A clear:symbol               define symbol to be ''
+        -A define:symbol               define symbol to be 'define'
+        -A eval:symbol=value           define symbol to be eval of value
+        -A prepend:symbol=value        prepend value to symbol
+        -A undef:symbol                define symbol to be 'undef'
+        -A undef:symbol=               define symbol to be ''
   -V : print version number and exit (with a zero status).
 EOM
        exit 1
@@ -1269,6 +1330,9 @@ esac
 : run the defines and the undefines, if any, but leave the file out there...
 touch optdef.sh
 . ./optdef.sh
+: create the posthint manipulation script and leave the file out there...
+touch posthint.sh
+. ./posthint.sh
 
 : set package name
 package=perl5
@@ -2496,6 +2560,9 @@ none)  osvers='' ;;
 *) osvers="$ans" ;;
 esac
 
+
+. ./posthint.sh
+
 : who configured the system
 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
 cf_by=`(logname) 2>/dev/null`
@@ -9160,12 +9227,9 @@ set nice d_nice
 eval $inlibc
 
 : see if POSIX threads are available
-if test "X$usethreads" = "X$define"; then
-       set pthread.h i_pthread
-       eval $inhdr
-else
-       i_pthread="$undef"
-fi
+set pthread.h i_pthread
+eval $inhdr
+
 
 
 
diff --git a/INSTALL b/INSTALL
index 4647002..c90f6b3 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -766,12 +766,22 @@ or you can answer 'n' at the appropriate interactive Configure prompt.
 
 =item -DPERL_POLLUTE_MALLOC
 
+NOTE: This flag is enabled automatically on some platforms if you
+asked for binary compatibility with version 5.005, or if you just
+run Configure to accept all the defaults on those platforms.  You
+can refuse the automatic binary compatibility flags wholesale by
+running:
+
+       sh Configure -Ubincompat5005
+
+or by answering 'n' at the appropriate prompt.
+
 Perl's malloc family of functions are called Perl_malloc(),
-Perl_realloc(), Perl_calloc() and Perl_mfree().  The names do not clash
-with the system versions of these functions.
+Perl_realloc(), Perl_calloc() and Perl_mfree().  When this flag is
+not enabled, the names do not clash with the system versions of
+these functions.
 
-If you add -DPERL_POLLUTE_MALLOC to your ccflags variable in
-config.sh, then Perl's malloc family of functions will have the same
+If enabled, Perl's malloc family of functions will have the same
 names as the system versions.  This may be sometimes required when you
 have libraries that like to free() data that may have been allocated
 by Perl_malloc() and vice versa.
index f5ea95c..d2ca7e3 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -184,7 +184,7 @@ ext/B/O.pm          Compiler front-end module (-MO=...)
 ext/B/README           Compiler backend README
 ext/B/TESTS            Compiler backend test data
 ext/B/Todo             Compiler backend Todo list
-ext/B/defsubs.h.PL     Generator for constant subroutines
+ext/B/defsubs_h.PL     Generator for constant subroutines
 ext/B/ramblings/cc.notes       Compiler ramblings: notes on CC backend
 ext/B/ramblings/curcop.runtime Compiler ramblings: notes on curcop use
 ext/B/ramblings/flip-flop      Compiler ramblings: notes on flip-flop
@@ -207,6 +207,7 @@ ext/DB_File/Makefile.PL             Berkeley DB extension makefile writer
 ext/DB_File/dbinfo             Berkeley DB database version checker
 ext/DB_File/hints/dynixptx.pl  Hint for DB_File for named architecture
 ext/DB_File/typemap            Berkeley DB extension interface types
+ext/DB_File/version.c          Berkeley DB extension interface version check
 ext/Data/Dumper/Changes                Data pretty printer, changelog
 ext/Data/Dumper/Dumper.pm      Data pretty printer, module
 ext/Data/Dumper/Dumper.xs      Data pretty printer, externals
@@ -489,11 +490,19 @@ installperl               Perl script to do "make install" dirty work
 intrpvar.h             Variables held in each interpreter instance
 iperlsys.h             Perl's interface to the system
 jpl/JNI/Changes                Java Native Interface changes
+jpl/JNI/Closer.java    Java Native Interface example
 jpl/JNI/JNI.pm         Java Native Interface module
-jpl/JNI/JNI.xs         Java Native Interface external subroutines
+jpl/JNI/JNI.pm         Java Native Interface module
+jpl/JNI/JNIConfig      Java Native Interface config
+jpl/JNI/JNIConfig.Win32        Java Native Interface config
+jpl/JNI/JNIConfig.kaffe        Java Native Interface config
+jpl/JNI/JNIConfig.noembed      Java Native Interface config
+jpl/JNI/JNIConfig.standard     Java Native Interface config
 jpl/JNI/Makefile.PL    Java Native Interface makefile generator
 jpl/JNI/test.pl                Java Native Interface tests
 jpl/JNI/typemap                Java/Perl interface typemap
+jpl/JNI/typemap.gcc    Java/Perl interface typemap
+jpl/JNI/typemap.win32  Java/Perl interface typemap
 jpl/JPL/AutoLoader.pm  Java/Perl compiler module
 jpl/JPL/Class.pm       Java/Perl compiler module
 jpl/JPL/Compile.pm     Java/Perl compiler module
@@ -507,6 +516,7 @@ jpl/PerlInterpreter/PerlInterpreter.c               Perl interpreter abstraction
 jpl/PerlInterpreter/PerlInterpreter.h          Perl interpreter abstraction
 jpl/PerlInterpreter/PerlInterpreter.java       Perl interpreter abstraction
 jpl/README                                     JPL instructions
+jpl/SETVARS.PL                                 JPL setup
 jpl/Sample/Makefile.PL                         JPL sample makefile generator
 jpl/Sample/Sample.jpl                          JPL sample
 jpl/Test/Makefile.PL                           JPL tests makefile generator
@@ -991,6 +1001,7 @@ pod/perlapio.pod   IO API info
 pod/perlbook.pod       Book info
 pod/perlbot.pod                Object-oriented Bag o' Tricks
 pod/perlcall.pod       Callback info
+pod/perlcompile.pod    Info on using the Compiler suite
 pod/perldata.pod       Data structure info
 pod/perldbmfilter.pod  Info about DBM Filters
 pod/perldebug.pod      Debugger info
@@ -1122,7 +1133,7 @@ t/lib/attrs.t             See if attrs works with C<sub : attrs>
 t/lib/autoloader.t     See if AutoLoader works
 t/lib/basename.t       See if File::Basename works
 t/lib/bigfloat.t       See if bigfloat.pl works
-t/lib/bigfloatpm.t     See if BigFloat.pm works
+t/lib/bigfltpm.t       See if BigFloat.pm works
 t/lib/bigint.t         See if bigint.pl works
 t/lib/bigintpm.t       See if BigInt.pm works
 t/lib/cgi-form.t       See if CGI.pm works
@@ -1167,7 +1178,10 @@ t/lib/filepath.t See if File::Path works
 t/lib/filespec.t       See if File::Spec works
 t/lib/findbin.t                See if FindBin works
 t/lib/gdbm.t           See if GDBM_File works
-t/lib/getopt.t         See if Getopt::Std and Getopt::Long works
+t/lib/getopt.t         See if Getopt::Std and Getopt::Long work
+t/lib/gol-basic.t      See if Getopt::Long works
+t/lib/gol-compat.t     See if Getopt::Long works
+t/lib/gol-linkage.t    See if Getopt::Long works
 t/lib/h2ph.h           Test header file for h2ph
 t/lib/h2ph.pht         Generated output from h2ph.h by h2ph, for comparison
 t/lib/h2ph.t           See if h2ph works like it should
@@ -1345,6 +1359,7 @@ t/pragma/strict-subs      Tests of "use strict 'subs'" for strict.t
 t/pragma/strict-vars   Tests of "use strict 'vars'" for strict.t
 t/pragma/strict.t      See if strictures work
 t/pragma/subs.t                See if subroutine pseudo-importation works
+t/pragma/sub_lval.t    See if lvalue subroutines work
 t/pragma/utf8.t                See if utf8 operations work
 t/pragma/warn/1global  Tests of global warnings for warnings.t
 t/pragma/warn/2use     Tests for "use warnings" for warnings.t
index 56d78df..95ab911 100644 (file)
@@ -266,7 +266,7 @@ variable does NOT point to bash).
 
 =head1 AUTHOR
 
-Laszlo Molnar, F<molnarl@cdata.tvnet.hu>
+Laszlo Molnar, F<laszlo.molnar@eth.ericsson.se>
 
 =head1 SEE ALSO
 
diff --git a/XSUB.h b/XSUB.h
index 241ac40..509a1d6 100644 (file)
--- a/XSUB.h
+++ b/XSUB.h
@@ -11,6 +11,9 @@
        I32 ax = mark - PL_stack_base + 1;      \
        I32 items = sp - mark
 
+#define dXSTARG SV * targ = ((PL_op->op_private & OPpENTERSUB_HASTARG) \
+                            ? PAD_SV(PL_op->op_targ) : sv_newmortal())
+
 #define XSANY CvXSUBANY(cv)
 
 #define dXSI32 I32 ix = XSANY.any_i32
diff --git a/av.h b/av.h
index bacf614..f537d9e 100644 (file)
--- a/av.h
+++ b/av.h
@@ -21,8 +21,28 @@ struct xpvav {
     U8         xav_flags;
 };
 
+
+/* AVf_REAL is set for all AVs whose xav_array contents are refcounted.
+ * Some things like "@_" and the scratchpad list do not set this, to
+ * indicate that they are cheating (for efficiency) by not refcounting
+ * the AV's contents.
+ * 
+ * AVf_REIFY is only meaningful on such "fake" AVs (i.e. where AVf_REAL
+ * is not set).  It indicates that the fake AV is capable of becoming
+ * real if the array needs to be modified in some way.  Functions that
+ * modify fake AVs check both flags to call av_reify() as appropriate.
+ *
+ * Note that the Perl stack has neither flag set. (Thus, items that go
+ * on the stack are never refcounted.)
+ *
+ * These internal details are subject to change any time.  AV
+ * manipulations external to perl should not care about any of this.
+ * GSAR 1999-09-10
+ */
 #define AVf_REAL 1     /* free old entries */
 #define AVf_REIFY 2    /* can become real */
+
+/* XXX this is not used anywhere */
 #define AVf_REUSED 4   /* got undeffed--don't turn old memory into SVs now */
 
 #define Nullav Null(AV*)
index 32f2000..7d9b223 100644 (file)
@@ -234,7 +234,7 @@ for ($i = 0; $i < @optype - 1; $i++) {
 printf BYTERUN_H "    OPt_%s\t\t/* %d */\n};\n\n", $optype[$i], $i;
 
 print BYTERUN_H <<'EOT';
-EXT void byterun(pTHXo_ struct bytestream bs);
+extern void byterun(pTHXo_ struct bytestream bs);
 
 #define INIT_SPECIALSV_LIST STMT_START { \
 EOT
index a9ed05b..96e8633 100644 (file)
@@ -1762,6 +1762,27 @@ $   ELSE
 $     use_64bit="N"
 $   ENDIF
 $ ENDIF
+$!
+$! Ask if they want to build with 64-bit support
+$ if (Archname.eqs."VMS_AXP").and.("''f$extract(1,3, f$getsyi(""version""))'".ges."7.1")
+$ THEN
+$   echo "This version of perl has experimental support for building wtih
+$   echo "64 bit integers and 128 bit floating point variables. This gives
+$   echo "a much larger range for perl's mathematical operations. (Note that
+$   echo "does *not* enable 64-bit fileops at the moment, as Dec C doesn't
+$   echo "do that yet)"
+$   echo ""
+$   dflt = use_64bit
+$   rp = "Build with 64 bits? [''dflt'] "
+$   GOSUB myread
+$     if ans.eqs."" then ans = dflt
+$   if (f$extract(0, 1, "''ans'").eqs."Y").or.(f$extract(0, 1, "''ans'").eqs."y")
+$   THEN
+$     use_64bit="Y"
+$   ELSE
+$     use_64bit="N"
+$   ENDIF
+$ ENDIF
 $! Ask about threads, if appropriate
 $ if (Using_Dec_C.eqs."Yes")
 $ THEN
diff --git a/cop.h b/cop.h
index f23251b..6ea045a 100644 (file)
--- a/cop.h
+++ b/cop.h
@@ -35,12 +35,15 @@ struct block_sub {
     AV *       argarray;
     U16                olddepth;
     U8         hasargs;
+    U8         lval;           /* XXX merge lval and hasargs? */
 };
 
 #define PUSHSUB(cx)                                                    \
        cx->blk_sub.cv = cv;                                            \
        cx->blk_sub.olddepth = CvDEPTH(cv);                             \
-       cx->blk_sub.hasargs = hasargs;
+       cx->blk_sub.hasargs = hasargs;                                  \
+       cx->blk_sub.lval = PL_op->op_private &                          \
+                             (OPpLVAL_INTRO|OPpENTERSUB_INARGS);
 
 #define PUSHFORMAT(cx)                                                 \
        cx->blk_sub.cv = cv;                                            \
@@ -73,6 +76,7 @@ struct block_sub {
            /* destroy arg array */                                     \
            av_clear(cxsub.argarray);                                   \
            AvREAL_off(cxsub.argarray);                                 \
+           AvREIFY_on(cxsub.argarray);                                 \
        }                                                               \
        if (cxsub.cv) {                                                 \
            if (!(CvDEPTH(cxsub.cv) = cxsub.olddepth))                  \
diff --git a/cv.h b/cv.h
index 7042708..67d4a8e 100644 (file)
--- a/cv.h
+++ b/cv.h
@@ -62,6 +62,7 @@ struct xpvcv {
                                   (esp. useful for special XSUBs) */
 #define CVf_METHOD     0x0040  /* CV is explicitly marked as a method */
 #define CVf_LOCKED     0x0080  /* CV locks itself or first arg on entry */
+#define CVf_LVALUE     0x0100  /* CV return value can be used as lvalue */
 
 #define CvCLONE(cv)            (CvFLAGS(cv) & CVf_CLONE)
 #define CvCLONE_on(cv)         (CvFLAGS(cv) |= CVf_CLONE)
@@ -97,6 +98,10 @@ struct xpvcv {
 #define CvLOCKED_on(cv)                (CvFLAGS(cv) |= CVf_LOCKED)
 #define CvLOCKED_off(cv)       (CvFLAGS(cv) &= ~CVf_LOCKED)
 
+#define CvLVALUE(cv)           (CvFLAGS(cv) & CVf_LVALUE)
+#define CvLVALUE_on(cv)                (CvFLAGS(cv) |= CVf_LVALUE)
+#define CvLVALUE_off(cv)       (CvFLAGS(cv) &= ~CVf_LVALUE)
+
 #define CvEVAL(cv)             (CvUNIQUE(cv) && !SvFAKE(cv))
 #define CvEVAL_on(cv)          (CvUNIQUE_on(cv),SvFAKE_off(cv))
 #define CvEVAL_off(cv)         CvUNIQUE_off(cv)
index 4895cf1..c624386 100644 (file)
@@ -25,7 +25,10 @@ repair()
      -e 's/posix/POSIX/'\
      -e 's/sdbm_fil/SDBM_File/'\
      -e 's/socket/Socket/'\
-     -e 's/thread/Thread/'
+     -e 's/thread/Thread/'\
+     -e 's/byteload/ByteLoader/'\
+     -e 's=devel/peek=Devel/Peek='\
+     -e 's=devel/dprof=Devel/DProf='
 }
 static_ext=$(repair "$static_ext")
 extensions=$(repair "$extensions")
index e7d41d7..6073f44 100644 (file)
@@ -29,6 +29,7 @@ goto end
 sh -c 'if test ! -d /tmp; then mkdir /tmp; fi'
 cp djgpp.c config.over ..
 cd ..
+mv ext/B/defsu* ext/B/defsubsh.PL
 echo Running sed...
 sh djgpp/djgppsed.sh
 
index 5c1d3c4..5a8fc5f 100644 (file)
@@ -123,7 +123,7 @@ convretcode (pTHX_ int rc,char *prog,int fl)
         Perl_warner(aTHX_ WARN_EXEC,"Can't %s \"%s\": %s",
                    fl ? "exec" : "spawn",prog,Strerror (errno));
     if (rc > 0)
-        return rc <<= 8;
+        return rc << 8;
     if (rc < 0)
         return 255 << 8;
     return 0;
@@ -252,6 +252,7 @@ struct globinfo
     int    fd;
     char   *matches;
     size_t size;
+    fpos_t pos;
 };
 
 #define MAXOPENGLOBS 10
@@ -286,6 +287,7 @@ glob_handler (__FSEXT_Fnumber n,int *rv,va_list args)
             if ((gi=searchfd (-1)) == NULL)
                 break;
 
+            gi->pos=0;
             pattern=alloca (strlen (name+=13)+1);
             strcpy (pattern,name);
             if (!_USE_LFN)
@@ -332,11 +334,10 @@ glob_handler (__FSEXT_Fnumber n,int *rv,va_list args)
             if ((gi=searchfd (fd))==NULL)
                 break;
 
-            ic=tell (fd);
-            if (siz+ic>=gi->size)
-                siz=gi->size-ic;
-            memcpy (buf,ic+gi->matches,siz);
-            lseek (fd,siz,1);
+            if (siz+gi->pos > gi->size)
+                siz = gi->size - gi->pos;
+            memcpy (buf,gi->pos+gi->matches,siz);
+            gi->pos += siz;
             *rv=siz;
             return 1;
         }
index 5276f4f..a25e894 100644 (file)
@@ -17,13 +17,15 @@ SCOR='s=c\\\.c|=c\_c|=g'
 SHSED='s=\.\(hsed\)=_\1=g'
 SDEPTMP='s=\.\(deptmp\)=_\1=g'
 SCPP='s=\.\(cpp\.\)=_\1=g'
-SARGV='s=\.\(argv\.\)=_\1=g'
+SARGV='s=\.\(argv\)\.=_\1_=g'
 SABC='s=\.\([abc][^a]\)=_\1=g'
 SDBMX='s=\.\(dbmx\)=_\1=g'
 SDBHASH='s=dbhash\.tmp=dbhash_tmp=g'
 SSTAT='s=\.\(stat\.\)=_\1=g'
 STMP2='s=tmp2=tm2=g'
 SPACKLIST='s=\.\(packlist\)=_\1=g'
+SDEFSUB='s=defsubs\.h=defsubsh=g'
+SPLPLI='s=PL/;=PL/i;=g'
 
 sed -e $SCONFIG -e $SGREPTMP -e $SECHOTMP -e $SDDC -e $SOUT -e 's=\.\( \./\$file\)$=sh\1=g' Configure |tr -d '\r' >s; mv -f s Configure
 sed -e $SEXISTS -e $SLIST -e $SCONFIG Makefile.SH |tr -d '\r' >s; mv -f s Makefile.SH
@@ -47,3 +49,6 @@ sed -e $SPACKLIST lib/ExtUtils/Installed.pm >s; mv -f s lib/ExtUtils/Installed.p
 sed -e $SPACKLIST lib/ExtUtils/Packlist.pm >s; mv -f s lib/ExtUtils/Packlist.pm
 sed -e $SPACKLIST lib/ExtUtils/inst >s; mv -f s lib/ExtUtils/inst
 sed -e $SABC t/io/iprefix.t >s; mv -f s t/io/iprefix.t
+sed -e $SDEFSUB ext/B/Makefile.PL >s; mv -f s ext/B/Makefile.PL
+sed -e $SDEFSUB ext/B/B.xs >s; mv -f s ext/B/B.xs
+sed -e $SDEFSUB -e $SPLPLI ext/B/defsubsh.PL >s; mv -f s ext/B/defsubsh.PL
diff --git a/doio.c b/doio.c
index 413e342..0b1cdd1 100644 (file)
--- a/doio.c
+++ b/doio.c
@@ -1696,7 +1696,7 @@ Perl_do_ipcctl(pTHX_ I32 optype, SV **mark, SV **sp)
     else
     {
        IV i = SvIV(astr);
-       a = (char *)i;          /* ouch */
+       a = INT2PTR(char *,i);          /* ouch */
     }
     SETERRNO(0,0);
     switch (optype)
index 822182d..7e72d67 100644 (file)
--- a/dosish.h
+++ b/dosish.h
@@ -8,6 +8,7 @@
 #  define BIT_BUCKET "nul"
 #  define OP_BINARY O_BINARY
 #  define PERL_SYS_INIT(c,v) Perl_DJGPP_init(c,v)
+#  define init_os_extras Perl_init_os_extras
 #  include <signal.h>
 #  define HAS_UTIME
 #  define HAS_KILL
diff --git a/dump.c b/dump.c
index 0e7de38..7f1dba4 100644 (file)
--- a/dump.c
+++ b/dump.c
@@ -509,6 +509,9 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, OP *o)
        else if (o->op_type == OP_FLOP) {
            if (o->op_private & OPpFLIP_LINENUM)
                sv_catpv(tmpsv, ",LINENUM");
+       } else if (o->op_type == OP_RV2CV) {
+           if (o->op_private & OPpLVAL_INTRO)
+               sv_catpv(tmpsv, ",INTRO");
        }
        if (o->op_flags & OPf_MOD && o->op_private & OPpLVAL_INTRO)
            sv_catpv(tmpsv, ",INTRO");
@@ -765,7 +768,7 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo
 #ifdef IV_IS_QUAD
     Perl_sv_setpvf(aTHX_ d,
                   "(0x%" PERL_PRIx64") at 0x%" PERL_PRIx64 "\n%*s  REFCNT = %" PERL_PRId64 "\n%*s  FLAGS = (",
-                  (UV)SvANY(sv), (UV)sv,
+                  PTR2UV(SvANY(sv)), PTR2UV(sv),
                   PL_dumpindent*level, "", (IV)SvREFCNT(sv),
                   PL_dumpindent*level, "");
 #else
@@ -930,7 +933,7 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo
     }
     if (SvROK(sv)) {
 #ifdef IV_IS_QUAD
-       Perl_dump_indent(aTHX_ level, file, "  RV = 0x%" PERL_PRIx64 "\n", (IV)SvRV(sv));
+       Perl_dump_indent(aTHX_ level, file, "  RV = 0x%" PERL_PRIx64 "\n", PTR2IV(SvRV(sv)));
 #else
        Perl_dump_indent(aTHX_ level, file, "  RV = 0x%lx\n", (long)SvRV(sv));
 #endif
@@ -943,7 +946,7 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo
     if (type <= SVt_PVLV) {
        if (SvPVX(sv)) {
 #ifdef IV_IS_QUAD
-           Perl_dump_indent(aTHX_ level, file,"  PV = 0x%" PERL_PRIx64 " ", (IV)SvPVX(sv));
+           Perl_dump_indent(aTHX_ level, file,"  PV = 0x%" PERL_PRIx64 " ", PTR2IV(SvPVX(sv)));
 #else
            Perl_dump_indent(aTHX_ level, file,"  PV = 0x%lx ", (long)SvPVX(sv));
 #endif
@@ -973,7 +976,7 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo
 #ifdef IV_IS_QUAD
        Perl_dump_indent(aTHX_ level, file, "  TARGOFF = %" PERL_PRId64 "\n", (IV)LvTARGOFF(sv));
        Perl_dump_indent(aTHX_ level, file, "  TARGLEN = %" PERL_PRId64 "\n", (IV)LvTARGLEN(sv));
-       Perl_dump_indent(aTHX_ level, file, "  TARG = 0x%" PERL_PRIx64 "\n", (IV)LvTARG(sv));
+       Perl_dump_indent(aTHX_ level, file, "  TARG = 0x%" PERL_PRIx64 "\n", PTR2IV(LvTARG(sv)));
 #else
        Perl_dump_indent(aTHX_ level, file, "  TARGOFF = %ld\n", (long)LvTARGOFF(sv));
        Perl_dump_indent(aTHX_ level, file, "  TARGLEN = %ld\n", (long)LvTARGLEN(sv));
@@ -984,14 +987,14 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo
        break;
     case SVt_PVAV:
 #ifdef IV_IS_QUAD
-       Perl_dump_indent(aTHX_ level, file, "  ARRAY = 0x%" PERL_PRIx64 , (IV)AvARRAY(sv));
+       Perl_dump_indent(aTHX_ level, file, "  ARRAY = 0x%" PERL_PRIx64 , PTR2IV(AvARRAY(sv)));
 #else
        Perl_dump_indent(aTHX_ level, file, "  ARRAY = 0x%lx", (long)AvARRAY(sv));
 #endif
        if (AvARRAY(sv) != AvALLOC(sv)) {
            PerlIO_printf(file, " (offset=%d)\n", (AvARRAY(sv) - AvALLOC(sv)));
 #ifdef IV_IS_QUAD
-           Perl_dump_indent(aTHX_ level, file, "  ALLOC = 0x%" PERL_PRIx64 "\n", (IV)AvALLOC(sv));
+           Perl_dump_indent(aTHX_ level, file, "  ALLOC = 0x%" PERL_PRIx64 "\n", PTR2IV(AvALLOC(sv)));
 #else
            Perl_dump_indent(aTHX_ level, file, "  ALLOC = 0x%lx\n", (long)AvALLOC(sv));
 #endif
@@ -1001,7 +1004,7 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo
 #ifdef IV_IS_QUAD
        Perl_dump_indent(aTHX_ level, file, "  FILL = %" PERL_PRId64 "\n", (IV)AvFILLp(sv));
        Perl_dump_indent(aTHX_ level, file, "  MAX = %" PERL_PRId64 "\n", (IV)AvMAX(sv));
-       Perl_dump_indent(aTHX_ level, file, "  ARYLEN = 0x%" PERL_PRIx64 "\n", (IV)AvARYLEN(sv));
+       Perl_dump_indent(aTHX_ level, file, "  ARYLEN = 0x%" PERL_PRIx64 "\n", PTR2IV(AvARYLEN(sv)));
 #else
        Perl_dump_indent(aTHX_ level, file, "  FILL = %ld\n", (long)AvFILLp(sv));
        Perl_dump_indent(aTHX_ level, file, "  MAX = %ld\n", (long)AvMAX(sv));
@@ -1030,7 +1033,7 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo
        break;
     case SVt_PVHV:
 #ifdef IV_IS_QUAD
-       Perl_dump_indent(aTHX_ level, file, "  ARRAY = 0x%" PERL_PRIx64,(IV)HvARRAY(sv));
+       Perl_dump_indent(aTHX_ level, file, "  ARRAY = 0x%" PERL_PRIx64,PTR2IV(HvARRAY(sv)));
 #else
        Perl_dump_indent(aTHX_ level, file, "  ARRAY = 0x%lx",(long)HvARRAY(sv));
 #endif
@@ -1083,7 +1086,7 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo
        Perl_dump_indent(aTHX_ level, file, "  FILL = %" PERL_PRId64 "\n", (IV)HvFILL(sv));
        Perl_dump_indent(aTHX_ level, file, "  MAX = %" PERL_PRId64 "\n", (IV)HvMAX(sv));
        Perl_dump_indent(aTHX_ level, file, "  RITER = %" PERL_PRId64 "\n", (IV)HvRITER(sv));
-       Perl_dump_indent(aTHX_ level, file, "  EITER = 0x%" PERL_PRIx64 "\n",(IV) HvEITER(sv));
+       Perl_dump_indent(aTHX_ level, file, "  EITER = 0x%" PERL_PRIx64 "\n",PTR2IV(HvEITER(sv)));
 #else
        Perl_dump_indent(aTHX_ level, file, "  KEYS = %ld\n", (long)HvKEYS(sv));
        Perl_dump_indent(aTHX_ level, file, "  FILL = %ld\n", (long)HvFILL(sv));
@@ -1093,7 +1096,7 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo
 #endif
        if (HvPMROOT(sv))
 #ifdef IV_IS_QUAD
-           Perl_dump_indent(aTHX_ level, file, "  PMROOT = 0x%" PERL_PRIx64 "\n",(IV)HvPMROOT(sv));
+           Perl_dump_indent(aTHX_ level, file, "  PMROOT = 0x%" PERL_PRIx64 "\n",PTR2IV(HvPMROOT(sv)));
 #else
            Perl_dump_indent(aTHX_ level, file, "  PMROOT = 0x%lx\n",(long)HvPMROOT(sv));
 #endif
@@ -1140,7 +1143,7 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo
         if (CvROOT(sv) && dumpops)
            do_op_dump(level+1, file, CvROOT(sv));
 #ifdef IV_IS_QUAD
-       Perl_dump_indent(aTHX_ level, file, "  XSUB = 0x%" PERL_PRIx64 "\n", (IV)CvXSUB(sv));
+       Perl_dump_indent(aTHX_ level, file, "  XSUB = 0x%" PERL_PRIx64 "\n", PTR2IV(CvXSUB(sv)));
        Perl_dump_indent(aTHX_ level, file, "  XSUBANY = %" PERL_PRId64 "\n", (IV)CvXSUBANY(sv).any_i32);
 #else
        Perl_dump_indent(aTHX_ level, file, "  XSUB = 0x%lx\n", (long)CvXSUB(sv));
@@ -1174,7 +1177,7 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo
            Perl_dump_indent(aTHX_ level, file, "  LINES = %ld\n", (long)FmLINES(sv));
 #endif
 #ifdef IV_IS_QUAD
-       Perl_dump_indent(aTHX_ level, file, "  PADLIST = 0x%" PERL_PRIx64 "\n", (IV)CvPADLIST(sv));
+       Perl_dump_indent(aTHX_ level, file, "  PADLIST = 0x%" PERL_PRIx64 "\n", PTR2IV(CvPADLIST(sv)));
 #else
        Perl_dump_indent(aTHX_ level, file, "  PADLIST = 0x%lx\n", (long)CvPADLIST(sv));
 #endif
@@ -1214,7 +1217,7 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo
            CV *outside = CvOUTSIDE(sv);
 #ifdef IV_IS_QUAD
            Perl_dump_indent(aTHX_ level, file, "  OUTSIDE = 0x%" PERL_PRIx64 " (%s)\n", 
-                       (IV)outside
+                       PTR2IV(outside)
                        (!outside ? "null"
                         : CvANON(outside) ? "ANON"
                         : (outside == PL_main_cv) ? "MAIN"
@@ -1242,14 +1245,14 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo
 #endif
        do_hv_dump (level, file, "  GvSTASH", GvSTASH(sv));
 #ifdef IV_IS_QUAD
-       Perl_dump_indent(aTHX_ level, file, "  GP = 0x%" PERL_PRIx64 "\n", (IV)GvGP(sv));
-       Perl_dump_indent(aTHX_ level, file, "    SV = 0x%" PERL_PRIx64 "\n", (IV)GvSV(sv));
+       Perl_dump_indent(aTHX_ level, file, "  GP = 0x%" PERL_PRIx64 "\n", PTR2IV(GvGP(sv)));
+       Perl_dump_indent(aTHX_ level, file, "    SV = 0x%" PERL_PRIx64 "\n", PTR2IV(GvSV(sv)));
        Perl_dump_indent(aTHX_ level, file, "    REFCNT = %" PERL_PRId64 "\n", (IV)GvREFCNT(sv));
-       Perl_dump_indent(aTHX_ level, file, "    IO = 0x%" PERL_PRIx64 "\n", (IV)GvIOp(sv));
-       Perl_dump_indent(aTHX_ level, file, "    FORM = 0x%" PERL_PRIx64 "  \n", (IV)GvFORM(sv));
-       Perl_dump_indent(aTHX_ level, file, "    AV = 0x%" PERL_PRIx64 "\n", (IV)GvAV(sv));
-       Perl_dump_indent(aTHX_ level, file, "    HV = 0x%" PERL_PRIx64 "\n", (IV)GvHV(sv));
-       Perl_dump_indent(aTHX_ level, file, "    CV = 0x%" PERL_PRIx64 "\n", (IV)GvCV(sv));
+       Perl_dump_indent(aTHX_ level, file, "    IO = 0x%" PERL_PRIx64 "\n", PTR2IV(GvIOp(sv)));
+       Perl_dump_indent(aTHX_ level, file, "    FORM = 0x%" PERL_PRIx64 "  \n", PTR2IV(GvFORM(sv)));
+       Perl_dump_indent(aTHX_ level, file, "    AV = 0x%" PERL_PRIx64 "\n", PTR2IV(GvAV(sv)));
+       Perl_dump_indent(aTHX_ level, file, "    HV = 0x%" PERL_PRIx64 "\n", PTR2IV(GvHV(sv)));
+       Perl_dump_indent(aTHX_ level, file, "    CV = 0x%" PERL_PRIx64 "\n", PTR2IV(GvCV(sv)));
        Perl_dump_indent(aTHX_ level, file, "    CVGEN = 0x%" PERL_PRIx64 "\n", (IV)GvCVGEN(sv));
        Perl_dump_indent(aTHX_ level, file, "    LASTEXPR = %" PERL_PRId64 "\n", (IV)GvLASTEXPR(sv));
        Perl_dump_indent(aTHX_ level, file, "    LINE = %" PERL_PRId64 "\n", (IV)GvLINE(sv));
@@ -1272,9 +1275,9 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo
        break;
     case SVt_PVIO:
 #ifdef IV_IS_QUAD
-       Perl_dump_indent(aTHX_ level, file, "  IFP = 0x%" PERL_PRIx64 "\n", (IV)IoIFP(sv));
-       Perl_dump_indent(aTHX_ level, file, "  OFP = 0x%" PERL_PRIx64 "\n", (IV)IoOFP(sv));
-       Perl_dump_indent(aTHX_ level, file, "  DIRP = 0x%" PERL_PRIx64 "\n", (IV)IoDIRP(sv));
+       Perl_dump_indent(aTHX_ level, file, "  IFP = 0x%" PERL_PRIx64 "\n", PTR2IV(IoIFP(sv)));
+       Perl_dump_indent(aTHX_ level, file, "  OFP = 0x%" PERL_PRIx64 "\n", PTR2IV(IoOFP(sv)));
+       Perl_dump_indent(aTHX_ level, file, "  DIRP = 0x%" PERL_PRIx64 "\n", PTR2IV(IoDIRP(sv)));
        Perl_dump_indent(aTHX_ level, file, "  LINES = %" PERL_PRId64 "\n", (IV)IoLINES(sv));
        Perl_dump_indent(aTHX_ level, file, "  PAGE = %" PERL_PRId64 "\n", (IV)IoPAGE(sv));
        Perl_dump_indent(aTHX_ level, file, "  PAGE_LEN = %" PERL_PRId64 "\n", (IV)IoPAGE_LEN(sv));
diff --git a/embed.h b/embed.h
index 1d33518..7cde885 100644 (file)
--- a/embed.h
+++ b/embed.h
 #  define  Perl_set_numeric_local      perl_set_numeric_local
 #  define  Perl_set_numeric_standard   perl_set_numeric_standard
 #  define  PERL_POLLUTE
-#  ifndef EMBEDMYMALLOC
-#    define  PERL_POLLUTE_MALLOC
+/* malloc() pollution was the default in earlier versions, so enable
+ * it for bincompat; but not for systems that used to do prevent that,
+ * or when they ask for {HIDE,EMBED}MYMALLOC */
+#  if !defined(EMBEDMYMALLOC) && !defined(HIDEMYMALLOC)
+#    if !defined(NeXT) && !defined(__NeXT) && !defined(__MACHTEN__) && \
+        !defined(__QNX__)
+#      define  PERL_POLLUTE_MALLOC
+#    endif
 #  endif
 #endif
 
 #if defined(PERL_IN_UNIVERSAL_C) || defined(PERL_DECL_PROT)
 #define isa_lookup             S_isa_lookup
 #endif
-#if defined(PERL_IN_XSUTILS_C) || defined(PERL_DECL_PROT)
-#define modify_SV_attributes   S_modify_SV_attributes
-#endif
 #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
 #define mess_alloc             S_mess_alloc
 #  if defined(LEAKTEST)
 #define ck_glob                        Perl_ck_glob
 #define ck_grep                        Perl_ck_grep
 #define ck_index               Perl_ck_index
+#define ck_join                        Perl_ck_join
 #define ck_lengthconst         Perl_ck_lengthconst
 #define ck_lfun                        Perl_ck_lfun
 #define ck_listiob             Perl_ck_listiob
 #define pp_leaveeval           Perl_pp_leaveeval
 #define pp_leaveloop           Perl_pp_leaveloop
 #define pp_leavesub            Perl_pp_leavesub
+#define pp_leavesublv          Perl_pp_leavesublv
 #define pp_leavetry            Perl_pp_leavetry
 #define pp_leavewrite          Perl_pp_leavewrite
 #define pp_left_shift          Perl_pp_left_shift
 #if defined(PERL_IN_UNIVERSAL_C) || defined(PERL_DECL_PROT)
 #define isa_lookup(a,b,c,d)    S_isa_lookup(aTHX_ a,b,c,d)
 #endif
-#if defined(PERL_IN_XSUTILS_C) || defined(PERL_DECL_PROT)
-#define modify_SV_attributes(a,b,c,d)  S_modify_SV_attributes(aTHX_ a,b,c,d)
-#endif
 #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
 #define mess_alloc()           S_mess_alloc(aTHX)
 #  if defined(LEAKTEST)
 #define ck_glob(a)             Perl_ck_glob(aTHX_ a)
 #define ck_grep(a)             Perl_ck_grep(aTHX_ a)
 #define ck_index(a)            Perl_ck_index(aTHX_ a)
+#define ck_join(a)             Perl_ck_join(aTHX_ a)
 #define ck_lengthconst(a)      Perl_ck_lengthconst(aTHX_ a)
 #define ck_lfun(a)             Perl_ck_lfun(aTHX_ a)
 #define ck_listiob(a)          Perl_ck_listiob(aTHX_ a)
 #define pp_leaveeval()         Perl_pp_leaveeval(aTHX)
 #define pp_leaveloop()         Perl_pp_leaveloop(aTHX)
 #define pp_leavesub()          Perl_pp_leavesub(aTHX)
+#define pp_leavesublv()                Perl_pp_leavesublv(aTHX)
 #define pp_leavetry()          Perl_pp_leavetry(aTHX)
 #define pp_leavewrite()                Perl_pp_leavewrite(aTHX)
 #define pp_left_shift()                Perl_pp_left_shift(aTHX)
 #define S_isa_lookup           CPerlObj::S_isa_lookup
 #define isa_lookup             S_isa_lookup
 #endif
-#if defined(PERL_IN_XSUTILS_C) || defined(PERL_DECL_PROT)
-#define S_modify_SV_attributes CPerlObj::S_modify_SV_attributes
-#define modify_SV_attributes   S_modify_SV_attributes
-#endif
 #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
 #define S_mess_alloc           CPerlObj::S_mess_alloc
 #define mess_alloc             S_mess_alloc
 #define ck_grep                        Perl_ck_grep
 #define Perl_ck_index          CPerlObj::Perl_ck_index
 #define ck_index               Perl_ck_index
+#define Perl_ck_join           CPerlObj::Perl_ck_join
+#define ck_join                        Perl_ck_join
 #define Perl_ck_lengthconst    CPerlObj::Perl_ck_lengthconst
 #define ck_lengthconst         Perl_ck_lengthconst
 #define Perl_ck_lfun           CPerlObj::Perl_ck_lfun
 #define pp_leaveloop           Perl_pp_leaveloop
 #define Perl_pp_leavesub       CPerlObj::Perl_pp_leavesub
 #define pp_leavesub            Perl_pp_leavesub
+#define Perl_pp_leavesublv     CPerlObj::Perl_pp_leavesublv
+#define pp_leavesublv          Perl_pp_leavesublv
 #define Perl_pp_leavetry       CPerlObj::Perl_pp_leavetry
 #define pp_leavetry            Perl_pp_leavetry
 #define Perl_pp_leavewrite     CPerlObj::Perl_pp_leavewrite
  */
 
 #if !defined(PERL_CORE)
-#  define sv_setptrobj(rv,ptr,name)    sv_setref_iv(rv,name,(IV)ptr)
-#  define sv_setptrref(rv,ptr)         sv_setref_iv(rv,Nullch,(IV)ptr)
+#  define sv_setptrobj(rv,ptr,name)    sv_setref_iv(rv,name,PTR2IV(ptr))
+#  define sv_setptrref(rv,ptr)         sv_setref_iv(rv,Nullch,PTR2IV(ptr))
 #endif
 
 #if !defined(PERL_CORE) && !defined(PERL_NOCOMPAT) && !defined(PERL_BINCOMPAT_5005)
index 0543c0f..85e33dd 100755 (executable)
--- a/embed.pl
+++ b/embed.pl
@@ -303,8 +303,14 @@ print EM <<'END';
 #  define  Perl_set_numeric_local      perl_set_numeric_local
 #  define  Perl_set_numeric_standard   perl_set_numeric_standard
 #  define  PERL_POLLUTE
-#  ifndef EMBEDMYMALLOC
-#    define  PERL_POLLUTE_MALLOC
+/* malloc() pollution was the default in earlier versions, so enable
+ * it for bincompat; but not for systems that used to do prevent that,
+ * or when they ask for {HIDE,EMBED}MYMALLOC */
+#  if !defined(EMBEDMYMALLOC) && !defined(HIDEMYMALLOC)
+#    if !defined(NeXT) && !defined(__NeXT) && !defined(__MACHTEN__) && \
+        !defined(__QNX__)
+#      define  PERL_POLLUTE_MALLOC
+#    endif
 #  endif
 #endif
 
@@ -446,8 +452,8 @@ print EM <<'END';
  */
 
 #if !defined(PERL_CORE)
-#  define sv_setptrobj(rv,ptr,name)    sv_setref_iv(rv,name,(IV)ptr)
-#  define sv_setptrref(rv,ptr)         sv_setref_iv(rv,Nullch,(IV)ptr)
+#  define sv_setptrobj(rv,ptr,name)    sv_setref_iv(rv,name,PTR2IV(ptr))
+#  define sv_setptrref(rv,ptr)         sv_setref_iv(rv,Nullch,PTR2IV(ptr))
 #endif
 
 #if !defined(PERL_CORE) && !defined(PERL_NOCOMPAT) && !defined(PERL_BINCOMPAT_5005)
@@ -1647,10 +1653,10 @@ p       |bool   |sv_upgrade     |SV* sv|U32 mt
 p      |void   |sv_usepvn      |SV* sv|char* ptr|STRLEN len
 p      |void   |sv_vcatpvfn    |SV* sv|const char* pat|STRLEN patlen \
                                |va_list* args|SV** svargs|I32 svmax \
-                               |bool *used_locale
+                               |bool *maybe_tainted
 p      |void   |sv_vsetpvfn    |SV* sv|const char* pat|STRLEN patlen \
                                |va_list* args|SV** svargs|I32 svmax \
-                               |bool *used_locale
+                               |bool *maybe_tainted
 p      |SV*    |swash_init     |char* pkg|char* name|SV* listsv \
                                |I32 minbits|I32 none
 p      |UV     |swash_fetch    |SV *sv|U8 *ptr
@@ -2032,10 +2038,6 @@ s        |I32    |win32_textfilter       |int idx|SV *sv|int maxlen
 s      |SV*|isa_lookup |HV *stash|const char *name|int len|int level
 #endif
 
-#if defined(PERL_IN_XSUTILS_C) || defined(PERL_DECL_PROT)
-s      |int|modify_SV_attributes|SV *sv|SV **retlist|SV **attrlist|int numattrs
-#endif
-
 #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
 s      |SV*    |mess_alloc
 #  if defined(LEAKTEST)
index 3e83de1..65a31f1 100644 (file)
@@ -49,6 +49,8 @@
 #define PL_delaymagic          (vTHX->Tdelaymagic)
 #define PL_dirty               (vTHX->Tdirty)
 #define PL_dumpindent          (vTHX->Tdumpindent)
+#define PL_efloatbuf           (vTHX->Tefloatbuf)
+#define PL_efloatsize          (vTHX->Tefloatsize)
 #define PL_extralen            (vTHX->Textralen)
 #define PL_firstgv             (vTHX->Tfirstgv)
 #define PL_formtarget          (vTHX->Tformtarget)
 #define PL_doswitches          (PERL_GET_INTERP->Idoswitches)
 #define PL_dowarn              (PERL_GET_INTERP->Idowarn)
 #define PL_e_script            (PERL_GET_INTERP->Ie_script)
-#define PL_efloatbuf           (PERL_GET_INTERP->Iefloatbuf)
-#define PL_efloatsize          (PERL_GET_INTERP->Iefloatsize)
 #define PL_egid                        (PERL_GET_INTERP->Iegid)
 #define PL_endav               (PERL_GET_INTERP->Iendav)
 #define PL_envgv               (PERL_GET_INTERP->Ienvgv)
 #define PL_doswitches          (vTHX->Idoswitches)
 #define PL_dowarn              (vTHX->Idowarn)
 #define PL_e_script            (vTHX->Ie_script)
-#define PL_efloatbuf           (vTHX->Iefloatbuf)
-#define PL_efloatsize          (vTHX->Iefloatsize)
 #define PL_egid                        (vTHX->Iegid)
 #define PL_endav               (vTHX->Iendav)
 #define PL_envgv               (vTHX->Ienvgv)
 #define PL_Idoswitches         PL_doswitches
 #define PL_Idowarn             PL_dowarn
 #define PL_Ie_script           PL_e_script
-#define PL_Iefloatbuf          PL_efloatbuf
-#define PL_Iefloatsize         PL_efloatsize
 #define PL_Iegid               PL_egid
 #define PL_Iendav              PL_endav
 #define PL_Ienvgv              PL_envgv
 #define PL_delaymagic          (aTHX->Tdelaymagic)
 #define PL_dirty               (aTHX->Tdirty)
 #define PL_dumpindent          (aTHX->Tdumpindent)
+#define PL_efloatbuf           (aTHX->Tefloatbuf)
+#define PL_efloatsize          (aTHX->Tefloatsize)
 #define PL_extralen            (aTHX->Textralen)
 #define PL_firstgv             (aTHX->Tfirstgv)
 #define PL_formtarget          (aTHX->Tformtarget)
 #define PL_Tdelaymagic         PL_delaymagic
 #define PL_Tdirty              PL_dirty
 #define PL_Tdumpindent         PL_dumpindent
+#define PL_Tefloatbuf          PL_efloatbuf
+#define PL_Tefloatsize         PL_efloatsize
 #define PL_Textralen           PL_extralen
 #define PL_Tfirstgv            PL_firstgv
 #define PL_Tformtarget         PL_formtarget
index e4730cd..2187e59 100644 (file)
@@ -107,6 +107,11 @@ sub timing_info {
 }
 
 my %symtable;
+
+sub clearsym {
+    %symtable = ();
+}
+
 sub savesym {
     my ($obj, $value) = @_;
 #    warn(sprintf("savesym: sym_%x => %s\n", $$obj, $value)); # debug
index 570b001..2d6145d 100644 (file)
@@ -202,7 +202,7 @@ make_sv_object(pTHX_ SV *arg, SV *sv)
     }
     if (!type) {
        type = svclassnames[SvTYPE(sv)];
-       iv = (IV)sv;
+       iv = PTR2IV(sv);
     }
     sv_setiv(newSVrv(arg, type), iv);
     return arg;
@@ -211,7 +211,7 @@ make_sv_object(pTHX_ SV *arg, SV *sv)
 static SV *
 make_mg_object(pTHX_ SV *arg, MAGIC *mg)
 {
-    sv_setiv(newSVrv(arg, "B::MAGIC"), (IV)mg);
+    sv_setiv(newSVrv(arg, "B::MAGIC"), PTR2IV(mg));
     return arg;
 }
 
@@ -317,7 +317,7 @@ walkoptree(pTHX_ SV *opsv, char *method)
     if (!SvROK(opsv))
        croak("opsv is not a reference");
     opsv = sv_mortalcopy(opsv);
-    o = (OP*)SvIV((SV*)SvRV(opsv));
+    o = INT2PTR(OP*,SvIV((SV*)SvRV(opsv)));
     if (walkoptree_debug) {
        PUSHMARK(sp);
        XPUSHs(opsv);
@@ -332,7 +332,7 @@ walkoptree(pTHX_ SV *opsv, char *method)
        OP *kid;
        for (kid = ((UNOP*)o)->op_first; kid; kid = kid->op_sibling) {
            /* Use the same opsv. Rely on methods not to mess it up. */
-           sv_setiv(newSVrv(opsv, cc_opclassname(aTHX_ kid)), (IV)kid);
+           sv_setiv(newSVrv(opsv, cc_opclassname(aTHX_ kid)), PTR2IV(kid));
            walkoptree(aTHX_ opsv, method);
        }
     }
@@ -437,7 +437,7 @@ walkoptree_debug(...)
     OUTPUT:
        RETVAL
 
-#define address(sv) (IV)sv
+#define address(sv) PTR2IV(sv)
 
 IV
 address(sv)
@@ -647,10 +647,10 @@ PMOP_pmreplroot(o)
        if (o->op_type == OP_PUSHRE) {
            sv_setiv(newSVrv(ST(0), root ?
                             svclassnames[SvTYPE((SV*)root)] : "B::SV"),
-                    (IV)root);
+                    PTR2IV(root));
        }
        else {
-           sv_setiv(newSVrv(ST(0), cc_opclassname(aTHX_ root)), (IV)root);
+           sv_setiv(newSVrv(ST(0), cc_opclassname(aTHX_ root)), PTR2IV(root));
        }
 
 B::OP
@@ -814,7 +814,11 @@ packiv(sv)
             * reach this code anyway (unless sizeof(IV) > 8 but then
             * everything else breaks too so I'm not fussed at the moment).
             */
-           wp[0] = htonl(((U32)iv) >> (sizeof(IV)*4));
+#ifdef UV_IS_QUAD
+           wp[0] = htonl(((UV)iv) >> (sizeof(UV)*4));
+#else
+           wp[0] = htonl(((U32)iv) >> (sizeof(UV)*4));
+#endif
            wp[1] = htonl(iv & 0xffffffff);
            ST(0) = sv_2mortal(newSVpvn((char *)wp, 8));
        } else {
@@ -1149,7 +1153,7 @@ void
 CvXSUB(cv)
        B::CV   cv
     CODE:
-       ST(0) = sv_2mortal(newSViv((IV)CvXSUB(cv)));
+       ST(0) = sv_2mortal(newSViv(PTR2IV(CvXSUB(cv))));
 
 
 void
index d2ef78f..b914bc6 100644 (file)
@@ -129,6 +129,7 @@ sub B::PMOP::mark_if_leader {
 
 sub compile {
     my @options = @_;
+    B::clearsym();
     if (@options) {
        return sub {
            my $objname;
index a9e5d55..5694531 100644 (file)
@@ -392,7 +392,8 @@ sub B::PVIV::bytecode {
 }
 
 sub B::PVNV::bytecode {
-    my ($sv, $flag) = @_;
+    my $sv = shift;
+    my $flag = shift || 0;
     # The $flag argument is passed through PVMG::bytecode by BM::bytecode
     # and AV::bytecode and indicates special handling. $flag = 1 is used by
     # BM::bytecode and means that we should ensure we save the whole B-M
index c7547ad..3230ebd 100644 (file)
@@ -56,6 +56,9 @@ use B::Asmdata qw(@specialsv_name);
 use FileHandle;
 use Carp;
 use strict;
+use Config;
+my $handle_VC_problem = "";
+$handle_VC_problem="{0}," if $^O eq 'MSWin32' and $Config{cc} =~ /^cl/i;
 
 my $hv_index = 0;
 my $gv_index = 0;
@@ -162,7 +165,7 @@ sub B::OP::save {
        $init->add(sprintf("(void)find_threadsv(%s);",
                           cstring($threadsv_names[$op->targ])));
     }
-    $opsect->add(sprintf("s\\_%x, s\\_%x, %s, %u, %u, %u, 0x%x, 0x%x",
+    $opsect->add(sprintf("s\\_%x, s\\_%x, %s,$handle_VC_problem %u, %u, %u, 0x%x, 0x%x",
                         ${$op->next}, ${$op->sibling}, $op->ppaddr, $op->targ,
                         $type, $op_seq, $op->flags, $op->private));
     savesym($op, sprintf("&op_list[%d]", $opsect->index));
@@ -175,7 +178,7 @@ sub B::FAKEOP::new {
 
 sub B::FAKEOP::save {
     my ($op, $level) = @_;
-    $opsect->add(sprintf("%s, %s, %s, %u, %u, %u, 0x%x, 0x%x",
+    $opsect->add(sprintf("%s, %s, %s,$handle_VC_problem %u, %u, %u, 0x%x, 0x%x",
                         $op->next, $op->sibling, $op->ppaddr, $op->targ,
                         $op->type, $op_seq, $op->flags, $op->private));
     return sprintf("&op_list[%d]", $opsect->index);
@@ -193,7 +196,7 @@ sub B::UNOP::save {
     my ($op, $level) = @_;
     my $sym = objsym($op);
     return $sym if defined $sym;
-    $unopsect->add(sprintf("s\\_%x, s\\_%x, %s, %u, %u, %u, 0x%x, 0x%x, s\\_%x",
+    $unopsect->add(sprintf("s\\_%x, s\\_%x, %s,$handle_VC_problem %u, %u, %u, 0x%x, 0x%x, s\\_%x",
                           ${$op->next}, ${$op->sibling}, $op->ppaddr,
                           $op->targ, $op->type, $op_seq, $op->flags,
                           $op->private, ${$op->first}));
@@ -204,7 +207,7 @@ sub B::BINOP::save {
     my ($op, $level) = @_;
     my $sym = objsym($op);
     return $sym if defined $sym;
-    $binopsect->add(sprintf("s\\_%x, s\\_%x, %s, %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x",
+    $binopsect->add(sprintf("s\\_%x, s\\_%x, %s,$handle_VC_problem %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x",
                            ${$op->next}, ${$op->sibling}, $op->ppaddr,
                            $op->targ, $op->type, $op_seq, $op->flags,
                            $op->private, ${$op->first}, ${$op->last}));
@@ -215,7 +218,7 @@ sub B::LISTOP::save {
     my ($op, $level) = @_;
     my $sym = objsym($op);
     return $sym if defined $sym;
-    $listopsect->add(sprintf("s\\_%x, s\\_%x, %s, %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x, %u",
+    $listopsect->add(sprintf("s\\_%x, s\\_%x, %s,$handle_VC_problem %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x, %u",
                             ${$op->next}, ${$op->sibling}, $op->ppaddr,
                             $op->targ, $op->type, $op_seq, $op->flags,
                             $op->private, ${$op->first}, ${$op->last},
@@ -227,7 +230,7 @@ sub B::LOGOP::save {
     my ($op, $level) = @_;
     my $sym = objsym($op);
     return $sym if defined $sym;
-    $logopsect->add(sprintf("s\\_%x, s\\_%x, %s, %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x",
+    $logopsect->add(sprintf("s\\_%x, s\\_%x, %s,$handle_VC_problem %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x",
                            ${$op->next}, ${$op->sibling}, $op->ppaddr,
                            $op->targ, $op->type, $op_seq, $op->flags,
                            $op->private, ${$op->first}, ${$op->other}));
@@ -241,7 +244,7 @@ sub B::LOOP::save {
     #warn sprintf("LOOP: redoop %s, nextop %s, lastop %s\n",
     #           peekop($op->redoop), peekop($op->nextop),
     #           peekop($op->lastop)); # debug
-    $loopsect->add(sprintf("s\\_%x, s\\_%x, %s, %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x, %u, s\\_%x, s\\_%x, s\\_%x",
+    $loopsect->add(sprintf("s\\_%x, s\\_%x, %s,$handle_VC_problem %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x, %u, s\\_%x, s\\_%x, s\\_%x",
                           ${$op->next}, ${$op->sibling}, $op->ppaddr,
                           $op->targ, $op->type, $op_seq, $op->flags,
                           $op->private, ${$op->first}, ${$op->last},
@@ -254,7 +257,7 @@ sub B::PVOP::save {
     my ($op, $level) = @_;
     my $sym = objsym($op);
     return $sym if defined $sym;
-    $pvopsect->add(sprintf("s\\_%x, s\\_%x, %s, %u, %u, %u, 0x%x, 0x%x, %s",
+    $pvopsect->add(sprintf("s\\_%x, s\\_%x, %s, $handle_VC_problem %u, %u, %u, 0x%x, 0x%x, %s",
                           ${$op->next}, ${$op->sibling}, $op->ppaddr,
                           $op->targ, $op->type, $op_seq, $op->flags,
                           $op->private, cstring($op->pv)));
@@ -266,7 +269,7 @@ sub B::SVOP::save {
     my $sym = objsym($op);
     return $sym if defined $sym;
     my $svsym = $op->sv->save;
-    $svopsect->add(sprintf("s\\_%x, s\\_%x, %s, %u, %u, %u, 0x%x, 0x%x, %s",
+    $svopsect->add(sprintf("s\\_%x, s\\_%x, %s,$handle_VC_problem %u, %u, %u, 0x%x, 0x%x, %s",
                           ${$op->next}, ${$op->sibling}, $op->ppaddr,
                           $op->targ, $op->type, $op_seq, $op->flags,
                           $op->private, "(SV*)$svsym"));
@@ -278,7 +281,7 @@ sub B::GVOP::save {
     my $sym = objsym($op);
     return $sym if defined $sym;
     my $gvsym = $op->gv->save;
-    $gvopsect->add(sprintf("s\\_%x, s\\_%x, %s, %u, %u, %u, 0x%x, 0x%x, Nullgv",
+    $gvopsect->add(sprintf("s\\_%x, s\\_%x, %s,$handle_VC_problem %u, %u, %u, 0x%x, 0x%x, Nullgv",
                           ${$op->next}, ${$op->sibling}, $op->ppaddr,
                           $op->targ, $op->type, $op_seq, $op->flags,
                           $op->private));
@@ -294,7 +297,7 @@ sub B::COP::save {
     my $stashsym = $op->stash->save;
     warn sprintf("COP: line %d file %s\n", $op->line, $op->filegv->SV->PV)
        if $debug_cops;
-    $copsect->add(sprintf("s\\_%x, s\\_%x, %s, %u, %u, %u, 0x%x, 0x%x, %s, Nullhv, Nullgv, %u, %d, %u",
+    $copsect->add(sprintf("s\\_%x, s\\_%x, %s,$handle_VC_problem %u, %u, %u, 0x%x, 0x%x, %s, Nullhv, Nullgv, %u, %d, %u",
                          ${$op->next}, ${$op->sibling}, $op->ppaddr,
                          $op->targ, $op->type, $op_seq, $op->flags,
                          $op->private, cstring($op->label), $op->cop_seq,
@@ -330,7 +333,7 @@ sub B::PMOP::save {
     # pmnext handling is broken in perl itself, I think. Bad op_pmnext
     # fields aren't noticed in perl's runtime (unless you try reset) but we
     # segfault when trying to dereference it to find op->op_pmnext->op_type
-    $pmopsect->add(sprintf("s\\_%x, s\\_%x, %s, %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x, %u, %s, %s, 0, 0, 0x%x, 0x%x",
+    $pmopsect->add(sprintf("s\\_%x, s\\_%x, %s,$handle_VC_problem %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x, %u, %s, %s, 0, 0, 0x%x, 0x%x",
                           ${$op->next}, ${$op->sibling}, $ppaddr, $op->targ,
                           $op->type, $op_seq, $op->flags, $op->private,
                           ${$op->first}, ${$op->last}, $op->children,
index 7563626..8910068 100644 (file)
@@ -247,6 +247,7 @@ sub B::SPECIAL::debug {
 
 sub compile {
     my $order = shift;
+    B::clearsym();
     if ($order eq "exec") {
         return sub { walkoptree_exec(main_start, "debug") }
     } else {
index 93757f3..35bf9b8 100644 (file)
@@ -17,6 +17,7 @@ sub terse {
 sub compile {
     my $order = shift;
     my @options = @_;
+    B::clearsym();
     if (@options) {
        return sub {
            my $objname;
index 9af85c9..dcff65a 100644 (file)
@@ -16,7 +16,8 @@ if ($^O eq 'MSWin32') {
 WriteMakefile(
     NAME       => "B",
     VERSION    => "a5",
-    MAN3PODS => {},
+    PL_FILES   => { 'defsubs_h.PL' => 'defsubs.h' },
+    MAN3PODS   => {},
     clean      => {
        FILES           => "perl$e *$o B.c defsubs.h *~"
     }
similarity index 100%
rename from ext/B/defsubs.h.PL
rename to ext/B/defsubs_h.PL
index 948fdcd..febadf8 100644 (file)
@@ -35,7 +35,7 @@ INPUT
 T_OP_OBJ
        if (SvROK($arg)) {
            IV tmp = SvIV((SV*)SvRV($arg));
-           $var = ($type) tmp;
+           $var = INT2PTR($type,tmp);
        }
        else
            croak(\"$var is not a reference\")
@@ -43,7 +43,7 @@ T_OP_OBJ
 T_SV_OBJ
        if (SvROK($arg)) {
            IV tmp = SvIV((SV*)SvRV($arg));
-           $var = ($type) tmp;
+           $var = INT2PTR($type,tmp);
        }
        else
            croak(\"$var is not a reference\")
@@ -51,18 +51,18 @@ T_SV_OBJ
 T_MG_OBJ
        if (SvROK($arg)) {
            IV tmp = SvIV((SV*)SvRV($arg));
-           $var = ($type) tmp;
+           $var = INT2PTR($type,tmp);
        }
        else
            croak(\"$var is not a reference\")
 
 OUTPUT
 T_OP_OBJ
-       sv_setiv(newSVrv($arg, cc_opclassname(aTHX_ (OP*)$var)), (IV)$var);
+       sv_setiv(newSVrv($arg, cc_opclassname(aTHX_ (OP*)$var)), PTR2IV($var));
 
 T_SV_OBJ
        make_sv_object(aTHX_ ($arg), (SV*)($var));
 
 
 T_MG_OBJ
-       sv_setiv(newSVrv($arg, "B::MAGIC"), (IV)$var);
+       sv_setiv(newSVrv($arg, "B::MAGIC"), PTR2IV($var));
index 1dda7e6..5ca0d1a 100644 (file)
@@ -43,7 +43,7 @@ typedef IV IV64;
        BGET_U32(hi);                                   \
        BGET_U32(lo);                                   \
        if (sizeof(IV) == 8)                            \
-           arg = (IV) (hi << (sizeof(IV)*4) | lo);     \
+           arg = ((IV)hi << (sizeof(IV)*4) | (IV)lo);  \
        else if (((I32)hi == -1 && (I32)lo < 0)         \
                 || ((I32)hi == 0 && (I32)lo >= 0)) {   \
            arg = (I32)lo;                              \
index bfe007c..3b8f776 100644 (file)
@@ -151,12 +151,7 @@ enum {
     OPt_COP            /* 10 */
 };
 
-#if defined(CYGWIN) || defined(VMS)
-extern
-#else
-EXT
-#endif
-void byterun(pTHXo_ struct bytestream bs);
+extern void byterun(pTHXo_ struct bytestream bs);
 
 #define INIT_SPECIALSV_LIST STMT_START { \
        PL_specialsv_list[0] = Nullsv; \
index 6d374bf..8f36456 100644 (file)
    * Added a BOOT check to test for equivalent versions of db.h &
      libdb.a/so.
 
+1.71 7th September 1999
+
+   * Fixed a bug that prevented 1.70 from compiling under win32
+
+   * Updated to support Berkeley DB 3.x
+
+   * Updated dbinfo for Berkeley DB 3.x file formats.
index e20a562..44bdad6 100644 (file)
@@ -1,8 +1,8 @@
 # DB_File.pm -- Perl 5 interface to Berkeley DB 
 #
 # written by Paul Marquess (Paul.Marquess@btinternet.com)
-# last modified 4th August 1999
-# version 1.70
+# last modified 4th September 1999
+# version 1.71
 #
 #     Copyright (c) 1995-1999 Paul Marquess. All rights reserved.
 #     This program is free software; you can redistribute it and/or
@@ -145,7 +145,7 @@ use vars qw($VERSION @ISA @EXPORT $AUTOLOAD $DB_BTREE $DB_HASH $DB_RECNO $db_ver
 use Carp;
 
 
-$VERSION = "1.70" ;
+$VERSION = "1.71" ;
 
 #typedef enum { DB_BTREE, DB_HASH, DB_RECNO } DBTYPE;
 $DB_BTREE = new DB_File::BTREEINFO ;
@@ -421,10 +421,10 @@ DB_File - Perl5 access to Berkeley DB version 1.x
 
 B<DB_File> is a module which allows Perl programs to make use of the
 facilities provided by Berkeley DB version 1.x (if you have a newer
-version of DB, see L<Using DB_File with Berkeley DB version 2>). It is
-assumed that you have a copy of the Berkeley DB manual pages at hand
-when reading this documentation. The interface defined here mirrors the
-Berkeley DB interface closely.
+version of DB, see L<Using DB_File with Berkeley DB version 2 or 3>).
+It is assumed that you have a copy of the Berkeley DB manual pages at
+hand when reading this documentation. The interface defined here
+mirrors the Berkeley DB interface closely.
 
 Berkeley DB is a C library which provides a consistent interface to a
 number of database formats.  B<DB_File> provides an interface to all
@@ -465,32 +465,33 @@ number.
 
 =back
 
-=head2 Using DB_File with Berkeley DB version 2
+=head2 Using DB_File with Berkeley DB version 2 or 3
 
 Although B<DB_File> is intended to be used with Berkeley DB version 1,
-it can also be used with version 2. In this case the interface is
+it can also be used with version 2.or 3 In this case the interface is
 limited to the functionality provided by Berkeley DB 1.x. Anywhere the
-version 2 interface differs, B<DB_File> arranges for it to work like
-version 1. This feature allows B<DB_File> scripts that were built with
-version 1 to be migrated to version 2 without any changes.
+version 2 or 3 interface differs, B<DB_File> arranges for it to work
+like version 1. This feature allows B<DB_File> scripts that were built
+with version 1 to be migrated to version 2 or 3 without any changes.
 
 If you want to make use of the new features available in Berkeley DB
-2.x, use the Perl module B<BerkeleyDB> instead.
+2.x or 3.x, use the Perl module B<BerkeleyDB> instead.
 
 At the time of writing this document the B<BerkeleyDB> module is still
 alpha quality (the version number is < 1.0), and so unsuitable for use
 in any serious development work. Once its version number is >= 1.0, it
 is considered stable enough for real work.
 
-B<Note:> The database file format has changed in Berkeley DB version 2.
-If you cannot recreate your databases, you must dump any existing
-databases with the C<db_dump185> utility that comes with Berkeley DB.
-Once you have rebuilt DB_File to use Berkeley DB version 2, your
+B<Note:> The database file format has changed in both Berkeley DB
+version 2 and 3. If you cannot recreate your databases, you must dump
+any existing databases with the C<db_dump185> utility that comes with
+Berkeley DB.
+Once you have rebuilt DB_File to use Berkeley DB version 2 or 3, your
 databases can be recreated using C<db_load>. Refer to the Berkeley DB
 documentation for further details.
 
-Please read L<"COPYRIGHT"> before using version 2.x of Berkeley DB with
-DB_File.
+Please read L<"COPYRIGHT"> before using version 2.x or 3.x of Berkeley
+DB with DB_File.
 
 =head2 Interface to Berkeley DB
 
@@ -1940,11 +1941,12 @@ date, so the most recent version can always be found on CPAN (see
 L<perlmod/CPAN> for details), in the directory
 F<modules/by-module/DB_File>.
 
-This version of B<DB_File> will work with either version 1.x or 2.x of
-Berkeley DB, but is limited to the functionality provided by version 1.
+This version of B<DB_File> will work with either version 1.x, 2.x or
+3.x of Berkeley DB, but is limited to the functionality provided by
+version 1.
 
 The official web site for Berkeley DB is F<http://www.sleepycat.com>.
-Both versions 1 and 2 of Berkeley DB are available there.
+All versions of Berkeley DB are available there.
 
 Alternatively, Berkeley DB version 1 is available at your nearest CPAN
 archive in F<src/misc/db.1.85.tar.gz>.
index 2ee1e61..ccb9b75 100644 (file)
@@ -3,8 +3,8 @@
  DB_File.xs -- Perl 5 interface to Berkeley DB 
 
  written by Paul Marquess <Paul.Marquess@btinternet.com>
- last modified 4th August 1999
- version 1.70
+ last modified 7th September 1999
+ version 1.71
 
  All comments/suggestions/problems are welcome
 
@@ -78,6 +78,9 @@
                GV_ADD|GV_ADDMULT -- bug spotted by Nick Ing-Simmons.
                Added a BOOT check to test for equivalent versions of db.h &
                libdb.a/so.
+        1.71 -  Support for Berkeley DB version 3.
+               Support for Berkeley DB 2/3's backward compatability mode.
+               Rewrote push
 
 */
 
 #ifdef op
 #    undef op
 #endif
-#include <db.h>
+
+#ifdef COMPAT185
+#    include <db_185.h>
+#else
+#    include <db.h>
+#endif
 
 #ifndef pTHX
 #    define pTHX
 /* #define TRACE */
 #define DBM_FILTERING
 
+#ifdef TRACE
+#    define Trace(x)        printf x
+#else
+#    define Trace(x)
+#endif
+
 
+#define DBT_clear(x)   Zero(&x, 1, DBT) ;
 
 #ifdef DB_VERSION_MAJOR
 
+#if DB_VERSION_MAJOR == 2
+#    define BERKELEY_DB_1_OR_2
+#endif
+
 /* map version 2 features & constants onto their version 1 equivalent */
 
 #ifdef DB_Prefix_t
 
 /* DBTYPE stays the same */
 /* HASHINFO, RECNOINFO and BTREEINFO  map to DB_INFO */
-typedef DB_INFO        INFO ;
+#if DB_VERSION_MAJOR == 2
+    typedef DB_INFO    INFO ;
+#else /* DB_VERSION_MAJOR > 2 */
+#    define DB_FIXEDLEN        (0x8000)
+#endif /* DB_VERSION_MAJOR == 2 */
 
 /* version 2 has db_recno_t in place of recno_t        */
 typedef db_recno_t     recno_t;
@@ -166,15 +189,18 @@ typedef db_recno_t        recno_t;
 #define R_NEXT          DB_NEXT
 #define R_NOOVERWRITE   DB_NOOVERWRITE
 #define R_PREV          DB_PREV
+
 #if DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR < 5
-#define R_SETCURSOR     0x800000
+#  define R_SETCURSOR  0x800000
 #else
-#define R_SETCURSOR     (-100)
+#  define R_SETCURSOR  (-100)
 #endif
+
 #define R_RECNOSYNC     0
 #define R_FIXEDLEN     DB_FIXEDLEN
 #define R_DUP          DB_DUP
 
+
 #define db_HA_hash     h_hash
 #define db_HA_ffactor  h_ffactor
 #define db_HA_nelem    h_nelem
@@ -209,13 +235,15 @@ typedef db_recno_t        recno_t;
 #define DB_flags(x, v) x |= v 
 
 #if DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR < 5
-#define flagSet(flags, bitmask)        ((flags) & (bitmask))
+#    define flagSet(flags, bitmask)    ((flags) & (bitmask))
 #else
-#define flagSet(flags, bitmask)        (((flags) & DB_OPFLAGS_MASK) == (bitmask))
+#    define flagSet(flags, bitmask)    (((flags) & DB_OPFLAGS_MASK) == (bitmask))
 #endif
 
 #else /* db version 1.x */
 
+#define BERKELEY_DB_1_OR_2
+
 typedef union INFO {
         HASHINFO       hash ;
         RECNOINFO      recno ;
@@ -224,17 +252,17 @@ typedef union INFO {
 
 
 #ifdef mDB_Prefix_t 
-#ifdef DB_Prefix_t
-#undef DB_Prefix_t
-#endif
-#define DB_Prefix_t    mDB_Prefix_t 
+#  ifdef DB_Prefix_t
+#    undef DB_Prefix_t
+#  endif
+#  define DB_Prefix_t  mDB_Prefix_t 
 #endif
 
 #ifdef mDB_Hash_t
-#ifdef DB_Hash_t
-#undef DB_Hash_t
-#endif
-#define DB_Hash_t      mDB_Hash_t
+#  ifdef DB_Hash_t
+#    undef DB_Hash_t
+#  endif
+#  define DB_Hash_t    mDB_Hash_t
 #endif
 
 #define db_HA_hash     hash.hash
@@ -281,20 +309,20 @@ typedef union INFO {
 
 #ifdef DB_VERSION_MAJOR
 #define db_DESTROY(db)                  ( db->cursor->c_close(db->cursor),\
-                                         db->dbp->close(db->dbp, 0) )
+                                         (db->dbp->close)(db->dbp, 0) )
 #define db_close(db)                   ((db->dbp)->close)(db->dbp, 0)
 #define db_del(db, key, flags)          (flagSet(flags, R_CURSOR)                                      \
                                                ? ((db->cursor)->c_del)(db->cursor, 0)          \
                                                : ((db->dbp)->del)(db->dbp, NULL, &key, flags) )
 
-#else
+#else /* ! DB_VERSION_MAJOR */
 
 #define db_DESTROY(db)                  ((db->dbp)->close)(db->dbp)
 #define db_close(db)                   ((db->dbp)->close)(db->dbp)
 #define db_del(db, key, flags)          ((db->dbp)->del)(db->dbp, &key, flags)
 #define db_put(db, key, value, flags)   ((db->dbp)->put)(db->dbp, &key, &value, flags)
 
-#endif
+#endif /* ! DB_VERSION_MAJOR */
 
 
 #define db_seq(db, key, value, flags)   do_SEQ(db, key, value, flags)
@@ -306,7 +334,9 @@ typedef struct {
        SV *    prefix ;
        SV *    hash ;
        int     in_memory ;
+#ifdef BERKELEY_DB_1_OR_2
        INFO    info ;
+#endif 
 #ifdef DB_VERSION_MAJOR
        DBC *   cursor ;
 #endif
@@ -439,48 +469,6 @@ u_int              flags ;
 
 #endif /* DB_VERSION_MAJOR */
 
-static void
-GetVersionInfo(pTHX)
-{
-    SV * version_sv = perl_get_sv("DB_File::db_version", GV_ADD|GV_ADDMULTI) ;
-    SV * ver_sv = perl_get_sv("DB_File::db_ver", GV_ADD|GV_ADDMULTI) ;
-#ifdef DB_VERSION_MAJOR
-    int Major, Minor, Patch ;
-
-    (void)db_version(&Major, &Minor, &Patch) ;
-
-    /* Check that the versions of db.h and libdb.a are the same */
-    if (Major != DB_VERSION_MAJOR || Minor != DB_VERSION_MINOR 
-               || Patch != DB_VERSION_PATCH)
-       croak("\nDB_File needs compatible versions of libdb & db.h\n\tyou have db.h version %d.%d.%d and libdb version %d.%d.%d\n",  
-               DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH, 
-               Major, Minor, Patch) ;
-    
-    /* check that libdb is recent enough  -- we need 2.3.4 or greater */
-    if (Major == 2 && (Minor < 3 || (Minor ==  3 && Patch < 4)))
-       croak("DB_File needs Berkeley DB 2.3.4 or greater, you have %d.%d.%d\n",
-                Major, Minor, Patch) ;
-#if PERL_VERSION > 3
-    sv_setpvf(version_sv, "%d.%d", Major, Minor) ;
-    sv_setpvf(ver_sv, "%d.%03d%03d", Major, Minor, Patch) ;
-#else
-    {
-        char buffer[40] ;
-        sprintf(buffer, "%d.%d", Major, Minor) ;
-        sv_setpv(version_sv, buffer) ; 
-        sprintf(buffer, "%d.%03d%03d", Major, Minor, Patch) ;
-        sv_setpv(ver_sv, buffer) ; 
-    }
-#endif
-#else
-    sv_setiv(version_sv, 1) ;
-    sv_setiv(ver_sv, 1) ;
-#endif
-
-}
-
 
 static int
 #ifdef CAN_PROTOTYPE
@@ -641,7 +629,7 @@ size_t size ;
 }
 
 
-#ifdef TRACE
+#if defined(TRACE) && defined(BERKELEY_DB_1_OR_2)
 
 static void
 #ifdef CAN_PROTOTYPE
@@ -724,8 +712,8 @@ DB_File db ;
     DBT                value ;
     int                RETVAL ;
 
-    DBT_flags(key) ;
-    DBT_flags(value) ;
+    DBT_clear(key) ;
+    DBT_clear(value) ;
     RETVAL = do_SEQ(db, key, value, R_LAST) ;
     if (RETVAL == 0)
         RETVAL = *(I32 *)key.data ;
@@ -760,6 +748,7 @@ I32      value ;
     return value ;
 }
 
+
 static DB_File
 #ifdef CAN_PROTOTYPE
 ParseOpenInfo(pTHX_ int isHASH, char *name, int flags, int mode, SV *sv)
@@ -772,6 +761,9 @@ int    mode ;
 SV *   sv ;
 #endif
 {
+
+#ifdef BERKELEY_DB_1_OR_2 /* Berkeley DB Version 1  or 2 */
+
     SV **      svp;
     HV *       action ;
     DB_File    RETVAL = (DB_File)safemalloc(sizeof(DB_File_type)) ;
@@ -1032,11 +1024,265 @@ SV *   sv ;
 
     }
 #else
+
+#if defined(DB_LIBRARY_COMPATIBILITY_API) && DB_VERSION_MAJOR > 2
+    RETVAL->dbp = __db185_open(name, flags, mode, RETVAL->type, openinfo) ; 
+#else    
     RETVAL->dbp = dbopen(name, flags, mode, RETVAL->type, openinfo) ; 
+#endif /* DB_LIBRARY_COMPATIBILITY_API */
+
 #endif
 
     return (RETVAL) ;
-}
+
+#else /* Berkeley DB Version > 2 */
+
+    SV **      svp;
+    HV *       action ;
+    DB_File    RETVAL = (DB_File)safemalloc(sizeof(DB_File_type)) ;
+    DB *       dbp ;
+    STRLEN     n_a;
+    int                status ;
+
+/* printf("In ParseOpenInfo name=[%s] flags=[%d] mode = [%d]\n", name, flags, mode) ;  */
+    Zero(RETVAL, 1, DB_File_type) ;
+
+    /* Default to HASH */
+#ifdef DBM_FILTERING
+    RETVAL->filtering = 0 ;
+    RETVAL->filter_fetch_key = RETVAL->filter_store_key = 
+    RETVAL->filter_fetch_value = RETVAL->filter_store_value =
+#endif /* DBM_FILTERING */
+    RETVAL->hash = RETVAL->compare = RETVAL->prefix = NULL ;
+    RETVAL->type = DB_HASH ;
+
+     /* DGH - Next line added to avoid SEGV on existing hash DB */
+    CurrentDB = RETVAL; 
+
+    /* fd for 1.86 hash in memory files doesn't return -1 like 1.85 */
+    RETVAL->in_memory = (name == NULL) ;
+
+    status = db_create(&RETVAL->dbp, NULL,0) ;
+    /* printf("db_create returned %d %s\n", status, db_strerror(status)) ; */
+    if (status) {
+       RETVAL->dbp = NULL ;
+        return (RETVAL) ;
+    }  
+    dbp = RETVAL->dbp ;
+
+    if (sv)
+    {
+        if (! SvROK(sv) )
+            croak ("type parameter is not a reference") ;
+
+        svp  = hv_fetch( (HV*)SvRV(sv), "GOT", 3, FALSE) ;
+        if (svp && SvOK(*svp))
+            action  = (HV*) SvRV(*svp) ;
+       else
+           croak("internal error") ;
+
+        if (sv_isa(sv, "DB_File::HASHINFO"))
+        {
+
+           if (!isHASH)
+               croak("DB_File can only tie an associative array to a DB_HASH database") ;
+
+            RETVAL->type = DB_HASH ;
+  
+            svp = hv_fetch(action, "hash", 4, FALSE); 
+
+            if (svp && SvOK(*svp))
+            {
+               (void)dbp->set_h_hash(dbp, hash_cb) ;
+               RETVAL->hash = newSVsv(*svp) ;
+            }
+
+           svp = hv_fetch(action, "ffactor", 7, FALSE);
+          if (svp)
+              (void)dbp->set_h_ffactor(dbp, SvIV(*svp)) ;
+         
+           svp = hv_fetch(action, "nelem", 5, FALSE);
+          if (svp)
+               (void)dbp->set_h_nelem(dbp, SvIV(*svp)) ;
+         
+           svp = hv_fetch(action, "bsize", 5, FALSE);
+          if (svp)
+               (void)dbp->set_pagesize(dbp, SvIV(*svp));
+           
+           svp = hv_fetch(action, "cachesize", 9, FALSE);
+          if (svp)
+               (void)dbp->set_cachesize(dbp, 0, SvIV(*svp), 0) ;
+         
+           svp = hv_fetch(action, "lorder", 6, FALSE);
+          if (svp)
+               (void)dbp->set_lorder(dbp, SvIV(*svp)) ;
+
+           PrintHash(info) ; 
+        }
+        else if (sv_isa(sv, "DB_File::BTREEINFO"))
+        {
+           if (!isHASH)
+               croak("DB_File can only tie an associative array to a DB_BTREE database");
+
+            RETVAL->type = DB_BTREE ;
+   
+            svp = hv_fetch(action, "compare", 7, FALSE);
+            if (svp && SvOK(*svp))
+            {
+                (void)dbp->set_bt_compare(dbp, btree_compare) ;
+               RETVAL->compare = newSVsv(*svp) ;
+            }
+
+            svp = hv_fetch(action, "prefix", 6, FALSE);
+            if (svp && SvOK(*svp))
+            {
+                (void)dbp->set_bt_prefix(dbp, btree_prefix) ;
+               RETVAL->prefix = newSVsv(*svp) ;
+            }
+
+           svp = hv_fetch(action, "flags", 5, FALSE);
+          if (svp)
+              (void)dbp->set_flags(dbp, SvIV(*svp)) ;
+   
+           svp = hv_fetch(action, "cachesize", 9, FALSE);
+          if (svp)
+               (void)dbp->set_cachesize(dbp, 0, SvIV(*svp), 0) ;
+         
+           svp = hv_fetch(action, "psize", 5, FALSE);
+          if (svp)
+               (void)dbp->set_pagesize(dbp, SvIV(*svp)) ;
+         
+           svp = hv_fetch(action, "lorder", 6, FALSE);
+          if (svp)
+               (void)dbp->set_lorder(dbp, SvIV(*svp)) ;
+
+            PrintBtree(info) ;
+         
+        }
+        else if (sv_isa(sv, "DB_File::RECNOINFO"))
+        {
+           int fixed = FALSE ;
+
+           if (isHASH)
+               croak("DB_File can only tie an array to a DB_RECNO database");
+
+            RETVAL->type = DB_RECNO ;
+
+           svp = hv_fetch(action, "flags", 5, FALSE);
+          if (svp) {
+               int flags = SvIV(*svp) ;
+               /* remove FIXDLEN, if present */
+               if (flags & DB_FIXEDLEN) {
+                   fixed = TRUE ;
+                   flags &= ~DB_FIXEDLEN ;
+               }
+          }
+
+           svp = hv_fetch(action, "cachesize", 9, FALSE);
+          if (svp) {
+               status = dbp->set_cachesize(dbp, 0, SvIV(*svp), 0) ;
+          }
+         
+           svp = hv_fetch(action, "psize", 5, FALSE);
+          if (svp) {
+               status = dbp->set_pagesize(dbp, SvIV(*svp)) ;
+           }
+         
+           svp = hv_fetch(action, "lorder", 6, FALSE);
+          if (svp) {
+               status = dbp->set_lorder(dbp, SvIV(*svp)) ;
+          }
+
+           svp = hv_fetch(action, "bval", 4, FALSE);
+            if (svp && SvOK(*svp))
+            {
+               int value ;
+                if (SvPOK(*svp))
+                   value = (int)*SvPV(*svp, n_a) ;
+               else
+                   value = SvIV(*svp) ;
+
+               if (fixed) {
+                   status = dbp->set_re_pad(dbp, value) ;
+               }
+               else {
+                   status = dbp->set_re_delim(dbp, value) ;
+               }
+
+            }
+
+          if (fixed) {
+               svp = hv_fetch(action, "reclen", 6, FALSE);
+              if (svp) {
+                  u_int32_t len =  (u_int32_t)SvIV(*svp) ;
+                   status = dbp->set_re_len(dbp, len) ;
+              }    
+          }
+         
+           if (name != NULL) {
+               status = dbp->set_re_source(dbp, name) ;
+               name = NULL ;
+           }   
+
+            svp = hv_fetch(action, "bfname", 6, FALSE); 
+            if (svp && SvOK(*svp)) {
+               char * ptr = SvPV(*svp,n_a) ;
+               name = (char*) n_a ? ptr : NULL ;
+           }
+           else
+               name = NULL ;
+         
+
+           status = dbp->set_flags(dbp, DB_RENUMBER) ;
+         
+               if (flags){
+                   (void)dbp->set_flags(dbp, flags) ;
+               }
+            PrintRecno(info) ;
+        }
+        else
+            croak("type is not of type DB_File::HASHINFO, DB_File::BTREEINFO or DB_File::RECNOINFO");
+    }
+
+    {
+        int            Flags = 0 ;
+        int            status ;
+
+        /* Map 1.x flags to 3.x flags */
+        if ((flags & O_CREAT) == O_CREAT)
+            Flags |= DB_CREATE ;
+
+#if O_RDONLY == 0
+        if (flags == O_RDONLY)
+#else
+        if ((flags & O_RDONLY) == O_RDONLY && (flags & O_RDWR) != O_RDWR)
+#endif
+            Flags |= DB_RDONLY ;
+
+#ifdef O_TRUNC
+        if ((flags & O_TRUNC) == O_TRUNC)
+            Flags |= DB_TRUNCATE ;
+#endif
+
+        status = RETVAL->dbp->open(RETVAL->dbp, name, NULL, RETVAL->type, 
+                               Flags, mode) ; 
+       /* printf("open returned %d %s\n", status, db_strerror(status)) ; */
+
+        if (status == 0)
+            status = (RETVAL->dbp->cursor)(RETVAL->dbp, NULL, &RETVAL->cursor,
+                       0) ;
+       /* printf("cursor returned %d %s\n", status, db_strerror(status)) ; */
+
+        if (status)
+           RETVAL->dbp = NULL ;
+
+    }
+
+    return (RETVAL) ;
+
+#endif /* Berkeley DB Version > 2 */
+
+} /* ParseOpenInfo */
 
 
 static double 
@@ -1279,11 +1525,11 @@ MODULE = DB_File        PACKAGE = DB_File       PREFIX = db_
 
 BOOT:
   {
-    GetVersionInfo(aTHX) ;
+    __getBerkeleyDBInfo() ;
  
+    DBT_clear(empty) ; 
     empty.data = &zero ;
     empty.size =  sizeof(recno_t) ;
-    DBT_flags(empty) ; 
   }
 
 double
@@ -1363,7 +1609,7 @@ db_EXISTS(db, key)
        {
           DBT          value ;
        
-         DBT_flags(value) ; 
+         DBT_clear(value) ; 
          CurrentDB = db ;
          RETVAL = (((db->dbp)->get)(db->dbp, TXN &key, &value, 0) == 0) ;
        }
@@ -1379,7 +1625,7 @@ db_FETCH(db, key, flags=0)
        {
             DBT                value ;
 
-           DBT_flags(value) ; 
+           DBT_clear(value) ; 
            CurrentDB = db ;
            /* RETVAL = ((db->dbp)->get)(db->dbp, TXN &key, &value, flags) ; */
            RETVAL = db_get(db, key, value, flags) ;
@@ -1405,8 +1651,8 @@ db_FIRSTKEY(db)
            DBTKEY      key ;
            DBT         value ;
 
-           DBT_flags(key) ; 
-           DBT_flags(value) ; 
+           DBT_clear(key) ; 
+           DBT_clear(value) ; 
            CurrentDB = db ;
            RETVAL = do_SEQ(db, key, value, R_FIRST) ;
            ST(0) = sv_newmortal();
@@ -1421,7 +1667,7 @@ db_NEXTKEY(db, key)
        {
            DBT         value ;
 
-           DBT_flags(value) ; 
+           DBT_clear(value) ; 
            CurrentDB = db ;
            RETVAL = do_SEQ(db, key, value, R_NEXT) ;
            ST(0) = sv_newmortal();
@@ -1445,8 +1691,8 @@ unshift(db, ...)
            DB *        Db = db->dbp ;
            STRLEN      n_a;
 
-           DBT_flags(key) ; 
-           DBT_flags(value) ; 
+           DBT_clear(key) ; 
+           DBT_clear(value) ; 
            CurrentDB = db ;
 #ifdef DB_VERSION_MAJOR
            /* get the first value */
@@ -1483,8 +1729,8 @@ pop(db)
            DBTKEY      key ;
            DBT         value ;
 
-           DBT_flags(key) ; 
-           DBT_flags(value) ; 
+           DBT_clear(key) ; 
+           DBT_clear(value) ; 
            CurrentDB = db ;
 
            /* First get the final value */
@@ -1510,8 +1756,8 @@ shift(db)
            DBT         value ;
            DBTKEY      key ;
 
-           DBT_flags(key) ; 
-           DBT_flags(value) ; 
+           DBT_clear(key) ; 
+           DBT_clear(value) ; 
            CurrentDB = db ;
            /* get the first value */
            RETVAL = do_SEQ(db, key, value, R_FIRST) ;   
@@ -1539,45 +1785,37 @@ push(db, ...)
            DB *        Db = db->dbp ;
            int         i ;
            STRLEN      n_a;
+           int         keyval ;
 
            DBT_flags(key) ; 
            DBT_flags(value) ; 
            CurrentDB = db ;
-#ifdef DB_VERSION_MAJOR
-               RETVAL = do_SEQ(db, key, value, DB_LAST) ;
-               RETVAL = 0 ;
-               key = empty ;
-               for (i = 1 ; i < items  ; ++i)
-               {
-                   value.data = SvPV(ST(i), n_a) ;
-                   value.size = n_a ;
-                   RETVAL = (Db->put)(Db, NULL, &key, &value, DB_APPEND) ;
-                   if (RETVAL != 0)
-                       break;
-               }
-#else          
-           
            /* Set the Cursor to the Last element */
            RETVAL = do_SEQ(db, key, value, R_LAST) ;
+#ifndef DB_VERSION_MAJOR                                   
            if (RETVAL >= 0)
+#endif     
            {
-               if (RETVAL == 1)
-                   key = empty ;
-               for (i = items - 1 ; i > 0 ; --i)
+               if (RETVAL == 0)
+                   keyval = *(int*)key.data ;
+               else
+                   keyval = 0 ;
+               for (i = 1 ; i < items ; ++i)
                {
                    value.data = SvPV(ST(i), n_a) ;
                    value.size = n_a ;
-                   RETVAL = (Db->put)(Db, &key, &value, R_IAFTER) ;
+                   ++ keyval ;
+                   key.data = &keyval ;
+                   key.size = sizeof(int) ;
+                   RETVAL = (Db->put)(Db, TXN &key, &value, 0) ;
                    if (RETVAL != 0)
                        break;
                }
            }
-#endif
        }
        OUTPUT:
            RETVAL
 
-
 I32
 length(db)
        DB_File         db
@@ -1619,7 +1857,7 @@ db_get(db, key, value, flags=0)
        u_int           flags
        CODE:
          CurrentDB = db ;
-         DBT_flags(value) ; 
+         DBT_clear(value) ; 
          RETVAL = db_get(db, key, value, flags) ;
 #ifdef DB_VERSION_MAJOR
          if (RETVAL > 0)
@@ -1694,7 +1932,7 @@ db_seq(db, key, value, flags)
        u_int           flags
        CODE:
          CurrentDB = db ;
-         DBT_flags(value) ; 
+         DBT_clear(value) ; 
          RETVAL = db_seq(db, key, value, flags);
 #ifdef DB_VERSION_MAJOR
          if (RETVAL > 0)
index 1a13e0b..a247924 100644 (file)
@@ -14,7 +14,15 @@ WriteMakefile(
         MAN3PODS        => {},         # Pods will be built by installman.
        #INC            => '-I/usr/local/include',
        VERSION_FROM    => 'DB_File.pm',
+       OBJECT          => 'version$(OBJ_EXT) DB_File$(OBJ_EXT)',
        XSPROTOARG      => '-noprototypes',
        DEFINE          => "$OS2",
        );
 
+sub MY::postamble {
+      '
+version$(OBJ_EXT):     version.c
+
+' ;
+}
+
index 24a7944..701ac61 100644 (file)
@@ -4,8 +4,8 @@
 #                        a database file
 #
 # Author:      Paul Marquess  <Paul.Marquess@btinternet.com>
-# Version:     1.01 
-# Date         16th April 1998
+# Version:     1.02 
+# Date         20th August 1999
 #
 #     Copyright (c) 1998 Paul Marquess. All rights reserved.
 #     This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@ use strict ;
 my %Data =
        (
        0x053162 =>     {
-                         Type  => "Btree",
+                         Type     => "Btree",
                          Versions => 
                                {
                                  1     => "Unknown (older than 1.71)",
@@ -27,18 +27,27 @@ my %Data =
                                  3     => "1.71 -> 1.85, 1.86",
                                  4     => "Unknown",
                                  5     => "2.0.0 -> 2.3.0",
-                                 6     => "2.3.1 or greater",
+                                 6     => "2.3.1 -> 2.7.7",
+                                 7     => "3.0.0 or greater",
                                }
                        },
        0x061561 =>     {
-                         Type => "Hash",
+                         Type     => "Hash",
                          Versions =>
                                {
                                  1     => "Unknown (older than 1.71)",
                                  2     => "1.71 -> 1.85",
                                  3     => "1.86",
                                  4     => "2.0.0 -> 2.1.0",
-                                 5     => "2.2.6 or greater",
+                                 5     => "2.2.6 -> 2.7.7",
+                                 6     => "3.0.0 or greater",
+                               }
+                       },
+       0x042253 =>     {
+                         Type     => "Queue",
+                         Versions =>
+                               {
+                                 1     => "3.0.0 or greater",
                                }
                        },
        ) ;
index a614cc4..41a24f4 100644 (file)
@@ -1,8 +1,8 @@
 # typemap for Perl 5 interface to Berkeley 
 #
 # written by Paul Marquess <Paul.Marquess@btinternet.com>
-# last modified 6th June 1999
-# version 1.67
+# last modified 7th September 1999
+# version 1.71
 #
 #################################### DB SECTION
 #
@@ -16,22 +16,21 @@ DBTKEY                      T_dbtkeydatum
 INPUT
 T_dbtkeydatum
        ckFilter($arg, filter_store_key, \"filter_store_key\");
+       DBT_clear($var) ;
        if (db->type != DB_RECNO) {
            $var.data = SvPV($arg, PL_na);
            $var.size = (int)PL_na;
-           DBT_flags($var);
        }
        else {
            Value =  GetRecnoKey(aTHX_ db, SvIV($arg)) ; 
            $var.data = & Value; 
            $var.size = (int)sizeof(recno_t);
-           DBT_flags($var);
        }
 T_dbtdatum
        ckFilter($arg, filter_store_value, \"filter_store_value\");
+       DBT_clear($var) ;
        $var.data = SvPV($arg, PL_na);
        $var.size = (int)PL_na;
-       DBT_flags($var);
 
 
 OUTPUT
diff --git a/ext/DB_File/version.c b/ext/DB_File/version.c
new file mode 100644 (file)
index 0000000..23c96a6
--- /dev/null
@@ -0,0 +1,70 @@
+/* 
+
+ version.c -- Perl 5 interface to Berkeley DB 
+
+ written by Paul Marquess <Paul.Marquess@btinternet.com>
+ last modified 7th September 1999
+ version 1.71
+
+ All comments/suggestions/problems are welcome
+
+     Copyright (c) 1995-9 Paul Marquess. All rights reserved.
+     This program is free software; you can redistribute it and/or
+     modify it under the same terms as Perl itself.
+
+ Changes:
+        1.71 -  Support for Berkeley DB version 3.
+               Support for Berkeley DB 2/3's backward compatability mode.
+
+*/
+
+#include "EXTERN.h"  
+#include "perl.h"
+#include "XSUB.h"
+
+#include <db.h>
+
+void
+__getBerkeleyDBInfo()
+{
+    SV * version_sv = perl_get_sv("DB_File::db_version", GV_ADD|GV_ADDMULTI) ;
+    SV * ver_sv = perl_get_sv("DB_File::db_ver", GV_ADD|GV_ADDMULTI) ;
+    SV * compat_sv = perl_get_sv("DB_File::db_185_compat", GV_ADD|GV_ADDMULTI) ;
+
+#ifdef DB_VERSION_MAJOR
+    int Major, Minor, Patch ;
+
+    (void)db_version(&Major, &Minor, &Patch) ;
+
+    /* Check that the versions of db.h and libdb.a are the same */
+    if (Major != DB_VERSION_MAJOR || Minor != DB_VERSION_MINOR 
+               || Patch != DB_VERSION_PATCH)
+       croak("\nDB_File needs compatible versions of libdb & db.h\n\tyou have db.h version %d.%d.%d and libdb version %d.%d.%d\n",  
+               DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH, 
+               Major, Minor, Patch) ;
+    
+    /* check that libdb is recent enough  -- we need 2.3.4 or greater */
+    if (Major == 2 && (Minor < 3 || (Minor ==  3 && Patch < 4)))
+       croak("DB_File needs Berkeley DB 2.3.4 or greater, you have %d.%d.%d\n",
+                Major, Minor, Patch) ;
+    {
+        char buffer[40] ;
+        sprintf(buffer, "%d.%d", Major, Minor) ;
+        sv_setpv(version_sv, buffer) ; 
+        sprintf(buffer, "%d.%03d%03d", Major, Minor, Patch) ;
+        sv_setpv(ver_sv, buffer) ; 
+    }
+#else /* ! DB_VERSION_MAJOR */
+    sv_setiv(version_sv, 1) ;
+    sv_setiv(ver_sv, 1) ;
+#endif /* ! DB_VERSION_MAJOR */
+
+#ifdef COMPAT185
+    sv_setiv(compat_sv, 1) ;
+#else /* ! COMPAT185 */
+    sv_setiv(compat_sv, 0) ;
+#endif /* ! COMPAT185 */
+
+}
index 9a96eda..161aba9 100644 (file)
@@ -6,6 +6,21 @@ HISTORY - public release history for Data::Dumper
 
 =over 8
 
+=item 2.11  (unreleased)
+
+C<0> is now dumped as such, not as C<'0'>.
+
+qr// objects are now dumped correctly (provided a post-5.005_58)
+overload.pm exists).
+
+Implemented $Data::Dumper::Maxdepth, which was on the Todo list.
+Thanks to John Nolan <jpnolan@Op.Net>.
+
+=item 2.101 (30 Apr 1999)
+
+Minor release to sync with version in 5.005_03.  Fixes dump of
+dummy coderefs.
+
 =item 2.10  (31 Oct 1998)
 
 Bugfixes for dumping related undef values, globs, and better double
index 3828d7b..c37e6b5 100644 (file)
@@ -13,7 +13,7 @@ $VERSION = $VERSION = '2.101';
 
 #$| = 1;
 
-require 5.004;
+require 5.004_02;
 require Exporter;
 require DynaLoader;
 require overload;
@@ -39,7 +39,7 @@ $Deepcopy = 0 unless defined $Deepcopy;
 $Quotekeys = 1 unless defined $Quotekeys;
 $Bless = "bless" unless defined $Bless;
 #$Expdepth = 0 unless defined $Expdepth;
-#$Maxdepth = 0 unless defined $Maxdepth;
+$Maxdepth = 0 unless defined $Maxdepth;
 
 #
 # expects an arrayref of values to be dumped.
@@ -74,7 +74,7 @@ sub new {
              quotekeys => $Quotekeys,  # quote hash keys
              'bless'   => $Bless,      # keyword to use for "bless"
 #           expdepth   => $Expdepth,   # cutoff depth for explicit dumping
-#           maxdepth   => $Maxdepth,   # depth beyond which we give up
+            maxdepth   => $Maxdepth,   # depth beyond which we give up
           };
 
   if ($Indent > 0) {
@@ -214,14 +214,13 @@ sub _dump {
   if ($type) {
 
     # prep it, if it looks like an object
-    if ($type =~ /[a-z_:]/) {
-      my $freezer = $s->{freezer};
-      $val->$freezer() if $freezer && UNIVERSAL::can($val, $freezer);
+    if (my $freezer = $s->{freezer}) {
+      $val->$freezer() if UNIVERSAL::can($val, $freezer);
     }
 
     ($realpack, $realtype, $id) =
       (overload::StrVal($val) =~ /^(?:(.*)\=)?([^=]*)\(([^\(]*)\)$/);
-    
+
     # if it has a name, we need to either look it up, or keep a tab
     # on it so we know when we hit it later
     if (defined($name) and length($name)) {
@@ -259,17 +258,28 @@ sub _dump {
       }
     }
 
-    if ($realpack) {
-      if ($realpack eq 'Regexp') {
+    if ($realpack and $realpack eq 'Regexp') {
        $out = "$val";
        $out =~ s,/,\\/,g;
        return "qr/$out/";
-      }
-      else {          # we have a blessed ref
-       $out = $s->{'bless'} . '( ';
-       $blesspad = $s->{apad};
-       $s->{apad} .= '       ' if ($s->{indent} >= 2);
-      }
+    }
+
+    # If purity is not set and maxdepth is set, then check depth: 
+    # if we have reached maximum depth, return the string
+    # representation of the thing we are currently examining
+    # at this depth (i.e., 'Foo=ARRAY(0xdeadbeef)'). 
+    if (!$s->{purity}
+       and $s->{maxdepth} > 0
+       and $s->{level} >= $s->{maxdepth})
+    {
+      return qq['$val'];
+    }
+
+    # we have a blessed ref
+    if ($realpack) {
+      $out = $s->{'bless'} . '( ';
+      $blesspad = $s->{apad};
+      $s->{apad} .= '       ' if ($s->{indent} >= 2);
     }
 
     $s->{level}++;
@@ -519,6 +529,12 @@ sub Bless {
   defined($v) ? (($s->{'bless'} = $v), return $s) : $s->{'bless'};
 }
 
+sub Maxdepth {
+  my($s, $v) = @_;
+  defined($v) ? (($s->{'maxdepth'} = $v), return $s) : $s->{'maxdepth'};
+}
+
+
 # used by qquote below
 my %esc = (  
     "\a" => "\\a",
@@ -822,6 +838,14 @@ builtin operator used to create objects.  A function with the specified
 name should exist, and should accept the same arguments as the builtin.
 Default is C<bless>.
 
+=item $Data::Dumper::Maxdepth  I<or>  $I<OBJ>->Maxdepth(I<[NEWVAL]>)
+
+Can be set to a positive integer that specifies the depth beyond which
+which we don't venture into a structure.  Has no effect when
+C<Data::Dumper::Purity> is set.  (Useful in debugger when we often don't
+want to see more than enough).  Default is 0, which means there is 
+no maximum depth. 
+
 =back
 
 =head2 Exports
@@ -904,6 +928,21 @@ distribution for more examples.)
     $Data::Dumper::Purity = 0;         # avoid cross-refs
     print Data::Dumper->Dump([$b, $a], [qw(*b a)]);
     
+    ########
+    # deep structures
+    ########
+    
+    $a = "pearl";
+    $b = [ $a ];
+    $c = { 'b' => $b };
+    $d = [ $c ];
+    $e = { 'd' => $d };
+    $f = { 'e' => $e };
+    print Data::Dumper->Dump([$f], [qw(f)]);
+
+    $Data::Dumper::Maxdepth = 3;       # no deeper than 3 refs down
+    print Data::Dumper->Dump([$f], [qw(f)]);
+
     
     ########
     # object-oriented usage
@@ -999,7 +1038,7 @@ modify it under the same terms as Perl itself.
 
 =head1 VERSION
 
-Version 2.10    (31 Oct 1998)
+Version 2.11   (unreleased)
 
 =head1 SEE ALSO
 
index 3cbc7c5..054e0a9 100644 (file)
@@ -27,7 +27,8 @@ static I32 DD_dump (pTHX_ SV *val, char *name, STRLEN namelen, SV *retval,
                    HV *seenhv, AV *postav, I32 *levelp, I32 indent,
                    SV *pad, SV *xpad, SV *apad, SV *sep,
                    SV *freezer, SV *toaster,
-                   I32 purity, I32 deepcopy, I32 quotekeys, SV *bless);
+                   I32 purity, I32 deepcopy, I32 quotekeys, SV *bless,
+                   I32 maxdepth);
 
 /* does a string need to be protected? */
 static I32
@@ -130,7 +131,7 @@ static I32
 DD_dump(pTHX_ SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv,
        AV *postav, I32 *levelp, I32 indent, SV *pad, SV *xpad,
        SV *apad, SV *sep, SV *freezer, SV *toaster, I32 purity,
-       I32 deepcopy, I32 quotekeys, SV *bless)
+       I32 deepcopy, I32 quotekeys, SV *bless, I32 maxdepth)
 {
     char tmpbuf[128];
     U32 i;
@@ -253,33 +254,46 @@ DD_dump(pTHX_ SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv,
            }
        }
 
-       if (realpack) {
-           if (*realpack == 'R' && strEQ(realpack, "Regexp")) {
-               STRLEN rlen;
-               char *rval = SvPV(val, rlen);
-               char *slash = strchr(rval, '/');
-               sv_catpvn(retval, "qr/", 3);
-               while (slash) {
-                   sv_catpvn(retval, rval, slash-rval);
-                   sv_catpvn(retval, "\\/", 2);
-                   rlen -= slash-rval+1;
-                   rval = slash+1;
-                   slash = strchr(rval, '/');
-               }
-               sv_catpvn(retval, rval, rlen);
-               sv_catpvn(retval, "/", 1);
-               return 1;
+       if (realpack && *realpack == 'R' && strEQ(realpack, "Regexp")) {
+           STRLEN rlen;
+           char *rval = SvPV(val, rlen);
+           char *slash = strchr(rval, '/');
+           sv_catpvn(retval, "qr/", 3);
+           while (slash) {
+               sv_catpvn(retval, rval, slash-rval);
+               sv_catpvn(retval, "\\/", 2);
+               rlen -= slash-rval+1;
+               rval = slash+1;
+               slash = strchr(rval, '/');
            }
-           else {                              /* we have a blessed ref */
-               STRLEN blesslen;
-               char *blessstr = SvPV(bless, blesslen);
-               sv_catpvn(retval, blessstr, blesslen);
-               sv_catpvn(retval, "( ", 2);
-               if (indent >= 2) {
-                   blesspad = apad;
-                   apad = newSVsv(apad);
-                   sv_x(aTHX_ apad, " ", 1, blesslen+2);
-               }
+           sv_catpvn(retval, rval, rlen);
+           sv_catpvn(retval, "/", 1);
+           return 1;
+       }
+
+       /* If purity is not set and maxdepth is set, then check depth:
+        * if we have reached maximum depth, return the string
+        * representation of the thing we are currently examining
+        * at this depth (i.e., 'Foo=ARRAY(0xdeadbeef)'). 
+        */
+       if (!purity && maxdepth > 0 && *levelp >= maxdepth) {
+           STRLEN vallen;
+           char *valstr = SvPV(val,vallen);
+           sv_catpvn(retval, "'", 1);
+           sv_catpvn(retval, valstr, vallen);
+           sv_catpvn(retval, "'", 1);
+           return 1;
+       }
+
+       if (realpack) {                         /* we have a blessed ref */
+           STRLEN blesslen;
+           char *blessstr = SvPV(bless, blesslen);
+           sv_catpvn(retval, blessstr, blesslen);
+           sv_catpvn(retval, "( ", 2);
+           if (indent >= 2) {
+               blesspad = apad;
+               apad = newSVsv(apad);
+               sv_x(aTHX_ apad, " ", 1, blesslen+2);
            }
        }
 
@@ -294,14 +308,16 @@ DD_dump(pTHX_ SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv,
                sv_catpvn(retval, "do{\\(my $o = ", 13);
                DD_dump(aTHX_ ival, SvPVX(namesv), SvCUR(namesv), retval, seenhv,
                        postav, levelp, indent, pad, xpad, apad, sep,
-                       freezer, toaster, purity, deepcopy, quotekeys, bless);
+                       freezer, toaster, purity, deepcopy, quotekeys, bless,
+                       maxdepth);
                sv_catpvn(retval, ")}", 2);
            }                                                /* plain */
            else {
                sv_catpvn(retval, "\\", 1);
                DD_dump(aTHX_ ival, SvPVX(namesv), SvCUR(namesv), retval, seenhv,
                        postav, levelp, indent, pad, xpad, apad, sep,
-                       freezer, toaster, purity, deepcopy, quotekeys, bless);
+                       freezer, toaster, purity, deepcopy, quotekeys, bless,
+                       maxdepth);
            }
            SvREFCNT_dec(namesv);
        }
@@ -312,7 +328,8 @@ DD_dump(pTHX_ SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv,
            sv_catpvn(retval, "\\", 1);
            DD_dump(aTHX_ ival, SvPVX(namesv), SvCUR(namesv), retval, seenhv,
                    postav, levelp,     indent, pad, xpad, apad, sep,
-                   freezer, toaster, purity, deepcopy, quotekeys, bless);
+                   freezer, toaster, purity, deepcopy, quotekeys, bless,
+                   maxdepth);
            SvREFCNT_dec(namesv);
        }
        else if (realtype == SVt_PVAV) {
@@ -380,7 +397,8 @@ DD_dump(pTHX_ SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv,
                sv_catsv(retval, ipad);
                DD_dump(aTHX_ elem, iname, ilen, retval, seenhv, postav,
                        levelp, indent, pad, xpad, apad, sep,
-                       freezer, toaster, purity, deepcopy, quotekeys, bless);
+                       freezer, toaster, purity, deepcopy, quotekeys, bless,
+                       maxdepth);
                if (ix < ixmax)
                    sv_catpvn(retval, ",", 1);
            }
@@ -486,7 +504,8 @@ DD_dump(pTHX_ SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv,
 
                DD_dump(aTHX_ hval, SvPVX(sname), SvCUR(sname), retval, seenhv,
                        postav, levelp, indent, pad, xpad, newapad, sep,
-                       freezer, toaster, purity, deepcopy, quotekeys, bless);
+                       freezer, toaster, purity, deepcopy, quotekeys, bless,
+                       maxdepth);
                SvREFCNT_dec(sname);
                Safefree(nkey);
                if (indent >= 2)
@@ -626,7 +645,7 @@ DD_dump(pTHX_ SV *val, char *name, STRLEN namelen, SV *retval, HV *seenhv,
                        DD_dump(aTHX_ e, SvPVX(nname), SvCUR(nname), postentry,
                                seenhv, postav, &nlevel, indent, pad, xpad,
                                newapad, sep, freezer, toaster, purity,
-                               deepcopy, quotekeys, bless);
+                               deepcopy, quotekeys, bless, maxdepth);
                        SvREFCNT_dec(e);
                    }
                }
@@ -686,7 +705,7 @@ Data_Dumper_Dumpxs(href, ...)
            SV **svp;
            SV *val, *name, *pad, *xpad, *apad, *sep, *tmp, *varname;
            SV *freezer, *toaster, *bless;
-           I32 purity, deepcopy, quotekeys;
+           I32 purity, deepcopy, quotekeys, maxdepth;
            char tmpbuf[1024];
            I32 gimme = GIMME;
 
@@ -769,6 +788,8 @@ Data_Dumper_Dumpxs(href, ...)
                    quotekeys = SvTRUE(*svp);
                if ((svp = hv_fetch(hv, "bless", 5, FALSE)))
                    bless = *svp;
+               if ((svp = hv_fetch(hv, "maxdepth", 8, FALSE)))
+                   maxdepth = SvIV(*svp);
                postav = newAV();
 
                if (todumpav)
@@ -834,7 +855,7 @@ Data_Dumper_Dumpxs(href, ...)
                    DD_dump(aTHX_ val, SvPVX(name), SvCUR(name), valstr, seenhv,
                            postav, &level, indent, pad, xpad, newapad, sep,
                            freezer, toaster, purity, deepcopy, quotekeys,
-                           bless);
+                           bless, maxdepth);
                    
                    if (indent >= 2)
                        SvREFCNT_dec(newapad);
index 7dcd40b..bd76e65 100644 (file)
@@ -8,12 +8,6 @@ The following functionality will be supported in the next few releases.
 
 =over 4
 
-=item $Data::Dumper::Maxdepth I<or> $I<OBJ>->Maxdepth(I<NEWVAL>)
-
-Depth beyond which we don't venture into a structure.  Has no effect when
-C<Data::Dumper::Purity> is set.  (useful in debugger when we often don't
-want to see more than enough).
-
 =item  $Data::Dumper::Expdepth I<or> $I<OBJ>->Expdepth(I<NEWVAL>)
 
 Dump contents explicitly up to a certain depth and then use names for
index e5b7788..69f0b89 100644 (file)
@@ -292,7 +292,7 @@ prof_mark( opcode ptype )
            static U32 lastid;
            CV *cv;
 
-           cv = (CV*)SvIVX(Sub);
+           cv = INT2PTR(CV*,SvIVX(Sub));
            svp = hv_fetch(cv_hash, (char*)&cv, sizeof(CV*), TRUE);
            if (!SvOK(*svp)) {
                GV *gv = CvGV(cv);
@@ -568,7 +568,7 @@ XS(XS_DB_sub)
         PUSHMARK( ORIGMARK );
 
 #ifdef G_NODEBUG
-        perl_call_sv( (SV*)SvIV(Sub), GIMME | G_NODEBUG);
+        perl_call_sv( INT2PTR(SV*,SvIV(Sub)), GIMME | G_NODEBUG);
 #else
         curstash = debstash;    /* To disable debugging of perl_call_sv */
 #ifdef PERLDBf_NONAME
index 877b285..c00ded2 100644 (file)
@@ -590,7 +590,7 @@ dl_load_file(filename, flags=0)
        if (RETVAL == NULL)
            SaveError(aTHX_ "%s",dlerror()) ;
        else
-           sv_setiv( ST(0), (IV)RETVAL);
+           sv_setiv( ST(0), PTR2IV(RETVAL));
 
 
 void *
@@ -606,7 +606,7 @@ dl_find_symbol(libhandle, symbolname)
        if (RETVAL == NULL)
            SaveError(aTHX_ "%s",dlerror()) ;
        else
-           sv_setiv( ST(0), (IV)RETVAL);
+           sv_setiv( ST(0), PTR2IV(RETVAL));
 
 
 void
index 1bd16a6..4245910 100644 (file)
@@ -54,7 +54,7 @@ dl_load_file(filename, flags=0)
        PerlIO_printf(PerlIO_stderr(), "load_add_on(%s) : %d (%s)\n", path, bogo, strerror(bogo));
     } else {
        RETVAL = (void *) bogo;
-       sv_setiv( ST(0), (IV)RETVAL);
+       sv_setiv( ST(0), PTR2IV(RETVAL));
     }
     free(path);
 }
@@ -83,7 +83,7 @@ dl_find_symbol(libhandle, symbolname)
        SaveError(aTHX_ "%s", strerror(retcode)) ;
        PerlIO_printf(PerlIO_stderr(), "retcode = %p (%s)\n", retcode, strerror(retcode));
     } else
-       sv_setiv( ST(0), (IV)RETVAL);
+       sv_setiv( ST(0), PTR2IV(RETVAL));
 
 
 void
index 0054afa..60a605f 100644 (file)
@@ -95,7 +95,7 @@ dl_load_file(filename,flags=0)
     if (RETVAL == NULL){
        SaveError(aTHX_ "%d",GetLastError()) ;
     } else {
-       sv_setiv( ST(0), (IV)RETVAL);
+       sv_setiv( ST(0), PTR2IV(RETVAL));
     }
    }
        
@@ -114,7 +114,7 @@ dl_find_symbol(libhandle, symbolname)
     if (RETVAL == NULL)
        SaveError(aTHX_ "%d",GetLastError()) ;
     else
-       sv_setiv( ST(0), (IV)RETVAL);
+       sv_setiv( ST(0), PTR2IV(RETVAL));
 
 
 void
index 1ddc443..d427efa 100644 (file)
@@ -118,7 +118,7 @@ dl_load_file(filename, flags=0)
 haverror:
     ST(0) = sv_newmortal() ;
     if (dlderr == 0)
-       sv_setiv(ST(0), (IV)RETVAL);
+       sv_setiv(ST(0), PTR2IV(RETVAL));
 
 
 void *
@@ -135,7 +135,7 @@ dl_find_symbol(libhandle, symbolname)
     if (RETVAL == NULL)
        SaveError(aTHX_ "dl_find_symbol: Unable to find '%s' symbol", symbolname) ;
     else
-       sv_setiv(ST(0), (IV)RETVAL);
+       sv_setiv(ST(0), PTR2IV(RETVAL));
 
 
 void
index a317208..641db33 100644 (file)
@@ -166,7 +166,7 @@ dl_load_file(filename, flags=0)
     if (RETVAL == NULL)
        SaveError(aTHX_ "%s",dlerror()) ;
     else
-       sv_setiv( ST(0), (IV)RETVAL);
+       sv_setiv( ST(0), PTR2IV(RETVAL));
 
 
 void *
@@ -187,7 +187,7 @@ dl_find_symbol(libhandle, symbolname)
     if (RETVAL == NULL)
        SaveError(aTHX_ "%s",dlerror()) ;
     else
-       sv_setiv( ST(0), (IV)RETVAL);
+       sv_setiv( ST(0), PTR2IV(RETVAL));
 
 
 void
index ce45459..71896b3 100644 (file)
@@ -92,7 +92,7 @@ end:
     if (obj == NULL)
         SaveError(aTHX_ "%s",Strerror(errno));
     else
-        sv_setiv( ST(0), (IV)obj);
+        sv_setiv( ST(0), PTR2IV(obj));
 
 
 void *
@@ -124,7 +124,7 @@ dl_find_symbol(libhandle, symbolname)
     if (status == -1) {
        SaveError(aTHX_ "%s",(errno) ? Strerror(errno) : "Symbol not found") ;
     } else {
-       sv_setiv( ST(0), (IV)symaddr);
+       sv_setiv( ST(0), PTR2IV(symaddr));
     }
 
 
index 4c5d176..65c0297 100644 (file)
@@ -74,7 +74,7 @@ flags));
     if (obj == NULL)
         SaveError(aTHX_"%s",Strerror(errno));
     else
-        sv_setiv( ST(0), (IV)obj);
+        sv_setiv( ST(0), PTR2IV(obj));
 
 void *
 dl_find_symbol(libhandle, symbolname)
@@ -100,7 +100,7 @@ dl_find_symbol(libhandle, symbolname)
     if (status != 0) {
         SaveError(aTHX_"%s",(errno) ? Strerror(errno) : "Symbol not found") ;
     } else {
-        sv_setiv( ST(0), (IV)symaddr);
+        sv_setiv( ST(0), PTR2IV(symaddr));
     }
 
 void
index ec01d60..6c8009b 100644 (file)
@@ -252,7 +252,7 @@ dl_load_file(filename, flags=0)
     if (RETVAL == NULL)
        SaveError(aTHX_ "%s",dlerror()) ;
     else
-       sv_setiv( ST(0), (IV)RETVAL);
+       sv_setiv( ST(0), PTR2IV(RETVAL));
 
 
 void *
@@ -273,7 +273,7 @@ dl_find_symbol(libhandle, symbolname)
     if (RETVAL == NULL)
        SaveError(aTHX_ "%s",dlerror()) ;
     else
-       sv_setiv( ST(0), (IV)RETVAL);
+       sv_setiv( ST(0), PTR2IV(RETVAL));
 
 
 void
index 223d7f6..d75b838 100644 (file)
@@ -166,7 +166,7 @@ dl_load_file(filename, flags=0)
     if (RETVAL == NULL)
        SaveError(aTHX_ "%s",dlerror()) ;
     else
-       sv_setiv( ST(0), (IV)RETVAL);
+       sv_setiv( ST(0), PTR2IV(RETVAL));
 
 
 void *
@@ -185,7 +185,7 @@ dl_find_symbol(libhandle, symbolname)
     if (RETVAL == NULL)
        SaveError(aTHX_ "%s",dlerror()) ;
     else
-       sv_setiv( ST(0), (IV)RETVAL);
+       sv_setiv( ST(0), PTR2IV(RETVAL));
 
 
 void
index ff1b60b..400793f 100644 (file)
@@ -123,7 +123,7 @@ dl_load_file(filename, flags=0)
     if (RETVAL == NULL)
        SaveError(aTHX_ "%s",dlerror()) ;
     else
-       sv_setiv( ST(0), (IV)RETVAL);
+       sv_setiv( ST(0), PTR2IV(RETVAL));
  
  
 void *
@@ -141,7 +141,7 @@ dl_find_symbol(libhandle, symbolname)
     if (RETVAL == NULL)
        SaveError(aTHX_ "%s",dlerror()) ;
     else
-       sv_setiv( ST(0), (IV)RETVAL);
+       sv_setiv( ST(0), PTR2IV(RETVAL));
  
  
 void
index 1024c41..409d586 100644 (file)
@@ -301,7 +301,7 @@ dl_load_file(filespec, flags)
       ST(0) = &PL_sv_undef;
     }
     else {
-      ST(0) = sv_2mortal(newSViv((IV) dlptr));
+      ST(0) = sv_2mortal(newSViv(PTR2IV(dlptr)));
     }
 
 
@@ -328,7 +328,7 @@ dl_find_symbol(librefptr,symname)
       /* error message already saved by findsym_handler */
       ST(0) = &PL_sv_undef;
     }
-    else ST(0) = sv_2mortal(newSViv((IV) entry));
+    else ST(0) = sv_2mortal(newSViv(PTR2IV(entry)));
 
 
 void
index 38c8e65..ff3899f 100644 (file)
@@ -336,7 +336,7 @@ invert_opset function.
 
     rv2cv anoncode prototype
 
-    entersub leavesub return method method_named -- XXX loops via recursion?
+    entersub leavesub leavesublv return method method_named -- XXX loops via recursion?
 
     leaveeval -- needed for Safe to operate, is safe without entereval
 
index 2d09c2e..00ee85d 100644 (file)
@@ -235,7 +235,7 @@ sub rdo {
 
 1;
 
-__DATA__
+__END__
 
 =head1 NAME
 
index cc3f0c1..16217f0 100644 (file)
@@ -3274,7 +3274,7 @@ INIT:
        }
        else if (sv_derived_from(ST(2), "POSIX::SigSet")) {
            IV tmp = SvIV((SV*)SvRV(ST(2)));
-           oldsigset = (POSIX__SigSet) tmp;
+           oldsigset = INT2PTR(POSIX__SigSet,tmp);
        }
        else {
            New(0, oldsigset, 1, sigset_t);
@@ -3455,10 +3455,12 @@ strtol(str, base = 0)
        char *unparsed;
     PPCODE:
        num = strtol(str, &unparsed, base);
-       if (num >= IV_MIN && num <= IV_MAX)
-           PUSHs(sv_2mortal(newSViv((IV)num)));
-       else
+#if IVSIZE <= LONGSIZE
+       if (num < IV_MIN || num > IV_MAX)
            PUSHs(sv_2mortal(newSVnv((double)num)));
+       else
+#endif
+           PUSHs(sv_2mortal(newSViv((IV)num)));
        if (GIMME == G_ARRAY) {
            EXTEND(SP, 1);
            if (unparsed)
index 499871d..5952d71 100644 (file)
@@ -431,9 +431,12 @@ getdbit(register DBM *db, register long int dbit)
        dirb = c / DBLKSIZ;
 
        if (dirb != db->dirbno) {
+               int got;
                if (lseek(db->dirf, OFF_DIR(dirb), SEEK_SET) < 0
-                   || read(db->dirf, db->dirbuf, DBLKSIZ) < 0)
+                   || (got=read(db->dirf, db->dirbuf, DBLKSIZ)) < 0)
                        return 0;
+               if (got==0) 
+                       memset(db->dirbuf,0,DBLKSIZ);
                db->dirbno = dirb;
 
                debug(("dir read: %d\n", dirb));
@@ -452,10 +455,12 @@ setdbit(register DBM *db, register long int dbit)
        dirb = c / DBLKSIZ;
 
        if (dirb != db->dirbno) {
-               (void) memset(db->dirbuf, 0, DBLKSIZ);
+               int got;
                if (lseek(db->dirf, OFF_DIR(dirb), SEEK_SET) < 0
-                   || read(db->dirf, db->dirbuf, DBLKSIZ) < 0)
+                   || (got=read(db->dirf, db->dirbuf, DBLKSIZ)) < 0)
                        return 0;
+               if (got==0) 
+                       memset(db->dirbuf,0,DBLKSIZ);
                db->dirbno = dirb;
 
                debug(("dir read: %d\n", dirb));
@@ -463,8 +468,13 @@ setdbit(register DBM *db, register long int dbit)
 
        db->dirbuf[c % DBLKSIZ] |= (1 << dbit % BYTESIZ);
 
+#if 0
        if (dbit >= db->maxbno)
                db->maxbno += DBLKSIZ * BYTESIZ;
+#else
+       if (OFF_DIR((dirb+1))*BYTESIZ > db->maxbno) 
+               db->maxbno=OFF_DIR((dirb+1))*BYTESIZ;
+#endif
 
        if (lseek(db->dirf, OFF_DIR(dirb), SEEK_SET) < 0
            || write(db->dirf, db->dirbuf, DBLKSIZ) < 0)
index fe2bf35..e97fa1e 100644 (file)
@@ -46,6 +46,11 @@ execution. The semantics of the lock are exactly those of one
 explicitly taken with the C<lock> operator immediately after the
 subroutine is entered.
 
+=item lvalue
+
+Setting this attribute enables the subroutine to be used in
+lvalue context.  See L<perlsub/"Lvalue subroutines">.
+
 =back
 
 =cut
index 53ba535..a92922d 100644 (file)
@@ -10,6 +10,8 @@ get_flag(char *attr)
        return CVf_METHOD;
     else if (strnEQ(attr, "locked", 6))
        return CVf_LOCKED;
+    else if (strnEQ(attr, "lvalue", 6))
+       return CVf_LVALUE;
     else
        return 0;
 }
diff --git a/handy.h b/handy.h
index 95bcec7..5ffd01d 100644 (file)
--- a/handy.h
+++ b/handy.h
@@ -241,7 +241,7 @@ typedef unsigned short      U16;
 #ifdef USE_NEXT_CTYPE
 
 #  define isALNUM_LC(c) \
-       (NXIsAlnum((unsigned int)(c)) || (char)(c) == '_')
+       (NXIsAlNum((unsigned int)(c)) || (char)(c) == '_')
 #  define isIDFIRST_LC(c) \
        (NXIsAlpha((unsigned int)(c)) || (char)(c) == '_')
 #  define isALPHA_LC(c)                NXIsAlpha((unsigned int)(c))
@@ -249,7 +249,7 @@ typedef unsigned short      U16;
 #  define isDIGIT_LC(c)                NXIsDigit((unsigned int)(c))
 #  define isUPPER_LC(c)                NXIsUpper((unsigned int)(c))
 #  define isLOWER_LC(c)                NXIsLower((unsigned int)(c))
-#  define isALNUMC_LC(c)       NXIsAlnum((unsigned int)(c))
+#  define isALNUMC_LC(c)       NXIsAlNum((unsigned int)(c))
 #  define isCNTRL_LC(c)                NXIsCntrl((unsigned int)(c))
 #  define isGRAPH_LC(c)                NXIsGraph((unsigned int)(c))
 #  define isPRINT_LC(c)                NXIsPrint((unsigned int)(c))
index eb9b685..8b2023a 100644 (file)
@@ -192,6 +192,11 @@ case "$ldlibpthname" in
 '') ldlibpthname=SHLIB_PATH ;;
 esac
 
+# HP-UX 10.20 and gcc 2.8.1 break UINT32_MAX.
+case "$cc" in
+*gcc*) ccflags="$ccflags -DUINT32_MAX_BROKEN" ;;
+esac
+
 # Date: Fri, 6 Sep 96 23:15:31 CDT
 # From: "Daniel S. Lewart" <d-lewart@uiuc.edu>
 # I looked through the gcc.info and found this:
index a291d39..669e6f9 100644 (file)
@@ -353,8 +353,6 @@ PERLVAR(Iyyval,             YYSTYPE)
 PERLVAR(Iyylval,       YYSTYPE)
 
 PERLVAR(Iglob_index,   int)
-PERLVAR(Iefloatbuf,    char*)
-PERLVAR(Iefloatsize,   STRLEN)
 PERLVAR(Isrand_called, bool)
 PERLVARA(Iuudmap,256,  char)
 PERLVAR(Ibitcount,     char *)
diff --git a/jpl/JNI/Closer.java b/jpl/JNI/Closer.java
new file mode 100755 (executable)
index 0000000..9344055
--- /dev/null
@@ -0,0 +1,9 @@
+import java.awt.event.*;
+import java.awt.*;
+public class Closer extends WindowAdapter {
+
+    public void windowClosing(WindowEvent e) {
+        Window w = e.getWindow();
+        w.dispose();
+    }
+}
index ad28a9a..edbc1e6 100644 (file)
@@ -198,7 +198,7 @@ sub AUTOLOAD {
     ($constname = $AUTOLOAD) =~ s/.*:://;
     my $val = constant($constname, @_ ? $_[0] : 0);
     if ($! != 0) {
-       if ($! =~ /Invalid/ || $!{EINVAL}) {
+       if ($! =~ /Invalid/) {
            $AutoLoader::AUTOLOAD = $AUTOLOAD;
            goto &AutoLoader::AUTOLOAD;
        }
@@ -215,22 +215,45 @@ bootstrap JNI $VERSION;
 if (not $JPL::_env_) {
     $ENV{JAVA_HOME} ||= "/usr/local/java";
 
-    chop(my $arch = `uname -p`);
-    chop($arch = `uname -m`) unless -d "$ENV{JAVA_HOME}/lib/$arch";
+    my ($arch, @CLASSPATH);
+    if ($^O eq 'MSWin32') {
 
-    my @CLASSPATH = split(/:/, $ENV{CLASSPATH});
-    @CLASSPATH = "." unless @CLASSPATH;
-    push @CLASSPATH,
-       "$ENV{JAVA_HOME}/classes",
-       "$ENV{JAVA_HOME}/lib/classes.zip";
-    $ENV{CLASSPATH} = join(':', @CLASSPATH);
+        $arch = 'MSWin32' unless -d "$ENV{JAVA_HOME}/lib/$arch";
+        @CLASSPATH = split(/;/, $ENV{CLASSPATH});
+        @CLASSPATH = "." unless @CLASSPATH;
+        push @CLASSPATH,
+           "$ENV{JAVA_HOME}\\classes",
+           "$ENV{JAVA_HOME}\\lib\\classes.zip";
 
-    $ENV{THREADS_TYPE} ||= "green_threads";
+        $ENV{CLASSPATH} = join(';', @CLASSPATH);
+        $ENV{THREADS_TYPE} ||= "green_threads";
 
-    $JAVALIB = "$ENV{JAVA_HOME}/lib/$arch/$ENV{THREADS_TYPE}";
-    $ENV{$Config{ldlibpthname}} .= ":$JAVALIB";
+        $JAVALIB = "$ENV{JAVA_HOME}/lib/$arch/$ENV{THREADS_TYPE}";
+        $ENV{LD_LIBRARY_PATH} .= ":$JAVALIB";
 
-    $JVM = GetJavaVM("$JAVALIB/libjava.so",@JVM_ARGS);
+        push @JVM_ARGS, "classpath", $ENV{CLASSPATH};
+        print "JVM_ARGS=@JVM_ARGS!\n";
+        $JVM = GetJavaVM("$JAVALIB/javai.dll",@JVM_ARGS);
+
+    } else {
+        chop($arch = `uname -p`);
+        chop($arch = `uname -m`) unless -d "$ENV{JAVA_HOME}/lib/$arch";
+
+        @CLASSPATH = split(/:/, $ENV{CLASSPATH});
+        @CLASSPATH = "." unless @CLASSPATH;
+        push @CLASSPATH,
+           "$ENV{JAVA_HOME}/classes",
+           "$ENV{JAVA_HOME}/lib/classes.zip";
+        $ENV{CLASSPATH} = join(':', @CLASSPATH);
+
+        $ENV{THREADS_TYPE} ||= "green_threads";
+
+        $JAVALIB = "$ENV{JAVA_HOME}/lib/$arch/$ENV{THREADS_TYPE}";
+        $ENV{LD_LIBRARY_PATH} .= ":$JAVALIB";
+        push @JVM_ARGS, "classpath", $ENV{CLASSPATH};
+        print "JVM_ARGS=@JVM_ARGS!\n";
+        $JVM = GetJavaVM("$JAVALIB/libjava.so",@JVM_ARGS);
+    }
 }
 
 1;
index ee854c1..e5e0af3 100644 (file)
@@ -8,24 +8,64 @@
 #include "perl.h"
 #include "XSUB.h"
 
-#include <perl.h>
+#include <stdio.h>
 #include <jni.h>
-#include <dlfcn.h>
 
+#ifndef PERL_VERSION
+#  include <patchlevel.h>
+#  define PERL_REVISION                5
+#  define PERL_VERSION         PATCHLEVEL
+#  define PERL_SUBVERSION      SUBVERSION
+#endif
+
+#if PERL_REVISION == 5 && (PERL_VERSION < 4 || \
+                          (PERL_VERSION == 4 && PERL_SUBVERSION <= 75))
+#  define PL_na                na
+#  define PL_sv_no     sv_no
+#  define PL_sv_undef  sv_undef
+#  define PL_dowarn    dowarn
+#endif
+
+#ifndef newSVpvn
+#  define newSVpvn(a,b)        newSVpv(a,b)
+#endif
+
+#ifndef pTHX
+#  define pTHX         void
+#  define pTHX_
+#  define aTHX
+#  define aTHX_
+#  define dTHX         extern int JNI___notused
+#endif
+
+#ifndef WIN32
+#  include <dlfcn.h>
+#endif
+
+#ifdef EMBEDDEDPERL
 extern JNIEnv* jplcurenv;
 extern int jpldebug;
+#else
+JNIEnv* jplcurenv;
+int jpldebug = 1;
+#endif
 
 #define SysRet jint
 
-static void
-call_my_exit(jint status)
+#ifdef WIN32
+static void JNICALL call_my_exit(jint status)
+{
+    my_exit(status);
+}
+#else
+static void call_my_exit(jint status)
 {
-    dTHX;
     my_exit(status);
 }
+#endif
 
 jvalue*
-makeargs(pTHX_ char *sig, SV** svp, int items)
+makeargs(char *sig, SV** svp, int items)
 {
     jvalue* jv = (jvalue*)safemalloc(sizeof(jvalue) * items);
     int ix = 0;
@@ -80,10 +120,18 @@ makeargs(pTHX_ char *sig, SV** svp, int items)
                        int i;
                        SV** esv;
 
+#ifdef WIN32
+                       jbooleanArray ja = env->NewBooleanArray(len);
+#else
                        jbooleanArray ja = (*env)->NewBooleanArray(env, len);
+#endif
                        for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
                            buf[i] = (jboolean)SvIV(*esv);
+#ifdef WIN32
+                       env->SetBooleanArrayRegion(ja, 0, len, buf);
+#else
                        (*env)->SetBooleanArrayRegion(env, ja, 0, len, buf);
+#endif
                        free((void*)buf);
                        jv[ix++].l = (jobject)ja;
                    }
@@ -93,8 +141,16 @@ makeargs(pTHX_ char *sig, SV** svp, int items)
                else if (SvPOK(sv)) {
                    jsize len = sv_len(sv) / sizeof(jboolean);
 
+#ifdef WIN32
+                   jbooleanArray ja = env->NewBooleanArray(len);
+#else
                    jbooleanArray ja = (*env)->NewBooleanArray(env, len);
+#endif
+#ifdef WIN32
+                   env->SetBooleanArrayRegion(ja, 0, len, (jboolean*)SvPV(sv,n_a));
+#else
                    (*env)->SetBooleanArrayRegion(env, ja, 0, len, (jboolean*)SvPV(sv,n_a));
+#endif
                    jv[ix++].l = (jobject)ja;
                }
                else
@@ -111,10 +167,18 @@ makeargs(pTHX_ char *sig, SV** svp, int items)
                        int i;
                        SV** esv;
 
+#ifdef WIN32
+                       jbyteArray ja = env->NewByteArray(len);
+#else
                        jbyteArray ja = (*env)->NewByteArray(env, len);
+#endif
                        for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
                            buf[i] = (jbyte)SvIV(*esv);
+#ifdef WIN32
+                       env->SetByteArrayRegion(ja, 0, len, buf);
+#else
                        (*env)->SetByteArrayRegion(env, ja, 0, len, buf);
+#endif
                        free((void*)buf);
                        jv[ix++].l = (jobject)ja;
                    }
@@ -124,8 +188,16 @@ makeargs(pTHX_ char *sig, SV** svp, int items)
                else if (SvPOK(sv)) {
                    jsize len = sv_len(sv) / sizeof(jbyte);
 
+#ifdef WIN32
+                   jbyteArray ja = env->NewByteArray(len);
+#else
                    jbyteArray ja = (*env)->NewByteArray(env, len);
+#endif
+#ifdef WIN32
+                   env->SetByteArrayRegion(ja, 0, len, (jbyte*)SvPV(sv,n_a));
+#else
                    (*env)->SetByteArrayRegion(env, ja, 0, len, (jbyte*)SvPV(sv,n_a));
+#endif
                    jv[ix++].l = (jobject)ja;
                }
                else
@@ -142,10 +214,18 @@ makeargs(pTHX_ char *sig, SV** svp, int items)
                        int i;
                        SV** esv;
 
+#ifdef WIN32
+                       jcharArray ja = env->NewCharArray(len);
+#else
                        jcharArray ja = (*env)->NewCharArray(env, len);
+#endif
                        for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
                            buf[i] = (jchar)SvIV(*esv);
+#ifdef WIN32
+                       env->SetCharArrayRegion(ja, 0, len, buf);
+#else
                        (*env)->SetCharArrayRegion(env, ja, 0, len, buf);
+#endif
                        free((void*)buf);
                        jv[ix++].l = (jobject)ja;
                    }
@@ -155,8 +235,16 @@ makeargs(pTHX_ char *sig, SV** svp, int items)
                else if (SvPOK(sv)) {
                    jsize len = sv_len(sv) / sizeof(jchar);
 
+#ifdef WIN32
+                   jcharArray ja = env->NewCharArray(len);
+#else
                    jcharArray ja = (*env)->NewCharArray(env, len);
+#endif
+#ifdef WIN32
+                   env->SetCharArrayRegion(ja, 0, len, (jchar*)SvPV(sv,n_a));
+#else
                    (*env)->SetCharArrayRegion(env, ja, 0, len, (jchar*)SvPV(sv,n_a));
+#endif
                    jv[ix++].l = (jobject)ja;
                }
                else
@@ -173,10 +261,18 @@ makeargs(pTHX_ char *sig, SV** svp, int items)
                        int i;
                        SV** esv;
 
+#ifdef WIN32
+                       jshortArray ja = env->NewShortArray(len);
+#else
                        jshortArray ja = (*env)->NewShortArray(env, len);
+#endif
                        for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
                            buf[i] = (jshort)SvIV(*esv);
+#ifdef WIN32
+                       env->SetShortArrayRegion(ja, 0, len, buf);
+#else
                        (*env)->SetShortArrayRegion(env, ja, 0, len, buf);
+#endif
                        free((void*)buf);
                        jv[ix++].l = (jobject)ja;
                    }
@@ -186,8 +282,16 @@ makeargs(pTHX_ char *sig, SV** svp, int items)
                else if (SvPOK(sv)) {
                    jsize len = sv_len(sv) / sizeof(jshort);
 
+#ifdef WIN32
+                   jshortArray ja = env->NewShortArray(len);
+#else
                    jshortArray ja = (*env)->NewShortArray(env, len);
+#endif
+#ifdef WIN32
+                   env->SetShortArrayRegion(ja, 0, len, (jshort*)SvPV(sv,n_a));
+#else
                    (*env)->SetShortArrayRegion(env, ja, 0, len, (jshort*)SvPV(sv,n_a));
+#endif
                    jv[ix++].l = (jobject)ja;
                }
                else
@@ -204,10 +308,18 @@ makeargs(pTHX_ char *sig, SV** svp, int items)
                        int i;
                        SV** esv;
 
+#ifdef WIN32
+                       jintArray ja = env->NewIntArray(len);
+#else
                        jintArray ja = (*env)->NewIntArray(env, len);
+#endif
                        for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
                            buf[i] = (jint)SvIV(*esv);
+#ifdef WIN32
+                       env->SetIntArrayRegion(ja, 0, len, buf);
+#else
                        (*env)->SetIntArrayRegion(env, ja, 0, len, buf);
+#endif
                        free((void*)buf);
                        jv[ix++].l = (jobject)ja;
                    }
@@ -217,8 +329,16 @@ makeargs(pTHX_ char *sig, SV** svp, int items)
                else if (SvPOK(sv)) {
                    jsize len = sv_len(sv) / sizeof(jint);
 
+#ifdef WIN32
+                   jintArray ja = env->NewIntArray(len);
+#else
                    jintArray ja = (*env)->NewIntArray(env, len);
+#endif
+#ifdef WIN32
+                   env->SetIntArrayRegion(ja, 0, len, (jint*)SvPV(sv,n_a));
+#else
                    (*env)->SetIntArrayRegion(env, ja, 0, len, (jint*)SvPV(sv,n_a));
+#endif
                    jv[ix++].l = (jobject)ja;
                }
                else
@@ -235,10 +355,18 @@ makeargs(pTHX_ char *sig, SV** svp, int items)
                        int i;
                        SV** esv;
 
+#ifdef WIN32
+                       jlongArray ja = env->NewLongArray(len);
+#else
                        jlongArray ja = (*env)->NewLongArray(env, len);
+#endif
                        for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
                            buf[i] = (jlong)SvNV(*esv);
+#ifdef WIN32
+                       env->SetLongArrayRegion(ja, 0, len, buf);
+#else
                        (*env)->SetLongArrayRegion(env, ja, 0, len, buf);
+#endif
                        free((void*)buf);
                        jv[ix++].l = (jobject)ja;
                    }
@@ -248,8 +376,16 @@ makeargs(pTHX_ char *sig, SV** svp, int items)
                else if (SvPOK(sv)) {
                    jsize len = sv_len(sv) / sizeof(jlong);
 
+#ifdef WIN32
+                   jlongArray ja = env->NewLongArray(len);
+#else
                    jlongArray ja = (*env)->NewLongArray(env, len);
+#endif
+#ifdef WIN32
+                   env->SetLongArrayRegion(ja, 0, len, (jlong*)SvPV(sv,n_a));
+#else
                    (*env)->SetLongArrayRegion(env, ja, 0, len, (jlong*)SvPV(sv,n_a));
+#endif
                    jv[ix++].l = (jobject)ja;
                }
                else
@@ -266,10 +402,18 @@ makeargs(pTHX_ char *sig, SV** svp, int items)
                        int i;
                        SV** esv;
 
+#ifdef WIN32
+                       jfloatArray ja = env->NewFloatArray(len);
+#else
                        jfloatArray ja = (*env)->NewFloatArray(env, len);
+#endif
                        for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
                            buf[i] = (jfloat)SvNV(*esv);
+#ifdef WIN32
+                       env->SetFloatArrayRegion(ja, 0, len, buf);
+#else
                        (*env)->SetFloatArrayRegion(env, ja, 0, len, buf);
+#endif
                        free((void*)buf);
                        jv[ix++].l = (jobject)ja;
                    }
@@ -279,8 +423,16 @@ makeargs(pTHX_ char *sig, SV** svp, int items)
                else if (SvPOK(sv)) {
                    jsize len = sv_len(sv) / sizeof(jfloat);
 
+#ifdef WIN32
+                   jfloatArray ja = env->NewFloatArray(len);
+#else
                    jfloatArray ja = (*env)->NewFloatArray(env, len);
+#endif
+#ifdef WIN32
+                   env->SetFloatArrayRegion(ja, 0, len, (jfloat*)SvPV(sv,n_a));
+#else
                    (*env)->SetFloatArrayRegion(env, ja, 0, len, (jfloat*)SvPV(sv,n_a));
+#endif
                    jv[ix++].l = (jobject)ja;
                }
                else
@@ -297,10 +449,18 @@ makeargs(pTHX_ char *sig, SV** svp, int items)
                        int i;
                        SV** esv;
 
+#ifdef WIN32
+                       jdoubleArray ja = env->NewDoubleArray(len);
+#else
                        jdoubleArray ja = (*env)->NewDoubleArray(env, len);
+#endif
                        for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++)
                            buf[i] = (jdouble)SvNV(*esv);
+#ifdef WIN32
+                       env->SetDoubleArrayRegion(ja, 0, len, buf);
+#else
                        (*env)->SetDoubleArrayRegion(env, ja, 0, len, buf);
+#endif
                        free((void*)buf);
                        jv[ix++].l = (jobject)ja;
                    }
@@ -310,8 +470,16 @@ makeargs(pTHX_ char *sig, SV** svp, int items)
                else if (SvPOK(sv)) {
                    jsize len = sv_len(sv) / sizeof(jdouble);
 
+#ifdef WIN32
+                   jdoubleArray ja = env->NewDoubleArray(len);
+#else
                    jdoubleArray ja = (*env)->NewDoubleArray(env, len);
+#endif
+#ifdef WIN32
+                   env->SetDoubleArrayRegion(ja, 0, len, (jdouble*)SvPV(sv,n_a));
+#else
                    (*env)->SetDoubleArrayRegion(env, ja, 0, len, (jdouble*)SvPV(sv,n_a));
+#endif
                    jv[ix++].l = (jobject)ja;
                }
                else
@@ -330,14 +498,30 @@ makeargs(pTHX_ char *sig, SV** svp, int items)
                            int i;
                            SV** esv;
                            static jclass jcl = 0;
-                           jarray ja;
+                           jobjectArray ja;
 
                            if (!jcl)
+#ifdef WIN32
+                               jcl = env->FindClass("java/lang/String");
+#else
                                jcl = (*env)->FindClass(env, "java/lang/String");
+#endif
+#ifdef WIN32
+                           ja = env->NewObjectArray(len, jcl, 0);
+#else
                            ja = (*env)->NewObjectArray(env, len, jcl, 0);
+#endif
                            for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) {
+#ifdef WIN32
+                               jobject str = (jobject)env->NewStringUTF(SvPV(*esv,n_a));
+#else
                                jobject str = (jobject)(*env)->NewStringUTF(env, SvPV(*esv,n_a));
+#endif
+#ifdef WIN32
+                               env->SetObjectArrayElement(ja, i, str);
+#else
                                (*env)->SetObjectArrayElement(env, ja, i, str);
+#endif
                            }
                            jv[ix++].l = (jobject)ja;
                        }
@@ -359,20 +543,38 @@ makeargs(pTHX_ char *sig, SV** svp, int items)
                        int i;
                        SV** esv;
                       static jclass jcl = 0;
-                       jarray ja;
+                       jobjectArray ja;
 
                        if (!jcl)
+#ifdef WIN32
+                           jcl = env->FindClass("java/lang/Object");
+#else
                            jcl = (*env)->FindClass(env, "java/lang/Object");
+#endif
+#ifdef WIN32
+                       ja = env->NewObjectArray(len, jcl, 0);
+#else
                        ja = (*env)->NewObjectArray(env, len, jcl, 0);
+#endif
                        for (esv = AvARRAY((AV*)rv), i = 0; i < len; esv++, i++) {
                            if (SvROK(*esv) && (rv = SvRV(*esv)) && SvOBJECT(rv)) {
-                               (*env)->SetObjectArrayElement(env, ja, i,
-                                   (jobject)(void*)SvIV(rv));
+#ifdef WIN32
+                               env->SetObjectArrayElement(ja, i, (jobject)(void*)SvIV(rv));
+#else
+                               (*env)->SetObjectArrayElement(env, ja, i, (jobject)(void*)SvIV(rv));
+#endif
                            }
                            else {
-                               jobject str = (jobject)(*env)->NewStringUTF(env,
-                                   SvPV(*esv,n_a));
+#ifdef WIN32
+                               jobject str = (jobject)env->NewStringUTF(SvPV(*esv,n_a));
+#else
+                               jobject str = (jobject)(*env)->NewStringUTF(env, SvPV(*esv,n_a));
+#endif
+#ifdef WIN32
+                               env->SetObjectArrayElement(ja, i, str);
+#else
                                (*env)->SetObjectArrayElement(env, ja, i, str);
+#endif
                            }
                        }
                        jv[ix++].l = (jobject)ja;
@@ -388,8 +590,11 @@ makeargs(pTHX_ char *sig, SV** svp, int items)
        case 'L':
            if (!SvROK(sv) || strnEQ(s, "java/lang/String;", 17)) {
                s += 17;
-               jv[ix++].l = (jobject)(*env)->NewStringUTF(env,
-                               (char*) SvPV(sv,n_a));
+#ifdef WIN32
+               jv[ix++].l = (jobject)env->NewStringUTF((char*) SvPV(sv,n_a));
+#else
+               jv[ix++].l = (jobject)(*env)->NewStringUTF(env, (char*) SvPV(sv,n_a));
+#endif
                break;
            }
            while (*s != ';') s++;
@@ -400,16 +605,16 @@ makeargs(pTHX_ char *sig, SV** svp, int items)
            }
            break;
        case ')':
-           Perl_croak(aTHX_ "too many arguments, signature: %s", sig);
+           croak("too many arguments, signature: %s", sig);
            goto cleanup;
        default:
-           Perl_croak(aTHX_ "panic: malformed signature: %s", s-1);
+           croak("panic: malformed signature: %s", s-1);
            goto cleanup;
        }
 
     }
     if (*s != ')') {
-       Perl_croak(aTHX_ "not enough arguments, signature: %s", sig);
+       croak("not enough arguments, signature: %s", sig);
        goto cleanup;
     }
     return jv;
@@ -420,9 +625,9 @@ cleanup:
 }
 
 static int
-not_here(pTHX_ char *s)
+not_here(char *s)
 {
-    Perl_croak(aTHX_ "%s not implemented on this architecture", s);
+    croak("%s not implemented on this architecture", s);
     return -1;
 }
 
@@ -476,7 +681,11 @@ constant(char *name, int arg)
 #endif
        if (strEQ(name, "JNI_H"))
 #ifdef JNI_H
+#ifdef WIN32
+           return 1;
+#else
            return JNI_H;
+#endif
 #else
            goto not_there;
 #endif
@@ -551,7 +760,11 @@ GetVersion()
        JNIEnv *                env = FETCHENV;
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetVersion();
+#else
            RETVAL = (*env)->GetVersion(env);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -567,7 +780,19 @@ DefineClass(name, loader, buf)
        const jbyte *           buf
     CODE:
        {
-           RETVAL = (*env)->DefineClass(env,  name, loader, buf, (jsize)buf_len_);
+#ifdef KAFFE
+#ifdef WIN32
+           RETVAL = env->DefineClass( loader, buf, (jsize)buf_len_);
+#else
+           RETVAL = (*env)->DefineClass(env,  loader, buf, (jsize)buf_len_);
+#endif
+#else
+#ifdef WIN32
+           RETVAL = env->DefineClass( name, loader, buf, (jsize)buf_len_); 
+#else
+           RETVAL = (*env)->DefineClass(env,  name, loader, buf, (jsize)buf_len_); 
+#endif
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -579,7 +804,11 @@ FindClass(name)
        const char *            name
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->FindClass( name);
+#else
            RETVAL = (*env)->FindClass(env,  name);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -591,7 +820,11 @@ GetSuperclass(sub)
        jclass                  sub
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetSuperclass( sub);
+#else
            RETVAL = (*env)->GetSuperclass(env,  sub);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -604,7 +837,11 @@ IsAssignableFrom(sub, sup)
        jclass                  sup
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->IsAssignableFrom( sub, sup);
+#else
            RETVAL = (*env)->IsAssignableFrom(env,  sub, sup);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -616,7 +853,11 @@ Throw(obj)
        jthrowable              obj
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->Throw( obj);
+#else
            RETVAL = (*env)->Throw(env,  obj);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -629,7 +870,11 @@ ThrowNew(clazz, msg)
        const char *            msg
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->ThrowNew( clazz, msg);
+#else
            RETVAL = (*env)->ThrowNew(env,  clazz, msg);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -640,7 +885,11 @@ ExceptionOccurred()
        JNIEnv *                env = FETCHENV;
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->ExceptionOccurred();
+#else
            RETVAL = (*env)->ExceptionOccurred(env);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -651,7 +900,11 @@ ExceptionDescribe()
        JNIEnv *                env = FETCHENV;
     CODE:
        {
+#ifdef WIN32
+           env->ExceptionDescribe();
+#else
            (*env)->ExceptionDescribe(env);
+#endif
            RESTOREENV;
        }
 
@@ -660,7 +913,11 @@ ExceptionClear()
        JNIEnv *                env = FETCHENV;
     CODE:
        {
+#ifdef WIN32
+           env->ExceptionClear();
+#else
            (*env)->ExceptionClear(env);
+#endif
            RESTOREENV;
        }
 
@@ -670,7 +927,11 @@ FatalError(msg)
        const char *            msg
     CODE:
        {
+#ifdef WIN32
+           env->FatalError( msg);
+#else
            (*env)->FatalError(env,  msg);
+#endif
            RESTOREENV;
        }
 
@@ -680,7 +941,11 @@ NewGlobalRef(lobj)
        jobject                 lobj
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->NewGlobalRef(lobj);
+#else
            RETVAL = (*env)->NewGlobalRef(env, lobj);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -692,7 +957,11 @@ DeleteGlobalRef(gref)
        jobject                 gref
     CODE:
        {
+#ifdef WIN32
+           env->DeleteGlobalRef(gref);
+#else
            (*env)->DeleteGlobalRef(env, gref);
+#endif
            RESTOREENV;
        }
 
@@ -702,7 +971,11 @@ DeleteLocalRef(obj)
        jobject                 obj
     CODE:
        {
+#ifdef WIN32
+           env->DeleteLocalRef( obj);
+#else
            (*env)->DeleteLocalRef(env,  obj);
+#endif
            RESTOREENV;
        }
 
@@ -713,7 +986,11 @@ IsSameObject(obj1,obj2)
        jobject                 obj2
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->IsSameObject(obj1,obj2);
+#else
            RETVAL = (*env)->IsSameObject(env, obj1,obj2);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -725,7 +1002,11 @@ AllocObject(clazz)
        jclass                  clazz
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->AllocObject(clazz);
+#else
            RETVAL = (*env)->AllocObject(env, clazz);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -740,8 +1021,12 @@ NewObject(clazz,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           RETVAL = env->NewObjectA(clazz,methodID,args);
+#else
            RETVAL = (*env)->NewObjectA(env, clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -756,7 +1041,11 @@ NewObjectA(clazz,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->NewObjectA(clazz,methodID,args);
+#else
            RETVAL = (*env)->NewObjectA(env, clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -768,7 +1057,11 @@ GetObjectClass(obj)
        jobject                 obj
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetObjectClass(obj);
+#else
            RETVAL = (*env)->GetObjectClass(env, obj);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -781,7 +1074,11 @@ IsInstanceOf(obj,clazz)
        jclass                  clazz
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->IsInstanceOf(obj,clazz);
+#else
            RETVAL = (*env)->IsInstanceOf(env, obj,clazz);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -795,7 +1092,11 @@ GetMethodID(clazz,name,sig)
        const char *            sig
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetMethodID(clazz,name,sig);
+#else
            RETVAL = (*env)->GetMethodID(env, clazz,name,sig);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -810,8 +1111,12 @@ CallObjectMethod(obj,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           RETVAL = env->CallObjectMethodA(obj,methodID,args);
+#else
            RETVAL = (*env)->CallObjectMethodA(env, obj,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -826,7 +1131,11 @@ CallObjectMethodA(obj,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->CallObjectMethodA(obj,methodID,args);
+#else
            RETVAL = (*env)->CallObjectMethodA(env, obj,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -841,8 +1150,12 @@ CallBooleanMethod(obj,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           RETVAL = env->CallBooleanMethodA(obj,methodID,args);
+#else
            RETVAL = (*env)->CallBooleanMethodA(env, obj,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -857,7 +1170,11 @@ CallBooleanMethodA(obj,methodID, args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->CallBooleanMethodA(obj,methodID, args);
+#else
            RETVAL = (*env)->CallBooleanMethodA(env, obj,methodID, args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -872,8 +1189,12 @@ CallByteMethod(obj,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           RETVAL = env->CallByteMethodA(obj,methodID,args);
+#else
            RETVAL = (*env)->CallByteMethodA(env, obj,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -888,7 +1209,11 @@ CallByteMethodA(obj,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->CallByteMethodA(obj,methodID,args);
+#else
            RETVAL = (*env)->CallByteMethodA(env, obj,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -903,8 +1228,12 @@ CallCharMethod(obj,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           RETVAL = env->CallCharMethodA(obj,methodID,args);
+#else
            RETVAL = (*env)->CallCharMethodA(env, obj,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -919,7 +1248,11 @@ CallCharMethodA(obj,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->CallCharMethodA(obj,methodID,args);
+#else
            RETVAL = (*env)->CallCharMethodA(env, obj,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -934,8 +1267,12 @@ CallShortMethod(obj,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           RETVAL = env->CallShortMethodA(obj,methodID,args);
+#else
            RETVAL = (*env)->CallShortMethodA(env, obj,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -950,7 +1287,11 @@ CallShortMethodA(obj,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->CallShortMethodA(obj,methodID,args);
+#else
            RETVAL = (*env)->CallShortMethodA(env, obj,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -965,8 +1306,12 @@ CallIntMethod(obj,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           RETVAL = env->CallIntMethodA(obj,methodID,args);
+#else
            RETVAL = (*env)->CallIntMethodA(env, obj,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -981,7 +1326,11 @@ CallIntMethodA(obj,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->CallIntMethodA(obj,methodID,args);
+#else
            RETVAL = (*env)->CallIntMethodA(env, obj,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -996,8 +1345,12 @@ CallLongMethod(obj,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           RETVAL = env->CallLongMethodA(obj,methodID,args);
+#else
            RETVAL = (*env)->CallLongMethodA(env, obj,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1012,7 +1365,11 @@ CallLongMethodA(obj,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->CallLongMethodA(obj,methodID,args);
+#else
            RETVAL = (*env)->CallLongMethodA(env, obj,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1027,8 +1384,12 @@ CallFloatMethod(obj,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           RETVAL = env->CallFloatMethodA(obj,methodID,args);
+#else
            RETVAL = (*env)->CallFloatMethodA(env, obj,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1043,7 +1404,11 @@ CallFloatMethodA(obj,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->CallFloatMethodA(obj,methodID,args);
+#else
            RETVAL = (*env)->CallFloatMethodA(env, obj,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1058,8 +1423,12 @@ CallDoubleMethod(obj,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           RETVAL = env->CallDoubleMethodA(obj,methodID,args);
+#else
            RETVAL = (*env)->CallDoubleMethodA(env, obj,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1074,7 +1443,11 @@ CallDoubleMethodA(obj,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->CallDoubleMethodA(obj,methodID,args);
+#else
            RETVAL = (*env)->CallDoubleMethodA(env, obj,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1089,8 +1462,12 @@ CallVoidMethod(obj,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           env->CallVoidMethodA(obj,methodID,args);
+#else
            (*env)->CallVoidMethodA(env, obj,methodID,args);
+#endif
            RESTOREENV;
        }
 
@@ -1103,7 +1480,11 @@ CallVoidMethodA(obj,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           env->CallVoidMethodA(obj,methodID,args);
+#else
            (*env)->CallVoidMethodA(env, obj,methodID,args);
+#endif
            RESTOREENV;
        }
 
@@ -1117,8 +1498,12 @@ CallNonvirtualObjectMethod(obj,clazz,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           RETVAL = env->CallNonvirtualObjectMethodA(obj,clazz,methodID,args);
+#else
            RETVAL = (*env)->CallNonvirtualObjectMethodA(env, obj,clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1134,7 +1519,11 @@ CallNonvirtualObjectMethodA(obj,clazz,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->CallNonvirtualObjectMethodA(obj,clazz,methodID,args);
+#else
            RETVAL = (*env)->CallNonvirtualObjectMethodA(env, obj,clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1150,8 +1539,12 @@ CallNonvirtualBooleanMethod(obj,clazz,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           RETVAL = env->CallNonvirtualBooleanMethodA(obj,clazz,methodID,args);
+#else
            RETVAL = (*env)->CallNonvirtualBooleanMethodA(env, obj,clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1167,7 +1560,11 @@ CallNonvirtualBooleanMethodA(obj,clazz,methodID, args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->CallNonvirtualBooleanMethodA(obj,clazz,methodID, args);
+#else
            RETVAL = (*env)->CallNonvirtualBooleanMethodA(env, obj,clazz,methodID, args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1183,8 +1580,12 @@ CallNonvirtualByteMethod(obj,clazz,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           RETVAL = env->CallNonvirtualByteMethodA(obj,clazz,methodID,args);
+#else
            RETVAL = (*env)->CallNonvirtualByteMethodA(env, obj,clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1200,7 +1601,11 @@ CallNonvirtualByteMethodA(obj,clazz,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->CallNonvirtualByteMethodA(obj,clazz,methodID,args);
+#else
            RETVAL = (*env)->CallNonvirtualByteMethodA(env, obj,clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1216,8 +1621,12 @@ CallNonvirtualCharMethod(obj,clazz,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           RETVAL = env->CallNonvirtualCharMethodA(obj,clazz,methodID,args);
+#else
            RETVAL = (*env)->CallNonvirtualCharMethodA(env, obj,clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1233,7 +1642,11 @@ CallNonvirtualCharMethodA(obj,clazz,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->CallNonvirtualCharMethodA(obj,clazz,methodID,args);
+#else
            RETVAL = (*env)->CallNonvirtualCharMethodA(env, obj,clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1249,8 +1662,12 @@ CallNonvirtualShortMethod(obj,clazz,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           RETVAL = env->CallNonvirtualShortMethodA(obj,clazz,methodID,args);
+#else
            RETVAL = (*env)->CallNonvirtualShortMethodA(env, obj,clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1266,7 +1683,11 @@ CallNonvirtualShortMethodA(obj,clazz,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->CallNonvirtualShortMethodA(obj,clazz,methodID,args);
+#else
            RETVAL = (*env)->CallNonvirtualShortMethodA(env, obj,clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1282,8 +1703,12 @@ CallNonvirtualIntMethod(obj,clazz,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           RETVAL = env->CallNonvirtualIntMethodA(obj,clazz,methodID,args);
+#else
            RETVAL = (*env)->CallNonvirtualIntMethodA(env, obj,clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1299,7 +1724,11 @@ CallNonvirtualIntMethodA(obj,clazz,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->CallNonvirtualIntMethodA(obj,clazz,methodID,args);
+#else
            RETVAL = (*env)->CallNonvirtualIntMethodA(env, obj,clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1315,8 +1744,12 @@ CallNonvirtualLongMethod(obj,clazz,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           RETVAL = env->CallNonvirtualLongMethodA(obj,clazz,methodID,args);
+#else
            RETVAL = (*env)->CallNonvirtualLongMethodA(env, obj,clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1332,7 +1765,11 @@ CallNonvirtualLongMethodA(obj,clazz,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->CallNonvirtualLongMethodA(obj,clazz,methodID,args);
+#else
            RETVAL = (*env)->CallNonvirtualLongMethodA(env, obj,clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1348,8 +1785,12 @@ CallNonvirtualFloatMethod(obj,clazz,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           RETVAL = env->CallNonvirtualFloatMethodA(obj,clazz,methodID,args);
+#else
            RETVAL = (*env)->CallNonvirtualFloatMethodA(env, obj,clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1365,7 +1806,11 @@ CallNonvirtualFloatMethodA(obj,clazz,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->CallNonvirtualFloatMethodA(obj,clazz,methodID,args);
+#else
            RETVAL = (*env)->CallNonvirtualFloatMethodA(env, obj,clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1381,8 +1826,12 @@ CallNonvirtualDoubleMethod(obj,clazz,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           RETVAL = env->CallNonvirtualDoubleMethodA(obj,clazz,methodID,args);
+#else
            RETVAL = (*env)->CallNonvirtualDoubleMethodA(env, obj,clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1398,7 +1847,11 @@ CallNonvirtualDoubleMethodA(obj,clazz,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->CallNonvirtualDoubleMethodA(obj,clazz,methodID,args);
+#else
            RETVAL = (*env)->CallNonvirtualDoubleMethodA(env, obj,clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1414,8 +1867,12 @@ CallNonvirtualVoidMethod(obj,clazz,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           env->CallNonvirtualVoidMethodA(obj,clazz,methodID,args);
+#else
            (*env)->CallNonvirtualVoidMethodA(env, obj,clazz,methodID,args);
+#endif
            RESTOREENV;
        }
 
@@ -1429,7 +1886,11 @@ CallNonvirtualVoidMethodA(obj,clazz,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           env->CallNonvirtualVoidMethodA(obj,clazz,methodID,args);
+#else
            (*env)->CallNonvirtualVoidMethodA(env, obj,clazz,methodID,args);
+#endif
            RESTOREENV;
        }
 
@@ -1441,7 +1902,11 @@ GetFieldID(clazz,name,sig)
        const char *            sig
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetFieldID(clazz,name,sig);
+#else
            RETVAL = (*env)->GetFieldID(env, clazz,name,sig);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1455,7 +1920,11 @@ GetObjectField(obj,fieldID)
        char *                  sig = 0;
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetObjectField(obj,fieldID);
+#else
            RETVAL = (*env)->GetObjectField(env, obj,fieldID);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1469,7 +1938,11 @@ GetBooleanField(obj,fieldID)
        char *                  sig = 0;
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetBooleanField(obj,fieldID);
+#else
            RETVAL = (*env)->GetBooleanField(env, obj,fieldID);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1483,7 +1956,11 @@ GetByteField(obj,fieldID)
        char *                  sig = 0;
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetByteField(obj,fieldID);
+#else
            RETVAL = (*env)->GetByteField(env, obj,fieldID);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1497,7 +1974,11 @@ GetCharField(obj,fieldID)
        char *                  sig = 0;
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetCharField(obj,fieldID);
+#else
            RETVAL = (*env)->GetCharField(env, obj,fieldID);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1511,7 +1992,11 @@ GetShortField(obj,fieldID)
        char *                  sig = 0;
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetShortField(obj,fieldID);
+#else
            RETVAL = (*env)->GetShortField(env, obj,fieldID);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1525,7 +2010,11 @@ GetIntField(obj,fieldID)
        char *                  sig = 0;
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetIntField(obj,fieldID);
+#else
            RETVAL = (*env)->GetIntField(env, obj,fieldID);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1539,7 +2028,11 @@ GetLongField(obj,fieldID)
        char *                  sig = 0;
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetLongField(obj,fieldID);
+#else
            RETVAL = (*env)->GetLongField(env, obj,fieldID);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1553,7 +2046,11 @@ GetFloatField(obj,fieldID)
        char *                  sig = 0;
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetFloatField(obj,fieldID);
+#else
            RETVAL = (*env)->GetFloatField(env, obj,fieldID);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1567,7 +2064,11 @@ GetDoubleField(obj,fieldID)
        char *                  sig = 0;
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetDoubleField(obj,fieldID);
+#else
            RETVAL = (*env)->GetDoubleField(env, obj,fieldID);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1582,7 +2083,11 @@ SetObjectField(obj,fieldID,val)
        jobject                 val
     CODE:
        {
+#ifdef WIN32
+           env->SetObjectField(obj,fieldID,val);
+#else
            (*env)->SetObjectField(env, obj,fieldID,val);
+#endif
            RESTOREENV;
        }
 
@@ -1595,7 +2100,11 @@ SetBooleanField(obj,fieldID,val)
        jboolean                val
     CODE:
        {
+#ifdef WIN32
+           env->SetBooleanField(obj,fieldID,val);
+#else
            (*env)->SetBooleanField(env, obj,fieldID,val);
+#endif
            RESTOREENV;
        }
 
@@ -1608,7 +2117,11 @@ SetByteField(obj,fieldID,val)
        jbyte                   val
     CODE:
        {
+#ifdef WIN32
+           env->SetByteField(obj,fieldID,val);
+#else
            (*env)->SetByteField(env, obj,fieldID,val);
+#endif
            RESTOREENV;
        }
 
@@ -1621,7 +2134,11 @@ SetCharField(obj,fieldID,val)
        jchar                   val
     CODE:
        {
+#ifdef WIN32
+           env->SetCharField(obj,fieldID,val);
+#else
            (*env)->SetCharField(env, obj,fieldID,val);
+#endif
            RESTOREENV;
        }
 
@@ -1634,7 +2151,11 @@ SetShortField(obj,fieldID,val)
        jshort                  val
     CODE:
        {
+#ifdef WIN32
+           env->SetShortField(obj,fieldID,val);
+#else
            (*env)->SetShortField(env, obj,fieldID,val);
+#endif
            RESTOREENV;
        }
 
@@ -1647,7 +2168,11 @@ SetIntField(obj,fieldID,val)
        jint                    val
     CODE:
        {
+#ifdef WIN32
+           env->SetIntField(obj,fieldID,val);
+#else
            (*env)->SetIntField(env, obj,fieldID,val);
+#endif
            RESTOREENV;
        }
 
@@ -1660,7 +2185,11 @@ SetLongField(obj,fieldID,val)
        jlong                   val
     CODE:
        {
+#ifdef WIN32
+           env->SetLongField(obj,fieldID,val);
+#else
            (*env)->SetLongField(env, obj,fieldID,val);
+#endif
            RESTOREENV;
        }
 
@@ -1673,7 +2202,11 @@ SetFloatField(obj,fieldID,val)
        jfloat                  val
     CODE:
        {
+#ifdef WIN32
+           env->SetFloatField(obj,fieldID,val);
+#else
            (*env)->SetFloatField(env, obj,fieldID,val);
+#endif
            RESTOREENV;
        }
 
@@ -1686,7 +2219,11 @@ SetDoubleField(obj,fieldID,val)
        jdouble                 val
     CODE:
        {
+#ifdef WIN32
+           env->SetDoubleField(obj,fieldID,val);
+#else
            (*env)->SetDoubleField(env, obj,fieldID,val);
+#endif
            RESTOREENV;
        }
 
@@ -1698,7 +2235,11 @@ GetStaticMethodID(clazz,name,sig)
        const char *            sig
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetStaticMethodID(clazz,name,sig);
+#else
            RETVAL = (*env)->GetStaticMethodID(env, clazz,name,sig);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1713,8 +2254,12 @@ CallStaticObjectMethod(clazz,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           RETVAL = env->CallStaticObjectMethodA(clazz,methodID,args);
+#else
            RETVAL = (*env)->CallStaticObjectMethodA(env, clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1729,7 +2274,11 @@ CallStaticObjectMethodA(clazz,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->CallStaticObjectMethodA(clazz,methodID,args);
+#else
            RETVAL = (*env)->CallStaticObjectMethodA(env, clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1744,8 +2293,12 @@ CallStaticBooleanMethod(clazz,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           RETVAL = env->CallStaticBooleanMethodA(clazz,methodID,args);
+#else
            RETVAL = (*env)->CallStaticBooleanMethodA(env, clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1760,7 +2313,11 @@ CallStaticBooleanMethodA(clazz,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->CallStaticBooleanMethodA(clazz,methodID,args);
+#else
            RETVAL = (*env)->CallStaticBooleanMethodA(env, clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1775,8 +2332,12 @@ CallStaticByteMethod(clazz,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           RETVAL = env->CallStaticByteMethodA(clazz,methodID,args);
+#else
            RETVAL = (*env)->CallStaticByteMethodA(env, clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1791,7 +2352,11 @@ CallStaticByteMethodA(clazz,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->CallStaticByteMethodA(clazz,methodID,args);
+#else
            RETVAL = (*env)->CallStaticByteMethodA(env, clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1806,8 +2371,12 @@ CallStaticCharMethod(clazz,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           RETVAL = env->CallStaticCharMethodA(clazz,methodID,args);
+#else
            RETVAL = (*env)->CallStaticCharMethodA(env, clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1822,7 +2391,11 @@ CallStaticCharMethodA(clazz,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->CallStaticCharMethodA(clazz,methodID,args);
+#else
            RETVAL = (*env)->CallStaticCharMethodA(env, clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1837,8 +2410,12 @@ CallStaticShortMethod(clazz,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           RETVAL = env->CallStaticShortMethodA(clazz,methodID,args);
+#else
            RETVAL = (*env)->CallStaticShortMethodA(env, clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1853,7 +2430,11 @@ CallStaticShortMethodA(clazz,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->CallStaticShortMethodA(clazz,methodID,args);
+#else
            RETVAL = (*env)->CallStaticShortMethodA(env, clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1868,8 +2449,12 @@ CallStaticIntMethod(clazz,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           RETVAL = env->CallStaticIntMethodA(clazz,methodID,args);
+#else
            RETVAL = (*env)->CallStaticIntMethodA(env, clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1884,7 +2469,11 @@ CallStaticIntMethodA(clazz,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->CallStaticIntMethodA(clazz,methodID,args);
+#else
            RETVAL = (*env)->CallStaticIntMethodA(env, clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1899,8 +2488,12 @@ CallStaticLongMethod(clazz,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           RETVAL = env->CallStaticLongMethodA(clazz,methodID,args);
+#else
            RETVAL = (*env)->CallStaticLongMethodA(env, clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1915,7 +2508,11 @@ CallStaticLongMethodA(clazz,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->CallStaticLongMethodA(clazz,methodID,args);
+#else
            RETVAL = (*env)->CallStaticLongMethodA(env, clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1930,8 +2527,12 @@ CallStaticFloatMethod(clazz,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           RETVAL = env->CallStaticFloatMethodA(clazz,methodID,args);
+#else
            RETVAL = (*env)->CallStaticFloatMethodA(env, clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1946,7 +2547,11 @@ CallStaticFloatMethodA(clazz,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->CallStaticFloatMethodA(clazz,methodID,args);
+#else
            RETVAL = (*env)->CallStaticFloatMethodA(env, clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1961,8 +2566,12 @@ CallStaticDoubleMethod(clazz,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           RETVAL = env->CallStaticDoubleMethodA(clazz,methodID,args);
+#else
            RETVAL = (*env)->CallStaticDoubleMethodA(env, clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1977,7 +2586,11 @@ CallStaticDoubleMethodA(clazz,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->CallStaticDoubleMethodA(clazz,methodID,args);
+#else
            RETVAL = (*env)->CallStaticDoubleMethodA(env, clazz,methodID,args);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -1992,8 +2605,12 @@ CallStaticVoidMethod(cls,methodID,...)
        int                     argoff = $min_args;
     CODE:
        {
-           jvalue * args = makeargs(aTHX_ sig, &ST(argoff), items - argoff);
+           jvalue * args = makeargs(sig, &ST(argoff), items - argoff);
+#ifdef WIN32
+           env->CallStaticVoidMethodA(cls,methodID,args);
+#else
            (*env)->CallStaticVoidMethodA(env, cls,methodID,args);
+#endif
            RESTOREENV;
        }
 
@@ -2006,7 +2623,11 @@ CallStaticVoidMethodA(cls,methodID,args)
        jvalue *                args
     CODE:
        {
+#ifdef WIN32
+           env->CallStaticVoidMethodA(cls,methodID,args);
+#else
            (*env)->CallStaticVoidMethodA(env, cls,methodID,args);
+#endif
            RESTOREENV;
        }
 
@@ -2018,7 +2639,11 @@ GetStaticFieldID(clazz,name,sig)
        const char *            sig
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetStaticFieldID(clazz,name,sig);
+#else
            RETVAL = (*env)->GetStaticFieldID(env, clazz,name,sig);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -2032,7 +2657,11 @@ GetStaticObjectField(clazz,fieldID)
        char *                  sig = 0;
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetStaticObjectField(clazz,fieldID);
+#else
            RETVAL = (*env)->GetStaticObjectField(env, clazz,fieldID);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -2046,7 +2675,11 @@ GetStaticBooleanField(clazz,fieldID)
        char *                  sig = 0;
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetStaticBooleanField(clazz,fieldID);
+#else
            RETVAL = (*env)->GetStaticBooleanField(env, clazz,fieldID);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -2060,7 +2693,11 @@ GetStaticByteField(clazz,fieldID)
        char *                  sig = 0;
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetStaticByteField(clazz,fieldID);
+#else
            RETVAL = (*env)->GetStaticByteField(env, clazz,fieldID);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -2074,7 +2711,11 @@ GetStaticCharField(clazz,fieldID)
        char *                  sig = 0;
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetStaticCharField(clazz,fieldID);
+#else
            RETVAL = (*env)->GetStaticCharField(env, clazz,fieldID);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -2088,7 +2729,11 @@ GetStaticShortField(clazz,fieldID)
        char *                  sig = 0;
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetStaticShortField(clazz,fieldID);
+#else
            RETVAL = (*env)->GetStaticShortField(env, clazz,fieldID);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -2102,7 +2747,11 @@ GetStaticIntField(clazz,fieldID)
        char *                  sig = 0;
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetStaticIntField(clazz,fieldID);
+#else
            RETVAL = (*env)->GetStaticIntField(env, clazz,fieldID);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -2116,7 +2765,11 @@ GetStaticLongField(clazz,fieldID)
        char *                  sig = 0;
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetStaticLongField(clazz,fieldID);
+#else
            RETVAL = (*env)->GetStaticLongField(env, clazz,fieldID);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -2130,7 +2783,11 @@ GetStaticFloatField(clazz,fieldID)
        char *                  sig = 0;
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetStaticFloatField(clazz,fieldID);
+#else
            RETVAL = (*env)->GetStaticFloatField(env, clazz,fieldID);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -2144,7 +2801,11 @@ GetStaticDoubleField(clazz,fieldID)
        char *                  sig = 0;
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetStaticDoubleField(clazz,fieldID);
+#else
            RETVAL = (*env)->GetStaticDoubleField(env, clazz,fieldID);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -2159,7 +2820,11 @@ SetStaticObjectField(clazz,fieldID,value)
        jobject                 value
     CODE:
        {
+#ifdef WIN32
+         env->SetStaticObjectField(clazz,fieldID,value);
+#else
          (*env)->SetStaticObjectField(env, clazz,fieldID,value);
+#endif
            RESTOREENV;
        }
 
@@ -2172,7 +2837,11 @@ SetStaticBooleanField(clazz,fieldID,value)
        jboolean                value
     CODE:
        {
+#ifdef WIN32
+         env->SetStaticBooleanField(clazz,fieldID,value);
+#else
          (*env)->SetStaticBooleanField(env, clazz,fieldID,value);
+#endif
            RESTOREENV;
        }
 
@@ -2185,7 +2854,11 @@ SetStaticByteField(clazz,fieldID,value)
        jbyte                   value
     CODE:
        {
+#ifdef WIN32
+         env->SetStaticByteField(clazz,fieldID,value);
+#else
          (*env)->SetStaticByteField(env, clazz,fieldID,value);
+#endif
            RESTOREENV;
        }
 
@@ -2198,7 +2871,11 @@ SetStaticCharField(clazz,fieldID,value)
        jchar                   value
     CODE:
        {
+#ifdef WIN32
+         env->SetStaticCharField(clazz,fieldID,value);
+#else
          (*env)->SetStaticCharField(env, clazz,fieldID,value);
+#endif
            RESTOREENV;
        }
 
@@ -2211,7 +2888,11 @@ SetStaticShortField(clazz,fieldID,value)
        jshort                  value
     CODE:
        {
+#ifdef WIN32
+         env->SetStaticShortField(clazz,fieldID,value);
+#else
          (*env)->SetStaticShortField(env, clazz,fieldID,value);
+#endif
            RESTOREENV;
        }
 
@@ -2224,7 +2905,11 @@ SetStaticIntField(clazz,fieldID,value)
        jint                    value
     CODE:
        {
+#ifdef WIN32
+         env->SetStaticIntField(clazz,fieldID,value);
+#else
          (*env)->SetStaticIntField(env, clazz,fieldID,value);
+#endif
            RESTOREENV;
        }
 
@@ -2237,7 +2922,11 @@ SetStaticLongField(clazz,fieldID,value)
        jlong                   value
     CODE:
        {
+#ifdef WIN32
+         env->SetStaticLongField(clazz,fieldID,value);
+#else
          (*env)->SetStaticLongField(env, clazz,fieldID,value);
+#endif
            RESTOREENV;
        }
 
@@ -2250,7 +2939,11 @@ SetStaticFloatField(clazz,fieldID,value)
        jfloat                  value
     CODE:
        {
+#ifdef WIN32
+         env->SetStaticFloatField(clazz,fieldID,value);
+#else
          (*env)->SetStaticFloatField(env, clazz,fieldID,value);
+#endif
            RESTOREENV;
        }
 
@@ -2263,7 +2956,11 @@ SetStaticDoubleField(clazz,fieldID,value)
        jdouble                 value
     CODE:
        {
+#ifdef WIN32
+         env->SetStaticDoubleField(clazz,fieldID,value);
+#else
          (*env)->SetStaticDoubleField(env, clazz,fieldID,value);
+#endif
            RESTOREENV;
        }
 
@@ -2275,7 +2972,11 @@ NewString(unicode)
        const jchar *           unicode
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->NewString(unicode, unicode_len_);
+#else
            RETVAL = (*env)->NewString(env, unicode, unicode_len_);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -2287,7 +2988,11 @@ GetStringLength(str)
        jstring                 str
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetStringLength(str);
+#else
            RETVAL = (*env)->GetStringLength(env, str);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -2301,14 +3006,26 @@ GetStringChars(str)
        jsize                   RETVAL_len_ = NO_INIT;
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetStringChars(str,&isCopy);
+#else
            RETVAL = (*env)->GetStringChars(env, str,&isCopy);
+#endif
+#ifdef WIN32
+           RETVAL_len_ = env->GetStringLength(str);
+#else
            RETVAL_len_ = (*env)->GetStringLength(env, str);
+#endif
            RESTOREENV;
        }
     OUTPUT:
        RETVAL
     CLEANUP:
+#ifdef WIN32
+           env->ReleaseStringChars(str,RETVAL);
+#else
            (*env)->ReleaseStringChars(env, str,RETVAL);
+#endif
 
 jstring
 NewStringUTF(utf)
@@ -2316,7 +3033,11 @@ NewStringUTF(utf)
        const char *            utf
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->NewStringUTF(utf);
+#else
            RETVAL = (*env)->NewStringUTF(env, utf);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -2328,7 +3049,11 @@ GetStringUTFLength(str)
        jstring                 str
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetStringUTFLength(str);
+#else
            RETVAL = (*env)->GetStringUTFLength(env, str);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -2341,13 +3066,21 @@ GetStringUTFChars(str)
        jboolean                isCopy = NO_INIT;
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetStringUTFChars(str,&isCopy);
+#else
            RETVAL = (*env)->GetStringUTFChars(env, str,&isCopy);
+#endif
            RESTOREENV;
        }
     OUTPUT:
        RETVAL
     CLEANUP:
+#ifdef WIN32
+       env->ReleaseStringUTFChars(str, RETVAL);
+#else
        (*env)->ReleaseStringUTFChars(env, str, RETVAL);
+#endif
 
 
 jsize
@@ -2356,7 +3089,11 @@ GetArrayLength(array)
        jarray                  array
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetArrayLength(array);
+#else
            RETVAL = (*env)->GetArrayLength(env, array);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -2370,7 +3107,11 @@ NewObjectArray(len,clazz,init)
        jobject                 init
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->NewObjectArray(len,clazz,init);
+#else
            RETVAL = (*env)->NewObjectArray(env, len,clazz,init);
+#endif
            RESTOREENV;
        }
     OUTPUT: