This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Re-integrate mainline
authorNick Ing-Simmons <nik@tiuk.ti.com>
Sat, 18 Sep 1999 15:24:56 +0000 (15:24 +0000)
committerNick Ing-Simmons <nik@tiuk.ti.com>
Sat, 18 Sep 1999 15:24:56 +0000 (15:24 +0000)
Basic SvUTF8 stuff in headers, no functional changes yet.

p4raw-id: //depot/utfperl@4193

179 files changed:
Changes
Configure
INSTALL
MANIFEST
Porting/Glossary
Porting/config.sh
Porting/config_H
config_h.SH
configure.com
doio.c
dump.c
embed.h
embed.pl
embedvar.h
epoc/config.h
ext/B/B.pm
ext/B/B.xs
ext/B/B/Bblock.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 97% similarity]
ext/B/typemap
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/Devel/DProf/DProf.xs
ext/DynaLoader/DynaLoader_pm.PL
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/ODBM_File/ODBM_File.xs
ext/Opcode/Safe.pm
ext/POSIX/POSIX.xs
hints/irix_6.sh
hints/unicos.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/Exporter/Heavy.pm
lib/ExtUtils/MM_Unix.pm
lib/ExtUtils/MM_VMS.pm
lib/ExtUtils/MakeMaker.pm
lib/ExtUtils/typemap
lib/File/Spec/Functions.pm
lib/File/Spec/VMS.pm
lib/Pod/Functions.pm
lib/Time/Local.pm
lib/byte.pm [new file with mode: 0644]
lib/byte_heavy.pl [new file with mode: 0644]
lib/perl5db.pl
lib/unicode/ArabLink.pl
lib/unicode/ArabLnkGrp.pl
lib/unicode/ArabShap.txt [new file with mode: 0644]
lib/unicode/Bidirectional.pl
lib/unicode/Block.pl
lib/unicode/Blocks.txt [moved from lib/unicode/blocks.txt with 76% similarity, mode: 0644]
lib/unicode/Category.pl
lib/unicode/CombiningClass.pl
lib/unicode/CompExcl.txt [new file with mode: 0644]
lib/unicode/Decomposition.pl
lib/unicode/EAWidth.txt [new file with mode: 0644]
lib/unicode/In/ArabicPresentationForms-B.pl
lib/unicode/In/Specials.pl
lib/unicode/In/Tibetan.pl
lib/unicode/Index.txt [moved from lib/unicode/index2.txt with 68% similarity, mode: 0644]
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/Jamo-2.txt [moved from lib/unicode/jamo2.txt with 98% similarity, mode: 0644]
lib/unicode/JamoShort.pl
lib/unicode/LineBrk.txt [new file with mode: 0644]
lib/unicode/Names.txt [moved from lib/unicode/names2.txt with 55% similarity, mode: 0644]
lib/unicode/Props.txt [new file with mode: 0644]
lib/unicode/ReadMe.txt [new file with mode: 0644]
lib/unicode/SpecCase.txt [new file with mode: 0644]
lib/unicode/UnicodeData-Latest.txt
lib/unicode/arabshp.txt [deleted file]
lib/unicode/mktables.PL
lib/unicode/props2.txt [deleted file]
lib/unicode/readme.txt [deleted file]
malloc.c
objXSUB.h
opcode.h
opcode.pl
perl.c
perl.h
perlapi.c
pod/perldata.pod
pod/perldelta.pod
pod/perldiag.pod
pod/perlfunc.pod
pod/perlguts.pod
pod/perlhist.pod
pod/perllexwarn.pod
pod/perlsyn.pod
pp.c
pp_ctl.c
pp_hot.c
pp_sys.c
proto.h
regexec.c
sv.c
sv.h
t/io/dup.t
t/io/open.t
t/lib/bigfltpm.t [moved from t/lib/bigfloatpm.t with 100% similarity]
t/lib/db-btree.t
t/lib/syslfs.t
t/op/arith.t
t/op/groups.t
t/op/lfs.t
t/op/misc.t
t/op/pat.t
t/op/sprintf.t
t/pragma/locale.t
t/pragma/warn/op
t/pragma/warn/pp_hot
t/pragma/warn/sv
thrdvar.h
toke.c
utf8.h
vms/descrip_mms.template
vms/gen_shrfls.pl
vms/perly_c.vms
vms/subconfigure.com
vms/vms.c
vms/vmsish.h
win32/config_sh.PL

diff --git a/Changes b/Changes
index 6fd3e3c..264c56b 100644 (file)
--- a/Changes
+++ b/Changes
@@ -79,6 +79,558 @@ Version 5.005_62        Development release working toward 5.006
 ----------------
 
 ____________________________________________________________________________
+[  4188] By: jhi                                   on 1999/09/17  21:30:08
+        Log: Pick up the typo fix.
+     Branch: cfgperl
+         !> t/io/open.t
+____________________________________________________________________________
+[  4187] By: gsar                                  on 1999/09/17  21:13:55
+        Log: fix typo
+     Branch: perl
+          ! t/io/open.t
+____________________________________________________________________________
+[  4186] By: gsar                                  on 1999/09/17  20:57:29
+        Log: integrate cfgperl change
+     Branch: perl
+         !> vms/subconfigure.com
+____________________________________________________________________________
+[  4185] By: jhi                                   on 1999/09/17  20:46:41
+        Log: Re-apply applicable parts of #3993, #3994, and #3995.
+     Branch: cfgperl
+          ! vms/subconfigure.com
+____________________________________________________________________________
+[  4184] By: gsar                                  on 1999/09/17  20:26:02
+        Log: integrate cfgperl contents into mainline
+     Branch: perl
+         +> 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
+         !> (integrate 73 files)
+____________________________________________________________________________
+[  4183] By: jhi                                   on 1999/09/17  20:25:51
+        Log: Integrate with Sarathy.
+     Branch: cfgperl
+         !> configure.com ext/ByteLoader/byterun.h
+         !> ext/DynaLoader/DynaLoader_pm.PL lib/ExtUtils/MM_VMS.pm
+         !> lib/File/Spec/VMS.pm pod/perlhist.pod t/io/open.t
+         !> vms/descrip_mms.template vms/gen_shrfls.pl vms/perly_c.vms
+         !> vms/perly_h.vms vms/subconfigure.com vms/vms.c vms/vmsish.h
+____________________________________________________________________________
+[  4182] By: gsar                                  on 1999/09/17  20:16:28
+        Log: integrate vmsperl contents into mainline (where VMS files conflicted,
+             vmsperl contents have prevailed)
+     Branch: perl
+         !> configure.com ext/ByteLoader/byterun.h
+         !> ext/DynaLoader/DynaLoader_pm.PL lib/ExtUtils/MM_VMS.pm
+         !> lib/File/Spec/VMS.pm t/io/open.t vms/descrip_mms.template
+         !> vms/gen_shrfls.pl vms/perly_c.vms vms/perly_h.vms
+         !> vms/subconfigure.com vms/vms.c vms/vmsish.h
+____________________________________________________________________________
+[  4181] By: jhi                                   on 1999/09/17  20:12:37
+        Log: From: Michael G Schwern <schwern@pobox.com>
+             To: perl5-porters@perl.org
+             Subject: [PATCH 5.005_60 lib/Exporter/Heavy.pm] export_to_level()
+             Date: Thu, 19 Aug 1999 21:30:01 -0400
+             Message-ID: <19990819213001.A22512@athens.aocn.com>
+     Branch: cfgperl
+          ! lib/Exporter/Heavy.pm
+____________________________________________________________________________
+[  4180] By: gsar                                  on 1999/09/17  20:11:00
+        Log: perlhist additions
+     Branch: perl
+          ! pod/perlhist.pod
+____________________________________________________________________________
+[  4179] By: jhi                                   on 1999/09/17  20:08:00
+        Log: The change #4176 should've undone only the test, not the code patch.
+     Branch: cfgperl
+          ! doio.c
+____________________________________________________________________________
+[  4178] By: jhi                                   on 1999/09/17  20:06:08
+        Log: From: Ian Phillipps <ian@dial.pipex.com>
+             To: Hans GINZEL <hgin2088@mail.kolej.mff.cuni.cz>, perl5-porters@perl.org
+             Subject: [PATCH 5.005_59] Re: [ID 19990820.007] Small typo in perlsyn.pod
+             Date: Sat, 21 Aug 1999 12:36:12 +0100
+             Message-ID: <19990821123612.A9955@homer.diplex.co.uk>
+     Branch: cfgperl
+          ! pod/perlsyn.pod
+____________________________________________________________________________
+[  4177] By: jhi                                   on 1999/09/17  20:00:19
+        Log: More descriptive names for operators.
+             
+             From: Michael G Schwern <schwern@pobox.com>
+             To: Ilya Zakharevich <ilya@math.ohio-state.edu>
+             Cc: perl5-porters@perl.org
+             Subject: Re: [ID 19990817.009] [BUG 5.005_60 & 5.005_03] == reported as eq in
+             Date: Tue, 17 Aug 1999 18:35:45 -0400
+             Message-ID: <19990817183545.A23073@toldyouso.com>
+             
+             From: Michael G Schwern <schwern@pobox.com>
+             To: perl5-porters@perl.org
+             Subject: [PATCH 5.005_60 opcode.pl and friends] Improved opcode descriptions
+             Date: Wed, 18 Aug 1999 03:53:38 -0400
+             Message-ID: <19990818035337.A31505@athens.aocn.com>
+     Branch: cfgperl
+          ! opcode.h opcode.pl pp.sym pp_proto.h sv.c t/op/misc.t
+          ! t/pragma/warn/op t/pragma/warn/sv
+____________________________________________________________________________
+[  4176] By: jhi                                   on 1999/09/17  18:19:18
+        Log: Take away the infamous io/dup.t #7.
+             It seems there simply is no way to portably
+             "flush" an input file handle.
+     Branch: cfgperl
+          ! doio.c t/io/dup.t
+____________________________________________________________________________
+[  4175] By: jhi                                   on 1999/09/17  14:45:08
+        Log: From: Barrie Slaymaker <barries@slaysys.com>
+             To: perl5-porters@perl.org
+             Subject: [PATCH 5.005_61] Benchmark: screwed patch format, try this instead
+             Date: Fri, 17 Sep 1999 11:16:48 -0400
+             Message-Id: <199909171516.LAA30887@jester.slaysys.com>
+     Branch: cfgperl
+          ! lib/Benchmark.pm
+____________________________________________________________________________
+[  4174] By: jhi                                   on 1999/09/17  14:07:16
+        Log: UNICOS does support large files but doesn't support sparse files
+             so we cannot easily test for large file support.
+     Branch: cfgperl
+          ! t/lib/syslfs.t t/op/lfs.t
+____________________________________________________________________________
+[  4173] By: jhi                                   on 1999/09/17  14:03:44
+        Log: UNICOS has sloppy division/modulo for floating point numbers.
+     Branch: cfgperl
+          ! t/op/arith.t
+____________________________________________________________________________
+[  4172] By: jhi                                   on 1999/09/17  13:47:49
+        Log: Portable blocksize (replaces #4171).
+     Branch: cfgperl
+          ! t/lib/syslfs.t t/op/lfs.t
+____________________________________________________________________________
+[  4171] By: jhi                                   on 1999/09/17  13:08:54
+        Log: (replaced by #4172)
+     Branch: cfgperl
+          ! t/lib/syslfs.t t/op/lfs.t
+____________________________________________________________________________
+[  4170] By: jhi                                   on 1999/09/17  12:59:11
+        Log: Detypo #4169.
+     Branch: cfgperl
+          ! t/lib/syslfs.t t/op/lfs.t
+____________________________________________________________________________
+[  4169] By: jhi                                   on 1999/09/17  12:16:34
+        Log: Diagnose possible quota limits.
+     Branch: cfgperl
+          ! t/lib/syslfs.t t/op/lfs.t
+____________________________________________________________________________
+[  4168] By: jhi                                   on 1999/09/17  12:10:43
+        Log: UNICOS doesn't have getpgid().  Or, at least 9.0.1ai
+             doesn't have one that wouldn't cause SIGSYS.  UNICOS
+             does have getpgrp(void) so Perl getpgrp() is happy.
+     Branch: cfgperl
+          ! hints/unicos.sh
+____________________________________________________________________________
+[  4167] By: jhi                                   on 1999/09/17  11:49:30
+        Log: Filesystem quotas may stop you from using large files.
+     Branch: cfgperl
+          ! pod/perldelta.pod t/lib/syslfs.t t/op/lfs.t
+____________________________________________________________________________
+[  4166] By: jhi                                   on 1999/09/17  11:36:01
+        Log: Too strict pattern for parsing group lists.
+     Branch: cfgperl
+          ! t/op/groups.t
+____________________________________________________________________________
+[  4165] By: jhi                                   on 1999/09/17  09:06:18
+        Log: Configure maintenance. It's sigaction.sa_flags
+             and the Glossary regen'ed.
+     Branch: cfgperl
+          ! Configure Porting/Glossary Porting/config.sh Porting/config_H
+          ! config_h.SH
+     Branch: metaconfig
+          ! U/compline/d_sigaction.U
+____________________________________________________________________________
+[  4164] By: jhi                                   on 1999/09/15  06:57:51
+        Log: Integrate with Sarathy.
+     Branch: cfgperl
+         +> 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
+         !> Changes MANIFEST embed.h embed.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
+         !> lib/File/Spec/Functions.pm pod/perlhist.pod regexec.c
+         !> t/op/pat.t
+____________________________________________________________________________
+[  4163] By: gsar                                  on 1999/09/15  05:17:27
+        Log: add :ALL export tag (from Chris Nandor <pudge@pobox.com>)
+     Branch: perl
+          ! lib/File/Spec/Functions.pm
+____________________________________________________________________________
+[  4162] By: gsar                                  on 1999/09/15  05:09:14
+        Log: addendum to change#4136 (from Robin Barker <rmb1@cise.npl.co.uk>)
+     Branch: perl
+          ! Changes embed.h embed.pl
+____________________________________________________________________________
+[  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
index 4b55fa6..0d497fd 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 Fri Sep 17 12:06:13 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
+
 
 
 
@@ -10121,6 +10185,8 @@ if set sigaction val -f d_sigaction; eval $csym; $val; then
 int main()
 {
     struct sigaction act, oact;
+    act.sa_flags = 0;
+    oact.sa_handler = 0;
 }
 EOP
        set try
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 53eebab..06135b8 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
@@ -862,15 +872,20 @@ lib/unicode/To/Lower.pl                           Unicode character database
 lib/unicode/To/Title.pl                                Unicode character database
 lib/unicode/To/Upper.pl                                Unicode character database
 lib/unicode/UnicodeData-Latest.txt             Unicode character database
-lib/unicode/arabshp.txt                                Unicode character database
-lib/unicode/blocks.txt                         Unicode character database
-lib/unicode/index2.txt                         Unicode character database
-lib/unicode/jamo2.txt                          Unicode character database
+lib/unicode/ArabShap.txt                       Unicode character database
+lib/unicode/Blocks.txt                         Unicode character database
+lib/unicode/CompExcl.txt                       Unicode character database
+lib/unicode/EAWidth.txt                                Unicode character database
+lib/unicode/Index.txt                          Unicode character database
+lib/unicode/Jamo-2.txt                         Unicode character database
+lib/unicode/LineBrk.txt                                Unicode character database
 lib/unicode/mktables.PL                                Unicode character database generator
-lib/unicode/names2.txt                         Unicode character database
-lib/unicode/props2.txt                         Unicode character database
-lib/unicode/readme.txt                         Unicode character database info
+lib/unicode/Names.txt                          Unicode character database
+lib/unicode/Props.txt                          Unicode character database
+lib/unicode/ReadMe.txt                         Unicode character database info
+lib/unicode/SpecCase.txt                       Unicode character database
 lib/unicode/syllables.txt                      Unicode character database
+lib/unicode/Unicode.html                       Unicode character database
 lib/utf8.pm                                    Pragma to control Unicode support
 lib/utf8_heavy.pl                              Support routines for utf8 pragma
 lib/validate.pl                Perl library supporting wholesale file mode validation
@@ -1123,7 +1138,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
index 2f4f23d..30c75b6 100644 (file)
@@ -1851,7 +1851,7 @@ i_poll (i_poll.U):
        whether a C program should include <poll.h>.
 
 i_pthread (i_pthread.U):
-       This variable conditionally defines the I_PTHREADEAD symbol,
+       This variable conditionally defines the I_PTHREAD symbol,
        and indicates whether a C program should include <pthread.h>.
 
 i_pwd (i_pwd.U):
index b0ab9f2..d0d5b2a 100644 (file)
@@ -8,7 +8,7 @@
 
 # Package name      : perl5
 # Source directory  : .
-# Configuration time: Mon Aug 16 22:37:31 EET DST 1999
+# Configuration time: Fri Sep 17 12:08:19 EET DST 1999
 # Configured by     : jhi
 # Target system     : osf1 alpha.hut.fi v4.0 878 alpha 
 
@@ -30,10 +30,10 @@ afs='false'
 alignbytes='8'
 ansi2knr=''
 aphostname=''
-apiversion='5.00560'
+apiversion='5.00561'
 ar='ar'
-archlib='/opt/perl/lib/5.00560/alpha-dec_osf-thread'
-archlibexp='/opt/perl/lib/5.00560/alpha-dec_osf-thread'
+archlib='/opt/perl/lib/5.00561/alpha-dec_osf-thread'
+archlibexp='/opt/perl/lib/5.00561/alpha-dec_osf-thread'
 archname64=''
 archname='alpha-dec_osf-thread'
 archobjs=''
@@ -51,12 +51,12 @@ castflags='0'
 cat='cat'
 cc='cc'
 cccdlflags=' '
-ccdlflags='  -Wl,-rpath,/opt/perl/lib/5.00560/alpha-dec_osf-thread/CORE'
+ccdlflags='  -Wl,-rpath,/opt/perl/lib/5.00561/alpha-dec_osf-thread/CORE'
 ccflags='-pthread -std -DLANGUAGE_C'
 ccsymbols='__LANGUAGE_C__=1 _LONGLONG=1 LANGUAGE_C=1 SYSTYPE_BSD=1'
 cf_by='jhi'
 cf_email='yourname@yourhost.yourplace.com'
-cf_time='Mon Aug 16 22:37:31 EET DST 1999'
+cf_time='Fri Sep 17 12:08:19 EET DST 1999'
 chgrp=''
 chmod=''
 chown=''
@@ -470,15 +470,15 @@ i_vfork='undef'
 ignore_versioned_solibs=''
 incpath=''
 inews=''
-installarchlib='/opt/perl/lib/5.00560/alpha-dec_osf-thread'
+installarchlib='/opt/perl/lib/5.00561/alpha-dec_osf-thread'
 installbin='/opt/perl/bin'
 installman1dir='/opt/perl/man/man1'
 installman3dir='/opt/perl/man/man3'
 installprefix='/opt/perl'
 installprefixexp='/opt/perl'
-installprivlib='/opt/perl/lib/5.00560'
+installprivlib='/opt/perl/lib/5.00561'
 installscript='/opt/perl/bin'
-installsitearch='/opt/perl/lib/site_perl/5.00560/alpha-dec_osf-thread'
+installsitearch='/opt/perl/lib/site_perl/5.00561/alpha-dec_osf-thread'
 installsitelib='/opt/perl/lib/site_perl'
 installstyle='lib'
 installusrbinperl='define'
@@ -573,8 +573,8 @@ pmake=''
 pr=''
 prefix='/opt/perl'
 prefixexp='/opt/perl'
-privlib='/opt/perl/lib/5.00560'
-privlibexp='/opt/perl/lib/5.00560'
+privlib='/opt/perl/lib/5.00561'
+privlibexp='/opt/perl/lib/5.00561'
 prototype='define'
 ptrsize='8'
 randbits='48'
@@ -618,8 +618,8 @@ sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "EMT", "FPE"
 sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 6 6 16 20 23 23 23 29 48 '
 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 6, 6, 16, 20, 23, 23, 23, 29, 48, 0'
 signal_t='void'
-sitearch='/opt/perl/lib/site_perl/5.00560/alpha-dec_osf-thread'
-sitearchexp='/opt/perl/lib/site_perl/5.00560/alpha-dec_osf-thread'
+sitearch='/opt/perl/lib/site_perl/5.00561/alpha-dec_osf-thread'
+sitearchexp='/opt/perl/lib/site_perl/5.00561/alpha-dec_osf-thread'
 sitelib='/opt/perl/lib/site_perl'
 sitelibexp='/opt/perl/lib/site_perl'
 siteprefix='/opt/perl'
@@ -649,7 +649,7 @@ stdio_ptr='((fp)->_ptr)'
 stdio_stream_array='_iob'
 strings='/usr/include/string.h'
 submit=''
-subversion='60'
+subversion='61'
 sysman='/usr/man/man1'
 tail=''
 tar=''
@@ -686,7 +686,7 @@ vendorlib=''
 vendorlibexp=''
 vendorprefix=''
 vendorprefixexp=''
-version='5.00560'
+version='5.00561'
 vi=''
 voidflags='15'
 xlibpth='/usr/lib/386 /lib/386'
@@ -708,7 +708,7 @@ config_arg9='-Dmyhostname=yourhost'
 config_arg10='-dE'
 PERL_REVISION=5
 PERL_VERSION=5
-PERL_SUBVERSION=60
+PERL_SUBVERSION=61
 CONFIGDOTSH=true
 # Variables propagated from previous config.sh file.
 pp_sys_cflags='ccflags="$ccflags -DNO_EFF_ONLY_OK"'
index 4aca318..bdf4aee 100644 (file)
@@ -17,7 +17,7 @@
 /*
  * Package name      : perl5
  * Source directory  : .
- * Configuration time: Mon Aug 16 22:37:31 EET DST 1999
+ * Configuration time: Fri Sep 17 12:08:19 EET DST 1999
  * Configured by     : jhi
  * Target system     : osf1 alpha.hut.fi v4.0 878 alpha 
  */
  *     This symbol contains the ~name expanded version of ARCHLIB, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define ARCHLIB "/opt/perl/lib/5.00560/alpha-dec_osf-thread"           /**/
-#define ARCHLIB_EXP "/opt/perl/lib/5.00560/alpha-dec_osf-thread"               /**/
+#define ARCHLIB "/opt/perl/lib/5.00561/alpha-dec_osf-thread"           /**/
+#define ARCHLIB_EXP "/opt/perl/lib/5.00561/alpha-dec_osf-thread"               /**/
 
 /* BIN:
  *     This symbol holds the path of the bin directory where the package will
  *     This symbol contains the ~name expanded version of PRIVLIB, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define PRIVLIB "/opt/perl/lib/5.00560"                /**/
-#define PRIVLIB_EXP "/opt/perl/lib/5.00560"            /**/
+#define PRIVLIB "/opt/perl/lib/5.00561"                /**/
+#define PRIVLIB_EXP "/opt/perl/lib/5.00561"            /**/
 
 /* SITEARCH:
  *     This symbol contains the name of the private library for this package.
  *     This symbol contains the ~name expanded version of SITEARCH, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define SITEARCH "/opt/perl/lib/site_perl/5.00560/alpha-dec_osf-thread"                /**/
-#define SITEARCH_EXP "/opt/perl/lib/site_perl/5.00560/alpha-dec_osf-thread"            /**/
+#define SITEARCH "/opt/perl/lib/site_perl/5.00561/alpha-dec_osf-thread"                /**/
+#define SITEARCH_EXP "/opt/perl/lib/site_perl/5.00561/alpha-dec_osf-thread"            /**/
 
 /* SITELIB:
  *     This symbol contains the name of the private library for this package.
  *     available directly to the user. Note that it may well be different from
  *     the preprocessor used to compile the C program.
  */
+/* CPPLAST:
+ *     This symbol is intended to be used along with CPPRUN in the same manner
+ *     symbol CPPMINUS is used with CPPSTDIN. It contains either "-" or "".
+ */
 #define CPPSTDIN "cppstdin"
 #define CPPMINUS ""
 #define CPPRUN "/usr/bin/cpp"
+#define CPPLAST ""
 
 /* HAS_ACCESS:
  *     This manifest constant lets the C program know that the access()
  *     so that it is safe even if used by a process with super-user
  *     privileges.
  */
+/* HAS_PHOSTNAME:
+ *     This symbol, if defined, indicates that the C program may use the
+ *     contents of PHOSTNAME as a command to feed to the popen() routine
+ *     to derive the host name.
+ */
 #define HAS_GETHOSTNAME        /**/
 #define HAS_UNAME              /**/
 #undef HAS_PHOSTNAME
  *     This symbol, if defined, indicates that <sys/uio.h> exists and
  *     should be included.
  */
+/* HAS_STRUCT_IOVEC:
+ *     This symbol, if defined, indicates that the struct iovec
+ *     to do scatter writes/gather reads is supported.
+ */
 #define        I_SYSUIO                /**/
+#define        HAS_STRUCT_IOVEC                /**/
 
 /* Free_t:
  *     This variable contains the return type of free().  It is usually
  */
 /*#define   I_MACH_CTHREADS    / **/
 
+/* I_PTHREAD:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include <pthread.h>.
+ */
+#define   I_PTHREAD    /**/
+
 /* USE_THREADS:
  *     This symbol, if defined, indicates that Perl should
  *     be built to use threads.
index e38e455..2f8a835 100644 (file)
@@ -1556,9 +1556,14 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un-
  *     available directly to the user. Note that it may well be different from
  *     the preprocessor used to compile the C program.
  */
+/* CPPLAST:
+ *     This symbol is intended to be used along with CPPRUN in the same manner
+ *     symbol CPPMINUS is used with CPPSTDIN. It contains either "-" or "".
+ */
 #define CPPSTDIN "$cppstdin"
 #define CPPMINUS "$cppminus"
 #define CPPRUN "$cpprun"
+#define CPPLAST "$cpplast"
 
 /* HAS_ACCESS:
  *     This manifest constant lets the C program know that the access()
@@ -1655,6 +1660,11 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un-
  *     so that it is safe even if used by a process with super-user
  *     privileges.
  */
+/* HAS_PHOSTNAME:
+ *     This symbol, if defined, indicates that the C program may use the
+ *     contents of PHOSTNAME as a command to feed to the popen() routine
+ *     to derive the host name.
+ */
 #$d_gethname HAS_GETHOSTNAME   /**/
 #$d_uname HAS_UNAME            /**/
 #$d_phostname HAS_PHOSTNAME
@@ -2070,7 +2080,12 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un-
  *     This symbol, if defined, indicates that <sys/uio.h> exists and
  *     should be included.
  */
+/* HAS_STRUCT_IOVEC:
+ *     This symbol, if defined, indicates that the struct iovec
+ *     to do scatter writes/gather reads is supported.
+ */
 #$i_sysuio     I_SYSUIO                /**/
+#$d_iovec_s    HAS_STRUCT_IOVEC                /**/
 
 /* Free_t:
  *     This variable contains the return type of free().  It is usually
@@ -2597,6 +2612,12 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un-
  */
 #$i_machcthr   I_MACH_CTHREADS /**/
 
+/* I_PTHREAD:
+ *     This symbol, if defined, indicates to the C program that it should
+ *     include <pthread.h>.
+ */
+#$i_pthread   I_PTHREAD        /**/
+
 /* USE_THREADS:
  *     This symbol, if defined, indicates that Perl should
  *     be built to use threads.
index 0f86983..96e8633 100644 (file)
@@ -113,6 +113,7 @@ $!
 $!: set up default values
 $ fastread=""
 $ reuseval="false"
+$ maniskip = "false"
 $ config_sh=""
 $ alldone=""
 $ error=""
@@ -187,6 +188,13 @@ $     gotopt = "t"
 $     P'i' = P'i' - "h"
 $     gotshortopt = "t"
 $   ENDIF
+$   IF (F$EXTRACT(0,1,P'i') .EQS. "m")
+$   THEN
+$     maniskip = "true"
+$     gotopt = "t"
+$     P'i' = P'i' - "m"
+$     gotshortopt = "t"
+$   ENDIF
 $   IF (F$EXTRACT(0,1,P'i') .EQS. "r")
 $   THEN
 $     reuseval = "true"
@@ -290,13 +298,14 @@ $!
 $ IF (error)
 $ THEN
 $   me = F$PARSE(me,,,"DIRECTORY")+ F$PARSE(me,,,"NAME")
-$   echo "Usage: @''me' [-dehrEKOSV] [-fconfig.sh] [-Dsymbol] [-Dsymbol=value]"
-$   echo "                [-Usymbol] [-Usymbol=]"
+$   echo "Usage: @''me' [-dehmrEKOSV] [-fconfig.sh] [-Dsymbol] [-Dsymbol=value]"
+$   echo "                [-Usymbol]  [-Usymbol=]"
 $   TYPE SYS$INPUT
  "-d" : use defaults for all answers.
  "-e" : go on without questioning past the production of config.sh.    *
  "-f" : specify an alternate default configuration file.
  "-h" : print this help message and exit (with an error status).
+ "-m" : skip the MANIFEST check to see that all files are present
  "-r" : reuse C symbols value if possible (skips costly nm extraction).*
  "-s" : silent mode, only echoes questions and essential information.
  -"D" : define symbol to have some value:                              *
@@ -420,8 +429,11 @@ $!
 $     OPEN/WRITE MISSING MISSING.
 $!change to "FALSE" if you wish to skip the manifest search 
 $!(which after all is rather slow in DCL :-)
-$     IF ("TRUE")      
+$     IF (maniskip)
 $     THEN
+$       echo "Skipping MANIFEST check as requested"
+$     ELSE
+$!
 $       OPEN/READ CONFIG 'manifestfound'
 $Read_loop_manifest:
 $       READ/END_OF_FILE = Done_manifest CONFIG line
@@ -1729,6 +1741,48 @@ $   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 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/doio.c b/doio.c
index 50870b2..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 *)PTR_CAST i;         /* ouch */
+       a = INT2PTR(char *,i);          /* ouch */
     }
     SETERRNO(0,0);
     switch (optype)
diff --git a/dump.c b/dump.c
index 182834e..7f1dba4 100644 (file)
--- a/dump.c
+++ b/dump.c
@@ -768,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)PTR_CAST SvANY(sv), (UV)PTR_CAST sv,
+                  PTR2UV(SvANY(sv)), PTR2UV(sv),
                   PL_dumpindent*level, "", (IV)SvREFCNT(sv),
                   PL_dumpindent*level, "");
 #else
@@ -933,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)PTR_CAST 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
@@ -946,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)PTR_CAST 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
@@ -976,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)PTR_CAST 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));
@@ -987,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)PTR_CAST 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)PTR_CAST 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
@@ -1004,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)PTR_CAST 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));
@@ -1033,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)PTR_CAST 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
@@ -1086,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)PTR_CAST  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));
@@ -1096,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)PTR_CAST 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
@@ -1143,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)PTR_CAST 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));
@@ -1177,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)PTR_CAST 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
@@ -1217,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)PTR_CAST outside
+                       PTR2IV(outside)
                        (!outside ? "null"
                         : CvANON(outside) ? "ANON"
                         : (outside == PL_main_cv) ? "MAIN"
@@ -1245,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)PTR_CAST GvGP(sv));
-       Perl_dump_indent(aTHX_ level, file, "    SV = 0x%" PERL_PRIx64 "\n", (IV)PTR_CAST 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)PTR_CAST GvIOp(sv));
-       Perl_dump_indent(aTHX_ level, file, "    FORM = 0x%" PERL_PRIx64 "  \n", (IV)PTR_CAST GvFORM(sv));
-       Perl_dump_indent(aTHX_ level, file, "    AV = 0x%" PERL_PRIx64 "\n", (IV)PTR_CAST GvAV(sv));
-       Perl_dump_indent(aTHX_ level, file, "    HV = 0x%" PERL_PRIx64 "\n", (IV)PTR_CAST GvHV(sv));
-       Perl_dump_indent(aTHX_ level, file, "    CV = 0x%" PERL_PRIx64 "\n", (IV)PTR_CAST 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));
@@ -1275,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)PTR_CAST IoIFP(sv));
-       Perl_dump_indent(aTHX_ level, file, "  OFP = 0x%" PERL_PRIx64 "\n", (IV)PTR_CAST IoOFP(sv));
-       Perl_dump_indent(aTHX_ level, file, "  DIRP = 0x%" PERL_PRIx64 "\n", (IV)PTR_CAST 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 ab68e0e..393ba3e 100644 (file)
--- a/embed.h
+++ b/embed.h
 #define sv_2mortal             Perl_sv_2mortal
 #define sv_2nv                 Perl_sv_2nv
 #define sv_2pv                 Perl_sv_2pv
+#define sv_2pvutf8             Perl_sv_2pvutf8
+#define sv_2pvbyte             Perl_sv_2pvbyte
 #define sv_2uv                 Perl_sv_2uv
 #define sv_iv                  Perl_sv_iv
 #define sv_uv                  Perl_sv_uv
 #define sv_nv                  Perl_sv_nv
 #define sv_pvn                 Perl_sv_pvn
+#define sv_pvutf8n             Perl_sv_pvutf8n
+#define sv_pvbyten             Perl_sv_pvbyten
 #define sv_true                        Perl_sv_true
 #define sv_add_arena           Perl_sv_add_arena
 #define sv_backoff             Perl_sv_backoff
 #define sv_pos_u2b             Perl_sv_pos_u2b
 #define sv_pos_b2u             Perl_sv_pos_b2u
 #define sv_pvn_force           Perl_sv_pvn_force
+#define sv_pvutf8n_force       Perl_sv_pvutf8n_force
+#define sv_pvbyten_force       Perl_sv_pvbyten_force
 #define sv_reftype             Perl_sv_reftype
 #define sv_replace             Perl_sv_replace
 #define sv_report_used         Perl_sv_report_used
 #define vdefault_protect       Perl_vdefault_protect
 #define reginitcolors          Perl_reginitcolors
 #define sv_2pv_nolen           Perl_sv_2pv_nolen
+#define sv_2pvutf8_nolen       Perl_sv_2pvutf8_nolen
+#define sv_2pvbyte_nolen       Perl_sv_2pvbyte_nolen
 #define sv_pv                  Perl_sv_pv
+#define sv_pvutf8              Perl_sv_pvutf8
+#define sv_pvbyte              Perl_sv_pvbyte
 #define sv_force_normal                Perl_sv_force_normal
 #define tmps_grow              Perl_tmps_grow
 #define sv_rvweaken            Perl_sv_rvweaken
 #define sv_2mortal(a)          Perl_sv_2mortal(aTHX_ a)
 #define sv_2nv(a)              Perl_sv_2nv(aTHX_ a)
 #define sv_2pv(a,b)            Perl_sv_2pv(aTHX_ a,b)
+#define sv_2pvutf8(a,b)                Perl_sv_2pvutf8(aTHX_ a,b)
+#define sv_2pvbyte(a,b)                Perl_sv_2pvbyte(aTHX_ a,b)
 #define sv_2uv(a)              Perl_sv_2uv(aTHX_ a)
 #define sv_iv(a)               Perl_sv_iv(aTHX_ a)
 #define sv_uv(a)               Perl_sv_uv(aTHX_ a)
 #define sv_nv(a)               Perl_sv_nv(aTHX_ a)
 #define sv_pvn(a,b)            Perl_sv_pvn(aTHX_ a,b)
+#define sv_pvutf8n(a,b)                Perl_sv_pvutf8n(aTHX_ a,b)
+#define sv_pvbyten(a,b)                Perl_sv_pvbyten(aTHX_ a,b)
 #define sv_true(a)             Perl_sv_true(aTHX_ a)
 #define sv_add_arena(a,b,c)    Perl_sv_add_arena(aTHX_ a,b,c)
 #define sv_backoff(a)          Perl_sv_backoff(aTHX_ a)
 #define sv_pos_u2b(a,b,c)      Perl_sv_pos_u2b(aTHX_ a,b,c)
 #define sv_pos_b2u(a,b)                Perl_sv_pos_b2u(aTHX_ a,b)
 #define sv_pvn_force(a,b)      Perl_sv_pvn_force(aTHX_ a,b)
+#define sv_pvutf8n_force(a,b)  Perl_sv_pvutf8n_force(aTHX_ a,b)
+#define sv_pvbyten_force(a,b)  Perl_sv_pvbyten_force(aTHX_ a,b)
 #define sv_reftype(a,b)                Perl_sv_reftype(aTHX_ a,b)
 #define sv_replace(a,b)                Perl_sv_replace(aTHX_ a,b)
 #define sv_report_used()       Perl_sv_report_used(aTHX)
 #define vdefault_protect(a,b,c)        Perl_vdefault_protect(aTHX_ a,b,c)
 #define reginitcolors()                Perl_reginitcolors(aTHX)
 #define sv_2pv_nolen(a)                Perl_sv_2pv_nolen(aTHX_ a)
+#define sv_2pvutf8_nolen(a)    Perl_sv_2pvutf8_nolen(aTHX_ a)
+#define sv_2pvbyte_nolen(a)    Perl_sv_2pvbyte_nolen(aTHX_ a)
 #define sv_pv(a)               Perl_sv_pv(aTHX_ a)
+#define sv_pvutf8(a)           Perl_sv_pvutf8(aTHX_ a)
+#define sv_pvbyte(a)           Perl_sv_pvbyte(aTHX_ a)
 #define sv_force_normal(a)     Perl_sv_force_normal(aTHX_ a)
 #define tmps_grow(a)           Perl_tmps_grow(aTHX_ a)
 #define sv_rvweaken(a)         Perl_sv_rvweaken(aTHX_ a)
 #define sv_2nv                 Perl_sv_2nv
 #define Perl_sv_2pv            CPerlObj::Perl_sv_2pv
 #define sv_2pv                 Perl_sv_2pv
+#define Perl_sv_2pvutf8                CPerlObj::Perl_sv_2pvutf8
+#define sv_2pvutf8             Perl_sv_2pvutf8
+#define Perl_sv_2pvbyte                CPerlObj::Perl_sv_2pvbyte
+#define sv_2pvbyte             Perl_sv_2pvbyte
 #define Perl_sv_2uv            CPerlObj::Perl_sv_2uv
 #define sv_2uv                 Perl_sv_2uv
 #define Perl_sv_iv             CPerlObj::Perl_sv_iv
 #define sv_nv                  Perl_sv_nv
 #define Perl_sv_pvn            CPerlObj::Perl_sv_pvn
 #define sv_pvn                 Perl_sv_pvn
+#define Perl_sv_pvutf8n                CPerlObj::Perl_sv_pvutf8n
+#define sv_pvutf8n             Perl_sv_pvutf8n
+#define Perl_sv_pvbyten                CPerlObj::Perl_sv_pvbyten
+#define sv_pvbyten             Perl_sv_pvbyten
 #define Perl_sv_true           CPerlObj::Perl_sv_true
 #define sv_true                        Perl_sv_true
 #define Perl_sv_add_arena      CPerlObj::Perl_sv_add_arena
 #define sv_pos_b2u             Perl_sv_pos_b2u
 #define Perl_sv_pvn_force      CPerlObj::Perl_sv_pvn_force
 #define sv_pvn_force           Perl_sv_pvn_force
+#define Perl_sv_pvutf8n_force  CPerlObj::Perl_sv_pvutf8n_force
+#define sv_pvutf8n_force       Perl_sv_pvutf8n_force
+#define Perl_sv_pvbyten_force  CPerlObj::Perl_sv_pvbyten_force
+#define sv_pvbyten_force       Perl_sv_pvbyten_force
 #define Perl_sv_reftype                CPerlObj::Perl_sv_reftype
 #define sv_reftype             Perl_sv_reftype
 #define Perl_sv_replace                CPerlObj::Perl_sv_replace
 #define reginitcolors          Perl_reginitcolors
 #define Perl_sv_2pv_nolen      CPerlObj::Perl_sv_2pv_nolen
 #define sv_2pv_nolen           Perl_sv_2pv_nolen
+#define Perl_sv_2pvutf8_nolen  CPerlObj::Perl_sv_2pvutf8_nolen
+#define sv_2pvutf8_nolen       Perl_sv_2pvutf8_nolen
+#define Perl_sv_2pvbyte_nolen  CPerlObj::Perl_sv_2pvbyte_nolen
+#define sv_2pvbyte_nolen       Perl_sv_2pvbyte_nolen
 #define Perl_sv_pv             CPerlObj::Perl_sv_pv
 #define sv_pv                  Perl_sv_pv
+#define Perl_sv_pvutf8         CPerlObj::Perl_sv_pvutf8
+#define sv_pvutf8              Perl_sv_pvutf8
+#define Perl_sv_pvbyte         CPerlObj::Perl_sv_pvbyte
+#define sv_pvbyte              Perl_sv_pvbyte
 #define Perl_sv_force_normal   CPerlObj::Perl_sv_force_normal
 #define sv_force_normal                Perl_sv_force_normal
 #define Perl_tmps_grow         CPerlObj::Perl_tmps_grow
  */
 
 #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 5f0711f..21042c1 100755 (executable)
--- a/embed.pl
+++ b/embed.pl
@@ -452,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)
@@ -1578,11 +1578,15 @@ p       |IV     |sv_2iv         |SV* sv
 p      |SV*    |sv_2mortal     |SV* sv
 p      |NV     |sv_2nv         |SV* sv
 p      |char*  |sv_2pv         |SV* sv|STRLEN* lp
+p      |char*  |sv_2pvutf8     |SV* sv|STRLEN* lp
+p      |char*  |sv_2pvbyte     |SV* sv|STRLEN* lp
 p      |UV     |sv_2uv         |SV* sv
 p      |IV     |sv_iv          |SV* sv
 p      |UV     |sv_uv          |SV* sv
 p      |NV     |sv_nv          |SV* sv
 p      |char*  |sv_pvn         |SV *sv|STRLEN *len
+p      |char*  |sv_pvutf8n     |SV *sv|STRLEN *len
+p      |char*  |sv_pvbyten     |SV *sv|STRLEN *len
 p      |I32    |sv_true        |SV *sv
 p      |void   |sv_add_arena   |char* ptr|U32 size|U32 flags
 p      |int    |sv_backoff     |SV* sv
@@ -1626,6 +1630,8 @@ p |char*  |sv_peek        |SV* sv
 p      |void   |sv_pos_u2b     |SV* sv|I32* offsetp|I32* lenp
 p      |void   |sv_pos_b2u     |SV* sv|I32* offsetp
 p      |char*  |sv_pvn_force   |SV* sv|STRLEN* lp
+p      |char*  |sv_pvutf8n_force|SV* sv|STRLEN* lp
+p      |char*  |sv_pvbyten_force|SV* sv|STRLEN* lp
 p      |char*  |sv_reftype     |SV* sv|int ob
 p      |void   |sv_replace     |SV* sv|SV* nsv
 p      |void   |sv_report_used
@@ -1653,10 +1659,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
@@ -1754,7 +1760,11 @@ p        |void*  |default_protect|int *excpt|protect_body_t body|...
 p      |void*  |vdefault_protect|int *excpt|protect_body_t body|va_list *args
 p      |void   |reginitcolors
 p      |char*  |sv_2pv_nolen   |SV* sv
+p      |char*  |sv_2pvutf8_nolen|SV* sv
+p      |char*  |sv_2pvbyte_nolen|SV* sv
 p      |char*  |sv_pv          |SV *sv
+p      |char*  |sv_pvutf8      |SV *sv
+p      |char*  |sv_pvbyte      |SV *sv
 p      |void   |sv_force_normal|SV *sv
 p      |void   |tmps_grow      |I32 n
 p      |SV*    |sv_rvweaken    |SV *sv
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 3f9808a..0ff42e2 100644 (file)
  *     This symbol contains the ~name expanded version of ARCHLIB, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define ARCHLIB "/perl/lib/5.00560/epoc"               /**/
-#define ARCHLIB_EXP "/perl/lib/5.00560/epoc"           /**/
+#define ARCHLIB "/perl/lib/5.00562/epoc"               /**/
+#define ARCHLIB_EXP "/perl/lib/5.00562/epoc"           /**/
 
 /* DLSYM_NEEDS_UNDERSCORE:
  *     This symbol, if defined, indicates that we need to prepend an
  */
 /*#define HAS_WRITEV           /**/
 
-/* HAS_DBMINIT64:
- *     This symbol, if defined, indicates that the dbminit64 routine is
- *     available to open dbm files larger than 2 gigabytes.
- */
-/* HAS_DBMCLOSE64:
- *     This symbol, if defined, indicates that the dbmclose64 routine is
- *     available to close dbm files larger than 2 gigabytes.
- */
-/* HAS_FETCH64:
- *     This symbol, if defined, indicates that the fetch64 routine is
- *     available to fetch from dbm files larger than 2 gigabytes.
- */
-/* HAS_STORE64:
- *     This symbol, if defined, indicates that the store64 routine is
- *     available to store to dbm files larger than 2 gigabytes.
- */
-/* HAS_DELETE64:
- *     This symbol, if defined, indicates that the delete64 routine is
- *     available to delete from dbm files larger than 2 gigabytes.
- */
-/* HAS_FIRSTKEY64:
- *     This symbol, if defined, indicates that the firstkey64 routine is
- *     available to firstkey in dbm files larger than 2 gigabytes.
- */
-/* HAS_NEXTKEY64:
- *     This symbol, if defined, indicates that the nextkey64 routine is
- *     available to nextkey in dbm files larger than 2 gigabytes.
- */
-/*#define   HAS_DBMINIT64      / **/
-/*#define  HAS_DBMCLOSE64      / **/
-/*#define     HAS_FETCH64              / **/
-/*#define     HAS_STORE64              / **/
-/*#define    HAS_DELETE64              / **/
-/*#define  HAS_FIRSTKEY64      / **/
-/*#define   HAS_NEXTKEY64      / **/
-
 /* USE_DYNAMIC_LOADING:
  *     This symbol, if defined, indicates that dynamic loading of
  *     some sort is available.
  */
 /*#define INSTALL_USR_BIN_PERL /**/
 
-/* HAS_FSTAT64:
- *     This symbol, if defined, indicates that the fstat64 routine is
- *     available to stat files (fds) larger than 2 gigabytes.
- */
-/* HAS_FTRUNCATE64:
- *     This symbol, if defined, indicates that the ftruncate64 routine is
- *     available to tell files larger than 2 gigabytes.
- */
-/* HAS_LSEEK64:
- *     This symbol, if defined, indicates that the lseek64 routine is
- *     available to seek files larger than 2 gigabytes.
- */
-/* HAS_LSTAT64:
- *     This symbol, if defined, indicates that the lstat64 routine is
- *     available to stat files (symlinks) larger than 2 gigabytes.
- */
-/* HAS_OPEN64:
- *     This symbol, if defined, indicates that the open64 routine is
- *     available to open files larger than 2 gigabytes.
- */
-/* HAS_OPENDIR64:
- *     This symbol, if defined, indicates that the opendir64 routine is
- *     available to opendir files larger than 2 gigabytes.
- */
-/* HAS_READDIR64:
- *     This symbol, if defined, indicates that the readdir64 routine is
- *     available to readdir files larger than 2 gigabytes.
- */
-/* HAS_SEEKDIR64:
- *     This symbol, if defined, indicates that the seekdir64 routine is
- *     available to seekdir files larger than 2 gigabytes.
- */
-/* HAS_STAT64:
- *     This symbol, if defined, indicates that the stat64 routine is
- *     available to stat files larger than 2 gigabytes.
- */
-/* HAS_TELLDIR64:
- *     This symbol, if defined, indicates that the telldir64 routine is
- *     available to telldir files larger than 2 gigabytes.
- */
-/* HAS_TRUNCATE64:
- *     This symbol, if defined, indicates that the truncate64 routine is
- *     available to truncate files larger than 2 gigabytes.
- */
-/* HAS_OFF64_T:
- *     This symbol will be defined if the C compiler supports off64_t.
- */
-/* HAS_STRUCT_DIRENT64:
- *     This symbol will be defined if the C compiler supports struct dirent64.
- */
-/*#define     HAS_FSTAT64              / **/
-/*#define HAS_FTRUNCATE64      / **/
-/*#define     HAS_LSEEK64              / **/
-/*#define     HAS_LSTAT64              / **/
-/*#define      HAS_OPEN64              / **/
-/*#define   HAS_OPENDIR64      / **/
-/*#define   HAS_READDIR64      / **/
-/*#define   HAS_SEEKDIR64      / **/
-/*#define      HAS_STAT64              / **/
-/*#define   HAS_TELLDIR64      / **/
-/*#define  HAS_TRUNCATE64      / **/
-/*#define      HAS_OFF64_T     / **/
-/*#define   HAS_STRUCT_DIRENT64        / **/
-
 /* PRIVLIB:
  *     This symbol contains the name of the private library for this package.
  *     The library is private in the sense that it needn't be in anyone's
  *     This symbol contains the ~name expanded version of PRIVLIB, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define PRIVLIB "/perl/lib/5.00560"            /**/
-#define PRIVLIB_EXP "/perl/lib/5.00560"                /**/
+#define PRIVLIB "/perl/lib/5.00562"            /**/
+#define PRIVLIB_EXP "/perl/lib/5.00562"                /**/
 
 /* SELECT_MIN_BITS:
  *     This symbol holds the minimum number of bits operated by select.
  *     This symbol contains the ~name expanded version of SITEARCH, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define SITEARCH "/perl/lib/site_perl/5.00556/epoc"            /**/
-#define SITEARCH_EXP "/perl/lib/site_perl/5.00560/epoc"                /**/
+#define SITEARCH "/perl/lib/site_perl/5.00562/epoc"            /**/
+#define SITEARCH_EXP "/perl/lib/site_perl/5.00562/epoc"                /**/
 
 /* SITELIB:
  *     This symbol contains the name of the private library for this package.
  *     This symbol contains the ~name expanded version of SITELIB, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define SITELIB "/perl/lib/site_perl/5.00560"          /**/
-#define SITELIB_EXP "/perl/lib/site_perl/5.00560"              /**/
+#define SITELIB "/perl/lib/site_perl/5.00562"          /**/
+#define SITELIB_EXP "/perl/lib/site_perl/5.00562"              /**/
 
 /* STARTPERL:
  *     This variable contains the string to put in front of a perl
  */
 #define STARTPERL "#!/opt/perl/bin/perl"               /**/
 
-/* HAS_FGETPOS64:
- *     This symbol, if defined, indicates that the fgetpos64 routine is
- *     available to getpos files larger than 2 gigabytes.
- */
-/* HAS_FOPEN64:
- *     This symbol, if defined, indicates that the fopen64 routine is
- *     available to open files larger than 2 gigabytes.
- */
-/* HAS_FREOPEN64:
- *     This symbol, if defined, indicates that the freopen64 routine is
- *     available to reopen files larger than 2 gigabytes.
- */
-/* HAS_FSEEK64:
- *     This symbol, if defined, indicates that the fseek64 routine is
- *     available to seek files larger than 2 gigabytes.
- */
-/* HAS_FSEEKO64:
- *     This symbol, if defined, indicates that the fseeko64 routine is
- *     available to seek files larger than 2 gigabytes.
- */
-/* HAS_FSETPOS64:
- *     This symbol, if defined, indicates that the fsetpos64 routine is
- *     available to setpos files larger than 2 gigabytes.
- */
-/* HAS_FTELL64:
- *     This symbol, if defined, indicates that the ftell64 routine is
- *     available to tell files larger than 2 gigabytes.
- */
-/* HAS_FTELLO64:
- *     This symbol, if defined, indicates that the ftello64 routine is
- *     available to tell files larger than 2 gigabytes.
- */
-/* HAS_TMPFILE64:
- *     This symbol, if defined, indicates that the tmpfile64 routine is
- *     available to tmpfile files larger than 2 gigabytes.
- */
-/*#define   HAS_FGETPOS64      / **/
-/*#define     HAS_FOPEN64              / **/
-/*#define   HAS_FREOPEN64      / **/
-/*#define     HAS_FSEEK64              / **/
-/*#define    HAS_FSEEKO64              / **/
-/*#define   HAS_FSETPOS64      / **/
-/*#define     HAS_FTELL64              / **/
-/*#define    HAS_FTELLO64              / **/
-/*#define   HAS_TMPFILE64      / **/
-
 /* HAS_STDIO_STREAM_ARRAY:
  *     This symbol, if defined, tells that there is an array
  *     holding the stdio streams.
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 ad3d008..2d6145d 100644 (file)
@@ -202,7 +202,7 @@ make_sv_object(pTHX_ SV *arg, SV *sv)
     }
     if (!type) {
        type = svclassnames[SvTYPE(sv)];
-       iv = (IV)PTR_CAST 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)PTR_CAST 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*)PTR_CAST 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)PTR_CAST 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)PTR_CAST 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)PTR_CAST root);
+                    PTR2IV(root));
        }
        else {
-           sv_setiv(newSVrv(ST(0), cc_opclassname(aTHX_ root)), (IV)PTR_CAST root);
+           sv_setiv(newSVrv(ST(0), cc_opclassname(aTHX_ root)), PTR2IV(root));
        }
 
 B::OP
@@ -1153,7 +1153,7 @@ void
 CvXSUB(cv)
        B::CV   cv
     CODE:
-       ST(0) = sv_2mortal(newSViv((IV)PTR_CAST 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 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 97%
rename from ext/B/defsubs.h.PL
rename to ext/B/defsubs_h.PL
index 2129c8c..8dfa3a5 100644 (file)
@@ -4,6 +4,7 @@
 #!perl
 my ($out) = __FILE__ =~ /(^.*)\.PL/;
 if ($^O eq 'VMS') { ($out) = __FILE__ =~ /^(.+)_PL$/i; }
+$out =~ s/_h$/.h/;
 open(OUT,">$out") || die "Cannot open $file:$!";
 print "Extracting $out . . .\n";
 foreach my $const (qw(AVf_REAL 
index 5f6af0f..febadf8 100644 (file)
@@ -35,7 +35,7 @@ INPUT
 T_OP_OBJ
        if (SvROK($arg)) {
            IV tmp = SvIV((SV*)SvRV($arg));
-           $var = ($type)PTR_CAST 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)PTR_CAST 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)PTR_CAST 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)PTR_CAST $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)PTR_CAST $var);
+       sv_setiv(newSVrv($arg, "B::MAGIC"), PTR2IV($var));
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 62a0c9e..69f0b89 100644 (file)
@@ -292,7 +292,7 @@ prof_mark( opcode ptype )
            static U32 lastid;
            CV *cv;
 
-           cv = (CV*)PTR_CAST 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*)PTR_CAST 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 3e30698..3ce720b 100644 (file)
@@ -179,7 +179,7 @@ sub bootstrap {
     # The .bs file can be used to configure @dl_resolve_using etc to
     # match the needs of the individual module on this architecture.
     my $bs = $file;
-    $bs =~ s/(\.\w+)?$/\.bs/; # look for .bs 'beside' the library
+    $bs =~ s/(\.\w+)?(;\d*)?$/\.bs/; # look for .bs 'beside' the library
     if (-s $bs) { # only read file if it's not empty
         print STDERR "BS: $bs ($^O, $dlsrc)\n" if $dl_debug;
         eval { do $bs; };
index 877b285..96bce4e 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..c26824e 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..7f74cdd 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 a4dcfb4..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)PTR_CAST 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)PTR_CAST RETVAL);
+       sv_setiv( ST(0), PTR2IV(RETVAL));
 
 
 void
index ce45459..180679f 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..913e259 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..54d4be0 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..a56452e 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..9e4908c 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 bb2eb47..7601c34 100644 (file)
@@ -111,7 +111,7 @@ odbm_TIEHASH(dbtype, filename, flags, mode)
            Zero(RETVAL, 1, ODBM_File_type) ;
            RETVAL->dbp = dbp ;
            ST(0) = sv_mortalcopy(&PL_sv_undef);
-           sv_setptrobj(ST(0), PTR_CAST RETVAL, dbtype);
+           sv_setptrobj(ST(0), RETVAL, dbtype);
        }
 
 void
index 2d09c2e..00ee85d 100644 (file)
@@ -235,7 +235,7 @@ sub rdo {
 
 1;
 
-__DATA__
+__END__
 
 =head1 NAME
 
index 0f09aac..16217f0 100644 (file)
@@ -3246,7 +3246,7 @@ sigaction(sig, action, oldaction = 0)
                }
                else {
                    New(0, sigset, 1, sigset_t);
-                   sv_setptrobj(*svp, PTR_CAST sigset, "POSIX::SigSet");
+                   sv_setptrobj(*svp, sigset, "POSIX::SigSet");
                }
                *sigset = oact.sa_mask;
 
@@ -3274,7 +3274,7 @@ INIT:
        }
        else if (sv_derived_from(ST(2), "POSIX::SigSet")) {
            IV tmp = SvIV((SV*)SvRV(ST(2)));
-           oldsigset = (POSIX__SigSet)PTR_CAST tmp;
+           oldsigset = INT2PTR(POSIX__SigSet,tmp);
        }
        else {
            New(0, oldsigset, 1, sigset_t);
index cab48b4..2881385 100644 (file)
@@ -245,7 +245,6 @@ EOM
                archname64="-n32"
                ;;
            esac
-           ccflags="$ccflags -DUSE_64_BITS"
            ;;
 esac
 EOCBU
index ab0203b..7ffd73f 100644 (file)
@@ -14,3 +14,5 @@ case "$usemymalloc" in
     usemymalloc='n'
     ;;
 esac
+# Configure gets fooled for some reason.  There is no getpgid().
+d_getpgid='undef'
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:
@@ -2383,7 +3124,11 @@ GetObjectArrayElement(array,index)
        jsize                   index
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetObjectArrayElement(array,index);
+#else
            RETVAL = (*env)->GetObjectArrayElement(env, array,index);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -2397,7 +3142,11 @@ SetObjectArrayElement(array,index,val)
        jobject                 val
     CODE:
        {
+#ifdef WIN32
+           env->SetObjectArrayElement(array,index,val);
+#else
            (*env)->SetObjectArrayElement(env, array,index,val);
+#endif
            RESTOREENV;
        }
 
@@ -2407,7 +3156,11 @@ NewBooleanArray(len)
        jsize                   len
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->NewBooleanArray(len);
+#else
            RETVAL = (*env)->NewBooleanArray(env, len);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -2419,7 +3172,11 @@ NewByteArray(len)
        jsize                   len
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->NewByteArray(len);
+#else
            RETVAL = (*env)->NewByteArray(env, len);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -2431,7 +3188,11 @@ NewCharArray(len)
        jsize                   len
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->NewCharArray(len);
+#else
            RETVAL = (*env)->NewCharArray(env, len);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -2443,7 +3204,11 @@ NewShortArray(len)
        jsize                   len
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->NewShortArray(len);
+#else
            RETVAL = (*env)->NewShortArray(env, len);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -2455,7 +3220,11 @@ NewIntArray(len)
        jsize                   len
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->NewIntArray(len);
+#else
            RETVAL = (*env)->NewIntArray(env, len);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -2467,7 +3236,11 @@ NewLongArray(len)
        jsize                   len
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->NewLongArray(len);
+#else
            RETVAL = (*env)->NewLongArray(env, len);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -2479,7 +3252,11 @@ NewFloatArray(len)
        jsize                   len
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->NewFloatArray(len);
+#else
            RETVAL = (*env)->NewFloatArray(env, len);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -2491,7 +3268,11 @@ NewDoubleArray(len)
        jsize                   len
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->NewDoubleArray(len);
+#else
            RETVAL = (*env)->NewDoubleArray(env, len);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -2505,8 +3286,16 @@ GetBooleanArrayElements(array)
        jboolean                isCopy = NO_INIT;
     PPCODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetBooleanArrayElements(array,&isCopy);
+#else
            RETVAL = (*env)->GetBooleanArrayElements(env, array,&isCopy);
+#endif
+#ifdef WIN32
+           RETVAL_len_ = env->GetArrayLength(array);
+#else
            RETVAL_len_ = (*env)->GetArrayLength(env, array);
+#endif
            if (GIMME == G_ARRAY) {
                int i;
                jboolean* r = RETVAL;
@@ -2523,7 +3312,11 @@ GetBooleanArrayElements(array)
                else
                    PUSHs(&PL_sv_no);
            }
+#ifdef WIN32
+           env->ReleaseBooleanArrayElements(array,RETVAL,JNI_ABORT);
+#else
            (*env)->ReleaseBooleanArrayElements(env, array,RETVAL,JNI_ABORT);
+#endif
            RESTOREENV;
        }
 
@@ -2535,8 +3328,16 @@ GetByteArrayElements(array)
        jboolean                isCopy = NO_INIT;
     PPCODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetByteArrayElements(array,&isCopy);
+#else
            RETVAL = (*env)->GetByteArrayElements(env, array,&isCopy);
+#endif
+#ifdef WIN32
+           RETVAL_len_ = env->GetArrayLength(array);
+#else
            RETVAL_len_ = (*env)->GetArrayLength(env, array);
+#endif
            if (GIMME == G_ARRAY) {
                int i;
                jbyte* r = RETVAL;
@@ -2553,7 +3354,11 @@ GetByteArrayElements(array)
                else
                    PUSHs(&PL_sv_no);
            }
+#ifdef WIN32
+           env->ReleaseByteArrayElements(array,RETVAL,JNI_ABORT);
+#else
            (*env)->ReleaseByteArrayElements(env, array,RETVAL,JNI_ABORT);
+#endif
            RESTOREENV;
        }
 
@@ -2565,8 +3370,16 @@ GetCharArrayElements(array)
        jboolean                isCopy = NO_INIT;
     PPCODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetCharArrayElements(array,&isCopy);
+#else
            RETVAL = (*env)->GetCharArrayElements(env, array,&isCopy);
+#endif
+#ifdef WIN32
+           RETVAL_len_ = env->GetArrayLength(array);
+#else
            RETVAL_len_ = (*env)->GetArrayLength(env, array);
+#endif
            if (GIMME == G_ARRAY) {
                int i;
                jchar* r = RETVAL;
@@ -2583,7 +3396,11 @@ GetCharArrayElements(array)
                else
                    PUSHs(&PL_sv_no);
            }
+#ifdef WIN32
+           env->ReleaseCharArrayElements(array,RETVAL,JNI_ABORT);
+#else
            (*env)->ReleaseCharArrayElements(env, array,RETVAL,JNI_ABORT);
+#endif
            RESTOREENV;
        }
 
@@ -2595,8 +3412,16 @@ GetShortArrayElements(array)
        jboolean                isCopy = NO_INIT;
     PPCODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetShortArrayElements(array,&isCopy);
+#else
            RETVAL = (*env)->GetShortArrayElements(env, array,&isCopy);
+#endif
+#ifdef WIN32
+           RETVAL_len_ = env->GetArrayLength(array);
+#else
            RETVAL_len_ = (*env)->GetArrayLength(env, array);
+#endif
            if (GIMME == G_ARRAY) {
                int i;
                jshort* r = RETVAL;
@@ -2613,7 +3438,11 @@ GetShortArrayElements(array)
                else
                    PUSHs(&PL_sv_no);
            }
+#ifdef WIN32
+           env->ReleaseShortArrayElements(array,RETVAL,JNI_ABORT);
+#else
            (*env)->ReleaseShortArrayElements(env, array,RETVAL,JNI_ABORT);
+#endif
            RESTOREENV;
        }
 
@@ -2625,8 +3454,16 @@ GetIntArrayElements(array)
        jboolean                isCopy = NO_INIT;
     PPCODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetIntArrayElements(array,&isCopy);
+#else
            RETVAL = (*env)->GetIntArrayElements(env, array,&isCopy);
+#endif
+#ifdef WIN32
+           RETVAL_len_ = env->GetArrayLength(array);
+#else
            RETVAL_len_ = (*env)->GetArrayLength(env, array);
+#endif
            if (GIMME == G_ARRAY) {
                int i;
                jint* r = RETVAL;
@@ -2643,7 +3480,11 @@ GetIntArrayElements(array)
                else
                    PUSHs(&PL_sv_no);
            }
+#ifdef WIN32
+           env->ReleaseIntArrayElements(array,RETVAL,JNI_ABORT);
+#else
            (*env)->ReleaseIntArrayElements(env, array,RETVAL,JNI_ABORT);
+#endif
            RESTOREENV;
        }
 
@@ -2655,8 +3496,16 @@ GetLongArrayElements(array)
        jboolean                isCopy = NO_INIT;
     PPCODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetLongArrayElements(array,&isCopy);
+#else
            RETVAL = (*env)->GetLongArrayElements(env, array,&isCopy);
+#endif
+#ifdef WIN32
+           RETVAL_len_ = env->GetArrayLength(array);
+#else
            RETVAL_len_ = (*env)->GetArrayLength(env, array);
+#endif
            if (GIMME == G_ARRAY) {
                int i;
                jlong* r = RETVAL;
@@ -2673,7 +3522,11 @@ GetLongArrayElements(array)
                else
                    PUSHs(&PL_sv_no);
            }
+#ifdef WIN32
+           env->ReleaseLongArrayElements(array,RETVAL,JNI_ABORT);
+#else
            (*env)->ReleaseLongArrayElements(env, array,RETVAL,JNI_ABORT);
+#endif
            RESTOREENV;
        }
 
@@ -2685,8 +3538,16 @@ GetFloatArrayElements(array)
        jboolean                isCopy = NO_INIT;
     PPCODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetFloatArrayElements(array,&isCopy);
+#else
            RETVAL = (*env)->GetFloatArrayElements(env, array,&isCopy);
+#endif
+#ifdef WIN32
+           RETVAL_len_ = env->GetArrayLength(array);
+#else
            RETVAL_len_ = (*env)->GetArrayLength(env, array);
+#endif
            if (GIMME == G_ARRAY) {
                int i;
                jfloat* r = RETVAL;
@@ -2703,7 +3564,11 @@ GetFloatArrayElements(array)
                else
                    PUSHs(&PL_sv_no);
            }
+#ifdef WIN32
+           env->ReleaseFloatArrayElements(array,RETVAL,JNI_ABORT);
+#else
            (*env)->ReleaseFloatArrayElements(env, array,RETVAL,JNI_ABORT);
+#endif
            RESTOREENV;
        }
 
@@ -2715,8 +3580,16 @@ GetDoubleArrayElements(array)
        jboolean                isCopy = NO_INIT;
     PPCODE:
        {
+#ifdef WIN32
+           RETVAL = env->GetDoubleArrayElements(array,&isCopy);
+#else
            RETVAL = (*env)->GetDoubleArrayElements(env, array,&isCopy);
+#endif
+#ifdef WIN32
+           RETVAL_len_ = env->GetArrayLength(array);
+#else
            RETVAL_len_ = (*env)->GetArrayLength(env, array);
+#endif
            if (GIMME == G_ARRAY) {
                int i;
                jdouble* r = RETVAL;
@@ -2733,7 +3606,11 @@ GetDoubleArrayElements(array)
                else
                    PUSHs(&PL_sv_no);
            }
+#ifdef WIN32
+           env->ReleaseDoubleArrayElements(array,RETVAL,JNI_ABORT);
+#else
            (*env)->ReleaseDoubleArrayElements(env, array,RETVAL,JNI_ABORT);
+#endif
            RESTOREENV;
        }
 
@@ -2748,7 +3625,11 @@ GetBooleanArrayRegion(array,start,len,buf)
        jboolean *              buf = (jboolean*)sv_grow(ST(3),len * sizeof(jboolean)+1);
     CODE:
        {
+#ifdef WIN32
+           env->GetBooleanArrayRegion(array,start,len,buf);
+#else
            (*env)->GetBooleanArrayRegion(env, array,start,len,buf);
+#endif
            SvCUR_set(ST(3), len * sizeof(jboolean));
            *SvEND(ST(3)) = '\0';
            RESTOREENV;
@@ -2765,7 +3646,11 @@ GetByteArrayRegion(array,start,len,buf)
        jbyte *                 buf = (jbyte*)sv_grow(ST(3),len * sizeof(jbyte)+1);
     CODE:
        {
+#ifdef WIN32
+           env->GetByteArrayRegion(array,start,len,buf);
+#else
            (*env)->GetByteArrayRegion(env, array,start,len,buf);
+#endif
            SvCUR_set(ST(3), len * sizeof(jbyte));
            *SvEND(ST(3)) = '\0';
            RESTOREENV;
@@ -2782,7 +3667,11 @@ GetCharArrayRegion(array,start,len,buf)
        jchar *                 buf = (jchar*)sv_grow(ST(3),len * sizeof(jchar)+1);
     CODE:
        {
+#ifdef WIN32
+           env->GetCharArrayRegion(array,start,len,buf);
+#else
            (*env)->GetCharArrayRegion(env, array,start,len,buf);
+#endif
            SvCUR_set(ST(3), len * sizeof(jchar));
            *SvEND(ST(3)) = '\0';
            RESTOREENV;
@@ -2799,7 +3688,11 @@ GetShortArrayRegion(array,start,len,buf)
        jshort *                buf = (jshort*)sv_grow(ST(3),len * sizeof(jshort)+1);
     CODE:
        {
+#ifdef WIN32
+           env->GetShortArrayRegion(array,start,len,buf);
+#else
            (*env)->GetShortArrayRegion(env, array,start,len,buf);
+#endif
            SvCUR_set(ST(3), len * sizeof(jshort));
            *SvEND(ST(3)) = '\0';
            RESTOREENV;
@@ -2816,7 +3709,11 @@ GetIntArrayRegion(array,start,len,buf)
        jint *                  buf = (jint*)sv_grow(ST(3),len * sizeof(jint)+1);
     CODE:
        {
+#ifdef WIN32
+           env->GetIntArrayRegion(array,start,len,buf);
+#else
            (*env)->GetIntArrayRegion(env, array,start,len,buf);
+#endif
            SvCUR_set(ST(3), len * sizeof(jint));
            *SvEND(ST(3)) = '\0';
            RESTOREENV;
@@ -2833,7 +3730,11 @@ GetLongArrayRegion(array,start,len,buf)
        jlong *                 buf = (jlong*)sv_grow(ST(3),len * sizeof(jlong)+1);
     CODE:
        {
+#ifdef WIN32
+           env->GetLongArrayRegion(array,start,len,buf);
+#else
            (*env)->GetLongArrayRegion(env, array,start,len,buf);
+#endif
            SvCUR_set(ST(3), len * sizeof(jlong));
            *SvEND(ST(3)) = '\0';
            RESTOREENV;
@@ -2850,7 +3751,11 @@ GetFloatArrayRegion(array,start,len,buf)
        jfloat *                buf = (jfloat*)sv_grow(ST(3),len * sizeof(jfloat)+1);
     CODE:
        {
+#ifdef WIN32
+           env->GetFloatArrayRegion(array,start,len,buf);
+#else
            (*env)->GetFloatArrayRegion(env, array,start,len,buf);
+#endif
            SvCUR_set(ST(3), len * sizeof(jfloat));
            *SvEND(ST(3)) = '\0';
            RESTOREENV;
@@ -2867,7 +3772,11 @@ GetDoubleArrayRegion(array,start,len,buf)
        jdouble *               buf = (jdouble*)sv_grow(ST(3),len * sizeof(jdouble)+1);
     CODE:
        {
+#ifdef WIN32
+           env->GetDoubleArrayRegion(array,start,len,buf);
+#else
            (*env)->GetDoubleArrayRegion(env, array,start,len,buf);
+#endif
            SvCUR_set(ST(3), len * sizeof(jdouble));
            *SvEND(ST(3)) = '\0';
            RESTOREENV;
@@ -2885,10 +3794,14 @@ SetBooleanArrayRegion(array,start,len,buf)
     CODE:
        {
            if (buf_len_ < len)
-               Perl_croak(aTHX_ "string is too short");
-           else if (buf_len_ > len && ckWARN(WARN_UNSAFE))
-               Perl_warner(aTHX_ WARN_UNSAFE, "string is too long");
+               croak("string is too short");
+           else if (buf_len_ > len && PL_dowarn)
+               warn("string is too long");
+#ifdef WIN32
+           env->SetBooleanArrayRegion(array,start,len,buf);
+#else
            (*env)->SetBooleanArrayRegion(env, array,start,len,buf);
+#endif
            RESTOREENV;
        }
 
@@ -2904,10 +3817,14 @@ SetByteArrayRegion(array,start,len,buf)
     CODE:
        {
            if (buf_len_ < len)
-               Perl_croak(aTHX_ "string is too short");
-           else if (buf_len_ > len && ckWARN(WARN_UNSAFE))
-               Perl_warner(aTHX_ WARN_UNSAFE, "string is too long");
+               croak("string is too short");
+           else if (buf_len_ > len && PL_dowarn)
+               warn("string is too long");
+#ifdef WIN32
+           env->SetByteArrayRegion(array,start,len,buf);
+#else
            (*env)->SetByteArrayRegion(env, array,start,len,buf);
+#endif
            RESTOREENV;
        }
 
@@ -2923,10 +3840,14 @@ SetCharArrayRegion(array,start,len,buf)
     CODE:
        {
            if (buf_len_ < len)
-               Perl_croak(aTHX_ "string is too short");
-           else if (buf_len_ > len && ckWARN(WARN_UNSAFE))
-               Perl_warner(aTHX_ WARN_UNSAFE, "string is too long");
+               croak("string is too short");
+           else if (buf_len_ > len && PL_dowarn)
+               warn("string is too long");
+#ifdef WIN32
+           env->SetCharArrayRegion(array,start,len,buf);
+#else
            (*env)->SetCharArrayRegion(env, array,start,len,buf);
+#endif
            RESTOREENV;
        }
 
@@ -2942,10 +3863,14 @@ SetShortArrayRegion(array,start,len,buf)
     CODE:
        {
            if (buf_len_ < len)
-               Perl_croak(aTHX_ "string is too short");
-           else if (buf_len_ > len && ckWARN(WARN_UNSAFE))
-               Perl_warner(aTHX_ WARN_UNSAFE, "string is too long");
+               croak("string is too short");
+           else if (buf_len_ > len && PL_dowarn)
+               warn("string is too long");
+#ifdef WIN32
+           env->SetShortArrayRegion(array,start,len,buf);
+#else
            (*env)->SetShortArrayRegion(env, array,start,len,buf);
+#endif
            RESTOREENV;
        }
 
@@ -2961,10 +3886,14 @@ SetIntArrayRegion(array,start,len,buf)
     CODE:
        {
            if (buf_len_ < len)
-               Perl_croak(aTHX_ "string is too short");
-           else if (buf_len_ > len && ckWARN(WARN_UNSAFE))
-               Perl_warner(aTHX_ WARN_UNSAFE, "string is too long");
+               croak("string is too short");
+           else if (buf_len_ > len && PL_dowarn)
+               warn("string is too long");
+#ifdef WIN32
+           env->SetIntArrayRegion(array,start,len,buf);
+#else
            (*env)->SetIntArrayRegion(env, array,start,len,buf);
+#endif
            RESTOREENV;
        }
 
@@ -2980,10 +3909,14 @@ SetLongArrayRegion(array,start,len,buf)
     CODE:
        {
            if (buf_len_ < len)
-               Perl_croak(aTHX_ "string is too short");
-           else if (buf_len_ > len && ckWARN(WARN_UNSAFE))
-               Perl_warner(aTHX_ WARN_UNSAFE, "string is too long");
+               croak("string is too short");
+           else if (buf_len_ > len && PL_dowarn)
+               warn("string is too long");
+#ifdef WIN32
+           env->SetLongArrayRegion(array,start,len,buf);
+#else
            (*env)->SetLongArrayRegion(env, array,start,len,buf);
+#endif
            RESTOREENV;
        }
 
@@ -2999,10 +3932,14 @@ SetFloatArrayRegion(array,start,len,buf)
     CODE:
        {
            if (buf_len_ < len)
-               Perl_croak(aTHX_ "string is too short");
-           else if (buf_len_ > len && ckWARN(WARN_UNSAFE))
-               Perl_warner(aTHX_ WARN_UNSAFE, "string is too long");
+               croak("string is too short");
+           else if (buf_len_ > len && PL_dowarn)
+               warn("string is too long");
+#ifdef WIN32
+           env->SetFloatArrayRegion(array,start,len,buf);
+#else
            (*env)->SetFloatArrayRegion(env, array,start,len,buf);
+#endif
            RESTOREENV;
        }
 
@@ -3018,10 +3955,14 @@ SetDoubleArrayRegion(array,start,len,buf)
     CODE:
        {
            if (buf_len_ < len)
-               Perl_croak(aTHX_ "string is too short");
-           else if (buf_len_ > len && ckWARN(WARN_UNSAFE))
-               Perl_warner(aTHX_ WARN_UNSAFE, "string is too long");
+               croak("string is too short");
+           else if (buf_len_ > len && PL_dowarn)
+               warn("string is too long");
+#ifdef WIN32
+           env->SetDoubleArrayRegion(array,start,len,buf);
+#else
            (*env)->SetDoubleArrayRegion(env, array,start,len,buf);
+#endif
            RESTOREENV;
        }
 
@@ -3033,7 +3974,11 @@ RegisterNatives(clazz,methods,nMethods)
        jint                    nMethods
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->RegisterNatives(clazz,methods,nMethods);
+#else
            RETVAL = (*env)->RegisterNatives(env, clazz,methods,nMethods);
+#endif
        }
 
 SysRet
@@ -3042,7 +3987,11 @@ UnregisterNatives(clazz)
        jclass                  clazz
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->UnregisterNatives(clazz);
+#else
            RETVAL = (*env)->UnregisterNatives(env, clazz);
+#endif
        }
     OUTPUT:
        RETVAL  
@@ -3053,7 +4002,11 @@ MonitorEnter(obj)
        jobject                 obj
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->MonitorEnter(obj);
+#else
            RETVAL = (*env)->MonitorEnter(env, obj);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -3065,7 +4018,11 @@ MonitorExit(obj)
        jobject                 obj
     CODE:
        {
+#ifdef WIN32
+           RETVAL = env->MonitorExit(obj);
+#else
            RETVAL = (*env)->MonitorExit(env, obj);
+#endif
            RESTOREENV;
        }
     OUTPUT:
@@ -3077,12 +4034,23 @@ GetJavaVM(...)
     CODE:
        {
            if (env) {  /* We're embedded. */
+#ifdef WIN32
+               if (env->GetJavaVM(&RETVAL) < 0)
+#else
                if ((*env)->GetJavaVM(env, &RETVAL) < 0)
+#endif
                    RETVAL = 0;
            }
            else {      /* We're embedding. */
-               JDK1_1InitArgs vm_args;
+#ifdef KAFFE
+                JavaVMInitArgs vm_args;
+#else
+                JDK1_1InitArgs vm_args;
+#endif
                char *lib;
+               if (jpldebug) {
+                   fprintf(stderr, "We're embedding Java in Perl.\n");
+               }
 
                if (items--) {
                    ++mark;
@@ -3090,47 +4058,84 @@ GetJavaVM(...)
                }
                else
                    lib = 0;
-
+               if (jpldebug) {
+                   fprintf(stderr, "lib is %s.\n", lib);
+               }
+#ifdef WIN32
+               if (!LoadLibrary("javai.dll")) {
+                   if (lib && !LoadLibrary(lib))
+                       croak("Can't load javai.dll");
+               }
+#else
+               if (jpldebug) {
+                   fprintf(stderr, "Opening Java shared library.\n");
+                }
+#ifdef KAFFE
+               if (!dlopen("libkaffevm.so", RTLD_LAZY|RTLD_GLOBAL)) {
+#else
                if (!dlopen("libjava.so", RTLD_LAZY|RTLD_GLOBAL)) {
+#endif
                    if (lib && !dlopen(lib, RTLD_LAZY|RTLD_GLOBAL))
-                       Perl_croak(aTHX_ "Can't load libjava.so");
+                       croak("Can't load Java shared library.");
                }
+#endif
 
                JNI_GetDefaultJavaVMInitArgs(&vm_args);
                vm_args.exit = &call_my_exit;
+               if (jpldebug) {
+            fprintf(stderr, "items = %d\n", items);
+            fprintf(stderr, "mark = %s\n", SvPV(*mark, PL_na));
+        }
+               ++mark;
                while (items > 1) {
-                   char *s = SvPV(*++mark,PL_na);
+                   char *s = SvPV(*mark,PL_na);
+                   ++mark;
+                   if (jpldebug) {
+                fprintf(stderr, "*s = %s\n", s);
+                fprintf(stderr, "val = %s\n", SvPV(*mark, PL_na));
+            }
                    items -= 2;
                    if (strEQ(s, "checkSource"))
-                       vm_args.checkSource = (jint)SvIV(*++mark);
+                       vm_args.checkSource = (jint)SvIV(*mark);
                    else if (strEQ(s, "nativeStackSize"))
-                       vm_args.nativeStackSize = (jint)SvIV(*++mark);
+                       vm_args.nativeStackSize = (jint)SvIV(*mark);
                    else if (strEQ(s, "javaStackSize"))
-                       vm_args.javaStackSize = (jint)SvIV(*++mark);
+                       vm_args.javaStackSize = (jint)SvIV(*mark);
                    else if (strEQ(s, "minHeapSize"))
-                       vm_args.minHeapSize = (jint)SvIV(*++mark);
+                       vm_args.minHeapSize = (jint)SvIV(*mark);
                    else if (strEQ(s, "maxHeapSize"))
-                       vm_args.maxHeapSize = (jint)SvIV(*++mark);
+                       vm_args.maxHeapSize = (jint)SvIV(*mark);
                    else if (strEQ(s, "verifyMode"))
-                       vm_args.verifyMode = (jint)SvIV(*++mark);
+                       vm_args.verifyMode = (jint)SvIV(*mark);
                    else if (strEQ(s, "classpath"))
-                       vm_args.classpath = savepv(SvPV(*++mark,PL_na));
+                       vm_args.classpath = savepv(SvPV(*mark,PL_na));
                    else if (strEQ(s, "enableClassGC"))
-                       vm_args.enableClassGC = (jint)SvIV(*++mark);
+                       vm_args.enableClassGC = (jint)SvIV(*mark);
                    else if (strEQ(s, "enableVerboseGC"))
-                       vm_args.enableVerboseGC = (jint)SvIV(*++mark);
+                       vm_args.enableVerboseGC = (jint)SvIV(*mark);
                    else if (strEQ(s, "disableAsyncGC"))
-                       vm_args.disableAsyncGC = (jint)SvIV(*++mark);
+                       vm_args.disableAsyncGC = (jint)SvIV(*mark);
+#ifndef KAFFE
                    else if (strEQ(s, "verbose"))
-                       vm_args.verbose = (jint)SvIV(*++mark);
+                       vm_args.verbose = (jint)SvIV(*mark); 
                    else if (strEQ(s, "debugging"))
-                       vm_args.debugging = (jboolean)SvIV(*++mark);
+                       vm_args.debugging = (jboolean)SvIV(*mark);
                    else if (strEQ(s, "debugPort"))
-                       vm_args.debugPort = (jint)SvIV(*++mark);
+                       vm_args.debugPort = (jint)SvIV(*mark); 
+#endif
                    else
-                       Perl_croak(aTHX_ "unrecognized option: %s", s);
+                       croak("unrecognized option: %s", s);
+               }
+
+               if (jpldebug) {
+                   fprintf(stderr, "Creating Java VM...\n");
+                   fprintf(stderr, "Working CLASSPATH: %s\n", 
+                       vm_args.classpath);
                }
                JNI_CreateJavaVM(&RETVAL, &jplcurenv, &vm_args);
+               if (jpldebug) {
+                   fprintf(stderr, "Created Java VM.\n");
+               }
            }
        }
 
diff --git a/jpl/JNI/JNIConfig b/jpl/JNI/JNIConfig
new file mode 100644 (file)
index 0000000..494de13
--- /dev/null
@@ -0,0 +1,13 @@
+eval `$JPL_SRC/setvars -perl`;
+$java = $ENV{JAVA_HOME};
+$jpl = $ENV{JPL_HOME};
+
+# Where are the Java includes?
+#
+@INCLUDE = ("$java/include", "$java/include/$^O", "$java/include/genunix");
+
+# Are we embedding Perl in Java?
+#
+$EMBEDDEDPERL = 1;
+
+1;
diff --git a/jpl/JNI/JNIConfig.Win32 b/jpl/JNI/JNIConfig.Win32
new file mode 100644 (file)
index 0000000..000566a
--- /dev/null
@@ -0,0 +1,21 @@
+# Are we using Kaffe?
+#
+$KAFFE = 0;
+
+# Where are the Java includes?
+#
+@INCLUDE = ("C:\\jdk1.1.8\\include", "C:\\jdk1.1.8\\include\\win32");
+
+# Are we embedding Perl in Java?
+#
+$EMBEDDEDPERL = 0;
+
+# Extra C flags
+#
+$CCFLAGS=" -Z7 -D_DEBUG";
+
+$MYEXTLIB = "C:\\jdk1.1.8\\lib\\javai.lib " .
+            "$Config{installarchlib}\\CORE\\perlcore.lib " .
+            "$Config{installarchlib}\\CORE\\perlcapi.lib";
+
+1;
diff --git a/jpl/JNI/JNIConfig.kaffe b/jpl/JNI/JNIConfig.kaffe
new file mode 100644 (file)
index 0000000..9b2fa87
--- /dev/null
@@ -0,0 +1,26 @@
+eval `$JPL_SRC/setvars -perl`;
+$java = $ENV{JAVA_HOME};
+$jpl = $ENV{JPL_HOME};
+
+# Are we using Kaffe?
+#
+$KAFFE = 1;
+
+# What is the name of the JVM library?
+#
+$LIBJVM="kaffevm";
+
+# Where is the JVM library?
+#
+$LIBLOC="/usr/local/lib";
+
+# Where are the Java includes?
+#
+#@INCLUDE = ('$java/include', '$java/include/$^O' '$java/include/genunix');
+@INCLUDE = ( '/usr/local/include/kaffe');
+
+# Are we embedding Perl in Java?
+#
+$EMBEDDEDPERL = 0;
+
+1;
diff --git a/jpl/JNI/JNIConfig.noembed b/jpl/JNI/JNIConfig.noembed
new file mode 100644 (file)
index 0000000..ae03b2c
--- /dev/null
@@ -0,0 +1,25 @@
+eval `$JPL_SRC/setvars -perl`;
+$java = $ENV{JAVA_HOME};
+$jpl = $ENV{JPL_HOME};
+
+# Are we using Kaffe?
+#
+$KAFFE = 0;
+
+# What is the name of the JVM library?
+#
+$LIBJVM="java";
+
+# Where is the JVM library?
+#
+$LIBLOC="/usr/local/java/lib/i686/green_threads/";
+
+# Where are the Java includes?
+#
+@INCLUDE = ("$java/include", "$java/include/$^O", "$java/include/genunix");
+
+# Are we embedding Perl in Java?
+#
+$EMBEDDEDPERL = 0;
+
+1;
diff --git a/jpl/JNI/JNIConfig.standard b/jpl/JNI/JNIConfig.standard
new file mode 100644 (file)
index 0000000..494de13
--- /dev/null
@@ -0,0 +1,13 @@
+eval `$JPL_SRC/setvars -perl`;
+$java = $ENV{JAVA_HOME};
+$jpl = $ENV{JPL_HOME};
+
+# Where are the Java includes?
+#
+@INCLUDE = ("$java/include", "$java/include/$^O", "$java/include/genunix");
+
+# Are we embedding Perl in Java?
+#
+$EMBEDDEDPERL = 1;
+
+1;
index 2611ff1..1a54b9d 100644 (file)
 #!/usr/bin/perl
-
-$JPL_SRC = "..";
-
 use ExtUtils::MakeMaker;
+use Getopt::Std;
 use Config;
+$ARCHNAME = $Config{archname};
+use File::Basename;
 
-eval `$JPL_SRC/setvars -perl`;
+getopts('e'); # embedding?
 
-$java = $ENV{JAVA_HOME};
-$jpl = $ENV{JPL_HOME};
+#require "JNIConfig";
 
-$ARCHNAME = $Config{archname};
+if ($^O eq 'solaris') {
+    $LIBPATH = " -R$Config{archlib}/CORE -L$Config{archlib}/CORE";
+} elsif ($^O eq 'MSWin32') {
+    $LIBPATH = " -L$Config{archlib}\\CORE";
+} else {
+    $LIBPATH = " -L$Config{archlib}/CORE";
+}
+#$LIBS = " -lperl";
 
-# See lib/ExtUtils/MakeMaker.pm for details of how to influence
-# the contents of the Makefile that is written.
-WriteMakefile(
-    NAME       => 'JNI',
+# Figure out where Java might live
+#
+my @JAVA_HOME_GUESSES = qw(/usr/local/java /usr/java /usr/local/jdk117_v3
+                           /usr/local/lib/kaffe C:\\JDK1.1.8
+                           C:\\JDK1.2.1 );
+if (! defined $ENV{JAVA_HOME}) {
+        print "You didn't define JAVA_HOME, so I'm trying a few guesses.\n";
+        print "If this fails, you might want to try setting JAVA_HOME and\n";
+        print "running me again.\n";
+} else {
+        @JAVA_HOME_GUESSES = ( $ENV{JAVA_HOME} );
+}
+
+# Let's find out where jni.h lives
+#
+my @INCLUDE = find_includes();
+$INC = join(" -I", ("", @INCLUDE));
+
+# Let's find out the name of the Java shared library
+#
+my @JAVALIBS = find_libs();
+
+# Find out some defines based on the library we are linking to
+#
+foreach (@JAVALIBS) {
+    if ( /javai.lib$/ or /jvm.lib$/) { # We're on Win32
+        $INC =~ s#/#\\#g;
+        $INC =~ s#\\$##;
+        $CCFLAGS .= "-DWIN32 -Z7 -D_DEBUG";
+        $MYEXTLIB = $libjava;
+    } elsif (/libkaffevm.so$/) {
+        $CCFLAGS .= "-DKAFFE";
+    }
+}
+
+# Let's find out the path of the library we need to link against.
+#
+foreach (@JAVALIBS) {
+    if ( /javai.lib$/ or /jvm.lib$/) { # We're on Win32
+        $_ =~ s#/#\\\\#g;
+    }
+    my ($libname, $libpath, $libsuffix) = fileparse($_, ("\.so", "\.lib"));
+    $libname =~ s/^lib//;
+    if ($^O eq 'solaris') {
+        $LIBPATH .= " -R$libpath -L$libpath"
+    } else {
+        $LIBPATH .= " -L$libpath"
+    }
+    $LIBS .= " -l$libname";
+}
+
+# Do we need -D_REENTRANT?
+if ($LIBPATH =~ /native/) {
+    print "Looks like native threads...\n";
+    $CCFLAGS .= " -D_REENTRANT";
+}
+
+if ($opt_e) {
+    print "We're embedding Perl in Java via libPerlInterpreter.so.\n";
+    eval `../setvars -perl`;
+    $CCFLAGS .= " -DEMBEDDEDPERL";
+    $LIBPATH .= " -R$ENV{JPL_HOME}/lib/$ARCHNAME -L$ENV{JPL_HOME}/lib/$ARCHNAME";
+    $LIBS    .= " -lPerlInterpreter";
+}
+
+# Needed for JNI.
+if ($^O eq 'solaris') {
+    $LIBS = " -lthread -lc $LIBS"; #-lthread must be first!!!
+    $CCFLAGS .= " -D_REENTRANT";
+}
+
+my %Makefile = (
+    NAME        => 'JNI',
     VERSION_FROM => 'JNI.pm',
-    LIBS       => ["-R$Config{archlib}/CORE -L$Config{archlib}/CORE -R$jpl/lib/$ARCHNAME -L$jpl/lib/$ARCHNAME -lperl -lPerlInterpreter"],
-    DEFINE     => '',
+    DEFINE        => '',
     LINKTYPE => 'dynamic',
-    INC        => "-I$java/include -I$java/include/$^O -I$java/include/genunix",
+    INC        => $INC,
+    CCFLAGS => "$Config{ccflags} $CCFLAGS", 
+    ($Config{archname} =~ /mswin32.*-object/i ? ('CAPI' => 'TRUE') : ()),
 );
+
+$Makefile{LIBS} = ["$LIBPATH $LIBS"];
+if ($MYEXTLIB) {
+    $Makefile{MYEXTLIB} = $MYEXTLIB;
+}
+
+# See lib/ExtUtils/MakeMaker.pm for details of how to influence
+# the contents of the Makefile that is written.
+#
+WriteMakefile(%Makefile);
+
+# subroutine to find a library
+#
+sub find_stuff {
+
+    my ($candidates, $locations) = @_;
+
+    my $lib;
+    $wanted = sub {
+        foreach my $name (@$candidates) {
+            if (/$name$/ and ! /green_threads/ and !/include-old/) {
+                    $lib = $File::Find::name;
+            }
+        }
+    };
+    
+    use File::Find;
+    foreach my $guess (@$locations) {
+        next unless -d $guess;
+        find (\&$wanted, $guess);
+    }
+    if (! $lib) {
+        print "Could not find @$candidates\n";
+    } else {
+        print "Found @$candidates as $lib\n\n";
+    }
+    return $lib;
+}
+
+# Extra lib for Java 1.2
+#
+sub find_libs {
+
+    my $libjava = find_stuff(['libjava.so', 'libkaffevm.so', 'javai.lib', 'jvm.lib'],
+                        \@JAVA_HOME_GUESSES);
+    my $libjvm  = find_stuff(['libjvm.so'],  \@JAVA_HOME_GUESSES);
+    if ($libjvm) { # JDK 1.2
+        my $libhpi  = find_stuff(['libhpi.so'], \@JAVA_HOME_GUESSES);
+        my $libawt  = find_stuff(['libawt.so'], \@JAVA_HOME_GUESSES);
+        return($libjava, $libjvm, $libhpi, $libawt);
+    } else {
+        return($libjava);
+    }
+
+}
+
+# We need to find jni.h and jni_md.h
+#
+sub find_includes {
+
+    my @CANDIDATES = qw(jni.h jni_md.h);
+    my @includes;
+
+    sub find_inc {
+        foreach my $name (@CANDIDATES) {
+            if (/$name$/) {
+                my ($hname, $hpath, $hsuffix) = 
+                    fileparse($File::Find::name, ("\.h", "\.H"));
+                unless ($hpath =~ /include-old/) {
+                    print "Found $hname$hsuffix in $hpath\n";
+                    push @includes, $hpath;
+                }
+            }
+        }
+    }
+    
+    use File::Find;
+    foreach my $guess (@JAVA_HOME_GUESSES) {
+        next unless -d $guess;
+        find (\&find_inc, $guess);
+    }
+    if (! @includes) {
+        die "Could not find Java includes!";
+    } else {
+        print join("\n", @includes), "\n";
+    }
+    return @includes;
+}
+
index 816e28b..9c5238e 100644 (file)
@@ -6,7 +6,7 @@
 # Change 1..1 below to 1..last_test_to_print .
 # (It may become useful if the test is moved to ./t subdirectory.)
 
-BEGIN { $| = 1; print "1..1\n"; }
+BEGIN { $| = 1; print "1..3\n"; }
 END {print "not ok 1\n" unless $loaded;}
 use JNI;
 $loaded = 1;
@@ -18,3 +18,41 @@ print "ok 1\n";
 # (correspondingly "not ok 13") depending on the success of chunk 13
 # of the test code):
 
+# Simple StringBuffer test.
+#
+use JPL::AutoLoader;
+use JPL::Class 'java::lang::StringBuffer';
+$sb = java::lang::StringBuffer->new__s("TEST");
+if ($sb->toString____s() eq "TEST") {
+    print "ok 2\n";
+} else {
+    print "not ok 2\n";
+}
+
+# Put up a frame and let the user close it.
+#
+use JPL::AutoLoader;
+use JPL::Class 'java::awt::Frame';
+use JPL::Class 'Closer';
+
+$f = java::awt::Frame->new__s("Close Me, Please!");
+my $setSize = getmeth("setSize", ["int", "int"], []);
+my $addWindowListener = getmeth("addWindowListener",
+            ["java.awt.event.WindowListener"], []);
+
+$f->$addWindowListener( new Closer );
+$f->$setSize(200,200);
+$f->show();
+
+while (1) {
+
+    if (!$f->isVisible____Z) {
+        last;
+    }
+
+    # Sleep a bit.
+    #
+    sleep 1;
+}
+
+print "ok 3\n";
index 6b97cf4..9bd0691 100644 (file)
@@ -55,13 +55,13 @@ T_JVALUELIST
            AV* av = (AV*)SvRV($arg);
            if (SvTYPE(av) == SVt_PVAV) {
                I32 maxarg = AvFILL(av) + 1;
-               $var = makeargs(aTHX_ sig, AvARRAY(av), maxarg);
+               $var = makeargs(sig, AvARRAY(av), maxarg);
            }
            else
-               Perl_croak(aTHX_ \"$var is not an array reference\");
+               croak(\"$var is not an array reference\");
        }
        else
-           Perl_croak(aTHX_ \"$var is not a reference\")
+           croak(\"$var is not a reference\")
 T_JIDSIG
        {
            $var = ($type)SvIV($arg);
@@ -73,7 +73,7 @@ T_JPTROBJ
            $var = ($type) tmp;
        }
        else
-           Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
+           croak(\"$var is not of type ${ntype}\")
 
 OUTPUT
 T_JMEM
@@ -152,22 +152,22 @@ T_JPTROBJ
 #              if (sv_isa($arg, \"${ntype}\"))
 #                  $var = (SV*)SvRV($arg);
 #              else
-#                  Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
+#                  croak(\"$var is not of type ${ntype}\")
 #      T_AVREF
 #              if (sv_isa($arg, \"${ntype}\"))
 #                  $var = (AV*)SvRV($arg);
 #              else
-#                  Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
+#                  croak(\"$var is not of type ${ntype}\")
 #      T_HVREF
 #              if (sv_isa($arg, \"${ntype}\"))
 #                  $var = (HV*)SvRV($arg);
 #              else
-#                  Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
+#                  croak(\"$var is not of type ${ntype}\")
 #      T_CVREF
 #              if (sv_isa($arg, \"${ntype}\"))
 #                  $var = (CV*)SvRV($arg);
 #              else
-#                  Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
+#                  croak(\"$var is not of type ${ntype}\")
 #      T_SYSRET
 #              $var NOT IMPLEMENTED
 #      T_IV
@@ -208,28 +208,28 @@ T_JPTROBJ
 #                  $var = ($type) tmp;
 #              }
 #              else
-#                  Perl_croak(aTHX_ \"$var is not a reference\")
+#                  croak(\"$var is not a reference\")
 #      T_REF_IV_REF
 #              if (sv_isa($arg, \"${type}\")) {
 #                  IV tmp = SvIV((SV*)SvRV($arg));
 #                  $var = *($type *) tmp;
 #              }
 #              else
-#                  Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
+#                  croak(\"$var is not of type ${ntype}\")
 #      T_REF_IV_PTR
 #              if (sv_isa($arg, \"${type}\")) {
 #                  IV tmp = SvIV((SV*)SvRV($arg));
 #                  $var = ($type) tmp;
 #              }
 #              else
-#                  Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
+#                  croak(\"$var is not of type ${ntype}\")
 #      T_PTROBJ
 #              if (sv_derived_from($arg, \"${ntype}\")) {
 #                  IV tmp = SvIV((SV*)SvRV($arg));
 #                  $var = ($type) tmp;
 #              }
 #              else
-#                  Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
+#                  croak(\"$var is not of type ${ntype}\")
 #      T_PTRDESC
 #              if (sv_isa($arg, \"${ntype}\")) {
 #                  IV tmp = SvIV((SV*)SvRV($arg));
@@ -237,21 +237,21 @@ T_JPTROBJ
 #                  $var = ${type}_desc->ptr;
 #              }
 #              else
-#                  Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
+#                  croak(\"$var is not of type ${ntype}\")
 #      T_REFREF
 #              if (SvROK($arg)) {
 #                  IV tmp = SvIV((SV*)SvRV($arg));
 #                  $var = *($type) tmp;
 #              }
 #              else
-#                  Perl_croak(aTHX_ \"$var is not a reference\")
+#                  croak(\"$var is not a reference\")
 #      T_REFOBJ
 #              if (sv_isa($arg, \"${ntype}\")) {
 #                  IV tmp = SvIV((SV*)SvRV($arg));
 #                  $var = *($type) tmp;
 #              }
 #              else
-#                  Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
+#                  croak(\"$var is not of type ${ntype}\")
 #      T_OPAQUE
 #              $var NOT IMPLEMENTED
 #      T_OPAQUEPTR
diff --git a/jpl/JNI/typemap.gcc b/jpl/JNI/typemap.gcc
new file mode 100644 (file)
index 0000000..9bd0691
--- /dev/null
@@ -0,0 +1,386 @@
+JavaVM *               T_JPTROBJ
+JNINativeMethod *      T_JPTROBJ
+const char *           T_PV
+const jbyte *          T_JMEM
+const jchar *          T_JMEM
+jarray                 T_JPTROBJ
+jboolean               T_IV
+jboolean *             T_JMEM
+jbooleanArray          T_JPTROBJ
+jbyte                  T_IV
+jbyte *                        T_JMEM
+jbyteArray             T_JPTROBJ
+jchar                  T_IV
+jchar *                        T_JMEM
+jcharArray             T_JPTROBJ
+jclass                 T_JPTROBJ
+jdouble                        T_NV
+jdouble *              T_JMEM
+jdoubleArray           T_JPTROBJ
+jfieldID               T_JIDSIG
+jfloat                 T_NV
+jfloat *               T_JMEM
+jfloatArray            T_JPTROBJ
+jint                   T_IV
+jint *                 T_JMEM
+jintArray              T_JPTROBJ
+jlong                  T_NV
+jlong *                        T_JMEM
+jlongArray             T_JPTROBJ
+jmethodID              T_JIDSIG
+jobject                        T_JPTROBJ
+jobjectArray           T_JPTROBJ
+jshort                 T_IV
+jshort *               T_JMEM
+jshortArray            T_JPTROBJ
+jsize                  T_IV
+jstring                        T_JSTRING
+jthrowable             T_JPTROBJ
+jvalue *               T_JVALUELIST
+
+INPUT
+T_JMEM
+       {
+           $var = ($type)SvPV($arg,tmplen);
+           ${var}_len_ = (jsize) tmplen / sizeof(${subtype});
+       }
+T_JSTRING
+       if (SvROK($arg)) {
+           $var = ($type)(void*)SvIV(SvRV($arg));
+       }
+       else
+           $var = ($type)(*env)->NewStringUTF(env, (char *) SvPV($arg,PL_na))
+T_JVALUELIST
+       if (SvROK($arg)) {
+           AV* av = (AV*)SvRV($arg);
+           if (SvTYPE(av) == SVt_PVAV) {
+               I32 maxarg = AvFILL(av) + 1;
+               $var = makeargs(sig, AvARRAY(av), maxarg);
+           }