diff options
Diffstat (limited to 'vms')
-rw-r--r-- | vms/descrip_mms.template | 12 | ||||
-rw-r--r-- | vms/ext/filespec.t | 2 | ||||
-rw-r--r-- | vms/gen_shrfls.pl | 6 | ||||
-rw-r--r-- | vms/perlvms.pod | 19 | ||||
-rw-r--r-- | vms/subconfigure.com | 4 | ||||
-rw-r--r-- | vms/vms.c | 32 | ||||
-rw-r--r-- | vms/vmsish.h | 4 |
7 files changed, 66 insertions, 13 deletions
diff --git a/vms/descrip_mms.template b/vms/descrip_mms.template index eb9d0bd97a..c96c145752 100644 --- a/vms/descrip_mms.template +++ b/vms/descrip_mms.template @@ -347,7 +347,7 @@ libmods : $(LIBPREREQ) @ $(NOOP) utils : $(utils1) $(utils2) @ $(NOOP) -podxform : [.lib.pod]pod2text.com [.lib.pod]pod2html.com [.lib.pod]pod2latex.com [.lib.pod]pod2man.com [.lib.pod]podchecker.com +podxform : [.lib.pod]pod2text.com [.lib.pod]pod2html.com [.lib.pod]pod2latex.com [.lib.pod]pod2man.com [.lib.pod]podchecker.com [.lib.pod]pod2usage.com [.lib.pod]podselect.com @ $(NOOP) x2p : [.x2p]a2p$(E) [.x2p]s2p.com [.x2p]find2perl.com @ $(NOOP) @@ -582,6 +582,16 @@ dynext : $(LIBPREREQ) $(DBG)perlshr$(E) $(MINIPERL) $(MMS$SOURCE) Copy/Log [.pod]podchecker.com $(MMS$TARGET) +[.lib.pod]pod2usage.com : [.pod]pod2usage.PL $(ARCHDIR)Config.pm + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + $(MINIPERL) $(MMS$SOURCE) + Copy/Log [.pod]pod2usage.com $(MMS$TARGET) + +[.lib.pod]podselect.com : [.pod]podselect.PL $(ARCHDIR)Config.pm + @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] + $(MINIPERL) $(MMS$SOURCE) + Copy/Log [.pod]podselect.com $(MMS$TARGET) + preplibrary : $(MINIPERL_EXE) $(LIBPREREQ) $(SOCKPM) @ Write Sys$Output "Autosplitting Perl library . . ." @ Create/Directory [.lib.auto] diff --git a/vms/ext/filespec.t b/vms/ext/filespec.t index 779396be73..bf0208d94b 100644 --- a/vms/ext/filespec.t +++ b/vms/ext/filespec.t @@ -86,7 +86,7 @@ some:[where.over]the.rainbow unixify /some/where/over/the.rainbow /some/where/over/the.rainbow vmsify some:[where.over]the.rainbow some/where/over/the.rainbow vmsify [.some.where.over]the.rainbow ../some/where/over/the.rainbow vmsify [-.some.where.over]the.rainbow -some/../../where/over/the.rainbow vmsify [-.where.over]the.rainbow +some/../../where/over/the.rainbow vmsify [.some.--.where.over]the.rainbow .../some/where/over/the.rainbow vmsify [...some.where.over]the.rainbow some/.../where/over/the.rainbow vmsify [.some...where.over]the.rainbow /some/.../where/over/the.rainbow vmsify some:[...where.over]the.rainbow diff --git a/vms/gen_shrfls.pl b/vms/gen_shrfls.pl index c668120464..a109f7bdfd 100644 --- a/vms/gen_shrfls.pl +++ b/vms/gen_shrfls.pl @@ -186,12 +186,6 @@ LINE: while (<CPP>) { print "opcode.h>> $_" if $debug > 2; if (/^OP \*\s/) { &scan_func($_); } if (/^\s*EXT/) { &scan_var($_); } - if (/^\s+OP_/) { &scan_enum($_); } - last LINE unless defined($_ = <CPP>); - } - while (/^typedef enum/ .. /^\s*\}/) { - print "global enum>> $_" if $debug > 2; - &scan_enum($_); last LINE unless defined($_ = <CPP>); } # Check for transition to new header file diff --git a/vms/perlvms.pod b/vms/perlvms.pod index 53925b2541..3883233c28 100644 --- a/vms/perlvms.pod +++ b/vms/perlvms.pod @@ -463,7 +463,11 @@ is executed as a DCL command. Otherwise, the first token on the command line is treated as the filespec of an image to run, and an attempt is made to invoke it (using F<.Exe> and the process defaults to expand the filespec) and pass the -rest of C<exec>'s argument to it as parameters. +rest of C<exec>'s argument to it as parameters. If the token +has no file type, and matches a file with null type, then an +attempt is made to determine whether the file is an executable +image which should be invoked using C<MCR> or a text file which +should be passed to DCL as a command procedure. You can use C<exec> in both ways within the same script, as long as you call C<fork> and C<exec> in pairs. Perl @@ -558,9 +562,16 @@ specification (e.g. C<:> or C<]>), an attempt is made to expand it using a default type of F<.Exe> and the process defaults, and if successful, the resulting file is invoked via C<MCR>. This allows you to invoke an image directly simply by passing the file specification -to C<system>, a common Unixish idiom. If LIST consists -of the empty string, C<system> spawns an interactive DCL subprocess, -in the same fashion as typiing B<SPAWN> at the DCL prompt. +to C<system>, a common Unixish idiom. If the token has no file type, +and matches a file with null type, then an attempt is made to +determine whether the file is an executable image which should be +invoked using C<MCR> or a text file which should be passed to DCL +as a command procedure. + +If LIST consists of the empty string, C<system> spawns an +interactive DCL subprocess, in the same fashion as typiing +B<SPAWN> at the DCL prompt. + Perl waits for the subprocess to complete before continuing execution in the current process. As described in L<perlfunc>, the return value of C<system> is a fake "status" which follows diff --git a/vms/subconfigure.com b/vms/subconfigure.com index 30da056561..1686c663de 100644 --- a/vms/subconfigure.com +++ b/vms/subconfigure.com @@ -75,6 +75,7 @@ $ perl_d_sqrtl = "define" $ perl_d_statfs_f_flags = "undef" $ perl_d_statfs_s = "undef" $ perl_d_ustat = "undef" +$ perl_i_ieeefp = "undef" $ perl_i_sunmath = "undef" $ perl_i_sysstatfs = "undef" $ perl_i_sysvfs = "undef" @@ -4003,6 +4004,7 @@ $ WC "d_gethname='" + perl_d_gethname + "'" $ WC "d_phostname='" + perl_d_phostname + "'" $ WC "d_accessx='" + perl_d_accessx + "'" $ WC "d_eaccess='" + perl_d_eaccess + "'" +$ WC "i_ieeefp='" + perl_i_ieeefp + "'" $ WC "i_sunmath='" + perl_i_sunmath + "'" $ WC "i_sysaccess='" + perl_i_sysaccess + "'" $ WC "i_syssecrt='" + perl_i_syssecrt + "'" @@ -4101,7 +4103,7 @@ $ WC "sPRIx64='" + perl_sPRIx64 + "'" $ WC "d_llseek='" + perl_d_llseek + "'" $ WC "d_iconv='" + perl_d_iconv +"'" $ WC "i_iconv='" + perl_i_iconv +"'" -$ WC "inc_version_list_init='""""'" +$ WC "inc_version_list_init='0'" $ WC "uselargefiles='" + perl_uselargefiles + "'" $ WC "uselongdouble='" + perl_uselongdouble + "'" $ WC "usemorebits='" + perl_usemorebits + "'" @@ -987,6 +987,7 @@ pipe_exit_routine() info = open_pipes; while (info) { + int need_eof; _ckvmssts(SYS$SETAST(0)); need_eof = info->mode != 'r' && !info->done; _ckvmssts(SYS$SETAST(1)); @@ -2518,6 +2519,9 @@ getredirection(int *ac, char ***av) exit(vaxc$errno); } if (err != NULL) { + if (strcmp(err,"&1") == 0) { + dup2(fileno(stdout), fileno(Perl_debug_log)); + } else { FILE *tmperr; if (NULL == (tmperr = fopen(err, errmode, "mbc=32", "mbf=2"))) { @@ -2530,6 +2534,7 @@ getredirection(int *ac, char ***av) exit(vaxc$errno); } } + } #ifdef ARGPROC_DEBUG PerlIO_printf(Perl_debug_log, "Arglist:\n"); for (j = 0; j < *ac; ++j) @@ -3388,6 +3393,7 @@ setup_cmddsc(char *cmd, int check_img) { char vmsspec[NAM$C_MAXRSS+1], resspec[NAM$C_MAXRSS+1]; $DESCRIPTOR(defdsc,".EXE"); + $DESCRIPTOR(defdsc2,"."); $DESCRIPTOR(resdsc,resspec); struct dsc$descriptor_s imgdsc = {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, 0}; unsigned long int cxt = 0, flags = 1, retsts = SS$_NORMAL; @@ -3443,18 +3449,44 @@ setup_cmddsc(char *cmd, int check_img) imgdsc.dsc$a_pointer = s; imgdsc.dsc$w_length = wordbreak - s; retsts = lib$find_file(&imgdsc,&resdsc,&cxt,&defdsc,0,0,&flags); + if (!(retsts&1)) { + _ckvmssts(lib$find_file_end(&cxt)); + retsts = lib$find_file(&imgdsc,&resdsc,&cxt,&defdsc2,0,0,&flags); if (!(retsts & 1) && *s == '$') { + _ckvmssts(lib$find_file_end(&cxt)); imgdsc.dsc$a_pointer++; imgdsc.dsc$w_length--; retsts = lib$find_file(&imgdsc,&resdsc,&cxt,&defdsc,0,0,&flags); + if (!(retsts&1)) { _ckvmssts(lib$find_file_end(&cxt)); + retsts = lib$find_file(&imgdsc,&resdsc,&cxt,&defdsc2,0,0,&flags); + } } + } + _ckvmssts(lib$find_file_end(&cxt)); + if (retsts & 1) { + FILE *fp; s = resspec; while (*s && !isspace(*s)) s++; *s = '\0'; + + /* check that it's really not DCL with no file extension */ + fp = fopen(resspec,"r","ctx=bin,shr=get"); + if (fp) { + char b[4] = {0,0,0,0}; + read(fileno(fp),b,4); + isdcl = isprint(b[0]) && isprint(b[1]) && isprint(b[2]) && isprint(b[3]); + fclose(fp); + } + if (check_img && isdcl) return RMS$_FNF; + if (cando_by_name(S_IXUSR,0,resspec)) { New(402,VMScmd.dsc$a_pointer,7 + s - resspec + (rest ? strlen(rest) : 0),char); + if (!isdcl) { strcpy(VMScmd.dsc$a_pointer,"$ MCR "); + } else { + strcpy(VMScmd.dsc$a_pointer,"@"); + } strcat(VMScmd.dsc$a_pointer,resspec); if (rest) strcat(VMScmd.dsc$a_pointer,rest); VMScmd.dsc$w_length = strlen(VMScmd.dsc$a_pointer); diff --git a/vms/vmsish.h b/vms/vmsish.h index 8d4a8caf6b..a09d2be438 100644 --- a/vms/vmsish.h +++ b/vms/vmsish.h @@ -263,6 +263,10 @@ #define HAS_WAIT #define PERL_FS_VER_FMT "%d_%d_%d" +/* Temporary; we need to add support for this to Configure.Com */ +#ifdef PERL_INC_VERSION_LIST +# undef PERL_INC_VERSION_LIST +#endif /* VMS: * This symbol, if defined, indicates that the program is running under |