diff options
Diffstat (limited to 'vms')
-rw-r--r-- | vms/Makefile | 266 | ||||
-rw-r--r-- | vms/config.vms | 19 | ||||
-rw-r--r-- | vms/descrip.mms | 272 | ||||
-rw-r--r-- | vms/ext/stdio/Makefile.PL (renamed from vms/ext/VMS/stdio/Makefile.PL) | 0 | ||||
-rw-r--r-- | vms/ext/stdio/stdio.pm (renamed from vms/ext/VMS/stdio/stdio.pm) | 0 | ||||
-rw-r--r-- | vms/ext/stdio/stdio.xs (renamed from vms/ext/VMS/stdio/stdio.xs) | 2 | ||||
-rw-r--r-- | vms/gen_shrfls.pl | 35 | ||||
-rw-r--r-- | vms/genconfig.pl | 121 | ||||
-rw-r--r-- | vms/make_command.com | 21 | ||||
-rw-r--r-- | vms/mms2make.pl | 6 | ||||
-rw-r--r-- | vms/myconfig.com | 319 | ||||
-rw-r--r-- | vms/perlvms.pod | 104 | ||||
-rw-r--r-- | vms/perly_c.vms | 2405 | ||||
-rw-r--r-- | vms/perly_h.vms | 83 | ||||
-rw-r--r-- | vms/sockadapt.c | 23 | ||||
-rw-r--r-- | vms/vms.c | 296 | ||||
-rw-r--r-- | vms/vms_yfix.pl | 23 | ||||
-rw-r--r-- | vms/vmsish.h | 40 |
18 files changed, 2639 insertions, 1396 deletions
diff --git a/vms/Makefile b/vms/Makefile index 075a6b9860..69738c7a03 100644 --- a/vms/Makefile +++ b/vms/Makefile @@ -1,15 +1,17 @@ -#> This file produced from Descrip.MMS by mms2make.pl +#> This file produced from vms/descrip.mms by vms/mms2make.pl #> Lines beginning with "#>" were commented out during the -#> conversion process. For more information, see mms2make.pl +#> conversion process. For more information, see vms/mms2make.pl #> -# Makefile. for perl5 on VMS -# Last revised 4-Dec-1995 by Charles Bailey bailey@genetics.upenn.edu +# Descrip.MMS for perl5 on VMS +# Last revised 17-Jan-1995 by Charles Bailey bailey@genetics.upenn.edu # # # tidy -- purge files generated by executing this file -# clean -- remove all files generated by executing this file -# cleansrc -- `clean' + purge *.c,*.h,Makefile. -# gcc_cld_setup -- GCC initialization; see above +# clean -- remove all intermediate (e.g. object files, C files generated +# during build) files generated by executing this file, +# but leave `installable' files (images, library) intact +# realclean -- remove all files generated by executing this file +# cleansrc -- `realclean' + purge *.c,*.h,descrip.mms # crtl.opt -- compiler-specific linker options file (made automatically) # @@ -27,6 +29,7 @@ OLB = .olb E = .exe ARCH = VMS_VAX +OBJVAL = $@ ARCHDIR = [.lib.$(ARCH)] ARCHCORE = [.lib.$(ARCH).CORE] ARCHAUTO = [.lib.$(ARCH).auto] @@ -47,7 +50,7 @@ DBGSPECFLAGS = /Show=(Source,Include,Expansion) @ If f$$TrnLnm("Sys").eqs."" Then Define/NoLog SYS sys$$Library XTRACCFLAGS = /Include=[]/Object=$(O) XTRADEF = -LIBS2 = VAXCRTL/Shareable +LIBS2 = sys$$Share:VAXCRTL/Shareable DBGCCFLAGS = /NoList @@ -71,7 +74,7 @@ CFLAGS = /Define=(DEBUGGING$(SOCKDEF)$(XTRADEF))$(XTRACCFLAGS)$(DBGCCFLAGS) LINKFLAGS = $(DBGLINKFLAGS) MAKE = $(MMS) -MAKEFILE = [.VMS]Makefile. # this file +MAKEFILE = [.VMS]Descrip.MMS # this file NOOP = continue # Macros to invoke a copy of miniperl during the build. Targets which @@ -144,12 +147,31 @@ CRTLOPTS =,$(CRTL)/Options $(XSUBPP) $< >$(MMS$SOURCE_NAME).c $(CC) $(CFLAGS) $(MMS$SOURCE_NAME).c -all : base extras archcorefiles preplibrary +all : base extras archcorefiles preplibrary perlpods @ $(NOOP) base : miniperl$(E) perl$(E) @ $(NOOP) -extras : [.lib]Config.pm [.lib.$(ARCH)]Config.pm [.lib]DynaLoader.pm [.lib.VMS]Filespec.pm [.lib.extutils]MM_VMS.pm +extras : Safe libmods utils podxform @ $(NOOP) +libmods : [.lib]Config.pm [.lib.$(ARCH)]Config.pm [.lib]DynaLoader.pm [.lib.VMS]Filespec.pm + @ $(NOOP) +utils : [.lib.pod]perldoc [.lib.ExtUtils]Miniperl.pm [.utils]c2ph [.utils]h2ph [.utils]h2xs [.lib]perlbug + @ $(NOOP) +podxform : [.lib.pod]pod2text [.lib.pod]pod2html [.lib.pod]pod2latex [.lib.pod]pod2man + @ $(NOOP) + +pod1 = [.lib.pod]perl.pod [.lib.pod]perlbook.pod [.lib.pod]perlbot.pod [.lib.pod]perlcall.pod +pod2 = [.lib.pod]perldata.pod [.lib.pod]perldebug.pod [.lib.pod]perldiag.pod [.lib.pod]perldsc.pod +pod3 = [.lib.pod]perlembed.pod [.lib.pod]perlform.pod [.lib.pod]perlfunc.pod [.lib.pod]perlguts.pod +pod4 = [.lib.pod]perlipc.pod [.lib.pod]perllol.pod [.lib.pod]perlmod.pod [.lib.pod]perlobj.pod +pod5 = [.lib.pod]perlop.pod [.lib.pod]perlovl.pod [.lib.pod]perlpod.pod [.lib.pod]perlre.pod +pod6 = [.lib.pod]perlref.pod [.lib.pod]perlrun.pod [.lib.pod]perlsec.pod [.lib.pod]perlstyle.pod +pod7 = [.lib.pod]perlsub.pod [.lib.pod]perlsyn.pod [.lib.pod]perltie.pod [.lib.pod]perltoc.pod +pod8 = [.lib.pod]perltrap.pod [.lib.pod]perlvar.pod [.lib.pod]perlxs.pod [.lib.pod]perlxstut.pod + +perlpods : $(pod1) $(pod2) $(pod3) $(pod4) $(pod5) $(pod6) $(pod7) $(pod8) [.lib.pod]perlvms.pod + @ $(NOOP) + archcorefiles : $(ac1) $(ac2) $(ac3) $(ac4) $(ac5) $(ac6) $(ac7) $(ac8) $(ac9) $(acs) $(ARCHAUTO)time.stamp @ $(NOOP) @@ -199,19 +221,215 @@ $(DBG)perlshr_xtras.ts : perl.h config.h vmsish.h proto.h [.vms]gen_shrfls.pl $( [.lib]DynaLoader.pm : [.ext.dynaloader]dynaloader.pm Copy/Log/NoConfirm [.ext.dynaloader]dynaloader.pm [.lib]DynaLoader.pm + @ $(MINIPERL) -e "use AutoSplit; autosplit_lib_modules(@ARGV)" [.lib]DynaLoader.pm + +Safe : [.lib]Safe.pm [.lib.auto]Safe$(E) + @ $(NOOP) + +[.lib]Safe.pm : [.ext.Safe]Descrip.MMS + @ Set Default [.ext.Safe] + $(MMS) + @ Set Default [--] + +[.lib.auto]Safe$(E) : [.ext.Safe]Descrip.MMS + @ Set Default [.ext.Safe] + $(MMS) + @ Set Default [--] + +# Add "-I[--.lib]" t $(MINIPERL) so we use this copy of lib after C<chdir> +# ${@} necessary to distract different versions of MM[SK]/make +[.ext.Safe]Descrip.MMS : [.ext.Safe]Makefile.PL [.lib.$(ARCH)]Config.pm [.lib.VMS]Filespec.pm [.lib]DynaLoader.pm perlshr$(E) + $(MINIPERL) "-I[--.lib]" -e "chdir('[.ext.Safe]') or die $!; do 'Makefile.PL'; print ${@} if ${@};" 2>_nla0: [.lib.VMS]Filespec.pm : [.vms.ext]Filespec.pm @ If f$$Search("[.lib]VMS.Dir").eqs."" Then Create/Directory [.lib.VMS] Copy/Log/NoConfirm [.vms.ext]Filespec.pm $@ -[.lib.ExtUtils]MM_VMS.pm : [.vms.ext]MM_VMS.pm - Copy/Log/NoConfirm [.vms.ext]MM_VMS.pm $@ +[.lib.pod]perldoc : [.utils]perldoc.PL [.lib.$(ARCH)]Config.pm + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + $(MINIPERL) [.utils]perldoc.PL + Copy/Log [.utils]perldoc $@ + +[.lib.ExtUtils]Miniperl.pm : Minimod.PL miniperlmain.c [.lib.$(ARCH)]Config.pm + $(MINIPERL) Minimod.PL >$@ + +[.utils]c2ph : [.utils]c2ph.PL [.lib.$(ARCH)]Config.pm + $(MINIPERL) [.utils]c2ph.PL + +[.utils]h2ph : [.utils]h2ph.PL [.lib.$(ARCH)]Config.pm + $(MINIPERL) [.utils]h2ph.PL -preplibrary : $(MINIPERL_EXE) [.lib]DynaLoader.pm [.lib.VMS]Filespec.pm [.lib.ExtUtils]MM_VMS.pm $(SOCKPM) +[.utils]h2xs : [.utils]h2xs.PL [.lib.$(ARCH)]Config.pm + $(MINIPERL) [.utils]h2xs.PL + +[.lib]perlbug : [.utils]perlbug.PL [.lib.$(ARCH)]Config.pm + $(MINIPERL) [.utils]perlbug.PL + Rename/Log [.utils]perlbug $@ + +[.utils]pl2pm : [.utils]pl2pm.PL [.lib.$(ARCH)]Config.pm + $(MINIPERL) [.utils]pl2pm.PL + +[.lib.pod]pod2html : [.pod]pod2html.PL [.lib.$(ARCH)]Config.pm + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + $(MINIPERL) [.pod]pod2html.PL + Rename/Log [.pod]pod2html $@ + +[.lib.pod]pod2latex : [.pod]pod2latex.PL [.lib.$(ARCH)]Config.pm + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + $(MINIPERL) [.pod]pod2latex.PL + Rename/Log [.pod]pod2latex $@ + +[.lib.pod]pod2man : [.pod]pod2man.PL [.lib.$(ARCH)]Config.pm + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + $(MINIPERL) [.pod]pod2man.PL + Rename/Log [.pod]pod2man $@ + +[.lib.pod]pod2text : [.pod]pod2text.PL [.lib.$(ARCH)]Config.pm + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + $(MINIPERL) [.pod]pod2text.PL + Rename/Log [.pod]pod2text $@ + +preplibrary : $(MINIPERL_EXE) [.lib.$(ARCH)]Config.pm [.lib]DynaLoader.pm [.lib.VMS]Filespec.pm $(SOCKPM) @ Write sys$$Output "Autosplitting Perl library . . ." @ Create/Directory [.lib.auto] @ $(MINIPERL) -e "use AutoSplit; autosplit_lib_modules(@ARGV)" [.lib]*.pm [.lib.*]*.pm +[.lib.pod]perl.pod : [.pod]perl.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perl.pod $@ + +[.lib.pod]perlbook.pod : [.pod]perlbook.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perlbook.pod $@ + +[.lib.pod]perlbot.pod : [.pod]perlbot.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perlbot.pod $@ + +[.lib.pod]perlcall.pod : [.pod]perlcall.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perlcall.pod $@ + +[.lib.pod]perldata.pod : [.pod]perldata.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perldata.pod $@ + +[.lib.pod]perldebug.pod : [.pod]perldebug.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perldebug.pod $@ + +[.lib.pod]perldiag.pod : [.pod]perldiag.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perldiag.pod $@ + +[.lib.pod]perldsc.pod : [.pod]perldsc.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perldsc.pod $@ + +[.lib.pod]perlembed.pod : [.pod]perlembed.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perlembed.pod $@ + +[.lib.pod]perlform.pod : [.pod]perlform.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perlform.pod $@ + +[.lib.pod]perlfunc.pod : [.pod]perlfunc.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perlfunc.pod $@ + +[.lib.pod]perlguts.pod : [.pod]perlguts.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perlguts.pod $@ + +[.lib.pod]perlipc.pod : [.pod]perlipc.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perlipc.pod $@ + +[.lib.pod]perllol.pod : [.pod]perllol.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perllol.pod $@ + +[.lib.pod]perlmod.pod : [.pod]perlmod.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perlmod.pod $@ + +[.lib.pod]perlobj.pod : [.pod]perlobj.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perlobj.pod $@ + +[.lib.pod]perlop.pod : [.pod]perlop.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perlop.pod $@ + +[.lib.pod]perlovl.pod : [.pod]perlovl.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perlovl.pod $@ + +[.lib.pod]perlpod.pod : [.pod]perlpod.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perlpod.pod $@ + +[.lib.pod]perlre.pod : [.pod]perlre.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perlre.pod $@ + +[.lib.pod]perlref.pod : [.pod]perlref.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perlref.pod $@ + +[.lib.pod]perlrun.pod : [.pod]perlrun.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perlrun.pod $@ + +[.lib.pod]perlsec.pod : [.pod]perlsec.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perlsec.pod $@ + +[.lib.pod]perlstyle.pod : [.pod]perlstyle.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perlstyle.pod $@ + +[.lib.pod]perlsub.pod : [.pod]perlsub.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perlsub.pod $@ + +[.lib.pod]perlsyn.pod : [.pod]perlsyn.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perlsyn.pod $@ + +[.lib.pod]perltie.pod : [.pod]perltie.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perltie.pod $@ + +[.lib.pod]perltoc.pod : [.pod]perltoc.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perltoc.pod $@ + +[.lib.pod]perltrap.pod : [.pod]perltrap.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perltrap.pod $@ + +[.lib.pod]perlvar.pod : [.pod]perlvar.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perlvar.pod $@ + +[.lib.pod]perlxs.pod : [.pod]perlxs.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perlxs.pod $@ + +[.lib.pod]perlxstut.pod : [.pod]perlxstut.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.pod]perlxstut.pod $@ + +[.lib.pod]perlvms.pod : [.vms]perlvms.pod + @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log [.vms]perlvms.pod $@ + +printconfig : + @ $$@[.vms]make_command $(MMS) $(MMSQUALIFIERS) $(MMSTARGETS) + @ $$@[.vms]myconfig "$(CC)" "$(CFLAGS)" "$(LINKFLAGS)" "$(LIBS1)" "$(LIBS2)" "$(SOCKLIB)" "$(EXT)" "$(DBG)" + # The following three header files are generated automatically # keywords.h : keywords.pl @@ -1004,6 +1222,7 @@ tidy : cleanlis - If f$$Search("Perlshr_Gbl*.Mar;-1") .nes."" Then Purge/NoConfirm/Log Perlshr_Gbl*.Mar - If f$$Search("[.Ext.DynaLoader]DL_VMS$(O);-1").nes."" Then Purge/NoConfirm/Log [.Ext.DynaLoader]DL_VMS$(O) - If f$$Search("[.Ext.DynaLoader]DL_VMS.C;-1").nes."" Then Purge/NoConfirm/Log [.Ext.DynaLoader]DL_VMS.C + - If f$$Search("[.Ext.Safe...];-1").nes."" Then Purge/NoConfirm/Log [.Ext.Safe] - If f$$Search("[.VMS.Ext...]*.C;-1").nes."" Then Purge/NoConfirm/Log [.VMS.Ext...]*.C - If f$$Search("[.VMS.Ext...]*$(O);-1").nes."" Then Purge/NoConfirm/Log [.VMS.Ext...]*$(O) - If f$$Search("[.Lib.Auto...]*.al;-1").nes."" Then Purge/NoConfirm/Log [.Lib.Auto...]*.al @@ -1013,8 +1232,10 @@ tidy : cleanlis - If f$$Search("[.Lib]Config.pm;-1").nes."" Then Purge/NoConfirm/Log [.Lib]Config.pm - If f$$Search("[.Lib.$(ARCH)]Config.pm;-1").nes."" Then Purge/NoConfirm/Log [.Lib.$(ARCH)]Config.pm - If f$$Search("[.Lib.VMS]*.*;-1").nes."" Then Purge/NoConfirm/Log [.Lib.VMS]*.* - - If f$$Search("[.Lib.ExtUtils]MM_VMS.pm;-1").nes."" Then Purge/NoConfirm/Log [.Lib.ExtUtils]MM_VMS.pm + - If f$$Search("[.Lib.Pod]*.Pod;-1").nes."" Then Purge/NoConfirm/Log [.Lib.Pod]*.Pod - If f$$Search("$(ARCHCORE)*.*").nes."" Then Purge/NoConfirm/Log $(ARCHCORE)*.* + - If f$$Search("[.utils]*.;-1").nes."" Then Purge/NoConfirm/Log [.utils]*. + - If f$$Search("[.lib.pod]*.;-1").nes."" Then Purge/NoConfirm/Log [.lib.pod]*. clean : tidy - If f$$Search("*.Opt").nes."" Then Delete/NoConfirm/Log *.Opt;*/Exclude=PerlShr_*.Opt @@ -1036,16 +1257,27 @@ clean : tidy - If f$$Search("[.Ext.Socket]Socket.C").nes."" Then Delete/NoConfirm/Log [.Ext.Socket]Socket.C;* - If f$$Search("[.VMS.Ext...]*.C").nes."" Then Delete/NoConfirm/Log [.VMS.Ext...]*.C;* - If f$$Search("[.VMS.Ext...]*$(O)").nes."" Then Delete/NoConfirm/Log [.VMS.Ext...]*$(O);* + Set Default [.ext.Safe] + - $(MMS) clean + Set Default [--] realclean : clean - If f$$Search("*$(OLB)").nes."" Then Delete/NoConfirm/Log *$(OLB);* - If f$$Search("*.Opt").nes."" Then Delete/NoConfirm/Log *.Opt;* - $(MINIPERL) -e "use File::Path; rmtree(['lib/auto','lib/VMS','lib/$(ARCH)'],1,0);" - If f$$Search("[.Lib]DynaLoader.pm").nes."" Then Delete/NoConfirm/Log [.Lib]DynaLoader.pm;* - - If f$$Search("[.Lib.ExtUtils]MM_VMS.pm").nes."" Then Delete/NoConfirm/Log [.Lib.ExtUtils]MM_VMS.pm;* - - If f$$Search("*$(E)").nes."" Then Delete/NoConfirm/Log *$(E);* - If f$$Search("[.Lib]Config.pm").nes."" Then Delete/NoConfirm/Log [.Lib]Config.pm;* - If f$$Search("[.Lib.$(ARCH)]Config.pm").nes."" Then Delete/NoConfirm/Log [.Lib.$(ARCH)]Config.pm;* + - If f$$Search("[.lib.ExtUtils]Miniperl.pm").nes."" Then Delete/NoConfirm/Log [.lib.ExtUtils]Miniperl.pm;* + - If f$$Search("[.utils]*.").nes."" Then Delete/NoConfirm/Log [.utils]*.;* + - If f$$Search("[.lib.pod]*.pod").nes."" Then Delete/NoConfirm/Log [.lib.pod]*.pod;* + - If f$$Search("[.lib.pod]perldoc.").nes."" Then Delete/NoConfirm/Log [.lib.pod]perldoc.;* + - If f$$Search("[.lib.pod]pod2*.").nes."" Then Delete/NoConfirm/Log [.lib.pod]pod2*.;* + Set Default [.ext.Safe] + - $(MMS) realclean + Set Default [--] + - If f$$Search("[.Lib]Config.pm").nes."" Then Delete/NoConfirm/Log [.Lib]Config.pm;* + - If f$$Search("*$(E)").nes."" Then Delete/NoConfirm/Log *$(E);* cleansrc : clean - If f$$Search("*.C;-1").nes."" Then Purge/NoConfirm/Log *.C diff --git a/vms/config.vms b/vms/config.vms index cd8a46de3b..cdf900a9cd 100644 --- a/vms/config.vms +++ b/vms/config.vms @@ -135,7 +135,7 @@ * This symbol, if defined, indicates that the crypt routine is available * to encrypt passwords and the like. */ -#undef HAS_CRYPT /**/ +#define HAS_CRYPT /**/ /* BYTEORDER: * This symbol hold the hexadecimal constant defined in byteorder, @@ -462,6 +462,12 @@ #undef Shmat_t /**/ /* config-skip */ #undef HAS_SHMAT_PROTOTYPE /**/ +/* HAS_SIGACTION: + * This symbol, if defined, indicates that Vr4's sigaction() routine + * is available. + */ +#undef HAS_SIGACTION /**/ + /* USE_STAT_BLOCKS: * This symbol is defined if this system has a stat structure declaring * st_blksize and st_blocks. @@ -1002,7 +1008,7 @@ * This symbol, if defined, indicates that the getlogin routine is * available. */ -#undef HAS_GETLOGIN /**/ +#define HAS_GETLOGIN /**/ /* HAS_GETPPID: * This symbol, if defined, indicates that the getppid routine is @@ -1357,7 +1363,7 @@ /* VMS: true for gcc, undef for VAXC/DECC. This is handled in Descrip.MMS * C. Bailey 26-Aug-1994 */ -/*#define GNUC_ATTRIBUTE_CHECK */ +/*#define GNUC_ATTRIBUTE_CHECK /**/ /* VOID_CLOSEDIR: * This symbol, if defined, indicates that the closedir() routine @@ -1486,6 +1492,13 @@ */ #define USE_DYNAMIC_LOADING /**/ +/* STARTPERL: + * This variable contains the string to put in front of a perl + * script to make sure (one hopes) that it runs with perl and not + * some shell. + */ +#define STARTPERL "" /**/ + /* VOIDFLAGS: * This symbol indicates how much support of the void type is given by this * compiler. What various bits mean: diff --git a/vms/descrip.mms b/vms/descrip.mms index 09257491cf..aac4841d64 100644 --- a/vms/descrip.mms +++ b/vms/descrip.mms @@ -1,5 +1,5 @@ # Descrip.MMS for perl5 on VMS -# Last revised 4-Dec-1995 by Charles Bailey bailey@genetics.upenn.edu +# Last revised 17-Jan-1995 by Charles Bailey bailey@genetics.upenn.edu # #: This file uses MMS syntax, and can be processed using DEC's MMS product, #: or the free MMK clone (available by ftp at ftp.spc.edu). If you want to @@ -19,21 +19,19 @@ #: $ MMS /MACRO=("decc=1") #: Building with DEC C, on system with VAX C installed as default C compiler: #: $ MMS /MACRO=("decc=1","cc=CC/DECC") -#: Building with GNU C, on system with GCC command installed in DCLTABLES: +#: Building with GNU C #: $ MMS /MACRO=("gnuc=1") -#: Building with GNU C, on system without GCC command installed in DCLTABLES: -#: $ MMS /MACRO=("gnuc=1") gcc_cld_setup,all -#: note: `gcc_cld_setup' target must explicitly precede `all' or `[mini]perl' -#: #: To each of the above, add /Macro="__AXP__=1" if building on an AXP, #: /Macro="__DEBUG__=1" to build a debug version #: (i.e. VMS debugger, not perl -D), and #: /Macro="SOCKET=1" to include socket support. # # tidy -- purge files generated by executing this file -# clean -- remove all files generated by executing this file -# cleansrc -- `clean' + purge *.c,*.h,descrip.mms -# gcc_cld_setup -- GCC initialization; see above +# clean -- remove all intermediate (e.g. object files, C files generated +# during build) files generated by executing this file, +# but leave `installable' files (images, library) intact +# realclean -- remove all files generated by executing this file +# cleansrc -- `realclean' + purge *.c,*.h,descrip.mms # crtl.opt -- compiler-specific linker options file (made automatically) # @@ -60,8 +58,10 @@ E = .exe .ifdef __AXP__ DECC = 1 ARCH = VMS_AXP +OBJVAL = $(O) .else ARCH = VMS_VAX +OBJVAL = $(MMS$TARGET_NAME)$(O) .endif ARCHDIR = [.lib.$(ARCH)] ARCHCORE = [.lib.$(ARCH).CORE] @@ -81,7 +81,7 @@ DBGSPECFLAGS = XTRADEF = ,GNUC_ATTRIBUTE_CHECK XTRAOBJS = LIBS1 = GNU_CC:[000000]GCCLIB.OLB/Library -LIBS2 = VAXCRTL/Shareable +LIBS2 = Sys$Share:VAXCRTL/Shareable .else XTRAOBJS = LIBS1 = $(XTRAOBJS) @@ -95,14 +95,14 @@ DBGSPECFLAGS = /Show=(Source,Include,Expansion) .first @ Set Process/Privilege=(NoSYSNAM) LIBS2 = -XTRACCFLAGS = /Include=[]/Standard=Relaxed_ANSI/Prefix=All/Obj=$(MMS$TARGET_NAME)$(O) +XTRACCFLAGS = /Include=[]/Standard=Relaxed_ANSI/Prefix=All/Obj=$(OBJVAL) XTRADEF = .else # VAXC .first @ If F$TrnLnm("Sys").eqs."" Then Define/NoLog SYS Sys$Library XTRACCFLAGS = /Include=[]/Object=$(O) XTRADEF = -LIBS2 = VAXCRTL/Shareable +LIBS2 = Sys$Share:VAXCRTL/Shareable .endif .endif @@ -235,12 +235,31 @@ CRTLOPTS =,$(CRTL)/Options $(XSUBPP) $(MMS$SOURCE) >$(MMS$SOURCE_NAME).c $(CC) $(CFLAGS) $(MMS$SOURCE_NAME).c -all : base extras archcorefiles preplibrary +all : base extras archcorefiles preplibrary perlpods @ $(NOOP) base : miniperl$(E) perl$(E) @ $(NOOP) -extras : [.lib]Config.pm [.lib.$(ARCH)]Config.pm [.lib]DynaLoader.pm [.lib.VMS]Filespec.pm [.lib.extutils]MM_VMS.pm +extras : Safe libmods utils podxform + @ $(NOOP) +libmods : [.lib]Config.pm [.lib.$(ARCH)]Config.pm [.lib]DynaLoader.pm [.lib.VMS]Filespec.pm + @ $(NOOP) +utils : [.lib.pod]perldoc [.lib.ExtUtils]Miniperl.pm [.utils]c2ph [.utils]h2ph [.utils]h2xs [.lib]perlbug + @ $(NOOP) +podxform : [.lib.pod]pod2text [.lib.pod]pod2html [.lib.pod]pod2latex [.lib.pod]pod2man @ $(NOOP) + +pod1 = [.lib.pod]perl.pod [.lib.pod]perlbook.pod [.lib.pod]perlbot.pod [.lib.pod]perlcall.pod +pod2 = [.lib.pod]perldata.pod [.lib.pod]perldebug.pod [.lib.pod]perldiag.pod [.lib.pod]perldsc.pod +pod3 = [.lib.pod]perlembed.pod [.lib.pod]perlform.pod [.lib.pod]perlfunc.pod [.lib.pod]perlguts.pod +pod4 = [.lib.pod]perlipc.pod [.lib.pod]perllol.pod [.lib.pod]perlmod.pod [.lib.pod]perlobj.pod +pod5 = [.lib.pod]perlop.pod [.lib.pod]perlovl.pod [.lib.pod]perlpod.pod [.lib.pod]perlre.pod +pod6 = [.lib.pod]perlref.pod [.lib.pod]perlrun.pod [.lib.pod]perlsec.pod [.lib.pod]perlstyle.pod +pod7 = [.lib.pod]perlsub.pod [.lib.pod]perlsyn.pod [.lib.pod]perltie.pod [.lib.pod]perltoc.pod +pod8 = [.lib.pod]perltrap.pod [.lib.pod]perlvar.pod [.lib.pod]perlxs.pod [.lib.pod]perlxstut.pod + +perlpods : $(pod1) $(pod2) $(pod3) $(pod4) $(pod5) $(pod6) $(pod7) $(pod8) [.lib.pod]perlvms.pod + @ $(NOOP) + archcorefiles : $(ac1) $(ac2) $(ac3) $(ac4) $(ac5) $(ac6) $(ac7) $(ac8) $(ac9) $(acs) $(ARCHAUTO)time.stamp @ $(NOOP) @@ -261,6 +280,9 @@ perlmain.c : miniperlmain.c $(MINIPERL_EXE) [.vms]writemain.pl perl$(E) : perlmain$(O), perlshr$(E), $(MINIPERL_EXE) @ @[.vms]genopt "PerlShr.Opt/Write" "|" "''F$Environment("Default")'$(DBG)PerlShr$(E)/Share" +.ifdef gnuc + @ @[.vms]genopt "PerlShr.Opt/Append" "|" "$(LIBS1)|$(LIBS2)" +.endif Link $(LINKFLAGS)/Exe=$(DBG)$(MMS$TARGET) perlmain$(O), perlshr.opt/Option, perlshr_attr.opt/Option perlshr$(E) : $(DBG)libperl$(OLB) $(extobj) $(DBG)perlshr_xtras.ts Link /NoTrace$(LINKFLAGS)/Share=$(DBG)$(MMS$TARGET) $(extobj) []$(DBG)perlshr_bld.opt/Option, perlshr_attr.opt/Option @@ -299,19 +321,215 @@ $(DBG)perlshr_xtras.ts : perl.h config.h vmsish.h proto.h [.vms]gen_shrfls.pl $( [.lib]DynaLoader.pm : [.ext.dynaloader]dynaloader.pm Copy/Log/NoConfirm [.ext.dynaloader]dynaloader.pm [.lib]DynaLoader.pm + @ $(MINIPERL) -e "use AutoSplit; autosplit_lib_modules(@ARGV)" [.lib]DynaLoader.pm + +Safe : [.lib]Safe.pm [.lib.auto]Safe$(E) + @ $(NOOP) + +[.lib]Safe.pm : [.ext.Safe]Descrip.MMS + @ Set Default [.ext.Safe] + $(MMS) + @ Set Default [--] + +[.lib.auto]Safe$(E) : [.ext.Safe]Descrip.MMS + @ Set Default [.ext.Safe] + $(MMS) + @ Set Default [--] + +# Add "-I[--.lib]" t $(MINIPERL) so we use this copy of lib after C<chdir> +# ${@} necessary to distract different versions of MM[SK]/make +[.ext.Safe]Descrip.MMS : [.ext.Safe]Makefile.PL [.lib.$(ARCH)]Config.pm [.lib.VMS]Filespec.pm [.lib]DynaLoader.pm perlshr$(E) + $(MINIPERL) "-I[--.lib]" -e "chdir('[.ext.Safe]') or die $!; do 'Makefile.PL'; print ${@} if ${@};" 2>_nla0: [.lib.VMS]Filespec.pm : [.vms.ext]Filespec.pm @ If F$Search("[.lib]VMS.Dir").eqs."" Then Create/Directory [.lib.VMS] Copy/Log/NoConfirm $(MMS$SOURCE) $(MMS$TARGET) -[.lib.ExtUtils]MM_VMS.pm : [.vms.ext]MM_VMS.pm - Copy/Log/NoConfirm $(MMS$SOURCE) $(MMS$TARGET) +[.lib.pod]perldoc : [.utils]perldoc.PL [.lib.$(ARCH)]Config.pm + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + $(MINIPERL) $(MMS$SOURCE) + Copy/Log [.utils]perldoc $(MMS$TARGET) + +[.lib.ExtUtils]Miniperl.pm : Minimod.PL miniperlmain.c [.lib.$(ARCH)]Config.pm + $(MINIPERL) $(MMS$SOURCE) >$(MMS$TARGET) -preplibrary : $(MINIPERL_EXE) [.lib]DynaLoader.pm [.lib.VMS]Filespec.pm [.lib.ExtUtils]MM_VMS.pm $(SOCKPM) +[.utils]c2ph : [.utils]c2ph.PL [.lib.$(ARCH)]Config.pm + $(MINIPERL) $(MMS$SOURCE) + +[.utils]h2ph : [.utils]h2ph.PL [.lib.$(ARCH)]Config.pm + $(MINIPERL) $(MMS$SOURCE) + +[.utils]h2xs : [.utils]h2xs.PL [.lib.$(ARCH)]Config.pm + $(MINIPERL) $(MMS$SOURCE) + +[.lib]perlbug : [.utils]perlbug.PL [.lib.$(ARCH)]Config.pm + $(MINIPERL) $(MMS$SOURCE) + Rename/Log [.utils]perlbug $(MMS$TARGET) + +[.utils]pl2pm : [.utils]pl2pm.PL [.lib.$(ARCH)]Config.pm + $(MINIPERL) $(MMS$SOURCE) + +[.lib.pod]pod2html : [.pod]pod2html.PL [.lib.$(ARCH)]Config.pm + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + $(MINIPERL) $(MMS$SOURCE) + Rename/Log [.pod]pod2html $(MMS$TARGET) + +[.lib.pod]pod2latex : [.pod]pod2latex.PL [.lib.$(ARCH)]Config.pm + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + $(MINIPERL) $(MMS$SOURCE) + Rename/Log [.pod]pod2latex $(MMS$TARGET) + +[.lib.pod]pod2man : [.pod]pod2man.PL [.lib.$(ARCH)]Config.pm + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + $(MINIPERL) $(MMS$SOURCE) + Rename/Log [.pod]pod2man $(MMS$TARGET) + +[.lib.pod]pod2text : [.pod]pod2text.PL [.lib.$(ARCH)]Config.pm + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + $(MINIPERL) $(MMS$SOURCE) + Rename/Log [.pod]pod2text $(MMS$TARGET) + +preplibrary : $(MINIPERL_EXE) [.lib.$(ARCH)]Config.pm [.lib]DynaLoader.pm [.lib.VMS]Filespec.pm $(SOCKPM) @ Write Sys$Output "Autosplitting Perl library . . ." @ Create/Directory [.lib.auto] @ $(MINIPERL) -e "use AutoSplit; autosplit_lib_modules(@ARGV)" [.lib]*.pm [.lib.*]*.pm +[.lib.pod]perl.pod : [.pod]perl.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perlbook.pod : [.pod]perlbook.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perlbot.pod : [.pod]perlbot.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perlcall.pod : [.pod]perlcall.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perldata.pod : [.pod]perldata.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perldebug.pod : [.pod]perldebug.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perldiag.pod : [.pod]perldiag.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perldsc.pod : [.pod]perldsc.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perlembed.pod : [.pod]perlembed.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perlform.pod : [.pod]perlform.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perlfunc.pod : [.pod]perlfunc.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perlguts.pod : [.pod]perlguts.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perlipc.pod : [.pod]perlipc.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perllol.pod : [.pod]perllol.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perlmod.pod : [.pod]perlmod.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perlobj.pod : [.pod]perlobj.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perlop.pod : [.pod]perlop.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perlovl.pod : [.pod]perlovl.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perlpod.pod : [.pod]perlpod.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perlre.pod : [.pod]perlre.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perlref.pod : [.pod]perlref.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perlrun.pod : [.pod]perlrun.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perlsec.pod : [.pod]perlsec.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perlstyle.pod : [.pod]perlstyle.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perlsub.pod : [.pod]perlsub.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perlsyn.pod : [.pod]perlsyn.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perltie.pod : [.pod]perltie.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perltoc.pod : [.pod]perltoc.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perltrap.pod : [.pod]perltrap.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perlvar.pod : [.pod]perlvar.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perlxs.pod : [.pod]perlxs.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perlxstut.pod : [.pod]perlxstut.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +[.lib.pod]perlvms.pod : [.vms]perlvms.pod + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + @ Copy/Log $(MMS$SOURCE) $(MMS$TARGET) + +printconfig : + @ @[.vms]make_command $(MMS) $(MMSQUALIFIERS) $(MMSTARGETS) + @ @[.vms]myconfig "$(CC)" "$(CFLAGS)" "$(LINKFLAGS)" "$(LIBS1)" "$(LIBS2)" "$(SOCKLIB)" "$(EXT)" "$(DBG)" + .ifdef SOCKET $(SOCKOBJ) : $(SOCKC) $(SOCKH) @@ -1129,6 +1347,7 @@ tidy : cleanlis - If F$Search("Perlshr_Gbl*.Mar;-1") .nes."" Then Purge/NoConfirm/Log Perlshr_Gbl*.Mar - If F$Search("[.Ext.DynaLoader]DL_VMS$(O);-1").nes."" Then Purge/NoConfirm/Log [.Ext.DynaLoader]DL_VMS$(O) - If F$Search("[.Ext.DynaLoader]DL_VMS.C;-1").nes."" Then Purge/NoConfirm/Log [.Ext.DynaLoader]DL_VMS.C + - If F$Search("[.Ext.Safe...];-1").nes."" Then Purge/NoConfirm/Log [.Ext.Safe] - If F$Search("[.VMS.Ext...]*.C;-1").nes."" Then Purge/NoConfirm/Log [.VMS.Ext...]*.C - If F$Search("[.VMS.Ext...]*$(O);-1").nes."" Then Purge/NoConfirm/Log [.VMS.Ext...]*$(O) - If F$Search("[.Lib.Auto...]*.al;-1").nes."" Then Purge/NoConfirm/Log [.Lib.Auto...]*.al @@ -1138,8 +1357,10 @@ tidy : cleanlis - If F$Search("[.Lib]Config.pm;-1").nes."" Then Purge/NoConfirm/Log [.Lib]Config.pm - If F$Search("[.Lib.$(ARCH)]Config.pm;-1").nes."" Then Purge/NoConfirm/Log [.Lib.$(ARCH)]Config.pm - If F$Search("[.Lib.VMS]*.*;-1").nes."" Then Purge/NoConfirm/Log [.Lib.VMS]*.* - - If F$Search("[.Lib.ExtUtils]MM_VMS.pm;-1").nes."" Then Purge/NoConfirm/Log [.Lib.ExtUtils]MM_VMS.pm + - If F$Search("[.Lib.Pod]*.Pod;-1").nes."" Then Purge/NoConfirm/Log [.Lib.Pod]*.Pod - If F$Search("$(ARCHCORE)*.*").nes."" Then Purge/NoConfirm/Log $(ARCHCORE)*.* + - If F$Search("[.utils]*.;-1").nes."" Then Purge/NoConfirm/Log [.utils]*. + - If F$Search("[.lib.pod]*.;-1").nes."" Then Purge/NoConfirm/Log [.lib.pod]*. clean : tidy - If F$Search("*.Opt").nes."" Then Delete/NoConfirm/Log *.Opt;*/Exclude=PerlShr_*.Opt @@ -1161,16 +1382,27 @@ clean : tidy - If F$Search("[.Ext.Socket]Socket.C").nes."" Then Delete/NoConfirm/Log [.Ext.Socket]Socket.C;* - If F$Search("[.VMS.Ext...]*.C").nes."" Then Delete/NoConfirm/Log [.VMS.Ext...]*.C;* - If F$Search("[.VMS.Ext...]*$(O)").nes."" Then Delete/NoConfirm/Log [.VMS.Ext...]*$(O);* + Set Default [.ext.Safe] + - $(MMS) clean + Set Default [--] realclean : clean - If F$Search("*$(OLB)").nes."" Then Delete/NoConfirm/Log *$(OLB);* - If F$Search("*.Opt").nes."" Then Delete/NoConfirm/Log *.Opt;* - $(MINIPERL) -e "use File::Path; rmtree(['lib/auto','lib/VMS','lib/$(ARCH)'],1,0);" - If F$Search("[.Lib]DynaLoader.pm").nes."" Then Delete/NoConfirm/Log [.Lib]DynaLoader.pm;* - - If F$Search("[.Lib.ExtUtils]MM_VMS.pm").nes."" Then Delete/NoConfirm/Log [.Lib.ExtUtils]MM_VMS.pm;* - - If F$Search("*$(E)").nes."" Then Delete/NoConfirm/Log *$(E);* - If F$Search("[.Lib]Config.pm").nes."" Then Delete/NoConfirm/Log [.Lib]Config.pm;* - If F$Search("[.Lib.$(ARCH)]Config.pm").nes."" Then Delete/NoConfirm/Log [.Lib.$(ARCH)]Config.pm;* + - If F$Search("[.lib.ExtUtils]Miniperl.pm").nes."" Then Delete/NoConfirm/Log [.lib.ExtUtils]Miniperl.pm;* + - If F$Search("[.utils]*.").nes."" Then Delete/NoConfirm/Log [.utils]*.;* + - If F$Search("[.lib.pod]*.pod").nes."" Then Delete/NoConfirm/Log [.lib.pod]*.pod;* + - If F$Search("[.lib.pod]perldoc.").nes."" Then Delete/NoConfirm/Log [.lib.pod]perldoc.;* + - If F$Search("[.lib.pod]pod2*.").nes."" Then Delete/NoConfirm/Log [.lib.pod]pod2*.;* + Set Default [.ext.Safe] + - $(MMS) realclean + Set Default [--] + - If F$Search("[.Lib]Config.pm").nes."" Then Delete/NoConfirm/Log [.Lib]Config.pm;* + - If F$Search("*$(E)").nes."" Then Delete/NoConfirm/Log *$(E);* cleansrc : clean - If F$Search("*.C;-1").nes."" Then Purge/NoConfirm/Log *.C diff --git a/vms/ext/VMS/stdio/Makefile.PL b/vms/ext/stdio/Makefile.PL index d6683b4af6..d6683b4af6 100644 --- a/vms/ext/VMS/stdio/Makefile.PL +++ b/vms/ext/stdio/Makefile.PL diff --git a/vms/ext/VMS/stdio/stdio.pm b/vms/ext/stdio/stdio.pm index d8b4ec21ec..d8b4ec21ec 100644 --- a/vms/ext/VMS/stdio/stdio.pm +++ b/vms/ext/stdio/stdio.pm diff --git a/vms/ext/VMS/stdio/stdio.xs b/vms/ext/stdio/stdio.xs index 958c0400d1..737229fe0b 100644 --- a/vms/ext/VMS/stdio/stdio.xs +++ b/vms/ext/stdio/stdio.xs @@ -90,7 +90,7 @@ vmsfopen(name,...) if (c == 'a') *(name++) = '>'; } *(name++) = '&'; - if (do_open(gv,mode,name - mode,fp)) + if (do_open(gv,mode,name - mode,FALSE,0,0,fp)) sv_setsv(ST(0),newRV((SV*)gv)); } diff --git a/vms/gen_shrfls.pl b/vms/gen_shrfls.pl index 286695feb3..e2f5b287e3 100644 --- a/vms/gen_shrfls.pl +++ b/vms/gen_shrfls.pl @@ -119,8 +119,8 @@ sub scan_enum { $line =~ s/,?\s*\n?$//; print "\tfiltered to \\$line\\\n" if $debug > 1; if ($line =~ /(\w+)$/) { - print "\tvar name is \\$1\\\n" if $debug > 1; - $vars{$1}++; + print "\tconstant name is \\$1\\\n" if $debug > 1; + $enums{$1}++; } } @@ -152,6 +152,7 @@ sub scan_func { } } +$used_expectation_enum = $used_opcode_enum = 0; # avoid warnings if ($docc) { open(CPP,"${cc_cmd}/NoObj/PreProc=Sys\$Output ${dir}perl.h|") or die "$0: Can't preprocess ${dir}perl.h: $!\n"; @@ -190,7 +191,19 @@ LINE: while (<CPP>) { last LINE unless $_ = <CPP>; } print $_ if $debug > 3; - if (/^EXT/) { &scan_var($_); } + if (($type) = /^EXT\s+(\w+)/) { + if ($isvaxc) { + if ($type eq 'expectation') { + $used_expectation_enum++; + print "\tsaw global use of enum \"expectation\"\n" if $debug > 1; + } + if ($type eq 'opcode') { + $used_opcode_enum++; + print "\tsaw global use of enum \"opcode\"\n" if $debug > 1; + } + } + &scan_var($_); + } } close CPP; while (<DATA>) { @@ -208,6 +221,22 @@ foreach (split /\s+/, $extnames) { print "Adding boot_$pkgname to \%fcns (for extension $_)\n" if $debug; } +# If we're using VAXC, fold in the names of the constants for enums +# we've seen as the type of global vars. +if ($isvaxc) { + foreach (keys %enums) { + if (/^OP/) { + $vars{$_}++ if $used_opcode_enum; + next; + } + if (/^X/) { + $vars{$_}++ if $used_expectation_enum; + next; + } + print STDERR "Unrecognized enum constant \"$_\" ignored\n"; + } +} + # Eventually, we'll check against existing copies here, so we can add new # symbols to an existing options file in an upwardly-compatible manner. diff --git a/vms/genconfig.pl b/vms/genconfig.pl index 9200814ef0..a4721ba4b0 100644 --- a/vms/genconfig.pl +++ b/vms/genconfig.pl @@ -41,19 +41,20 @@ cf_time='$time' osname='VMS' ld='Link' lddlflags='/Share' -libc='' ranlib='' ar='' eunicefix=':' +hint='none' hintfile='' intsize='4' alignbytes='8' shrplib='define' usemymalloc='n' +spitshell='write sys\$output ' EndOfIntro $cf_by = (getpwuid($<))[0]; -print OUT "cf_by='$cf_by'\nperladmin='$cf_by'\n"; +print OUT "cf_by='$cf_by'\n"; $hw_model = `Write Sys\$Output F\$GetSyi("HW_MODEL")`; chomp $hw_model; @@ -68,46 +69,80 @@ else { $archsufx = 'VAX'; } $osvers = `Write Sys\$Output F\$GetSyi("VERSION")`; -$osvers =~ s/^V(\S+)\s*\n?$/$1/; +$osvers =~ s/^V?(\S+)\s*\n?$/$1/; print OUT "osvers='$osvers'\n"; foreach (@ARGV) { ($key,$val) = split('=',$_,2); if ($key eq 'cc') { # Figure out which C compiler we're using - if (`$val/NoObject/NoList _nla0:/Version` =~ /GNU/) { - print OUT "vms_cc_type='gcc'\n"; - print OUT "d_attribut='define'\n"; + my($cc,$ccflags) = split('/',$val,2); + my($d_attr); + $ccflags = "/$ccflags"; + if ($ccflags =~s!/DECC!!ig) { + $cc .= '/DECC'; + $cctype = 'decc'; + $d_attr = 'undef'; + } + elsif ($ccflags =~s!/VAXC!!ig) { + $cc .= '/VAXC'; + $cctype = 'vaxc'; + $d_attr = 'undef'; + } + elsif (`$val/NoObject/NoList _nla0:/Version` =~ /GNU/) { + $cctype = 'gcc'; + $d_attr = 'define'; } elsif ($archsufx eq 'VAX' && `$val/NoObject/NoList /prefix=all _nla0:` =~ /IVQUAL/) { - print OUT "vms_cc_type='vaxc'\n"; - print OUT "d_attribut='undef'\n"; + $cctype = 'vaxc'; + $d_attr = 'undef'; } else { - print OUT "vms_cc_type='decc'\n"; - print OUT "d_attribut='undef'\n"; - # DECC for VAX requires filename in /object qualifier, so we + $cctype = 'decc'; + $d_attr = 'undef'; + } + print OUT "vms_cc_type='$cctype'\n"; + print OUT "d_attribut='$d_attr'\n"; + print OUT "cc='$cc'\n"; + if ( ($cctype eq 'decc' and $archsufx eq 'VAX') || $cctype eq 'gcc') { + # gcc and DECC for VAX requires filename in /object qualifier, so we # have to remove it here. Alas, this means we lose the user's # object file suffix if it's not .obj. - $val =~ s#/obj(?:ect)?=[^/\s]+##i if $archsufx eq 'VAX';; + $ccflags =~ s#/obj(?:ect)?=[^/\s]+##i; } + print OUT "ccflags='$ccflags'\n"; + $dosock = ($ccflags =~ m!/DEF[^/]+VMS_DO_SOCKETS!i and + $ccflags !~ m!/UND[^/]+VMS_DO_SOCKETS!i); + next; } print OUT "$key=\'$val\'\n"; - if ($val =~/VMS_DO_SOCKETS/i) { - $dosock = 1; - # Are there any other logicals which TCP/IP stacks use for the host name? - $myname = $ENV{'ARPANET_HOST_NAME'} || $ENV{'INTERNET_HOST_NAME'} || - $ENV{'MULTINET_HOST_NAME'} || $ENV{'UCX$INET_HOST'} || - $ENV{'TCPWARE_DOMAINNAME'} || $ENV{'NEWS_ADDRESS'}; - if (!$myname) { - ($myname) = `hostname` =~ /^(\S+)/; - if ($myname =~ /IVVERB/) { - warn "Can't determine TCP/IP hostname; skipping \$Config{'myhostname'}"; - } - } - print OUT "myhostname='$myname'\n" if $myname; +} + +# Are there any other logicals which TCP/IP stacks use for the host name? +$myname = $ENV{'ARPANET_HOST_NAME'} || $ENV{'INTERNET_HOST_NAME'} || + $ENV{'MULTINET_HOST_NAME'} || $ENV{'UCX$INET_HOST'} || + $ENV{'TCPWARE_DOMAINNAME'} || $ENV{'NEWS_ADDRESS'}; +if (!$myname) { + ($myname) = `hostname` =~ /^(\S+)/; + if ($myname =~ /IVVERB/) { + warn "Can't determine TCP/IP hostname" if $dosock; + $myname = ''; } } -if (!$dosock) { print OUT "myhostname='$ENV{'SYS$NODE'}'\n"; } +$myname = $ENV{'SYS$NODE'} unless $myname; +($myhostname,$mydomain) = split(/\./,$myname,2); +print OUT "myhostname='$myhostname'\n" if $myhostname; +if ($mydomain) { + print OUT "mydomain='.$mydomain'\n"; + print OUT "perladmin='$cf_by\@$myhostname.$mydomain'\n"; + print OUT "cf_email='$cf_by\@$myhostname.$mydomain'\n"; +} +else { + print OUT "perladmin='$cf_by'\n"; + print OUT "cf_email='$cf_by'\n"; +} +chomp($hwname = `Write Sys\$Output F\$GetSyi("HW_NAME")`); +$hwname = $archsufx if $hwname =~ /IVKEYW/; # *really* old VMS version +print OUT "myuname='VMS $myname $osvers $hwname'\n"; while (<IN>) { # roll through the comment header in Config.VMS last if /config-start/; @@ -122,12 +157,18 @@ while (<IN>) { s/^\s*//; $_ = $line . $_; } - next unless my ($blocked,$un,$token,$val) = m%(\/\*)?\s*\#\s*(un)?def\w*\s*([A-za-z0-9]\w+)\S*\s*(.*)%; + next unless my ($blocked,$un,$token,$val) = m%^(\/\*)?\s*\#\s*(un)?def\w*\s*([A-za-z0-9]\w+)\S*\s*(.*)%; next if /config-skip/; $state = ($blocked || $un) ? 'undef' : 'define'; $token =~ tr/A-Z/a-z/; $token =~ s/_exp$/exp/; # Config.pm has 'privlibexp' etc. where config.h # has 'privlib_exp' etc. + # Fixup differences between Configure vars and config.h manifests + # This isn't comprehensize; we fix 'em as we need 'em. + $token = 'castneg' if $token eq 'castnegfloat'; + $token = 'dlsymun' if $token eq 'dlsym_needs_underscore'; + $token = 'stdstdio' if $token eq 'use_stdio_ptr'; + $token = 'stdiobase' if $token eq 'use_stdio_base'; $val =~ s%/\*.*\*/\s*%%g; $val =~ s/\s*$//; # strip off trailing comment $val =~ s/^"//; $val =~ s/"$//; # remove end quotes $val =~ s/","/ /g; # make signal list look nice @@ -161,12 +202,25 @@ if (open(OPT,"${outdir}crtl.opt")) { while (<OPT>) { next unless m#/(sha|lib)#i; chomp; - push(@libs,$_); + if (/crtl/i || /gcclib/i) { push(@crtls,$_); } + else { push(@libs,$_); } } close OPT; print OUT "libs='",join(' ',@libs),"'\n"; + push(@crtls,'(DECCRTL)') if $cctype eq 'decc'; + print OUT "libc='",join(' ',@crtls),"'\n"; +} +else { warn "Can't read ${outdir}crtl.opt - skipping 'libs' & 'libc'"; } + +if (open(PL,"${outdir}patchlevel.h")) { + while (<PL>) { + next unless /PATCHLEVEL\s+(\S+)/; + print OUT "PATCHLEVEL='$1'\n"; + last; + } + close PL; } -else { warn "Can't read ${outdir}crtl.opt - skipping \$Config{'libs'}"; } +else { warn "Can't read ${outdir}patchlevel.h - skipping 'PATCHLEVEL'"; } # simple pager support for perldoc if (`most nl:` =~ /IVVERB/) { @@ -186,20 +240,16 @@ __END__ # The definitions in this block are constant across most systems, and # should only rarely need to be changed. -PATCHLEVEL=002 ccdlflags= cccdlflags= usedl=true dlobj=dl_vms.obj dlsrc=dl_vms.c -d_dlsymun=undef so=exe dlext=exe libpth=/sys$share /sys$library -d_stdstdio=undef usevfork=false castflags=0 -d_castneg=define # should be same as d_castnegfloat from config.vms signal_t=void timetype=long builddir=perl_root:[000000] @@ -209,6 +259,7 @@ privlib=perl_root:[lib] installbin=perl_root:[000000] installman1dir=perl_root:[man.man1] installman3dir=perl_root:[man.man3] -man1ext=.rno -man3ext=.rno +man1ext=rno +man3ext=rno binexp=perl_root:[000000] # should be same as installbin +useposix=false diff --git a/vms/make_command.com b/vms/make_command.com new file mode 100644 index 0000000000..c3a9da8b80 --- /dev/null +++ b/vms/make_command.com @@ -0,0 +1,21 @@ +$! MAKE_COMMAND.COM +$! Record MM[SK]/Make parameters in configuration report +$! +$! Author: Peter Prymmer <pvhp@lns62.lns.cornell.edu> +$! Version: 1.0 18-Jan-1996 +$! +$! DCL usage (choose one): +$! @MAKE_COMMAND !or +$! @MAKE_COMMAND/OUTPUT=MYCONFIG.OUT +$!------------------------------------------------ +$ $mms = "'"+p1 +$ $makeline = p2+" "+p3+" "+p4+" "+p5+" "+p6+" "+p7+" "+p8 +$quotable: +$ if f$locate("""",$makeline).lt.f$length($makeline) +$ then +$ $makeline = $makeline - """" +$ goto quotable +$ endif +$ $makeline = f$edit($makeline,"COMPRESS,TRIM") +$ write sys$output " make_cmd=''$mms'"+" ''$makeline''" +$!------------------------------------------------ diff --git a/vms/mms2make.pl b/vms/mms2make.pl index 6fdc924081..6b35e75ffb 100644 --- a/vms/mms2make.pl +++ b/vms/mms2make.pl @@ -1,7 +1,7 @@ #!/usr/bin/perl # # mms2make.pl - convert Descrip.MMS file to Makefile -# Version 2.0 29-Sep-1994 +# Version 2.2 29-Jan-1996 # David Denholm <denholm@conmat.phys.soton.ac.uk> # # 1.0 06-Aug-1994 Charles Bailey bailey@genetics.upenn.edu @@ -18,13 +18,15 @@ # an empty @conditions [assume nesting in descrip.mms is correct] # 2.1 26-Feb-1995 Charles Bailey bailey@genetics.upenn.edu # - handle MMS macros generated by MakeMaker +# 2.2 29-Jan-1996 Charles Bailey bailey@genetics.upenn.edu +# - Fix output file name to work under Unix if ($#ARGV > -1 && $ARGV[0] =~ /^[\-\/]trim/i) { $do_trim = 1; shift @ARGV; } $infile = $#ARGV > -1 ? shift(@ARGV) : "Descrip.MMS"; -$outfile = $#ARGV > -1 ? shift(@ARGV) : "Makefile."; +$outfile = $#ARGV > -1 ? shift(@ARGV) : "Makefile"; # set any other args in %macros - set VAXC by default foreach (@ARGV) { $macros{"\U$_"}=1 } diff --git a/vms/myconfig.com b/vms/myconfig.com new file mode 100644 index 0000000000..b9f1bcd476 --- /dev/null +++ b/vms/myconfig.com @@ -0,0 +1,319 @@ +$! #!/bin/sh ---> MYCONFIG.COM + +$! # This script is designed to provide a handy summary of the configuration +$! # information being used to build perl. This is especially useful if you +$! # are requesting help from comp.lang.perl on usenet or via mail. + +$! DCL-ified by Peter Prymmer <pvhp@lns62.lns.cornell.edu> 22-DEC-1995 +$! DCL usage (choose one): +$! @MYCONFIG !or +$! @MYCONFIG/OUTPUT=MYCONFIG.OUT !or +$! @MYCONFIG [node::][which$disk:][[dir.subdir]]CONFIG.SH !or +$! @MYCONFIG/OUTPUT=MYCONFIG.OUT [node::][w$disk:][[dir]]CONFIG.SH +$! version 2: +$! Incorporates Charles Bailey's ideas about bootstrapping system info - +$! myconfig.com is now callable as a "myconfig" target in your maker and +$! may even work if miniperl.exe and config.sh files fail to be made. +$! Thus if: +$! MMK/DESCRIP=[.VMS] !(or MMS or MAKE) +$! does not work then try: +$! MMK/DESCRIP=[.VMS]/OUTPUT=MYPERLBUILD.PROBLEM !(or MMS or MAKE) +$! Then discuss the MYPERLBUILD.PROBLEM file with a local expert. +$! If that still does not work then try: +$! MMK/DESCRIP=[.VMS]/OUT=MYNONFIG.OUT MYCONFIG !(or MMS or MAKE) +$! send output (MYNONFIG.OUT) to an outside expert and ask politely for help. + +$ ECHO = "WRITE SYS$OUTPUT " +$ RATHER_LONG_DEFAULT_DIRECTORY_NAME = F$ENVIRONMENT("DEFAULT") + +$ if (p1.nes."").and.(p2.eqs."") +$ then RATHER_LONG_FILENAME_TO_FIND = p1 !no typo-checking (experts only) +$ else RATHER_LONG_FILENAME_TO_FIND = "CONFIG.SH" +$ endif +$Research: +$ RATHER_LONG_FILENAME_SEARCH = F$Search(RATHER_LONG_FILENAME_TO_FIND) +$ if RATHER_LONG_FILENAME_SEARCH.EQS."" +$ then +$ if f$parse(f$environment("DEFAULT"),,,"DIRECTORY",).NES."[000000]" +$ then +$ set default [-] +$ goto Research +$ else +$ ECHO "Can't find the perl config.sh file produced by Configure" +$ set default 'RATHER_LONG_DEFAULT_DIRECTORY_NAME' +$! exit 3 +$ goto cannot_find_config_sh +$ endif +$ endif + +$ open/read RATHER_LONG_CONFIG_FILE_HANDLE 'RATHER_LONG_FILENAME_SEARCH' +$Loop: +$ read/end_of_file = Done RATHER_LONG_CONFIG_FILE_HANDLE line +$ name = f$extract(0,f$locate("=",line),line) +$ start = f$locate("'",line)+1 +$ stop = f$locate("'",line) +$ value = f$extract(start,stop-start,line) +$ if (f$locate("#",name).eqs.f$length(name)).and. - + (name.nes."").and. - + (name.nes."'") - !bug in genconfig.pl (vms) for osvers='' ? + then $$'name' = "'" + value !$ not necessary but looks more sh-ish +$ goto Loop + +$Done: +$ close RATHER_LONG_CONFIG_FILE_HANDLE +$ goto spit_it_out + +$cannot_find_config_sh: +$! these parameters are assumed to be passed from make/mm[s|k]: +$! p1=$(CC), p2=$(CFLAGS), p3=$(LINKFLAGS), +$! p4=$(LIBS1), p5=$(LIBS2), p6=$(SOCKLIB), +$! p7=$(EXT), p8=$(DBG) +$! so assign to appropriate $var: +$ $cc = "'"+p1+"'" ! p1=$(CC) from make +$ $ccflags = "'"+p2+"'" ! p2=$(CFLAGS) from make +$ $ldflags = "'"+p3+"'" ! p3=$(LINKFLAGS) from make +$ $libs = "'"+p4+" "+p5+" "+p6+"'" ! p4$(LIBS1),p5$(LIBS2),p6$(SOCKLIB)frm make +$ $staticexts = "'"+p7+"'" ! p7=$(EXT) from make + +$! hard-coded stuff (for now): +$ $cppflags = "'"+"'" !(vestigal) +$ $optimize = "'"+"'" !descrip.mms has /Optimize=2 in $(XTRACCFLAGS) + +$! following assigns done via `dcl` calls in genconfig.pl anyway: +$ $osname = "'"+f$edit(f$getsyi("NODE_SWTYPE"),"COLLAPSE") !genconfig.pl has "osname='VMS'" +$ $osvers = f$edit(f$getsyi("VERSION")-"V","COLLAPSE") +$ if f$getsyi("HW_MODEL").GT.1024 +$ then $$archname = "'VMS_AXP'" !string from descrip.mms vmsperl 12-21-95 +$ else $$archname = "'VMS_VAX'" !string from descrip.mms vmsperl 12-21-95 +$ endif +$ $myname = "" +$ if $myname.eqs."" then $$myname = f$trnlnm("ARPANET_HOST_NAME") +$ if $myname.eqs."" then $$myname = f$trnlnm("INTERNET_HOST_NAME") +$ if $myname.eqs."" then $$myname = f$trnlnm("MULTINET_HOST_NAME") +$ if $myname.eqs."" then $$myname = f$trnlnm("UCX$INET_HOST_NAME") +$ if $myname.eqs."" then $$myname = f$trnlnm("TCPWARE_DOMAINNAME") +$ if $myname.eqs."" then $$myname = f$trnlnm("NEWS_ADDRESS") +$ if $myname.eqs."" then $$myname = f$trnlnm("SYS$NODE") +$! Is this same as genconfig.pl ? (spacing/order unknown): +$ $myuname=$osname+" "+$myname+" "+$osvers+" "+F$GetSyi("HW_NAME")+"'" +$ $osname = $osname+"'" +$ $osvers = "'"+$osvers+"'" + +$look_for_patchlevel_h: +$! +$ RATHER_LONG_FILENAME_TO_FIND = "PATCHLEVEL.H" +$Research_patchlevel_h: +$ RATHER_LONG_FILENAME_SEARCH = F$Search(RATHER_LONG_FILENAME_TO_FIND) +$ if RATHER_LONG_FILENAME_SEARCH.EQS."" +$ then +$ if f$parse(f$environment("DEFAULT"),,,"DIRECTORY",).NES."[000000]" +$ then +$ set default [-] +$ goto Research_patchlevel_h +$ else +$ ECHO "Can't find the header file patchlevel.h used to make config.sh" +$ set default 'RATHER_LONG_DEFAULT_DIRECTORY_NAME' +$ goto look_for_genconfig.pl +$ endif +$ endif + +$ open/read RATHER_LONG_CONFIG_FILE_HANDLE 'RATHER_LONG_FILENAME_SEARCH' +$read_patchlevel_h: +$ read/end_of_file = patchlevel_h_Done RATHER_LONG_CONFIG_FILE_HANDLE line +$ if f$locate("PATCHLEVEL",line).ne.f$length(line) +$ then +$ line = f$edit(line,"TRIM,COMPRESS") +$ $PATCHLEVEL = f$element(2," ",line) +$ goto patchlevel_h_Done +$ endif +$ goto read_patchlevel_h + +$patchlevel_h_Done: +$ close RATHER_LONG_CONFIG_FILE_HANDLE +$ if $PATCHLEVEL.eqs."" +$ then +$ echo "warning: PATCHLEVEL was not found in ''RATHER_LONG_FILENAME_TO_FIND':" +$ endif + +$look_for_genconfig_pl: +$! +$ if f$search("VMS.DIR").nes."" then set default [.vms] +$ RATHER_LONG_FILENAME_TO_FIND = "GENCONFIG.PL" +$ genconfig_pl_dir = "" +$Research_genconfig_pl: +$ RATHER_LONG_FILENAME_SEARCH = F$Search(RATHER_LONG_FILENAME_TO_FIND) +$ if RATHER_LONG_FILENAME_SEARCH.EQS."" +$ then +$ if f$parse(f$environment("DEFAULT"),,,"DIRECTORY",).NES."[000000]" +$ then +$ set default [-] +$ goto Research_genconfig_pl +$ else +$ ECHO "Can't find the perl genconfig.pl used to make config.sh" +$ set default 'RATHER_LONG_DEFAULT_DIRECTORY_NAME' +$ goto look_for_config_vms +$ endif +$ else !genconfig.pl has been found +$ genconfig_pl_dir = f$parse(f$environment("DEFAULT"),,,"DIRECTORY",) +$ endif + +$ cnfg_keys = "package/hintfile/ld/dlext/d_stdstdio/" +$ cnfg_keys = cnfg_keys + "usevfork/usemymalloc/so/libpth/" +$ cnfg_keys = cnfg_keys + "dlsrc/cccdlflags/ccdlflags/lddlflags/" + +$ cnfg_vars = "$package/$hint/$ld/$dlext/$d_stdstdio/" +$ cnfg_vars = cnfg_vars + "$usevfork/$usemymalloc/$so/$libpth/" +$ cnfg_vars = cnfg_vars + "$dlsrc/$cccdlflags/$ccdlflags/$lddlflags/" + +$ open/read RATHER_LONG_CONFIG_FILE_HANDLE 'RATHER_LONG_FILENAME_SEARCH' +$read_genconfig_pl: +$ read/end_of_file = Genconfig_pl_Done RATHER_LONG_CONFIG_FILE_HANDLE line +$ if f$locate("=",line).ne.f$length(line) !then may be an assigment +$ then +$ name = f$edit( f$extract(0,f$locate("=",line),line), "COLLAPSE") +$ num = 0 +$key_genconfig_pl: +$ key = f$element(num,"/",cnfg_keys) +$ if (key .nes. "/").and.(key .nes. "") !not end of cnfg_keys +$ then +$ if key.eqs.name !then is key +$ then +$ start = f$locate("=",line)+1 +$ stop = f$length(line) +$ value = f$extract(start,stop-start,line) +$ var = f$element(num,"/",cnfg_vars) +$ 'var' = value +$ cnfg_keys = cnfg_keys - ("''name'/" ) !trim to shorten future matches +$ cnfg_vars = cnfg_vars - ("''var'/" ) !trim to shorten future matches +$ endif +$ num = num + 1 +$ goto key_genconfig_pl +$ endif ! not end of cnfg_keys +$ endif ! then may be an assigment +$ goto read_genconfig_pl + +$Genconfig_pl_Done: +$ close RATHER_LONG_CONFIG_FILE_HANDLE +$ if cnfg_vars.nes."" +$ then +$ echo "warning: the following variables were not found in ''RATHER_LONG_FILENAME_TO_FIND':" +$ echo "''cnfg_vars'" +$ endif + +$ if (p8.nes."").and.($ld.nes."") then $ld = $ld + " DBG='"+p8+"'" + +$look_for_config_vms: +$ RATHER_LONG_FILENAME_TO_FIND = "''genconfig_pl_dir'CONFIG.VMS" + +$Research_config_vms: +$ RATHER_LONG_FILENAME_SEARCH = F$Search(RATHER_LONG_FILENAME_TO_FIND) +$ if RATHER_LONG_FILENAME_SEARCH.EQS."" +$ then +$ if f$parse(f$environment("DEFAULT"),,,"DIRECTORY",).NES."[000000]" +$ then +$ set default [-] +$ goto Research_config_vms +$ else +$ ECHO "Can't find the perl config.vms used to make config.sh" +$ set default 'RATHER_LONG_DEFAULT_DIRECTORY_NAME' +$ stop +$ exit 3 +$ endif +$ endif + +$ cnfg_keys = "MEM_ALIGNBYTES/CASTNEGFLOAT/CASTFLAGS/RANDBITS/STDCHAR/" +$ cnfg_keys = cnfg_keys+"CASTI32/INTSIZE/VOIDFLAGS/DLSYM_NEEDS_UNDERSCORE" + +$ cnfg_vars = "$alignbytes/$d_castneg/$castflags/$randbits/$stdchar/" +$ cnfg_vars = cnfg_vars+"$d_casti32/$intsize/$voidflags/$d_dlsymun/" + +$ open/read RATHER_LONG_CONFIG_FILE_HANDLE 'RATHER_LONG_FILENAME_SEARCH' +$read_config_vms: +$ read/end_of_file = config_vms_Done RATHER_LONG_CONFIG_FILE_HANDLE line +$! look for "#define" or "#undef" +$ if (f$length(line).ne.0).and.- + ((f$locate("#define",line).eq.0).or.(f$locate("#undef",line).eq.0)) +$ then +$ line = f$edit(line,"COMPRESS, TRIM") +$ name = f$element(1," ",line) !macro +$ num = 0 +$key_config_vms: +$ key = f$element(num,"/",cnfg_keys) +$ if (key .nes. "/").and.(key .nes. "") !not end of cnfg_keys +$ then +$ if key.eqs.name !then is key +$ then +$ var = f$element(num,"/",cnfg_vars) +$ cnfg_keys = cnfg_keys - ("''name'/" ) !trim to shorten future matches +$ cnfg_vars = cnfg_vars - ("''var'/" ) !trim to shorten future matches +$ if (f$locate("#undef",line).eq.0) +$ then +$ 'var' = "'undef'" +$ else !is a #define +$strip_comment: +$ start = f$locate("/*",line) +$ if start.ne.f$length(line) !comment started +$ then +$ if f$locate("*/",line).ne.f$length(line) !comment stopped +$ then stop = f$locate("*/",line)+2 +$ else stop = f$locate("*/",line) +$ endif +$ comment = f$extract(start,stop-start,line) +$ line = line - comment +$ goto strip_comment +$ endif +$ line = f$edit(line,"TRIM") +$ start = f$locate(key,line)+f$length(key) +$ stop = f$length(line) +$ value = f$edit(f$extract(start,stop-start,line),"TRIM") +$ if (value.nes."") +$ then +$ 'var' = "'"+value+"'" +$ else +$ 'var' = "'define'" +$ endif +$ endif !#define +$ endif ! is key of interest +$ num = num + 1 +$ goto key_config_vms +$ endif ! not end of cnfg_keys +$ endif ! then may be #define or #undef of interest +$ goto read_config_vms + +$config_vms_Done: +$ close RATHER_LONG_CONFIG_FILE_HANDLE +$ if cnfg_vars.nes."" +$ then +$ echo "warning: the following variables were not found in ''RATHER_LONG_FILENAME_TO_FIND':" +$ echo "''cnfg_vars'" +$ endif + +$spit_it_out: +$! $spitshell = ECHO !<<!GROK!THIS! +$ ECHO " " +$ ECHO "Summary of my ''$package' (patchlevel ''$PATCHLEVEL') configuration:" +$ ECHO " Platform:" +$ ECHO " osname=''$osname', osver=''$osvers', archname=''$archname'" +$ ECHO " uname=''$myuname'" !->d_has_uname? +$ ECHO " hint=''$hint'" !->hintfile? +$ ECHO " static exts=''$staticexts'" ! added for VMS +$ ECHO " Compiler:" +$ ECHO " cc=''$cc', optimize=''$optimize', ld=''$ld'" +$ ECHO " cppflags=''$cppflags'" +$ ECHO " ccflags =''$ccflags'" !->vms_cc_type? +$ ECHO " ldflags =''$ldflags'" +$ ECHO " stdchar=''$stdchar', d_stdstdio=''$d_stdstdio', usevfork=''$usevfork'" +$ ECHO " voidflags=''$voidflags', castflags=''$castflags', d_casti32=''$d_casti32', d_castneg=''$d_castneg'" +$ ECHO " intsize=''$intsize', alignbytes=''$alignbytes', usemymalloc=''$usemymalloc', randbits=''$randbits'" +$ ECHO " Libraries:" +$ ECHO " so=''$so'" +$ ECHO " libpth=''$libpth'" +$ ECHO " libs=''$libs'" +$ ECHO " libc=''$libc'" +$ ECHO " Dynamic Linking:" +$ ECHO " dlsrc=''$dlsrc', dlext=''$dlext', d_dlsymun=''$d_dlsymun'" +$ ECHO " cccdlflags=''$cccdlflags', ccdlflags=''$ccdlflags', lddlflags=''$lddlflags'" +$ ECHO " " +$ !GROK!THIS! +$ SET DEFAULT 'RATHER_LONG_DEFAULT_DIRECTORY_NAME' +$ EXIT diff --git a/vms/perlvms.pod b/vms/perlvms.pod index 87fcb5f7e0..47ee3d3afd 100644 --- a/vms/perlvms.pod +++ b/vms/perlvms.pod @@ -104,17 +104,23 @@ In general, the distributed kit for a Perl extension includes a file named Makefile.PL, which is a Perl program which is used to create a F<Descrip.MMS> file which can be used to build and install the files required by the extension. The kit should be -unpacked into a directory tree E<not> under the main Perl source +unpacked into a directory tree B<not> under the main Perl source directory, and the procedure for building the extension is simply -=over 4 - $ perl Makefile.PL ! Create Descrip.MMS $ mmk ! Build necessary files $ mmk test ! Run test code, if supplied $ mmk install ! Install into public Perl tree -=back +I<N.B.> The procedure by which extensions are built and +tested creates several levels (at least 4) under the +directory in which the extension's source files live. +For this reason, you shouldn't nest the source directory +too deeply in your directory structure, lest you eccedd RMS' +maximum of 8 levels of subdirectory in a filespec. (You +can use rooted logical names to get another 8 levels of +nesting, if you can't place the files near the top of +the physical directory structure.) VMS support for this process in the current release of Perl is sufficient to handle most extensions. However, it does @@ -241,10 +247,24 @@ specifications may use either VMS or Unix syntax. Reading the elements of the %ENV array returns the translation of the logical name specified by the key, according to the normal search order of access modes and -logical name tables. In addition, the keys C<home>, -C<path>,C<term>, and C<user> return the CRTL "environment -variables" of the same names. The key C<default> returns the -current default device and directory specification. +logical name tables. If you append a semicolon to the +logical name, followed by an integer, that integer is +used as the translation index for the logical name, +so that you can look up successive values for search +list logical names. For instance, if you say + + $ Define STORY once,upon,a,time,there,was + $ perl -e "for ($i = 0; $i <= 6; $i++) " - + _$ -e "{ print $ENV{'foo'.$i},' '}" + +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 +and directory specification, regardless of whether +there is a logical name DEFAULT defined.. Setting an element of %ENV defines a supervisor-mode logical name in the process logical name table. C<Undef>ing or @@ -254,7 +274,8 @@ name table. If you use C<undef>, the %ENV element remains empty. If you use C<delete>, another attempt is made at 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. +replace the logical name just deleted. It is not possible +at present to define a search list logical name via %ENV. In all operations on %ENV, the key string is treated as if it were entirely uppercase, regardless of the case actually @@ -268,15 +289,15 @@ Perl functions were implemented in the VMS port of Perl file tests*, abs, alarm, atan, binmode*, bless, caller, chdir, chmod, chown, chomp, chop, chr, - close, closedir, cos, defined, delete, die, do, - each, endpwent, eof, eval, exec*, exists, exit, - exp, fileno, fork*, getc, getpwent*, getpwnam*, - getpwuid*, glob, gmtime*, goto, grep, hex, import, - index, int, join, keys, kill*, last, lc, lcfirst, - length, local, localtime, log, m//, map, mkdir, my, - next, no, oct, open, opendir, ord, pack, pipe, pop, - pos, print, printf, push, q//, qq//, qw//, qx//, - quotemeta, rand, read, readdir, redo, ref, rename, + close, closedir, cos, crypt*, defined, delete, + die, do, each, endpwent, eof, eval, exec*, exists, + exit, exp, fileno, fork*, getc, getlogin, getpwent*, + getpwnam*, getpwuid*, glob, gmtime*, goto, grep, hex, + import, index, int, join, keys, kill*, last, lc, + lcfirst, length, local, localtime, log, m//, map, + mkdir, my, next, no, oct, open, opendir, ord, pack, + pipe, pop, pos, print, printf, push, q//, qq//, qw//, + qx//, quotemeta, rand, read, readdir, redo, ref, rename, require, reset, return, reverse, rewinddir, rindex, rmdir, s///, scalar, seek, seekdir, select(internal), select (system call)*, setpwent, shift, sin, sleep, @@ -290,14 +311,12 @@ The following functions were not implemented in the VMS port, and calling them produces a fatal error (usually) or undefined behavior (rarely, we hope): - chroot, crypt, dbmclose, dbmopen, dump, fcntl, - flock, getlogin, getpgrp, getppid, getpriority, - getgrent, kill, getgrgid, getgrnam, setgrent, - endgrent, ioctl, link, lstst, msgctl, msgget, - msgsend, msgrcv, readlink, select(system call), - semctl, semget, semop, setpgrp, setpriority, shmctl, - shmget, shmread, shmwrite, socketpair, symlink, - syscall, truncate + chroot, dbmclose, dbmopen, dump, fcntl, flock, + getpgrp, getppid, getpriority, getgrent, getgrgid, + getgrnam, setgrent, endgrent, ioctl, link, lstat, + msgctl, msgget, msgsend, msgrcv, readlink, semctl, + semget, semop, setpgrp, setpriority, shmctl, shmget, + shmread, shmwrite, socketpair, symlink, syscall, truncate The following functions may or may not be implemented, depending on what type of socket support you've built into @@ -309,8 +328,8 @@ your copy of Perl: getnetent, getprotoent, getservent, sethostent, setnetent, setprotoent, setservent, endhostent, endnetent, endprotoent, endservent, getsockname, - getsockopt, listen, recv, send, setsockopt, - shutdown, socket + getsockopt, listen, recv, select(system call)*, + send, setsockopt, shutdown, socket =item File tests @@ -336,6 +355,33 @@ The C<binmode> operator has no effect under VMS. It will return TRUE whenever called, but will not affect I/O operations on the filehandle given as its argument. +=item crypt PLAINTEXT, USER + +The C<crypt> operator uses the C<sys$hash_password> system +service to generate the hashed representation of PLAINTEXT. +If USER is a valid username, the algorithm and salt values +are taken from that user's UAF record. If it is not, then +the preferred algorithm and a salt of 0 are used. The +quadword encrypted value is returned as an 8-character string. + +The value returned by C<crypt> may be compared against +the encrypted password from the UAF returned by the C<getpw*> +functions, in order to authenticate users. If you're +going to do this, remember that the encrypted password in +the UAF was generated using uppercase username and +password strings; you'll have to upcase the arguments to +C<crypt> to insure that you'll get the proper value: + + sub validate_passwd { + my($user,$passwd) = @_; + my($pwdhash); + if ( !($pwdhash = (getpwnam($user))[1]) || + $pwdhash ne crypt("\U$passwd","\U$name") ) { + intruder_alert($name); + } + return 1; + } + =item exec LIST The C<exec> operator behaves in one of two different ways. @@ -379,7 +425,9 @@ subprocess is not recommended under VMS; wherever possible, use the C<system> operator or piped filehandles instead. =item getpwent + =item getpwnam + =item getpwuid These operators obtain the information described in L<perlfunc>, diff --git a/vms/perly_c.vms b/vms/perly_c.vms index 4cc29e3ec8..86449982b7 100644 --- a/vms/perly_c.vms +++ b/vms/perly_c.vms @@ -1,3 +1,4 @@ +/* Postprocessed by vms_yfix.pl 1.1 to add VMS declarations of globals */ #ifndef lint static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91"; #endif @@ -19,17 +20,17 @@ dEXT short yylhs[] = { -1, 9, 9, 9, 9, 30, 30, 8, 8, 8, 8, 8, 8, 8, 8, 10, 10, 25, 25, 29, 29, 1, 1, 1, 1, 2, 2, 32, 32, 28, 28, - 4, 33, 33, 34, 13, 13, 13, 13, 12, 12, - 12, 26, 26, 26, 26, 26, 26, 26, 26, 27, - 27, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 4, 33, 33, 34, 13, 13, 13, 12, 12, 12, + 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 22, 22, 23, 23, 23, 20, 15, - 16, 17, 18, 19, 24, 24, 24, 24, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 22, 22, 23, 23, 23, 20, + 15, 16, 17, 18, 19, 24, 24, 24, 24, }; dEXT short yylen[] = { 2, 0, 2, 4, 0, 0, 2, 2, 2, 1, 2, @@ -37,983 +38,1068 @@ dEXT short yylen[] = { 2, 6, 6, 4, 4, 0, 2, 7, 7, 5, 5, 8, 7, 10, 3, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 4, 3, 5, 5, 0, 1, - 0, 3, 2, 4, 3, 3, 2, 1, 2, 3, - 1, 3, 5, 6, 3, 5, 2, 4, 4, 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, 1, 4, 5, 4, 1, 1, 1, + 0, 3, 2, 5, 3, 3, 1, 2, 3, 1, + 3, 5, 6, 3, 5, 2, 4, 4, 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, 1, 2, - 1, 2, 2, 2, 1, 3, 1, 3, 4, 4, - 6, 1, 1, 0, 1, 0, 1, 2, 2, 2, - 2, 2, 2, 2, 1, 1, 1, 1, + 2, 1, 2, 2, 2, 1, 3, 1, 3, 4, + 4, 6, 1, 1, 0, 1, 0, 1, 2, 2, + 2, 2, 2, 2, 2, 1, 1, 1, 1, }; dEXT short yydefred[] = { 1, - 0, 5, 0, 40, 51, 51, 0, 0, 6, 41, + 0, 5, 0, 40, 51, 51, 0, 51, 6, 41, 7, 9, 0, 42, 43, 44, 0, 0, 0, 53, - 0, 12, 4, 142, 0, 0, 118, 0, 51, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, - 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, - 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, + 0, 12, 4, 143, 0, 0, 118, 0, 138, 0, + 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, - 0, 108, 110, 104, 0, 0, 143, 0, 46, 0, - 52, 0, 0, 5, 155, 158, 157, 156, 0, 0, + 0, 108, 110, 0, 0, 0, 144, 0, 46, 0, + 52, 0, 5, 156, 159, 158, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 153, 0, 124, 0, - 0, 0, 0, 0, 0, 57, 0, 0, 67, 0, - 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 99, 0, 149, 150, 151, 152, 154, + 0, 0, 0, 0, 0, 0, 0, 154, 0, 124, + 0, 0, 0, 0, 0, 0, 150, 0, 0, 0, + 0, 66, 0, 133, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 98, 0, 151, 152, 153, 155, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 91, 92, 0, 0, 0, 0, - 0, 0, 0, 11, 45, 50, 0, 54, 0, 65, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 36, 0, 136, 138, 0, 0, - 0, 0, 0, 0, 101, 0, 122, 0, 0, 0, - 0, 98, 26, 0, 0, 0, 0, 0, 0, 55, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 70, 0, 71, 0, - 0, 0, 0, 0, 0, 120, 0, 48, 47, 3, - 0, 140, 0, 102, 0, 29, 0, 30, 0, 0, - 0, 23, 0, 24, 0, 0, 0, 139, 148, 68, - 0, 125, 0, 127, 0, 100, 69, 0, 0, 0, - 0, 0, 0, 0, 107, 0, 105, 0, 116, 121, - 66, 0, 0, 0, 0, 19, 0, 0, 0, 0, - 0, 63, 126, 128, 115, 0, 113, 0, 0, 106, - 0, 111, 117, 141, 27, 28, 21, 0, 22, 0, - 32, 0, 114, 112, 64, 0, 0, 31, 0, 0, - 20, 33, + 0, 0, 0, 0, 90, 91, 0, 0, 0, 0, + 0, 0, 0, 0, 11, 45, 50, 0, 0, 0, + 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 36, 0, 137, 139, + 0, 0, 0, 0, 0, 0, 100, 0, 122, 0, + 0, 0, 97, 26, 0, 0, 0, 0, 0, 0, + 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 69, 0, 70, + 0, 0, 0, 0, 0, 0, 0, 120, 0, 48, + 47, 54, 3, 0, 141, 0, 68, 101, 0, 29, + 0, 30, 0, 0, 0, 23, 0, 24, 0, 0, + 0, 140, 149, 67, 0, 125, 0, 127, 0, 99, + 0, 0, 0, 0, 0, 0, 0, 107, 0, 105, + 0, 116, 0, 121, 65, 0, 0, 0, 0, 19, + 0, 0, 0, 0, 0, 62, 126, 128, 115, 0, + 113, 0, 0, 106, 0, 111, 117, 103, 142, 27, + 28, 21, 0, 22, 0, 32, 0, 114, 112, 63, + 0, 0, 31, 0, 0, 20, 33, }; dEXT short yydgoto[] = { 1, - 9, 10, 84, 17, 87, 3, 11, 12, 66, 193, - 262, 67, 200, 69, 70, 71, 72, 73, 74, 75, - 195, 83, 201, 89, 185, 77, 240, 177, 13, 142, + 9, 10, 83, 17, 86, 3, 11, 12, 66, 195, + 266, 67, 202, 69, 70, 71, 72, 73, 74, 75, + 197, 122, 203, 88, 187, 77, 241, 178, 13, 142, 2, 14, 15, 16, }; dEXT short yysindex[] = { 0, - 0, 0, -105, 0, 0, 0, -47, -232, 0, 0, - 0, 0, 570, 0, 0, 0, -112, -217, 10, 0, - 2121, 0, 0, 0, -35, -35, 0, 46, 0, -3, - 1, 8, 14, 55, 2121, 56, 60, 63, 0, -35, - 1806, 2121, 941, -178, 1846, 997, 0, 1911, 2121, 2121, - 2121, 2121, 2121, 2121, 1272, 0, 2121, 2121, 1312, -35, - -35, -35, -35, -35, -183, 0, 71, 227, 3368, -55, - -49, 0, 0, 0, 89, 48, 0, 20, 0, -118, - 0, 71, 85, 0, 0, 0, 0, 0, 2121, 106, - 2121, -118, 1846, 20, 1846, 20, 1846, 20, 1846, 20, - 1371, 115, 3368, 116, 1411, 901, 0, 125, 0, 864, - -1, 864, 41, -53, 2121, 0, 0, -55, 0, 2121, - 20, 0, 864, 864, 510, 510, 510, -89, -89, 80, - -38, 510, 510, 0, -84, 0, 0, 0, 0, 0, - 20, 0, 2121, 1846, 1846, 1846, 1846, 1846, 1846, 1846, - 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, - 2121, 2121, 2121, 2121, 0, 0, -21, 1846, 1846, 1846, - 1846, 1846, 1451, 0, 0, 0, -29, 0, -115, 0, - 1846, 614, 20, -187, 131, -183, -34, -183, -27, -140, - 4, -140, 114, 208, 0, 1846, 0, 0, 6, -6, - 135, 1846, 1726, 1766, 0, 57, 0, 71, 2121, 1846, - 94, 0, 0, 3368, -187, -187, -187, -187, -113, 0, - 67, 2023, 864, 1613, 445, 685, 3368, 3106, 363, 771, - 1082, 1235, 1465, 510, 510, 1846, 0, 1846, 0, 147, - -77, 88, -72, 95, -67, 0, 18, 0, 0, 0, - 148, 0, 2121, 0, 20, 0, 20, 0, 20, 20, - 150, 0, 20, 0, 1846, 20, 26, 0, 0, 0, - 32, 0, 69, 0, 82, 0, 0, -62, 1846, 66, - 2121, 97, -41, 1846, 0, 68, 0, 73, 0, 0, - 0, 2844, -183, -183, -140, 0, 1846, -140, 129, -183, - 20, 0, 0, 0, 0, 99, 0, 3756, 78, 0, - 153, 0, 0, 0, 0, 0, 0, 84, 0, 1371, - 0, -183, 0, 0, 0, 20, 155, 0, -140, 20, - 0, 0, + 0, 0, -82, 0, 0, 0, -52, 0, 0, 0, + 0, 0, 853, 0, 0, 0, -80, -256, -19, 0, + -245, 0, 0, 0, 19, 19, 0, 20, 0, 2177, + 0, 0, -2, 1, 28, 41, 133, 2177, 27, 33, + 52, 19, 1028, 2177, 1303, -210, 19, 2177, 965, 1359, + 2177, 2177, 2177, 2177, 2177, 1415, 0, 2177, 2177, 1478, + 19, 19, 19, 19, -225, 0, 71, 209, 1535, -49, + -30, 0, 0, 8, 101, 42, 0, 30, 0, -112, + 0, 2177, 0, 0, 0, 0, 0, 2177, 127, 2177, + 1535, 30, -112, 2177, 30, 2177, 30, 2177, 30, 2177, + 30, 1712, 128, 1535, 139, 1768, 965, 0, 141, 0, + 1485, -14, 1485, 65, -42, 2177, 0, 71, 0, 71, + -49, 0, 2177, 0, 1485, 334, 334, 334, -47, -47, + 92, -26, 334, 334, 0, 63, 0, 0, 0, 0, + 30, 0, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, + 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, + 2177, 2177, 2177, 2177, 0, 0, -27, 2177, 2177, 2177, + 2177, 2177, 2177, 1824, 0, 0, 0, -48, 137, -92, + 0, 2177, 221, 2177, 30, -191, 151, -225, -22, -225, + -12, -147, 7, -147, 138, 5, 0, 2177, 0, 0, + 9, -39, 160, 2177, 1887, 2121, 0, 77, 0, 71, + 2177, 113, 0, 0, 1535, -191, -191, -191, -191, -86, + 0, -20, 395, 1485, 1566, 461, -88, 1535, 4122, 1064, + 679, 364, 1120, 728, 334, 334, 2177, 0, 2177, 0, + 174, 89, 51, 98, 55, 118, 57, 0, 11, 0, + 0, 0, 0, 175, 0, 2177, 0, 0, 30, 0, + 30, 0, 30, 30, 178, 0, 30, 0, 2177, 30, + 15, 0, 0, 0, 22, 0, 25, 0, 29, 0, + 152, 2177, 94, 2177, 59, 177, 2177, 0, 96, 0, + 97, 0, 102, 0, 0, 1190, -225, -225, -147, 0, + 2177, -147, 176, -225, 30, 0, 0, 0, 0, 205, + 0, 3039, 111, 0, 206, 0, 0, 0, 0, 0, + 0, 0, 37, 0, 1712, 0, -225, 0, 0, 0, + 30, 208, 0, -147, 30, 0, 0, }; dEXT short yyrindex[] = { 0, - 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 297, 0, 0, 0, 0, 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, 2299, 2164, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2658, 0, 2703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 13, 0, 58, 3, 170, 2748, - 2796, 0, 0, 0, 2209, 0, 0, 0, 0, -26, - 0, 2380, 0, 0, 0, 0, 0, 0, 2426, 0, - 0, 83, 166, 0, 0, 0, 0, 0, 0, 0, - 154, 0, 1341, 0, 0, 171, 0, 2254, 0, 3507, - 2748, 3552, 0, 0, 2426, 0, 431, 502, 0, 0, - 0, 0, 3585, 3630, 2980, 3028, 3073, 2890, 2935, 2471, - 0, 3152, 3197, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2516, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2253, 505, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2847, 2935, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 107, 0, -35, 10, 53, 3109, + 3156, 0, 0, 2298, 1976, 0, 0, 0, 0, -23, + 0, 230, 0, 0, 0, 0, 0, 2385, 0, 0, + 1004, 0, 168, 253, 0, 0, 0, 0, 0, 0, + 0, 254, 0, 2242, 0, 0, 274, 0, 2032, 0, + 3844, 3109, 3902, 0, 0, 2385, 0, 2440, 452, 2554, + 572, 0, 0, 0, 3981, 3274, 3312, 3421, 3200, 3237, + 2661, 0, 3560, 3596, 0, 0, 0, 0, 0, 0, + 0, 0, 2714, 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, 845, 0, - 171, 0, 0, 19, 0, 13, 0, 13, 0, 76, - 0, 76, 0, 158, 0, 0, 0, 0, 0, 177, - 0, 0, 0, 0, 0, 0, 0, 2564, 2426, 0, - 2612, 0, 0, 2080, 23, 30, 39, 52, 827, 0, - 0, -36, 3678, 1208, 3335, 3414, 2574, 0, 1049, 3739, - 3646, 3694, 3462, 3245, 3290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 909, + 0, 274, 0, 2385, 0, 39, 0, 107, 0, 107, + 0, 170, 0, 170, 0, 262, 0, 0, 0, 0, + 0, 288, 0, 0, 0, 0, 0, 0, 0, 2805, + 0, 2757, 0, 0, 2650, 49, 58, 61, 64, 365, + 0, 0, -31, 4018, 4028, 3719, 630, 2995, 0, 1623, + 4106, 4096, 4064, 3756, 3640, 3683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, - 0, 0, 13, 13, 76, 0, 0, 76, 0, 13, - 0, 0, 0, 0, 0, 0, 0, 776, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, - 0, 13, 0, 0, 0, 0, 0, 0, 76, 0, - 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 107, 107, 170, 0, + 0, 170, 0, 107, 0, 0, 0, 0, 0, 0, + 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 300, 0, 107, 0, 0, 0, + 0, 0, 0, 170, 0, 0, 0, }; dEXT short yygindex[] = { 0, - 0, 0, 0, 37, -13, 157, 0, 0, 0, -82, - -168, 470, 360, 3971, 1933, 0, 0, 0, 0, 0, - 230, -14, -152, 1366, -20, 0, 0, 156, 0, -125, + 0, 0, 0, 506, -13, 255, 0, 0, 0, 18, + -180, 839, -11, 4398, 2162, 0, 0, 0, 0, 0, + 342, -57, -174, 1032, 90, 0, 0, 267, 0, -172, 0, 0, 0, 0, }; -#define YYTABLESIZE 4252 +#define YYTABLESIZE 4682 dEXT short yytable[] = { 65, - 61, 168, 211, 79, 81, 206, 257, 81, 212, 250, - 23, 20, 25, 259, 61, 285, 94, 96, 98, 100, - 287, 81, 81, 264, 21, 289, 81, 109, 251, 248, - 305, 119, 49, 150, 122, 170, 93, 269, 204, 80, - 95, 172, 18, 13, 263, 25, 268, 97, 25, 25, - 25, 310, 25, 99, 25, 25, 81, 25, 290, 38, - 256, 13, 258, 16, 175, 92, 301, 169, 81, 238, - 17, 25, 302, 171, 180, 18, 25, 38, 115, 14, - 186, 16, 188, 121, 190, 91, 192, 23, 17, 170, - 61, 141, 15, 23, 101, 104, 49, 14, 58, 105, - 207, 236, 106, 25, 148, 149, 174, 209, 18, 303, - 15, 18, 18, 18, 143, 18, 58, 18, 18, 23, - 18, 169, 304, 23, 326, 280, 317, 213, 173, 319, - 23, 311, 260, 261, 18, 25, 23, 25, 25, 18, - 2, 176, 23, 178, 78, 181, 286, 4, 5, 6, - 58, 7, 8, 288, 196, 309, 197, 4, 5, 6, - 331, 7, 8, 249, 203, 205, 18, 315, 316, 254, - 210, 255, 265, 39, 321, 270, 39, 39, 39, 149, - 39, 276, 39, 39, 279, 39, 284, 320, 291, 297, - 307, 323, 312, 325, 277, 330, 328, 313, 18, 39, - 18, 18, 324, 144, 39, 49, 37, 148, 149, 19, - 61, 146, 35, 61, 148, 149, 13, 147, 37, 148, - 149, 85, 35, 167, 148, 149, 86, 61, 61, 148, - 149, 39, 81, 81, 81, 81, 237, 327, 148, 149, - 179, 293, 76, 294, 299, 295, 296, 183, 266, 298, - 148, 149, 300, 148, 149, 81, 81, 148, 149, 0, - 81, 0, 61, 39, 148, 149, 39, 0, 25, 25, - 25, 25, 25, 25, 0, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 148, 149, 322, 25, 25, - 0, 25, 25, 25, 25, 148, 149, 148, 149, 25, - 25, 25, 25, 25, 0, 0, 25, 25, 25, 148, - 149, 0, 329, 0, 25, 25, 332, 148, 149, 25, - 0, 25, 25, 148, 149, 0, 58, 58, 58, 58, - 0, 18, 18, 18, 18, 18, 18, 0, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 0, 58, - 58, 18, 18, 0, 18, 18, 18, 18, 148, 149, - 148, 149, 18, 18, 18, 18, 18, 0, 0, 18, - 18, 18, 68, 148, 149, 148, 149, 18, 18, 148, - 149, 0, 18, 0, 18, 18, 148, 149, 148, 149, - 148, 149, 0, 0, 0, 0, 39, 39, 39, 39, - 39, 39, 114, 0, 116, 0, 39, 0, 0, 39, - 39, 39, 39, 0, 131, 0, 39, 39, 135, 39, - 39, 39, 39, 0, 0, 0, 0, 39, 39, 39, - 39, 39, 0, 0, 39, 39, 39, 0, 61, 61, - 61, 61, 39, 39, 0, 0, 0, 39, 0, 39, - 39, 0, 184, 168, 187, 0, 189, 0, 191, 0, - 194, 61, 61, 155, 199, 0, 155, 155, 155, 0, - 155, 142, 155, 155, 142, 155, 144, 145, 146, 147, - 0, 0, 0, 0, 0, 150, 0, 0, 142, 142, - 82, 0, 0, 142, 155, 144, 145, 146, 147, 148, - 149, 0, 0, 215, 216, 217, 218, 219, 220, 221, - 0, 0, 0, 0, 0, 82, 0, 0, 148, 149, - 0, 142, 0, 142, 0, 0, 0, 241, 242, 243, - 244, 245, 247, 0, 156, 168, 0, 156, 156, 156, - 0, 156, 103, 156, 156, 103, 156, 0, 0, 0, - 0, 0, 0, 142, 0, 267, 155, 0, 82, 103, - 103, 271, 273, 275, 103, 156, 0, 150, 0, 278, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 0, 0, 0, 0, 208, - 0, 0, 0, 0, 103, 282, 0, 283, 0, 0, - 168, 0, 50, 0, 0, 61, 63, 60, 0, 55, - 0, 64, 58, 0, 57, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 184, 0, 0, 156, 56, 0, - 0, 0, 150, 62, 0, 0, 0, 0, 306, 0, - 0, 0, 0, 0, 0, 152, 153, 154, 155, 0, - 0, 0, 0, 0, 252, 0, 318, 253, 0, 0, - 59, 159, 160, 161, 0, 0, 162, 163, 0, 0, - 164, 0, 0, 165, 166, 167, 157, 0, 82, 68, - 0, 0, 0, 0, 0, 0, 0, 155, 155, 155, - 155, 155, 23, 0, 0, 51, 155, 0, 0, 142, - 142, 142, 142, 0, 168, 0, 0, 155, 142, 155, - 155, 155, 155, 142, 142, 142, 142, 155, 155, 155, - 155, 155, 142, 142, 155, 155, 155, 142, 142, 142, - 142, 142, 155, 155, 142, 142, 150, 155, 142, 155, - 155, 142, 142, 142, 0, 0, 0, 0, 0, 163, + 80, 68, 168, 79, 273, 57, 20, 254, 61, 80, + 250, 82, 80, 268, 212, 260, 208, 262, 261, 95, + 97, 99, 101, 57, 179, 206, 80, 80, 263, 110, + 181, 80, 253, 115, 150, 49, 124, 94, 283, 81, + 96, 170, 23, 168, 132, 270, 116, 267, 136, 272, + 13, 294, 141, 83, 61, 305, 83, 57, 209, 90, + 172, 80, 306, 239, 176, 307, 105, 98, 13, 308, + 83, 83, 106, 169, 23, 150, 170, 331, 184, 38, + 100, 188, 186, 190, 189, 192, 191, 194, 193, 16, + 196, 107, 171, 60, 201, 237, 60, 38, 17, 49, + 175, 14, 148, 149, 15, 83, 25, 16, 169, 289, + 60, 60, 315, 291, 143, 293, 17, 313, 322, 14, + 23, 324, 15, 23, 320, 321, 257, 214, 264, 265, + 173, 326, 216, 217, 218, 219, 220, 221, 222, 25, + 174, 23, 25, 25, 25, 60, 25, 177, 25, 25, + 23, 25, 23, 336, 333, 213, 242, 243, 244, 245, + 246, 247, 249, 23, 251, 25, 182, 198, 61, 18, + 25, 258, 102, 4, 5, 6, 78, 7, 8, 199, + 205, 288, 211, 4, 5, 6, 271, 7, 8, 207, + 290, 259, 275, 277, 279, 252, 269, 25, 154, 281, + 274, 280, 18, 282, 19, 18, 18, 18, 149, 18, + 292, 18, 18, 287, 18, 295, 163, 301, 311, 164, + 316, 317, 165, 166, 167, 285, 318, 286, 18, 25, + 238, 25, 25, 18, 325, 329, 57, 57, 57, 57, + 80, 80, 80, 80, 309, 297, 330, 298, 335, 299, + 300, 148, 149, 302, 148, 149, 304, 186, 57, 57, + 18, 255, 80, 80, 256, 167, 80, 148, 149, 314, + 310, 148, 149, 148, 149, 84, 144, 145, 146, 147, + 85, 148, 149, 157, 83, 83, 83, 83, 145, 323, + 49, 327, 18, 37, 18, 18, 2, 328, 148, 149, + 148, 149, 148, 149, 148, 149, 83, 83, 148, 149, + 83, 168, 35, 68, 147, 148, 149, 334, 148, 149, + 13, 337, 148, 149, 60, 60, 60, 60, 148, 39, + 148, 149, 39, 39, 39, 37, 39, 180, 39, 39, + 35, 39, 332, 150, 148, 149, 60, 60, 148, 149, + 148, 149, 148, 149, 76, 39, 148, 149, 303, 185, + 39, 0, 25, 25, 25, 25, 25, 25, 0, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 148, 149, 0, 25, 25, 39, 25, 25, + 25, 148, 149, 0, 0, 25, 25, 25, 25, 25, + 0, 0, 25, 25, 0, 56, 0, 0, 56, 25, + 0, 148, 149, 25, 0, 25, 25, 0, 0, 39, + 0, 0, 39, 56, 168, 18, 18, 18, 18, 18, + 18, 0, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 148, 149, 0, 18, 18, + 0, 18, 18, 18, 168, 0, 150, 56, 18, 18, + 18, 18, 18, 0, 0, 18, 18, 0, 0, 0, + 148, 149, 18, 0, 0, 0, 18, 0, 18, 18, + 144, 145, 146, 147, 156, 168, 150, 156, 156, 156, + 0, 156, 143, 156, 156, 143, 156, 0, 148, 149, + 0, 151, 148, 149, 0, 152, 153, 154, 155, 143, + 143, 18, 0, 21, 143, 156, 0, 150, 156, 158, + 159, 160, 161, 0, 162, 163, 0, 0, 164, 0, + 0, 165, 166, 167, 0, 0, 92, 93, 0, 0, + 0, 0, 143, 0, 143, 136, 0, 0, 136, 0, + 0, 168, 39, 39, 39, 39, 39, 39, 0, 39, + 39, 39, 136, 136, 0, 39, 0, 136, 39, 39, + 39, 39, 0, 0, 143, 39, 39, 156, 39, 39, + 39, 0, 0, 150, 0, 39, 39, 39, 39, 39, + 0, 0, 39, 39, 0, 136, 0, 136, 0, 39, + 0, 0, 0, 39, 157, 39, 39, 157, 157, 157, + 0, 157, 102, 157, 157, 102, 157, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 136, 0, 102, + 102, 0, 0, 0, 102, 157, 56, 56, 56, 56, + 0, 164, 0, 0, 165, 166, 167, 0, 152, 153, + 154, 155, 0, 0, 0, 0, 0, 0, 56, 0, + 0, 0, 0, 0, 102, 161, 0, 162, 163, 0, + 74, 164, 0, 74, 165, 166, 167, 0, 0, 152, + 153, 154, 155, 0, 0, 0, 0, 74, 74, 0, + 0, 0, 74, 158, 159, 160, 161, 157, 162, 163, 0, 0, 164, 0, 0, 165, 166, 167, 156, 156, - 156, 156, 156, 0, 0, 0, 0, 156, 0, 0, - 103, 103, 103, 103, 0, 168, 0, 0, 156, 103, - 156, 156, 156, 156, 103, 103, 103, 103, 156, 156, - 156, 156, 156, 103, 103, 156, 156, 156, 103, 103, - 103, 103, 103, 156, 156, 103, 103, 150, 156, 103, - 156, 156, 103, 103, 103, 0, 84, 164, 0, 84, - 165, 166, 167, 0, 0, 22, 24, 25, 26, 27, - 28, 0, 0, 84, 84, 29, 0, 0, 30, 31, - 32, 33, 0, 0, 0, 34, 35, 0, 36, 37, - 38, 39, 0, 0, 0, 0, 40, 41, 42, 43, - 44, 168, 0, 45, 46, 47, 0, 56, 84, 0, - 56, 48, 49, 0, 0, 0, 52, 39, 53, 54, - 39, 39, 39, 0, 39, 56, 39, 39, 0, 39, - 0, 151, 0, 150, 0, 0, 152, 153, 154, 155, - 0, 0, 0, 39, 0, 0, 0, 0, 39, 0, - 156, 158, 159, 160, 161, 0, 0, 162, 163, 56, + 156, 156, 156, 0, 156, 156, 156, 0, 0, 0, + 156, 0, 74, 143, 143, 143, 143, 0, 0, 0, + 0, 156, 143, 156, 156, 156, 143, 143, 143, 143, + 156, 156, 156, 156, 156, 143, 143, 156, 156, 143, + 143, 143, 143, 143, 156, 143, 143, 0, 156, 143, + 156, 156, 143, 143, 143, 163, 0, 0, 164, 168, + 0, 165, 166, 167, 0, 0, 136, 136, 136, 136, + 0, 0, 0, 0, 0, 136, 0, 0, 0, 136, + 136, 136, 136, 0, 0, 0, 0, 0, 136, 136, + 0, 150, 136, 136, 136, 136, 136, 0, 136, 136, + 0, 0, 136, 0, 0, 136, 136, 136, 168, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 157, 157, + 157, 157, 157, 0, 157, 157, 157, 0, 0, 0, + 157, 0, 0, 102, 102, 102, 102, 0, 0, 0, + 150, 157, 102, 157, 157, 157, 102, 102, 102, 102, + 157, 157, 157, 157, 157, 102, 102, 157, 157, 102, + 102, 102, 102, 102, 157, 102, 102, 0, 157, 102, + 157, 157, 102, 102, 102, 51, 118, 120, 61, 63, + 47, 0, 56, 0, 64, 59, 0, 58, 0, 0, + 0, 74, 74, 74, 74, 0, 0, 0, 0, 0, + 74, 57, 0, 0, 74, 74, 62, 74, 0, 0, + 120, 0, 0, 74, 74, 0, 120, 74, 74, 74, + 74, 74, 0, 74, 0, 0, 0, 0, 0, 0, + 0, 39, 0, 60, 39, 39, 39, 0, 39, 0, + 39, 39, 0, 39, 120, 0, 0, 0, 0, 0, + 0, 210, 0, 152, 153, 154, 155, 39, 0, 0, + 0, 0, 39, 0, 0, 23, 0, 0, 52, 160, + 161, 0, 162, 163, 0, 0, 164, 0, 0, 165, + 166, 167, 0, 0, 0, 0, 0, 51, 0, 39, + 61, 63, 47, 0, 56, 0, 64, 59, 0, 58, + 0, 0, 0, 0, 154, 155, 0, 0, 0, 0, + 0, 0, 120, 0, 0, 0, 0, 0, 62, 0, + 0, 39, 163, 0, 39, 164, 0, 0, 165, 166, + 167, 0, 0, 0, 135, 0, 0, 135, 0, 0, + 0, 0, 0, 0, 0, 60, 0, 89, 0, 0, + 51, 135, 135, 61, 63, 47, 0, 56, 0, 64, + 59, 0, 58, 108, 0, 0, 0, 0, 117, 0, + 123, 0, 0, 0, 0, 0, 0, 23, 0, 0, + 52, 62, 137, 138, 139, 140, 135, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 22, 24, + 25, 26, 27, 28, 0, 29, 30, 31, 60, 0, + 0, 32, 0, 0, 33, 34, 35, 36, 0, 0, + 0, 37, 38, 0, 39, 40, 41, 0, 204, 0, + 0, 42, 43, 44, 45, 46, 0, 0, 48, 49, + 23, 0, 0, 52, 168, 50, 0, 0, 0, 53, + 0, 54, 55, 0, 39, 39, 39, 39, 39, 39, + 0, 39, 39, 39, 0, 0, 0, 39, 0, 0, + 39, 39, 39, 39, 0, 0, 150, 39, 39, 0, + 39, 39, 39, 0, 0, 0, 0, 39, 39, 39, + 39, 39, 0, 0, 39, 39, 0, 0, 0, 0, + 168, 39, 0, 0, 0, 39, 0, 39, 39, 0, + 0, 119, 25, 26, 27, 28, 85, 29, 30, 31, + 319, 0, 0, 32, 0, 0, 0, 0, 0, 0, + 0, 0, 150, 0, 38, 0, 39, 40, 41, 0, + 0, 0, 157, 42, 43, 44, 45, 46, 0, 0, + 48, 49, 0, 0, 0, 0, 0, 50, 0, 0, + 0, 53, 0, 54, 55, 135, 135, 135, 135, 0, + 168, 0, 0, 0, 109, 25, 26, 27, 28, 0, + 29, 30, 31, 0, 0, 0, 32, 135, 135, 0, + 0, 0, 0, 0, 0, 0, 0, 38, 0, 39, + 40, 41, 150, 0, 0, 0, 42, 43, 44, 45, + 46, 0, 0, 48, 49, 0, 0, 0, 0, 0, + 50, 0, 0, 0, 53, 51, 54, 55, 61, 63, + 47, 0, 56, 0, 64, 59, 0, 58, 152, 153, + 154, 155, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 114, 0, 159, 160, 161, 62, 162, 163, 0, 0, 164, 0, 0, 165, 166, 167, 0, 0, 0, - 0, 0, 0, 50, 0, 39, 61, 63, 60, 0, - 55, 0, 64, 58, 0, 57, 0, 0, 0, 0, - 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 62, 0, 0, 39, 0, 154, - 39, 0, 0, 50, 0, 0, 61, 63, 60, 0, - 55, 0, 64, 58, 0, 57, 150, 0, 0, 163, - 0, 59, 164, 0, 0, 165, 166, 167, 0, 113, - 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 23, 0, 0, 51, 0, 0, 50, - 0, 59, 61, 63, 60, 0, 55, 0, 64, 58, - 0, 57, 0, 0, 84, 84, 84, 84, 0, 0, - 0, 0, 0, 152, 153, 154, 155, 0, 0, 0, - 62, 0, 0, 0, 0, 0, 51, 84, 84, 0, - 160, 161, 84, 0, 162, 163, 0, 0, 164, 0, - 0, 165, 166, 167, 0, 0, 0, 59, 0, 83, - 0, 0, 83, 0, 0, 56, 56, 56, 56, 0, - 39, 39, 39, 39, 39, 39, 83, 83, 0, 0, - 39, 83, 0, 39, 39, 39, 39, 0, 56, 23, - 39, 39, 51, 39, 39, 39, 39, 0, 0, 0, - 0, 39, 39, 39, 39, 39, 0, 0, 39, 39, - 39, 83, 0, 0, 0, 0, 39, 39, 154, 155, - 0, 39, 0, 39, 39, 0, 0, 117, 25, 26, - 27, 28, 86, 0, 0, 0, 29, 162, 163, 0, - 0, 164, 168, 0, 165, 166, 167, 35, 0, 36, - 37, 38, 39, 0, 0, 0, 0, 40, 41, 42, - 43, 44, 0, 0, 45, 46, 47, 24, 25, 26, - 27, 28, 48, 49, 150, 0, 29, 52, 0, 53, - 54, 0, 0, 0, 0, 0, 0, 35, 0, 36, - 37, 38, 39, 0, 0, 0, 0, 40, 41, 42, - 43, 44, 0, 0, 45, 46, 47, 0, 0, 0, - 0, 0, 48, 49, 0, 0, 0, 52, 78, 53, - 54, 78, 0, 117, 25, 26, 27, 28, 86, 0, - 0, 0, 29, 0, 0, 78, 78, 0, 0, 0, - 78, 0, 0, 35, 0, 36, 37, 38, 39, 0, - 0, 0, 0, 40, 41, 42, 43, 44, 0, 0, - 0, 46, 47, 0, 0, 0, 0, 0, 48, 49, - 78, 0, 0, 52, 50, 53, 54, 61, 63, 60, - 0, 55, 130, 64, 58, 0, 57, 83, 83, 83, - 83, 0, 0, 0, 0, 168, 83, 0, 0, 0, - 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, - 83, 83, 0, 0, 50, 83, 83, 61, 63, 60, - 0, 55, 0, 64, 58, 0, 57, 150, 0, 0, - 0, 0, 59, 0, 152, 153, 154, 155, 0, 0, - 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, - 0, 130, 161, 0, 130, 162, 163, 0, 0, 164, - 0, 90, 165, 166, 167, 0, 0, 51, 130, 130, - 0, 0, 59, 50, 134, 107, 61, 63, 60, 0, - 55, 120, 64, 58, 0, 57, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 136, 137, 138, 139, 140, - 0, 0, 0, 130, 62, 0, 0, 51, 0, 0, - 0, 0, 0, 50, 0, 0, 61, 63, 60, 0, - 55, 198, 64, 58, 0, 57, 0, 0, 0, 0, - 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 202, 0, 0, 62, 0, 78, 78, 78, 78, - 0, 0, 0, 50, 0, 78, 61, 63, 60, 0, - 55, 246, 64, 58, 0, 57, 51, 0, 0, 78, - 78, 59, 0, 0, 78, 78, 78, 78, 78, 0, - 0, 0, 0, 0, 62, 0, 0, 152, 153, 154, - 155, 0, 0, 0, 0, 0, 0, 0, 24, 25, - 26, 27, 28, 0, 0, 0, 51, 29, 162, 163, - 0, 59, 164, 0, 0, 165, 166, 167, 35, 0, - 36, 37, 38, 39, 0, 168, 0, 0, 40, 41, - 42, 43, 44, 0, 0, 45, 46, 47, 24, 25, - 26, 27, 28, 48, 49, 0, 51, 29, 52, 0, - 53, 54, 0, 0, 0, 0, 0, 150, 35, 0, - 36, 37, 38, 39, 0, 0, 0, 0, 40, 41, - 42, 43, 44, 0, 0, 45, 46, 47, 0, 130, - 130, 130, 130, 48, 49, 0, 0, 0, 52, 0, - 53, 54, 0, 0, 0, 0, 22, 24, 25, 26, - 27, 28, 130, 130, 0, 0, 29, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 35, 0, 36, - 37, 38, 39, 0, 0, 0, 0, 40, 41, 42, - 43, 44, 0, 0, 45, 46, 47, 24, 25, 26, - 27, 28, 48, 49, 0, 0, 29, 52, 0, 53, - 54, 0, 0, 0, 0, 0, 0, 35, 0, 36, - 37, 38, 39, 0, 0, 0, 0, 40, 41, 42, - 43, 44, 0, 168, 45, 46, 47, 24, 25, 26, - 27, 28, 48, 49, 0, 0, 29, 52, 0, 53, - 54, 0, 0, 0, 0, 0, 0, 35, 0, 36, - 37, 38, 39, 0, 0, 150, 0, 40, 41, 42, - 43, 44, 0, 0, 45, 46, 47, 0, 0, 154, - 155, 0, 48, 49, 0, 0, 0, 52, 50, 53, - 54, 61, 63, 60, 0, 55, 272, 64, 58, 163, - 57, 0, 164, 0, 0, 165, 166, 167, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, - 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, - 0, 61, 63, 60, 0, 55, 274, 64, 58, 0, - 57, 0, 0, 0, 0, 0, 59, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, - 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, - 0, 61, 63, 60, 0, 55, 0, 64, 58, 0, - 57, 51, 0, 0, 0, 0, 59, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, - 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, - 0, 61, 63, 60, 0, 55, 0, 64, 58, 0, - 57, 51, 0, 0, 0, 152, 59, 154, 155, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, - 0, 0, 0, 0, 0, 0, 162, 163, 0, 0, - 164, 0, 0, 165, 166, 167, 0, 0, 23, 0, - 0, 51, 0, 0, 0, 0, 59, 0, 0, 0, - 0, 0, 0, 50, 0, 0, 61, 63, 60, 0, - 55, 0, 64, 58, 0, 57, 0, 88, 88, 0, - 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, - 0, 51, 88, 111, 62, 0, 0, 0, 118, 0, - 0, 0, 24, 25, 26, 27, 28, 0, 0, 0, - 0, 29, 88, 88, 88, 88, 88, 0, 0, 0, - 0, 59, 35, 0, 36, 37, 38, 39, 0, 0, - 0, 0, 40, 41, 42, 43, 44, 0, 0, 45, - 46, 47, 24, 25, 26, 27, 28, 48, 49, 0, - 0, 29, 52, 23, 53, 54, 51, 0, 118, 0, - 0, 0, 35, 0, 36, 37, 38, 39, 0, 0, - 0, 0, 40, 41, 42, 43, 44, 0, 0, 45, - 46, 47, 108, 25, 26, 27, 28, 48, 49, 0, - 0, 29, 52, 0, 53, 54, 0, 0, 0, 0, - 0, 0, 35, 0, 36, 37, 38, 39, 0, 0, - 0, 0, 40, 41, 42, 43, 44, 0, 0, 239, - 46, 47, 24, 25, 26, 27, 28, 48, 49, 0, - 0, 29, 52, 168, 53, 54, 0, 0, 0, 0, - 60, 0, 35, 60, 36, 37, 38, 39, 0, 0, - 0, 0, 40, 41, 42, 43, 44, 60, 60, 45, - 46, 47, 0, 0, 0, 150, 0, 48, 49, 0, - 0, 0, 52, 50, 53, 54, 61, 63, 60, 0, - 55, 0, 64, 58, 0, 57, 0, 24, 25, 26, - 27, 28, 60, 0, 0, 0, 29, 0, 0, 0, - 0, 0, 0, 0, 62, 0, 0, 35, 0, 36, - 37, 38, 39, 0, 0, 0, 0, 40, 41, 42, - 43, 44, 0, 0, 135, 46, 47, 135, 0, 0, - 0, 59, 48, 49, 0, 0, 0, 52, 0, 53, - 54, 135, 135, 0, 0, 0, 135, 0, 0, 0, + 0, 51, 0, 60, 61, 63, 47, 0, 56, 0, + 64, 59, 0, 58, 152, 153, 154, 155, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 62, 162, 163, 0, 0, 164, 52, 0, + 165, 166, 167, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 51, 0, 60, + 61, 63, 47, 0, 56, 131, 64, 59, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 51, 0, 0, 119, - 0, 0, 119, 0, 135, 0, 135, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 119, 119, 0, 0, - 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, - 0, 0, 0, 0, 142, 0, 0, 142, 0, 119, - 0, 119, 0, 0, 0, 152, 153, 154, 155, 0, - 0, 142, 142, 0, 0, 0, 142, 0, 0, 0, - 158, 159, 160, 161, 0, 0, 162, 163, 0, 0, - 164, 119, 0, 165, 166, 167, 0, 0, 0, 129, - 0, 0, 129, 0, 142, 0, 142, 0, 60, 60, - 60, 60, 0, 0, 0, 0, 129, 129, 0, 0, - 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 60, 60, 0, 0, 0, 142, 24, 25, 26, - 27, 28, 0, 0, 0, 0, 29, 0, 0, 0, - 0, 129, 0, 0, 0, 0, 0, 35, 0, 36, - 37, 38, 39, 0, 0, 0, 0, 40, 41, 42, - 43, 44, 0, 0, 0, 46, 47, 0, 0, 0, - 145, 129, 48, 49, 0, 0, 0, 52, 0, 53, - 54, 0, 135, 135, 135, 135, 0, 145, 145, 0, - 0, 135, 145, 0, 0, 0, 135, 135, 135, 135, - 0, 0, 0, 0, 0, 135, 135, 0, 0, 0, - 135, 135, 135, 135, 135, 0, 144, 135, 135, 144, - 145, 135, 145, 0, 135, 135, 135, 119, 119, 119, - 119, 0, 0, 144, 144, 0, 119, 0, 144, 0, - 0, 119, 119, 119, 119, 0, 0, 0, 0, 0, - 119, 119, 145, 0, 0, 119, 119, 119, 119, 119, - 0, 97, 119, 119, 97, 0, 119, 0, 144, 119, - 119, 119, 142, 142, 142, 142, 0, 0, 97, 97, - 0, 142, 0, 97, 0, 0, 142, 142, 142, 142, - 0, 0, 0, 0, 0, 142, 142, 0, 144, 0, - 142, 142, 142, 142, 142, 0, 59, 142, 142, 59, - 0, 142, 0, 97, 142, 142, 142, 129, 129, 129, - 129, 0, 0, 59, 59, 0, 129, 0, 59, 0, - 0, 129, 129, 129, 129, 0, 0, 0, 0, 0, - 129, 129, 0, 97, 0, 129, 129, 129, 129, 129, - 0, 0, 129, 129, 62, 0, 129, 0, 59, 129, - 129, 129, 0, 0, 72, 0, 0, 72, 0, 0, - 0, 62, 62, 0, 0, 0, 62, 0, 0, 0, - 0, 72, 72, 0, 0, 0, 0, 0, 59, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 145, 145, - 145, 145, 96, 0, 62, 96, 62, 145, 0, 0, - 0, 0, 145, 145, 145, 145, 72, 0, 0, 96, - 96, 145, 145, 0, 96, 0, 145, 145, 145, 145, - 145, 0, 0, 145, 145, 0, 62, 145, 0, 0, - 145, 145, 145, 0, 144, 144, 144, 144, 144, 0, - 0, 144, 0, 144, 96, 0, 0, 0, 144, 144, - 144, 144, 0, 0, 0, 144, 144, 144, 144, 0, - 144, 0, 144, 144, 144, 144, 144, 0, 0, 144, - 144, 0, 0, 144, 96, 0, 144, 144, 144, 97, - 97, 97, 97, 131, 0, 0, 131, 0, 97, 0, - 144, 0, 0, 97, 97, 97, 97, 0, 0, 0, - 131, 131, 97, 97, 0, 131, 0, 97, 97, 97, - 97, 97, 0, 0, 97, 97, 0, 0, 97, 0, - 0, 97, 97, 97, 59, 59, 59, 59, 103, 0, - 0, 103, 0, 59, 0, 131, 0, 0, 59, 59, - 59, 59, 0, 0, 0, 103, 103, 59, 59, 0, - 103, 0, 59, 59, 59, 59, 59, 0, 0, 59, - 59, 0, 0, 59, 0, 0, 59, 59, 59, 0, - 0, 0, 62, 62, 62, 62, 109, 0, 0, 109, - 103, 62, 72, 72, 72, 72, 62, 62, 62, 62, - 0, 0, 0, 109, 109, 62, 62, 0, 109, 0, - 62, 62, 62, 62, 62, 72, 72, 62, 62, 0, - 0, 62, 0, 0, 62, 62, 62, 0, 0, 0, - 96, 96, 96, 96, 314, 0, 0, 0, 109, 96, - 0, 0, 0, 0, 96, 96, 96, 96, 0, 0, - 0, 0, 0, 96, 96, 0, 157, 0, 96, 96, - 96, 96, 96, 0, 0, 96, 96, 0, 0, 96, - 0, 0, 96, 96, 96, 0, 144, 144, 144, 144, - 93, 0, 0, 93, 168, 144, 0, 0, 0, 0, - 144, 144, 144, 144, 0, 0, 0, 93, 93, 144, - 144, 0, 93, 0, 144, 144, 144, 144, 144, 0, - 0, 144, 144, 0, 0, 144, 150, 0, 144, 144, - 144, 131, 131, 131, 131, 94, 0, 0, 94, 0, - 131, 0, 93, 0, 0, 131, 131, 131, 131, 0, - 0, 0, 94, 94, 131, 131, 0, 94, 0, 131, - 131, 131, 131, 131, 0, 0, 131, 131, 0, 0, - 131, 0, 0, 131, 131, 131, 103, 103, 103, 103, - 88, 0, 0, 88, 0, 103, 0, 94, 0, 0, - 103, 103, 103, 103, 0, 0, 0, 88, 88, 103, - 103, 0, 88, 0, 103, 103, 103, 103, 103, 0, - 0, 103, 103, 0, 0, 103, 0, 0, 103, 103, - 103, 0, 0, 0, 109, 109, 109, 109, 89, 0, - 0, 89, 88, 109, 0, 0, 0, 0, 109, 109, - 109, 109, 0, 0, 0, 89, 89, 109, 109, 0, - 89, 0, 109, 109, 109, 109, 109, 0, 0, 109, - 109, 0, 0, 109, 0, 0, 109, 109, 109, 0, - 0, 0, 0, 90, 0, 0, 90, 0, 0, 0, - 89, 151, 0, 0, 0, 0, 152, 153, 154, 155, - 90, 90, 0, 0, 0, 90, 0, 0, 0, 0, - 156, 158, 159, 160, 161, 0, 0, 162, 163, 0, - 0, 164, 0, 0, 165, 166, 167, 0, 93, 93, - 93, 93, 0, 281, 0, 90, 0, 93, 157, 0, - 0, 0, 93, 93, 93, 93, 0, 0, 0, 0, - 0, 93, 93, 0, 0, 0, 93, 93, 93, 93, - 93, 0, 86, 93, 93, 86, 168, 93, 0, 0, - 0, 0, 0, 94, 94, 94, 94, 0, 0, 86, - 86, 0, 94, 0, 86, 0, 0, 94, 94, 94, - 94, 0, 0, 0, 0, 0, 94, 94, 150, 0, - 0, 94, 94, 94, 94, 94, 0, 87, 94, 94, - 87, 0, 94, 0, 86, 0, 0, 0, 88, 88, - 88, 88, 0, 0, 87, 87, 0, 88, 0, 87, - 0, 0, 88, 88, 88, 88, 0, 0, 0, 0, - 0, 88, 88, 0, 0, 0, 88, 88, 88, 88, - 88, 0, 0, 88, 88, 85, 0, 0, 85, 87, - 0, 0, 0, 0, 0, 0, 89, 89, 89, 89, - 0, 0, 85, 85, 0, 89, 0, 85, 0, 0, - 89, 89, 89, 89, 0, 0, 0, 0, 0, 89, - 89, 0, 0, 0, 89, 89, 89, 89, 89, 0, - 73, 89, 89, 73, 0, 0, 0, 85, 0, 0, - 0, 90, 90, 90, 90, 0, 0, 73, 73, 0, - 90, 0, 73, 0, 0, 90, 90, 90, 90, 0, - 0, 0, 0, 0, 90, 90, 0, 0, 0, 90, - 90, 90, 90, 90, 0, 74, 90, 90, 74, 0, - 0, 0, 73, 151, 0, 0, 0, 0, 152, 153, - 154, 155, 74, 74, 0, 0, 0, 74, 0, 0, - 0, 0, 156, 158, 159, 160, 161, 0, 0, 162, + 151, 0, 0, 0, 152, 153, 154, 155, 62, 0, + 0, 23, 0, 0, 52, 0, 0, 156, 158, 159, + 160, 161, 0, 162, 163, 0, 0, 164, 0, 0, + 165, 166, 167, 0, 0, 60, 0, 0, 0, 0, + 51, 0, 0, 61, 63, 47, 0, 56, 0, 64, + 59, 0, 58, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 52, 62, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, + 25, 26, 27, 28, 0, 29, 30, 31, 60, 0, + 135, 32, 0, 0, 0, 168, 0, 0, 0, 0, + 0, 0, 38, 0, 39, 40, 41, 0, 0, 0, + 0, 42, 43, 44, 45, 46, 0, 157, 48, 49, + 0, 0, 0, 52, 0, 50, 0, 150, 0, 53, + 0, 54, 55, 0, 0, 24, 25, 26, 27, 28, + 0, 29, 30, 31, 0, 168, 0, 32, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, + 39, 40, 41, 0, 0, 0, 0, 42, 43, 44, + 45, 46, 0, 0, 48, 49, 168, 150, 0, 0, + 0, 50, 0, 82, 0, 53, 82, 54, 55, 0, + 0, 24, 25, 26, 27, 28, 0, 29, 30, 31, + 82, 82, 0, 32, 0, 82, 0, 0, 150, 0, + 0, 0, 0, 0, 38, 0, 39, 40, 41, 0, + 0, 0, 0, 42, 43, 44, 45, 46, 0, 0, + 48, 49, 0, 0, 0, 82, 0, 50, 0, 0, + 0, 53, 0, 54, 55, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 24, 25, 26, 27, 28, 0, + 29, 30, 31, 0, 51, 0, 32, 61, 63, 47, + 0, 56, 0, 64, 59, 0, 58, 38, 0, 39, + 40, 41, 0, 0, 0, 0, 42, 43, 44, 45, + 46, 154, 155, 48, 49, 62, 0, 0, 0, 0, + 50, 0, 0, 0, 53, 0, 54, 55, 162, 163, + 0, 0, 164, 0, 0, 165, 166, 167, 0, 0, + 51, 0, 60, 61, 63, 47, 0, 56, 200, 64, + 59, 0, 58, 0, 0, 151, 0, 0, 0, 152, + 153, 154, 155, 0, 0, 0, 0, 0, 0, 0, + 0, 62, 156, 158, 159, 160, 161, 52, 162, 163, + 0, 0, 164, 0, 0, 165, 166, 167, 0, 0, + 152, 0, 154, 155, 0, 0, 51, 0, 60, 61, + 63, 47, 0, 56, 248, 64, 59, 0, 58, 162, 163, 0, 0, 164, 0, 0, 165, 166, 167, 0, - 86, 86, 86, 86, 0, 0, 0, 74, 0, 86, - 157, 0, 0, 0, 86, 86, 86, 86, 0, 0, - 0, 0, 0, 86, 86, 0, 0, 0, 86, 86, - 86, 86, 86, 0, 75, 86, 86, 75, 168, 0, - 0, 0, 0, 0, 0, 87, 87, 87, 87, 0, - 0, 75, 75, 0, 87, 0, 75, 0, 0, 87, - 87, 87, 87, 0, 0, 0, 0, 0, 87, 87, - 150, 0, 0, 87, 87, 87, 87, 87, 0, 0, - 87, 87, 76, 0, 0, 76, 75, 0, 0, 0, - 0, 0, 0, 85, 85, 85, 85, 0, 0, 76, - 76, 0, 85, 0, 76, 0, 0, 85, 85, 85, - 85, 0, 0, 0, 0, 0, 85, 85, 0, 0, - 0, 85, 85, 85, 85, 85, 0, 123, 85, 85, - 123, 0, 0, 0, 76, 0, 0, 0, 73, 73, - 73, 73, 0, 0, 123, 123, 0, 73, 0, 123, - 0, 0, 73, 73, 73, 73, 0, 0, 0, 0, - 0, 73, 73, 0, 0, 0, 73, 73, 73, 73, - 73, 0, 95, 73, 73, 95, 0, 0, 0, 123, - 0, 0, 0, 74, 74, 74, 74, 0, 0, 95, - 95, 0, 74, 0, 95, 0, 0, 74, 74, 74, - 74, 0, 0, 0, 0, 133, 74, 74, 133, 0, - 0, 74, 74, 74, 74, 74, 0, 0, 74, 0, - 0, 0, 133, 133, 95, 151, 0, 133, 0, 0, - 152, 153, 154, 155, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 156, 158, 159, 160, 161, 0, - 134, 162, 163, 134, 0, 164, 0, 133, 165, 166, - 167, 0, 75, 75, 75, 75, 80, 134, 134, 80, - 0, 75, 134, 0, 0, 0, 75, 75, 0, 75, - 0, 0, 0, 80, 80, 75, 75, 0, 80, 0, - 75, 75, 75, 75, 75, 0, 0, 75, 77, 0, - 0, 77, 134, 0, 0, 0, 0, 0, 0, 0, - 76, 76, 76, 76, 79, 77, 77, 79, 80, 76, - 77, 0, 0, 0, 76, 76, 0, 0, 0, 0, - 0, 79, 79, 76, 76, 0, 79, 0, 76, 76, - 76, 76, 76, 0, 0, 76, 0, 0, 0, 0, - 77, 0, 0, 0, 0, 123, 123, 123, 123, 82, - 0, 0, 82, 0, 123, 0, 79, 0, 0, 123, - 123, 0, 0, 0, 0, 0, 82, 82, 123, 123, - 0, 82, 0, 123, 123, 123, 123, 123, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, - 95, 95, 95, 95, 0, 0, 0, 0, 0, 95, - 0, 82, 0, 0, 95, 95, 0, 0, 0, 0, - 0, 0, 0, 95, 95, 0, 168, 0, 95, 95, - 95, 95, 95, 133, 133, 133, 133, 0, 0, 0, - 0, 0, 133, 0, 0, 0, 0, 133, 133, 0, - 0, 0, 0, 0, 0, 0, 133, 133, 150, 0, - 0, 133, 133, 133, 133, 133, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, - 134, 134, 0, 0, 0, 0, 0, 134, 0, 0, - 0, 0, 134, 134, 80, 80, 80, 80, 0, 0, - 0, 134, 134, 80, 0, 0, 134, 134, 134, 134, - 134, 0, 0, 0, 0, 0, 0, 80, 80, 0, - 0, 0, 80, 80, 80, 80, 77, 77, 77, 77, - 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, - 0, 77, 79, 79, 79, 79, 0, 0, 0, 77, - 77, 79, 0, 0, 77, 77, 77, 77, 77, 0, - 0, 0, 0, 0, 0, 79, 79, 0, 0, 0, - 79, 79, 79, 79, 79, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 103, 0, 82, 82, 82, - 82, 110, 112, 0, 0, 0, 82, 0, 123, 124, - 125, 126, 127, 128, 129, 0, 0, 132, 133, 0, - 82, 82, 0, 151, 0, 82, 82, 82, 152, 153, - 154, 155, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 158, 159, 160, 161, 0, 0, 162, - 163, 182, 0, 164, 0, 0, 165, 166, 167, 0, + 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, + 0, 0, 0, 52, 82, 82, 82, 82, 0, 0, + 0, 0, 0, 82, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 60, 0, 82, 82, 0, 51, + 82, 82, 61, 63, 47, 0, 56, 276, 64, 59, + 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, + 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 22, 24, 25, + 26, 27, 28, 0, 29, 30, 31, 60, 0, 0, + 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 38, 0, 39, 40, 41, 0, 0, 0, 0, + 42, 43, 44, 45, 46, 0, 0, 48, 49, 0, + 0, 0, 52, 0, 50, 0, 119, 0, 53, 119, + 54, 55, 0, 0, 24, 25, 26, 27, 28, 0, + 29, 30, 31, 119, 119, 0, 32, 0, 119, 0, + 0, 0, 0, 0, 0, 0, 0, 38, 0, 39, + 40, 41, 0, 0, 0, 0, 42, 43, 44, 45, + 46, 0, 0, 48, 49, 0, 119, 0, 119, 0, + 50, 0, 143, 0, 53, 143, 54, 55, 0, 0, + 24, 25, 26, 27, 28, 0, 29, 30, 31, 143, + 143, 0, 32, 0, 143, 0, 0, 0, 119, 0, + 0, 0, 0, 38, 0, 39, 40, 41, 0, 0, + 0, 0, 42, 43, 44, 45, 46, 0, 0, 48, + 49, 0, 143, 0, 143, 0, 50, 0, 0, 0, + 53, 0, 54, 55, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 24, 25, 26, 27, 28, 0, 29, + 30, 31, 0, 51, 143, 32, 61, 63, 47, 0, + 56, 278, 64, 59, 0, 58, 38, 0, 39, 40, + 41, 0, 0, 0, 0, 42, 43, 44, 45, 46, + 0, 0, 48, 49, 62, 0, 87, 87, 0, 50, + 0, 0, 0, 53, 0, 54, 55, 0, 103, 0, + 0, 0, 0, 87, 112, 0, 0, 0, 87, 51, + 121, 60, 61, 63, 47, 0, 56, 0, 64, 59, + 0, 58, 87, 87, 87, 87, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 62, 0, 0, 0, 0, 0, 52, 119, 119, 119, + 119, 0, 0, 0, 0, 0, 119, 0, 0, 0, + 119, 119, 119, 119, 0, 0, 0, 60, 121, 119, + 119, 0, 0, 119, 119, 119, 119, 119, 0, 119, + 119, 0, 130, 119, 0, 130, 119, 119, 119, 0, + 0, 0, 0, 129, 0, 0, 129, 0, 0, 130, + 130, 0, 52, 143, 143, 143, 143, 0, 0, 0, + 129, 129, 143, 0, 0, 129, 143, 143, 143, 143, + 0, 0, 0, 0, 0, 143, 143, 0, 240, 143, + 143, 143, 143, 143, 130, 143, 143, 0, 104, 143, + 0, 104, 143, 143, 143, 129, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 104, 104, 0, 0, 0, + 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 129, 0, 24, 25, 26, + 27, 28, 0, 29, 30, 31, 0, 0, 104, 32, + 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 38, 0, 39, 40, 41, 0, 0, 0, 0, 42, + 43, 44, 45, 46, 0, 0, 48, 49, 0, 0, + 0, 0, 0, 50, 0, 145, 0, 53, 145, 54, + 55, 0, 0, 24, 25, 26, 27, 28, 0, 29, + 30, 31, 145, 145, 0, 32, 0, 145, 0, 0, + 0, 0, 0, 0, 0, 0, 38, 0, 39, 40, + 41, 0, 0, 0, 0, 42, 43, 44, 45, 46, + 0, 0, 48, 49, 0, 0, 0, 145, 0, 50, + 131, 0, 0, 53, 0, 54, 55, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 131, 131, 0, + 0, 0, 131, 0, 0, 0, 0, 145, 0, 0, + 0, 0, 0, 130, 130, 130, 130, 0, 0, 0, + 0, 0, 0, 0, 129, 129, 129, 129, 0, 0, + 131, 0, 131, 129, 0, 130, 130, 129, 129, 129, + 129, 0, 0, 0, 0, 0, 129, 129, 0, 0, + 129, 129, 129, 129, 129, 0, 129, 129, 0, 0, + 129, 0, 131, 129, 129, 129, 0, 0, 0, 104, + 104, 104, 104, 0, 0, 0, 0, 0, 104, 0, + 0, 0, 104, 104, 104, 104, 0, 0, 0, 0, + 0, 104, 104, 0, 146, 104, 104, 104, 104, 104, + 0, 104, 104, 0, 0, 104, 0, 0, 104, 104, + 104, 146, 146, 0, 0, 0, 146, 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, 146, 0, 146, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 145, 145, 145, 145, + 0, 0, 0, 0, 0, 145, 0, 0, 0, 145, + 145, 145, 145, 0, 0, 0, 146, 0, 145, 145, + 0, 0, 145, 145, 145, 145, 145, 0, 145, 145, + 59, 0, 145, 59, 0, 145, 145, 145, 0, 0, + 0, 96, 0, 0, 96, 0, 0, 59, 59, 0, + 0, 131, 131, 131, 131, 0, 0, 0, 96, 96, + 131, 0, 0, 96, 131, 131, 131, 131, 0, 0, + 0, 0, 0, 131, 131, 0, 0, 131, 131, 131, + 131, 131, 59, 131, 131, 0, 0, 131, 0, 0, + 131, 131, 131, 96, 58, 0, 0, 58, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 58, 58, 0, 0, 0, 58, 0, 0, 0, + 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, + 95, 0, 0, 0, 0, 0, 58, 0, 0, 0, + 0, 0, 0, 0, 95, 95, 0, 0, 0, 95, + 0, 0, 0, 0, 0, 146, 146, 146, 146, 0, + 0, 0, 0, 0, 146, 0, 58, 0, 146, 146, + 146, 146, 0, 0, 0, 61, 0, 146, 146, 95, + 0, 146, 146, 146, 146, 146, 0, 146, 146, 0, + 0, 146, 61, 61, 146, 146, 146, 61, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, + 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, + 145, 0, 0, 0, 0, 61, 0, 61, 0, 0, + 0, 0, 0, 0, 145, 145, 0, 0, 0, 145, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 59, 59, 59, 59, 0, 0, 61, 0, 0, + 0, 0, 96, 96, 96, 96, 0, 0, 0, 145, + 0, 96, 0, 59, 59, 96, 96, 96, 96, 0, + 0, 0, 0, 0, 96, 96, 0, 0, 96, 96, + 96, 96, 96, 0, 96, 96, 0, 0, 96, 0, + 0, 96, 96, 96, 0, 132, 0, 0, 132, 0, + 0, 0, 0, 0, 0, 58, 58, 58, 58, 0, + 0, 0, 132, 132, 58, 0, 0, 132, 58, 58, + 58, 58, 0, 0, 0, 0, 0, 58, 58, 0, + 0, 58, 58, 58, 58, 58, 0, 58, 58, 0, + 0, 58, 0, 0, 58, 58, 58, 132, 95, 95, + 95, 95, 0, 0, 0, 71, 0, 95, 71, 0, + 0, 95, 95, 95, 95, 0, 0, 0, 0, 0, + 95, 95, 71, 71, 95, 95, 95, 95, 95, 0, + 95, 95, 0, 0, 95, 0, 0, 95, 95, 95, + 0, 0, 0, 0, 0, 0, 61, 61, 61, 61, + 0, 0, 0, 0, 0, 61, 0, 71, 0, 61, + 61, 61, 61, 0, 0, 0, 0, 0, 61, 61, + 0, 157, 61, 61, 61, 61, 61, 0, 61, 61, + 0, 0, 61, 0, 0, 61, 61, 61, 145, 145, + 145, 145, 0, 0, 0, 0, 0, 145, 0, 168, + 0, 145, 145, 145, 145, 0, 0, 0, 0, 0, + 145, 145, 0, 0, 145, 145, 145, 145, 145, 102, + 145, 145, 102, 0, 145, 0, 0, 145, 145, 145, + 0, 150, 0, 0, 0, 0, 102, 102, 0, 0, + 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 109, 0, 0, 109, + 0, 102, 0, 0, 0, 0, 132, 132, 132, 132, + 0, 0, 0, 109, 109, 132, 0, 0, 109, 132, + 132, 132, 132, 0, 0, 0, 0, 0, 132, 132, + 0, 0, 132, 132, 132, 132, 132, 0, 132, 132, + 92, 0, 132, 92, 0, 132, 132, 132, 109, 0, + 0, 0, 0, 0, 0, 0, 0, 92, 92, 0, + 0, 0, 92, 0, 0, 0, 71, 71, 71, 71, + 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, + 93, 0, 0, 0, 0, 0, 0, 0, 71, 71, + 0, 0, 92, 0, 93, 93, 0, 0, 0, 93, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 87, 0, 0, 87, 0, 151, + 0, 0, 0, 152, 153, 154, 155, 0, 0, 93, + 0, 87, 87, 0, 0, 0, 87, 158, 159, 160, + 161, 0, 162, 163, 0, 0, 164, 0, 0, 165, + 166, 167, 88, 0, 0, 88, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 87, 0, 0, 88, + 88, 0, 0, 0, 88, 0, 0, 0, 0, 0, + 102, 102, 102, 102, 0, 0, 0, 0, 0, 102, + 0, 0, 0, 102, 102, 102, 102, 0, 0, 0, + 0, 0, 102, 102, 88, 0, 102, 102, 102, 102, + 102, 0, 102, 102, 0, 0, 102, 0, 0, 102, + 102, 102, 0, 0, 0, 0, 0, 109, 109, 109, + 109, 0, 0, 0, 0, 0, 109, 0, 0, 0, + 109, 109, 109, 109, 0, 0, 0, 0, 0, 109, + 109, 0, 0, 109, 109, 109, 109, 109, 0, 109, + 109, 89, 0, 109, 89, 0, 109, 109, 109, 0, + 0, 92, 92, 92, 92, 0, 0, 0, 89, 89, + 92, 0, 0, 89, 92, 92, 92, 92, 0, 0, + 0, 0, 0, 92, 92, 0, 0, 92, 92, 92, + 92, 92, 0, 92, 92, 0, 0, 92, 93, 93, + 93, 93, 0, 89, 0, 0, 0, 93, 0, 0, + 0, 93, 93, 93, 93, 0, 0, 0, 0, 0, + 93, 93, 0, 0, 93, 93, 93, 93, 93, 0, + 93, 93, 0, 0, 93, 87, 87, 87, 87, 0, + 0, 0, 0, 0, 87, 0, 0, 0, 87, 87, + 87, 87, 0, 0, 0, 0, 0, 87, 87, 0, + 0, 87, 87, 87, 87, 87, 0, 87, 87, 0, + 0, 0, 0, 88, 88, 88, 88, 0, 0, 0, + 0, 0, 88, 0, 0, 0, 88, 88, 88, 88, + 85, 0, 0, 85, 0, 88, 88, 0, 0, 88, + 88, 88, 88, 88, 0, 88, 88, 85, 85, 0, + 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 86, 0, 0, 86, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 85, 86, 86, 0, 0, 0, 86, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 84, 0, 0, 84, 0, 0, 0, 0, 86, 0, + 0, 0, 89, 89, 89, 89, 0, 84, 84, 0, + 0, 89, 84, 0, 0, 89, 89, 89, 89, 0, + 0, 0, 0, 0, 89, 89, 0, 0, 89, 89, + 89, 89, 89, 72, 89, 89, 72, 0, 0, 0, + 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, + 72, 72, 0, 0, 0, 72, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, + 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 72, 73, 73, 0, 0, + 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 75, 0, 0, 75, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 73, 0, 75, 75, 0, 0, 0, 75, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 85, 85, 85, 85, 0, 0, 0, 0, 0, + 85, 0, 0, 0, 85, 85, 85, 85, 75, 0, + 0, 0, 0, 85, 85, 0, 0, 85, 85, 85, + 85, 85, 0, 85, 85, 0, 0, 86, 86, 86, + 86, 0, 0, 0, 0, 0, 86, 0, 0, 0, + 86, 86, 86, 86, 123, 0, 0, 123, 0, 86, + 86, 0, 0, 86, 86, 86, 86, 86, 0, 86, + 86, 123, 123, 0, 0, 0, 123, 0, 0, 0, + 0, 84, 84, 84, 84, 0, 0, 0, 0, 0, + 84, 0, 0, 0, 84, 84, 84, 84, 0, 0, + 0, 0, 0, 84, 84, 0, 123, 84, 84, 84, + 84, 84, 94, 84, 84, 94, 0, 0, 0, 0, + 0, 0, 0, 0, 72, 72, 72, 72, 0, 94, + 94, 0, 0, 72, 94, 0, 0, 72, 72, 72, + 72, 0, 0, 0, 0, 0, 72, 72, 0, 0, + 72, 72, 72, 72, 72, 0, 72, 72, 0, 0, + 73, 73, 73, 73, 94, 0, 0, 0, 0, 73, + 0, 0, 0, 73, 73, 73, 73, 0, 0, 0, + 0, 0, 73, 73, 0, 0, 73, 73, 73, 73, + 73, 134, 73, 0, 134, 0, 0, 75, 75, 75, + 75, 0, 0, 0, 0, 0, 75, 0, 134, 134, + 75, 75, 0, 134, 0, 0, 0, 0, 0, 75, + 75, 0, 0, 75, 75, 75, 75, 75, 76, 75, + 0, 76, 0, 0, 0, 0, 0, 0, 77, 0, + 0, 77, 0, 134, 0, 76, 76, 0, 0, 0, + 76, 0, 0, 0, 0, 77, 77, 0, 0, 0, + 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 78, 0, 0, 78, 0, 0, + 76, 0, 0, 0, 0, 123, 123, 123, 123, 0, + 77, 78, 78, 0, 123, 0, 78, 0, 123, 123, + 0, 0, 0, 0, 0, 0, 79, 123, 123, 79, + 0, 123, 123, 123, 123, 123, 81, 0, 0, 81, + 0, 0, 0, 79, 79, 0, 78, 0, 79, 0, + 0, 0, 0, 81, 81, 0, 0, 0, 81, 0, + 0, 0, 0, 94, 94, 94, 94, 0, 0, 284, + 0, 0, 94, 0, 157, 0, 94, 94, 79, 0, + 0, 0, 0, 0, 0, 94, 94, 0, 81, 94, + 94, 94, 94, 94, 0, 0, 0, 0, 0, 0, + 0, 0, 168, 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, 150, 0, 0, 0, 0, 0, + 0, 0, 134, 134, 134, 134, 0, 0, 0, 0, + 0, 134, 0, 0, 0, 134, 134, 0, 0, 0, + 0, 0, 0, 0, 134, 134, 0, 0, 134, 134, + 134, 134, 134, 0, 0, 0, 0, 0, 0, 76, + 76, 76, 76, 0, 0, 0, 0, 0, 76, 77, + 77, 77, 77, 76, 0, 0, 0, 0, 77, 0, + 0, 76, 76, 0, 0, 76, 76, 76, 76, 76, + 0, 77, 77, 0, 0, 77, 77, 77, 77, 77, + 0, 0, 0, 0, 0, 78, 78, 78, 78, 0, + 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 78, 78, 0, + 0, 78, 78, 78, 78, 78, 0, 79, 79, 79, + 79, 0, 0, 0, 0, 0, 79, 81, 81, 81, + 81, 0, 0, 0, 0, 0, 81, 0, 0, 79, + 79, 0, 0, 79, 79, 79, 79, 0, 0, 81, + 81, 0, 151, 81, 81, 81, 152, 153, 154, 155, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, + 158, 159, 160, 161, 0, 162, 163, 91, 0, 164, + 0, 0, 165, 166, 167, 104, 0, 0, 0, 0, + 111, 113, 0, 0, 0, 0, 0, 125, 126, 127, + 128, 129, 130, 0, 0, 133, 134, 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, 183, 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, 214, 0, 0, 0, 0, 0, 0, - 0, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, 233, 234, 235, 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, + 215, 0, 0, 0, 0, 0, 0, 0, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 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, 0, 0, 0, 0, 0, - 0, 0, 0, 292, 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, 308, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 296, 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, 312, }; dEXT short yycheck[] = { 13, - 36, 91, 41, 17, 41, 59, 41, 44, 93, 125, - 123, 59, 0, 41, 36, 93, 30, 31, 32, 33, - 93, 58, 59, 192, 257, 93, 63, 41, 181, 59, - 93, 46, 59, 123, 48, 91, 40, 44, 40, 257, - 40, 91, 6, 41, 41, 33, 41, 40, 36, 37, - 38, 93, 40, 40, 42, 43, 93, 45, 41, 41, - 186, 59, 188, 41, 78, 29, 41, 123, 59, 91, - 41, 59, 41, 123, 89, 0, 64, 59, 257, 41, - 94, 59, 96, 47, 98, 40, 100, 123, 59, 91, - 36, 275, 41, 123, 40, 40, 123, 59, 41, 40, - 115, 123, 40, 91, 292, 293, 59, 121, 33, 41, - 59, 36, 37, 38, 44, 40, 59, 42, 43, 123, - 45, 123, 41, 123, 41, 59, 295, 141, 40, 298, - 123, 284, 273, 274, 59, 123, 123, 125, 126, 64, - 0, 260, 123, 59, 257, 40, 59, 263, 264, 265, - 93, 267, 268, 59, 40, 59, 41, 263, 264, 265, - 329, 267, 268, 177, 40, 125, 91, 293, 294, 183, - 91, 41, 59, 33, 300, 41, 36, 37, 38, 293, - 40, 125, 42, 43, 91, 45, 40, 59, 41, 40, - 125, 93, 125, 41, 209, 41, 322, 125, 123, 59, - 125, 126, 125, 59, 64, 123, 41, 292, 293, 257, - 41, 41, 59, 44, 292, 293, 59, 41, 59, 292, - 293, 257, 41, 313, 292, 293, 262, 58, 59, 292, - 293, 91, 269, 270, 271, 272, 258, 320, 292, 293, - 84, 255, 13, 257, 265, 259, 260, 92, 41, 263, - 292, 293, 266, 292, 293, 292, 293, 292, 293, -1, - 297, -1, 93, 123, 292, 293, 126, -1, 256, 257, - 258, 259, 260, 261, -1, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 292, 293, 301, 276, 277, - -1, 279, 280, 281, 282, 292, 293, 292, 293, 287, - 288, 289, 290, 291, -1, -1, 294, 295, 296, 292, - 293, -1, 326, -1, 302, 303, 330, 292, 293, 307, - -1, 309, 310, 292, 293, -1, 269, 270, 271, 272, - -1, 256, 257, 258, 259, 260, 261, -1, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, -1, 292, - 293, 276, 277, -1, 279, 280, 281, 282, 292, 293, - 292, 293, 287, 288, 289, 290, 291, -1, -1, 294, - 295, 296, 13, 292, 293, 292, 293, 302, 303, 292, - 293, -1, 307, -1, 309, 310, 292, 293, 292, 293, - 292, 293, -1, -1, -1, -1, 256, 257, 258, 259, - 260, 261, 43, -1, 45, -1, 266, -1, -1, 269, - 270, 271, 272, -1, 55, -1, 276, 277, 59, 279, - 280, 281, 282, -1, -1, -1, -1, 287, 288, 289, - 290, 291, -1, -1, 294, 295, 296, -1, 269, 270, - 271, 272, 302, 303, -1, -1, -1, 307, -1, 309, - 310, -1, 93, 91, 95, -1, 97, -1, 99, -1, - 101, 292, 293, 33, 105, -1, 36, 37, 38, -1, - 40, 41, 42, 43, 44, 45, 269, 270, 271, 272, - -1, -1, -1, -1, -1, 123, -1, -1, 58, 59, - 21, -1, -1, 63, 64, 269, 270, 271, 272, 292, - 293, -1, -1, 144, 145, 146, 147, 148, 149, 150, - -1, -1, -1, -1, -1, 46, -1, -1, 292, 293, - -1, 91, -1, 93, -1, -1, -1, 168, 169, 170, - 171, 172, 173, -1, 33, 91, -1, 36, 37, 38, + 257, 13, 91, 17, 44, 41, 59, 182, 36, 41, + 59, 257, 44, 194, 41, 188, 59, 190, 41, 33, + 34, 35, 36, 59, 82, 40, 58, 59, 41, 43, + 88, 63, 125, 45, 123, 59, 50, 40, 59, 59, + 40, 91, 123, 91, 56, 41, 257, 41, 60, 41, + 41, 41, 278, 41, 36, 41, 44, 93, 116, 40, + 91, 93, 41, 91, 78, 41, 40, 40, 59, 41, + 58, 59, 40, 123, 123, 123, 91, 41, 92, 41, + 40, 95, 94, 97, 96, 99, 98, 101, 100, 41, + 102, 40, 123, 41, 106, 123, 44, 59, 41, 123, + 59, 41, 294, 295, 41, 93, 0, 59, 123, 59, + 58, 59, 287, 59, 44, 59, 59, 59, 299, 59, + 123, 302, 59, 123, 297, 298, 184, 141, 276, 277, + 123, 304, 144, 145, 146, 147, 148, 149, 150, 33, + 40, 123, 36, 37, 38, 93, 40, 260, 42, 43, + 123, 45, 123, 334, 327, 93, 168, 169, 170, 171, + 172, 173, 174, 123, 178, 59, 40, 40, 36, 0, + 64, 185, 40, 266, 267, 268, 257, 270, 271, 41, + 40, 93, 91, 266, 267, 268, 198, 270, 271, 125, + 93, 41, 204, 205, 206, 59, 59, 91, 287, 211, + 41, 125, 33, 91, 257, 36, 37, 38, 295, 40, + 93, 42, 43, 40, 45, 41, 305, 40, 125, 308, + 125, 125, 311, 312, 313, 237, 125, 239, 59, 123, + 258, 125, 126, 64, 59, 125, 272, 273, 274, 275, + 272, 273, 274, 275, 93, 259, 41, 261, 41, 263, + 264, 294, 295, 267, 294, 295, 270, 269, 294, 295, + 91, 41, 294, 295, 44, 313, 298, 294, 295, 93, + 282, 294, 295, 294, 295, 257, 272, 273, 274, 275, + 262, 294, 295, 63, 272, 273, 274, 275, 59, 301, + 123, 305, 123, 41, 125, 126, 0, 93, 294, 295, + 294, 295, 294, 295, 294, 295, 294, 295, 294, 295, + 298, 91, 59, 325, 41, 294, 295, 331, 294, 295, + 59, 335, 294, 295, 272, 273, 274, 275, 41, 33, + 294, 295, 36, 37, 38, 59, 40, 83, 42, 43, + 41, 45, 325, 123, 294, 295, 294, 295, 294, 295, + 294, 295, 294, 295, 13, 59, 294, 295, 269, 93, + 64, -1, 256, 257, 258, 259, 260, 261, -1, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 294, 295, -1, 279, 280, 91, 282, 283, + 284, 294, 295, -1, -1, 289, 290, 291, 292, 293, + -1, -1, 296, 297, -1, 41, -1, -1, 44, 303, + -1, 294, 295, 307, -1, 309, 310, -1, -1, 123, + -1, -1, 126, 59, 91, 256, 257, 258, 259, 260, + 261, -1, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 294, 295, -1, 279, 280, + -1, 282, 283, 284, 91, -1, 123, 93, 289, 290, + 291, 292, 293, -1, -1, 296, 297, -1, -1, -1, + 294, 295, 303, -1, -1, -1, 307, -1, 309, 310, + 272, 273, 274, 275, 33, 91, 123, 36, 37, 38, + -1, 40, 41, 42, 43, 44, 45, -1, 294, 295, + -1, 281, 294, 295, -1, 285, 286, 287, 288, 58, + 59, 6, -1, 8, 63, 64, -1, 123, 298, 299, + 300, 301, 302, -1, 304, 305, -1, -1, 308, -1, + -1, 311, 312, 313, -1, -1, 31, 32, -1, -1, + -1, -1, 91, -1, 93, 41, -1, -1, 44, -1, + -1, 91, 256, 257, 258, 259, 260, 261, -1, 263, + 264, 265, 58, 59, -1, 269, -1, 63, 272, 273, + 274, 275, -1, -1, 123, 279, 280, 126, 282, 283, + 284, -1, -1, 123, -1, 289, 290, 291, 292, 293, + -1, -1, 296, 297, -1, 91, -1, 93, -1, 303, + -1, -1, -1, 307, 33, 309, 310, 36, 37, 38, -1, 40, 41, 42, 43, 44, 45, -1, -1, -1, - -1, -1, -1, 123, -1, 196, 126, -1, 89, 58, - 59, 202, 203, 204, 63, 64, -1, 123, -1, 210, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 115, -1, -1, -1, -1, 120, - -1, -1, -1, -1, 93, 236, -1, 238, -1, -1, - 91, -1, 33, -1, -1, 36, 37, 38, -1, 40, - -1, 42, 43, -1, 45, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 265, -1, -1, 126, 59, -1, - -1, -1, 123, 64, -1, -1, -1, -1, 279, -1, - -1, -1, -1, -1, -1, 283, 284, 285, 286, -1, - -1, -1, -1, -1, 41, -1, 297, 44, -1, -1, - 91, 299, 300, 301, -1, -1, 304, 305, -1, -1, - 308, -1, -1, 311, 312, 313, 63, -1, 209, 320, - -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, - 260, 261, 123, -1, -1, 126, 266, -1, -1, 269, - 270, 271, 272, -1, 91, -1, -1, 277, 278, 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, 123, 307, 308, 309, - 310, 311, 312, 313, -1, -1, -1, -1, -1, 305, + -1, -1, -1, -1, -1, -1, -1, 123, -1, 58, + 59, -1, -1, -1, 63, 64, 272, 273, 274, 275, + -1, 308, -1, -1, 311, 312, 313, -1, 285, 286, + 287, 288, -1, -1, -1, -1, -1, -1, 294, -1, + -1, -1, -1, -1, 93, 302, -1, 304, 305, -1, + 41, 308, -1, 44, 311, 312, 313, -1, -1, 285, + 286, 287, 288, -1, -1, -1, -1, 58, 59, -1, + -1, -1, 63, 299, 300, 301, 302, 126, 304, 305, -1, -1, 308, -1, -1, 311, 312, 313, 257, 258, - 259, 260, 261, -1, -1, -1, -1, 266, -1, -1, - 269, 270, 271, 272, -1, 91, -1, -1, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 259, 260, 261, -1, 263, 264, 265, -1, -1, -1, + 269, -1, 93, 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, 123, 307, 308, - 309, 310, 311, 312, 313, -1, 41, 308, -1, 44, - 311, 312, 313, -1, -1, 256, 257, 258, 259, 260, - 261, -1, -1, 58, 59, 266, -1, -1, 269, 270, - 271, 272, -1, -1, -1, 276, 277, -1, 279, 280, - 281, 282, -1, -1, -1, -1, 287, 288, 289, 290, - 291, 91, -1, 294, 295, 296, -1, 41, 93, -1, - 44, 302, 303, -1, -1, -1, 307, 33, 309, 310, - 36, 37, 38, -1, 40, 59, 42, 43, -1, 45, - -1, 278, -1, 123, -1, -1, 283, 284, 285, 286, - -1, -1, -1, 59, -1, -1, -1, -1, 64, -1, - 297, 298, 299, 300, 301, -1, -1, 304, 305, 93, + 299, 300, 301, 302, 303, 304, 305, -1, 307, 308, + 309, 310, 311, 312, 313, 305, -1, -1, 308, 91, + -1, 311, 312, 313, -1, -1, 272, 273, 274, 275, + -1, -1, -1, -1, -1, 281, -1, -1, -1, 285, + 286, 287, 288, -1, -1, -1, -1, -1, 294, 295, + -1, 123, 298, 299, 300, 301, 302, -1, 304, 305, + -1, -1, 308, -1, -1, 311, 312, 313, 91, -1, + -1, -1, -1, -1, -1, -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, + 123, 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, -1, 307, 308, + 309, 310, 311, 312, 313, 33, 48, 49, 36, 37, + 38, -1, 40, -1, 42, 43, -1, 45, -1, -1, + -1, 272, 273, 274, 275, -1, -1, -1, -1, -1, + 281, 59, -1, -1, 285, 286, 64, 288, -1, -1, + 82, -1, -1, 294, 295, -1, 88, 298, 299, 300, + 301, 302, -1, 304, -1, -1, -1, -1, -1, -1, + -1, 33, -1, 91, 36, 37, 38, -1, 40, -1, + 42, 43, -1, 45, 116, -1, -1, -1, -1, -1, + -1, 123, -1, 285, 286, 287, 288, 59, -1, -1, + -1, -1, 64, -1, -1, 123, -1, -1, 126, 301, + 302, -1, 304, 305, -1, -1, 308, -1, -1, 311, + 312, 313, -1, -1, -1, -1, -1, 33, -1, 91, + 36, 37, 38, -1, 40, -1, 42, 43, -1, 45, + -1, -1, -1, -1, 287, 288, -1, -1, -1, -1, + -1, -1, 184, -1, -1, -1, -1, -1, 64, -1, + -1, 123, 305, -1, 126, 308, -1, -1, 311, 312, + 313, -1, -1, -1, 41, -1, -1, 44, -1, -1, + -1, -1, -1, -1, -1, 91, -1, 26, -1, -1, + 33, 58, 59, 36, 37, 38, -1, 40, -1, 42, + 43, -1, 45, 42, -1, -1, -1, -1, 47, -1, + 49, -1, -1, -1, -1, -1, -1, 123, -1, -1, + 126, 64, 61, 62, 63, 64, 93, -1, -1, -1, + -1, -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, -1, 107, -1, + -1, 289, 290, 291, 292, 293, -1, -1, 296, 297, + 123, -1, -1, 126, 91, 303, -1, -1, -1, 307, + -1, 309, 310, -1, 256, 257, 258, 259, 260, 261, + -1, 263, 264, 265, -1, -1, -1, 269, -1, -1, + 272, 273, 274, 275, -1, -1, 123, 279, 280, -1, + 282, 283, 284, -1, -1, -1, -1, 289, 290, 291, + 292, 293, -1, -1, 296, 297, -1, -1, -1, -1, + 91, 303, -1, -1, -1, 307, -1, 309, 310, -1, + -1, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 41, -1, -1, 269, -1, -1, -1, -1, -1, -1, + -1, -1, 123, -1, 280, -1, 282, 283, 284, -1, + -1, -1, 63, 289, 290, 291, 292, 293, -1, -1, + 296, 297, -1, -1, -1, -1, -1, 303, -1, -1, + -1, 307, -1, 309, 310, 272, 273, 274, 275, -1, + 91, -1, -1, -1, 257, 258, 259, 260, 261, -1, + 263, 264, 265, -1, -1, -1, 269, 294, 295, -1, + -1, -1, -1, -1, -1, -1, -1, 280, -1, 282, + 283, 284, 123, -1, -1, -1, 289, 290, 291, 292, + 293, -1, -1, 296, 297, -1, -1, -1, -1, -1, + 303, -1, -1, -1, 307, 33, 309, 310, 36, 37, + 38, -1, 40, -1, 42, 43, -1, 45, 285, 286, + 287, 288, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 59, -1, 300, 301, 302, 64, 304, 305, -1, -1, 308, -1, -1, 311, 312, 313, -1, -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, 91, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 64, -1, -1, 123, -1, 285, - 126, -1, -1, 33, -1, -1, 36, 37, 38, -1, - 40, -1, 42, 43, -1, 45, 123, -1, -1, 305, - -1, 91, 308, -1, -1, 311, 312, 313, -1, 59, - -1, -1, -1, -1, 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 123, -1, -1, 126, -1, -1, 33, - -1, 91, 36, 37, 38, -1, 40, -1, 42, 43, - -1, 45, -1, -1, 269, 270, 271, 272, -1, -1, - -1, -1, -1, 283, 284, 285, 286, -1, -1, -1, - 64, -1, -1, -1, -1, -1, 126, 292, 293, -1, - 300, 301, 297, -1, 304, 305, -1, -1, 308, -1, - -1, 311, 312, 313, -1, -1, -1, 91, -1, 41, - -1, -1, 44, -1, -1, 269, 270, 271, 272, -1, - 256, 257, 258, 259, 260, 261, 58, 59, -1, -1, - 266, 63, -1, 269, 270, 271, 272, -1, 292, 123, - 276, 277, 126, 279, 280, 281, 282, -1, -1, -1, - -1, 287, 288, 289, 290, 291, -1, -1, 294, 295, - 296, 93, -1, -1, -1, -1, 302, 303, 285, 286, - -1, 307, -1, 309, 310, -1, -1, 257, 258, 259, - 260, 261, 262, -1, -1, -1, 266, 304, 305, -1, - -1, 308, 91, -1, 311, 312, 313, 277, -1, 279, - 280, 281, 282, -1, -1, -1, -1, 287, 288, 289, - 290, 291, -1, -1, 294, 295, 296, 257, 258, 259, - 260, 261, 302, 303, 123, -1, 266, 307, -1, 309, - 310, -1, -1, -1, -1, -1, -1, 277, -1, 279, - 280, 281, 282, -1, -1, -1, -1, 287, 288, 289, - 290, 291, -1, -1, 294, 295, 296, -1, -1, -1, - -1, -1, 302, 303, -1, -1, -1, 307, 41, 309, - 310, 44, -1, 257, 258, 259, 260, 261, 262, -1, - -1, -1, 266, -1, -1, 58, 59, -1, -1, -1, - 63, -1, -1, 277, -1, 279, 280, 281, 282, -1, - -1, -1, -1, 287, 288, 289, 290, 291, -1, -1, - -1, 295, 296, -1, -1, -1, -1, -1, 302, 303, - 93, -1, -1, 307, 33, 309, 310, 36, 37, 38, - -1, 40, 41, 42, 43, -1, 45, 269, 270, 271, - 272, -1, -1, -1, -1, 91, 278, -1, -1, -1, - -1, -1, -1, -1, -1, 64, -1, -1, -1, -1, - 292, 293, -1, -1, 33, 297, 298, 36, 37, 38, - -1, 40, -1, 42, 43, -1, 45, 123, -1, -1, - -1, -1, 91, -1, 283, 284, 285, 286, -1, -1, - -1, -1, -1, -1, -1, 64, -1, -1, -1, -1, - -1, 41, 301, -1, 44, 304, 305, -1, -1, 308, - -1, 26, 311, 312, 313, -1, -1, 126, 58, 59, - -1, -1, 91, 33, 93, 40, 36, 37, 38, -1, - 40, 46, 42, 43, -1, 45, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 60, 61, 62, 63, 64, - -1, -1, -1, 93, 64, -1, -1, 126, -1, -1, - -1, -1, -1, 33, -1, -1, 36, 37, 38, -1, - 40, 41, 42, 43, -1, 45, -1, -1, -1, -1, - -1, 91, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 106, -1, -1, 64, -1, 269, 270, 271, 272, - -1, -1, -1, 33, -1, 278, 36, 37, 38, -1, - 40, 41, 42, 43, -1, 45, 126, -1, -1, 292, - 293, 91, -1, -1, 297, 298, 299, 300, 301, -1, - -1, -1, -1, -1, 64, -1, -1, 283, 284, 285, - 286, -1, -1, -1, -1, -1, -1, -1, 257, 258, - 259, 260, 261, -1, -1, -1, 126, 266, 304, 305, - -1, 91, 308, -1, -1, 311, 312, 313, 277, -1, - 279, 280, 281, 282, -1, 91, -1, -1, 287, 288, - 289, 290, 291, -1, -1, 294, 295, 296, 257, 258, - 259, 260, 261, 302, 303, -1, 126, 266, 307, -1, - 309, 310, -1, -1, -1, -1, -1, 123, 277, -1, - 279, 280, 281, 282, -1, -1, -1, -1, 287, 288, - 289, 290, 291, -1, -1, 294, 295, 296, -1, 269, - 270, 271, 272, 302, 303, -1, -1, -1, 307, -1, - 309, 310, -1, -1, -1, -1, 256, 257, 258, 259, - 260, 261, 292, 293, -1, -1, 266, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 277, -1, 279, - 280, 281, 282, -1, -1, -1, -1, 287, 288, 289, - 290, 291, -1, -1, 294, 295, 296, 257, 258, 259, - 260, 261, 302, 303, -1, -1, 266, 307, -1, 309, - 310, -1, -1, -1, -1, -1, -1, 277, -1, 279, - 280, 281, 282, -1, -1, -1, -1, 287, 288, 289, - 290, 291, -1, 91, 294, 295, 296, 257, 258, 259, - 260, 261, 302, 303, -1, -1, 266, 307, -1, 309, - 310, -1, -1, -1, -1, -1, -1, 277, -1, 279, - 280, 281, 282, -1, -1, 123, -1, 287, 288, 289, - 290, 291, -1, -1, 294, 295, 296, -1, -1, 285, - 286, -1, 302, 303, -1, -1, -1, 307, 33, 309, - 310, 36, 37, 38, -1, 40, 41, 42, 43, 305, - 45, -1, 308, -1, -1, 311, 312, 313, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 64, - -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, - -1, 36, 37, 38, -1, 40, 41, 42, 43, -1, - 45, -1, -1, -1, -1, -1, 91, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 64, - -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, - -1, 36, 37, 38, -1, 40, -1, 42, 43, -1, - 45, 126, -1, -1, -1, -1, 91, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 64, - -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, - -1, 36, 37, 38, -1, 40, -1, 42, 43, -1, - 45, 126, -1, -1, -1, 283, 91, 285, 286, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 64, - -1, -1, -1, -1, -1, -1, 304, 305, -1, -1, - 308, -1, -1, 311, 312, 313, -1, -1, 123, -1, - -1, 126, -1, -1, -1, -1, 91, -1, -1, -1, - -1, -1, -1, 33, -1, -1, 36, 37, 38, -1, - 40, -1, 42, 43, -1, 45, -1, 25, 26, -1, - -1, -1, -1, -1, -1, -1, 34, -1, -1, -1, - -1, 126, 40, 41, 64, -1, -1, -1, 46, -1, - -1, -1, 257, 258, 259, 260, 261, -1, -1, -1, - -1, 266, 60, 61, 62, 63, 64, -1, -1, -1, - -1, 91, 277, -1, 279, 280, 281, 282, -1, -1, - -1, -1, 287, 288, 289, 290, 291, -1, -1, 294, - 295, 296, 257, 258, 259, 260, 261, 302, 303, -1, - -1, 266, 307, 123, 309, 310, 126, -1, 106, -1, - -1, -1, 277, -1, 279, 280, 281, 282, -1, -1, - -1, -1, 287, 288, 289, 290, 291, -1, -1, 294, - 295, 296, 257, 258, 259, 260, 261, 302, 303, -1, - -1, 266, 307, -1, 309, 310, -1, -1, -1, -1, - -1, -1, 277, -1, 279, 280, 281, 282, -1, -1, - -1, -1, 287, 288, 289, 290, 291, -1, -1, 167, - 295, 296, 257, 258, 259, 260, 261, 302, 303, -1, - -1, 266, 307, 91, 309, 310, -1, -1, -1, -1, - 41, -1, 277, 44, 279, 280, 281, 282, -1, -1, - -1, -1, 287, 288, 289, 290, 291, 58, 59, 294, - 295, 296, -1, -1, -1, 123, -1, 302, 303, -1, - -1, -1, 307, 33, 309, 310, 36, 37, 38, -1, - 40, -1, 42, 43, -1, 45, -1, 257, 258, 259, - 260, 261, 93, -1, -1, -1, 266, -1, -1, -1, - -1, -1, -1, -1, 64, -1, -1, 277, -1, 279, - 280, 281, 282, -1, -1, -1, -1, 287, 288, 289, - 290, 291, -1, -1, 41, 295, 296, 44, -1, -1, - -1, 91, 302, 303, -1, -1, -1, 307, -1, 309, - 310, 58, 59, -1, -1, -1, 63, -1, -1, -1, + -1, 33, -1, 91, 36, 37, 38, -1, 40, -1, + 42, 43, -1, 45, 285, 286, 287, 288, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 126, -1, -1, 41, - -1, -1, 44, -1, 91, -1, 93, -1, -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, -1, 123, -1, -1, -1, - -1, -1, -1, -1, 41, -1, -1, 44, -1, 91, - -1, 93, -1, -1, -1, 283, 284, 285, 286, -1, - -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, - 298, 299, 300, 301, -1, -1, 304, 305, -1, -1, - 308, 123, -1, 311, 312, 313, -1, -1, -1, 41, - -1, -1, 44, -1, 91, -1, 93, -1, 269, 270, - 271, 272, -1, -1, -1, -1, 58, 59, -1, -1, - -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 292, 293, -1, -1, -1, 123, 257, 258, 259, - 260, 261, -1, -1, -1, -1, 266, -1, -1, -1, - -1, 93, -1, -1, -1, -1, -1, 277, -1, 279, - 280, 281, 282, -1, -1, -1, -1, 287, 288, 289, - 290, 291, -1, -1, -1, 295, 296, -1, -1, -1, - 41, 123, 302, 303, -1, -1, -1, 307, -1, 309, - 310, -1, 269, 270, 271, 272, -1, 58, 59, -1, - -1, 278, 63, -1, -1, -1, 283, 284, 285, 286, - -1, -1, -1, -1, -1, 292, 293, -1, -1, -1, - 297, 298, 299, 300, 301, -1, 41, 304, 305, 44, - 91, 308, 93, -1, 311, 312, 313, 269, 270, 271, - 272, -1, -1, 58, 59, -1, 278, -1, 63, -1, - -1, 283, 284, 285, 286, -1, -1, -1, -1, -1, - 292, 293, 123, -1, -1, 297, 298, 299, 300, 301, - -1, 41, 304, 305, 44, -1, 308, -1, 93, 311, - 312, 313, 269, 270, 271, 272, -1, -1, 58, 59, - -1, 278, -1, 63, -1, -1, 283, 284, 285, 286, - -1, -1, -1, -1, -1, 292, 293, -1, 123, -1, - 297, 298, 299, 300, 301, -1, 41, 304, 305, 44, - -1, 308, -1, 93, 311, 312, 313, 269, 270, 271, - 272, -1, -1, 58, 59, -1, 278, -1, 63, -1, - -1, 283, 284, 285, 286, -1, -1, -1, -1, -1, - 292, 293, -1, 123, -1, 297, 298, 299, 300, 301, - -1, -1, 304, 305, 41, -1, 308, -1, 93, 311, - 312, 313, -1, -1, 41, -1, -1, 44, -1, -1, - -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, - -1, 58, 59, -1, -1, -1, -1, -1, 123, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 269, 270, - 271, 272, 41, -1, 91, 44, 93, 278, -1, -1, - -1, -1, 283, 284, 285, 286, 93, -1, -1, 58, - 59, 292, 293, -1, 63, -1, 297, 298, 299, 300, - 301, -1, -1, 304, 305, -1, 123, 308, -1, -1, - 311, 312, 313, -1, 269, 270, 271, 272, 41, -1, - -1, 44, -1, 278, 93, -1, -1, -1, 283, 284, - 285, 286, -1, -1, -1, 58, 59, 292, 293, -1, - 63, -1, 297, 298, 299, 300, 301, -1, -1, 304, - 305, -1, -1, 308, 123, -1, 311, 312, 313, 269, - 270, 271, 272, 41, -1, -1, 44, -1, 278, -1, - 93, -1, -1, 283, 284, 285, 286, -1, -1, -1, - 58, 59, 292, 293, -1, 63, -1, 297, 298, 299, - 300, 301, -1, -1, 304, 305, -1, -1, 308, -1, - -1, 311, 312, 313, 269, 270, 271, 272, 41, -1, - -1, 44, -1, 278, -1, 93, -1, -1, 283, 284, - 285, 286, -1, -1, -1, 58, 59, 292, 293, -1, - 63, -1, 297, 298, 299, 300, 301, -1, -1, 304, + -1, -1, 64, 304, 305, -1, -1, 308, 126, -1, + 311, 312, 313, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 33, -1, 91, + 36, 37, 38, -1, 40, 41, 42, 43, -1, 45, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 281, -1, -1, -1, 285, 286, 287, 288, 64, -1, + -1, 123, -1, -1, 126, -1, -1, 298, 299, 300, + 301, 302, -1, 304, 305, -1, -1, 308, -1, -1, + 311, 312, 313, -1, -1, 91, -1, -1, -1, -1, + 33, -1, -1, 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, -1, -1, + 126, 64, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, + 258, 259, 260, 261, -1, 263, 264, 265, 91, -1, + 93, 269, -1, -1, -1, 91, -1, -1, -1, -1, + -1, -1, 280, -1, 282, 283, 284, -1, -1, -1, + -1, 289, 290, 291, 292, 293, -1, 63, 296, 297, + -1, -1, -1, 126, -1, 303, -1, 123, -1, 307, + -1, 309, 310, -1, -1, 257, 258, 259, 260, 261, + -1, 263, 264, 265, -1, 91, -1, 269, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 280, -1, + 282, 283, 284, -1, -1, -1, -1, 289, 290, 291, + 292, 293, -1, -1, 296, 297, 91, 123, -1, -1, + -1, 303, -1, 41, -1, 307, 44, 309, 310, -1, + -1, 257, 258, 259, 260, 261, -1, 263, 264, 265, + 58, 59, -1, 269, -1, 63, -1, -1, 123, -1, + -1, -1, -1, -1, 280, -1, 282, 283, 284, -1, + -1, -1, -1, 289, 290, 291, 292, 293, -1, -1, + 296, 297, -1, -1, -1, 93, -1, 303, -1, -1, + -1, 307, -1, 309, 310, -1, -1, -1, -1, -1, + -1, -1, -1, -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, -1, -1, -1, -1, 289, 290, 291, 292, + 293, 287, 288, 296, 297, 64, -1, -1, -1, -1, + 303, -1, -1, -1, 307, -1, 309, 310, 304, 305, + -1, -1, 308, -1, -1, 311, 312, 313, -1, -1, + 33, -1, 91, 36, 37, 38, -1, 40, 41, 42, + 43, -1, 45, -1, -1, 281, -1, -1, -1, 285, + 286, 287, 288, -1, -1, -1, -1, -1, -1, -1, + -1, 64, 298, 299, 300, 301, 302, 126, 304, 305, + -1, -1, 308, -1, -1, 311, 312, 313, -1, -1, + 285, -1, 287, 288, -1, -1, 33, -1, 91, 36, + 37, 38, -1, 40, 41, 42, 43, -1, 45, 304, 305, -1, -1, 308, -1, -1, 311, 312, 313, -1, - -1, -1, 269, 270, 271, 272, 41, -1, -1, 44, - 93, 278, 269, 270, 271, 272, 283, 284, 285, 286, - -1, -1, -1, 58, 59, 292, 293, -1, 63, -1, - 297, 298, 299, 300, 301, 292, 293, 304, 305, -1, - -1, 308, -1, -1, 311, 312, 313, -1, -1, -1, - 269, 270, 271, 272, 41, -1, -1, -1, 93, 278, - -1, -1, -1, -1, 283, 284, 285, 286, -1, -1, - -1, -1, -1, 292, 293, -1, 63, -1, 297, 298, - 299, 300, 301, -1, -1, 304, 305, -1, -1, 308, - -1, -1, 311, 312, 313, -1, 269, 270, 271, 272, - 41, -1, -1, 44, 91, 278, -1, -1, -1, -1, - 283, 284, 285, 286, -1, -1, -1, 58, 59, 292, - 293, -1, 63, -1, 297, 298, 299, 300, 301, -1, - -1, 304, 305, -1, -1, 308, 123, -1, 311, 312, - 313, 269, 270, 271, 272, 41, -1, -1, 44, -1, - 278, -1, 93, -1, -1, 283, 284, 285, 286, -1, - -1, -1, 58, 59, 292, 293, -1, 63, -1, 297, - 298, 299, 300, 301, -1, -1, 304, 305, -1, -1, - 308, -1, -1, 311, 312, 313, 269, 270, 271, 272, - 41, -1, -1, 44, -1, 278, -1, 93, -1, -1, - 283, 284, 285, 286, -1, -1, -1, 58, 59, 292, - 293, -1, 63, -1, 297, 298, 299, 300, 301, -1, + -1, -1, -1, -1, -1, -1, -1, 64, -1, -1, + -1, -1, -1, 126, 272, 273, 274, 275, -1, -1, + -1, -1, -1, 281, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 91, -1, 294, 295, -1, 33, + 298, 299, 36, 37, 38, -1, 40, 41, 42, 43, + -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 126, + 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -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, 282, 283, 284, -1, -1, -1, -1, + 289, 290, 291, 292, 293, -1, -1, 296, 297, -1, + -1, -1, 126, -1, 303, -1, 41, -1, 307, 44, + 309, 310, -1, -1, 257, 258, 259, 260, 261, -1, + 263, 264, 265, 58, 59, -1, 269, -1, 63, -1, + -1, -1, -1, -1, -1, -1, -1, 280, -1, 282, + 283, 284, -1, -1, -1, -1, 289, 290, 291, 292, + 293, -1, -1, 296, 297, -1, 91, -1, 93, -1, + 303, -1, 41, -1, 307, 44, 309, 310, -1, -1, + 257, 258, 259, 260, 261, -1, 263, 264, 265, 58, + 59, -1, 269, -1, 63, -1, -1, -1, 123, -1, + -1, -1, -1, 280, -1, 282, 283, 284, -1, -1, + -1, -1, 289, 290, 291, 292, 293, -1, -1, 296, + 297, -1, 91, -1, 93, -1, 303, -1, -1, -1, + 307, -1, 309, 310, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 257, 258, 259, 260, 261, -1, 263, + 264, 265, -1, 33, 123, 269, 36, 37, 38, -1, + 40, 41, 42, 43, -1, 45, 280, -1, 282, 283, + 284, -1, -1, -1, -1, 289, 290, 291, 292, 293, + -1, -1, 296, 297, 64, -1, 25, 26, -1, 303, + -1, -1, -1, 307, -1, 309, 310, -1, 37, -1, + -1, -1, -1, 42, 43, -1, -1, -1, 47, 33, + 49, 91, 36, 37, 38, -1, 40, -1, 42, 43, + -1, 45, 61, 62, 63, 64, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 64, -1, -1, -1, -1, -1, 126, 272, 273, 274, + 275, -1, -1, -1, -1, -1, 281, -1, -1, -1, + 285, 286, 287, 288, -1, -1, -1, 91, 107, 294, + 295, -1, -1, 298, 299, 300, 301, 302, -1, 304, + 305, -1, 41, 308, -1, 44, 311, 312, 313, -1, + -1, -1, -1, 41, -1, -1, 44, -1, -1, 58, + 59, -1, 126, 272, 273, 274, 275, -1, -1, -1, + 58, 59, 281, -1, -1, 63, 285, 286, 287, 288, + -1, -1, -1, -1, -1, 294, 295, -1, 167, 298, + 299, 300, 301, 302, 93, 304, 305, -1, 41, 308, + -1, 44, 311, 312, 313, 93, -1, -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, -1, 123, -1, 257, 258, 259, + 260, 261, -1, 263, 264, 265, -1, -1, 91, 269, + 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 280, -1, 282, 283, 284, -1, -1, -1, -1, 289, + 290, 291, 292, 293, -1, -1, 296, 297, -1, -1, + -1, -1, -1, 303, -1, 41, -1, 307, 44, 309, + 310, -1, -1, 257, 258, 259, 260, 261, -1, 263, + 264, 265, 58, 59, -1, 269, -1, 63, -1, -1, + -1, -1, -1, -1, -1, -1, 280, -1, 282, 283, + 284, -1, -1, -1, -1, 289, 290, 291, 292, 293, + -1, -1, 296, 297, -1, -1, -1, 93, -1, 303, + 41, -1, -1, 307, -1, 309, 310, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, + -1, -1, 63, -1, -1, -1, -1, 123, -1, -1, + -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, + -1, -1, -1, -1, 272, 273, 274, 275, -1, -1, + 91, -1, 93, 281, -1, 294, 295, 285, 286, 287, + 288, -1, -1, -1, -1, -1, 294, 295, -1, -1, + 298, 299, 300, 301, 302, -1, 304, 305, -1, -1, + 308, -1, 123, 311, 312, 313, -1, -1, -1, 272, + 273, 274, 275, -1, -1, -1, -1, -1, 281, -1, + -1, -1, 285, 286, 287, 288, -1, -1, -1, -1, + -1, 294, 295, -1, 41, 298, 299, 300, 301, 302, -1, 304, 305, -1, -1, 308, -1, -1, 311, 312, - 313, -1, -1, -1, 269, 270, 271, 272, 41, -1, - -1, 44, 93, 278, -1, -1, -1, -1, 283, 284, - 285, 286, -1, -1, -1, 58, 59, 292, 293, -1, - 63, -1, 297, 298, 299, 300, 301, -1, -1, 304, - 305, -1, -1, 308, -1, -1, 311, 312, 313, -1, - -1, -1, -1, 41, -1, -1, 44, -1, -1, -1, - 93, 278, -1, -1, -1, -1, 283, 284, 285, 286, + 313, 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, -1, + -1, -1, -1, -1, 91, -1, 93, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, + -1, -1, -1, -1, -1, 281, -1, -1, -1, 285, + 286, 287, 288, -1, -1, -1, 123, -1, 294, 295, + -1, -1, 298, 299, 300, 301, 302, -1, 304, 305, + 41, -1, 308, 44, -1, 311, 312, 313, -1, -1, + -1, 41, -1, -1, 44, -1, -1, 58, 59, -1, + -1, 272, 273, 274, 275, -1, -1, -1, 58, 59, + 281, -1, -1, 63, 285, 286, 287, 288, -1, -1, + -1, -1, -1, 294, 295, -1, -1, 298, 299, 300, + 301, 302, 93, 304, 305, -1, -1, 308, -1, -1, + 311, 312, 313, 93, 41, -1, -1, 44, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, + -1, -1, -1, 123, -1, -1, -1, -1, -1, -1, + -1, -1, -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, -1, -1, -1, -1, 272, 273, 274, 275, -1, + -1, -1, -1, -1, 281, -1, 123, -1, 285, 286, + 287, 288, -1, -1, -1, 41, -1, 294, 295, 93, + -1, 298, 299, 300, 301, 302, -1, 304, 305, -1, + -1, 308, 58, 59, 311, 312, 313, 63, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 123, + -1, -1, -1, -1, -1, -1, -1, 41, -1, -1, + 44, -1, -1, -1, -1, 91, -1, 93, -1, -1, + -1, -1, -1, -1, 58, 59, -1, -1, -1, 63, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 272, 273, 274, 275, -1, -1, 123, -1, -1, + -1, -1, 272, 273, 274, 275, -1, -1, -1, 93, + -1, 281, -1, 294, 295, 285, 286, 287, 288, -1, + -1, -1, -1, -1, 294, 295, -1, -1, 298, 299, + 300, 301, 302, -1, 304, 305, -1, -1, 308, -1, + -1, 311, 312, 313, -1, 41, -1, -1, 44, -1, + -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, + -1, -1, 58, 59, 281, -1, -1, 63, 285, 286, + 287, 288, -1, -1, -1, -1, -1, 294, 295, -1, + -1, 298, 299, 300, 301, 302, -1, 304, 305, -1, + -1, 308, -1, -1, 311, 312, 313, 93, 272, 273, + 274, 275, -1, -1, -1, 41, -1, 281, 44, -1, + -1, 285, 286, 287, 288, -1, -1, -1, -1, -1, + 294, 295, 58, 59, 298, 299, 300, 301, 302, -1, + 304, 305, -1, -1, 308, -1, -1, 311, 312, 313, + -1, -1, -1, -1, -1, -1, 272, 273, 274, 275, + -1, -1, -1, -1, -1, 281, -1, 93, -1, 285, + 286, 287, 288, -1, -1, -1, -1, -1, 294, 295, + -1, 63, 298, 299, 300, 301, 302, -1, 304, 305, + -1, -1, 308, -1, -1, 311, 312, 313, 272, 273, + 274, 275, -1, -1, -1, -1, -1, 281, -1, 91, + -1, 285, 286, 287, 288, -1, -1, -1, -1, -1, + 294, 295, -1, -1, 298, 299, 300, 301, 302, 41, + 304, 305, 44, -1, 308, -1, -1, 311, 312, 313, + -1, 123, -1, -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, -1, -1, + -1, -1, -1, -1, -1, -1, 41, -1, -1, 44, + -1, 93, -1, -1, -1, -1, 272, 273, 274, 275, + -1, -1, -1, 58, 59, 281, -1, -1, 63, 285, + 286, 287, 288, -1, -1, -1, -1, -1, 294, 295, + -1, -1, 298, 299, 300, 301, 302, -1, 304, 305, + 41, -1, 308, 44, -1, 311, 312, 313, 93, -1, + -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, + -1, -1, 63, -1, -1, -1, 272, 273, 274, 275, + -1, -1, -1, -1, -1, -1, -1, 41, -1, -1, + 44, -1, -1, -1, -1, -1, -1, -1, 294, 295, + -1, -1, 93, -1, 58, 59, -1, -1, -1, 63, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 41, -1, -1, 44, -1, 281, + -1, -1, -1, 285, 286, 287, 288, -1, -1, 93, + -1, 58, 59, -1, -1, -1, 63, 299, 300, 301, + 302, -1, 304, 305, -1, -1, 308, -1, -1, 311, + 312, 313, 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, + 272, 273, 274, 275, -1, -1, -1, -1, -1, 281, + -1, -1, -1, 285, 286, 287, 288, -1, -1, -1, + -1, -1, 294, 295, 93, -1, 298, 299, 300, 301, + 302, -1, 304, 305, -1, -1, 308, -1, -1, 311, + 312, 313, -1, -1, -1, -1, -1, 272, 273, 274, + 275, -1, -1, -1, -1, -1, 281, -1, -1, -1, + 285, 286, 287, 288, -1, -1, -1, -1, -1, 294, + 295, -1, -1, 298, 299, 300, 301, 302, -1, 304, + 305, 41, -1, 308, 44, -1, 311, 312, 313, -1, + -1, 272, 273, 274, 275, -1, -1, -1, 58, 59, + 281, -1, -1, 63, 285, 286, 287, 288, -1, -1, + -1, -1, -1, 294, 295, -1, -1, 298, 299, 300, + 301, 302, -1, 304, 305, -1, -1, 308, 272, 273, + 274, 275, -1, 93, -1, -1, -1, 281, -1, -1, + -1, 285, 286, 287, 288, -1, -1, -1, -1, -1, + 294, 295, -1, -1, 298, 299, 300, 301, 302, -1, + 304, 305, -1, -1, 308, 272, 273, 274, 275, -1, + -1, -1, -1, -1, 281, -1, -1, -1, 285, 286, + 287, 288, -1, -1, -1, -1, -1, 294, 295, -1, + -1, 298, 299, 300, 301, 302, -1, 304, 305, -1, + -1, -1, -1, 272, 273, 274, 275, -1, -1, -1, + -1, -1, 281, -1, -1, -1, 285, 286, 287, 288, + 41, -1, -1, 44, -1, 294, 295, -1, -1, 298, + 299, 300, 301, 302, -1, 304, 305, 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, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 93, 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, + 41, -1, -1, 44, -1, -1, -1, -1, 93, -1, + -1, -1, 272, 273, 274, 275, -1, 58, 59, -1, + -1, 281, 63, -1, -1, 285, 286, 287, 288, -1, + -1, -1, -1, -1, 294, 295, -1, -1, 298, 299, + 300, 301, 302, 41, 304, 305, 44, -1, -1, -1, + -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, - 297, 298, 299, 300, 301, -1, -1, 304, 305, -1, - -1, 308, -1, -1, 311, 312, 313, -1, 269, 270, - 271, 272, -1, 58, -1, 93, -1, 278, 63, -1, - -1, -1, 283, 284, 285, 286, -1, -1, -1, -1, - -1, 292, 293, -1, -1, -1, 297, 298, 299, 300, - 301, -1, 41, 304, 305, 44, 91, 308, -1, -1, - -1, -1, -1, 269, 270, 271, 272, -1, -1, 58, - 59, -1, 278, -1, 63, -1, -1, 283, 284, 285, - 286, -1, -1, -1, -1, -1, 292, 293, 123, -1, - -1, 297, 298, 299, 300, 301, -1, 41, 304, 305, - 44, -1, 308, -1, 93, -1, -1, -1, 269, 270, - 271, 272, -1, -1, 58, 59, -1, 278, -1, 63, - -1, -1, 283, 284, 285, 286, -1, -1, -1, -1, - -1, 292, 293, -1, -1, -1, 297, 298, 299, 300, - 301, -1, -1, 304, 305, 41, -1, -1, 44, 93, - -1, -1, -1, -1, -1, -1, 269, 270, 271, 272, - -1, -1, 58, 59, -1, 278, -1, 63, -1, -1, - 283, 284, 285, 286, -1, -1, -1, -1, -1, 292, - 293, -1, -1, -1, 297, 298, 299, 300, 301, -1, - 41, 304, 305, 44, -1, -1, -1, 93, -1, -1, - -1, 269, 270, 271, 272, -1, -1, 58, 59, -1, - 278, -1, 63, -1, -1, 283, 284, 285, 286, -1, - -1, -1, -1, -1, 292, 293, -1, -1, -1, 297, - 298, 299, 300, 301, -1, 41, 304, 305, 44, -1, - -1, -1, 93, 278, -1, -1, -1, -1, 283, 284, - 285, 286, 58, 59, -1, -1, -1, 63, -1, -1, - -1, -1, 297, 298, 299, 300, 301, -1, -1, 304, - 305, -1, -1, 308, -1, -1, 311, 312, 313, -1, - 269, 270, 271, 272, -1, -1, -1, 93, -1, 278, - 63, -1, -1, -1, 283, 284, 285, 286, -1, -1, - -1, -1, -1, 292, 293, -1, -1, -1, 297, 298, - 299, 300, 301, -1, 41, 304, 305, 44, 91, -1, - -1, -1, -1, -1, -1, 269, 270, 271, 272, -1, - -1, 58, 59, -1, 278, -1, 63, -1, -1, 283, - 284, 285, 286, -1, -1, -1, -1, -1, 292, 293, - 123, -1, -1, 297, 298, 299, 300, 301, -1, -1, - 304, 305, 41, -1, -1, 44, 93, -1, -1, -1, - -1, -1, -1, 269, 270, 271, 272, -1, -1, 58, - 59, -1, 278, -1, 63, -1, -1, 283, 284, 285, - 286, -1, -1, -1, -1, -1, 292, 293, -1, -1, - -1, 297, 298, 299, 300, 301, -1, 41, 304, 305, - 44, -1, -1, -1, 93, -1, -1, -1, 269, 270, - 271, 272, -1, -1, 58, 59, -1, 278, -1, 63, - -1, -1, 283, 284, 285, 286, -1, -1, -1, -1, - -1, 292, 293, -1, -1, -1, 297, 298, 299, 300, - 301, -1, 41, 304, 305, 44, -1, -1, -1, 93, - -1, -1, -1, 269, 270, 271, 272, -1, -1, 58, - 59, -1, 278, -1, 63, -1, -1, 283, 284, 285, - 286, -1, -1, -1, -1, 41, 292, 293, 44, -1, - -1, 297, 298, 299, 300, 301, -1, -1, 304, -1, - -1, -1, 58, 59, 93, 278, -1, 63, -1, -1, - 283, 284, 285, 286, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 297, 298, 299, 300, 301, -1, - 41, 304, 305, 44, -1, 308, -1, 93, 311, 312, - 313, -1, 269, 270, 271, 272, 41, 58, 59, 44, - -1, 278, 63, -1, -1, -1, 283, 284, -1, 286, - -1, -1, -1, 58, 59, 292, 293, -1, 63, -1, - 297, 298, 299, 300, 301, -1, -1, 304, 41, -1, - -1, 44, 93, -1, -1, -1, -1, -1, -1, -1, - 269, 270, 271, 272, 41, 58, 59, 44, 93, 278, - 63, -1, -1, -1, 283, 284, -1, -1, -1, -1, - -1, 58, 59, 292, 293, -1, 63, -1, 297, 298, - 299, 300, 301, -1, -1, 304, -1, -1, -1, -1, - 93, -1, -1, -1, -1, 269, 270, 271, 272, 41, - -1, -1, 44, -1, 278, -1, 93, -1, -1, 283, - 284, -1, -1, -1, -1, -1, 58, 59, 292, 293, - -1, 63, -1, 297, 298, 299, 300, 301, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, - 269, 270, 271, 272, -1, -1, -1, -1, -1, 278, - -1, 93, -1, -1, 283, 284, -1, -1, -1, -1, - -1, -1, -1, 292, 293, -1, 91, -1, 297, 298, - 299, 300, 301, 269, 270, 271, 272, -1, -1, -1, - -1, -1, 278, -1, -1, -1, -1, 283, 284, -1, - -1, -1, -1, -1, -1, -1, 292, 293, 123, -1, - -1, 297, 298, 299, 300, 301, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 269, 270, - 271, 272, -1, -1, -1, -1, -1, 278, -1, -1, - -1, -1, 283, 284, 269, 270, 271, 272, -1, -1, - -1, 292, 293, 278, -1, -1, 297, 298, 299, 300, - 301, -1, -1, -1, -1, -1, -1, 292, 293, -1, - -1, -1, 297, 298, 299, 300, 269, 270, 271, 272, - -1, -1, -1, -1, -1, 278, -1, -1, -1, -1, - -1, 284, 269, 270, 271, 272, -1, -1, -1, 292, - 293, 278, -1, -1, 297, 298, 299, 300, 301, -1, - -1, -1, -1, -1, -1, 292, 293, -1, -1, -1, - 297, 298, 299, 300, 301, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 35, -1, 269, 270, 271, - 272, 41, 42, -1, -1, -1, 278, -1, 48, 49, - 50, 51, 52, 53, 54, -1, -1, 57, 58, -1, - 292, 293, -1, 278, -1, 297, 298, 299, 283, 284, - 285, 286, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 298, 299, 300, 301, -1, -1, 304, - 305, 91, -1, 308, -1, -1, 311, 312, 313, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, + -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 93, 58, 59, -1, -1, + -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 41, -1, -1, 44, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 93, -1, 58, 59, -1, -1, -1, 63, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 272, 273, 274, 275, -1, -1, -1, -1, -1, + 281, -1, -1, -1, 285, 286, 287, 288, 93, -1, + -1, -1, -1, 294, 295, -1, -1, 298, 299, 300, + 301, 302, -1, 304, 305, -1, -1, 272, 273, 274, + 275, -1, -1, -1, -1, -1, 281, -1, -1, -1, + 285, 286, 287, 288, 41, -1, -1, 44, -1, 294, + 295, -1, -1, 298, 299, 300, 301, 302, -1, 304, + 305, 58, 59, -1, -1, -1, 63, -1, -1, -1, + -1, 272, 273, 274, 275, -1, -1, -1, -1, -1, + 281, -1, -1, -1, 285, 286, 287, 288, -1, -1, + -1, -1, -1, 294, 295, -1, 93, 298, 299, 300, + 301, 302, 41, 304, 305, 44, -1, -1, -1, -1, + -1, -1, -1, -1, 272, 273, 274, 275, -1, 58, + 59, -1, -1, 281, 63, -1, -1, 285, 286, 287, + 288, -1, -1, -1, -1, -1, 294, 295, -1, -1, + 298, 299, 300, 301, 302, -1, 304, 305, -1, -1, + 272, 273, 274, 275, 93, -1, -1, -1, -1, 281, + -1, -1, -1, 285, 286, 287, 288, -1, -1, -1, + -1, -1, 294, 295, -1, -1, 298, 299, 300, 301, + 302, 41, 304, -1, 44, -1, -1, 272, 273, 274, + 275, -1, -1, -1, -1, -1, 281, -1, 58, 59, + 285, 286, -1, 63, -1, -1, -1, -1, -1, 294, + 295, -1, -1, 298, 299, 300, 301, 302, 41, 304, + -1, 44, -1, -1, -1, -1, -1, -1, 41, -1, + -1, 44, -1, 93, -1, 58, 59, -1, -1, -1, + 63, -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, -1, 272, 273, 274, 275, -1, + 93, 58, 59, -1, 281, -1, 63, -1, 285, 286, + -1, -1, -1, -1, -1, -1, 41, 294, 295, 44, + -1, 298, 299, 300, 301, 302, 41, -1, -1, 44, + -1, -1, -1, 58, 59, -1, 93, -1, 63, -1, + -1, -1, -1, 58, 59, -1, -1, -1, 63, -1, + -1, -1, -1, 272, 273, 274, 275, -1, -1, 58, + -1, -1, 281, -1, 63, -1, 285, 286, 93, -1, + -1, -1, -1, -1, -1, 294, 295, -1, 93, 298, + 299, 300, 301, 302, -1, -1, -1, -1, -1, -1, + -1, -1, 91, -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, 123, -1, -1, -1, -1, -1, + -1, -1, 272, 273, 274, 275, -1, -1, -1, -1, + -1, 281, -1, -1, -1, 285, 286, -1, -1, -1, + -1, -1, -1, -1, 294, 295, -1, -1, 298, 299, + 300, 301, 302, -1, -1, -1, -1, -1, -1, 272, + 273, 274, 275, -1, -1, -1, -1, -1, 281, 272, + 273, 274, 275, 286, -1, -1, -1, -1, 281, -1, + -1, 294, 295, -1, -1, 298, 299, 300, 301, 302, + -1, 294, 295, -1, -1, 298, 299, 300, 301, 302, + -1, -1, -1, -1, -1, 272, 273, 274, 275, -1, + -1, -1, -1, -1, 281, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 294, 295, -1, + -1, 298, 299, 300, 301, 302, -1, 272, 273, 274, + 275, -1, -1, -1, -1, -1, 281, 272, 273, 274, + 275, -1, -1, -1, -1, -1, 281, -1, -1, 294, + 295, -1, -1, 298, 299, 300, 301, -1, -1, 294, + 295, -1, 281, 298, 299, 300, 285, 286, 287, 288, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 298, + 299, 300, 301, 302, -1, 304, 305, 30, -1, 308, + -1, -1, 311, 312, 313, 38, -1, -1, -1, -1, + 43, 44, -1, -1, -1, -1, -1, 50, 51, 52, + 53, 54, 55, -1, -1, 58, 59, -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, 90, -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, 143, -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, -1, -1, -1, -1, -1, -1, + 143, -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, -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, @@ -1021,10 +1107,11 @@ dEXT short yycheck[] = { 13, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 281, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 284, }; #define YYFINAL 1 #ifndef YYDEBUG @@ -1041,13 +1128,13 @@ dEXT char * yyname[] = { 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,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,"WORD","METHOD","FUNCMETH","THING", -"PMFUNC","PRIVATEREF","LABEL","FORMAT","SUB","ANONSUB","PACKAGE","USE","WHILE", -"UNTIL","IF","UNLESS","ELSE","ELSIF","CONTINUE","FOR","LOOPEX","DOTDOT","FUNC0", -"FUNC1","FUNC","FUNC0SUB","RELOP","EQOP","MULOP","ADDOP","DOLSHARP","DO", -"LOCAL","HASHBRACK","NOAMP","OROP","ANDOP","NOTOP","LSTOP","LSTOPSUB", -"ASSIGNOP","OROR","ANDAND","BITOROP","BITANDOP","UNIOP","UNIOPSUB","SHIFTOP", -"MATCHOP","UMINUS","REFGEN","POWOP","PREINC","PREDEC","POSTINC","POSTDEC", -"ARROW", +"PMFUNC","PRIVATEREF","FUNC0SUB","UNIOPSUB","LSTOPSUB","LABEL","FORMAT","SUB", +"ANONSUB","PACKAGE","USE","WHILE","UNTIL","IF","UNLESS","ELSE","ELSIF", +"CONTINUE","FOR","LOOPEX","DOTDOT","FUNC0","FUNC1","FUNC","RELOP","EQOP", +"MULOP","ADDOP","DOLSHARP","DO","LOCAL","HASHBRACK","NOAMP","OROP","ANDOP", +"NOTOP","LSTOP","ASSIGNOP","OROR","ANDAND","BITOROP","BITANDOP","UNIOP", +"SHIFTOP","MATCHOP","UMINUS","REFGEN","POWOP","PREINC","PREDEC","POSTINC", +"POSTDEC","ARROW", }; dEXT char * yyrule[] = { "$accept : prog", @@ -1104,10 +1191,9 @@ dEXT char * yyrule[] = { "startsub :", "package : PACKAGE WORD ';'", "package : PACKAGE ';'", -"use : USE WORD listexpr ';'", +"use : USE startsub WORD listexpr ';'", "expr : expr ANDOP expr", "expr : expr OROP expr", -"expr : NOTOP expr", "expr : argexpr", "argexpr : argexpr ','", "argexpr : argexpr ',' term", @@ -1154,6 +1240,7 @@ dEXT char * yyrule[] = { "term : HASHBRACK ';' '}'", "term : ANONSUB startsub proto block", "term : scalar", +"term : star '{' expr ';' '}'", "term : star", "term : scalar '[' expr ']'", "term : term ARROW '[' expr ']'", @@ -1181,6 +1268,7 @@ dEXT char * yyrule[] = { "term : DO scalar '(' expr ')'", "term : LOOPEX", "term : LOOPEX term", +"term : NOTOP argexpr", "term : UNIOP", "term : UNIOP block", "term : UNIOP term", @@ -1231,9 +1319,9 @@ dEXT int yyerrflag; dEXT int yychar; dEXT YYSTYPE yyval; dEXT YYSTYPE yylval; -#line 562 "perly.y" +#line 572 "perly.y" /* PROGRAM */ -#line 1307 "y.tab.c" +#line 1394 "y_tab.c" #define YYABORT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab @@ -1458,7 +1546,7 @@ yyreduce: switch (yyn) { case 1: -#line 83 "perly.y" +#line 84 "perly.y" { #if defined(YYDEBUG) && defined(DEBUGGING) yydebug = (debug & 1); @@ -1467,38 +1555,38 @@ case 1: } break; case 2: -#line 90 "perly.y" +#line 91 "perly.y" { newPROG(yyvsp[0].opval); } break; case 3: -#line 94 "perly.y" +#line 95 "perly.y" { yyval.opval = block_end(yyvsp[-3].ival,yyvsp[-2].ival,yyvsp[-1].opval); } break; case 4: -#line 98 "perly.y" +#line 99 "perly.y" { yyval.ival = block_start(); } break; case 5: -#line 102 "perly.y" +#line 103 "perly.y" { yyval.opval = Nullop; } break; case 6: -#line 104 "perly.y" +#line 105 "perly.y" { yyval.opval = yyvsp[-1].opval; } break; case 7: -#line 106 "perly.y" +#line 107 "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; } break; case 8: -#line 113 "perly.y" +#line 114 "perly.y" { yyval.opval = newSTATEOP(0, yyvsp[-1].pval, yyvsp[0].opval); } break; case 10: -#line 116 "perly.y" +#line 117 "perly.y" { if (yyvsp[-1].pval != Nullch) { yyval.opval = newSTATEOP(0, yyvsp[-1].pval, newOP(OP_NULL, 0)); } @@ -1509,120 +1597,120 @@ case 10: expect = XSTATE; } break; case 11: -#line 125 "perly.y" +#line 126 "perly.y" { yyval.opval = newSTATEOP(0, yyvsp[-2].pval, yyvsp[-1].opval); expect = XSTATE; } break; case 12: -#line 130 "perly.y" +#line 131 "perly.y" { yyval.opval = Nullop; } break; case 13: -#line 132 "perly.y" +#line 133 "perly.y" { yyval.opval = yyvsp[0].opval; } break; case 14: -#line 134 "perly.y" +#line 135 "perly.y" { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[0].opval, yyvsp[-2].opval); } break; case 15: -#line 136 "perly.y" +#line 137 "perly.y" { yyval.opval = newLOGOP(OP_OR, 0, yyvsp[0].opval, yyvsp[-2].opval); } break; case 16: -#line 138 "perly.y" +#line 139 "perly.y" { yyval.opval = newLOOPOP(OPf_PARENS, 1, scalar(yyvsp[0].opval), yyvsp[-2].opval); } break; case 17: -#line 140 "perly.y" +#line 141 "perly.y" { yyval.opval = newLOOPOP(OPf_PARENS, 1, invert(scalar(yyvsp[0].opval)), yyvsp[-2].opval);} break; case 18: -#line 144 "perly.y" +#line 145 "perly.y" { yyval.opval = Nullop; } break; case 19: -#line 146 "perly.y" +#line 147 "perly.y" { yyval.opval = scope(yyvsp[0].opval); } break; case 20: -#line 148 "perly.y" +#line 149 "perly.y" { copline = yyvsp[-5].ival; yyval.opval = newSTATEOP(0, 0, newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval)); hints |= HINT_BLOCK_SCOPE; } break; case 21: -#line 155 "perly.y" +#line 156 "perly.y" { copline = yyvsp[-5].ival; yyval.opval = newCONDOP(0, yyvsp[-3].opval, scope(yyvsp[-1].opval), yyvsp[0].opval); } break; case 22: -#line 158 "perly.y" +#line 159 "perly.y" { copline = yyvsp[-5].ival; yyval.opval = newCONDOP(0, invert(scalar(yyvsp[-3].opval)), scope(yyvsp[-1].opval), yyvsp[0].opval); } break; case 23: -#line 162 "perly.y" +#line 163 "perly.y" { copline = yyvsp[-3].ival; deprecate("if BLOCK BLOCK"); yyval.opval = newCONDOP(0, scope(yyvsp[-2].opval), scope(yyvsp[-1].opval), yyvsp[0].opval); } break; case 24: -#line 166 "perly.y" +#line 167 "perly.y" { copline = yyvsp[-3].ival; deprecate("unless BLOCK BLOCK"); yyval.opval = newCONDOP(0, invert(scalar(scope(yyvsp[-2].opval))), scope(yyvsp[-1].opval), yyvsp[0].opval); } break; case 25: -#line 173 "perly.y" +#line 174 "perly.y" { yyval.opval = Nullop; } break; case 26: -#line 175 "perly.y" +#line 176 "perly.y" { yyval.opval = scope(yyvsp[0].opval); } break; case 27: -#line 179 "perly.y" +#line 180 "perly.y" { copline = yyvsp[-5].ival; yyval.opval = newSTATEOP(0, yyvsp[-6].pval, newWHILEOP(0, 1, (LOOP*)Nullop, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval) ); } break; case 28: -#line 184 "perly.y" +#line 185 "perly.y" { copline = yyvsp[-5].ival; yyval.opval = newSTATEOP(0, yyvsp[-6].pval, newWHILEOP(0, 1, (LOOP*)Nullop, invert(scalar(yyvsp[-3].opval)), yyvsp[-1].opval, yyvsp[0].opval) ); } break; case 29: -#line 189 "perly.y" +#line 190 "perly.y" { copline = yyvsp[-3].ival; yyval.opval = newSTATEOP(0, yyvsp[-4].pval, newWHILEOP(0, 1, (LOOP*)Nullop, scope(yyvsp[-2].opval), yyvsp[-1].opval, yyvsp[0].opval) ); } break; case 30: -#line 194 "perly.y" +#line 195 "perly.y" { copline = yyvsp[-3].ival; yyval.opval = newSTATEOP(0, yyvsp[-4].pval, newWHILEOP(0, 1, (LOOP*)Nullop, invert(scalar(scope(yyvsp[-2].opval))), yyvsp[-1].opval, yyvsp[0].opval)); } break; case 31: -#line 199 "perly.y" +#line 200 "perly.y" { yyval.opval = newFOROP(0, yyvsp[-7].pval, yyvsp[-6].ival, mod(yyvsp[-5].opval, OP_ENTERLOOP), yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval); } break; case 32: -#line 202 "perly.y" +#line 203 "perly.y" { yyval.opval = newFOROP(0, yyvsp[-6].pval, yyvsp[-5].ival, Nullop, yyvsp[-3].opval, yyvsp[-1].opval, yyvsp[0].opval); } break; case 33: -#line 205 "perly.y" +#line 206 "perly.y" { copline = yyvsp[-8].ival; yyval.opval = append_elem(OP_LINESEQ, newSTATEOP(0, yyvsp[-9].pval, scalar(yyvsp[-6].opval)), @@ -1631,336 +1719,336 @@ case 33: scalar(yyvsp[-4].opval), yyvsp[0].opval, scalar(yyvsp[-2].opval)) )); } break; case 34: -#line 212 "perly.y" +#line 213 "perly.y" { yyval.opval = newSTATEOP(0, yyvsp[-2].pval, newWHILEOP(0, 1, (LOOP*)Nullop, Nullop, yyvsp[-1].opval, yyvsp[0].opval)); } break; case 35: -#line 218 "perly.y" +#line 219 "perly.y" { yyval.opval = Nullop; } break; case 37: -#line 223 "perly.y" +#line 224 "perly.y" { (void)scan_num("1"); yyval.opval = yylval.opval; } break; case 39: -#line 228 "perly.y" +#line 229 "perly.y" { yyval.pval = Nullch; } break; case 41: -#line 233 "perly.y" +#line 234 "perly.y" { yyval.ival = 0; } break; case 42: -#line 235 "perly.y" +#line 236 "perly.y" { yyval.ival = 0; } break; case 43: -#line 237 "perly.y" +#line 238 "perly.y" { yyval.ival = 0; } break; case 44: -#line 239 "perly.y" +#line 240 "perly.y" { yyval.ival = 0; } break; case 45: -#line 243 "perly.y" +#line 244 "perly.y" { newFORM(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); } break; case 46: -#line 245 "perly.y" +#line 246 "perly.y" { newFORM(yyvsp[-1].ival, Nullop, yyvsp[0].opval); } break; case 47: -#line 249 "perly.y" +#line 250 "perly.y" { newSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, yyvsp[0].opval); } break; case 48: -#line 251 "perly.y" +#line 252 "perly.y" { newSUB(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval, Nullop); expect = XSTATE; } break; case 49: -#line 255 "perly.y" +#line 256 "perly.y" { yyval.opval = Nullop; } break; case 51: -#line 260 "perly.y" +#line 261 "perly.y" { yyval.ival = start_subparse(); } break; case 52: -#line 264 "perly.y" +#line 265 "perly.y" { package(yyvsp[-1].opval); } break; case 53: -#line 266 "perly.y" +#line 267 "perly.y" { package(Nullop); } break; case 54: -#line 270 "perly.y" -{ utilize(yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval); } +#line 271 "perly.y" +{ utilize(yyvsp[-4].ival, yyvsp[-3].ival, yyvsp[-2].opval, yyvsp[-1].opval); } break; case 55: -#line 274 "perly.y" +#line 275 "perly.y" { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; case 56: -#line 276 "perly.y" +#line 277 "perly.y" { yyval.opval = newLOGOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 57: -#line 278 "perly.y" -{ yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } -break; -case 59: -#line 283 "perly.y" +case 58: +#line 282 "perly.y" { yyval.opval = yyvsp[-1].opval; } break; -case 60: -#line 285 "perly.y" +case 59: +#line 284 "perly.y" { yyval.opval = append_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 62: -#line 290 "perly.y" +case 61: +#line 289 "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 63: -#line 293 "perly.y" +case 62: +#line 292 "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 64: -#line 296 "perly.y" +case 63: +#line 295 "perly.y" { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, yyvsp[-5].opval, yyvsp[-1].opval), newUNOP(OP_METHOD, 0, yyvsp[-3].opval))); } break; -case 65: -#line 301 "perly.y" +case 64: +#line 300 "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 66: -#line 306 "perly.y" +case 65: +#line 305 "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 67: -#line 311 "perly.y" +case 66: +#line 310 "perly.y" { yyval.opval = convert(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; -case 68: -#line 313 "perly.y" +case 67: +#line 312 "perly.y" { yyval.opval = convert(yyvsp[-3].ival, 0, yyvsp[-1].opval); } break; -case 69: -#line 315 "perly.y" +case 68: +#line 314 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, newANONSUB(yyvsp[-2].ival, 0, yyvsp[-1].opval), yyvsp[0].opval), - yyvsp[-3].ival)); } + yyvsp[-3].opval)); } break; -case 72: -#line 326 "perly.y" +case 71: +#line 325 "perly.y" { yyval.opval = newASSIGNOP(OPf_STACKED, yyvsp[-2].opval, yyvsp[-1].ival, yyvsp[0].opval); } break; -case 73: -#line 328 "perly.y" +case 72: +#line 327 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; -case 74: -#line 330 "perly.y" +case 73: +#line 329 "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 74: +#line 333 "perly.y" +{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } +break; case 75: -#line 334 "perly.y" +#line 335 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; case 76: -#line 336 "perly.y" +#line 337 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; case 77: -#line 338 "perly.y" +#line 339 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; case 78: -#line 340 "perly.y" +#line 341 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; case 79: -#line 342 "perly.y" +#line 343 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; case 80: -#line 344 "perly.y" -{ yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } -break; -case 81: -#line 346 "perly.y" +#line 345 "perly.y" { yyval.opval = newRANGE(yyvsp[-1].ival, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval));} break; -case 82: -#line 348 "perly.y" +case 81: +#line 347 "perly.y" { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 83: -#line 350 "perly.y" +case 82: +#line 349 "perly.y" { yyval.opval = newLOGOP(OP_OR, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 84: -#line 352 "perly.y" +case 83: +#line 351 "perly.y" { yyval.opval = newCONDOP(0, yyvsp[-4].opval, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 85: -#line 354 "perly.y" +case 84: +#line 353 "perly.y" { yyval.opval = bind_match(yyvsp[-1].ival, yyvsp[-2].opval, yyvsp[0].opval); } break; -case 86: -#line 357 "perly.y" +case 85: +#line 356 "perly.y" { yyval.opval = newUNOP(OP_NEGATE, 0, scalar(yyvsp[0].opval)); } break; -case 87: -#line 359 "perly.y" +case 86: +#line 358 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -case 88: -#line 361 "perly.y" +case 87: +#line 360 "perly.y" { yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } break; -case 89: -#line 363 "perly.y" +case 88: +#line 362 "perly.y" { yyval.opval = newUNOP(OP_COMPLEMENT, 0, scalar(yyvsp[0].opval));} break; -case 90: -#line 365 "perly.y" +case 89: +#line 364 "perly.y" { yyval.opval = newUNOP(OP_REFGEN, 0, mod(yyvsp[0].opval,OP_REFGEN)); } break; -case 91: -#line 367 "perly.y" +case 90: +#line 366 "perly.y" { yyval.opval = newUNOP(OP_POSTINC, 0, mod(scalar(yyvsp[-1].opval), OP_POSTINC)); } break; -case 92: -#line 370 "perly.y" +case 91: +#line 369 "perly.y" { yyval.opval = newUNOP(OP_POSTDEC, 0, mod(scalar(yyvsp[-1].opval), OP_POSTDEC)); } break; -case 93: -#line 373 "perly.y" +case 92: +#line 372 "perly.y" { yyval.opval = newUNOP(OP_PREINC, 0, mod(scalar(yyvsp[0].opval), OP_PREINC)); } break; -case 94: -#line 376 "perly.y" +case 93: +#line 375 "perly.y" { yyval.opval = newUNOP(OP_PREDEC, 0, mod(scalar(yyvsp[0].opval), OP_PREDEC)); } break; -case 95: -#line 379 "perly.y" +case 94: +#line 378 "perly.y" { yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); } break; -case 96: -#line 381 "perly.y" +case 95: +#line 380 "perly.y" { yyval.opval = sawparens(yyvsp[-1].opval); } break; -case 97: -#line 383 "perly.y" +case 96: +#line 382 "perly.y" { yyval.opval = sawparens(newNULLLIST()); } break; -case 98: -#line 385 "perly.y" +case 97: +#line 384 "perly.y" { yyval.opval = newANONLIST(yyvsp[-1].opval); } break; -case 99: -#line 387 "perly.y" +case 98: +#line 386 "perly.y" { yyval.opval = newANONLIST(Nullop); } break; -case 100: -#line 389 "perly.y" +case 99: +#line 388 "perly.y" { yyval.opval = newANONHASH(yyvsp[-2].opval); } break; -case 101: -#line 391 "perly.y" +case 100: +#line 390 "perly.y" { yyval.opval = newANONHASH(Nullop); } break; -case 102: -#line 393 "perly.y" +case 101: +#line 392 "perly.y" { yyval.opval = newANONSUB(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); } break; -case 103: -#line 395 "perly.y" +case 102: +#line 394 "perly.y" { yyval.opval = yyvsp[0].opval; } break; +case 103: +#line 396 "perly.y" +{ yyval.opval = newBINOP(OP_GELEM, 0, newGVREF(0,yyvsp[-4].opval), yyvsp[-2].opval); } +break; case 104: -#line 397 "perly.y" +#line 398 "perly.y" { yyval.opval = yyvsp[0].opval; } break; case 105: -#line 399 "perly.y" +#line 400 "perly.y" { yyval.opval = newBINOP(OP_AELEM, 0, oopsAV(yyvsp[-3].opval), scalar(yyvsp[-1].opval)); } break; case 106: -#line 401 "perly.y" +#line 402 "perly.y" { yyval.opval = newBINOP(OP_AELEM, 0, ref(newAVREF(yyvsp[-4].opval),OP_RV2AV), scalar(yyvsp[-1].opval));} break; case 107: -#line 405 "perly.y" +#line 406 "perly.y" { assertref(yyvsp[-3].opval); yyval.opval = newBINOP(OP_AELEM, 0, ref(newAVREF(yyvsp[-3].opval),OP_RV2AV), scalar(yyvsp[-1].opval));} break; case 108: -#line 409 "perly.y" +#line 410 "perly.y" { yyval.opval = yyvsp[0].opval; } break; case 109: -#line 411 "perly.y" +#line 412 "perly.y" { yyval.opval = yyvsp[0].opval; } break; case 110: -#line 413 "perly.y" +#line 414 "perly.y" { yyval.opval = newUNOP(OP_AV2ARYLEN, 0, ref(yyvsp[0].opval, OP_AV2ARYLEN));} break; case 111: -#line 415 "perly.y" +#line 416 "perly.y" { yyval.opval = newBINOP(OP_HELEM, 0, oopsHV(yyvsp[-4].opval), jmaybe(yyvsp[-2].opval)); expect = XOPERATOR; } break; case 112: -#line 418 "perly.y" +#line 419 "perly.y" { yyval.opval = newBINOP(OP_HELEM, 0, ref(newHVREF(yyvsp[-5].opval),OP_RV2HV), jmaybe(yyvsp[-2].opval)); expect = XOPERATOR; } break; case 113: -#line 423 "perly.y" +#line 424 "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; } break; case 114: -#line 428 "perly.y" +#line 429 "perly.y" { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, yyvsp[-4].opval); } break; case 115: -#line 430 "perly.y" +#line 431 "perly.y" { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, Nullop); } break; case 116: -#line 432 "perly.y" +#line 433 "perly.y" { yyval.opval = prepend_elem(OP_ASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_ASLICE, 0, @@ -1968,7 +2056,7 @@ case 116: ref(yyvsp[-3].opval, OP_ASLICE))); } break; case 117: -#line 438 "perly.y" +#line 439 "perly.y" { yyval.opval = prepend_elem(OP_HSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_HSLICE, 0, @@ -1977,13 +2065,12 @@ case 117: expect = XOPERATOR; } break; case 118: -#line 445 "perly.y" +#line 446 "perly.y" { yyval.opval = yyvsp[0].opval; } break; case 119: -#line 447 "perly.y" -{ yyval.opval = newUNOP(OP_ENTERSUB, 0, - scalar(yyvsp[0].opval)); } +#line 448 "perly.y" +{ yyval.opval = newUNOP(OP_ENTERSUB, 0, scalar(yyvsp[0].opval)); } break; case 120: #line 450 "perly.y" @@ -1998,7 +2085,7 @@ case 122: #line 455 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, - yyvsp[0].opval, newCVREF(scalar(yyvsp[-1].opval)))); } + yyvsp[0].opval, newCVREF(0,scalar(yyvsp[-1].opval)))); } break; case 123: #line 459 "perly.y" @@ -2010,146 +2097,158 @@ case 124: break; case 125: #line 463 "perly.y" -{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, +{ yyval.opval = newUNOP(OP_ENTERSUB, + OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, - scalar(newCVREF(scalar(yyvsp[-2].opval))), Nullop)); dep();} + scalar(newCVREF( + (OPpENTERSUB_AMPER<<8), + scalar(yyvsp[-2].opval) + )),Nullop)); dep();} break; case 126: -#line 467 "perly.y" -{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, +#line 471 "perly.y" +{ yyval.opval = newUNOP(OP_ENTERSUB, + OPf_SPECIAL|OPf_STACKED, append_elem(OP_LIST, yyvsp[-1].opval, - scalar(newCVREF(scalar(yyvsp[-3].opval))))); dep();} + scalar(newCVREF( + (OPpENTERSUB_AMPER<<8), + scalar(yyvsp[-3].opval) + )))); dep();} break; case 127: -#line 472 "perly.y" +#line 480 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, - scalar(newCVREF(scalar(yyvsp[-2].opval))), Nullop)); dep();} + scalar(newCVREF(0,scalar(yyvsp[-2].opval))), Nullop)); dep();} break; case 128: -#line 476 "perly.y" +#line 484 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, yyvsp[-1].opval, - scalar(newCVREF(scalar(yyvsp[-3].opval))))); dep();} + scalar(newCVREF(0,scalar(yyvsp[-3].opval))))); dep();} break; case 129: -#line 481 "perly.y" +#line 489 "perly.y" { yyval.opval = newOP(yyvsp[0].ival, OPf_SPECIAL); hints |= HINT_BLOCK_SCOPE; } break; case 130: -#line 484 "perly.y" +#line 492 "perly.y" { yyval.opval = newLOOPEX(yyvsp[-1].ival,yyvsp[0].opval); } break; case 131: -#line 486 "perly.y" -{ yyval.opval = newOP(yyvsp[0].ival, 0); } +#line 494 "perly.y" +{ yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } break; case 132: -#line 488 "perly.y" -{ yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); } +#line 496 "perly.y" +{ yyval.opval = newOP(yyvsp[0].ival, 0); } break; case 133: -#line 490 "perly.y" +#line 498 "perly.y" { yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; case 134: -#line 492 "perly.y" -{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, - append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].ival))); } +#line 500 "perly.y" +{ yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; case 135: -#line 495 "perly.y" -{ yyval.opval = newOP(yyvsp[0].ival, 0); } +#line 502 "perly.y" +{ yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, + append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); } break; case 136: -#line 497 "perly.y" -{ yyval.opval = newOP(yyvsp[-2].ival, 0); } +#line 505 "perly.y" +{ yyval.opval = newOP(yyvsp[0].ival, 0); } break; case 137: -#line 499 "perly.y" -{ yyval.opval = newUNOP(OP_ENTERSUB, 0, - scalar(yyvsp[0].ival)); } +#line 507 "perly.y" +{ yyval.opval = newOP(yyvsp[-2].ival, 0); } break; case 138: -#line 502 "perly.y" -{ yyval.opval = newOP(yyvsp[-2].ival, OPf_SPECIAL); } +#line 509 "perly.y" +{ yyval.opval = newUNOP(OP_ENTERSUB, 0, + scalar(yyvsp[0].opval)); } break; case 139: -#line 504 "perly.y" -{ yyval.opval = newUNOP(yyvsp[-3].ival, 0, yyvsp[-1].opval); } +#line 512 "perly.y" +{ yyval.opval = newOP(yyvsp[-2].ival, OPf_SPECIAL); } break; case 140: -#line 506 "perly.y" -{ yyval.opval = pmruntime(yyvsp[-3].opval, yyvsp[-1].opval, Nullop); } +#line 514 "perly.y" +{ yyval.opval = newUNOP(yyvsp[-3].ival, 0, yyvsp[-1].opval); } break; case 141: -#line 508 "perly.y" -{ yyval.opval = pmruntime(yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval); } +#line 516 "perly.y" +{ yyval.opval = pmruntime(yyvsp[-3].opval, yyvsp[-1].opval, Nullop); } break; -case 144: -#line 514 "perly.y" -{ yyval.opval = Nullop; } +case 142: +#line 518 "perly.y" +{ yyval.opval = pmruntime(yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval); } break; case 145: -#line 516 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +#line 524 "perly.y" +{ yyval.opval = Nullop; } break; case 146: -#line 520 "perly.y" -{ yyval.opval = Nullop; } +#line 526 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; case 147: -#line 522 "perly.y" -{ yyval.opval = yyvsp[0].opval; } +#line 530 "perly.y" +{ yyval.opval = Nullop; } break; case 148: -#line 524 "perly.y" -{ yyval.opval = yyvsp[-1].opval; } +#line 532 "perly.y" +{ yyval.opval = yyvsp[0].opval; } break; case 149: -#line 528 "perly.y" -{ yyval.opval = newCVREF(yyvsp[0].opval); } +#line 534 "perly.y" +{ yyval.opval = yyvsp[-1].opval; } break; case 150: -#line 532 "perly.y" -{ yyval.opval = newSVREF(yyvsp[0].opval); } +#line 538 "perly.y" +{ yyval.opval = newCVREF(yyvsp[-1].ival,yyvsp[0].opval); } break; case 151: -#line 536 "perly.y" -{ yyval.opval = newAVREF(yyvsp[0].opval); } +#line 542 "perly.y" +{ yyval.opval = newSVREF(yyvsp[0].opval); } break; case 152: -#line 540 "perly.y" -{ yyval.opval = newHVREF(yyvsp[0].opval); } +#line 546 "perly.y" +{ yyval.opval = newAVREF(yyvsp[0].opval); } break; case 153: -#line 544 "perly.y" -{ yyval.opval = newAVREF(yyvsp[0].opval); } +#line 550 "perly.y" +{ yyval.opval = newHVREF(yyvsp[0].opval); } break; case 154: -#line 548 "perly.y" -{ yyval.opval = newGVREF(0,yyvsp[0].opval); } +#line 554 "perly.y" +{ yyval.opval = newAVREF(yyvsp[0].opval); } break; case 155: -#line 552 "perly.y" -{ yyval.opval = scalar(yyvsp[0].opval); } +#line 558 "perly.y" +{ yyval.opval = newGVREF(0,yyvsp[0].opval); } break; case 156: -#line 554 "perly.y" -{ yyval.opval = scalar(yyvsp[0].opval); } +#line 562 "perly.y" +{ yyval.opval = scalar(yyvsp[0].opval); } break; case 157: -#line 556 "perly.y" -{ yyval.opval = scope(yyvsp[0].opval); } +#line 564 "perly.y" +{ yyval.opval = scalar(yyvsp[0].opval); } break; case 158: -#line 559 "perly.y" +#line 566 "perly.y" +{ yyval.opval = scope(yyvsp[0].opval); } +break; +case 159: +#line 569 "perly.y" { yyval.opval = yyvsp[0].opval; } break; -#line 2139 "y.tab.c" +#line 2237 "y_tab.c" } yyssp -= yym; yystate = *yyssp; diff --git a/vms/perly_h.vms b/vms/perly_h.vms index 17a3769ef4..c6ec3a41ad 100644 --- a/vms/perly_h.vms +++ b/vms/perly_h.vms @@ -1,50 +1,51 @@ +/* Postprocessed by vms_yfix.pl 1.1 to add VMS declarations of globals */ #define WORD 257 #define METHOD 258 #define FUNCMETH 259 #define THING 260 #define PMFUNC 261 #define PRIVATEREF 262 -#define LABEL 263 -#define FORMAT 264 -#define SUB 265 -#define ANONSUB 266 -#define PACKAGE 267 -#define USE 268 -#define WHILE 269 -#define UNTIL 270 -#define IF 271 -#define UNLESS 272 -#define ELSE 273 -#define ELSIF 274 -#define CONTINUE 275 -#define FOR 276 -#define LOOPEX 277 -#define DOTDOT 278 -#define FUNC0 279 -#define FUNC1 280 -#define FUNC 281 -#define FUNC0SUB 282 -#define RELOP 283 -#define EQOP 284 -#define MULOP 285 -#define ADDOP 286 -#define DOLSHARP 287 -#define DO 288 -#define LOCAL 289 -#define HASHBRACK 290 -#define NOAMP 291 -#define OROP 292 -#define ANDOP 293 -#define NOTOP 294 -#define LSTOP 295 -#define LSTOPSUB 296 -#define ASSIGNOP 297 -#define OROR 298 -#define ANDAND 299 -#define BITOROP 300 -#define BITANDOP 301 -#define UNIOP 302 -#define UNIOPSUB 303 +#define FUNC0SUB 263 +#define UNIOPSUB 264 +#define LSTOPSUB 265 +#define LABEL 266 +#define FORMAT 267 +#define SUB 268 +#define ANONSUB 269 +#define PACKAGE 270 +#define USE 271 +#define WHILE 272 +#define UNTIL 273 +#define IF 274 +#define UNLESS 275 +#define ELSE 276 +#define ELSIF 277 +#define CONTINUE 278 +#define FOR 279 +#define LOOPEX 280 +#define DOTDOT 281 +#define FUNC0 282 +#define FUNC1 283 +#define FUNC 284 +#define RELOP 285 +#define EQOP 286 +#define MULOP 287 +#define ADDOP 288 +#define DOLSHARP 289 +#define DO 290 +#define LOCAL 291 +#define HASHBRACK 292 +#define NOAMP 293 +#define OROP 294 +#define ANDOP 295 +#define NOTOP 296 +#define LSTOP 297 +#define ASSIGNOP 298 +#define OROR 299 +#define ANDAND 300 +#define BITOROP 301 +#define BITANDOP 302 +#define UNIOP 303 #define SHIFTOP 304 #define MATCHOP 305 #define UMINUS 306 diff --git a/vms/sockadapt.c b/vms/sockadapt.c index 69f5def785..08251d6bdf 100644 --- a/vms/sockadapt.c +++ b/vms/sockadapt.c @@ -1,7 +1,7 @@ /* sockadapt.c * * Author: Charles Bailey bailey@genetics.upenn.edu - * Last Revised: 17-Mar-1995 + * Last Revised: 29-Jan-1996 * * This file should contain stubs for any of the TCP/IP functions perl5 * requires which are not supported by your TCP/IP stack. These stubs @@ -13,22 +13,31 @@ #include "EXTERN.h" #include "perl.h" +#if defined(__DECC) && defined(__DECC_VER) && (__DECC_VER >= 50200000) +# define __sockadapt_my_netent_t __struct_netent_ptr32 +# define __sockadapt_my_addr_t __in_addr_t +# define __sockadapt_my_name_t const char * +#else +# define __sockadapt_my_netent_t struct netent * +# define __sockadapt_my_addr_t long +# define __sockadapt_my_name_t char * +#endif -void endnetent() { - croak("Function \"endnetent\" not implemented in this version of perl"); -} -struct netent *getnetbyaddr( long net, int type) { +__sockadapt_my_netent_t getnetbyaddr( __sockadapt_my_addr_t net, int type) { croak("Function \"getnetbyaddr\" not implemented in this version of perl"); return (struct netent *)NULL; /* Avoid MISSINGRETURN warning, not reached */ } -struct netent *getnetbyname( char *name) { +__sockadapt_my_netent_t getnetbyname( __sockadapt_my_name_t name) { croak("Function \"getnetbyname\" not implemented in this version of perl"); return (struct netent *)NULL; /* Avoid MISSINGRETURN warning, not reached */ } -struct netent *getnetent() { +__sockadapt_my_netent_t getnetent() { croak("Function \"getnetent\" not implemented in this version of perl"); return (struct netent *)NULL; /* Avoid MISSINGRETURN warning, not reached */ } void setnetent() { croak("Function \"setnetent\" not implemented in this version of perl"); } +void endnetent() { + croak("Function \"endnetent\" not implemented in this version of perl"); +} @@ -2,7 +2,7 @@ * * VMS-specific routines for perl5 * - * Last revised: 22-Nov-1995 by Charles Bailey bailey@genetics.upenn.edu + * Last revised: 18-Jan-1996 by Charles Bailey bailey@genetics.upenn.edu * Version: 5.2.0 */ @@ -36,6 +36,19 @@ #include "perl.h" #include "XSUB.h" +/* gcc's header files don't #define direct access macros + * corresponding to VAXC's variant structs */ +#ifdef __GNUC__ +# define uic$v_format uic$r_uic_form.uiv$v_format +# define uic$v_group uic$r_uic_form.uiv$v_group +# define uic$v_member uic$r_uic_form.uiv$v_member +# define prv$v_bypass prv$r_prvdef_bits0.prv$v_bypass +# define prv$v_grpprv prv$r_prvdef_bits0.prv$v_grpprv +# define prv$v_readall prv$r_prvdef_bits0.prv$v_readall +# define prv$v_sysprv prv$r_prvdef_bits0.prv$v_sysprv +#endif + + struct itmlst_3 { unsigned short int buflen; unsigned short int itmcode; @@ -43,30 +56,34 @@ struct itmlst_3 { unsigned short int *retlen; }; -static char * -my_trnlnm(char *lnm, char *eqv) +int +my_trnlnm(char *lnm, char *eqv, unsigned long int idx) { static char __my_trnlnm_eqv[LNM$C_NAMLENGTH+1]; unsigned short int eqvlen; unsigned long int retsts, attr = LNM$M_CASE_BLIND; $DESCRIPTOR(tabdsc,"LNM$FILE_DEV"); struct dsc$descriptor_s lnmdsc = {0,DSC$K_DTYPE_T,DSC$K_CLASS_S,0}; - struct itmlst_3 lnmlst[2] = {{LNM$C_NAMLENGTH, LNM$_STRING,0, &eqvlen}, + struct itmlst_3 lnmlst[3] = {{sizeof idx, LNM$_INDEX, &idx, 0}, + {LNM$C_NAMLENGTH, LNM$_STRING, 0, &eqvlen}, {0, 0, 0, 0}}; if (!eqv) eqv = __my_trnlnm_eqv; - lnmlst[0].bufadr = (void *)eqv; + lnmlst[1].bufadr = (void *)eqv; lnmdsc.dsc$a_pointer = lnm; lnmdsc.dsc$w_length = strlen(lnm); retsts = sys$trnlnm(&attr,&tabdsc,&lnmdsc,0,lnmlst); - if (retsts == SS$_NOLOGNAM || retsts == SS$_IVLOGNAM) return Nullch; + if (retsts == SS$_NOLOGNAM || retsts == SS$_IVLOGNAM) { + set_vaxc_errno(retsts); set_errno(EINVAL); return 0; + } else if (retsts & 1) { eqv[eqvlen] = '\0'; - return eqv; + return 1; } _ckvmssts(retsts); /* Must be an error */ - return Nullch; /* Not reached, assuming _ckvmssts() bails out */ -} + return 0; /* Not reached, assuming _ckvmssts() bails out */ + +} /* end of my_trnlnm */ /* my_getenv * Translate a logical name. Substitute for CRTL getenv() to avoid @@ -82,6 +99,7 @@ my_getenv(char *lnm) { static char __my_getenv_eqv[LNM$C_NAMLENGTH+1]; char uplnm[LNM$C_NAMLENGTH], *cp1, *cp2; + unsigned long int idx = 0; for (cp1 = lnm, cp2= uplnm; *cp1; cp1++, cp2++) *cp2 = _toupper(*cp1); *cp2 = '\0'; @@ -89,24 +107,31 @@ my_getenv(char *lnm) getcwd(__my_getenv_eqv,sizeof __my_getenv_eqv); return __my_getenv_eqv; } - else if (my_trnlnm(uplnm,__my_getenv_eqv) != NULL) { - return __my_getenv_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}; - symdsc.dsc$w_length = cp1 - lnm; - symdsc.dsc$a_pointer = uplnm; - retsts = lib$get_symbol(&symdsc,&valdsc,&(valdsc.dsc$w_length),0); - if (retsts == LIB$_INVSYMNAM) return Nullch; - if (retsts != LIB$_NOSUCHSYM) { - /* We want to return only logical names or CRTL Unix emulations */ - if (retsts & 1) return Nullch; - _ckvmssts(retsts); + if ((cp2 = strchr(uplnm,';')) != NULL) { + *cp2 = '\0'; + idx = strtoul(cp2+1,NULL,0); + } + if (my_trnlnm(uplnm,__my_getenv_eqv,idx)) { + return __my_getenv_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}; + symdsc.dsc$w_length = cp1 - lnm; + symdsc.dsc$a_pointer = uplnm; + retsts = lib$get_symbol(&symdsc,&valdsc,&(valdsc.dsc$w_length),0); + if (retsts == LIB$_INVSYMNAM) return Nullch; + if (retsts != LIB$_NOSUCHSYM) { + /* We want to return only logical names or CRTL Unix emulations */ + if (retsts & 1) return Nullch; + _ckvmssts(retsts); + } + /* Try for CRTL emulation of a Unix/POSIX name */ + else return getenv(lnm); } - else return getenv(lnm); /* Try for CRTL emulation of a Unix/POSIX name */ } return Nullch; @@ -149,6 +174,69 @@ my_setenv(char *lnm,char *eqv) } /* end of my_setenv() */ /*}}}*/ + +/*{{{ char *my_crypt(const char *textpasswd, const char *usrname)*/ +/* my_crypt - VMS password hashing + * my_crypt() provides an interface compatible with the Unix crypt() + * C library function, and uses sys$hash_password() to perform VMS + * password hashing. The quadword hashed password value is returned + * as a NUL-terminated 8 character string. my_crypt() does not change + * the case of its string arguments; in order to match the behavior + * of LOGINOUT et al., alphabetic characters in both arguments must + * be upcased by the caller. + */ +char * +my_crypt(const char *textpasswd, const char *usrname) +{ +# ifndef UAI$C_PREFERRED_ALGORITHM +# define UAI$C_PREFERRED_ALGORITHM 127 +# endif + unsigned char alg = UAI$C_PREFERRED_ALGORITHM; + unsigned short int salt = 0; + unsigned long int sts; + struct const_dsc { + unsigned short int dsc$w_length; + unsigned char dsc$b_type; + unsigned char dsc$b_class; + const char * dsc$a_pointer; + } usrdsc = {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, 0}, + txtdsc = {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, 0}; + struct itmlst_3 uailst[3] = { + { sizeof alg, UAI$_ENCRYPT, &alg, 0}, + { sizeof salt, UAI$_SALT, &salt, 0}, + { 0, 0, NULL, NULL}}; + static char hash[9]; + + usrdsc.dsc$w_length = strlen(usrname); + usrdsc.dsc$a_pointer = usrname; + if (!((sts = sys$getuai(0, 0, &usrdsc, uailst, 0, 0, 0)) & 1)) { + switch (sts) { + case SS$_NOGRPPRV: + case SS$_NOSYSPRV: + set_errno(EACCES); + break; + case RMS$_RNF: + set_errno(ESRCH); /* There isn't a Unix no-such-user error */ + break; + default: + set_errno(EVMSERR); + } + set_vaxc_errno(sts); + if (sts != RMS$_RNF) return NULL; + } + + txtdsc.dsc$w_length = strlen(textpasswd); + txtdsc.dsc$a_pointer = textpasswd; + if (!((sts = sys$hash_password(&txtdsc, alg, salt, &usrdsc, &hash)) & 1)) { + set_errno(EVMSERR); set_vaxc_errno(sts); return NULL; + } + + return (char *) hash; + +} /* end of my_crypt() */ +/*}}}*/ + + static char *do_fileify_dirspec(char *, char *, int); static char *do_tovmsspec(char *, char *, int); @@ -560,11 +648,11 @@ I32 my_pclose(FILE *fp) /* get here => no such pipe open */ croak("No such pipe open"); + fclose(info->fp); + if (info->done) retsts = info->completion; else waitpid(info->pid,(int *) &retsts,0); - fclose(info->fp); - /* remove from list of open pipes */ if (last) last->next = info->next; else open_pipes = info->next; @@ -691,15 +779,32 @@ static char *do_fileify_dirspec(char *dir,char *buf,int ts) char *retspec, *cp1, *cp2, *lastdir; char trndir[NAM$C_MAXRSS+1], vmsdir[NAM$C_MAXRSS+1]; - if (dir == NULL) return NULL; + if (!dir || !*dir) { + set_errno(EINVAL); set_vaxc_errno(SS$_BADPARAM); return NULL; + } dirlen = strlen(dir); if (dir[dirlen-1] == '/') dir[--dirlen] = '\0'; + if (!dirlen) { + set_errno(ENOTDIR); + set_vaxc_errno(RMS$_DIR); + return NULL; + } if (!strpbrk(dir+1,"/]>:")) { strcpy(trndir,*dir == '/' ? dir + 1: dir); - while (!strpbrk(trndir,"/]>:>") && my_trnlnm(trndir,trndir) != NULL) ; + while (!strpbrk(trndir,"/]>:>") && my_trnlnm(trndir,trndir,0)) ; dir = trndir; dirlen = strlen(dir); } + /* If we were handed a rooted logical name or spec, treat it like a + * simple directory, so that + * $ Define myroot dev:[dir.] + * ... do_fileify_dirspec("myroot",buf,1) ... + * does something useful. + */ + if (!strcmp(dir+dirlen-2,".]")) { + dir[--dirlen] = '\0'; + dir[dirlen-1] = ']'; + } if (!strpbrk(dir,"]:>")) { /* Unix-style path or plain dir name */ if (dir[0] == '.') { @@ -848,6 +953,11 @@ static char *do_fileify_dirspec(char *dir,char *buf,int ts) strcpy(retspec,esa); return retspec; } + if ((cp1 = strstr(esa,".][000000]")) != NULL) { + for (cp2 = cp1 + 9; *cp2; cp1++,cp2++) *cp1 = *cp2; + *cp1 = '\0'; + dirnam.nam$b_esl -= 9; + } if ((cp1 = strrchr(esa,']')) == NULL) cp1 = strrchr(esa,'>'); if (cp1 == NULL) return NULL; /* should never happen */ term = *cp1; @@ -930,10 +1040,26 @@ static char *do_pathify_dirspec(char *dir,char *buf, int ts) unsigned long int retlen; char *retpath, *cp1, *cp2, trndir[NAM$C_MAXRSS+1]; - if (dir == NULL) return NULL; + if (!dir || !*dir) { + set_errno(EINVAL); set_vaxc_errno(SS$_BADPARAM); return NULL; + } + + if (*dir) strcpy(trndir,dir); + else getcwd(trndir,sizeof trndir - 1); + + while (!strpbrk(trndir,"/]:>") && my_trnlnm(trndir,trndir,0)) { + STRLEN trnlen = strlen(trndir); - strcpy(trndir,dir); - while (!strpbrk(trndir,"/]:>") && my_trnlnm(trndir,trndir) != NULL) ; + /* Trap simple rooted lnms, and return lnm:[000000] */ + if (!strcmp(trndir+trnlen-2,".]")) { + if (buf) retpath = buf; + else if (ts) New(7018,retpath,strlen(dir)+10,char); + else retpath = __pathify_retbuf; + strcpy(retpath,dir); + strcat(retpath,":[000000]"); + return retpath; + } + } dir = trndir; if (!strpbrk(dir,"]:>")) { /* Unix-style path or plain dir name */ @@ -1201,7 +1327,7 @@ static char *do_tovmsspec(char *path, char *buf, int ts) { while (*(++cp2) != '/' && *cp2) *(cp1++) = *cp2; *cp1 = '\0'; - islnm = (my_trnlnm(rslt,trndev) != Nullch); + islnm = my_trnlnm(rslt,trndev,0); trnend = islnm ? strlen(trndev) - 1 : 0; islnm = trnend ? (trndev[trnend] == ']' || trndev[trnend] == '>') : 0; rooted = islnm ? (trndev[trnend-1] == '.') : 0; @@ -1658,7 +1784,6 @@ static void expand_wild_cards(char *item, int expcount = 0; unsigned long int context = 0; int isunix = 0; -int status_value; char *had_version; char *had_device; int had_directory; @@ -1667,7 +1792,7 @@ char vmsspec[NAM$C_MAXRSS+1]; $DESCRIPTOR(filespec, ""); $DESCRIPTOR(defaultspec, "SYS$DISK:[]"); $DESCRIPTOR(resultspec, ""); -unsigned long int zero = 0; +unsigned long int zero = 0, sts; if (strcspn(item, "*%") == strlen(item)) { @@ -1692,8 +1817,8 @@ unsigned long int zero = 0; had_device = strchr(item, ':'); had_directory = (isunix || NULL != strchr(item, '[')) || (NULL != strchr(item, '<')); - while (1 == (1&lib$find_file(&filespec, &resultspec, &context, - &defaultspec, 0, &status_value, &zero))) + while (1 == (1 & (sts = lib$find_file(&filespec, &resultspec, &context, + &defaultspec, 0, 0, &zero)))) { char *string; char *c; @@ -1720,10 +1845,28 @@ unsigned long int zero = 0; add_item(head, tail, string, count); ++expcount; } + if (sts != RMS$_NMF) + { + set_vaxc_errno(sts); + switch (sts) + { + case RMS$_FNF: + case RMS$_DIR: + set_errno(ENOENT); break; + case RMS$_DEV: + set_errno(ENODEV); break; + case RMS$_SYN: + set_errno(EINVAL); break; + case RMS$_PRV: + set_errno(EACCES); break; + default: + _ckvmssts(sts); + } + } if (expcount == 0) add_item(head, tail, item, count); - lib$sfree1_dd(&resultspec); - lib$find_file_end(&context); + _ckvmssts(lib$sfree1_dd(&resultspec)); + _ckvmssts(lib$find_file_end(&context)); } static int child_st[2];/* Event Flag set when child process completes */ @@ -2035,17 +2178,12 @@ readdir(DIR *dd) set_vaxc_errno(tmpsts); switch (tmpsts) { case RMS$_PRV: - set_errno(EACCES); - break; + set_errno(EACCES); break; case RMS$_DEV: - set_errno(ENODEV); - break; + set_errno(ENODEV); break; case RMS$_DIR: - set_errno(ENOTDIR); - break; case RMS$_FNF: - set_errno(ENOENT); - break; + set_errno(ENOENT); break; default: set_errno(EVMSERR); } @@ -2479,7 +2617,7 @@ static int fillpasswd (const char *name, struct passwd *pwd) static unsigned short lowner, luic, ldefdev, ldefdir, ldefcli, lpwd; struct dsc$descriptor_s name_desc; - int status; + unsigned long int sts; static struct itmlst_3 itmlst[]= { {UAI$S_OWNER+1, UAI$_OWNER, &owner, &lowner}, @@ -2496,8 +2634,12 @@ static int fillpasswd (const char *name, struct passwd *pwd) name_desc.dsc$a_pointer= (char *) name; /* Note that sys$getuai returns many fields as counted strings. */ - status= sys$getuai(0, 0, &name_desc, &itmlst, 0, 0, 0); - if (!(status&1)) return status; + sts= sys$getuai(0, 0, &name_desc, &itmlst, 0, 0, 0); + if (sts == SS$_NOSYSPRV || sts == SS$_NOGRPPRV || sts == RMS$_RNF) { + set_vaxc_errno(sts); set_errno(sts == RMS$_RNF ? EINVAL : EACCES); + } + else { _ckvmssts(sts); } + if (!(sts & 1)) return 0; /* out here in case _ckvmssts() doesn't abort */ if ((int) owner.length < lowner) lowner= (int) owner.length; if ((int) defdev.length < ldefdev) ldefdev= (int) defdev.length; @@ -2526,7 +2668,7 @@ static int fillpasswd (const char *name, struct passwd *pwd) else strcpy(pwd->pw_unixdir, pwd->pw_dir); _mystrtolower(pwd->pw_unixdir); - return status; + return 1; } /* @@ -2540,8 +2682,7 @@ struct passwd *my_getpwnam(char *name) unsigned long int status, stat; __pwdcache = __passwd_empty; - if ((status = fillpasswd(name, &__pwdcache)) == SS$_NOSYSPRV - || status == SS$_NOGRPPRV || status == RMS$_RNF) { + if (!fillpasswd(name, &__pwdcache)) { /* We still may be able to determine pw_uid and pw_gid */ name_desc.dsc$w_length= strlen(name); name_desc.dsc$b_dtype= DSC$K_DTYPE_T; @@ -2551,10 +2692,15 @@ struct passwd *my_getpwnam(char *name) __pwdcache.pw_uid= uic.uic$l_uic; __pwdcache.pw_gid= uic.uic$v_group; } - else if (stat == SS$_NOSUCHID || stat == RMS$_PRV) return NULL; - else { _ckvmssts(stat); } + else { + if (stat == SS$_NOSUCHID || stat == SS$_IVIDENT || stat == RMS$_PRV) { + set_vaxc_errno(stat); + set_errno(stat == RMS$_PRV ? EACCES : EINVAL); + return NULL; + } + else { _ckvmssts(stat); } + } } - else { _ckvmssts(status); } strncpy(__pw_namecache, name, sizeof(__pw_namecache)); __pw_namecache[sizeof __pw_namecache - 1] = '\0'; __pwdcache.pw_name= __pw_namecache; @@ -2578,6 +2724,8 @@ struct passwd *my_getpwuid(Uid_t uid) do { status = sys$idtoasc(-1, &lname, &name_desc, &uic, 0, &contxt); if (status == SS$_NOSUCHID || status == RMS$_PRV) { + set_vaxc_errno(status); + set_errno(status == RMS$_PRV ? EACCES : EINVAL); my_endpwent(); return NULL; } @@ -2586,11 +2734,17 @@ struct passwd *my_getpwuid(Uid_t uid) } else { uic.uic$l_uic= uid; - if (!uic.uic$v_group) uic.uic$v_group= getgid(); + if (!uic.uic$v_group) + uic.uic$v_group= getgid(); if (valid_uic(uic)) status = sys$idtoasc(uic.uic$l_uic, &lname, &name_desc, 0, 0, 0); else status = SS$_IVIDENT; - _ckvmssts(status); + if (status == SS$_IVIDENT || status == SS$_NOSUCHID || + status == RMS$_PRV) { + set_vaxc_errno(status); set_errno(status == RMS$_PRV ? EACCES : EINVAL); + return NULL; + } + else { _ckvmssts(status); } } __pw_namecache[lname]= '\0'; _mystrtolower(__pw_namecache); @@ -2604,9 +2758,7 @@ struct passwd *my_getpwuid(Uid_t uid) __pwdcache.pw_uid = uic.uic$l_uic; __pwdcache.pw_gid = uic.uic$v_group; - status = fillpasswd(__pw_namecache, &__pwdcache); - if (status != SS$_NOSYSPRV && status != SS$_NOGRPPRV && - status != RMS$_RNF) { _ckvmssts(status); } + fillpasswd(__pw_namecache, &__pwdcache); return &__pwdcache; } /* end of my_getpwuid() */ @@ -2810,7 +2962,7 @@ cando(I32 bit, I32 effective, struct stat *statbufp) namdsc.dsc$a_pointer = fname; namdsc.dsc$w_length = sizeof fname - 1; - retsts = lib$fid_to_name(&devdsc,statbufp->st_inode_u.fid,&namdsc, + retsts = lib$fid_to_name(&devdsc,&(statbufp->st_ino),&namdsc, &namdsc.dsc$w_length,0,0); if (retsts & 1) { fname[namdsc.dsc$w_length] = '\0'; @@ -2826,6 +2978,7 @@ cando(I32 bit, I32 effective, struct stat *statbufp) } /* end of cando() */ /*}}}*/ + /*{{{I32 cando_by_name(I32 bit, I32 effective, char *fname)*/ I32 cando_by_name(I32 bit, I32 effective, char *fname) @@ -2884,10 +3037,10 @@ cando_by_name(I32 bit, I32 effective, char *fname) necessary privs currently enabled? */ _ckvmssts(sys$getjpiw(0,0,0,jpilst,iosb,0,0)); if ((privused & CHP$M_BYPASS) && !curprv.prv$v_bypass) return FALSE; - if ((privused & CHP$M_SYSPRV) && !curprv.prv$v_sysprv - && !curprv.prv$v_bypass) return FALSE; - if ((privused & CHP$M_GRPPRV) && !curprv.prv$v_grpprv - && !curprv.prv$v_sysprv && !curprv.prv$v_bypass) return FALSE; + if ((privused & CHP$M_SYSPRV) && !curprv.prv$v_sysprv && + !curprv.prv$v_bypass) return FALSE; + if ((privused & CHP$M_GRPPRV) && !curprv.prv$v_grpprv && + !curprv.prv$v_sysprv && !curprv.prv$v_bypass) return FALSE; if ((privused & CHP$M_READALL) && !curprv.prv$v_readall) return FALSE; return TRUE; } @@ -2962,6 +3115,17 @@ flex_stat(char *fspec, struct mystat *statbufp) #define stat mystat /*}}}*/ +/*{{{char *my_getlogin()*/ +/* VMS cuserid == Unix getlogin, except calling sequence */ +char * +my_getlogin() +{ + static char user[L_cuserid]; + return cuserid(user); +} +/*}}}*/ + + /*** The following glue provides 'hooks' to make some of the routines * from this file available from Perl. These routines are sufficiently * basic, and are required sufficiently early in the build process, diff --git a/vms/vms_yfix.pl b/vms/vms_yfix.pl index 323a40d792..33af914b25 100644 --- a/vms/vms_yfix.pl +++ b/vms/vms_yfix.pl @@ -6,20 +6,26 @@ # If it finds that the input files are already patches for VMS, # it just copies the input to the output. # -# Revised 26-May-1995 by Charles Bailey bailey@genetics.upenn.edu +# Revised 29-Jan-1996 by Charles Bailey bailey@genetics.upenn.edu + +$VERSION = '1.1'; ($cinfile,$hinfile,$coutfile,$houtfile) = @ARGV; open C,$cinfile or die "Can't read $cinfile: $!\n"; open COUT, ">$coutfile" or die "Can't create $coutfile: $!\n"; +print COUT <<EOH; +/* Postprocessed by vms_yfix.pl $VERSION to add VMS declarations of globals */ +EOH while (<C>) { - if (/^dEXT/) { # we've already got a fixed copy - print COUT $_,<C>; - last; + # "y.tab.c" is illegal as a VMS filename; DECC 5.2/VAX preprocessor + # doesn't like this. + if ( s/^#line\s+(\d+)\s+"y.tab.c"/#line $1 "y_tab.c"/ ) { 1; } + else { + # add the dEXT tag to definitions of global vars, so we'll insert + # a globaldef when perly.c is compiled + s/^(short|int|YYSTYPE|char \*)\s*yy/dEXT $1 yy/; } - # add the dEXT tag to definitions of global vars, so we'll insert - # a globaldef when perly.c is compiled - s/^(short|int|YYSTYPE|char \*)\s*yy/dEXT $1 yy/; print COUT; } close C; @@ -27,6 +33,9 @@ close COUT; open H,$hinfile or die "Can't read $hinfile: $!\n"; open HOUT, ">$houtfile" or die "Can't create $houtfile: $!\n"; +print HOUT <<EOH; +/* Postprocessed by vms_yfix.pl $VERSION to add VMS declarations of globals */ +EOH $hfixed = 0; # keep -w happy while (<H>) { $hfixed = /globalref/ unless $hfixed; # we've already got a fixed copy diff --git a/vms/vmsish.h b/vms/vmsish.h index 65f182c2ff..6492773e88 100644 --- a/vms/vmsish.h +++ b/vms/vmsish.h @@ -3,7 +3,7 @@ * VMS-specific C header file for perl5. * * Last revised: 01-Oct-1995 by Charles Bailey bailey@genetics.upenn.edu - * Version: 5.2.b1 + * Version: 5.1.6 */ #ifndef __vmsish_h_included @@ -89,6 +89,8 @@ #include "sockadapt.h" #endif +#define BIT_BUCKET "_NLA0:" +#define PERL_SYS_INIT(c,v) getredirection((c),(v)) #define HAS_KILL #define HAS_WAIT @@ -177,6 +179,12 @@ struct tms { #define DYNAMIC_ENV_FETCH 1 #define ENV_HV_NAME "%EnV%VmS%" +/* Thin jacket around cuserid() tomatch Unix' calling sequence */ +#define getlogin my_getlogin + +/* Ditto for sys$hash_passwrod() . . . */ +#define crypt my_crypt + /* Use our own stat() clones, which handle Unix-style directory names */ #define Stat(name,bufptr) flex_stat(name,bufptr) #define Fstat(fd,bufptr) flex_fstat(fd,bufptr) @@ -228,7 +236,14 @@ struct passwd { /* Our own stat_t substitute, since we play with st_dev and st_ino - * we want atomic types so Unix-bound code which compares these fields - * for two files will work most of the time under VMS + * for two files will work most of the time under VMS. + * N.B. 1. The st_ino hack assumes that sizeof(unsigned short[3]) == + * sizeof(unsigned) + sizeof(unsigned short). We can't use a union type + * to map the unsigned int we want and the unsigned short[3] the CRTL + * returns into the same member, since gcc has different ideas than DECC + * and VAXC about sizing union types. + * N.B 2. The routine cando() in vms.c assumes that &stat.st_ino is the + * address of a FID. */ /* First, grab the system types, so we don't clobber them later */ #include <stat.h> @@ -247,10 +262,8 @@ struct passwd { struct mystat { char *st_devnam; /* pointer to device name */ - union { - unsigned short fid[3]; - unsigned long st_ino_mostly; - } st_inode_u; + unsigned st_ino; /* hack - CRTL uses unsigned short[3] for */ + unsigned short rvn; /* FID (num,seq,rvn) */ unsigned short st_mode; /* file "mode" i.e. prot, dir, reg, etc. */ int st_nlink; /* for compatibility - not really used */ unsigned st_uid; /* from ACP - QIO uic field */ @@ -265,14 +278,10 @@ struct mystat char st_fab_fsz; /* fixed header size */ unsigned st_dev; /* encoded device name */ }; -#ifdef st_ino -# undef st_ino -#endif -#define st_ino st_inode_u.st_ino_mostly #define stat mystat typedef unsigned mydev_t; #define dev_t mydev_t -typedef unsigned long myino_t; +typedef unsigned myino_t; #define ino_t myino_t #if defined(__DECC) || defined(__DECCXX) # pragma __member_alignment __restore @@ -294,8 +303,11 @@ typedef unsigned long myino_t; * __VMS_PROTOTYPES__ and __VMS_SEPYTOTORP__ lines, and must be in the form * <data type><TAB>name<WHITESPACE>_((<prototype args>)); */ -typedef char __VMS_PROTOTYPES__; /* prototype section start marker */ +/* prototype section start marker; `typedef' passes through cpp */ +typedef char __VMS_PROTOTYPES__; +int my_trnlnm _((char *, char *, unsigned long int)); char * my_getenv _((char *)); +char * my_crypt _((const char *, const char *)); unsigned long int waitpid _((unsigned long int, int *, int)); char * my_gconvert _((double, int, int, char *)); int do_rmdir _((char *)); @@ -335,8 +347,10 @@ struct passwd * my_getpwnam _((char *name)); struct passwd * my_getpwuid _((Uid_t uid)); struct passwd * my_getpwent _(()); void my_endpwent _(()); +char * my_getlogin _(()); void init_os_extras _(()); -typedef char __VMS_SEPYTOTORP__; /* prototype section end marker */ +typedef char __VMS_SEPYTOTORP__; +/* prototype section end marker; `typedef' passes through cpp */ #ifndef VMS_DO_SOCKETS /* This relies on tricks in perl.h to pick up that these manifest constants |