summaryrefslogtreecommitdiff
path: root/gnu/usr.bin/perl/vms
diff options
context:
space:
mode:
authorTodd C. Miller <millert@cvs.openbsd.org>1999-04-29 22:53:00 +0000
committerTodd C. Miller <millert@cvs.openbsd.org>1999-04-29 22:53:00 +0000
commitc25c5c3c87d89b68324dc98b7c8aaabc750c7cec (patch)
tree2943af9b1f84d88d863a9ba36a234877561bf5f0 /gnu/usr.bin/perl/vms
parent37583d269f066aa8aa04ea18126b188d12257e6d (diff)
perl5.005_03 (stock)
Diffstat (limited to 'gnu/usr.bin/perl/vms')
-rw-r--r--gnu/usr.bin/perl/vms/ext/DCLsym/DCLsym.xs2
-rw-r--r--gnu/usr.bin/perl/vms/ext/DCLsym/Makefile.PL3
-rw-r--r--gnu/usr.bin/perl/vms/ext/Filespec.pm11
-rw-r--r--gnu/usr.bin/perl/vms/ext/Stdio/Stdio.pm437
-rw-r--r--gnu/usr.bin/perl/vms/ext/Stdio/Stdio.xs146
-rw-r--r--gnu/usr.bin/perl/vms/ext/Stdio/test.pl32
-rw-r--r--gnu/usr.bin/perl/vms/ext/filespec.t36
-rw-r--r--gnu/usr.bin/perl/vms/gen_shrfls.pl75
-rw-r--r--gnu/usr.bin/perl/vms/genconfig.pl94
-rw-r--r--gnu/usr.bin/perl/vms/perlvms.pod59
-rw-r--r--gnu/usr.bin/perl/vms/perly_c.vms2503
-rw-r--r--gnu/usr.bin/perl/vms/sockadapt.h3
-rw-r--r--gnu/usr.bin/perl/vms/test.com28
-rw-r--r--gnu/usr.bin/perl/vms/vms.c740
-rw-r--r--gnu/usr.bin/perl/vms/vms_yfix.pl5
-rw-r--r--gnu/usr.bin/perl/vms/vmsish.h142
16 files changed, 2741 insertions, 1575 deletions
diff --git a/gnu/usr.bin/perl/vms/ext/DCLsym/DCLsym.xs b/gnu/usr.bin/perl/vms/ext/DCLsym/DCLsym.xs
index 3918eb11e57..35cabc525ea 100644
--- a/gnu/usr.bin/perl/vms/ext/DCLsym/DCLsym.xs
+++ b/gnu/usr.bin/perl/vms/ext/DCLsym/DCLsym.xs
@@ -54,7 +54,7 @@ _getsym(name)
_ckvmssts(lib$sfree1_dd(&valdsc));
}
else {
- ST(0) = &sv_undef; /* error - we're returning undef, if anything */
+ ST(0) = &PL_sv_undef; /* error - we're returning undef, if anything */
switch (retsts) {
case LIB$_NOSUCHSYM:
break; /* nobody home */;
diff --git a/gnu/usr.bin/perl/vms/ext/DCLsym/Makefile.PL b/gnu/usr.bin/perl/vms/ext/DCLsym/Makefile.PL
index 8e6f5bce40a..84ab2be2b52 100644
--- a/gnu/usr.bin/perl/vms/ext/DCLsym/Makefile.PL
+++ b/gnu/usr.bin/perl/vms/ext/DCLsym/Makefile.PL
@@ -1,3 +1,4 @@
use ExtUtils::MakeMaker;
-WriteMakefile( 'VERSION_FROM' => 'DCLsym.pm' );
+WriteMakefile( 'VERSION_FROM' => 'DCLsym.pm',
+ 'MAN3PODS' => ' ');
diff --git a/gnu/usr.bin/perl/vms/ext/Filespec.pm b/gnu/usr.bin/perl/vms/ext/Filespec.pm
index db3283c5713..4a539c27016 100644
--- a/gnu/usr.bin/perl/vms/ext/Filespec.pm
+++ b/gnu/usr.bin/perl/vms/ext/Filespec.pm
@@ -12,7 +12,7 @@ VMS::Filespec - convert between VMS and Unix file specification syntax
=head1 SYNOPSIS
use VMS::Filespec;
-$fullspec = rmsexpand('[.VMS]file.specification');
+$fullspec = rmsexpand('[.VMS]file.specification'[, 'default:[file.spec]']);
$vmsspec = vmsify('/my/Unix/file/specification');
$unixspec = unixify('my:[VMS]file.specification');
$path = pathify('my:[VMS.or.Unix.directory]specification.dir');
@@ -65,9 +65,11 @@ The routines provided are:
=head2 rmsexpand
Uses the RMS $PARSE and $SEARCH services to expand the input
-specification to its fully qualified form. (If the file does
-not exist, the input specification is expanded as much as
-possible.) If an error occurs, returns C<undef> and sets C<$!>
+specification to its fully qualified form, except that a null type
+or version is not added unless it was present in either the original
+file specification or the default specification passed to C<rmsexpand>.
+(If the file does not exist, the input specification is expanded as much
+as possible.) If an error occurs, returns C<undef> and sets C<$!>
and C<$^E>.
=head2 vmsify
@@ -264,6 +266,7 @@ sub fileify ($) {
my($path) = @_;
if (!$path) { return undef }
+ if ($path eq '/') { return 'sys$disk:[000000]'; }
if ($path =~ /(.+)\.([^:>\]]*)$/) {
$path = $1;
if ($2 !~ /^dir(?:;1)?$/i) { return undef }
diff --git a/gnu/usr.bin/perl/vms/ext/Stdio/Stdio.pm b/gnu/usr.bin/perl/vms/ext/Stdio/Stdio.pm
index 218c406fa44..04b339725fb 100644
--- a/gnu/usr.bin/perl/vms/ext/Stdio/Stdio.pm
+++ b/gnu/usr.bin/perl/vms/ext/Stdio/Stdio.pm
@@ -1,8 +1,9 @@
# VMS::Stdio - VMS extensions to Perl's stdio calls
#
# Author: Charles Bailey bailey@genetics.upenn.edu
-# Version: 2.02
-# Revised: 15-Feb-1997
+# Version: 2.1
+# Revised: 24-Mar-1998
+# Docs revised: 13-Oct-1998 Dan Sugalski <sugalskd@ous.edu>
package VMS::Stdio;
@@ -12,17 +13,18 @@ use Carp '&croak';
use DynaLoader ();
use Exporter ();
-$VERSION = '2.02';
+$VERSION = '2.1';
@ISA = qw( Exporter DynaLoader IO::File );
@EXPORT = qw( &O_APPEND &O_CREAT &O_EXCL &O_NDELAY &O_NOWAIT
&O_RDONLY &O_RDWR &O_TRUNC &O_WRONLY );
-@EXPORT_OK = qw( &flush &getname &remove &rewind &sync &tmpnam
- &vmsopen &vmssysopen &waitfh );
+@EXPORT_OK = qw( &flush &getname &remove &rewind &sync &setdef &tmpnam
+ &vmsopen &vmssysopen &waitfh &writeof );
%EXPORT_TAGS = ( CONSTANTS => [ qw( &O_APPEND &O_CREAT &O_EXCL &O_NDELAY
&O_NOWAIT &O_RDONLY &O_RDWR &O_TRUNC
&O_WRONLY ) ],
- FUNCTIONS => [ qw( &flush &getname &remove &rewind &sync
- &tmpnam &vmsopen &vmssysopen &waitfh ) ] );
+ FUNCTIONS => [ qw( &flush &getname &remove &rewind &setdef
+ &sync &tmpnam &vmsopen &vmssysopen
+ &waitfh &writeof ) ] );
bootstrap VMS::Stdio $VERSION;
@@ -32,7 +34,7 @@ sub AUTOLOAD {
if ($constname =~ /^O_/) {
my($val) = constant($constname);
defined $val or croak("Unknown VMS::Stdio constant $constname");
- *$AUTOLOAD = sub { val; }
+ *$AUTOLOAD = sub { $val; }
}
else { # We don't know about it; hand off to IO::File
require IO::File;
@@ -80,22 +82,24 @@ VMS::Stdio - standard I/O functions via VMS extensions
=head1 SYNOPSIS
-use VMS::Stdio qw( &flush &getname &remove &rewind &sync &tmpnam
- &vmsopen &vmssysopen &waitfh );
-$uniquename = tmpnam;
-$fh = vmsopen("my.file","rfm=var","alq=100",...) or die $!;
-$name = getname($fh);
-print $fh "Hello, world!\n";
-flush($fh);
-sync($fh);
-rewind($fh);
-$line = <$fh>;
-undef $fh; # closes file
-$fh = vmssysopen("another.file", O_RDONLY | O_NDELAY, 0, "ctx=bin");
-sysread($fh,$data,128);
-waitfh($fh);
-close($fh);
-remove("another.file");
+ use VMS::Stdio qw( &flush &getname &remove &rewind &setdef &sync &tmpnam
+ &vmsopen &vmssysopen &waitfh &writeof );
+ setdef("new:[default.dir]");
+ $uniquename = tmpnam;
+ $fh = vmsopen("my.file","rfm=var","alq=100",...) or die $!;
+ $name = getname($fh);
+ print $fh "Hello, world!\n";
+ flush($fh);
+ sync($fh);
+ rewind($fh);
+ $line = <$fh>;
+ undef $fh; # closes file
+ $fh = vmssysopen("another.file", O_RDONLY | O_NDELAY, 0, "ctx=bin");
+ sysread($fh,$data,128);
+ waitfh($fh);
+ close($fh);
+ remove("another.file");
+ writeof($pipefh);
=head1 DESCRIPTION
@@ -175,6 +179,13 @@ to the beginning of the file. It's really just a convenience
method equivalent in effect to C<seek($fh,0,0)>. It returns a
true value if successful, and C<undef> if it fails.
+=item setdef
+
+This function sets the default device and directory for the process.
+It is identical to the built-in chdir() operator, except that the change
+persists after Perl exits. It returns a true value on success, and
+C<undef> if it encounters and error.
+
=item sync
This function flushes buffered data for the specified file handle
@@ -212,6 +223,373 @@ as a normal Perl file handle only. When the scalar containing
a VMS::Stdio file handle is overwritten, C<undef>d, or goes
out of scope, the associated file is closed automatically.
+=over 4
+
+=head2 File characteristic options
+
+=over 2
+
+=item alq=INTEGER
+
+Sets the allocation quantity for this file
+
+=item bls=INTEGER
+
+File blocksize
+
+=item ctx=STRING
+
+Sets the context for the file. Takes one of these arguments:
+
+=over 4
+
+=item bin
+
+Disables LF to CRLF translation
+
+=item cvt
+
+Negates previous setting of C<ctx=noctx>
+
+=item nocvt
+
+Disables conversion of FORTRAN carriage control
+
+=item rec
+
+Force record-mode access
+
+=item stm
+
+Force stream mode
+
+=item xplct
+
+Causes records to be flushed I<only> when the file is closed, or when an
+explicit flush is done
+
+=back
+
+=item deq=INTEGER
+
+Sets the default extension quantity
+
+=item dna=FILESPEC
+
+Sets the default filename string. Used to fill in any missing pieces of the
+filename passed.
+
+=item fop=STRING
+
+File processing option. Takes one or more of the following (in a
+comma-separated list if there's more than one)
+
+=over 4
+
+=item ctg
+
+Contiguous.
+
+=item cbt
+
+Contiguous-best-try.
+
+=item dfw
+
+Deferred write; only applicable to files opened for shared access.
+
+=item dlt
+
+Delete file on close.
+
+=item tef
+
+Truncate at end-of-file.
+
+=item cif
+
+Create if nonexistent.
+
+=item sup
+
+Supersede.
+
+=item scf
+
+Submit as command file on close.
+
+=item spl
+
+Spool to system printer on close.
+
+=item tmd
+
+Temporary delete.
+
+=item tmp
+
+Temporary (no file directory).
+
+=item nef
+
+Not end-of-file.
+
+=item rck
+
+Read check compare operation.
+
+=item wck
+
+Write check compare operation.
+
+=item mxv
+
+Maximize version number.
+
+=item rwo
+
+Rewind file on open.
+
+=item pos
+
+Current position.
+
+=item rwc
+
+Rewind file on close.
+
+=item sqo
+
+File can only be processed in a sequential manner.
+
+=back
+
+=item fsz=INTEGER
+
+Fixed header size
+
+=item gbc=INTEGER
+
+Global buffers requested for the file
+
+=item mbc=INTEGER
+
+Multiblock count
+
+=item mbf=INTEGER
+
+Bultibuffer count
+
+=item mrs=INTEGER
+
+Maximum record size
+
+=item rat=STRING
+
+File record attributes. Takes one of the following:
+
+=over 4
+
+=item cr
+
+Carriage-return control.
+
+=item blk
+
+Disallow records to span block boundaries.
+
+=item ftn
+
+FORTRAN print control.
+
+=item none
+
+Explicitly forces no carriage control.
+
+=item prn
+
+Print file format.
+
+=back
+
+=item rfm=STRING
+
+File record format. Takes one of the following:
+
+=over 4
+
+=item fix
+
+Fixed-length record format.
+
+=item stm
+
+RMS stream record format.
+
+=item stmlf
+
+Stream format with line-feed terminator.
+
+=item stmcr
+
+Stream format with carriage-return terminator.
+
+=item var
+
+Variable-length record format.
+
+=item vfc
+
+Variable-length record with fixed control.
+
+=item udf
+
+Undefined format
+
+=back
+
+=item rop=STRING
+
+Record processing operations. Takes one or more of the following in a
+comma-separated list:
+
+=over 4
+
+=item asy
+
+Asynchronous I/O.
+
+=item cco
+
+Cancel Ctrl/O (used with Terminal I/O).
+
+=item cvt
+
+Capitalizes characters on a read from the terminal.
+
+=item eof
+
+Positions the record stream to the end-of-file for the connect operation
+only.
+
+=item nlk
+
+Do not lock record.
+
+=item pmt
+
+Enables use of the prompt specified by pmt=usr-prmpt on input from the
+terminal.
+
+=item pta
+
+Eliminates any information in the type-ahead buffer on a read from the
+terminal.
+
+=item rea
+
+Locks record for a read operation for this process, while allowing other
+accessors to read the record.
+
+=item rlk
+
+Locks record for write.
+
+=item rne
+
+Suppresses echoing of input data on the screen as it is entered on the
+keyboard.
+
+=item rnf
+
+Indicates that Ctrl/U, Ctrl/R, and DELETE are not to be considered control
+commands on terminal input, but are to be passed to the application
+program.
+
+=item rrl
+
+Reads regardless of lock.
+
+=item syncsts
+
+Returns success status of RMS$_SYNCH if the requested service completes its
+task immediately.
+
+=item tmo
+
+Timeout I/O.
+
+=item tpt
+
+Allows put/write services using sequential record access mode to occur at
+any point in the file, truncating the file at that point.
+
+=item ulk
+
+Prohibits RMS from automatically unlocking records.
+
+=item wat
+
+Wait until record is available, if currently locked by another stream.
+
+=item rah
+
+Read ahead.
+
+=item wbh
+
+Write behind.
+
+=back
+
+=item rtv=INTEGER
+
+The number of retrieval pointers that RMS has to maintain (0 to 127255)
+
+=item shr=STRING
+
+File sharing options. Choose one of the following:
+
+=over 4
+
+=item del
+
+Allows users to delete.
+
+=item get
+
+Allows users to read.
+
+=item mse
+
+Allows mainstream access.
+
+=item nil
+
+Prohibits file sharing.
+
+=item put
+
+Allows users to write.
+
+=item upd
+
+Allows users to update.
+
+=item upi
+
+Allows one or more writers.
+
+=back
+
+=item tmo=INTEGER
+
+I/O timeout value
+
+=back
+
+=back
+
=item vmssysopen
This function bears the same relationship to the CORE function
@@ -231,8 +609,17 @@ operation on the file handle specified as its argument. It is
used with handles opened for asynchronous I/O, and performs its
task by calling the CRTL routine fwait().
+=item writeof
+
+This function writes an EOF to a file handle, if the device driver
+supports this operation. Its primary use is to send an EOF to a
+subprocess through a pipe opened for writing without closing the
+pipe. It returns a true value if successful, and C<undef> if
+it encounters an error.
+
=head1 REVISION
-This document was last revised on 10-Dec-1996, for Perl 5.004.
+This document was last revised on 13-Oct-1998, for Perl 5.004, 5.005, and
+5.006.
=cut
diff --git a/gnu/usr.bin/perl/vms/ext/Stdio/Stdio.xs b/gnu/usr.bin/perl/vms/ext/Stdio/Stdio.xs
index b10fec0d485..53b491575dc 100644
--- a/gnu/usr.bin/perl/vms/ext/Stdio/Stdio.xs
+++ b/gnu/usr.bin/perl/vms/ext/Stdio/Stdio.xs
@@ -1,8 +1,8 @@
/* VMS::Stdio - VMS extensions to stdio routines
*
- * Version: 2.02
+ * Version: 2.1
* Author: Charles Bailey bailey@genetics.upenn.edu
- * Revised: 15-Feb-1997
+ * Revised: 24-Mar-1998
*
*/
@@ -10,6 +10,9 @@
#include "perl.h"
#include "XSUB.h"
#include <file.h>
+#include <iodef.h>
+#include <rms.h>
+#include <starlet.h>
static bool
constant(name, pval)
@@ -84,16 +87,17 @@ newFH(FILE *fp, char type) {
HV *stash;
IO *io;
+ dTHR;
/* Find stash for VMS::Stdio. We don't do this once at boot
* to allow for possibility of threaded Perl with per-thread
* symbol tables. This code (through io = ...) is really
* equivalent to gv_fetchpv("VMS::Stdio::__FH__",TRUE,SVt_PVIO),
* with a little less overhead, and good exercise for me. :-) */
- stashp = (GV **)hv_fetch(defstash,"VMS::",5,TRUE);
- if (!stashp || *stashp == (GV *)&sv_undef) return Nullsv;
+ stashp = (GV **)hv_fetch(PL_defstash,"VMS::",5,TRUE);
+ if (!stashp || *stashp == (GV *)&PL_sv_undef) return Nullsv;
if (!(stash = GvHV(*stashp))) stash = GvHV(*stashp) = newHV();
stashp = (GV **)hv_fetch(GvHV(*stashp),"Stdio::",7,TRUE);
- if (!stashp || *stashp == (GV *)&sv_undef) return Nullsv;
+ if (!stashp || *stashp == (GV *)&PL_sv_undef) return Nullsv;
if (!(stash = GvHV(*stashp))) stash = GvHV(*stashp) = newHV();
/* Set up GV to point to IO, and then take reference */
@@ -118,24 +122,22 @@ constant(name)
if (constant(name, &i))
ST(0) = sv_2mortal(newSViv(i));
else
- ST(0) = &sv_undef;
+ ST(0) = &PL_sv_undef;
void
-flush(sv)
- SV * sv
+flush(fp)
+ FILE * fp
PROTOTYPE: $
CODE:
- FILE *fp = Nullfp;
- if (SvOK(sv)) fp = IoIFP(sv_2io(sv));
- if (fflush(fp)) { ST(0) = &sv_undef; }
- else { clearerr(fp); ST(0) = &sv_yes; }
+ if (fflush(fp)) { ST(0) = &PL_sv_undef; }
+ else { clearerr(fp); ST(0) = &PL_sv_yes; }
char *
getname(fp)
FILE * fp
PROTOTYPE: $
CODE:
- char fname[257];
+ char fname[NAM$C_MAXRSS+1];
ST(0) = sv_newmortal();
if (fgetname(fp,fname) != NULL) sv_setpv(ST(0),fname);
@@ -144,22 +146,76 @@ rewind(fp)
FILE * fp
PROTOTYPE: $
CODE:
- ST(0) = rewind(fp) ? &sv_undef : &sv_yes;
+ ST(0) = rewind(fp) ? &PL_sv_undef : &PL_sv_yes;
void
remove(name)
char *name
PROTOTYPE: $
CODE:
- ST(0) = remove(name) ? &sv_undef : &sv_yes;
+ ST(0) = remove(name) ? &PL_sv_undef : &PL_sv_yes;
+
+void
+setdef(...)
+ PROTOTYPE: @
+ CODE:
+ char vmsdef[NAM$C_MAXRSS+1], es[NAM$C_MAXRSS], sep;
+ unsigned long int retsts;
+ struct FAB deffab = cc$rms_fab;
+ struct NAM defnam = cc$rms_nam;
+ struct dsc$descriptor_s dirdsc = {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, 0};
+ STRLEN n_a;
+ if (items) {
+ SV *defsv = ST(items-1); /* mimic chdir() */
+ ST(0) = &PL_sv_undef;
+ if (!SvPOK(defsv)) { SETERRNO(EINVAL,LIB$_INVARG); XSRETURN(1); }
+ if (tovmsspec(SvPV(defsv,n_a),vmsdef) == NULL) { XSRETURN(1); }
+ deffab.fab$l_fna = vmsdef; deffab.fab$b_fns = strlen(vmsdef);
+ }
+ else {
+ deffab.fab$l_fna = "SYS$LOGIN"; deffab.fab$b_fns = 9;
+ EXTEND(sp,1); ST(0) = &PL_sv_undef;
+ }
+ defnam.nam$l_esa = es; defnam.nam$b_ess = sizeof es;
+ deffab.fab$l_nam = &defnam;
+ retsts = sys$parse(&deffab,0,0);
+ if (retsts & 1) {
+ if (defnam.nam$v_wildcard) retsts = RMS$_WLD;
+ else if (defnam.nam$b_name || defnam.nam$b_type > 1 ||
+ defnam.nam$b_ver > 1) retsts = RMS$_DIR;
+ }
+ defnam.nam$b_nop |= NAM$M_SYNCHK; defnam.nam$l_rlf = NULL; deffab.fab$b_dns = 0;
+ if (!(retsts & 1)) {
+ set_vaxc_errno(retsts);
+ switch (retsts) {
+ case RMS$_DNF:
+ set_errno(ENOENT); break;
+ case RMS$_SYN: case RMS$_DIR: case RMS$_DEV:
+ set_errno(EINVAL); break;
+ case RMS$_PRV:
+ set_errno(EACCES); break;
+ default:
+ set_errno(EVMSERR); break;
+ }
+ (void) sys$parse(&deffab,0,0); /* free up context */
+ XSRETURN(1);
+ }
+ sep = *defnam.nam$l_dir;
+ *defnam.nam$l_dir = '\0';
+ my_setenv("SYS$DISK",defnam.nam$b_node ? defnam.nam$l_node : defnam.nam$l_dev);
+ *defnam.nam$l_dir = sep;
+ dirdsc.dsc$a_pointer = defnam.nam$l_dir; dirdsc.dsc$w_length = defnam.nam$b_dir;
+ if ((retsts = sys$setddir(&dirdsc,0,0)) & 1) ST(0) = &PL_sv_yes;
+ else { set_errno(EVMSERR); set_vaxc_errno(retsts); }
+ (void) sys$parse(&deffab,0,0); /* free up context */
void
sync(fp)
FILE * fp
PROTOTYPE: $
CODE:
- if (fsync(fileno(fp))) { ST(0) = &sv_undef; }
- else { clearerr(fp); ST(0) = &sv_yes; }
+ if (fsync(fileno(fp))) { ST(0) = &PL_sv_undef; }
+ else { clearerr(fp); ST(0) = &PL_sv_yes; }
char *
tmpnam()
@@ -177,6 +233,7 @@ vmsopen(spec,...)
char *args[8],mode[3] = {'r','\0','\0'}, type = '<';
register int i, myargc;
FILE *fp;
+ STRLEN n_a;
if (!spec || !*spec) {
SETERRNO(EINVAL,LIB$_INVARG);
@@ -195,7 +252,7 @@ vmsopen(spec,...)
}
else if (*spec == '<') spec++;
myargc = items - 1;
- for (i = 0; i < myargc; i++) args[i] = SvPV(ST(i+1),na);
+ for (i = 0; i < myargc; i++) args[i] = SvPV(ST(i+1),n_a);
/* This hack brought to you by C's opaque arglist management */
switch (myargc) {
case 0:
@@ -228,9 +285,9 @@ vmsopen(spec,...)
}
if (fp != Nullfp) {
SV *fh = newFH(fp,(mode[1] ? '+' : (mode[0] == 'r' ? '<' : (mode[0] == 'a' ? 'a' : '>'))));
- ST(0) = (fh ? sv_2mortal(fh) : &sv_undef);
+ ST(0) = (fh ? sv_2mortal(fh) : &PL_sv_undef);
}
- else { ST(0) = &sv_undef; }
+ else { ST(0) = &PL_sv_undef; }
void
vmssysopen(spec,mode,perm,...)
@@ -243,13 +300,14 @@ vmssysopen(spec,mode,perm,...)
int i, myargc, fd;
FILE *fp;
SV *fh;
+ STRLEN n_a;
if (!spec || !*spec) {
SETERRNO(EINVAL,LIB$_INVARG);
XSRETURN_UNDEF;
}
if (items > 11) croak("too many args");
myargc = items - 3;
- for (i = 0; i < myargc; i++) args[i] = SvPV(ST(i+3),na);
+ for (i = 0; i < myargc; i++) args[i] = SvPV(ST(i+3),n_a);
/* More fun with C calls; can't combine with above because
args 2,3 of different types in fopen() and open() */
switch (myargc) {
@@ -285,13 +343,53 @@ vmssysopen(spec,mode,perm,...)
if (fd >= 0 &&
((fp = fdopen(fd, &("r\000w\000r+"[2*i]))) != Nullfp)) {
SV *fh = newFH(fp,"<>++"[i]);
- ST(0) = (fh ? sv_2mortal(fh) : &sv_undef);
+ ST(0) = (fh ? sv_2mortal(fh) : &PL_sv_undef);
}
- else { ST(0) = &sv_undef; }
+ else { ST(0) = &PL_sv_undef; }
void
waitfh(fp)
FILE * fp
PROTOTYPE: $
CODE:
- ST(0) = fwait(fp) ? &sv_undef : &sv_yes;
+ ST(0) = fwait(fp) ? &PL_sv_undef : &PL_sv_yes;
+
+void
+writeof(mysv)
+ SV * mysv
+ PROTOTYPE: $
+ CODE:
+ char devnam[257], *cp;
+ unsigned long int chan, iosb[2], retsts, retsts2;
+ struct dsc$descriptor devdsc = {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, devnam};
+ IO *io = sv_2io(mysv);
+ FILE *fp = io ? IoOFP(io) : NULL;
+ if (fp == NULL || strchr(">was+-|",IoTYPE(io)) == Nullch) {
+ set_errno(EBADF); set_vaxc_errno(SS$_IVCHAN);
+ ST(0) = &PL_sv_undef; XSRETURN(1);
+ }
+ if (fgetname(fp,devnam) == Nullch) { ST(0) = &PL_sv_undef; XSRETURN(1); }
+ if ((cp = strrchr(devnam,':')) != NULL) *(cp+1) = '\0';
+ devdsc.dsc$w_length = strlen(devnam);
+ retsts = sys$assign(&devdsc,&chan,0,0);
+ if (retsts & 1) retsts = sys$qiow(0,chan,IO$_WRITEOF,iosb,0,0,0,0,0,0,0,0);
+ if (retsts & 1) retsts = iosb[0];
+ retsts2 = sys$dassgn(chan); /* Be sure to deassign the channel */
+ if (retsts & 1) retsts = retsts2;
+ if (retsts & 1) { ST(0) = &PL_sv_yes; }
+ else {
+ set_vaxc_errno(retsts);
+ switch (retsts) {
+ case SS$_EXQUOTA: case SS$_INSFMEM: case SS$_MBFULL:
+ case SS$_MBTOOSML: case SS$_NOIOCHAN: case SS$_NOLINKS:
+ case SS$_BUFFEROVF:
+ set_errno(ENOSPC); break;
+ case SS$_ILLIOFUNC: case SS$_DEVOFFLINE: case SS$_NOSUCHDEV:
+ set_errno(EBADF); break;
+ case SS$_NOPRIV:
+ set_errno(EACCES); break;
+ default: /* Includes "shouldn't happen" cases that might map */
+ set_errno(EVMSERR); break; /* to other errno values */
+ }
+ ST(0) = &PL_sv_undef;
+ }
diff --git a/gnu/usr.bin/perl/vms/ext/Stdio/test.pl b/gnu/usr.bin/perl/vms/ext/Stdio/test.pl
index 0b50d63e3aa..37131deb01e 100644
--- a/gnu/usr.bin/perl/vms/ext/Stdio/test.pl
+++ b/gnu/usr.bin/perl/vms/ext/Stdio/test.pl
@@ -1,8 +1,8 @@
-# Tests for VMS::Stdio v2.01
+# Tests for VMS::Stdio v2.1
use VMS::Stdio;
-import VMS::Stdio qw(&flush &getname &rewind &sync);
+import VMS::Stdio qw(&flush &getname &rewind &sync &tmpnam);
-print "1..14\n";
+print "1..18\n";
print +(defined(&getname) ? '' : 'not '), "ok 1\n";
$name = "test$$";
@@ -42,3 +42,29 @@ undef $sfh;
print +(stat("$name.tmp") ? 'not ' : ''),"ok 13\n";
print +(&VMS::Stdio::tmpnam ? '' : 'not '),"ok 14\n";
+
+#if (open(P, qq[| MCR $^X -e "1 while (<STDIN>);print 'Foo';1 while (<STDIN>); print 'Bar'" >$name.tmp])) {
+# print P "Baz\nQuux\n";
+# print +(VMS::Stdio::writeof(P) ? '' : 'not '),"ok 15\n";
+# print P "Baz\nQuux\n";
+# print +(close(P) ? '' : ''),"ok 16\n";
+# $fh = VMS::Stdio::vmsopen("$name.tmp");
+# chomp($line = <$fh>);
+# close $fh;
+# unlink("$name.tmp");
+# print +($line eq 'FooBar' ? '' : 'not '),"ok 17\n";
+#}
+#else {
+print "ok 15\nok 16\nok 17\n";
+#}
+
+$sfh = VMS::Stdio::vmsopen(">$name.tmp");
+$setuperl = "\$ MCR $^X\nBEGIN { \@INC = qw(@INC) };\nuse VMS::Stdio qw(&setdef);";
+print $sfh qq[\$ here = F\$Environment("Default")\n];
+print $sfh "$setuperl\nsetdef();\n\$ Show Default\n\$ Set Default 'here'\n";
+print $sfh "$setuperl\nsetdef('..');\n\$ Show Default\n";
+close $sfh;
+@defs = map { /(\S+)/ && $1 } `\@$name.tmp`;
+unlink("$name.tmp");
+print +($defs[0] eq uc($ENV{'SYS$LOGIN'}) ? '' : "not ($defs[0]) "),"ok 18\n";
+#print +($defs[1] eq VMS::Filespec::rmsexpand('[-]') ? '' : "not ($defs[1]) "),"ok 19\n";
diff --git a/gnu/usr.bin/perl/vms/ext/filespec.t b/gnu/usr.bin/perl/vms/ext/filespec.t
index 6201a42dc69..779396be731 100644
--- a/gnu/usr.bin/perl/vms/ext/filespec.t
+++ b/gnu/usr.bin/perl/vms/ext/filespec.t
@@ -10,7 +10,7 @@ foreach (<DATA>) {
next if /^\s*$/;
push(@tests,$_);
}
-print '1..',scalar(@tests)+3,"\n";
+print '1..',scalar(@tests)+6,"\n";
foreach $test (@tests) {
($arg,$func,$expect) = split(/\t+/,$test);
@@ -25,14 +25,17 @@ foreach $test (@tests) {
}
}
+$defwarn = <<'EOW';
+# Note: This failure may have occurred because your default device
+# was set using a non-concealed logical name. If this is the case,
+# you will need to determine by inspection that the two resultant
+# file specifications shwn above are in fact equivalent.
+EOW
+
if (rmsexpand('[]') eq "\U$ENV{DEFAULT}") { print 'ok ',++$idx,"\n"; }
else {
print 'not ok ', ++$idx, ": rmsexpand('[]') = |", rmsexpand('[]'),
- "|, \$ENV{DEFAULT} = |\U$ENV{DEFAULT}|\n";
- print "# Note: This failure may have occurred because your default device\n";
- print "# was set using a non-concealed logical name. If this is the case,\n";
- print "# you will need to determine by inspection that the two resultant\n";
- print "# file specifications shwn above are in fact equivalent.\n";
+ "|, \$ENV{DEFAULT} = |\U$ENV{DEFAULT}|\n$defwarn";
}
if (rmsexpand('from.here') eq "\L$ENV{DEFAULT}from.here") {
print 'ok ', ++$idx, "\n";
@@ -40,11 +43,15 @@ if (rmsexpand('from.here') eq "\L$ENV{DEFAULT}from.here") {
else {
print 'not ok ', ++$idx, ": rmsexpand('from.here') = |",
rmsexpand('from.here'),
- "|, \$ENV{DEFAULT}from.here = |\L$ENV{DEFAULT}from.here|\n";
- print "# Note: This failure may have occurred because your default device\n";
- print "# was set using a non-concealed logical name. If this is the case,\n";
- print "# you will need to determine by inspection that the two resultant\n";
- print "# file specifications shwn above are in fact equivalent.\n";
+ "|, \$ENV{DEFAULT}from.here = |\L$ENV{DEFAULT}from.here|\n$defwarn";
+}
+if (rmsexpand('from') eq "\L$ENV{DEFAULT}from") {
+ print 'ok ', ++$idx, "\n";
+}
+else {
+ print 'not ok ', ++$idx, ": rmsexpand('from') = |",
+ rmsexpand('from'),
+ "|, \$ENV{DEFAULT}from = |\L$ENV{DEFAULT}from|\n$defwarn";
}
if (rmsexpand('from.here','cant:[get.there];2') eq
'cant:[get.there]from.here;2') { print 'ok ',++$idx,"\n"; }
@@ -53,6 +60,11 @@ else {
rmsexpand('from.here','cant:[get.there];2'),"|\n";
}
+# Make sure we're using redirected mkdir, which strips trailing '/', since
+# the CRTL's mkdir can't handle this.
+print +(mkdir('testdir/',0777) ? 'ok ' : 'not ok '),++$idx,"\n";
+print +(rmdir('testdir/') ? 'ok ' : 'not ok '),++$idx,"\n";
+
__DATA__
# Basic VMS to Unix filespecs
@@ -84,6 +96,7 @@ some/where/... vmsify [.some.where...]
.. vmsify [-]
../.. vmsify [--]
.../ vmsify [...]
+/ vmsify sys$disk:[000000]
# Fileifying directory specs
down:[the.garden.path] fileify down:[the.garden]path.dir;1
@@ -123,6 +136,7 @@ down:[the.garden.path...] unixpath /down/the/garden/path/.../
[.down.the.garden]path.dir unixpath down/the/garden/path/
down/the/garden/path vmspath [.down.the.garden.path]
path vmspath [.path]
+/ vmspath sys$disk:[000000]
# Redundant characters in Unix paths
//some/where//over/../the.rainbow vmsify some:[where]the.rainbow
diff --git a/gnu/usr.bin/perl/vms/gen_shrfls.pl b/gnu/usr.bin/perl/vms/gen_shrfls.pl
index e451e1826b6..43029692b2b 100644
--- a/gnu/usr.bin/perl/vms/gen_shrfls.pl
+++ b/gnu/usr.bin/perl/vms/gen_shrfls.pl
@@ -39,7 +39,7 @@ require 5.000;
$debug = $ENV{'GEN_SHRFLS_DEBUG'};
-print "gen_shrfls.pl Rev. 14-Dec-1996\n" if $debug;
+print "gen_shrfls.pl Rev. 14-Dec-1997\n" if $debug;
if ($ARGV[0] eq '-f') {
open(INP,$ARGV[1]) or die "Can't read input file $ARGV[1]: $!\n";
@@ -64,10 +64,24 @@ $docc = ($cc_cmd !~ /^~~/);
print "\$docc = $docc\n" if $debug;
if ($docc) {
+ if (-f 'perl.h') { $dir = '[]'; }
+ elsif (-f '[-]perl.h') { $dir = '[-]'; }
+ else { die "$0: Can't find perl.h\n"; }
+
+ # Go see if debugging is enabled in config.h
+ $config = $dir . "config.h";
+ open CONFIG, "< $config";
+ while(<CONFIG>) {
+ $debugging_enabled++ if /define\s+DEBUGGING/;
+ $hide_mymalloc++ if /define\s+EMBEDMYMALLOC/;
+ $use_mymalloc++ if /define\s+MYMALLOC/;
+ }
+
# put quotes back onto defines - they were removed by DCL on the way in
if (($prefix,$defines,$suffix) =
($cc_cmd =~ m#(.*)/Define=(.*?)([/\s].*)#i)) {
$defines =~ s/^\((.*)\)$/$1/;
+ $debugging_enabled ||= $defines =~ /\bDEBUGGING\b/;
@defines = split(/,/,$defines);
$cc_cmd = "$prefix/Define=(" . join(',',grep($_ = "\"$_\"",@defines))
. ')' . $suffix;
@@ -85,10 +99,8 @@ if ($docc) {
or 0; # again, make debug output nice
print "\$isgcc: $isgcc\n" if $debug;
print "\$isvaxc: $isvaxc\n" if $debug;
+ print "\$debugging_enabled: $debugging_enabled\n" if $debug;
- if (-f 'perl.h') { $dir = '[]'; }
- elsif (-f '[-]perl.h') { $dir = '[-]'; }
- else { die "$0: Can't find perl.h\n"; }
}
else {
($junk,$junk,$cpp_file,$cc_cmd) = split(/~~/,$cc_cmd,4);
@@ -96,8 +108,10 @@ else {
or 0; # for nice debug output
$isvaxc = (!$isgcc && $cc_cmd !~ /standard=/i)
or 0; # again, for nice debug output
+ $debugging_enabled = $cc_cmd =~ /\bdebugging\b/i;
print "\$isgcc: \\$isgcc\\\n" if $debug;
print "\$isvaxc: \\$isvaxc\\\n" if $debug;
+ print "\$debugging_enabled: \\$debugging_enabled\\\n" if $debug;
print "Not running cc, preprocesor output in \\$cpp_file\\\n" if $debug;
}
@@ -150,6 +164,7 @@ sub scan_var {
$line =~ s/\[.*//;
$line =~ s/=.*//;
$line =~ s/\W*;?\s*$//;
+ $line =~ s/\W*\)\s*\(.*$//; # closing paren for args stripped in previous stmt
print "\tfiltered to \\$line\\\n" if $debug > 1;
if ($line =~ /(\w+)$/) {
print "\tvar name is \\$1\\" . ($const ? ' (const)' : '') . "\n" if $debug > 1;
@@ -183,6 +198,14 @@ sub scan_func {
}
}
+# Go add some right up front if we need 'em
+if ($use_mymalloc) {
+ $fcns{'Perl_malloc'}++;
+ $fcns{'Perl_calloc'}++;
+ $fcns{'Perl_realloc'}++;
+ $fcns{'Perl_myfree'}++;
+}
+
$used_expectation_enum = $used_opcode_enum = 0; # avoid warnings
if ($docc) {
open(CPP,"${cc_cmd}/NoObj/PreProc=Sys\$Output ${dir}perl.h|")
@@ -191,38 +214,51 @@ if ($docc) {
else {
open(CPP,"$cpp_file") or die "$0: Can't read preprocessed file $cpp_file: $!\n";
}
+%checkh = map { $_,1 } qw( thread bytecode byterun proto );
+$ckfunc = 0;
LINE: while (<CPP>) {
while (/^#.*vmsish\.h/i .. /^#.*perl\.h/i) {
while (/__VMS_PROTOTYPES__/i .. /__VMS_SEPYTOTORP__/i) {
print "vms_proto>> $_" if $debug > 2;
if (/^\s*EXT/) { &scan_var($_); }
else { &scan_func($_); }
- last LINE unless $_ = <CPP>;
+ last LINE unless defined($_ = <CPP>);
}
print "vmsish.h>> $_" if $debug > 2;
if (/^\s*EXT/) { &scan_var($_); }
- last LINE unless $_ = <CPP>;
+ last LINE unless defined($_ = <CPP>);
}
while (/^#.*opcode\.h/i .. /^#.*perl\.h/i) {
print "opcode.h>> $_" if $debug > 2;
if (/^OP \*\s/) { &scan_func($_); }
if (/^\s*EXT/) { &scan_var($_); }
if (/^\s+OP_/) { &scan_enum($_); }
- last LINE unless $_ = <CPP>;
+ last LINE unless defined($_ = <CPP>);
}
- while (/^typedef enum/ .. /^\}/) {
+ while (/^typedef enum/ .. /^\s*\}/) {
print "global enum>> $_" if $debug > 2;
&scan_enum($_);
- last LINE unless $_ = <CPP>;
+ last LINE unless defined($_ = <CPP>);
+ }
+ # Check for transition to new header file
+ if (/^# \d+ "(\S+)"/) {
+ my $spec = $1;
+ # Pull name from library module or header filespec
+ $spec =~ /^(\w+)$/ or $spec =~ /(\w+)\.h/i;
+ my $name = lc $1;
+ $ckfunc = exists $checkh{$name} ? 1 : 0;
+ $scanname = $name if $ckfunc;
+ print "Header file transition: ckfunc = $ckfunc for $name.h\n" if $debug > 1;
}
- while (/^#.*proto\.h/i .. /^#.*perl\.h/i) {
- print "proto.h>> $_" if $debug > 2;
+ if ($ckfunc) {
+ print "$scanname>> $_" if $debug > 2;
if (/\s*^EXT/) { &scan_var($_); }
- else { &scan_func($_); }
- last LINE unless $_ = <CPP>;
+ else { &scan_func($_); }
+ }
+ else {
+ print $_ if $debug > 3 && ($debug > 5 || length($_));
+ if (/^\s*EXT/) { &scan_var($_); }
}
- print $_ if $debug > 3 && ($debug > 5 || length($_));
- if (/^\s*EXT/) { &scan_var($_); }
}
close CPP;
@@ -241,6 +277,7 @@ while (<DATA>) {
print "Adding $key to \%$array list\n" if $debug > 1;
${$array}{$key}++;
}
+if ($debugging_enabled and $isgcc) { $vars{'colors'}++ }
foreach (split /\s+/, $extnames) {
my($pkgname) = $_;
$pkgname =~ s/::/__/g;
@@ -371,9 +408,8 @@ if ($ENV{PERLSHR_USE_GSMATCH}) {
my $major = int($] * 1000) & 0xFF; # range 0..255
my $minor = int(($] * 1000 - $major) * 100 + 0.5) & 0xFF; # range 0..255
print OPTBLD "GSMATCH=LEQUAL,$major,$minor\n";
- foreach (@symfiles) {
- print OPTBLD "CLUSTER=\$\$TRANSFER_VECTOR,,,$_.$objsuffix\n";
- }
+ print OPTBLD 'CLUSTER=$$TRANSFER_VECTOR,,',
+ map(",$_$objsuffix",@symfiles), "\n";
}
elsif (@symfiles) { $incstr .= ',' . join(',',@symfiles); }
# Include object modules and RTLs in options file
@@ -391,9 +427,6 @@ exec "\$ \@$drvrname" if $isvax;
__END__
# Oddball cases, so we can keep the perl.h scan above simple
-rcsid=vars # declared in perl.c
-regarglen=vars # declared in regcomp.h
-regdummy=vars # declared in regcomp.h
regkind=vars # declared in regcomp.h
simple=vars # declared in regcomp.h
varies=vars # declared in regcomp.h
diff --git a/gnu/usr.bin/perl/vms/genconfig.pl b/gnu/usr.bin/perl/vms/genconfig.pl
index d2e514b1c9e..45f50cad5fe 100644
--- a/gnu/usr.bin/perl/vms/genconfig.pl
+++ b/gnu/usr.bin/perl/vms/genconfig.pl
@@ -6,7 +6,7 @@
# that went into your perl binary. In addition, values which change from run
# to run may be supplied on the command line as key=val pairs.
#
-# Rev. 3-Dec-1996 Charles Bailey bailey@genetics.upenn.edu
+# Rev. 16-Feb-1998 Charles Bailey bailey@newman.upenn.edu
#
#==== Locations of installed Perl components
@@ -26,6 +26,7 @@ if ($ARGV[0] eq '-f') {
open(ARGS,$ARGV[1]) or die "Can't read data from $ARGV[1]: $!\n";
@ARGV = ();
while (<ARGS>) {
+ chomp;
push(@ARGV,split(/\|/,$_));
}
close ARGS;
@@ -67,21 +68,20 @@ package='perl5'
CONFIG='true'
cf_time='$time'
cf_by='$cf_by'
-ccdlflags=''
-cccdlflags=''
-mab=''
+ccdlflags='undef'
+cccdlflags='undef'
+mab='undef'
libpth='/sys\$share /sys\$library'
ld='Link'
lddlflags='/Share'
-ranlib=''
-ar=''
+ranlib='undef'
+ar='undef'
eunicefix=':'
hint='none'
-hintfile=''
-shrplib='define'
+hintfile='undef'
+useshrplib='define'
usemymalloc='n'
usevfork='true'
-useposix='false'
spitshell='write sys\$output '
dlsrc='dl_vms.c'
binexp='$installbin'
@@ -89,6 +89,8 @@ man1ext='rno'
man3ext='rno'
arch='VMS_$archsufx'
archname='VMS_$archsufx'
+bincompat3='undef'
+d_bincompat3='undef'
osvers='$osvers'
prefix='$prefix'
builddir='$builddir'
@@ -146,24 +148,91 @@ foreach (@ARGV) {
# object file suffix if it's not .obj.
$ccflags =~ s#/obj(?:ect)?=[^/\s]+##i;
}
+ $debug = $optimize = '';
+ while ( ($qual) = $ccflags =~ m|(/(No)?Deb[^/]*)|i ) {
+ $debug = $qual;
+ $ccflags =~ s/$qual//;
+ }
+ while ( ($qual) = $ccflags =~ m|(/(No)?Opt[^/]*)|i ) {
+ $optimize = $qual;
+ $ccflags =~ s/$qual//;
+ }
+ $usethreads = ($ccflags =~ m!/DEF[^/]+USE_THREADS!i and
+ $ccflags !~ m!/UND[^/]+USE_THREADS!i);
+ print OUT "usethreads='",($usethreads ? 'define' : 'undef'),"'\n";;
+ $optimize = "$debug$optimize";
print OUT "ccflags='$ccflags'\n";
+ print OUT "optimize='$optimize'\n";
$dosock = ($ccflags =~ m!/DEF[^/]+VMS_DO_SOCKETS!i and
$ccflags !~ m!/UND[^/]+VMS_DO_SOCKETS!i);
print OUT "d_vms_do_sockets=",$dosock ? "'define'\n" : "'undef'\n";
print OUT "d_socket=",$dosock ? "'define'\n" : "'undef'\n";
print OUT "d_sockpair=",$dosock ? "'define'\n" : "'undef'\n";
print OUT "d_gethent=",$dosock ? "'define'\n" : "'undef'\n";
+ print OUT "d_sethent=",$dosock ? "'define'\n" : "'undef'\n";
print OUT "d_select=",$dosock ? "'define'\n" : "'undef'\n";
+ print OUT "i_netdb=",$dosock ? "'define'\n" : "'undef'\n";
print OUT "i_niin=",$dosock ? "'define'\n" : "'undef'\n";
print OUT "i_neterrno=",$dosock ? "'define'\n" : "'undef'\n";
+ print OUT "d_gethbyname=",$dosock ? "'define'\n" : "'undef'\n";
+ print OUT "d_gethbyaddr=",$dosock ? "'define'\n" : "'undef'\n";
+ print OUT "d_getpbyname=",$dosock ? "'define'\n" : "'undef'\n";
+ print OUT "d_getpbynumber=",$dosock ? "'define'\n" : "'undef'\n";
+ print OUT "d_getsbyname=",$dosock ? "'define'\n" : "'undef'\n";
+ print OUT "d_getsbyport=",$dosock ? "'define'\n" : "'undef'\n";
+ print OUT "d_endhent=",$dosock ? "'define'\n" : "'undef'\n";
+ print OUT "d_getpent=",$dosock ? "'define'\n" : "'undef'\n";
+ print OUT "d_setpent=",$dosock ? "'define'\n" : "'undef'\n";
+ print OUT "d_endpent=",$dosock ? "'define'\n" : "'undef'\n";
+ print OUT "d_getsent=",$dosock ? "'define'\n" : "'undef'\n";
+ print OUT "d_setsent=",$dosock ? "'define'\n" : "'undef'\n";
+ print OUT "d_endsent=",$dosock ? "'define'\n" : "'undef'\n";
+ print OUT "netdb_name_type=",$dosock ? "'char *'\n" : "'undef'\n";
+ print OUT "netdb_host_type=",$dosock ? "'char *'\n" : "'undef'\n";
+ print OUT "netdb_hlen_type=",$dosock ? "'int'\n" : "'undef'\n";
+ print OUT "d_gethostprotos=",$dosock ? "'define'\n" : "'undef'\n";
+ print OUT "d_getnetprotos=",$dosock ? "'define'\n" : "'undef'\n";
+ print OUT "d_getservprotos=",$dosock ? "'define'\n" : "'undef'\n";
+ print OUT "d_getprotoprotos=",$dosock ? "'define'\n" : "'undef'\n";
+
+ if ($dosock and $cctype eq 'decc' and $ccflags =~ /DECCRTL_SOCKETS/) {
+ print OUT "selecttype='fd_set'\n";
+ print OUT "d_getnbyaddr='define'\n";
+ print OUT "d_getnbyname='define'\n";
+ print OUT "d_getnent='define'\n";
+ print OUT "d_setnent='define'\n";
+ print OUT "d_endnent='define'\n";
+ print OUT "netdb_net_type='long'\n";
+ }
+ else {
+ print OUT "selecttype='int'\n";
+ print OUT "d_getnybname='undef'\n";
+ print OUT "d_getnybaddr='undef'\n";
+ print OUT "d_getnent='undef'\n";
+ print OUT "d_setnent='undef'\n";
+ print OUT "d_endnent='undef'\n";
+ print OUT "netdb_net_type='undef'\n";
+ }
- if ($cctype eq 'decc') { $rtlhas = 'define'; }
- else { $rtlhas = 'undef'; }
+ if ($cctype eq 'decc') {
+ $rtlhas = 'define';
+ print OUT "useposix='true'\n";
+ ($ccver,$vmsver) = `$cc/VERSION` =~ /V(\S+) on .*V(\S+)$/;
+ # Best guess; the may be wrong on systems which have separately
+ # installed the new CRTL.
+ if ($ccver >= 5.2 and $vmsver >= 7) { $rtlnew = 'define'; }
+ else { $rtlnew = 'undef'; }
+ }
+ else { $rtlhas = $rtlnew = 'undef'; print OUT "useposix='false'\n"; }
foreach (qw[ d_stdstdio d_stdio_ptr_lval d_stdio_cnt_lval d_stdiobase
d_locconv d_setlocale i_locale d_mbstowcs d_mbtowc
d_wcstombs d_wctomb d_mblen d_mktime d_strcoll d_strxfrm ]) {
print OUT "$_='$rtlhas'\n";
}
+ foreach (qw[ d_gettimeod d_uname d_truncate d_wait4 d_index
+ d_pathconf d_fpathconf d_sysconf d_sigsetjmp ]) {
+ print OUT "$_='$rtlnew'\n";
+ }
next;
}
elsif ($key eq 'exe_ext') {
@@ -296,6 +365,9 @@ close IN;
# as the manifest for the obsolete variable $d_eunice.
print OUT "d_eunice='undef'\n"; delete $pp_vars{VMS};
+# XXX temporary -- USE_THREADS is currently on CC command line
+delete $pp_vars{'USE_THREADS'};
+
foreach (sort keys %pp_vars) {
warn "Didn't see $_ in $infile\n";
}
diff --git a/gnu/usr.bin/perl/vms/perlvms.pod b/gnu/usr.bin/perl/vms/perlvms.pod
index c599e5834cd..89c4bbf6231 100644
--- a/gnu/usr.bin/perl/vms/perlvms.pod
+++ b/gnu/usr.bin/perl/vms/perlvms.pod
@@ -329,7 +329,12 @@ undefined behavior (rarely, we hope):
getgrnam, setgrent, endgrent, ioctl, link, lstat,
msgctl, msgget, msgsend, msgrcv, readlink, semctl,
semget, semop, setpgrp, setpriority, shmctl, shmget,
- shmread, shmwrite, socketpair, symlink, syscall, truncate
+ shmread, shmwrite, socketpair, symlink, syscall
+
+The following functions are available on Perls compiled with Dec C 5.2 or
+greater and running VMS 7.0 or greater
+
+ truncate
The following functions may or may not be implemented,
depending on what type of socket support you've built into
@@ -658,12 +663,20 @@ list logical names. For instance, if you say
Perl will print C<ONCE UPON A TIME THERE WAS>.
-The %ENV keys C<home>, C<path>,C<term>, and C<user>
-return the CRTL "environment variables" of the same
-names, if these logical names are not defined. The
-key C<default> returns the current default device
+The key C<default> returns the current default device
and directory specification, regardless of whether
-there is a logical name DEFAULT defined..
+there is a logical name DEFAULT defined. If you try to
+read an element of %ENV for which there is no corresponding
+logical name, and for which no corresponding CLI symbol
+exists (this is to identify "blocking" symbols only; to
+manipulate CLI symbols, see L<VMS::DCLSym>) then the key
+will be looked up in the CRTL-local environment array, and
+the corresponding value, if any returned. This lets you
+get at C-specific keys like C<home>, C<path>,C<term>, and
+C<user>, as well as other keys which may have been passed
+directly into the C-specific array if Perl was called from
+another C program using the version of execve() or execle()
+present in recent revisions of the DECCRTL.
Setting an element of %ENV defines a supervisor-mode logical
name in the process logical name table. C<Undef>ing or
@@ -675,6 +688,23 @@ logical name translation after the deletion, so an inner-mode
logical name or a name in another logical name table will
replace the logical name just deleted. It is not possible
at present to define a search list logical name via %ENV.
+It is also not possible to delete an element from the
+C-local environ array.
+
+Note that if you want to pass on any elements of the
+C-local environ array to a subprocess which isn't
+started by fork/exec, or isn't running a C program, you
+can "promote" them to logical names in the current
+process, which will then be inherited by all subprocesses,
+by saying
+
+ foreach my $key (qw[C-local keys you want promoted]) {
+ my $temp = $ENV{$key}; # read from C-local array
+ $ENV{$key} = $temp; # and define as logical name
+ }
+
+(You can't just say C<$ENV{$key} = $ENV{$key}>, since the
+Perl optimizer is smart enough to elide the expression.)
At present, the first time you iterate over %ENV using
C<keys>, or C<values>, you will incur a time penalty as all
@@ -749,12 +779,23 @@ it's equivalent to calling fflush() and fsync() from C.
=back
+=head1 Standard modules with VMS-specific differences
+
+=head2 SDBM_File
+
+SDBM_File works peroperly on VMS. It has, however, one minor
+difference. The database directory file created has a L<.sdbm_dir>
+extension rather than a L<.dir> extension. L<.dir> files are VMS filesystem
+directory files, and using them for other purposes could cause unacceptable
+problems.
+
=head1 Revision date
-This document was last updated on 28-Feb-1996, for Perl 5,
-patchlevel 2.
+This document was last updated on 26-Feb-1998, for Perl 5,
+patchlevel 5.
=head1 AUTHOR
-Charles Bailey bailey@genetics.upenn.edu
+Charles Bailey bailey@cor.newman.upenn.edu
+Last revision by Dan Sugalski sugalskd@ous.edu
diff --git a/gnu/usr.bin/perl/vms/perly_c.vms b/gnu/usr.bin/perl/vms/perly_c.vms
index ded0cf419c8..f263439e851 100644
--- a/gnu/usr.bin/perl/vms/perly_c.vms
+++ b/gnu/usr.bin/perl/vms/perly_c.vms
@@ -7,1061 +7,1058 @@ static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91";
#include "EXTERN.h"
#include "perl.h"
+#ifdef PERL_OBJECT
static void
-dep()
+Dep(CPerlObj *pPerl)
+{
+ pPerl->deprecate("\"do\" to call subroutines");
+}
+#define dep() Dep(this)
+#else
+static void
+dep(void)
{
deprecate("\"do\" to call subroutines");
}
+#endif
#line 16 "perly.c"
#define YYERRCODE 256
dEXT short yylhs[] = { -1,
45, 0, 9, 7, 10, 8, 11, 11, 11, 12,
- 12, 12, 12, 24, 24, 24, 24, 24, 24, 15,
- 15, 15, 14, 14, 42, 42, 13, 13, 13, 13,
- 13, 13, 13, 26, 26, 27, 27, 28, 29, 30,
- 31, 32, 44, 44, 1, 1, 1, 1, 3, 38,
- 38, 46, 4, 5, 6, 39, 40, 40, 41, 41,
- 47, 47, 49, 48, 16, 16, 16, 25, 25, 25,
- 36, 36, 36, 36, 36, 36, 36, 50, 36, 37,
- 37, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 12, 12, 12, 24, 24, 24, 24, 24, 24, 24,
+ 15, 15, 15, 14, 14, 42, 42, 13, 13, 13,
+ 13, 13, 13, 13, 26, 26, 27, 27, 28, 29,
+ 30, 31, 32, 44, 44, 1, 1, 1, 1, 3,
+ 38, 38, 46, 4, 5, 6, 39, 40, 40, 41,
+ 41, 47, 47, 49, 48, 16, 16, 16, 25, 25,
+ 25, 36, 36, 36, 36, 36, 36, 36, 50, 36,
+ 37, 37, 17, 17, 17, 17, 17, 17, 17, 17,
17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 33, 33, 34,
- 34, 34, 2, 2, 43, 23, 18, 19, 20, 21,
- 22, 35, 35, 35, 35,
+ 17, 17, 17, 17, 17, 17, 17, 17, 33, 33,
+ 34, 34, 34, 2, 2, 43, 23, 18, 19, 20,
+ 21, 22, 35, 35, 35, 35,
};
dEXT short yylen[] = { 2,
0, 2, 4, 0, 4, 0, 0, 2, 2, 2,
- 1, 2, 3, 1, 1, 3, 3, 3, 3, 0,
- 2, 6, 7, 7, 0, 2, 8, 8, 10, 9,
- 8, 11, 3, 0, 1, 0, 1, 1, 1, 1,
- 1, 1, 0, 1, 1, 1, 1, 1, 4, 1,
- 0, 5, 0, 0, 0, 1, 0, 1, 1, 1,
- 3, 2, 0, 7, 3, 3, 1, 2, 3, 1,
- 3, 5, 6, 3, 5, 2, 4, 0, 5, 1,
- 1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 5, 3, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 3, 2, 3, 2, 4,
- 3, 4, 1, 5, 1, 4, 5, 4, 1, 1,
- 1, 5, 6, 5, 6, 5, 4, 5, 1, 1,
- 3, 4, 3, 2, 2, 4, 5, 4, 5, 4,
- 5, 1, 2, 2, 1, 2, 2, 2, 1, 3,
- 1, 3, 4, 4, 6, 1, 1, 0, 1, 0,
- 1, 2, 1, 1, 1, 2, 2, 2, 2, 2,
- 2, 1, 1, 1, 1,
+ 1, 2, 3, 1, 1, 3, 3, 3, 3, 3,
+ 0, 2, 6, 7, 7, 0, 2, 8, 8, 10,
+ 9, 8, 11, 3, 0, 1, 0, 1, 1, 1,
+ 1, 1, 1, 0, 1, 1, 1, 1, 1, 4,
+ 1, 0, 5, 0, 0, 0, 1, 0, 1, 1,
+ 1, 3, 2, 0, 7, 3, 3, 1, 2, 3,
+ 1, 3, 5, 6, 3, 5, 2, 4, 0, 5,
+ 1, 1, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 5, 3, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 3, 2, 3, 2,
+ 4, 3, 4, 1, 5, 1, 4, 5, 4, 1,
+ 1, 1, 5, 6, 5, 6, 5, 4, 5, 1,
+ 1, 3, 4, 3, 2, 2, 4, 5, 4, 5,
+ 4, 5, 1, 2, 2, 1, 2, 2, 2, 1,
+ 3, 1, 3, 4, 4, 6, 1, 1, 0, 1,
+ 0, 1, 2, 1, 1, 1, 2, 2, 2, 2,
+ 2, 2, 1, 1, 1, 1,
};
dEXT short yydefred[] = { 1,
- 0, 7, 0, 44, 55, 53, 0, 53, 8, 45,
- 9, 11, 0, 46, 47, 48, 0, 0, 0, 62,
- 63, 14, 4, 156, 0, 0, 129, 0, 151, 0,
- 54, 54, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 163, 164, 0,
+ 0, 7, 0, 45, 56, 54, 0, 54, 8, 46,
+ 9, 11, 0, 47, 48, 49, 0, 0, 0, 63,
+ 64, 14, 4, 157, 0, 0, 130, 0, 152, 0,
+ 55, 55, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 164, 165, 0,
0, 0, 0, 0, 0, 0, 0, 12, 0, 0,
0, 0, 0, 0, 0, 0, 0, 10, 0, 0,
- 0, 0, 119, 121, 0, 0, 0, 0, 157, 50,
- 0, 56, 0, 61, 0, 7, 172, 175, 174, 173,
+ 0, 0, 120, 122, 0, 0, 0, 0, 158, 51,
+ 0, 57, 0, 62, 0, 7, 173, 176, 175, 174,
0, 0, 0, 0, 0, 0, 4, 4, 4, 4,
- 4, 4, 0, 0, 0, 0, 0, 146, 0, 0,
- 0, 0, 76, 0, 170, 0, 135, 0, 0, 0,
- 0, 0, 166, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 109, 0, 167, 168, 169, 171, 0,
- 0, 33, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4, 4, 0, 0, 0, 0, 0, 147, 0, 0,
+ 0, 0, 77, 0, 171, 0, 136, 0, 0, 0,
+ 0, 0, 167, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 110, 0, 168, 169, 170, 172, 0,
+ 0, 34, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 101, 102, 0, 0, 0, 0, 0,
- 0, 0, 0, 13, 0, 49, 58, 0, 0, 0,
- 74, 0, 0, 78, 0, 0, 0, 0, 0, 0,
- 0, 4, 150, 152, 0, 0, 0, 0, 0, 0,
- 0, 111, 0, 133, 0, 0, 108, 26, 0, 0,
- 19, 0, 0, 0, 65, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 102, 103, 0, 0, 0, 0,
+ 0, 0, 0, 0, 13, 0, 50, 59, 0, 0,
+ 0, 75, 0, 0, 79, 0, 0, 0, 0, 0,
+ 0, 0, 4, 151, 153, 0, 0, 0, 0, 0,
+ 0, 0, 112, 0, 134, 0, 0, 109, 27, 0,
+ 0, 19, 0, 0, 0, 0, 66, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 80, 0, 0, 81, 0, 0, 0, 0, 0,
- 0, 0, 131, 0, 0, 60, 59, 52, 0, 3,
- 0, 154, 0, 0, 112, 0, 41, 0, 42, 0,
- 0, 0, 0, 165, 0, 0, 35, 40, 0, 0,
- 0, 153, 162, 77, 0, 136, 0, 138, 0, 110,
- 0, 0, 0, 0, 0, 140, 0, 0, 0, 118,
- 0, 116, 0, 127, 0, 132, 0, 75, 0, 79,
- 0, 0, 0, 0, 0, 0, 0, 0, 72, 137,
- 139, 126, 0, 124, 0, 0, 141, 117, 0, 122,
- 128, 114, 64, 155, 6, 0, 0, 0, 0, 0,
- 0, 0, 0, 125, 123, 73, 7, 27, 28, 0,
- 0, 23, 24, 0, 31, 0, 0, 0, 21, 0,
- 0, 0, 30, 5, 0, 29, 0, 0, 32, 0,
- 22,
+ 0, 0, 0, 81, 0, 0, 82, 0, 0, 0,
+ 0, 0, 0, 0, 132, 0, 0, 61, 60, 53,
+ 0, 3, 0, 155, 0, 0, 113, 0, 42, 0,
+ 43, 0, 0, 0, 0, 166, 0, 0, 36, 41,
+ 0, 0, 0, 154, 163, 78, 0, 137, 0, 139,
+ 0, 111, 0, 0, 0, 0, 0, 141, 0, 0,
+ 0, 119, 0, 117, 0, 128, 0, 133, 0, 76,
+ 0, 80, 0, 0, 0, 0, 0, 0, 0, 0,
+ 73, 138, 140, 127, 0, 125, 0, 0, 142, 118,
+ 0, 123, 129, 115, 65, 156, 6, 0, 0, 0,
+ 0, 0, 0, 0, 0, 126, 124, 74, 7, 28,
+ 29, 0, 0, 24, 25, 0, 32, 0, 0, 0,
+ 22, 0, 0, 0, 31, 5, 0, 30, 0, 0,
+ 33, 0, 23,
};
dEXT short yydgoto[] = { 1,
- 9, 66, 10, 18, 95, 17, 86, 337, 89, 326,
- 3, 11, 12, 68, 342, 261, 70, 71, 72, 73,
- 74, 75, 76, 267, 78, 268, 257, 259, 262, 270,
- 258, 260, 113, 197, 91, 79, 236, 81, 83, 178,
- 248, 142, 265, 13, 2, 14, 15, 16, 85, 254,
+ 9, 66, 10, 18, 95, 17, 86, 339, 89, 328,
+ 3, 11, 12, 68, 344, 263, 70, 71, 72, 73,
+ 74, 75, 76, 269, 78, 270, 259, 261, 264, 272,
+ 260, 262, 113, 198, 91, 79, 238, 81, 83, 179,
+ 250, 142, 267, 13, 2, 14, 15, 16, 85, 256,
};
dEXT short yysindex[] = { 0,
- 0, 0, -120, 0, 0, 0, -50, 0, 0, 0,
- 0, 0, 661, 0, 0, 0, -240, -238, -29, 0,
- 0, 0, 0, 0, -32, -32, 0, -8, 0, 2115,
- 0, 0, -4, 31, 32, 35, -35, 2115, 56, 57,
- 61, 1037, 981, -32, 1100, 1364, -218, 0, 0, -32,
- 2115, 2115, 2115, 2115, 2115, 2115, 1420, 0, 2115, 2115,
- 1476, -32, -32, -32, -32, 2115, -205, 0, 201, 306,
- -63, -62, 0, 0, -24, 67, 45, 65, 0, 0,
- -15, 0, -149, 0, -144, 0, 0, 0, 0, 0,
- 2115, 80, 2115, 841, -15, -149, 0, 0, 0, 0,
- 0, 0, 85, 306, 86, 1535, 981, 0, 841, 0,
- -63, 65, 0, 2115, 0, 88, 0, 841, -28, 4,
- -51, 2115, 0, 65, 340, 340, 340, -76, -76, 49,
- -31, 340, 340, 0, -82, 0, 0, 0, 0, 841,
- -15, 0, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115,
- 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115,
- 2115, 2115, 2115, 0, 0, 48, 2115, 2115, 2115, 2115,
- 2115, 2115, 1710, 0, 2115, 0, 0, -43, -116, 241,
- 0, 2115, 1193, 0, -15, 2115, 2115, 2115, 2115, 106,
- 1769, 0, 0, 0, -23, 20, 104, 2115, 65, 1825,
- 1881, 0, 36, 0, 2115, 62, 0, 0, -232, -232,
- 0, -232, -232, -134, 0, -46, 1131, 841, 689, 316,
- 859, 306, 3778, 1980, 3652, 1299, 480, 396, 340, 340,
- 2115, 0, 1944, 2115, 0, 128, -58, 22, -56, 24,
- 33, 28, 0, -19, 306, 0, 0, 0, 2115, 0,
- 134, 0, 2115, 2115, 0, -232, 0, 142, 0, 148,
- -232, 149, 150, 0, 153, 201, 0, 0, 154, 138,
- 2115, 0, 0, 0, -7, 0, 2, 0, 16, 0,
- 70, 2115, 73, 2115, 30, 0, 18, 101, 2115, 0,
- 75, 0, 78, 0, 81, 0, 151, 0, 1247, 0,
- 90, 90, 90, 90, 2115, 90, 2115, 167, 0, 0,
- 0, 0, 103, 0, 3869, 84, 0, 0, 170, 0,
- 0, 0, 0, 0, 0, -205, -205, -207, -207, 176,
- -205, 168, 90, 0, 0, 0, 0, 0, 0, 90,
- 192, 0, 0, 90, 0, 1769, -205, 402, 0, 2115,
- -205, 207, 0, 0, 208, 0, 90, 90, 0, -207,
- 0,
+ 0, 0, -66, 0, 0, 0, -48, 0, 0, 0,
+ 0, 0, 645, 0, 0, 0, -232, -227, -27, 0,
+ 0, 0, 0, 0, -23, -23, 0, -6, 0, 2099,
+ 0, 0, 13, 20, 24, 25, -34, 2099, 27, 28,
+ 29, 1021, 965, -23, 1084, 1348, -217, 0, 0, -23,
+ 2099, 2099, 2099, 2099, 2099, 2099, 1404, 0, 2099, 2099,
+ 1460, -23, -23, -23, -23, 2099, -206, 0, 335, 3814,
+ -73, -68, 0, 0, -47, 40, 32, 61, 0, 0,
+ -39, 0, -157, 0, -145, 0, 0, 0, 0, 0,
+ 2099, 73, 2099, 825, -39, -157, 0, 0, 0, 0,
+ 0, 0, 75, 3814, 78, 1519, 965, 0, 825, 0,
+ -73, 61, 0, 2099, 0, 77, 0, 825, -16, -9,
+ -51, 2099, 0, 61, 87, 87, 87, -86, -86, 33,
+ -40, 87, 87, 0, -81, 0, 0, 0, 0, 825,
+ -39, 0, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099,
+ 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099,
+ 2099, 2099, 2099, 2099, 0, 0, 30, 2099, 2099, 2099,
+ 2099, 2099, 2099, 1694, 0, 2099, 0, 0, -49, -118,
+ 189, 0, 2099, 353, 0, -39, 2099, 2099, 2099, 2099,
+ 104, 1753, 0, 0, 0, -24, 8, 85, 2099, 61,
+ 1809, 1865, 0, 23, 0, 2099, 54, 0, 0, -269,
+ -269, 0, -269, -269, -269, -151, 0, -43, 1121, 825,
+ 673, 50, 363, 3814, 1233, 2459, 3640, 2309, 266, -82,
+ 87, 87, 2099, 0, 1928, 2099, 0, 111, 51, 12,
+ 76, 14, 90, 39, 0, -22, 3814, 0, 0, 0,
+ 2099, 0, 121, 0, 2099, 2099, 0, -269, 0, 124,
+ 0, 125, -269, 126, 130, 0, 112, 335, 0, 0,
+ 131, 136, 2099, 0, 0, 0, -14, 0, 1, 0,
+ 4, 0, 133, 2099, 55, 2099, 49, 0, 6, 197,
+ 2099, 0, 89, 0, 94, 0, 100, 0, 144, 0,
+ 1175, 0, 92, 92, 92, 92, 2099, 92, 2099, 171,
+ 0, 0, 0, 0, 202, 0, 3900, 108, 0, 0,
+ 188, 0, 0, 0, 0, 0, 0, -206, -206, -238,
+ -238, 199, -206, 211, 92, 0, 0, 0, 0, 0,
+ 0, 92, 241, 0, 0, 92, 0, 1753, -206, 326,
+ 0, 2099, -206, 256, 0, 0, 259, 0, 92, 92,
+ 0, -238, 0,
};
dEXT short yyrindex[] = { 0,
- 0, 0, 265, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 131, 0, 0, 0,
+ 0, 0, 249, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 184, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 2156, -17, 0,
- 0, 2675, 2720, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2228, 426, 0,
+ 0, 2833, 2876, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 79, 0, -3, 108,
- 2774, 2860, 0, 0, 2034, 121, 0, 140, 0, 0,
- 0, 0, -33, 0, 0, 0, 0, 0, 0, 0,
- 2203, 0, 0, 3504, 0, 145, 0, 0, 0, 0,
- 0, 0, 0, 3772, 0, 0, 252, 0, 3551, 541,
- 602, 2270, 0, 0, 0, 442, 0, 3587, 2774, 0,
- 0, 2203, 0, 2324, 3010, 3049, 3096, 2911, 2972, 2439,
- 0, 3147, 3193, 0, 0, 0, 0, 0, 0, 3633,
+ 0, 0, 0, 0, 0, 0, 59, 0, -10, 2038,
+ 2952, 2995, 0, 0, 2274, 2140, 0, 200, 0, 0,
+ 0, 0, -44, 0, 0, 0, 0, 0, 0, 0,
+ 2421, 0, 0, 105, 0, 198, 0, 0, 0, 0,
+ 0, 0, 0, 3753, 0, 0, 319, 0, 3505, 525,
+ 586, 2510, 0, 0, 0, 2185, 0, 3541, 2952, 0,
+ 0, 2421, 0, 2553, 3112, 3150, 3188, -37, 3069, 2597,
+ 0, 3231, 3269, 0, 0, 0, 0, 0, 0, 3584,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 2522, 0, 0, 0, 0, 925,
- 0, 252, 0, 0, 0, 263, 0, 0, 0, 0,
- 223, 0, 0, 0, 0, 282, 0, 0, 2576, 0,
- 0, 0, 0, 0, 0, 2624, 0, 0, -1, 26,
- 0, 27, 51, 718, 0, 0, 3752, 1576, 1632, 3368,
- 3413, 3799, 0, -38, 3710, 3678, 3060, 3459, 3285, 3332,
+ 0, 0, 0, 0, 0, 2673, 0, 0, 0, 0,
+ 909, 0, 319, 0, 0, 0, 320, 0, 0, 0,
+ 0, 306, 0, 0, 0, 0, 325, 0, 0, 2789,
+ 0, 0, 0, 0, 0, 0, 2716, 0, 0, -5,
+ 22, 0, 68, 69, 70, 702, 0, 0, 3741, 1296,
+ 1560, 3386, 3424, 3796, 0, 3703, 3660, 3622, 1616, 3467,
+ 3305, 3348, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3809, 0, 0, 0,
+ 309, 0, 0, 0, 0, 2421, 0, 79, 0, 0,
+ 0, 0, 330, 0, 0, 0, 0, 84, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 3835, 0, 0, 0, 273, 0,
- 0, 0, 0, 2203, 0, 59, 0, 0, 0, 0,
- 293, 0, 0, 0, 0, 64, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 252, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 296, 0, 0, 0,
- 0, 0, 0, 0, 2380, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 79, 79, 186, 186, 0,
- 79, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 300, 79, 925, 0, 0,
- 79, 0, 0, 0, 0, 0, 0, 0, 0, 186,
- 0,
+ 319, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 317, 0,
+ 0, 0, 0, 0, 0, 0, 1982, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 59, 59, 154,
+ 154, 0, 59, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 340, 59, 909,
+ 0, 0, 59, 0, 0, 0, 0, 0, 0, 0,
+ 0, 154, 0,
};
dEXT short yygindex[] = { 0,
- 0, 0, 0, 349, 328, 0, -48, 0, 679, 378,
- -84, 0, 0, 0, -298, -13, 4075, 2485, 0, 0,
- 0, 0, 0, 363, 908, 0, 0, 233, -168, 38,
- 72, 196, -77, -175, 999, 0, 0, 0, 0, 290,
- 0, -249, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 374, 351, 0, -12, 0, 946, 413,
+ -83, 0, 0, 0, -311, -13, 4007, 2893, 0, 0,
+ 0, 0, 0, 372, -8, 0, 0, 246, -131, 43,
+ 86, 208, -45, -169, 987, 0, 0, 0, 0, 308,
+ 0, -271, 0, 0, 0, 0, 0, 0, 0, 0,
};
-#define YYTABLESIZE 4359
+#define YYTABLESIZE 4293
dEXT short yytable[] = { 69,
- 62, 180, 93, 62, 102, 93, 251, 203, 20, 206,
- 207, 201, 283, 181, 167, 246, 80, 272, 82, 93,
- 93, 296, 269, 149, 93, 57, 149, 169, 171, 84,
- 343, 93, 121, 309, 290, 97, 292, 15, 122, 18,
- 149, 149, 310, 131, 204, 149, 149, 135, 186, 187,
- 188, 189, 190, 191, 93, 15, 311, 18, 317, 168,
- 170, 361, 169, 273, 147, 148, 38, 16, 340, 341,
- 98, 99, 141, 149, 100, 149, 338, 339, 25, 23,
- 291, 345, 293, 62, 38, 16, 295, 233, 316, 57,
- 23, 17, 195, 196, 168, 105, 106, 353, 172, 37,
- 107, 356, 308, 174, 39, 149, 173, 23, 175, 17,
- 177, 25, 179, 319, 25, 25, 25, 37, 25, 182,
- 25, 25, 15, 25, 192, 294, 193, 200, 202, 209,
- 210, 212, 213, 214, 215, 216, 330, 25, 234, 205,
- 249, 62, 25, 271, 274, 4, 5, 6, 70, 7,
- 8, 70, 282, 237, 238, 239, 240, 241, 242, 244,
- 280, 130, 312, 148, 130, 70, 70, 289, 196, 25,
- 231, 297, 256, 210, 298, 210, 300, 266, 130, 130,
- 67, 355, 301, 130, 275, 20, 277, 279, 302, 303,
- 304, 281, 305, 318, 306, 334, 307, 314, 67, 320,
- 70, 25, 321, 25, 25, 322, 19, 333, 335, 323,
- 336, 130, 325, 130, 147, 148, 344, 285, 20, 287,
- 288, 20, 20, 20, 87, 20, 346, 20, 20, 88,
- 20, 350, 67, 93, 93, 93, 93, 166, 147, 148,
- 147, 148, 93, 130, 20, 147, 148, 357, 358, 20,
- 147, 148, 348, 51, 149, 149, 149, 149, 93, 93,
- 101, 93, 93, 149, 2, 147, 148, 57, 313, 149,
- 149, 149, 149, 147, 148, 196, 20, 147, 148, 149,
- 149, 34, 149, 149, 149, 149, 149, 149, 149, 147,
- 148, 149, 160, 256, 149, 149, 149, 43, 147, 148,
- 43, 43, 43, 36, 43, 232, 43, 43, 20, 43,
- 20, 20, 147, 148, 147, 148, 147, 148, 147, 148,
- 147, 148, 161, 43, 147, 148, 147, 148, 43, 147,
- 148, 158, 69, 39, 25, 25, 25, 25, 25, 25,
- 34, 25, 25, 25, 25, 25, 25, 25, 25, 25,
- 25, 25, 25, 25, 36, 43, 21, 25, 25, 96,
- 25, 25, 25, 25, 25, 250, 147, 148, 156, 25,
- 25, 25, 25, 25, 25, 77, 211, 25, 332, 70,
- 70, 70, 70, 352, 263, 185, 25, 43, 25, 25,
- 43, 0, 130, 130, 130, 130, 167, 147, 148, 147,
- 148, 130, 0, 0, 70, 70, 167, 130, 130, 130,
- 130, 67, 67, 67, 67, 0, 0, 130, 130, 0,
- 130, 130, 130, 130, 130, 130, 130, 0, 149, 130,
- 167, 0, 130, 130, 130, 0, 67, 67, 149, 0,
- 0, 20, 20, 20, 20, 20, 20, 0, 20, 20,
- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 0, 149, 0, 20, 20, 0, 20, 20, 20,
- 20, 20, 143, 144, 145, 146, 20, 20, 20, 20,
- 20, 20, 156, 0, 20, 156, 167, 0, 0, 0,
- 0, 0, 0, 20, 0, 20, 20, 147, 148, 156,
- 156, 0, 0, 0, 156, 0, 4, 5, 6, 0,
- 7, 8, 0, 0, 0, 0, 0, 0, 149, 0,
- 43, 43, 43, 43, 43, 43, 354, 43, 43, 43,
- 0, 0, 156, 43, 156, 0, 43, 43, 43, 43,
- 0, 0, 0, 43, 43, 0, 43, 43, 43, 43,
- 43, 0, 0, 0, 0, 43, 43, 43, 43, 43,
- 43, 0, 0, 43, 156, 0, 0, 0, 0, 0,
- 167, 0, 43, 172, 43, 43, 172, 172, 172, 0,
- 172, 156, 172, 172, 156, 172, 150, 0, 0, 0,
- 0, 0, 151, 152, 153, 154, 0, 0, 156, 156,
- 0, 0, 149, 156, 172, 155, 157, 158, 159, 160,
- 161, 162, 0, 0, 163, 0, 0, 164, 165, 166,
- 0, 162, 0, 0, 163, 0, 0, 164, 165, 166,
- 0, 156, 0, 156, 173, 0, 0, 173, 173, 173,
- 0, 173, 113, 173, 173, 113, 173, 0, 163, 0,
- 0, 164, 165, 166, 0, 0, 0, 0, 0, 113,
- 113, 0, 0, 156, 113, 173, 172, 4, 5, 6,
- 0, 7, 8, 0, 0, 0, 0, 0, 0, 327,
- 328, 329, 0, 331, 153, 154, 0, 0, 0, 0,
- 0, 67, 0, 52, 113, 0, 62, 64, 50, 0,
- 57, 162, 65, 60, 163, 59, 0, 164, 165, 166,
- 347, 0, 0, 156, 156, 156, 156, 349, 0, 58,
- 108, 351, 156, 117, 63, 0, 0, 173, 156, 156,
- 156, 156, 0, 0, 359, 360, 0, 0, 156, 156,
- 0, 156, 156, 156, 156, 156, 156, 156, 0, 0,
- 156, 61, 0, 156, 156, 156, 0, 0, 66, 176,
- 0, 66, 0, 0, 0, 0, 151, 152, 153, 154,
- 0, 0, 0, 184, 0, 0, 66, 0, 0, 167,
- 0, 0, 0, 23, 161, 162, 53, 0, 163, 0,
- 0, 164, 165, 166, 0, 0, 0, 172, 172, 172,
- 172, 172, 0, 172, 172, 172, 0, 0, 0, 172,
- 66, 149, 156, 156, 156, 156, 0, 0, 0, 208,
- 172, 156, 172, 172, 172, 172, 172, 156, 156, 156,
- 156, 172, 172, 172, 172, 172, 172, 156, 156, 172,
- 156, 156, 156, 156, 156, 156, 156, 0, 172, 156,
- 172, 172, 156, 156, 156, 0, 247, 0, 173, 173,
- 173, 173, 173, 255, 173, 173, 173, 0, 0, 0,
- 173, 0, 0, 113, 113, 113, 113, 0, 0, 0,
- 0, 173, 113, 173, 173, 173, 173, 173, 113, 113,
- 113, 113, 173, 173, 173, 173, 173, 173, 113, 113,
- 173, 113, 113, 113, 113, 113, 113, 113, 0, 173,
- 113, 173, 173, 113, 113, 113, 22, 24, 25, 26,
- 27, 28, 0, 29, 30, 31, 0, 0, 0, 32,
- 0, 167, 33, 34, 35, 36, 0, 0, 0, 37,
- 38, 0, 39, 40, 41, 42, 43, 0, 0, 167,
- 112, 44, 45, 46, 47, 48, 49, 43, 124, 51,
- 43, 43, 43, 149, 43, 0, 43, 43, 54, 43,
- 55, 56, 0, 0, 0, 151, 0, 153, 154, 0,
- 0, 149, 0, 43, 0, 0, 0, 0, 43, 66,
- 66, 66, 66, 161, 162, 0, 0, 163, 112, 0,
- 164, 165, 166, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 52, 66, 43, 62, 64, 50, 0,
- 57, 199, 65, 60, 92, 59, 0, 0, 0, 112,
+ 207, 62, 181, 104, 168, 102, 104, 204, 168, 248,
+ 20, 208, 62, 253, 58, 285, 274, 170, 298, 345,
+ 104, 104, 172, 202, 80, 104, 311, 148, 149, 82,
+ 15, 84, 121, 93, 112, 18, 150, 342, 343, 122,
+ 150, 312, 124, 131, 313, 182, 319, 135, 15, 169,
+ 363, 275, 97, 18, 171, 104, 340, 341, 26, 98,
+ 271, 347, 39, 99, 100, 62, 105, 106, 107, 235,
+ 293, 141, 295, 23, 170, 173, 205, 355, 58, 174,
+ 39, 358, 112, 23, 187, 188, 189, 190, 191, 192,
+ 175, 26, 196, 197, 26, 26, 26, 297, 26, 23,
+ 26, 26, 178, 26, 176, 200, 169, 318, 16, 17,
+ 20, 180, 183, 112, 193, 203, 201, 26, 194, 38,
+ 236, 321, 26, 206, 40, 276, 16, 17, 20, 210,
+ 211, 213, 214, 215, 216, 217, 218, 38, 251, 62,
+ 168, 310, 15, 292, 284, 149, 149, 282, 149, 26,
+ 291, 307, 233, 21, 239, 240, 241, 242, 243, 244,
+ 246, 300, 149, 149, 303, 304, 305, 149, 294, 197,
+ 306, 308, 150, 258, 211, 332, 211, 168, 268, 316,
+ 273, 26, 296, 26, 26, 277, 21, 279, 281, 21,
+ 21, 21, 283, 21, 309, 21, 21, 149, 21, 4,
+ 5, 6, 325, 7, 8, 299, 154, 155, 19, 150,
+ 302, 335, 21, 322, 327, 148, 149, 21, 323, 287,
+ 357, 289, 290, 163, 324, 314, 164, 167, 338, 165,
+ 166, 167, 337, 87, 104, 104, 104, 104, 88, 346,
+ 68, 104, 112, 104, 21, 148, 149, 112, 2, 104,
+ 104, 104, 104, 148, 149, 350, 148, 149, 68, 104,
+ 104, 101, 104, 104, 104, 104, 104, 104, 104, 348,
+ 315, 104, 148, 149, 148, 149, 21, 197, 21, 21,
+ 352, 44, 148, 149, 44, 44, 44, 234, 44, 320,
+ 44, 44, 68, 44, 336, 258, 359, 148, 149, 360,
+ 148, 149, 148, 149, 148, 149, 52, 44, 148, 149,
+ 148, 149, 44, 252, 26, 26, 26, 26, 26, 26,
+ 58, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 69, 148, 149, 26, 26, 44,
+ 26, 26, 26, 26, 26, 148, 149, 148, 149, 26,
+ 26, 26, 26, 26, 26, 163, 168, 26, 164, 161,
+ 37, 165, 166, 167, 35, 162, 26, 159, 26, 26,
+ 40, 44, 148, 149, 44, 37, 149, 149, 149, 149,
+ 35, 21, 96, 149, 77, 149, 148, 149, 150, 212,
+ 354, 149, 149, 254, 334, 164, 255, 265, 165, 166,
+ 167, 149, 149, 186, 149, 149, 149, 149, 149, 21,
+ 21, 21, 21, 21, 21, 157, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 148,
+ 149, 0, 21, 21, 0, 21, 21, 21, 21, 21,
+ 0, 0, 0, 168, 21, 21, 21, 21, 21, 21,
+ 356, 0, 21, 168, 4, 5, 6, 0, 7, 8,
+ 0, 21, 0, 21, 21, 0, 150, 0, 0, 150,
+ 0, 68, 68, 68, 68, 150, 0, 0, 68, 0,
+ 0, 0, 0, 150, 150, 150, 0, 0, 150, 0,
+ 0, 0, 0, 148, 149, 0, 68, 68, 148, 149,
+ 0, 0, 0, 0, 44, 44, 44, 44, 44, 44,
+ 0, 44, 44, 44, 0, 0, 150, 44, 150, 0,
+ 44, 44, 44, 44, 0, 0, 0, 44, 44, 0,
+ 44, 44, 44, 44, 44, 0, 0, 0, 0, 44,
+ 44, 44, 44, 44, 44, 0, 0, 44, 150, 0,
+ 0, 0, 152, 153, 154, 155, 44, 173, 44, 44,
+ 173, 173, 173, 0, 173, 157, 173, 173, 157, 173,
+ 162, 163, 0, 0, 164, 0, 0, 165, 166, 167,
+ 0, 0, 157, 157, 0, 0, 0, 157, 173, 0,
+ 0, 4, 5, 6, 0, 7, 8, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 143, 144, 145, 146,
+ 0, 0, 0, 147, 0, 157, 0, 157, 174, 0,
+ 0, 174, 174, 174, 0, 174, 114, 174, 174, 114,
+ 174, 148, 149, 151, 0, 0, 0, 0, 0, 152,
+ 153, 154, 155, 114, 114, 0, 0, 157, 114, 174,
+ 173, 154, 156, 158, 159, 160, 161, 162, 163, 0,
+ 0, 164, 0, 0, 165, 166, 167, 0, 163, 0,
+ 0, 164, 0, 0, 165, 166, 167, 52, 114, 0,
+ 62, 64, 50, 0, 57, 0, 65, 60, 0, 59,
+ 0, 0, 0, 0, 0, 0, 0, 150, 150, 150,
+ 150, 0, 0, 58, 150, 0, 150, 0, 63, 0,
+ 0, 174, 150, 150, 150, 150, 329, 330, 331, 0,
+ 333, 0, 150, 150, 0, 150, 150, 150, 150, 150,
+ 150, 150, 0, 0, 150, 61, 0, 150, 150, 150,
+ 0, 0, 67, 0, 0, 67, 0, 349, 0, 0,
+ 0, 0, 0, 0, 351, 0, 0, 0, 353, 0,
+ 67, 0, 0, 168, 0, 0, 0, 23, 0, 0,
+ 53, 361, 362, 0, 0, 0, 0, 0, 0, 0,
+ 0, 173, 173, 173, 173, 173, 0, 173, 173, 173,
+ 0, 0, 0, 173, 67, 150, 157, 157, 157, 157,
+ 0, 0, 0, 157, 173, 157, 173, 173, 173, 173,
+ 173, 157, 157, 157, 157, 173, 173, 173, 173, 173,
+ 173, 157, 157, 173, 157, 157, 157, 157, 157, 157,
+ 157, 0, 173, 157, 173, 173, 157, 157, 157, 0,
+ 0, 0, 174, 174, 174, 174, 174, 0, 174, 174,
+ 174, 0, 0, 0, 174, 0, 0, 114, 114, 114,
+ 114, 0, 0, 0, 114, 174, 114, 174, 174, 174,
+ 174, 174, 114, 114, 114, 114, 174, 174, 174, 174,
+ 174, 174, 114, 114, 174, 114, 114, 114, 114, 114,
+ 114, 114, 0, 174, 114, 174, 174, 114, 114, 114,
+ 22, 24, 25, 26, 27, 28, 0, 29, 30, 31,
+ 0, 0, 0, 32, 0, 168, 33, 34, 35, 36,
+ 0, 0, 0, 37, 38, 0, 39, 40, 41, 42,
+ 43, 0, 0, 0, 0, 44, 45, 46, 47, 48,
+ 49, 44, 0, 51, 44, 44, 44, 150, 44, 0,
+ 44, 44, 54, 44, 55, 56, 0, 0, 67, 152,
+ 0, 154, 155, 0, 0, 0, 0, 44, 0, 0,
+ 0, 0, 44, 67, 67, 67, 67, 162, 163, 0,
+ 67, 164, 0, 0, 165, 166, 167, 108, 0, 0,
+ 117, 0, 0, 0, 0, 0, 0, 52, 67, 44,
+ 62, 64, 50, 0, 57, 0, 65, 60, 0, 59,
+ 0, 0, 92, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 177, 0, 63, 114,
+ 115, 44, 0, 0, 44, 0, 123, 0, 0, 0,
+ 185, 0, 0, 0, 0, 0, 0, 0, 136, 137,
+ 138, 139, 0, 52, 0, 61, 62, 64, 50, 0,
+ 57, 0, 65, 60, 0, 59, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 114, 115, 0, 63, 0, 0, 43, 123, 0,
- 43, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 136, 137, 138, 139, 0, 0, 0, 0, 0, 52,
- 0, 61, 62, 64, 50, 0, 57, 0, 65, 60,
- 0, 59, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 63, 0, 209, 23, 0, 0,
+ 53, 0, 0, 199, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 63, 0, 0, 23, 0, 198, 53, 0, 0, 0,
+ 0, 61, 0, 154, 155, 0, 52, 0, 0, 62,
+ 64, 50, 0, 57, 249, 65, 60, 0, 59, 162,
+ 163, 257, 0, 164, 0, 0, 165, 166, 167, 0,
+ 0, 0, 0, 23, 0, 0, 53, 63, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 61, 0, 153,
- 154, 0, 52, 0, 0, 62, 64, 50, 0, 57,
- 0, 65, 60, 0, 59, 161, 162, 153, 0, 163,
- 0, 0, 164, 165, 166, 0, 112, 0, 0, 23,
- 0, 112, 53, 63, 162, 0, 0, 163, 0, 0,
- 164, 165, 166, 0, 0, 0, 0, 0, 0, 0,
- 43, 43, 43, 43, 43, 43, 0, 43, 43, 43,
- 61, 0, 0, 43, 0, 0, 43, 43, 43, 43,
- 0, 0, 0, 43, 43, 0, 43, 43, 43, 43,
- 43, 0, 0, 0, 0, 43, 43, 43, 43, 43,
- 43, 167, 23, 43, 0, 53, 0, 0, 0, 0,
- 0, 0, 43, 252, 43, 43, 253, 110, 25, 26,
- 27, 28, 88, 29, 30, 31, 0, 0, 0, 32,
- 0, 0, 0, 149, 0, 156, 0, 0, 0, 0,
+ 0, 0, 0, 0, 44, 44, 44, 44, 44, 44,
+ 0, 44, 44, 44, 61, 0, 0, 44, 0, 0,
+ 44, 44, 44, 44, 0, 0, 0, 44, 44, 0,
+ 44, 44, 44, 44, 44, 0, 0, 0, 0, 44,
+ 44, 44, 44, 44, 44, 0, 23, 44, 0, 53,
+ 0, 168, 0, 0, 0, 326, 44, 0, 44, 44,
+ 0, 110, 25, 26, 27, 28, 88, 29, 30, 31,
+ 0, 0, 0, 32, 0, 0, 0, 157, 0, 0,
+ 0, 0, 0, 150, 38, 0, 39, 40, 41, 42,
+ 43, 0, 0, 0, 0, 44, 45, 46, 47, 48,
+ 49, 0, 0, 51, 0, 168, 0, 0, 0, 0,
+ 0, 0, 54, 0, 55, 56, 0, 24, 25, 26,
+ 27, 28, 0, 29, 30, 31, 0, 0, 0, 32,
+ 286, 0, 0, 0, 0, 157, 0, 150, 0, 0,
38, 0, 39, 40, 41, 42, 43, 0, 0, 0,
0, 44, 45, 46, 47, 48, 49, 0, 0, 51,
- 0, 0, 0, 167, 0, 0, 0, 324, 54, 0,
- 55, 56, 0, 24, 25, 26, 27, 28, 0, 29,
- 30, 31, 0, 0, 0, 32, 0, 0, 0, 156,
- 0, 0, 0, 0, 0, 149, 38, 0, 39, 40,
- 41, 42, 43, 0, 0, 0, 0, 44, 45, 46,
- 47, 48, 49, 0, 0, 51, 0, 167, 0, 0,
- 0, 0, 0, 0, 54, 0, 55, 56, 0, 0,
- 0, 0, 0, 0, 0, 0, 116, 25, 26, 27,
- 28, 0, 29, 30, 31, 0, 0, 0, 32, 149,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 38,
- 0, 39, 40, 41, 42, 43, 0, 0, 0, 167,
- 44, 45, 46, 47, 48, 49, 52, 0, 51, 62,
- 64, 50, 0, 57, 0, 65, 60, 54, 59, 55,
- 56, 0, 0, 0, 0, 0, 0, 151, 152, 153,
- 154, 149, 120, 0, 0, 0, 0, 63, 0, 0,
- 0, 157, 158, 159, 160, 161, 162, 0, 0, 163,
- 0, 0, 164, 165, 166, 0, 0, 0, 0, 0,
+ 0, 0, 0, 168, 0, 0, 0, 0, 54, 0,
+ 55, 56, 0, 0, 0, 0, 88, 0, 0, 88,
+ 116, 25, 26, 27, 28, 0, 29, 30, 31, 0,
+ 0, 0, 32, 88, 88, 150, 0, 0, 88, 0,
+ 0, 0, 0, 38, 0, 39, 40, 41, 42, 43,
+ 0, 0, 0, 0, 44, 45, 46, 47, 48, 49,
+ 52, 0, 51, 62, 64, 50, 0, 57, 88, 65,
+ 60, 54, 59, 55, 56, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 120, 152, 153, 154,
+ 155, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 158, 159, 160, 161, 162, 163, 0, 0, 164,
+ 0, 0, 165, 166, 167, 0, 52, 0, 61, 62,
+ 64, 50, 0, 57, 130, 65, 60, 0, 59, 0,
+ 0, 0, 0, 0, 0, 151, 0, 0, 0, 0,
+ 0, 152, 153, 154, 155, 0, 0, 63, 0, 0,
+ 0, 0, 0, 53, 156, 158, 159, 160, 161, 162,
+ 163, 0, 0, 164, 0, 0, 165, 166, 167, 0,
0, 0, 52, 0, 61, 62, 64, 50, 0, 57,
- 130, 65, 60, 0, 59, 0, 0, 0, 0, 0,
- 0, 0, 0, 150, 0, 0, 0, 0, 0, 151,
- 152, 153, 154, 63, 0, 0, 0, 0, 0, 53,
- 0, 0, 155, 157, 158, 159, 160, 161, 162, 0,
- 0, 163, 0, 0, 164, 165, 166, 0, 52, 0,
- 61, 62, 64, 50, 0, 57, 0, 65, 60, 0,
- 59, 0, 0, 0, 0, 0, 0, 150, 0, 0,
- 0, 0, 0, 151, 152, 153, 154, 0, 0, 63,
- 0, 0, 0, 0, 0, 53, 155, 157, 158, 159,
- 160, 161, 162, 0, 0, 163, 0, 0, 164, 165,
- 166, 0, 0, 0, 0, 0, 61, 52, 134, 0,
- 62, 64, 50, 0, 57, 194, 65, 60, 0, 59,
- 0, 0, 0, 0, 0, 151, 152, 153, 154, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 63, 0,
- 0, 53, 160, 161, 162, 0, 0, 163, 0, 0,
- 164, 165, 166, 0, 0, 0, 87, 0, 0, 87,
- 24, 25, 26, 27, 28, 61, 29, 30, 31, 0,
- 0, 0, 32, 87, 87, 0, 0, 0, 87, 0,
+ 0, 65, 60, 0, 59, 0, 0, 0, 0, 0,
+ 0, 0, 0, 151, 0, 0, 0, 0, 0, 152,
+ 153, 154, 155, 63, 0, 0, 0, 0, 0, 53,
+ 0, 0, 156, 158, 159, 160, 161, 162, 163, 0,
+ 0, 164, 0, 0, 165, 166, 167, 0, 0, 0,
+ 61, 52, 134, 0, 62, 64, 50, 0, 57, 195,
+ 65, 60, 0, 59, 0, 0, 0, 88, 88, 88,
+ 88, 0, 0, 0, 88, 0, 88, 0, 0, 0,
+ 0, 0, 63, 88, 0, 53, 0, 0, 0, 0,
+ 0, 0, 88, 88, 0, 88, 88, 88, 88, 88,
+ 89, 0, 0, 89, 24, 25, 26, 27, 28, 61,
+ 29, 30, 31, 0, 0, 0, 32, 89, 89, 0,
+ 0, 0, 89, 0, 0, 0, 0, 38, 0, 39,
+ 40, 41, 42, 43, 0, 0, 0, 0, 44, 45,
+ 46, 47, 48, 49, 53, 0, 51, 0, 0, 0,
+ 0, 0, 89, 0, 0, 54, 90, 55, 56, 90,
+ 24, 25, 26, 27, 28, 0, 29, 30, 31, 0,
+ 0, 0, 32, 90, 90, 0, 0, 0, 90, 0,
0, 0, 0, 38, 0, 39, 40, 41, 42, 43,
0, 0, 0, 0, 44, 45, 46, 47, 48, 49,
- 53, 0, 51, 0, 0, 0, 0, 0, 87, 0,
- 0, 54, 88, 55, 56, 88, 24, 25, 26, 27,
- 28, 0, 29, 30, 31, 0, 0, 0, 32, 88,
- 88, 0, 0, 0, 88, 0, 0, 0, 0, 38,
+ 0, 0, 51, 0, 0, 0, 0, 0, 90, 0,
+ 0, 54, 0, 55, 56, 0, 24, 25, 26, 27,
+ 28, 0, 29, 30, 31, 0, 52, 0, 32, 62,
+ 64, 50, 0, 57, 245, 65, 60, 0, 59, 38,
0, 39, 40, 41, 42, 43, 0, 0, 0, 0,
- 44, 45, 46, 47, 48, 49, 0, 0, 51, 0,
- 0, 0, 0, 0, 88, 0, 0, 54, 0, 55,
- 56, 0, 24, 25, 26, 27, 28, 0, 29, 30,
- 31, 0, 52, 0, 32, 62, 64, 50, 0, 57,
- 243, 65, 60, 0, 59, 38, 0, 39, 40, 41,
- 42, 43, 0, 0, 0, 0, 44, 45, 46, 47,
- 48, 49, 0, 63, 51, 0, 0, 0, 0, 0,
- 0, 0, 0, 54, 0, 55, 56, 0, 0, 0,
- 0, 24, 25, 26, 27, 28, 0, 29, 30, 31,
- 61, 52, 0, 32, 62, 64, 50, 0, 57, 0,
- 65, 60, 0, 59, 38, 0, 39, 40, 41, 42,
- 43, 0, 0, 0, 0, 44, 45, 46, 47, 48,
- 49, 0, 63, 51, 0, 53, 0, 0, 0, 0,
- 0, 0, 54, 0, 55, 56, 0, 87, 87, 87,
- 87, 0, 0, 0, 0, 0, 87, 52, 0, 61,
- 62, 64, 50, 87, 57, 276, 65, 60, 0, 59,
- 0, 0, 87, 87, 0, 87, 87, 87, 87, 87,
- 0, 0, 0, 0, 0, 0, 0, 0, 63, 0,
- 0, 0, 0, 0, 53, 0, 0, 0, 0, 0,
- 0, 0, 0, 88, 88, 88, 88, 0, 0, 0,
- 0, 0, 88, 52, 0, 61, 62, 64, 50, 0,
- 57, 278, 65, 60, 0, 59, 0, 0, 88, 88,
- 0, 88, 88, 88, 88, 88, 0, 0, 0, 0,
- 0, 0, 0, 0, 63, 0, 0, 0, 0, 0,
- 53, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 24, 25, 26, 27,
- 28, 61, 29, 30, 31, 0, 52, 0, 32, 62,
- 64, 50, 0, 57, 286, 65, 60, 0, 59, 38,
- 0, 39, 40, 41, 42, 43, 0, 0, 0, 0,
- 44, 45, 46, 47, 48, 49, 53, 63, 51, 0,
+ 44, 45, 46, 47, 48, 49, 0, 63, 51, 0,
0, 0, 0, 0, 0, 0, 0, 54, 0, 55,
- 56, 0, 0, 0, 22, 24, 25, 26, 27, 28,
- 0, 29, 30, 31, 61, 0, 0, 32, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 38, 0,
+ 56, 0, 0, 0, 0, 24, 25, 26, 27, 28,
+ 0, 29, 30, 31, 61, 52, 0, 32, 62, 64,
+ 50, 0, 57, 0, 65, 60, 0, 59, 38, 0,
39, 40, 41, 42, 43, 0, 0, 0, 0, 44,
- 45, 46, 47, 48, 49, 0, 0, 51, 0, 53,
- 167, 0, 0, 0, 115, 0, 54, 115, 55, 56,
- 0, 24, 25, 26, 27, 28, 0, 29, 30, 31,
- 0, 115, 115, 32, 0, 0, 115, 0, 0, 0,
- 0, 0, 149, 0, 38, 0, 39, 40, 41, 42,
- 43, 0, 0, 0, 0, 44, 45, 46, 47, 48,
- 49, 0, 0, 51, 115, 0, 115, 0, 0, 0,
- 0, 0, 54, 0, 55, 56, 0, 24, 25, 26,
- 27, 28, 0, 29, 30, 31, 0, 52, 0, 32,
- 62, 64, 50, 0, 57, 0, 65, 60, 0, 59,
- 38, 0, 39, 40, 41, 42, 43, 0, 0, 0,
- 0, 44, 45, 46, 47, 48, 49, 0, 63, 51,
- 0, 0, 0, 0, 0, 0, 0, 0, 54, 0,
- 55, 56, 0, 0, 0, 0, 142, 0, 0, 142,
+ 45, 46, 47, 48, 49, 0, 63, 51, 0, 53,
+ 0, 0, 0, 0, 0, 0, 54, 0, 55, 56,
+ 0, 89, 89, 89, 89, 0, 0, 0, 89, 0,
+ 89, 52, 0, 61, 62, 64, 50, 0, 57, 278,
+ 65, 60, 0, 59, 0, 0, 89, 89, 0, 89,
+ 89, 89, 89, 89, 0, 0, 0, 0, 0, 0,
+ 0, 0, 63, 0, 0, 0, 0, 0, 53, 0,
+ 0, 0, 0, 0, 0, 0, 0, 90, 90, 90,
+ 90, 0, 0, 0, 90, 0, 90, 52, 0, 61,
+ 62, 64, 50, 0, 57, 280, 65, 60, 0, 59,
+ 0, 0, 90, 90, 0, 90, 90, 90, 90, 90,
+ 0, 0, 0, 0, 0, 0, 0, 0, 63, 0,
+ 0, 0, 0, 0, 53, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
24, 25, 26, 27, 28, 61, 29, 30, 31, 0,
- 0, 0, 32, 142, 142, 0, 0, 0, 142, 0,
- 0, 0, 0, 38, 0, 39, 40, 41, 42, 43,
+ 52, 0, 32, 62, 64, 50, 0, 57, 288, 65,
+ 60, 0, 59, 38, 0, 39, 40, 41, 42, 43,
0, 0, 0, 0, 44, 45, 46, 47, 48, 49,
- 53, 0, 51, 158, 0, 0, 158, 0, 142, 0,
- 0, 54, 0, 55, 56, 0, 0, 0, 0, 0,
- 158, 158, 0, 0, 0, 158, 151, 152, 153, 154,
- 0, 0, 0, 0, 0, 0, 0, 0, 142, 0,
- 0, 158, 159, 160, 161, 162, 0, 0, 163, 0,
- 0, 164, 165, 166, 0, 158, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 115, 115, 115, 115, 0,
- 159, 0, 0, 0, 115, 0, 0, 0, 0, 0,
- 115, 115, 115, 115, 0, 158, 0, 159, 159, 0,
- 115, 115, 159, 115, 115, 115, 115, 115, 115, 115,
- 0, 0, 115, 0, 0, 115, 115, 115, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 159, 0, 159, 0, 144, 0, 0, 0, 0, 0,
+ 53, 63, 51, 0, 0, 0, 0, 0, 0, 0,
+ 0, 54, 0, 55, 56, 0, 0, 0, 22, 24,
+ 25, 26, 27, 28, 0, 29, 30, 31, 61, 0,
+ 0, 32, 95, 0, 0, 95, 0, 0, 0, 0,
+ 0, 0, 38, 0, 39, 40, 41, 42, 43, 95,
+ 95, 0, 0, 44, 45, 46, 47, 48, 49, 0,
+ 0, 51, 0, 53, 0, 0, 0, 0, 0, 0,
+ 54, 0, 55, 56, 0, 24, 25, 26, 27, 28,
+ 0, 29, 30, 31, 95, 0, 0, 32, 71, 0,
+ 0, 71, 0, 0, 0, 0, 0, 0, 38, 0,
+ 39, 40, 41, 42, 43, 71, 71, 0, 0, 44,
+ 45, 46, 47, 48, 49, 0, 0, 51, 0, 0,
+ 0, 0, 0, 0, 0, 0, 54, 0, 55, 56,
0, 24, 25, 26, 27, 28, 0, 29, 30, 31,
- 0, 144, 144, 32, 0, 0, 144, 0, 0, 0,
- 0, 0, 159, 0, 38, 0, 39, 40, 41, 42,
+ 71, 52, 0, 32, 62, 64, 50, 0, 57, 0,
+ 65, 60, 0, 59, 38, 0, 39, 40, 41, 42,
43, 0, 0, 0, 0, 44, 45, 46, 47, 48,
- 49, 0, 0, 51, 144, 0, 144, 0, 0, 0,
- 94, 0, 54, 94, 55, 56, 0, 142, 142, 142,
- 142, 0, 0, 0, 0, 0, 142, 94, 94, 0,
- 0, 0, 142, 142, 142, 142, 144, 0, 0, 0,
- 0, 0, 142, 142, 0, 142, 142, 142, 142, 142,
- 142, 142, 0, 0, 142, 0, 0, 142, 142, 142,
- 0, 0, 94, 0, 158, 158, 158, 158, 0, 107,
- 0, 0, 107, 158, 0, 0, 0, 0, 0, 158,
- 158, 158, 158, 0, 0, 0, 107, 107, 0, 158,
- 158, 107, 158, 158, 158, 158, 158, 158, 158, 90,
- 90, 158, 0, 0, 158, 158, 158, 0, 0, 0,
- 0, 103, 0, 0, 0, 0, 0, 111, 90, 119,
- 0, 107, 0, 0, 90, 0, 0, 0, 0, 0,
- 0, 159, 159, 159, 159, 0, 90, 90, 90, 90,
- 159, 0, 0, 0, 0, 0, 159, 159, 159, 159,
- 0, 107, 68, 0, 0, 68, 159, 159, 0, 159,
- 159, 159, 159, 159, 159, 159, 0, 0, 159, 68,
- 68, 159, 159, 159, 68, 0, 0, 0, 0, 0,
- 0, 111, 0, 0, 0, 144, 144, 144, 144, 0,
- 0, 0, 0, 0, 144, 0, 0, 0, 0, 0,
- 144, 144, 144, 144, 68, 0, 71, 0, 0, 0,
- 144, 144, 0, 144, 144, 144, 144, 144, 144, 144,
- 0, 0, 144, 71, 71, 144, 144, 144, 71, 0,
- 0, 0, 0, 0, 68, 0, 0, 0, 0, 0,
- 235, 94, 94, 94, 94, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 106, 0, 71, 106, 71, 0,
- 0, 0, 0, 0, 264, 0, 94, 94, 0, 94,
- 0, 106, 106, 0, 0, 0, 106, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 71, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 107, 107, 107, 107, 0, 145, 106, 0, 145, 107,
- 0, 0, 0, 0, 0, 107, 107, 107, 107, 0,
- 0, 0, 145, 145, 0, 107, 107, 145, 107, 107,
- 107, 107, 107, 107, 107, 0, 106, 107, 0, 0,
- 107, 107, 107, 0, 0, 0, 0, 0, 0, 0,
- 158, 0, 0, 158, 0, 0, 0, 145, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 158, 158, 0,
- 0, 0, 158, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 68, 68, 68, 68, 0, 0, 0,
- 0, 0, 68, 0, 0, 0, 0, 0, 68, 68,
- 68, 68, 158, 0, 113, 0, 0, 113, 68, 68,
- 0, 68, 68, 68, 68, 68, 68, 68, 0, 0,
- 68, 113, 113, 68, 68, 68, 113, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 71, 71, 71,
- 71, 0, 0, 0, 0, 0, 71, 0, 0, 0,
- 0, 0, 71, 71, 71, 71, 113, 0, 0, 0,
- 0, 0, 71, 71, 0, 71, 71, 71, 71, 71,
- 71, 71, 0, 0, 71, 0, 0, 71, 71, 71,
- 0, 0, 0, 0, 0, 106, 106, 106, 106, 0,
- 120, 0, 0, 120, 106, 0, 0, 0, 0, 0,
- 106, 106, 106, 106, 0, 0, 0, 120, 120, 0,
- 106, 106, 120, 106, 106, 106, 106, 106, 106, 106,
- 0, 0, 106, 0, 0, 106, 106, 106, 0, 0,
- 0, 0, 0, 0, 0, 0, 145, 145, 145, 145,
- 0, 103, 120, 0, 103, 145, 0, 0, 0, 0,
- 0, 145, 145, 145, 145, 0, 0, 0, 103, 103,
- 0, 145, 145, 103, 145, 145, 145, 145, 145, 145,
- 145, 0, 0, 145, 0, 0, 145, 145, 145, 0,
- 0, 158, 158, 158, 158, 0, 0, 0, 0, 0,
- 158, 0, 0, 103, 0, 0, 158, 158, 158, 158,
- 0, 0, 104, 0, 0, 104, 158, 158, 0, 158,
- 158, 158, 158, 158, 158, 158, 0, 0, 158, 104,
- 104, 158, 158, 158, 104, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 113, 113, 113, 113, 0,
- 98, 0, 0, 98, 113, 0, 0, 0, 0, 0,
- 113, 113, 113, 113, 104, 0, 0, 98, 98, 0,
- 113, 113, 98, 113, 113, 113, 113, 113, 113, 113,
- 0, 0, 113, 0, 0, 113, 113, 113, 0, 99,
- 0, 0, 99, 0, 0, 0, 0, 0, 0, 0,
- 89, 0, 98, 89, 0, 0, 99, 99, 0, 0,
- 0, 99, 0, 0, 0, 0, 0, 89, 89, 0,
- 0, 0, 89, 0, 0, 0, 0, 0, 0, 0,
- 0, 120, 120, 120, 120, 0, 100, 0, 0, 100,
- 120, 99, 0, 0, 0, 0, 120, 120, 120, 120,
- 0, 0, 89, 100, 100, 0, 120, 120, 100, 120,
- 120, 120, 120, 120, 120, 120, 0, 0, 120, 0,
- 0, 120, 120, 120, 0, 0, 0, 0, 0, 0,
- 0, 0, 103, 103, 103, 103, 0, 96, 100, 0,
- 96, 103, 0, 0, 0, 0, 0, 103, 103, 103,
- 103, 0, 0, 0, 96, 96, 0, 103, 103, 96,
- 103, 103, 103, 103, 103, 103, 103, 0, 0, 103,
+ 49, 0, 63, 51, 0, 0, 0, 0, 0, 0,
+ 0, 0, 54, 0, 55, 56, 0, 0, 0, 0,
+ 131, 0, 0, 131, 24, 25, 26, 27, 28, 61,
+ 29, 30, 31, 0, 0, 0, 32, 131, 131, 0,
+ 0, 0, 131, 0, 0, 0, 0, 38, 0, 39,
+ 40, 41, 42, 43, 0, 0, 0, 0, 44, 45,
+ 46, 47, 48, 49, 53, 157, 51, 0, 157, 0,
+ 131, 0, 131, 0, 0, 54, 0, 55, 56, 0,
+ 0, 0, 157, 157, 0, 0, 0, 157, 0, 0,
+ 0, 0, 0, 95, 95, 95, 95, 0, 0, 0,
+ 95, 0, 131, 0, 0, 0, 0, 0, 143, 0,
+ 0, 143, 0, 0, 0, 157, 0, 157, 95, 95,
+ 0, 95, 0, 0, 0, 143, 143, 0, 0, 0,
+ 143, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 157, 0, 71,
+ 71, 71, 71, 0, 116, 0, 71, 116, 0, 0,
+ 143, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 116, 116, 0, 71, 71, 116, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 97, 0, 0, 97, 0, 0, 96,
- 0, 0, 0, 104, 104, 104, 104, 0, 0, 0,
- 97, 97, 104, 0, 0, 97, 0, 0, 104, 104,
- 104, 104, 0, 0, 0, 0, 0, 0, 104, 104,
- 0, 104, 104, 104, 104, 104, 104, 104, 0, 0,
- 104, 98, 98, 98, 98, 97, 0, 0, 0, 0,
- 98, 0, 0, 0, 0, 0, 98, 98, 98, 98,
- 0, 0, 0, 0, 0, 0, 98, 98, 0, 98,
- 98, 98, 98, 98, 98, 98, 0, 0, 0, 0,
- 99, 99, 99, 99, 0, 95, 0, 0, 95, 99,
- 0, 89, 89, 89, 89, 99, 99, 99, 99, 0,
- 89, 0, 95, 95, 0, 99, 99, 95, 99, 99,
- 99, 99, 99, 99, 99, 0, 89, 89, 0, 89,
- 89, 89, 89, 89, 0, 0, 0, 100, 100, 100,
- 100, 0, 83, 0, 0, 83, 100, 95, 0, 0,
- 0, 0, 100, 100, 100, 100, 0, 0, 0, 83,
- 83, 0, 100, 100, 83, 100, 100, 100, 100, 100,
- 100, 100, 0, 0, 0, 0, 0, 0, 84, 0,
- 0, 84, 0, 0, 0, 0, 0, 0, 96, 96,
- 96, 96, 0, 0, 83, 84, 84, 96, 0, 0,
- 84, 0, 0, 96, 96, 96, 96, 0, 0, 0,
- 0, 0, 0, 96, 96, 0, 96, 96, 96, 96,
- 96, 96, 96, 85, 0, 0, 85, 0, 0, 0,
- 84, 0, 0, 0, 97, 97, 97, 97, 0, 0,
- 85, 85, 0, 97, 0, 85, 0, 0, 0, 97,
- 97, 97, 97, 0, 0, 0, 0, 0, 0, 97,
- 97, 0, 97, 97, 97, 97, 97, 97, 97, 86,
- 0, 0, 86, 0, 0, 85, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 86, 86, 0, 0,
- 0, 86, 0, 0, 0, 0, 0, 0, 0, 0,
+ 143, 0, 0, 0, 0, 24, 25, 26, 27, 28,
+ 0, 29, 30, 31, 116, 0, 116, 32, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 38, 0,
+ 39, 40, 41, 42, 43, 0, 0, 0, 0, 44,
+ 45, 46, 47, 48, 49, 0, 0, 51, 0, 168,
+ 0, 0, 0, 0, 0, 0, 54, 0, 55, 56,
+ 0, 131, 131, 131, 131, 0, 0, 0, 131, 0,
+ 131, 0, 0, 0, 0, 0, 131, 131, 131, 131,
+ 0, 150, 0, 0, 0, 0, 131, 131, 0, 131,
+ 131, 131, 131, 131, 131, 131, 0, 0, 131, 0,
+ 0, 131, 131, 131, 0, 0, 157, 157, 157, 157,
+ 0, 159, 0, 157, 159, 157, 0, 0, 0, 0,
+ 0, 157, 157, 157, 157, 0, 0, 0, 159, 159,
+ 0, 157, 157, 159, 157, 157, 157, 157, 157, 157,
+ 157, 0, 0, 157, 0, 0, 157, 157, 157, 143,
+ 143, 143, 143, 0, 0, 0, 143, 0, 143, 0,
+ 0, 0, 0, 159, 143, 143, 143, 143, 0, 0,
+ 0, 0, 0, 0, 143, 143, 0, 143, 143, 143,
+ 143, 143, 143, 143, 0, 0, 143, 0, 0, 143,
+ 143, 143, 0, 159, 0, 116, 116, 116, 116, 168,
+ 160, 0, 116, 0, 116, 0, 0, 0, 0, 0,
+ 116, 116, 116, 116, 0, 0, 0, 160, 160, 0,
+ 116, 116, 160, 116, 116, 116, 116, 116, 116, 116,
+ 0, 150, 116, 0, 0, 116, 116, 116, 0, 0,
+ 0, 0, 0, 145, 0, 152, 153, 154, 155, 0,
+ 160, 0, 160, 0, 0, 0, 0, 0, 0, 0,
+ 145, 145, 161, 162, 163, 145, 0, 164, 0, 0,
+ 165, 166, 167, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 160, 0, 0, 0, 0, 108, 0, 0,
+ 108, 0, 0, 145, 0, 145, 0, 0, 0, 0,
+ 0, 0, 0, 0, 108, 108, 0, 0, 0, 108,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 148, 0, 0, 148, 0, 0,
- 0, 86, 0, 0, 0, 0, 95, 95, 95, 95,
- 0, 148, 148, 0, 0, 95, 148, 0, 0, 0,
- 0, 95, 95, 95, 95, 0, 0, 0, 0, 0,
- 0, 95, 95, 0, 95, 95, 95, 95, 95, 95,
- 95, 147, 0, 0, 147, 0, 148, 0, 0, 0,
- 0, 0, 0, 83, 83, 83, 83, 0, 147, 147,
- 0, 0, 83, 147, 0, 0, 0, 0, 83, 83,
- 83, 83, 0, 0, 0, 0, 0, 134, 83, 83,
- 134, 83, 83, 83, 83, 83, 83, 83, 0, 84,
- 84, 84, 84, 147, 134, 134, 0, 0, 84, 134,
- 0, 0, 0, 0, 84, 84, 84, 84, 0, 0,
- 0, 0, 0, 0, 84, 84, 0, 84, 84, 84,
- 84, 84, 84, 105, 0, 0, 105, 0, 0, 134,
- 0, 0, 0, 0, 85, 85, 85, 85, 0, 0,
- 105, 105, 0, 85, 0, 105, 0, 0, 0, 85,
- 85, 0, 85, 0, 0, 0, 0, 0, 0, 85,
- 85, 0, 85, 85, 85, 85, 85, 85, 90, 0,
- 0, 90, 0, 0, 0, 105, 0, 0, 0, 0,
- 86, 86, 86, 86, 0, 90, 90, 0, 0, 86,
- 90, 0, 167, 0, 0, 86, 86, 0, 0, 0,
- 92, 0, 0, 92, 0, 86, 86, 0, 86, 86,
- 86, 86, 86, 86, 0, 0, 0, 92, 92, 0,
- 90, 0, 92, 0, 149, 148, 148, 148, 148, 0,
- 0, 0, 0, 0, 148, 0, 0, 0, 0, 0,
- 148, 148, 91, 0, 0, 91, 0, 0, 0, 0,
- 148, 148, 92, 148, 148, 148, 148, 148, 0, 91,
- 91, 0, 143, 0, 91, 143, 0, 0, 0, 0,
- 0, 0, 147, 147, 147, 147, 0, 0, 0, 143,
- 143, 147, 0, 0, 0, 284, 0, 147, 147, 82,
- 156, 0, 82, 0, 91, 0, 0, 147, 147, 0,
- 147, 147, 147, 147, 147, 0, 82, 82, 134, 134,
- 134, 134, 0, 0, 143, 0, 0, 134, 167, 0,
- 0, 0, 0, 134, 134, 69, 0, 0, 69, 0,
- 0, 0, 0, 134, 134, 0, 134, 134, 134, 134,
- 134, 82, 69, 69, 0, 0, 0, 0, 0, 0,
- 149, 0, 0, 0, 105, 105, 105, 105, 0, 0,
- 0, 0, 0, 105, 0, 0, 0, 0, 0, 105,
- 105, 0, 0, 0, 0, 0, 0, 69, 0, 105,
- 105, 156, 105, 105, 105, 105, 105, 0, 151, 152,
- 153, 154, 0, 0, 0, 0, 0, 0, 0, 90,
- 90, 90, 90, 0, 159, 160, 161, 162, 90, 167,
- 163, 0, 0, 164, 165, 166, 0, 0, 0, 0,
- 0, 0, 0, 0, 90, 90, 0, 90, 90, 90,
- 90, 92, 92, 92, 92, 0, 0, 0, 0, 0,
- 92, 149, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 92, 92, 0, 92,
- 92, 92, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 145, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 108,
+ 0, 0, 159, 159, 159, 159, 0, 0, 0, 159,
+ 0, 159, 0, 0, 0, 0, 0, 159, 159, 159,
+ 159, 0, 0, 69, 0, 0, 69, 159, 159, 108,
+ 159, 159, 159, 159, 159, 159, 159, 0, 0, 159,
+ 69, 69, 159, 159, 159, 69, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 152, 153, 154, 155, 0,
+ 0, 0, 0, 0, 0, 0, 107, 0, 0, 107,
+ 159, 160, 161, 162, 163, 69, 0, 164, 0, 0,
+ 165, 166, 167, 107, 107, 0, 0, 0, 107, 0,
+ 0, 160, 160, 160, 160, 0, 0, 0, 160, 0,
+ 160, 0, 0, 0, 0, 69, 160, 160, 160, 160,
+ 0, 0, 0, 0, 0, 0, 160, 160, 107, 160,
+ 160, 160, 160, 160, 160, 160, 0, 0, 160, 0,
+ 0, 160, 160, 160, 145, 145, 145, 145, 0, 72,
+ 0, 145, 0, 145, 0, 0, 0, 0, 107, 145,
+ 145, 145, 145, 0, 0, 0, 72, 72, 0, 145,
+ 145, 72, 145, 145, 145, 145, 145, 145, 145, 0,
+ 0, 145, 0, 0, 145, 145, 145, 0, 108, 108,
+ 108, 108, 0, 146, 0, 108, 146, 108, 0, 72,
+ 0, 72, 0, 108, 108, 108, 108, 0, 0, 0,
+ 146, 146, 0, 108, 108, 146, 108, 108, 108, 108,
+ 108, 108, 108, 0, 0, 108, 0, 0, 108, 108,
+ 108, 72, 0, 0, 0, 0, 159, 90, 90, 159,
+ 0, 0, 0, 0, 0, 146, 0, 0, 0, 103,
+ 0, 0, 0, 159, 159, 111, 90, 119, 159, 0,
+ 0, 0, 90, 0, 69, 69, 69, 69, 0, 0,
+ 0, 69, 0, 69, 90, 90, 90, 90, 0, 69,
+ 69, 69, 69, 0, 0, 0, 0, 0, 159, 69,
+ 69, 0, 69, 69, 69, 69, 69, 69, 69, 0,
+ 0, 69, 0, 0, 69, 69, 69, 107, 107, 107,
+ 107, 0, 114, 0, 107, 114, 107, 0, 0, 111,
+ 0, 0, 107, 107, 107, 107, 0, 0, 0, 114,
+ 114, 0, 107, 107, 114, 107, 107, 107, 107, 107,
+ 107, 107, 0, 0, 107, 0, 0, 107, 107, 107,
+ 0, 0, 0, 0, 0, 121, 0, 0, 121, 0,
+ 0, 0, 0, 0, 114, 0, 0, 0, 0, 0,
+ 0, 0, 121, 121, 0, 0, 0, 121, 0, 237,
+ 72, 72, 72, 72, 0, 0, 0, 72, 0, 72,
+ 0, 0, 0, 0, 0, 72, 72, 72, 72, 0,
+ 0, 0, 0, 266, 0, 72, 72, 121, 72, 72,
+ 72, 72, 72, 72, 72, 0, 0, 72, 0, 0,
+ 72, 72, 72, 0, 146, 146, 146, 146, 0, 105,
+ 0, 146, 105, 146, 0, 0, 0, 0, 0, 146,
+ 146, 146, 146, 0, 0, 0, 105, 105, 0, 146,
+ 146, 105, 146, 146, 146, 146, 146, 146, 146, 0,
+ 0, 146, 0, 0, 146, 146, 146, 159, 159, 159,
+ 159, 0, 99, 0, 159, 99, 159, 0, 0, 0,
+ 0, 105, 159, 159, 159, 159, 0, 0, 0, 99,
+ 99, 0, 159, 159, 99, 159, 159, 159, 159, 159,
+ 159, 159, 0, 0, 159, 0, 0, 159, 159, 159,
+ 100, 0, 0, 100, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 99, 0, 0, 100, 100, 0,
+ 0, 0, 100, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 114, 114, 114, 114, 0, 101, 0,
+ 114, 101, 114, 0, 0, 0, 0, 0, 114, 114,
+ 114, 114, 100, 0, 0, 101, 101, 0, 114, 114,
+ 101, 114, 114, 114, 114, 114, 114, 114, 0, 0,
+ 114, 0, 0, 114, 114, 114, 121, 121, 121, 121,
+ 0, 97, 0, 121, 97, 121, 0, 0, 0, 0,
+ 101, 121, 121, 121, 121, 0, 0, 0, 97, 97,
+ 0, 121, 121, 97, 121, 121, 121, 121, 121, 121,
+ 121, 0, 0, 121, 0, 0, 121, 121, 121, 98,
+ 0, 0, 98, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 97, 0, 0, 98, 98, 0, 0,
+ 0, 98, 0, 0, 0, 0, 0, 0, 0, 0,
+ 105, 105, 105, 105, 0, 96, 0, 105, 96, 105,
+ 0, 0, 0, 0, 0, 105, 105, 105, 105, 0,
+ 0, 98, 96, 96, 0, 105, 105, 96, 105, 105,
+ 105, 105, 105, 105, 105, 0, 0, 105, 0, 0,
+ 0, 0, 0, 99, 99, 99, 99, 0, 84, 0,
+ 99, 84, 99, 0, 0, 0, 0, 96, 99, 99,
+ 99, 99, 0, 0, 0, 84, 84, 0, 99, 99,
+ 84, 99, 99, 99, 99, 99, 99, 99, 0, 0,
+ 0, 100, 100, 100, 100, 0, 85, 0, 100, 85,
+ 100, 0, 0, 0, 0, 0, 100, 100, 100, 100,
+ 84, 0, 0, 85, 85, 0, 100, 100, 85, 100,
+ 100, 100, 100, 100, 100, 100, 0, 0, 0, 101,
+ 101, 101, 101, 0, 86, 0, 101, 86, 101, 0,
+ 0, 0, 0, 0, 101, 101, 101, 101, 85, 0,
+ 0, 86, 86, 0, 101, 101, 86, 101, 101, 101,
+ 101, 101, 101, 101, 0, 0, 0, 0, 0, 0,
+ 0, 0, 97, 97, 97, 97, 0, 87, 0, 97,
+ 87, 97, 0, 0, 0, 0, 86, 97, 97, 97,
+ 97, 0, 0, 0, 87, 87, 0, 97, 97, 87,
+ 97, 97, 97, 97, 97, 97, 97, 0, 0, 0,
+ 98, 98, 98, 98, 0, 148, 0, 98, 148, 98,
+ 0, 0, 0, 0, 0, 98, 98, 98, 98, 87,
+ 0, 0, 148, 148, 0, 98, 98, 148, 98, 98,
+ 98, 98, 98, 98, 98, 0, 96, 96, 96, 96,
+ 0, 135, 0, 96, 135, 96, 0, 0, 0, 0,
+ 0, 96, 96, 96, 96, 0, 0, 148, 135, 135,
+ 0, 96, 96, 135, 96, 96, 96, 96, 96, 96,
+ 96, 0, 0, 0, 0, 0, 0, 0, 0, 84,
+ 84, 84, 84, 0, 106, 0, 84, 106, 84, 0,
+ 0, 0, 0, 135, 84, 84, 84, 84, 0, 0,
+ 0, 106, 106, 0, 84, 84, 106, 84, 84, 84,
+ 84, 84, 84, 84, 0, 0, 0, 85, 85, 85,
+ 85, 0, 91, 0, 85, 91, 85, 0, 0, 0,
+ 0, 0, 85, 85, 85, 85, 106, 0, 0, 91,
+ 91, 0, 85, 85, 91, 85, 85, 85, 85, 85,
+ 85, 0, 0, 0, 0, 86, 86, 86, 86, 0,
+ 93, 0, 86, 93, 86, 0, 0, 0, 0, 0,
+ 86, 86, 0, 86, 91, 0, 0, 93, 93, 0,
+ 86, 86, 93, 86, 86, 86, 86, 86, 86, 0,
+ 168, 0, 0, 0, 0, 0, 0, 0, 87, 87,
+ 87, 87, 0, 94, 0, 87, 94, 87, 0, 0,
+ 0, 0, 93, 87, 87, 0, 0, 0, 0, 0,
+ 94, 94, 150, 87, 87, 94, 87, 87, 87, 87,
+ 87, 87, 0, 0, 0, 0, 148, 148, 148, 148,
+ 0, 92, 0, 148, 92, 148, 0, 0, 0, 0,
+ 0, 148, 148, 144, 0, 94, 144, 0, 92, 92,
+ 0, 148, 148, 92, 148, 148, 148, 148, 148, 0,
+ 144, 144, 135, 135, 135, 135, 0, 0, 0, 135,
+ 0, 135, 0, 0, 0, 0, 0, 135, 135, 0,
+ 0, 0, 0, 92, 0, 0, 83, 135, 135, 83,
+ 135, 135, 135, 135, 135, 144, 0, 0, 0, 70,
+ 0, 0, 70, 83, 83, 106, 106, 106, 106, 0,
+ 0, 0, 106, 0, 106, 0, 70, 70, 0, 0,
+ 106, 106, 0, 0, 0, 0, 157, 0, 0, 0,
+ 106, 106, 0, 106, 106, 106, 106, 106, 83, 0,
0, 0, 0, 91, 91, 91, 91, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 143, 143, 143, 143, 0, 91, 91,
- 0, 91, 0, 0, 0, 0, 0, 0, 150, 0,
- 0, 0, 0, 0, 151, 152, 153, 154, 143, 143,
- 82, 82, 82, 82, 0, 0, 0, 155, 157, 158,
- 159, 160, 161, 162, 0, 0, 163, 0, 0, 164,
- 165, 166, 0, 0, 0, 82, 82, 0, 0, 0,
- 0, 0, 0, 0, 94, 0, 69, 69, 69, 69,
- 0, 0, 104, 0, 0, 0, 109, 0, 0, 118,
- 0, 0, 0, 0, 0, 0, 125, 126, 127, 128,
- 129, 69, 69, 132, 133, 0, 0, 0, 0, 0,
- 140, 0, 0, 0, 0, 0, 0, 0, 0, 150,
- 0, 0, 0, 0, 0, 151, 152, 153, 154, 0,
- 0, 0, 0, 0, 0, 0, 0, 183, 0, 157,
- 158, 159, 160, 161, 162, 0, 0, 163, 0, 0,
- 164, 165, 166, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 217, 218, 219, 220, 221, 222,
- 223, 224, 225, 226, 227, 228, 229, 230, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 245,
+ 91, 70, 91, 0, 168, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 91, 91,
+ 0, 91, 91, 91, 91, 0, 152, 153, 154, 155,
+ 0, 93, 93, 93, 93, 0, 150, 0, 93, 0,
+ 93, 0, 160, 161, 162, 163, 0, 0, 164, 0,
+ 0, 165, 166, 167, 0, 0, 93, 93, 0, 93,
+ 93, 93, 157, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 94, 94, 94, 94, 0, 0,
+ 0, 94, 0, 94, 0, 0, 0, 0, 0, 0,
+ 168, 0, 0, 0, 0, 0, 0, 0, 0, 94,
+ 94, 0, 94, 94, 0, 0, 0, 0, 0, 0,
+ 0, 0, 92, 92, 92, 92, 0, 0, 0, 92,
+ 0, 0, 150, 0, 144, 144, 144, 144, 0, 0,
+ 0, 144, 0, 0, 0, 0, 94, 92, 92, 0,
+ 92, 0, 0, 0, 104, 0, 0, 0, 109, 144,
+ 144, 118, 0, 0, 0, 0, 0, 0, 125, 126,
+ 127, 128, 129, 0, 0, 132, 133, 83, 83, 83,
+ 83, 0, 140, 0, 83, 0, 0, 0, 0, 0,
+ 70, 70, 70, 70, 0, 0, 0, 70, 0, 0,
+ 0, 0, 83, 83, 151, 0, 0, 0, 0, 184,
+ 152, 153, 154, 155, 0, 70, 70, 0, 0, 0,
+ 0, 0, 0, 156, 158, 159, 160, 161, 162, 163,
+ 0, 0, 164, 0, 0, 165, 166, 167, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 219, 220, 221,
+ 222, 223, 224, 225, 226, 227, 228, 229, 230, 231,
+ 232, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 151, 0, 247, 0, 0, 0, 152, 153, 154, 155,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 158, 159, 160, 161, 162, 163, 0, 0, 164, 0,
+ 0, 165, 166, 167, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 299, 0, 0,
+ 0, 301, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 315,
+ 0, 0, 317,
};
dEXT short yycheck[] = { 13,
- 36, 86, 41, 36, 40, 44, 182, 59, 59, 41,
- 93, 40, 59, 91, 91, 59, 257, 41, 257, 58,
- 59, 41, 191, 41, 63, 59, 44, 91, 91, 59,
- 329, 40, 46, 41, 93, 40, 93, 41, 257, 41,
- 58, 59, 41, 57, 122, 63, 123, 61, 97, 98,
- 99, 100, 101, 102, 93, 59, 41, 59, 41, 123,
- 123, 360, 91, 44, 297, 298, 41, 41, 276, 277,
- 40, 40, 278, 91, 40, 93, 326, 327, 0, 123,
- 59, 331, 59, 36, 59, 59, 59, 40, 59, 123,
- 123, 41, 106, 107, 123, 40, 40, 347, 123, 41,
- 40, 351, 271, 59, 41, 123, 40, 123, 44, 59,
- 260, 33, 257, 289, 36, 37, 38, 59, 40, 40,
- 42, 43, 59, 45, 40, 93, 41, 40, 125, 143,
- 144, 145, 146, 147, 148, 149, 305, 59, 91, 91,
- 257, 36, 64, 192, 41, 266, 267, 268, 41, 270,
- 271, 44, 91, 167, 168, 169, 170, 171, 172, 173,
- 125, 41, 93, 298, 44, 58, 59, 40, 182, 91,
- 123, 249, 186, 187, 41, 189, 254, 191, 58, 59,
- 41, 350, 41, 63, 198, 0, 200, 201, 41, 41,
- 41, 205, 40, 93, 41, 93, 59, 125, 59, 125,
- 93, 123, 125, 125, 126, 125, 257, 41, 125, 59,
- 41, 91, 123, 93, 297, 298, 41, 231, 33, 233,
- 234, 36, 37, 38, 257, 40, 59, 42, 43, 262,
- 45, 40, 93, 272, 273, 274, 275, 314, 297, 298,
- 297, 298, 281, 123, 59, 297, 298, 41, 41, 64,
- 297, 298, 337, 123, 272, 273, 274, 275, 297, 298,
- 296, 300, 301, 281, 0, 297, 298, 123, 282, 287,
- 288, 289, 290, 297, 298, 289, 91, 297, 298, 297,
- 298, 59, 300, 301, 302, 303, 304, 305, 306, 297,
- 298, 309, 41, 307, 312, 313, 314, 33, 297, 298,
- 36, 37, 38, 41, 40, 258, 42, 43, 123, 45,
- 125, 126, 297, 298, 297, 298, 297, 298, 297, 298,
- 297, 298, 41, 59, 297, 298, 297, 298, 64, 297,
- 298, 59, 346, 41, 256, 257, 258, 259, 260, 261,
- 41, 263, 264, 265, 266, 267, 268, 269, 270, 271,
- 272, 273, 274, 275, 59, 91, 8, 279, 280, 32,
- 282, 283, 284, 285, 286, 125, 297, 298, 63, 291,
- 292, 293, 294, 295, 296, 13, 144, 299, 307, 272,
- 273, 274, 275, 346, 189, 96, 308, 123, 310, 311,
- 126, -1, 272, 273, 274, 275, 91, 297, 298, 297,
- 298, 281, -1, -1, 297, 298, 91, 287, 288, 289,
- 290, 272, 273, 274, 275, -1, -1, 297, 298, -1,
- 300, 301, 302, 303, 304, 305, 306, -1, 123, 309,
- 91, -1, 312, 313, 314, -1, 297, 298, 123, -1,
- -1, 256, 257, 258, 259, 260, 261, -1, 263, 264,
- 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
- 275, -1, 123, -1, 279, 280, -1, 282, 283, 284,
- 285, 286, 272, 273, 274, 275, 291, 292, 293, 294,
- 295, 296, 41, -1, 299, 44, 91, -1, -1, -1,
- -1, -1, -1, 308, -1, 310, 311, 297, 298, 58,
- 59, -1, -1, -1, 63, -1, 266, 267, 268, -1,
- 270, 271, -1, -1, -1, -1, -1, -1, 123, -1,
- 256, 257, 258, 259, 260, 261, 125, 263, 264, 265,
- -1, -1, 91, 269, 93, -1, 272, 273, 274, 275,
+ 41, 36, 86, 41, 91, 40, 44, 59, 91, 59,
+ 59, 93, 36, 183, 59, 59, 41, 91, 41, 331,
+ 58, 59, 91, 40, 257, 63, 41, 297, 298, 257,
+ 41, 59, 46, 40, 43, 41, 123, 276, 277, 257,
+ 123, 41, 51, 57, 41, 91, 41, 61, 59, 123,
+ 362, 44, 40, 59, 123, 93, 328, 329, 0, 40,
+ 192, 333, 41, 40, 40, 36, 40, 40, 40, 40,
+ 59, 278, 59, 123, 91, 123, 122, 349, 123, 40,
+ 59, 353, 91, 123, 97, 98, 99, 100, 101, 102,
+ 59, 33, 106, 107, 36, 37, 38, 59, 40, 123,
+ 42, 43, 260, 45, 44, 114, 123, 59, 41, 41,
+ 41, 257, 40, 122, 40, 125, 40, 59, 41, 41,
+ 91, 291, 64, 91, 41, 41, 59, 59, 59, 143,
+ 144, 145, 146, 147, 148, 149, 150, 59, 257, 36,
+ 91, 273, 59, 93, 91, 41, 298, 125, 44, 91,
+ 40, 40, 123, 0, 168, 169, 170, 171, 172, 173,
+ 174, 41, 58, 59, 41, 41, 41, 63, 93, 183,
+ 41, 41, 123, 187, 188, 307, 190, 91, 192, 125,
+ 193, 123, 93, 125, 126, 199, 33, 201, 202, 36,
+ 37, 38, 206, 40, 59, 42, 43, 93, 45, 266,
+ 267, 268, 59, 270, 271, 251, 289, 290, 257, 123,
+ 256, 41, 59, 125, 123, 297, 298, 64, 125, 233,
+ 352, 235, 236, 306, 125, 93, 309, 314, 41, 312,
+ 313, 314, 125, 257, 272, 273, 274, 275, 262, 41,
+ 41, 279, 251, 281, 91, 297, 298, 256, 0, 287,
+ 288, 289, 290, 297, 298, 339, 297, 298, 59, 297,
+ 298, 296, 300, 301, 302, 303, 304, 305, 306, 59,
+ 284, 309, 297, 298, 297, 298, 123, 291, 125, 126,
+ 40, 33, 297, 298, 36, 37, 38, 258, 40, 93,
+ 42, 43, 93, 45, 93, 309, 41, 297, 298, 41,
+ 297, 298, 297, 298, 297, 298, 123, 59, 297, 298,
+ 297, 298, 64, 125, 256, 257, 258, 259, 260, 261,
+ 123, 263, 264, 265, 266, 267, 268, 269, 270, 271,
+ 272, 273, 274, 275, 348, 297, 298, 279, 280, 91,
+ 282, 283, 284, 285, 286, 297, 298, 297, 298, 291,
+ 292, 293, 294, 295, 296, 306, 91, 299, 309, 41,
+ 41, 312, 313, 314, 59, 41, 308, 59, 310, 311,
+ 41, 123, 297, 298, 126, 59, 272, 273, 274, 275,
+ 41, 8, 32, 279, 13, 281, 297, 298, 123, 144,
+ 348, 287, 288, 41, 309, 309, 44, 190, 312, 313,
+ 314, 297, 298, 96, 300, 301, 302, 303, 304, 256,
+ 257, 258, 259, 260, 261, 63, 263, 264, 265, 266,
+ 267, 268, 269, 270, 271, 272, 273, 274, 275, 297,
+ 298, -1, 279, 280, -1, 282, 283, 284, 285, 286,
+ -1, -1, -1, 91, 291, 292, 293, 294, 295, 296,
+ 125, -1, 299, 91, 266, 267, 268, -1, 270, 271,
+ -1, 308, -1, 310, 311, -1, 41, -1, -1, 44,
+ -1, 272, 273, 274, 275, 123, -1, -1, 279, -1,
+ -1, -1, -1, 58, 59, 123, -1, -1, 63, -1,
+ -1, -1, -1, 297, 298, -1, 297, 298, 297, 298,
+ -1, -1, -1, -1, 256, 257, 258, 259, 260, 261,
+ -1, 263, 264, 265, -1, -1, 91, 269, 93, -1,
+ 272, 273, 274, 275, -1, -1, -1, 279, 280, -1,
+ 282, 283, 284, 285, 286, -1, -1, -1, -1, 291,
+ 292, 293, 294, 295, 296, -1, -1, 299, 123, -1,
+ -1, -1, 287, 288, 289, 290, 308, 33, 310, 311,
+ 36, 37, 38, -1, 40, 41, 42, 43, 44, 45,
+ 305, 306, -1, -1, 309, -1, -1, 312, 313, 314,
+ -1, -1, 58, 59, -1, -1, -1, 63, 64, -1,
+ -1, 266, 267, 268, -1, 270, 271, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 272, 273, 274, 275,
+ -1, -1, -1, 279, -1, 91, -1, 93, 33, -1,
+ -1, 36, 37, 38, -1, 40, 41, 42, 43, 44,
+ 45, 297, 298, 281, -1, -1, -1, -1, -1, 287,
+ 288, 289, 290, 58, 59, -1, -1, 123, 63, 64,
+ 126, 289, 300, 301, 302, 303, 304, 305, 306, -1,
+ -1, 309, -1, -1, 312, 313, 314, -1, 306, -1,
+ -1, 309, -1, -1, 312, 313, 314, 33, 93, -1,
+ 36, 37, 38, -1, 40, -1, 42, 43, -1, 45,
+ -1, -1, -1, -1, -1, -1, -1, 272, 273, 274,
+ 275, -1, -1, 59, 279, -1, 281, -1, 64, -1,
+ -1, 126, 287, 288, 289, 290, 304, 305, 306, -1,
+ 308, -1, 297, 298, -1, 300, 301, 302, 303, 304,
+ 305, 306, -1, -1, 309, 91, -1, 312, 313, 314,
+ -1, -1, 41, -1, -1, 44, -1, 335, -1, -1,
+ -1, -1, -1, -1, 342, -1, -1, -1, 346, -1,
+ 59, -1, -1, 91, -1, -1, -1, 123, -1, -1,
+ 126, 359, 360, -1, -1, -1, -1, -1, -1, -1,
+ -1, 257, 258, 259, 260, 261, -1, 263, 264, 265,
+ -1, -1, -1, 269, 93, 123, 272, 273, 274, 275,
+ -1, -1, -1, 279, 280, 281, 282, 283, 284, 285,
+ 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
+ 296, 297, 298, 299, 300, 301, 302, 303, 304, 305,
+ 306, -1, 308, 309, 310, 311, 312, 313, 314, -1,
+ -1, -1, 257, 258, 259, 260, 261, -1, 263, 264,
+ 265, -1, -1, -1, 269, -1, -1, 272, 273, 274,
+ 275, -1, -1, -1, 279, 280, 281, 282, 283, 284,
+ 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
+ 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
+ 305, 306, -1, 308, 309, 310, 311, 312, 313, 314,
+ 256, 257, 258, 259, 260, 261, -1, 263, 264, 265,
+ -1, -1, -1, 269, -1, 91, 272, 273, 274, 275,
-1, -1, -1, 279, 280, -1, 282, 283, 284, 285,
286, -1, -1, -1, -1, 291, 292, 293, 294, 295,
- 296, -1, -1, 299, 123, -1, -1, -1, -1, -1,
- 91, -1, 308, 33, 310, 311, 36, 37, 38, -1,
- 40, 41, 42, 43, 44, 45, 281, -1, -1, -1,
- -1, -1, 287, 288, 289, 290, -1, -1, 58, 59,
- -1, -1, 123, 63, 64, 300, 301, 302, 303, 304,
- 305, 306, -1, -1, 309, -1, -1, 312, 313, 314,
- -1, 306, -1, -1, 309, -1, -1, 312, 313, 314,
- -1, 91, -1, 93, 33, -1, -1, 36, 37, 38,
- -1, 40, 41, 42, 43, 44, 45, -1, 309, -1,
- -1, 312, 313, 314, -1, -1, -1, -1, -1, 58,
- 59, -1, -1, 123, 63, 64, 126, 266, 267, 268,
- -1, 270, 271, -1, -1, -1, -1, -1, -1, 302,
- 303, 304, -1, 306, 289, 290, -1, -1, -1, -1,
- -1, 13, -1, 33, 93, -1, 36, 37, 38, -1,
- 40, 306, 42, 43, 309, 45, -1, 312, 313, 314,
- 333, -1, -1, 272, 273, 274, 275, 340, -1, 59,
- 42, 344, 281, 45, 64, -1, -1, 126, 287, 288,
- 289, 290, -1, -1, 357, 358, -1, -1, 297, 298,
- -1, 300, 301, 302, 303, 304, 305, 306, -1, -1,
- 309, 91, -1, 312, 313, 314, -1, -1, 41, 81,
- -1, 44, -1, -1, -1, -1, 287, 288, 289, 290,
- -1, -1, -1, 95, -1, -1, 59, -1, -1, 91,
- -1, -1, -1, 123, 305, 306, 126, -1, 309, -1,
- -1, 312, 313, 314, -1, -1, -1, 257, 258, 259,
- 260, 261, -1, 263, 264, 265, -1, -1, -1, 269,
- 93, 123, 272, 273, 274, 275, -1, -1, -1, 141,
- 280, 281, 282, 283, 284, 285, 286, 287, 288, 289,
- 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
- 300, 301, 302, 303, 304, 305, 306, -1, 308, 309,
- 310, 311, 312, 313, 314, -1, 178, -1, 257, 258,
- 259, 260, 261, 185, 263, 264, 265, -1, -1, -1,
- 269, -1, -1, 272, 273, 274, 275, -1, -1, -1,
- -1, 280, 281, 282, 283, 284, 285, 286, 287, 288,
- 289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
- 299, 300, 301, 302, 303, 304, 305, 306, -1, 308,
- 309, 310, 311, 312, 313, 314, 256, 257, 258, 259,
- 260, 261, -1, 263, 264, 265, -1, -1, -1, 269,
- -1, 91, 272, 273, 274, 275, -1, -1, -1, 279,
- 280, -1, 282, 283, 284, 285, 286, -1, -1, 91,
- 43, 291, 292, 293, 294, 295, 296, 33, 51, 299,
- 36, 37, 38, 123, 40, -1, 42, 43, 308, 45,
- 310, 311, -1, -1, -1, 287, -1, 289, 290, -1,
- -1, 123, -1, 59, -1, -1, -1, -1, 64, 272,
- 273, 274, 275, 305, 306, -1, -1, 309, 91, -1,
- 312, 313, 314, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 33, 297, 91, 36, 37, 38, -1,
- 40, 114, 42, 43, 26, 45, -1, -1, -1, 122,
+ 296, 33, -1, 299, 36, 37, 38, 123, 40, -1,
+ 42, 43, 308, 45, 310, 311, -1, -1, 13, 287,
+ -1, 289, 290, -1, -1, -1, -1, 59, -1, -1,
+ -1, -1, 64, 272, 273, 274, 275, 305, 306, -1,
+ 279, 309, -1, -1, 312, 313, 314, 42, -1, -1,
+ 45, -1, -1, -1, -1, -1, -1, 33, 297, 91,
+ 36, 37, 38, -1, 40, -1, 42, 43, -1, 45,
+ -1, -1, 26, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 81, -1, 64, 43,
+ 44, 123, -1, -1, 126, -1, 50, -1, -1, -1,
+ 95, -1, -1, -1, -1, -1, -1, -1, 62, 63,
+ 64, 65, -1, 33, -1, 91, 36, 37, 38, -1,
+ 40, -1, 42, 43, -1, 45, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 43, 44, -1, 64, -1, -1, 123, 50, -1,
- 126, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 62, 63, 64, 65, -1, -1, -1, -1, -1, 33,
- -1, 91, 36, 37, 38, -1, 40, -1, 42, 43,
- -1, 45, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 64, -1, 141, 123, -1, -1,
+ 126, -1, -1, 107, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 64, -1, -1, 123, -1, 107, 126, -1, -1, -1,
+ -1, 91, -1, 289, 290, -1, 33, -1, -1, 36,
+ 37, 38, -1, 40, 179, 42, 43, -1, 45, 305,
+ 306, 186, -1, 309, -1, -1, 312, 313, 314, -1,
+ -1, -1, -1, 123, -1, -1, 126, 64, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 91, -1, 289,
- 290, -1, 33, -1, -1, 36, 37, 38, -1, 40,
- -1, 42, 43, -1, 45, 305, 306, 289, -1, 309,
- -1, -1, 312, 313, 314, -1, 249, -1, -1, 123,
- -1, 254, 126, 64, 306, -1, -1, 309, -1, -1,
- 312, 313, 314, -1, -1, -1, -1, -1, -1, -1,
- 256, 257, 258, 259, 260, 261, -1, 263, 264, 265,
- 91, -1, -1, 269, -1, -1, 272, 273, 274, 275,
- -1, -1, -1, 279, 280, -1, 282, 283, 284, 285,
+ -1, -1, -1, -1, 256, 257, 258, 259, 260, 261,
+ -1, 263, 264, 265, 91, -1, -1, 269, -1, -1,
+ 272, 273, 274, 275, -1, -1, -1, 279, 280, -1,
+ 282, 283, 284, 285, 286, -1, -1, -1, -1, 291,
+ 292, 293, 294, 295, 296, -1, 123, 299, -1, 126,
+ -1, 91, -1, -1, -1, 41, 308, -1, 310, 311,
+ -1, 257, 258, 259, 260, 261, 262, 263, 264, 265,
+ -1, -1, -1, 269, -1, -1, -1, 63, -1, -1,
+ -1, -1, -1, 123, 280, -1, 282, 283, 284, 285,
286, -1, -1, -1, -1, 291, 292, 293, 294, 295,
- 296, 91, 123, 299, -1, 126, -1, -1, -1, -1,
- -1, -1, 308, 41, 310, 311, 44, 257, 258, 259,
- 260, 261, 262, 263, 264, 265, -1, -1, -1, 269,
- -1, -1, -1, 123, -1, 63, -1, -1, -1, -1,
+ 296, -1, -1, 299, -1, 91, -1, -1, -1, -1,
+ -1, -1, 308, -1, 310, 311, -1, 257, 258, 259,
+ 260, 261, -1, 263, 264, 265, -1, -1, -1, 269,
+ 58, -1, -1, -1, -1, 63, -1, 123, -1, -1,
280, -1, 282, 283, 284, 285, 286, -1, -1, -1,
-1, 291, 292, 293, 294, 295, 296, -1, -1, 299,
- -1, -1, -1, 91, -1, -1, -1, 41, 308, -1,
- 310, 311, -1, 257, 258, 259, 260, 261, -1, 263,
- 264, 265, -1, -1, -1, 269, -1, -1, -1, 63,
- -1, -1, -1, -1, -1, 123, 280, -1, 282, 283,
- 284, 285, 286, -1, -1, -1, -1, 291, 292, 293,
- 294, 295, 296, -1, -1, 299, -1, 91, -1, -1,
- -1, -1, -1, -1, 308, -1, 310, 311, -1, -1,
- -1, -1, -1, -1, -1, -1, 257, 258, 259, 260,
- 261, -1, 263, 264, 265, -1, -1, -1, 269, 123,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 280,
- -1, 282, 283, 284, 285, 286, -1, -1, -1, 91,
- 291, 292, 293, 294, 295, 296, 33, -1, 299, 36,
- 37, 38, -1, 40, -1, 42, 43, 308, 45, 310,
- 311, -1, -1, -1, -1, -1, -1, 287, 288, 289,
- 290, 123, 59, -1, -1, -1, -1, 64, -1, -1,
+ -1, -1, -1, 91, -1, -1, -1, -1, 308, -1,
+ 310, 311, -1, -1, -1, -1, 41, -1, -1, 44,
+ 257, 258, 259, 260, 261, -1, 263, 264, 265, -1,
+ -1, -1, 269, 58, 59, 123, -1, -1, 63, -1,
+ -1, -1, -1, 280, -1, 282, 283, 284, 285, 286,
+ -1, -1, -1, -1, 291, 292, 293, 294, 295, 296,
+ 33, -1, 299, 36, 37, 38, -1, 40, 93, 42,
+ 43, 308, 45, 310, 311, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 59, 287, 288, 289,
+ 290, 64, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 301, 302, 303, 304, 305, 306, -1, -1, 309,
- -1, -1, 312, 313, 314, -1, -1, -1, -1, -1,
+ -1, -1, 312, 313, 314, -1, 33, -1, 91, 36,
+ 37, 38, -1, 40, 41, 42, 43, -1, 45, -1,
+ -1, -1, -1, -1, -1, 281, -1, -1, -1, -1,
+ -1, 287, 288, 289, 290, -1, -1, 64, -1, -1,
+ -1, -1, -1, 126, 300, 301, 302, 303, 304, 305,
+ 306, -1, -1, 309, -1, -1, 312, 313, 314, -1,
-1, -1, 33, -1, 91, 36, 37, 38, -1, 40,
- 41, 42, 43, -1, 45, -1, -1, -1, -1, -1,
+ -1, 42, 43, -1, 45, -1, -1, -1, -1, -1,
-1, -1, -1, 281, -1, -1, -1, -1, -1, 287,
288, 289, 290, 64, -1, -1, -1, -1, -1, 126,
-1, -1, 300, 301, 302, 303, 304, 305, 306, -1,
- -1, 309, -1, -1, 312, 313, 314, -1, 33, -1,
- 91, 36, 37, 38, -1, 40, -1, 42, 43, -1,
- 45, -1, -1, -1, -1, -1, -1, 281, -1, -1,
- -1, -1, -1, 287, 288, 289, 290, -1, -1, 64,
- -1, -1, -1, -1, -1, 126, 300, 301, 302, 303,
- 304, 305, 306, -1, -1, 309, -1, -1, 312, 313,
- 314, -1, -1, -1, -1, -1, 91, 33, 93, -1,
- 36, 37, 38, -1, 40, 41, 42, 43, -1, 45,
- -1, -1, -1, -1, -1, 287, 288, 289, 290, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 64, -1,
- -1, 126, 304, 305, 306, -1, -1, 309, -1, -1,
- 312, 313, 314, -1, -1, -1, 41, -1, -1, 44,
- 257, 258, 259, 260, 261, 91, 263, 264, 265, -1,
+ -1, 309, -1, -1, 312, 313, 314, -1, -1, -1,
+ 91, 33, 93, -1, 36, 37, 38, -1, 40, 41,
+ 42, 43, -1, 45, -1, -1, -1, 272, 273, 274,
+ 275, -1, -1, -1, 279, -1, 281, -1, -1, -1,
+ -1, -1, 64, 288, -1, 126, -1, -1, -1, -1,
+ -1, -1, 297, 298, -1, 300, 301, 302, 303, 304,
+ 41, -1, -1, 44, 257, 258, 259, 260, 261, 91,
+ 263, 264, 265, -1, -1, -1, 269, 58, 59, -1,
+ -1, -1, 63, -1, -1, -1, -1, 280, -1, 282,
+ 283, 284, 285, 286, -1, -1, -1, -1, 291, 292,
+ 293, 294, 295, 296, 126, -1, 299, -1, -1, -1,
+ -1, -1, 93, -1, -1, 308, 41, 310, 311, 44,
+ 257, 258, 259, 260, 261, -1, 263, 264, 265, -1,
-1, -1, 269, 58, 59, -1, -1, -1, 63, -1,
-1, -1, -1, 280, -1, 282, 283, 284, 285, 286,
-1, -1, -1, -1, 291, 292, 293, 294, 295, 296,
- 126, -1, 299, -1, -1, -1, -1, -1, 93, -1,
- -1, 308, 41, 310, 311, 44, 257, 258, 259, 260,
- 261, -1, 263, 264, 265, -1, -1, -1, 269, 58,
- 59, -1, -1, -1, 63, -1, -1, -1, -1, 280,
- -1, 282, 283, 284, 285, 286, -1, -1, -1, -1,
- 291, 292, 293, 294, 295, 296, -1, -1, 299, -1,
- -1, -1, -1, -1, 93, -1, -1, 308, -1, 310,
- 311, -1, 257, 258, 259, 260, 261, -1, 263, 264,
- 265, -1, 33, -1, 269, 36, 37, 38, -1, 40,
- 41, 42, 43, -1, 45, 280, -1, 282, 283, 284,
- 285, 286, -1, -1, -1, -1, 291, 292, 293, 294,
- 295, 296, -1, 64, 299, -1, -1, -1, -1, -1,
- -1, -1, -1, 308, -1, 310, 311, -1, -1, -1,
- -1, 257, 258, 259, 260, 261, -1, 263, 264, 265,
- 91, 33, -1, 269, 36, 37, 38, -1, 40, -1,
- 42, 43, -1, 45, 280, -1, 282, 283, 284, 285,
- 286, -1, -1, -1, -1, 291, 292, 293, 294, 295,
- 296, -1, 64, 299, -1, 126, -1, -1, -1, -1,
- -1, -1, 308, -1, 310, 311, -1, 272, 273, 274,
- 275, -1, -1, -1, -1, -1, 281, 33, -1, 91,
- 36, 37, 38, 288, 40, 41, 42, 43, -1, 45,
- -1, -1, 297, 298, -1, 300, 301, 302, 303, 304,
- -1, -1, -1, -1, -1, -1, -1, -1, 64, -1,
- -1, -1, -1, -1, 126, -1, -1, -1, -1, -1,
- -1, -1, -1, 272, 273, 274, 275, -1, -1, -1,
- -1, -1, 281, 33, -1, 91, 36, 37, 38, -1,
- 40, 41, 42, 43, -1, 45, -1, -1, 297, 298,
- -1, 300, 301, 302, 303, 304, -1, -1, -1, -1,
- -1, -1, -1, -1, 64, -1, -1, -1, -1, -1,
- 126, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 257, 258, 259, 260,
- 261, 91, 263, 264, 265, -1, 33, -1, 269, 36,
+ -1, -1, 299, -1, -1, -1, -1, -1, 93, -1,
+ -1, 308, -1, 310, 311, -1, 257, 258, 259, 260,
+ 261, -1, 263, 264, 265, -1, 33, -1, 269, 36,
37, 38, -1, 40, 41, 42, 43, -1, 45, 280,
-1, 282, 283, 284, 285, 286, -1, -1, -1, -1,
- 291, 292, 293, 294, 295, 296, 126, 64, 299, -1,
+ 291, 292, 293, 294, 295, 296, -1, 64, 299, -1,
-1, -1, -1, -1, -1, -1, -1, 308, -1, 310,
- 311, -1, -1, -1, 256, 257, 258, 259, 260, 261,
- -1, 263, 264, 265, 91, -1, -1, 269, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 280, -1,
+ 311, -1, -1, -1, -1, 257, 258, 259, 260, 261,
+ -1, 263, 264, 265, 91, 33, -1, 269, 36, 37,
+ 38, -1, 40, -1, 42, 43, -1, 45, 280, -1,
282, 283, 284, 285, 286, -1, -1, -1, -1, 291,
- 292, 293, 294, 295, 296, -1, -1, 299, -1, 126,
- 91, -1, -1, -1, 41, -1, 308, 44, 310, 311,
- -1, 257, 258, 259, 260, 261, -1, 263, 264, 265,
- -1, 58, 59, 269, -1, -1, 63, -1, -1, -1,
- -1, -1, 123, -1, 280, -1, 282, 283, 284, 285,
- 286, -1, -1, -1, -1, 291, 292, 293, 294, 295,
- 296, -1, -1, 299, 91, -1, 93, -1, -1, -1,
- -1, -1, 308, -1, 310, 311, -1, 257, 258, 259,
- 260, 261, -1, 263, 264, 265, -1, 33, -1, 269,
- 36, 37, 38, -1, 40, -1, 42, 43, -1, 45,
- 280, -1, 282, 283, 284, 285, 286, -1, -1, -1,
- -1, 291, 292, 293, 294, 295, 296, -1, 64, 299,
- -1, -1, -1, -1, -1, -1, -1, -1, 308, -1,
- 310, 311, -1, -1, -1, -1, 41, -1, -1, 44,
+ 292, 293, 294, 295, 296, -1, 64, 299, -1, 126,
+ -1, -1, -1, -1, -1, -1, 308, -1, 310, 311,
+ -1, 272, 273, 274, 275, -1, -1, -1, 279, -1,
+ 281, 33, -1, 91, 36, 37, 38, -1, 40, 41,
+ 42, 43, -1, 45, -1, -1, 297, 298, -1, 300,
+ 301, 302, 303, 304, -1, -1, -1, -1, -1, -1,
+ -1, -1, 64, -1, -1, -1, -1, -1, 126, -1,
+ -1, -1, -1, -1, -1, -1, -1, 272, 273, 274,
+ 275, -1, -1, -1, 279, -1, 281, 33, -1, 91,
+ 36, 37, 38, -1, 40, 41, 42, 43, -1, 45,
+ -1, -1, 297, 298, -1, 300, 301, 302, 303, 304,
+ -1, -1, -1, -1, -1, -1, -1, -1, 64, -1,
+ -1, -1, -1, -1, 126, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
257, 258, 259, 260, 261, 91, 263, 264, 265, -1,
- -1, -1, 269, 58, 59, -1, -1, -1, 63, -1,
- -1, -1, -1, 280, -1, 282, 283, 284, 285, 286,
+ 33, -1, 269, 36, 37, 38, -1, 40, 41, 42,
+ 43, -1, 45, 280, -1, 282, 283, 284, 285, 286,
-1, -1, -1, -1, 291, 292, 293, 294, 295, 296,
- 126, -1, 299, 41, -1, -1, 44, -1, 93, -1,
- -1, 308, -1, 310, 311, -1, -1, -1, -1, -1,
- 58, 59, -1, -1, -1, 63, 287, 288, 289, 290,
- -1, -1, -1, -1, -1, -1, -1, -1, 123, -1,
- -1, 302, 303, 304, 305, 306, -1, -1, 309, -1,
- -1, 312, 313, 314, -1, 93, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 272, 273, 274, 275, -1,
- 41, -1, -1, -1, 281, -1, -1, -1, -1, -1,
- 287, 288, 289, 290, -1, 123, -1, 58, 59, -1,
- 297, 298, 63, 300, 301, 302, 303, 304, 305, 306,
- -1, -1, 309, -1, -1, 312, 313, 314, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 91, -1, 93, -1, 41, -1, -1, -1, -1, -1,
+ 126, 64, 299, -1, -1, -1, -1, -1, -1, -1,
+ -1, 308, -1, 310, 311, -1, -1, -1, 256, 257,
+ 258, 259, 260, 261, -1, 263, 264, 265, 91, -1,
+ -1, 269, 41, -1, -1, 44, -1, -1, -1, -1,
+ -1, -1, 280, -1, 282, 283, 284, 285, 286, 58,
+ 59, -1, -1, 291, 292, 293, 294, 295, 296, -1,
+ -1, 299, -1, 126, -1, -1, -1, -1, -1, -1,
+ 308, -1, 310, 311, -1, 257, 258, 259, 260, 261,
+ -1, 263, 264, 265, 93, -1, -1, 269, 41, -1,
+ -1, 44, -1, -1, -1, -1, -1, -1, 280, -1,
+ 282, 283, 284, 285, 286, 58, 59, -1, -1, 291,
+ 292, 293, 294, 295, 296, -1, -1, 299, -1, -1,
+ -1, -1, -1, -1, -1, -1, 308, -1, 310, 311,
-1, 257, 258, 259, 260, 261, -1, 263, 264, 265,
- -1, 58, 59, 269, -1, -1, 63, -1, -1, -1,
- -1, -1, 123, -1, 280, -1, 282, 283, 284, 285,
+ 93, 33, -1, 269, 36, 37, 38, -1, 40, -1,
+ 42, 43, -1, 45, 280, -1, 282, 283, 284, 285,
286, -1, -1, -1, -1, 291, 292, 293, 294, 295,
- 296, -1, -1, 299, 91, -1, 93, -1, -1, -1,
- 41, -1, 308, 44, 310, 311, -1, 272, 273, 274,
- 275, -1, -1, -1, -1, -1, 281, 58, 59, -1,
- -1, -1, 287, 288, 289, 290, 123, -1, -1, -1,
- -1, -1, 297, 298, -1, 300, 301, 302, 303, 304,
- 305, 306, -1, -1, 309, -1, -1, 312, 313, 314,
- -1, -1, 93, -1, 272, 273, 274, 275, -1, 41,
- -1, -1, 44, 281, -1, -1, -1, -1, -1, 287,
- 288, 289, 290, -1, -1, -1, 58, 59, -1, 297,
- 298, 63, 300, 301, 302, 303, 304, 305, 306, 25,
- 26, 309, -1, -1, 312, 313, 314, -1, -1, -1,
- -1, 37, -1, -1, -1, -1, -1, 43, 44, 45,
- -1, 93, -1, -1, 50, -1, -1, -1, -1, -1,
- -1, 272, 273, 274, 275, -1, 62, 63, 64, 65,
- 281, -1, -1, -1, -1, -1, 287, 288, 289, 290,
- -1, 123, 41, -1, -1, 44, 297, 298, -1, 300,
- 301, 302, 303, 304, 305, 306, -1, -1, 309, 58,
- 59, 312, 313, 314, 63, -1, -1, -1, -1, -1,
- -1, 107, -1, -1, -1, 272, 273, 274, 275, -1,
- -1, -1, -1, -1, 281, -1, -1, -1, -1, -1,
- 287, 288, 289, 290, 93, -1, 41, -1, -1, -1,
- 297, 298, -1, 300, 301, 302, 303, 304, 305, 306,
- -1, -1, 309, 58, 59, 312, 313, 314, 63, -1,
- -1, -1, -1, -1, 123, -1, -1, -1, -1, -1,
- 166, 272, 273, 274, 275, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 41, -1, 91, 44, 93, -1,
- -1, -1, -1, -1, 190, -1, 297, 298, -1, 300,
- -1, 58, 59, -1, -1, -1, 63, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 123, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 272, 273, 274, 275, -1, 41, 93, -1, 44, 281,
- -1, -1, -1, -1, -1, 287, 288, 289, 290, -1,
- -1, -1, 58, 59, -1, 297, 298, 63, 300, 301,
- 302, 303, 304, 305, 306, -1, 123, 309, -1, -1,
- 312, 313, 314, -1, -1, -1, -1, -1, -1, -1,
- 41, -1, -1, 44, -1, -1, -1, 93, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 58, 59, -1,
- -1, -1, 63, -1, -1, -1, -1, -1, -1, -1,
+ 296, -1, 64, 299, -1, -1, -1, -1, -1, -1,
+ -1, -1, 308, -1, 310, 311, -1, -1, -1, -1,
+ 41, -1, -1, 44, 257, 258, 259, 260, 261, 91,
+ 263, 264, 265, -1, -1, -1, 269, 58, 59, -1,
+ -1, -1, 63, -1, -1, -1, -1, 280, -1, 282,
+ 283, 284, 285, 286, -1, -1, -1, -1, 291, 292,
+ 293, 294, 295, 296, 126, 41, 299, -1, 44, -1,
+ 91, -1, 93, -1, -1, 308, -1, 310, 311, -1,
+ -1, -1, 58, 59, -1, -1, -1, 63, -1, -1,
-1, -1, -1, 272, 273, 274, 275, -1, -1, -1,
- -1, -1, 281, -1, -1, -1, -1, -1, 287, 288,
- 289, 290, 93, -1, 41, -1, -1, 44, 297, 298,
- -1, 300, 301, 302, 303, 304, 305, 306, -1, -1,
- 309, 58, 59, 312, 313, 314, 63, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 272, 273, 274,
- 275, -1, -1, -1, -1, -1, 281, -1, -1, -1,
- -1, -1, 287, 288, 289, 290, 93, -1, -1, -1,
- -1, -1, 297, 298, -1, 300, 301, 302, 303, 304,
- 305, 306, -1, -1, 309, -1, -1, 312, 313, 314,
- -1, -1, -1, -1, -1, 272, 273, 274, 275, -1,
- 41, -1, -1, 44, 281, -1, -1, -1, -1, -1,
- 287, 288, 289, 290, -1, -1, -1, 58, 59, -1,
- 297, 298, 63, 300, 301, 302, 303, 304, 305, 306,
- -1, -1, 309, -1, -1, 312, 313, 314, -1, -1,
- -1, -1, -1, -1, -1, -1, 272, 273, 274, 275,
- -1, 41, 93, -1, 44, 281, -1, -1, -1, -1,
+ 279, -1, 123, -1, -1, -1, -1, -1, 41, -1,
+ -1, 44, -1, -1, -1, 91, -1, 93, 297, 298,
+ -1, 300, -1, -1, -1, 58, 59, -1, -1, -1,
+ 63, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 123, -1, 272,
+ 273, 274, 275, -1, 41, -1, 279, 44, -1, -1,
+ 93, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 58, 59, -1, 297, 298, 63, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 123, -1, -1, -1, -1, 257, 258, 259, 260, 261,
+ -1, 263, 264, 265, 91, -1, 93, 269, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 280, -1,
+ 282, 283, 284, 285, 286, -1, -1, -1, -1, 291,
+ 292, 293, 294, 295, 296, -1, -1, 299, -1, 91,
+ -1, -1, -1, -1, -1, -1, 308, -1, 310, 311,
+ -1, 272, 273, 274, 275, -1, -1, -1, 279, -1,
+ 281, -1, -1, -1, -1, -1, 287, 288, 289, 290,
+ -1, 123, -1, -1, -1, -1, 297, 298, -1, 300,
+ 301, 302, 303, 304, 305, 306, -1, -1, 309, -1,
+ -1, 312, 313, 314, -1, -1, 272, 273, 274, 275,
+ -1, 41, -1, 279, 44, 281, -1, -1, -1, -1,
-1, 287, 288, 289, 290, -1, -1, -1, 58, 59,
-1, 297, 298, 63, 300, 301, 302, 303, 304, 305,
- 306, -1, -1, 309, -1, -1, 312, 313, 314, -1,
- -1, 272, 273, 274, 275, -1, -1, -1, -1, -1,
- 281, -1, -1, 93, -1, -1, 287, 288, 289, 290,
- -1, -1, 41, -1, -1, 44, 297, 298, -1, 300,
- 301, 302, 303, 304, 305, 306, -1, -1, 309, 58,
- 59, 312, 313, 314, 63, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 272, 273, 274, 275, -1,
- 41, -1, -1, 44, 281, -1, -1, -1, -1, -1,
- 287, 288, 289, 290, 93, -1, -1, 58, 59, -1,
+ 306, -1, -1, 309, -1, -1, 312, 313, 314, 272,
+ 273, 274, 275, -1, -1, -1, 279, -1, 281, -1,
+ -1, -1, -1, 93, 287, 288, 289, 290, -1, -1,
+ -1, -1, -1, -1, 297, 298, -1, 300, 301, 302,
+ 303, 304, 305, 306, -1, -1, 309, -1, -1, 312,
+ 313, 314, -1, 123, -1, 272, 273, 274, 275, 91,
+ 41, -1, 279, -1, 281, -1, -1, -1, -1, -1,
+ 287, 288, 289, 290, -1, -1, -1, 58, 59, -1,
297, 298, 63, 300, 301, 302, 303, 304, 305, 306,
- -1, -1, 309, -1, -1, 312, 313, 314, -1, 41,
- -1, -1, 44, -1, -1, -1, -1, -1, -1, -1,
- 41, -1, 93, 44, -1, -1, 58, 59, -1, -1,
- -1, 63, -1, -1, -1, -1, -1, 58, 59, -1,
- -1, -1, 63, -1, -1, -1, -1, -1, -1, -1,
- -1, 272, 273, 274, 275, -1, 41, -1, -1, 44,
- 281, 93, -1, -1, -1, -1, 287, 288, 289, 290,
- -1, -1, 93, 58, 59, -1, 297, 298, 63, 300,
- 301, 302, 303, 304, 305, 306, -1, -1, 309, -1,
- -1, 312, 313, 314, -1, -1, -1, -1, -1, -1,
- -1, -1, 272, 273, 274, 275, -1, 41, 93, -1,
- 44, 281, -1, -1, -1, -1, -1, 287, 288, 289,
- 290, -1, -1, -1, 58, 59, -1, 297, 298, 63,
- 300, 301, 302, 303, 304, 305, 306, -1, -1, 309,
+ -1, 123, 309, -1, -1, 312, 313, 314, -1, -1,
+ -1, -1, -1, 41, -1, 287, 288, 289, 290, -1,
+ 91, -1, 93, -1, -1, -1, -1, -1, -1, -1,
+ 58, 59, 304, 305, 306, 63, -1, 309, -1, -1,
+ 312, 313, 314, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 123, -1, -1, -1, -1, 41, -1, -1,
+ 44, -1, -1, 91, -1, 93, -1, -1, -1, -1,
+ -1, -1, -1, -1, 58, 59, -1, -1, -1, 63,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 41, -1, -1, 44, -1, -1, 93,
- -1, -1, -1, 272, 273, 274, 275, -1, -1, -1,
- 58, 59, 281, -1, -1, 63, -1, -1, 287, 288,
- 289, 290, -1, -1, -1, -1, -1, -1, 297, 298,
- -1, 300, 301, 302, 303, 304, 305, 306, -1, -1,
- 309, 272, 273, 274, 275, 93, -1, -1, -1, -1,
- 281, -1, -1, -1, -1, -1, 287, 288, 289, 290,
- -1, -1, -1, -1, -1, -1, 297, 298, -1, 300,
- 301, 302, 303, 304, 305, 306, -1, -1, -1, -1,
- 272, 273, 274, 275, -1, 41, -1, -1, 44, 281,
- -1, 272, 273, 274, 275, 287, 288, 289, 290, -1,
- 281, -1, 58, 59, -1, 297, 298, 63, 300, 301,
- 302, 303, 304, 305, 306, -1, 297, 298, -1, 300,
- 301, 302, 303, 304, -1, -1, -1, 272, 273, 274,
- 275, -1, 41, -1, -1, 44, 281, 93, -1, -1,
+ -1, -1, -1, -1, -1, 123, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 93,
+ -1, -1, 272, 273, 274, 275, -1, -1, -1, 279,
+ -1, 281, -1, -1, -1, -1, -1, 287, 288, 289,
+ 290, -1, -1, 41, -1, -1, 44, 297, 298, 123,
+ 300, 301, 302, 303, 304, 305, 306, -1, -1, 309,
+ 58, 59, 312, 313, 314, 63, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 287, 288, 289, 290, -1,
+ -1, -1, -1, -1, -1, -1, 41, -1, -1, 44,
+ 302, 303, 304, 305, 306, 93, -1, 309, -1, -1,
+ 312, 313, 314, 58, 59, -1, -1, -1, 63, -1,
+ -1, 272, 273, 274, 275, -1, -1, -1, 279, -1,
+ 281, -1, -1, -1, -1, 123, 287, 288, 289, 290,
+ -1, -1, -1, -1, -1, -1, 297, 298, 93, 300,
+ 301, 302, 303, 304, 305, 306, -1, -1, 309, -1,
+ -1, 312, 313, 314, 272, 273, 274, 275, -1, 41,
+ -1, 279, -1, 281, -1, -1, -1, -1, 123, 287,
+ 288, 289, 290, -1, -1, -1, 58, 59, -1, 297,
+ 298, 63, 300, 301, 302, 303, 304, 305, 306, -1,
+ -1, 309, -1, -1, 312, 313, 314, -1, 272, 273,
+ 274, 275, -1, 41, -1, 279, 44, 281, -1, 91,
+ -1, 93, -1, 287, 288, 289, 290, -1, -1, -1,
+ 58, 59, -1, 297, 298, 63, 300, 301, 302, 303,
+ 304, 305, 306, -1, -1, 309, -1, -1, 312, 313,
+ 314, 123, -1, -1, -1, -1, 41, 25, 26, 44,
+ -1, -1, -1, -1, -1, 93, -1, -1, -1, 37,
+ -1, -1, -1, 58, 59, 43, 44, 45, 63, -1,
+ -1, -1, 50, -1, 272, 273, 274, 275, -1, -1,
+ -1, 279, -1, 281, 62, 63, 64, 65, -1, 287,
+ 288, 289, 290, -1, -1, -1, -1, -1, 93, 297,
+ 298, -1, 300, 301, 302, 303, 304, 305, 306, -1,
+ -1, 309, -1, -1, 312, 313, 314, 272, 273, 274,
+ 275, -1, 41, -1, 279, 44, 281, -1, -1, 107,
-1, -1, 287, 288, 289, 290, -1, -1, -1, 58,
59, -1, 297, 298, 63, 300, 301, 302, 303, 304,
- 305, 306, -1, -1, -1, -1, -1, -1, 41, -1,
- -1, 44, -1, -1, -1, -1, -1, -1, 272, 273,
- 274, 275, -1, -1, 93, 58, 59, 281, -1, -1,
- 63, -1, -1, 287, 288, 289, 290, -1, -1, -1,
- -1, -1, -1, 297, 298, -1, 300, 301, 302, 303,
- 304, 305, 306, 41, -1, -1, 44, -1, -1, -1,
- 93, -1, -1, -1, 272, 273, 274, 275, -1, -1,
- 58, 59, -1, 281, -1, 63, -1, -1, -1, 287,
- 288, 289, 290, -1, -1, -1, -1, -1, -1, 297,
- 298, -1, 300, 301, 302, 303, 304, 305, 306, 41,
- -1, -1, 44, -1, -1, 93, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 58, 59, -1, -1,
+ 305, 306, -1, -1, 309, -1, -1, 312, 313, 314,
+ -1, -1, -1, -1, -1, 41, -1, -1, 44, -1,
+ -1, -1, -1, -1, 93, -1, -1, -1, -1, -1,
+ -1, -1, 58, 59, -1, -1, -1, 63, -1, 167,
+ 272, 273, 274, 275, -1, -1, -1, 279, -1, 281,
+ -1, -1, -1, -1, -1, 287, 288, 289, 290, -1,
+ -1, -1, -1, 191, -1, 297, 298, 93, 300, 301,
+ 302, 303, 304, 305, 306, -1, -1, 309, -1, -1,
+ 312, 313, 314, -1, 272, 273, 274, 275, -1, 41,
+ -1, 279, 44, 281, -1, -1, -1, -1, -1, 287,
+ 288, 289, 290, -1, -1, -1, 58, 59, -1, 297,
+ 298, 63, 300, 301, 302, 303, 304, 305, 306, -1,
+ -1, 309, -1, -1, 312, 313, 314, 272, 273, 274,
+ 275, -1, 41, -1, 279, 44, 281, -1, -1, -1,
+ -1, 93, 287, 288, 289, 290, -1, -1, -1, 58,
+ 59, -1, 297, 298, 63, 300, 301, 302, 303, 304,
+ 305, 306, -1, -1, 309, -1, -1, 312, 313, 314,
+ 41, -1, -1, 44, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 93, -1, -1, 58, 59, -1,
+ -1, -1, 63, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 272, 273, 274, 275, -1, 41, -1,
+ 279, 44, 281, -1, -1, -1, -1, -1, 287, 288,
+ 289, 290, 93, -1, -1, 58, 59, -1, 297, 298,
+ 63, 300, 301, 302, 303, 304, 305, 306, -1, -1,
+ 309, -1, -1, 312, 313, 314, 272, 273, 274, 275,
+ -1, 41, -1, 279, 44, 281, -1, -1, -1, -1,
+ 93, 287, 288, 289, 290, -1, -1, -1, 58, 59,
+ -1, 297, 298, 63, 300, 301, 302, 303, 304, 305,
+ 306, -1, -1, 309, -1, -1, 312, 313, 314, 41,
+ -1, -1, 44, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 93, -1, -1, 58, 59, -1, -1,
-1, 63, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 41, -1, -1, 44, -1, -1,
- -1, 93, -1, -1, -1, -1, 272, 273, 274, 275,
- -1, 58, 59, -1, -1, 281, 63, -1, -1, -1,
- -1, 287, 288, 289, 290, -1, -1, -1, -1, -1,
- -1, 297, 298, -1, 300, 301, 302, 303, 304, 305,
- 306, 41, -1, -1, 44, -1, 93, -1, -1, -1,
- -1, -1, -1, 272, 273, 274, 275, -1, 58, 59,
- -1, -1, 281, 63, -1, -1, -1, -1, 287, 288,
- 289, 290, -1, -1, -1, -1, -1, 41, 297, 298,
- 44, 300, 301, 302, 303, 304, 305, 306, -1, 272,
- 273, 274, 275, 93, 58, 59, -1, -1, 281, 63,
- -1, -1, -1, -1, 287, 288, 289, 290, -1, -1,
- -1, -1, -1, -1, 297, 298, -1, 300, 301, 302,
- 303, 304, 305, 41, -1, -1, 44, -1, -1, 93,
- -1, -1, -1, -1, 272, 273, 274, 275, -1, -1,
- 58, 59, -1, 281, -1, 63, -1, -1, -1, 287,
- 288, -1, 290, -1, -1, -1, -1, -1, -1, 297,
- 298, -1, 300, 301, 302, 303, 304, 305, 41, -1,
- -1, 44, -1, -1, -1, 93, -1, -1, -1, -1,
- 272, 273, 274, 275, -1, 58, 59, -1, -1, 281,
- 63, -1, 91, -1, -1, 287, 288, -1, -1, -1,
- 41, -1, -1, 44, -1, 297, 298, -1, 300, 301,
- 302, 303, 304, 305, -1, -1, -1, 58, 59, -1,
- 93, -1, 63, -1, 123, 272, 273, 274, 275, -1,
- -1, -1, -1, -1, 281, -1, -1, -1, -1, -1,
- 287, 288, 41, -1, -1, 44, -1, -1, -1, -1,
- 297, 298, 93, 300, 301, 302, 303, 304, -1, 58,
- 59, -1, 41, -1, 63, 44, -1, -1, -1, -1,
- -1, -1, 272, 273, 274, 275, -1, -1, -1, 58,
- 59, 281, -1, -1, -1, 58, -1, 287, 288, 41,
- 63, -1, 44, -1, 93, -1, -1, 297, 298, -1,
- 300, 301, 302, 303, 304, -1, 58, 59, 272, 273,
- 274, 275, -1, -1, 93, -1, -1, 281, 91, -1,
- -1, -1, -1, 287, 288, 41, -1, -1, 44, -1,
- -1, -1, -1, 297, 298, -1, 300, 301, 302, 303,
- 304, 93, 58, 59, -1, -1, -1, -1, -1, -1,
- 123, -1, -1, -1, 272, 273, 274, 275, -1, -1,
- -1, -1, -1, 281, -1, -1, -1, -1, -1, 287,
- 288, -1, -1, -1, -1, -1, -1, 93, -1, 297,
- 298, 63, 300, 301, 302, 303, 304, -1, 287, 288,
- 289, 290, -1, -1, -1, -1, -1, -1, -1, 272,
- 273, 274, 275, -1, 303, 304, 305, 306, 281, 91,
- 309, -1, -1, 312, 313, 314, -1, -1, -1, -1,
- -1, -1, -1, -1, 297, 298, -1, 300, 301, 302,
- 303, 272, 273, 274, 275, -1, -1, -1, -1, -1,
- 281, 123, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 297, 298, -1, 300,
- 301, 302, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 272, 273, 274, 275, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 272, 273, 274, 275, -1, 297, 298,
- -1, 300, -1, -1, -1, -1, -1, -1, 281, -1,
- -1, -1, -1, -1, 287, 288, 289, 290, 297, 298,
- 272, 273, 274, 275, -1, -1, -1, 300, 301, 302,
- 303, 304, 305, 306, -1, -1, 309, -1, -1, 312,
- 313, 314, -1, -1, -1, 297, 298, -1, -1, -1,
- -1, -1, -1, -1, 30, -1, 272, 273, 274, 275,
- -1, -1, 38, -1, -1, -1, 42, -1, -1, 45,
- -1, -1, -1, -1, -1, -1, 52, 53, 54, 55,
- 56, 297, 298, 59, 60, -1, -1, -1, -1, -1,
- 66, -1, -1, -1, -1, -1, -1, -1, -1, 281,
+ 272, 273, 274, 275, -1, 41, -1, 279, 44, 281,
-1, -1, -1, -1, -1, 287, 288, 289, 290, -1,
- -1, -1, -1, -1, -1, -1, -1, 93, -1, 301,
+ -1, 93, 58, 59, -1, 297, 298, 63, 300, 301,
302, 303, 304, 305, 306, -1, -1, 309, -1, -1,
- 312, 313, 314, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 150, 151, 152, 153, 154, 155,
- 156, 157, 158, 159, 160, 161, 162, 163, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 175,
+ -1, -1, -1, 272, 273, 274, 275, -1, 41, -1,
+ 279, 44, 281, -1, -1, -1, -1, 93, 287, 288,
+ 289, 290, -1, -1, -1, 58, 59, -1, 297, 298,
+ 63, 300, 301, 302, 303, 304, 305, 306, -1, -1,
+ -1, 272, 273, 274, 275, -1, 41, -1, 279, 44,
+ 281, -1, -1, -1, -1, -1, 287, 288, 289, 290,
+ 93, -1, -1, 58, 59, -1, 297, 298, 63, 300,
+ 301, 302, 303, 304, 305, 306, -1, -1, -1, 272,
+ 273, 274, 275, -1, 41, -1, 279, 44, 281, -1,
+ -1, -1, -1, -1, 287, 288, 289, 290, 93, -1,
+ -1, 58, 59, -1, 297, 298, 63, 300, 301, 302,
+ 303, 304, 305, 306, -1, -1, -1, -1, -1, -1,
+ -1, -1, 272, 273, 274, 275, -1, 41, -1, 279,
+ 44, 281, -1, -1, -1, -1, 93, 287, 288, 289,
+ 290, -1, -1, -1, 58, 59, -1, 297, 298, 63,
+ 300, 301, 302, 303, 304, 305, 306, -1, -1, -1,
+ 272, 273, 274, 275, -1, 41, -1, 279, 44, 281,
+ -1, -1, -1, -1, -1, 287, 288, 289, 290, 93,
+ -1, -1, 58, 59, -1, 297, 298, 63, 300, 301,
+ 302, 303, 304, 305, 306, -1, 272, 273, 274, 275,
+ -1, 41, -1, 279, 44, 281, -1, -1, -1, -1,
+ -1, 287, 288, 289, 290, -1, -1, 93, 58, 59,
+ -1, 297, 298, 63, 300, 301, 302, 303, 304, 305,
+ 306, -1, -1, -1, -1, -1, -1, -1, -1, 272,
+ 273, 274, 275, -1, 41, -1, 279, 44, 281, -1,
+ -1, -1, -1, 93, 287, 288, 289, 290, -1, -1,
+ -1, 58, 59, -1, 297, 298, 63, 300, 301, 302,
+ 303, 304, 305, 306, -1, -1, -1, 272, 273, 274,
+ 275, -1, 41, -1, 279, 44, 281, -1, -1, -1,
+ -1, -1, 287, 288, 289, 290, 93, -1, -1, 58,
+ 59, -1, 297, 298, 63, 300, 301, 302, 303, 304,
+ 305, -1, -1, -1, -1, 272, 273, 274, 275, -1,
+ 41, -1, 279, 44, 281, -1, -1, -1, -1, -1,
+ 287, 288, -1, 290, 93, -1, -1, 58, 59, -1,
+ 297, 298, 63, 300, 301, 302, 303, 304, 305, -1,
+ 91, -1, -1, -1, -1, -1, -1, -1, 272, 273,
+ 274, 275, -1, 41, -1, 279, 44, 281, -1, -1,
+ -1, -1, 93, 287, 288, -1, -1, -1, -1, -1,
+ 58, 59, 123, 297, 298, 63, 300, 301, 302, 303,
+ 304, 305, -1, -1, -1, -1, 272, 273, 274, 275,
+ -1, 41, -1, 279, 44, 281, -1, -1, -1, -1,
+ -1, 287, 288, 41, -1, 93, 44, -1, 58, 59,
+ -1, 297, 298, 63, 300, 301, 302, 303, 304, -1,
+ 58, 59, 272, 273, 274, 275, -1, -1, -1, 279,
+ -1, 281, -1, -1, -1, -1, -1, 287, 288, -1,
+ -1, -1, -1, 93, -1, -1, 41, 297, 298, 44,
+ 300, 301, 302, 303, 304, 93, -1, -1, -1, 41,
+ -1, -1, 44, 58, 59, 272, 273, 274, 275, -1,
+ -1, -1, 279, -1, 281, -1, 58, 59, -1, -1,
+ 287, 288, -1, -1, -1, -1, 63, -1, -1, -1,
+ 297, 298, -1, 300, 301, 302, 303, 304, 93, -1,
+ -1, -1, -1, 272, 273, 274, 275, -1, -1, -1,
+ 279, 93, 281, -1, 91, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 297, 298,
+ -1, 300, 301, 302, 303, -1, 287, 288, 289, 290,
+ -1, 272, 273, 274, 275, -1, 123, -1, 279, -1,
+ 281, -1, 303, 304, 305, 306, -1, -1, 309, -1,
+ -1, 312, 313, 314, -1, -1, 297, 298, -1, 300,
+ 301, 302, 63, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 272, 273, 274, 275, -1, -1,
+ -1, 279, -1, 281, -1, -1, -1, -1, -1, -1,
+ 91, -1, -1, -1, -1, -1, -1, -1, -1, 297,
+ 298, -1, 300, 301, -1, -1, -1, -1, -1, -1,
+ -1, -1, 272, 273, 274, 275, -1, -1, -1, 279,
+ -1, -1, 123, -1, 272, 273, 274, 275, -1, -1,
+ -1, 279, -1, -1, -1, -1, 30, 297, 298, -1,
+ 300, -1, -1, -1, 38, -1, -1, -1, 42, 297,
+ 298, 45, -1, -1, -1, -1, -1, -1, 52, 53,
+ 54, 55, 56, -1, -1, 59, 60, 272, 273, 274,
+ 275, -1, 66, -1, 279, -1, -1, -1, -1, -1,
+ 272, 273, 274, 275, -1, -1, -1, 279, -1, -1,
+ -1, -1, 297, 298, 281, -1, -1, -1, -1, 93,
+ 287, 288, 289, 290, -1, 297, 298, -1, -1, -1,
+ -1, -1, -1, 300, 301, 302, 303, 304, 305, 306,
+ -1, -1, 309, -1, -1, 312, 313, 314, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 151, 152, 153,
+ 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
+ 164, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 281, -1, 176, -1, -1, -1, 287, 288, 289, 290,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 301, 302, 303, 304, 305, 306, -1, -1, 309, -1,
+ -1, 312, 313, 314, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 253, -1, -1,
+ -1, 255, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 284,
+ -1, -1, 286,
};
#define YYFINAL 1
#ifndef YYDEBUG
@@ -1107,6 +1104,7 @@ dEXT char * yyrule[] = {
"sideff : expr UNLESS expr",
"sideff : expr WHILE expr",
"sideff : expr UNTIL iexpr",
+"sideff : expr FOR expr",
"else :",
"else : ELSE mblock",
"else : ELSIF '(' mexpr ')' mblock else",
@@ -1285,9 +1283,9 @@ dEXT int yyerrflag;
dEXT int yychar;
dEXT YYSTYPE yyval;
dEXT YYSTYPE yylval;
-#line 631 "perly.y"
+#line 635 "perly.y"
/* PROGRAM */
-#line 1360 "perly.c"
+#line 1349 "perly.c"
#define YYABORT goto yyabort
#define YYACCEPT goto yyaccept
#define YYERROR goto yyerrlab
@@ -1304,8 +1302,7 @@ struct ysv {
};
void
-yydestruct(ptr)
-void* ptr;
+yydestruct(void *ptr)
{
struct ysv* ysave = (struct ysv*)ptr;
if (ysave->yyss) Safefree(ysave->yyss);
@@ -1320,7 +1317,7 @@ void* ptr;
}
int
-yyparse()
+yyparse(void)
{
register int yym, yyn, yystate;
register short *yyssp;
@@ -1331,12 +1328,15 @@ yyparse()
int retval = 0;
#if YYDEBUG
register char *yys;
+#ifndef __cplusplus
# ifndef getenv
extern char *getenv();
# endif
#endif
+#endif
- struct ysv *ysave = (struct ysv*)safemalloc(sizeof(struct ysv));
+ struct ysv *ysave;
+ New(73, ysave, 1, struct ysv);
SAVEDESTRUCTOR(yydestruct, ysave);
ysave->oldyydebug = yydebug;
ysave->oldyynerrs = yynerrs;
@@ -1352,6 +1352,7 @@ yyparse()
if (yyn >= '0' && yyn <= '9')
yydebug = yyn - '0';
}
+ else SETERRNO(0,SS$_NORMAL);
#endif
yynerrs = 0;
@@ -1361,8 +1362,10 @@ yyparse()
/*
** Initialize private stacks (yyparse may be called from an action)
*/
- ysave->yyss = yyss = (short*)safemalloc(yystacksize*sizeof(short));
- ysave->yyvs = yyvs = (YYSTYPE*)safemalloc(yystacksize*sizeof(YYSTYPE));
+ New(73, yyss, yystacksize, short);
+ New(73, yyvs, yystacksize, YYSTYPE);
+ ysave->yyss = yyss;
+ ysave->yyvs = yyvs;
if (!yyvs || !yyss)
goto yyoverflow;
@@ -1517,9 +1520,9 @@ case 1:
#line 86 "perly.y"
{
#if defined(YYDEBUG) && defined(DEBUGGING)
- yydebug = (debug & 1);
+ yydebug = (PL_debug & 1);
#endif
- expect = XSTATE;
+ PL_expect = XSTATE;
}
break;
case 2:
@@ -1528,8 +1531,8 @@ case 2:
break;
case 3:
#line 97 "perly.y"
-{ if (copline > (line_t)yyvsp[-3].ival)
- copline = yyvsp[-3].ival;
+{ if (PL_copline > (line_t)yyvsp[-3].ival)
+ PL_copline = yyvsp[-3].ival;
yyval.opval = block_end(yyvsp[-2].ival, yyvsp[-1].opval); }
break;
case 4:
@@ -1538,8 +1541,8 @@ case 4:
break;
case 5:
#line 107 "perly.y"
-{ if (copline > (line_t)yyvsp[-3].ival)
- copline = yyvsp[-3].ival;
+{ if (PL_copline > (line_t)yyvsp[-3].ival)
+ PL_copline = yyvsp[-3].ival;
yyval.opval = block_end(yyvsp[-2].ival, yyvsp[-1].opval); }
break;
case 6:
@@ -1558,8 +1561,8 @@ case 9:
#line 121 "perly.y"
{ yyval.opval = append_list(OP_LINESEQ,
(LISTOP*)yyvsp[-1].opval, (LISTOP*)yyvsp[0].opval);
- pad_reset_pending = TRUE;
- if (yyvsp[-1].opval && yyvsp[0].opval) hints |= HINT_BLOCK_SCOPE; }
+ PL_pad_reset_pending = TRUE;
+ if (yyvsp[-1].opval && yyvsp[0].opval) PL_hints |= HINT_BLOCK_SCOPE; }
break;
case 10:
#line 128 "perly.y"
@@ -1572,14 +1575,14 @@ case 12:
}
else {
yyval.opval = Nullop;
- copline = NOLINE;
+ PL_copline = NOLINE;
}
- expect = XSTATE; }
+ PL_expect = XSTATE; }
break;
case 13:
#line 140 "perly.y"
{ yyval.opval = newSTATEOP(0, yyvsp[-2].pval, yyvsp[-1].opval);
- expect = XSTATE; }
+ PL_expect = XSTATE; }
break;
case 14:
#line 145 "perly.y"
@@ -1606,510 +1609,516 @@ case 19:
{ yyval.opval = newLOOPOP(OPf_PARENS, 1, yyvsp[0].opval, yyvsp[-2].opval);}
break;
case 20:
-#line 159 "perly.y"
-{ yyval.opval = Nullop; }
+#line 157 "perly.y"
+{ yyval.opval = newFOROP(0, Nullch, yyvsp[-1].ival,
+ Nullop, yyvsp[0].opval, yyvsp[-2].opval, Nullop); }
break;
case 21:
-#line 161 "perly.y"
-{ yyval.opval = scope(yyvsp[0].opval); }
+#line 162 "perly.y"
+{ yyval.opval = Nullop; }
break;
case 22:
-#line 163 "perly.y"
-{ copline = yyvsp[-5].ival;
+#line 164 "perly.y"
+{ yyval.opval = scope(yyvsp[0].opval); }
+break;
+case 23:
+#line 166 "perly.y"
+{ PL_copline = yyvsp[-5].ival;
yyval.opval = newSTATEOP(0, Nullch,
newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval));
- hints |= HINT_BLOCK_SCOPE; }
+ PL_hints |= HINT_BLOCK_SCOPE; }
break;
-case 23:
-#line 170 "perly.y"
-{ copline = yyvsp[-6].ival;
+case 24:
+#line 173 "perly.y"
+{ PL_copline = yyvsp[-6].ival;
yyval.opval = block_end(yyvsp[-4].ival,
newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval)); }
break;
-case 24:
-#line 174 "perly.y"
-{ copline = yyvsp[-6].ival;
+case 25:
+#line 177 "perly.y"
+{ PL_copline = yyvsp[-6].ival;
yyval.opval = block_end(yyvsp[-4].ival,
newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval)); }
break;
-case 25:
-#line 180 "perly.y"
+case 26:
+#line 183 "perly.y"
{ yyval.opval = Nullop; }
break;
-case 26:
-#line 182 "perly.y"
+case 27:
+#line 185 "perly.y"
{ yyval.opval = scope(yyvsp[0].opval); }
break;
-case 27:
-#line 186 "perly.y"
-{ copline = yyvsp[-6].ival;
+case 28:
+#line 189 "perly.y"
+{ PL_copline = yyvsp[-6].ival;
yyval.opval = block_end(yyvsp[-4].ival,
newSTATEOP(0, yyvsp[-7].pval,
newWHILEOP(0, 1, (LOOP*)Nullop,
yyvsp[-6].ival, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval))); }
break;
-case 28:
-#line 192 "perly.y"
-{ copline = yyvsp[-6].ival;
+case 29:
+#line 195 "perly.y"
+{ PL_copline = yyvsp[-6].ival;
yyval.opval = block_end(yyvsp[-4].ival,
newSTATEOP(0, yyvsp[-7].pval,
newWHILEOP(0, 1, (LOOP*)Nullop,
yyvsp[-6].ival, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval))); }
break;
-case 29:
-#line 198 "perly.y"
+case 30:
+#line 201 "perly.y"
{ yyval.opval = block_end(yyvsp[-6].ival,
newFOROP(0, yyvsp[-9].pval, yyvsp[-8].ival, yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); }
break;
-case 30:
-#line 201 "perly.y"
+case 31:
+#line 204 "perly.y"
{ yyval.opval = block_end(yyvsp[-4].ival,
newFOROP(0, yyvsp[-8].pval, yyvsp[-7].ival, mod(yyvsp[-6].opval, OP_ENTERLOOP),
yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); }
break;
-case 31:
-#line 205 "perly.y"
+case 32:
+#line 208 "perly.y"
{ yyval.opval = block_end(yyvsp[-4].ival,
newFOROP(0, yyvsp[-7].pval, yyvsp[-6].ival, Nullop, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval)); }
break;
-case 32:
-#line 209 "perly.y"
+case 33:
+#line 212 "perly.y"
{ OP *forop = append_elem(OP_LINESEQ,
scalar(yyvsp[-6].opval),
newWHILEOP(0, 1, (LOOP*)Nullop,
yyvsp[-9].ival, scalar(yyvsp[-4].opval),
yyvsp[0].opval, scalar(yyvsp[-2].opval)));
- copline = yyvsp[-9].ival;
+ PL_copline = yyvsp[-9].ival;
yyval.opval = block_end(yyvsp[-7].ival, newSTATEOP(0, yyvsp[-10].pval, forop)); }
break;
-case 33:
-#line 217 "perly.y"
+case 34:
+#line 220 "perly.y"
{ yyval.opval = newSTATEOP(0, yyvsp[-2].pval,
newWHILEOP(0, 1, (LOOP*)Nullop,
NOLINE, Nullop, yyvsp[-1].opval, yyvsp[0].opval)); }
break;
-case 34:
-#line 223 "perly.y"
+case 35:
+#line 226 "perly.y"
{ yyval.opval = Nullop; }
break;
-case 36:
-#line 228 "perly.y"
+case 37:
+#line 231 "perly.y"
{ (void)scan_num("1"); yyval.opval = yylval.opval; }
break;
-case 38:
-#line 233 "perly.y"
-{ yyval.opval = invert(scalar(yyvsp[0].opval)); }
-break;
case 39:
-#line 237 "perly.y"
-{ yyval.opval = yyvsp[0].opval; intro_my(); }
+#line 236 "perly.y"
+{ yyval.opval = invert(scalar(yyvsp[0].opval)); }
break;
case 40:
-#line 241 "perly.y"
+#line 240 "perly.y"
{ yyval.opval = yyvsp[0].opval; intro_my(); }
break;
case 41:
-#line 245 "perly.y"
+#line 244 "perly.y"
{ yyval.opval = yyvsp[0].opval; intro_my(); }
break;
case 42:
-#line 249 "perly.y"
+#line 248 "perly.y"
{ yyval.opval = yyvsp[0].opval; intro_my(); }
break;
case 43:
-#line 253 "perly.y"
-{ yyval.pval = Nullch; }
+#line 252 "perly.y"
+{ yyval.opval = yyvsp[0].opval; intro_my(); }
break;
-case 45:
-#line 258 "perly.y"
-{ yyval.ival = 0; }
+case 44:
+#line 256 "perly.y"
+{ yyval.pval = Nullch; }
break;
case 46:
-#line 260 "perly.y"
+#line 261 "perly.y"
{ yyval.ival = 0; }
break;
case 47:
-#line 262 "perly.y"
+#line 263 "perly.y"
{ yyval.ival = 0; }
break;
case 48:
-#line 264 "perly.y"
+#line 265 "perly.y"
{ yyval.ival = 0; }
break;
case 49:
-#line 268 "perly.y"
-{ newFORM(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); }
+#line 267 "perly.y"
+{ yyval.ival = 0; }
break;
case 50:
#line 271 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
+{ newFORM(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); }
break;
case 51:
-#line 272 "perly.y"
-{ yyval.opval = Nullop; }
+#line 274 "perly.y"
+{ yyval.opval = yyvsp[0].opval; }
break;
case 52:
-#line 276 "perly.y"
-{ newSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); }
+#line 275 "perly.y"
+{ yyval.opval = Nullop; }
break;
case 53:
-#line 280 "perly.y"
-{ yyval.ival = start_subparse(FALSE, 0); }
+#line 279 "perly.y"
+{ newSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); }
break;
case 54:
-#line 284 "perly.y"
-{ yyval.ival = start_subparse(FALSE, CVf_ANON); }
+#line 283 "perly.y"
+{ yyval.ival = start_subparse(FALSE, 0); }
break;
case 55:
-#line 288 "perly.y"
-{ yyval.ival = start_subparse(TRUE, 0); }
+#line 287 "perly.y"
+{ yyval.ival = start_subparse(FALSE, CVf_ANON); }
break;
case 56:
#line 291 "perly.y"
-{ char *name = SvPVx(((SVOP*)yyvsp[0].opval)->op_sv, na);
- if (strEQ(name, "BEGIN") || strEQ(name, "END"))
- CvUNIQUE_on(compcv);
- yyval.opval = yyvsp[0].opval; }
+{ yyval.ival = start_subparse(TRUE, 0); }
break;
case 57:
-#line 298 "perly.y"
-{ yyval.opval = Nullop; }
+#line 294 "perly.y"
+{ STRLEN n_a; char *name = SvPV(((SVOP*)yyvsp[0].opval)->op_sv, n_a);
+ if (strEQ(name, "BEGIN") || strEQ(name, "END")
+ || strEQ(name, "INIT"))
+ CvSPECIAL_on(PL_compcv);
+ yyval.opval = yyvsp[0].opval; }
break;
-case 59:
+case 58:
#line 302 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
+{ yyval.opval = Nullop; }
break;
case 60:
-#line 303 "perly.y"
-{ yyval.opval = Nullop; expect = XSTATE; }
+#line 306 "perly.y"
+{ yyval.opval = yyvsp[0].opval; }
break;
case 61:
#line 307 "perly.y"
-{ package(yyvsp[-1].opval); }
+{ yyval.opval = Nullop; PL_expect = XSTATE; }
break;
case 62:
-#line 309 "perly.y"
-{ package(Nullop); }
+#line 311 "perly.y"
+{ package(yyvsp[-1].opval); }
break;
case 63:
#line 313 "perly.y"
-{ CvUNIQUE_on(compcv); /* It's a BEGIN {} */ }
+{ package(Nullop); }
break;
case 64:
-#line 315 "perly.y"
-{ utilize(yyvsp[-6].ival, yyvsp[-5].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval); }
+#line 317 "perly.y"
+{ CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ }
break;
case 65:
#line 319 "perly.y"
-{ yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); }
+{ utilize(yyvsp[-6].ival, yyvsp[-5].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval); }
break;
case 66:
-#line 321 "perly.y"
+#line 323 "perly.y"
+{ yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); }
+break;
+case 67:
+#line 325 "perly.y"
{ yyval.opval = newLOGOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, yyvsp[0].opval); }
break;
-case 68:
-#line 326 "perly.y"
+case 69:
+#line 330 "perly.y"
{ yyval.opval = yyvsp[-1].opval; }
break;
-case 69:
-#line 328 "perly.y"
+case 70:
+#line 332 "perly.y"
{ yyval.opval = append_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval); }
break;
-case 71:
-#line 333 "perly.y"
+case 72:
+#line 337 "perly.y"
{ yyval.opval = convert(yyvsp[-2].ival, OPf_STACKED,
prepend_elem(OP_LIST, newGVREF(yyvsp[-2].ival,yyvsp[-1].opval), yyvsp[0].opval) ); }
break;
-case 72:
-#line 336 "perly.y"
+case 73:
+#line 340 "perly.y"
{ yyval.opval = convert(yyvsp[-4].ival, OPf_STACKED,
prepend_elem(OP_LIST, newGVREF(yyvsp[-4].ival,yyvsp[-2].opval), yyvsp[-1].opval) ); }
break;
-case 73:
-#line 339 "perly.y"
+case 74:
+#line 343 "perly.y"
{ yyval.opval = convert(OP_ENTERSUB, OPf_STACKED,
append_elem(OP_LIST,
prepend_elem(OP_LIST, scalar(yyvsp[-5].opval), yyvsp[-1].opval),
newUNOP(OP_METHOD, 0, yyvsp[-3].opval))); }
break;
-case 74:
-#line 344 "perly.y"
+case 75:
+#line 348 "perly.y"
{ yyval.opval = convert(OP_ENTERSUB, OPf_STACKED,
append_elem(OP_LIST,
prepend_elem(OP_LIST, yyvsp[-1].opval, yyvsp[0].opval),
newUNOP(OP_METHOD, 0, yyvsp[-2].opval))); }
break;
-case 75:
-#line 349 "perly.y"
+case 76:
+#line 353 "perly.y"
{ yyval.opval = convert(OP_ENTERSUB, OPf_STACKED,
append_elem(OP_LIST,
prepend_elem(OP_LIST, yyvsp[-3].opval, yyvsp[-1].opval),
newUNOP(OP_METHOD, 0, yyvsp[-4].opval))); }
break;
-case 76:
-#line 354 "perly.y"
+case 77:
+#line 358 "perly.y"
{ yyval.opval = convert(yyvsp[-1].ival, 0, yyvsp[0].opval); }
break;
-case 77:
-#line 356 "perly.y"
+case 78:
+#line 360 "perly.y"
{ yyval.opval = convert(yyvsp[-3].ival, 0, yyvsp[-1].opval); }
break;
-case 78:
-#line 358 "perly.y"
+case 79:
+#line 362 "perly.y"
{ yyvsp[0].opval = newANONSUB(yyvsp[-1].ival, 0, yyvsp[0].opval); }
break;
-case 79:
-#line 360 "perly.y"
+case 80:
+#line 364 "perly.y"
{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
append_elem(OP_LIST,
prepend_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval), yyvsp[-4].opval)); }
break;
-case 82:
-#line 370 "perly.y"
+case 83:
+#line 374 "perly.y"
{ yyval.opval = newASSIGNOP(OPf_STACKED, yyvsp[-2].opval, yyvsp[-1].ival, yyvsp[0].opval); }
break;
-case 83:
-#line 372 "perly.y"
+case 84:
+#line 376 "perly.y"
{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
break;
-case 84:
-#line 374 "perly.y"
+case 85:
+#line 378 "perly.y"
{ if (yyvsp[-1].ival != OP_REPEAT)
scalar(yyvsp[-2].opval);
yyval.opval = newBINOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, scalar(yyvsp[0].opval)); }
break;
-case 85:
-#line 378 "perly.y"
-{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
-break;
case 86:
-#line 380 "perly.y"
+#line 382 "perly.y"
{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
break;
case 87:
-#line 382 "perly.y"
+#line 384 "perly.y"
{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
break;
case 88:
-#line 384 "perly.y"
+#line 386 "perly.y"
{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
break;
case 89:
-#line 386 "perly.y"
+#line 388 "perly.y"
{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
break;
case 90:
-#line 388 "perly.y"
+#line 390 "perly.y"
{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
break;
case 91:
-#line 390 "perly.y"
-{ yyval.opval = newRANGE(yyvsp[-1].ival, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval));}
+#line 392 "perly.y"
+{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); }
break;
case 92:
-#line 392 "perly.y"
-{ yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); }
+#line 394 "perly.y"
+{ yyval.opval = newRANGE(yyvsp[-1].ival, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval));}
break;
case 93:
-#line 394 "perly.y"
-{ yyval.opval = newLOGOP(OP_OR, 0, yyvsp[-2].opval, yyvsp[0].opval); }
+#line 396 "perly.y"
+{ yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); }
break;
case 94:
-#line 396 "perly.y"
-{ yyval.opval = newCONDOP(0, yyvsp[-4].opval, yyvsp[-2].opval, yyvsp[0].opval); }
+#line 398 "perly.y"
+{ yyval.opval = newLOGOP(OP_OR, 0, yyvsp[-2].opval, yyvsp[0].opval); }
break;
case 95:
-#line 398 "perly.y"
-{ yyval.opval = bind_match(yyvsp[-1].ival, yyvsp[-2].opval, yyvsp[0].opval); }
+#line 400 "perly.y"
+{ yyval.opval = newCONDOP(0, yyvsp[-4].opval, yyvsp[-2].opval, yyvsp[0].opval); }
break;
case 96:
-#line 401 "perly.y"
-{ yyval.opval = newUNOP(OP_NEGATE, 0, scalar(yyvsp[0].opval)); }
+#line 402 "perly.y"
+{ yyval.opval = bind_match(yyvsp[-1].ival, yyvsp[-2].opval, yyvsp[0].opval); }
break;
case 97:
-#line 403 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
+#line 405 "perly.y"
+{ yyval.opval = newUNOP(OP_NEGATE, 0, scalar(yyvsp[0].opval)); }
break;
case 98:
-#line 405 "perly.y"
-{ yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); }
+#line 407 "perly.y"
+{ yyval.opval = yyvsp[0].opval; }
break;
case 99:
-#line 407 "perly.y"
-{ yyval.opval = newUNOP(OP_COMPLEMENT, 0, scalar(yyvsp[0].opval));}
+#line 409 "perly.y"
+{ yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); }
break;
case 100:
-#line 409 "perly.y"
-{ yyval.opval = newUNOP(OP_REFGEN, 0, mod(yyvsp[0].opval,OP_REFGEN)); }
+#line 411 "perly.y"
+{ yyval.opval = newUNOP(OP_COMPLEMENT, 0, scalar(yyvsp[0].opval));}
break;
case 101:
-#line 411 "perly.y"
+#line 413 "perly.y"
+{ yyval.opval = newUNOP(OP_REFGEN, 0, mod(yyvsp[0].opval,OP_REFGEN)); }
+break;
+case 102:
+#line 415 "perly.y"
{ yyval.opval = newUNOP(OP_POSTINC, 0,
mod(scalar(yyvsp[-1].opval), OP_POSTINC)); }
break;
-case 102:
-#line 414 "perly.y"
+case 103:
+#line 418 "perly.y"
{ yyval.opval = newUNOP(OP_POSTDEC, 0,
mod(scalar(yyvsp[-1].opval), OP_POSTDEC)); }
break;
-case 103:
-#line 417 "perly.y"
+case 104:
+#line 421 "perly.y"
{ yyval.opval = newUNOP(OP_PREINC, 0,
mod(scalar(yyvsp[0].opval), OP_PREINC)); }
break;
-case 104:
-#line 420 "perly.y"
+case 105:
+#line 424 "perly.y"
{ yyval.opval = newUNOP(OP_PREDEC, 0,
mod(scalar(yyvsp[0].opval), OP_PREDEC)); }
break;
-case 105:
-#line 423 "perly.y"
-{ yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); }
-break;
case 106:
-#line 425 "perly.y"
-{ yyval.opval = sawparens(yyvsp[-1].opval); }
-break;
-case 107:
#line 427 "perly.y"
-{ yyval.opval = sawparens(newNULLLIST()); }
+{ yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); }
break;
-case 108:
+case 107:
#line 429 "perly.y"
-{ yyval.opval = newANONLIST(yyvsp[-1].opval); }
+{ yyval.opval = sawparens(yyvsp[-1].opval); }
break;
-case 109:
+case 108:
#line 431 "perly.y"
-{ yyval.opval = newANONLIST(Nullop); }
+{ yyval.opval = sawparens(newNULLLIST()); }
break;
-case 110:
+case 109:
#line 433 "perly.y"
-{ yyval.opval = newANONHASH(yyvsp[-2].opval); }
+{ yyval.opval = newANONLIST(yyvsp[-1].opval); }
break;
-case 111:
+case 110:
#line 435 "perly.y"
-{ yyval.opval = newANONHASH(Nullop); }
+{ yyval.opval = newANONLIST(Nullop); }
break;
-case 112:
+case 111:
#line 437 "perly.y"
-{ yyval.opval = newANONSUB(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); }
+{ yyval.opval = newANONHASH(yyvsp[-2].opval); }
break;
-case 113:
+case 112:
#line 439 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
+{ yyval.opval = newANONHASH(Nullop); }
break;
-case 114:
+case 113:
#line 441 "perly.y"
-{ yyval.opval = newBINOP(OP_GELEM, 0, newGVREF(0,yyvsp[-4].opval), yyvsp[-2].opval); }
+{ yyval.opval = newANONSUB(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); }
break;
-case 115:
+case 114:
#line 443 "perly.y"
{ yyval.opval = yyvsp[0].opval; }
break;
-case 116:
+case 115:
#line 445 "perly.y"
-{ yyval.opval = newBINOP(OP_AELEM, 0, oopsAV(yyvsp[-3].opval), scalar(yyvsp[-1].opval)); }
+{ yyval.opval = newBINOP(OP_GELEM, 0, yyvsp[-4].opval, scalar(yyvsp[-2].opval)); }
break;
-case 117:
+case 116:
#line 447 "perly.y"
-{ yyval.opval = newBINOP(OP_AELEM, 0,
- ref(newAVREF(yyvsp[-4].opval),OP_RV2AV),
- scalar(yyvsp[-1].opval));}
+{ yyval.opval = yyvsp[0].opval; }
+break;
+case 117:
+#line 449 "perly.y"
+{ yyval.opval = newBINOP(OP_AELEM, 0, oopsAV(yyvsp[-3].opval), scalar(yyvsp[-1].opval)); }
break;
case 118:
#line 451 "perly.y"
-{ assertref(yyvsp[-3].opval); yyval.opval = newBINOP(OP_AELEM, 0,
- ref(newAVREF(yyvsp[-3].opval),OP_RV2AV),
+{ yyval.opval = newBINOP(OP_AELEM, 0,
+ ref(newAVREF(yyvsp[-4].opval),OP_RV2AV),
scalar(yyvsp[-1].opval));}
break;
case 119:
#line 455 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
+{ assertref(yyvsp[-3].opval); yyval.opval = newBINOP(OP_AELEM, 0,
+ ref(newAVREF(yyvsp[-3].opval),OP_RV2AV),
+ scalar(yyvsp[-1].opval));}
break;
case 120:
-#line 457 "perly.y"
+#line 459 "perly.y"
{ yyval.opval = yyvsp[0].opval; }
break;
case 121:
-#line 459 "perly.y"
-{ yyval.opval = newUNOP(OP_AV2ARYLEN, 0, ref(yyvsp[0].opval, OP_AV2ARYLEN));}
+#line 461 "perly.y"
+{ yyval.opval = yyvsp[0].opval; }
break;
case 122:
-#line 461 "perly.y"
-{ yyval.opval = newBINOP(OP_HELEM, 0, oopsHV(yyvsp[-4].opval), jmaybe(yyvsp[-2].opval));
- expect = XOPERATOR; }
+#line 463 "perly.y"
+{ yyval.opval = newUNOP(OP_AV2ARYLEN, 0, ref(yyvsp[0].opval, OP_AV2ARYLEN));}
break;
case 123:
-#line 464 "perly.y"
+#line 465 "perly.y"
+{ yyval.opval = newBINOP(OP_HELEM, 0, oopsHV(yyvsp[-4].opval), jmaybe(yyvsp[-2].opval));
+ PL_expect = XOPERATOR; }
+break;
+case 124:
+#line 468 "perly.y"
{ yyval.opval = newBINOP(OP_HELEM, 0,
ref(newHVREF(yyvsp[-5].opval),OP_RV2HV),
jmaybe(yyvsp[-2].opval));
- expect = XOPERATOR; }
+ PL_expect = XOPERATOR; }
break;
-case 124:
-#line 469 "perly.y"
+case 125:
+#line 473 "perly.y"
{ assertref(yyvsp[-4].opval); yyval.opval = newBINOP(OP_HELEM, 0,
ref(newHVREF(yyvsp[-4].opval),OP_RV2HV),
jmaybe(yyvsp[-2].opval));
- expect = XOPERATOR; }
+ PL_expect = XOPERATOR; }
break;
-case 125:
-#line 474 "perly.y"
+case 126:
+#line 478 "perly.y"
{ yyval.opval = newSLICEOP(0, yyvsp[-1].opval, yyvsp[-4].opval); }
break;
-case 126:
-#line 476 "perly.y"
+case 127:
+#line 480 "perly.y"
{ yyval.opval = newSLICEOP(0, yyvsp[-1].opval, Nullop); }
break;
-case 127:
-#line 478 "perly.y"
+case 128:
+#line 482 "perly.y"
{ yyval.opval = prepend_elem(OP_ASLICE,
newOP(OP_PUSHMARK, 0),
newLISTOP(OP_ASLICE, 0,
list(yyvsp[-1].opval),
ref(yyvsp[-3].opval, OP_ASLICE))); }
break;
-case 128:
-#line 484 "perly.y"
+case 129:
+#line 488 "perly.y"
{ yyval.opval = prepend_elem(OP_HSLICE,
newOP(OP_PUSHMARK, 0),
newLISTOP(OP_HSLICE, 0,
list(yyvsp[-2].opval),
ref(oopsHV(yyvsp[-4].opval), OP_HSLICE)));
- expect = XOPERATOR; }
+ PL_expect = XOPERATOR; }
break;
-case 129:
-#line 491 "perly.y"
+case 130:
+#line 495 "perly.y"
{ yyval.opval = yyvsp[0].opval; }
break;
-case 130:
-#line 493 "perly.y"
+case 131:
+#line 497 "perly.y"
{ yyval.opval = newUNOP(OP_ENTERSUB, 0, scalar(yyvsp[0].opval)); }
break;
-case 131:
-#line 495 "perly.y"
+case 132:
+#line 499 "perly.y"
{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar(yyvsp[-2].opval)); }
break;
-case 132:
-#line 497 "perly.y"
+case 133:
+#line 501 "perly.y"
{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
append_elem(OP_LIST, yyvsp[-1].opval, scalar(yyvsp[-3].opval))); }
break;
-case 133:
-#line 500 "perly.y"
+case 134:
+#line 504 "perly.y"
{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); }
break;
-case 134:
-#line 503 "perly.y"
+case 135:
+#line 507 "perly.y"
{ yyval.opval = newUNOP(OP_DOFILE, 0, scalar(yyvsp[0].opval)); }
break;
-case 135:
-#line 505 "perly.y"
+case 136:
+#line 509 "perly.y"
{ yyval.opval = newUNOP(OP_NULL, OPf_SPECIAL, scope(yyvsp[0].opval)); }
break;
-case 136:
-#line 507 "perly.y"
+case 137:
+#line 511 "perly.y"
{ yyval.opval = newUNOP(OP_ENTERSUB,
OPf_SPECIAL|OPf_STACKED,
prepend_elem(OP_LIST,
@@ -2118,8 +2127,8 @@ case 136:
scalar(yyvsp[-2].opval)
)),Nullop)); dep();}
break;
-case 137:
-#line 515 "perly.y"
+case 138:
+#line 519 "perly.y"
{ yyval.opval = newUNOP(OP_ENTERSUB,
OPf_SPECIAL|OPf_STACKED,
append_elem(OP_LIST,
@@ -2129,162 +2138,162 @@ case 137:
scalar(yyvsp[-3].opval)
)))); dep();}
break;
-case 138:
-#line 524 "perly.y"
+case 139:
+#line 528 "perly.y"
{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED,
prepend_elem(OP_LIST,
scalar(newCVREF(0,scalar(yyvsp[-2].opval))), Nullop)); dep();}
break;
-case 139:
-#line 528 "perly.y"
+case 140:
+#line 532 "perly.y"
{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED,
prepend_elem(OP_LIST,
yyvsp[-1].opval,
scalar(newCVREF(0,scalar(yyvsp[-3].opval))))); dep();}
break;
-case 140:
-#line 533 "perly.y"
+case 141:
+#line 537 "perly.y"
{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
newCVREF(0, scalar(yyvsp[-3].opval))); }
break;
-case 141:
-#line 536 "perly.y"
+case 142:
+#line 540 "perly.y"
{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
append_elem(OP_LIST, yyvsp[-1].opval,
newCVREF(0, scalar(yyvsp[-4].opval)))); }
break;
-case 142:
-#line 540 "perly.y"
-{ yyval.opval = newOP(yyvsp[0].ival, OPf_SPECIAL);
- hints |= HINT_BLOCK_SCOPE; }
-break;
case 143:
-#line 543 "perly.y"
-{ yyval.opval = newLOOPEX(yyvsp[-1].ival,yyvsp[0].opval); }
+#line 544 "perly.y"
+{ yyval.opval = newOP(yyvsp[0].ival, OPf_SPECIAL);
+ PL_hints |= HINT_BLOCK_SCOPE; }
break;
case 144:
-#line 545 "perly.y"
-{ yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); }
+#line 547 "perly.y"
+{ yyval.opval = newLOOPEX(yyvsp[-1].ival,yyvsp[0].opval); }
break;
case 145:
-#line 547 "perly.y"
-{ yyval.opval = newOP(yyvsp[0].ival, 0); }
+#line 549 "perly.y"
+{ yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); }
break;
case 146:
-#line 549 "perly.y"
-{ yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); }
+#line 551 "perly.y"
+{ yyval.opval = newOP(yyvsp[0].ival, 0); }
break;
case 147:
-#line 551 "perly.y"
+#line 553 "perly.y"
{ yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); }
break;
case 148:
-#line 553 "perly.y"
+#line 555 "perly.y"
+{ yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); }
+break;
+case 149:
+#line 557 "perly.y"
{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); }
break;
-case 149:
-#line 556 "perly.y"
+case 150:
+#line 560 "perly.y"
{ yyval.opval = newOP(yyvsp[0].ival, 0); }
break;
-case 150:
-#line 558 "perly.y"
+case 151:
+#line 562 "perly.y"
{ yyval.opval = newOP(yyvsp[-2].ival, 0); }
break;
-case 151:
-#line 560 "perly.y"
+case 152:
+#line 564 "perly.y"
{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED,
scalar(yyvsp[0].opval)); }
break;
-case 152:
-#line 563 "perly.y"
+case 153:
+#line 567 "perly.y"
{ yyval.opval = newOP(yyvsp[-2].ival, OPf_SPECIAL); }
break;
-case 153:
-#line 565 "perly.y"
+case 154:
+#line 569 "perly.y"
{ yyval.opval = newUNOP(yyvsp[-3].ival, 0, yyvsp[-1].opval); }
break;
-case 154:
-#line 567 "perly.y"
+case 155:
+#line 571 "perly.y"
{ yyval.opval = pmruntime(yyvsp[-3].opval, yyvsp[-1].opval, Nullop); }
break;
-case 155:
-#line 569 "perly.y"
+case 156:
+#line 573 "perly.y"
{ yyval.opval = pmruntime(yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval); }
break;
-case 158:
-#line 575 "perly.y"
-{ yyval.opval = Nullop; }
-break;
case 159:
-#line 577 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
+#line 579 "perly.y"
+{ yyval.opval = Nullop; }
break;
case 160:
#line 581 "perly.y"
-{ yyval.opval = Nullop; }
+{ yyval.opval = yyvsp[0].opval; }
break;
case 161:
-#line 583 "perly.y"
-{ yyval.opval = yyvsp[0].opval; }
+#line 585 "perly.y"
+{ yyval.opval = Nullop; }
break;
case 162:
-#line 585 "perly.y"
-{ yyval.opval = yyvsp[-1].opval; }
+#line 587 "perly.y"
+{ yyval.opval = yyvsp[0].opval; }
break;
case 163:
-#line 588 "perly.y"
-{ yyval.ival = 0; }
+#line 589 "perly.y"
+{ yyval.opval = yyvsp[-1].opval; }
break;
case 164:
-#line 589 "perly.y"
-{ yyval.ival = 1; }
+#line 592 "perly.y"
+{ yyval.ival = 0; }
break;
case 165:
#line 593 "perly.y"
-{ in_my = 0; yyval.opval = my(yyvsp[0].opval); }
+{ yyval.ival = 1; }
break;
case 166:
#line 597 "perly.y"
-{ yyval.opval = newCVREF(yyvsp[-1].ival,yyvsp[0].opval); }
+{ PL_in_my = 0; yyval.opval = my(yyvsp[0].opval); }
break;
case 167:
#line 601 "perly.y"
-{ yyval.opval = newSVREF(yyvsp[0].opval); }
+{ yyval.opval = newCVREF(yyvsp[-1].ival,yyvsp[0].opval); }
break;
case 168:
#line 605 "perly.y"
-{ yyval.opval = newAVREF(yyvsp[0].opval); }
+{ yyval.opval = newSVREF(yyvsp[0].opval); }
break;
case 169:
#line 609 "perly.y"
-{ yyval.opval = newHVREF(yyvsp[0].opval); }
+{ yyval.opval = newAVREF(yyvsp[0].opval); }
break;
case 170:
#line 613 "perly.y"
-{ yyval.opval = newAVREF(yyvsp[0].opval); }
+{ yyval.opval = newHVREF(yyvsp[0].opval); }
break;
case 171:
#line 617 "perly.y"
-{ yyval.opval = newGVREF(0,yyvsp[0].opval); }
+{ yyval.opval = newAVREF(yyvsp[0].opval); }
break;
case 172:
#line 621 "perly.y"
-{ yyval.opval = scalar(yyvsp[0].opval); }
+{ yyval.opval = newGVREF(0,yyvsp[0].opval); }
break;
case 173:
-#line 623 "perly.y"
-{ yyval.opval = scalar(yyvsp[0].opval); }
+#line 625 "perly.y"
+{ yyval.opval = scalar(yyvsp[0].opval); }
break;
case 174:
-#line 625 "perly.y"
-{ yyval.opval = scope(yyvsp[0].opval); }
+#line 627 "perly.y"
+{ yyval.opval = scalar(yyvsp[0].opval); }
break;
case 175:
-#line 628 "perly.y"
+#line 629 "perly.y"
+{ yyval.opval = scope(yyvsp[0].opval); }
+break;
+case 176:
+#line 632 "perly.y"
{ yyval.opval = yyvsp[0].opval; }
break;
-#line 2271 "perly.c"
+#line 2266 "perly.c"
}
yyssp -= yym;
yystate = *yyssp;
diff --git a/gnu/usr.bin/perl/vms/sockadapt.h b/gnu/usr.bin/perl/vms/sockadapt.h
index 7f9150a5795..3e5daf37659 100644
--- a/gnu/usr.bin/perl/vms/sockadapt.h
+++ b/gnu/usr.bin/perl/vms/sockadapt.h
@@ -145,7 +145,6 @@ void endnetent();
#include <socket.h>
#include <in.h>
#include <inet.h>
-#include <netdb.h>
/* SocketShr doesn't support these routines, but the DECC RTL contains
* stubs with these names, designed to be used with the UCX socket
@@ -156,6 +155,8 @@ void endnetent();
#define getnetent no_getnetent
#define setnetent no_setnetent
#define endnetent no_endnetent
+
+#include <netdb.h>
#endif
/* We don't have these two in the system headers. */
diff --git a/gnu/usr.bin/perl/vms/test.com b/gnu/usr.bin/perl/vms/test.com
index 114cb24a405..0e507dd2740 100644
--- a/gnu/usr.bin/perl/vms/test.com
+++ b/gnu/usr.bin/perl/vms/test.com
@@ -21,8 +21,17 @@ $ EndIf
$ EndIf
$ Set Message /Facility/Severity/Identification/Text
$
-$ exe = ".Exe"
-$ If p1.nes."" Then exe = p1
+$ exe = ".Exe"
+$ If p1.nes."" Then exe = p1
+$ If F$Extract(0,1,exe) .nes. "."
+$ Then
+$ Write Sys$Error ""
+$ Write Sys$Error "The first parameter passed to Test.Com must be the file type used for the"
+$ Write Sys$Error "images produced when you built Perl (i.e. "".Exe"", unless you edited"
+$ Write Sys$Error "Descrip.MMS or used the AXE=1 macro in the MM[SK] command line."
+$ Write Sys$Error ""
+$ Exit 44
+$ EndIf
$! Pick up a copy of perl to use for the tests
$ Delete/Log/NoConfirm Perl.;*
$ Copy/Log/NoConfirm [-]Perl'exe' []Perl.
@@ -74,6 +83,7 @@ $ Delete/Log/NoConfirm Echo.Obj;*
$ echo = "$" + F$Parse("Echo.Exe")
$
$! And do it
+$ Show Process/Accounting
$ testdir = "Directory/NoHead/NoTrail/Column=1"
$ Define/User Perlshr Sys$Disk:[-]PerlShr'exe'
$ MCR Sys$Disk:[]Perl. "-I[-.lib]" - "''p2'" "''p3'" "''p4'" "''p5'" "''p6'"
@@ -90,11 +100,10 @@ $ Deck/Dollar=$$END-OF-TEST$$
use Config;
@compexcl=('cpp.t');
-@ioexcl=('argv.t','dup.t','fs.t','inplace.t','pipe.t');
-@libexcl=('anydbm.t','db-btree.t','db-hash.t','db-recno.t',
+@ioexcl=('argv.t','dup.t','fs.t','pipe.t');
+@libexcl=('db-btree.t','db-hash.t','db-recno.t',
'gdbm.t','io_dup.t', 'io_pipe.t', 'io_sel.t', 'io_sock.t',
- 'ndbm.t','odbm.t','open2.t','open3.t','posix.t',
- 'sdbm.t');
+ 'ndbm.t','odbm.t','open2.t','open3.t', 'ph.t', 'posix.t');
# Note: POSIX is not part of basic build, but can be built
# separately if you're using DECC
@@ -103,7 +112,7 @@ use Config;
# 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=('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','misc.t','stat.t');
@exclist=(@compexcl,@ioexcl,@libexcl,@opexcl);
foreach $file (@exclist) { $skip{$file}++; }
@@ -111,7 +120,7 @@ $| = 1;
@ARGV = grep($_,@ARGV); # remove empty elements due to "''p1'" syntax
-if ($ARGV[0] eq '-v') {
+if (lc($ARGV[0]) eq '-v') {
$verbose = 1;
shift;
}
@@ -153,7 +162,7 @@ while ($test = shift) {
} else {
$switch = '';
}
- open(results,"\$ MCR Sys\$Disk:[]Perl. $switch $test |") || (print "can't run.\n");
+ open(results,"\$ MCR Sys\$Disk:[]Perl. \"-I[-.lib]\" $switch $test |") || (print "can't run.\n");
$ok = 0;
$next = 0;
while (<results>) {
@@ -218,6 +227,7 @@ print sprintf("u=%g s=%g cu=%g cs=%g files=%d tests=%d\n",
$user,$sys,$cuser,$csys,$files,$totmax);
$$END-OF-TEST$$
$ wrapup:
+$ Show Process/Accounting
$ If F$Search("Echo.Exe").nes."" Then Delete/Log/NoConfirm Echo.Exe;*
$ Set Default &olddef
$ Set Message 'oldmsg'
diff --git a/gnu/usr.bin/perl/vms/vms.c b/gnu/usr.bin/perl/vms/vms.c
index f22579066d0..37f9587dc75 100644
--- a/gnu/usr.bin/perl/vms/vms.c
+++ b/gnu/usr.bin/perl/vms/vms.c
@@ -2,8 +2,8 @@
*
* VMS-specific routines for perl5
*
- * Last revised: 11-Apr-1997 by Charles Bailey bailey@genetics.upenn.edu
- * Version: 5.3.97c
+ * Last revised: 27-Feb-1998 by Charles Bailey bailey@newman.upenn.edu
+ * Version: 5.4.61
*/
#include <acedef.h>
@@ -11,6 +11,7 @@
#include <armdef.h>
#include <atrdef.h>
#include <chpdef.h>
+#include <clidef.h>
#include <climsgdef.h>
#include <descrip.h>
#include <dvidef.h>
@@ -19,6 +20,7 @@
#include <fscndef.h>
#include <iodef.h>
#include <jpidef.h>
+#include <kgbdef.h>
#include <libdef.h>
#include <lib$routines.h>
#include <lnmdef.h>
@@ -113,37 +115,48 @@ my_trnlnm(char *lnm, char *eqv, unsigned long int idx)
* domain (mostly - my_getenv() need not return a translation from
* the process logical name table)
*
- * Note: Uses static buffer -- not thread-safe!
+ * Note: Uses Perl temp to store result so char * can be returned to
+ * caller; this pointer will be invalidated at next Perl statement
+ * transition.
*/
/*{{{ char *my_getenv(char *lnm)*/
char *
my_getenv(char *lnm)
{
static char __my_getenv_eqv[LNM$C_NAMLENGTH+1];
- char uplnm[LNM$C_NAMLENGTH+1], *cp1, *cp2;
+ char uplnm[LNM$C_NAMLENGTH+1], *cp1, *cp2, *eqv;
unsigned long int idx = 0;
int trnsuccess;
-
+ SV *tmpsv;
+
+ if (PL_curinterp) { /* Perl interpreter running -- may be threaded */
+ /* Set up a temporary buffer for the return value; Perl will
+ * clean it up at the next statement transition */
+ tmpsv = sv_2mortal(newSVpv("",LNM$C_NAMLENGTH+1));
+ if (!tmpsv) return NULL;
+ eqv = SvPVX(tmpsv);
+ }
+ else eqv = __my_getenv_eqv; /* Assume no interpreter ==> single thread */
for (cp1 = lnm, cp2= uplnm; *cp1; cp1++, cp2++) *cp2 = _toupper(*cp1);
*cp2 = '\0';
if (cp1 - lnm == 7 && !strncmp(uplnm,"DEFAULT",7)) {
- getcwd(__my_getenv_eqv,sizeof __my_getenv_eqv);
- return __my_getenv_eqv;
+ getcwd(eqv,LNM$C_NAMLENGTH);
+ return eqv;
}
else {
if ((cp2 = strchr(uplnm,';')) != NULL) {
*cp2 = '\0';
idx = strtoul(cp2+1,NULL,0);
}
- trnsuccess = my_trnlnm(uplnm,__my_getenv_eqv,idx);
+ trnsuccess = my_trnlnm(uplnm,eqv,idx);
/* If we had a translation index, we're only interested in lnms */
if (!trnsuccess && cp2 != NULL) return Nullch;
- if (trnsuccess) return __my_getenv_eqv;
+ if (trnsuccess) return eqv;
else {
unsigned long int retsts;
struct dsc$descriptor_s symdsc = {0,DSC$K_DTYPE_T,DSC$K_CLASS_S,0},
- valdsc = {sizeof __my_getenv_eqv,DSC$K_DTYPE_T,
- DSC$K_CLASS_S, __my_getenv_eqv};
+ valdsc = {LNM$C_NAMLENGTH,DSC$K_DTYPE_T,
+ DSC$K_CLASS_S, eqv};
symdsc.dsc$w_length = cp1 - lnm;
symdsc.dsc$a_pointer = uplnm;
retsts = lib$get_symbol(&symdsc,&valdsc,&(valdsc.dsc$w_length),0);
@@ -162,7 +175,9 @@ my_getenv(char *lnm)
} /* end of my_getenv() */
/*}}}*/
-static FILE *safe_popen(char *, char *);
+static void create_mbx(unsigned short int *, struct dsc$descriptor_s *);
+
+static void riseandshine(unsigned long int dummy) { sys$wake(0,0); }
/*{{{ void prime_env_iter() */
void
@@ -171,37 +186,81 @@ prime_env_iter(void)
* find, in preparation for iterating over it.
*/
{
- static int primed = 0; /* XXX Not thread-safe!!! */
- HV *envhv = GvHVn(envgv);
- FILE *sholog;
- char eqv[LNM$C_NAMLENGTH+1],*start,*end;
+ dTHR;
+ static int primed = 0;
+ HV *envhv = GvHVn(PL_envgv);
+ PerlIO *sholog;
+ char eqv[LNM$C_NAMLENGTH+1],mbxnam[LNM$C_NAMLENGTH+1],*start,*end;
+ unsigned short int chan;
+#ifndef CLI$M_TRUSTED
+# define CLI$M_TRUSTED 0x40 /* Missing from VAXC headers */
+#endif
+ unsigned long int flags = CLI$M_NOWAIT | CLI$M_NOCLISYM | CLI$M_NOKEYPAD | CLI$M_TRUSTED;
+ unsigned long int i, retsts, substs = 0, wakect = 0;
STRLEN eqvlen;
SV *oldrs, *linesv, *eqvsv;
+ $DESCRIPTOR(cmddsc,"Show Logical *"); $DESCRIPTOR(nldsc,"_NLA0:");
+ $DESCRIPTOR(clidsc,"DCL"); $DESCRIPTOR(tabdsc,"DCLTABLES");
+ $DESCRIPTOR(mbxdsc,mbxnam);
+#ifdef USE_THREADS
+ static perl_mutex primenv_mutex;
+ MUTEX_INIT(&primenv_mutex);
+#endif
if (primed) return;
+ MUTEX_LOCK(&primenv_mutex);
+ if (primed) { MUTEX_UNLOCK(&primenv_mutex); return; }
/* Perform a dummy fetch as an lval to insure that the hash table is
- * set up. Otherwise, the hv_store() will turn into a nullop */
+ * set up. Otherwise, the hv_store() will turn into a nullop. */
(void) hv_fetch(envhv,"DEFAULT",7,TRUE);
- /* Also, set up the four "special" keys that the CRTL defines,
- * whether or not underlying logical names exist. */
- (void) hv_fetch(envhv,"HOME",4,TRUE);
- (void) hv_fetch(envhv,"TERM",4,TRUE);
- (void) hv_fetch(envhv,"PATH",4,TRUE);
- (void) hv_fetch(envhv,"USER",4,TRUE);
+ /* Also, set up any "special" keys that the CRTL defines,
+ * either by itself or becasue we were called from a C program
+ * using exec[lv]e() */
+ for (i = 0; environ[i]; i++) {
+ if (!(start = strchr(environ[i],'='))) {
+ warn("Ill-formed CRTL environ value \"%s\"\n",environ[i]);
+ }
+ else {
+ start++;
+ (void) hv_store(envhv,environ[i],start - environ[i] - 1,newSVpv(start,0),0);
+ }
+ }
/* Now, go get the logical names */
- if ((sholog = safe_popen("$ Show Logical *","r")) == Nullfp)
- _ckvmssts(vaxc$errno);
- /* We use Perl's sv_gets to read from the pipe, since safe_popen is
+ create_mbx(&chan,&mbxdsc);
+ if ((sholog = PerlIO_open(mbxnam,"r")) != Nullfp) {
+ if ((retsts = sys$dassgn(chan)) & 1) {
+ /* Be certain that subprocess is using the CLI and command tables we
+ * expect, and don't pass symbols through so that we insure that
+ * "Show Logical" can't be subverted.
+ */
+ do {
+ retsts = lib$spawn(&cmddsc,&nldsc,&mbxdsc,&flags,0,0,&substs,
+ 0,&riseandshine,0,0,&clidsc,&tabdsc);
+ flags &= ~CLI$M_TRUSTED; /* Just in case we hit a really old version */
+ } while (retsts == LIB$_INVARG && (flags | CLI$M_TRUSTED));
+ }
+ }
+ if (sholog == Nullfp || !(retsts & 1)) {
+ if (sholog != Nullfp) PerlIO_close(sholog);
+ MUTEX_UNLOCK(&primenv_mutex);
+ _ckvmssts(sholog == Nullfp ? vaxc$errno : retsts);
+ }
+ /* We use Perl's sv_gets to read from the pipe, since PerlIO_open is
* tied to Perl's I/O layer, so it may not return a simple FILE * */
- oldrs = rs;
- rs = newSVpv("\n",1);
+ oldrs = PL_rs;
+ PL_rs = newSVpv("\n",1);
linesv = newSVpv("",0);
while (1) {
if ((start = sv_gets(linesv,sholog,0)) == Nullch) {
- my_pclose(sholog);
- SvREFCNT_dec(linesv); SvREFCNT_dec(rs); rs = oldrs;
+ PerlIO_close(sholog);
+ SvREFCNT_dec(linesv); SvREFCNT_dec(PL_rs); PL_rs = oldrs;
primed = 1;
+ /* Wait for subprocess to clean up (we know subproc won't return 0) */
+ while (substs == 0) { sys$hiber(); wakect++;}
+ if (wakect > 1) sys$wake(0,0); /* Stole someone else's wake */
+ _ckvmssts(substs);
+ MUTEX_UNLOCK(&primenv_mutex);
return;
}
while (*start != '"' && *start != '=' && *start) start++;
@@ -211,11 +270,11 @@ prime_env_iter(void)
else end = Nullch;
if ((eqvlen = my_trnlnm(start,eqv,0)) == 0) {
if (vaxc$errno == SS$_NOLOGNAM || vaxc$errno == SS$_IVLOGNAM) {
- if (dowarn)
+ if (PL_dowarn)
warn("Ill-formed logical name |%s| in prime_env_iter",start);
continue;
}
- else _ckvmssts(vaxc$errno);
+ else { MUTEX_UNLOCK(&primenv_mutex); _ckvmssts(vaxc$errno); }
}
else {
eqvsv = newSVpv(eqv,eqvlen);
@@ -335,7 +394,7 @@ do_rmdir(char *name)
{
char dirfile[NAM$C_MAXRSS+1];
int retval;
- struct mystat st;
+ Stat_t st;
if (do_fileify_dirspec(name,dirfile,0) == NULL) return -1;
if (flex_stat(dirfile,&st) || !S_ISDIR(st.st_mode)) retval = -1;
@@ -557,7 +616,7 @@ popen_completion_ast(struct pipe_details *thispipe)
}
}
-static FILE *
+static PerlIO *
safe_popen(char *cmd, char *mode)
{
static int handler_set_up = FALSE;
@@ -614,7 +673,7 @@ safe_popen(char *cmd, char *mode)
info->next=open_pipes; /* prepend to list */
open_pipes=info;
- forkprocess = info->pid;
+ PL_forkprocess = info->pid;
return info->fp;
} /* end of safe_popen */
@@ -653,7 +712,7 @@ I32 my_pclose(FILE *fp)
unsigned long int chan, iosb[2], retsts, retsts2;
struct dsc$descriptor devdsc = {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, devnam};
- if (fgetname(info->fp,devnam)) {
+ if (fgetname(info->fp,devnam,1)) {
/* It oughta be a mailbox, so fgetname should give just the device
* name, but just in case . . . */
if ((cp = strrchr(devnam,':')) != NULL) *(cp+1) = '\0';
@@ -705,11 +764,11 @@ my_waitpid(Pid_t pid, int *statusp, int flags)
unsigned long int ownercode = JPI$_OWNER, ownerpid, mypid;
unsigned long int interval[2],sts;
- if (dowarn) {
+ if (PL_dowarn) {
_ckvmssts(lib$getjpi(&ownercode,&pid,0,&ownerpid,0,0));
_ckvmssts(lib$getjpi(&ownercode,0,0,&mypid,0,0));
if (ownerpid != mypid)
- warn("pid %d not a child",pid);
+ warn("pid %x not a child",pid);
}
_ckvmssts(sys$bintim(&intdsc,interval));
@@ -820,12 +879,14 @@ do_rmsexpand(char *filespec, char *outbuf, int ts, char *defspec, unsigned opts)
retsts = sys$parse(&myfab,0,0);
if (!(retsts & 1)) {
+ mynam.nam$b_nop |= NAM$M_SYNCHK;
if (retsts == RMS$_DNF || retsts == RMS$_DIR ||
retsts == RMS$_DEV || retsts == RMS$_DEV) {
- mynam.nam$b_nop |= NAM$M_SYNCHK;
retsts = sys$parse(&myfab,0,0);
if (retsts & 1) goto expanded;
}
+ mynam.nam$l_rlf = NULL; myfab.fab$b_dns = 0;
+ (void) sys$parse(&myfab,0,0); /* Free search context */
if (out) Safefree(out);
set_vaxc_errno(retsts);
if (retsts == RMS$_PRV) set_errno(EACCES);
@@ -836,6 +897,8 @@ do_rmsexpand(char *filespec, char *outbuf, int ts, char *defspec, unsigned opts)
}
retsts = sys$search(&myfab,0,0);
if (!(retsts & 1) && retsts != RMS$_FNF) {
+ mynam.nam$b_nop |= NAM$M_SYNCHK; mynam.nam$l_rlf = NULL;
+ myfab.fab$b_dns = 0; (void) sys$parse(&myfab,0,0); /* Free search context */
if (out) Safefree(out);
set_vaxc_errno(retsts);
if (retsts == RMS$_PRV) set_errno(EACCES);
@@ -853,6 +916,10 @@ do_rmsexpand(char *filespec, char *outbuf, int ts, char *defspec, unsigned opts)
if (!(mynam.nam$l_fnb & NAM$M_EXP_VER) &&
(!defspec || !*defspec || !strchr(myfab.fab$l_dna,';')))
speclen = mynam.nam$l_ver - out;
+ if (!(mynam.nam$l_fnb & NAM$M_EXP_TYPE) &&
+ (!defspec || !*defspec || defspec[myfab.fab$b_dns-1] != '.' ||
+ defspec[myfab.fab$b_dns-2] == '.'))
+ speclen = mynam.nam$l_type - out;
/* If we just had a directory spec on input, $PARSE "helpfully"
* adds an empty name and type for us */
if (mynam.nam$l_name == mynam.nam$l_type &&
@@ -874,6 +941,9 @@ do_rmsexpand(char *filespec, char *outbuf, int ts, char *defspec, unsigned opts)
if (do_tounixspec(outbuf,tmpfspec,0) == NULL) return NULL;
strcpy(outbuf,tmpfspec);
}
+ mynam.nam$b_nop |= NAM$M_SYNCHK; mynam.nam$l_rlf = NULL;
+ mynam.nam$l_rsa = NULL; mynam.nam$b_rss = 0;
+ myfab.fab$b_dns = 0; (void) sys$parse(&myfab,0,0); /* Free search context */
return outbuf;
}
/*}}}*/
@@ -911,7 +981,7 @@ char *rmsexpand_ts(char *spec, char *buf, char *def, unsigned opt)
** tounixspec() - convert any file spec into a Unix-style file spec.
** tovmsspec() - convert any file spec into a VMS-style spec.
**
-** Copyright 1996 by Charles Bailey <bailey@genetics.upenn.edu>
+** Copyright 1996 by Charles Bailey <bailey@newman.upenn.edu>
** Permission is given to distribute this code as part of the Perl
** standard distribution under the terms of the GNU General Public
** License or the Perl Artistic License. Copies of each may be
@@ -924,17 +994,20 @@ static char *do_fileify_dirspec(char *dir,char *buf,int ts)
static char __fileify_retbuf[NAM$C_MAXRSS+1];
unsigned long int dirlen, retlen, addmfd = 0, hasfilename = 0;
char *retspec, *cp1, *cp2, *lastdir;
- char trndir[NAM$C_MAXRSS+1], vmsdir[NAM$C_MAXRSS+1];
+ char trndir[NAM$C_MAXRSS+2], vmsdir[NAM$C_MAXRSS+1];
if (!dir || !*dir) {
set_errno(EINVAL); set_vaxc_errno(SS$_BADPARAM); return NULL;
}
dirlen = strlen(dir);
- if (dir[dirlen-1] == '/') --dirlen;
- if (!dirlen) {
- set_errno(ENOTDIR);
- set_vaxc_errno(RMS$_DIR);
- return NULL;
+ while (dir[dirlen-1] == '/') --dirlen;
+ if (!dirlen) { /* We had Unixish '/' -- substitute top of current tree */
+ strcpy(trndir,"/sys$disk/000000");
+ dir = trndir;
+ dirlen = 16;
+ }
+ if (dirlen > NAM$C_MAXRSS) {
+ set_errno(ENAMETOOLONG); set_vaxc_errno(RMS$_SYN); return NULL;
}
if (!strpbrk(dir+1,"/]>:")) {
strcpy(trndir,*dir == '/' ? dir + 1: dir);
@@ -995,11 +1068,28 @@ static char *do_fileify_dirspec(char *dir,char *buf,int ts)
if (*(cp1+2) == '.') cp1++;
if (*(cp1+2) == '/' || *(cp1+2) == '\0') {
if (do_tovmsspec(dir,vmsdir,0) == NULL) return NULL;
+ if (strchr(vmsdir,'/') != NULL) {
+ /* If do_tovmsspec() returned it, it must have VMS syntax
+ * delimiters in it, so it's a mixed VMS/Unix spec. We take
+ * the time to check this here only so we avoid a recursion
+ * loop; otherwise, gigo.
+ */
+ set_errno(EINVAL); set_vaxc_errno(RMS$_SYN); return NULL;
+ }
if (do_fileify_dirspec(vmsdir,trndir,0) == NULL) return NULL;
return do_tounixspec(trndir,buf,ts);
}
cp1++;
} while ((cp1 = strstr(cp1,"/.")) != NULL);
+ lastdir = strrchr(dir,'/');
+ }
+ else if (!strcmp(&dir[dirlen-7],"/000000")) {
+ /* Ditto for specs that end in an MFD -- let the VMS code
+ * figure out whether it's a real device or a rooted logical. */
+ dir[dirlen] = '/'; dir[dirlen+1] = '\0';
+ if (do_tovmsspec(dir,vmsdir,0) == NULL) return NULL;
+ if (do_fileify_dirspec(vmsdir,trndir,0) == NULL) return NULL;
+ return do_tounixspec(trndir,buf,ts);
}
else {
if ( !(lastdir = cp1 = strrchr(dir,'/')) &&
@@ -1544,6 +1634,11 @@ static char *do_tovmsspec(char *path, char *buf, int ts) {
STRLEN trnend;
while (*(cp2+1) == '/') cp2++; /* Skip multiple /s */
+ if (!*(cp2+1)) {
+ if (!buf & ts) Renew(rslt,18,char);
+ strcpy(rslt,"sys$disk:[000000]");
+ return rslt;
+ }
while (*(++cp2) != '/' && *cp2) *(cp1++) = *cp2;
*cp1 = '\0';
islnm = my_trnlnm(rslt,trndev,0);
@@ -1720,7 +1815,7 @@ char *tounixpath_ts(char *path, char *buf) { return do_tounixpath(path,buf,1); }
* gain. *
* *
* 27-Aug-1994 Modified for inclusion in perl5 *
- * by Charles Bailey bailey@genetics.upenn.edu *
+ * by Charles Bailey bailey@newman.upenn.edu *
*****************************************************************************
*/
@@ -2223,27 +2318,83 @@ unsigned long int flags = 17, one = 1, retsts;
/* OS-specific initialization at image activation (not thread startup) */
+/* Older VAXC header files lack these constants */
+#ifndef JPI$_RIGHTS_SIZE
+# define JPI$_RIGHTS_SIZE 817
+#endif
+#ifndef KGB$M_SUBSYSTEM
+# define KGB$M_SUBSYSTEM 0x8
+#endif
+
/*{{{void vms_image_init(int *, char ***)*/
void
vms_image_init(int *argcp, char ***argvp)
{
- unsigned long int *mask, iosb[2], i;
- unsigned short int dummy;
- union prvdef iprv;
- struct itmlst_3 jpilist[2] = { {sizeof iprv, JPI$_IMAGPRIV, &iprv, &dummy},
- { 0, 0, 0, 0} };
+ unsigned long int *mask, iosb[2], i, rlst[128], rsz, add_taint = FALSE;
+ unsigned long int iprv[(sizeof(union prvdef) + sizeof(unsigned long int) - 1) / sizeof(unsigned long int)];
+ unsigned short int dummy, rlen;
+ struct itmlst_3 jpilist[4] = { {sizeof iprv, JPI$_IMAGPRIV, iprv, &dummy},
+ {sizeof rlst, JPI$_RIGHTSLIST, rlst, &rlen},
+ { sizeof rsz, JPI$_RIGHTS_SIZE, &rsz, &dummy},
+ { 0, 0, 0, 0} };
_ckvmssts(sys$getjpiw(0,NULL,NULL,jpilist,iosb,NULL,NULL));
_ckvmssts(iosb[0]);
- mask = (unsigned long int *) &iprv; /* Quick change of view */;
- for (i = 0; i < (sizeof iprv + sizeof(unsigned long int) - 1) / sizeof(unsigned long int); i++) {
- if (mask[i]) { /* Running image installed with privs? */
- _ckvmssts(sys$setprv(0,&iprv,0,NULL)); /* Turn 'em off. */
- tainting = TRUE;
+ for (i = 0; i < sizeof iprv / sizeof(unsigned long int); i++) {
+ if (iprv[i]) { /* Running image installed with privs? */
+ _ckvmssts(sys$setprv(0,iprv,0,NULL)); /* Turn 'em off. */
+ add_taint = TRUE;
break;
}
}
+ /* Rights identifiers might trigger tainting as well. */
+ if (!add_taint && (rlen || rsz)) {
+ while (rlen < rsz) {
+ /* We didn't get all the identifiers on the first pass. Allocate a
+ * buffer much larger than $GETJPI wants (rsz is size in bytes that
+ * were needed to hold all identifiers at time of last call; we'll
+ * allocate that many unsigned long ints), and go back and get 'em.
+ */
+ if (jpilist[1].bufadr != rlst) Safefree(jpilist[1].bufadr);
+ jpilist[1].bufadr = New(1320,mask,rsz,unsigned long int);
+ jpilist[1].buflen = rsz * sizeof(unsigned long int);
+ _ckvmssts(sys$getjpiw(0,NULL,NULL,&jpilist[1],iosb,NULL,NULL));
+ _ckvmssts(iosb[0]);
+ }
+ mask = jpilist[1].bufadr;
+ /* Check attribute flags for each identifier (2nd longword); protected
+ * subsystem identifiers trigger tainting.
+ */
+ for (i = 1; i < (rlen + sizeof(unsigned long int) - 1) / sizeof(unsigned long int); i += 2) {
+ if (mask[i] & KGB$M_SUBSYSTEM) {
+ add_taint = TRUE;
+ break;
+ }
+ }
+ if (mask != rlst) Safefree(mask);
+ }
+ /* We need to use this hack to tell Perl it should run with tainting,
+ * since its tainting flag may be part of the PL_curinterp struct, which
+ * hasn't been allocated when vms_image_init() is called.
+ */
+ if (add_taint) {
+ char ***newap;
+ New(1320,newap,*argcp+2,char **);
+ newap[0] = argvp[0];
+ *newap[1] = "-T";
+ Copy(argvp[1],newap[2],*argcp-1,char **);
+ /* We orphan the old argv, since we don't know where it's come from,
+ * so we don't know how to free it.
+ */
+ *argcp++; argvp = newap;
+ }
getredirection(argcp,argvp);
+#if defined(USE_THREADS) && defined(__DECC)
+ {
+# include <reentrancy.h>
+ (void) decc$set_reentrancy(C$C_MULTITHREAD);
+ }
+#endif
return;
}
/*}}}*/
@@ -2340,7 +2491,7 @@ trim_unixpath(char *fspec, char *wildspec, int opts)
for (front = end ; front >= base; front--)
if (*front == '/' && !dirs--) { front++; break; }
}
- for (cp1=template,cp2=lcres; *cp1 && cp2 <= lcend + sizeof lcend;
+ for (cp1=template,cp2=lcres; *cp1 && cp2 <= lcres + sizeof lcres;
cp1++,cp2++) *cp2 = _tolower(*cp1); /* Make lc copy for match */
if (cp1 != '\0') return 0; /* Path too long. */
lcend = cp2;
@@ -2413,7 +2564,7 @@ trim_unixpath(char *fspec, char *wildspec, int opts)
* VMS readdir() routines.
* Written by Rich $alz, <rsalz@bbn.com> in August, 1990.
*
- * 21-Jul-1994 Charles Bailey bailey@genetics.upenn.edu
+ * 21-Jul-1994 Charles Bailey bailey@newman.upenn.edu
* Minor modifications to original routines.
*/
@@ -2429,13 +2580,22 @@ opendir(char *name)
{
DIR *dd;
char dir[NAM$C_MAXRSS+1];
-
- /* Get memory for the handle, and the pattern. */
- New(1306,dd,1,DIR);
+ Stat_t sb;
+
if (do_tovmspath(name,dir,0) == NULL) {
- Safefree((char *)dd);
- return(NULL);
+ return NULL;
}
+ if (flex_stat(dir,&sb) == -1) return NULL;
+ if (!S_ISDIR(sb.st_mode)) {
+ set_errno(ENOTDIR); set_vaxc_errno(RMS$_DIR);
+ return NULL;
+ }
+ if (!cando_by_name(S_IRUSR,0,dir)) {
+ set_errno(EACCES); set_vaxc_errno(RMS$_PRV);
+ return NULL;
+ }
+ /* Get memory for the handle, and the pattern. */
+ New(1306,dd,1,DIR);
New(1307,dd->pattern,strlen(dir)+sizeof "*.*" + 1,char);
/* Fill in the fields; mainly playing with the descriptor. */
@@ -2669,9 +2829,9 @@ static struct dsc$descriptor_s VMScmd = {0,DSC$K_DTYPE_T,DSC$K_CLASS_S,Nullch};
static void
vms_execfree() {
- if (Cmd) {
- Safefree(Cmd);
- Cmd = Nullch;
+ if (PL_Cmd) {
+ Safefree(PL_Cmd);
+ PL_Cmd = Nullch;
}
if (VMScmd.dsc$a_pointer) {
Safefree(VMScmd.dsc$a_pointer);
@@ -2683,10 +2843,12 @@ vms_execfree() {
static char *
setup_argstr(SV *really, SV **mark, SV **sp)
{
+ dTHR;
char *junk, *tmps = Nullch;
register size_t cmdlen = 0;
size_t rlen;
register SV **idx;
+ STRLEN n_a;
idx = mark;
if (really) {
@@ -2703,20 +2865,20 @@ setup_argstr(SV *really, SV **mark, SV **sp)
cmdlen += rlen ? rlen + 1 : 0;
}
}
- New(401,Cmd,cmdlen+1,char);
+ New(401,PL_Cmd,cmdlen+1,char);
if (tmps && *tmps) {
- strcpy(Cmd,tmps);
+ strcpy(PL_Cmd,tmps);
mark++;
}
- else *Cmd = '\0';
+ else *PL_Cmd = '\0';
while (++mark <= sp) {
if (*mark) {
- strcat(Cmd," ");
- strcat(Cmd,SvPVx(*mark,na));
+ strcat(PL_Cmd," ");
+ strcat(PL_Cmd,SvPVx(*mark,n_a));
}
}
- return Cmd;
+ return PL_Cmd;
} /* end of setup_argstr() */
@@ -2748,9 +2910,9 @@ setup_cmddsc(char *cmd, int check_img)
else isdcl = 1;
if (isdcl) { /* It's a DCL command, just do it. */
VMScmd.dsc$w_length = strlen(cmd);
- if (cmd == Cmd) {
- VMScmd.dsc$a_pointer = Cmd;
- Cmd = Nullch; /* Don't try to free twice in vms_execfree() */
+ if (cmd == PL_Cmd) {
+ VMScmd.dsc$a_pointer = PL_Cmd;
+ PL_Cmd = Nullch; /* Don't try to free twice in vms_execfree() */
}
else VMScmd.dsc$a_pointer = savepvn(cmd,VMScmd.dsc$w_length);
}
@@ -2773,6 +2935,7 @@ setup_cmddsc(char *cmd, int check_img)
s = resspec;
while (*s && !isspace(*s)) s++;
*s = '\0';
+ if (!cando_by_name(S_IXUSR,0,resspec)) return RMS$_PRV;
New(402,VMScmd.dsc$a_pointer,7 + s - resspec + (rest ? strlen(rest) : 0),char);
strcpy(VMScmd.dsc$a_pointer,"$ MCR ");
strcat(VMScmd.dsc$a_pointer,resspec);
@@ -2790,6 +2953,7 @@ setup_cmddsc(char *cmd, int check_img)
bool
vms_do_aexec(SV *really,SV **mark,SV **sp)
{
+ dTHR;
if (sp > mark) {
if (vfork_called) { /* this follows a vfork - act Unixish */
vfork_called--;
@@ -2830,9 +2994,24 @@ vms_do_exec(char *cmd)
if ((retsts = setup_cmddsc(cmd,1)) & 1)
retsts = lib$do_command(&VMScmd);
- set_errno(EVMSERR);
+ switch (retsts) {
+ case RMS$_FNF:
+ set_errno(ENOENT); break;
+ case RMS$_DNF: case RMS$_DIR: case RMS$_DEV:
+ set_errno(ENOTDIR); break;
+ case RMS$_PRV:
+ set_errno(EACCES); break;
+ case RMS$_SYN:
+ set_errno(EINVAL); break;
+ case CLI$_BUFOVF:
+ set_errno(E2BIG); break;
+ case LIB$_INVARG: case LIB$_INVSTRDES: case SS$_ACCVIO: /* shouldn't happen */
+ _ckvmssts(retsts); /* fall through */
+ default: /* SS$_DUPLNAM, SS$_CLI, resource exhaustion, etc. */
+ set_errno(EVMSERR);
+ }
set_vaxc_errno(retsts);
- if (dowarn)
+ if (PL_dowarn)
warn("Can't exec \"%s\": %s", VMScmd.dsc$a_pointer, Strerror(errno));
vms_execfree();
}
@@ -2844,11 +3023,12 @@ vms_do_exec(char *cmd)
unsigned long int do_spawn(char *);
-/* {{{ unsigned long int do_aspawn(SV *really,SV **mark,SV **sp) */
+/* {{{ unsigned long int do_aspawn(void *really,void **mark,void **sp) */
unsigned long int
-do_aspawn(SV *really,SV **mark,SV **sp)
+do_aspawn(void *really,void **mark,void **sp)
{
- if (sp > mark) return do_spawn(setup_argstr(really,mark,sp));
+ dTHR;
+ if (sp > mark) return do_spawn(setup_argstr((SV *)really,(SV **)mark,(SV **)sp));
return SS$_ABORT;
} /* end of do_aspawn() */
@@ -2858,22 +3038,37 @@ do_aspawn(SV *really,SV **mark,SV **sp)
unsigned long int
do_spawn(char *cmd)
{
- unsigned long int substs, hadcmd = 1;
+ unsigned long int sts, substs, hadcmd = 1;
TAINT_ENV();
TAINT_PROPER("spawn");
if (!cmd || !*cmd) {
hadcmd = 0;
- _ckvmssts(lib$spawn(0,0,0,0,0,0,&substs,0,0,0,0,0,0));
+ sts = lib$spawn(0,0,0,0,0,0,&substs,0,0,0,0,0,0);
}
- else if ((substs = setup_cmddsc(cmd,0)) & 1) {
- _ckvmssts(lib$spawn(&VMScmd,0,0,0,0,0,&substs,0,0,0,0,0,0));
+ else if ((sts = setup_cmddsc(cmd,0)) & 1) {
+ sts = lib$spawn(&VMScmd,0,0,0,0,0,&substs,0,0,0,0,0,0);
}
- if (!(substs&1)) {
- set_errno(EVMSERR);
- set_vaxc_errno(substs);
- if (dowarn)
+ if (!(sts & 1)) {
+ switch (sts) {
+ case RMS$_FNF:
+ set_errno(ENOENT); break;
+ case RMS$_DNF: case RMS$_DIR: case RMS$_DEV:
+ set_errno(ENOTDIR); break;
+ case RMS$_PRV:
+ set_errno(EACCES); break;
+ case RMS$_SYN:
+ set_errno(EINVAL); break;
+ case CLI$_BUFOVF:
+ set_errno(E2BIG); break;
+ case LIB$_INVARG: case LIB$_INVSTRDES: case SS$_ACCVIO: /* shouldn't happen */
+ _ckvmssts(sts); /* fall through */
+ default: /* SS$_DUPLNAM, SS$_CLI, resource exhaustion, etc. */
+ set_errno(EVMSERR);
+ }
+ set_vaxc_errno(sts);
+ if (PL_dowarn)
warn("Can't spawn \"%s\": %s",
hadcmd ? VMScmd.dsc$a_pointer : "", Strerror(errno));
}
@@ -2915,7 +3110,7 @@ my_flush(FILE *fp)
int res;
if ((res = fflush(fp)) == 0) {
#ifdef VMS_DO_SOCKETS
- struct mystat s;
+ Stat_t s;
if (Fstat(fileno(fp), &s) == 0 && !S_ISSOCK(s.st_mode))
#endif
res = fsync(fileno(fp));
@@ -3125,7 +3320,7 @@ struct passwd *my_getpwuid(Uid_t uid)
else {
uic.uic$l_uic= uid;
if (!uic.uic$v_group)
- uic.uic$v_group= getgid();
+ uic.uic$v_group= PerlProc_getgid();
if (valid_uic(uic))
status = sys$idtoasc(uic.uic$l_uic, &lname, &name_desc, 0, 0, 0);
else status = SS$_IVIDENT;
@@ -3177,7 +3372,105 @@ void my_endpwent()
}
/*}}}*/
-#if __VMS_VER < 70000000 || __DECC_VER < 50200000
+#ifdef HOMEGROWN_POSIX_SIGNALS
+ /* Signal handling routines, pulled into the core from POSIX.xs.
+ *
+ * We need these for threads, so they've been rolled into the core,
+ * rather than left in POSIX.xs.
+ *
+ * (DRS, Oct 23, 1997)
+ */
+
+ /* sigset_t is atomic under VMS, so these routines are easy */
+/*{{{int my_sigemptyset(sigset_t *) */
+int my_sigemptyset(sigset_t *set) {
+ if (!set) { SETERRNO(EFAULT,SS$_ACCVIO); return -1; }
+ *set = 0; return 0;
+}
+/*}}}*/
+
+
+/*{{{int my_sigfillset(sigset_t *)*/
+int my_sigfillset(sigset_t *set) {
+ int i;
+ if (!set) { SETERRNO(EFAULT,SS$_ACCVIO); return -1; }
+ for (i = 0; i < NSIG; i++) *set |= (1 << i);
+ return 0;
+}
+/*}}}*/
+
+
+/*{{{int my_sigaddset(sigset_t *set, int sig)*/
+int my_sigaddset(sigset_t *set, int sig) {
+ if (!set) { SETERRNO(EFAULT,SS$_ACCVIO); return -1; }
+ if (sig > NSIG) { SETERRNO(EINVAL,LIB$_INVARG); return -1; }
+ *set |= (1 << (sig - 1));
+ return 0;
+}
+/*}}}*/
+
+
+/*{{{int my_sigdelset(sigset_t *set, int sig)*/
+int my_sigdelset(sigset_t *set, int sig) {
+ if (!set) { SETERRNO(EFAULT,SS$_ACCVIO); return -1; }
+ if (sig > NSIG) { SETERRNO(EINVAL,LIB$_INVARG); return -1; }
+ *set &= ~(1 << (sig - 1));
+ return 0;
+}
+/*}}}*/
+
+
+/*{{{int my_sigismember(sigset_t *set, int sig)*/
+int my_sigismember(sigset_t *set, int sig) {
+ if (!set) { SETERRNO(EFAULT,SS$_ACCVIO); return -1; }
+ if (sig > NSIG) { SETERRNO(EINVAL,LIB$_INVARG); return -1; }
+ *set & (1 << (sig - 1));
+}
+/*}}}*/
+
+
+/*{{{int my_sigprocmask(int how, sigset_t *set, sigset_t *oset)*/
+int my_sigprocmask(int how, sigset_t *set, sigset_t *oset) {
+ sigset_t tempmask;
+
+ /* If set and oset are both null, then things are badly wrong. Bail out. */
+ if ((oset == NULL) && (set == NULL)) {
+ set_errno(EFAULT); set_vaxc_errno(SS$_ACCVIO);
+ return -1;
+ }
+
+ /* If set's null, then we're just handling a fetch. */
+ if (set == NULL) {
+ tempmask = sigblock(0);
+ }
+ else {
+ switch (how) {
+ case SIG_SETMASK:
+ tempmask = sigsetmask(*set);
+ break;
+ case SIG_BLOCK:
+ tempmask = sigblock(*set);
+ break;
+ case SIG_UNBLOCK:
+ tempmask = sigblock(0);
+ sigsetmask(*oset & ~tempmask);
+ break;
+ default:
+ set_errno(EINVAL); set_vaxc_errno(LIB$_INVARG);
+ return -1;
+ }
+ }
+
+ /* Did they pass us an oset? If so, stick our holding mask into it */
+ if (oset)
+ *oset = tempmask;
+
+ return 0;
+}
+/*}}}*/
+#endif /* HOMEGROWN_POSIX_SIGNALS */
+
+
/* Used for UTC calculation in my_gmtime(), my_localtime(), my_time(),
* my_utime(), and flex_stat(), all of which operate on UTC unless
* VMSISH_TIMES is true.
@@ -3197,21 +3490,59 @@ static long int utc_offset_secs;
#undef localtime
#undef time
+#if defined(__VMS_VER) && __VMS_VER >= 70000000 && __DECC_VER >= 50200000
+# define RTL_USES_UTC 1
+#endif
+
+static time_t toutc_dst(time_t loc) {
+ struct tm *rsltmp;
+
+ if ((rsltmp = localtime(&loc)) == NULL) return -1;
+ loc -= utc_offset_secs;
+ if (rsltmp->tm_isdst) loc -= 3600;
+ return loc;
+}
+#define _toutc(secs) ((secs) == -1 ? -1 : \
+ ((gmtime_emulation_type || my_time(NULL)), \
+ (gmtime_emulation_type == 1 ? toutc_dst(secs) : \
+ ((secs) - utc_offset_secs))))
+
+static time_t toloc_dst(time_t utc) {
+ struct tm *rsltmp;
+
+ utc += utc_offset_secs;
+ if ((rsltmp = localtime(&utc)) == NULL) return -1;
+ if (rsltmp->tm_isdst) utc += 3600;
+ return utc;
+}
+#define _toloc(secs) ((secs) == -1 ? -1 : \
+ ((gmtime_emulation_type || my_time(NULL)), \
+ (gmtime_emulation_type == 1 ? toloc_dst(secs) : \
+ ((secs) + utc_offset_secs))))
+
+
/* my_time(), my_localtime(), my_gmtime()
- * By default traffic in UTC time values, suing CRTL gmtime() or
+ * By default traffic in UTC time values, using CRTL gmtime() or
* SYS$TIMEZONE_DIFFERENTIAL to determine offset from local time zone.
+ * Note: We need to use these functions even when the CRTL has working
+ * UTC support, since they also handle C<use vmsish qw(times);>
+ *
* Contributed by Chuck Lane <lane@duphy4.physics.drexel.edu>
- * Modified by Charles Bailey <bailey@genetics.upenn.edu>
+ * Modified by Charles Bailey <bailey@newman.upenn.edu>
*/
/*{{{time_t my_time(time_t *timep)*/
time_t my_time(time_t *timep)
{
+ dTHR;
time_t when;
+ struct tm *tm_p;
if (gmtime_emulation_type == 0) {
- struct tm *tm_p;
- time_t base = 15 * 86400; /* 15jan71; to avoid month ends */
+ int dstnow;
+ time_t base = 15 * 86400; /* 15jan71; to avoid month/year ends between */
+ /* results of calls to gmtime() and localtime() */
+ /* for same &base */
gmtime_emulation_type++;
if ((tm_p = gmtime(&base)) == NULL) { /* CRTL gmtime() is a fake */
@@ -3238,11 +3569,13 @@ time_t my_time(time_t *timep)
}
when = time(NULL);
- if (
-# ifdef VMSISH_TIME
- !VMSISH_TIME &&
-# endif
- when != -1) when -= utc_offset_secs;
+# ifdef VMSISH_TIME
+# ifdef RTL_USES_UTC
+ if (VMSISH_TIME) when = _toloc(when);
+# else
+ if (!VMSISH_TIME) when = _toutc(when);
+# endif
+# endif
if (timep != NULL) *timep = when;
return when;
@@ -3254,23 +3587,29 @@ time_t my_time(time_t *timep)
struct tm *
my_gmtime(const time_t *timep)
{
+ dTHR;
char *p;
time_t when;
+ struct tm *rsltmp;
if (timep == NULL) {
set_errno(EINVAL); set_vaxc_errno(LIB$_INVARG);
return NULL;
}
if (*timep == 0) gmtime_emulation_type = 0; /* possibly reset TZ */
- if (gmtime_emulation_type == 0) (void) my_time(NULL); /* Init UTC */
when = *timep;
# ifdef VMSISH_TIME
- if (VMSISH_TIME) when -= utc_offset_secs; /* Input was local time */
-# endif
+ if (VMSISH_TIME) when = _toutc(when); /* Input was local time */
+# endif
+# ifdef RTL_USES_UTC /* this implies that the CRTL has a working gmtime() */
+ return gmtime(&when);
+# else
/* CRTL localtime() wants local time as input, so does no tz correction */
- return localtime(&when);
-
+ rsltmp = localtime(&when);
+ if (rsltmp) rsltmp->tm_isdst = 0; /* We already took DST into account */
+ return rsltmp;
+#endif
} /* end of my_gmtime() */
/*}}}*/
@@ -3279,7 +3618,9 @@ my_gmtime(const time_t *timep)
struct tm *
my_localtime(const time_t *timep)
{
+ dTHR;
time_t when;
+ struct tm *rsltmp;
if (timep == NULL) {
set_errno(EINVAL); set_vaxc_errno(LIB$_INVARG);
@@ -3289,11 +3630,21 @@ my_localtime(const time_t *timep)
if (gmtime_emulation_type == 0) (void) my_time(NULL); /* Init UTC */
when = *timep;
+# ifdef RTL_USES_UTC
# ifdef VMSISH_TIME
- if (!VMSISH_TIME) when += utc_offset_secs; /* Input was UTC */
+ if (VMSISH_TIME) when = _toutc(when);
# endif
- /* CRTL localtime() wants local time as input, so does no tz correction */
+ /* CRTL localtime() wants UTC as input, does tz correction itself */
return localtime(&when);
+# else
+# ifdef VMSISH_TIME
+ if (!VMSISH_TIME) when = _toloc(when); /* Input was UTC */
+# endif
+# endif
+ /* CRTL localtime() wants local time as input, so does no tz correction */
+ rsltmp = localtime(&when);
+ if (rsltmp && gmtime_emulation_type != 1) rsltmp->tm_isdst = -1;
+ return rsltmp;
} /* end of my_localtime() */
/*}}}*/
@@ -3303,7 +3654,6 @@ my_localtime(const time_t *timep)
#define localtime(t) my_localtime(t)
#define time(t) my_time(t)
-#endif /* VMS VER < 7.0 || Dec C < 5.2
/* my_utime - update modification time of a file
* calling sequence is identical to POSIX utime(), but under
@@ -3325,6 +3675,7 @@ static const long int utime_baseadjust[2] = { 0x4beb4000, 0x7c9567 };
/*{{{int my_utime(char *path, struct utimbuf *utimes)*/
int my_utime(char *file, struct utimbuf *utimes)
{
+ dTHR;
register int i;
long int bintime[2], len = 2, lowbit, unixtime,
secscale = 10000000; /* seconds --> 100 ns intervals */
@@ -3367,11 +3718,9 @@ int my_utime(char *file, struct utimbuf *utimes)
*/
lowbit = (utimes->modtime & 1) ? secscale : 0;
unixtime = (long int) utimes->modtime;
-#if defined(VMSISH_TIME) && (__VMS_VER < 70000000 || __DECC_VER < 50200000)
- if (!VMSISH_TIME) { /* Input was UTC; convert to local for sys svc */
- if (!gmtime_emulation_type) (void) time(NULL); /* Initialize UTC */
- unixtime += utc_offset_secs;
- }
+# ifdef VMSISH_TIME
+ /* If input was UTC; convert to local for sys svc */
+ if (!VMSISH_TIME) unixtime = _toloc(unixtime);
# endif
unixtime >> 1; secscale << 1;
retsts = lib$emul(&secscale, &unixtime, &lowbit, bintime);
@@ -3569,17 +3918,16 @@ is_null_device(name)
return (*name++ == ':') && (*name != ':');
}
-/* Do the permissions allow some operation? Assumes statcache already set. */
+/* Do the permissions allow some operation? Assumes PL_statcache already set. */
/* Do this via $Check_Access on VMS, since the CRTL stat() returns only a
- * subset of the applicable information. (We have to stick with struct
- * stat instead of struct mystat in the prototype since we have to match
- * the one in proto.h.)
+ * subset of the applicable information.
*/
/*{{{I32 cando(I32 bit, I32 effective, struct stat *statbufp)*/
I32
-cando(I32 bit, I32 effective, struct stat *statbufp)
+cando(I32 bit, I32 effective, Stat_t *statbufp)
{
- if (statbufp == &statcache) return cando_by_name(bit,effective,namecache);
+ dTHR;
+ if (statbufp == &PL_statcache) return cando_by_name(bit,effective,namecache);
else {
char fname[NAM$C_MAXRSS+1];
unsigned long int retsts;
@@ -3588,12 +3936,12 @@ cando(I32 bit, I32 effective, struct stat *statbufp)
/* If the struct mystat is stale, we're OOL; stat() overwrites the
device name on successive calls */
- devdsc.dsc$a_pointer = ((struct mystat *)statbufp)->st_devnam;
- devdsc.dsc$w_length = strlen(((struct mystat *)statbufp)->st_devnam);
+ devdsc.dsc$a_pointer = ((Stat_t *)statbufp)->st_devnam;
+ devdsc.dsc$w_length = strlen(((Stat_t *)statbufp)->st_devnam);
namdsc.dsc$a_pointer = fname;
namdsc.dsc$w_length = sizeof fname - 1;
- retsts = lib$fid_to_name(&devdsc,&(((struct mystat *)statbufp)->st_ino),
+ retsts = lib$fid_to_name(&devdsc,&(((Stat_t *)statbufp)->st_ino),
&namdsc,&namdsc.dsc$w_length,0,0);
if (retsts & 1) {
fname[namdsc.dsc$w_length] = '\0';
@@ -3676,7 +4024,7 @@ cando_by_name(I32 bit, I32 effective, char *fname)
retsts = sys$check_access(&objtyp,&namdsc,&usrdsc,armlst);
if (retsts == SS$_NOPRIV || retsts == SS$_NOSUCHOBJECT ||
- retsts == SS$_INVFILFOROP || retsts == RMS$_FNF ||
+ retsts == SS$_INVFILFOROP || retsts == RMS$_FNF || retsts == RMS$_SYN ||
retsts == RMS$_DIR || retsts == RMS$_DEV) {
set_vaxc_errno(retsts);
if (retsts == SS$_NOPRIV) set_errno(EACCES);
@@ -3697,6 +4045,9 @@ cando_by_name(I32 bit, I32 effective, char *fname)
if ((privused & CHP$M_READALL) && !curprv.prv$v_readall) return FALSE;
return TRUE;
}
+ if (retsts == SS$_ACCONFLICT) {
+ return TRUE;
+ }
_ckvmssts(retsts);
return FALSE; /* Should never get here */
@@ -3705,25 +4056,33 @@ cando_by_name(I32 bit, I32 effective, char *fname)
/*}}}*/
-/*{{{ int flex_fstat(int fd, struct mystat *statbuf)*/
+/*{{{ int flex_fstat(int fd, Stat_t *statbuf)*/
int
-flex_fstat(int fd, struct mystat *statbufp)
+flex_fstat(int fd, Stat_t *statbufp)
{
+ dTHR;
if (!fstat(fd,(stat_t *) statbufp)) {
- if (statbufp == (struct mystat *) &statcache) *namecache == '\0';
+ if (statbufp == (Stat_t *) &PL_statcache) *namecache == '\0';
statbufp->st_dev = encode_dev(statbufp->st_devnam);
+# ifdef RTL_USES_UTC
+# ifdef VMSISH_TIME
+ if (VMSISH_TIME) {
+ statbufp->st_mtime = _toloc(statbufp->st_mtime);
+ statbufp->st_atime = _toloc(statbufp->st_atime);
+ statbufp->st_ctime = _toloc(statbufp->st_ctime);
+ }
+# endif
+# else
# ifdef VMSISH_TIME
if (!VMSISH_TIME) { /* Return UTC instead of local time */
# else
if (1) {
# endif
-#if __VMS_VER < 70000000 || __DECC_VER < 50200000
- if (!gmtime_emulation_type) (void)time(NULL);
- statbufp->st_mtime -= utc_offset_secs;
- statbufp->st_atime -= utc_offset_secs;
- statbufp->st_ctime -= utc_offset_secs;
-#endif
+ statbufp->st_mtime = _toutc(statbufp->st_mtime);
+ statbufp->st_atime = _toutc(statbufp->st_atime);
+ statbufp->st_ctime = _toutc(statbufp->st_ctime);
}
+#endif
return 0;
}
return -1;
@@ -3731,14 +4090,15 @@ flex_fstat(int fd, struct mystat *statbufp)
} /* end of flex_fstat() */
/*}}}*/
-/*{{{ int flex_stat(char *fspec, struct mystat *statbufp)*/
+/*{{{ int flex_stat(char *fspec, Stat_t *statbufp)*/
int
-flex_stat(char *fspec, struct mystat *statbufp)
+flex_stat(char *fspec, Stat_t *statbufp)
{
+ dTHR;
char fileified[NAM$C_MAXRSS+1];
int retval = -1;
- if (statbufp == (struct mystat *) &statcache)
+ if (statbufp == (Stat_t *) &PL_statcache)
do_tovmsspec(fspec,namecache,0);
if (is_null_device(fspec)) { /* Fake a stat() for the null device */
memset(statbufp,0,sizeof *statbufp);
@@ -3752,7 +4112,7 @@ flex_stat(char *fspec, struct mystat *statbufp)
}
/* Try for a directory name first. If fspec contains a filename without
- * a type (e.g. sea:[dark.dark]water), and both sea:[wine.dark]water.dir
+ * a type (e.g. sea:[wine.dark]water), and both sea:[wine.dark]water.dir
* and sea:[wine.dark]water. exist, we prefer the directory here.
* Similarly, sea:[wine.dark] returns the result for sea:[wine]dark.dir,
* not sea:[wine.dark]., if the latter exists. If the intended target is
@@ -3761,24 +4121,31 @@ flex_stat(char *fspec, struct mystat *statbufp)
*/
if (do_fileify_dirspec(fspec,fileified,0) != NULL) {
retval = stat(fileified,(stat_t *) statbufp);
- if (!retval && statbufp == (struct mystat *) &statcache)
+ if (!retval && statbufp == (Stat_t *) &PL_statcache)
strcpy(namecache,fileified);
}
if (retval) retval = stat(fspec,(stat_t *) statbufp);
if (!retval) {
statbufp->st_dev = encode_dev(statbufp->st_devnam);
+# ifdef RTL_USES_UTC
+# ifdef VMSISH_TIME
+ if (VMSISH_TIME) {
+ statbufp->st_mtime = _toloc(statbufp->st_mtime);
+ statbufp->st_atime = _toloc(statbufp->st_atime);
+ statbufp->st_ctime = _toloc(statbufp->st_ctime);
+ }
+# endif
+# else
# ifdef VMSISH_TIME
if (!VMSISH_TIME) { /* Return UTC instead of local time */
# else
if (1) {
# endif
-#if __VMS_VER < 70000000 || __DECC_VER < 50200000
- if (!gmtime_emulation_type) (void)time(NULL);
- statbufp->st_mtime -= utc_offset_secs;
- statbufp->st_atime -= utc_offset_secs;
- statbufp->st_ctime -= utc_offset_secs;
-#endif
+ statbufp->st_mtime = _toutc(statbufp->st_mtime);
+ statbufp->st_atime = _toutc(statbufp->st_atime);
+ statbufp->st_ctime = _toutc(statbufp->st_ctime);
}
+# endif
}
return retval;
@@ -3790,25 +4157,40 @@ flex_stat(char *fspec, struct mystat *statbufp)
FILE *
my_binmode(FILE *fp, char iotype)
{
- char filespec[NAM$C_MAXRSS], *acmode;
+ char filespec[NAM$C_MAXRSS], *acmode, *s, *colon, *dirend = Nullch;
+ int ret = 0, saverrno = errno, savevmserrno = vaxc$errno;
fpos_t pos;
- if (!fgetname(fp,filespec)) return NULL;
- if (iotype != '-' && fgetpos(fp,&pos) == -1) return NULL;
+ if (!fgetname(fp,filespec,1)) return NULL;
+ for (s = filespec; *s; s++) {
+ if (*s == ':') colon = s;
+ else if (*s == ']' || *s == '>') dirend = s;
+ }
+ /* Looks like a tmpfile, which will go away if reopened */
+ if (s == dirend + 3) return fp;
+ /* If we've got a non-file-structured device, clip off the trailing
+ * junk, and don't lose sleep if we can't get a stream position. */
+ if (dirend == Nullch) *(colon+1) = '\0';
+ if (iotype != '-'&& (ret = fgetpos(fp, &pos)) == -1 && dirend) return NULL;
switch (iotype) {
case '<': case 'r': acmode = "rb"; break;
- case '>': case 'w':
+ case '>': case 'w': case '|':
/* use 'a' instead of 'w' to avoid creating new file;
fsetpos below will take care of restoring file position */
case 'a': acmode = "ab"; break;
- case '+': case '|': case 's': acmode = "rb+"; break;
+ case '+': case 's': acmode = "rb+"; break;
case '-': acmode = fileno(fp) ? "ab" : "rb"; break;
+ /* iotype'll be null for the SYS$INPUT:/SYS$OUTPUT:/SYS$ERROR: files */
+ /* since we didn't really open them and can't really */
+ /* reopen them */
+ case 0: return NULL; break;
default:
- warn("Unrecognized iotype %c in my_binmode",iotype);
+ warn("Unrecognized iotype %x for %s in my_binmode",iotype, filespec);
acmode = "rb+";
}
if (freopen(filespec,acmode,fp) == NULL) return NULL;
- if (iotype != '-' && fsetpos(fp,&pos) == -1) return NULL;
+ if (iotype != '-' && ret != -1 && fsetpos(fp,&pos) == -1) return NULL;
+ if (ret == -1) { set_errno(saverrno); set_vaxc_errno(savevmserrno); }
return fp;
} /* end of my_binmode() */
/*}}}*/
@@ -3842,7 +4224,7 @@ my_getlogin()
*
* Returns 1 on success; returns 0 and sets errno and vaxc$errno on failure.
*
- * Copyright 1996 by Charles Bailey <bailey@genetics.upenn.edu>.
+ * Copyright 1996 by Charles Bailey <bailey@newman.upenn.edu>.
* Incorporates, with permission, some code from EZCOPY by Tim Adye
* <T.J.Adye@rl.ac.uk>. Permission is given to distribute this code
* as part of the Perl standard distribution under the terms of the
@@ -4026,12 +4408,13 @@ rmsexpand_fromperl(CV *cv)
{
dXSARGS;
char *fspec, *defspec = NULL, *rslt;
+ STRLEN n_a;
if (!items || items > 2)
croak("Usage: VMS::Filespec::rmsexpand(spec[,defspec])");
- fspec = SvPV(ST(0),na);
+ fspec = SvPV(ST(0),n_a);
if (!fspec || !*fspec) XSRETURN_UNDEF;
- if (items == 2) defspec = SvPV(ST(1),na);
+ if (items == 2) defspec = SvPV(ST(1),n_a);
rslt = do_rmsexpand(fspec,NULL,1,defspec,0);
ST(0) = sv_newmortal();
@@ -4044,9 +4427,10 @@ vmsify_fromperl(CV *cv)
{
dXSARGS;
char *vmsified;
+ STRLEN n_a;
if (items != 1) croak("Usage: VMS::Filespec::vmsify(spec)");
- vmsified = do_tovmsspec(SvPV(ST(0),na),NULL,1);
+ vmsified = do_tovmsspec(SvPV(ST(0),n_a),NULL,1);
ST(0) = sv_newmortal();
if (vmsified != NULL) sv_usepvn(ST(0),vmsified,strlen(vmsified));
XSRETURN(1);
@@ -4057,9 +4441,10 @@ unixify_fromperl(CV *cv)
{
dXSARGS;
char *unixified;
+ STRLEN n_a;
if (items != 1) croak("Usage: VMS::Filespec::unixify(spec)");
- unixified = do_tounixspec(SvPV(ST(0),na),NULL,1);
+ unixified = do_tounixspec(SvPV(ST(0),n_a),NULL,1);
ST(0) = sv_newmortal();
if (unixified != NULL) sv_usepvn(ST(0),unixified,strlen(unixified));
XSRETURN(1);
@@ -4070,9 +4455,10 @@ fileify_fromperl(CV *cv)
{
dXSARGS;
char *fileified;
+ STRLEN n_a;
if (items != 1) croak("Usage: VMS::Filespec::fileify(spec)");
- fileified = do_fileify_dirspec(SvPV(ST(0),na),NULL,1);
+ fileified = do_fileify_dirspec(SvPV(ST(0),n_a),NULL,1);
ST(0) = sv_newmortal();
if (fileified != NULL) sv_usepvn(ST(0),fileified,strlen(fileified));
XSRETURN(1);
@@ -4083,9 +4469,10 @@ pathify_fromperl(CV *cv)
{
dXSARGS;
char *pathified;
+ STRLEN n_a;
if (items != 1) croak("Usage: VMS::Filespec::pathify(spec)");
- pathified = do_pathify_dirspec(SvPV(ST(0),na),NULL,1);
+ pathified = do_pathify_dirspec(SvPV(ST(0),n_a),NULL,1);
ST(0) = sv_newmortal();
if (pathified != NULL) sv_usepvn(ST(0),pathified,strlen(pathified));
XSRETURN(1);
@@ -4096,9 +4483,10 @@ vmspath_fromperl(CV *cv)
{
dXSARGS;
char *vmspath;
+ STRLEN n_a;
if (items != 1) croak("Usage: VMS::Filespec::vmspath(spec)");
- vmspath = do_tovmspath(SvPV(ST(0),na),NULL,1);
+ vmspath = do_tovmspath(SvPV(ST(0),n_a),NULL,1);
ST(0) = sv_newmortal();
if (vmspath != NULL) sv_usepvn(ST(0),vmspath,strlen(vmspath));
XSRETURN(1);
@@ -4109,9 +4497,10 @@ unixpath_fromperl(CV *cv)
{
dXSARGS;
char *unixpath;
+ STRLEN n_a;
if (items != 1) croak("Usage: VMS::Filespec::unixpath(spec)");
- unixpath = do_tounixpath(SvPV(ST(0),na),NULL,1);
+ unixpath = do_tounixpath(SvPV(ST(0),n_a),NULL,1);
ST(0) = sv_newmortal();
if (unixpath != NULL) sv_usepvn(ST(0),unixpath,strlen(unixpath));
XSRETURN(1);
@@ -4124,22 +4513,23 @@ candelete_fromperl(CV *cv)
char fspec[NAM$C_MAXRSS+1], *fsp;
SV *mysv;
IO *io;
+ STRLEN n_a;
if (items != 1) croak("Usage: VMS::Filespec::candelete(spec)");
mysv = SvROK(ST(0)) ? SvRV(ST(0)) : ST(0);
if (SvTYPE(mysv) == SVt_PVGV) {
- if (!(io = GvIOp(mysv)) || !fgetname(IoIFP(io),fspec)) {
+ if (!(io = GvIOp(mysv)) || !fgetname(IoIFP(io),fspec,1)) {
set_errno(EINVAL); set_vaxc_errno(LIB$_INVARG);
- ST(0) = &sv_no;
+ ST(0) = &PL_sv_no;
XSRETURN(1);
}
fsp = fspec;
}
else {
- if (mysv != ST(0) || !(fsp = SvPV(mysv,na)) || !*fsp) {
+ if (mysv != ST(0) || !(fsp = SvPV(mysv,n_a)) || !*fsp) {
set_errno(EINVAL); set_vaxc_errno(LIB$_INVARG);
- ST(0) = &sv_no;
+ ST(0) = &PL_sv_no;
XSRETURN(1);
}
}
@@ -4159,39 +4549,40 @@ rmscopy_fromperl(CV *cv)
unsigned long int sts;
SV *mysv;
IO *io;
+ STRLEN n_a;
if (items < 2 || items > 3)
croak("Usage: File::Copy::rmscopy(from,to[,date_flag])");
mysv = SvROK(ST(0)) ? SvRV(ST(0)) : ST(0);
if (SvTYPE(mysv) == SVt_PVGV) {
- if (!(io = GvIOp(mysv)) || !fgetname(IoIFP(io),inspec)) {
+ if (!(io = GvIOp(mysv)) || !fgetname(IoIFP(io),inspec,1)) {
set_errno(EINVAL); set_vaxc_errno(LIB$_INVARG);
- ST(0) = &sv_no;
+ ST(0) = &PL_sv_no;
XSRETURN(1);
}
inp = inspec;
}
else {
- if (mysv != ST(0) || !(inp = SvPV(mysv,na)) || !*inp) {
+ if (mysv != ST(0) || !(inp = SvPV(mysv,n_a)) || !*inp) {
set_errno(EINVAL); set_vaxc_errno(LIB$_INVARG);
- ST(0) = &sv_no;
+ ST(0) = &PL_sv_no;
XSRETURN(1);
}
}
mysv = SvROK(ST(1)) ? SvRV(ST(1)) : ST(1);
if (SvTYPE(mysv) == SVt_PVGV) {
- if (!(io = GvIOp(mysv)) || !fgetname(IoIFP(io),outspec)) {
+ if (!(io = GvIOp(mysv)) || !fgetname(IoIFP(io),outspec,1)) {
set_errno(EINVAL); set_vaxc_errno(LIB$_INVARG);
- ST(0) = &sv_no;
+ ST(0) = &PL_sv_no;
XSRETURN(1);
}
outp = outspec;
}
else {
- if (mysv != ST(1) || !(outp = SvPV(mysv,na)) || !*outp) {
+ if (mysv != ST(1) || !(outp = SvPV(mysv,n_a)) || !*outp) {
set_errno(EINVAL); set_vaxc_errno(LIB$_INVARG);
- ST(0) = &sv_no;
+ ST(0) = &PL_sv_no;
XSRETURN(1);
}
}
@@ -4215,6 +4606,11 @@ init_os_extras()
newXSproto("VMS::Filespec::unixpath",unixpath_fromperl,file,"$");
newXSproto("VMS::Filespec::candelete",candelete_fromperl,file,"$");
newXS("File::Copy::rmscopy",rmscopy_fromperl,file);
+
+#ifdef PRIME_ENV_AT_STARTUP
+ prime_env_iter();
+#endif
+
return;
}
diff --git a/gnu/usr.bin/perl/vms/vms_yfix.pl b/gnu/usr.bin/perl/vms/vms_yfix.pl
index f57ea1d5150..08a8dbffb17 100644
--- a/gnu/usr.bin/perl/vms/vms_yfix.pl
+++ b/gnu/usr.bin/perl/vms/vms_yfix.pl
@@ -27,6 +27,11 @@ while (<C>) {
# accomodate old VAXC's macro susbstitution pecularities
$_ = "# ifndef getenv\n$_# endif\n";
}
+ elsif ( /getenv\("YYDEBUG"\)/ ) {
+ # Reset the "error" status if an optional lookup fails
+ while (not /^\s+\}/) { print COUT; $_ = <C>; }
+ $_ .= "\telse SETERRNO(0,SS\$_NORMAL);\n";
+ }
else {
# add the dEXT tag to definitions of global vars, so we'll insert
# a globaldef when perly.c is compiled
diff --git a/gnu/usr.bin/perl/vms/vmsish.h b/gnu/usr.bin/perl/vms/vmsish.h
index 2da1639baa4..228a0549960 100644
--- a/gnu/usr.bin/perl/vms/vmsish.h
+++ b/gnu/usr.bin/perl/vms/vmsish.h
@@ -16,12 +16,11 @@
#include <stsdef.h> /* bitmasks for exit status testing */
/* Suppress compiler warnings from DECC for VMS-specific extensions:
- * GLOBALEXT, NOSHAREEXT, READONLYEXT: global[dr]ef declarations
* ADDRCONSTEXT,NEEDCONSTEXT: initialization of data with non-constant values
* (e.g. pointer fields of descriptors)
*/
#ifdef __DECC
-# pragma message disable (GLOBALEXT,NOSHAREEXT,READONLYEXT,ADDRCONSTEXT,NEEDCONSTEXT)
+# pragma message disable (ADDRCONSTEXT,NEEDCONSTEXT)
#endif
/* DEC's C compilers and gcc use incompatible definitions of _to(upp|low)er() */
@@ -56,6 +55,11 @@
# include <unistd.h> /* DECC has this; VAXC and gcc don't */
#endif
+/* VAXC doesn't have a unary plus operator, so we need to get there indirectly */
+#if defined(VAXC) && !defined(__DECC)
+# define NO_UNARY_PLUS
+#endif
+
#ifdef NO_PERL_TYPEDEFS /* a2p; we don't want Perl's special routines */
# define DONT_MASK_RTL_CALLS
#endif
@@ -70,13 +74,14 @@
/* DECC introduces this routine in the RTL as of VMS 7.0; for now,
* we'll use ours, since it gives us the full VMS exit status. */
-#ifdef __PID_T
-# define Pid_t pid_t
-#else
-# define Pid_t unsigned int
-#endif
#define waitpid my_waitpid
+/* Don't redeclare standard RTL routines in Perl's header files;
+ * VMS history or extensions makes some of the formal protoypes
+ * differ from the common Unix forms.
+ */
+#define DONT_DECLARE_STD 1
+
/* Our own contribution to PerlShr's global symbols . . . */
#ifdef EMBED
# define my_trnlnm Perl_my_trnlnm
@@ -111,11 +116,15 @@
# define seekdir Perl_seekdir
# define closedir Perl_closedir
# define vmsreaddirversions Perl_vmsreaddirversions
-#if __VMS_VER < 70000000 || __DECC_VER < 50200000
# define my_gmtime Perl_my_gmtime
# define my_localtime Perl_my_localtime
# define my_time Perl_my_time
-#endif
+# define my_sigemptyset Perl_my_sigemptyset
+# define my_sigfillset Perl_my_sigfillset
+# define my_sigaddset Perl_my_sigaddset
+# define my_sigdelset Perl_my_sigdelset
+# define my_sigismember Perl_my_sigismember
+# define my_sigprocmask Perl_my_sigprocmask
# define cando_by_name Perl_cando_by_name
# define flex_fstat Perl_flex_fstat
# define flex_stat Perl_flex_stat
@@ -157,12 +166,6 @@
*/
#define BIG_TIME
-/* USE_STAT_RDEV:
- * This symbol is defined if this system has a stat structure declaring
- * st_rdev
- */
-#define USE_STAT_RDEV /**/
-
/* ACME_MESS:
* This symbol, if defined, indicates that error messages should be
* should be generated in a format that allows the use of the Acme
@@ -200,9 +203,9 @@
#define HINT_M_VMSISH_STATUS 0x01000000 /* system, $? return VMS status */
#define HINT_M_VMSISH_EXIT 0x02000000 /* exit(1) ==> SS$_NORMAL */
#define HINT_M_VMSISH_TIME 0x04000000 /* times are local, not UTC */
-#define NATIVE_HINTS (hints >> HINT_V_VMSISH) /* used in op.c */
+#define NATIVE_HINTS (PL_hints >> HINT_V_VMSISH) /* used in op.c */
-#define TEST_VMSISH(h) (curcop->op_private & ((h) >> HINT_V_VMSISH))
+#define TEST_VMSISH(h) (PL_curcop->op_private & ((h) >> HINT_V_VMSISH))
#define VMSISH_STATUS TEST_VMSISH(HINT_M_VMSISH_STATUS)
#define VMSISH_EXIT TEST_VMSISH(HINT_M_VMSISH_EXIT)
#define VMSISH_TIME TEST_VMSISH(HINT_M_VMSISH_TIME)
@@ -227,8 +230,8 @@
#endif
#define BIT_BUCKET "_NLA0:"
-#define PERL_SYS_INIT(c,v) vms_image_init((c),(v))
-#define PERL_SYS_TERM()
+#define PERL_SYS_INIT(c,v) vms_image_init((c),(v)); MALLOC_INIT
+#define PERL_SYS_TERM() MALLOC_TERM
#define dXSUB_SYS
#define HAS_KILL
#define HAS_WAIT
@@ -254,16 +257,16 @@
#define HAS_UTIME /**/
/* HAS_GROUP
- * This symbol, if defined, indicates that the getgrnam(),
- * getgrgid(), and getgrent() routines are available to
- * get group entries.
+ * This symbol, if defined, indicates that the getgrnam() and
+ * getgrgid() routines are available to get group entries.
+ * The getgrent() has a separate definition, HAS_GETGRENT.
*/
#undef HAS_GROUP /**/
/* HAS_PASSWD
- * This symbol, if defined, indicates that the getpwnam(),
- * getpwuid(), and getpwent() routines are available to
- * get password entries.
+ * This symbol, if defined, indicates that the getpwnam() and
+ * getpwuid() routines are available to get password entries.
+ * The getpwent() has a separate definition, HAS_GETPWENT.
*/
#define HAS_PASSWD /**/
@@ -278,6 +281,30 @@
*/
#define USEMYBINMODE
+/* Stat_t:
+ * This symbol holds the type used to declare buffers for information
+ * returned by stat(). It's usually just struct stat. It may be necessary
+ * to include <sys/stat.h> and <sys/types.h> to get any typedef'ed
+ * information.
+ */
+/* VMS:
+ * We need this typedef to point to the new type even if DONT_MASK_RTL_CALLS
+ * is in effect, since Perl's thread.h embeds one of these structs in its
+ * thread data struct, and our struct mystat is a different size from the
+ * regular struct stat (cf. note above about having to pad struct to work
+ * around bug in compiler.)
+ * It's OK to pass one of these to the RTL's stat(), though, since the
+ * fields it fills are the same in each struct.
+ */
+#define Stat_t struct mystat
+
+/* USE_STAT_RDEV:
+* This symbol is defined if this system has a stat structure declaring
+* st_rdev
+* VMS: Field exists in POSIXish version of struct stat(), but is not used.
+*/
+#undef USE_STAT_RDEV /**/
+
/*
* fwrite1() should be a routine with the same calling sequence as fwrite(),
* but which outputs all of the bytes requested as a single stream (unlike
@@ -326,16 +353,46 @@ struct utimbuf {
# define tbuffer_t struct tms
#endif
-/* Prior to VMS 7.0, the CRTL gmtime() routine was a stub which always
- * returned NULL. Substitute our own routine, which uses the logical
- * SYS$TIMEZONE_DIFFERENTIAL, whcih the native UTC support routines
- * in VMS 6.0 or later use. We also add shims for time() and localtime()
- * so we can run on UTC by default.
+/* Substitute our own routines for gmtime(), localtime(), and time(),
+ * which allow us to implement the vmsish 'time' pragma, and work
+ * around absence of system-level UTC support on old versions of VMS.
*/
-#if __VMS_VER < 70000000 || __DECC_VER < 50200000
#define gmtime(t) my_gmtime(t)
#define localtime(t) my_localtime(t)
#define time(t) my_time(t)
+
+/* If we're using an older version of VMS whose Unix signal emulation
+ * isn't very POSIXish, then roll our own.
+ */
+#if __VMS_VER < 70000000 || __DECC_VER < 50200000
+# define HOMEGROWN_POSIX_SIGNALS
+#endif
+#ifdef HOMEGROWN_POSIX_SIGNALS
+# define sigemptyset(t) my_sigemptyset(t)
+# define sigfillset(t) my_sigfillset(t)
+# define sigaddset(t, u) my_sigaddset(t, u)
+# define sigdelset(t, u) my_sigdelset(t, u)
+# define sigismember(t, u) my_sigismember(t, u)
+# define sigprocmask(t, u, v) my_sigprocmask(t, u, v)
+# ifndef _SIGSET_T
+ typedef int sigset_t;
+# endif
+ /* The tools for sigprocmask() are there, just not the routine itself */
+# ifndef SIG_UNBLOCK
+# define SIG_UNBLOCK 1
+# endif
+# ifndef SIG_BLOCK
+# define SIG_BLOCK 2
+# endif
+# ifndef SIG_SETMASK
+# define SIG_SETMASK 3
+# endif
+# define sigaction sigvec
+# define sa_flags sv_onstack
+# define sa_handler sv_handler
+# define sa_mask sv_mask
+# define sigsuspend(set) sigpause(*set)
+# define sigpending(a) (not_here("sigpending"),0)
#endif
/* VMS doesn't use a real sys_nerr, but we need this when scanning for error
@@ -451,6 +508,13 @@ struct mystat
char st_fab_rat; /* record attributes */
char st_fab_fsz; /* fixed header size */
unsigned st_dev; /* encoded device name */
+ /* Pad struct out to integral number of longwords, since DECC 5.6/VAX
+ * has a bug in dealing with offsets in structs in which are embedded
+ * other structs whose size is an odd number of bytes. (An even
+ * number of bytes is enough to make it happy, but we go for natural
+ * alignment anyhow.)
+ */
+ char st_fill1[sizeof(void *) - (3*sizeof(unsigned short) + 3*sizeof(char))%sizeof(void *)];
};
typedef unsigned mydev_t;
typedef unsigned myino_t;
@@ -536,19 +600,25 @@ long telldir _((DIR *));
void seekdir _((DIR *, long));
void closedir _((DIR *));
void vmsreaddirversions _((DIR *, int));
-#ifdef my_gmtime
struct tm * my_gmtime _((const time_t *));
struct tm * my_localtime _((const time_t *));
time_t my_time _((time_t *));
-#endif /* We're assuming these three come as a package */
+#ifdef HOMEGROWN_POSIX_SIGNALS
+int my_sigemptyset _((sigset_t *));
+int my_sigfillset _((sigset_t *));
+int my_sigaddset _((sigset_t *, int));
+int my_sigdelset _((sigset_t *, int));
+int my_sigismember _((sigset_t *, int));
+int my_sigprocmask _((int, sigset_t *, sigset_t *));
+#endif
I32 cando_by_name _((I32, I32, char *));
-int flex_fstat _((int, struct mystat *));
-int flex_stat _((char *, struct mystat *));
+int flex_fstat _((int, Stat_t *));
+int flex_stat _((char *, Stat_t *));
int trim_unixpath _((char *, char*, int));
int my_vfork _(());
bool vms_do_aexec _((SV *, SV **, SV **));
bool vms_do_exec _((char *));
-unsigned long int do_aspawn _((SV *, SV **, SV **));
+unsigned long int do_aspawn _((void *, void **, void **));
unsigned long int do_spawn _((char *));
int my_fwrite _((void *, size_t, size_t, FILE *));
int my_flush _((FILE *));