HP OpenVMS Systems

ask the wizard
Content starts here

Logical names, searchlists?

» close window

The Question is:

 
This question concerns f$parse when the default directory is a search list.
 f$parse seems to return an incorrect device if the search lists are defined a
 certain way.  Are there rules to be followed when defining search lists or
 should it just be done by
 example?
 
Example follows:
 
$ show default			! our default is a search list
  PRD_SOURCE:[BUILD]
  =   LOC_SOURCE:[BUILD]
  =   DEV_SOURCE:[BUILD]
$ show logical/full prd_source	! logical is defined to point to two other
 logicals
   "PRD_SOURCE" [exec] = "loc_source:" (LNM$JOB_81015280)
        = "dev_source:"
1  "LOC_SOURCE" [exec] = "DISK1:[USERS.GOODMAN.LOCAL_SOURCE.]" [concealed]
 (LNM$JOB_81015280)
1  "DEV_SOURCE" [exec] = "disk1:[prd_source.]" [concealed] (LNM$JOB_81015280)
   "PRD_SOURCE" [exec] = "DISK1:[PRD_SOURCE.]" [concealed] (LNM$SYSTEM_TABLE)
$ dir set_build_env.com		! This file exists only in the second directory
 
Directory DEV_SOURCE:[BUILD]
 
SET_BUILD_ENV.COM;45
 
Total of 1 file.
$ write sys$output f$parse("set_build_env.com",,,"device")	! but F$PARSE
 says it's in the first directory
LOC_SOURCE:
$ dir x.x			! This file exists only in the first directory
 
Directory LOC_SOURCE:[BUILD]
 
X.X;1
 
Total of 1 file.
$ write sys$output f$parse("x.x",,,"DEVICE")	! F$PARSE reports it correctly
LOC_SOURCE:
$! change logical definitions
$ show default			! our default is still a search list
  PRD_SOURCE:[BUILD]
  =   PRD_SOURCE:[BUILD]
  =   DISK1:[PRD_SOURCE.][BUILD]
$ sh log/fu prd_source		! but the logical is now defined differently
   "PRD_SOURCE" [exec] = "DKA100:[USERS.GOODMAN.LOCAL_SOURCE.]"
 [concealed,terminal] (LNM$JOB_81015280)
        = "DISK1:[PRD_SOURCE.]"
   "PRD_SOURCE" [exec] = "DISK1:[PRD_SOURCE.]" [concealed] (LNM$SYSTEM_TABLE)
$ dir set_build_env.com		! This file still exists only in the second
 directory
 
Directory DISK1:[PRD_SOURCE.][BUILD]
 
SET_BUILD_ENV.COM;45
 
Total of 1 file.
$ write sys$output f$parse("set_build_env.com",,,"device")	! But now
 F$PARSE returns something reasonable
PRD_SOURCE:
$ dir x.x
 
Directory PRD_SOURCE:[BUILD]
 
X.X;1
 
Total of 1 file.
$ write sys$output f$parse("x.x",,,"DEVICE")	! F$PARSE returns PRD_SOURCE
 for all files
PRD_SOURCE:
 
 
 
 


The Answer is :

 
  The OpenVMS Wizard would encourage you to define the logical names
  involved exactly as the SYS$SYSROOT and related logical names are
  defined.  If you do not have the concealed and the terminal attributes
  correctly configured, then you can (will) encounter these problems.
  In this case, PRD_SOURCE is (incorrectly) not marked as concealed.
 
  Also make sure that any logical names with the "concealed" attribute use
  only physical device names in the equivalence name. The following DCL
  will define a concealed, terminal logical name, performing the translation
  from logical device name to physical, if necessary.
 
  for example, the following command will define a concealed device rooted
  in SYS$SPECIFIC:[SYSMGR] (first translation of SYS$MANAGER):
 
 $ @DEFINE_CONCEALED SYSMGR SYS$MANAGER
 
 
DEFINE_CONCEALED.COM
$ IF p1.EQS."" THEN INQUIRE p1 "Logical name"
$ IF p2.EQS."" THEN INQUIRE p2 "Directory"
$ !  p3 = extra DEFINE qualifiers
$ !
$ Conc=F$TRNLNM(F$PARSE(p2,,,"DEVICE")-":")
$ IF F$LOCATE("<",Conc).LT.F$LENGTH(Conc)
$ THEN
$   lbr="<"
$   rbr=">"
$ ELSE
$   lbr="["
$   rbr="]"
$ ENDIF
$ trans=(F$PARSE(p2,,,"DEVICE","NO_CONCEAL")+-
         F$PARSE(p2,lbr+"000000"+rbr,,"DIRECTORY","NO_CONCEAL"))--
         (rbr+lbr)-("000000"+rbr)-("."+rbr)+"*"-".*"-"*"-rbr+("."+rbr)
$ DEFINE/TRANSLATION_ATTRIBUTES=(TERMINAL,CONCEALED)'p3' 'p1' 'trans'
$ EXIT
 

answer written or last revised on ( 1-AUG-2001 )

» close window