# $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
#
-# Generated on Fri Jan 5 20:11:52 EET 2001 [metaconfig 3.0 PL70]
+# Generated on Tue Jan 23 16:39:46 EET 2001 [metaconfig 3.0 PL70]
# (with additional metaconfig patches by perlbug@perl.org)
cat >c1$$ <<EOF
d_shmdt=''
d_shmget=''
d_sigaction=''
+d_sigprocmask=''
d_sigsetjmp=''
d_msg_ctrunc=''
d_msg_dontroute=''
sig_name_init=''
sig_num=''
sig_num_init=''
+sig_size=''
installsitearch=''
sitearch=''
sitearchexp=''
*)
if `sh -c "PATH= test true" >/dev/null 2>&1`; then
echo "Using the test built into your sh."
- echo "Using the test built into your sh."
test=test
_test=test
fi
;;
esac
+case "$useithreads$use5005threads" in
+"$define$define")
+ $cat >&4 <<EOM
+
+You cannot have both the ithreads and the 5.005 threads enabled
+at the same time. Disabling the 5.005 threads since they are
+much less stable than the ithreads.
+
+EOM
+ use5005threads="$undef"
+ ;;
+esac
+
case "$d_oldpthreads" in
'') : Configure tests would be welcome here. For now, assume undef.
val="$undef" ;;
esac
$rm -f try.* try
+case "$useperlio" in
+$define|true|[yY]*) dflt='y';;
+*) dflt='n';;
+esac
+cat <<EOM
+
+Previous version of $package used the standard IO mechanisms as
+defined in <stdio.h>. Versions 5.003_02 and later of perl allow
+alternate IO mechanisms via the PerlIO abstraction layer, but the
+stdio mechanism is still the default. This abstraction layer can
+use AT&T's sfio (if you already have sfio installed) or regular stdio.
+Using PerlIO with sfio may cause problems with some extension modules.
+
+If this doesn't make any sense to you, just accept the default '$dflt'.
+EOM
+rp='Use the experimental PerlIO abstraction layer?'
+. ./myread
+case "$ans" in
+y|Y)
+ val="$define"
+ ;;
+*)
+ echo "Ok, doing things the stdio way."
+ val="$undef"
+ ;;
+esac
+set useperlio
+eval $setvar
+
+case "$usesocks" in
+$define|true|[yY]*)
+ case "$useperlio" in
+ $define|true|[yY]*) ;;
+ *) cat >&4 <<EOM
+
+You are using the SOCKS proxy protocol library which means that you
+should also use the PerlIO layer. You may be headed for trouble.
+
+EOM
+ ;;
+ esac
+ ;;
+esac
+
+
: determine the architecture name
echo " "
if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
esac
;;
esac
+case "$useperlio" in
+$define)
+ echo "Perlio selected." >&4
+ case "$archname" in
+ *-perlio*) echo "...and architecture name already has -perlio." >&4
+ ;;
+ *) archname="$archname-perlio"
+ echo "...setting architecture name to $archname." >&4
+ ;;
+ esac
+ ;;
+esac
: determine root of directory hierarchy where package will be installed.
case "$prefix" in
installsitebin="$sitebinexp"
fi
-case "$useperlio" in
-$define|true|[yY]*) dflt='y';;
-*) dflt='n';;
-esac
-cat <<EOM
-
-Previous version of $package used the standard IO mechanisms as
-defined in <stdio.h>. Versions 5.003_02 and later of perl allow
-alternate IO mechanisms via the PerlIO abstraction layer, but the
-stdio mechanism is still the default. This abstraction layer can
-use AT&T's sfio (if you already have sfio installed) or regular stdio.
-Using PerlIO with sfio may cause problems with some extension modules.
-
-If this doesn't make any sense to you, just accept the default '$dflt'.
-EOM
-rp='Use the experimental PerlIO abstraction layer?'
-. ./myread
-case "$ans" in
-y|Y)
- val="$define"
- ;;
-*)
- echo "Ok, doing things the stdio way."
- val="$undef"
- ;;
-esac
-set useperlio
-eval $setvar
-
-case "$usesocks" in
-$define|true|[yY]*)
- case "$useperlio" in
- $define|true|[yY]*) ;;
- *) cat >&4 <<EOM
-
-You are using the SOCKS proxy protocol library which means that you
-should also use the PerlIO layer. You may be headed for trouble.
-
-EOM
- ;;
- esac
- ;;
-esac
-
-
case "$vendorprefix" in
'') d_vendorbin="$undef"
vendorbin=''
set d_sigaction; eval $setvar
$rm -f try try$_o try.c
+: see if sigprocmask exists
+set sigprocmask d_sigprocmask
+eval $inlibc
+
: see if sigsetjmp exists
echo " "
case "$d_sigsetjmp" in
}
printf "\n"
}'
+sig_size=`echo $sig_name | awk '{print NF}'`
$rm -f signal signal.c signal.awk signal.lst signal_cmd
echo " "
d_shmdt='$d_shmdt'
d_shmget='$d_shmget'
d_sigaction='$d_sigaction'
+d_sigprocmask='$d_sigprocmask'
d_sigsetjmp='$d_sigsetjmp'
d_socket='$d_socket'
d_socklen_t='$d_socklen_t'
sig_name_init='$sig_name_init'
sig_num='$sig_num'
sig_num_init='$sig_num_init'
+sig_size='$sig_size'
signal_t='$signal_t'
sitearch='$sitearch'
sitearchexp='$sitearchexp'
ext/B/B/Bytecode.pm Compiler Bytecode backend
ext/B/B/C.pm Compiler C backend
ext/B/B/CC.pm Compiler CC backend
+ext/B/B/Concise.pm Compiler Concise backend
ext/B/B/Debug.pm Compiler Debug backend
ext/B/B/Deparse.pm Compiler Deparse backend
ext/B/B/Disassembler.pm Compiler Disassembler backend
ext/DynaLoader/XSLoader_pm.PL Simple XS Loader perl module
ext/DynaLoader/dl_aix.xs AIX implementation
ext/DynaLoader/dl_beos.xs BeOS implementation
+ext/DynaLoader/dl_dllload.xs S/390 dllload() style implementation
ext/DynaLoader/dl_dld.xs GNU dld style implementation
ext/DynaLoader/dl_dlopen.xs BSD/SunOS4&5 dlopen() style implementation
ext/DynaLoader/dl_dyld.xs NeXT/Apple dyld implementation
ext/Encode/Encode.xs Encode extension
ext/Encode/Encode/EncodeFormat.pod Encoding table format
ext/Encode/Encode/ascii.enc Encoding tables
+ext/Encode/Encode/ascii.ucm Encoding tables
ext/Encode/Encode/big5.enc Encoding tables
ext/Encode/Encode/cp1006.enc Encoding tables
ext/Encode/Encode/cp1047.enc Encoding tables
+ext/Encode/Encode/cp1047.ucm Encoding tables
ext/Encode/Encode/cp1250.enc Encoding tables
+ext/Encode/Encode/cp1250.ucm Encoding tables
ext/Encode/Encode/cp1251.enc Encoding tables
ext/Encode/Encode/cp1252.enc Encoding tables
ext/Encode/Encode/cp1253.enc Encoding tables
ext/Encode/Encode/cp1257.enc Encoding tables
ext/Encode/Encode/cp1258.enc Encoding tables
ext/Encode/Encode/cp37.enc Encoding tables
+ext/Encode/Encode/cp37.ucm Encoding tables
ext/Encode/Encode/cp424.enc Encoding tables
ext/Encode/Encode/cp437.enc Encoding tables
ext/Encode/Encode/cp737.enc Encoding tables
ext/Encode/Encode/cp949.enc Encoding tables
ext/Encode/Encode/cp950.enc Encoding tables
ext/Encode/Encode/dingbats.enc Encoding tables
+ext/Encode/Encode/dingbats.ucm Encoding tables
ext/Encode/Encode/euc-cn.enc Encoding tables
ext/Encode/Encode/euc-jp.enc Encoding tables
ext/Encode/Encode/euc-kr.enc Encoding tables
ext/Encode/Encode/iso2022-kr.enc Encoding tables
ext/Encode/Encode/iso2022.enc Encoding tables
ext/Encode/Encode/iso8859-1.enc Encoding tables
+ext/Encode/Encode/iso8859-1.ucm Encoding tables
ext/Encode/Encode/iso8859-10.enc Encoding tables
+ext/Encode/Encode/iso8859-10.ucm Encoding tables
ext/Encode/Encode/iso8859-13.enc Encoding tables
+ext/Encode/Encode/iso8859-13.ucm Encoding tables
ext/Encode/Encode/iso8859-14.enc Encoding tables
+ext/Encode/Encode/iso8859-14.ucm Encoding tables
ext/Encode/Encode/iso8859-15.enc Encoding tables
+ext/Encode/Encode/iso8859-15.ucm Encoding tables
ext/Encode/Encode/iso8859-16.enc Encoding tables
+ext/Encode/Encode/iso8859-16.ucm Encoding tables
ext/Encode/Encode/iso8859-2.enc Encoding tables
+ext/Encode/Encode/iso8859-2.ucm Encoding tables
ext/Encode/Encode/iso8859-3.enc Encoding tables
+ext/Encode/Encode/iso8859-3.ucm Encoding tables
ext/Encode/Encode/iso8859-4.enc Encoding tables
+ext/Encode/Encode/iso8859-4.ucm Encoding tables
ext/Encode/Encode/iso8859-5.enc Encoding tables
+ext/Encode/Encode/iso8859-5.ucm Encoding tables
ext/Encode/Encode/iso8859-6.enc Encoding tables
+ext/Encode/Encode/iso8859-6.ucm Encoding tables
ext/Encode/Encode/iso8859-7.enc Encoding tables
+ext/Encode/Encode/iso8859-7.ucm Encoding tables
ext/Encode/Encode/iso8859-8.enc Encoding tables
+ext/Encode/Encode/iso8859-8.ucm Encoding tables
ext/Encode/Encode/iso8859-9.enc Encoding tables
+ext/Encode/Encode/iso8859-9.ucm Encoding tables
ext/Encode/Encode/jis0201.enc Encoding tables
ext/Encode/Encode/jis0208.enc Encoding tables
ext/Encode/Encode/jis0212.enc Encoding tables
ext/Encode/Encode/macTurkish.enc Encoding tables
ext/Encode/Encode/macUkraine.enc Encoding tables
ext/Encode/Encode/posix-bc.enc Encoding tables
+ext/Encode/Encode/posix-bc.ucm Encoding tables
ext/Encode/Encode/shiftjis.enc Encoding tables
ext/Encode/Encode/symbol.enc Encoding tables
+ext/Encode/Encode/symbol.ucm Encoding tables
ext/Encode/Makefile.PL Encode extension
ext/Encode/Todo Encode extension
ext/Encode/compile Encode extension
t/io/read.t See if read works
t/io/tell.t See if file seeking works
t/io/utf8.t See if file seeking works
+t/lib/1_compile.t See if the various libraries and extensions compile
t/lib/abbrev.t See if Text::Abbrev works
t/lib/ansicolor.t See if Term::ANSIColor works
t/lib/anydbm.t See if AnyDBM_File works
t/lib/checktree.t See if File::CheckTree works
t/lib/class-struct.t See if Class::Struct works
t/lib/complex.t See if Math::Complex works
+t/lib/compmod.pl Helper for 1_compile.t
t/lib/db-btree.t See if DB_File works
t/lib/db-hash.t See if DB_File works
t/lib/db-recno.t See if DB_File works
t/op/pos.t See if pos works
t/op/push.t See if push and pop work
t/op/pwent.t See if getpw*() functions work
+t/op/qu.t See if qu works
t/op/quotemeta.t See if quotemeta works
t/op/rand.t See if rand works
t/op/range.t See if .. works
linklibperl='$(LIBPERL)'
shrpldflags='$(LDDLFLAGS)'
ldlibpth=''
+DPERL_EXTERNAL_GLOB='-DPERL_EXTERNAL_GLOB'
case "$useshrplib" in
true)
# Prefix all runs of 'miniperl' and 'perl' with
hpux*)
linklibperl="-L `pwd | sed 's/\/UU$//'` -Wl,+s -Wl,+b$archlibexp/CORE -lperl"
;;
+ os390*)
+ linklibperl='libperl.x'
+ DPERL_EXTERNAL_GLOB=''
+ ;;
esac
case "$ldlibpthname" in
'') ;;
# Apparently some makes require an action for the FORCE target.
FORCE:
@sh -c true
+!NO!SUBS!
+$spitshell >>Makefile <<!GROK!THIS!
# We do a copy of the op.c instead of a symlink because gcc gets huffy
# if we have a symlink forest to another disk (it complains about too many
# levels of symbolic links, even if we have only two)
-opmini$(OBJ_EXT): op.c config.h
- $(RMS) opmini.c
- $(CPS) op.c opmini.c
- $(CCCMD) $(PLDLFLAGS) -DPERL_EXTERNAL_GLOB opmini.c
- $(RMS) opmini.c
+opmini\$(OBJ_EXT): op.c config.h
+ \$(RMS) opmini.c
+ \$(CPS) op.c opmini.c
+ \$(CCCMD) \$(PLDLFLAGS) $DPERL_EXTERNAL_GLOB opmini.c
+ \$(RMS) opmini.c
+!GROK!THIS!
+$spitshell >>Makefile <<'!NO!SUBS!'
miniperlmain$(OBJ_EXT): miniperlmain.c patchlevel.h
$(CCCMD) $(PLDLFLAGS) $*.c
$spitshell >>Makefile <<'!NO!SUBS!'
-sperl$(OBJ_EXT): perl.c perly.h patchlevel.h $(h)
+sperl$(OBJ_EXT): perl.c $(h)
$(RMS) sperl.c
$(LNS) perl.c sperl.c
$(CCCMD) -DIAMSUID sperl.c
# If the source file has a /*NOSTRICT*/ somewhere, ignore the lint message
# for that spot.
-lint: perly.c $(c)
+lint: $(c)
lint $(lintflags) $(defs) perly.c $(c) > perl.fuzz
# Need to unset during recursion to go out of loop.
This variable conditionally defines the HAS_SIGACTION symbol, which
indicates that the Vr4 sigaction() routine is available.
+d_sigprocmask (d_sigprocmask.U):
+ This variable conditionally defines HAS_SIGPROCMASK
+ if sigprocmask() is available to examine or change the signal mask
+ of the calling process.
+
d_sigsetjmp (d_sigsetjmp.U):
This variable conditionally defines the HAS_SIGSETJMP symbol,
which indicates that the sigsetjmp() routine is available to
indicates to the C program how many bytes there are in an int.
issymlink (issymlink.U):
- This variable holds the switch of the test command to test
- for a symbolic link (if they are supported). Typical values
- include '-h' and '-L'.
+ This variable holds the test command to test for a symbolic link
+ (if they are supported). Typical values include 'test -h' and
+ 'test -L'.
ivdformat (perlxvf.U):
This variable contains the format string used for printing
below. A "ZERO" is prepended to the list, and the list is
terminated with a plain 0.
+sig_size (sig_name.U):
+ This variable contains the number of elements of the sig_name
+ and sig_num arrays, excluding the final NULL entry.
+
signal_t (d_voidsig.U):
This variable holds the type of the signal handler (void or int).
#
# Package name : perl5
-# Source directory : /m/fs/work/work/permanent/perl/pp4/perl
-# Configuration time: Thu Dec 21 18:13:27 EET 2000
+# Source directory : .
+# Configuration time: Sun Jan 21 21:13:39 EET 2001
# Configured by : jhi
# Target system : osf1 alpha.hut.fi v4.0 878 alpha
ccversion='V5.6-082'
cf_by='jhi'
cf_email='yourname@yourhost.yourplace.com'
-cf_time='Thu Dec 21 18:13:27 EET 2000'
+cf_time='Sun Jan 21 21:13:39 EET 2001'
charsize='1'
chgrp=''
chmod=''
d_shmdt='define'
d_shmget='define'
d_sigaction='define'
+d_sigprocmask='define'
d_sigsetjmp='define'
d_socket='define'
d_socklen_t='undef'
installvendorbin=''
installvendorlib=''
intsize='4'
-issymlink='-h'
+issymlink='test -h'
ivdformat='"ld"'
ivsize='8'
ivtype='long'
sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "EMT", "FPE", "KILL", "BUS", "SEGV", "SYS", "PIPE", "ALRM", "TERM", "IOINT", "STOP", "TSTP", "CONT", "CHLD", "TTIN", "TTOU", "AIO", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "INFO", "USR1", "USR2", "RESV", "RTMIN", "NUM34", "NUM35", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "MAX", "IOT", "LOST", "URG", "CLD", "IO", "POLL", "PTY", "PWR", "RTMAX", 0'
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'
+sig_size='58'
signal_t='void'
sitearch='/opt/perl/lib/site_perl/5.7.0/alpha-dec_osf-thread'
sitearchexp='/opt/perl/lib/site_perl/5.7.0/alpha-dec_osf-thread'
sort='sort'
spackage='Perl5'
spitshell='cat'
-src='/m/fs/work/work/permanent/perl/pp4/perl'
+src='.'
ssizetype='ssize_t'
startperl='#!/opt/perl/bin/perl'
startsh='#!/bin/sh'
/*
* Package name : perl5
- * Source directory : /m/fs/work/work/permanent/perl/pp4/perl
- * Configuration time: Thu Dec 21 18:13:27 EET 2000
+ * Source directory : .
+ * Configuration time: Sun Jan 21 21:13:39 EET 2001
* Configured by : jhi
* Target system : osf1 alpha.hut.fi v4.0 878 alpha
*/
* This symbol defines the format string used for printing a Perl UV
* as an unsigned hexadecimal integer in lowercase abcdef.
*/
+/* UVXf:
+ * This symbol defines the format string used for printing a Perl UV
+ * as an unsigned hexadecimal integer in uppercase ABCDEF.
+ */
/* NVef:
* This symbol defines the format string used for printing a Perl NV
* using %e-ish floating point format.
#define UVuf "lu" /**/
#define UVof "lo" /**/
#define UVxf "lx" /**/
+#define UVXf "lX" /**/
#define NVef "e" /**/
#define NVff "f" /**/
#define NVgf "g" /**/
* The last element is 0, corresponding to the 0 at the end of
* the sig_name list.
*/
+/* SIG_SIZE:
+ * This variable contains the number of elements of the sig_name
+ * and sig_num arrays, excluding the final NULL entry.
+ */
#define SIG_NAME "ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "EMT", "FPE", "KILL", "BUS", "SEGV", "SYS", "PIPE", "ALRM", "TERM", "IOINT", "STOP", "TSTP", "CONT", "CHLD", "TTIN", "TTOU", "AIO", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "INFO", "USR1", "USR2", "RESV", "RTMIN", "NUM34", "NUM35", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "MAX", "IOT", "LOST", "URG", "CLD", "IO", "POLL", "PTY", "PWR", "RTMAX", 0 /**/
#define 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, 0 /**/
+#define SIG_SIZE 58 /**/
/* SITEARCH:
* This symbol contains the name of the private library for this package.
#define PERL_XS_APIVERSION "5.7.0"
#define PERL_PM_APIVERSION "5.005"
+/* HAS_SIGPROCMASK:
+ * This symbol, if defined, indicates that the sigprocmask
+ * system call is available to examine or change the signal mask
+ * of the calling process.
+ */
+#define HAS_SIGPROCMASK /**/
+
#endif
=item *
-A message of the form:
-
- shmat() found.
- and it returns (void *).
- *** WHOA THERE!!! ***
- The recommended value for $d_shmatprototype on this machine was "define"!
- Keep the recommended value? [y]
-
-is nothing to worry about at all.
-
-=item *
-
Do not turn on the compiler optimization flag "-O". There is
a bug in either the optimizer or perl that causes perl to
not work correctly when the optimizer is on.
for an example of how to use the "eval exec" trick to ask the shell to
have Perl run your scripts on those older releases of Unix System Services.
+=head2 Floating point anomalies
+
+There appears to be a bug in the floating point implementation on S/390
+systems such that calling int() on the product of a number and a small
+magnitude number is not the same as calling int() on the quotient of
+that number and a large magnitude number. For example, in the following
+Perl code:
+
+ my $x = 100000.0;
+ my $y = int($x * 1e-5) * 1e5; # '0'
+ my $z = int($x / 1e+5) * 1e5; # '100000'
+ print "\$y is $y and \$z is $z\n"; # $y is 0 and $z is 100000
+
+Although one would expect the quantities $y and $z to be the same and equal
+to 100000 they will differ and instead will be 0 and 100000 respectively.
+
+The problem can be further examined in a roughly equivalent C program:
+
+ #include <stdio.h>
+ #include <math.h>
+ main()
+ {
+ double r1,r2;
+ double x = 100000.0;
+ double y = 0.0;
+ double z = 0.0;
+ x = 100000.0 * 1e-5;
+ r1 = modf (x,&y);
+ x = 100000.0 / 1e+5;
+ r2 = modf (x,&z);
+ printf("y is %e and z is %e\n",y*1e5,z*1e5);
+ /* y is 0.000000e+00 and z is 1.000000e+05 (with c89) */
+ }
+
=head2 Modules and Extensions
Pure pure (that is non xs) modules may be installed via the usual:
David Fiander and Peter Prymmer with thanks to Dennis Longnecker
and William Raffloer for valuable reports, LPAR and PTF feedback.
Thanks to Mike MacIsaac and Egon Terwedow for SG24-5944-00.
+Thanks to Ignasi Roca for pointing out the floating point problems.
=head1 SEE ALSO
subscribe perl-mvs
-to majordomo@perl.org. There is a web archive of the mailing list at:
+to majordomo@perl.org. See also:
+
+ http://lists.perl.org/showlist.cgi?name=perl-mvs
+
+There are web archives of the mailing list at:
http://www.xray.mpe.mpg.de/mailing-lists/perl-mvs/
+ http://archive.develooper.com/perl-mvs@perl.org/
=head1 HISTORY
Updated 12 November 2000 for the 5.7.1 release of Perl.
+Updated 15 January 2001 for the 5.7.1 release of Perl.
+
=cut
eval 'exec /usr/local/bin/perl -S $0 ${1+"$@"}'
if $running_under_some_shell;
+=head2 Floating point anomalies
+
+There appears to be a bug in the floating point implementation on BS2000 POSIX
+systems such that calling int() on the product of a number and a small
+magnitude number is not the same as calling int() on the quotient of
+that number and a large magnitude number. For example, in the following
+Perl code:
+
+ my $x = 100000.0;
+ my $y = int($x * 1e-5) * 1e5; # '0'
+ my $z = int($x / 1e+5) * 1e5; # '100000'
+ print "\$y is $y and \$z is $z\n"; # $y is 0 and $z is 100000
+
+Although one would expect the quantities $y and $z to be the same and equal
+to 100000 they will differ and instead will be 0 and 100000 respectively.
+
=head1 AUTHORS
Thomas Dorner
=item 1 GUNZIP/GZIP.EXE for VMS
A de-compressor for *.gz and *.tgz files available from a number
-of web/ftp sites.
+of web/ftp sites and is distributed on the OpenVMS Freeware CD-ROM
+from Compaq.
http://www.fsf.org/order/ftp.html
ftp://ftp.uu.net/archive/systems/gnu/diffutils*.tar.gz
ftp://gatekeeper.dec.com/pub/GNU/diffutils*.tar.gz
ftp://ftp.gnu.org/pub/gnu/diffutils*.tar.gz
- http://www.openvms.digital.com/cd/GZIP/
- ftp://ftp.digital.com/pub/VMS/
+ http://www.openvms.compaq.com/freeware/GZIP/
+ ftp://ftp.compaq.com/pub/VMS/
=item 2 VMS TAR
For reading and writing unix tape archives (*.tar files). Vmstar is also
-available from a number of web/ftp sites.
+available from a number of web/ftp sites and is distributed on the OpenVMS
+Freeware CD-ROM from Compaq.
ftp://ftp.lp.se/vms/
- http://www.openvms.digital.com/cd/VMSTAR/
- ftp://ftp.digital.com/pub/VMS/
+ http://www.openvms.compaq.com/freeware/VMSTAR/
+ ftp://ftp.compaq.com/pub/VMS/
=item 3 UNZIP.EXE for VMS
Unzip is available from a number of web/ftp sites.
http://www.cdrom.com/pub/infozip/UnZip.html
- http://www.openvms.digital.com/cd/INFO-ZIP/
- ftp://ftp.digital.com/pub/VMS/
- ftp://ftp.openvms.digital.com/
+ http://www.openvms.compaq.com/freeware/INFO-ZIP/
+ ftp://ftp.compaq.com/pub/VMS/
+ ftp://ftp.openvms.compaq.com/
ftp://ftp.madgoat.com/madgoat/
ftp://ftp.wku.edu/vms/
Please note that UNZIP and GUNZIP are not the same thing (they work with
different formats). Many of the useful files from CPAN (the Comprehensive
-Perl Archive Network) are in *.tar.gz format (this includes copies of the
-source code for perl as well as modules and scripts that you may wish to
-add later) hence you probably want to have GUNZIP.EXE and VMSTAR.EXE on
-your VMS machine.
+Perl Archive Network) are in *.tar.gz or *.tgz format (this includes copies
+of the source code for perl as well as modules and scripts that you may
+wish to add later) hence you probably want to have GUNZIP.EXE and
+VMSTAR.EXE on your VMS machine.
If you want to include socket support, you'll need a TCP/IP stack and either
DEC C, or socket libraries. See the "Socket Support (optional)" topic
Perl exited. This is fixed by DEC CSC patch ALPACRT04_061 or later.
See also:
- http://ftp.service.digital.com/patches/.new/openvms.html
+ http://ftp.service.compaq.com/patches/.new/openvms.html
=back
turn Cwd into an XS module? (Configure already probes for getcwd())
mmap for speeding up input? (Configure already probes for the mmap family)
sendmsg, recvmsg? (Configure doesn't probe for these but the units exist)
+ sockatmark?
setitimer, getitimer? (the metaconfig units exist)
Ongoing
op_first cUNOP->op_first opindex
op_last cBINOP->op_last opindex
op_other cLOGOP->op_other opindex
-op_children cLISTOP->op_children U32
op_pmreplroot cPMOP->op_pmreplroot opindex
op_pmreplrootgv *(SV**)&cPMOP->op_pmreplroot svindex
op_pmreplstart cPMOP->op_pmreplstart opindex
* This symbol defines the format string used for printing a Perl UV
* as an unsigned hexadecimal integer in lowercase abcdef.
*/
+/* UVXf:
+ * This symbol defines the format string used for printing a Perl UV
+ * as an unsigned hexadecimal integer in uppercase ABCDEF.
+ */
/* NVef:
* This symbol defines the format string used for printing a Perl NV
* using %e-ish floating point format.
#define UVuf $uvuformat /**/
#define UVof $uvoformat /**/
#define UVxf $uvxformat /**/
+#define UVXf $uvXUformat /**/
#define NVef $nveformat /**/
#define NVff $nvfformat /**/
#define NVgf $nvgformat /**/
* The last element is 0, corresponding to the 0 at the end of
* the sig_name list.
*/
+/* SIG_SIZE:
+ * This variable contains the number of elements of the sig_name
+ * and sig_num arrays, excluding the final NULL entry.
+ */
#define SIG_NAME $sig_name_init /**/
#define SIG_NUM $sig_num_init /**/
+#define SIG_SIZE $sig_size /**/
/* SITEARCH:
* This symbol contains the name of the private library for this package.
#define PERL_XS_APIVERSION "$xs_apiversion"
#define PERL_PM_APIVERSION "$pm_apiversion"
+/* HAS_SIGPROCMASK:
+ * This symbol, if defined, indicates that the sigprocmask
+ * system call is available to examine or change the signal mask
+ * of the calling process.
+ */
+#$d_sigprocmask HAS_SIGPROCMASK /**/
+
#endif
!GROK!THIS!
$ api_subversion = F$ELEMENT(2," ",line)
$ got_api_subversion = "true"
$ ENDIF
-$ IF (.NOT.got_patch).OR.(.NOT.got_sub) THEN GOTO Patchlevel_h_loop
+$ IF (.NOT. got_patch) .OR. -
+ (.NOT. got_sub) .OR. -
+ (.NOT. got_api_revision) .OR. -
+ (.NOT. got_api_version) .OR. -
+ (.NOT. got_api_subversion) -
+ THEN GOTO Patchlevel_h_loop
$Close_patch:
$ CLOSE CONFIG
$ ELSE
$ patchlevel="0"
$ subversion="0"
+$ api_revision="0"
+$ api_version="0"
+$ api_subversion="0"
$ ENDIF
$ IF (F$STRING(subversion) .NES. "0")
$ THEN
$!: Looking for optional libraries
$!: see if nm is to be used to determine whether a symbol is defined or not
$!: get list of predefined functions in a handy place
-$!: see if we have sigaction
+$!: see if we have sigaction or sigprocmask
$!: see whether socketshr exists
$ IF (F$SEARCH(F$PARSE("SocketShr","Sys$Share:.Exe")).NES."")
$ THEN
$ d_gettimeod="define"
$ d_uname="define"
$ d_sigaction="define"
+$ d_sigprocmask="define"
$ d_truncate="define"
$ d_wait4="define"
$ d_index="define"
$ sig_num="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 6 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 64"",0"
$ sig_num_init="0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,6,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,64,0"
$! perl_sig_num_with_commas=sig_num_init
+$ sig_size="36"
$ uidtype="uid_t"
$ d_pathconf="define"
$ d_fpathconf="define"
$ d_bcmp="undef"
$ d_uname="undef"
$ d_sigaction="undef"
+$ d_sigprocmask="undef"
$ d_truncate="undef"
$ d_wait4="undef"
$ d_index="undef"
$ sig_num="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 6 16 17"",0"
$ sig_num_init="0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,6,16,17,0"
$! perl_sig_num_with_commas=sig_num_init
+$ sig_size="19"
$ uidtype="unsigned int"
$ d_pathconf="undef"
$ d_fpathconf="undef"
$ uvuformat="""lu"""
$ uvoformat="""lo"""
$ uvxformat="""lx"""
+$ uvxuformat="""lX"""
$! uselongdouble?
$ nveformat="""e"""
$ nvfformat="""f"""
$ IF use_vmsdebug_perl
$ THEN
$ optimize="/Debug/NoOpt"
+$ ldflags="/Debug/Trace/Map"
$ dbgprefix = "DBG"
$ ELSE
$ optimize= ""
+$ ldflags="/NoTrace/NoMap"
$ dbgprefix = ""
$ ENDIF
$!
$ WC "CONFIG='true'"
$ WC "Makefile_SH='" + Makefile_SH + "'"
$ WC "Mcc='" + Mcc + "'"
-$! WC "PERL_SUBVERSION='" + subversion + "'" ! VMS specific to descrip_mms.template
-$ WC "PERL_VERSION='" + patchlevel + "'" ! VMS specific to descrip_mms.template
+$ WC "PERL_REVISION=" + revision
+$ WC "PERL_VERSION=" + patchlevel
+$ WC "PERL_SUBVERSION=" + subversion
+$ WC "PERL_API_VERSION=" + api_version
+$ WC "PERL_API_SUBVERSION=" + api_subversion
$ WC "alignbytes='" + alignbytes + "'"
$ WC "aphostname='" + "'"
$ WC "ar='" + "'"
$ WC "d_shm='undef'"
$ WC "d_shmatprototype='undef'"
$ WC "d_sigaction='" + d_sigaction + "'"
+$ WC "d_sigprocmask='" + d_sigprocmask + "'"
$ WC "d_sigsetjmp='" + d_sigsetjmp + "'"
$ WC "d_socket='" + d_socket + "'"
$ WC "d_socklen_t='" + d_socklen_t + "'"
$ WC "known_extensions='" + known_extensions + "'"
$ WC "ld='" + ld + "'"
$ WC "lddlflags='/Share'"
-$ WC "ldflags='/NoTrace/NoMap'"
+$ WC "ldflags='" + ldflags + "'"
$ WC "lib_ext='" + lib_ext + "'"
$ WC "libc='" + libc + "'"
$ WC "libpth='/sys$share /sys$library'"
$ DELETE/SYMBOL tmp
$ WC "sig_num='" + sig_num + "'"
$ WC "sig_num_init='" + sig_num_init + "'"
+$ WC "sig_size='" + sig_size + "'"
$ WC "signal_t='" + signal_t + "'"
$ WC "sitearch='" + sitearch + "'"
$ WC "sitearchexp='" + sitearchexp + "'"
$ WC "uvtype='" + uvtype + "'"
$ WC "uvuformat='" + uvuformat + "'"
$ WC "uvxformat='" + uvxformat + "'"
+$ WC "uvxuformat='" + uvxuformat + "'"
$ WC "vendorarchexp='" + "'"
$ WC "vendorlib_stem='" + "'"
$ WC "vendorlibexp='" + "'"
Perl_do_open(pTHX_ GV *gv, register char *name, I32 len, int as_raw,
int rawmode, int rawperm, PerlIO *supplied_fp)
{
- return do_open9(gv, name, len, as_raw, rawmode, rawperm,
- supplied_fp, Nullsv, 0);
+ return do_openn(gv, name, len, as_raw, rawmode, rawperm,
+ supplied_fp, (SV **) NULL, 0);
}
bool
int rawmode, int rawperm, PerlIO *supplied_fp, SV *svs,
I32 num_svs)
{
+ return do_openn(gv, name, len, as_raw, rawmode, rawperm,
+ supplied_fp, &svs, 1);
+}
+
+bool
+Perl_do_openn(pTHX_ GV *gv, register char *name, I32 len, int as_raw,
+ int rawmode, int rawperm, PerlIO *supplied_fp, SV **svp,
+ I32 num_svs)
+{
register IO *io = GvIOn(gv);
PerlIO *saveifp = Nullfp;
PerlIO *saveofp = Nullfp;
char *type = NULL;
char *deftype = NULL;
char mode[4]; /* stdio file mode ("r\0", "rb\0", "r+b\0" etc.) */
+ SV *svs = (num_svs) ? *svp : Nullsv;
Zero(mode,sizeof(mode),char);
PL_forkprocess = 1; /* assume true if no fork */
if (type) {
while (isSPACE(*type)) type++;
if (*type) {
+ errno = 0;
if (PerlIO_apply_layers(aTHX_ IoIFP(io),mode,type) != 0) {
goto say_false;
}
U8 *send;
U8 *dstart;
I32 matches = 0;
+ I32 grows = PL_op->op_private & OPpTRANS_GROWS;
STRLEN len;
short *tbl;
I32 ch;
}
/* Allow for expansion: $_="a".chr(400); tr/a/\xFE/, FE needs encoding */
- Newz(0, d, len*2+1, U8);
+ if (grows)
+ New(0, d, len*2+1, U8);
+ else
+ d = s;
dstart = d;
while (s < send) {
STRLEN ulen;
- short c;
+ UV c;
- ulen = 1;
/* Need to check this, otherwise 128..255 won't match */
c = utf8_to_uv(s, send - s, &ulen, 0);
- if (c < 0x100 && (ch = tbl[(short)c]) >= 0) {
+ if (c < 0x100 && (ch = tbl[c]) >= 0) {
matches++;
d = uv_to_utf8(d, ch);
s += ulen;
}
else { /* No match -> copy */
- while (ulen--)
- *d++ = *s++;
+ Copy(s, d, ulen, U8);
+ d += ulen;
+ s += ulen;
}
}
- *d = '\0';
- sv_setpvn(sv, (char*)dstart, d - dstart);
+ if (grows) {
+ sv_setpvn(sv, (char*)dstart, d - dstart);
+ Safefree(dstart);
+ }
+ else {
+ *d = '\0';
+ SvCUR_set(sv, d - dstart);
+ }
SvUTF8_on(sv);
SvSETMAGIC(sv);
return matches;
U8 *dstart;
I32 isutf8;
I32 matches = 0;
+ I32 grows = PL_op->op_private & OPpTRANS_GROWS;
STRLEN len;
short *tbl;
I32 ch;
SvCUR_set(sv, d - dstart);
}
else { /* isutf8 */
- Newz(0, d, len*2+1, U8);
+ if (grows)
+ New(0, d, len*2+1, U8);
+ else
+ d = s;
dstart = d;
if (PL_op->op_private & OPpTRANS_SQUASH) {
STRLEN len;
UV comp = utf8_to_uv_simple(s, &len);
- if (comp > 0xff)
- d = uv_to_utf8(d, comp); /* always unmapped */
+ if (comp > 0xff) { /* always unmapped */
+ Copy(s, d, len, U8);
+ d += len;
+ }
else if ((ch = tbl[comp]) >= 0) {
matches++;
if (ch != pch) {
s += len;
continue;
}
- else if (ch == -1) /* -1 is unmapped character */
- d = uv_to_utf8(d, comp);
+ else if (ch == -1) { /* -1 is unmapped character */
+ Copy(s, d, len, U8);
+ d += len;
+ }
else if (ch == -2) /* -2 is delete character */
matches++;
s += len;
while (s < send) {
STRLEN len;
UV comp = utf8_to_uv_simple(s, &len);
- if (comp > 0xff)
- d = uv_to_utf8(d, comp); /* always unmapped */
+ if (comp > 0xff) { /* always unmapped */
+ Copy(s, d, len, U8);
+ d += len;
+ }
else if ((ch = tbl[comp]) >= 0) {
d = uv_to_utf8(d, ch);
matches++;
}
else if (ch == -1) { /* -1 is unmapped character */
- d = uv_to_utf8(d, comp);
+ Copy(s, d, len, U8);
+ d += len;
}
else if (ch == -2) /* -2 is delete character */
matches++;
s += len;
}
}
- *d = '\0';
- sv_setpvn(sv, (char*)dstart, d - dstart);
+ if (grows) {
+ sv_setpvn(sv, (char*)dstart, d - dstart);
+ Safefree(dstart);
+ }
+ else {
+ *d = '\0';
+ SvCUR_set(sv, d - dstart);
+ }
SvUTF8_on(sv);
}
SvSETMAGIC(sv);
U8 *start;
U8 *dstart, *dend;
I32 matches = 0;
+ I32 grows = PL_op->op_private & OPpTRANS_GROWS;
STRLEN len;
SV* rv = (SV*)cSVOP->op_sv;
if (svp)
final = SvUV(*svp);
- /* d needs to be bigger than s, in case e.g. upgrading is required */
- New(0, d, len*3+UTF8_MAXLEN, U8);
- dend = d + len * 3;
- dstart = d;
+ if (grows) {
+ /* d needs to be bigger than s, in case e.g. upgrading is required */
+ New(0, d, len*3+UTF8_MAXLEN, U8);
+ dend = d + len * 3;
+ dstart = d;
+ }
+ else {
+ dstart = d = s;
+ dend = d + len;
+ }
while (s < send) {
if ((uv = swash_fetch(rv, s)) < none) {
}
else if (uv == none) {
int i = UTF8SKIP(s);
- while(i--)
- *d++ = *s++;
+ Copy(s, d, i, U8);
+ d += i;
+ s += i;
}
else if (uv == extra) {
int i = UTF8SKIP(s);
else
s += UTF8SKIP(s);
- if (d >= dend) {
+ if (d > dend) {
STRLEN clen = d - dstart;
STRLEN nlen = dend - dstart + len + UTF8_MAXLEN;
+ if (!grows)
+ Perl_croak(aTHX_ "panic: do_trans_complex_utf8");
Renew(dstart, nlen+UTF8_MAXLEN, U8);
d = dstart + clen;
dend = dstart + nlen;
}
}
- *d = '\0';
- sv_setpvn(sv, (char*)dstart, d - dstart);
+ if (grows || hibit) {
+ sv_setpvn(sv, (char*)dstart, d - dstart);
+ Safefree(dstart);
+ if (grows && hibit)
+ Safefree(start);
+ }
+ else {
+ *d = '\0';
+ SvCUR_set(sv, d - dstart);
+ }
SvSETMAGIC(sv);
SvUTF8_on(sv);
- if (hibit)
- Safefree(start);
if (!isutf8 && !(PL_hints & HINT_UTF8))
sv_utf8_downgrade(sv, TRUE);
I32 matches = 0;
I32 squash = PL_op->op_private & OPpTRANS_SQUASH;
I32 del = PL_op->op_private & OPpTRANS_DELETE;
+ I32 grows = PL_op->op_private & OPpTRANS_GROWS;
SV* rv = (SV*)cSVOP->op_sv;
HV* hv = (HV*)SvRV(rv);
SV** svp = hv_fetch(hv, "NONE", 4, FALSE);
if (svp)
final = SvUV(*svp);
- New(0, d, len*3+UTF8_MAXLEN, U8);
- dend = d + len * 3;
- dstart = d;
+ if (grows) {
+ /* d needs to be bigger than s, in case e.g. upgrading is required */
+ New(0, d, len*3+UTF8_MAXLEN, U8);
+ dend = d + len * 3;
+ dstart = d;
+ }
+ else {
+ dstart = d = s;
+ dend = d + len;
+ }
if (squash) {
UV puv = 0xfeedface;
while (s < send) {
uv = swash_fetch(rv, s);
- if (d >= dend) {
- STRLEN clen = d - dstart, nlen = dend - dstart + len;
+ if (d > dend) {
+ STRLEN clen = d - dstart;
+ STRLEN nlen = dend - dstart + len + UTF8_MAXLEN;
+ if (!grows)
+ Perl_croak(aTHX_ "panic: do_trans_complex_utf8");
Renew(dstart, nlen+UTF8_MAXLEN, U8);
d = dstart + clen;
dend = dstart + nlen;
}
else if (uv == none) { /* "none" is unmapped character */
int i = UTF8SKIP(s);
- while(i--)
- *d++ = *s++;
+ Copy(s, d, i, U8);
+ d += i;
+ s += i;
puv = 0xfeedface;
continue;
}
else {
while (s < send) {
uv = swash_fetch(rv, s);
- if (d >= dend) {
- STRLEN clen = d - dstart, nlen = dend - dstart + len;
+ if (d > dend) {
+ STRLEN clen = d - dstart;
+ STRLEN nlen = dend - dstart + len + UTF8_MAXLEN;
+ if (!grows)
+ Perl_croak(aTHX_ "panic: do_trans_complex_utf8");
Renew(dstart, nlen+UTF8_MAXLEN, U8);
d = dstart + clen;
dend = dstart + nlen;
}
else if (uv == none) { /* "none" is unmapped character */
int i = UTF8SKIP(s);
- while(i--)
- *d++ = *s++;
+ Copy(s, d, i, U8);
+ d += i;
+ s += i;
continue;
}
else if (uv == extra && !del) {
s += UTF8SKIP(s);
}
}
- *d = '\0';
- sv_setpvn(sv, (char*)dstart, d - dstart);
+ if (grows || hibit) {
+ sv_setpvn(sv, (char*)dstart, d - dstart);
+ Safefree(dstart);
+ if (grows && hibit)
+ Safefree(start);
+ }
+ else {
+ *d = '\0';
+ SvCUR_set(sv, d - dstart);
+ }
SvUTF8_on(sv);
- if (hibit)
- Safefree(start);
if (!isutf8 && !(PL_hints & HINT_UTF8))
sv_utf8_downgrade(sv, TRUE);
SvSETMAGIC(sv);
dokeys = dovalues = TRUE;
if (!hv) {
- if (PL_op->op_flags & OPf_MOD) { /* lvalue */
+ if (PL_op->op_flags & OPf_MOD || LVRET) { /* lvalue */
dTARGET; /* make sure to clear its target here */
if (SvTYPE(TARG) == SVt_PVLV)
LvTARG(TARG) = Nullsv;
IV i;
dTARGET;
- if (PL_op->op_flags & OPf_MOD) { /* lvalue */
+ if (PL_op->op_flags & OPf_MOD || LVRET) { /* lvalue */
if (SvTYPE(TARG) < SVt_PVLV) {
sv_upgrade(TARG, SVt_PVLV);
sv_magic(TARG, Nullsv, 'k', Nullch, 0);
#define do_kv Perl_do_kv
#define do_open Perl_do_open
#define do_open9 Perl_do_open9
+#define do_openn Perl_do_openn
#define do_pipe Perl_do_pipe
#define do_print Perl_do_print
#define do_readline Perl_do_readline
#define io_close Perl_io_close
#define invert Perl_invert
#define is_gv_magical Perl_is_gv_magical
+#define is_lvalue_sub Perl_is_lvalue_sub
#define is_uni_alnum Perl_is_uni_alnum
#define is_uni_alnumc Perl_is_uni_alnumc
#define is_uni_idfirst Perl_is_uni_idfirst
#define magic_clearsig Perl_magic_clearsig
#define magic_existspack Perl_magic_existspack
#define magic_freeregexp Perl_magic_freeregexp
+#define magic_freeovrld Perl_magic_freeovrld
#define magic_get Perl_magic_get
#define magic_getarylen Perl_magic_getarylen
#define magic_getdefelem Perl_magic_getdefelem
#define call_method Perl_call_method
#define call_pv Perl_call_pv
#define call_sv Perl_call_sv
+#define despatch_signals Perl_despatch_signals
#define eval_pv Perl_eval_pv
#define eval_sv Perl_eval_sv
#define get_sv Perl_get_sv
#define yyerror Perl_yyerror
#ifdef USE_PURE_BISON
#define yylex_r Perl_yylex_r
-#define yylex Perl_yylex
-#else
-#define yylex Perl_yylex
#endif
+#define yylex Perl_yylex
#define yyparse Perl_yyparse
#define yywarn Perl_yywarn
#if defined(MYMALLOC)
#define scalarboolean S_scalarboolean
#define too_few_arguments S_too_few_arguments
#define too_many_arguments S_too_many_arguments
+#define trlist_upgrade S_trlist_upgrade
#define op_clear S_op_clear
#define null S_null
#define pad_addlex S_pad_addlex
#define sv_2inuv_non_preserve S_sv_2inuv_non_preserve
#define sv_2iuv_non_preserve S_sv_2iuv_non_preserve
# endif
+#define expect_number S_expect_number
#endif
#if defined(PERL_IN_TOKE_C) || defined(PERL_DECL_PROT)
#define check_uni S_check_uni
#define ck_open Perl_ck_open
#define ck_repeat Perl_ck_repeat
#define ck_require Perl_ck_require
+#define ck_return Perl_ck_return
#define ck_rfun Perl_ck_rfun
#define ck_rvconst Perl_ck_rvconst
#define ck_sassign Perl_ck_sassign
#define do_kv() Perl_do_kv(aTHX)
#define do_open(a,b,c,d,e,f,g) Perl_do_open(aTHX_ a,b,c,d,e,f,g)
#define do_open9(a,b,c,d,e,f,g,h,i) Perl_do_open9(aTHX_ a,b,c,d,e,f,g,h,i)
+#define do_openn(a,b,c,d,e,f,g,h,i) Perl_do_openn(aTHX_ a,b,c,d,e,f,g,h,i)
#define do_pipe(a,b,c) Perl_do_pipe(aTHX_ a,b,c)
#define do_print(a,b) Perl_do_print(aTHX_ a,b)
#define do_readline() Perl_do_readline(aTHX)
#define io_close(a,b) Perl_io_close(aTHX_ a,b)
#define invert(a) Perl_invert(aTHX_ a)
#define is_gv_magical(a,b,c) Perl_is_gv_magical(aTHX_ a,b,c)
+#define is_lvalue_sub() Perl_is_lvalue_sub(aTHX)
#define is_uni_alnum(a) Perl_is_uni_alnum(aTHX_ a)
#define is_uni_alnumc(a) Perl_is_uni_alnumc(aTHX_ a)
#define is_uni_idfirst(a) Perl_is_uni_idfirst(aTHX_ a)
#define magic_clearsig(a,b) Perl_magic_clearsig(aTHX_ a,b)
#define magic_existspack(a,b) Perl_magic_existspack(aTHX_ a,b)
#define magic_freeregexp(a,b) Perl_magic_freeregexp(aTHX_ a,b)
+#define magic_freeovrld(a,b) Perl_magic_freeovrld(aTHX_ a,b)
#define magic_get(a,b) Perl_magic_get(aTHX_ a,b)
#define magic_getarylen(a,b) Perl_magic_getarylen(aTHX_ a,b)
#define magic_getdefelem(a,b) Perl_magic_getdefelem(aTHX_ a,b)
#define call_method(a,b) Perl_call_method(aTHX_ a,b)
#define call_pv(a,b) Perl_call_pv(aTHX_ a,b)
#define call_sv(a,b) Perl_call_sv(aTHX_ a,b)
+#define despatch_signals() Perl_despatch_signals(aTHX)
#define eval_pv(a,b) Perl_eval_pv(aTHX_ a,b)
#define eval_sv(a,b) Perl_eval_sv(aTHX_ a,b)
#define get_sv(a,b) Perl_get_sv(aTHX_ a,b)
#define yyerror(a) Perl_yyerror(aTHX_ a)
#ifdef USE_PURE_BISON
#define yylex_r(a,b) Perl_yylex_r(aTHX_ a,b)
-#define yylex(a,b) Perl_yylex(aTHX_ a,b)
-#else
-#define yylex() Perl_yylex(aTHX)
#endif
+#define yylex() Perl_yylex(aTHX)
#define yyparse() Perl_yyparse(aTHX)
#define yywarn(a) Perl_yywarn(aTHX_ a)
#if defined(MYMALLOC)
#define scalarboolean(a) S_scalarboolean(aTHX_ a)
#define too_few_arguments(a,b) S_too_few_arguments(aTHX_ a,b)
#define too_many_arguments(a,b) S_too_many_arguments(aTHX_ a,b)
+#define trlist_upgrade(a,b) S_trlist_upgrade(aTHX_ a,b)
#define op_clear(a) S_op_clear(aTHX_ a)
#define null(a) S_null(aTHX_ a)
#define pad_addlex(a) S_pad_addlex(aTHX_ a)
#define sv_2inuv_non_preserve(a,b) S_sv_2inuv_non_preserve(aTHX_ a,b)
#define sv_2iuv_non_preserve(a,b) S_sv_2iuv_non_preserve(aTHX_ a,b)
# endif
+#define expect_number(a) S_expect_number(aTHX_ a)
#endif
#if defined(PERL_IN_TOKE_C) || defined(PERL_DECL_PROT)
#define check_uni() S_check_uni(aTHX)
#define ck_open(a) Perl_ck_open(aTHX_ a)
#define ck_repeat(a) Perl_ck_repeat(aTHX_ a)
#define ck_require(a) Perl_ck_require(aTHX_ a)
+#define ck_return(a) Perl_ck_return(aTHX_ a)
#define ck_rfun(a) Perl_ck_rfun(aTHX_ a)
#define ck_rvconst(a) Perl_ck_rvconst(aTHX_ a)
#define ck_sassign(a) Perl_ck_sassign(aTHX_ a)
#define do_open Perl_do_open
#define Perl_do_open9 CPerlObj::Perl_do_open9
#define do_open9 Perl_do_open9
+#define Perl_do_openn CPerlObj::Perl_do_openn
+#define do_openn Perl_do_openn
#define Perl_do_pipe CPerlObj::Perl_do_pipe
#define do_pipe Perl_do_pipe
#define Perl_do_print CPerlObj::Perl_do_print
#define invert Perl_invert
#define Perl_is_gv_magical CPerlObj::Perl_is_gv_magical
#define is_gv_magical Perl_is_gv_magical
+#define Perl_is_lvalue_sub CPerlObj::Perl_is_lvalue_sub
+#define is_lvalue_sub Perl_is_lvalue_sub
#define Perl_is_uni_alnum CPerlObj::Perl_is_uni_alnum
#define is_uni_alnum Perl_is_uni_alnum
#define Perl_is_uni_alnumc CPerlObj::Perl_is_uni_alnumc
#define magic_existspack Perl_magic_existspack
#define Perl_magic_freeregexp CPerlObj::Perl_magic_freeregexp
#define magic_freeregexp Perl_magic_freeregexp
+#define Perl_magic_freeovrld CPerlObj::Perl_magic_freeovrld
+#define magic_freeovrld Perl_magic_freeovrld
#define Perl_magic_get CPerlObj::Perl_magic_get
#define magic_get Perl_magic_get
#define Perl_magic_getarylen CPerlObj::Perl_magic_getarylen
#define call_pv Perl_call_pv
#define Perl_call_sv CPerlObj::Perl_call_sv
#define call_sv Perl_call_sv
+#define Perl_despatch_signals CPerlObj::Perl_despatch_signals
+#define despatch_signals Perl_despatch_signals
#define Perl_eval_pv CPerlObj::Perl_eval_pv
#define eval_pv Perl_eval_pv
#define Perl_eval_sv CPerlObj::Perl_eval_sv
#ifdef USE_PURE_BISON
#define Perl_yylex_r CPerlObj::Perl_yylex_r
#define yylex_r Perl_yylex_r
+#endif
#define Perl_yylex CPerlObj::Perl_yylex
#define yylex Perl_yylex
-#else
-#define Perl_yylex CPerlObj::Perl_yylex
-#define yylex Perl_yylex
-#endif
#define Perl_yyparse CPerlObj::Perl_yyparse
#define yyparse Perl_yyparse
#define Perl_yywarn CPerlObj::Perl_yywarn
#define too_few_arguments S_too_few_arguments
#define S_too_many_arguments CPerlObj::S_too_many_arguments
#define too_many_arguments S_too_many_arguments
+#define S_trlist_upgrade CPerlObj::S_trlist_upgrade
+#define trlist_upgrade S_trlist_upgrade
#define S_op_clear CPerlObj::S_op_clear
#define op_clear S_op_clear
#define S_null CPerlObj::S_null
#define S_sv_2iuv_non_preserve CPerlObj::S_sv_2iuv_non_preserve
#define sv_2iuv_non_preserve S_sv_2iuv_non_preserve
# endif
+#define S_expect_number CPerlObj::S_expect_number
+#define expect_number S_expect_number
#endif
#if defined(PERL_IN_TOKE_C) || defined(PERL_DECL_PROT)
#define S_check_uni CPerlObj::S_check_uni
#define ck_repeat Perl_ck_repeat
#define Perl_ck_require CPerlObj::Perl_ck_require
#define ck_require Perl_ck_require
+#define Perl_ck_return CPerlObj::Perl_ck_return
+#define ck_return Perl_ck_return
#define Perl_ck_rfun CPerlObj::Perl_ck_rfun
#define ck_rfun Perl_ck_rfun
#define Perl_ck_rvconst CPerlObj::Perl_ck_rvconst
Ap |bool |do_open9 |GV *gv|char *name|I32 len|int as_raw \
|int rawmode|int rawperm|PerlIO *supplied_fp \
|SV *svs|I32 num
+Ap |bool |do_openn |GV *gv|char *name|I32 len|int as_raw \
+ |int rawmode|int rawperm|PerlIO *supplied_fp \
+ |SV **svp|I32 num
p |void |do_pipe |SV* sv|GV* rgv|GV* wgv
p |bool |do_print |SV* sv|PerlIO* fp
p |OP* |do_readline
p |bool |io_close |IO* io|bool not_implicit
p |OP* |invert |OP* cmd
dp |bool |is_gv_magical |char *name|STRLEN len|U32 flags
+p |I32 |is_lvalue_sub
Ap |bool |is_uni_alnum |U32 c
Ap |bool |is_uni_alnumc |U32 c
Ap |bool |is_uni_idfirst |U32 c
Ap |U32 |to_uni_upper_lc|U32 c
Ap |U32 |to_uni_title_lc|U32 c
Ap |U32 |to_uni_lower_lc|U32 c
-Ap |STRLEN |is_utf8_char |U8 *p
-Ap |bool |is_utf8_string |U8 *s|STRLEN len
+Apd |STRLEN |is_utf8_char |U8 *p
+Apd |bool |is_utf8_string |U8 *s|STRLEN len
Ap |bool |is_utf8_alnum |U8 *p
Ap |bool |is_utf8_alnumc |U8 *p
Ap |bool |is_utf8_idfirst|U8 *p
p |int |magic_clearsig |SV* sv|MAGIC* mg
p |int |magic_existspack|SV* sv|MAGIC* mg
p |int |magic_freeregexp|SV* sv|MAGIC* mg
+p |int |magic_freeovrld|SV* sv|MAGIC* mg
p |int |magic_get |SV* sv|MAGIC* mg
p |int |magic_getarylen|SV* sv|MAGIC* mg
p |int |magic_getdefelem|SV* sv|MAGIC* mg
Apd |I32 |call_method |const char* methname|I32 flags
Apd |I32 |call_pv |const char* sub_name|I32 flags
Apd |I32 |call_sv |SV* sv|I32 flags
+p |void |despatch_signals
Apd |SV* |eval_pv |const char* p|I32 croak_on_error
Apd |I32 |eval_sv |SV* sv|I32 flags
Apd |SV* |get_sv |const char* name|I32 create
p |void |utilize |int aver|I32 floor|OP* version|OP* id|OP* arg
Ap |U8* |utf16_to_utf8 |U8* p|U8 *d|I32 bytelen|I32 *newlen
Ap |U8* |utf16_to_utf8_reversed|U8* p|U8 *d|I32 bytelen|I32 *newlen
-Ap |STRLEN |utf8_length |U8* s|U8 *e
-Ap |IV |utf8_distance |U8 *a|U8 *b
-Ap |U8* |utf8_hop |U8 *s|I32 off
-ApM |U8* |utf8_to_bytes |U8 *s|STRLEN *len
-ApM |U8* |bytes_to_utf8 |U8 *s|STRLEN *len
-Ap |UV |utf8_to_uv_simple|U8 *s|STRLEN* retlen
-Ap |UV |utf8_to_uv |U8 *s|STRLEN curlen|STRLEN* retlen|U32 flags
-Ap |U8* |uv_to_utf8 |U8 *d|UV uv
+Adp |STRLEN |utf8_length |U8* s|U8 *e
+Apd |IV |utf8_distance |U8 *a|U8 *b
+Apd |U8* |utf8_hop |U8 *s|I32 off
+ApMd |U8* |utf8_to_bytes |U8 *s|STRLEN *len
+ApMd |U8* |bytes_to_utf8 |U8 *s|STRLEN *len
+Apd |UV |utf8_to_uv_simple|U8 *s|STRLEN* retlen
+Adp |UV |utf8_to_uv |U8 *s|STRLEN curlen|STRLEN* retlen|U32 flags
+Apd |U8* |uv_to_utf8 |U8 *d|UV uv
p |void |vivify_defelem |SV* sv
p |void |vivify_ref |SV* sv|U32 to_what
p |I32 |wait4pid |Pid_t pid|int* statusp|int flags
p |int |yyerror |char* s
#ifdef USE_PURE_BISON
p |int |yylex_r |YYSTYPE *lvalp|int *lcharp
-p |int |yylex |YYSTYPE *lvalp|int *lcharp
-#else
-p |int |yylex
#endif
+p |int |yylex
p |int |yyparse
p |int |yywarn |char* s
#if defined(MYMALLOC)
s |OP* |scalarboolean |OP *o
s |OP* |too_few_arguments|OP *o|char* name
s |OP* |too_many_arguments|OP *o|char* name
+s |U8* |trlist_upgrade |U8** sp|U8** ep
s |void |op_clear |OP* o
s |void |null |OP* o
s |PADOFFSET|pad_addlex |SV* name
s |int |sv_2inuv_non_preserve |SV *sv|I32 numtype
s |int |sv_2iuv_non_preserve |SV *sv|I32 numtype
# endif
+s |I32 |expect_number |char** pattern
#endif
#if defined(PERL_IN_TOKE_C) || defined(PERL_DECL_PROT)
#define PL_preprocess (PERL_GET_INTERP->Ipreprocess)
#define PL_profiledata (PERL_GET_INTERP->Iprofiledata)
#define PL_psig_name (PERL_GET_INTERP->Ipsig_name)
+#define PL_psig_pend (PERL_GET_INTERP->Ipsig_pend)
#define PL_psig_ptr (PERL_GET_INTERP->Ipsig_ptr)
#define PL_ptr_table (PERL_GET_INTERP->Iptr_table)
#define PL_replgv (PERL_GET_INTERP->Ireplgv)
#define PL_runops (PERL_GET_INTERP->Irunops)
#define PL_sawampersand (PERL_GET_INTERP->Isawampersand)
#define PL_sh_path (PERL_GET_INTERP->Ish_path)
+#define PL_sig_pending (PERL_GET_INTERP->Isig_pending)
#define PL_sighandlerp (PERL_GET_INTERP->Isighandlerp)
#define PL_splitstr (PERL_GET_INTERP->Isplitstr)
#define PL_srand_called (PERL_GET_INTERP->Isrand_called)
#define PL_preprocess (vTHX->Ipreprocess)
#define PL_profiledata (vTHX->Iprofiledata)
#define PL_psig_name (vTHX->Ipsig_name)
+#define PL_psig_pend (vTHX->Ipsig_pend)
#define PL_psig_ptr (vTHX->Ipsig_ptr)
#define PL_ptr_table (vTHX->Iptr_table)
#define PL_replgv (vTHX->Ireplgv)
#define PL_runops (vTHX->Irunops)
#define PL_sawampersand (vTHX->Isawampersand)
#define PL_sh_path (vTHX->Ish_path)
+#define PL_sig_pending (vTHX->Isig_pending)
#define PL_sighandlerp (vTHX->Isighandlerp)
#define PL_splitstr (vTHX->Isplitstr)
#define PL_srand_called (vTHX->Isrand_called)
#define PL_preprocess (aTHXo->interp.Ipreprocess)
#define PL_profiledata (aTHXo->interp.Iprofiledata)
#define PL_psig_name (aTHXo->interp.Ipsig_name)
+#define PL_psig_pend (aTHXo->interp.Ipsig_pend)
#define PL_psig_ptr (aTHXo->interp.Ipsig_ptr)
#define PL_ptr_table (aTHXo->interp.Iptr_table)
#define PL_replgv (aTHXo->interp.Ireplgv)
#define PL_runops (aTHXo->interp.Irunops)
#define PL_sawampersand (aTHXo->interp.Isawampersand)
#define PL_sh_path (aTHXo->interp.Ish_path)
+#define PL_sig_pending (aTHXo->interp.Isig_pending)
#define PL_sighandlerp (aTHXo->interp.Isighandlerp)
#define PL_splitstr (aTHXo->interp.Isplitstr)
#define PL_srand_called (aTHXo->interp.Isrand_called)
#define PL_Ipreprocess PL_preprocess
#define PL_Iprofiledata PL_profiledata
#define PL_Ipsig_name PL_psig_name
+#define PL_Ipsig_pend PL_psig_pend
#define PL_Ipsig_ptr PL_psig_ptr
#define PL_Iptr_table PL_ptr_table
#define PL_Ireplgv PL_replgv
#define PL_Irunops PL_runops
#define PL_Isawampersand PL_sawampersand
#define PL_Ish_path PL_sh_path
+#define PL_Isig_pending PL_sig_pending
#define PL_Isighandlerp PL_sighandlerp
#define PL_Isplitstr PL_splitstr
#define PL_Isrand_called PL_srand_called
d_shmdt='undef'
d_shmget='undef'
d_sigaction='undef'
+d_sigprocmask='undef'
d_sigsetjmp='undef'
d_socket='define'
d_sockpair='undef'
shortsize='2'
shrpenv=''
shsharp=''
-sig_count='ZERO '
sig_name=''
sig_name_init='"ZERO", 0'
sig_num='0'
sig_num_init='0, 0'
+sig_size='1'
signal_t='void'
sitearch='?:/perl/lib/site_perl/5.7.0/epoc'
sitearchexp='?:/perl/lib/site_perl/5.7.0/epoc'
uvuformat='"lu"'
uvoformat='"lo"'
uvxformat='"lx"'
+uvXUformat='"lX"'
uidformat='"hu"'
gidformat='"hu"'
d_strtold='undef'
LOGOP_other(o)
B::LOGOP o
-#define LISTOP_children(o) o->op_children
-
MODULE = B PACKAGE = B::LISTOP PREFIX = LISTOP_
U32
LISTOP_children(o)
B::LISTOP o
+ OP * kid = NO_INIT
+ int i = NO_INIT
+ CODE:
+ ST(0) = sv_newmortal();
+ i = 0;
+ for (kid = o->op_first; kid; kid = kid->op_sibling)
+ i++;
+ sv_setiv(ST(0), i);
#define PMOP_pmreplroot(o) o->op_pmreplroot
#define PMOP_pmreplstart(o) o->op_pmreplstart
$insn_data{op_first} = [91, \&PUT_opindex, "GET_opindex"];
$insn_data{op_last} = [92, \&PUT_opindex, "GET_opindex"];
$insn_data{op_other} = [93, \&PUT_opindex, "GET_opindex"];
-$insn_data{op_children} = [94, \&PUT_U32, "GET_U32"];
-$insn_data{op_pmreplroot} = [95, \&PUT_opindex, "GET_opindex"];
-$insn_data{op_pmreplrootgv} = [96, \&PUT_svindex, "GET_svindex"];
-$insn_data{op_pmreplstart} = [97, \&PUT_opindex, "GET_opindex"];
-$insn_data{op_pmnext} = [98, \&PUT_opindex, "GET_opindex"];
-$insn_data{pregcomp} = [99, \&PUT_pvcontents, "GET_pvcontents"];
-$insn_data{op_pmflags} = [100, \&PUT_U16, "GET_U16"];
-$insn_data{op_pmpermflags} = [101, \&PUT_U16, "GET_U16"];
-$insn_data{op_sv} = [102, \&PUT_svindex, "GET_svindex"];
-$insn_data{op_padix} = [103, \&PUT_U32, "GET_U32"];
-$insn_data{op_pv} = [104, \&PUT_pvcontents, "GET_pvcontents"];
-$insn_data{op_pv_tr} = [105, \&PUT_op_tr_array, "GET_op_tr_array"];
-$insn_data{op_redoop} = [106, \&PUT_opindex, "GET_opindex"];
-$insn_data{op_nextop} = [107, \&PUT_opindex, "GET_opindex"];
-$insn_data{op_lastop} = [108, \&PUT_opindex, "GET_opindex"];
-$insn_data{cop_label} = [109, \&PUT_pvindex, "GET_pvindex"];
-$insn_data{cop_stashpv} = [110, \&PUT_pvindex, "GET_pvindex"];
-$insn_data{cop_file} = [111, \&PUT_pvindex, "GET_pvindex"];
-$insn_data{cop_seq} = [112, \&PUT_U32, "GET_U32"];
-$insn_data{cop_arybase} = [113, \&PUT_I32, "GET_I32"];
-$insn_data{cop_line} = [114, \&PUT_U16, "GET_U16"];
-$insn_data{cop_warnings} = [115, \&PUT_svindex, "GET_svindex"];
-$insn_data{main_start} = [116, \&PUT_opindex, "GET_opindex"];
-$insn_data{main_root} = [117, \&PUT_opindex, "GET_opindex"];
-$insn_data{curpad} = [118, \&PUT_svindex, "GET_svindex"];
-$insn_data{push_begin} = [119, \&PUT_svindex, "GET_svindex"];
-$insn_data{push_init} = [120, \&PUT_svindex, "GET_svindex"];
-$insn_data{push_end} = [121, \&PUT_svindex, "GET_svindex"];
+$insn_data{op_pmreplroot} = [94, \&PUT_opindex, "GET_opindex"];
+$insn_data{op_pmreplrootgv} = [95, \&PUT_svindex, "GET_svindex"];
+$insn_data{op_pmreplstart} = [96, \&PUT_opindex, "GET_opindex"];
+$insn_data{op_pmnext} = [97, \&PUT_opindex, "GET_opindex"];
+$insn_data{pregcomp} = [98, \&PUT_pvcontents, "GET_pvcontents"];
+$insn_data{op_pmflags} = [99, \&PUT_U16, "GET_U16"];
+$insn_data{op_pmpermflags} = [100, \&PUT_U16, "GET_U16"];
+$insn_data{op_sv} = [101, \&PUT_svindex, "GET_svindex"];
+$insn_data{op_padix} = [102, \&PUT_U32, "GET_U32"];
+$insn_data{op_pv} = [103, \&PUT_pvcontents, "GET_pvcontents"];
+$insn_data{op_pv_tr} = [104, \&PUT_op_tr_array, "GET_op_tr_array"];
+$insn_data{op_redoop} = [105, \&PUT_opindex, "GET_opindex"];
+$insn_data{op_nextop} = [106, \&PUT_opindex, "GET_opindex"];
+$insn_data{op_lastop} = [107, \&PUT_opindex, "GET_opindex"];
+$insn_data{cop_label} = [108, \&PUT_pvindex, "GET_pvindex"];
+$insn_data{cop_stashpv} = [109, \&PUT_pvindex, "GET_pvindex"];
+$insn_data{cop_file} = [110, \&PUT_pvindex, "GET_pvindex"];
+$insn_data{cop_seq} = [111, \&PUT_U32, "GET_U32"];
+$insn_data{cop_arybase} = [112, \&PUT_I32, "GET_I32"];
+$insn_data{cop_line} = [113, \&PUT_U16, "GET_U16"];
+$insn_data{cop_warnings} = [114, \&PUT_svindex, "GET_svindex"];
+$insn_data{main_start} = [115, \&PUT_opindex, "GET_opindex"];
+$insn_data{main_root} = [116, \&PUT_opindex, "GET_opindex"];
+$insn_data{curpad} = [117, \&PUT_svindex, "GET_svindex"];
+$insn_data{push_begin} = [118, \&PUT_svindex, "GET_svindex"];
+$insn_data{push_init} = [119, \&PUT_svindex, "GET_svindex"];
+$insn_data{push_end} = [120, \&PUT_svindex, "GET_svindex"];
my ($insn_name, $insn_data);
while (($insn_name, $insn_data) = each %insn_data) {
}
}
-sub B::LISTOP::bytecode {
- my $op = shift;
- my $children = $op->children unless $strip_syntree;
- $op->B::BINOP::bytecode;
- if (($op->type || !$compress_nullops) && !$strip_syntree) {
- asm "op_children $children\n";
- }
-}
-
sub B::LOOP::bytecode {
my $op = shift;
my $redoopix = $op->redoop->objix;
my ($op, $level) = @_;
my $sym = objsym($op);
return $sym if defined $sym;
- $listopsect->add(sprintf("s\\_%x, s\\_%x, NULL, %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x, %u",
+ $listopsect->add(sprintf("s\\_%x, s\\_%x, NULL, %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x",
${$op->next}, ${$op->sibling},
$op->targ, $op->type, $op_seq, $op->flags,
- $op->private, ${$op->first}, ${$op->last},
- $op->children));
+ $op->private, ${$op->first}, ${$op->last}));
my $ix = $listopsect->index;
$init->add(sprintf("listop_list[$ix].op_ppaddr = %s;", $op->ppaddr));
savesym($op, "(OP*)&listop_list[$ix]");
#warn sprintf("LOOP: redoop %s, nextop %s, lastop %s\n",
# peekop($op->redoop), peekop($op->nextop),
# peekop($op->lastop)); # debug
- $loopsect->add(sprintf("s\\_%x, s\\_%x, NULL, %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x, %u, s\\_%x, s\\_%x, s\\_%x",
+ $loopsect->add(sprintf("s\\_%x, s\\_%x, NULL, %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x, s\\_%x, s\\_%x, s\\_%x",
${$op->next}, ${$op->sibling},
$op->targ, $op->type, $op_seq, $op->flags,
$op->private, ${$op->first}, ${$op->last},
- $op->children, ${$op->redoop}, ${$op->nextop},
+ ${$op->redoop}, ${$op->nextop},
${$op->lastop}));
my $ix = $loopsect->index;
$init->add(sprintf("loop_list[$ix].op_ppaddr = %s;", $op->ppaddr));
# pmnext handling is broken in perl itself, I think. Bad op_pmnext
# fields aren't noticed in perl's runtime (unless you try reset) but we
# segfault when trying to dereference it to find op->op_pmnext->op_type
- $pmopsect->add(sprintf("s\\_%x, s\\_%x, NULL, %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x, %u, %s, %s, 0, 0, 0x%x, 0x%x",
+ $pmopsect->add(sprintf("s\\_%x, s\\_%x, NULL, %u, %u, %u, 0x%x, 0x%x, s\\_%x, s\\_%x, %s, %s, 0, 0, 0x%x, 0x%x",
${$op->next}, ${$op->sibling}, $op->targ,
$op->type, $op_seq, $op->flags, $op->private,
- ${$op->first}, ${$op->last}, $op->children,
+ ${$op->first}, ${$op->last},
$replrootfield, $replstartfield,
$op->pmflags, $op->pmpermflags,));
my $pm = sprintf("pmop_list[%d]", $pmopsect->index);
--- /dev/null
+package B::Concise;
+# Copyright (C) 2000, 2001 Stephen McCamant. All rights reserved.
+# This program is free software; you can redistribute and/or modify it
+# under the same terms as Perl itself.
+
+our $VERSION = "0.51";
+use strict;
+use B qw(class ppname main_start main_root main_cv cstring svref_2object
+ SVf_IOK SVf_NOK SVf_POK OPf_KIDS);
+
+my %style =
+ ("terse" =>
+ ["(?(#label =>\n)?)(*( )*)#class (#addr) #name (?([#targ])?) "
+ . "#svclass~(?((#svaddr))?)~#svval~(?(label \"#coplabel\")?)\n",
+ "(*( )*)goto #class (#addr)\n",
+ "#class pp_#name"],
+ "concise" =>
+ ["#hyphseq2 (*( (x( ;)x))*)<#classsym> "
+ . "#exname#arg(?([#targarglife])?)~#flags(?(/#private)?)(x(;~->#next)x)\n",
+ " (*( )*) goto #seq\n",
+ "(?(<#seq>)?)#exname#arg(?([#targarglife])?)"],
+ "linenoise" =>
+ ["(x(;(*( )*))x)#noise#arg(?([#targarg])?)(x( ;\n)x)",
+ "gt_#seq ",
+ "(?(#seq)?)#noise#arg(?([#targarg])?)"],
+ "debug" =>
+ ["#class (#addr)\n\top_next\t\t#nextaddr\n\top_sibling\t#sibaddr\n\t"
+ . "op_ppaddr\tPL_ppaddr[OP_#NAME]\n\top_type\t\t#typenum\n\top_seq\t\t"
+ . "#seqnum\n\top_flags\t#flagval\n\top_private\t#privval\n"
+ . "(?(\top_first\t#firstaddr\n)?)(?(\top_last\t\t#lastaddr\n)?)"
+ . "(?(\top_sv\t\t#svaddr\n)?)",
+ " GOTO #addr\n",
+ "#addr"],
+ "env" => [$ENV{B_CONCISE_FORMAT}, $ENV{B_CONCISE_GOTO_FORMAT},
+ $ENV{B_CONCISE_TREE_FORMAT}],
+ );
+
+my($format, $gotofmt, $treefmt);
+my $curcv;
+my($seq_base, $cop_seq_base);
+
+sub concise_cv {
+ my ($order, $cvref) = @_;
+ my $cv = svref_2object($cvref);
+ $curcv = $cv;
+ if ($order eq "exec") {
+ walk_exec($cv->START);
+ } elsif ($order eq "basic") {
+ walk_topdown($cv->ROOT, sub { $_[0]->concise($_[1]) }, 0);
+ } else {
+ print tree($cv->ROOT, 0)
+ }
+}
+
+my $start_sym = "\e(0"; # "\cN" sometimes also works
+my $end_sym = "\e(B"; # "\cO" respectively
+
+my @tree_decorations =
+ ([" ", "--", "+-", "|-", "| ", "`-", "-", 1],
+ [" ", "-", "+", "+", "|", "`", "", 0],
+ [" ", map("$start_sym$_$end_sym", "qq", "wq", "tq", "x ", "mq", "q"), 1],
+ [" ", map("$start_sym$_$end_sym", "q", "w", "t", "x", "m"), "", 0],
+ );
+my $tree_style = 0;
+
+my $base = 36;
+my $big_endian = 1;
+
+my $order = "basic";
+
+sub compile {
+ my @options = grep(/^-/, @_);
+ my @args = grep(!/^-/, @_);
+ my $do_main = 0;
+ ($format, $gotofmt, $treefmt) = @{$style{"concise"}};
+ for my $o (@options) {
+ if ($o eq "-basic") {
+ $order = "basic";
+ } elsif ($o eq "-exec") {
+ $order = "exec";
+ } elsif ($o eq "-tree") {
+ $order = "tree";
+ } elsif ($o eq "-compact") {
+ $tree_style |= 1;
+ } elsif ($o eq "-loose") {
+ $tree_style &= ~1;
+ } elsif ($o eq "-vt") {
+ $tree_style |= 2;
+ } elsif ($o eq "-ascii") {
+ $tree_style &= ~2;
+ } elsif ($o eq "-main") {
+ $do_main = 1;
+ } elsif ($o =~ /^-base(\d+)$/) {
+ $base = $1;
+ } elsif ($o eq "-bigendian") {
+ $big_endian = 1;
+ } elsif ($o eq "-littleendian") {
+ $big_endian = 0;
+ } elsif (exists $style{substr($o, 1)}) {
+ ($format, $gotofmt, $treefmt) = @{$style{substr($o, 1)}};
+ } else {
+ warn "Option $o unrecognized";
+ }
+ }
+ if (@args) {
+ return sub {
+ for my $objname (@args) {
+ $objname = "main::" . $objname unless $objname =~ /::/;
+ eval "concise_cv(\$order, \\&$objname)";
+ die "concise_cv($order, \\&$objname) failed: $@" if $@;
+ }
+ }
+ }
+ if (!@args or $do_main) {
+ if ($order eq "exec") {
+ return sub { return if class(main_start) eq "NULL";
+ $curcv = main_cv;
+ walk_exec(main_start) }
+ } elsif ($order eq "tree") {
+ return sub { return if class(main_root) eq "NULL";
+ $curcv = main_cv;
+ print tree(main_root, 0) }
+ } elsif ($order eq "basic") {
+ return sub { return if class(main_root) eq "NULL";
+ $curcv = main_cv;
+ walk_topdown(main_root,
+ sub { $_[0]->concise($_[1]) }, 0); }
+ }
+ }
+}
+
+my %labels;
+my $lastnext;
+
+my %opclass = ('OP' => "0", 'UNOP' => "1", 'BINOP' => "2", 'LOGOP' => "|",
+ 'LISTOP' => "@", 'PMOP' => "/", 'SVOP' => "\$", 'GVOP' => "*",
+ 'PVOP' => '"', 'LOOP' => "{", 'COP' => ";");
+
+my @linenoise =
+ qw'# () sc ( @? 1 $* gv *{ m$ m@ m% m? p/ *$ $ $# & a& pt \\ s\\ rf bl
+ ` *? <> ?? ?/ r/ c/ // qr s/ /c y/ = @= C sC Cp sp df un BM po +1 +I
+ -1 -I 1+ I+ 1- I- ** * i* / i/ %$ i% x + i+ - i- . " << >> < i<
+ > i> <= i, >= i. == i= != i! <? i? s< s> s, s. s= s! s? b& b^ b| -0 -i
+ ! ~ a2 si cs rd sr e^ lg sq in %x %o ab le ss ve ix ri sf FL od ch cy
+ uf lf uc lc qm @ [f [ @[ eh vl ky dl ex % ${ @{ uk pk st jn ) )[ a@
+ a% sl +] -] [- [+ so rv GS GW MS MW .. f. .f && || ^^ ?: &= |= -> s{ s}
+ v} ca wa di rs ;; ; ;d }{ { } {} f{ it {l l} rt }l }n }r dm }g }e ^o
+ ^c ^| ^# um bm t~ u~ ~d DB db ^s se ^g ^r {w }w pf pr ^O ^K ^R ^W ^d ^v
+ ^e ^t ^k t. fc ic fl .s .p .b .c .l .a .h g1 s1 g2 s2 ?. l? -R -W -X -r
+ -w -x -e -o -O -z -s -M -A -C -S -c -b -f -d -p -l -u -g -k -t -T -B cd
+ co cr u. cm ut r. l@ s@ r@ mD uD oD rD tD sD wD cD f$ w$ p$ sh e$ k$ g3
+ g4 s4 g5 s5 T@ C@ L@ G@ A@ S@ Hg Hc Hr Hw Mg Mc Ms Mr Sg Sc So rq do {e
+ e} {t t} g6 G6 6e g7 G7 7e g8 G8 8e g9 G9 9e 6s 7s 8s 9s 6E 7E 8E 9E Pn
+ Pu GP SP EP Gn Gg GG SG EG g0 c$ lk t$ ;s n>';
+
+my $chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+sub op_flags {
+ my($x) = @_;
+ my(@v);
+ push @v, "v" if ($x & 3) == 1;
+ push @v, "s" if ($x & 3) == 2;
+ push @v, "l" if ($x & 3) == 3;
+ push @v, "K" if $x & 4;
+ push @v, "P" if $x & 8;
+ push @v, "R" if $x & 16;
+ push @v, "M" if $x & 32;
+ push @v, "S" if $x & 64;
+ push @v, "*" if $x & 128;
+ return join("", @v);
+}
+
+sub base_n {
+ my $x = shift;
+ return "-" . base_n(-$x) if $x < 0;
+ my $str = "";
+ do { $str .= substr($chars, $x % $base, 1) } while $x = int($x / $base);
+ $str = reverse $str if $big_endian;
+ return $str;
+}
+
+sub seq { return $_[0]->seq ? base_n($_[0]->seq - $seq_base) : "-" }
+
+sub walk_topdown {
+ my($op, $sub, $level) = @_;
+ $sub->($op, $level);
+ if ($op->flags & OPf_KIDS) {
+ for (my $kid = $op->first; $$kid; $kid = $kid->sibling) {
+ walk_topdown($kid, $sub, $level + 1);
+ }
+ }
+ if (class($op) eq "PMOP" and $ {$op->pmreplroot}) {
+ walk_topdown($op->pmreplroot, $sub, $level + 1);
+ }
+}
+
+sub walklines {
+ my($ar, $level) = @_;
+ for my $l (@$ar) {
+ if (ref($l) eq "ARRAY") {
+ walklines($l, $level + 1);
+ } else {
+ $l->concise($level);
+ }
+ }
+}
+
+sub walk_exec {
+ my($top, $level) = @_;
+ my %opsseen;
+ my @lines;
+ my @todo = ([$top, \@lines]);
+ while (@todo and my($op, $targ) = @{shift @todo}) {
+ for (; $$op; $op = $op->next) {
+ last if $opsseen{$$op}++;
+ push @$targ, $op;
+ my $name = $op->name;
+ if ($name
+ =~ /^(or|and|(map|grep)while|entertry|range|cond_expr)$/) {
+ my $ar = [];
+ push @$targ, $ar;
+ push @todo, [$op->other, $ar];
+ } elsif ($name eq "subst" and $ {$op->pmreplstart}) {
+ my $ar = [];
+ push @$targ, $ar;
+ push @todo, [$op->pmreplstart, $ar];
+ } elsif ($name =~ /^enter(loop|iter)$/) {
+ $labels{$op->nextop->seq} = "NEXT";
+ $labels{$op->lastop->seq} = "LAST";
+ $labels{$op->redoop->seq} = "REDO";
+ }
+ }
+ }
+ walklines(\@lines, 0);
+}
+
+sub fmt_line {
+ my($hr, $fmt, $level) = @_;
+ my $text = $fmt;
+ $text =~ s/\(\?\(([^\#]*?)\#(\w+)([^\#]*?)\)\?\)/
+ $hr->{$2} ? $1.$hr->{$2}.$3 : ""/eg;
+ $text =~ s/\(x\((.*?);(.*?)\)x\)/$order eq "exec" ? $1 : $2/egs;
+ $text =~ s/\(\*\(([^;]*?)\)\*\)/$1 x $level/egs;
+ $text =~ s/\(\*\((.*?);(.*?)\)\*\)/$1 x ($level - 1) . $2 x ($level>0)/egs;
+ $text =~ s/#([a-zA-Z]+)(\d+)/sprintf("%-$2s", $hr->{$1})/eg;
+ $text =~ s/#([a-zA-Z]+)/$hr->{$1}/eg;
+ $text =~ s/[ \t]*~+[ \t]*/ /g;
+ return $text;
+}
+
+my %priv;
+$priv{$_}{128} = "LVINTRO"
+ for ("pos", "substr", "vec", "threadsv", "gvsv", "rv2sv", "rv2hv", "rv2gv",
+ "rv2av", "rv2arylen", "aelem", "helem", "aslice", "hslice", "padsv",
+ "padav", "padhv");
+$priv{$_}{64} = "REFC" for ("leave", "leavesub", "leavesublv", "leavewrite");
+$priv{"aassign"}{64} = "COMMON";
+$priv{"aassign"}{32} = "PHASH";
+$priv{"sassign"}{64} = "BKWARD";
+$priv{$_}{64} = "RTIME" for ("match", "subst", "substcont");
+@{$priv{"trans"}}{1,2,4,8,16,64} = ("<UTF", ">UTF", "IDENT", "SQUASH", "DEL",
+ "COMPL", "GROWS");
+$priv{"repeat"}{64} = "DOLIST";
+$priv{"leaveloop"}{64} = "CONT";
+@{$priv{$_}}{32,64,96} = ("DREFAV", "DREFHV", "DREFSV")
+ for ("entersub", map("rv2${_}v", "a", "s", "h", "g"), "aelem", "helem");
+$priv{"entersub"}{16} = "DBG";
+$priv{"entersub"}{32} = "TARG";
+@{$priv{$_}}{4,8,128} = ("INARGS","AMPER","NO()") for ("entersub", "rv2cv");
+$priv{"gv"}{32} = "EARLYCV";
+$priv{"aelem"}{16} = $priv{"helem"}{16} = "LVDEFER";
+$priv{$_}{16} = "OURINTR" for ("gvsv", "rv2sv", "rv2av", "rv2hv", "r2gv");
+$priv{$_}{16} = "TARGMY"
+ for (map(($_,"s$_"),"chop", "chomp"),
+ map(($_,"i_$_"), "postinc", "postdec", "multiply", "divide", "modulo",
+ "add", "subtract", "negate"), "pow", "concat", "stringify",
+ "left_shift", "right_shift", "bit_and", "bit_xor", "bit_or",
+ "complement", "atan2", "sin", "cos", "rand", "exp", "log", "sqrt",
+ "int", "hex", "oct", "abs", "length", "index", "rindex", "sprintf",
+ "ord", "chr", "crypt", "quotemeta", "join", "push", "unshift", "flock",
+ "chdir", "chown", "chroot", "unlink", "chmod", "utime", "rename",
+ "link", "symlink", "mkdir", "rmdir", "wait", "waitpid", "system",
+ "exec", "kill", "getppid", "getpgrp", "setpgrp", "getpriority",
+ "setpriority", "time", "sleep");
+@{$priv{"const"}}{8,16,32,64,128} = ("STRICT","ENTERED", "$[", "BARE", "WARN");
+$priv{"flip"}{64} = $priv{"flop"}{64} = "LINENUM";
+$priv{"list"}{64} = "GUESSED";
+$priv{"delete"}{64} = "SLICE";
+$priv{"exists"}{64} = "SUB";
+$priv{$_}{64} = "LOCALE"
+ for ("sort", "prtf", "sprintf", "slt", "sle", "seq", "sne", "sgt", "sge",
+ "scmp", "lc", "uc", "lcfirst", "ucfirst");
+@{$priv{"sort"}}{1,2,4} = ("NUM", "INT", "REV");
+$priv{"threadsv"}{64} = "SVREFd";
+$priv{$_}{16} = "INBIN" for ("open", "backtick");
+$priv{$_}{32} = "INCR" for ("open", "backtick");
+$priv{$_}{64} = "OUTBIN" for ("open", "backtick");
+$priv{$_}{128} = "OUTCR" for ("open", "backtick");
+$priv{"exit"}{128} = "VMS";
+
+sub private_flags {
+ my($name, $x) = @_;
+ my @s;
+ for my $flag (128, 96, 64, 32, 16, 8, 4, 2, 1) {
+ if ($priv{$name}{$flag} and $x & $flag and $x >= $flag) {
+ $x -= $flag;
+ push @s, $priv{$name}{$flag};
+ }
+ }
+ push @s, $x if $x;
+ return join(",", @s);
+}
+
+sub concise_op {
+ my ($op, $level, $format) = @_;
+ my %h;
+ $h{exname} = $h{name} = $op->name;
+ $h{NAME} = uc $h{name};
+ $h{class} = class($op);
+ $h{extarg} = $h{targ} = $op->targ;
+ $h{extarg} = "" unless $h{extarg};
+ if ($h{name} eq "null" and $h{targ}) {
+ $h{exname} = "ex-" . substr(ppname($h{targ}), 3);
+ $h{extarg} = "";
+ } elsif ($h{targ}) {
+ my $padname = (($curcv->PADLIST->ARRAY)[0]->ARRAY)[$h{targ}];
+ if (defined $padname and class($padname) ne "SPECIAL") {
+ $h{targarg} = $padname->PV;
+ my $intro = $padname->NVX - $cop_seq_base;
+ my $finish = int($padname->IVX) - $cop_seq_base;
+ $finish = "end" if $finish == 999999999 - $cop_seq_base;
+ $h{targarglife} = "$h{targarg}:$intro,$finish";
+ } else {
+ $h{targarglife} = $h{targarg} = "t" . $h{targ};
+ }
+ }
+ $h{arg} = "";
+ $h{svclass} = $h{svaddr} = $h{svval} = "";
+ if ($h{class} eq "PMOP") {
+ my $precomp = $op->precomp;
+ $precomp = defined($precomp) ? "/$precomp/" : "";
+ my $pmreplstart;
+ if ($ {$op->pmreplstart}) {
+ undef $lastnext;
+ $pmreplstart = "replstart->" . seq($op->pmreplstart);
+ $h{arg} = "(" . join(" ", $precomp, $pmreplstart) . ")";
+ } else {
+ $h{arg} = "($precomp)";
+ }
+ } elsif ($h{class} eq "PVOP" and $h{name} ne "trans") {
+ $h{arg} = '("' . $op->pv . '")';
+ $h{svval} = '"' . $op->pv . '"';
+ } elsif ($h{class} eq "COP") {
+ my $label = $op->label;
+ $h{coplabel} = $label;
+ $label = $label ? "$label: " : "";
+ my $loc = $op->file;
+ $loc =~ s[.*/][];
+ $loc .= ":" . $op->line;
+ my($stash, $cseq) = ($op->stash->NAME, $op->cop_seq - $cop_seq_base);
+ my $arybase = $op->arybase;
+ $arybase = $arybase ? ' $[=' . $arybase : "";
+ $h{arg} = "($label$stash $cseq $loc$arybase)";
+ } elsif ($h{class} eq "LOOP") {
+ $h{arg} = "(next->" . seq($op->nextop) . " last->" . seq($op->lastop)
+ . " redo->" . seq($op->redoop) . ")";
+ } elsif ($h{class} eq "LOGOP") {
+ undef $lastnext;
+ $h{arg} = "(other->" . seq($op->other) . ")";
+ } elsif ($h{class} eq "SVOP") {
+ my $sv = $op->sv;
+ $h{svclass} = class($sv);
+ $h{svaddr} = sprintf("%#x", $$sv);
+ if ($h{svclass} eq "GV") {
+ my $gv = $sv;
+ my $stash = $gv->STASH->NAME;
+ if ($stash eq "main") {
+ $stash = "";
+ } else {
+ $stash = $stash . "::";
+ }
+ $h{arg} = "(*$stash" . $gv->NAME . ")";
+ $h{svval} = "*$stash" . $gv->NAME;
+ } else {
+ while (class($sv) eq "RV") {
+ $h{svval} .= "\\";
+ $sv = $sv->RV;
+ }
+ if (class($sv) eq "SPECIAL") {
+ $h{svval} = ["Null", "sv_undef", "sv_yes", "sv_no"]->[$$sv];
+ } elsif ($sv->FLAGS & SVf_NOK) {
+ $h{svval} = $sv->NV;
+ } elsif ($sv->FLAGS & SVf_IOK) {
+ $h{svval} = $sv->IV;
+ } elsif ($sv->FLAGS & SVf_POK) {
+ $h{svval} = cstring($sv->PV);
+ }
+ $h{arg} = "($h{svclass} $h{svval})";
+ }
+ }
+ $h{seq} = $h{hyphseq} = seq($op);
+ $h{seq} = "" if $h{seq} eq "-";
+ $h{seqnum} = $op->seq;
+ $h{next} = $op->next;
+ $h{next} = (class($h{next}) eq "NULL") ? "(end)" : seq($h{next});
+ $h{nextaddr} = sprintf("%#x", $ {$op->next});
+ $h{sibaddr} = sprintf("%#x", $ {$op->sibling});
+ $h{firstaddr} = sprintf("%#x", $ {$op->first}) if $op->can("first");
+ $h{lastaddr} = sprintf("%#x", $ {$op->last}) if $op->can("last");
+
+ $h{classsym} = $opclass{$h{class}};
+ $h{flagval} = $op->flags;
+ $h{flags} = op_flags($op->flags);
+ $h{privval} = $op->private;
+ $h{private} = private_flags($h{name}, $op->private);
+ $h{addr} = sprintf("%#x", $$op);
+ $h{label} = $labels{$op->seq};
+ $h{typenum} = $op->type;
+ $h{noise} = $linenoise[$op->type];
+ return fmt_line(\%h, $format, $level);
+}
+
+sub B::OP::concise {
+ my($op, $level) = @_;
+ if ($order eq "exec" and $lastnext and $$lastnext != $$op) {
+ my $h = {"seq" => seq($lastnext), "class" => class($lastnext),
+ "addr" => sprintf("%#x", $$lastnext)};
+ print fmt_line($h, $gotofmt, $level+1);
+ }
+ $lastnext = $op->next;
+ print concise_op($op, $level, $format);
+}
+
+sub tree {
+ my $op = shift;
+ my $level = shift;
+ my $style = $tree_decorations[$tree_style];
+ my($space, $single, $kids, $kid, $nokid, $last, $lead, $size) = @$style;
+ my $name = concise_op($op, $level, $treefmt);
+ if (not $op->flags & OPf_KIDS) {
+ return $name . "\n";
+ }
+ my @lines;
+ for (my $kid = $op->first; $$kid; $kid = $kid->sibling) {
+ push @lines, tree($kid, $level+1);
+ }
+ my $i;
+ for ($i = $#lines; substr($lines[$i], 0, 1) eq " "; $i--) {
+ $lines[$i] = $space . $lines[$i];
+ }
+ if ($i > 0) {
+ $lines[$i] = $last . $lines[$i];
+ while ($i-- > 1) {
+ if (substr($lines[$i], 0, 1) eq " ") {
+ $lines[$i] = $nokid . $lines[$i];
+ } else {
+ $lines[$i] = $kid . $lines[$i];
+ }
+ }
+ $lines[$i] = $kids . $lines[$i];
+ } else {
+ $lines[0] = $single . $lines[0];
+ }
+ return("$name$lead" . shift @lines,
+ map(" " x (length($name)+$size) . $_, @lines));
+}
+
+# This is a bit of a hack; the 2 and 15 were determined empirically.
+# These need to stay the last things in the module.
+$cop_seq_base = svref_2object(eval 'sub{0;}')->START->cop_seq + 2;
+$seq_base = svref_2object(eval 'sub{}')->START->seq + 15;
+
+1;
+
+__END__
+
+=head1 NAME
+
+B::Concise - Walk Perl syntax tree, printing concise info about ops
+
+=head1 SYNOPSIS
+
+ perl -MO=Concise[,OPTIONS] foo.pl
+
+=head1 DESCRIPTION
+
+This compiler backend prints the internal OPs of a Perl program's syntax
+tree in one of several space-efficient text formats suitable for debugging
+the inner workings of perl or other compiler backends. It can print OPs in
+the order they appear in the OP tree, in the order they will execute, or
+in a text approximation to their tree structure, and the format of the
+information displyed is customizable. Its function is similar to that of
+perl's B<-Dx> debugging flag or the B<B::Terse> module, but it is more
+sophisticated and flexible.
+
+=head1 OPTIONS
+
+Arguments that don't start with a hyphen are taken to be the names of
+subroutines to print the OPs of; if no such functions are specified, the
+main body of the program (outside any subroutines, and not including use'd
+or require'd files) is printed.
+
+=over 4
+
+=item B<-basic>
+
+Print OPs in the order they appear in the OP tree (a preorder
+traversal, starting at the root). The indentation of each OP shows its
+level in the tree. This mode is the default, so the flag is included
+simply for completeness.
+
+=item B<-exec>
+
+Print OPs in the order they would normally execute (for the majority
+of constructs this is a postorder traversal of the tree, ending at the
+root). In most cases the OP that usually follows a given OP will
+appear directly below it; alternate paths are shown by indentation. In
+cases like loops when control jumps out of a linear path, a 'goto'
+line is generated.
+
+=item B<-tree>
+
+Print OPs in a text approximation of a tree, with the root of the tree
+at the left and 'left-to-right' order of children transformed into
+'top-to-bottom'. Because this mode grows both to the right and down,
+it isn't suitable for large programs (unless you have a very wide
+terminal).
+
+=item B<-compact>
+
+Use a tree format in which the minimum amount of space is used for the
+lines connecting nodes (one character in most cases). This squeezes out
+a few precious columns of screen real estate.
+
+=item B<-loose>
+
+Use a tree format that uses longer edges to separate OP nodes. This format
+tends to look better than the compact one, especially in ASCII, and is
+the default.
+
+=item B<-vt>
+
+Use tree connecting characters drawn from the VT100 line-drawing set.
+This looks better if your terminal supports it.
+
+=item B<-ascii>
+
+Draw the tree with standard ASCII characters like C<+> and C<|>. These don't
+look as clean as the VT100 characters, but they'll work with almost any
+terminal (or the horizontal scrolling mode of less(1)) and are suitable
+for text documentation or email. This is the default.
+
+=item B<-main>
+
+Include the main program in the output, even if subroutines were also
+specified.
+
+=item B<-base>I<n>
+
+Print OP sequence numbers in base I<n>. If I<n> is greater than 10, the
+digit for 11 will be 'a', and so on. If I<n> is greater than 36, the digit
+for 37 will be 'A', and so on until 62. Values greater than 62 are not
+currently supported. The default is 36.
+
+=item B<-bigendian>
+
+Print sequence numbers with the most significant digit first. This is the
+usual convention for Arabic numerals, and the default.
+
+=item B<-littleendian>
+
+Print seqence numbers with the least significant digit first.
+
+=item B<-concise>
+
+Use the author's favorite set of formatting conventions. This is the
+default, of course.
+
+=item B<-terse>
+
+Use formatting conventions that emulate the ouput of B<B::Terse>. The
+basic mode is almost indistinguishable from the real B<B::Terse>, and the
+exec mode looks very similar, but is in a more logical order and lacks
+curly brackets. B<B::Terse> doesn't have a tree mode, so the tree mode
+is only vaguely reminiscient of B<B::Terse>.
+
+=item B<-linenoise>
+
+Use formatting conventions in which the name of each OP, rather than being
+written out in full, is represented by a one- or two-character abbreviation.
+This is mainly a joke.
+
+=item B<-debug>
+
+Use formatting conventions reminiscient of B<B::Debug>; these aren't
+very concise at all.
+
+=item B<-env>
+
+Use formatting conventions read from the environment variables
+C<B_CONCISE_FORMAT>, C<B_CONCISE_GOTO_FORMAT>, and C<B_CONCISE_TREE_FORMAT>.
+
+=back
+
+=head1 FORMATTING SPECIFICATIONS
+
+For each general style ('concise', 'terse', 'linenoise', etc.) there are
+three specifications: one of how OPs should appear in the basic or exec
+modes, one of how 'goto' lines should appear (these occur in the exec
+mode only), and one of how nodes should appear in tree mode. Each has the
+same format, described below. Any text that doesn't match a special
+pattern is copied verbatim.
+
+=over 4
+
+=item B<(x(>I<exec_text>B<;>I<basic_text>B<)x)>
+
+Generates I<exec_text> in exec mode, or I<basic_text> in basic mode.
+
+=item B<(*(>I<text>B<)*)>
+
+Generates one copy of I<text> for each indentation level.
+
+=item B<(*(>I<text1>B<;>I<text2>B<)*)>
+
+Generates one fewer copies of I<text1> than the indentation level, followed
+by one copy of I<text2> if the indentation level is more than 0.
+
+=item B<(?(>I<text1>B<#>I<var>I<Text2>B<)?)>
+
+If the value of I<var> is true (not empty or zero), generates the
+value of I<var> surrounded by I<text1> and I<Text2>, otherwise
+nothing.
+
+=item B<#>I<var>
+
+Generates the value of the variable I<var>.
+
+=item B<#>I<var>I<N>
+
+Generates the value of I<var>, left jutified to fill I<N> spaces.
+
+=item B<~>
+
+Any number of tildes and surrounding whitespace will be collapsed to
+a single space.
+
+=back
+
+The following variables are recognized:
+
+=over 4
+
+=item B<#addr>
+
+The address of the OP, in hexidecimal.
+
+=item B<#arg>
+
+The OP-specific information of the OP (such as the SV for an SVOP, the
+non-local exit pointers for a LOOP, etc.) enclosed in paretheses.
+
+=item B<#class>
+
+The B-determined class of the OP, in all caps.
+
+=item B<#classym>
+
+A single symbol abbreviating the class of the OP.
+
+=item B<#coplabel>
+
+The label of the statement or block the OP is the start of, if any.
+
+=item B<#exname>
+
+The name of the OP, or 'ex-foo' if the OP is a null that used to be a foo.
+
+=item B<#extarg>
+
+The target of the OP, or nothing for a nulled OP.
+
+=item B<#firstaddr>
+
+The address of the OP's first child, in hexidecimal.
+
+=item B<#flags>
+
+The OP's flags, abbreviated as a series of symbols.
+
+=item B<#flagval>
+
+The numeric value of the OP's flags.
+
+=item B<#hyphenseq>
+
+The sequence number of the OP, or a hyphen if it doesn't have one.
+
+=item B<#label>
+
+'NEXT', 'LAST', or 'REDO' if the OP is a target of one of those in exec
+mode, or empty otherwise.
+
+=item B<#lastaddr>
+
+The address of the OP's last child, in hexidecimal.
+
+=item B<#name>
+
+The OP's name.
+
+=item B<#NAME>
+
+The OP's name, in all caps.
+
+=item B<#next>
+
+The sequence number of the OP's next OP.
+
+=item B<#nextaddr>
+
+The address of the OP's next OP, in hexidecimal.
+
+=item B<#noise>
+
+The two-character abbreviation for the OP's name.
+
+=item B<#private>
+
+The OP's private flags, rendered with abbreviated names if possible.
+
+=item B<#privval>
+
+The numeric value of the OP's private flags.
+
+=item B<#seq>
+
+The sequence number of the OP.
+
+=item B<#seqnum>
+
+The real sequence number of the OP, as a regular number and not adjusted
+to be relative to the start of the real program. (This will generally be
+a fairly large number because all of B<B::Concise> is compiled before
+your program is).
+
+=item B<#sibaddr>
+
+The address of the OP's next youngest sibling, in hexidecimal.
+
+=item B<#svaddr>
+
+The address of the OP's SV, if it has an SV, in hexidecimal.
+
+=item B<#svclass>
+
+The class of the OP's SV, if it has one, in all caps (e.g., 'IV').
+
+=item B<#svval>
+
+The value of the OP's SV, if it has one, in a short human-readable format.
+
+=item B<#targ>
+
+The numeric value of the OP's targ.
+
+=item B<#targarg>
+
+The name of the variable the OP's targ refers to, if any, otherwise the
+letter t followed by the OP's targ in decimal.
+
+=item B<#targarglife>
+
+Same as B<#targarg>, but followed by the COP sequence numbers that delimit
+the variable's lifetime (or 'end' for a variable in an open scope) for a
+variable.
+
+=item B<#typenum>
+
+The numeric value of the OP's type, in decimal.
+
+=back
+
+=head1 ABBREVIATIONS
+
+=head2 OP flags abbreviations
+
+ v OPf_WANT_VOID Want nothing (void context)
+ s OPf_WANT_SCALAR Want single value (scalar context)
+ l OPf_WANT_LIST Want list of any length (list context)
+ K OPf_KIDS There is a firstborn child.
+ P OPf_PARENS This operator was parenthesized.
+ (Or block needs explicit scope entry.)
+ R OPf_REF Certified reference.
+ (Return container, not containee).
+ M OPf_MOD Will modify (lvalue).
+ S OPf_STACKED Some arg is arriving on the stack.
+ * OPf_SPECIAL Do something weird for this op (see op.h)
+
+=head2 OP class abbreviations
+
+ 0 OP (aka BASEOP) An OP with no children
+ 1 UNOP An OP with one child
+ 2 BINOP An OP with two children
+ | LOGOP A control branch OP
+ @ LISTOP An OP that could have lots of children
+ / PMOP An OP with a regular expression
+ $ SVOP An OP with an SV
+ " PVOP An OP with a string
+ { LOOP An OP that holds pointers for a loop
+ ; COP An OP that marks the start of a statement
+
+=head1 AUTHOR
+
+Stephen McCamant, C<smcc@CSUA.Berkeley.EDU>
+
+=cut
cLOGOP->op_other = arg;
break;
}
- case INSN_OP_CHILDREN: /* 94 */
- {
- U32 arg;
- BGET_U32(arg);
- cLISTOP->op_children = arg;
- break;
- }
- case INSN_OP_PMREPLROOT: /* 95 */
+ case INSN_OP_PMREPLROOT: /* 94 */
{
opindex arg;
BGET_opindex(arg);
cPMOP->op_pmreplroot = arg;
break;
}
- case INSN_OP_PMREPLROOTGV: /* 96 */
+ case INSN_OP_PMREPLROOTGV: /* 95 */
{
svindex arg;
BGET_svindex(arg);
*(SV**)&cPMOP->op_pmreplroot = arg;
break;
}
- case INSN_OP_PMREPLSTART: /* 97 */
+ case INSN_OP_PMREPLSTART: /* 96 */
{
opindex arg;
BGET_opindex(arg);
cPMOP->op_pmreplstart = arg;
break;
}
- case INSN_OP_PMNEXT: /* 98 */
+ case INSN_OP_PMNEXT: /* 97 */
{
opindex arg;
BGET_opindex(arg);
*(OP**)&cPMOP->op_pmnext = arg;
break;
}
- case INSN_PREGCOMP: /* 99 */
+ case INSN_PREGCOMP: /* 98 */
{
pvcontents arg;
BGET_pvcontents(arg);
BSET_pregcomp(PL_op, arg);
break;
}
- case INSN_OP_PMFLAGS: /* 100 */
+ case INSN_OP_PMFLAGS: /* 99 */
{
U16 arg;
BGET_U16(arg);
cPMOP->op_pmflags = arg;
break;
}
- case INSN_OP_PMPERMFLAGS: /* 101 */
+ case INSN_OP_PMPERMFLAGS: /* 100 */
{
U16 arg;
BGET_U16(arg);
cPMOP->op_pmpermflags = arg;
break;
}
- case INSN_OP_SV: /* 102 */
+ case INSN_OP_SV: /* 101 */
{
svindex arg;
BGET_svindex(arg);
cSVOP->op_sv = arg;
break;
}
- case INSN_OP_PADIX: /* 103 */
+ case INSN_OP_PADIX: /* 102 */
{
PADOFFSET arg;
BGET_U32(arg);
cPADOP->op_padix = arg;
break;
}
- case INSN_OP_PV: /* 104 */
+ case INSN_OP_PV: /* 103 */
{
pvcontents arg;
BGET_pvcontents(arg);
cPVOP->op_pv = arg;
break;
}
- case INSN_OP_PV_TR: /* 105 */
+ case INSN_OP_PV_TR: /* 104 */
{
op_tr_array arg;
BGET_op_tr_array(arg);
cPVOP->op_pv = arg;
break;
}
- case INSN_OP_REDOOP: /* 106 */
+ case INSN_OP_REDOOP: /* 105 */
{
opindex arg;
BGET_opindex(arg);
cLOOP->op_redoop = arg;
break;
}
- case INSN_OP_NEXTOP: /* 107 */
+ case INSN_OP_NEXTOP: /* 106 */
{
opindex arg;
BGET_opindex(arg);
cLOOP->op_nextop = arg;
break;
}
- case INSN_OP_LASTOP: /* 108 */
+ case INSN_OP_LASTOP: /* 107 */
{
opindex arg;
BGET_opindex(arg);
cLOOP->op_lastop = arg;
break;
}
- case INSN_COP_LABEL: /* 109 */
+ case INSN_COP_LABEL: /* 108 */
{
pvindex arg;
BGET_pvindex(arg);
cCOP->cop_label = arg;
break;
}
- case INSN_COP_STASHPV: /* 110 */
+ case INSN_COP_STASHPV: /* 109 */
{
pvindex arg;
BGET_pvindex(arg);
BSET_cop_stashpv(cCOP, arg);
break;
}
- case INSN_COP_FILE: /* 111 */
+ case INSN_COP_FILE: /* 110 */
{
pvindex arg;
BGET_pvindex(arg);
BSET_cop_file(cCOP, arg);
break;
}
- case INSN_COP_SEQ: /* 112 */
+ case INSN_COP_SEQ: /* 111 */
{
U32 arg;
BGET_U32(arg);
cCOP->cop_seq = arg;
break;
}
- case INSN_COP_ARYBASE: /* 113 */
+ case INSN_COP_ARYBASE: /* 112 */
{
I32 arg;
BGET_I32(arg);
cCOP->cop_arybase = arg;
break;
}
- case INSN_COP_LINE: /* 114 */
+ case INSN_COP_LINE: /* 113 */
{
line_t arg;
BGET_U16(arg);
BSET_cop_line(cCOP, arg);
break;
}
- case INSN_COP_WARNINGS: /* 115 */
+ case INSN_COP_WARNINGS: /* 114 */
{
svindex arg;
BGET_svindex(arg);
cCOP->cop_warnings = arg;
break;
}
- case INSN_MAIN_START: /* 116 */
+ case INSN_MAIN_START: /* 115 */
{
opindex arg;
BGET_opindex(arg);
PL_main_start = arg;
break;
}
- case INSN_MAIN_ROOT: /* 117 */
+ case INSN_MAIN_ROOT: /* 116 */
{
opindex arg;
BGET_opindex(arg);
PL_main_root = arg;
break;
}
- case INSN_CURPAD: /* 118 */
+ case INSN_CURPAD: /* 117 */
{
svindex arg;
BGET_svindex(arg);
BSET_curpad(PL_curpad, arg);
break;
}
- case INSN_PUSH_BEGIN: /* 119 */
+ case INSN_PUSH_BEGIN: /* 118 */
{
svindex arg;
BGET_svindex(arg);
BSET_push_begin(PL_beginav, arg);
break;
}
- case INSN_PUSH_INIT: /* 120 */
+ case INSN_PUSH_INIT: /* 119 */
{
svindex arg;
BGET_svindex(arg);
BSET_push_init(PL_initav, arg);
break;
}
- case INSN_PUSH_END: /* 121 */
+ case INSN_PUSH_END: /* 120 */
{
svindex arg;
BGET_svindex(arg);
INSN_OP_FIRST, /* 91 */
INSN_OP_LAST, /* 92 */
INSN_OP_OTHER, /* 93 */
- INSN_OP_CHILDREN, /* 94 */
- INSN_OP_PMREPLROOT, /* 95 */
- INSN_OP_PMREPLROOTGV, /* 96 */
- INSN_OP_PMREPLSTART, /* 97 */
- INSN_OP_PMNEXT, /* 98 */
- INSN_PREGCOMP, /* 99 */
- INSN_OP_PMFLAGS, /* 100 */
- INSN_OP_PMPERMFLAGS, /* 101 */
- INSN_OP_SV, /* 102 */
- INSN_OP_PADIX, /* 103 */
- INSN_OP_PV, /* 104 */
- INSN_OP_PV_TR, /* 105 */
- INSN_OP_REDOOP, /* 106 */
- INSN_OP_NEXTOP, /* 107 */
- INSN_OP_LASTOP, /* 108 */
- INSN_COP_LABEL, /* 109 */
- INSN_COP_STASHPV, /* 110 */
- INSN_COP_FILE, /* 111 */
- INSN_COP_SEQ, /* 112 */
- INSN_COP_ARYBASE, /* 113 */
- INSN_COP_LINE, /* 114 */
- INSN_COP_WARNINGS, /* 115 */
- INSN_MAIN_START, /* 116 */
- INSN_MAIN_ROOT, /* 117 */
- INSN_CURPAD, /* 118 */
- INSN_PUSH_BEGIN, /* 119 */
- INSN_PUSH_INIT, /* 120 */
- INSN_PUSH_END, /* 121 */
- MAX_INSN = 121
+ INSN_OP_PMREPLROOT, /* 94 */
+ INSN_OP_PMREPLROOTGV, /* 95 */
+ INSN_OP_PMREPLSTART, /* 96 */
+ INSN_OP_PMNEXT, /* 97 */
+ INSN_PREGCOMP, /* 98 */
+ INSN_OP_PMFLAGS, /* 99 */
+ INSN_OP_PMPERMFLAGS, /* 100 */
+ INSN_OP_SV, /* 101 */
+ INSN_OP_PADIX, /* 102 */
+ INSN_OP_PV, /* 103 */
+ INSN_OP_PV_TR, /* 104 */
+ INSN_OP_REDOOP, /* 105 */
+ INSN_OP_NEXTOP, /* 106 */
+ INSN_OP_LASTOP, /* 107 */
+ INSN_COP_LABEL, /* 108 */
+ INSN_COP_STASHPV, /* 109 */
+ INSN_COP_FILE, /* 110 */
+ INSN_COP_SEQ, /* 111 */
+ INSN_COP_ARYBASE, /* 112 */
+ INSN_COP_LINE, /* 113 */
+ INSN_COP_WARNINGS, /* 114 */
+ INSN_MAIN_START, /* 115 */
+ INSN_MAIN_ROOT, /* 116 */
+ INSN_CURPAD, /* 117 */
+ INSN_PUSH_BEGIN, /* 118 */
+ INSN_PUSH_INIT, /* 119 */
+ INSN_PUSH_END, /* 120 */
+ MAX_INSN = 120
};
enum {
p++;
switch(atoi(s)) {
case L_ERROR_TOOMANY:
- strcat(errbuf, "to many errors");
+ strcat(errbuf, "too many errors");
break;
case L_ERROR_NOLIB:
strcat(errbuf, "can't load library");
--- /dev/null
+/* dl_dllload.xs
+ *
+ * Platform: OS/390, possibly others that use dllload(),dllfree() (VM/ESA?).
+ * Authors: John Goodyear && Peter Prymmer
+ * Created: 28 October 2000
+ * Modified:
+ * 16 January 2001 - based loosely on dl_dlopen.xs.
+ */
+
+/* Porting notes:
+
+ OS/390 Dynamic Loading functions:
+
+ dllload
+ -------
+ dllhandle * dllload(const char *dllName)
+
+ This function takes the name of a dynamic object file and returns
+ a descriptor which can be used by dlllqueryfn() and/or dllqueryvar()
+ later. If dllName contains a slash, it is used to locate the dll.
+ If not then the LIBPATH environment variable is used to
+ search for the requested dll (at least within the HFS).
+ It returns NULL on error and sets errno.
+
+ dllfree
+ -------
+ int dllfree(dllhandle *handle);
+
+ dllfree() decrements the load count for the dll and frees
+ it if the count is 0. It returns zero on success, and
+ non-zero on failure.
+
+ dllqueryfn && dllqueryvar
+ -------------------------
+ void (* dllqueryfn(dllhandle *handle, const char *function))();
+ void * dllqueryvar(dllhandle *handle, const char *symbol);
+
+ dllqueryfn() takes the handle returned from dllload() and the name
+ of a function to get the address of. If the function was found
+ a pointer is returned, otherwise NULL is returned.
+
+ dllqueryvar() takes the handle returned from dllload() and the name
+ of a symbol to get the address of. If the variable was found a
+ pointer is returned, otherwise NULL is returned.
+
+ The XS dl_find_symbol() first calls dllqueryfn(). If it fails
+ dlqueryvar() is then called.
+
+ strerror
+ --------
+ char * strerror(int errno)
+
+ Returns a null-terminated string which describes the last error
+ that occurred with other functions (not necessarily unique to
+ dll loading).
+
+ Return Types
+ ============
+ In this implementation the two functions, dl_load_file() &&
+ dl_find_symbol(), return (void *). This is primarily because the
+ dlopen() && dlsym() style dynamic linker calls return (void *).
+ We suspect that casting to (void *) may be easier than teaching XS
+ typemaps about the (dllhandle *) type.
+
+ Dealing with Error Messages
+ ===========================
+ In order to make the handling of dynamic linking errors as generic as
+ possible you should store any error messages associated with your
+ implementation with the StoreError function.
+
+ In the case of OS/390 the function strerror(errno) returns the error
+ message associated with the last dynamic link error. As the S/390
+ dynamic linker functions dllload() && dllqueryvar() both return NULL
+ on error every call to an S/390 dynamic link routine is coded
+ like this:
+
+ RETVAL = dllload(filename) ;
+ if (RETVAL == NULL)
+ SaveError("%s",strerror(errno)) ;
+
+ Note that SaveError() takes a printf format string. Use a "%s" as
+ the first parameter if the error may contain any % characters.
+
+ Other comments within the dl_dlopen.xs file may be helpful as well.
+*/
+
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+
+#include <dll.h> /* the dynamic linker include file for S/390 */
+#include <errno.h> /* strerror() and friends */
+
+#include "dlutils.c" /* SaveError() etc */
+
+static void
+dl_private_init(pTHX)
+{
+ (void)dl_generic_private_init(aTHX);
+}
+
+MODULE = DynaLoader PACKAGE = DynaLoader
+
+BOOT:
+ (void)dl_private_init(aTHX);
+
+
+void *
+dl_load_file(filename, flags=0)
+ char * filename
+ int flags
+ PREINIT:
+ int mode = 0;
+ CODE:
+{
+ DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_load_file(%s,%x):\n", filename,flags));
+ /* add a (void *) dllload(filename) ; cast if needed */
+ RETVAL = dllload(filename) ;
+ DLDEBUG(2,PerlIO_printf(Perl_debug_log, " libref=%lx\n", (unsigned long) RETVAL));
+ ST(0) = sv_newmortal() ;
+ if (RETVAL == NULL)
+ SaveError(aTHX_ "%s",strerror(errno)) ;
+ else
+ sv_setiv( ST(0), PTR2IV(RETVAL));
+}
+
+
+int
+dl_unload_file(libref)
+ void * libref
+ CODE:
+ DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_unload_file(%lx):\n", PTR2ul(libref)));
+ /* RETVAL = (dllfree((dllhandle *)libref) == 0 ? 1 : 0); */
+ RETVAL = (dllfree(libref) == 0 ? 1 : 0);
+ if (!RETVAL)
+ SaveError(aTHX_ "%s", strerror(errno)) ;
+ DLDEBUG(2,PerlIO_printf(Perl_debug_log, " retval = %d\n", RETVAL));
+ OUTPUT:
+ RETVAL
+
+
+void *
+dl_find_symbol(libhandle, symbolname)
+ void * libhandle
+ char * symbolname
+ CODE:
+ DLDEBUG(2, PerlIO_printf(Perl_debug_log,
+ "dl_find_symbol(handle=%lx, symbol=%s)\n",
+ (unsigned long) libhandle, symbolname));
+ if((RETVAL = (void*)dllqueryfn(libhandle, symbolname)) == NULL)
+ RETVAL = dllqueryvar(libhandle, symbolname);
+ DLDEBUG(2, PerlIO_printf(Perl_debug_log,
+ " symbolref = %lx\n", (unsigned long) RETVAL));
+ ST(0) = sv_newmortal() ;
+ if (RETVAL == NULL)
+ SaveError(aTHX_ "%s",strerror(errno)) ;
+ else
+ sv_setiv( ST(0), PTR2IV(RETVAL));
+
+
+void
+dl_undef_symbols()
+ PPCODE:
+
+
+
+# These functions should not need changing on any platform:
+
+void
+dl_install_xsub(perl_name, symref, filename="$Package")
+ char * perl_name
+ void * symref
+ char * filename
+ CODE:
+ DLDEBUG(2,PerlIO_printf(Perl_debug_log, "dl_install_xsub(name=%s, symref=%lx)\n",
+ perl_name, (unsigned long) symref));
+ ST(0) = sv_2mortal(newRV((SV*)newXS(perl_name,
+ (void(*)(pTHX_ CV *))symref,
+ filename)));
+
+
+char *
+dl_error()
+ CODE:
+ RETVAL = LastError ;
+ OUTPUT:
+ RETVAL
+
+# end.
SaveError("%s",dlerror()) ;
Note that SaveError() takes a printf format string. Use a "%s" as
- the first parameter if the error may contain and % characters.
+ the first parameter if the error may contain any % characters.
*/
XPUSHs(sv_2mortal(newSVpvn(arg,len)));
PUTBACK;
if (perl_call_method("getEncoding",G_SCALAR) != 1)
- return -1;
+ {
+ /* should never happen */
+ Perl_die(aTHX_ "Encode::getEncoding did not return a value");
+ return -1;
+ }
SPAGAIN;
e->enc = POPs;
PUTBACK;
if (!SvROK(e->enc))
- return -1;
+ {
+ e->enc = Nullsv;
+ errno = EINVAL;
+ Perl_warner(aTHX_ WARN_IO, "Cannot find encoding \"%.*s\"", (int) len, arg);
+ return -1;
+ }
SvREFCNT_inc(e->enc);
FREETMPS;
LEAVE;
HV *hash = get_hv("Encode::encoding",GV_ADD|GV_ADDMULTI);
HV *stash = gv_stashpv("Encode::XS", TRUE);
SV *sv = sv_bless(newRV_noinc(newSViv(PTR2IV(enc))),stash);
- hv_store(hash,enc->name,strlen(enc->name),sv,0);
+ int i = 0;
+ while (enc->name[i])
+ {
+ const char *name = enc->name[i++];
+ hv_store(hash,name,strlen(name),SvREFCNT_inc(sv),0);
+ }
+ SvREFCNT_dec(sv);
}
void call_failure (SV *routine, U8* done, U8* dest, U8* orig) {}
{
STRLEN clen;
UV ch = utf8_to_uv(s+slen,(SvCUR(src)-slen),&clen,0);
- Perl_warner(aTHX_ WARN_UTF8, "\"\\x{%x}\" does not map to %s", ch, enc->name);
+ Perl_warner(aTHX_ WARN_UTF8, "\"\\x{%"UVxf"}\" does not map to %s", ch, enc->name[0]);
/* FIXME: Skip over the character, copy in replacement and continue
* but that is messy so for now just fail.
*/
{
/* UTF-8 is supposed to be "Universal" so should not happen */
Perl_croak(aTHX_ "%s '%.*s' does not map to UTF-8",
- enc->name, (SvCUR(src)-slen),s+slen);
+ enc->name[0], (int)(SvCUR(src)-slen),s+slen);
}
break;
if (!check && ckWARN_d(WARN_UTF8))
{
Perl_warner(aTHX_ WARN_UTF8, "Partial %s character",
- (dir == enc->f_utf8) ? "UTF-8" : enc->name);
+ (dir == enc->f_utf8) ? "UTF-8" : enc->name[0]);
}
return &PL_sv_undef;
default:
Perl_croak(aTHX_ "Unexpected code %d converting %s %s",
- code, (dir == enc->f_utf8) ? "to" : "from",enc->name);
+ code, (dir == enc->f_utf8) ? "to" : "from",enc->name[0]);
return &PL_sv_undef;
}
}
--- /dev/null
+# Written by compile -n ascii -o Encode/ascii.ucm Encode/ascii.enc
+<code_set_name> "ascii"
+<mb_cur_min> 1
+<mb_cur_max> 1
+<subchar> \x3F
+#
+CHARMAP
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+END CHARMAP
--- /dev/null
+# Written by compile -n cp1047 -o Encode/cp1047.ucm Encode/cp1047.enc
+<code_set_name> "cp1047"
+<mb_cur_min> 1
+<mb_cur_max> 1
+<subchar> \x6F
+#
+CHARMAP
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x15 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x5A |0
+<U0022> \x7F |0
+<U0023> \x7B |0
+<U0024> \x5B |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \x7C |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \xAD |0
+<U005C> \xE0 |0
+<U005D> \xBD |0
+<U005E> \x5F |0
+<U005F> \x6D |0
+<U0060> \x79 |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \xC0 |0
+<U007C> \x4F |0
+<U007D> \xD0 |0
+<U007E> \xA1 |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x25 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x41 |0
+<U00A1> \xAA |0
+<U00A2> \x4A |0
+<U00A3> \xB1 |0
+<U00A4> \x9F |0
+<U00A5> \xB2 |0
+<U00A6> \x6A |0
+<U00A7> \xB5 |0
+<U00A8> \xBB |0
+<U00A9> \xB4 |0
+<U00AA> \x9A |0
+<U00AB> \x8A |0
+<U00AC> \xB0 |0
+<U00AD> \xCA |0
+<U00AE> \xAF |0
+<U00AF> \xBC |0
+<U00B0> \x90 |0
+<U00B1> \x8F |0
+<U00B2> \xEA |0
+<U00B3> \xFA |0
+<U00B4> \xBE |0
+<U00B5> \xA0 |0
+<U00B6> \xB6 |0
+<U00B7> \xB3 |0
+<U00B8> \x9D |0
+<U00B9> \xDA |0
+<U00BA> \x9B |0
+<U00BB> \x8B |0
+<U00BC> \xB7 |0
+<U00BD> \xB8 |0
+<U00BE> \xB9 |0
+<U00BF> \xAB |0
+<U00C0> \x64 |0
+<U00C1> \x65 |0
+<U00C2> \x62 |0
+<U00C3> \x66 |0
+<U00C4> \x63 |0
+<U00C5> \x67 |0
+<U00C6> \x9E |0
+<U00C7> \x68 |0
+<U00C8> \x74 |0
+<U00C9> \x71 |0
+<U00CA> \x72 |0
+<U00CB> \x73 |0
+<U00CC> \x78 |0
+<U00CD> \x75 |0
+<U00CE> \x76 |0
+<U00CF> \x77 |0
+<U00D0> \xAC |0
+<U00D1> \x69 |0
+<U00D2> \xED |0
+<U00D3> \xEE |0
+<U00D4> \xEB |0
+<U00D5> \xEF |0
+<U00D6> \xEC |0
+<U00D7> \xBF |0
+<U00D8> \x80 |0
+<U00D9> \xFD |0
+<U00DA> \xFE |0
+<U00DB> \xFB |0
+<U00DC> \xFC |0
+<U00DD> \xBA |0
+<U00DE> \xAE |0
+<U00DF> \x59 |0
+<U00E0> \x44 |0
+<U00E1> \x45 |0
+<U00E2> \x42 |0
+<U00E3> \x46 |0
+<U00E4> \x43 |0
+<U00E5> \x47 |0
+<U00E6> \x9C |0
+<U00E7> \x48 |0
+<U00E8> \x54 |0
+<U00E9> \x51 |0
+<U00EA> \x52 |0
+<U00EB> \x53 |0
+<U00EC> \x58 |0
+<U00ED> \x55 |0
+<U00EE> \x56 |0
+<U00EF> \x57 |0
+<U00F0> \x8C |0
+<U00F1> \x49 |0
+<U00F2> \xCD |0
+<U00F3> \xCE |0
+<U00F4> \xCB |0
+<U00F5> \xCF |0
+<U00F6> \xCC |0
+<U00F7> \xE1 |0
+<U00F8> \x70 |0
+<U00F9> \xDD |0
+<U00FA> \xDE |0
+<U00FB> \xDB |0
+<U00FC> \xDC |0
+<U00FD> \x8D |0
+<U00FE> \x8E |0
+<U00FF> \xDF |0
+END CHARMAP
--- /dev/null
+# Written by compile -n cp1250 -o Encode/cp1250.ucm Encode/cp1250.enc
+<code_set_name> "cp1250"
+<mb_cur_min> 1
+<mb_cur_max> 1
+<subchar> \x3F
+#
+CHARMAP
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0080> \x80 |0
+<U0081> \x81 |0
+<U0083> \x83 |0
+<U0088> \x88 |0
+<U0090> \x90 |0
+<U0098> \x98 |0
+<U00A0> \xA0 |0
+<U00A4> \xA4 |0
+<U00A6> \xA6 |0
+<U00A7> \xA7 |0
+<U00A8> \xA8 |0
+<U00A9> \xA9 |0
+<U00AB> \xAB |0
+<U00AD> \xAD |0
+<U00AE> \xAE |0
+<U00B0> \xB0 |0
+<U00B1> \xB1 |0
+<U00B4> \xB4 |0
+<U00B5> \xB5 |0
+<U00B6> \xB6 |0
+<U00B7> \xB7 |0
+<U00B8> \xB8 |0
+<U00BB> \xBB |0
+<U00C1> \xC1 |0
+<U00C2> \xC2 |0
+<U00C4> \xC4 |0
+<U00C7> \xC7 |0
+<U00C9> \xC9 |0
+<U00CB> \xCB |0
+<U00CD> \xCD |0
+<U00CE> \xCE |0
+<U00D3> \xD3 |0
+<U00D4> \xD4 |0
+<U00D6> \xD6 |0
+<U00D7> \xD7 |0
+<U00DA> \xDA |0
+<U00DC> \xDC |0
+<U00DD> \xDD |0
+<U00DF> \xDF |0
+<U00E1> \xE1 |0
+<U00E2> \xE2 |0
+<U00E4> \xE4 |0
+<U00E7> \xE7 |0
+<U00E9> \xE9 |0
+<U00EB> \xEB |0
+<U00ED> \xED |0
+<U00EE> \xEE |0
+<U00F3> \xF3 |0
+<U00F4> \xF4 |0
+<U00F6> \xF6 |0
+<U00F7> \xF7 |0
+<U00FA> \xFA |0
+<U00FC> \xFC |0
+<U00FD> \xFD |0
+<U0102> \xC3 |0
+<U0103> \xE3 |0
+<U0104> \xA5 |0
+<U0105> \xB9 |0
+<U0106> \xC6 |0
+<U0107> \xE6 |0
+<U010C> \xC8 |0
+<U010D> \xE8 |0
+<U010E> \xCF |0
+<U010F> \xEF |0
+<U0110> \xD0 |0
+<U0111> \xF0 |0
+<U0118> \xCA |0
+<U0119> \xEA |0
+<U011A> \xCC |0
+<U011B> \xEC |0
+<U0139> \xC5 |0
+<U013A> \xE5 |0
+<U013D> \xBC |0
+<U013E> \xBE |0
+<U0141> \xA3 |0
+<U0142> \xB3 |0
+<U0143> \xD1 |0
+<U0144> \xF1 |0
+<U0147> \xD2 |0
+<U0148> \xF2 |0
+<U0150> \xD5 |0
+<U0151> \xF5 |0
+<U0154> \xC0 |0
+<U0155> \xE0 |0
+<U0158> \xD8 |0
+<U0159> \xF8 |0
+<U015A> \x8C |0
+<U015B> \x9C |0
+<U015E> \xAA |0
+<U015F> \xBA |0
+<U0160> \x8A |0
+<U0161> \x9A |0
+<U0162> \xDE |0
+<U0163> \xFE |0
+<U0164> \x8D |0
+<U0165> \x9D |0
+<U016E> \xD9 |0
+<U016F> \xF9 |0
+<U0170> \xDB |0
+<U0171> \xFB |0
+<U0179> \x8F |0
+<U017A> \x9F |0
+<U017B> \xAF |0
+<U017C> \xBF |0
+<U017D> \x8E |0
+<U017E> \x9E |0
+<U02C7> \xA1 |0
+<U02D8> \xA2 |0
+<U02D9> \xFF |0
+<U02DB> \xB2 |0
+<U02DD> \xBD |0
+<U2013> \x96 |0
+<U2014> \x97 |0
+<U2018> \x91 |0
+<U2019> \x92 |0
+<U201A> \x82 |0
+<U201C> \x93 |0
+<U201D> \x94 |0
+<U201E> \x84 |0
+<U2020> \x86 |0
+<U2021> \x87 |0
+<U2022> \x95 |0
+<U2026> \x85 |0
+<U2030> \x89 |0
+<U2039> \x8B |0
+<U203A> \x9B |0
+<U2122> \x99 |0
+END CHARMAP
--- /dev/null
+# Written by compile -n cp37 -o Encode/cp37.ucm Encode/cp37.enc
+<code_set_name> "cp37"
+<mb_cur_min> 1
+<mb_cur_max> 1
+<subchar> \x6F
+#
+CHARMAP
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x5A |0
+<U0022> \x7F |0
+<U0023> \x7B |0
+<U0024> \x5B |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \x7C |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \xBA |0
+<U005C> \xE0 |0
+<U005D> \xBB |0
+<U005E> \xB0 |0
+<U005F> \x6D |0
+<U0060> \x79 |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \xC0 |0
+<U007C> \x4F |0
+<U007D> \xD0 |0
+<U007E> \xA1 |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x41 |0
+<U00A1> \xAA |0
+<U00A2> \x4A |0
+<U00A3> \xB1 |0
+<U00A4> \x9F |0
+<U00A5> \xB2 |0
+<U00A6> \x6A |0
+<U00A7> \xB5 |0
+<U00A8> \xBD |0
+<U00A9> \xB4 |0
+<U00AA> \x9A |0
+<U00AB> \x8A |0
+<U00AC> \x5F |0
+<U00AD> \xCA |0
+<U00AE> \xAF |0
+<U00AF> \xBC |0
+<U00B0> \x90 |0
+<U00B1> \x8F |0
+<U00B2> \xEA |0
+<U00B3> \xFA |0
+<U00B4> \xBE |0
+<U00B5> \xA0 |0
+<U00B6> \xB6 |0
+<U00B7> \xB3 |0
+<U00B8> \x9D |0
+<U00B9> \xDA |0
+<U00BA> \x9B |0
+<U00BB> \x8B |0
+<U00BC> \xB7 |0
+<U00BD> \xB8 |0
+<U00BE> \xB9 |0
+<U00BF> \xAB |0
+<U00C0> \x64 |0
+<U00C1> \x65 |0
+<U00C2> \x62 |0
+<U00C3> \x66 |0
+<U00C4> \x63 |0
+<U00C5> \x67 |0
+<U00C6> \x9E |0
+<U00C7> \x68 |0
+<U00C8> \x74 |0
+<U00C9> \x71 |0
+<U00CA> \x72 |0
+<U00CB> \x73 |0
+<U00CC> \x78 |0
+<U00CD> \x75 |0
+<U00CE> \x76 |0
+<U00CF> \x77 |0
+<U00D0> \xAC |0
+<U00D1> \x69 |0
+<U00D2> \xED |0
+<U00D3> \xEE |0
+<U00D4> \xEB |0
+<U00D5> \xEF |0
+<U00D6> \xEC |0
+<U00D7> \xBF |0
+<U00D8> \x80 |0
+<U00D9> \xFD |0
+<U00DA> \xFE |0
+<U00DB> \xFB |0
+<U00DC> \xFC |0
+<U00DD> \xAD |0
+<U00DE> \xAE |0
+<U00DF> \x59 |0
+<U00E0> \x44 |0
+<U00E1> \x45 |0
+<U00E2> \x42 |0
+<U00E3> \x46 |0
+<U00E4> \x43 |0
+<U00E5> \x47 |0
+<U00E6> \x9C |0
+<U00E7> \x48 |0
+<U00E8> \x54 |0
+<U00E9> \x51 |0
+<U00EA> \x52 |0
+<U00EB> \x53 |0
+<U00EC> \x58 |0
+<U00ED> \x55 |0
+<U00EE> \x56 |0
+<U00EF> \x57 |0
+<U00F0> \x8C |0
+<U00F1> \x49 |0
+<U00F2> \xCD |0
+<U00F3> \xCE |0
+<U00F4> \xCB |0
+<U00F5> \xCF |0
+<U00F6> \xCC |0
+<U00F7> \xE1 |0
+<U00F8> \x70 |0
+<U00F9> \xDD |0
+<U00FA> \xDE |0
+<U00FB> \xDB |0
+<U00FC> \xDC |0
+<U00FD> \x8D |0
+<U00FE> \x8E |0
+<U00FF> \xDF |0
+END CHARMAP
--- /dev/null
+# Written by compile -n dingbats -o Encode/dingbats.ucm Encode/dingbats.enc
+<code_set_name> "dingbats"
+<mb_cur_min> 1
+<mb_cur_max> 1
+<subchar> \x3F
+#
+CHARMAP
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U007F> \x7F |0
+<U0080> \x80 |0
+<U0081> \x81 |0
+<U0082> \x82 |0
+<U0083> \x83 |0
+<U0084> \x84 |0
+<U0085> \x85 |0
+<U0086> \x86 |0
+<U0087> \x87 |0
+<U0088> \x88 |0
+<U0089> \x89 |0
+<U008A> \x8A |0
+<U008B> \x8B |0
+<U008C> \x8C |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U0091> \x91 |0
+<U0092> \x92 |0
+<U0093> \x93 |0
+<U0094> \x94 |0
+<U0095> \x95 |0
+<U0096> \x96 |0
+<U0097> \x97 |0
+<U0098> \x98 |0
+<U0099> \x99 |0
+<U009A> \x9A |0
+<U009B> \x9B |0
+<U009C> \x9C |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U009F> \x9F |0
+<U2192> \xD5 |0
+<U2194> \xD6 |0
+<U2195> \xD7 |0
+<U2460> \xAC |0
+<U2461> \xAD |0
+<U2462> \xAE |0
+<U2463> \xAF |0
+<U2464> \xB0 |0
+<U2465> \xB1 |0
+<U2466> \xB2 |0
+<U2467> \xB3 |0
+<U2468> \xB4 |0
+<U2469> \xB5 |0
+<U25A0> \x6E |0
+<U25B2> \x73 |0
+<U25BC> \x74 |0
+<U25C6> \x75 |0
+<U25CF> \x6C |0
+<U25D7> \x77 |0
+<U2605> \x48 |0
+<U260E> \x25 |0
+<U261B> \x2A |0
+<U261E> \x2B |0
+<U2660> \xAB |0
+<U2663> \xA8 |0
+<U2665> \xAA |0
+<U2666> \xA9 |0
+<U2701> \x21 |0
+<U2702> \x22 |0
+<U2703> \x23 |0
+<U2704> \x24 |0
+<U2706> \x26 |0
+<U2707> \x27 |0
+<U2708> \x28 |0
+<U2709> \x29 |0
+<U270C> \x2C |0
+<U270D> \x2D |0
+<U270E> \x2E |0
+<U270F> \x2F |0
+<U2710> \x30 |0
+<U2711> \x31 |0
+<U2712> \x32 |0
+<U2713> \x33 |0
+<U2714> \x34 |0
+<U2715> \x35 |0
+<U2716> \x36 |0
+<U2717> \x37 |0
+<U2718> \x38 |0
+<U2719> \x39 |0
+<U271A> \x3A |0
+<U271B> \x3B |0
+<U271C> \x3C |0
+<U271D> \x3D |0
+<U271E> \x3E |0
+<U271F> \x3F |0
+<U2720> \x40 |0
+<U2721> \x41 |0
+<U2722> \x42 |0
+<U2723> \x43 |0
+<U2724> \x44 |0
+<U2725> \x45 |0
+<U2726> \x46 |0
+<U2727> \x47 |0
+<U2729> \x49 |0
+<U272A> \x4A |0
+<U272B> \x4B |0
+<U272C> \x4C |0
+<U272D> \x4D |0
+<U272E> \x4E |0
+<U272F> \x4F |0
+<U2730> \x50 |0
+<U2731> \x51 |0
+<U2732> \x52 |0
+<U2733> \x53 |0
+<U2734> \x54 |0
+<U2735> \x55 |0
+<U2736> \x56 |0
+<U2737> \x57 |0
+<U2738> \x58 |0
+<U2739> \x59 |0
+<U273A> \x5A |0
+<U273B> \x5B |0
+<U273C> \x5C |0
+<U273D> \x5D |0
+<U273E> \x5E |0
+<U273F> \x5F |0
+<U2740> \x60 |0
+<U2741> \x61 |0
+<U2742> \x62 |0
+<U2743> \x63 |0
+<U2744> \x64 |0
+<U2745> \x65 |0
+<U2746> \x66 |0
+<U2747> \x67 |0
+<U2748> \x68 |0
+<U2749> \x69 |0
+<U274A> \x6A |0
+<U274B> \x6B |0
+<U274D> \x6D |0
+<U274F> \x6F |0
+<U2750> \x70 |0
+<U2751> \x71 |0
+<U2752> \x72 |0
+<U2756> \x76 |0
+<U2758> \x78 |0
+<U2759> \x79 |0
+<U275A> \x7A |0
+<U275B> \x7B |0
+<U275C> \x7C |0
+<U275D> \x7D |0
+<U275E> \x7E |0
+<U2761> \xA1 |0
+<U2762> \xA2 |0
+<U2763> \xA3 |0
+<U2764> \xA4 |0
+<U2765> \xA5 |0
+<U2766> \xA6 |0
+<U2767> \xA7 |0
+<U2776> \xB6 |0
+<U2777> \xB7 |0
+<U2778> \xB8 |0
+<U2779> \xB9 |0
+<U277A> \xBA |0
+<U277B> \xBB |0
+<U277C> \xBC |0
+<U277D> \xBD |0
+<U277E> \xBE |0
+<U277F> \xBF |0
+<U2780> \xC0 |0
+<U2781> \xC1 |0
+<U2782> \xC2 |0
+<U2783> \xC3 |0
+<U2784> \xC4 |0
+<U2785> \xC5 |0
+<U2786> \xC6 |0
+<U2787> \xC7 |0
+<U2788> \xC8 |0
+<U2789> \xC9 |0
+<U278A> \xCA |0
+<U278B> \xCB |0
+<U278C> \xCC |0
+<U278D> \xCD |0
+<U278E> \xCE |0
+<U278F> \xCF |0
+<U2790> \xD0 |0
+<U2791> \xD1 |0
+<U2792> \xD2 |0
+<U2793> \xD3 |0
+<U2794> \xD4 |0
+<U2798> \xD8 |0
+<U2799> \xD9 |0
+<U279A> \xDA |0
+<U279B> \xDB |0
+<U279C> \xDC |0
+<U279D> \xDD |0
+<U279E> \xDE |0
+<U279F> \xDF |0
+<U27A0> \xE0 |0
+<U27A1> \xE1 |0
+<U27A2> \xE2 |0
+<U27A3> \xE3 |0
+<U27A4> \xE4 |0
+<U27A5> \xE5 |0
+<U27A6> \xE6 |0
+<U27A7> \xE7 |0
+<U27A8> \xE8 |0
+<U27A9> \xE9 |0
+<U27AA> \xEA |0
+<U27AB> \xEB |0
+<U27AC> \xEC |0
+<U27AD> \xED |0
+<U27AE> \xEE |0
+<U27AF> \xEF |0
+<U27B1> \xF1 |0
+<U27B2> \xF2 |0
+<U27B3> \xF3 |0
+<U27B4> \xF4 |0
+<U27B5> \xF5 |0
+<U27B6> \xF6 |0
+<U27B7> \xF7 |0
+<U27B8> \xF8 |0
+<U27B9> \xF9 |0
+<U27BA> \xFA |0
+<U27BB> \xFB |0
+<U27BC> \xFC |0
+<U27BD> \xFD |0
+<U27BE> \xFE |0
+END CHARMAP
--- /dev/null
+# Written by compile -n iso8859-1 -o Encode/iso8859-1.ucm Encode/iso8859-1.enc
+<code_set_name> "iso8859-1"
+<mb_cur_min> 1
+<mb_cur_max> 1
+<subchar> \x3F
+#
+CHARMAP
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0080> \x80 |0
+<U0081> \x81 |0
+<U0082> \x82 |0
+<U0083> \x83 |0
+<U0084> \x84 |0
+<U0085> \x85 |0
+<U0086> \x86 |0
+<U0087> \x87 |0
+<U0088> \x88 |0
+<U0089> \x89 |0
+<U008A> \x8A |0
+<U008B> \x8B |0
+<U008C> \x8C |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U0091> \x91 |0
+<U0092> \x92 |0
+<U0093> \x93 |0
+<U0094> \x94 |0
+<U0095> \x95 |0
+<U0096> \x96 |0
+<U0097> \x97 |0
+<U0098> \x98 |0
+<U0099> \x99 |0
+<U009A> \x9A |0
+<U009B> \x9B |0
+<U009C> \x9C |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U009F> \x9F |0
+<U00A0> \xA0 |0
+<U00A1> \xA1 |0
+<U00A2> \xA2 |0
+<U00A3> \xA3 |0
+<U00A4> \xA4 |0
+<U00A5> \xA5 |0
+<U00A6> \xA6 |0
+<U00A7> \xA7 |0
+<U00A8> \xA8 |0
+<U00A9> \xA9 |0
+<U00AA> \xAA |0
+<U00AB> \xAB |0
+<U00AC> \xAC |0
+<U00AD> \xAD |0
+<U00AE> \xAE |0
+<U00AF> \xAF |0
+<U00B0> \xB0 |0
+<U00B1> \xB1 |0
+<U00B2> \xB2 |0
+<U00B3> \xB3 |0
+<U00B4> \xB4 |0
+<U00B5> \xB5 |0
+<U00B6> \xB6 |0
+<U00B7> \xB7 |0
+<U00B8> \xB8 |0
+<U00B9> \xB9 |0
+<U00BA> \xBA |0
+<U00BB> \xBB |0
+<U00BC> \xBC |0
+<U00BD> \xBD |0
+<U00BE> \xBE |0
+<U00BF> \xBF |0
+<U00C0> \xC0 |0
+<U00C1> \xC1 |0
+<U00C2> \xC2 |0
+<U00C3> \xC3 |0
+<U00C4> \xC4 |0
+<U00C5> \xC5 |0
+<U00C6> \xC6 |0
+<U00C7> \xC7 |0
+<U00C8> \xC8 |0
+<U00C9> \xC9 |0
+<U00CA> \xCA |0
+<U00CB> \xCB |0
+<U00CC> \xCC |0
+<U00CD> \xCD |0
+<U00CE> \xCE |0
+<U00CF> \xCF |0
+<U00D0> \xD0 |0
+<U00D1> \xD1 |0
+<U00D2> \xD2 |0
+<U00D3> \xD3 |0
+<U00D4> \xD4 |0
+<U00D5> \xD5 |0
+<U00D6> \xD6 |0
+<U00D7> \xD7 |0
+<U00D8> \xD8 |0
+<U00D9> \xD9 |0
+<U00DA> \xDA |0
+<U00DB> \xDB |0
+<U00DC> \xDC |0
+<U00DD> \xDD |0
+<U00DE> \xDE |0
+<U00DF> \xDF |0
+<U00E0> \xE0 |0
+<U00E1> \xE1 |0
+<U00E2> \xE2 |0
+<U00E3> \xE3 |0
+<U00E4> \xE4 |0
+<U00E5> \xE5 |0
+<U00E6> \xE6 |0
+<U00E7> \xE7 |0
+<U00E8> \xE8 |0
+<U00E9> \xE9 |0
+<U00EA> \xEA |0
+<U00EB> \xEB |0
+<U00EC> \xEC |0
+<U00ED> \xED |0
+<U00EE> \xEE |0
+<U00EF> \xEF |0
+<U00F0> \xF0 |0
+<U00F1> \xF1 |0
+<U00F2> \xF2 |0
+<U00F3> \xF3 |0
+<U00F4> \xF4 |0
+<U00F5> \xF5 |0
+<U00F6> \xF6 |0
+<U00F7> \xF7 |0
+<U00F8> \xF8 |0
+<U00F9> \xF9 |0
+<U00FA> \xFA |0
+<U00FB> \xFB |0
+<U00FC> \xFC |0
+<U00FD> \xFD |0
+<U00FE> \xFE |0
+<U00FF> \xFF |0
+END CHARMAP
--- /dev/null
+# Written by compile -n iso8859-10 -o Encode/iso8859-10.ucm Encode/iso8859-10.enc
+<code_set_name> "iso8859-10"
+<mb_cur_min> 1
+<mb_cur_max> 1
+<subchar> \x3F
+#
+CHARMAP
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0080> \x80 |0
+<U0081> \x81 |0
+<U0082> \x82 |0
+<U0083> \x83 |0
+<U0084> \x84 |0
+<U0085> \x85 |0
+<U0086> \x86 |0
+<U0087> \x87 |0
+<U0088> \x88 |0
+<U0089> \x89 |0
+<U008A> \x8A |0
+<U008B> \x8B |0
+<U008C> \x8C |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U0091> \x91 |0
+<U0092> \x92 |0
+<U0093> \x93 |0
+<U0094> \x94 |0
+<U0095> \x95 |0
+<U0096> \x96 |0
+<U0097> \x97 |0
+<U0098> \x98 |0
+<U0099> \x99 |0
+<U009A> \x9A |0
+<U009B> \x9B |0
+<U009C> \x9C |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U009F> \x9F |0
+<U00A0> \xA0 |0
+<U00A7> \xA7 |0
+<U00AD> \xAD |0
+<U00B0> \xB0 |0
+<U00B7> \xB7 |0
+<U00C1> \xC1 |0
+<U00C2> \xC2 |0
+<U00C3> \xC3 |0
+<U00C4> \xC4 |0
+<U00C5> \xC5 |0
+<U00C6> \xC6 |0
+<U00C9> \xC9 |0
+<U00CB> \xCB |0
+<U00CD> \xCD |0
+<U00CE> \xCE |0
+<U00CF> \xCF |0
+<U00D0> \xD0 |0
+<U00D3> \xD3 |0
+<U00D4> \xD4 |0
+<U00D5> \xD5 |0
+<U00D6> \xD6 |0
+<U00D8> \xD8 |0
+<U00DA> \xDA |0
+<U00DB> \xDB |0
+<U00DC> \xDC |0
+<U00DD> \xDD |0
+<U00DE> \xDE |0
+<U00DF> \xDF |0
+<U00E1> \xE1 |0
+<U00E2> \xE2 |0
+<U00E3> \xE3 |0
+<U00E4> \xE4 |0
+<U00E5> \xE5 |0
+<U00E6> \xE6 |0
+<U00E9> \xE9 |0
+<U00EB> \xEB |0
+<U00ED> \xED |0
+<U00EE> \xEE |0
+<U00EF> \xEF |0
+<U00F0> \xF0 |0
+<U00F3> \xF3 |0
+<U00F4> \xF4 |0
+<U00F5> \xF5 |0
+<U00F6> \xF6 |0
+<U00F8> \xF8 |0
+<U00FA> \xFA |0
+<U00FB> \xFB |0
+<U00FC> \xFC |0
+<U00FD> \xFD |0
+<U00FE> \xFE |0
+<U0100> \xC0 |0
+<U0101> \xE0 |0
+<U0104> \xA1 |0
+<U0105> \xB1 |0
+<U010C> \xC8 |0
+<U010D> \xE8 |0
+<U0110> \xA9 |0
+<U0111> \xB9 |0
+<U0112> \xA2 |0
+<U0113> \xB2 |0
+<U0116> \xCC |0
+<U0117> \xEC |0
+<U0118> \xCA |0
+<U0119> \xEA |0
+<U0122> \xA3 |0
+<U0123> \xB3 |0
+<U0128> \xA5 |0
+<U0129> \xB5 |0
+<U012A> \xA4 |0
+<U012B> \xB4 |0
+<U012E> \xC7 |0
+<U012F> \xE7 |0
+<U0136> \xA6 |0
+<U0137> \xB6 |0
+<U0138> \xFF |0
+<U013B> \xA8 |0
+<U013C> \xB8 |0
+<U0145> \xD1 |0
+<U0146> \xF1 |0
+<U014A> \xAF |0
+<U014B> \xBF |0
+<U014C> \xD2 |0
+<U014D> \xF2 |0
+<U0160> \xAA |0
+<U0161> \xBA |0
+<U0166> \xAB |0
+<U0167> \xBB |0
+<U0168> \xD7 |0
+<U0169> \xF7 |0
+<U016A> \xAE |0
+<U016B> \xBE |0
+<U0172> \xD9 |0
+<U0173> \xF9 |0
+<U017D> \xAC |0
+<U017E> \xBC |0
+<U2015> \xBD |0
+END CHARMAP
--- /dev/null
+# Written by compile -n iso8859-13 -o Encode/iso8859-13.ucm Encode/iso8859-13.enc
+<code_set_name> "iso8859-13"
+<mb_cur_min> 1
+<mb_cur_max> 1
+<subchar> \x3F
+#
+CHARMAP
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0080> \x80 |0
+<U0081> \x81 |0
+<U0082> \x82 |0
+<U0083> \x83 |0
+<U0084> \x84 |0
+<U0085> \x85 |0
+<U0086> \x86 |0
+<U0087> \x87 |0
+<U0088> \x88 |0
+<U0089> \x89 |0
+<U008A> \x8A |0
+<U008B> \x8B |0
+<U008C> \x8C |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U0091> \x91 |0
+<U0092> \x92 |0
+<U0093> \x93 |0
+<U0094> \x94 |0
+<U0095> \x95 |0
+<U0096> \x96 |0
+<U0097> \x97 |0
+<U0098> \x98 |0
+<U0099> \x99 |0
+<U009A> \x9A |0
+<U009B> \x9B |0
+<U009C> \x9C |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U009F> \x9F |0
+<U00A0> \xA0 |0
+<U00A2> \xA2 |0
+<U00A3> \xA3 |0
+<U00A4> \xA4 |0
+<U00A6> \xA6 |0
+<U00A7> \xA7 |0
+<U00A9> \xA9 |0
+<U00AB> \xAB |0
+<U00AC> \xAC |0
+<U00AD> \xAD |0
+<U00AE> \xAE |0
+<U00B0> \xB0 |0
+<U00B1> \xB1 |0
+<U00B2> \xB2 |0
+<U00B3> \xB3 |0
+<U00B5> \xB5 |0
+<U00B6> \xB6 |0
+<U00B7> \xB7 |0
+<U00B9> \xB9 |0
+<U00BB> \xBB |0
+<U00BC> \xBC |0
+<U00BD> \xBD |0
+<U00BE> \xBE |0
+<U00C4> \xC4 |0
+<U00C5> \xC5 |0
+<U00C6> \xAF |0
+<U00C9> \xC9 |0
+<U00D3> \xD3 |0
+<U00D5> \xD5 |0
+<U00D6> \xD6 |0
+<U00D7> \xD7 |0
+<U00D8> \xA8 |0
+<U00DC> \xDC |0
+<U00DF> \xDF |0
+<U00E4> \xE4 |0
+<U00E5> \xE5 |0
+<U00E6> \xBF |0
+<U00E9> \xE9 |0
+<U00F3> \xF3 |0
+<U00F5> \xF5 |0
+<U00F6> \xF6 |0
+<U00F7> \xF7 |0
+<U00F8> \xB8 |0
+<U00FC> \xFC |0
+<U0100> \xC2 |0
+<U0101> \xE2 |0
+<U0104> \xC0 |0
+<U0105> \xE0 |0
+<U0106> \xC3 |0
+<U0107> \xE3 |0
+<U010C> \xC8 |0
+<U010D> \xE8 |0
+<U0112> \xC7 |0
+<U0113> \xE7 |0
+<U0116> \xCB |0
+<U0117> \xEB |0
+<U0118> \xC6 |0
+<U0119> \xE6 |0
+<U0122> \xCC |0
+<U0123> \xEC |0
+<U012A> \xCE |0
+<U012B> \xEE |0
+<U012E> \xC1 |0
+<U012F> \xE1 |0
+<U0136> \xCD |0
+<U0137> \xED |0
+<U013B> \xCF |0
+<U013C> \xEF |0
+<U0141> \xD9 |0
+<U0142> \xF9 |0
+<U0143> \xD1 |0
+<U0144> \xF1 |0
+<U0145> \xD2 |0
+<U0146> \xF2 |0
+<U014C> \xD4 |0
+<U014D> \xF4 |0
+<U0156> \xAA |0
+<U0157> \xBA |0
+<U015A> \xDA |0
+<U015B> \xFA |0
+<U0160> \xD0 |0
+<U0161> \xF0 |0
+<U016A> \xDB |0
+<U016B> \xFB |0
+<U0172> \xD8 |0
+<U0173> \xF8 |0
+<U0179> \xCA |0
+<U017A> \xEA |0
+<U017B> \xDD |0
+<U017C> \xFD |0
+<U017D> \xDE |0
+<U017E> \xFE |0
+<U2019> \xFF |0
+<U201C> \xB4 |0
+<U201D> \xA1 |0
+<U201E> \xA5 |0
+END CHARMAP
--- /dev/null
+# Written by compile -n iso8859-14 -o Encode/iso8859-14.ucm Encode/iso8859-14.enc
+<code_set_name> "iso8859-14"
+<mb_cur_min> 1
+<mb_cur_max> 1
+<subchar> \x3F
+#
+CHARMAP
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0080> \x80 |0
+<U0081> \x81 |0
+<U0082> \x82 |0
+<U0083> \x83 |0
+<U0084> \x84 |0
+<U0085> \x85 |0
+<U0086> \x86 |0
+<U0087> \x87 |0
+<U0088> \x88 |0
+<U0089> \x89 |0
+<U008A> \x8A |0
+<U008B> \x8B |0
+<U008C> \x8C |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U0091> \x91 |0
+<U0092> \x92 |0
+<U0093> \x93 |0
+<U0094> \x94 |0
+<U0095> \x95 |0
+<U0096> \x96 |0
+<U0097> \x97 |0
+<U0098> \x98 |0
+<U0099> \x99 |0
+<U009A> \x9A |0
+<U009B> \x9B |0
+<U009C> \x9C |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U009F> \x9F |0
+<U00A0> \xA0 |0
+<U00A3> \xA3 |0
+<U00A7> \xA7 |0
+<U00A9> \xA9 |0
+<U00AD> \xAD |0
+<U00AE> \xAE |0
+<U00B6> \xB6 |0
+<U00C0> \xC0 |0
+<U00C1> \xC1 |0
+<U00C2> \xC2 |0
+<U00C3> \xC3 |0
+<U00C4> \xC4 |0
+<U00C5> \xC5 |0
+<U00C6> \xC6 |0
+<U00C7> \xC7 |0
+<U00C8> \xC8 |0
+<U00C9> \xC9 |0
+<U00CA> \xCA |0
+<U00CB> \xCB |0
+<U00CC> \xCC |0
+<U00CD> \xCD |0
+<U00CE> \xCE |0
+<U00CF> \xCF |0
+<U00D1> \xD1 |0
+<U00D2> \xD2 |0
+<U00D3> \xD3 |0
+<U00D4> \xD4 |0
+<U00D5> \xD5 |0
+<U00D6> \xD6 |0
+<U00D8> \xD8 |0
+<U00D9> \xD9 |0
+<U00DA> \xDA |0
+<U00DB> \xDB |0
+<U00DC> \xDC |0
+<U00DD> \xDD |0
+<U00DF> \xDF |0
+<U00E0> \xE0 |0
+<U00E1> \xE1 |0
+<U00E2> \xE2 |0
+<U00E3> \xE3 |0
+<U00E4> \xE4 |0
+<U00E5> \xE5 |0
+<U00E6> \xE6 |0
+<U00E7> \xE7 |0
+<U00E8> \xE8 |0
+<U00E9> \xE9 |0
+<U00EA> \xEA |0
+<U00EB> \xEB |0
+<U00EC> \xEC |0
+<U00ED> \xED |0
+<U00EE> \xEE |0
+<U00EF> \xEF |0
+<U00F1> \xF1 |0
+<U00F2> \xF2 |0
+<U00F3> \xF3 |0
+<U00F4> \xF4 |0
+<U00F5> \xF5 |0
+<U00F6> \xF6 |0
+<U00F8> \xF8 |0
+<U00F9> \xF9 |0
+<U00FA> \xFA |0
+<U00FB> \xFB |0
+<U00FC> \xFC |0
+<U00FD> \xFD |0
+<U00FF> \xFF |0
+<U010A> \xA4 |0
+<U010B> \xA5 |0
+<U0120> \xB2 |0
+<U0121> \xB3 |0
+<U0174> \xD0 |0
+<U0175> \xF0 |0
+<U0176> \xDE |0
+<U0177> \xFE |0
+<U0178> \xAF |0
+<U1E02> \xA1 |0
+<U1E03> \xA2 |0
+<U1E0A> \xA6 |0
+<U1E0B> \xAB |0
+<U1E1E> \xB0 |0
+<U1E1F> \xB1 |0
+<U1E40> \xB4 |0
+<U1E41> \xB5 |0
+<U1E56> \xB7 |0
+<U1E57> \xB9 |0
+<U1E60> \xBB |0
+<U1E61> \xBF |0
+<U1E6A> \xD7 |0
+<U1E6B> \xF7 |0
+<U1E80> \xA8 |0
+<U1E81> \xB8 |0
+<U1E82> \xAA |0
+<U1E83> \xBA |0
+<U1E84> \xBD |0
+<U1E85> \xBE |0
+<U1EF2> \xAC |0
+<U1EF3> \xBC |0
+END CHARMAP
--- /dev/null
+# Written by compile -n iso8859-15 -o Encode/iso8859-15.ucm Encode/iso8859-15.enc
+<code_set_name> "iso8859-15"
+<mb_cur_min> 1
+<mb_cur_max> 1
+<subchar> \x3F
+#
+CHARMAP
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0080> \x80 |0
+<U0081> \x81 |0
+<U0082> \x82 |0
+<U0083> \x83 |0
+<U0084> \x84 |0
+<U0085> \x85 |0
+<U0086> \x86 |0
+<U0087> \x87 |0
+<U0088> \x88 |0
+<U0089> \x89 |0
+<U008A> \x8A |0
+<U008B> \x8B |0
+<U008C> \x8C |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U0091> \x91 |0
+<U0092> \x92 |0
+<U0093> \x93 |0
+<U0094> \x94 |0
+<U0095> \x95 |0
+<U0096> \x96 |0
+<U0097> \x97 |0
+<U0098> \x98 |0
+<U0099> \x99 |0
+<U009A> \x9A |0
+<U009B> \x9B |0
+<U009C> \x9C |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U009F> \x9F |0
+<U00A0> \xA0 |0
+<U00A1> \xA1 |0
+<U00A2> \xA2 |0
+<U00A3> \xA3 |0
+<U00A5> \xA5 |0
+<U00A7> \xA7 |0
+<U00A9> \xA9 |0
+<U00AA> \xAA |0
+<U00AB> \xAB |0
+<U00AC> \xAC |0
+<U00AD> \xAD |0
+<U00AE> \xAE |0
+<U00AF> \xAF |0
+<U00B0> \xB0 |0
+<U00B1> \xB1 |0
+<U00B2> \xB2 |0
+<U00B3> \xB3 |0
+<U00B5> \xB5 |0
+<U00B6> \xB6 |0
+<U00B7> \xB7 |0
+<U00B9> \xB9 |0
+<U00BA> \xBA |0
+<U00BB> \xBB |0
+<U00BF> \xBF |0
+<U00C0> \xC0 |0
+<U00C1> \xC1 |0
+<U00C2> \xC2 |0
+<U00C3> \xC3 |0
+<U00C4> \xC4 |0
+<U00C5> \xC5 |0
+<U00C6> \xC6 |0
+<U00C7> \xC7 |0
+<U00C8> \xC8 |0
+<U00C9> \xC9 |0
+<U00CA> \xCA |0
+<U00CB> \xCB |0
+<U00CC> \xCC |0
+<U00CD> \xCD |0
+<U00CE> \xCE |0
+<U00CF> \xCF |0
+<U00D0> \xD0 |0
+<U00D1> \xD1 |0
+<U00D2> \xD2 |0
+<U00D3> \xD3 |0
+<U00D4> \xD4 |0
+<U00D5> \xD5 |0
+<U00D6> \xD6 |0
+<U00D7> \xD7 |0
+<U00D8> \xD8 |0
+<U00D9> \xD9 |0
+<U00DA> \xDA |0
+<U00DB> \xDB |0
+<U00DC> \xDC |0
+<U00DD> \xDD |0
+<U00DE> \xDE |0
+<U00DF> \xDF |0
+<U00E0> \xE0 |0
+<U00E1> \xE1 |0
+<U00E2> \xE2 |0
+<U00E3> \xE3 |0
+<U00E4> \xE4 |0
+<U00E5> \xE5 |0
+<U00E6> \xE6 |0
+<U00E7> \xE7 |0
+<U00E8> \xE8 |0
+<U00E9> \xE9 |0
+<U00EA> \xEA |0
+<U00EB> \xEB |0
+<U00EC> \xEC |0
+<U00ED> \xED |0
+<U00EE> \xEE |0
+<U00EF> \xEF |0
+<U00F0> \xF0 |0
+<U00F1> \xF1 |0
+<U00F2> \xF2 |0
+<U00F3> \xF3 |0
+<U00F4> \xF4 |0
+<U00F5> \xF5 |0
+<U00F6> \xF6 |0
+<U00F7> \xF7 |0
+<U00F8> \xF8 |0
+<U00F9> \xF9 |0
+<U00FA> \xFA |0
+<U00FB> \xFB |0
+<U00FC> \xFC |0
+<U00FD> \xFD |0
+<U00FE> \xFE |0
+<U00FF> \xFF |0
+<U0152> \xBC |0
+<U0153> \xBD |0
+<U0160> \xA6 |0
+<U0161> \xA8 |0
+<U0178> \xBE |0
+<U017D> \xB4 |0
+<U017E> \xB8 |0
+<U20AC> \xA4 |0
+END CHARMAP
--- /dev/null
+# Written by compile -n iso8859-16 -o Encode/iso8859-16.ucm Encode/iso8859-16.enc
+<code_set_name> "iso8859-16"
+<mb_cur_min> 1
+<mb_cur_max> 1
+<subchar> \x3F
+#
+CHARMAP
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0080> \x80 |0
+<U0081> \x81 |0
+<U0082> \x82 |0
+<U0083> \x83 |0
+<U0084> \x84 |0
+<U0085> \x85 |0
+<U0086> \x86 |0
+<U0087> \x87 |0
+<U0088> \x88 |0
+<U0089> \x89 |0
+<U008A> \x8A |0
+<U008B> \x8B |0
+<U008C> \x8C |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U0091> \x91 |0
+<U0092> \x92 |0
+<U0093> \x93 |0
+<U0094> \x94 |0
+<U0095> \x95 |0
+<U0096> \x96 |0
+<U0097> \x97 |0
+<U0098> \x98 |0
+<U0099> \x99 |0
+<U009A> \x9A |0
+<U009B> \x9B |0
+<U009C> \x9C |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U009F> \x9F |0
+<U00A0> \xA0 |0
+<U00A7> \xA7 |0
+<U00A9> \xA9 |0
+<U00AB> \xA5 |0
+<U00AD> \xAD |0
+<U00B0> \xB0 |0
+<U00B1> \xB1 |0
+<U00B6> \xB6 |0
+<U00B7> \xB7 |0
+<U00BB> \xBB |0
+<U00C0> \xC0 |0
+<U00C1> \xC1 |0
+<U00C2> \xC2 |0
+<U00C4> \xC4 |0
+<U00C6> \xC6 |0
+<U00C7> \xC7 |0
+<U00C8> \xC8 |0
+<U00C9> \xC9 |0
+<U00CA> \xCA |0
+<U00CB> \xCB |0
+<U00CC> \xCC |0
+<U00CD> \xCD |0
+<U00CE> \xCE |0
+<U00CF> \xCF |0
+<U00D2> \xD2 |0
+<U00D3> \xD3 |0
+<U00D4> \xD4 |0
+<U00D6> \xD6 |0
+<U00D9> \xD9 |0
+<U00DA> \xDA |0
+<U00DB> \xDB |0
+<U00DC> \xDC |0
+<U00DF> \xDF |0
+<U00E0> \xE0 |0
+<U00E1> \xE1 |0
+<U00E2> \xE2 |0
+<U00E4> \xE4 |0
+<U00E6> \xE6 |0
+<U00E7> \xE7 |0
+<U00E8> \xE8 |0
+<U00E9> \xE9 |0
+<U00EA> \xEA |0
+<U00EB> \xEB |0
+<U00EC> \xEC |0
+<U00ED> \xED |0
+<U00EE> \xEE |0
+<U00EF> \xEF |0
+<U00F2> \xF2 |0
+<U00F3> \xF3 |0
+<U00F4> \xF4 |0
+<U00F6> \xF6 |0
+<U00F9> \xF9 |0
+<U00FA> \xFA |0
+<U00FB> \xFB |0
+<U00FC> \xFC |0
+<U00FF> \xFF |0
+<U0102> \xC3 |0
+<U0103> \xE3 |0
+<U0104> \xA1 |0
+<U0105> \xA2 |0
+<U0106> \xC5 |0
+<U0107> \xE5 |0
+<U010C> \xB2 |0
+<U010D> \xB9 |0
+<U0110> \xD0 |0
+<U0111> \xF0 |0
+<U0118> \xDD |0
+<U0119> \xFD |0
+<U0141> \xA3 |0
+<U0142> \xB3 |0
+<U0143> \xD1 |0
+<U0144> \xF1 |0
+<U0150> \xD5 |0
+<U0151> \xF5 |0
+<U0152> \xBC |0
+<U0153> \xBD |0
+<U015A> \xD7 |0
+<U015B> \xF7 |0
+<U0160> \xA6 |0
+<U0161> \xA8 |0
+<U0170> \xD8 |0
+<U0171> \xF8 |0
+<U0178> \xBE |0
+<U0179> \xAC |0
+<U017A> \xAE |0
+<U017B> \xAF |0
+<U017C> \xBF |0
+<U017D> \xB4 |0
+<U017E> \xB8 |0
+<U0218> \xAA |0
+<U0219> \xBA |0
+<U021A> \xDE |0
+<U021B> \xFE |0
+<U201D> \xB5 |0
+<U201E> \xAB |0
+<U20AC> \xA4 |0
+END CHARMAP
--- /dev/null
+# Written by compile -n iso8859-2 -o Encode/iso8859-2.ucm Encode/iso8859-2.enc
+<code_set_name> "iso8859-2"
+<mb_cur_min> 1
+<mb_cur_max> 1
+<subchar> \x3F
+#
+CHARMAP
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0080> \x80 |0
+<U0081> \x81 |0
+<U0082> \x82 |0
+<U0083> \x83 |0
+<U0084> \x84 |0
+<U0085> \x85 |0
+<U0086> \x86 |0
+<U0087> \x87 |0
+<U0088> \x88 |0
+<U0089> \x89 |0
+<U008A> \x8A |0
+<U008B> \x8B |0
+<U008C> \x8C |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U0091> \x91 |0
+<U0092> \x92 |0
+<U0093> \x93 |0
+<U0094> \x94 |0
+<U0095> \x95 |0
+<U0096> \x96 |0
+<U0097> \x97 |0
+<U0098> \x98 |0
+<U0099> \x99 |0
+<U009A> \x9A |0
+<U009B> \x9B |0
+<U009C> \x9C |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U009F> \x9F |0
+<U00A0> \xA0 |0
+<U00A4> \xA4 |0
+<U00A7> \xA7 |0
+<U00A8> \xA8 |0
+<U00AD> \xAD |0
+<U00B0> \xB0 |0
+<U00B4> \xB4 |0
+<U00B8> \xB8 |0
+<U00C1> \xC1 |0
+<U00C2> \xC2 |0
+<U00C4> \xC4 |0
+<U00C7> \xC7 |0
+<U00C9> \xC9 |0
+<U00CB> \xCB |0
+<U00CD> \xCD |0
+<U00CE> \xCE |0
+<U00D3> \xD3 |0
+<U00D4> \xD4 |0
+<U00D6> \xD6 |0
+<U00D7> \xD7 |0
+<U00DA> \xDA |0
+<U00DC> \xDC |0
+<U00DD> \xDD |0
+<U00DF> \xDF |0
+<U00E1> \xE1 |0
+<U00E2> \xE2 |0
+<U00E4> \xE4 |0
+<U00E7> \xE7 |0
+<U00E9> \xE9 |0
+<U00EB> \xEB |0
+<U00ED> \xED |0
+<U00EE> \xEE |0
+<U00F3> \xF3 |0
+<U00F4> \xF4 |0
+<U00F6> \xF6 |0
+<U00F7> \xF7 |0
+<U00FA> \xFA |0
+<U00FC> \xFC |0
+<U00FD> \xFD |0
+<U0102> \xC3 |0
+<U0103> \xE3 |0
+<U0104> \xA1 |0
+<U0105> \xB1 |0
+<U0106> \xC6 |0
+<U0107> \xE6 |0
+<U010C> \xC8 |0
+<U010D> \xE8 |0
+<U010E> \xCF |0
+<U010F> \xEF |0
+<U0110> \xD0 |0
+<U0111> \xF0 |0
+<U0118> \xCA |0
+<U0119> \xEA |0
+<U011A> \xCC |0
+<U011B> \xEC |0
+<U0139> \xC5 |0
+<U013A> \xE5 |0
+<U013D> \xA5 |0
+<U013E> \xB5 |0
+<U0141> \xA3 |0
+<U0142> \xB3 |0
+<U0143> \xD1 |0
+<U0144> \xF1 |0
+<U0147> \xD2 |0
+<U0148> \xF2 |0
+<U0150> \xD5 |0
+<U0151> \xF5 |0
+<U0154> \xC0 |0
+<U0155> \xE0 |0
+<U0158> \xD8 |0
+<U0159> \xF8 |0
+<U015A> \xA6 |0
+<U015B> \xB6 |0
+<U015E> \xAA |0
+<U015F> \xBA |0
+<U0160> \xA9 |0
+<U0161> \xB9 |0
+<U0162> \xDE |0
+<U0163> \xFE |0
+<U0164> \xAB |0
+<U0165> \xBB |0
+<U016E> \xD9 |0
+<U016F> \xF9 |0
+<U0170> \xDB |0
+<U0171> \xFB |0
+<U0179> \xAC |0
+<U017A> \xBC |0
+<U017B> \xAF |0
+<U017C> \xBF |0
+<U017D> \xAE |0
+<U017E> \xBE |0
+<U02C7> \xB7 |0
+<U02D8> \xA2 |0
+<U02D9> \xFF |0
+<U02DB> \xB2 |0
+<U02DD> \xBD |0
+END CHARMAP
--- /dev/null
+# Written by compile -n iso8859-3 -o Encode/iso8859-3.ucm Encode/iso8859-3.enc
+<code_set_name> "iso8859-3"
+<mb_cur_min> 1
+<mb_cur_max> 1
+<subchar> \x3F
+#
+CHARMAP
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0080> \x80 |0
+<U0081> \x81 |0
+<U0082> \x82 |0
+<U0083> \x83 |0
+<U0084> \x84 |0
+<U0085> \x85 |0
+<U0086> \x86 |0
+<U0087> \x87 |0
+<U0088> \x88 |0
+<U0089> \x89 |0
+<U008A> \x8A |0
+<U008B> \x8B |0
+<U008C> \x8C |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U0091> \x91 |0
+<U0092> \x92 |0
+<U0093> \x93 |0
+<U0094> \x94 |0
+<U0095> \x95 |0
+<U0096> \x96 |0
+<U0097> \x97 |0
+<U0098> \x98 |0
+<U0099> \x99 |0
+<U009A> \x9A |0
+<U009B> \x9B |0
+<U009C> \x9C |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U009F> \x9F |0
+<U00A0> \xA0 |0
+<U00A3> \xA3 |0
+<U00A4> \xA4 |0
+<U00A7> \xA7 |0
+<U00A8> \xA8 |0
+<U00AD> \xAD |0
+<U00B0> \xB0 |0
+<U00B2> \xB2 |0
+<U00B3> \xB3 |0
+<U00B4> \xB4 |0
+<U00B5> \xB5 |0
+<U00B7> \xB7 |0
+<U00B8> \xB8 |0
+<U00BD> \xBD |0
+<U00C0> \xC0 |0
+<U00C1> \xC1 |0
+<U00C2> \xC2 |0
+<U00C4> \xC4 |0
+<U00C7> \xC7 |0
+<U00C8> \xC8 |0
+<U00C9> \xC9 |0
+<U00CA> \xCA |0
+<U00CB> \xCB |0
+<U00CC> \xCC |0
+<U00CD> \xCD |0
+<U00CE> \xCE |0
+<U00CF> \xCF |0
+<U00D1> \xD1 |0
+<U00D2> \xD2 |0
+<U00D3> \xD3 |0
+<U00D4> \xD4 |0
+<U00D6> \xD6 |0
+<U00D7> \xD7 |0
+<U00D9> \xD9 |0
+<U00DA> \xDA |0
+<U00DB> \xDB |0
+<U00DC> \xDC |0
+<U00DF> \xDF |0
+<U00E0> \xE0 |0
+<U00E1> \xE1 |0
+<U00E2> \xE2 |0
+<U00E4> \xE4 |0
+<U00E7> \xE7 |0
+<U00E8> \xE8 |0
+<U00E9> \xE9 |0
+<U00EA> \xEA |0
+<U00EB> \xEB |0
+<U00EC> \xEC |0
+<U00ED> \xED |0
+<U00EE> \xEE |0
+<U00EF> \xEF |0
+<U00F1> \xF1 |0
+<U00F2> \xF2 |0
+<U00F3> \xF3 |0
+<U00F4> \xF4 |0
+<U00F6> \xF6 |0
+<U00F7> \xF7 |0
+<U00F9> \xF9 |0
+<U00FA> \xFA |0
+<U00FB> \xFB |0
+<U00FC> \xFC |0
+<U0108> \xC6 |0
+<U0109> \xE6 |0
+<U010A> \xC5 |0
+<U010B> \xE5 |0
+<U011C> \xD8 |0
+<U011D> \xF8 |0
+<U011E> \xAB |0
+<U011F> \xBB |0
+<U0120> \xD5 |0
+<U0121> \xF5 |0
+<U0124> \xA6 |0
+<U0125> \xB6 |0
+<U0126> \xA1 |0
+<U0127> \xB1 |0
+<U0130> \xA9 |0
+<U0131> \xB9 |0
+<U0134> \xAC |0
+<U0135> \xBC |0
+<U015C> \xDE |0
+<U015D> \xFE |0
+<U015E> \xAA |0
+<U015F> \xBA |0
+<U016C> \xDD |0
+<U016D> \xFD |0
+<U017B> \xAF |0
+<U017C> \xBF |0
+<U02D8> \xA2 |0
+<U02D9> \xFF |0
+END CHARMAP
--- /dev/null
+# Written by compile -n iso8859-4 -o Encode/iso8859-4.ucm Encode/iso8859-4.enc
+<code_set_name> "iso8859-4"
+<mb_cur_min> 1
+<mb_cur_max> 1
+<subchar> \x3F
+#
+CHARMAP
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0080> \x80 |0
+<U0081> \x81 |0
+<U0082> \x82 |0
+<U0083> \x83 |0
+<U0084> \x84 |0
+<U0085> \x85 |0
+<U0086> \x86 |0
+<U0087> \x87 |0
+<U0088> \x88 |0
+<U0089> \x89 |0
+<U008A> \x8A |0
+<U008B> \x8B |0
+<U008C> \x8C |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U0091> \x91 |0
+<U0092> \x92 |0
+<U0093> \x93 |0
+<U0094> \x94 |0
+<U0095> \x95 |0
+<U0096> \x96 |0
+<U0097> \x97 |0
+<U0098> \x98 |0
+<U0099> \x99 |0
+<U009A> \x9A |0
+<U009B> \x9B |0
+<U009C> \x9C |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U009F> \x9F |0
+<U00A0> \xA0 |0
+<U00A4> \xA4 |0
+<U00A7> \xA7 |0
+<U00A8> \xA8 |0
+<U00AD> \xAD |0
+<U00AF> \xAF |0
+<U00B0> \xB0 |0
+<U00B4> \xB4 |0
+<U00B8> \xB8 |0
+<U00C1> \xC1 |0
+<U00C2> \xC2 |0
+<U00C3> \xC3 |0
+<U00C4> \xC4 |0
+<U00C5> \xC5 |0
+<U00C6> \xC6 |0
+<U00C9> \xC9 |0
+<U00CB> \xCB |0
+<U00CD> \xCD |0
+<U00CE> \xCE |0
+<U00D4> \xD4 |0
+<U00D5> \xD5 |0
+<U00D6> \xD6 |0
+<U00D7> \xD7 |0
+<U00D8> \xD8 |0
+<U00DA> \xDA |0
+<U00DB> \xDB |0
+<U00DC> \xDC |0
+<U00DF> \xDF |0
+<U00E1> \xE1 |0
+<U00E2> \xE2 |0
+<U00E3> \xE3 |0
+<U00E4> \xE4 |0
+<U00E5> \xE5 |0
+<U00E6> \xE6 |0
+<U00E9> \xE9 |0
+<U00EB> \xEB |0
+<U00ED> \xED |0
+<U00EE> \xEE |0
+<U00F4> \xF4 |0
+<U00F5> \xF5 |0
+<U00F6> \xF6 |0
+<U00F7> \xF7 |0
+<U00F8> \xF8 |0
+<U00FA> \xFA |0
+<U00FB> \xFB |0
+<U00FC> \xFC |0
+<U0100> \xC0 |0
+<U0101> \xE0 |0
+<U0104> \xA1 |0
+<U0105> \xB1 |0
+<U010C> \xC8 |0
+<U010D> \xE8 |0
+<U0110> \xD0 |0
+<U0111> \xF0 |0
+<U0112> \xAA |0
+<U0113> \xBA |0
+<U0116> \xCC |0
+<U0117> \xEC |0
+<U0118> \xCA |0
+<U0119> \xEA |0
+<U0122> \xAB |0
+<U0123> \xBB |0
+<U0128> \xA5 |0
+<U0129> \xB5 |0
+<U012A> \xCF |0
+<U012B> \xEF |0
+<U012E> \xC7 |0
+<U012F> \xE7 |0
+<U0136> \xD3 |0
+<U0137> \xF3 |0
+<U0138> \xA2 |0
+<U013B> \xA6 |0
+<U013C> \xB6 |0
+<U0145> \xD1 |0
+<U0146> \xF1 |0
+<U014A> \xBD |0
+<U014B> \xBF |0
+<U014C> \xD2 |0
+<U014D> \xF2 |0
+<U0156> \xA3 |0
+<U0157> \xB3 |0
+<U0160> \xA9 |0
+<U0161> \xB9 |0
+<U0166> \xAC |0
+<U0167> \xBC |0
+<U0168> \xDD |0
+<U0169> \xFD |0
+<U016A> \xDE |0
+<U016B> \xFE |0
+<U0172> \xD9 |0
+<U0173> \xF9 |0
+<U017D> \xAE |0
+<U017E> \xBE |0
+<U02C7> \xB7 |0
+<U02D9> \xFF |0
+<U02DB> \xB2 |0
+END CHARMAP
--- /dev/null
+# Written by compile -n iso8859-5 -o Encode/iso8859-5.ucm Encode/iso8859-5.enc
+<code_set_name> "iso8859-5"
+<mb_cur_min> 1
+<mb_cur_max> 1
+<subchar> \x3F
+#
+CHARMAP
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0080> \x80 |0
+<U0081> \x81 |0
+<U0082> \x82 |0
+<U0083> \x83 |0
+<U0084> \x84 |0
+<U0085> \x85 |0
+<U0086> \x86 |0
+<U0087> \x87 |0
+<U0088> \x88 |0
+<U0089> \x89 |0
+<U008A> \x8A |0
+<U008B> \x8B |0
+<U008C> \x8C |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U0091> \x91 |0
+<U0092> \x92 |0
+<U0093> \x93 |0
+<U0094> \x94 |0
+<U0095> \x95 |0
+<U0096> \x96 |0
+<U0097> \x97 |0
+<U0098> \x98 |0
+<U0099> \x99 |0
+<U009A> \x9A |0
+<U009B> \x9B |0
+<U009C> \x9C |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U009F> \x9F |0
+<U00A0> \xA0 |0
+<U00A7> \xFD |0
+<U00AD> \xAD |0
+<U0401> \xA1 |0
+<U0402> \xA2 |0
+<U0403> \xA3 |0
+<U0404> \xA4 |0
+<U0405> \xA5 |0
+<U0406> \xA6 |0
+<U0407> \xA7 |0
+<U0408> \xA8 |0
+<U0409> \xA9 |0
+<U040A> \xAA |0
+<U040B> \xAB |0
+<U040C> \xAC |0
+<U040E> \xAE |0
+<U040F> \xAF |0
+<U0410> \xB0 |0
+<U0411> \xB1 |0
+<U0412> \xB2 |0
+<U0413> \xB3 |0
+<U0414> \xB4 |0
+<U0415> \xB5 |0
+<U0416> \xB6 |0
+<U0417> \xB7 |0
+<U0418> \xB8 |0
+<U0419> \xB9 |0
+<U041A> \xBA |0
+<U041B> \xBB |0
+<U041C> \xBC |0
+<U041D> \xBD |0
+<U041E> \xBE |0
+<U041F> \xBF |0
+<U0420> \xC0 |0
+<U0421> \xC1 |0
+<U0422> \xC2 |0
+<U0423> \xC3 |0
+<U0424> \xC4 |0
+<U0425> \xC5 |0
+<U0426> \xC6 |0
+<U0427> \xC7 |0
+<U0428> \xC8 |0
+<U0429> \xC9 |0
+<U042A> \xCA |0
+<U042B> \xCB |0
+<U042C> \xCC |0
+<U042D> \xCD |0
+<U042E> \xCE |0
+<U042F> \xCF |0
+<U0430> \xD0 |0
+<U0431> \xD1 |0
+<U0432> \xD2 |0
+<U0433> \xD3 |0
+<U0434> \xD4 |0
+<U0435> \xD5 |0
+<U0436> \xD6 |0
+<U0437> \xD7 |0
+<U0438> \xD8 |0
+<U0439> \xD9 |0
+<U043A> \xDA |0
+<U043B> \xDB |0
+<U043C> \xDC |0
+<U043D> \xDD |0
+<U043E> \xDE |0
+<U043F> \xDF |0
+<U0440> \xE0 |0
+<U0441> \xE1 |0
+<U0442> \xE2 |0
+<U0443> \xE3 |0
+<U0444> \xE4 |0
+<U0445> \xE5 |0
+<U0446> \xE6 |0
+<U0447> \xE7 |0
+<U0448> \xE8 |0
+<U0449> \xE9 |0
+<U044A> \xEA |0
+<U044B> \xEB |0
+<U044C> \xEC |0
+<U044D> \xED |0
+<U044E> \xEE |0
+<U044F> \xEF |0
+<U0451> \xF1 |0
+<U0452> \xF2 |0
+<U0453> \xF3 |0
+<U0454> \xF4 |0
+<U0455> \xF5 |0
+<U0456> \xF6 |0
+<U0457> \xF7 |0
+<U0458> \xF8 |0
+<U0459> \xF9 |0
+<U045A> \xFA |0
+<U045B> \xFB |0
+<U045C> \xFC |0
+<U045E> \xFE |0
+<U045F> \xFF |0
+<U2116> \xF0 |0
+END CHARMAP
--- /dev/null
+# Written by compile -n iso8859-6 -o Encode/iso8859-6.ucm Encode/iso8859-6.enc
+<code_set_name> "iso8859-6"
+<mb_cur_min> 1
+<mb_cur_max> 1
+<subchar> \x3F
+#
+CHARMAP
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0080> \x80 |0
+<U0081> \x81 |0
+<U0082> \x82 |0
+<U0083> \x83 |0
+<U0084> \x84 |0
+<U0085> \x85 |0
+<U0086> \x86 |0
+<U0087> \x87 |0
+<U0088> \x88 |0
+<U0089> \x89 |0
+<U008A> \x8A |0
+<U008B> \x8B |0
+<U008C> \x8C |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U0091> \x91 |0
+<U0092> \x92 |0
+<U0093> \x93 |0
+<U0094> \x94 |0
+<U0095> \x95 |0
+<U0096> \x96 |0
+<U0097> \x97 |0
+<U0098> \x98 |0
+<U0099> \x99 |0
+<U009A> \x9A |0
+<U009B> \x9B |0
+<U009C> \x9C |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U009F> \x9F |0
+<U00A0> \xA0 |0
+<U00A4> \xA4 |0
+<U00AD> \xAD |0
+<U060C> \xAC |0
+<U061B> \xBB |0
+<U061F> \xBF |0
+<U0621> \xC1 |0
+<U0622> \xC2 |0
+<U0623> \xC3 |0
+<U0624> \xC4 |0
+<U0625> \xC5 |0
+<U0626> \xC6 |0
+<U0627> \xC7 |0
+<U0628> \xC8 |0
+<U0629> \xC9 |0
+<U062A> \xCA |0
+<U062B> \xCB |0
+<U062C> \xCC |0
+<U062D> \xCD |0
+<U062E> \xCE |0
+<U062F> \xCF |0
+<U0630> \xD0 |0
+<U0631> \xD1 |0
+<U0632> \xD2 |0
+<U0633> \xD3 |0
+<U0634> \xD4 |0
+<U0635> \xD5 |0
+<U0636> \xD6 |0
+<U0637> \xD7 |0
+<U0638> \xD8 |0
+<U0639> \xD9 |0
+<U063A> \xDA |0
+<U0640> \xE0 |0
+<U0641> \xE1 |0
+<U0642> \xE2 |0
+<U0643> \xE3 |0
+<U0644> \xE4 |0
+<U0645> \xE5 |0
+<U0646> \xE6 |0
+<U0647> \xE7 |0
+<U0648> \xE8 |0
+<U0649> \xE9 |0
+<U064A> \xEA |0
+<U064B> \xEB |0
+<U064C> \xEC |0
+<U064D> \xED |0
+<U064E> \xEE |0
+<U064F> \xEF |0
+<U0650> \xF0 |0
+<U0651> \xF1 |0
+<U0652> \xF2 |0
+<U0660> \x30 |0
+<U0661> \x31 |0
+<U0662> \x32 |0
+<U0663> \x33 |0
+<U0664> \x34 |0
+<U0665> \x35 |0
+<U0666> \x36 |0
+<U0667> \x37 |0
+<U0668> \x38 |0
+<U0669> \x39 |0
+END CHARMAP
--- /dev/null
+# Written by compile -n iso8859-7 -o Encode/iso8859-7.ucm Encode/iso8859-7.enc
+<code_set_name> "iso8859-7"
+<mb_cur_min> 1
+<mb_cur_max> 1
+<subchar> \x3F
+#
+CHARMAP
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0080> \x80 |0
+<U0081> \x81 |0
+<U0082> \x82 |0
+<U0083> \x83 |0
+<U0084> \x84 |0
+<U0085> \x85 |0
+<U0086> \x86 |0
+<U0087> \x87 |0
+<U0088> \x88 |0
+<U0089> \x89 |0
+<U008A> \x8A |0
+<U008B> \x8B |0
+<U008C> \x8C |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U0091> \x91 |0
+<U0092> \x92 |0
+<U0093> \x93 |0
+<U0094> \x94 |0
+<U0095> \x95 |0
+<U0096> \x96 |0
+<U0097> \x97 |0
+<U0098> \x98 |0
+<U0099> \x99 |0
+<U009A> \x9A |0
+<U009B> \x9B |0
+<U009C> \x9C |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U009F> \x9F |0
+<U00A0> \xA0 |0
+<U00A3> \xA3 |0
+<U00A6> \xA6 |0
+<U00A7> \xA7 |0
+<U00A8> \xA8 |0
+<U00A9> \xA9 |0
+<U00AB> \xAB |0
+<U00AC> \xAC |0
+<U00AD> \xAD |0
+<U00B0> \xB0 |0
+<U00B1> \xB1 |0
+<U00B2> \xB2 |0
+<U00B3> \xB3 |0
+<U00B7> \xB7 |0
+<U00BB> \xBB |0
+<U00BD> \xBD |0
+<U02BC> \xA2 |0
+<U02BD> \xA1 |0
+<U0384> \xB4 |0
+<U0385> \xB5 |0
+<U0386> \xB6 |0
+<U0388> \xB8 |0
+<U0389> \xB9 |0
+<U038A> \xBA |0
+<U038C> \xBC |0
+<U038E> \xBE |0
+<U038F> \xBF |0
+<U0390> \xC0 |0
+<U0391> \xC1 |0
+<U0392> \xC2 |0
+<U0393> \xC3 |0
+<U0394> \xC4 |0
+<U0395> \xC5 |0
+<U0396> \xC6 |0
+<U0397> \xC7 |0
+<U0398> \xC8 |0
+<U0399> \xC9 |0
+<U039A> \xCA |0
+<U039B> \xCB |0
+<U039C> \xCC |0
+<U039D> \xCD |0
+<U039E> \xCE |0
+<U039F> \xCF |0
+<U03A0> \xD0 |0
+<U03A1> \xD1 |0
+<U03A3> \xD3 |0
+<U03A4> \xD4 |0
+<U03A5> \xD5 |0
+<U03A6> \xD6 |0
+<U03A7> \xD7 |0
+<U03A8> \xD8 |0
+<U03A9> \xD9 |0
+<U03AA> \xDA |0
+<U03AB> \xDB |0
+<U03AC> \xDC |0
+<U03AD> \xDD |0
+<U03AE> \xDE |0
+<U03AF> \xDF |0
+<U03B0> \xE0 |0
+<U03B1> \xE1 |0
+<U03B2> \xE2 |0
+<U03B3> \xE3 |0
+<U03B4> \xE4 |0
+<U03B5> \xE5 |0
+<U03B6> \xE6 |0
+<U03B7> \xE7 |0
+<U03B8> \xE8 |0
+<U03B9> \xE9 |0
+<U03BA> \xEA |0
+<U03BB> \xEB |0
+<U03BC> \xEC |0
+<U03BD> \xED |0
+<U03BE> \xEE |0
+<U03BF> \xEF |0
+<U03C0> \xF0 |0
+<U03C1> \xF1 |0
+<U03C2> \xF2 |0
+<U03C3> \xF3 |0
+<U03C4> \xF4 |0
+<U03C5> \xF5 |0
+<U03C6> \xF6 |0
+<U03C7> \xF7 |0
+<U03C8> \xF8 |0
+<U03C9> \xF9 |0
+<U03CA> \xFA |0
+<U03CB> \xFB |0
+<U03CC> \xFC |0
+<U03CD> \xFD |0
+<U03CE> \xFE |0
+<U2015> \xAF |0
+END CHARMAP
--- /dev/null
+# Written by compile -n iso8859-8 -o Encode/iso8859-8.ucm Encode/iso8859-8.enc
+<code_set_name> "iso8859-8"
+<mb_cur_min> 1
+<mb_cur_max> 1
+<subchar> \x3F
+#
+CHARMAP
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0080> \x80 |0
+<U0081> \x81 |0
+<U0082> \x82 |0
+<U0083> \x83 |0
+<U0084> \x84 |0
+<U0085> \x85 |0
+<U0086> \x86 |0
+<U0087> \x87 |0
+<U0088> \x88 |0
+<U0089> \x89 |0
+<U008A> \x8A |0
+<U008B> \x8B |0
+<U008C> \x8C |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U0091> \x91 |0
+<U0092> \x92 |0
+<U0093> \x93 |0
+<U0094> \x94 |0
+<U0095> \x95 |0
+<U0096> \x96 |0
+<U0097> \x97 |0
+<U0098> \x98 |0
+<U0099> \x99 |0
+<U009A> \x9A |0
+<U009B> \x9B |0
+<U009C> \x9C |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U009F> \x9F |0
+<U00A0> \xA0 |0
+<U00A2> \xA2 |0
+<U00A3> \xA3 |0
+<U00A4> \xA4 |0
+<U00A5> \xA5 |0
+<U00A6> \xA6 |0
+<U00A7> \xA7 |0
+<U00A8> \xA8 |0
+<U00A9> \xA9 |0
+<U00AB> \xAB |0
+<U00AC> \xAC |0
+<U00AD> \xAD |0
+<U00AE> \xAE |0
+<U00B0> \xB0 |0
+<U00B1> \xB1 |0
+<U00B2> \xB2 |0
+<U00B3> \xB3 |0
+<U00B4> \xB4 |0
+<U00B5> \xB5 |0
+<U00B6> \xB6 |0
+<U00B7> \xB7 |0
+<U00B8> \xB8 |0
+<U00B9> \xB9 |0
+<U00BB> \xBB |0
+<U00BC> \xBC |0
+<U00BD> \xBD |0
+<U00BE> \xBE |0
+<U00D7> \xAA |0
+<U00F7> \xBA |0
+<U05D0> \xE0 |0
+<U05D1> \xE1 |0
+<U05D2> \xE2 |0
+<U05D3> \xE3 |0
+<U05D4> \xE4 |0
+<U05D5> \xE5 |0
+<U05D6> \xE6 |0
+<U05D7> \xE7 |0
+<U05D8> \xE8 |0
+<U05D9> \xE9 |0
+<U05DA> \xEA |0
+<U05DB> \xEB |0
+<U05DC> \xEC |0
+<U05DD> \xED |0
+<U05DE> \xEE |0
+<U05DF> \xEF |0
+<U05E0> \xF0 |0
+<U05E1> \xF1 |0
+<U05E2> \xF2 |0
+<U05E3> \xF3 |0
+<U05E4> \xF4 |0
+<U05E5> \xF5 |0
+<U05E6> \xF6 |0
+<U05E7> \xF7 |0
+<U05E8> \xF8 |0
+<U05E9> \xF9 |0
+<U05EA> \xFA |0
+<U2017> \xDF |0
+<U203E> \xAF |0
+END CHARMAP
--- /dev/null
+# Written by compile -n iso8859-9 -o Encode/iso8859-9.ucm Encode/iso8859-9.enc
+<code_set_name> "iso8859-9"
+<mb_cur_min> 1
+<mb_cur_max> 1
+<subchar> \x3F
+#
+CHARMAP
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0080> \x80 |0
+<U0081> \x81 |0
+<U0082> \x82 |0
+<U0083> \x83 |0
+<U0084> \x84 |0
+<U0085> \x85 |0
+<U0086> \x86 |0
+<U0087> \x87 |0
+<U0088> \x88 |0
+<U0089> \x89 |0
+<U008A> \x8A |0
+<U008B> \x8B |0
+<U008C> \x8C |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U0091> \x91 |0
+<U0092> \x92 |0
+<U0093> \x93 |0
+<U0094> \x94 |0
+<U0095> \x95 |0
+<U0096> \x96 |0
+<U0097> \x97 |0
+<U0098> \x98 |0
+<U0099> \x99 |0
+<U009A> \x9A |0
+<U009B> \x9B |0
+<U009C> \x9C |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U009F> \x9F |0
+<U00A0> \xA0 |0
+<U00A1> \xA1 |0
+<U00A2> \xA2 |0
+<U00A3> \xA3 |0
+<U00A4> \xA4 |0
+<U00A5> \xA5 |0
+<U00A6> \xA6 |0
+<U00A7> \xA7 |0
+<U00A8> \xA8 |0
+<U00A9> \xA9 |0
+<U00AA> \xAA |0
+<U00AB> \xAB |0
+<U00AC> \xAC |0
+<U00AD> \xAD |0
+<U00AE> \xAE |0
+<U00AF> \xAF |0
+<U00B0> \xB0 |0
+<U00B1> \xB1 |0
+<U00B2> \xB2 |0
+<U00B3> \xB3 |0
+<U00B4> \xB4 |0
+<U00B5> \xB5 |0
+<U00B6> \xB6 |0
+<U00B7> \xB7 |0
+<U00B8> \xB8 |0
+<U00B9> \xB9 |0
+<U00BA> \xBA |0
+<U00BB> \xBB |0
+<U00BC> \xBC |0
+<U00BD> \xBD |0
+<U00BE> \xBE |0
+<U00BF> \xBF |0
+<U00C0> \xC0 |0
+<U00C1> \xC1 |0
+<U00C2> \xC2 |0
+<U00C3> \xC3 |0
+<U00C4> \xC4 |0
+<U00C5> \xC5 |0
+<U00C6> \xC6 |0
+<U00C7> \xC7 |0
+<U00C8> \xC8 |0
+<U00C9> \xC9 |0
+<U00CA> \xCA |0
+<U00CB> \xCB |0
+<U00CC> \xCC |0
+<U00CD> \xCD |0
+<U00CE> \xCE |0
+<U00CF> \xCF |0
+<U00D1> \xD1 |0
+<U00D2> \xD2 |0
+<U00D3> \xD3 |0
+<U00D4> \xD4 |0
+<U00D5> \xD5 |0
+<U00D6> \xD6 |0
+<U00D7> \xD7 |0
+<U00D8> \xD8 |0
+<U00D9> \xD9 |0
+<U00DA> \xDA |0
+<U00DB> \xDB |0
+<U00DC> \xDC |0
+<U00DF> \xDF |0
+<U00E0> \xE0 |0
+<U00E1> \xE1 |0
+<U00E2> \xE2 |0
+<U00E3> \xE3 |0
+<U00E4> \xE4 |0
+<U00E5> \xE5 |0
+<U00E6> \xE6 |0
+<U00E7> \xE7 |0
+<U00E8> \xE8 |0
+<U00E9> \xE9 |0
+<U00EA> \xEA |0
+<U00EB> \xEB |0
+<U00EC> \xEC |0
+<U00ED> \xED |0
+<U00EE> \xEE |0
+<U00EF> \xEF |0
+<U00F1> \xF1 |0
+<U00F2> \xF2 |0
+<U00F3> \xF3 |0
+<U00F4> \xF4 |0
+<U00F5> \xF5 |0
+<U00F6> \xF6 |0
+<U00F7> \xF7 |0
+<U00F8> \xF8 |0
+<U00F9> \xF9 |0
+<U00FA> \xFA |0
+<U00FB> \xFB |0
+<U00FC> \xFC |0
+<U00FF> \xFF |0
+<U011E> \xD0 |0
+<U011F> \xF0 |0
+<U0130> \xDD |0
+<U0131> \xFD |0
+<U015E> \xDE |0
+<U015F> \xFE |0
+END CHARMAP
--- /dev/null
+# Written by compile -n posix-bc -o Encode/posix-bc.ucm Encode/posix-bc.enc
+<code_set_name> "posix-bc"
+<mb_cur_min> 1
+<mb_cur_max> 1
+<subchar> \x6F
+#
+CHARMAP
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x15 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x5A |0
+<U0022> \x7F |0
+<U0023> \x7B |0
+<U0024> \x5B |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \x7C |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \xBB |0
+<U005C> \xBC |0
+<U005D> \xBD |0
+<U005E> \x6A |0
+<U005F> \x6D |0
+<U0060> \x4A |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \xFB |0
+<U007C> \x4F |0
+<U007D> \xFD |0
+<U007E> \xFF |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x25 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \x5F |0
+<U00A0> \x41 |0
+<U00A1> \xAA |0
+<U00A2> \xB0 |0
+<U00A3> \xB1 |0
+<U00A4> \x9F |0
+<U00A5> \xB2 |0
+<U00A6> \xD0 |0
+<U00A7> \xB5 |0
+<U00A8> \x79 |0
+<U00A9> \xB4 |0
+<U00AA> \x9A |0
+<U00AB> \x8A |0
+<U00AC> \xBA |0
+<U00AD> \xCA |0
+<U00AE> \xAF |0
+<U00AF> \xA1 |0
+<U00B0> \x90 |0
+<U00B1> \x8F |0
+<U00B2> \xEA |0
+<U00B3> \xFA |0
+<U00B4> \xBE |0
+<U00B5> \xA0 |0
+<U00B6> \xB6 |0
+<U00B7> \xB3 |0
+<U00B8> \x9D |0
+<U00B9> \xDA |0
+<U00BA> \x9B |0
+<U00BB> \x8B |0
+<U00BC> \xB7 |0
+<U00BD> \xB8 |0
+<U00BE> \xB9 |0
+<U00BF> \xAB |0
+<U00C0> \x64 |0
+<U00C1> \x65 |0
+<U00C2> \x62 |0
+<U00C3> \x66 |0
+<U00C4> \x63 |0
+<U00C5> \x67 |0
+<U00C6> \x9E |0
+<U00C7> \x68 |0
+<U00C8> \x74 |0
+<U00C9> \x71 |0
+<U00CA> \x72 |0
+<U00CB> \x73 |0
+<U00CC> \x78 |0
+<U00CD> \x75 |0
+<U00CE> \x76 |0
+<U00CF> \x77 |0
+<U00D0> \xAC |0
+<U00D1> \x69 |0
+<U00D2> \xED |0
+<U00D3> \xEE |0
+<U00D4> \xEB |0
+<U00D5> \xEF |0
+<U00D6> \xEC |0
+<U00D7> \xBF |0
+<U00D8> \x80 |0
+<U00D9> \xE0 |0
+<U00DA> \xFE |0
+<U00DB> \xDD |0
+<U00DC> \xFC |0
+<U00DD> \xAD |0
+<U00DE> \xAE |0
+<U00DF> \x59 |0
+<U00E0> \x44 |0
+<U00E1> \x45 |0
+<U00E2> \x42 |0
+<U00E3> \x46 |0
+<U00E4> \x43 |0
+<U00E5> \x47 |0
+<U00E6> \x9C |0
+<U00E7> \x48 |0
+<U00E8> \x54 |0
+<U00E9> \x51 |0
+<U00EA> \x52 |0
+<U00EB> \x53 |0
+<U00EC> \x58 |0
+<U00ED> \x55 |0
+<U00EE> \x56 |0
+<U00EF> \x57 |0
+<U00F0> \x8C |0
+<U00F1> \x49 |0
+<U00F2> \xCD |0
+<U00F3> \xCE |0
+<U00F4> \xCB |0
+<U00F5> \xCF |0
+<U00F6> \xCC |0
+<U00F7> \xE1 |0
+<U00F8> \x70 |0
+<U00F9> \xC0 |0
+<U00FA> \xDE |0
+<U00FB> \xDB |0
+<U00FC> \xDC |0
+<U00FD> \x8D |0
+<U00FE> \x8E |0
+<U00FF> \xDF |0
+END CHARMAP
--- /dev/null
+# Written by compile -n symbol -o Encode/symbol.ucm Encode/symbol.enc
+<code_set_name> "symbol"
+<mb_cur_min> 1
+<mb_cur_max> 1
+<subchar> \x3F
+#
+CHARMAP
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0023> \x23 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U005B> \x5B |0
+<U005D> \x5D |0
+<U005F> \x5F |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007F> \x7F |0
+<U0080> \x80 |0
+<U0081> \x81 |0
+<U0082> \x82 |0
+<U0083> \x83 |0
+<U0084> \x84 |0
+<U0085> \x85 |0
+<U0086> \x86 |0
+<U0087> \x87 |0
+<U0088> \x88 |0
+<U0089> \x89 |0
+<U008A> \x8A |0
+<U008B> \x8B |0
+<U008C> \x8C |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U0091> \x91 |0
+<U0092> \x92 |0
+<U0093> \x93 |0
+<U0094> \x94 |0
+<U0095> \x95 |0
+<U0096> \x96 |0
+<U0097> \x97 |0
+<U0098> \x98 |0
+<U0099> \x99 |0
+<U009A> \x9A |0
+<U009B> \x9B |0
+<U009C> \x9C |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U009F> \x9F |0
+<U00A9> \xD3 |0
+<U00AC> \xD8 |0
+<U00AE> \xD2 |0
+<U00B0> \xB0 |0
+<U00B1> \xB1 |0
+<U00D7> \xB4 |0
+<U00F7> \xB8 |0
+<U0192> \xA6 |0
+<U0391> \x41 |0
+<U0392> \x42 |0
+<U0393> \x47 |0
+<U0394> \x44 |0
+<U0395> \x45 |0
+<U0396> \x5A |0
+<U0397> \x48 |0
+<U0398> \x51 |0
+<U0399> \x49 |0
+<U039A> \x4B |0
+<U039B> \x4C |0
+<U039C> \x4D |0
+<U039D> \x4E |0
+<U039E> \x58 |0
+<U039F> \x4F |0
+<U03A0> \x50 |0
+<U03A1> \x52 |0
+<U03A3> \x53 |0
+<U03A4> \x54 |0
+<U03A5> \x55 |0
+<U03A6> \x46 |0
+<U03A7> \x43 |0
+<U03A8> \x59 |0
+<U03A9> \x57 |0
+<U03B1> \x61 |0
+<U03B2> \x62 |0
+<U03B3> \x67 |0
+<U03B4> \x64 |0
+<U03B5> \x65 |0
+<U03B6> \x7A |0
+<U03B7> \x68 |0
+<U03B8> \x71 |0
+<U03B9> \x69 |0
+<U03BA> \x6B |0
+<U03BB> \x6C |0
+<U03BC> \x6D |0
+<U03BD> \x6E |0
+<U03BE> \x78 |0
+<U03BF> \x6F |0
+<U03C0> \x70 |0
+<U03C1> \x72 |0
+<U03C2> \x56 |0
+<U03C3> \x73 |0
+<U03C4> \x74 |0
+<U03C5> \x75 |0
+<U03C6> \x66 |0
+<U03C7> \x63 |0
+<U03C8> \x79 |0
+<U03C9> \x77 |0
+<U03D1> \x4A |0
+<U03D2> \xA1 |0
+<U03D5> \x6A |0
+<U03D6> \x76 |0
+<U2022> \xB7 |0
+<U2026> \xBC |0
+<U2032> \xA2 |0
+<U2033> \xB2 |0
+<U2044> \xA4 |0
+<U2111> \xC1 |0
+<U2118> \xC3 |0
+<U211C> \xC2 |0
+<U2122> \xD4 |0
+<U2135> \xC0 |0
+<U2190> \xAC |0
+<U2191> \xAD |0
+<U2192> \xAE |0
+<U2193> \xAF |0
+<U2194> \xAB |0
+<U21B5> \xBF |0
+<U21D0> \xDC |0
+<U21D1> \xDD |0
+<U21D2> \xDE |0
+<U21D3> \xDF |0
+<U21D4> \xDB |0
+<U2200> \x22 |0
+<U2202> \xB6 |0
+<U2203> \x24 |0
+<U2205> \xC6 |0
+<U2207> \xD1 |0
+<U2208> \xCE |0
+<U2209> \xCF |0
+<U220D> \x27 |0
+<U220F> \xD5 |0
+<U2211> \xE5 |0
+<U2212> \x2D |0
+<U2217> \x2A |0
+<U221A> \xD6 |0
+<U221D> \xB5 |0
+<U221E> \xA5 |0
+<U2220> \xD0 |0
+<U2227> \xD9 |0
+<U2228> \xDA |0
+<U2229> \xC7 |0
+<U222A> \xC8 |0
+<U222B> \xF2 |0
+<U2234> \x5C |0
+<U223C> \x7E |0
+<U2245> \x40 |0
+<U2248> \xBB |0
+<U2260> \xB9 |0
+<U2261> \xBA |0
+<U2264> \xA3 |0
+<U2265> \xB3 |0
+<U2282> \xCC |0
+<U2283> \xC9 |0
+<U2284> \xCB |0
+<U2286> \xCD |0
+<U2287> \xCA |0
+<U2295> \xC5 |0
+<U2297> \xC4 |0
+<U22A5> \x5E |0
+<U22C4> \xE0 |0
+<U22C5> \xD7 |0
+<U2320> \xF3 |0
+<U2321> \xF5 |0
+<U2329> \xE1 |0
+<U232A> \xF1 |0
+<U2660> \xAA |0
+<U2663> \xA7 |0
+<U2665> \xA9 |0
+<U2666> \xA8 |0
+<UF8E5> \x60 |0
+<UF8E6> \xBD |0
+<UF8E7> \xBE |0
+<UF8E8> \xE2 |0
+<UF8E9> \xE3 |0
+<UF8EA> \xE4 |0
+<UF8EB> \xE6 |0
+<UF8EC> \xE7 |0
+<UF8ED> \xE8 |0
+<UF8EE> \xE9 |0
+<UF8EF> \xEA |0
+<UF8F0> \xEB |0
+<UF8F1> \xEC |0
+<UF8F2> \xED |0
+<UF8F3> \xEE |0
+<UF8F4> \xEF |0
+<UF8F5> \xF4 |0
+<UF8F6> \xF6 |0
+<UF8F7> \xF7 |0
+<UF8F8> \xF8 |0
+<UF8F9> \xF9 |0
+<UF8FA> \xFA |0
+<UF8FB> \xFB |0
+<UF8FC> \xFC |0
+<UF8FD> \xFD |0
+<UF8FE> \xFE |0
+<UF8FF> \xF0 |0
+END CHARMAP
use ExtUtils::MakeMaker;
-my %tables = (iso8859 => ['ascii.enc', 'cp1250.enc'],
- EBCDIC => ['cp1047.enc','cp37.enc','posix-bc.enc'],
- Symbols => ['symbol.enc','dingbats.enc'],
+my %tables = (iso8859 => ['ascii.ucm', 'cp1250.ucm'],
+ EBCDIC => ['cp1047.ucm','cp37.ucm','posix-bc.ucm'],
+ Symbols => ['symbol.ucm','dingbats.ucm'],
);
opendir(ENC,'Encode');
while (defined(my $file = readdir(ENC)))
{
- if ($file =~ /iso8859.*\.enc/)
+ if ($file =~ /iso8859.*\.ucm/)
{
push(@{$tables{iso8859}},$file);
}
foreach my $f (@{$self->{'O_FILES'}})
{
$o{$f} = 1;
- }
+ }
my $x = $self->{'OBJ_EXT'};
# Add the table O_FILES
foreach my $e (keys %tables)
{
$o{$e.$x} = 1;
- }
- # Reset the variable
+ }
+ # Reset the variable
$self->{'O_FILES'} = [sort keys %o];
my @files;
foreach my $table (keys %tables)
{
- foreach my $ext (qw($(OBJ_EXT) .c .h .def))
+ foreach my $ext (qw($(OBJ_EXT) .c .h .def .fnm))
{
push (@files,$table.$ext);
}
{
my $self = shift;
my $dir = $self->catdir($self->curdir,'Encode');
- my $str = "# Encode$(OBJ_EXT) depends on .h and .def files not .c files - but all written by compile\n";
+ my $str = "# Encode\$(OBJ_EXT) depends on .h and .def files not .c files - but all written by compile\n";
$str .= 'Encode$(OBJ_EXT) :';
- my @rules;
foreach my $table (keys %tables)
{
$str .= " $table.c";
$continuator = '';
}
}
- $numlines = 1;
- $lengthsofar = length($str);
- $continuator = '';
- $str .= "\n\t\$(PERL) compile \$\@";
+ $str .= "\n\t\$(PERL) compile -o \$\@ -f $table.fnm\n\n";
+ open (FILELIST, ">$table.fnm")
+ || die "Could not open $table.fnm: $!";
foreach my $file (@{$tables{$table}})
{
- $str .= $continuator.' '.$self->catfile($dir,$file);
- if ( length($str)-$lengthsofar > 128*$numlines )
- {
- $continuator .= "\n\t\$(PERL) compile \$\@";
- $numlines++;
- } else {
- $continuator = '';
- }
+ print FILELIST $self->catfile($dir,$file) . "\n";
}
- $str .= "\n\n";
+ close(FILELIST);
}
return $str;
}
#!../../perl -w
BEGIN { @INC = '../../lib' };
use strict;
+use Getopt::Std;
+my @orig_ARGV = @ARGV;
+my $perforce = '$Id$';
+
sub encode_U
{
# Win32 does not expand globs on command line
eval "\@ARGV = map(glob(\$_),\@ARGV)" if ($^O eq 'MSWin32');
-my $cname = shift(@ARGV);
+my %opt;
+getopts('qo:f:n:',\%opt);
+my $cname = (exists $opt{'o'}) ? $opt{'o'} : shift(@ARGV);
chmod(0666,$cname) if -f $cname && !-w $cname;
open(C,">$cname") || die "Cannot open $cname:$!";
+
+
my $dname = $cname;
$dname =~ s/(\.[^\.]*)?$/.def/;
-my ($doC,$doEnc,$doUcm);
+my ($doC,$doEnc,$doUcm,$doPet);
if ($cname =~ /\.(c|xs)$/)
{
foreach my $fh (\*C,\*D,\*H)
{
- print $fh <<"END";
+ print $fh <<"END" unless $opt{'q'};
/*
!!!!!!! DO NOT EDIT THIS FILE !!!!!!!
This file was autogenerated by:
- $^X $0 $cname @ARGV
+ $^X $0 $cname @orig_ARGV
+ (Repository $perforce)
*/
END
}
{
$doUcm = 1;
}
+elsif ($cname =~ /\.pet$/)
+ {
+ $doPet = 1;
+ }
+
+my @encfiles;
+if (exists $opt{'f'})
+ {
+ # -F is followed by name of file containing list of filenames
+ my $flist = $opt{'f'};
+ open(FLIST,$flist) || die "Cannot open $flist:$!";
+ chomp(@encfiles = <FLIST>);
+ close(FLIST);
+ }
+else
+ {
+ @encfiles = @ARGV;
+ }
my %encoding;
my %strings;
return $a cmp $b;
}
-foreach my $enc (sort cmp_name @ARGV)
+
+foreach my $enc (sort cmp_name @encfiles)
{
my ($name,$sfx) = $enc =~ /^.*?([\w-]+)\.(enc|ucm)$/;
+ $name = delete $opt{'n'} if exists $opt{'n'};
if (open(E,$enc))
{
if ($sfx eq 'enc')
{
- compile_enc(\*E,lc($name),\*C);
+ compile_enc(\*E,lc($name));
}
else
{
- compile_ucm(\*E,lc($name),\*C);
+ compile_ucm(\*E,lc($name));
}
}
else
if ($doC)
{
+ foreach my $name (sort cmp_name keys %encoding)
+ {
+ my ($e2u,$u2e,$erep,$min_el,$max_el) = @{$encoding{$name}};
+ output(\*C,$name.'_utf8',$e2u);
+ output(\*C,'utf8_'.$name,$u2e);
+ push(@{$encoding{$name}},outstring(\*C,$e2u->{Cname}.'_def',$erep));
+ }
foreach my $enc (sort cmp_name keys %encoding)
{
+ my ($e2u,$u2e,$rep,$min_el,$max_el,$rsym) = @{$encoding{$enc}};
+ my @info = ($e2u->{Cname},$u2e->{Cname},$rsym,length($rep),$min_el,$max_el);
my $sym = "${enc}_encoding";
$sym =~ s/\W+/_/g;
print C "encode_t $sym = \n";
- print C " {",join(',',"\"$enc\"",@{$encoding{$enc}}),"};\n\n";
+ print C " {",join(',',@info,"{\"$enc\",(const char *)0}"),"};\n\n";
}
foreach my $enc (sort cmp_name keys %encoding)
close(D);
close(H);
}
+elsif ($doEnc)
+ {
+ foreach my $name (sort cmp_name keys %encoding)
+ {
+ my ($e2u,$u2e,$erep,$min_el,$max_el) = @{$encoding{$name}};
+ output_enc(\*C,$name,$e2u);
+ }
+ }
+elsif ($doUcm)
+ {
+ foreach my $name (sort cmp_name keys %encoding)
+ {
+ my ($e2u,$u2e,$erep,$min_el,$max_el) = @{$encoding{$name}};
+ output_ucm(\*C,$name,$u2e,$erep,$min_el,$max_el);
+ }
+ }
+
close(C);
sub compile_ucm
{
- my ($fh,$name,$ch) = @_;
+ my ($fh,$name) = @_;
my $e2u = {};
my $u2e = {};
my $cs;
}
my $erep;
my $urep;
+ my $max_el;
+ my $min_el;
if (exists $attr{'subchar'})
{
- my @byte = $attr{'subchar'} =~ /^\s*(?:\\x([0-9a-f]+))+\s*$/;
- $erep = join('',map(hex($_),@byte));
+ my @byte;
+ $attr{'subchar'} =~ /^\s*/cg;
+ push(@byte,$1) while $attr{'subchar'} =~ /\G\\x([0-9a-f]+)/icg;
+ $erep = join('',map(chr(hex($_)),@byte));
}
- warn "Scanning $name ($cs)\n";
+ print "Scanning $name ($cs)\n";
my $nfb = 0;
my $hfb = 0;
while (<$fh>)
s/#.*$//;
last if /^\s*END\s+CHARMAP\s*$/i;
next if /^\s*$/;
- my ($u,@byte) = /^<U([0-9a-f]+)>\s+(?:\\x([0-9a-f]+))+\s*(\|[0-3]|)\s*$/i;
- my $fb = pop(@byte);
+ my ($u,@byte);
+ my $fb = '';
+ $u = $1 if (/^<U([0-9a-f]+)>\s+/igc);
+ push(@byte,$1) while /\G\\x([0-9a-f]+)/igc;
+ $fb = $1 if /\G\s*(\|[0-3])/gc;
+ # warn "$_: $u @byte | $fb\n";
+ die "Bad line:$_" unless /\G\s*(#.*)?$/gc;
if (defined($u))
{
my $uch = encode_U(hex($u));
my $ech = join('',map(chr(hex($_)),@byte));
+ my $el = length($ech);
+ $max_el = $el if (!defined($max_el) || $el > $max_el);
+ $min_el = $el if (!defined($min_el) || $el < $min_el);
if (length($fb))
{
$fb = substr($fb,1);
{
warn $_;
}
-
}
if ($nfb && $hfb)
{
die "$nfb entries without fallback, $hfb entries with\n";
}
- if ($doC)
- {
- output($ch,$name.'_utf8',$e2u);
- output($ch,'utf8_'.$name,$u2e);
- $encoding{$name} = [$e2u->{Cname},$u2e->{Cname},
- outstring($ch,$e2u->{Cname}.'_def',$erep),length($erep)];
- }
- elsif ($doEnc)
- {
- output_enc($ch,$name,$e2u);
- }
- elsif ($doUcm)
- {
- output_ucm($ch,$name,$u2e);
- }
+ $encoding{$name} = [$e2u,$u2e,$erep,$min_el,$max_el];
}
sub compile_enc
{
- my ($fh,$name,$ch) = @_;
+ my ($fh,$name) = @_;
my $e2u = {};
my $u2e = {};
my ($def,$sym,$pages) = split(/\s+/,scalar(<$fh>));
warn "$type encoded $name\n";
my $rep = '';
+ my $min_el;
+ my $max_el;
{
my $v = hex($def);
no strict 'refs';
$rep = &{"encode_$type"}($v & 0xFF, ($v >> 8) & 0xffe);
}
+ my %seen;
while ($pages--)
{
my $line = <$fh>;
no strict 'refs';
my $ech = &{"encode_$type"}($ch,$page);
my $val = hex(substr($line,0,4,''));
+ next if $val == 0xFFFD;
if ($val || (!$ch && !$page))
{
+ my $el = length($ech);
+ $max_el = $el if (!defined($max_el) || $el > $max_el);
+ $min_el = $el if (!defined($min_el) || $el < $min_el);
my $uch = encode_U($val);
+ if (exists $seen{$uch})
+ {
+ warn sprintf("U%04X is %02X%02X and %02X%02X\n",
+ $val,$page,$ch,@{$seen{$uch}});
+ }
+ else
+ {
+ $seen{$uch} = [$page,$ch];
+ }
enter($e2u,$ech,$uch,$e2u,0);
enter($u2e,$uch,$ech,$u2e,0);
}
}
}
}
- if ($doC)
- {
- output($ch,$name.'_utf8',$e2u);
- output($ch,'utf8_'.$name,$u2e);
- $encoding{$name} = [$e2u->{Cname},$u2e->{Cname},
- outstring($ch,$e2u->{Cname}.'_def',$rep),length($rep)];
- }
- elsif ($doEnc)
- {
- output_enc($ch,$name,$e2u);
- }
- elsif ($doUcm)
- {
- output_ucm($ch,$name,$u2e);
- }
+ $encoding{$name} = [$e2u,$u2e,$rep,$min_el,$max_el];
}
sub enter
sub decode_U
{
my $s = shift;
-
}
-
sub output_ucm_page
{
my ($fh,$a,$t,$pre) = @_;
sub output_ucm
{
- my ($fh,$name,$a) = @_;
- print $fh "CHARMAP\n";
+ my ($fh,$name,$a,$rep,$min_el,$max_el) = @_;
+ print $fh "# Written $perforce\n# $0 @orig_ARGV\n" unless $opt{'q'};
+ print $fh "<code_set_name> \"$name\"\n";
+ if (defined $min_el)
+ {
+ print $fh "<mb_cur_min> $min_el\n";
+ }
+ if (defined $max_el)
+ {
+ print $fh "<mb_cur_max> $max_el\n";
+ }
+ if (defined $rep)
+ {
+ print $fh "<subchar> ";
+ foreach my $c (split(//,$rep))
+ {
+ printf $fh "\\x%02X",ord($c);
+ }
+ print $fh "\n";
+ }
+ print $fh "#\nCHARMAP\n";
output_ucm_page($fh,$a,$a,0);
print $fh "END CHARMAP\n";
}
typedef struct encode_s encode_t;
struct encode_s
{
- const char *name;
encpage_t *t_utf8;
encpage_t *f_utf8;
const U8 *rep;
int replen;
+ U8 min_el;
+ U8 max_el;
+ const char *name[2];
};
#ifdef U8
$sock->socket(AF_INET, $type, $proto) or
return _error($sock, $!, "$!");
- if ($arg->{Reuse}) {
+ if ($arg->{Reuse} || $arg->{ReuseAddr}) {
$sock->sockopt(SO_REUSEADDR,1) or
return _error($sock, $!, "$!");
}
+ if ($arg->{ReusePort}) {
+ $sock->sockopt(SO_REUSEPORT,1) or
+ return _error($sock, $!, "$!");
+ }
+
if($lport || ($laddr ne INADDR_ANY) || exists $arg->{Listen}) {
$sock->bind($lport || 0, $laddr) or
return _error($sock, $!, "$!");
Proto Protocol name (or number) "tcp" | "udp" | ...
Type Socket type SOCK_STREAM | SOCK_DGRAM | ...
Listen Queue size for listen
- Reuse Set SO_REUSEADDR before binding
+ ReuseAddr Set SO_REUSEADDR before binding
+ Reuse Set SO_REUSEADDR before binding (deprecated, prefer ReuseAddr)
+ ReusePort Set SO_REUSEPORT before binding
Timeout Timeout value for various operations
MultiHomed Try all adresses for multi-homed hosts
warn("opset_len %ld\n", (long)opset_len);
op_names_init(aTHX);
+void
+_safe_pkg_prep(Package)
+ char * Package
+PPCODE:
+ HV *hv;
+ ENTER;
+
+ hv = gv_stashpv(Package, GV_ADDWARN); /* should exist already */
+
+ if (strNE(HvNAME(hv),"main")) {
+ Safefree(HvNAME(hv));
+ HvNAME(hv) = savepv("main"); /* make it think it's in main:: */
+ hv_store(hv,"_",1,(SV *)PL_defgv,0); /* connect _ to global */
+ SvREFCNT_inc((SV *)PL_defgv); /* want to keep _ around! */
+ }
+ LEAVE;
+
+
+
+
void
_safe_call_sv(Package, mask, codesv)
save_hptr(&PL_defstash); /* save current default stash */
/* the assignment to global defstash changes our sense of 'main' */
PL_defstash = gv_stashpv(Package, GV_ADDWARN); /* should exist already */
- if (strNE(HvNAME(PL_defstash),"main")) {
- Safefree(HvNAME(PL_defstash));
- HvNAME(PL_defstash) = savepv("main"); /* make it think it's in main:: */
- hv_store(PL_defstash,"_",1,(SV *)PL_defgv,0); /* connect _ to global */
- SvREFCNT_inc((SV *)PL_defgv); /* want to keep _ around! */
- }
+
save_hptr(&PL_curstash);
PL_curstash = PL_defstash;
/* %INC must be clean for use/require in compartment */
save_hash(PL_incgv);
+ sv_free((SV*)GvHV(PL_incgv)); /* get rid of what save_hash gave us*/
GvHV(PL_incgv) = (HV*)SvREFCNT_inc(GvHV(gv_HVadd(gv_fetchpv("INC",TRUE,SVt_PVHV))));
PUSHMARK(SP);
# the whole glob *_ rather than $_ and @_ separately, otherwise
# @_ in non default packages within the compartment don't work.
$obj->share_from('main', $default_share);
+ Opcode::_safe_pkg_prep($obj->{Root});
return $obj;
}
SO_RCVLOWAT
SO_RCVTIMEO
SO_REUSEADDR
+ SO_REUSEPORT
SO_SNDBUF
SO_SNDLOWAT
SO_SNDTIMEO
Perl_do_join
Perl_do_open
Perl_do_open9
+Perl_do_openn
Perl_dowantarray
Perl_dump_all
Perl_dump_eval
HV *hv;
I32 i;
if (!PL_psig_ptr) {
- int sig_num[] = { SIG_NUM };
- New(73, PL_psig_ptr, sizeof(sig_num)/sizeof(*sig_num), SV*);
- New(73, PL_psig_name, sizeof(sig_num)/sizeof(*sig_num), SV*);
+ Newz(73, PL_psig_ptr, SIG_SIZE, SV*);
+ Newz(73, PL_psig_name, SIG_SIZE, SV*);
+ Newz(73, PL_psig_pend, SIG_SIZE, int);
}
GvMULTI_on(gv);
hv = GvHVn(gv);
hv_magic(hv, Nullgv, 'S');
- for (i = 1; PL_sig_name[i]; i++) {
+ for (i = 1; i < SIG_SIZE; i++) {
SV ** init;
init = hv_fetch(hv, PL_sig_name[i], strlen(PL_sig_name[i]), 1);
if (init)
sv_setsv(*init, &PL_sv_undef);
PL_psig_ptr[i] = 0;
PL_psig_name[i] = 0;
+ PL_psig_pend[i] = 0;
}
}
break;
}
#endif /* Microport 2.4 hack */
+int
+Perl_magic_freeovrld(pTHX_ SV *sv, MAGIC *mg)
+{
+ AMT *amtp = (AMT*)mg->mg_ptr;
+ if (amtp && AMT_AMAGIC(amtp)) {
+ int i;
+ for (i = 1; i < NofAMmeth; i++) {
+ CV *cv = amtp->table[i];
+ if (cv != Nullcv) {
+ SvREFCNT_dec((SV *) cv);
+ amtp->table[i] = Nullcv;
+ }
+ }
+ }
+ return 0;
+}
+
/* Updates and caches the CV's */
bool
if (mg && amtp->was_ok_am == PL_amagic_generation
&& amtp->was_ok_sub == PL_sub_generation)
return AMT_OVERLOADED(amtp);
- if (amtp && AMT_AMAGIC(amtp)) { /* Have table. */
- int i;
- for (i=1; i<NofAMmeth; i++) {
- if (amtp->table[i]) {
- SvREFCNT_dec(amtp->table[i]);
- }
- }
- }
sv_unmagic((SV*)stash, 'c');
DEBUG_o( Perl_deb(aTHX_ "Recalcing overload magic in package %s\n",HvNAME(stash)) );
+ Zero(&amt,1,AMT);
amt.was_ok_am = PL_amagic_generation;
amt.was_ok_sub = PL_sub_generation;
amt.fallback = AMGfallNO;
# OS/390 hints by David J. Fiander <davidf@mks.com>
#
# OS/390 OpenEdition Release 3 Mon Sep 22 1997 thanks to:
-#
+#
+# John Goodyear <johngood@us.ibm.com>
# John Pfuntner <pfuntner@vnet.ibm.com>
# Len Johnson <lenjay@ibm.net>
# Bud Huff <BAHUFF@us.oracle.com>
#
# To get ANSI C, we need to use c89, and ld doesn't exist
-cc='c89'
-ld='c89'
-# To link via definition side decks we need the dll option
-cccdlflags='-W 0,dll,"langlvl(extended)"'
-# c89 hides most of the useful header stuff, _ALL_SOURCE turns it on again,
+# You can override this with Configure -Dcc=gcc -Dld=ld.
+case "$cc" in
+'') cc='c89' ;;
+esac
+case "$ld" in
+'') ld='c89' ;;
+esac
+
+# -DMAXSIG=38 maximum signal number
+# -DOEMVS is used in place of #ifdef __MVS__ in certain places.
+# -D_OE_SOCKETS alters system headers.
+# -D_XOPEN_SOURCE_EXTENDEDA alters system headers.
+# c89 hides most of the useful header stuff, _ALL_SOURCE turns it on again.
# YYDYNAMIC ensures that the OS/390 yacc generated parser is reentrant.
-# -DEBCDIC should come from Configure.
-ccflags='-DMAXSIG=38 -DOEMVS -D_OE_SOCKETS -D_XOPEN_SOURCE_EXTENDED -D_ALL_SOURCE -DYYDYNAMIC'
-# Turning on optimization breaks perl
-optimize='none'
+# -DEBCDIC should come from Configure and need not be mentioned here.
+# Prepend your favorites with Configure -Dccflags=your_favorites
+case "$ccflags" in
+'') ccflags='-DMAXSIG=38 -DOEMVS -D_OE_SOCKETS -D_XOPEN_SOURCE_EXTENDED -D_ALL_SOURCE -DYYDYNAMIC' ;;
+*) ccflags="$ccflags -DMAXSIG=38 -DOEMVS -D_OE_SOCKETS -D_XOPEN_SOURCE_EXTENDED -D_ALL_SOURCE -DYYDYNAMIC" ;;
+esac
-alignbytes=8
+# Turning on optimization breaks perl.
+# You can override this with Configure -Doptimize='-O' or somesuch.
+case "$optimize" in
+'') optimize='none' ;;
+esac
+
+# To link via definition side decks we need the dll option
+# You can override this with Configure -Ucccdlflags or somesuch.
+case "$cccdlflags" in
+'') cccdlflags='-W 0,dll' ;;
+esac
+
+case "$so" in
+'') so='a' ;;
+esac
-usemymalloc='n'
+case "$alignbytes" in
+'') alignbytes=8 ;;
+esac
-so='a'
+case "$usemymalloc" in
+'') usemymalloc='n' ;;
+esac
# On OS/390, libc.a doesn't really hold anything at all,
# so running nm on it is pretty useless.
-usenm='n'
-
-# Dynamic loading doesn't work on OS/390 quite yet
-usedl='n'
-dlext='none'
+# You can override this with Configure -Dusenm.
+case "$usenm" in
+'') usenm='false' ;;
+esac
-# Configure can't figure this out for some reason
-d_shmatprototype='define'
+# Dynamic loading doesn't work on OS/390 quite yet.
+# However the easiest way to experiment with dynamic loading is with:
+# Configure -Dusedl
+# You can even override some of this with things like:
+# Configure -Dusedl -Ddlext=so -Ddlsrc=dl_dllload.xs.
+case "$usedl" in
+'')
+ usedl='n'
+ case "$dlext" in
+ '') dlext='none' ;;
+ esac
+ ;;
+define)
+ case "$useshrplib" in
+ '') useshrplib='true' ;;
+ esac
+ case "$dlext" in
+ '') dlext='dll' ;;
+ esac
+ case "$dlsrc" in
+ '') dlsrc='dl_dllload.xs' ;;
+ esac
+ so='dll'
+ libperl='libperl.dll'
+ ccflags="$ccflags -D_SHR_ENVIRON -DPERL_EXTERNAL_GLOB -Wc,dll"
+ cccdlflags='-c -Wc,dll,EXPORTALL'
+ # You might add '-Wl,EDIT=NO' to get rid of the symbol
+ # information at the end of the executable.
+ #
+ # The following will need to be modified for the installed libperl.x
+ ccdlflags="-W l,dll `pwd`/libperl.x"
+ ldflags=''
+ lddlflags='-W l,dll'
+ ;;
+esac
+# even on static builds using LIBPATH should be OK.
+case "$ldlibpthname" in
+'') ldlibpthname=LIBPATH ;;
+esac
-usenm='false'
-i_time='define'
-i_systime='define'
+# Header files to include.
+# You can override these with Configure -Ui_time -Ui_systime.
+case "$i_time" in
+'') i_time='define' ;;
+esac
+case "$i_systime" in
+'') i_systime='define' ;;
+esac
# (from aix.sh)
# uname -m output is too specific and not appropriate here
# osname should come from Configure
-#
+# You can override this with Configure -Darchname='s390' but please don't.
case "$archname" in
'') archname="$osname" ;;
esac
-archobjs=ebcdic.o
+# Architecture related object files.
+# ebcdic.c contains special \cX mapping code for EBCDIC char sets.
+# Prepend your preference with Configure -Darchobs=your_preference.o.
+case "$archname" in
+'') archobjs="ebcdic.o" ;;
+*) archobjs="$archobjs ebcdic.o" ;;
+esac
-# We have our own cppstdin.
-echo 'cat >.$$.c; '"$cc"' -E -Wc,NOLOC ${1+"$@"} .$$.c; rm .$$.c' > cppstdin
+# We have our own cppstdin script. This is not a variable since
+# Configure sees the presence of the script file.
+# We put system header -D definitions in so that Configure
+# can find the shmat() prototype in <sys/shm.h> and various
+# other things. Unfortunately, cppflags occurs too late to be of
+# value external to the script. This may need to be revisited
+# under a compiler other than c89.
+echo 'cat >.$$.c; '"$cc"' -D_OE_SOCKETS -D_XOPEN_SOURCE_EXTENDED -D_ALL_SOURCE -E -Wc,NOLOC ${1+"$@"} .$$.c; rm .$$.c' > cppstdin
#
-# Note that Makefile.SH employs a bare yacc to generate
+# Note that Makefile.SH employs a bare yacc command to generate
# perly.[hc] and a2p.[hc], hence you may wish to:
#
# alias yacc='myyacc'
#
# To get ANSI C, we need to use c89, and ld does not exist
-cc='c89'
-ld='c89'
+# You can override this with Configure -Dcc=gcc -Dld=ld.
+case "$cc" in
+'') cc='c89' ;;
+esac
+case "$ld" in
+'') ld='c89' ;;
+esac
# C-Flags:
-ccflags='-K enum_long,llm_case_lower,llm_keep,no_integer_overflow -DPOSIX_BC -DUSE_PURE_BISON -D_XOPEN_SOURCE_EXTENDED'
+# -DPOSIX_BC
+# -DUSE_PURE_BISON
+# -D_XOPEN_SOURCE_EXTENDED alters system headers.
+# Prepend your favorites with Configure -Dccflags=your_favorites
+case "$ccflags" in
+'') ccflags='-K enum_long,llm_case_lower,llm_keep,no_integer_overflow -DPOSIX_BC -DUSE_PURE_BISON -D_XOPEN_SOURCE_EXTENDED' ;;
+*) ccflags='$ccflags -Kenum_long,llm_case_lower,llm_keep,no_integer_overflow -DPOSIX_BC -DUSE_PURE_BISON -D_XOPEN_SOURCE_EXTENDED' ;;
+esac
+
+# ccdlflags have yet to be determined.
+#case "$ccdlflags" in
+#'') ccdlflags='-c' ;;
+#esac
+
+# cccdlflags have yet to be determined.
+#case "$cccdlflags" in
+#'') cccdlflags='' ;;
+#esac
+
+# ldflags have yet to be determined.
+#case "$ldflags" in
+#'') ldflags='' ;;
+#esac
+
+# lddlflags have yet to be determined.
+#case "$lddlflags" in
+#'') lddlflags='' ;;
+#esac
# Flags on a RISC-Host (SUNRISE):
if [ -n "`bs2cmd SHOW-SYSTEM-INFO | egrep 'HSI-ATT.*TYPE.*SR'`" ]; then
fi
# Turning on optimization breaks perl (CORE-DUMP):
-optimize='none'
+# You can override this with Configure -Doptimize='-O' or somesuch.
+case "$optimize" in
+'') optimize='none' ;;
+esac
# we don''t use dynamic memorys (yet):
-so='none'
-usedl='no'
-dlext='none'
+case "$so" in
+'') so='none' ;;
+esac
+
+case "$usemymalloc" in
+'') usemymalloc='n' ;;
+esac
# On BS2000/Posix, libc.a does not really hold anything at all,
# so running nm on it is pretty useless.
-usenm='no'
-
-# other Options:
-
-usemymalloc='no'
+# You can override this with Configure -Dusenm.
+case "$usenm" in
+'') usenm='false' ;;
+esac
-archobjs=ebcdic.o
+# Dynamic loading doesn't work on OS/390 quite yet.
+# You can override this with
+# Configure -Dusedl -Ddlext=.so -Ddlsrc=dl_dllload.xs.
+case "$usedl" in
+'') usedl='n' ;;
+esac
+case "$dlext" in
+'') dlext='none' ;;
+esac
+#case "$dlsrc" in
+#'') dlsrc='none' ;;
+#esac
+#case "$ldlibpthname" in
+#'') ldlibpthname=LIBPATH ;;
+#esac
+# Architecture related object files.
+# ebcdic.c contains special \cX mapping code for EBCDIC char sets.
+# Prepend your preference with Configure -Darchobs=your_preference.o.
+case "$archname" in
+'') archobjs="ebcdic.o" ;;
+*) archobjs="$archobjs ebcdic.o" ;;
+esac
# files under the archlib directory.
my %archpms = (
Config => 1,
+ lib => 1,
);
if ($^O eq 'dos') {
}
# ignore patch backups, RCS files, emacs backup & temp files and the
- # .exists files.
- return if $name =~ m{\.orig$|~$|^#.+#$|,v$|^\.exists};
+ # .exists files, and .PL files.
+ return if $name =~ m{\.orig$|~$|^#.+#$|,v$|^\.exists|\.PL$};
$name = "$dir/$name" if $dir ne '';
PERLVAR(Ixpvbm_arenaroot,XPVBM*) /* list of allocated xpvbm areas */
PERLVAR(Ihe_arenaroot, XPV*) /* list of allocated he areas */
+PERLVAR(Ipsig_pend, int *) /* per-signal "count" of pending */
+PERLVARI(Isig_pending, int,0) /* Number if highest signal pending */
+
+
/* New variables must be added to the very end for binary compatibility.
* XSUB.h provides wrapper functions via perlapi.h that make this
* irrelevant, but not all code may be expected to #include XSUB.h. */
#define KEY_qq 154
#define KEY_qr 155
#define KEY_quotemeta 156
-#define KEY_qw 157
-#define KEY_qx 158
-#define KEY_rand 159
-#define KEY_read 160
-#define KEY_readdir 161
-#define KEY_readline 162
-#define KEY_readlink 163
-#define KEY_readpipe 164
-#define KEY_recv 165
-#define KEY_redo 166
-#define KEY_ref 167
-#define KEY_rename 168
-#define KEY_require 169
-#define KEY_reset 170
-#define KEY_return 171
-#define KEY_reverse 172
-#define KEY_rewinddir 173
-#define KEY_rindex 174
-#define KEY_rmdir 175
-#define KEY_s 176
-#define KEY_scalar 177
-#define KEY_seek 178
-#define KEY_seekdir 179
-#define KEY_select 180
-#define KEY_semctl 181
-#define KEY_semget 182
-#define KEY_semop 183
-#define KEY_send 184
-#define KEY_setgrent 185
-#define KEY_sethostent 186
-#define KEY_setnetent 187
-#define KEY_setpgrp 188
-#define KEY_setpriority 189
-#define KEY_setprotoent 190
-#define KEY_setpwent 191
-#define KEY_setservent 192
-#define KEY_setsockopt 193
-#define KEY_shift 194
-#define KEY_shmctl 195
-#define KEY_shmget 196
-#define KEY_shmread 197
-#define KEY_shmwrite 198
-#define KEY_shutdown 199
-#define KEY_sin 200
-#define KEY_sleep 201
-#define KEY_socket 202
-#define KEY_socketpair 203
-#define KEY_sort 204
-#define KEY_splice 205
-#define KEY_split 206
-#define KEY_sprintf 207
-#define KEY_sqrt 208
-#define KEY_srand 209
-#define KEY_stat 210
-#define KEY_study 211
-#define KEY_sub 212
-#define KEY_substr 213
-#define KEY_symlink 214
-#define KEY_syscall 215
-#define KEY_sysopen 216
-#define KEY_sysread 217
-#define KEY_sysseek 218
-#define KEY_system 219
-#define KEY_syswrite 220
-#define KEY_tell 221
-#define KEY_telldir 222
-#define KEY_tie 223
-#define KEY_tied 224
-#define KEY_time 225
-#define KEY_times 226
-#define KEY_tr 227
-#define KEY_truncate 228
-#define KEY_uc 229
-#define KEY_ucfirst 230
-#define KEY_umask 231
-#define KEY_undef 232
-#define KEY_unless 233
-#define KEY_unlink 234
-#define KEY_unpack 235
-#define KEY_unshift 236
-#define KEY_untie 237
-#define KEY_until 238
-#define KEY_use 239
-#define KEY_utime 240
-#define KEY_values 241
-#define KEY_vec 242
-#define KEY_wait 243
-#define KEY_waitpid 244
-#define KEY_wantarray 245
-#define KEY_warn 246
-#define KEY_while 247
-#define KEY_write 248
-#define KEY_x 249
-#define KEY_xor 250
-#define KEY_y 251
+#define KEY_qu 157
+#define KEY_qw 158
+#define KEY_qx 159
+#define KEY_rand 160
+#define KEY_read 161
+#define KEY_readdir 162
+#define KEY_readline 163
+#define KEY_readlink 164
+#define KEY_readpipe 165
+#define KEY_recv 166
+#define KEY_redo 167
+#define KEY_ref 168
+#define KEY_rename 169
+#define KEY_require 170
+#define KEY_reset 171
+#define KEY_return 172
+#define KEY_reverse 173
+#define KEY_rewinddir 174
+#define KEY_rindex 175
+#define KEY_rmdir 176
+#define KEY_s 177
+#define KEY_scalar 178
+#define KEY_seek 179
+#define KEY_seekdir 180
+#define KEY_select 181
+#define KEY_semctl 182
+#define KEY_semget 183
+#define KEY_semop 184
+#define KEY_send 185
+#define KEY_setgrent 186
+#define KEY_sethostent 187
+#define KEY_setnetent 188
+#define KEY_setpgrp 189
+#define KEY_setpriority 190
+#define KEY_setprotoent 191
+#define KEY_setpwent 192
+#define KEY_setservent 193
+#define KEY_setsockopt 194
+#define KEY_shift 195
+#define KEY_shmctl 196
+#define KEY_shmget 197
+#define KEY_shmread 198
+#define KEY_shmwrite 199
+#define KEY_shutdown 200
+#define KEY_sin 201
+#define KEY_sleep 202
+#define KEY_socket 203
+#define KEY_socketpair 204
+#define KEY_sort 205
+#define KEY_splice 206
+#define KEY_split 207
+#define KEY_sprintf 208
+#define KEY_sqrt 209
+#define KEY_srand 210
+#define KEY_stat 211
+#define KEY_study 212
+#define KEY_sub 213
+#define KEY_substr 214
+#define KEY_symlink 215
+#define KEY_syscall 216
+#define KEY_sysopen 217
+#define KEY_sysread 218
+#define KEY_sysseek 219
+#define KEY_system 220
+#define KEY_syswrite 221
+#define KEY_tell 222
+#define KEY_telldir 223
+#define KEY_tie 224
+#define KEY_tied 225
+#define KEY_time 226
+#define KEY_times 227
+#define KEY_tr 228
+#define KEY_truncate 229
+#define KEY_uc 230
+#define KEY_ucfirst 231
+#define KEY_umask 232
+#define KEY_undef 233
+#define KEY_unless 234
+#define KEY_unlink 235
+#define KEY_unpack 236
+#define KEY_unshift 237
+#define KEY_untie 238
+#define KEY_until 239
+#define KEY_use 240
+#define KEY_utime 241
+#define KEY_values 242
+#define KEY_vec 243
+#define KEY_wait 244
+#define KEY_waitpid 245
+#define KEY_wantarray 246
+#define KEY_warn 247
+#define KEY_while 248
+#define KEY_write 249
+#define KEY_x 250
+#define KEY_xor 251
+#define KEY_y 252
qq
qr
quotemeta
+qu
qw
qx
rand
$zero = 0;
+# overcome a floating point problem on certain osnames (posix-bc, os390)
+BEGIN {
+ my $x = 100000.0;
+ my $use_mult = int($x*1e-5)*1e5 == $x ? 1 : 0;
+}
# normalize string form of number. Strip leading zeros. Strip any
# white space and add a sign, if missing.
($car, $cty) = (0, $[);
for $y (@y) {
$prod = $x * $y + ($prod[$cty] || 0) + $car;
+ if ($use_mult) {
$prod[$cty++] =
$prod - ($car = int($prod * 1e-5)) * 1e5;
+ }
+ else {
+ $prod[$cty++] =
+ $prod - ($car = int($prod / 1e5)) * 1e5;
+ }
}
$prod[$cty] += $car if $car;
$x = shift @prod;
if (($dd = int(1e5/($y[$#y]+1))) != 1) {
for $x (@x) {
$x = $x * $dd + $car;
+ if ($use_mult) {
$x -= ($car = int($x * 1e-5)) * 1e5;
+ }
+ else {
+ $x -= ($car = int($x / 1e5)) * 1e5;
+ }
}
push(@x, $car); $car = 0;
for $y (@y) {
$y = $y * $dd + $car;
+ if ($use_mult) {
$y -= ($car = int($y * 1e-5)) * 1e5;
+ }
+ else {
+ $y -= ($car = int($y / 1e5)) * 1e5;
+ }
}
}
else {
($car, $bar) = (0,0);
for ($y = $[, $x = $#x-$#y+$[-1; $y <= $#y; ++$y,++$x) {
$prd = $q * $y[$y] + $car;
+ if ($use_mult) {
$prd -= ($car = int($prd * 1e-5)) * 1e5;
+ }
+ else {
+ $prd -= ($car = int($prd / 1e5)) * 1e5;
+ }
$x[$x] += 1e5 if ($bar = (($x[$x] -= $prd + $bar) < 0));
}
if ($x[$#x] < $car + $bar) {
# Pod::Man -- Convert POD data to formatted *roff input.
-# $Id: Man.pm,v 1.12 2000/12/25 12:56:12 eagle Exp $
+# $Id: Man.pm,v 1.14 2001/01/16 13:39:45 eagle Exp $
#
-# Copyright 1999, 2000 by Russ Allbery <rra@stanford.edu>
+# Copyright 1999, 2000, 2001 by Russ Allbery <rra@stanford.edu>
#
# This program is free software; you can redistribute it and/or modify it
# under the same terms as Perl itself.
# Perl core and too many things could munge CVS magic revision strings.
# This number should ideally be the same as the CVS revision in podlators,
# however.
-$VERSION = 1.12;
+$VERSION = 1.14;
############################################################################
}
}
+ # If $name contains spaces, quote it; this mostly comes up in the case
+ # of input from stdin.
+ $name = '"' . $name . '"' if ($name =~ /\s/);
+
# Modification date header. Try to use the modification time of our
# input.
if (!defined $$self{date}) {
local $_ = $self->parse (@_);
s/\s+$//;
s/\\s-?\d//g;
+ s/\s*\n\s*/ /g;
if ($$self{ITEMS} > 1) {
$$self{ITEMS} = 0;
$self->output (".PD\n");
my $self = shift;
local $_ = $self->parse (@_);
s/\s+$//;
+ s/\s*\n\s*/ /g;
if ($$self{ITEMS} > 1) {
$$self{ITEMS} = 0;
$self->output (".PD\n");
my $self = shift;
local $_ = $self->parse (@_);
s/\s+$//;
+ s/\s*\n\s*/ /g;
if ($$self{ITEMS} > 1) {
$$self{ITEMS} = 0;
$self->output (".PD\n");
my $self = shift;
local $_ = $self->parse (@_);
s/\s+$//;
+ s/\s*\n\s*/ /g;
if ($$self{ITEMS} > 1) {
$$self{ITEMS} = 0;
$self->output (".PD\n");
# bnorm(BINT) return BINT normalization
#
+# overcome a floating point problem on certain osnames (posix-bc, os390)
+BEGIN {
+ my $x = 100000.0;
+ my $use_mult = int($x*1e-5)*1e5 == $x ? 1 : 0;
+}
+
$zero = 0;
\f
($car, $cty) = (0, $[);
for $y (@y) {
$prod = $x * $y + $prod[$cty] + $car;
- $prod[$cty++] =
- $prod - ($car = int($prod * 1e-5)) * 1e5;
+ if ($use_mult) {
+ $prod[$cty++] =
+ $prod - ($car = int($prod * 1e-5)) * 1e5;
+ }
+ else {
+ $prod[$cty++] =
+ $prod - ($car = int($prod / 1e5)) * 1e5;
+ }
}
$prod[$cty] += $car if $car;
$x = shift @prod;
if (($dd = int(1e5/($y[$#y]+1))) != 1) {
for $x (@x) {
$x = $x * $dd + $car;
+ if ($use_mult) {
$x -= ($car = int($x * 1e-5)) * 1e5;
+ }
+ else {
+ $x -= ($car = int($x / 1e5)) * 1e5;
+ }
}
push(@x, $car); $car = 0;
for $y (@y) {
$y = $y * $dd + $car;
+ if ($use_mult) {
$y -= ($car = int($y * 1e-5)) * 1e5;
+ }
+ else {
+ $y -= ($car = int($y / 1e5)) * 1e5;
+ }
}
}
else {
($car, $bar) = (0,0);
for ($y = $[, $x = $#x-$#y+$[-1; $y <= $#y; ++$y,++$x) {
$prd = $q * $y[$y] + $car;
+ if ($use_mult) {
$prd -= ($car = int($prd * 1e-5)) * 1e5;
+ }
+ else {
+ $prd -= ($car = int($prd / 1e5)) * 1e5;
+ }
$x[$x] += 1e5 if ($bar = (($x[$x] -= $prd + $bar) < 0));
}
if ($x[$#x] < $car + $bar) {
# Populate hash in non-PerlIO case
%layers = (crlf => 1, raw => 0) unless (@layers);
+# warn join(',',keys %layers);
+
our $VERSION = '1.00';
sub import {
- shift;
- die "`use open' needs explicit list of disciplines" unless @_;
+ my ($class,@args) = @_;
+ croak("`use open' needs explicit list of disciplines") unless @args;
$^H |= $open::hint_bits;
my ($in,$out) = split(/\0/,(${^OPEN} || '\0'));
my @in = split(/\s+/,$in);
my @out = split(/\s+/,$out);
- while (@_) {
- my $type = shift;
- my $discp = shift;
+ while (@args) {
+ my $type = shift(@args);
+ my $discp = shift(@args);
my @val;
- foreach my $layer (split(/\s+:?/,$discp)) {
+ foreach my $layer (split(/\s+/,$discp)) {
+ $layer =~ s/^://;
unless(exists $layers{$layer}) {
- croak "Unknown discipline layer '$layer'";
+ carp("Unknown discipline layer '$layer'");
}
push(@val,":$layer");
if ($layer =~ /^(crlf|raw)$/) {
-package unicode:distinct;
+package unicode::distinct;
our $VERSION = '0.01';
moremagic = mg->mg_moremagic;
if (vtbl && vtbl->svt_free)
CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
- if (mg->mg_ptr && mg->mg_type != 'g')
+ if (mg->mg_ptr && mg->mg_type != 'g') {
if (mg->mg_len >= 0)
Safefree(mg->mg_ptr);
else if (mg->mg_len == HEf_SVKEY)
SvREFCNT_dec((SV*)mg->mg_ptr);
+ }
if (mg->mg_flags & MGf_REFCOUNTED)
SvREFCNT_dec(mg->mg_obj);
Safefree(mg);
return 0;
}
+
#if !defined(NSIG) || defined(M_UNIX) || defined(M_XENIX)
#include <signal.h>
#endif
i = Perl_utf8_length(aTHX_ (U8*)s, (U8*)send);
}
if (i < 0)
- Perl_croak(aTHX_ "panic: magic_len: %d", i);
+ Perl_croak(aTHX_ "panic: magic_len: %"IVdf, (IV)i);
return i;
}
}
return 0;
}
+void
+Perl_raise_signal(pTHX_ int sig)
+{
+ /* Set a flag to say this signal is pending */
+ PL_psig_pend[sig]++;
+ /* And one to say _a_ signal is pending */
+ PL_sig_pending = 1;
+}
+
+Signal_t
+Perl_csighandler(int sig)
+{
+#ifdef PERL_OLD_SIGNALS
+ /* Call the perl level handler now with risk we may be in malloc() etc. */
+ (*PL_sighandlerp)(sig);
+#else
+ dTHX;
+ Perl_raise_signal(aTHX_ sig);
+#endif
+}
+
+void
+Perl_despatch_signals(pTHX)
+{
+ int sig;
+ PL_sig_pending = 0;
+ for (sig = 1; sig < SIG_SIZE; sig++) {
+ if (PL_psig_pend[sig]) {
+ PL_psig_pend[sig] = 0;
+ (*PL_sighandlerp)(sig);
+ }
+ }
+}
+
int
Perl_magic_setsig(pTHX_ SV *sv, MAGIC *mg)
{
}
if (SvTYPE(sv) == SVt_PVGV || SvROK(sv)) {
if (i)
- (void)rsignal(i, PL_sighandlerp);
+ (void)rsignal(i, &Perl_csighandler);
else
*svp = SvREFCNT_inc(sv);
return 0;
if (!strchr(s,':') && !strchr(s,'\''))
sv_insert(sv, 0, 0, "main::", 6);
if (i)
- (void)rsignal(i, PL_sighandlerp);
+ (void)rsignal(i, &Perl_csighandler);
else
*svp = SvREFCNT_inc(sv);
}
I32 offs = LvTARGOFF(sv);
I32 rem = LvTARGLEN(sv);
+ if (SvUTF8(lsv))
+ sv_pos_u2b(lsv, &offs, &rem);
if (offs > len)
offs = len;
if (rem + offs > len)
rem = len - offs;
sv_setpvn(sv, tmps + offs, (STRLEN)rem);
- if (DO_UTF8(lsv))
+ if (SvUTF8(lsv))
SvUTF8_on(sv);
return 0;
}
Perl_magic_setsubstr(pTHX_ SV *sv, MAGIC *mg)
{
STRLEN len;
- char *tmps = SvPV(sv,len);
+ char *tmps = SvPV(sv, len);
+ SV *lsv = LvTARG(sv);
+ I32 lvoff = LvTARGOFF(sv);
+ I32 lvlen = LvTARGLEN(sv);
+
if (DO_UTF8(sv)) {
- sv_utf8_upgrade(LvTARG(sv));
- sv_insert(LvTARG(sv),LvTARGOFF(sv),LvTARGLEN(sv), tmps, len);
- SvUTF8_on(LvTARG(sv));
+ sv_utf8_upgrade(lsv);
+ sv_pos_u2b(lsv, &lvoff, &lvlen);
+ sv_insert(lsv, lvoff, lvlen, tmps, len);
+ SvUTF8_on(lsv);
+ }
+ else if (SvUTF8(lsv)) {
+ sv_pos_u2b(lsv, &lvoff, &lvlen);
+ tmps = (char*)bytes_to_utf8((U8*)tmps, &len);
+ sv_insert(lsv, lvoff, lvlen, tmps, len);
+ Safefree(tmps);
}
else
- sv_insert(LvTARG(sv),LvTARGOFF(sv),LvTARGLEN(sv), tmps, len);
+ sv_insert(lsv, lvoff, lvlen, tmps, len);
return 0;
}
PUSHs(sv);
PUTBACK;
- call_sv((SV*)cv, G_DISCARD);
+ call_sv((SV*)cv, G_DISCARD|G_EVAL);
POPSTACK;
+ if (SvTRUE(ERRSV)) {
+#ifdef HAS_SIGPROCMASK
+ /* Handler "died", for example to get out of a restart-able read().
+ * Before we re-do that on its behalf re-enable the signal which was
+ * blocked by the system when we entered.
+ */
+ sigset_t set;
+ sigemptyset(&set);
+ sigaddset(&set,sig);
+ sigprocmask(SIG_UNBLOCK, &set, NULL);
+#else
+ /* Not clear if this will work */
+ (void)rsignal(sig, SIG_IGN);
+ (void)rsignal(sig, &Perl_csighandler);
+#endif
+ Perl_die(aTHX_ Nullch);
+ }
cleanup:
if (flags & 1)
PL_savestack_ix -= 8; /* Unprotect save in progress. */
#define Perl_do_open9 pPerl->Perl_do_open9
#undef do_open9
#define do_open9 Perl_do_open9
+#undef Perl_do_openn
+#define Perl_do_openn pPerl->Perl_do_openn
+#undef do_openn
+#define do_openn Perl_do_openn
#undef Perl_dowantarray
#define Perl_dowantarray pPerl->Perl_dowantarray
#undef dowantarray
#undef whichsig
#define whichsig Perl_whichsig
#ifdef USE_PURE_BISON
-#else
#endif
#if defined(MYMALLOC)
#undef Perl_dump_mstats
: CALL_FPTR(PL_check[type])(aTHX_ (OP*)o))
#define PAD_MAX 999999999
+#define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2)
STATIC char*
S_gv_ename(pTHX_ GV *gv)
SvPV_nolen(cSVOPo_sv)));
}
+STATIC U8*
+S_trlist_upgrade(pTHX_ U8** sp, U8** ep)
+{
+ U8 *s = *sp;
+ U8 *e = *ep;
+ U8 *d;
+
+ Newz(801, d, (e - s) * 2, U8);
+ *sp = d;
+
+ while (s < e) {
+ if (*s < 0x80 || *s == 0xff)
+ *d++ = *s++;
+ else {
+ U8 c = *s++;
+ *d++ = ((c >> 6) | 0xc0);
+ *d++ = ((c & 0x3f) | 0x80);
+ }
+ }
+ *ep = d;
+ return *sp;
+}
+
+
/* "register" allocation */
PADOFFSET
}
else { /* lvalue subroutine call */
o->op_private |= OPpLVAL_INTRO;
+ PL_modcount = RETURN_UNLIMITED_NUMBER;
if (type == OP_GREPSTART || type == OP_ENTERSUB || type == OP_REFGEN) {
/* Backward compatibility mode: */
o->op_private |= OPpENTERSUB_INARGS;
if (!type && cUNOPo->op_first->op_type != OP_GV)
Perl_croak(aTHX_ "Can't localize through a reference");
if (type == OP_REFGEN && o->op_flags & OPf_PARENS) {
- PL_modcount = 10000;
+ PL_modcount = RETURN_UNLIMITED_NUMBER;
return o; /* Treat \(@foo) like ordinary list. */
}
/* FALL THROUGH */
goto nomod;
ref(cUNOPo->op_first, o->op_type);
/* FALL THROUGH */
- case OP_AASSIGN:
case OP_ASLICE:
case OP_HSLICE:
+ if (type == OP_LEAVESUBLV)
+ o->op_private |= OPpMAYBE_LVSUB;
+ /* FALL THROUGH */
+ case OP_AASSIGN:
case OP_NEXTSTATE:
case OP_DBSTATE:
case OP_REFGEN:
case OP_CHOMP:
- PL_modcount = 10000;
+ PL_modcount = RETURN_UNLIMITED_NUMBER;
break;
case OP_RV2SV:
if (!type && cUNOPo->op_first->op_type != OP_GV)
case OP_PADAV:
case OP_PADHV:
- PL_modcount = 10000;
+ PL_modcount = RETURN_UNLIMITED_NUMBER;
if (type == OP_REFGEN && o->op_flags & OPf_PARENS)
return o; /* Treat \(@foo) like ordinary list. */
if (scalar_mod_type(o, type))
goto nomod;
+ if (type == OP_LEAVESUBLV)
+ o->op_private |= OPpMAYBE_LVSUB;
/* FALL THROUGH */
case OP_PADSV:
PL_modcount++;
/* FALL THROUGH */
case OP_POS:
case OP_VEC:
+ if (type == OP_LEAVESUBLV)
+ o->op_private |= OPpMAYBE_LVSUB;
lvalue_func:
pad_free(o->op_targ);
o->op_targ = pad_alloc(o->op_type, SVs_PADMY);
if (type == OP_ENTERSUB &&
!(o->op_private & (OPpLVAL_INTRO | OPpDEREF)))
o->op_private |= OPpLVAL_DEFER;
+ if (type == OP_LEAVESUBLV)
+ o->op_private |= OPpMAYBE_LVSUB;
PL_modcount++;
break;
case OP_SCOPE:
case OP_LEAVE:
case OP_ENTER:
+ case OP_LINESEQ:
if (o->op_flags & OPf_KIDS)
mod(cLISTOPo->op_last, type);
break;
for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
mod(kid, type);
break;
+
+ case OP_RETURN:
+ if (type != OP_LEAVESUBLV)
+ goto nomod;
+ break; /* mod()ing was handled by ck_return() */
}
- o->op_flags |= OPf_MOD;
+ if (type != OP_LEAVESUBLV)
+ o->op_flags |= OPf_MOD;
if (type == OP_AASSIGN || type == OP_SASSIGN)
o->op_flags |= OPf_SPECIAL|OPf_REF;
o->op_flags &= ~OPf_SPECIAL;
PL_hints |= HINT_BLOCK_SCOPE;
}
- else if (type != OP_GREPSTART && type != OP_ENTERSUB)
+ else if (type != OP_GREPSTART && type != OP_ENTERSUB
+ && type != OP_LEAVESUBLV)
o->op_flags |= OPf_REF;
return o;
}
if (o->op_type != type)
return o;
- if (cLISTOPo->op_children < 7) {
- /* XXX do we really need to do this if we're done appending?? */
- for (kid = cLISTOPo->op_first; kid; kid = kid->op_sibling)
- last = kid;
- cLISTOPo->op_last = last; /* in case check substituted last arg */
- }
-
return fold_constants(o);
}
((LISTOP*)first)->op_first = last;
}
((LISTOP*)first)->op_last = last;
- ((LISTOP*)first)->op_children++;
return first;
}
first->op_last->op_sibling = last->op_first;
first->op_last = last->op_last;
- first->op_children += last->op_children;
- if (first->op_children)
- first->op_flags |= OPf_KIDS;
+ first->op_flags |= (last->op_flags & OPf_KIDS);
#ifdef PL_OP_SLAB_ALLOC
#else
first->op_sibling = ((LISTOP*)last)->op_first;
((LISTOP*)last)->op_first = first;
}
- ((LISTOP*)last)->op_children++;
+ last->op_flags |= OPf_KIDS;
return last;
}
listop->op_type = type;
listop->op_ppaddr = PL_ppaddr[type];
- listop->op_children = (first != 0) + (last != 0);
+ if (first || last)
+ flags |= OPf_KIDS;
listop->op_flags = flags;
if (!last && first)
if (!last)
listop->op_last = pushop;
}
- else if (listop->op_children)
- listop->op_flags |= OPf_KIDS;
return (OP*)listop;
}
SV *rstr = ((SVOP*)repl)->op_sv;
STRLEN tlen;
STRLEN rlen;
- register U8 *t = (U8*)SvPV(tstr, tlen);
- register U8 *r = (U8*)SvPV(rstr, rlen);
+ U8 *t = (U8*)SvPV(tstr, tlen);
+ U8 *r = (U8*)SvPV(rstr, rlen);
register I32 i;
register I32 j;
I32 del;
I32 complement;
I32 squash;
+ I32 grows = 0;
register short *tbl;
complement = o->op_private & OPpTRANS_COMPLEMENT;
I32 none = 0;
U32 max = 0;
I32 bits;
- I32 grows = 0;
I32 havefinal = 0;
U32 final;
I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
+ U8* tsave = from_utf ? NULL : trlist_upgrade(&t, &tend);
+ U8* rsave = to_utf ? NULL : trlist_upgrade(&r, &rend);
if (complement) {
U8 tmpbuf[UTF8_MAXLEN+1];
if (rfirst + diff > max)
max = rfirst + diff;
rfirst += diff + 1;
- if (!grows) {
- if (rfirst <= 0x80)
- ;
- else if (rfirst <= 0x800)
- grows |= (tfirst < 0x80);
- else if (rfirst <= 0x10000)
- grows |= (tfirst < 0x800);
- else if (rfirst <= 0x200000)
- grows |= (tfirst < 0x10000);
- else if (rfirst <= 0x4000000)
- grows |= (tfirst < 0x200000);
- else if (rfirst <= 0x80000000)
- grows |= (tfirst < 0x4000000);
- }
+ if (!grows)
+ grows = (UNISKIP(tfirst) < UNISKIP(rfirst));
}
tfirst += diff + 1;
}
(void)hv_store((HV*)SvRV((cSVOPo->op_sv)), "FINAL", 5,
newSVuv((UV)final), 0);
- if (grows && to_utf)
+ if (grows)
o->op_private |= OPpTRANS_GROWS;
+ if (tsave)
+ Safefree(tsave);
+ if (rsave)
+ Safefree(rsave);
+
op_free(expr);
op_free(repl);
return o;
else
tbl[i] = i;
}
- else
+ else {
+ if (i < 128 && r[j] >= 128)
+ grows = 1;
tbl[i] = r[j++];
+ }
}
}
}
}
--j;
}
- if (tbl[t[i]] == -1)
+ if (tbl[t[i]] == -1) {
+ if (t[i] < 128 && r[j] >= 128)
+ grows = 1;
tbl[t[i]] = r[j];
+ }
}
}
+ if (grows)
+ o->op_private |= OPpTRANS_GROWS;
op_free(expr);
op_free(repl);
}
}
else {
- if (PL_modcount < 10000 &&
+ if (PL_modcount < RETURN_UNLIMITED_NUMBER &&
((LISTOP*)right)->op_last->op_type == OP_CONST)
{
SV *sv = ((SVOP*)((LISTOP*)right)->op_last)->op_sv;
av_store(PL_comppad_name, AvFILLp(PL_comppad), Nullsv);
if (CvLVALUE(cv)) {
- CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0, scalarseq(block));
+ CvROOT(cv) = newUNOP(OP_LEAVESUBLV, 0,
+ mod(scalarseq(block), OP_LEAVESUBLV));
}
else {
CvROOT(cv) = newUNOP(OP_LEAVESUB, 0, scalarseq(block));
return ck_fun(o);
}
+OP *
+Perl_ck_return(pTHX_ OP *o)
+{
+ OP *kid;
+ if (CvLVALUE(PL_compcv)) {
+ for (kid = cLISTOPo->op_first->op_sibling; kid; kid = kid->op_sibling)
+ mod(kid, OP_LEAVESUBLV);
+ }
+ return o;
+}
+
#if 0
OP *
Perl_ck_retarget(pTHX_ OP *o)
kid = cLISTOPo->op_first->op_sibling;
cLISTOPo->op_first->op_sibling = kid->op_sibling; /* bypass old block */
op_free(kid); /* then delete it */
- cLISTOPo->op_children--;
}
OP *
{
register OP* oldop = 0;
STRLEN n_a;
- OP *last_composite = Nullop;
if (!o || o->op_seq)
return;
case OP_DBSTATE:
PL_curcop = ((COP*)o); /* for warnings */
o->op_seq = PL_op_seqmax++;
- last_composite = Nullop;
break;
case OP_CONST:
(PL_op = pop->op_next) &&
pop->op_next->op_type == OP_AELEM &&
!(pop->op_next->op_private &
- (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF)) &&
+ (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) &&
(i = SvIV(((SVOP*)pop)->op_sv) - PL_compiling.cop_arybase)
<= 255 &&
i >= 0)
break;
}
- case OP_RV2AV:
- case OP_RV2HV:
- if (!(o->op_flags & OPf_WANT)
- || (o->op_flags & OPf_WANT) == OPf_WANT_LIST)
- {
- last_composite = o;
- }
- o->op_seq = PL_op_seqmax++;
- break;
-
- case OP_RETURN:
- if (o->op_next && o->op_next->op_type != OP_LEAVESUBLV) {
- o->op_seq = PL_op_seqmax++;
- break;
- }
- /* FALL THROUGH */
-
- case OP_LEAVESUBLV:
- if (last_composite) {
- OP *r = last_composite;
-
- while (r->op_sibling)
- r = r->op_sibling;
- if (r->op_next == o
- || (r->op_next->op_type == OP_LIST
- && r->op_next->op_next == o))
- {
- if (last_composite->op_type == OP_RV2AV)
- yyerror("Lvalue subs returning arrays not implemented yet");
- else
- yyerror("Lvalue subs returning hashes not implemented yet");
- ;
- }
- }
- /* FALL THROUGH */
-
default:
o->op_seq = PL_op_seqmax++;
break;
/* OP_?ELEM only */
#define OPpLVAL_DEFER 16 /* Defer creation of array/hash elem */
/* OP_RV2?V, OP_GVSV only */
-#define OPpOUR_INTRO 16 /* Defer creation of array/hash elem */
+#define OPpOUR_INTRO 16 /* Variable was in an our() */
+ /* OP_RV2[AH]V, OP_PAD[AH]V, OP_[AH]ELEM */
+#define OPpMAYBE_LVSUB 8 /* We might be an lvalue to return */
/* for OP_RV2?V, lower bits carry hints (currently only HINT_STRICT_REFS) */
/* Private for OPs with TARGLEX */
BASEOP
OP * op_first;
OP * op_last;
- U32 op_children;
};
struct pmop {
BASEOP
OP * op_first;
OP * op_last;
- U32 op_children;
OP * op_pmreplroot;
OP * op_pmreplstart;
PMOP * op_pmnext; /* list of all scanpats */
BASEOP
OP * op_first;
OP * op_last;
- U32 op_children;
OP * op_redoop;
OP * op_nextop;
OP * op_lastop;
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
This file is built by opcode.pl from its data. Any changes made here
will be lost!
*/
"method lookup",
"subroutine entry",
"subroutine exit",
- "lvalue subroutine exit",
+ "lvalue subroutine return",
"caller",
"warn",
"die",
MEMBER_TO_FPTR(Perl_ck_null), /* iter */
MEMBER_TO_FPTR(Perl_ck_null), /* enterloop */
MEMBER_TO_FPTR(Perl_ck_null), /* leaveloop */
- MEMBER_TO_FPTR(Perl_ck_null), /* return */
+ MEMBER_TO_FPTR(Perl_ck_return), /* return */
MEMBER_TO_FPTR(Perl_ck_null), /* last */
MEMBER_TO_FPTR(Perl_ck_null), /* next */
MEMBER_TO_FPTR(Perl_ck_null), /* redo */
0x00001a44, /* dump */
0x00001a44, /* goto */
0x00013644, /* exit */
- 0x0052c81c, /* open */
+ 0x0052c81d, /* open */
0x0001d614, /* close */
0x000cc814, /* pipe_op */
0x0000d61c, /* fileno */
$i = 0;
print <<"END";
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
This file is built by opcode.pl from its data. Any changes made here
will be lost!
*/
END
print ON <<"END";
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
This file is built by opcode.pl from its data. Any changes made here
will be lost!
*/
for (@ops) {
my($safe_desc) = $desc{$_};
- # Have to escape double quotes and escape characters.
+ # Have to escape double quotes and escape characters.
$safe_desc =~ s/(^|[^\\])([\\"])/$1\\$2/g;
print qq(\t"$safe_desc",\n);
open PPSYM, '>pp.sym' or die "Error creating pp.sym: $!";
print PP <<"END";
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
This file is built by opcode.pl from its data. Any changes made here
will be lost!
*/
print PPSYM <<"END";
#
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
# This file is built by opcode.pl from its data. Any changes made here
# will be lost!
#
method method lookup ck_method d1
entersub subroutine entry ck_subr dmt1 L
leavesub subroutine exit ck_null 1
-leavesublv lvalue subroutine exit ck_null 1
+leavesublv lvalue subroutine return ck_null 1
caller caller ck_fun t% S?
warn warn ck_fun imst@ L
die die ck_fun dimst@ L
iter foreach loop iterator ck_null 0
enterloop loop entry ck_null d{
leaveloop loop exit ck_null 2
-return return ck_null dm@ L
+return return ck_return dm@ L
last last ck_null ds}
next next ck_null ds}
redo redo ck_null ds}
# I/O.
-open open ck_open ist@ F S? L
+open open ck_open ismt@ F S? L
close close ck_fun is% F?
pipe_op pipe ck_fun is@ F F
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
This file is built by opcode.pl from its data. Any changes made here
will be lost!
*/
#if !defined(PERL_PATCHLEVEL_H_IMPLICIT) && !defined(LOCAL_PATCH_COUNT)
static char *local_patches[] = {
NULL
- ,"DEVEL8341"
+ ,"DEVEL8530"
,NULL
};
Safefree(PL_op_mask);
Safefree(PL_psig_ptr);
Safefree(PL_psig_name);
+ Safefree(PL_psig_pend);
nuke_stacks();
PL_hints = 0; /* Reset hints. Should hints be per-interpreter ? */
# if defined(PERL_IMPLICIT_SYS)
void *host = w32_internal_host;
if (PerlProc_lasthost()) {
- PerlIO_cleanup();
+ PerlIO_cleanup();
}
PerlMem_free(aTHXx);
win32_delete_internal_host(host);
#else
- PerlIO_cleanup();
+ PerlIO_cleanup();
PerlMem_free(aTHXx);
#endif
# else
#ifdef PERL_FOR_X2P
/*
- * This file is being used for x2p stuff.
+ * This file is being used for x2p stuff.
* Above symbol is defined via -D in 'x2p/Makefile.SH'
- * Decouple x2p stuff from some of perls more extreme eccentricities.
+ * Decouple x2p stuff from some of perls more extreme eccentricities.
*/
#undef MULTIPLICITY
#undef USE_STDIO
#endif /* PERL_FOR_X2P */
#define VOIDUSED 1
-#ifdef PERL_MICRO
+#ifdef PERL_MICRO
# include "uconfig.h"
#else
# include "config.h"
# define END_EXTERN_C }
# define EXTERN_C extern "C"
#else
-# define START_EXTERN_C
-# define END_EXTERN_C
+# define START_EXTERN_C
+# define END_EXTERN_C
# define EXTERN_C extern
#endif
#define TAINT_ENV() if (PL_tainting) { taint_env(); }
#define TAINT_PROPER(s) if (PL_tainting) { taint_proper(Nullch, s); }
-/* XXX All process group stuff is handled in pp_sys.c. Should these
+/* XXX All process group stuff is handled in pp_sys.c. Should these
defines move there? If so, I could simplify this a lot. --AD 9/96.
*/
/* Process group stuff changed from traditional BSD to POSIX.
# define HAS_GETPGRP /* Well, effectively it does . . . */
#endif
-/* These are not exact synonyms, since setpgrp() and getpgrp() may
+/* These are not exact synonyms, since setpgrp() and getpgrp() may
have different behaviors, but perl.h used to define USE_BSDPGRP
(prior to 5.003_05) so some extension might depend on it.
*/
# undef INCLUDE_PROTOTYPES
# undef PERL_SOCKS_NEED_PROTOTYPES
# endif
-# endif
+# endif
# ifdef I_NETDB
# include <netdb.h>
# endif
#ifndef S_IRWXU
# define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
-#endif
+#endif
#ifndef S_IRWXG
# define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
-#endif
+#endif
#ifndef S_IRWXO
# define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
-#endif
+#endif
#ifndef S_IREAD
# define S_IREAD S_IRUSR
#define IV_DIG (BIT_DIGITS(IVSIZE * 8))
#define UV_DIG (BIT_DIGITS(UVSIZE * 8))
-/* We like our integers to stay integers. */
#ifndef NO_PERL_PRESERVE_IVUV
-#define PERL_PRESERVE_IVUV
+#define PERL_PRESERVE_IVUV /* We like our integers to stay integers. */
#endif
-/*
+/*
* The macros INT2PTR and NUM2PTR are (despite their names)
* bi-directional: they will convert int/float to or from pointers.
* However the conversion to int/float are named explicitly:
# define PTRV UV
# define INT2PTR(any,d) (any)(d)
#else
-# if PTRSIZE == LONGSIZE
+# if PTRSIZE == LONGSIZE
# define PTRV unsigned long
# else
# define PTRV unsigned
#define PTR2IV(p) INT2PTR(IV,p)
#define PTR2UV(p) INT2PTR(UV,p)
#define PTR2NV(p) NUM2PTR(NV,p)
-#if PTRSIZE == LONGSIZE
+#if PTRSIZE == LONGSIZE
# define PTR2ul(p) (unsigned long)(p)
#else
# define PTR2ul(p) INT2PTR(unsigned long,p)
#endif
-
+
#ifdef USE_LONG_DOUBLE
# if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE == DOUBLESIZE
# define LONG_DOUBLE_EQUALS_DOUBLE
#endif
#if !defined(Perl_atof) && defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
-# if !defined(Perl_atof) && defined(HAS_STRTOLD)
+# if !defined(Perl_atof) && defined(HAS_STRTOLD)
# define Perl_atof(s) (NV)strtold(s, (char**)NULL)
# endif
# if !defined(Perl_atof) && defined(HAS_ATOLF)
# define Perl_atof2(s,f) ((f) = (NV)Perl_atof(s))
#endif
-/* Previously these definitions used hardcoded figures.
+/* Previously these definitions used hardcoded figures.
* It is hoped these formula are more portable, although
* no data one way or another is presently known to me.
* The "PERL_" names are used because these calculated constants
# define PERL_UCHAR_MAX ((unsigned char)~(unsigned)0)
# endif
#endif
-
+
/*
* CHAR_MIN and CHAR_MAX are not included here, as the (char) type may be
* ambiguous. It may be equivalent to (signed char) or (unsigned char)
# define FSEEKSIZE LSEEKSIZE
# else
# define FSEEKSIZE LONGSIZE
-# endif
+# endif
#endif
#if defined(USE_LARGE_FILES) && !defined(NO_64_BIT_STDIO)
# endif
#endif
-/*
+/*
* USE_THREADS needs to be after unixish.h as <pthread.h> includes
* <sys/signal.h> which defines NSIG - which will stop inclusion of <signal.h>
* this results in many functions being undeclared which bothers C++
# define SVf "p"
# else
# define SVf "_"
-# endif
+# endif
#endif
#ifndef UVf
# define UVf UVuf
# else
# define UVf "Vu"
-# endif
+# endif
#endif
#ifndef VDf
# define VDf "p"
# else
# define VDf "vd"
-# endif
+# endif
#endif
/* Some unistd.h's give a prototype for pause() even though
# if !defined(DONT_DECLARE_STD) || \
(defined(__svr4__) && defined(__GNUC__) && defined(sun)) || \
defined(__sgi) || \
- defined(__DGUX)
+ defined(__DGUX)
extern char ** environ; /* environment variables supplied via exec */
# endif
# endif
#endif /* PERL_GLOBAL_STRUCT */
#if defined(MULTIPLICITY) || defined(PERL_OBJECT)
-/* If we have multiple interpreters define a struct
+/* If we have multiple interpreters define a struct
holding variables which must be per-interpreter
- If we don't have threads anything that would have
+ If we don't have threads anything that would have
be per-thread is per-interpreter.
*/
#ifndef PERL_CALLCONV
# define PERL_CALLCONV
-#endif
+#endif
#ifndef NEXT30_NO_ATTRIBUTE
# ifndef HASATTRIBUTE /* disable GNU-cc attribute checking? */
# include "embedvar.h"
#endif
-/* Now include all the 'global' variables
+/* Now include all the 'global' variables
* If we don't have threads or multiple interpreters
- * these include variables that would have been their struct-s
+ * these include variables that would have been their struct-s
*/
-
+
#define PERLVAR(var,type) EXT type PL_##var;
#define PERLVARA(var,n,type) EXT type PL_##var[n];
#define PERLVARI(var,type,init) EXT type PL_##var INIT(init);
EXT MGVTBL PL_vtbl_backref = {0, 0,
0, 0, MEMBER_TO_FPTR(Perl_magic_killbackrefs)};
+EXT MGVTBL PL_vtbl_ovrld = {0, 0,
+ 0, 0, MEMBER_TO_FPTR(Perl_magic_freeovrld)};
+
#else /* !DOINIT */
EXT MGVTBL PL_vtbl_sv;
EXT MGVTBL PL_vtbl_bm;
EXT MGVTBL PL_vtbl_fm;
EXT MGVTBL PL_vtbl_uvar;
+EXT MGVTBL PL_vtbl_ovrld;
#ifdef USE_THREADS
EXT MGVTBL PL_vtbl_mutex;
copy_amg, neg_amg,
to_sv_amg, to_av_amg,
to_hv_amg, to_gv_amg,
- to_cv_amg, iter_amg,
+ to_cv_amg, iter_amg,
DESTROY_amg, max_amg_code
/* Do not leave a trailing comma here. C9X allows it, C89 doesn't. */
};
#endif
#if !defined(PERLIO_IS_STDIO) && defined(HASATTRIBUTE)
-/*
- * Now we have __attribute__ out of the way
- * Remap printf
+/*
+ * Now we have __attribute__ out of the way
+ * Remap printf
*/
#undef printf
#define printf PerlIO_stdoutf
* Keep this check simple, or it may slow down execution
* massively.
*/
+
+#ifndef PERL_OLD_SIGNALS
+#define PERL_ASYNC_CHECK() if (PL_sig_pending) despatch_signals()
+#endif
+
#ifndef PERL_ASYNC_CHECK
#define PERL_ASYNC_CHECK() NOOP
#endif
#undef PERL_PATCHLEVEL_H_IMPLICIT
/* Mention
-
+
NV_PRESERVES_UV
HAS_ICONV
return ((CPerlObj*)pPerl)->Perl_do_open9(gv, name, len, as_raw, rawmode, rawperm, supplied_fp, svs, num);
}
+#undef Perl_do_openn
+bool
+Perl_do_openn(pTHXo_ GV *gv, char *name, I32 len, int as_raw, int rawmode, int rawperm, PerlIO *supplied_fp, SV **svp, I32 num)
+{
+ return ((CPerlObj*)pPerl)->Perl_do_openn(gv, name, len, as_raw, rawmode, rawperm, supplied_fp, svp, num);
+}
+
#undef Perl_dowantarray
I32
Perl_dowantarray(pTHXo)
return ((CPerlObj*)pPerl)->Perl_whichsig(sig);
}
#ifdef USE_PURE_BISON
-#else
#endif
#if defined(MYMALLOC)
#define PL_profiledata (*Perl_Iprofiledata_ptr(aTHXo))
#undef PL_psig_name
#define PL_psig_name (*Perl_Ipsig_name_ptr(aTHXo))
+#undef PL_psig_pend
+#define PL_psig_pend (*Perl_Ipsig_pend_ptr(aTHXo))
#undef PL_psig_ptr
#define PL_psig_ptr (*Perl_Ipsig_ptr_ptr(aTHXo))
#undef PL_ptr_table
#define PL_sawampersand (*Perl_Isawampersand_ptr(aTHXo))
#undef PL_sh_path
#define PL_sh_path (*Perl_Ish_path_ptr(aTHXo))
+#undef PL_sig_pending
+#define PL_sig_pending (*Perl_Isig_pending_ptr(aTHXo))
#undef PL_sighandlerp
#define PL_sighandlerp (*Perl_Isighandlerp_ptr(aTHXo))
#undef PL_splitstr
HV *stash = gv_stashpv("perlio::Layer", TRUE);
SV *sv = sv_bless(newRV_noinc(newSViv(PTR2IV(tab))),stash);
hv_store(PerlIO_layer_hv,tab->name,strlen(tab->name),sv,0);
+ PerlIO_debug("define %s %p\n",tab->name,tab);
}
+void
+PerlIO_default_buffer(pTHX)
+{
+ PerlIO_funcs *tab = &PerlIO_perlio;
+ if (O_BINARY != O_TEXT)
+ {
+ tab = &PerlIO_crlf;
+ }
+ else
+ {
+ if (PerlIO_stdio.Set_ptrcnt)
+ {
+ tab = &PerlIO_stdio;
+ }
+ }
+ PerlIO_debug("Pushing %s\n",tab->name);
+ av_push(PerlIO_layer_av,SvREFCNT_inc(PerlIO_find_layer(tab->name,0)));
+
+}
+
+
PerlIO_funcs *
PerlIO_default_layer(I32 n)
{
#endif
PerlIO_layer_hv = get_hv("open::layers",GV_ADD|GV_ADDMULTI);
PerlIO_layer_av = get_av("open::layers",GV_ADD|GV_ADDMULTI);
+ PerlIO_define_layer(&PerlIO_raw);
PerlIO_define_layer(&PerlIO_unix);
PerlIO_define_layer(&PerlIO_perlio);
PerlIO_define_layer(&PerlIO_stdio);
#ifdef HAS_MMAP
PerlIO_define_layer(&PerlIO_mmap);
#endif
+ PerlIO_define_layer(&PerlIO_utf8);
av_push(PerlIO_layer_av,SvREFCNT_inc(PerlIO_find_layer(PerlIO_unix.name,0)));
if (s)
{
+ IV buffered = 0;
while (*s)
{
while (*s && isSPACE((unsigned char)*s))
layer = PerlIO_find_layer(s,e-s);
if (layer)
{
+ PerlIO_funcs *tab = INT2PTR(PerlIO_funcs *, SvIV(SvRV(layer)));
+ if ((tab->kind & PERLIO_K_DUMMY) && (tab->kind & PERLIO_K_BUFFERED))
+ {
+ if (!buffered)
+ PerlIO_default_buffer(aTHX);
+ }
PerlIO_debug("Pushing %.*s\n",(e-s),s);
av_push(PerlIO_layer_av,SvREFCNT_inc(layer));
+ buffered |= (tab->kind & PERLIO_K_BUFFERED);
}
else
Perl_warn(aTHX_ "perlio: unknown layer \"%.*s\"",(e-s),s);
len = av_len(PerlIO_layer_av);
if (len < 1)
{
- if (O_BINARY != O_TEXT)
- {
- av_push(PerlIO_layer_av,SvREFCNT_inc(PerlIO_find_layer(PerlIO_crlf.name,0)));
- }
- else
- {
- if (PerlIO_stdio.Set_ptrcnt)
- {
- av_push(PerlIO_layer_av,SvREFCNT_inc(PerlIO_find_layer(PerlIO_stdio.name,0)));
- }
- else
- {
- av_push(PerlIO_layer_av,SvREFCNT_inc(PerlIO_find_layer(PerlIO_perlio.name,0)));
- }
- }
+ PerlIO_default_buffer(aTHX);
len = av_len(PerlIO_layer_av);
}
if (n < 0)
return f;
}
+IV
+PerlIOUtf8_pushed(PerlIO *f, const char *mode, const char *arg, STRLEN len)
+{
+ if (PerlIONext(f))
+ {
+ PerlIO_pop(f);
+ PerlIOBase(f)->flags |= PERLIO_F_UTF8;
+ return 0;
+ }
+ return -1;
+}
+
+IV
+PerlIORaw_pushed(PerlIO *f, const char *mode, const char *arg, STRLEN len)
+{
+ /* Pop back to bottom layer */
+ if (PerlIONext(f))
+ {
+ PerlIO_flush(f);
+ while (PerlIONext(f))
+ {
+ PerlIO_pop(f);
+ }
+ return 0;
+ }
+ return -1;
+}
+
int
PerlIO_apply_layers(pTHX_ PerlIO *f, const char *mode, const char *names)
{
}
/*--------------------------------------------------------------------------------------*/
+/* utf8 and raw dummy layers */
+
+PerlIO *
+PerlIOUtf8_fdopen(PerlIO_funcs *self, int fd,const char *mode)
+{
+ PerlIO_funcs *tab = PerlIO_default_layer(-2);
+ PerlIO *f = (*tab->Fdopen)(tab,fd,mode);
+ if (f)
+ {
+ PerlIOBase(f)->flags |= PERLIO_F_UTF8;
+ }
+ return f;
+}
+
+PerlIO *
+PerlIOUtf8_open(PerlIO_funcs *self, const char *path,const char *mode)
+{
+ PerlIO_funcs *tab = PerlIO_default_layer(-2);
+ PerlIO *f = (*tab->Open)(tab,path,mode);
+ if (f)
+ {
+ PerlIOBase(f)->flags |= PERLIO_F_UTF8;
+ }
+ return f;
+}
+
+PerlIO_funcs PerlIO_utf8 = {
+ "utf8",
+ sizeof(PerlIOl),
+ PERLIO_K_DUMMY|PERLIO_K_BUFFERED,
+ NULL,
+ PerlIOUtf8_fdopen,
+ PerlIOUtf8_open,
+ NULL,
+ PerlIOUtf8_pushed,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL, /* flush */
+ NULL, /* fill */
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL, /* get_base */
+ NULL, /* get_bufsiz */
+ NULL, /* get_ptr */
+ NULL, /* get_cnt */
+ NULL, /* set_ptrcnt */
+};
+
+PerlIO *
+PerlIORaw_fdopen(PerlIO_funcs *self, int fd,const char *mode)
+{
+ PerlIO_funcs *tab = PerlIO_default_layer(0);
+ return (*tab->Fdopen)(tab,fd,mode);
+}
+
+PerlIO *
+PerlIORaw_open(PerlIO_funcs *self, const char *path,const char *mode)
+{
+ PerlIO_funcs *tab = PerlIO_default_layer(0);
+ return (*tab->Open)(tab,path,mode);
+}
+
+PerlIO_funcs PerlIO_raw = {
+ "raw",
+ sizeof(PerlIOl),
+ PERLIO_K_DUMMY|PERLIO_K_RAW,
+ NULL,
+ PerlIORaw_fdopen,
+ PerlIORaw_open,
+ NULL,
+ PerlIORaw_pushed,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL, /* flush */
+ NULL, /* fill */
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL, /* get_base */
+ NULL, /* get_bufsiz */
+ NULL, /* get_ptr */
+ NULL, /* get_cnt */
+ NULL, /* set_ptrcnt */
+};
+/*--------------------------------------------------------------------------------------*/
+/*--------------------------------------------------------------------------------------*/
/* "Methods" of the "base class" */
IV
PerlIOBase(f)->flags |= PERLIO_F_EOF;
return len;
}
+ PERL_ASYNC_CHECK();
}
}
PerlIOBase(f)->flags |= PERLIO_F_ERROR;
return len;
}
+ PERL_ASYNC_CHECK();
}
}
code = -1;
break;
}
+ PERL_ASYNC_CHECK();
}
if (code == 0)
{
}
}
+
+
#undef PerlIO_stdin
PerlIO *
PerlIO_stdin(void)
#define PERLIO_K_BUFFERED 0x00000002
#define PERLIO_K_CANCRLF 0x00000004
#define PERLIO_K_FASTGETS 0x00000008
+#define PERLIO_K_DUMMY 0x00000010
/*--------------------------------------------------------------------------------------*/
struct _PerlIO
extern PerlIO_funcs PerlIO_perlio;
extern PerlIO_funcs PerlIO_stdio;
extern PerlIO_funcs PerlIO_crlf;
+extern PerlIO_funcs PerlIO_utf8;
+extern PerlIO_funcs PerlIO_raw;
/* The EXT is need for Cygwin -- but why only for _pending? --jhi */
EXT PerlIO_funcs PerlIO_pending;
#ifdef HAS_MMAP
#ifdef USE_PURE_BISON
#define YYLEX_PARAM (&yychar)
+#define yylex yylex_r
#endif
%}
Returns a pointer to the newly-created string, and sets C<len> to
reflect the new length.
- U8 * bytes_to_utf8(U8 *s, STRLEN *len)
+NOTE: this function is experimental and may change or be
+removed without notice.
+
+ U8* bytes_to_utf8(U8 *s, STRLEN *len)
=for hackers
Found in file utf8.c
=for hackers
Found in file handy.h
+=item is_utf8_char
+
+Tests if some arbitrary number of bytes begins in a valid UTF-8 character.
+The actual number of bytes in the UTF-8 character will be returned if it
+is valid, otherwise 0.
+
+ STRLEN is_utf8_char(U8 *p)
+
+=for hackers
+Found in file utf8.c
+
+=item is_utf8_string
+
+Returns true if first C<len> bytes of the given string form valid a UTF8
+string, false otherwise.
+
+ bool is_utf8_string(U8 *s, STRLEN len)
+
+=for hackers
+Found in file utf8.c
+
=item items
Variable which is setup by C<xsubpp> to indicate the number of
=for hackers
Found in file intrpvar.h
+=item PL_last_in_gv
+
+The GV which was last used for a filehandle input operation. (C<< <FH> >>)
+
+ GV* PL_last_in_gv
+
+=for hackers
+Found in file thrdvar.h
+
=item PL_modglobal
C<PL_modglobal> is a general purpose, interpreter global HV for use by
=for hackers
Found in file thrdvar.h
+=item PL_ofs_sv
+
+The output field separator - C<$,> in Perl space.
+
+ SV* PL_ofs_sv
+
+=for hackers
+Found in file thrdvar.h
+
+=item PL_rs
+
+The input record separator - C<$/> in Perl space.
+
+ SV* PL_rs
+
+=for hackers
+Found in file thrdvar.h
+
=item PL_sv_no
This is the C<false> SV. See C<PL_sv_yes>. Always refer to this as
=for hackers
Found in file handy.h
-=item U8 *s
-
-Returns true if first C<len> bytes of the given string form valid a UTF8
-string, false otherwise.
-
- is_utf8_string U8 *s(STRLEN len)
-
-=for hackers
-Found in file utf8.c
-
=item utf8_distance
Returns the number of UTF8 characters between the UTF-8 pointers C<a>
updates len to contain the new length.
Returns zero on failure, setting C<len> to -1.
- U8 * utf8_to_bytes(U8 *s, STRLEN *len)
+NOTE: this function is experimental and may change or be
+removed without notice.
+
+ U8* utf8_to_bytes(U8 *s, STRLEN *len)
=for hackers
Found in file utf8.c
The C<flags> can also contain various flags to allow deviations from
the strict UTF-8 encoding (see F<utf8.h>).
- U8* s utf8_to_uv(STRLEN curlen, STRLEN *retlen, U32 flags)
+ UV utf8_to_uv(U8 *s, STRLEN curlen, STRLEN* retlen, U32 flags)
=for hackers
Found in file utf8.c
If C<s> does not point to a well-formed UTF8 character, zero is
returned and retlen is set, if possible, to -1.
- U8* s utf8_to_uv_simple(STRLEN *retlen)
+ UV utf8_to_uv_simple(U8 *s, STRLEN* retlen)
+
+=for hackers
+Found in file utf8.c
+
+=item uv_to_utf8
+
+Adds the UTF8 representation of the Unicode codepoint C<uv> to the end
+of the string C<d>; C<d> should be have at least C<UTF8_MAXLEN+1> free
+bytes available. The return value is the pointer to the byte after the
+end of the new character. In other words,
+
+ d = uv_to_utf8(d, uv);
+
+is the recommended Unicode-aware way of saying
+
+ *(d++) = uv;
+
+ U8* uv_to_utf8(U8 *d, UV uv)
=for hackers
Found in file utf8.c
temporary or readonly values) from a subroutine used as an lvalue. This
is not allowed.
+=item Can't return %s to lvalue scalar context
+
+(F) You tried to return a complete array or hash from an lvalue subroutine,
+but you called the subroutine in a way that made Perl think you meant
+to return only one value. You probably meant to write parentheses around
+the call to the subroutine, which tell Perl that the call should be in
+list context.
+
=item Can't return outside a subroutine
(F) The return statement was executed in mainline code, that is, where
The standard release of Perl (the one maintained by the perl
development team) is distributed only in source code form. You
can find this at http://www.perl.com/CPAN/src/latest.tar.gz , which
-in standard Internet format (a gzipped archive in POSIX tar format).
+is in a standard Internet format (a gzipped archive in POSIX tar format).
Perl builds and runs on a bewildering number of platforms. Virtually
all known and current Unix derivatives are supported (Perl's native
sites. CPAN indicates the base directory of a CPAN mirror, and the
rest of the path is the path from that directory to the file. For
instance, if you're using ftp://ftp.funet.fi/pub/languages/perl/CPAN
-as your CPAN site, the file CPAN/misc/japh file is downloadable as
+as your CPAN site, the file CPAN/misc/japh is downloadable as
ftp://ftp.funet.fi/pub/languages/perl/CPAN/misc/japh .
Considering that there are hundreds of existing modules in the
the list below and use it to grab the complete list of mirror sites.
From there you can find the quickest site for you. Remember, the
following list is I<not> the complete list of CPAN mirrors
-(the complete list contains 136 sites as of July 2000):
+(the complete list contains 161 sites as of January 2001):
http://www.perl.com/CPAN/
http://www.cpan.org/CPAN/
=head2 Is there an IDE or Windows Perl Editor?
-If you're on Unix, you already have an IDE--Unix itself. This powerful
-IDE derives from its interoperability, flexibility, and configurability.
-If you really want to get a feel for Unix-qua-IDE, the best thing to do
-is to find some high-powered programmer whose native language is Unix.
-Find someone who has been at this for many years, and just sit back
-and watch them at work. They have created their own IDE, one that
-suits their own tastes and aptitudes. Quietly observe them edit files,
-move them around, compile them, debug them, test them, etc. The entire
-development *is* integrated, like a top-of-the-line German sports car:
-functional, powerful, and elegant. You will be absolutely astonished
-at the speed and ease exhibited by the native speaker of Unix in his
-home territory. The art and skill of a virtuoso can only be seen to be
-believed. That is the path to mastery--all these cobbled little IDEs
-are expensive toys designed to sell a flashy demo using cheap tricks,
-and being optimized for immediate but shallow understanding rather than
-enduring use, are but a dim palimpsest of real tools.
-
-In short, you just have to learn the toolbox. However, if you're not
-on Unix, then your vendor probably didn't bother to provide you with
-a proper toolbox on the so-called complete system that you forked out
-your hard-earned cash for.
-
-If you're transferring Windows text files to Unix using FTP be sure to
-transfer them in ASCII mode so the ends of lines are appropriately mangled.
-
-PerlBuilder (http://www.solutionsoft.com/perl.htm) is an integrated
-development environment for Windows that supports Perl development.
-Komodo, ActiveState's cross-platform, multi-language IDE has Perl
-support, including a regular expression debugger and remote debugging
-(http://www.ActiveState.com/Products/Komodo/index.html). (Visual Perl,
-a Visual Studio.NET plug-in is currently in beta (late 2000)
-(http://www.ActiveState.com/Products/VisualPerl/index.html)).
+Perl programs are just plain text, so any editor will do.
+
+If you're on Unix, you already have an IDE--Unix itself. The UNIX
+philosophy is the philosophy of several small tools that each do one
+thing and do it well. It's like a carpenter's toolbox.
+
+If you want a Windows IDE, check the following: PerlBuilder
+(http://www.solutionsoft.com/perl.htm) is an integrated development
+environment for Windows that supports Perl development. Komodo,
+ActiveState's cross-platform, multi-language IDE has Perl support,
+including a regular expression debugger and remote debugging
+(http://www.ActiveState.com/Products/Komodo/index.html).
+(Visual Perl, a Visual Studio.NET plug-in is currently (late 2000)
+in beta (http://www.ActiveState.com/Products/VisualPerl/index.html)).
The visiPerl+ IDE is available from Help Consulting
-(http://helpconsulting.net/visiperl/). Perl code magic is
-another IDE (http://www.petes-place.com/codemagic.html). CodeMagicCD
+(http://helpconsulting.net/visiperl/). Perl code magic is another IDE
+(http://www.petes-place.com/codemagic.html). CodeMagicCD
(http://www.codemagiccd.com/) is another IDE. The Object System
(http://www.castlelink.co.uk/object_system/) is a Perl web
applications development IDE.
-Perl programs are just plain text, though, so you could download GNU
-Emacs (http://www.gnu.org/software/emacs/windows/ntemacs.html) or
-XEmacs (http://www.xemacs.org/Download/index.html), or a vi clone such
-as Elvis (ftp://ftp.cs.pdx.edu/pub/elvis/, see also
-http://www.fh-wedel.de/elvis/), nvi (http://www.bostic.com/vi/, or
-available from CPAN in src/misc/), or Vile
-(http://www.clark.net/pub/dickey/vile/vile.html), or vim
-(http://www.vim.org/) (win32: http://www.cs.vu.nl/%7Etmgil/vi.html).
-(For vi lovers in general: http://www.thomer.com/thomer/vi/vi.html)
+For editors: if you're on Unix you probably have vi or a vi clone already,
+and possibly an emacs too, so you may not need to download anything.
+In any emacs the cperl-mode (M-x cperl-mode) gives you perhaps the
+best available Perl editing mode in any editor.
+
+For Windows editors: you can download GNU Emacs
+(http://www.gnu.org/software/emacs/windows/ntemacs.html) or XEmacs
+(http://www.xemacs.org/Download/index.html), or a vi clone such as
+Elvis (ftp://ftp.cs.pdx.edu/pub/elvis/, http://www.fh-wedel.de/elvis/),
+Vile (http://www.clark.net/pub/dickey/vile/vile.html), or
+Vim (http://www.vim.org/) (win32: http://www.cs.vu.nl/%7Etmgil/vi.html).
+For vi lovers in general, Windows or elsewhere:
+http://www.thomer.com/thomer/vi/vi.html.
+
+nvi (http://www.bostic.com/vi/, available from CPAN in src/misc/) is
+yet another vi clone, unfortunately not available for Windows, but in
+UNIX platforms you might be interested in trying it out, firstly because
+strictly speaking it is not a vi clone, it is the real vi, or the new
+incarnation of it, and secondly because you can embed Perl inside it
+to use Perl as the scripting language. nvi is not alone in this,
+though: at least also vim offers an embedded Perl.
The following are Win32 multilanguage editor/IDESs that support Perl:
Codewright (http://www.starbase.com/), MultiEdit (http://www.MultiEdit.com/),
SlickEdit (http://www.slickedit.com/).
-There is also a toyedit Text widget based editor written in Perl that
-is distributed with the Tk module on CPAN. The ptkdb
+There is also a toyedit Text widget based editor written in Perl
+that is distributed with the Tk module on CPAN. The ptkdb
(http://world.std.com/~aep/ptkdb/) is a Perl/tk based debugger that
acts as a development environment of sorts. Perl Composer
(http://perlcomposer.sourceforge.net/vperl.html) is an IDE for Perl/Tk
contain (in addition to the shells) a comprehensive set of standard
UNIX toolkit utilities.
+If you're transferring text files between Unix and Windows using FTP
+be sure to transfer them in ASCII mode so the ends of lines are
+appropriately converted.
+
On Mac OS the MacPerl Application comes with a simple 32k text editor
that behaves like a rudimentary IDE. In contrast to the MacPerl Application
the MPW Perl tool can make use of the MPW Shell itself as an editor (with
=item Functions for SCALARs or strings
C<chomp>, C<chop>, C<chr>, C<crypt>, C<hex>, C<index>, C<lc>, C<lcfirst>,
-C<length>, C<oct>, C<ord>, C<pack>, C<q/STRING/>, C<qq/STRING/>, C<reverse>,
-C<rindex>, C<sprintf>, C<substr>, C<tr///>, C<uc>, C<ucfirst>, C<y///>
+C<length>, C<oct>, C<ord>, C<pack>, C<q/STRING/>, C<qq/STRING/>, C<qu/STRING/>,
+C<reverse>, C<rindex>, C<sprintf>, C<substr>, C<tr///>, C<uc>, C<ucfirst>,
+C<y///>
=item Regular expressions and pattern matching
kept private (mail files, for instance). The perlfunc(1) entry on
C<umask> discusses the choice of MASK in more detail.
+Note that according to the POSIX 1003.1-1996 the FILENAME may have any
+number of trailing slashes. Some operating and filesystems do not get
+this right, so Perl automatically removes all trailing slashes to keep
+everyone happy.
+
=item msgctl ID,CMD,ARG
Calls the System V IPC function msgctl(2). You'll probably have to say
=item qr/STRING/
-=item qx/STRING/
+=item qu/STRING/
=item qw/STRING/
+=item qx/STRING/
+
Generalized quotes. See L<perlop/"Regexp Quote-Like Operators">.
=item quotemeta EXPR
Here is a handy table of equivalents between ordinary C and Perl's
memory abstraction layer:
- Instead Of: Use:
-
- malloc New
- calloc Newz
- realloc Renew
- memcopy Copy
- memmove Move
- free Safefree
- strdup savepv
- strndup savepvn (Hey, strndup doesn't exist!)
- memcpy/*(struct foo *) StructCopy
+ Instead Of: Use:
+
+ t* p = malloc(n) New(id, p, n, t)
+ t* p = calloc(n, s) Newz(id, p, n, t)
+ p = realloc(p, n) Renew(p, n, t)
+ memcpy(dst, src, n) Copy(src, dst, n, t)
+ memmove(dst, src, n) Move(src, dst, n, t)
+ free(p) Safefree(p)
+ strdup(p) savepv(p)
+ strndup(p, n) savepvn(p, n) (Hey, strndup doesn't exist!)
+ memcpy/*(struct foo *) StructCopy(src, dst, t)
+
+ t type
+ p pointer
+ ck cookie for the memory region (now unused)
+ n number of elements
+ src source pointer
+ dst destination pointer
+
+Notice the different order of arguments to C<Copy> and C<Move> than used
+in C<memcpy> and C<memmove>.
=head2 PerlIO
=for hackers
Found in file gv.c
+=item LVRET
+
+True if this op will be the return value of an lvalue subroutine
+
+=for hackers
+Found in file pp.h
+
=item start_glob
Function called by C<do_readline> to spawn a glob (or do the glob inside
Customary Generic Meaning Interpolates
'' q{} Literal no
"" qq{} Literal yes
+ qu{} Literal yes, Unicode
`` qx{} Command yes (unless '' is delimiter)
qw{} Word list no
// m{} Pattern match yes (unless '' is delimiter)
See L<perlre> for additional information on valid syntax for STRING, and
for a detailed look at the semantics of regular expressions.
+=item qw/STRING/
+
+Evaluates to a list of the words extracted out of STRING, using embedded
+whitespace as the word delimiters. It can be understood as being roughly
+equivalent to:
+
+ split(' ', q/STRING/);
+
+the difference being that it generates a real list at compile time. So
+this expression:
+
+ qw(foo bar baz)
+
+is semantically equivalent to the list:
+
+ 'foo', 'bar', 'baz'
+
+Some frequently seen examples:
+
+ use POSIX qw( setlocale localeconv )
+ @EXPORT = qw( foo bar baz );
+
+A common mistake is to try to separate the words with comma or to
+put comments into a multi-line C<qw>-string. For this reason, the
+C<use warnings> pragma and the B<-w> switch (that is, the C<$^W> variable)
+produces warnings if the STRING contains the "," or the "#" character.
+
+=item qu/STRING/
+
+Like L<qq> but generates Unicode for characters whose code points are
+greater than 128, or 0x80. Such characters can be generated using
+the \xHH (for characters 0x80...0xff, or 128..255) and \x{HHH...}
+notations (for characters 0x100..., or greater than 256).
+
+(In qq/STRING/, or "", both the \xHH and the \x{HHH...} generate
+bytes for the 0x80..0xff range (these bytes are host-dependent),
+and the \x{HHH...} can be used to generate Unicode.)
+
=item qx/STRING/
=item `STRING`
See L<"I/O Operators"> for more discussion.
-=item qw/STRING/
-
-Evaluates to a list of the words extracted out of STRING, using embedded
-whitespace as the word delimiters. It can be understood as being roughly
-equivalent to:
-
- split(' ', q/STRING/);
-
-the difference being that it generates a real list at compile time. So
-this expression:
-
- qw(foo bar baz)
-
-is semantically equivalent to the list:
-
- 'foo', 'bar', 'baz'
-
-Some frequently seen examples:
-
- use POSIX qw( setlocale localeconv )
- @EXPORT = qw( foo bar baz );
-
-A common mistake is to try to separate the words with comma or to
-put comments into a multi-line C<qw>-string. For this reason, the
-C<use warnings> pragma and the B<-w> switch (that is, the C<$^W> variable)
-produces warnings if the STRING contains the "," or the "#" character.
-
=item s/PATTERN/REPLACEMENT/egimosx
Searches a string for a pattern, and if found, replaces that pattern
\X Match eXtended Unicode "combining character sequence",
equivalent to C<(?:\PM\pM*)>
\C Match a single C char (octet) even under utf8.
+ (Currently this does not work correctly.)
A C<\w> matches a single alphanumeric character or C<_>, not a whole word.
Use C<\w+> to match a string of Perl-identifier characters (which isn't
all the subroutines are called in a list context.
-The current implementation does not allow arrays and hashes to be
-returned from lvalue subroutines directly. You may return a
-reference instead. This restriction may be lifted in future.
-
=head2 Passing Symbol Table Entries (typeglobs)
B<WARNING>: The mechanism described in this section was originally
=item DESCRIPTION
-perlfaq: Structural overview of the FAQ, L<perlfaq1>: General Questions
-About Perl, What is Perl?, Who supports Perl? Who develops it? Why is it
-free?, Which version of Perl should I use?, What are perl4 and perl5?, What
-is perl6?, How stable is Perl?, Is Perl difficult to learn?, How does Perl
-compare with other languages like Java, Python, REXX, Scheme, or Tcl?, Can
-I do [task] in Perl?, When shouldn't I program in Perl?, What's the
-difference between "perl" and "Perl"?, Is it a Perl program or a Perl
-script?, What is a JAPH?, Where can I get a list of Larry Wall witticisms?,
-How can I convince my sysadmin/supervisor/employees to use version
-5/5.005/Perl instead of some other language?, L<perlfaq2>: Obtaining and
-Learning about Perl, What machines support Perl? Where do I get it?, How
-can I get a binary version of Perl?, I don't have a C compiler on my
-system. How can I compile perl?, I copied the Perl binary from one machine
-to another, but scripts don't work, I grabbed the sources and tried to
-compile but gdbm/dynamic loading/malloc/linking/... failed. How do I make
-it work?, What modules and extensions are available for Perl? What is
-CPAN? What does CPAN/src/... mean?, Is there an ISO or ANSI certified
-version of Perl?, Where can I get information on Perl?, What are the Perl
-newsgroups on Usenet? Where do I post questions?, Where should I post
-source code?, Perl Books, Perl in Magazines, Perl on the Net: FTP and WWW
-Access, What mailing lists are there for Perl?, Archives of
-comp.lang.perl.misc, Where can I buy a commercial version of Perl?, Where
-do I send bug reports?, What is perl.com? Perl Mongers? pm.org? perl.org?,
-L<perlfaq3>: Programming Tools, How do I do (anything)?, How can I use Perl
-interactively?, Is there a Perl shell?, How do I debug my Perl programs?,
-How do I profile my Perl programs?, How do I cross-reference my Perl
-programs?, Is there a pretty-printer (formatter) for Perl?, Is there a
-ctags for Perl?, Is there an IDE or Windows Perl Editor?, Where can I get
-Perl macros for vi?, Where can I get perl-mode for emacs?, How can I use
-curses with Perl?, How can I use X or Tk with Perl?, How can I generate
-simple menus without using CGI or Tk?, What is undump?, How can I make my
-Perl program run faster?, How can I make my Perl program take less memory?,
-Is it unsafe to return a pointer to local data?, How can I free an array or
-hash so my program shrinks?, How can I make my CGI script more efficient?,
-How can I hide the source for my Perl program?, How can I compile my Perl
-program into byte code or C?, How can I compile Perl into Java?, How can I
-get C<#!perl> to work on [MS-DOS,NT,...]?, Can I write useful Perl programs
-on the command line?, Why don't Perl one-liners work on my DOS/Mac/VMS
-system?, Where can I learn about CGI or Web programming in Perl?, Where can
-I learn about object-oriented Perl programming?, Where can I learn about
-linking C with Perl? [h2xs, xsubpp], I've read perlembed, perlguts, etc.,
-but I can't embed perl in my C program; what am I doing wrong?, When I
-tried to run my script, I got this message. What does it mean?, What's
-MakeMaker?, L<perlfaq4>: Data Manipulation, Why am I getting long decimals
-(eg, 19.9499999999999) instead of the numbers I should be getting (eg,
-19.95)?, Why isn't my octal data interpreted correctly?, Does Perl have a
-round() function? What about ceil() and floor()? Trig functions?, How do
-I convert bits into ints?, Why doesn't & work the way I want it to?, How do
-I multiply matrices?, How do I perform an operation on a series of
-integers?, How can I output Roman numerals?, Why aren't my random numbers
-random?, How do I find the week-of-the-year/day-of-the-year?, How do I find
-the current century or millennium?, How can I compare two dates and find
-the difference?, How can I take a string and turn it into epoch seconds?,
-How can I find the Julian Day?, How do I find yesterday's date?, Does Perl
-have a Year 2000 problem? Is Perl Y2K compliant?, How do I validate
-input?, How do I unescape a string?, How do I remove consecutive pairs of
-characters?, How do I expand function calls in a string?, How do I find
-matching/nesting anything?, How do I reverse a string?, How do I expand
-tabs in a string?, How do I reformat a paragraph?, How can I access/change
-the first N letters of a string?, How do I change the Nth occurrence of
-something?, How can I count the number of occurrences of a substring within
-a string?, How do I capitalize all the words on one line?, How can I split
-a [character] delimited string except when inside [character]?
-(Comma-separated files), How do I strip blank space from the beginning/end
-of a string?, How do I pad a string with blanks or pad a number with
-zeroes?, How do I extract selected columns from a string?, How do I find
-the soundex value of a string?, How can I expand variables in text
-strings?, What's wrong with always quoting "$vars"?, Why don't my <<HERE
-documents work?, What is the difference between a list and an array?, What
-is the difference between $array[1] and @array[1]?, How can I remove
-duplicate elements from a list or array?, How can I tell whether a list or
-array contains a certain element?, How do I compute the difference of two
-arrays? How do I compute the intersection of two arrays?, How do I test
-whether two arrays or hashes are equal?, How do I find the first array
-element for which a condition is true?, How do I handle linked lists?, How
-do I handle circular lists?, How do I shuffle an array randomly?, How do I
-process/modify each element of an array?, How do I select a random element
-from an array?, How do I permute N elements of a list?, How do I sort an
-array by (anything)?, How do I manipulate arrays of bits?, Why does
-defined() return true on empty arrays and hashes?, How do I process an
-entire hash?, What happens if I add or remove keys from a hash while
-iterating over it?, How do I look up a hash element by value?, How can I
-know how many entries are in a hash?, How do I sort a hash (optionally by
-value instead of key)?, How can I always keep my hash sorted?, What's the
-difference between "delete" and "undef" with hashes?, Why don't my tied
-hashes make the defined/exists distinction?, How do I reset an each()
-operation part-way through?, How can I get the unique keys from two
-hashes?, How can I store a multidimensional array in a DBM file?, How can I
-make my hash remember the order I put elements into it?, Why does passing a
-subroutine an undefined element in a hash create it?, How can I make the
-Perl equivalent of a C structure/C++ class/hash or array of hashes or
-arrays?, How can I use a reference as a hash key?, How do I handle binary
-data correctly?, How do I determine whether a scalar is a
-number/whole/integer/float?, How do I keep persistent data across program
-calls?, How do I print out or copy a recursive data structure?, How do I
-define methods for every class/object?, How do I verify a credit card
-checksum?, How do I pack arrays of doubles or floats for XS code?,
-L<perlfaq5>: Files and Formats, How do I flush/unbuffer an output
-filehandle? Why must I do this?, How do I change one line in a file/delete
-a line in a file/insert a line in the middle of a file/append to the
-beginning of a file?, How do I count the number of lines in a file?, How do
-I make a temporary file name?, How can I manipulate fixed-record-length
-files?, How can I make a filehandle local to a subroutine? How do I pass
-filehandles between subroutines? How do I make an array of filehandles?,
-How can I use a filehandle indirectly?, How can I set up a footer format to
-be used with write()?, How can I write() into a string?, How can I output
-my numbers with commas added?, How can I translate tildes (~) in a
-filename?, How come when I open a file read-write it wipes it out?, Why do
-I sometimes get an "Argument list too long" when I use <*>?, Is there a
-leak/bug in glob()?, How can I open a file with a leading ">" or trailing
-blanks?, How can I reliably rename a file?, How can I lock a file?, Why
-can't I just open(FH, ">file.lock")?, I still don't get locking. I just
-want to increment the number in the file. How can I do this?, How do I
-randomly update a binary file?, How do I get a file's timestamp in perl?,
-How do I set a file's timestamp in perl?, How do I print to more than one
-file at once?, How can I read in an entire file all at once?, How can I
-read in a file by paragraphs?, How can I read a single character from a
-file? From the keyboard?, How can I tell whether there's a character
-waiting on a filehandle?, How do I do a C<tail -f> in perl?, How do I dup()
-a filehandle in Perl?, How do I close a file descriptor by number?, Why
-can't I use "C:\temp\foo" in DOS paths? What doesn't `C:\temp\foo.exe`
-work?, Why doesn't glob("*.*") get all the files?, Why does Perl let me
-delete read-only files? Why does C<-i> clobber protected files? Isn't
-this a bug in Perl?, How do I select a random line from a file?, Why do I
-get weird spaces when I print an array of lines?, L<perlfaq6>: Regexps, How
-can I hope to use regular expressions without creating illegible and
-unmaintainable code?, I'm having trouble matching over more than one line.
-What's wrong?, How can I pull out lines between two patterns that are
-themselves on different lines?, I put a regular expression into $/ but it
-didn't work. What's wrong?, How do I substitute case insensitively on the
-LHS while preserving case on the RHS?, How can I make C<\w> match national
-character sets?, How can I match a locale-smart version of C</[a-zA-Z]/>?,
-How can I quote a variable to use in a regex?, What is C</o> really for?,
-How do I use a regular expression to strip C style comments from a file?,
-Can I use Perl regular expressions to match balanced text?, What does it
-mean that regexes are greedy? How can I get around it?, How do I process
-each word on each line?, How can I print out a word-frequency or
-line-frequency summary?, How can I do approximate matching?, How do I
-efficiently match many regular expressions at once?, Why don't
-word-boundary searches with C<\b> work for me?, Why does using $&, $`, or
-$' slow my program down?, What good is C<\G> in a regular expression?, Are
-Perl regexes DFAs or NFAs? Are they POSIX compliant?, What's wrong with
-using grep or map in a void context?, How can I match strings with
-multibyte characters?, How do I match a pattern that is supplied by the
-user?, L<perlfaq7>: General Perl Language Issues, Can I get a BNF/yacc/RE
-for the Perl language?, What are all these $@%&* punctuation signs, and how
-do I know when to use them?, Do I always/never have to quote my strings or
-use semicolons and commas?, How do I skip some return values?, How do I
-temporarily block warnings?, What's an extension?, Why do Perl operators
-have different precedence than C operators?, How do I declare/create a
-structure?, How do I create a module?, How do I create a class?, How can I
-tell if a variable is tainted?, What's a closure?, What is variable suicide
-and how can I prevent it?, How can I pass/return a {Function, FileHandle,
-Array, Hash, Method, Regex}?, How do I create a static variable?, What's
-the difference between dynamic and lexical (static) scoping? Between
-local() and my()?, How can I access a dynamic variable while a similarly
-named lexical is in scope?, What's the difference between deep and shallow
-binding?, Why doesn't "my($foo) = <FILE>;" work right?, How do I redefine a
-builtin function, operator, or method?, What's the difference between
-calling a function as &foo and foo()?, How do I create a switch or case
-statement?, How can I catch accesses to undefined
-variables/functions/methods?, Why can't a method included in this same file
-be found?, How can I find out my current package?, How can I comment out a
-large block of perl code?, How do I clear a package?, How can I use a
-variable as a variable name?, L<perlfaq8>: System Interaction, How do I
-find out which operating system I'm running under?, How come exec() doesn't
-return?, How do I do fancy stuff with the keyboard/screen/mouse?, How do I
-print something out in color?, How do I read just one key without waiting
-for a return key?, How do I check whether input is ready on the keyboard?,
-How do I clear the screen?, How do I get the screen size?, How do I ask the
-user for a password?, How do I read and write the serial port?, How do I
-decode encrypted password files?, How do I start a process in the
-background?, How do I trap control characters/signals?, How do I modify the
-shadow password file on a Unix system?, How do I set the time and date?,
-How can I sleep() or alarm() for under a second?, How can I measure time
-under a second?, How can I do an atexit() or setjmp()/longjmp()? (Exception
-handling), Why doesn't my sockets program work under System V (Solaris)?
-What does the error message "Protocol not supported" mean?, How can I call
-my system's unique C functions from Perl?, Where do I get the include files
-to do ioctl() or syscall()?, Why do setuid perl scripts complain about
-kernel problems?, How can I open a pipe both to and from a command?, Why
-can't I get the output of a command with system()?, How can I capture
-STDERR from an external command?, Why doesn't open() return an error when a
-pipe open fails?, What's wrong with using backticks in a void context?, How
-can I call backticks without shell processing?, Why can't my script read
-from STDIN after I gave it EOF (^D on Unix, ^Z on MS-DOS)?, How can I
-convert my shell script to perl?, Can I use perl to run a telnet or ftp
-session?, How can I write expect in Perl?, Is there a way to hide perl's
-command line from programs such as "ps"?, I {changed directory, modified my
-environment} in a perl script. How come the change disappeared when I
-exited the script? How do I get my changes to be visible?, How do I close
-a process's filehandle without waiting for it to complete?, How do I fork a
-daemon process?, How do I find out if I'm running interactively or not?,
-How do I timeout a slow event?, How do I set CPU limits?, How do I avoid
-zombies on a Unix system?, How do I use an SQL database?, How do I make a
-system() exit on control-C?, How do I open a file without blocking?, How do
-I install a module from CPAN?, What's the difference between require and
-use?, How do I keep my own module/library directory?, How do I add the
-directory my program lives in to the module/library search path?, How do I
-add a directory to my include path at runtime?, What is socket.ph and where
-do I get it?, L<perlfaq9>: Networking, My CGI script runs from the command
-line but not the browser. (500 Server Error), How can I get better error
-messages from a CGI program?, How do I remove HTML from a string?, How do I
-extract URLs?, How do I download a file from the user's machine? How do I
-open a file on another machine?, How do I make a pop-up menu in HTML?, How
-do I fetch an HTML file?, How do I automate an HTML form submission?, How
-do I decode or create those %-encodings on the web?, How do I redirect to
-another page?, How do I put a password on my web pages?, How do I edit my
-.htpasswd and .htgroup files with Perl?, How do I make sure users can't
-enter values into a form that cause my CGI script to do bad things?, How do
-I parse a mail header?, How do I decode a CGI form?, How do I check a valid
-mail address?, How do I decode a MIME/BASE64 string?, How do I return the
-user's mail address?, How do I send mail?, How do I read mail?, How do I
-find out my hostname/domainname/IP address?, How do I fetch a news article
-or the active newsgroups?, How do I fetch/put an FTP file?, How can I do
-RPC in Perl?
-
-=over 4
-
-=item Where to get this document
-
-=item How to contribute to this document
+=over 4
-=item What will happen if you mail your Perl programming problems to the
-authors
+=item perlfaq: Structural overview of the FAQ.
-=back
+=item L<perlfaq1>: General Questions About Perl
-=item Credits
+=item L<perlfaq2>: Obtaining and Learning about Perl
-=item Author and Copyright Information
+=item L<perlfaq3>: Programming Tools
-=over 4
+=item L<perlfaq4>: Data Manipulation
-=item Bundled Distributions
+=item L<perlfaq5>: Files and Formats
-=item Disclaimer
+=item L<perlfaq6>: Regexps
-=back
+=item L<perlfaq7>: General Perl Language Issues
-=item Changes
+=item L<perlfaq8>: System Interaction
-1/November/2000, 23/May/99, 13/April/99, 7/January/99, 22/June/98,
-24/April/97, 23/April/97, 25/March/97, 18/March/97, 17/March/97 Version,
-Initial Release: 11/March/97
+=item L<perlfaq9>: Networking
=back
-=head2 perltoc - perl documentation table of contents
+=item About the perlfaq documents
=over 4
-=item DESCRIPTION
+=item Where to get the perlfaq
-=item BASIC DOCUMENTATION
+=item How to contribute to the perlfaq
-=over 4
+=item What will happen if you mail your Perl programming problems to the
+authors
+
+=back
-=item perl - Practical Extraction and Report Language
+=item Credits
-SYNOPSIS, DESCRIPTION, AVAILABILITY, ENVIRONMENT, AUTHOR, FILES, SEE ALSO,
-DIAGNOSTICS, BUGS, NOTES
+=item Author and Copyright Information
-=item perlfaq - frequently asked questions about Perl ($Date: 1999/05/23
-20:38:02 $)
+=over 4
-DESCRIPTION, Where to get this document, How to contribute
+=item Bundled Distributions
+
+=item Disclaimer
=back
+=item Changes
+
+1/November/2000, 23/May/99, 13/April/99, 7/January/99, 22/June/98,
+24/April/97, 23/April/97, 25/March/97, 18/March/97, 17/March/97 Version,
+Initial Release: 11/March/97
+
=back
=head2 perlbook - Perl book information
=item Matching repetitions
-C<a?> = match 'a' 1 or 0 times, C<a*> = match 'a' 0 or more times, i.e.,
-any number of times, C<a+> = match 'a' 1 or more times, i.e., at least
-once, C<a{n,m}> = match at least C<n> times, but not more than C<m> times,
-C<a{n,}> = match at least C<n> or more times, C<a{n}> = match exactly C<n>
-times
-
=item More matching
=item Search and replace
hv_delete_ent, hv_exists, hv_exists_ent, hv_fetch, hv_fetch_ent,
hv_iterinit, hv_iterkey, hv_iterkeysv, hv_iternext, hv_iternextsv,
hv_iterval, hv_magic, hv_store, hv_store_ent, hv_undef, isALNUM, isALPHA,
-isDIGIT, isLOWER, isSPACE, isUPPER, items, ix, LEAVE, looks_like_number,
-MARK, mg_clear, mg_copy, mg_find, mg_free, mg_get, mg_length, mg_magical,
-mg_set, Move, New, newAV, Newc, newCONSTSUB, newHV, newRV_inc, newRV_noinc,
-NEWSV, newSViv, newSVnv, newSVpv, newSVpvf, newSVpvn, newSVpvn_share,
-newSVrv, newSVsv, newSVuv, newXS, newXSproto, Newz, Nullav, Nullch, Nullcv,
-Nullhv, Nullsv, ORIGMARK, perl_alloc, perl_construct, perl_destruct,
-perl_free, perl_parse, perl_run, PL_DBsingle, PL_DBsub, PL_DBtrace,
-PL_dowarn, PL_modglobal, PL_na, PL_sv_no, PL_sv_undef, PL_sv_yes, POPi,
-POPl, POPn, POPp, POPs, PUSHi, PUSHMARK, PUSHn, PUSHp, PUSHs, PUSHu,
-PUTBACK, Renew, Renewc, require_pv, RETVAL, Safefree, savepv, savepvn,
-SAVETMPS, SP, SPAGAIN, ST, strEQ, strGE, strGT, strLE, strLT, strNE,
-strnEQ, strnNE, StructCopy, SvCUR, SvCUR_set, SvEND, SvGETMAGIC, SvGROW,
-SvIOK, SvIOKp, SvIOK_notUV, SvIOK_off, SvIOK_on, SvIOK_only, SvIOK_only_UV,
-SvIOK_UV, SvIV, SvIVX, SvLEN, SvNIOK, SvNIOKp, SvNIOK_off, SvNOK, SvNOKp,
-SvNOK_off, SvNOK_on, SvNOK_only, SvNV, SvNVX, SvOK, SvOOK, SvPOK, SvPOKp,
-SvPOK_off, SvPOK_on, SvPOK_only, SvPOK_only_UTF8, SvPV, SvPVX, SvPV_force,
-SvPV_nolen, SvREFCNT, SvREFCNT_dec, SvREFCNT_inc, SvROK, SvROK_off,
-SvROK_on, SvRV, SvSETMAGIC, SvSetSV, SvSetSV_nosteal, SvSTASH, SvTAINT,
-SvTAINTED, SvTAINTED_off, SvTAINTED_on, SvTRUE, svtype, SvTYPE, SVt_IV,
-SVt_NV, SVt_PV, SVt_PVAV, SVt_PVCV, SVt_PVHV, SVt_PVMG, SvUOK, SvUPGRADE,
-SvUTF8, SvUTF8_off, SvUTF8_on, SvUV, SvUVX, sv_2mortal, sv_bless, sv_catpv,
+isDIGIT, isLOWER, isSPACE, isUPPER, is_utf8_char, is_utf8_string, items,
+ix, LEAVE, looks_like_number, MARK, mg_clear, mg_copy, mg_find, mg_free,
+mg_get, mg_length, mg_magical, mg_set, Move, New, newAV, Newc, newCONSTSUB,
+newHV, newRV_inc, newRV_noinc, NEWSV, newSViv, newSVnv, newSVpv, newSVpvf,
+newSVpvn, newSVpvn_share, newSVrv, newSVsv, newSVuv, newXS, newXSproto,
+Newz, Nullav, Nullch, Nullcv, Nullhv, Nullsv, ORIGMARK, perl_alloc,
+perl_construct, perl_destruct, perl_free, perl_parse, perl_run,
+PL_DBsingle, PL_DBsub, PL_DBtrace, PL_dowarn, PL_last_in_gv, PL_modglobal,
+PL_na, PL_ofs_sv, PL_rs, PL_sv_no, PL_sv_undef, PL_sv_yes, POPi, POPl,
+POPn, POPp, POPs, PUSHi, PUSHMARK, PUSHn, PUSHp, PUSHs, PUSHu, PUTBACK,
+Renew, Renewc, require_pv, RETVAL, Safefree, savepv, savepvn, SAVETMPS, SP,
+SPAGAIN, ST, strEQ, strGE, strGT, strLE, strLT, strNE, strnEQ, strnNE,
+StructCopy, SvCUR, SvCUR_set, SvEND, SvGETMAGIC, SvGROW, SvIOK, SvIOKp,
+SvIOK_notUV, SvIOK_off, SvIOK_on, SvIOK_only, SvIOK_only_UV, SvIOK_UV,
+SvIV, SvIVX, SvLEN, SvNIOK, SvNIOKp, SvNIOK_off, SvNOK, SvNOKp, SvNOK_off,
+SvNOK_on, SvNOK_only, SvNV, SvNVX, SvOK, SvOOK, SvPOK, SvPOKp, SvPOK_off,
+SvPOK_on, SvPOK_only, SvPOK_only_UTF8, SvPV, SvPVX, SvPV_force, SvPV_nolen,
+SvREFCNT, SvREFCNT_dec, SvREFCNT_inc, SvROK, SvROK_off, SvROK_on, SvRV,
+SvSETMAGIC, SvSetSV, SvSetSV_nosteal, SvSTASH, SvTAINT, SvTAINTED,
+SvTAINTED_off, SvTAINTED_on, SvTRUE, svtype, SvTYPE, SVt_IV, SVt_NV,
+SVt_PV, SVt_PVAV, SVt_PVCV, SVt_PVHV, SVt_PVMG, SvUOK, SvUPGRADE, SvUTF8,
+SvUTF8_off, SvUTF8_on, SvUV, SvUVX, sv_2mortal, sv_bless, sv_catpv,
sv_catpvf, sv_catpvf_mg, sv_catpvn, sv_catpvn_mg, sv_catpv_mg, sv_catsv,
sv_catsv_mg, sv_chop, sv_clear, sv_cmp, sv_cmp_locale, sv_dec,
sv_derived_from, sv_eq, sv_free, sv_gets, sv_grow, sv_inc, sv_insert,
sv_setref_pvn, sv_setsv, sv_setsv_mg, sv_setuv, sv_setuv_mg, sv_true,
sv_unmagic, sv_unref, sv_unref_flags, sv_upgrade, sv_usepvn, sv_usepvn_mg,
sv_utf8_downgrade, sv_utf8_encode, sv_utf8_upgrade, sv_vcatpvfn,
-sv_vsetpvfn, THIS, toLOWER, toUPPER, U8 *s, utf8_distance, utf8_hop,
-utf8_length, utf8_to_bytes, utf8_to_uv, utf8_to_uv_simple, warn, XPUSHi,
+sv_vsetpvfn, THIS, toLOWER, toUPPER, utf8_distance, utf8_hop, utf8_length,
+utf8_to_bytes, utf8_to_uv, utf8_to_uv_simple, uv_to_utf8, warn, XPUSHi,
XPUSHn, XPUSHp, XPUSHs, XPUSHu, XS, XSRETURN, XSRETURN_EMPTY, XSRETURN_IV,
XSRETURN_NO, XSRETURN_NV, XSRETURN_PV, XSRETURN_UNDEF, XSRETURN_YES,
XST_mIV, XST_mNO, XST_mNV, XST_mPV, XST_mUNDEF, XST_mYES, XS_VERSION,
=item DESCRIPTION
-djSP, is_gv_magical, start_glob
+djSP, is_gv_magical, LVRET, start_glob
=item AUTHORS
C<1.2.3> parse differently, Possibly changed pseudo-random number
generator, Hashing function for hash keys has changed, C<undef> fails on
read only values, Close-on-exec bit may be set on pipe and socket handles,
-Writing C<"$$1"> to mean C<"${$}1"> is unsupported, vec(EXPR,OFFSET,BITS)
-enforces powers-of-two BITS, Text of some diagnostic output has changed,
-C<%@> has been removed, Parenthesized not() behaves like a list operator,
-Semantics of bareword prototype C<(*)> have changed, Semantics of bit
-operators may have changed on 64-bit platforms, More builtins taint their
-results
+Writing C<"$$1"> to mean C<"${$}1"> is unsupported, delete(), each(),
+values() and C<\(%h)>, vec(EXPR,OFFSET,BITS) enforces powers-of-two BITS,
+Text of some diagnostic output has changed, C<%@> has been removed,
+Parenthesized not() behaves like a list operator, Semantics of bareword
+prototype C<(*)> have changed, Semantics of bit operators may have changed
+on 64-bit platforms, More builtins taint their results
=item C Source Incompatibilities
Threads, Unicode, 64-bit support, Lvalue subroutines, Weak references, The
pseudo-hash data type, The Compiler suite, Internal implementation of file
-globbing, The DB module, The regular expression constructs C<(?{ code })>
-and C<(??{ code })>
+globbing, The DB module, The regular expression code constructs:
=back
=item Shortcomings of Perl under AmigaOS
-fork(), some features of the UNIX filesystem regarding link count and file
-dates, inplace operation (the -i switch) without backup file, umask()
-works, but the correct permissions are only set when the file is
-finally close()d
-
=back
=item INSTALLATION
=back
-=head2 perldos - Perl under DOS, W31, W95.
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Prerequisites
-
-DJGPP, Pthreads
-
-=item Shortcomings of Perl under DOS
-
-=item Building
-
-=item Testing
-
-=item Installation
-
-=back
-
-=item BUILDING AND INSTALLING MODULES
-
-=over 4
-
-=item Prerequisites
-
-=item Unpacking CPAN Modules
-
-=item Building Non-XS Modules
-
-=item Building XS Modules
-
-=back
-
-=item AUTHOR
-
-=item SEE ALSO
-
-=back
-
=head2 perlepoc, README.epoc - Perl for EPOC
=over 4
=back
-=head2 perlwin32 - Perl under Win32
-
-=over 4
-
-=item SYNOPSIS
-
-=item DESCRIPTION
-
-=over 4
-
-=item Setting Up
-
-Make, Command Shell, Borland C++, Microsoft Visual C++, Mingw32 with GCC
-
-=item Building
-
-=item Testing
-
-=item Installation
-
-=item Usage Hints
-
-Environment Variables, File Globbing, Using perl from the command line,
-Building Extensions, Command-line Wildcard Expansion, Win32 Specific
-Extensions, Running Perl Scripts, Miscellaneous Things
-
-=back
-
-=item BUGS AND CAVEATS
-
-=item AUTHORS
-
-Gary Ng E<lt>71564.1743@CompuServe.COME<gt>, Gurusamy Sarathy
-E<lt>gsar@activestate.comE<gt>, Nick Ing-Simmons
-E<lt>nick@ing-simmons.netE<gt>
-
-=item SEE ALSO
-
-=item HISTORY
-
-=back
-
=head1 PRAGMA DOCUMENTATION
=head2 attrs - set/get attributes of a subroutine (deprecated)
=back
+=head2 B::Concise - Walk Perl syntax tree, printing concise info about ops
+
+=over 4
+
+=item SYNOPSIS
+
+=item DESCRIPTION
+
+=item OPTIONS
+
+B<-basic>, B<-exec>, B<-tree>, B<-compact>, B<-loose>, B<-vt>, B<-ascii>,
+B<-main>, B<-base>I<n>, B<-bigendian>, B<-littleendian>, B<-concise>,
+B<-terse>, B<-linenoise>, B<-debug>, B<-env>
+
+=item FORMATTING SPECIFICATIONS
+
+B<(x(>I<exec_text>B<;>I<basic_text>B<)x)>, B<(*(>I<text>B<)*)>,
+B<(*(>I<text1>B<;>I<text2>B<)*)>, B<(?(>I<text1>B<#>I<var>I<Text2>B<)?)>,
+B<#>I<var>, B<#>I<var>I<N>, B<~>, B<#addr>, B<#arg>, B<#class>,
+B<#classym>, B<#coplabel>, B<#exname>, B<#extarg>, B<#firstaddr>,
+B<#flags>, B<#flagval>, B<#hyphenseq>, B<#label>, B<#lastaddr>, B<#name>,
+B<#NAME>, B<#next>, B<#nextaddr>, B<#noise>, B<#private>, B<#privval>,
+B<#seq>, B<#seqnum>, B<#sibaddr>, B<#svaddr>, B<#svclass>, B<#svval>,
+B<#targ>, B<#targarg>, B<#targarglife>, B<#typenum>
+
+=item ABBREVIATIONS
+
+=over 4
+
+=item OP flags abbreviations
+
+=item OP class abbreviations
+
+=back
+
+=item AUTHOR
+
+=back
+
=head2 B::Debug - Walk Perl syntax tree, printing debug info about ops
=over 4
=item OPTIONS
B<-l>, B<-p>, B<-q>, B<-u>I<PACKAGE>, B<-s>I<LETTERS>, B<C>, B<i>I<NUMBER>,
-B<T>, B<v>I<STRING>B<.>
+B<T>, B<v>I<STRING>B<.>, B<-x>I<LEVEL>
=item USING B::Deparse AS A MODULE
C<d_setresuid>, C<d_setreuid>, C<d_setrgid>, C<d_setruid>, C<d_setsent>,
C<d_setsid>, C<d_setvbuf>, C<d_sfio>, C<d_shm>, C<d_shmat>,
C<d_shmatprototype>, C<d_shmctl>, C<d_shmdt>, C<d_shmget>, C<d_sigaction>,
-C<d_sigsetjmp>, C<d_socket>, C<d_socklen_t>, C<d_sockpair>,
-C<d_socks5_init>, C<d_sqrtl>, C<d_statblks>, C<d_statfs_f_flags>,
-C<d_statfs_s>, C<d_statvfs>, C<d_stdio_cnt_lval>, C<d_stdio_ptr_lval>,
-C<d_stdio_ptr_lval_nochange_cnt>, C<d_stdio_ptr_lval_sets_cnt>,
-C<d_stdio_stream_array>, C<d_stdiobase>, C<d_stdstdio>, C<d_strchr>,
-C<d_strcoll>, C<d_strctcpy>, C<d_strerrm>, C<d_strerror>, C<d_strtod>,
-C<d_strtol>, C<d_strtold>, C<d_strtoll>, C<d_strtoq>, C<d_strtoul>,
-C<d_strtoull>, C<d_strtouq>, C<d_strxfrm>, C<d_suidsafe>, C<d_symlink>,
-C<d_syscall>, C<d_sysconf>, C<d_sysernlst>, C<d_syserrlst>, C<d_system>,
-C<d_tcgetpgrp>, C<d_tcsetpgrp>, C<d_telldir>, C<d_telldirproto>, C<d_time>,
-C<d_times>, C<d_truncate>, C<d_tzname>, C<d_umask>, C<d_uname>,
-C<d_union_semun>, C<d_ustat>, C<d_vendorarch>, C<d_vendorbin>,
-C<d_vendorlib>, C<d_vfork>, C<d_void_closedir>, C<d_voidsig>, C<d_voidtty>,
-C<d_volatile>, C<d_vprintf>, C<d_wait4>, C<d_waitpid>, C<d_wcstombs>,
-C<d_wctomb>, C<d_xenix>, C<date>, C<db_hashtype>, C<db_prefixtype>,
-C<defvoidused>, C<direntrytype>, C<dlext>, C<dlsrc>, C<doublesize>,
-C<drand01>, C<dynamic_ext>
+C<d_sigprocmask>, C<d_sigsetjmp>, C<d_socket>, C<d_socklen_t>,
+C<d_sockpair>, C<d_socks5_init>, C<d_sqrtl>, C<d_statblks>,
+C<d_statfs_f_flags>, C<d_statfs_s>, C<d_statvfs>, C<d_stdio_cnt_lval>,
+C<d_stdio_ptr_lval>, C<d_stdio_ptr_lval_nochange_cnt>,
+C<d_stdio_ptr_lval_sets_cnt>, C<d_stdio_stream_array>, C<d_stdiobase>,
+C<d_stdstdio>, C<d_strchr>, C<d_strcoll>, C<d_strctcpy>, C<d_strerrm>,
+C<d_strerror>, C<d_strtod>, C<d_strtol>, C<d_strtold>, C<d_strtoll>,
+C<d_strtoq>, C<d_strtoul>, C<d_strtoull>, C<d_strtouq>, C<d_strxfrm>,
+C<d_suidsafe>, C<d_symlink>, C<d_syscall>, C<d_sysconf>, C<d_sysernlst>,
+C<d_syserrlst>, C<d_system>, C<d_tcgetpgrp>, C<d_tcsetpgrp>, C<d_telldir>,
+C<d_telldirproto>, C<d_time>, C<d_times>, C<d_truncate>, C<d_tzname>,
+C<d_umask>, C<d_uname>, C<d_union_semun>, C<d_ustat>, C<d_vendorarch>,
+C<d_vendorbin>, C<d_vendorlib>, C<d_vfork>, C<d_void_closedir>,
+C<d_voidsig>, C<d_voidtty>, C<d_volatile>, C<d_vprintf>, C<d_wait4>,
+C<d_waitpid>, C<d_wcstombs>, C<d_wctomb>, C<d_xenix>, C<date>,
+C<db_hashtype>, C<db_prefixtype>, C<defvoidused>, C<direntrytype>,
+C<dlext>, C<dlsrc>, C<doublesize>, C<drand01>, C<dynamic_ext>
=item e
MAKEAPERL, MAKEFILE, MAN1PODS, MAN3PODS, MAP_TARGET, MYEXTLIB, NAME,
NEEDS_LINKING, NOECHO, NORECURS, NO_VC, OBJECT, OPTIMIZE, PERL, PERLMAINCC,
PERL_ARCHLIB, PERL_LIB, PERL_MALLOC_OK, PERL_SRC, PERM_RW, PERM_RWX,
-PL_FILES, PM, PMLIBDIRS, POLLUTE, PPM_INSTALL_EXEC, PPM_INSTALL_SCRIPT,
-PREFIX, PREREQ_PM, SKIP, TYPEMAPS, VERSION, VERSION_FROM, XS, XSOPT,
-XSPROTOARG, XS_VERSION
+PL_FILES, PM, PMLIBDIRS, PM_FILTER, POLLUTE, PPM_INSTALL_EXEC,
+PPM_INSTALL_SCRIPT, PREFIX, PREREQ_PM, SKIP, TYPEMAPS, VERSION,
+VERSION_FROM, XS, XSOPT, XSPROTOARG, XS_VERSION
=item Additional lowercase attributes
Win32::GetLastError(), Win32::GetLongPathName(PATHNAME),
Win32::GetNextAvailDrive(), Win32::GetOSVersion(),
Win32::GetShortPathName(PATHNAME), Win32::GetProcAddress(INSTANCE,
-PROCNAME), Win32::GetTickCount(), Win32::IsWinNT(), Win32::IsWin95(),
-Win32::LoadLibrary(LIBNAME), Win32::LoginName(),
-Win32::LookupAccountName(SYSTEM, ACCOUNT, DOMAIN, SID, SIDTYPE),
-Win32::LookupAccountSID(SYSTEM, SID, ACCOUNT, DOMAIN, SIDTYPE),
+PROCNAME), Win32::GetTickCount(), Win32::InitiateSystemShutdown,
+Win32::IsWinNT(), Win32::IsWin95(), Win32::LoadLibrary(LIBNAME),
+Win32::LoginName(), Win32::LookupAccountName(SYSTEM, ACCOUNT, DOMAIN, SID,
+SIDTYPE), Win32::LookupAccountSID(SYSTEM, SID, ACCOUNT, DOMAIN, SIDTYPE),
Win32::MsgBox(MESSAGE [, FLAGS [, TITLE]]), Win32::NodeName(),
Win32::RegisterServer(LIBRARYNAME), Win32::SetCwd(NEWDIRECTORY),
Win32::SetLastError(ERROR), Win32::Sleep(TIME), Win32::Spawn(COMMAND, ARGS,
There is currently no easy way to mark data read from a file or other
external source as being utf8. This will be one of the major areas of
-focus in the near future.
+focus in the near future. Unfortunately it is unlikely that the Perl
+5.6 and earlier will ever gain this capability.
=item Regular Expressions
If the C<-C> command line switch is used, (or the ${^WIDE_SYSTEM_CALLS}
global flag is set to C<1>), all system calls will use the
corresponding wide character APIs. This is currently only implemented
-on Windows.
+on Windows as other platforms do not have a unified way of handling
+wide character APIs.
Regardless of the above, the C<bytes> pragma can always be used to force
byte semantics in a particular lexical scope. See L<bytes>.
Regular expressions match characters instead of bytes. For instance,
"." matches a character instead of a byte. (However, the C<\C> pattern
-is provided to force a match a single byte ("C<char>" in C, hence
-C<\C>).)
+is available to force a match a single byte ("C<char>" in C, hence C<\C>).)
=item *
=head2 Character encodings for input and output
-[XXX: This feature is not yet implemented.]
+This feature is in the process of getting implemented.
+
+(For Perl 5.6 and earlier the support is unlikely to get integrated
+to the core language and some external module will be required.)
=head1 CAVEATS
=item $*
-Set to 1 to do multi-line matching within a string, 0 to tell Perl
-that it can assume that strings contain a single line, for the purpose
-of optimizing pattern matches. Pattern matches on strings containing
-multiple newlines can produce confusing results when C<$*> is 0. Default
-is 0. (Mnemonic: * matches multiple things.) This variable
-influences the interpretation of only C<^> and C<$>. A literal newline can
-be searched for even when C<$* == 0>.
+Set to a non-zero integer value to do multi-line matching within a
+string, 0 (or undefined) to tell Perl that it can assume that strings
+contain a single line, for the purpose of optimizing pattern matches.
+Pattern matches on strings containing multiple newlines can produce
+confusing results when C<$*> is 0 or undefined. Default is undefined.
+(Mnemonic: * matches multiple things.) This variable influences the
+interpretation of only C<^> and C<$>. A literal newline can be searched
+for even when C<$* == 0>.
Use of C<$*> is deprecated in modern Perl, supplanted by
the C</s> and C</m> modifiers on pattern matching.
+Assigning a non-numerical value to C<$*> triggers a warning (and makes
+C<$*> act if C<$* == 0>), while assigning a numerical value to C<$*>
+makes that an implicit C<int> is applied on the value.
+
=item input_line_number HANDLE EXPR
=item $INPUT_LINE_NUMBER
if (PL_op->op_flags & OPf_REF) {
PUSHs(TARG);
RETURN;
+ } else if (LVRET) {
+ if (GIMME == G_SCALAR)
+ Perl_croak(aTHX_ "Can't return array to lvalue scalar context");
+ PUSHs(TARG);
+ RETURN;
}
if (GIMME == G_ARRAY) {
I32 maxarg = AvFILL((AV*)TARG) + 1;
SAVECLEARSV(PL_curpad[PL_op->op_targ]);
if (PL_op->op_flags & OPf_REF)
RETURN;
+ else if (LVRET) {
+ if (GIMME == G_SCALAR)
+ Perl_croak(aTHX_ "Can't return hash to lvalue scalar context");
+ RETURN;
+ }
gimme = GIMME_V;
if (gimme == G_ARRAY) {
RETURNOP(do_kv());
{
djSP; dTARGET; dPOPss;
- if (PL_op->op_flags & OPf_MOD) {
+ if (PL_op->op_flags & OPf_MOD || LVRET) {
if (SvTYPE(TARG) < SVt_PVLV) {
sv_upgrade(TARG, SVt_PVLV);
sv_magic(TARG, Nullsv, '.', Nullch, 0);
else { /* Note: mark already snarfed by pp_list */
SV *tmpstr = POPs;
STRLEN len;
- bool isutf = DO_UTF8(tmpstr);
+ bool isutf;
SvSetSV(TARG, tmpstr);
SvPV_force(TARG, len);
+ isutf = DO_UTF8(TARG);
if (count != 1) {
if (count < 1)
SvCUR_set(TARG, 0);
(void)Perl_modf(tmp, &tmp);
value = (NV)tmp;
#endif
+ SETn(value);
}
}
else {
I32 pos;
I32 rem;
I32 fail;
- I32 lvalue = PL_op->op_flags & OPf_MOD;
+ I32 lvalue = PL_op->op_flags & OPf_MOD || LVRET;
char *tmps;
I32 arybase = PL_curcop->cop_arybase;
char *repl = 0;
STRLEN repl_len;
+ int num_args = PL_op->op_private & 7;
SvTAINTED_off(TARG); /* decontaminate */
SvUTF8_off(TARG); /* decontaminate */
- if (MAXARG > 2) {
- if (MAXARG > 3) {
+ if (num_args > 2) {
+ if (num_args > 3) {
sv = POPs;
repl = SvPV(sv, repl_len);
}
pos -= arybase;
rem = curlen-pos;
fail = rem;
- if (MAXARG > 2) {
+ if (num_args > 2) {
if (len < 0) {
rem += len;
if (rem < 0)
}
else {
pos += curlen;
- if (MAXARG < 3)
+ if (num_args < 3)
rem = curlen;
else if (len >= 0) {
rem = pos+len;
RETPUSHUNDEF;
}
else {
+ I32 upos = pos;
+ I32 urem = rem;
if (utfcurlen)
sv_pos_u2b(sv, &pos, &rem);
tmps += pos;
SvREFCNT_dec(LvTARG(TARG));
LvTARG(TARG) = SvREFCNT_inc(sv);
}
- LvTARGOFF(TARG) = pos;
- LvTARGLEN(TARG) = rem;
+ LvTARGOFF(TARG) = upos;
+ LvTARGLEN(TARG) = urem;
}
}
SPAGAIN;
register IV size = POPi;
register IV offset = POPi;
register SV *src = POPs;
- I32 lvalue = PL_op->op_flags & OPf_MOD;
+ I32 lvalue = PL_op->op_flags & OPf_MOD || LVRET;
SvTAINTED_off(TARG); /* decontaminate */
if (lvalue) { /* it's an lvalue! */
(void)SvUPGRADE(TARG,SVt_PV);
- if ((value > 255 && !IN_BYTE) ||
- (UTF8_IS_CONTINUED(value) && (PL_hints & HINT_UTF8)) ) {
- SvGROW(TARG, UTF8_MAXLEN+1);
- tmps = SvPVX(TARG);
- tmps = (char*)uv_to_utf8((U8*)tmps, (UV)value);
+ if (value > 255 && !IN_BYTE) {
+ SvGROW(TARG, UNISKIP(value)+1);
+ tmps = (char*)uv_to_utf8((U8*)SvPVX(TARG), value);
SvCUR_set(TARG, tmps - SvPVX(TARG));
*tmps = '\0';
(void)SvPOK_only(TARG);
XPUSHs(TARG);
RETURN;
}
- else {
- SvUTF8_off(TARG);
- }
SvGROW(TARG,2);
SvCUR_set(TARG, 1);
djSP; dMARK; dORIGMARK;
register SV** svp;
register AV* av = (AV*)POPs;
- register I32 lval = PL_op->op_flags & OPf_MOD;
+ register I32 lval = (PL_op->op_flags & OPf_MOD || LVRET);
I32 arybase = PL_curcop->cop_arybase;
I32 elem;
{
djSP; dMARK; dORIGMARK;
register HV *hv = (HV*)POPs;
- register I32 lval = PL_op->op_flags & OPf_MOD;
+ register I32 lval = (PL_op->op_flags & OPf_MOD || LVRET);
I32 realhv = (SvTYPE(hv) == SVt_PVHV);
if (!realhv && PL_op->op_private & OPpLVAL_INTRO)
else {
STRLEN keylen;
char *key = SvPV(keysv, keylen);
- save_delete(hv, key, keylen);
+ SAVEDELETE(hv, savepvn(key,keylen), keylen);
}
}
}
s = m;
}
}
- else if ((rx->reganch & RE_USE_INTUIT) && !rx->nparens
+ else if (do_utf8 == ((rx->reganch & ROPT_UTF8) != 0) &&
+ (rx->reganch & RE_USE_INTUIT) && !rx->nparens
&& (rx->reganch & ROPT_CHECK_ALL)
&& !(rx->reganch & ROPT_ANCH)) {
int tail = (rx->reganch & RE_INTUIT_TAIL);
SvREFCNT_dec(tmpRef); \
SvRV(rv)=AMG_CALLun(rv,copy); \
} } STMT_END
+
+/*
+=for apidoc mU||LVRET
+True if this op will be the return value of an lvalue subroutine
+
+=cut */
+#define LVRET ((PL_op->op_private & OPpMAYBE_LVSUB) && is_lvalue_sub())
#
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
# This file is built by opcode.pl from its data. Any changes made here
# will be lost!
#
Perl_ck_open
Perl_ck_repeat
Perl_ck_require
+Perl_ck_return
Perl_ck_rfun
Perl_ck_rvconst
Perl_ck_sassign
pm->op_pmflags = pm->op_pmpermflags; /* reset case sensitivity */
if (DO_UTF8(tmpstr))
pm->op_pmdynflags |= PMdf_DYN_UTF8;
- else
+ else {
pm->op_pmdynflags &= ~PMdf_DYN_UTF8;
+ if (pm->op_pmdynflags & PMdf_UTF8)
+ t = (char*)bytes_to_utf8((U8*)t, &len);
+ }
pm->op_pmregexp = CALLREGCOMP(aTHX_ t, t + len, pm);
- PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
+ if (!DO_UTF8(tmpstr) && (pm->op_pmdynflags & PMdf_UTF8))
+ Safefree(t);
+ PL_reginterp_cnt = 0; /* XXXX Be extra paranoid - needed
inside tie/overload accessors. */
}
}
}
}
+I32
+Perl_is_lvalue_sub(pTHX)
+{
+ I32 cxix;
+
+ cxix = dopoptosub(cxstack_ix);
+ assert(cxix >= 0); /* We should only be called from inside subs */
+
+ if (cxstack[cxix].blk_sub.lval && CvLVALUE(cxstack[cxix].blk_sub.cv))
+ return cxstack[cxix].blk_sub.lval;
+ else
+ return 0;
+}
+
STATIC I32
S_dopoptosub(pTHX_ I32 startingblock)
{
char *s;
s = SvPV(TOPs,len);
sv_setpvn(TARG,s,len);
- if (SvUTF8(TOPs) && !IN_BYTE)
+ if (SvUTF8(TOPs))
SvUTF8_on(TARG);
else
SvUTF8_off(TARG);
SETs((SV*)av);
RETURN;
}
+ else if (LVRET) {
+ if (GIMME == G_SCALAR)
+ Perl_croak(aTHX_ "Can't return array to lvalue scalar context");
+ SETs((SV*)av);
+ RETURN;
+ }
}
else {
if (SvTYPE(sv) == SVt_PVAV) {
SETs((SV*)av);
RETURN;
}
+ else if (LVRET) {
+ if (GIMME == G_SCALAR)
+ Perl_croak(aTHX_ "Can't return array to lvalue"
+ " scalar context");
+ SETs((SV*)av);
+ RETURN;
+ }
}
else {
GV *gv;
SETs((SV*)av);
RETURN;
}
+ else if (LVRET) {
+ if (GIMME == G_SCALAR)
+ Perl_croak(aTHX_ "Can't return array to lvalue"
+ " scalar context");
+ SETs((SV*)av);
+ RETURN;
+ }
}
}
SETs((SV*)hv);
RETURN;
}
+ else if (LVRET) {
+ if (GIMME == G_SCALAR)
+ Perl_croak(aTHX_ "Can't return hash to lvalue scalar context");
+ SETs((SV*)hv);
+ RETURN;
+ }
}
else {
if (SvTYPE(sv) == SVt_PVHV || SvTYPE(sv) == SVt_PVAV) {
SETs((SV*)hv);
RETURN;
}
+ else if (LVRET) {
+ if (GIMME == G_SCALAR)
+ Perl_croak(aTHX_ "Can't return hash to lvalue"
+ " scalar context");
+ SETs((SV*)hv);
+ RETURN;
+ }
}
else {
GV *gv;
SETs((SV*)hv);
RETURN;
}
+ else if (LVRET) {
+ if (GIMME == G_SCALAR)
+ Perl_croak(aTHX_ "Can't return hash to lvalue"
+ " scalar context");
+ SETs((SV*)hv);
+ RETURN;
+ }
}
}
SV **svp;
SV *keysv = POPs;
HV *hv = (HV*)POPs;
- U32 lval = PL_op->op_flags & OPf_MOD;
+ U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
U32 defer = PL_op->op_private & OPpLVAL_DEFER;
SV *sv;
U32 hash = (SvFAKE(keysv) && SvREADONLY(keysv)) ? SvUVX(keysv) : 0;
if (!preeminent) {
STRLEN keylen;
char *key = SvPV(keysv, keylen);
- save_delete(hv, key, keylen);
+ SAVEDELETE(hv, savepvn(key,keylen), keylen);
} else
save_helem(hv, keysv, svp);
}
SV* elemsv = POPs;
IV elem = SvIV(elemsv);
AV* av = (AV*)POPs;
- U32 lval = PL_op->op_flags & OPf_MOD;
+ U32 lval = PL_op->op_flags & OPf_MOD || LVRET;
U32 defer = (PL_op->op_private & OPpLVAL_DEFER) && (elem > AvFILL(av));
SV *sv;
-/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
This file is built by opcode.pl from its data. Any changes made here
will be lost!
*/
PERL_CKDEF(Perl_ck_open)
PERL_CKDEF(Perl_ck_repeat)
PERL_CKDEF(Perl_ck_require)
+PERL_CKDEF(Perl_ck_return)
PERL_CKDEF(Perl_ck_rfun)
PERL_CKDEF(Perl_ck_rvconst)
PERL_CKDEF(Perl_ck_sassign)
PP(pp_open)
{
- djSP; dTARGET;
+ djSP;
+ dMARK; dORIGMARK;
+ dTARGET;
GV *gv;
SV *sv;
SV *name = Nullsv;
char *tmps;
STRLEN len;
MAGIC *mg;
+ bool ok;
- if (MAXARG > 2) {
- name = POPs;
- have_name = 1;
- }
- if (MAXARG > 1)
- sv = POPs;
- if (!isGV(TOPs))
- DIE(aTHX_ PL_no_usym, "filehandle");
- if (MAXARG <= 1)
- sv = GvSV(TOPs);
- gv = (GV*)POPs;
+ gv = (GV *)*++MARK;
if (!isGV(gv))
DIE(aTHX_ PL_no_usym, "filehandle");
if (GvIOp(gv))
IoFLAGS(GvIOp(gv)) &= ~IOf_UNTAINT;
if ((mg = SvTIED_mg((SV*)gv, 'q'))) {
- PUSHMARK(SP);
- XPUSHs(SvTIED_obj((SV*)gv, mg));
- XPUSHs(sv);
- if (have_name)
- XPUSHs(name);
+ /* Method's args are same as ours ... */
+ /* ... except handle is replaced by the object */
+ *MARK-- = SvTIED_obj((SV*)gv, mg);
+ PUSHMARK(MARK);
PUTBACK;
ENTER;
call_method("OPEN", G_SCALAR);
RETURN;
}
+ if (MARK < SP) {
+ sv = *++MARK;
+ }
+ else {
+ sv = GvSV(gv);
+ }
+
tmps = SvPV(sv, len);
- if (do_open9(gv, tmps, len, FALSE, O_RDONLY, 0, Nullfp, name, have_name))
+ ok = do_openn(gv, tmps, len, FALSE, O_RDONLY, 0, Nullfp, MARK+1, (SP-MARK));
+ SP = ORIGMARK;
+ if (ok)
PUSHi( (I32)PL_forkprocess );
else if (PL_forkprocess == 0) /* we are a new child */
PUSHi(0);
#ifndef HAS_MKDIR
int oldumask;
#endif
- STRLEN n_a;
+ STRLEN len;
char *tmps;
+ bool copy = FALSE;
if (MAXARG > 1)
mode = POPi;
else
mode = 0777;
- tmps = SvPV(TOPs, n_a);
+ tmps = SvPV(TOPs, len);
+ /* Different operating and file systems take differently to
+ * trailing slashes. According to POSIX 1003.1 1996 Edition
+ * any number of trailing slashes should be allowed.
+ * Thusly we snip them away so that even non-conforming
+ * systems are happy. */
+ /* We should probably do this "filtering" for all
+ * the functions that expect (potentially) directory names:
+ * -d, chdir(), chmod(), chown(), chroot(), fcntl()?,
+ * (mkdir()), opendir(), rename(), rmdir(), stat(). --jhi */
+ if (len > 1 && tmps[len-1] == '/') {
+ while (tmps[len] == '/' && len > 1)
+ len--;
+ tmps = savepvn(tmps, len);
+ copy = TRUE;
+ }
TAINT_PROPER("mkdir");
#ifdef HAS_MKDIR
PerlLIO_umask(oldumask);
PerlLIO_chmod(tmps, (mode & ~oldumask) & 0777);
#endif
+ if (copy)
+ Safefree(tmps);
RETURN;
}
PERL_CALLCONV OP* Perl_do_kv(pTHX);
PERL_CALLCONV bool Perl_do_open(pTHX_ GV* gv, char* name, I32 len, int as_raw, int rawmode, int rawperm, PerlIO* supplied_fp);
PERL_CALLCONV bool Perl_do_open9(pTHX_ GV *gv, char *name, I32 len, int as_raw, int rawmode, int rawperm, PerlIO *supplied_fp, SV *svs, I32 num);
+PERL_CALLCONV bool Perl_do_openn(pTHX_ GV *gv, char *name, I32 len, int as_raw, int rawmode, int rawperm, PerlIO *supplied_fp, SV **svp, I32 num);
PERL_CALLCONV void Perl_do_pipe(pTHX_ SV* sv, GV* rgv, GV* wgv);
PERL_CALLCONV bool Perl_do_print(pTHX_ SV* sv, PerlIO* fp);
PERL_CALLCONV OP* Perl_do_readline(pTHX);
PERL_CALLCONV bool Perl_io_close(pTHX_ IO* io, bool not_implicit);
PERL_CALLCONV OP* Perl_invert(pTHX_ OP* cmd);
PERL_CALLCONV bool Perl_is_gv_magical(pTHX_ char *name, STRLEN len, U32 flags);
+PERL_CALLCONV I32 Perl_is_lvalue_sub(pTHX);
PERL_CALLCONV bool Perl_is_uni_alnum(pTHX_ U32 c);
PERL_CALLCONV bool Perl_is_uni_alnumc(pTHX_ U32 c);
PERL_CALLCONV bool Perl_is_uni_idfirst(pTHX_ U32 c);
PERL_CALLCONV int Perl_magic_clearsig(pTHX_ SV* sv, MAGIC* mg);
PERL_CALLCONV int Perl_magic_existspack(pTHX_ SV* sv, MAGIC* mg);
PERL_CALLCONV int Perl_magic_freeregexp(pTHX_ SV* sv, MAGIC* mg);
+PERL_CALLCONV int Perl_magic_freeovrld(pTHX_ SV* sv, MAGIC* mg);
PERL_CALLCONV int Perl_magic_get(pTHX_ SV* sv, MAGIC* mg);
PERL_CALLCONV int Perl_magic_getarylen(pTHX_ SV* sv, MAGIC* mg);
PERL_CALLCONV int Perl_magic_getdefelem(pTHX_ SV* sv, MAGIC* mg);
PERL_CALLCONV I32 Perl_call_method(pTHX_ const char* methname, I32 flags);
PERL_CALLCONV I32 Perl_call_pv(pTHX_ const char* sub_name, I32 flags);
PERL_CALLCONV I32 Perl_call_sv(pTHX_ SV* sv, I32 flags);
+PERL_CALLCONV void Perl_despatch_signals(pTHX);
PERL_CALLCONV SV* Perl_eval_pv(pTHX_ const char* p, I32 croak_on_error);
PERL_CALLCONV I32 Perl_eval_sv(pTHX_ SV* sv, I32 flags);
PERL_CALLCONV SV* Perl_get_sv(pTHX_ const char* name, I32 create);
PERL_CALLCONV int Perl_yyerror(pTHX_ char* s);
#ifdef USE_PURE_BISON
PERL_CALLCONV int Perl_yylex_r(pTHX_ YYSTYPE *lvalp, int *lcharp);
-PERL_CALLCONV int Perl_yylex(pTHX_ YYSTYPE *lvalp, int *lcharp);
-#else
-PERL_CALLCONV int Perl_yylex(pTHX);
#endif
+PERL_CALLCONV int Perl_yylex(pTHX);
PERL_CALLCONV int Perl_yyparse(pTHX);
PERL_CALLCONV int Perl_yywarn(pTHX_ char* s);
#if defined(MYMALLOC)
STATIC OP* S_scalarboolean(pTHX_ OP *o);
STATIC OP* S_too_few_arguments(pTHX_ OP *o, char* name);
STATIC OP* S_too_many_arguments(pTHX_ OP *o, char* name);
+STATIC U8* S_trlist_upgrade(pTHX_ U8** sp, U8** ep);
STATIC void S_op_clear(pTHX_ OP* o);
STATIC void S_null(pTHX_ OP* o);
STATIC PADOFFSET S_pad_addlex(pTHX_ SV* name);
STATIC int S_sv_2inuv_non_preserve(pTHX_ SV *sv, I32 numtype);
STATIC int S_sv_2iuv_non_preserve(pTHX_ SV *sv, I32 numtype);
# endif
+STATIC I32 S_expect_number(pTHX_ char** pattern);
#endif
#if defined(PERL_IN_TOKE_C) || defined(PERL_DECL_PROT)
#define ISMULT1(c) ((c) == '*' || (c) == '+' || (c) == '?')
#define ISMULT2(s) ((*s) == '*' || (*s) == '+' || (*s) == '?' || \
((*s) == '{' && regcurly(s)))
-#ifdef atarist
-#define PERL_META "^$.[()|?+*\\"
-#else
-#define META "^$.[()|?+*\\"
-#endif
#ifdef SPSTART
#undef SPSTART /* dratted cpp namespace... */
if (compat)
ANYOF_BITMAP_SET(data->start_class, uc);
data->start_class->flags &= ~ANYOF_EOS;
+ if (uc < 0x100)
+ data->start_class->flags &= ~ANYOF_UNICODE_ALL;
}
else if (flags & SCF_DO_STCLASS_OR) {
/* false positive possible if the class is case-folded */
if (uc < 0x100)
- ANYOF_BITMAP_SET(data->start_class, uc);
+ ANYOF_BITMAP_SET(data->start_class, uc);
+ else
+ data->start_class->flags |= ANYOF_UNICODE_ALL;
data->start_class->flags &= ~ANYOF_EOS;
cl_and(data->start_class, &and_with);
}
S_regcppush(pTHX_ I32 parenfloor)
{
int retval = PL_savestack_ix;
- int i = (PL_regsize - parenfloor) * 4;
+#define REGCP_PAREN_ELEMS 4
+ int paren_elems_to_push = (PL_regsize - parenfloor) * REGCP_PAREN_ELEMS;
int p;
- SSCHECK(i + 5);
+#define REGCP_OTHER_ELEMS 5
+ SSCHECK(paren_elems_to_push + REGCP_OTHER_ELEMS);
for (p = PL_regsize; p > parenfloor; p--) {
+/* REGCP_PARENS_ELEMS are pushed per pairs of parentheses. */
SSPUSHINT(PL_regendp[p]);
SSPUSHINT(PL_regstartp[p]);
SSPUSHPTR(PL_reg_start_tmp[p]);
SSPUSHINT(p);
}
+/* REGCP_OTHER_ELEMS are pushed in any case, parentheses or no. */
SSPUSHINT(PL_regsize);
SSPUSHINT(*PL_reglastparen);
SSPUSHPTR(PL_reginput);
- SSPUSHINT(i + 3);
- SSPUSHINT(SAVEt_REGCONTEXT);
+ SSPUSHINT(paren_elems_to_push + (REGCP_PAREN_ELEMS - 1));
+ SSPUSHINT(SAVEt_REGCONTEXT); /* Magic cookie. */
return retval;
}
STATIC char *
S_regcppop(pTHX)
{
- I32 i = SSPOPINT;
+ I32 i;
U32 paren = 0;
char *input;
I32 tmps;
- assert(i == SAVEt_REGCONTEXT);
+
+ /* Pop REGCP_OTHER_ELEMS before the parentheses loop starts. */
i = SSPOPINT;
+ assert(i == SAVEt_REGCONTEXT); /* Check that the magic cookie is there. */
+ i = SSPOPINT; /* Parentheses elements to pop. */
input = (char *) SSPOPPTR;
*PL_reglastparen = SSPOPINT;
PL_regsize = SSPOPINT;
- for (i -= 3; i > 0; i -= 4) {
+
+ /* Now restore the parentheses context. */
+ for (i -= (REGCP_PAREN_ELEMS - 1); i > 0; i -= REGCP_PAREN_ELEMS) {
paren = (U32)SSPOPINT;
PL_reg_start_tmp[paren] = (char *) SSPOPPTR;
PL_regstartp[paren] = SSPOPINT;
DEBUG_r(PerlIO_printf(Perl_debug_log,
", trying anchored starting at offset %ld...\n",
(long)(s1 + 1 - i_strpos)));
- other_last = last + 1;
+ other_last = last;
s = HOP3c(t, 1, strend);
goto restart;
}
else {
DEBUG_r(PerlIO_printf(Perl_debug_log, " at offset %ld...\n",
(long)(s - i_strpos)));
- other_last = s + 1;
+ other_last = s; /* Fix this later. --Hugo */
s = s1;
if (t == strpos)
goto try_at_start;
PL_reg_ganch = strbeg;
}
- if (!(flags & REXEC_CHECKED) && prog->check_substr != Nullsv) {
+ if (do_utf8 == (UTF!=0) &&
+ !(flags & REXEC_CHECKED) && prog->check_substr != Nullsv) {
re_scream_pos_data d;
d.scream_olds = &scream_olds;
ptr = SSPOPPTR;
(void)hv_delete(hv, (char*)ptr, (U32)SSPOPINT, G_DISCARD);
SvREFCNT_dec(hv);
+ Safefree(ptr);
break;
case SAVEt_DESTRUCTOR:
ptr = SSPOPPTR;
#define SAVEt_GENERIC_PVREF 34
#define SAVEt_PADSV 35
+#ifndef SCOPE_SAVES_SIGNAL_MASK
+#define SCOPE_SAVES_SIGNAL_MASK 0
+#endif
+
#define SSCHECK(need) if (PL_savestack_ix + need > PL_savestack_max) savestack_grow()
#define SSPUSHINT(i) (PL_savestack[PL_savestack_ix++].any_i32 = (I32)(i))
#define SSPUSHLONG(i) (PL_savestack[PL_savestack_ix++].any_long = (long)(i))
DEBUG_l(Perl_deb(aTHX_ "Setting up jumplevel %p, was %p\n", \
ce, PL_top_env)); \
JMPENV_PUSH_INIT_ENV(ce,NULL); \
- EXCEPT_SET_ENV(ce,PerlProc_setjmp((ce).je_buf, 1));\
+ EXCEPT_SET_ENV(ce,PerlProc_setjmp((ce).je_buf, SCOPE_SAVES_SIGNAL_MASK));\
(ce).je_noset = 1; \
} \
else \
&cur_env, PL_top_env)); \
cur_env.je_prev = PL_top_env; \
OP_REG_TO_MEM; \
- cur_env.je_ret = PerlProc_setjmp(cur_env.je_buf, 1); \
+ cur_env.je_ret = PerlProc_setjmp(cur_env.je_buf, SCOPE_SAVES_SIGNAL_MASK); \
OP_MEM_TO_REG; \
PL_top_env = &cur_env; \
cur_env.je_mustcatch = FALSE; \
{
/* With these two if statements:
u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
-
+
without
u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
-
+
If you wish to remove them, please benchmark to see what the effect is
*/
if (u <= (UV)IV_MAX) {
{
/* With these two if statements:
u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
-
+
without
u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
-
+
If you wish to remove them, please benchmark to see what the effect is
*/
if (u <= (UV)IV_MAX) {
Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flags meaning
changes - now IV and NV together means that the two are interchangeable
SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
-
+
The benefit of this is operations such as pp_add know that if SvIOK is
true for both left and right operands, then integer addition can be
used instead of floating point. (for cases where the result won't
S_sv_2inuv_non_preserve (pTHX_ register SV *sv, I32 numtype) {
NV nv = SvNVX(sv); /* Code simpler and had compiler problems if */
UV nv_as_uv = U_V(nv); /* these are not in simple variables. */
- DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2inuv_non '%s', IV=0x%"UVxf" NV=%g inttype=%X\n", SvPVX(sv), SvIVX(sv), nv, numtype));
+ DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2inuv_non '%s', IV=0x%"UVxf" NV=%g inttype=%"UVXf"\n", SvPVX(sv), SvIVX(sv), nv, (UV)numtype));
if (nv_as_uv <= (UV)IV_MAX) {
(void)SvIOKp_on(sv);
(void)SvNOKp_on(sv);
#else
/* We've just lost integer precision, nothing we could do. */
SvUVX(sv) = nv_as_uv;
- DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2niuv_non UV? '%s', UV=0x%"UVxf" NV=%g U_V(NV)=0x%"UVxf" inttype=%X\n", SvPVX(sv), SvIVX(sv), nv, nv_as_uv, numtype));
+ DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2niuv_non UV? '%s', UV=0x%"UVxf" NV=%g U_V(NV)=0x%"UVxf" inttype=%"UVXf"\n", SvPVX(sv), SvIVX(sv), nv, nv_as_uv, (UV)numtype));
/* UV and NV slots equally valid only if we have casting symmetry. */
if (numtype & IS_NUMBER_NOT_INT) {
SvIsUV_on(sv);
STATIC int
S_sv_2iuv_non_preserve (pTHX_ register SV *sv, I32 numtype)
{
- DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%g inttype=%X\n", SvPVX(sv), SvIVX(sv), SvNVX(sv), numtype));
+ DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%g inttype=%"UVXf"\n", SvPVX(sv), SvIVX(sv), SvNVX(sv), (UV)numtype));
if (SvNVX(sv) < (NV)IV_MIN) {
(void)SvIOKp_on(sv);
(void)SvNOK_on(sv);
(NV)UVX == NVX are both true, but the values differ. :-(
Hopefully for 2s complement IV_MIN is something like
0x8000000000000000 which will be exact. NWC */
- }
+ }
else {
SvUVX(sv) = U_V(SvNVX(sv));
if (
(NV)UVX == NVX are both true, but the values differ. :-(
Hopefully for 2s complement IV_MIN is something like
0x8000000000000000 which will be exact. NWC */
- }
+ }
else {
SvUVX(sv) = U_V(SvNVX(sv));
if (
UV u;
char *num_begin = SvPVX(sv);
int save_errno = errno;
-
+
/* seems that strtoul taking numbers that start with - is
implementation dependant, and can't be relied upon. */
if (numtype & IS_NUMBER_NEG) {
if (*num_begin == '-')
num_begin++;
}
-
+
/* Is it an integer that we could convert with strtoul?
So try it, and if it doesn't set errno then it's pukka.
This should be faster than going atof and then thinking. */
&& ((errno = 0), 1) /* always true */
&& ((u = Strtoul(num_begin, Null(char**), 10)), 1) /* ditto */
&& (errno == 0)
- /* If known to be negative, check it didn't undeflow IV
+ /* If known to be negative, check it didn't undeflow IV
XXX possibly we should put more negative values as NVs
direct rather than go via atof below */
&& ((numtype & IS_NUMBER_NEG) ? (u <= (UV)IV_MIN) : 1)) {
* LONG_MAX and LONG_MIN when given out of range values. ANSI says they should
* do this, and vendors have had 11 years to get it right.
* However, will try to make it still work with only atol
- *
+ *
* IS_NUMBER_TO_INT_BY_ATOL 123456789 or 123456789.3 definitely < IV_MAX
* IS_NUMBER_TO_INT_BY_STRTOL 123456789 or 123456789.3 if digits = IV_MAX
* IS_NUMBER_TO_INT_BY_ATOF 123456789e0 or >> IV_MAX
nbegin = s;
/*
- * we return IS_NUMBER_TO_INT_BY_ATOL if the number can converted to
+ * we return IS_NUMBER_TO_INT_BY_ATOL if the number can converted to
* integer with atol() without overflow, IS_NUMBER_TO_INT_BY_STRTOL if
* possibly slightly larger than max int, IS_NUMBER_TO_INT_BY_ATOF if you
* will need (int)atof().
if (hibit) {
STRLEN len;
+
if (SvREADONLY(sv) && SvFAKE(sv)) {
sv_force_normal(sv);
s = SvPVX(sv);
{
if (SvPOK(sv) && SvUTF8(sv)) {
if (SvCUR(sv)) {
- char *c = SvPVX(sv);
- STRLEN len = SvCUR(sv);
+ char *s;
+ STRLEN len;
- if (!utf8_to_bytes((U8*)c, &len)) {
+ if (SvREADONLY(sv) && SvFAKE(sv))
+ sv_force_normal(sv);
+ s = SvPV(sv, len);
+ if (!utf8_to_bytes((U8*)s, &len)) {
if (fail_ok)
return FALSE;
else {
SvRV(dstr) = SvREFCNT_inc(SvRV(sstr));
SvROK_on(dstr);
if (sflags & SVp_NOK) {
- SvNOK_on(dstr);
+ SvNOKp_on(dstr);
+ /* Only set the public OK flag if the source has public OK. */
+ if (sflags & SVf_NOK)
+ SvFLAGS(dstr) |= SVf_NOK;
SvNVX(dstr) = SvNVX(sstr);
}
if (sflags & SVp_IOK) {
- (void)SvIOK_on(dstr);
- SvIVX(dstr) = SvIVX(sstr);
+ (void)SvIOKp_on(dstr);
+ if (sflags & SVf_IOK)
+ SvFLAGS(dstr) |= SVf_IOK;
if (sflags & SVf_IVisUV)
SvIsUV_on(dstr);
+ SvIVX(dstr) = SvIVX(sstr);
}
if (SvAMAGIC(sstr)) {
SvAMAGIC_on(dstr);
*SvEND(dstr) = '\0';
(void)SvPOK_only(dstr);
}
- if ((sflags & SVf_UTF8) && !IN_BYTE)
+ if (sflags & SVf_UTF8)
SvUTF8_on(dstr);
/*SUPPRESS 560*/
if (sflags & SVp_NOK) {
- SvNOK_on(dstr);
+ SvNOKp_on(dstr);
+ if (sflags & SVf_NOK)
+ SvFLAGS(dstr) |= SVf_NOK;
SvNVX(dstr) = SvNVX(sstr);
}
if (sflags & SVp_IOK) {
- (void)SvIOK_on(dstr);
- SvIVX(dstr) = SvIVX(sstr);
+ (void)SvIOKp_on(dstr);
+ if (sflags & SVf_IOK)
+ SvFLAGS(dstr) |= SVf_IOK;
if (sflags & SVf_IVisUV)
SvIsUV_on(dstr);
- }
- }
- else if (sflags & SVp_NOK) {
- SvNVX(dstr) = SvNVX(sstr);
- (void)SvNOK_only(dstr);
- if (sflags & SVf_IOK) {
- (void)SvIOK_on(dstr);
SvIVX(dstr) = SvIVX(sstr);
- /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
- if (sflags & SVf_IVisUV)
- SvIsUV_on(dstr);
}
}
else if (sflags & SVp_IOK) {
- (void)SvIOK_only(dstr);
- SvIVX(dstr) = SvIVX(sstr);
+ if (sflags & SVf_IOK)
+ (void)SvIOK_only(dstr);
+ else {
+ SvOK_off(dstr);
+ SvIOKp_on(dstr);
+ }
+ /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
if (sflags & SVf_IVisUV)
SvIsUV_on(dstr);
+ SvIVX(dstr) = SvIVX(sstr);
+ if (sflags & SVp_NOK) {
+ if (sflags & SVf_NOK)
+ (void)SvNOK_on(dstr);
+ else
+ (void)SvNOKp_on(dstr);
+ SvNVX(dstr) = SvNVX(sstr);
+ }
+ }
+ else if (sflags & SVp_NOK) {
+ if (sflags & SVf_NOK)
+ (void)SvNOK_only(dstr);
+ else {
+ SvOK_off(dstr);
+ SvNOKp_on(dstr);
+ }
+ SvNVX(dstr) = SvNVX(sstr);
}
else {
if (dtype == SVt_PVGV) {
mg->mg_virtual = &PL_vtbl_amagicelem;
break;
case 'c':
- mg->mg_virtual = 0;
+ mg->mg_virtual = &PL_vtbl_ovrld;
break;
case 'B':
mg->mg_virtual = &PL_vtbl_bm;
SvREADONLY_on(&tmpref); /* DESTROY() could be naughty */
SvREFCNT(&tmpref) = 1;
- do {
+ do {
stash = SvSTASH(sv);
destructor = StashHANDLER(stash,DESTROY);
if (destructor) {
if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
/* It's (privately or publicly) a float, but not tested as an
integer, so test it to see. */
- (void) SvIV(sv);
+ (void) SvIV(sv);
flags = SvFLAGS(sv);
}
if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
so $a="9.22337203685478e+18"; $a+0; $a++
needs to be the same as $a="9.22337203685478e+18"; $a++
or we go insane. */
-
+
(void) sv_2iv(sv);
if (SvIOK(sv))
goto oops_its_int;
so $a="9.22337203685478e+18"; $a+0; $a--
needs to be the same as $a="9.22337203685478e+18"; $a--
or we go insane. */
-
+
(void) sv_2iv(sv);
if (SvIOK(sv))
goto oops_its_int;
sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
}
+I32
+S_expect_number(pTHX_ char** pattern)
+{
+ I32 var = 0;
+ switch (**pattern) {
+ case '1': case '2': case '3':
+ case '4': case '5': case '6':
+ case '7': case '8': case '9':
+ while (isDIGIT(**pattern))
+ var = var * 10 + (*(*pattern)++ - '0');
+ }
+ return var;
+}
+#define EXPECT_NUMBER(pattern, var) (var = S_expect_number(aTHX_ &pattern))
+
/*
=for apidoc sv_vcatpvfn
bool alt = FALSE;
bool left = FALSE;
bool vectorize = FALSE;
- bool utf = FALSE;
+ bool vectorarg = FALSE;
+ bool vec_utf = FALSE;
char fill = ' ';
char plus = 0;
char intsize = 0;
STRLEN gap;
char *dotstr = ".";
STRLEN dotstrlen = 1;
- I32 epix = 0; /* explicit parameter index */
+ I32 efix = 0; /* explicit format parameter index */
I32 ewix = 0; /* explicit width index */
+ I32 epix = 0; /* explicit precision index */
+ I32 evix = 0; /* explicit vector index */
bool asterisk = FALSE;
+ /* echo everything up to the next format specification */
for (q = p; q < patend && *q != '%'; ++q) ;
if (q > p) {
sv_catpvn(sv, p, q - p);
if (q++ >= patend)
break;
+/*
+ We allow format specification elements in this order:
+ \d+\$ explicit format parameter index
+ [-+ 0#]+ flags
+ \*?(\d+\$)?v vector with optional (optionally specified) arg
+ \d+|\*(\d+\$)? width using optional (optionally specified) arg
+ \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
+ [hlqLV] size
+ [%bcdefginopsux_DFOUX] format (mandatory)
+*/
+ if (EXPECT_NUMBER(q, width)) {
+ if (*q == '$') {
+ ++q;
+ efix = width;
+ } else {
+ goto gotwidth;
+ }
+ }
+
/* FLAGS */
while (*q) {
q++;
continue;
- case '*': /* printf("%*vX",":",$ipv6addr) */
- if (q[1] != 'v')
- break;
- q++;
- if (args)
- vecsv = va_arg(*args, SV*);
- else if (svix < svmax)
- vecsv = svargs[svix++];
- else
- continue;
- dotstr = SvPVx(vecsv,dotstrlen);
- if (DO_UTF8(vecsv))
- is_utf = TRUE;
- /* FALL THROUGH */
-
- case 'v':
- vectorize = TRUE;
- q++;
- continue;
-
default:
break;
}
break;
}
- /* WIDTH */
-
- scanwidth:
-
+ tryasterisk:
if (*q == '*') {
- if (asterisk)
- goto unknown;
+ q++;
+ if (EXPECT_NUMBER(q, ewix))
+ if (*q++ != '$')
+ goto unknown;
asterisk = TRUE;
+ }
+ if (*q == 'v') {
q++;
+ if (vectorize)
+ goto unknown;
+ if (vectorarg = asterisk) {
+ evix = ewix;
+ ewix = 0;
+ asterisk = FALSE;
+ }
+ vectorize = TRUE;
+ goto tryasterisk;
}
- switch (*q) {
- case '1': case '2': case '3':
- case '4': case '5': case '6':
- case '7': case '8': case '9':
- width = 0;
- while (isDIGIT(*q))
- width = width * 10 + (*q++ - '0');
- if (*q == '$') {
- if (asterisk && ewix == 0) {
- ewix = width;
- width = 0;
- q++;
- goto scanwidth;
- } else if (epix == 0) {
- epix = width;
- width = 0;
- q++;
- goto scanwidth;
- } else
- goto unknown;
+ if (!asterisk)
+ EXPECT_NUMBER(q, width);
+
+ if (vectorize) {
+ if (vectorarg) {
+ if (args)
+ vecsv = va_arg(*args, SV*);
+ else
+ vecsv = (evix ? evix <= svmax : svix < svmax) ?
+ svargs[ewix ? ewix-1 : svix++] : &PL_sv_undef;
+ dotstr = SvPVx(vecsv, dotstrlen);
+ if (DO_UTF8(vecsv))
+ is_utf = TRUE;
+ }
+ if (args) {
+ vecsv = va_arg(*args, SV*);
+ vecstr = (U8*)SvPVx(vecsv,veclen);
+ vec_utf = DO_UTF8(vecsv);
+ }
+ else if (efix ? efix <= svmax : svix < svmax) {
+ vecsv = svargs[efix ? efix-1 : svix++];
+ vecstr = (U8*)SvPVx(vecsv,veclen);
+ vec_utf = DO_UTF8(vecsv);
+ }
+ else {
+ vecstr = (U8*)"";
+ veclen = 0;
}
}
left |= (i < 0);
width = (i < 0) ? -i : i;
}
+ gotwidth:
/* PRECISION */
if (*q == '.') {
q++;
if (*q == '*') {
+ q++;
+ if (EXPECT_NUMBER(q, epix) && *q++ != '$')
+ goto unknown;
if (args)
i = va_arg(*args, int);
else
i = (ewix ? ewix <= svmax : svix < svmax)
? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
precis = (i < 0) ? 0 : i;
- q++;
}
else {
precis = 0;
has_precis = TRUE;
}
- if (vectorize) {
- if (args) {
- vecsv = va_arg(*args, SV*);
- vecstr = (U8*)SvPVx(vecsv,veclen);
- utf = DO_UTF8(vecsv);
- }
- else if (epix ? epix <= svmax : svix < svmax) {
- vecsv = svargs[epix ? epix-1 : svix++];
- vecstr = (U8*)SvPVx(vecsv,veclen);
- utf = DO_UTF8(vecsv);
- }
- else {
- vecstr = (U8*)"";
- veclen = 0;
- }
- }
-
/* SIZE */
switch (*q) {
/* CONVERSION */
+ if (*q == '%') {
+ eptr = q++;
+ elen = 1;
+ goto string;
+ }
+
+ if (!args)
+ argsv = (efix ? efix <= svmax : svix < svmax) ?
+ svargs[efix ? efix-1 : svix++] : &PL_sv_undef;
+
switch (c = *q++) {
/* STRINGS */
- case '%':
- eptr = q - 1;
- elen = 1;
- goto string;
-
case 'c':
- if (args)
- uv = va_arg(*args, int);
- else
- uv = (epix ? epix <= svmax : svix < svmax) ?
- SvIVx(svargs[epix ? epix-1 : svix++]) : 0;
+ uv = args ? va_arg(*args, int) : SvIVx(argsv);
if ((uv > 255 || (uv > 127 && SvUTF8(sv))) && !IN_BYTE) {
eptr = (char*)utf8buf;
elen = uv_to_utf8((U8*)eptr, uv) - utf8buf;
elen = sizeof nullstr - 1;
}
}
- else if (epix ? epix <= svmax : svix < svmax) {
- argsv = svargs[epix ? epix-1 : svix++];
+ else {
eptr = SvPVx(argsv, elen);
if (DO_UTF8(argsv)) {
if (has_precis && precis < elen) {
*/
if (!args)
goto unknown;
- argsv = va_arg(*args,SV*);
+ argsv = va_arg(*args, SV*);
eptr = SvPVx(argsv, elen);
if (DO_UTF8(argsv))
is_utf = TRUE;
case 'p':
if (alt)
goto unknown;
- if (args)
- uv = PTR2UV(va_arg(*args, void*));
- else
- uv = (epix ? epix <= svmax : svix < svmax) ?
- PTR2UV(svargs[epix ? epix-1 : svix++]) : 0;
+ uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
base = 16;
goto integer;
case 'i':
if (vectorize) {
STRLEN ulen;
- if (!veclen) {
- vectorize = FALSE;
- break;
- }
- if (utf)
+ if (!veclen)
+ continue;
+ if (vec_utf)
iv = (IV)utf8_to_uv(vecstr, veclen, &ulen, 0);
else {
iv = *vecstr;
}
}
else {
- iv = (epix ? epix <= svmax : svix < svmax) ?
- SvIVx(svargs[epix ? epix-1 : svix++]) : 0;
+ iv = SvIVx(argsv);
switch (intsize) {
case 'h': iv = (short)iv; break;
default: break;
if (vectorize) {
STRLEN ulen;
vector:
- if (!veclen) {
- vectorize = FALSE;
- break;
- }
- if (utf)
+ if (!veclen)
+ continue;
+ if (vec_utf)
uv = utf8_to_uv(vecstr, veclen, &ulen, 0);
else {
uv = *vecstr;
}
}
else {
- uv = (epix ? epix <= svmax : svix < svmax) ?
- SvUVx(svargs[epix ? epix-1 : svix++]) : 0;
+ uv = SvUVx(argsv);
switch (intsize) {
case 'h': uv = (unsigned short)uv; break;
default: break;
/* This is evil, but floating point is even more evil */
vectorize = FALSE;
- if (args)
- nv = va_arg(*args, NV);
- else
- nv = (epix ? epix <= svmax : svix < svmax) ?
- SvNVx(svargs[epix ? epix-1 : svix++]) : 0.0;
+ nv = args ? va_arg(*args, NV) : SvNVx(argsv);
need = 0;
if (c != 'e' && c != 'E') {
#endif
}
}
- else if (epix ? epix <= svmax : svix < svmax)
- sv_setuv_mg(svargs[epix ? epix-1 : svix++], (UV)i);
+ else
+ sv_setuv_mg(argsv, (UV)i);
continue; /* not "break" */
/* UNKNOWN */
/* ... right here, because formatting flags should not apply */
SvGROW(sv, SvCUR(sv) + elen + 1);
p = SvEND(sv);
- memcpy(p, eptr, elen);
+ Copy(eptr, p, elen, char);
p += elen;
*p = '\0';
SvCUR(sv) = p - SvPVX(sv);
*p++ = '0';
}
if (elen) {
- memcpy(p, eptr, elen);
+ Copy(eptr, p, elen, char);
p += elen;
}
if (gap && left) {
}
if (vectorize) {
if (veclen) {
- memcpy(p, dotstr, dotstrlen);
+ Copy(dotstr, p, dotstrlen, char);
p += dotstrlen;
}
else
PL_scopestack = 0;
PL_savestack = 0;
PL_retstack = 0;
+ PL_sig_pending = 0;
# else /* !DEBUGGING */
Zero(my_perl, 1, PerlInterpreter);
# endif /* DEBUGGING */
PL_scopestack = 0;
PL_savestack = 0;
PL_retstack = 0;
+ PL_sig_pending = 0;
# else /* !DEBUGGING */
Zero(my_perl, 1, PerlInterpreter);
# endif /* DEBUGGING */
PL_uudmap['M'] = 0; /* reinits on demand */
PL_bitcount = Nullch; /* reinits on demand */
+ if (proto_perl->Ipsig_pend) {
+ Newz(0, PL_psig_pend, SIG_SIZE, int);
+ }
+ else {
+ PL_psig_pend = (int*)NULL;
+ }
+
if (proto_perl->Ipsig_ptr) {
- int sig_num[] = { SIG_NUM };
- Newz(0, PL_psig_ptr, sizeof(sig_num)/sizeof(*sig_num), SV*);
- Newz(0, PL_psig_name, sizeof(sig_num)/sizeof(*sig_num), SV*);
- for (i = 1; PL_sig_name[i]; i++) {
- PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i]);
+ Newz(0, PL_psig_ptr, SIG_SIZE, SV*);
+ Newz(0, PL_psig_name, SIG_SIZE, SV*);
+ for (i = 1; i < SIG_SIZE; i++) {
+ PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i]);
PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i]);
}
}
}
# test prototypes when they are evaled and there is a syntax error
+# Byacc generates the string "syntax error". Bison gives the
+# string "parse error".
#
for my $p ( "", qw{ () ($) ($@) ($%) ($;$) (&) (&\@) (&@) (%) (\%) (\@) } ) {
no warnings 'redefine';
my $eval = "sub evaled_subroutine $p { &void *; }";
eval $eval;
- print "# eval[$eval]\nnot " unless $@ && $@ =~ /syntax error/;
+ print "# eval[$eval]\nnot " unless $@ && $@ =~ /(parse|syntax) error/i;
print "ok ", $i++, "\n";
}
}
}
-
-use FileHandle;
use Config;
-autoflush STDOUT 1;
+$| = 1;
$SIG{PIPE} = 'IGNORE';
print "1..10\n";
# the other reader reads one line, waits a few seconds and then
# exits to test the waitpid function.
#
-$cmd1 = qq/$perl -e "use FileHandle; autoflush STDOUT 1; / .
- qq/print qq[first process\\n]; sleep 30;"/;
-$cmd2 = qq/$perl -e "use FileHandle; autoflush STDOUT 1; / .
- qq/print qq[second process\\n]; sleep 30;"/;
+$cmd1 = qq/$perl -e "\$|=1; print qq[first process\\n]; sleep 30;"/;
+$cmd2 = qq/$perl -e "\$|=1; print qq[second process\\n]; sleep 30;"/;
$cmd3 = qq/$perl -e "print <>;"/; # hangs waiting for end of STDIN
$cmd4 = qq/$perl -e "print scalar <>;"/;
print "ok 8\n";
# send one expected line of text to child process and then wait for it
-autoflush FH4 1;
+select(FH4); $| = 1; select(STDOUT);
+
print FH4 "ok 9\n";
print "# waiting for process $pid4 to exit\n";
$reap_pid = waitpid $pid4, 0;
--- /dev/null
+#!./perl
+
+BEGIN {
+ chdir '..' if -d '../pod' && -d '../t';
+ @INC = 'lib';
+}
+
+use strict;
+use warnings;
+use Config;
+use File::Find;
+
+my %Core_Modules;
+
+find(sub {
+ if ($File::Find::name =~ m!^lib\W+(.+)\.pm$!i) {
+ my $module = $1;
+ $module =~ s/[^\w-]/::/g;
+ $Core_Modules{$module}++;
+ }
+ }, "lib");
+
+# Delete stuff that can't be tested here.
+
+sub delete_unless_in_extensions {
+ delete $Core_Modules{$_[0]} unless $Config{extensions} =~ /\b$_[0]\b/;
+}
+
+foreach my $known_extension (split(' ', $Config{known_extensions})) {
+ delete_unless_in_extensions($known_extension);
+}
+
+sub delete_by_prefix {
+ delete @Core_Modules{grep { /^$_[0]/ } keys %Core_Modules};
+}
+
+delete $Core_Modules{'CGI::Fast'}; # won't load without FCGI
+
+delete $Core_Modules{'Devel::DProf'}; # needs to be run as -d:DProf
+
+delete_by_prefix('ExtUtils::MM_'); # ExtUtils::MakeMaker's domain
+
+delete_by_prefix('File::Spec::'); # File::Spec's domain
+$Core_Modules{'File::Spec::Functions'}++; # put this back
+
+unless ($Config{extensions} =~ /\bThread\b/) {
+ delete $Core_Modules{Thread};
+ delete_by_prefix('Thread::');
+}
+
+delete_by_prefix('unicode::');
+$Core_Modules{'unicode::distinct'}++; # put this back
+
+# Okay, this is the list.
+
+my @Core_Modules = sort keys %Core_Modules;
+
+print "1..".@Core_Modules."\n";
+
+my $test_num = 1;
+
+foreach my $module (@Core_Modules) {
+ print "# $module compile failed\nnot " unless compile_module($module);
+ print "ok $test_num\n";
+ $test_num++;
+}
+
+
+# We do this as a separate process else we'll blow the hell out of our
+# namespace.
+sub compile_module {
+ my($module) = @_;
+
+ return scalar `./perl -Ilib t/lib/compmod.pl $module` =~ /^ok/;
+}
my $a = <<'EOF';
{
$test = sub : lvalue {
- 1;
+ my $x;
}
;
}
EOF
chomp $a;
-print "not " if $deparse->coderef2text(sub{$test = sub : lvalue { 1 }}) ne $a;
+print "not " if $deparse->coderef2text(sub{$test = sub : lvalue{my $x}}) ne $a;
ok;
$a =~ s/lvalue/method/;
-print "not " if $deparse->coderef2text(sub{$test = sub : method { 1 }}) ne $a;
+print "not " if $deparse->coderef2text(sub{$test = sub : method{my $x}}) ne $a;
ok;
$a =~ s/method/locked method/;
-print "not " if $deparse->coderef2text(sub{$test = sub : method locked { 1 }})
+print "not " if $deparse->coderef2text(sub{$test = sub : method locked {my $x}})
ne $a;
ok;
}
sub to_bytes {
use bytes;
- my $bytes = shift;
+ "".shift;
}
{
--- /dev/null
+#!./perl
+
+BEGIN {
+ chdir '..' if -d '../pod' && -d '../t';
+ @INC = 'lib';
+}
+
+my $module = shift;
+
+# 'require open' confuses Perl, so we use instead.
+eval "use $module ();";
+if( $@ ) {
+ print "not ";
+ warn "require failed with '$@'\n";
+}
+print "ok - $module\n";
+
+
@INC = '../lib';
}
-print "1..7\n";
+print "1..14\n";
# compile time evaluation
@x = ( 6, 8, 10);
print "not " if $x["1foo"] != 8;
print "ok 7\n";
+
+# check values > 32 bits work.
+
+$x = 4294967303.15;
+$y = int ($x);
+
+if ($y eq "4294967303") {
+ print "ok 8\n"
+} else {
+ print "not ok 8 # int($x) is $y, not 4294967303\n"
+}
+
+$y = int (-$x);
+
+if ($y eq "-4294967303") {
+ print "ok 9\n"
+} else {
+ print "not ok 9 # int($x) is $y, not -4294967303\n"
+}
+
+$x = 4294967294.2;
+$y = int ($x);
+
+if ($y eq "4294967294") {
+ print "ok 10\n"
+} else {
+ print "not ok 10 # int($x) is $y, not 4294967294\n"
+}
+
+$x = 4294967295.7;
+$y = int ($x);
+
+if ($y eq "4294967295") {
+ print "ok 11\n"
+} else {
+ print "not ok 11 # int($x) is $y, not 4294967295\n"
+}
+
+$x = 4294967296.11312;
+$y = int ($x);
+
+if ($y eq "4294967296") {
+ print "ok 12\n"
+} else {
+ print "not ok 12 # int($x) is $y, not 4294967296\n"
+}
+
+$y = int(279964589018079/59);
+if ($y == 4745162525730) {
+ print "ok 13\n"
+} else {
+ print "not ok 13 # int(279964589018079/59) is $y, not 4745162525730\n"
+}
+
+$y = 279964589018079;
+$y = int($y/59);
+if ($y == 4745162525730) {
+ print "ok 14\n"
+} else {
+ print "not ok 14 # int(279964589018079/59) is $y, not 4745162525730\n"
+}
+
}
{
- my $a = "\x{80}";
+ my $a = qu"\x{80}"; # make "\x{80}" to produce UTF-8
print "not " unless length($a) == 1;
print "ok 6\n";
$tmpfile = "misctmp000";
1 while -f ++$tmpfile;
-END { unlink $tmpfile if $tmpfile; }
+END { while($tmpfile && unlink $tmpfile){} }
$CAT = (($^O eq 'MSWin32') ? '.\perl -e "print <>"' : 'cat');
}
my($prog,$expected) = split(/\nEXPECT\n/, $_);
open TEST, ">$tmpfile" or die "Cannot open $tmpfile: $!";
+ $prog =~ s#/dev/null#NL:# if $^O eq 'VMS';
+ $prog =~ s#if \(-e _ and -f _ and -r _\)#if (-e _ and -f _)# if $^O eq 'VMS'; # VMS file locking
+
print TEST $prog, "\n";
close TEST or die "Cannot close $tmpfile: $!";
# the bug depends on in the internal state of the locale
# settings and pragma/locale messes up that state pretty badly.
# We need a "fresh run".
+BEGIN {
+ eval { require POSIX };
+ if ($@) {
+ exit(0); # running minitest?
+ }
+}
use Config;
my $have_setlocale = $Config{d_setlocale} eq 'define';
-eval {
- require POSIX;
-};
$have_setlocale = 0 if $@;
# Visual C's CRT goes silly on strings of the form "en_US.ISO8859-1"
# and mingw32 uses said silly CRT
my $max_uv_pp = "$max_uv"; $max_uv_pp++;
my $max_uv_p1 = "$max_uv"; $max_uv_p1+=0; $max_uv_p1++;
+# Also need to cope with %g notation for max_uv_p1 that actually gives an
+# integer less than max_uv because of correct rounding for the limited
+# precisision. This bites for 12 byte long doubles and 8 byte UVs
+
+my $temp = $max_uv_p1;
+my $max_uv_p1_as_iv;
+{use integer; $max_uv_p1_as_iv = 0 + sprintf "%s", $temp}
+my $max_uv_p1_as_uv = 0 | sprintf "%s", $temp;
+
my @opnames = split //, "-+UINPuinp";
# @list = map { 2->($_), 3->($_), 4->($_), 5->($_), } @list; # Prepare input
# string ++ versus numeric ++. Tolerate this little
# bit of insanity
print "# ok, as string ++ of max_uv is \"$max_uv_pp\", numeric is $max_uv_p1\n"
+ } elsif ($opnames[$last] eq 'I' and $ans[1] eq "-1"
+ and $ans[0] eq $max_uv_p1_as_iv) {
+ print "# ok, \"$max_uv_p1\" correctly converts to IV \"$max_uv_p1_as_iv\"\n";
+ } elsif ($opnames[$last] eq 'U' and $ans[1] eq ~0
+ and $ans[0] eq $max_uv_p1_as_uv) {
+ print "# ok, \"$max_uv_p1\" correctly converts to UV \"$max_uv_p1_as_uv\"\n";
+ } elsif (grep {/^N$/} @opnames[@{$curops[0]}]
+ and $ans[0] == $ans[1] and $ans[0] <= ~0) {
+ print "# ok, numerically equal - notation changed due to adding zero\n";
} else {
$nok++,
}
--- /dev/null
+print "1..6\n";
+
+my $foo = "foo";
+
+print "not " unless qu(abc$foo) eq "abcfoo";
+print "ok 1\n";
+
+# qu is always Unicode, even in EBCDIC, so \x41 is 'A' and \x{61} is 'a'.
+
+print "not " unless qu(abc\x41) eq "abcA";
+print "ok 2\n";
+
+print "not " unless qu(abc\x{61}$foo) eq "abcafoo";
+print "ok 3\n";
+
+print "not " unless qu(\x{41}\x{100}\x61\x{200}) eq "A\x{100}a\x{200}";
+print "ok 4\n";
+
+print "not " unless join(" ", unpack("C*", qu(\x80))) eq "194 128";
+print "ok 5\n";
+
+print "not " unless join(" ", unpack("C*", qu(\x{100}))) eq "196 128";
+print "ok 6\n";
+
^([0-9a-fA-F]+)(?:x([0-9a-fA-F]+)?)(?:x([0-9a-fA-F]+))? 012cxx0190 y - -
^(b+?|a){1,2}c bbbac y $1 a
^(b+?|a){1,2}c bbbbac y $1 a
+\((\w\. \w+)\) cd. (A. Tw) y -$1- -A. Tw-
my $Is_EBCDIC = (ord('A') == 193);
if ($Is_EBCDIC) {
my @utf8_death = grep(/utf8/, @death);
- $total = $total - $#utf8_death;
+ $total = $total - @utf8_death;
}
print "1..$total\n";
#!./perl
-print "1..30\n";
+print "1..32\n";
$FS = ':';
print "ok 29\n";
# unicode splittage
+
@ary = map {ord} split //, v1.20.300.4000.50000.4000.300.20.1;
print "not " unless "@ary" eq "1 20 300 4000 50000 4000 300 20 1";
print "ok 30\n";
+
+@ary = split(/\x{FE}/, "\x{FF}\x{FE}\x{FD}"); # bug id 20010105.016
+print "not " unless @ary == 2 &&
+ $ary[0] eq "\xFF" && $ary[1] eq "\xFD" &&
+ $ary[0] eq "\x{FF}" && $ary[1] eq "\x{FD}";
+print "ok 31\n";
+
+@ary = split(/(\x{FE}\xFE)/, "\xFF\x{FF}\xFE\x{FE}\xFD\x{FD}"); # variant of 31
+print "not " unless @ary == 3 &&
+ $ary[0] eq "\xFF\xFF" &&
+ $ary[0] eq "\x{FF}\xFF" &&
+ $ary[0] eq "\x{FF}\x{FF}" &&
+ $ary[1] eq "\xFE\xFE" &&
+ $ary[1] eq "\x{FE}\xFE" &&
+ $ary[1] eq "\x{FE}\x{FE}" &&
+ $ary[2] eq "\xFD\xFD" &&
+ $ary[2] eq "\x{FD}\xFD" &&
+ $ary[2] eq "\x{FD}\x{FD}";
+
+print "ok 32\n";
$SIG{__WARN__} = sub {
if ($_[0] =~ /^Invalid conversion/) {
- $w = ' INVALID'
+ $w = ' INVALID';
+ } elsif ($_[0] =~ /^Use of uninitialized value/) {
+ $w = ' UNINIT';
} else {
warn @_;
}
>%#vd< >chr(1)< >1<
>%vd< >"\01\02\03"< >1.2.3<
>%v.3d< >"\01\02\03"< >001.002.003<
->%v03d< >"\01\02\03"< >001.002.003<
->%v-3d< >"\01\02\03"< >1 .2 .3 <
->%v+-3d< >"\01\02\03"< >+1 .2 .3 <
+>%0v3d< >"\01\02\03"< >001.002.003<
+>%-v3d< >"\01\02\03"< >1 .2 .3 <
+>%+-v3d< >"\01\02\03"< >+1 .2 .3 <
>%v4.3d< >"\01\02\03"< > 001. 002. 003<
->%v04.3d< >"\01\02\03"< >0001.0002.0003<
->%*v02d< >['-', "\0\7\14"]< >00-07-12<
->%v.*d< >[3, "\01\02\03"]< >001.002.003<
->%v0*d< >[3, "\01\02\03"]< >001.002.003<
->%v-*d< >[3, "\01\02\03"]< >1 .2 .3 <
->%v+-*d< >[3, "\01\02\03"]< >+1 .2 .3 <
->%v*.*d< >[4, 3, "\01\02\03"]< > 001. 002. 003<
->%v0*.*d< >[4, 3, "\01\02\03"]< >0001.0002.0003<
->%*v0*d< >['-', 2, "\0\7\13"]< >00-07-11<
+>%0v4.3d< >"\01\02\03"< >0001.0002.0003<
+>%0*v2d< >['-', "\0\7\14"]< >00-07-12<
+>%v.*d< >["\01\02\03", 3]< >001.002.003<
+>%0v*d< >["\01\02\03", 3]< >001.002.003<
+>%-v*d< >["\01\02\03", 3]< >1 .2 .3 <
+>%+-v*d< >["\01\02\03", 3]< >+1 .2 .3 <
+>%v*.*d< >["\01\02\03", 4, 3]< > 001. 002. 003<
+>%0v*.*d< >["\01\02\03", 4, 3]< >0001.0002.0003<
+>%0*v*d< >['-', "\0\7\13", 2]< >00-07-11<
>%e< >1234.875< >1.234875e+03<
>%e< >0.000012345< >1.234500e-05<
>%e< >1234567E96< >1.234567e+102<
>%2$d %d %d< >[12, 34]< >34 12 34<
>%3$d %d %d< >[12, 34, 56]< >56 12 34<
>%2$*3$d %d< >[12, 34, 3]< > 34 12<
->%*3$2$d %d< >[12, 34, 3]< > 34 12<
->%2$d< >12< >0<
+>%*3$2$d %d< >[12, 34, 3]< >%*3$2$d 34 INVALID<
+>%2$d< >12< >0 UNINIT<
>%0$d< >12< >%0$d INVALID<
>%1$$d< >12< >%1$$d INVALID<
>%1$1$d< >12< >%1$1$d INVALID<
>%*2$*2$d< >[12, 3]< >%*2$*2$d INVALID<
>%*2*2$d< >[12, 3]< >%*2*2$d INVALID<
+>%0v2.2d< >''< ><
#!./perl
-print "1..136\n";
+print "1..162\n";
#P = start of string Q = start of substr R = end of substr S = end of string
tie $data{'a'}, 'Tie::StdScalar'; # makes $data{'a'} magical
$data{a} = "firstlast";
ok 136, substr($data{'a'}, 0, 5, "") eq "first" && $data{'a'} eq "last";
+
+# more utf8
+
+# The following two originally from Ignasi Roca.
+
+$x = "\xF1\xF2\xF3";
+substr($x, 0, 1) = "\x{100}"; # Ignasi had \x{FF}
+ok 137, length($x) == 3 &&
+ $x eq "\x{100}\xF2\xF3" &&
+ substr($x, 0, 1) eq "\x{100}" &&
+ substr($x, 1, 1) eq "\x{F2}" &&
+ substr($x, 2, 1) eq "\x{F3}";
+
+$x = "\xF1\xF2\xF3";
+substr($x, 0, 1) = "\x{100}\x{FF}"; # Ignasi had \x{FF}
+ok 138, length($x) == 4 &&
+ $x eq "\x{100}\x{FF}\xF2\xF3" &&
+ substr($x, 0, 1) eq "\x{100}" &&
+ substr($x, 1, 1) eq "\x{FF}" &&
+ substr($x, 2, 1) eq "\x{F2}" &&
+ substr($x, 3, 1) eq "\x{F3}";
+
+# more utf8 lval exercise
+
+$x = "\xF1\xF2\xF3";
+substr($x, 0, 2) = "\x{100}\xFF";
+ok 139, length($x) == 3 &&
+ $x eq "\x{100}\xFF\xF3" &&
+ substr($x, 0, 1) eq "\x{100}" &&
+ substr($x, 1, 1) eq "\x{FF}" &&
+ substr($x, 2, 1) eq "\x{F3}";
+
+$x = "\xF1\xF2\xF3";
+substr($x, 1, 1) = "\x{100}\xFF";
+ok 140, length($x) == 4 &&
+ $x eq "\xF1\x{100}\xFF\xF3" &&
+ substr($x, 0, 1) eq "\x{F1}" &&
+ substr($x, 1, 1) eq "\x{100}" &&
+ substr($x, 2, 1) eq "\x{FF}" &&
+ substr($x, 3, 1) eq "\x{F3}";
+
+$x = "\xF1\xF2\xF3";
+substr($x, 2, 1) = "\x{100}\xFF";
+ok 141, length($x) == 4 &&
+ $x eq "\xF1\xF2\x{100}\xFF" &&
+ substr($x, 0, 1) eq "\x{F1}" &&
+ substr($x, 1, 1) eq "\x{F2}" &&
+ substr($x, 2, 1) eq "\x{100}" &&
+ substr($x, 3, 1) eq "\x{FF}";
+
+$x = "\xF1\xF2\xF3";
+substr($x, 3, 1) = "\x{100}\xFF";
+ok 142, length($x) == 5 &&
+ $x eq "\xF1\xF2\xF3\x{100}\xFF" &&
+ substr($x, 0, 1) eq "\x{F1}" &&
+ substr($x, 1, 1) eq "\x{F2}" &&
+ substr($x, 2, 1) eq "\x{F3}" &&
+ substr($x, 3, 1) eq "\x{100}" &&
+ substr($x, 4, 1) eq "\x{FF}";
+
+$x = "\xF1\xF2\xF3";
+substr($x, -1, 1) = "\x{100}\xFF";
+ok 143, length($x) == 4 &&
+ $x eq "\xF1\xF2\x{100}\xFF" &&
+ substr($x, 0, 1) eq "\x{F1}" &&
+ substr($x, 1, 1) eq "\x{F2}" &&
+ substr($x, 2, 1) eq "\x{100}" &&
+ substr($x, 3, 1) eq "\x{FF}";
+
+$x = "\xF1\xF2\xF3";
+substr($x, -1, 0) = "\x{100}\xFF";
+ok 144, length($x) == 5 &&
+ $x eq "\xF1\xF2\x{100}\xFF\xF3" &&
+ substr($x, 0, 1) eq "\x{F1}" &&
+ substr($x, 1, 1) eq "\x{F2}" &&
+ substr($x, 2, 1) eq "\x{100}" &&
+ substr($x, 3, 1) eq "\x{FF}" &&
+ substr($x, 4, 1) eq "\x{F3}";
+
+$x = "\xF1\xF2\xF3";
+substr($x, 0, -1) = "\x{100}\xFF";
+ok 145, length($x) == 3 &&
+ $x eq "\x{100}\xFF\xF3" &&
+ substr($x, 0, 1) eq "\x{100}" &&
+ substr($x, 1, 1) eq "\x{FF}" &&
+ substr($x, 2, 1) eq "\x{F3}";
+
+$x = "\xF1\xF2\xF3";
+substr($x, 0, -2) = "\x{100}\xFF";
+ok 146, length($x) == 4 &&
+ $x eq "\x{100}\xFF\xF2\xF3" &&
+ substr($x, 0, 1) eq "\x{100}" &&
+ substr($x, 1, 1) eq "\x{FF}" &&
+ substr($x, 2, 1) eq "\x{F2}" &&
+ substr($x, 3, 1) eq "\x{F3}";
+
+$x = "\xF1\xF2\xF3";
+substr($x, 0, -3) = "\x{100}\xFF";
+ok 147, length($x) == 5 &&
+ $x eq "\x{100}\xFF\xF1\xF2\xF3" &&
+ substr($x, 0, 1) eq "\x{100}" &&
+ substr($x, 1, 1) eq "\x{FF}" &&
+ substr($x, 2, 1) eq "\x{F1}" &&
+ substr($x, 3, 1) eq "\x{F2}" &&
+ substr($x, 4, 1) eq "\x{F3}";
+
+$x = "\xF1\xF2\xF3";
+substr($x, 1, -1) = "\x{100}\xFF";
+ok 148, length($x) == 4 &&
+ $x eq "\xF1\x{100}\xFF\xF3" &&
+ substr($x, 0, 1) eq "\x{F1}" &&
+ substr($x, 1, 1) eq "\x{100}" &&
+ substr($x, 2, 1) eq "\x{FF}" &&
+ substr($x, 3, 1) eq "\x{F3}";
+
+$x = "\xF1\xF2\xF3";
+substr($x, -1, -1) = "\x{100}\xFF";
+ok 149, length($x) == 5 &&
+ $x eq "\xF1\xF2\x{100}\xFF\xF3" &&
+ substr($x, 0, 1) eq "\x{F1}" &&
+ substr($x, 1, 1) eq "\x{F2}" &&
+ substr($x, 2, 1) eq "\x{100}" &&
+ substr($x, 3, 1) eq "\x{FF}" &&
+ substr($x, 4, 1) eq "\x{F3}";
+
+# And tests for already-UTF8 one
+
+$x = "\x{101}\x{F2}\x{F3}";
+substr($x, 0, 1) = "\x{100}";
+ok 150, length($x) == 3 &&
+ $x eq "\x{100}\xF2\xF3" &&
+ substr($x, 0, 1) eq "\x{100}" &&
+ substr($x, 1, 1) eq "\x{F2}" &&
+ substr($x, 2, 1) eq "\x{F3}";
+
+$x = "\x{101}\x{F2}\x{F3}";
+substr($x, 0, 1) = "\x{100}\x{FF}";
+ok 151, length($x) == 4 &&
+ $x eq "\x{100}\x{FF}\xF2\xF3" &&
+ substr($x, 0, 1) eq "\x{100}" &&
+ substr($x, 1, 1) eq "\x{FF}" &&
+ substr($x, 2, 1) eq "\x{F2}" &&
+ substr($x, 3, 1) eq "\x{F3}";
+
+$x = "\x{101}\x{F2}\x{F3}";
+substr($x, 0, 2) = "\x{100}\xFF";
+ok 152, length($x) == 3 &&
+ $x eq "\x{100}\xFF\xF3" &&
+ substr($x, 0, 1) eq "\x{100}" &&
+ substr($x, 1, 1) eq "\x{FF}" &&
+ substr($x, 2, 1) eq "\x{F3}";
+
+$x = "\x{101}\x{F2}\x{F3}";
+substr($x, 1, 1) = "\x{100}\xFF";
+ok 153, length($x) == 4 &&
+ $x eq "\x{101}\x{100}\xFF\xF3" &&
+ substr($x, 0, 1) eq "\x{101}" &&
+ substr($x, 1, 1) eq "\x{100}" &&
+ substr($x, 2, 1) eq "\x{FF}" &&
+ substr($x, 3, 1) eq "\x{F3}";
+
+$x = "\x{101}\x{F2}\x{F3}";
+substr($x, 2, 1) = "\x{100}\xFF";
+ok 154, length($x) == 4 &&
+ $x eq "\x{101}\xF2\x{100}\xFF" &&
+ substr($x, 0, 1) eq "\x{101}" &&
+ substr($x, 1, 1) eq "\x{F2}" &&
+ substr($x, 2, 1) eq "\x{100}" &&
+ substr($x, 3, 1) eq "\x{FF}";
+
+$x = "\x{101}\x{F2}\x{F3}";
+substr($x, 3, 1) = "\x{100}\xFF";
+ok 155, length($x) == 5 &&
+ $x eq "\x{101}\x{F2}\x{F3}\x{100}\xFF" &&
+ substr($x, 0, 1) eq "\x{101}" &&
+ substr($x, 1, 1) eq "\x{F2}" &&
+ substr($x, 2, 1) eq "\x{F3}" &&
+ substr($x, 3, 1) eq "\x{100}" &&
+ substr($x, 4, 1) eq "\x{FF}";
+
+$x = "\x{101}\x{F2}\x{F3}";
+substr($x, -1, 1) = "\x{100}\xFF";
+ok 156, length($x) == 4 &&
+ $x eq "\x{101}\xF2\x{100}\xFF" &&
+ substr($x, 0, 1) eq "\x{101}" &&
+ substr($x, 1, 1) eq "\x{F2}" &&
+ substr($x, 2, 1) eq "\x{100}" &&
+ substr($x, 3, 1) eq "\x{FF}";
+
+$x = "\x{101}\x{F2}\x{F3}";
+substr($x, -1, 0) = "\x{100}\xFF";
+ok 157, length($x) == 5 &&
+ $x eq "\x{101}\xF2\x{100}\xFF\xF3" &&
+ substr($x, 0, 1) eq "\x{101}" &&
+ substr($x, 1, 1) eq "\x{F2}" &&
+ substr($x, 2, 1) eq "\x{100}" &&
+ substr($x, 3, 1) eq "\x{FF}" &&
+ substr($x, 4, 1) eq "\x{F3}";
+
+$x = "\x{101}\x{F2}\x{F3}";
+substr($x, 0, -1) = "\x{100}\xFF";
+ok 158, length($x) == 3 &&
+ $x eq "\x{100}\xFF\xF3" &&
+ substr($x, 0, 1) eq "\x{100}" &&
+ substr($x, 1, 1) eq "\x{FF}" &&
+ substr($x, 2, 1) eq "\x{F3}";
+
+$x = "\x{101}\x{F2}\x{F3}";
+substr($x, 0, -2) = "\x{100}\xFF";
+ok 159, length($x) == 4 &&
+ $x eq "\x{100}\xFF\xF2\xF3" &&
+ substr($x, 0, 1) eq "\x{100}" &&
+ substr($x, 1, 1) eq "\x{FF}" &&
+ substr($x, 2, 1) eq "\x{F2}" &&
+ substr($x, 3, 1) eq "\x{F3}";
+
+$x = "\x{101}\x{F2}\x{F3}";
+substr($x, 0, -3) = "\x{100}\xFF";
+ok 160, length($x) == 5 &&
+ $x eq "\x{100}\xFF\x{101}\x{F2}\x{F3}" &&
+ substr($x, 0, 1) eq "\x{100}" &&
+ substr($x, 1, 1) eq "\x{FF}" &&
+ substr($x, 2, 1) eq "\x{101}" &&
+ substr($x, 3, 1) eq "\x{F2}" &&
+ substr($x, 4, 1) eq "\x{F3}";
+
+$x = "\x{101}\x{F2}\x{F3}";
+substr($x, 1, -1) = "\x{100}\xFF";
+ok 161, length($x) == 4 &&
+ $x eq "\x{101}\x{100}\xFF\xF3" &&
+ substr($x, 0, 1) eq "\x{101}" &&
+ substr($x, 1, 1) eq "\x{100}" &&
+ substr($x, 2, 1) eq "\x{FF}" &&
+ substr($x, 3, 1) eq "\x{F3}";
+
+$x = "\x{101}\x{F2}\x{F3}";
+substr($x, -1, -1) = "\x{100}\xFF";
+ok 162, length($x) == 5 &&
+ $x eq "\x{101}\xF2\x{100}\xFF\xF3" &&
+ substr($x, 0, 1) eq "\x{101}" &&
+ substr($x, 1, 1) eq "\x{F2}" &&
+ substr($x, 2, 1) eq "\x{100}" &&
+ substr($x, 3, 1) eq "\x{FF}" &&
+ substr($x, 4, 1) eq "\x{F3}";
# just because Errno possibly failing.
eval { require Errno; import Errno };
+use vars qw($ipcsysv); # did we manage to load IPC::SysV?
+
BEGIN {
if ($^O eq 'VMS' && !defined($Config{d_setenv})) {
$ENV{PATH} = $ENV{PATH};
}
if ($Config{'extensions'} =~ /\bIPC\/SysV\b/
&& ($Config{d_shm} || $Config{d_msg})) {
- require IPC::SysV;
- IPC::SysV->import(qw(IPC_PRIVATE IPC_RMID IPC_CREAT S_IRWXU));
+ eval { require IPC::SysV };
+ unless ($@) {
+ $ipcsysv++;
+ IPC::SysV->import(qw(IPC_PRIVATE IPC_RMID IPC_CREAT S_IRWXU));
+ }
}
}
# test shmread
{
+ unless ($ipcsysv) {
+ print "ok 150 # skipped: no IPC::SysV\n";
+ last;
+ }
if ($Config{'extensions'} =~ /\bIPC\/SysV\b/ && $Config{d_shm}) {
no strict 'subs';
my $sent = "foobar";
# test msgrcv
{
+ unless ($ipcsysv) {
+ print "ok 151 # skipped: no IPC::SysV\n";
+ last;
+ }
if ($Config{'extensions'} =~ /\bIPC\/SysV\b/ && $Config{d_msg}) {
no strict 'subs';
my $id = msgget(IPC_PRIVATE, IPC_CREAT | S_IRWXU);
@INC = '../lib';
}
-print "1..29\n";
+print "1..49\n";
$_ = "abcdefghijklmnopqrstuvwxyz";
print (($@ =~ m|^Can't modify constant item in transliteration \(tr///\)|)
? '' : 'not ', "ok 29\n");
+# v300 (0x12c) is UTF-8-encoded as 196 172 (0xc4 0xac)
+# v400 (0x190) is UTF-8-encoded as 198 144 (0xc6 0x90)
+
+# Transliterate a byte to a byte, all four ways.
+
+($a = v300.196.172.300.196.172) =~ tr/\xc4/\xc5/;
+print "not " unless $a eq v300.197.172.300.197.172;
+print "ok 30\n";
+
+($a = v300.196.172.300.196.172) =~ tr/\xc4/\x{c5}/;
+print "not " unless $a eq v300.197.172.300.197.172;
+print "ok 31\n";
+
+($a = v300.196.172.300.196.172) =~ tr/\x{c4}/\xc5/;
+print "not " unless $a eq v300.197.172.300.197.172;
+print "ok 32\n";
+
+($a = v300.196.172.300.196.172) =~ tr/\x{c4}/\x{c5}/;
+print "not " unless $a eq v300.197.172.300.197.172;
+print "ok 33\n";
+
+# Transliterate a byte to a wide character.
+
+($a = v300.196.172.300.196.172) =~ tr/\xc4/\x{12d}/;
+print "not " unless $a eq v300.301.172.300.301.172;
+print "ok 34\n";
+
+# Transliterate a wide character to a byte.
+
+($a = v300.196.172.300.196.172) =~ tr/\x{12c}/\xc3/;
+print "not " unless $a eq v195.196.172.195.196.172;
+print "ok 35\n";
+
+# Transliterate a wide character to a wide character.
+
+($a = v300.196.172.300.196.172) =~ tr/\x{12c}/\x{12d}/;
+print "not " unless $a eq v301.196.172.301.196.172;
+print "ok 36\n";
+
+# Transliterate both ways.
+
+($a = v300.196.172.300.196.172) =~ tr/\xc4\x{12c}/\x{12d}\xc3/;
+print "not " unless $a eq v195.301.172.195.301.172;
+print "ok 37\n";
+
+# Transliterate all (four) ways.
+
+($a = v300.196.172.300.196.172.400.198.144) =~
+ tr/\xac\xc4\x{12c}\x{190}/\xad\x{12d}\xc5\x{191}/;
+print "not " unless $a eq v197.301.173.197.301.173.401.198.144;
+print "ok 38\n";
+
+# Transliterate and count.
+
+print "not "
+ unless (($a = v300.196.172.300.196.172) =~ tr/\xc4/\xc5/) == 2;
+print "ok 39\n";
+
+print "not "
+ unless (($a = v300.196.172.300.196.172) =~ tr/\x{12c}/\x{12d}/) == 2;
+print "ok 40\n";
+
+# Transliterate with complement.
+
+($a = v300.196.172.300.196.172) =~ tr/\xc4/\x{12d}/c;
+print "not " unless $a eq v301.196.301.301.196.301;
+print "ok 41\n";
+
+($a = v300.196.172.300.196.172) =~ tr/\x{12c}/\xc5/c;
+print "not " unless $a eq v300.197.197.300.197.197;
+print "ok 42\n";
+
+# Transliterate with deletion.
+
+($a = v300.196.172.300.196.172) =~ tr/\xc4//d;
+print "not " unless $a eq v300.172.300.172;
+print "ok 43\n";
+
+($a = v300.196.172.300.196.172) =~ tr/\x{12c}//d;
+print "not " unless $a eq v196.172.196.172;
+print "ok 44\n";
+
+# Transliterate with squeeze.
+
+($a = v196.196.172.300.300.196.172) =~ tr/\xc4/\xc5/s;
+print "not " unless $a eq v197.172.300.300.197.172;
+print "ok 45\n";
+
+($a = v196.172.300.300.196.172.172) =~ tr/\x{12c}/\x{12d}/s;
+print "not " unless $a eq v196.172.301.196.172.172;
+print "ok 46\n";
+
+# Tricky cases by Simon Cozens.
+
+($a = v196.172.200) =~ tr/\x{12c}/a/;
+print "not " unless sprintf("%vd", $a) eq '196.172.200';
+print "ok 47\n";
+
+($a = v196.172.200) =~ tr/\x{12c}/\x{12c}/;
+print "not " unless sprintf("%vd", $a) eq '196.172.200';
+print "ok 48\n";
+
+($a = v196.172.200) =~ tr/\x{12c}//d;
+print "not " unless sprintf("%vd", $a) eq '196.172.200';
+print "ok 49\n";
+
print "ok $test\n"; ++$test;
if (ord("\t") == 9) { # ASCII
- print "not " unless sprintf("%*v#o", ":", "Perl") eq '0120:0145:0162:0154';
+ print "not " unless sprintf("%#*vo", ":", "Perl") eq '0120:0145:0162:0154';
}
else {
- print "not " unless sprintf("%*v#o", ":", "Perl") eq '0327:0205:0231:0223';
+ print "not " unless sprintf("%#*vo", ":", "Perl") eq '0327:0205:0231:0223';
}
print "ok $test\n"; ++$test;
print "ok $test\n"; ++$test;
if (ord("\t") == 9) { # ASCII
- print "not " unless sprintf("%*v#o", ":", "Perl") eq '0120:0145:0162:0154';
+ print "not " unless sprintf("%#*vo", ":", "Perl") eq '0120:0145:0162:0154';
}
else {
- print "not " unless sprintf("%*v#o", ":", "Perl") eq '0327:0205:0231:0223';
+ print "not " unless sprintf("%#*vo", ":", "Perl") eq '0327:0205:0231:0223';
}
print "ok $test\n"; ++$test;
my $debug = 1;
+use Dumpvalue;
+
+my $dumper = Dumpvalue->new(
+ tick => qq{"},
+ quoteHighBit => 0,
+ unctrl => "quote"
+ );
sub debug {
- print @_ if $debug;
+ return unless $debug;
+ my($mess) = join "", @_;
+ chop $mess;
+ print $dumper->stringify($mess,1), "\n";
}
sub debugf {
sub tryneoalpha {
my ($Locale, $i, $test) = @_;
- debug "# testing $i with locale '$Locale'\n"
- unless $Testing{$i}{$Locale}++;
unless ($test) {
$Problem{$i}{$Locale} = 1;
debug "# failed $i with locale '$Locale'\n";
foreach $Locale (@Locale) {
debug "# Locale = $Locale\n";
@Alnum_ = getalnum_();
- debug "# \\w = @Alnum_\n";
+ debug "# w = ", join("",@Alnum_), "\n";
unless (setlocale(LC_ALL, $Locale)) {
foreach (99..103) {
delete $lower{$_};
}
- debug "# UPPER = ", join(" ", sort keys %UPPER ), "\n";
- debug "# lower = ", join(" ", sort keys %lower ), "\n";
- debug "# BoThCaSe = ", join(" ", sort keys %BoThCaSe), "\n";
+ debug "# UPPER = ", join("", sort keys %UPPER ), "\n";
+ debug "# lower = ", join("", sort keys %lower ), "\n";
+ debug "# BoThCaSe = ", join("", sort keys %BoThCaSe), "\n";
# Find the alphabets that are not alphabets in the default locale.
@Neoalpha = sort @Neoalpha;
- debug "# Neoalpha = @Neoalpha\n";
+ debug "# Neoalpha = ", join("",@Neoalpha), "\n";
if (@Neoalpha == 0) {
# If we have no Neoalphas the remaining tests are no-ops.
tryneoalpha($Locale, 114, $f == $c);
}
- debug "# testing 115 with locale '$Locale'\n";
# Does taking lc separately differ from taking
# the lc "in-line"? (This was the bug 19990704.002, change #3568.)
# The bug was in the caching of the 'o'-magic.
lcA($x, $z) == 0 && lcB($x, $z) == 0);
}
- debug "# testing 116 with locale '$Locale'\n";
# Does lc of an UPPER (if different from the UPPER) match
# case-insensitively the UPPER, and does the UPPER match
# case-insensitively the lc of the UPPER. And vice versa.
-print "1..49\n";
+print "1..64\n";
BEGIN {
chdir 't' if -d 't';
@INC = '../lib';
}
-sub a : lvalue { my $a = 34; bless \$a } # Return a temporary
-sub b : lvalue { shift }
+sub a : lvalue { my $a = 34; ${\(bless \$a)} } # Return a temporary
+sub b : lvalue { ${\shift} }
my $out = a(b()); # Check that temporaries are allowed.
print "# `$out'\nnot " unless ref $out eq 'main'; # Not reached if error.
sub get_lex : lvalue { $in }
sub get_st : lvalue { $blah }
-sub id : lvalue { shift }
+sub id : lvalue { ${\shift} }
sub id1 : lvalue { $_[0] }
-sub inc : lvalue { ++$_[0] }
+sub inc : lvalue { ${\++$_[0]} }
$in = 5;
$blah = 3;
print "ok 34\n";
$x = '1234567';
-sub lv1t : lvalue { index $x, 2 }
$_ = undef;
eval <<'EOE' or $_ = $@;
+ sub lv1t : lvalue { index $x, 2 }
lv1t = (2,3);
1;
EOE
print "# '$_'.\nnot "
- unless /Can\'t return a temporary from lvalue subroutine/;
+ unless /Can\'t modify index in lvalue subroutine return/;
print "ok 35\n";
$_ = undef;
eval <<'EOE' or $_ = $@;
- (lv1t) = (2,3);
+ sub lv2t : lvalue { shift }
+ (lv2t) = (2,3);
1;
EOE
print "# '$_'.\nnot "
- unless /Can\'t return a temporary from lvalue subroutine/;
+ unless /Can\'t modify shift in lvalue subroutine return/;
print "ok 36\n";
$xxx = 'xxx';
sub xxx () { $xxx } # Not lvalue
-sub lv1tmp : lvalue { xxx } # is it a TEMP?
$_ = undef;
eval <<'EOE' or $_ = $@;
+ sub lv1tmp : lvalue { xxx } # is it a TEMP?
lv1tmp = (2,3);
1;
EOE
print "# '$_'.\nnot "
- unless /Can\'t return a temporary from lvalue subroutine/;
+ unless /Can\'t modify non-lvalue subroutine call in lvalue subroutine return/;
print "ok 37\n";
$_ = undef;
print "ok 38\n";
sub yyy () { 'yyy' } # Const, not lvalue
-sub lv1tmpr : lvalue { yyy } # is it read-only?
$_ = undef;
eval <<'EOE' or $_ = $@;
+ sub lv1tmpr : lvalue { yyy } # is it read-only?
lv1tmpr = (2,3);
1;
EOE
print "# '$_'.\nnot "
- unless /Can\'t return a readonly value from lvalue subroutine/;
+ unless /Can\'t modify constant item in lvalue subroutine return/;
print "ok 39\n";
$_ = undef;
unless /Can\'t return a readonly value from lvalue subroutine/;
print "ok 40\n";
-=for disabled constructs
-
sub lva : lvalue {@a}
$_ = undef;
1;
EOE
-print "# '$_'.\nnot "
- unless /Can\'t return an uninitialized value from lvalue subroutine/;
+print "# '$_'.\nnot " unless "'@a' $_" eq "'2 3' ";
print "ok 41\n";
$_ = undef;
print "# '$_'.\nnot " unless "'@a' $_" eq "'2 3' ";
print "ok 43\n";
-=cut
-
-print "ok $_\n" for 41..43;
-
sub lv1n : lvalue { $newvar }
$_ = undef;
print bar "ok 49\n";
unlink "nothing";
+{
+my %hash; my @array;
+sub alv : lvalue { $array[1] }
+sub alv2 : lvalue { $array[$_[0]] }
+sub hlv : lvalue { $hash{"foo"} }
+sub hlv2 : lvalue { $hash{$_[0]} }
+$array[1] = "not ok 51\n";
+alv() = "ok 50\n";
+print alv();
+
+alv2(20) = "ok 51\n";
+print $array[20];
+
+$hash{"foo"} = "not ok 52\n";
+hlv() = "ok 52\n";
+print $hash{foo};
+
+$hash{bar} = "not ok 53\n";
+hlv("bar") = "ok 53\n";
+print hlv("bar");
+
+sub array : lvalue { @array }
+sub array2 : lvalue { @array2 } # This is a global.
+sub hash : lvalue { %hash }
+sub hash2 : lvalue { %hash2 } # So's this.
+@array2 = qw(foo bar);
+%hash2 = qw(foo bar);
+
+(array()) = qw(ok 54);
+print "not " unless "@array" eq "ok 54";
+print "ok 54\n";
+
+(array2()) = qw(ok 55);
+print "not " unless "@array2" eq "ok 55";
+print "ok 55\n";
+
+(hash()) = qw(ok 56);
+print "not " unless $hash{ok} == 56;
+print "ok 56\n";
+
+(hash2()) = qw(ok 57);
+print "not " unless $hash2{ok} == 57;
+print "ok 57\n";
+
+@array = qw(a b c d);
+sub aslice1 : lvalue { @array[0,2] };
+(aslice1()) = ("ok", "already");
+print "# @array\nnot " unless "@array" eq "ok b already d";
+print "ok 58\n";
+
+@array2 = qw(a B c d);
+sub aslice2 : lvalue { @array2[0,2] };
+(aslice2()) = ("ok", "already");
+print "not " unless "@array2" eq "ok B already d";
+print "ok 59\n";
+
+%hash = qw(a Alpha b Beta c Gamma);
+sub hslice : lvalue { @hash{"c", "b"} }
+(hslice()) = ("CISC", "BogoMIPS");
+print "not " unless join("/",@hash{"c","a","b"}) eq "CISC/Alpha/BogoMIPS";
+print "ok 60\n";
+}
+
+$str = "Hello, world!";
+sub sstr : lvalue { substr($str, 1, 4) }
+sstr() = "i";
+print "not " unless $str eq "Hi, world!";
+print "ok 61\n";
+
+$str = "Made w/ JavaScript";
+sub veclv : lvalue { vec($str, 2, 32) }
+veclv() = 0x5065726C;
+print "# $str\nnot " unless $str eq "Made w/ PerlScript";
+print "ok 62\n";
+
+sub position : lvalue { pos }
+@p = ();
+$_ = "fee fi fo fum";
+while (/f/g) {
+ push @p, position;
+ position() += 6;
+}
+print "# @p\nnot " unless "@p" eq "1 8";
+print "ok 63\n";
+
+# Bug 20001223.002: split thought that the list had only one element
+@ary = qw(4 5 6);
+sub lval1 : lvalue { $ary[0]; }
+sub lval2 : lvalue { $ary[1]; }
+(lval1(), lval2()) = split ' ', "1 2 3 4";
+print "not " unless join(':', @ary) eq "1:2:6";
+print "ok 64\n";
}
}
-print "1..105\n";
+print "1..106\n";
my $test = 1;
{
use utf8;
- ok_bytes chr(0xe2), pack("C*", 0xc3, 0xa2);
+ ok_bytes chr(0x1e2), pack("C*", 0xc7, 0xa2);
$test++; # 65
}
my $X = chr(1448);
my ($Y) = $X =~ /(.*)/;
- print "not " unless length $Y == 1;
+ print "not " unless $Y eq v1448 && length($Y) == 1;
print "ok $test\n";
$test++; # 98
}
my $X = "Szab\x{f3},Bal\x{e1}zs";
my $Y = $X;
$Y =~ s/(B)/$1/ for 0..3;
- print "not " unless $Y eq $X;
+ print "not " unless $Y eq $X && $X eq "Szab\x{f3},Bal\x{e1}zs";
print "ok $test\n";
$test++; # 99
}
use utf8;
use charnames ':full';
my $text = "\N{LATIN CAPITAL LETTER A WITH DIAERESIS}";
- print "not " unless ord($text) == 0xc4;
+ print "not " unless $text eq "\xc4" && ord($text) == 0xc4;
print "ok $test\n";
$test++; # 100
}
print "ok $test\n";
$test++; # 101
- print "not " unless length($b[3]) == 1;
+ print "not " unless length($b[3]) == 1 && $b[3] eq "\x{263A}";
print "ok $test\n";
$test++; # 102
$a =~ s/^A/Z/;
- print "not " unless length($a) == 4;
+ print "not " unless length($a) == 4 && $a eq "ZBC\x{263A}";
print "ok $test\n";
$test++; # 103
}
use utf8;
$X =~ s/^/chr(1488)/e;
- print "not " unless length $X == 1;
+ print "not " unless length $X == 1 && ord($X) == 1488;
print "ok $test\n";
$test++; # 104
}
print "ok $test\n";
$test++; # 105
}
+
+{
+ use utf8;
+
+ my @a = split(/\xFE/, "\xFF\xFE\xFD");
+
+ print "not " unless @a == 2 && $a[0] eq "\xFF" && $a[1] eq "\xFD";
+ print "ok $test\n";
+ $test++; # 106
+}
PERLVAR(Ttainted, bool) /* using variables controlled by $< */
PERLVAR(Tcurpm, PMOP *) /* what to do \ interps in REs from */
PERLVAR(Tnrs, SV *)
+
+/*
+=for apidoc Amn|SV*|PL_rs
+
+The input record separator - C<$/> in Perl space.
+
+=for apidoc Amn|GV*|PL_last_in_gv
+
+The GV which was last used for a filehandle input operation. (C<< <FH> >>)
+
+=for apidoc Amn|SV*|PL_ofs_sv
+
+The output field separator - C<$,> in Perl space.
+
+=cut
+*/
+
PERLVAR(Trs, SV *) /* input record separator $/ */
PERLVAR(Tlast_in_gv, GV *) /* GV used in last <FH> */
PERLVAR(Tofs_sv, SV *) /* output field separator $, */
S_sublex_done(pTHX)
{
if (!PL_lex_starts++) {
+ SV *sv = newSVpvn("",0);
+ if (SvUTF8(PL_linestr))
+ SvUTF8_on(sv);
PL_expect = XOPERATOR;
- yylval.opval = (OP*)newSVOP(OP_CONST, 0, newSVpvn("",0));
+ yylval.opval = (OP*)newSVOP(OP_CONST, 0, sv);
return THING;
}
register char *d = SvPVX(sv); /* destination for copies */
bool dorange = FALSE; /* are we in a translit range? */
bool didrange = FALSE; /* did we just finish a range? */
- bool has_utf8 = FALSE; /* embedded \x{} */
+ bool has_utf8 = (PL_linestr && SvUTF8(PL_linestr));
+ /* the constant is UTF8 */
UV uv;
I32 utf = (PL_lex_inwhat == OP_TRANS && PL_sublex_info.sub_op)
/* backslashes */
if (*s == '\\' && s+1 < send) {
- bool to_be_utf8 = FALSE;
-
s++;
/* some backslashes we leave behind */
else {
STRLEN len = 1; /* allow underscores */
uv = (UV)scan_hex(s + 1, e - s - 1, &len);
- to_be_utf8 = TRUE;
}
s = e + 1;
}
* repertoire. --jhi */
if (uv > 127) {
- if (!has_utf8 && (to_be_utf8 || uv > 255)) {
+ if (!has_utf8 && uv > 255) {
/* Might need to recode whatever we have
* accumulated so far if it contains any
* hibit chars.
if (hicount) {
char *old_pvx = SvPVX(sv);
char *src, *dst;
- U8 tmpbuf[UTF8_MAXLEN+1];
- U8 *tmpend;
d = SvGROW(sv,
SvCUR(sv) + hicount + 1) +
while (src < dst) {
if (UTF8_IS_CONTINUED(*src)) {
- tmpend = uv_to_utf8(tmpbuf, (U8)*src--);
- dst -= tmpend - tmpbuf;
- Copy((char *)tmpbuf, dst+1,
- tmpend - tmpbuf, char);
+ *dst-- = UTF8_EIGHT_BIT_LO(*src);
+ *dst-- = UTF8_EIGHT_BIT_HI(*src--);
}
else {
*dst-- = *src--;
}
}
- if (to_be_utf8 || (has_utf8 && uv > 127) || uv > 255) {
+ if (has_utf8 || uv > 255) {
d = (char*)uv_to_utf8((U8*)d, uv);
has_utf8 = TRUE;
}
r = Perl_yylex(aTHX);
- yyactlevel--;
+ if (yyactlevel > 0)
+ yyactlevel--;
return r;
}
if (ftst) {
PL_last_lop_op = ftst;
DEBUG_T( { PerlIO_printf(Perl_debug_log,
- "### Saw file test %c\n", ftst);
+ "### Saw file test %c\n", (int)ftst);
} )
FTST(ftst);
}
/* Assume it was a minus followed by a one-letter named
* subroutine call (or a -bareword), then. */
DEBUG_T( { PerlIO_printf(Perl_debug_log,
- "### %c looked like a file test but was not\n", ftst);
+ "### %c looked like a file test but was not\n",
+ (int)ftst);
} )
s -= 2;
}
PL_lex_stuff = Nullsv;
}
else {
- attrs = append_elem(OP_LIST, attrs,
- newSVOP(OP_CONST, 0,
- newSVpvn(s, len)));
+ if (!PL_in_my && len == 6 && strnEQ(s, "lvalue", len))
+ CvLVALUE_on(PL_compcv);
+ else if (!PL_in_my && len == 6 && strnEQ(s, "locked", len))
+ CvLOCKED_on(PL_compcv);
+ else if (!PL_in_my && len == 6 && strnEQ(s, "method", len))
+ CvMETHOD_on(PL_compcv);
+ /* After we've set the flags, it could be argued that
+ we don't need to do the attributes.pm-based setting
+ process, and shouldn't bother appending recognized
+ flags. To experiment with that, uncomment the
+ following "else": */
+ /* else */
+ attrs = append_elem(OP_LIST, attrs,
+ newSVOP(OP_CONST, 0,
+ newSVpvn(s, len)));
}
s = skipspace(d);
if (*s == ':' && s[1] != ':')
TOKEN('(');
case KEY_qq:
+ case KEY_qu:
s = scan_str(s,FALSE,FALSE);
+ if (tmp == KEY_qu && is_utf8_string((U8*)s, SvCUR(PL_lex_stuff)))
+ SvUTF8_on(PL_lex_stuff);
if (!s)
missingterm((char*)0);
yylval.ival = OP_STRINGIFY;
if (strEQ(d,"q")) return KEY_q;
if (strEQ(d,"qr")) return KEY_qr;
if (strEQ(d,"qq")) return KEY_qq;
+ if (strEQ(d,"qu")) return KEY_qu;
if (strEQ(d,"qw")) return KEY_qw;
if (strEQ(d,"qx")) return KEY_qx;
}
while (isDIGIT(*pos) || *pos == '_')
pos++;
if (!isALPHA(*pos)) {
- UV rev;
+ UV rev, revmax = 0;
U8 tmpbuf[UTF8_MAXLEN+1];
U8 *tmpend;
- bool utf8 = FALSE;
s++; /* get past 'v' */
sv = NEWSV(92,5);
}
}
tmpend = uv_to_utf8(tmpbuf, rev);
- utf8 = utf8 || rev > 127;
+ if (rev > revmax)
+ revmax = rev;
sv_catpvn(sv, (const char*)tmpbuf, tmpend - tmpbuf);
if (*pos == '.' && isDIGIT(pos[1]))
s = ++pos;
SvPOK_on(sv);
SvREADONLY_on(sv);
- if (utf8) {
+ if (revmax > 127) {
SvUTF8_on(sv);
- if (!UTF||IN_BYTE)
+ if (revmax < 256)
sv_utf8_downgrade(sv, TRUE);
}
}
* This symbol defines the format string used for printing a Perl UV
* as an unsigned hexadecimal integer in lowercase abcdef.
*/
+/* UVXf:
+ * This symbol defines the format string used for printing a Perl UV
+ * as an unsigned hexadecimal integer in uppercase ABCDEF.
+ */
/* NVef:
* This symbol defines the format string used for printing a Perl NV
* using %e-ish floating point format.
#define UVuf "lu" /**/
#define UVof "lo" /**/
#define UVxf "lx" /**/
+#define UVXf "lX" /**/
#define NVef "e" /**/
#define NVff "f" /**/
#define NVgf "g" /**/
* The last element is 0, corresponding to the 0 at the end of
* the sig_name list.
*/
+/* SIG_SIZE:
+ * This variable contains the number of elements of the sig_name
+ * and sig_num arrays, excluding the final NULL entry.
+ */
#define SIG_NAME 0 /**/
#define SIG_NUM 0 /**/
+#define SIG_SIZE 1 /**/
/* SITEARCH:
* This symbol contains the name of the private library for this package.
#define PERL_XS_APIVERSION "5.005"
#define PERL_PM_APIVERSION "5.005"
+/* HAS_SIGPROCMASK:
+ * This symbol, if defined, indicates that the sigprocmask
+ * system call is available to examine or change the signal mask
+ * of the calling process.
+ */
+/*#define HAS_SIGPROCMASK / **/
+
#endif
d_shmdt='undef'
d_shmget='undef'
d_sigaction='undef'
+d_sigprocmask='undef'
d_sigsetjmp='undef'
d_socket='undef'
d_socklen_t='undef'
selecttype=int
shmattype='void *'
shortsize=1
-sig_count='64'
sig_name_init='0'
sig_num_init='0'
+sig_size='1'
signal_t=int
sizesize=1
sizetype=int
uvtype='unsigned long'
uvuformat='"lu"'
uvxformat='"lx"'
+uvXUformat='"lX"'
versiononly='undef'
voidflags=1
xs_apiversion='5.005'
/* Unicode support */
+/*
+=for apidoc A|U8*|uv_to_utf8|U8 *d|UV uv
+
+Adds the UTF8 representation of the Unicode codepoint C<uv> to the end
+of the string C<d>; C<d> should be have at least C<UTF8_MAXLEN+1> free
+bytes available. The return value is the pointer to the byte after the
+end of the new character. In other words,
+
+ d = uv_to_utf8(d, uv);
+
+is the recommended Unicode-aware way of saying
+
+ *(d++) = uv;
+
+=cut
+*/
+
U8 *
-Perl_uv_to_utf8(pTHX_ U8 *d, UV uv) /* the d must be UTF8_MAXLEN+1 deep */
+Perl_uv_to_utf8(pTHX_ U8 *d, UV uv)
{
if (uv < 0x80) {
*d++ = uv;
- *d = 0;
return d;
}
if (uv < 0x800) {
*d++ = (( uv >> 6) | 0xc0);
*d++ = (( uv & 0x3f) | 0x80);
- *d = 0;
return d;
}
if (uv < 0x10000) {
*d++ = (( uv >> 12) | 0xe0);
*d++ = (((uv >> 6) & 0x3f) | 0x80);
*d++ = (( uv & 0x3f) | 0x80);
- *d = 0;
return d;
}
if (uv < 0x200000) {
*d++ = (((uv >> 12) & 0x3f) | 0x80);
*d++ = (((uv >> 6) & 0x3f) | 0x80);
*d++ = (( uv & 0x3f) | 0x80);
- *d = 0;
return d;
}
if (uv < 0x4000000) {
*d++ = (((uv >> 12) & 0x3f) | 0x80);
*d++ = (((uv >> 6) & 0x3f) | 0x80);
*d++ = (( uv & 0x3f) | 0x80);
- *d = 0;
return d;
}
if (uv < 0x80000000) {
*d++ = (((uv >> 12) & 0x3f) | 0x80);
*d++ = (((uv >> 6) & 0x3f) | 0x80);
*d++ = (( uv & 0x3f) | 0x80);
- *d = 0;
return d;
}
#ifdef HAS_QUAD
*d++ = (((uv >> 12) & 0x3f) | 0x80);
*d++ = (((uv >> 6) & 0x3f) | 0x80);
*d++ = (( uv & 0x3f) | 0x80);
- *d = 0;
return d;
}
#ifdef HAS_QUAD
*d++ = (((uv >> 12) & 0x3f) | 0x80);
*d++ = (((uv >> 6) & 0x3f) | 0x80);
*d++ = (( uv & 0x3f) | 0x80);
- *d = 0;
return d;
}
#endif
}
-/* Tests if some arbitrary number of bytes begins in a valid UTF-8 character.
- * The actual number of bytes in the UTF-8 character will be returned if it
- * is valid, otherwise 0. */
+/*
+=for apidoc A|STRLEN|is_utf8_char|U8 *s
+
+Tests if some arbitrary number of bytes begins in a valid UTF-8 character.
+The actual number of bytes in the UTF-8 character will be returned if it
+is valid, otherwise 0.
+
+=cut
+*/
STRLEN
Perl_is_utf8_char(pTHX_ U8 *s)
{
}
/*
-=for apidoc Am|is_utf8_string|U8 *s|STRLEN len
+=for apidoc A|bool|is_utf8_string|U8 *s|STRLEN len
Returns true if first C<len> bytes of the given string form valid a UTF8
string, false otherwise.
}
/*
-=for apidoc Am|U8* s|utf8_to_uv|STRLEN curlen|STRLEN *retlen|U32 flags
+=for apidoc A|U8* s|utf8_to_uv|STRLEN curlen|STRLEN *retlen|U32 flags
Returns the character value of the first character in the string C<s>
which is assumed to be in UTF8 encoding and no longer than C<curlen>;
}
/*
-=for apidoc Am|U8* s|utf8_to_uv_simple|STRLEN *retlen
+=for apidoc A|U8* s|utf8_to_uv_simple|STRLEN *retlen
Returns the character value of the first character in the string C<s>
which is assumed to be in UTF8 encoding; C<retlen> will be set to the
}
/*
-=for apidoc Am|STRLEN|utf8_length|U8* s|U8 *e
+=for apidoc A|STRLEN|utf8_length|U8* s|U8 *e
Return the length of the UTF-8 char encoded string C<s> in characters.
Stops at C<e> (inclusive). If C<e E<lt> s> or if the scan would end
}
/*
-=for apidoc Am|IV|utf8_distance|U8 *a|U8 *b
+=for apidoc A|IV|utf8_distance|U8 *a|U8 *b
Returns the number of UTF8 characters between the UTF-8 pointers C<a>
and C<b>.
}
/*
-=for apidoc Am|U8*|utf8_hop|U8 *s|I32 off
+=for apidoc A|U8*|utf8_hop|U8 *s|I32 off
Return the UTF-8 pointer C<s> displaced by C<off> characters, either
forward or backward.
}
/*
-=for apidoc Am|U8 *|utf8_to_bytes|U8 *s|STRLEN *len
+=for apidoc A|U8 *|utf8_to_bytes|U8 *s|STRLEN *len
Converts a string C<s> of length C<len> from UTF8 into byte encoding.
Unlike C<bytes_to_utf8>, this over-writes the original string, and
}
/*
-=for apidoc Am|U8 *|bytes_to_utf8|U8 *s|STRLEN *len
+=for apidoc A|U8 *|bytes_to_utf8|U8 *s|STRLEN *len
Converts a string C<s> of length C<len> from ASCII into UTF8 encoding.
Returns a pointer to the newly-created string, and sets C<len> to
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
#ifdef SA_RESTART
+#if !defined(USE_PERLIO) || defined(PERL_OLD_SIGNALS)
act.sa_flags |= SA_RESTART; /* SVR4, 4.3+BSD */
#endif
+#endif
#ifdef SA_NOCLDWAIT
if (signo == SIGCHLD && handler == (Sighandler_t)SIG_IGN)
act.sa_flags |= SA_NOCLDWAIT;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
#ifdef SA_RESTART
+#if !defined(USE_PERLIO) || defined(PERL_OLD_SIGNALS)
act.sa_flags |= SA_RESTART; /* SVR4, 4.3+BSD */
#endif
+#endif
#ifdef SA_NOCLDWAIT
if (signo == SIGCHLD && handler == (Sighandler_t)SIG_IGN)
act.sa_flags |= SA_NOCLDWAIT;
LOCK_FDPID_MUTEX;
svp = av_fetch(PL_fdpid,PerlIO_fileno(ptr),TRUE);
UNLOCK_FDPID_MUTEX;
- pid = SvIVX(*svp);
+ pid = (SvTYPE(*svp) == SVt_IV) ? SvIVX(*svp) : -1;
SvREFCNT_dec(*svp);
*svp = &PL_sv_undef;
#ifdef OS2
PL_tainted = t->Ttainted;
PL_curpm = t->Tcurpm; /* XXX No PMOP ref count */
PL_nrs = newSVsv(t->Tnrs);
- PL_rs = SvREFCNT_inc(PL_nrs);
+ PL_rs = t->Tnrs ? SvREFCNT_inc(PL_nrs) : Nullsv;
PL_last_in_gv = Nullgv;
- PL_ofs_sv = SvREFCNT_inc(PL_ofs_sv);
+ PL_ofs_sv = t->Tofs_sv ? SvREFCNT_inc(PL_ofs_sv) : Nullsv;
PL_defoutgv = (GV*)SvREFCNT_inc(t->Tdefoutgv);
PL_chopset = t->Tchopset;
PL_bodytarget = newSVsv(t->Tbodytarget);
# insists on stat()ing a file descriptor before it'll use it.
push(@libexcl,'io_xs.t') if $Config{'vms_cc_type'} ne 'decc';
-@opexcl=('die_exit.t','exec.t','fork.t','glob.t','groups.t','magic.t','misc.t','stat.t');
+@opexcl=('die_exit.t','exec.t','fork.t','glob.t','groups.t','magic.t','stat.t');
@exclist=(@compexcl,@ioexcl,@libexcl,@opexcl);
foreach $file (@exclist) { $skip{$file}++; }
$d_shm='undef'
$d_shmatprototype='define'
$d_sigaction='undef'
+$d_sigprocmask='undef'
$d_sigsetjmp='undef'
$d_socket='define'
$d_sockpair='undef'
$shortsize='2'
$sig_name_init='"ZERO","ABRT","FPE","ILL","INT","SEGV","TERM","USR1","USR2","IO","HUP","URG","ALRM","KILL","PIPE","QUIT","CHLD","CONT","STOP","TSTP","TTIN","TTOU","BUS","RT1","RT2","RT3","RT4","RT5","RT6","RT7","RT8",0'
$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,0'
+$sig_size='31'
$signal_t='void'
$sitearch=''
$sitearchexp=''
$uvtype='unsigned int'
$uvuformat='"u"'
$uvxformat='"x"'
+$uvXUformat='"X"'
$vendorarch=''
$vendorarchexp=''
$vendorlib_stem=''
*/
/*#define HAS_SIGACTION /**/
+/* HAS_SIGPROCMASK:
+ * This symbol, if defined, indicates that sigprocmask
+ * system call is available to examine or change the signal mask
+ * of the calling process.
+ */
+/*#define HAS_SIGPROCMASK /**/
+
/* HAS_SIGSETJMP:
* This variable indicates to the C program that the sigsetjmp()
* routine is available to save the calling process's registers
* This symbol defines the format string used for printing a Perl UV
* as an unsigned hexadecimal integer in lowercase abcdef.
*/
+/* UVXf:
+ * This symbol defines the format string used for printing a Perl UV
+ * as an unsigned hexadecimal integer in uppercase ABCDEF.
+ */
/* NVef:
* This symbol defines the format string used for printing a Perl NV
* using %e-ish floating point format.
#define UVuf "u" /**/
#define UVof "o" /**/
#define UVxf "x" /**/
+#define UVXf "X" /**/
#define NVef "e" /**/
#define NVff "f" /**/
#define NVgf "g" /**/
* The last element is 0, corresponding to the 0 at the end of
* the sig_name list.
*/
+/* SIG_SIZE:
+ * This variable contains the number of elements of the sig_name
+ * and sig_num arrays, excluding the final NULL entry.
+ */
#define SIG_NAME "ZERO","ABRT","FPE","ILL","INT","SEGV","TERM","USR1","USR2","IO","HUP","URG","ALRM","KILL","PIPE","QUIT","CHLD","CONT","STOP","TSTP","TTIN","TTOU","BUS","RT1","RT2","RT3","RT4","RT5","RT6","RT7","RT8",0 /**/
#define 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,0 /**/
+#define SIG_SIZE 31 /**/
/* SITEARCH:
* This symbol contains the name of the private library for this package.
$d_shm='undef'
$d_shmatprototype='define'
$d_sigaction='define'
+$d_sigprocmask='define'
$d_sigsetjmp='define'
$d_socket='define'
$d_sockpair='undef'
$shortsize='2'
$sig_name_init='"ZERO","ABRT","FPE","ILL","INT","SEGV","TERM","USR1","USR2","IO","HUP","URG","ALRM","CHLD","CONT","KILL","STOP","PIPE","QUIT","BUS","TRAP","TSTP","TTIN","TTOU","RT1","RT2","RT3","RT4","RT5","RT6","RT7","RT8",0'
$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,0'
+$sig_size='32'
$signal_t='void'
$sitearch=''
$sitearchexp=''
$uvtype='unsigned int'
$uvuformat='"u"'
$uvxformat='"x"'
+$uvXUformat='"X"'
$vendorarch=''
$vendorarchexp=''
$vendorlib_stem=''
*/
#define HAS_SIGACTION /**/
+/* HAS_SIGPROCMASK:
+ * This symbol, if defined, indicates that sigprocmask
+ * system call is available to examine or change the signal mask
+ * of the calling process.
+ */
+#define HAS_SIGPROCMASK /**/
+
/* HAS_SIGSETJMP:
* This variable indicates to the C program that the sigsetjmp()
* routine is available to save the calling process's registers
* This symbol defines the format string used for printing a Perl UV
* as an unsigned hexadecimal integer in lowercase abcdef.
*/
+/* UVXf:
+ * This symbol defines the format string used for printing a Perl UV
+ * as an unsigned hexadecimal integer in uppercase ABCDEF.
+ */
/* NVef:
* This symbol defines the format string used for printing a Perl NV
* using %e-ish floating point format.
#define UVuf "u" /**/
#define UVof "o" /**/
#define UVxf "x" /**/
+#define UVXf "X" /**/
#define NVef "e" /**/
#define NVff "f" /**/
#define NVgf "g" /**/
* The last element is 0, corresponding to the 0 at the end of
* the sig_name list.
*/
+/* SIG_SIZE:
+ * This variable contains the number of elements of the sig_name
+ * and sig_num arrays, excluding the final NULL entry.
+ */
#define SIG_NAME "ZERO","ABRT","FPE","ILL","INT","SEGV","TERM","USR1","USR2","IO","HUP","URG","ALRM","CHLD","CONT","KILL","STOP","PIPE","QUIT","BUS","TRAP","TSTP","TTIN","TTOU","RT1","RT2","RT3","RT4","RT5","RT6","RT7","RT8",0 /**/
#define 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,0 /**/
+#define SIG_SIZE 32 /**/
/* SITEARCH:
* This symbol contains the name of the private library for this package.
# versioned installation can be obtained by setting INST_TOP above to a
# path that includes an arbitrary version string.
#
-INST_VER = \5.7.0
+#INST_VER = \5.7.0
#
# Comment this out if you DON'T want your perl installation to have
# the same location. Commenting it out gives you a simpler
# installation that is easier to understand for beginners.
#
-INST_ARCH = \$(ARCHNAME)
+#INST_ARCH = \$(ARCHNAME)
#
# uncomment to enable multiple interpreters. This is need for fork()
# emulation.
#
-#USE_MULTI = define
+USE_MULTI = define
#
# Beginnings of interpreter cloning/threads; still very incomplete.
# This should be enabled to get the fork() emulation. This needs
# USE_MULTI as well.
#
-#USE_ITHREADS = define
+USE_ITHREADS = define
#
# uncomment to enable the implicit "host" layer for all system calls
# made by perl. This needs USE_MULTI above. This is also needed to
# get fork().
#
-#USE_IMP_SYS = define
+USE_IMP_SYS = define
#
# uncomment to enable the experimental PerlIO I/O subsystem.
# VC 6.0 can load the socket dll on demand. Makes the test suite
# run in about 10% less time.
DELAYLOAD = -DELAYLOAD:wsock32.dll -DELAYLOAD:shell32.dll delayimp.lib
-
-# VC 6.0 seems capable of compiling perl correctly with optimizations
-# enabled. Anything earlier fails tests.
-!IF "$(CFG)" == ""
-CFG = Optimize
-!ENDIF
!ENDIF
ARCHDIR = ..\lib\$(ARCHNAME)
! ENDIF
LINK_DBG = -debug -pdb:none
!ELSE
-! IF "$(CFG)" == "Optimize"
# -O1 yields smaller code, which turns out to be faster than -O2
#OPTIMIZE = -O2 -MD -DNDEBUG
OPTIMIZE = -O1 -MD -DNDEBUG
-! ELSE
-OPTIMIZE = -Od -MD -DNDEBUG
-! ENDIF
LINK_DBG = -release
!ENDIF
cd ..\utils
$(MAKE) PERL=$(MINIPERL)
cd ..\pod
+ copy ..\README.aix .\perlaix.pod
copy ..\README.amiga .\perlamiga.pod
copy ..\README.cygwin .\perlcygwin.pod
copy ..\README.dos .\perldos.pod
+ copy ..\README.epoc .\perlepoc.pod
copy ..\README.hpux .\perlhpux.pod
copy ..\README.machten .\perlmachten.pod
copy ..\README.os2 .\perlos2.pod
+ copy ..\README.os390 .\perlos390.pod
+ copy ..\README.posix .\perlposix.pod
+ copy ..\README.solaris .\perlsolaris.pod
copy ..\vms\perlvms.pod .\perlvms.pod
+ copy ..\README.vos .\perlvos.pod
copy ..\README.win32 .\perlwin32.pod
$(MAKE) -f ..\win32\pod.mak converters
cd ..\lib
d_shmdt='undef'
d_shmget='undef'
d_sigaction='undef'
+d_sigprocmask='undef'
d_sigsetjmp='undef'
d_socket='define'
d_socklen_t='undef'
shortsize='2'
shrpenv=''
shsharp='true'
-sig_count='26'
sig_name='ZERO NUM01 INT QUIT ILL NUM05 NUM06 NUM07 FPE KILL NUM10 SEGV NUM12 PIPE ALRM TERM USR1 USR2 CHLD NUM19 USR3 BREAK ABRT STOP NUM24 CONT CLD'
sig_name_init='"ZERO", "NUM01", "INT", "QUIT", "ILL", "NUM05", "NUM06", "NUM07", "FPE", "KILL", "NUM10", "SEGV", "NUM12", "PIPE", "ALRM", "TERM", "USR1", "USR2", "CHLD", "NUM19", "USR3", "BREAK", "ABRT", "STOP", "NUM24", "CONT", "CLD", 0'
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 18 0'
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, 18, 0'
+sig_size='27'
signal_t='void'
sitearch='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~'
sitearchexp='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~'
uvtype='unsigned long'
uvuformat='"lu"'
uvxformat='"lx"'
+uvXUformat='"lX"'
vendorarch=''
vendorarchexp=''
vendorbin=''
d_shmdt='undef'
d_shmget='undef'
d_sigaction='undef'
+d_sigprocmask='undef'
d_sigsetjmp='undef'
d_socket='define'
d_socklen_t='undef'
shortsize='2'
shrpenv=''
shsharp='true'
-sig_count='26'
sig_name='ZERO NUM01 INT QUIT ILL NUM05 NUM06 NUM07 FPE KILL NUM10 SEGV NUM12 PIPE ALRM TERM NUM16 NUM17 NUM18 NUM19 CHLD BREAK ABRT STOP NUM24 CONT CLD'
sig_name_init='"ZERO", "NUM01", "INT", "QUIT", "ILL", "NUM05", "NUM06", "NUM07", "FPE", "KILL", "NUM10", "SEGV", "NUM12", "PIPE", "ALRM", "TERM", "NUM16", "NUM17", "NUM18", "NUM19", "CHLD", "BREAK", "ABRT", "STOP", "NUM24", "CONT", "CLD", 0'
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 20 0'
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, 20, 0'
+sig_size='27'
signal_t='void'
sitearch='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~'
sitearchexp='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~'
uvtype='unsigned long'
uvuformat='"lu"'
uvxformat='"lx"'
+uvXUformat='"lX"'
vendorarch=''
vendorarchexp=''
vendorbin=''
d_shmdt='undef'
d_shmget='undef'
d_sigaction='undef'
+d_sigprocmask='undef'
d_sigsetjmp='undef'
d_socket='define'
d_socklen_t='undef'
shortsize='2'
shrpenv=''
shsharp='true'
-sig_count='26'
sig_name='ZERO NUM01 INT QUIT ILL NUM05 NUM06 NUM07 FPE KILL NUM10 SEGV NUM12 PIPE ALRM TERM NUM16 NUM17 NUM18 NUM19 CHLD BREAK ABRT STOP NUM24 CONT CLD'
sig_name_init='"ZERO", "NUM01", "INT", "QUIT", "ILL", "NUM05", "NUM06", "NUM07", "FPE", "KILL", "NUM10", "SEGV", "NUM12", "PIPE", "ALRM", "TERM", "NUM16", "NUM17", "NUM18", "NUM19", "CHLD", "BREAK", "ABRT", "STOP", "NUM24", "CONT", "CLD", 0'
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 20 0'
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, 20, 0'
+sig_size='27'
signal_t='void'
sitearch='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~'
sitearchexp='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~'
uvtype='unsigned long'
uvuformat='"lu"'
uvxformat='"lx"'
+uvXUformat='"lX"'
vendorarch=''
vendorarchexp=''
vendorbin=''
/*
* Package name : perl5
* Source directory :
- * Configuration time: Wed Dec 6 18:24:42 2000
+ * Configuration time: Thu Jan 18 14:54:24 2001
* Configured by : nick
* Target system :
*/
*/
#define HAS_STRTOL /**/
-/* HAS_STRTOUL:
- * This symbol, if defined, indicates that the strtoul routine is
- * available to provide conversion of strings to unsigned long.
- */
-#define HAS_STRTOUL /**/
-
/* HAS_STRXFRM:
* This symbol, if defined, indicates that the strxfrm() routine is
* available to transform strings.
#define CPPRUN "cpp32 -oCON"
#define CPPLAST ""
+/* HAS__FWALK:
+ * This symbol, if defined, indicates that the _fwalk system call is
+ * available to apply a function to all the file handles.
+ */
+/*#define HAS__FWALK /**/
+
/* HAS_ACCESS:
* This manifest constant lets the C program know that the access()
* system call is available to check for accessibility using real UID/GID.
*/
/*#define HAS_ENDSERVENT /**/
+/* FCNTL_CAN_LOCK:
+ * This symbol, if defined, indicates that fcntl() can be used
+ * for file locking. Normally on Unix systems this is defined.
+ * It may be undefined on VMS.
+ */
+/*#define FCNTL_CAN_LOCK /**/
+
/* HAS_FD_SET:
* This symbol, when defined, indicates presence of the fd_set typedef
* in <sys/types.h>
*/
/*#define HAS_FSTATFS /**/
+/* HAS_FSYNC:
+ * This symbol, if defined, indicates that the fsync routine is
+ * available to write a file's modified data and attributes to
+ * permanent storage.
+ */
+/*#define HAS_FSYNC /**/
+
/* HAS_FTELLO:
* This symbol, if defined, indicates that the ftello routine is
* available to ftell beyond 32 bits (useful for ILP32 hosts).
*/
/*#define HAS_GETPROTOENT /**/
+/* HAS_GETPGRP:
+ * This symbol, if defined, indicates that the getpgrp routine is
+ * available to get the current process group.
+ */
+/* USE_BSD_GETPGRP:
+ * This symbol, if defined, indicates that getpgrp needs one
+ * arguments whereas USG one needs none.
+ */
+/*#define HAS_GETPGRP /**/
+/*#define USE_BSD_GETPGRP /**/
+
/* HAS_GETPROTOBYNAME:
* This symbol, if defined, indicates that the getprotobyname()
* routine is available to look up protocols by their name.
*/
#define HAS_SANE_MEMCMP /**/
+/* HAS_SBRK_PROTO:
+ * This symbol, if defined, indicates that the system provides
+ * a prototype for the sbrk() function. Otherwise, it is up
+ * to the program to supply one. Good guesses are
+ * extern void* sbrk _((int));
+ * extern void* sbrk _((size_t));
+ */
+/*#define HAS_SBRK_PROTO /**/
+
/* HAS_SEM:
* This symbol, if defined, indicates that the entire sem*(2) library is
* supported.
*/
/*#define HAS_SETPROTOENT /**/
+/* HAS_SETPGRP:
+ * This symbol, if defined, indicates that the setpgrp routine is
+ * available to set the current process group.
+ */
+/* USE_BSD_SETPGRP:
+ * This symbol, if defined, indicates that setpgrp needs two
+ * arguments whereas USG one needs none. See also HAS_SETPGID
+ * for a POSIX interface.
+ */
+/*#define HAS_SETPGRP /**/
+/*#define USE_BSD_SETPGRP /**/
+
/* HAS_SETPROCTITLE:
* This symbol, if defined, indicates that the setproctitle routine is
* available to set process title.
*/
/*#define HAS_STRTOLL /**/
+/* HAS_STRTOQ:
+ * This symbol, if defined, indicates that the strtoq routine is
+ * available to convert strings to long longs (quads).
+ */
+/*#define HAS_STRTOQ /**/
+
+/* HAS_STRTOUL:
+ * This symbol, if defined, indicates that the strtoul routine is
+ * available to provide conversion of strings to unsigned long.
+ */
+#define HAS_STRTOUL /**/
+
/* HAS_STRTOULL:
* This symbol, if defined, indicates that the strtoull routine is
* available to convert strings to unsigned long longs.
#define RD_NODATA -1
#define EOF_NONBLOCK
+/* NEED_VA_COPY:
+ * This symbol, if defined, indicates that the system stores
+ * the variable argument list datatype, va_list, in a format
+ * that cannot be copied by simple assignment, so that some
+ * other means must be used when copying is required.
+ * As such systems vary in their provision (or non-provision)
+ * of copying mechanisms, handy.h defines a platform-
+ * independent macro, Perl_va_copy(src, dst), to do the job.
+ */
+/*#define NEED_VA_COPY /**/
+
/* Netdb_host_t:
* This symbol holds the type used for the 1st argument
* to gethostbyaddr().
* This symbol defines the format string used for printing a Perl UV
* as an unsigned hexadecimal integer in lowercase abcdef.
*/
+/* UVXf:
+ * This symbol defines the format string used for printing a Perl UV
+ * as an unsigned hexadecimal integer in uppercase ABCDEF.
+ */
/* NVef:
* This symbol defines the format string used for printing a Perl NV
* using %e-ish floating point format.
#define UVuf "lu" /**/
#define UVof "lo" /**/
#define UVxf "lx" /**/
+#define UVXf "lX" /**/
#define NVef "e" /**/
#define NVff "f" /**/
#define NVgf "g" /**/
* The last element is 0, corresponding to the 0 at the end of
* the sig_name list.
*/
+/* SIG_SIZE:
+ * This variable contains the number of elements of the sig_name
+ * and sig_num arrays, excluding the final NULL entry.
+ */
#define SIG_NAME "ZERO", "NUM01", "INT", "QUIT", "ILL", "NUM05", "NUM06", "NUM07", "FPE", "KILL", "NUM10", "SEGV", "NUM12", "PIPE", "ALRM", "TERM", "USR1", "USR2", "CHLD", "NUM19", "USR3", "BREAK", "ABRT", "STOP", "NUM24", "CONT", "CLD", 0 /**/
#define 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, 18, 0 /**/
+#define SIG_SIZE 27 /**/
/* SITEARCH:
* This symbol contains the name of the private library for this package.
*/
#define STARTPERL "#!perl" /**/
+/* STDCHAR:
+ * This symbol is defined to be the type of char used in stdio.h.
+ * It has the values "unsigned char" or "char".
+ */
+#define STDCHAR unsigned char /**/
+
/* HAS_STDIO_STREAM_ARRAY:
* This symbol, if defined, tells that there is an array
* holding the stdio streams.
#define PERL_XS_APIVERSION "5.6.0"
#define PERL_PM_APIVERSION "5.005"
-/* HAS_GETPGRP:
- * This symbol, if defined, indicates that the getpgrp routine is
- * available to get the current process group.
- */
-/* USE_BSD_GETPGRP:
- * This symbol, if defined, indicates that getpgrp needs one
- * arguments whereas USG one needs none.
- */
-/*#define HAS_GETPGRP /**/
-/*#define USE_BSD_GETPGRP /**/
-
-/* HAS_SETPGRP:
- * This symbol, if defined, indicates that the setpgrp routine is
- * available to set the current process group.
- */
-/* USE_BSD_SETPGRP:
- * This symbol, if defined, indicates that setpgrp needs two
- * arguments whereas USG one needs none. See also HAS_SETPGID
- * for a POSIX interface.
- */
-/*#define HAS_SETPGRP /**/
-/*#define USE_BSD_SETPGRP /**/
-
-/* STDCHAR:
- * This symbol is defined to be the type of char used in stdio.h.
- * It has the values "unsigned char" or "char".
- */
-#define STDCHAR unsigned char /**/
-
-/* HAS__FWALK:
- * This symbol, if defined, indicates that the _fwalk system call is
- * available to apply a function to all the file handles.
- */
-/*#define HAS__FWALK /**/
-
-/* FCNTL_CAN_LOCK:
- * This symbol, if defined, indicates that fcntl() can be used
- * for file locking. Normally on Unix systems this is defined.
- * It may be undefined on VMS.
- */
-/*#define FCNTL_CAN_LOCK /**/
-
-/* HAS_FSYNC:
- * This symbol, if defined, indicates that the fsync routine is
- * available to write a file's modified data and attributes to
- * permanent storage.
- */
-/*#define HAS_FSYNC /**/
-
-/* HAS_SBRK_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the sbrk() function. Otherwise, it is up
- * to the program to supply one. Good guesses are
- * extern void* sbrk _((int));
- * extern void* sbrk _((size_t));
+/* HAS_SIGPROCMASK:
+ * This symbol, if defined, indicates that the sigprocmask
+ * system call is available to examine or change the signal mask
+ * of the calling process.
*/
-/*#define HAS_SBRK_PROTO /**/
-
-/* NEED_VA_COPY:
- * This symbol, if defined, indicates that the system stores
- * the variable argument list datatype, va_list, in a format
- * that cannot be copied by simple assignment, so that some
- * other means must be used when copying is required.
- * As such systems vary in their provision (or non-provision)
- * of copying mechanisms, handy.h defines a platform-
- * independent macro, Perl_va_copy(src, dst), to do the job.
- */
-/*#define NEED_VA_COPY /**/
+/*#define HAS_SIGPROCMASK /**/
#endif
/*
* Package name : perl5
* Source directory :
- * Configuration time: Wed Dec 6 18:22:28 2000
+ * Configuration time: Thu Jan 18 14:54:41 2001
* Configured by : nick
* Target system :
*/
*/
#define HAS_STRTOL /**/
-/* HAS_STRTOUL:
- * This symbol, if defined, indicates that the strtoul routine is
- * available to provide conversion of strings to unsigned long.
- */
-#define HAS_STRTOUL /**/
-
/* HAS_STRXFRM:
* This symbol, if defined, indicates that the strxfrm() routine is
* available to transform strings.
#define CPPRUN "gcc -E"
#define CPPLAST ""
+/* HAS__FWALK:
+ * This symbol, if defined, indicates that the _fwalk system call is
+ * available to apply a function to all the file handles.
+ */
+/*#define HAS__FWALK /**/
+
/* HAS_ACCESS:
* This manifest constant lets the C program know that the access()
* system call is available to check for accessibility using real UID/GID.
*/
/*#define HAS_ENDSERVENT /**/
+/* FCNTL_CAN_LOCK:
+ * This symbol, if defined, indicates that fcntl() can be used
+ * for file locking. Normally on Unix systems this is defined.
+ * It may be undefined on VMS.
+ */
+/*#define FCNTL_CAN_LOCK /**/
+
/* HAS_FD_SET:
* This symbol, when defined, indicates presence of the fd_set typedef
* in <sys/types.h>
*/
/*#define HAS_FSTATFS /**/
+/* HAS_FSYNC:
+ * This symbol, if defined, indicates that the fsync routine is
+ * available to write a file's modified data and attributes to
+ * permanent storage.
+ */
+/*#define HAS_FSYNC /**/
+
/* HAS_FTELLO:
* This symbol, if defined, indicates that the ftello routine is
* available to ftell beyond 32 bits (useful for ILP32 hosts).
*/
/*#define HAS_GETPROTOENT /**/
+/* HAS_GETPGRP:
+ * This symbol, if defined, indicates that the getpgrp routine is
+ * available to get the current process group.
+ */
+/* USE_BSD_GETPGRP:
+ * This symbol, if defined, indicates that getpgrp needs one
+ * arguments whereas USG one needs none.
+ */
+/*#define HAS_GETPGRP /**/
+/*#define USE_BSD_GETPGRP /**/
+
/* HAS_GETPROTOBYNAME:
* This symbol, if defined, indicates that the getprotobyname()
* routine is available to look up protocols by their name.
*/
#define HAS_SANE_MEMCMP /**/
+/* HAS_SBRK_PROTO:
+ * This symbol, if defined, indicates that the system provides
+ * a prototype for the sbrk() function. Otherwise, it is up
+ * to the program to supply one. Good guesses are
+ * extern void* sbrk _((int));
+ * extern void* sbrk _((size_t));
+ */
+/*#define HAS_SBRK_PROTO /**/
+
/* HAS_SEM:
* This symbol, if defined, indicates that the entire sem*(2) library is
* supported.
*/
/*#define HAS_SETPROTOENT /**/
+/* HAS_SETPGRP:
+ * This symbol, if defined, indicates that the setpgrp routine is
+ * available to set the current process group.
+ */
+/* USE_BSD_SETPGRP:
+ * This symbol, if defined, indicates that setpgrp needs two
+ * arguments whereas USG one needs none. See also HAS_SETPGID
+ * for a POSIX interface.
+ */
+/*#define HAS_SETPGRP /**/
+/*#define USE_BSD_SETPGRP /**/
+
/* HAS_SETPROCTITLE:
* This symbol, if defined, indicates that the setproctitle routine is
* available to set process title.
*/
/*#define HAS_STRTOLL /**/
+/* HAS_STRTOQ:
+ * This symbol, if defined, indicates that the strtoq routine is
+ * available to convert strings to long longs (quads).
+ */
+/*#define HAS_STRTOQ /**/
+
+/* HAS_STRTOUL:
+ * This symbol, if defined, indicates that the strtoul routine is
+ * available to provide conversion of strings to unsigned long.
+ */
+#define HAS_STRTOUL /**/
+
/* HAS_STRTOULL:
* This symbol, if defined, indicates that the strtoull routine is
* available to convert strings to unsigned long longs.
#define RD_NODATA -1
#define EOF_NONBLOCK
+/* NEED_VA_COPY:
+ * This symbol, if defined, indicates that the system stores
+ * the variable argument list datatype, va_list, in a format
+ * that cannot be copied by simple assignment, so that some
+ * other means must be used when copying is required.
+ * As such systems vary in their provision (or non-provision)
+ * of copying mechanisms, handy.h defines a platform-
+ * independent macro, Perl_va_copy(src, dst), to do the job.
+ */
+/*#define NEED_VA_COPY /**/
+
/* Netdb_host_t:
* This symbol holds the type used for the 1st argument
* to gethostbyaddr().
* This symbol defines the format string used for printing a Perl UV
* as an unsigned hexadecimal integer in lowercase abcdef.
*/
+/* UVXf:
+ * This symbol defines the format string used for printing a Perl UV
+ * as an unsigned hexadecimal integer in uppercase ABCDEF.
+ */
/* NVef:
* This symbol defines the format string used for printing a Perl NV
* using %e-ish floating point format.
#define UVuf "lu" /**/
#define UVof "lo" /**/
#define UVxf "lx" /**/
+#define UVXf "lX" /**/
#define NVef "e" /**/
#define NVff "f" /**/
#define NVgf "g" /**/
* The last element is 0, corresponding to the 0 at the end of
* the sig_name list.
*/
+/* SIG_SIZE:
+ * This variable contains the number of elements of the sig_name
+ * and sig_num arrays, excluding the final NULL entry.
+ */
#define SIG_NAME "ZERO", "NUM01", "INT", "QUIT", "ILL", "NUM05", "NUM06", "NUM07", "FPE", "KILL", "NUM10", "SEGV", "NUM12", "PIPE", "ALRM", "TERM", "NUM16", "NUM17", "NUM18", "NUM19", "CHLD", "BREAK", "ABRT", "STOP", "NUM24", "CONT", "CLD", 0 /**/
#define 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, 20, 0 /**/
+#define SIG_SIZE 27 /**/
/* SITEARCH:
* This symbol contains the name of the private library for this package.
*/
#define STARTPERL "#!perl" /**/
+/* STDCHAR:
+ * This symbol is defined to be the type of char used in stdio.h.
+ * It has the values "unsigned char" or "char".
+ */
+#define STDCHAR char /**/
+
/* HAS_STDIO_STREAM_ARRAY:
* This symbol, if defined, tells that there is an array
* holding the stdio streams.
#define PERL_XS_APIVERSION "5.6.0"
#define PERL_PM_APIVERSION "5.005"
-/* HAS_GETPGRP:
- * This symbol, if defined, indicates that the getpgrp routine is
- * available to get the current process group.
- */
-/* USE_BSD_GETPGRP:
- * This symbol, if defined, indicates that getpgrp needs one
- * arguments whereas USG one needs none.
- */
-/*#define HAS_GETPGRP /**/
-/*#define USE_BSD_GETPGRP /**/
-
-/* HAS_SETPGRP:
- * This symbol, if defined, indicates that the setpgrp routine is
- * available to set the current process group.
- */
-/* USE_BSD_SETPGRP:
- * This symbol, if defined, indicates that setpgrp needs two
- * arguments whereas USG one needs none. See also HAS_SETPGID
- * for a POSIX interface.
- */
-/*#define HAS_SETPGRP /**/
-/*#define USE_BSD_SETPGRP /**/
-
-/* STDCHAR:
- * This symbol is defined to be the type of char used in stdio.h.
- * It has the values "unsigned char" or "char".
- */
-#define STDCHAR char /**/
-
-/* HAS__FWALK:
- * This symbol, if defined, indicates that the _fwalk system call is
- * available to apply a function to all the file handles.
- */
-/*#define HAS__FWALK /**/
-
-/* FCNTL_CAN_LOCK:
- * This symbol, if defined, indicates that fcntl() can be used
- * for file locking. Normally on Unix systems this is defined.
- * It may be undefined on VMS.
- */
-/*#define FCNTL_CAN_LOCK /**/
-
-/* HAS_FSYNC:
- * This symbol, if defined, indicates that the fsync routine is
- * available to write a file's modified data and attributes to
- * permanent storage.
- */
-/*#define HAS_FSYNC /**/
-
-/* HAS_SBRK_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the sbrk() function. Otherwise, it is up
- * to the program to supply one. Good guesses are
- * extern void* sbrk _((int));
- * extern void* sbrk _((size_t));
+/* HAS_SIGPROCMASK:
+ * This symbol, if defined, indicates that the sigprocmask
+ * system call is available to examine or change the signal mask
+ * of the calling process.
*/
-/*#define HAS_SBRK_PROTO /**/
-
-/* NEED_VA_COPY:
- * This symbol, if defined, indicates that the system stores
- * the variable argument list datatype, va_list, in a format
- * that cannot be copied by simple assignment, so that some
- * other means must be used when copying is required.
- * As such systems vary in their provision (or non-provision)
- * of copying mechanisms, handy.h defines a platform-
- * independent macro, Perl_va_copy(src, dst), to do the job.
- */
-/*#define NEED_VA_COPY /**/
+/*#define HAS_SIGPROCMASK /**/
#endif
/*
* Package name : perl5
* Source directory :
- * Configuration time: Wed Dec 6 14:45:43 2000
+ * Configuration time: Thu Jan 18 14:54:56 2001
* Configured by : nick
* Target system :
*/
*/
#define HAS_STRTOL /**/
-/* HAS_STRTOUL:
- * This symbol, if defined, indicates that the strtoul routine is
- * available to provide conversion of strings to unsigned long.
- */
-#define HAS_STRTOUL /**/
-
/* HAS_STRXFRM:
* This symbol, if defined, indicates that the strxfrm() routine is
* available to transform strings.
#define CPPRUN "cl -nologo -E"
#define CPPLAST ""
+/* HAS__FWALK:
+ * This symbol, if defined, indicates that the _fwalk system call is
+ * available to apply a function to all the file handles.
+ */
+/*#define HAS__FWALK /**/
+
/* HAS_ACCESS:
* This manifest constant lets the C program know that the access()
* system call is available to check for accessibility using real UID/GID.
*/
/*#define HAS_ENDSERVENT /**/
+/* FCNTL_CAN_LOCK:
+ * This symbol, if defined, indicates that fcntl() can be used
+ * for file locking. Normally on Unix systems this is defined.
+ * It may be undefined on VMS.
+ */
+/*#define FCNTL_CAN_LOCK /**/
+
/* HAS_FD_SET:
* This symbol, when defined, indicates presence of the fd_set typedef
* in <sys/types.h>
*/
/*#define HAS_FSTATFS /**/
+/* HAS_FSYNC:
+ * This symbol, if defined, indicates that the fsync routine is
+ * available to write a file's modified data and attributes to
+ * permanent storage.
+ */
+/*#define HAS_FSYNC /**/
+
/* HAS_FTELLO:
* This symbol, if defined, indicates that the ftello routine is
* available to ftell beyond 32 bits (useful for ILP32 hosts).
*/
/*#define HAS_GETPROTOENT /**/
+/* HAS_GETPGRP:
+ * This symbol, if defined, indicates that the getpgrp routine is
+ * available to get the current process group.
+ */
+/* USE_BSD_GETPGRP:
+ * This symbol, if defined, indicates that getpgrp needs one
+ * arguments whereas USG one needs none.
+ */
+/*#define HAS_GETPGRP /**/
+/*#define USE_BSD_GETPGRP /**/
+
/* HAS_GETPROTOBYNAME:
* This symbol, if defined, indicates that the getprotobyname()
* routine is available to look up protocols by their name.
*/
#define HAS_SANE_MEMCMP /**/
+/* HAS_SBRK_PROTO:
+ * This symbol, if defined, indicates that the system provides
+ * a prototype for the sbrk() function. Otherwise, it is up
+ * to the program to supply one. Good guesses are
+ * extern void* sbrk _((int));
+ * extern void* sbrk _((size_t));
+ */
+/*#define HAS_SBRK_PROTO /**/
+
/* HAS_SEM:
* This symbol, if defined, indicates that the entire sem*(2) library is
* supported.
*/
/*#define HAS_SETPROTOENT /**/
+/* HAS_SETPGRP:
+ * This symbol, if defined, indicates that the setpgrp routine is
+ * available to set the current process group.
+ */
+/* USE_BSD_SETPGRP:
+ * This symbol, if defined, indicates that setpgrp needs two
+ * arguments whereas USG one needs none. See also HAS_SETPGID
+ * for a POSIX interface.
+ */
+/*#define HAS_SETPGRP /**/
+/*#define USE_BSD_SETPGRP /**/
+
/* HAS_SETPROCTITLE:
* This symbol, if defined, indicates that the setproctitle routine is
* available to set process title.
*/
/*#define HAS_STRTOLL /**/
+/* HAS_STRTOQ:
+ * This symbol, if defined, indicates that the strtoq routine is
+ * available to convert strings to long longs (quads).
+ */
+/*#define HAS_STRTOQ /**/
+
+/* HAS_STRTOUL:
+ * This symbol, if defined, indicates that the strtoul routine is
+ * available to provide conversion of strings to unsigned long.
+ */
+#define HAS_STRTOUL /**/
+
/* HAS_STRTOULL:
* This symbol, if defined, indicates that the strtoull routine is
* available to convert strings to unsigned long longs.
#define RD_NODATA -1
#define EOF_NONBLOCK
+/* NEED_VA_COPY:
+ * This symbol, if defined, indicates that the system stores
+ * the variable argument list datatype, va_list, in a format
+ * that cannot be copied by simple assignment, so that some
+ * other means must be used when copying is required.
+ * As such systems vary in their provision (or non-provision)
+ * of copying mechanisms, handy.h defines a platform-
+ * independent macro, Perl_va_copy(src, dst), to do the job.
+ */
+/*#define NEED_VA_COPY /**/
+
/* Netdb_host_t:
* This symbol holds the type used for the 1st argument
* to gethostbyaddr().
* This symbol defines the format string used for printing a Perl UV
* as an unsigned hexadecimal integer in lowercase abcdef.
*/
+/* UVXf:
+ * This symbol defines the format string used for printing a Perl UV
+ * as an unsigned hexadecimal integer in uppercase ABCDEF.
+ */
/* NVef:
* This symbol defines the format string used for printing a Perl NV
* using %e-ish floating point format.
#define UVuf "lu" /**/
#define UVof "lo" /**/
#define UVxf "lx" /**/
+#define UVXf "lX" /**/
#define NVef "e" /**/
#define NVff "f" /**/
#define NVgf "g" /**/
* The last element is 0, corresponding to the 0 at the end of
* the sig_name list.
*/
+/* SIG_SIZE:
+ * This variable contains the number of elements of the sig_name
+ * and sig_num arrays, excluding the final NULL entry.
+ */
#define SIG_NAME "ZERO", "NUM01", "INT", "QUIT", "ILL", "NUM05", "NUM06", "NUM07", "FPE", "KILL", "NUM10", "SEGV", "NUM12", "PIPE", "ALRM", "TERM", "NUM16", "NUM17", "NUM18", "NUM19", "CHLD", "BREAK", "ABRT", "STOP", "NUM24", "CONT", "CLD", 0 /**/
#define 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, 20, 0 /**/
+#define SIG_SIZE 27 /**/
/* SITEARCH:
* This symbol contains the name of the private library for this package.
*/
#define STARTPERL "#!perl" /**/
+/* STDCHAR:
+ * This symbol is defined to be the type of char used in stdio.h.
+ * It has the values "unsigned char" or "char".
+ */
+#define STDCHAR char /**/
+
/* HAS_STDIO_STREAM_ARRAY:
* This symbol, if defined, tells that there is an array
* holding the stdio streams.
#define PERL_XS_APIVERSION "5.6.0"
#define PERL_PM_APIVERSION "5.005"
-/* HAS_GETPGRP:
- * This symbol, if defined, indicates that the getpgrp routine is
- * available to get the current process group.
- */
-/* USE_BSD_GETPGRP:
- * This symbol, if defined, indicates that getpgrp needs one
- * arguments whereas USG one needs none.
- */
-/*#define HAS_GETPGRP /**/
-/*#define USE_BSD_GETPGRP /**/
-
-/* HAS_SETPGRP:
- * This symbol, if defined, indicates that the setpgrp routine is
- * available to set the current process group.
- */
-/* USE_BSD_SETPGRP:
- * This symbol, if defined, indicates that setpgrp needs two
- * arguments whereas USG one needs none. See also HAS_SETPGID
- * for a POSIX interface.
- */
-/*#define HAS_SETPGRP /**/
-/*#define USE_BSD_SETPGRP /**/
-
-/* STDCHAR:
- * This symbol is defined to be the type of char used in stdio.h.
- * It has the values "unsigned char" or "char".
- */
-#define STDCHAR char /**/
-
-/* HAS__FWALK:
- * This symbol, if defined, indicates that the _fwalk system call is
- * available to apply a function to all the file handles.
- */
-/*#define HAS__FWALK /**/
-
-/* FCNTL_CAN_LOCK:
- * This symbol, if defined, indicates that fcntl() can be used
- * for file locking. Normally on Unix systems this is defined.
- * It may be undefined on VMS.
- */
-/*#define FCNTL_CAN_LOCK /**/
-
-/* HAS_FSYNC:
- * This symbol, if defined, indicates that the fsync routine is
- * available to write a file's modified data and attributes to
- * permanent storage.
- */
-/*#define HAS_FSYNC /**/
-
-/* HAS_SBRK_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the sbrk() function. Otherwise, it is up
- * to the program to supply one. Good guesses are
- * extern void* sbrk _((int));
- * extern void* sbrk _((size_t));
+/* HAS_SIGPROCMASK:
+ * This symbol, if defined, indicates that the sigprocmask
+ * system call is available to examine or change the signal mask
+ * of the calling process.
*/
-/*#define HAS_SBRK_PROTO /**/
-
-/* NEED_VA_COPY:
- * This symbol, if defined, indicates that the system stores
- * the variable argument list datatype, va_list, in a format
- * that cannot be copied by simple assignment, so that some
- * other means must be used when copying is required.
- * As such systems vary in their provision (or non-provision)
- * of copying mechanisms, handy.h defines a platform-
- * independent macro, Perl_va_copy(src, dst), to do the job.
- */
-/*#define NEED_VA_COPY /**/
+/*#define HAS_SIGPROCMASK /**/
#endif
utils: $(PERLEXE) $(X2P)
cd ..\utils && $(MAKE) PERL=$(MINIPERL)
+ copy ..\README.aix ..\pod\perlaix.pod
copy ..\README.amiga ..\pod\perlamiga.pod
copy ..\README.cygwin ..\pod\perlcygwin.pod
copy ..\README.dos ..\pod\perldos.pod
+ copy ..\README.epoc ..\pod\perlepoc.pod
copy ..\README.hpux ..\pod\perlhpux.pod
copy ..\README.machten ..\pod\perlmachten.pod
copy ..\README.os2 ..\pod\perlos2.pod
- copy ..\README.os2 ..\pod\perlos2.pod
+ copy ..\README.os390 ..\pod\perlos390.pod
+ copy ..\README.posix-bc ..\pod\perlposix-bc.pod
+ copy ..\README.solaris ..\pod\perlsolaris.pod
copy ..\vms\perlvms.pod ..\pod\perlvms.pod
+ copy ..\README.vos ..\pod\perlvos.pod
+ copy ..\README.win32 ..\pod\perlwin32.pod
cd ..\pod && $(MAKE) -f ..\win32\pod.mak converters
cd ..\lib && $(PERLEXE) lib_pm.PL
$(PERLEXE) $(PL2BAT) $(UTILS)