Stephen Hoffman wrote:
> In addition to the (expected but) bizzare behaviour seen here when
> the DISK$ logical names are redefined, PCSI will also get very confused
> by this particular redefinition -- if there are any kits installed on
> this target disk...
>
> File Identifiers (FIDs) are volume-specific. If you want to translate
> from a FID to a full file specification, you need the FID and the DVI.
>
> The documentation of lib$fid_to_name is confusing in at least one way,
> but any site that is redefining reserved logical names (in undocumented
> and unsupported fashion) is perilous practice at best...
>
> The creation of logical names containing "dollar" signs is reserved
> to registered facilities. (BTW, I am registering the "PERL" prefix,
> have reworked configure.com and am creating a PCSI Perl kit, but that
> is another discussion entirely.)
>
> I was asked where Compaq OpenVMS documents this -- while the dollar
> prefix requirements are documented, it is impossible to document all
> of the different potential failure modes. We do document what is
> supported, and I would be very surprised to find the redefinition of
> the DISK$mumble logical name documented.
>
> As Dan succinctly commented: "don't do that."
Correction: the DISK$volnam logical was not redefined. "volnam" was used
to form a rooted logical name that did not point to DISK$volnam:[000000].
In fact, no user defined logical names employ dollar signs in them on the
machine in question with the single exception of DISK$ORACLE, which is
apparently required as part of an Oracle installation.
Oddly, perl 5.005_02, 5.005_03, and 5.005_62 (modulo vms kit build patching)
did not have any trouble building from the root of the device in question.
That is, untarring kits into DISK$volnam:[PERL5_005_02],
DISK$volnam:[PERL5_005_02], etc. did not have any trouble invoking the
writemain.pl script during the build.
The mount command for the volume in question was:
$ MOUNT/NOASSIST/SYSTEM DKB100 USER USER
The rooted logical name was pointing into a sub directory on that device:
$ DEFINE /SYSTEM /TRANSLATION_ATTRIBUTES=(CONCEAL,TERMINAL) USER DKB100:[u.]
This presents a problem only to perl5.6.0 RC2, not to 5.005_02 or 5.005_03.
Here for example is the portion of the build of perl 5.005_03 that would
kill 5.6.0 RC2:
MCR Sys$Disk:[]miniperl.exe "-I[.lib]" [.VMS]Writemain.pl "DynaLoader Socket"
Adding DynaLoader . . .
Adding Socket . . .
CC/DECC
/Include=[]/Standard=Relaxed_ANSI/Prefix=All/Obj=.obj/NoList/Define=PERL
_CORE PERLMAIN.C
that is, the 5.005_03 miniperl had no trouble finding the [.vms]writemain.pl
script despite the fact that the build is taking place in:
$ show default
DKB100:[PERL5_005_03]
We are in a position that allows us to change the parameters to the mount
command, however we apparently only need to do so because the compilation
of perl has changed, not the DEC C version, not the OS, not lib$fid_to_name()
etc. Unfortunately I don't have enough time right now to look into what
has changed in [.VMS]VMS.C to have caused this.
Peter Prymmer