Basic SvUTF8 stuff in headers, no functional changes yet.
p4raw-id: //depot/utfperl@4193
----------------
____________________________________________________________________________
+[ 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
# $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
: 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++) {
extractsh=''
override=''
knowitall=''
-rm -f optdef.sh
+rm -f optdef.sh posthint.sh
cat >optdef.sh <<EOS
$startsh
EOS
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;;
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.
-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
: 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
*) 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`
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
+
int main()
{
struct sigaction act, oact;
+ act.sa_flags = 0;
+ oact.sa_handler = 0;
}
EOP
set try
=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.
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
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
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
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
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
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
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):
# 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
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=''
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=''
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'
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'
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'
stdio_stream_array='_iob'
strings='/usr/include/string.h'
submit=''
-subversion='60'
+subversion='61'
sysman='/usr/man/man1'
tail=''
tar=''
vendorlibexp=''
vendorprefix=''
vendorprefixexp=''
-version='5.00560'
+version='5.00561'
vi=''
voidflags='15'
xlibpth='/usr/lib/386 /lib/386'
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"'
/*
* 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.
* 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()
* 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
* 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
*/
#$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.
$!: set up default values
$ fastread=""
$ reuseval="false"
+$ maniskip = "false"
$ config_sh=""
$ alldone=""
$ error=""
$ 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"
$ 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: *
$ 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
$ 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
else
{
IV i = SvIV(astr);
- a = (char *)PTR_CAST i; /* ouch */
+ a = INT2PTR(char *,i); /* ouch */
}
SETERRNO(0,0);
switch (optype)
#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
}
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
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
#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));
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
#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));
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
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));
#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
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));
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
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"
#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));
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));
#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)
*/
#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)
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
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
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
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
#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
* 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.
}
my %symtable;
+
+sub clearsym {
+ %symtable = ();
+}
+
sub savesym {
my ($obj, $value) = @_;
# warn(sprintf("savesym: sym_%x => %s\n", $$obj, $value)); # debug
}
if (!type) {
type = svclassnames[SvTYPE(sv)];
- iv = (IV)PTR_CAST sv;
+ iv = PTR2IV(sv);
}
sv_setiv(newSVrv(arg, type), iv);
return arg;
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;
}
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);
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);
}
}
OUTPUT:
RETVAL
-#define address(sv) (IV)PTR_CAST sv
+#define address(sv) PTR2IV(sv)
IV
address(sv)
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
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
sub compile {
my @options = @_;
+ B::clearsym();
if (@options) {
return sub {
my $objname;
sub compile {
my $order = shift;
+ B::clearsym();
if ($order eq "exec") {
return sub { walkoptree_exec(main_start, "debug") }
} else {
sub compile {
my $order = shift;
my @options = @_;
+ B::clearsym();
if (@options) {
return sub {
my $objname;
WriteMakefile(
NAME => "B",
VERSION => "a5",
- MAN3PODS => {},
+ PL_FILES => { 'defsubs_h.PL' => 'defsubs.h' },
+ MAN3PODS => {},
clean => {
FILES => "perl$e *$o B.c defsubs.h *~"
}
#!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
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\")
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\")
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));
* 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.
# 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
use Carp;
-$VERSION = "1.70" ;
+$VERSION = "1.71" ;
#typedef enum { DB_BTREE, DB_HASH, DB_RECNO } DBTYPE;
$DB_BTREE = new DB_File::BTREEINFO ;
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
=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
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>.
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
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;
#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
#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 ;
#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
#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)
SV * prefix ;
SV * hash ;
int in_memory ;
+#ifdef BERKELEY_DB_1_OR_2
INFO info ;
+#endif
#ifdef DB_VERSION_MAJOR
DBC * cursor ;
#endif
#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
}
-#ifdef TRACE
+#if defined(TRACE) && defined(BERKELEY_DB_1_OR_2)
static void
#ifdef CAN_PROTOTYPE
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 ;
return value ;
}
+
static DB_File
#ifdef CAN_PROTOTYPE
ParseOpenInfo(pTHX_ int isHASH, char *name, int flags, int mode, SV *sv)
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)) ;
}
#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
BOOT:
{
- GetVersionInfo(aTHX) ;
+ __getBerkeleyDBInfo() ;
+ DBT_clear(empty) ;
empty.data = &zero ;
empty.size = sizeof(recno_t) ;
- DBT_flags(empty) ;
}
double
{
DBT value ;
- DBT_flags(value) ;
+ DBT_clear(value) ;
CurrentDB = db ;
RETVAL = (((db->dbp)->get)(db->dbp, TXN &key, &value, 0) == 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) ;
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();
{
DBT value ;
- DBT_flags(value) ;
+ DBT_clear(value) ;
CurrentDB = db ;
RETVAL = do_SEQ(db, key, value, R_NEXT) ;
ST(0) = sv_newmortal();
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 */
DBTKEY key ;
DBT value ;
- DBT_flags(key) ;
- DBT_flags(value) ;
+ DBT_clear(key) ;
+ DBT_clear(value) ;
CurrentDB = db ;
/* First get the final value */
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) ;
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
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)
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)
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
+
+' ;
+}
+
# 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
my %Data =
(
0x053162 => {
- Type => "Btree",
+ Type => "Btree",
Versions =>
{
1 => "Unknown (older than 1.71)",
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",
}
},
) ;
# 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
#
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
--- /dev/null
+/*
+
+ 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 */
+
+}
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);
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
# 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; };
if (RETVAL == NULL)
SaveError(aTHX_ "%s",dlerror()) ;
else
- sv_setiv( ST(0), (IV)RETVAL);
+ sv_setiv( ST(0), PTR2IV(RETVAL) );
void *
if (RETVAL == NULL)
SaveError(aTHX_ "%s",dlerror()) ;
else
- sv_setiv( ST(0), (IV)RETVAL);
+ sv_setiv( ST(0), PTR2IV(RETVAL));
void
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);
}
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
if (RETVAL == NULL){
SaveError(aTHX_ "%d",GetLastError()) ;
} else {
- sv_setiv( ST(0), (IV)RETVAL);
+ sv_setiv( ST(0), PTR2IV(RETVAL) );
}
}
if (RETVAL == NULL)
SaveError(aTHX_ "%d",GetLastError()) ;
else
- sv_setiv( ST(0), (IV)RETVAL);
+ sv_setiv( ST(0), PTR2IV(RETVAL));
void
haverror:
ST(0) = sv_newmortal() ;
if (dlderr == 0)
- sv_setiv(ST(0), (IV)RETVAL);
+ sv_setiv(ST(0), PTR2IV(RETVAL));
void *
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
if (RETVAL == NULL)
SaveError(aTHX_ "%s",dlerror()) ;
else
- sv_setiv( ST(0), (IV)PTR_CAST RETVAL);
+ sv_setiv( ST(0), PTR2IV(RETVAL));
void *
if (RETVAL == NULL)
SaveError(aTHX_ "%s",dlerror()) ;
else
- sv_setiv( ST(0), (IV)PTR_CAST RETVAL);
+ sv_setiv( ST(0), PTR2IV(RETVAL));
void
if (obj == NULL)
SaveError(aTHX_ "%s",Strerror(errno));
else
- sv_setiv( ST(0), (IV)obj);
+ sv_setiv( ST(0), PTR2IV(obj) );
void *
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) );
}
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)
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
if (RETVAL == NULL)
SaveError(aTHX_ "%s",dlerror()) ;
else
- sv_setiv( ST(0), (IV)RETVAL);
+ sv_setiv( ST(0), PTR2IV(RETVAL) );
void *
if (RETVAL == NULL)
SaveError(aTHX_ "%s",dlerror()) ;
else
- sv_setiv( ST(0), (IV)RETVAL);
+ sv_setiv( ST(0), PTR2IV(RETVAL) );
void
if (RETVAL == NULL)
SaveError(aTHX_ "%s",dlerror()) ;
else
- sv_setiv( ST(0), (IV)RETVAL);
+ sv_setiv( ST(0), PTR2IV(RETVAL) );
void *
if (RETVAL == NULL)
SaveError(aTHX_ "%s",dlerror()) ;
else
- sv_setiv( ST(0), (IV)RETVAL);
+ sv_setiv( ST(0), PTR2IV(RETVAL) );
void
if (RETVAL == NULL)
SaveError(aTHX_ "%s",dlerror()) ;
else
- sv_setiv( ST(0), (IV)RETVAL);
+ sv_setiv( ST(0), PTR2IV(RETVAL) );
void *
if (RETVAL == NULL)
SaveError(aTHX_ "%s",dlerror()) ;
else
- sv_setiv( ST(0), (IV)RETVAL);
+ sv_setiv( ST(0), PTR2IV(RETVAL) );
void
ST(0) = &PL_sv_undef;
}
else {
- ST(0) = sv_2mortal(newSViv((IV) dlptr));
+ ST(0) = sv_2mortal(newSViv(PTR2IV(dlptr)));
}
/* 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
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
1;
-__DATA__
+__END__
=head1 NAME
}
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;
}
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);
archname64="-n32"
;;
esac
- ccflags="$ccflags -DUSE_64_BITS"
;;
esac
EOCBU
usemymalloc='n'
;;
esac
+# Configure gets fooled for some reason. There is no getpgid().
+d_getpgid='undef'
PERLVAR(Iyylval, YYSTYPE)
PERLVAR(Iglob_index, int)
-PERLVAR(Iefloatbuf, char*)
-PERLVAR(Iefloatsize, STRLEN)
PERLVAR(Isrand_called, bool)
PERLVARA(Iuudmap,256, char)
PERLVAR(Ibitcount, char *)
--- /dev/null
+import java.awt.event.*;
+import java.awt.*;
+public class Closer extends WindowAdapter {
+
+ public void windowClosing(WindowEvent e) {
+ Window w = e.getWindow();
+ w.dispose();
+ }
+}
($constname = $AUTOLOAD) =~ s/.*:://;
my $val = constant($constname, @_ ? $_[0] : 0);
if ($! != 0) {
- if ($! =~ /Invalid/ || $!{EINVAL}) {
+ if ($! =~ /Invalid/) {
$AutoLoader::AUTOLOAD = $AUTOLOAD;
goto &AutoLoader::AUTOLOAD;
}
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;
#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;
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;
}
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
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;
}
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
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;
}
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
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;
}
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
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;
}
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
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;
}
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
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;
}
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
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;
}
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
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;
}
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;
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++;
}
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;
}
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;
}
#endif
if (strEQ(name, "JNI_H"))
#ifdef JNI_H
+#ifdef WIN32
+ return 1;
+#else
return JNI_H;
+#endif
#else
goto not_there;
#endif
JNIEnv * env = FETCHENV;
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetVersion();
+#else
RETVAL = (*env)->GetVersion(env);
+#endif
RESTOREENV;
}
OUTPUT:
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:
const char * name
CODE:
{
+#ifdef WIN32
+ RETVAL = env->FindClass( name);
+#else
RETVAL = (*env)->FindClass(env, name);
+#endif
RESTOREENV;
}
OUTPUT:
jclass sub
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetSuperclass( sub);
+#else
RETVAL = (*env)->GetSuperclass(env, sub);
+#endif
RESTOREENV;
}
OUTPUT:
jclass sup
CODE:
{
+#ifdef WIN32
+ RETVAL = env->IsAssignableFrom( sub, sup);
+#else
RETVAL = (*env)->IsAssignableFrom(env, sub, sup);
+#endif
RESTOREENV;
}
OUTPUT:
jthrowable obj
CODE:
{
+#ifdef WIN32
+ RETVAL = env->Throw( obj);
+#else
RETVAL = (*env)->Throw(env, obj);
+#endif
RESTOREENV;
}
OUTPUT:
const char * msg
CODE:
{
+#ifdef WIN32
+ RETVAL = env->ThrowNew( clazz, msg);
+#else
RETVAL = (*env)->ThrowNew(env, clazz, msg);
+#endif
RESTOREENV;
}
OUTPUT:
JNIEnv * env = FETCHENV;
CODE:
{
+#ifdef WIN32
+ RETVAL = env->ExceptionOccurred();
+#else
RETVAL = (*env)->ExceptionOccurred(env);
+#endif
RESTOREENV;
}
OUTPUT:
JNIEnv * env = FETCHENV;
CODE:
{
+#ifdef WIN32
+ env->ExceptionDescribe();
+#else
(*env)->ExceptionDescribe(env);
+#endif
RESTOREENV;
}
JNIEnv * env = FETCHENV;
CODE:
{
+#ifdef WIN32
+ env->ExceptionClear();
+#else
(*env)->ExceptionClear(env);
+#endif
RESTOREENV;
}
const char * msg
CODE:
{
+#ifdef WIN32
+ env->FatalError( msg);
+#else
(*env)->FatalError(env, msg);
+#endif
RESTOREENV;
}
jobject lobj
CODE:
{
+#ifdef WIN32
+ RETVAL = env->NewGlobalRef(lobj);
+#else
RETVAL = (*env)->NewGlobalRef(env, lobj);
+#endif
RESTOREENV;
}
OUTPUT:
jobject gref
CODE:
{
+#ifdef WIN32
+ env->DeleteGlobalRef(gref);
+#else
(*env)->DeleteGlobalRef(env, gref);
+#endif
RESTOREENV;
}
jobject obj
CODE:
{
+#ifdef WIN32
+ env->DeleteLocalRef( obj);
+#else
(*env)->DeleteLocalRef(env, obj);
+#endif
RESTOREENV;
}
jobject obj2
CODE:
{
+#ifdef WIN32
+ RETVAL = env->IsSameObject(obj1,obj2);
+#else
RETVAL = (*env)->IsSameObject(env, obj1,obj2);
+#endif
RESTOREENV;
}
OUTPUT:
jclass clazz
CODE:
{
+#ifdef WIN32
+ RETVAL = env->AllocObject(clazz);
+#else
RETVAL = (*env)->AllocObject(env, clazz);
+#endif
RESTOREENV;
}
OUTPUT:
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:
jvalue * args
CODE:
{
+#ifdef WIN32
+ RETVAL = env->NewObjectA(clazz,methodID,args);
+#else
RETVAL = (*env)->NewObjectA(env, clazz,methodID,args);
+#endif
RESTOREENV;
}
OUTPUT:
jobject obj
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetObjectClass(obj);
+#else
RETVAL = (*env)->GetObjectClass(env, obj);
+#endif
RESTOREENV;
}
OUTPUT:
jclass clazz
CODE:
{
+#ifdef WIN32
+ RETVAL = env->IsInstanceOf(obj,clazz);
+#else
RETVAL = (*env)->IsInstanceOf(env, obj,clazz);
+#endif
RESTOREENV;
}
OUTPUT:
const char * sig
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetMethodID(clazz,name,sig);
+#else
RETVAL = (*env)->GetMethodID(env, clazz,name,sig);
+#endif
RESTOREENV;
}
OUTPUT:
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:
jvalue * args
CODE:
{
+#ifdef WIN32
+ RETVAL = env->CallObjectMethodA(obj,methodID,args);
+#else
RETVAL = (*env)->CallObjectMethodA(env, obj,methodID,args);
+#endif
RESTOREENV;
}
OUTPUT:
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:
jvalue * args
CODE:
{
+#ifdef WIN32
+ RETVAL = env->CallBooleanMethodA(obj,methodID, args);
+#else
RETVAL = (*env)->CallBooleanMethodA(env, obj,methodID, args);
+#endif
RESTOREENV;
}
OUTPUT:
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:
jvalue * args
CODE:
{
+#ifdef WIN32
+ RETVAL = env->CallByteMethodA(obj,methodID,args);
+#else
RETVAL = (*env)->CallByteMethodA(env, obj,methodID,args);
+#endif
RESTOREENV;
}
OUTPUT:
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:
jvalue * args
CODE:
{
+#ifdef WIN32
+ RETVAL = env->CallCharMethodA(obj,methodID,args);
+#else
RETVAL = (*env)->CallCharMethodA(env, obj,methodID,args);
+#endif
RESTOREENV;
}
OUTPUT:
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:
jvalue * args
CODE:
{
+#ifdef WIN32
+ RETVAL = env->CallShortMethodA(obj,methodID,args);
+#else
RETVAL = (*env)->CallShortMethodA(env, obj,methodID,args);
+#endif
RESTOREENV;
}
OUTPUT:
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:
jvalue * args
CODE:
{
+#ifdef WIN32
+ RETVAL = env->CallIntMethodA(obj,methodID,args);
+#else
RETVAL = (*env)->CallIntMethodA(env, obj,methodID,args);
+#endif
RESTOREENV;
}
OUTPUT:
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:
jvalue * args
CODE:
{
+#ifdef WIN32
+ RETVAL = env->CallLongMethodA(obj,methodID,args);
+#else
RETVAL = (*env)->CallLongMethodA(env, obj,methodID,args);
+#endif
RESTOREENV;
}
OUTPUT:
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:
jvalue * args
CODE:
{
+#ifdef WIN32
+ RETVAL = env->CallFloatMethodA(obj,methodID,args);
+#else
RETVAL = (*env)->CallFloatMethodA(env, obj,methodID,args);
+#endif
RESTOREENV;
}
OUTPUT:
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:
jvalue * args
CODE:
{
+#ifdef WIN32
+ RETVAL = env->CallDoubleMethodA(obj,methodID,args);
+#else
RETVAL = (*env)->CallDoubleMethodA(env, obj,methodID,args);
+#endif
RESTOREENV;
}
OUTPUT:
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;
}
jvalue * args
CODE:
{
+#ifdef WIN32
+ env->CallVoidMethodA(obj,methodID,args);
+#else
(*env)->CallVoidMethodA(env, obj,methodID,args);
+#endif
RESTOREENV;
}
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:
jvalue * args
CODE:
{
+#ifdef WIN32
+ RETVAL = env->CallNonvirtualObjectMethodA(obj,clazz,methodID,args);
+#else
RETVAL = (*env)->CallNonvirtualObjectMethodA(env, obj,clazz,methodID,args);
+#endif
RESTOREENV;
}
OUTPUT:
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:
jvalue * args
CODE:
{
+#ifdef WIN32
+ RETVAL = env->CallNonvirtualBooleanMethodA(obj,clazz,methodID, args);
+#else
RETVAL = (*env)->CallNonvirtualBooleanMethodA(env, obj,clazz,methodID, args);
+#endif
RESTOREENV;
}
OUTPUT:
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:
jvalue * args
CODE:
{
+#ifdef WIN32
+ RETVAL = env->CallNonvirtualByteMethodA(obj,clazz,methodID,args);
+#else
RETVAL = (*env)->CallNonvirtualByteMethodA(env, obj,clazz,methodID,args);
+#endif
RESTOREENV;
}
OUTPUT:
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:
jvalue * args
CODE:
{
+#ifdef WIN32
+ RETVAL = env->CallNonvirtualCharMethodA(obj,clazz,methodID,args);
+#else
RETVAL = (*env)->CallNonvirtualCharMethodA(env, obj,clazz,methodID,args);
+#endif
RESTOREENV;
}
OUTPUT:
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:
jvalue * args
CODE:
{
+#ifdef WIN32
+ RETVAL = env->CallNonvirtualShortMethodA(obj,clazz,methodID,args);
+#else
RETVAL = (*env)->CallNonvirtualShortMethodA(env, obj,clazz,methodID,args);
+#endif
RESTOREENV;
}
OUTPUT:
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:
jvalue * args
CODE:
{
+#ifdef WIN32
+ RETVAL = env->CallNonvirtualIntMethodA(obj,clazz,methodID,args);
+#else
RETVAL = (*env)->CallNonvirtualIntMethodA(env, obj,clazz,methodID,args);
+#endif
RESTOREENV;
}
OUTPUT:
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:
jvalue * args
CODE:
{
+#ifdef WIN32
+ RETVAL = env->CallNonvirtualLongMethodA(obj,clazz,methodID,args);
+#else
RETVAL = (*env)->CallNonvirtualLongMethodA(env, obj,clazz,methodID,args);
+#endif
RESTOREENV;
}
OUTPUT:
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:
jvalue * args
CODE:
{
+#ifdef WIN32
+ RETVAL = env->CallNonvirtualFloatMethodA(obj,clazz,methodID,args);
+#else
RETVAL = (*env)->CallNonvirtualFloatMethodA(env, obj,clazz,methodID,args);
+#endif
RESTOREENV;
}
OUTPUT:
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:
jvalue * args
CODE:
{
+#ifdef WIN32
+ RETVAL = env->CallNonvirtualDoubleMethodA(obj,clazz,methodID,args);
+#else
RETVAL = (*env)->CallNonvirtualDoubleMethodA(env, obj,clazz,methodID,args);
+#endif
RESTOREENV;
}
OUTPUT:
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;
}
jvalue * args
CODE:
{
+#ifdef WIN32
+ env->CallNonvirtualVoidMethodA(obj,clazz,methodID,args);
+#else
(*env)->CallNonvirtualVoidMethodA(env, obj,clazz,methodID,args);
+#endif
RESTOREENV;
}
const char * sig
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetFieldID(clazz,name,sig);
+#else
RETVAL = (*env)->GetFieldID(env, clazz,name,sig);
+#endif
RESTOREENV;
}
OUTPUT:
char * sig = 0;
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetObjectField(obj,fieldID);
+#else
RETVAL = (*env)->GetObjectField(env, obj,fieldID);
+#endif
RESTOREENV;
}
OUTPUT:
char * sig = 0;
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetBooleanField(obj,fieldID);
+#else
RETVAL = (*env)->GetBooleanField(env, obj,fieldID);
+#endif
RESTOREENV;
}
OUTPUT:
char * sig = 0;
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetByteField(obj,fieldID);
+#else
RETVAL = (*env)->GetByteField(env, obj,fieldID);
+#endif
RESTOREENV;
}
OUTPUT:
char * sig = 0;
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetCharField(obj,fieldID);
+#else
RETVAL = (*env)->GetCharField(env, obj,fieldID);
+#endif
RESTOREENV;
}
OUTPUT:
char * sig = 0;
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetShortField(obj,fieldID);
+#else
RETVAL = (*env)->GetShortField(env, obj,fieldID);
+#endif
RESTOREENV;
}
OUTPUT:
char * sig = 0;
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetIntField(obj,fieldID);
+#else
RETVAL = (*env)->GetIntField(env, obj,fieldID);
+#endif
RESTOREENV;
}
OUTPUT:
char * sig = 0;
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetLongField(obj,fieldID);
+#else
RETVAL = (*env)->GetLongField(env, obj,fieldID);
+#endif
RESTOREENV;
}
OUTPUT:
char * sig = 0;
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetFloatField(obj,fieldID);
+#else
RETVAL = (*env)->GetFloatField(env, obj,fieldID);
+#endif
RESTOREENV;
}
OUTPUT:
char * sig = 0;
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetDoubleField(obj,fieldID);
+#else
RETVAL = (*env)->GetDoubleField(env, obj,fieldID);
+#endif
RESTOREENV;
}
OUTPUT:
jobject val
CODE:
{
+#ifdef WIN32
+ env->SetObjectField(obj,fieldID,val);
+#else
(*env)->SetObjectField(env, obj,fieldID,val);
+#endif
RESTOREENV;
}
jboolean val
CODE:
{
+#ifdef WIN32
+ env->SetBooleanField(obj,fieldID,val);
+#else
(*env)->SetBooleanField(env, obj,fieldID,val);
+#endif
RESTOREENV;
}
jbyte val
CODE:
{
+#ifdef WIN32
+ env->SetByteField(obj,fieldID,val);
+#else
(*env)->SetByteField(env, obj,fieldID,val);
+#endif
RESTOREENV;
}
jchar val
CODE:
{
+#ifdef WIN32
+ env->SetCharField(obj,fieldID,val);
+#else
(*env)->SetCharField(env, obj,fieldID,val);
+#endif
RESTOREENV;
}
jshort val
CODE:
{
+#ifdef WIN32
+ env->SetShortField(obj,fieldID,val);
+#else
(*env)->SetShortField(env, obj,fieldID,val);
+#endif
RESTOREENV;
}
jint val
CODE:
{
+#ifdef WIN32
+ env->SetIntField(obj,fieldID,val);
+#else
(*env)->SetIntField(env, obj,fieldID,val);
+#endif
RESTOREENV;
}
jlong val
CODE:
{
+#ifdef WIN32
+ env->SetLongField(obj,fieldID,val);
+#else
(*env)->SetLongField(env, obj,fieldID,val);
+#endif
RESTOREENV;
}
jfloat val
CODE:
{
+#ifdef WIN32
+ env->SetFloatField(obj,fieldID,val);
+#else
(*env)->SetFloatField(env, obj,fieldID,val);
+#endif
RESTOREENV;
}
jdouble val
CODE:
{
+#ifdef WIN32
+ env->SetDoubleField(obj,fieldID,val);
+#else
(*env)->SetDoubleField(env, obj,fieldID,val);
+#endif
RESTOREENV;
}
const char * sig
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetStaticMethodID(clazz,name,sig);
+#else
RETVAL = (*env)->GetStaticMethodID(env, clazz,name,sig);
+#endif
RESTOREENV;
}
OUTPUT:
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:
jvalue * args
CODE:
{
+#ifdef WIN32
+ RETVAL = env->CallStaticObjectMethodA(clazz,methodID,args);
+#else
RETVAL = (*env)->CallStaticObjectMethodA(env, clazz,methodID,args);
+#endif
RESTOREENV;
}
OUTPUT:
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:
jvalue * args
CODE:
{
+#ifdef WIN32
+ RETVAL = env->CallStaticBooleanMethodA(clazz,methodID,args);
+#else
RETVAL = (*env)->CallStaticBooleanMethodA(env, clazz,methodID,args);
+#endif
RESTOREENV;
}
OUTPUT:
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:
jvalue * args
CODE:
{
+#ifdef WIN32
+ RETVAL = env->CallStaticByteMethodA(clazz,methodID,args);
+#else
RETVAL = (*env)->CallStaticByteMethodA(env, clazz,methodID,args);
+#endif
RESTOREENV;
}
OUTPUT:
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:
jvalue * args
CODE:
{
+#ifdef WIN32
+ RETVAL = env->CallStaticCharMethodA(clazz,methodID,args);
+#else
RETVAL = (*env)->CallStaticCharMethodA(env, clazz,methodID,args);
+#endif
RESTOREENV;
}
OUTPUT:
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:
jvalue * args
CODE:
{
+#ifdef WIN32
+ RETVAL = env->CallStaticShortMethodA(clazz,methodID,args);
+#else
RETVAL = (*env)->CallStaticShortMethodA(env, clazz,methodID,args);
+#endif
RESTOREENV;
}
OUTPUT:
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:
jvalue * args
CODE:
{
+#ifdef WIN32
+ RETVAL = env->CallStaticIntMethodA(clazz,methodID,args);
+#else
RETVAL = (*env)->CallStaticIntMethodA(env, clazz,methodID,args);
+#endif
RESTOREENV;
}
OUTPUT:
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:
jvalue * args
CODE:
{
+#ifdef WIN32
+ RETVAL = env->CallStaticLongMethodA(clazz,methodID,args);
+#else
RETVAL = (*env)->CallStaticLongMethodA(env, clazz,methodID,args);
+#endif
RESTOREENV;
}
OUTPUT:
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:
jvalue * args
CODE:
{
+#ifdef WIN32
+ RETVAL = env->CallStaticFloatMethodA(clazz,methodID,args);
+#else
RETVAL = (*env)->CallStaticFloatMethodA(env, clazz,methodID,args);
+#endif
RESTOREENV;
}
OUTPUT:
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:
jvalue * args
CODE:
{
+#ifdef WIN32
+ RETVAL = env->CallStaticDoubleMethodA(clazz,methodID,args);
+#else
RETVAL = (*env)->CallStaticDoubleMethodA(env, clazz,methodID,args);
+#endif
RESTOREENV;
}
OUTPUT:
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;
}
jvalue * args
CODE:
{
+#ifdef WIN32
+ env->CallStaticVoidMethodA(cls,methodID,args);
+#else
(*env)->CallStaticVoidMethodA(env, cls,methodID,args);
+#endif
RESTOREENV;
}
const char * sig
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetStaticFieldID(clazz,name,sig);
+#else
RETVAL = (*env)->GetStaticFieldID(env, clazz,name,sig);
+#endif
RESTOREENV;
}
OUTPUT:
char * sig = 0;
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetStaticObjectField(clazz,fieldID);
+#else
RETVAL = (*env)->GetStaticObjectField(env, clazz,fieldID);
+#endif
RESTOREENV;
}
OUTPUT:
char * sig = 0;
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetStaticBooleanField(clazz,fieldID);
+#else
RETVAL = (*env)->GetStaticBooleanField(env, clazz,fieldID);
+#endif
RESTOREENV;
}
OUTPUT:
char * sig = 0;
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetStaticByteField(clazz,fieldID);
+#else
RETVAL = (*env)->GetStaticByteField(env, clazz,fieldID);
+#endif
RESTOREENV;
}
OUTPUT:
char * sig = 0;
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetStaticCharField(clazz,fieldID);
+#else
RETVAL = (*env)->GetStaticCharField(env, clazz,fieldID);
+#endif
RESTOREENV;
}
OUTPUT:
char * sig = 0;
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetStaticShortField(clazz,fieldID);
+#else
RETVAL = (*env)->GetStaticShortField(env, clazz,fieldID);
+#endif
RESTOREENV;
}
OUTPUT:
char * sig = 0;
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetStaticIntField(clazz,fieldID);
+#else
RETVAL = (*env)->GetStaticIntField(env, clazz,fieldID);
+#endif
RESTOREENV;
}
OUTPUT:
char * sig = 0;
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetStaticLongField(clazz,fieldID);
+#else
RETVAL = (*env)->GetStaticLongField(env, clazz,fieldID);
+#endif
RESTOREENV;
}
OUTPUT:
char * sig = 0;
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetStaticFloatField(clazz,fieldID);
+#else
RETVAL = (*env)->GetStaticFloatField(env, clazz,fieldID);
+#endif
RESTOREENV;
}
OUTPUT:
char * sig = 0;
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetStaticDoubleField(clazz,fieldID);
+#else
RETVAL = (*env)->GetStaticDoubleField(env, clazz,fieldID);
+#endif
RESTOREENV;
}
OUTPUT:
jobject value
CODE:
{
+#ifdef WIN32
+ env->SetStaticObjectField(clazz,fieldID,value);
+#else
(*env)->SetStaticObjectField(env, clazz,fieldID,value);
+#endif
RESTOREENV;
}
jboolean value
CODE:
{
+#ifdef WIN32
+ env->SetStaticBooleanField(clazz,fieldID,value);
+#else
(*env)->SetStaticBooleanField(env, clazz,fieldID,value);
+#endif
RESTOREENV;
}
jbyte value
CODE:
{
+#ifdef WIN32
+ env->SetStaticByteField(clazz,fieldID,value);
+#else
(*env)->SetStaticByteField(env, clazz,fieldID,value);
+#endif
RESTOREENV;
}
jchar value
CODE:
{
+#ifdef WIN32
+ env->SetStaticCharField(clazz,fieldID,value);
+#else
(*env)->SetStaticCharField(env, clazz,fieldID,value);
+#endif
RESTOREENV;
}
jshort value
CODE:
{
+#ifdef WIN32
+ env->SetStaticShortField(clazz,fieldID,value);
+#else
(*env)->SetStaticShortField(env, clazz,fieldID,value);
+#endif
RESTOREENV;
}
jint value
CODE:
{
+#ifdef WIN32
+ env->SetStaticIntField(clazz,fieldID,value);
+#else
(*env)->SetStaticIntField(env, clazz,fieldID,value);
+#endif
RESTOREENV;
}
jlong value
CODE:
{
+#ifdef WIN32
+ env->SetStaticLongField(clazz,fieldID,value);
+#else
(*env)->SetStaticLongField(env, clazz,fieldID,value);
+#endif
RESTOREENV;
}
jfloat value
CODE:
{
+#ifdef WIN32
+ env->SetStaticFloatField(clazz,fieldID,value);
+#else
(*env)->SetStaticFloatField(env, clazz,fieldID,value);
+#endif
RESTOREENV;
}
jdouble value
CODE:
{
+#ifdef WIN32
+ env->SetStaticDoubleField(clazz,fieldID,value);
+#else
(*env)->SetStaticDoubleField(env, clazz,fieldID,value);
+#endif
RESTOREENV;
}
const jchar * unicode
CODE:
{
+#ifdef WIN32
+ RETVAL = env->NewString(unicode, unicode_len_);
+#else
RETVAL = (*env)->NewString(env, unicode, unicode_len_);
+#endif
RESTOREENV;
}
OUTPUT:
jstring str
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetStringLength(str);
+#else
RETVAL = (*env)->GetStringLength(env, str);
+#endif
RESTOREENV;
}
OUTPUT:
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)
const char * utf
CODE:
{
+#ifdef WIN32
+ RETVAL = env->NewStringUTF(utf);
+#else
RETVAL = (*env)->NewStringUTF(env, utf);
+#endif
RESTOREENV;
}
OUTPUT:
jstring str
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetStringUTFLength(str);
+#else
RETVAL = (*env)->GetStringUTFLength(env, str);
+#endif
RESTOREENV;
}
OUTPUT:
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
jarray array
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetArrayLength(array);
+#else
RETVAL = (*env)->GetArrayLength(env, array);
+#endif
RESTOREENV;
}
OUTPUT:
jobject init
CODE:
{
+#ifdef WIN32
+ RETVAL = env->NewObjectArray(len,clazz,init);
+#else
RETVAL = (*env)->NewObjectArray(env, len,clazz,init);
+#endif
RESTOREENV;
}
OUTPUT:
jsize index
CODE:
{
+#ifdef WIN32
+ RETVAL = env->GetObjectArrayElement(array,index);
+#else
RETVAL = (*env)->GetObjectArrayElement(env, array,index);
+#endif
RESTOREENV;
}
OUTPUT:
jobject val
CODE:
{
+#ifdef WIN32
+ env->SetObjectArrayElement(array,index,val);
+#else
(*env)->SetObjectArrayElement(env, array,index,val);
+#endif
RESTOREENV;
}
jsize len
CODE:
{
+#ifdef WIN32
+ RETVAL = env->NewBooleanArray(len);
+#else
RETVAL = (*env)->NewBooleanArray(env, len);
+#endif
RESTOREENV;
}
OUTPUT:
jsize len
CODE:
{
+#ifdef WIN32
+ RETVAL = env->NewByteArray(len);
+#else
RETVAL = (*env)->NewByteArray(env, len);
+#endif
RESTOREENV;
}
OUTPUT:
jsize len
CODE:
{
+#ifdef WIN32
+ RETVAL = env->NewCharArray(len);
+#else
RETVAL = (*env)->NewCharArray(env, len);
+#endif
RESTOREENV;
}
OUTPUT:
jsize len
CODE:
{
+#ifdef WIN32
+ RETVAL = env->NewShortArray(len);
+#else
RETVAL = (*env)->NewShortArray(env, len);
+#endif
RESTOREENV;
}
OUTPUT:
jsize len
CODE:
{
+#ifdef WIN32
+ RETVAL = env->NewIntArray(len);
+#else
RETVAL = (*env)->NewIntArray(env, len);
+#endif
RESTOREENV;
}
OUTPUT:
jsize len
CODE:
{
+#ifdef WIN32
+ RETVAL = env->NewLongArray(len);
+#else
RETVAL = (*env)->NewLongArray(env, len);
+#endif
RESTOREENV;
}
OUTPUT:
jsize len
CODE:
{
+#ifdef WIN32
+ RETVAL = env->NewFloatArray(len);
+#else
RETVAL = (*env)->NewFloatArray(env, len);
+#endif
RESTOREENV;
}
OUTPUT:
jsize len
CODE:
{
+#ifdef WIN32
+ RETVAL = env->NewDoubleArray(len);
+#else
RETVAL = (*env)->NewDoubleArray(env, len);
+#endif
RESTOREENV;
}
OUTPUT:
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;
else
PUSHs(&PL_sv_no);
}
+#ifdef WIN32
+ env->ReleaseBooleanArrayElements(array,RETVAL,JNI_ABORT);
+#else
(*env)->ReleaseBooleanArrayElements(env, array,RETVAL,JNI_ABORT);
+#endif
RESTOREENV;
}
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;
else
PUSHs(&PL_sv_no);
}
+#ifdef WIN32
+ env->ReleaseByteArrayElements(array,RETVAL,JNI_ABORT);
+#else
(*env)->ReleaseByteArrayElements(env, array,RETVAL,JNI_ABORT);
+#endif
RESTOREENV;
}
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;
else
PUSHs(&PL_sv_no);
}
+#ifdef WIN32
+ env->ReleaseCharArrayElements(array,RETVAL,JNI_ABORT);
+#else
(*env)->ReleaseCharArrayElements(env, array,RETVAL,JNI_ABORT);
+#endif
RESTOREENV;
}
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;
else
PUSHs(&PL_sv_no);
}
+#ifdef WIN32
+ env->ReleaseShortArrayElements(array,RETVAL,JNI_ABORT);
+#else
(*env)->ReleaseShortArrayElements(env, array,RETVAL,JNI_ABORT);
+#endif
RESTOREENV;
}
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;
else
PUSHs(&PL_sv_no);
}
+#ifdef WIN32
+ env->ReleaseIntArrayElements(array,RETVAL,JNI_ABORT);
+#else
(*env)->ReleaseIntArrayElements(env, array,RETVAL,JNI_ABORT);
+#endif
RESTOREENV;
}
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;
else
PUSHs(&PL_sv_no);
}
+#ifdef WIN32
+ env->ReleaseLongArrayElements(array,RETVAL,JNI_ABORT);
+#else
(*env)->ReleaseLongArrayElements(env, array,RETVAL,JNI_ABORT);
+#endif
RESTOREENV;
}
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;
else
PUSHs(&PL_sv_no);
}
+#ifdef WIN32
+ env->ReleaseFloatArrayElements(array,RETVAL,JNI_ABORT);
+#else
(*env)->ReleaseFloatArrayElements(env, array,RETVAL,JNI_ABORT);
+#endif
RESTOREENV;
}
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;
else
PUSHs(&PL_sv_no);
}
+#ifdef WIN32
+ env->ReleaseDoubleArrayElements(array,RETVAL,JNI_ABORT);
+#else
(*env)->ReleaseDoubleArrayElements(env, array,RETVAL,JNI_ABORT);
+#endif
RESTOREENV;
}
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;
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;
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;
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;
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;
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;
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;
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;
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
jint nMethods
CODE:
{
+#ifdef WIN32
+ RETVAL = env->RegisterNatives(clazz,methods,nMethods);
+#else
RETVAL = (*env)->RegisterNatives(env, clazz,methods,nMethods);
+#endif
}
SysRet
jclass clazz
CODE:
{
+#ifdef WIN32
+ RETVAL = env->UnregisterNatives(clazz);
+#else
RETVAL = (*env)->UnregisterNatives(env, clazz);
+#endif
}
OUTPUT:
RETVAL
jobject obj
CODE:
{
+#ifdef WIN32
+ RETVAL = env->MonitorEnter(obj);
+#else
RETVAL = (*env)->MonitorEnter(env, obj);
+#endif
RESTOREENV;
}
OUTPUT:
jobject obj
CODE:
{
+#ifdef WIN32
+ RETVAL = env->MonitorExit(obj);
+#else
RETVAL = (*env)->MonitorExit(env, obj);
+#endif
RESTOREENV;
}
OUTPUT:
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;
}
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");
+ }
}
}
--- /dev/null
+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;
--- /dev/null
+# 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;
--- /dev/null
+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;
--- /dev/null
+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;
--- /dev/null
+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;
#!/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;
+}
+
# 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;
# (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";
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);
$var = ($type) tmp;
}
else
- Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
+ croak(\"$var is not of type ${ntype}\")
OUTPUT
T_JMEM
# 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
# $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));
# $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
--- /dev/null
+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);
+ }
+