HP OpenVMS Systems

ask the wizard
Content starts here

DCL Symbols, Substitution, Programming?

» close window

The Question is:

 
I am a unix admin and since last few months I am trying to administer OpenVMS
 systems. I got a task to write few command file and sub-routines in DCL
 language.
 
One of the requirement is to call a sub-routine with a given set of parameters
 and these parameter does not include the calling command file name but the
 sub-routine should know which program called it.
 
I declared a symbol in the login.com:
sub-routine-name :== '@userdisk:[abc]subjob.com f$environment("procedure")'
 
but it resolve the symbol when i login and the value that is passed is not
 correct.
 
I tried different sequences of quotes but could not resolve it.
 
I will appreciate if I get an answer.
 
Thanks
 


The Answer is :

 
  You cannot have the lexical function executed if the symbol substitution
  is implicit.  However, if you are happy to make the substitution explicit,
  you can define your symbols as:
 
    $ subname == "@userdisk:[abc]subjob.com 'f$environment(""procedure"")'"
 
  Then, when you want to use subname:
 
    $ 'subname
 
  The leading quote explicitly substitutes the symbol onto the command
  line, so the lexical function is executed.
 
  Alternatively, the procedure can use:
 
    $ @userdisk:[abc]subjob.com 'f$environment("procedure")'
 
  to invoke the target command procedure and to pass in the name of the
  calling procedure.  (In general, having knowledge of the caller or the
  calling context -- or the name of the calling procedure, in this case
  -- tends to indicate the potential for code modularity problems and
  related issues.)
 
  You could also set a symbol in the calling process and -- assuming that
  the called DCL command procedure has not altered the state of the symbol
  table scope to prevent it -- the called procedure can look for the symol.
 
  The OpenVMS Wizard would strongly recommend reading the OpenVMS User's
  Guide and consideration around acquiring available books such as the
  Guide to Writing Real Programs in DCL -- these materials can help you
  learn to use :== and == correctly, as well as learning details of symbols
  and symbol substitution, logical names, foreign commands, commands such
  as CALL and GOSUB, and many other DCL-related and OpenVMS-related topics.
  Your question here revolves around symbol substitution, and particularly
  when the symbol substitution operations are performed -- in this case,
  the symbol substutution is not performed when you want it.
 
 

answer written or last revised on ( 18-JUL-2003 )

» close window