| 
       
          Document revision date: 19 July 1999
      
     | 
  
 
  
    
![[Compaq]](../../images/compaq.gif)  | 
    
       
 
 
 
 
      
     | 
  
 
  
    
 
     | 
  
 
 
 
 
OpenVMS RTL Library (LIB$) Manual
LIB$SCOPY_DXDX
The Copy Source String Passed by Descriptor to Destination routine 
copies a source string passed by descriptor to a destination string.
Format
LIB$SCOPY_DXDX source-string ,destination-string 
Corresponding JSB Entry Point
LIB$SCOPY_DXDX6 
RETURNS
  
    | OpenVMS usage:  | 
    cond_value | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by value | 
  
Arguments
source-string
  
    | OpenVMS usage:  | 
    char_string | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by descriptor | 
  
Source string to be copied to the destination string by LIB$SCOPY_DXDX. 
The source-string argument contains the address of a 
descriptor pointing to this source string. The descriptor class can be 
unspecified, fixed-length, decimal string, array, noncontiguous array, 
varying, or dynamic.
destination-string
  
    | OpenVMS usage:  | 
    char_string | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by descriptor | 
  
Destination string to which the source string is copied. The 
destination-string argument contains the address of a 
descriptor pointing to this destination string.
The following actions occur depending on the class of the destination 
string's descriptor:
  
    | Descriptor Class  | 
    Action  | 
  
  
    | 
      S, Z, SD, A, NCA
     | 
    
      Copy the source string. If needed, space-fill or truncate on the right.
     | 
  
  
    | 
      D
     | 
    
      If the area specified by the destination descriptor is large enough to 
      contain the source string, copy the source string and set the new 
      length in the destination descriptor. If the area specified is not 
      large enough, return the previous space allocation (if any) and then 
      dynamically allocate the amount of space needed. Copy the source string 
      and set the new length and address in the destination descriptor.
     | 
  
  
    | 
      VS
     | 
    
      Copy source string to destination string up to the limit of the 
      descriptor MAXSTRLEN field with no padding. Readjust the current length 
      (CURLEN) field to the actual number of bytes copied.
     | 
  
Description
LIB$SCOPY_DXDX returns all condition values as a status; truncation is 
a qualified success condition value (bit 0 set to 1).
In addition, an equivalent JSB entry point is available, with R0 
containing the first argument and R1 containing the second.
Condition Values Returned
  
    | 
      SS$_NORMAL
     | 
    
      Routine successfully completed. All characters in the input string were 
      copied to the destination string.
     | 
  
  
    | 
      LIB$_STRTRU
     | 
    
      Routine successfully completed. String truncated. The destination 
      string could not contain all of the characters copied from the source 
      string.
     | 
  
  
    | 
      LIB$_FATERRLIB
     | 
    
      Fatal internal error. An internal consistency check has failed. This 
      usually indicates an internal error in the Run-Time Library and should 
      be reported to your Compaq support representative.
     | 
  
  
    | 
      LIB$_INSVIRMEM
     | 
    
      Insufficient virtual memory. Your program has exceeded the image quota 
      for virtual memory.
     | 
  
  
    | 
      LIB$_INVSTRDES
     | 
    
      Invalid string descriptor. A string descriptor has an invalid value in 
      its CLASS field.
     | 
  
LIB$SCOPY_R_DX
The Copy Source String Passed by Reference to Destination String 
routine copies a source string passed by reference to a destination 
string, passed by descriptor.
Format
LIB$SCOPY_R_DX word-integer-source-length ,source-string 
,destination-string 
Corresponding JSB Entry Point
LIB$SCOPY_R_DX6 
RETURNS
  
    | OpenVMS usage:  | 
    cond_value | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by value | 
  
Arguments
word-integer-source-length
  
    | OpenVMS usage:  | 
    word_unsigned | 
  
  
    | type:  | 
    word (unsigned) | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by reference | 
  
Length of the source string in bytes. The  
word-integer-source-length argument is the address of an 
unsigned word that contains the length of the source string.
source-string
  
    | OpenVMS usage:  | 
    char_string | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by reference | 
  
Source string to be copied to the destination string by LIB$SCOPY_R_DX. 
The source-string argument is the address of this 
source string.
destination-string
  
    | OpenVMS usage:  | 
    char_string | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by descriptor | 
  
Destination string to which the source string is copied. The 
destination-string argument contains the address of a 
descriptor pointing to this destination string.
Description
LIB$SCOPY_R_DX copies a source string, passed by reference, to a 
destination string, passed by descriptor. It returns the status as a 
condition value. Truncation is a qualified success; LIB$SCOPY_R_DX sets 
bit 0 of the condition value to 1.
The actions taken by LIB$SCOPY_R_DX depend on the descriptor class of 
the destination string. The following table describes these actions for 
each descriptor class:
  
    | Descriptor Class  | 
    Action  | 
  
  
    | 
      S, Z, SD, A, NCA
     | 
    
      Copy the source string. If needed, space fill or truncate on the right.
     | 
  
  
    | 
      D
     | 
    
      If the area specified by the destination descriptor is large enough to 
      contain the source string, copy the source string and set the new 
      length in the destination descriptor.
     | 
  
  
    | 
       
     | 
    
      If the area specified is not large enough, return the previous space 
      allocation, if any, and then dynamically allocate the amount of space 
      needed. Copy the source string and set the new length and address in 
      the destination descriptor.
     | 
  
  
    | 
      VS
     | 
    
      Copy source string to destination string up to the limit of the 
      decsriptor's MAXSTRLEN field with no padding. Readjust the string's 
      current length (CURLEN) field to the actual number of bytes copied.
     | 
  
An equivalent JSB entry is available, with R0 being the first argument, 
R1 the second, and R2 the third. The length argument is passed in bits 
15:0 of R0.
Condition Values Returned
  
    | 
      SS$_NORMAL
     | 
    
      Routine successfully completed. All characters in the input string were 
      copied to the destination string.
     | 
  
  
    | 
      LIB$_STRTRU
     | 
    
      Routine successfully completed. String truncated. The destination 
      string could not contain all of the characters copied from the source 
      string.
     | 
  
  
    | 
      LIB$_FATERRLIB
     | 
    
      Fatal internal error. An internal consistency check has failed. This 
      usually indicates an internal error in the Run-Time Library and should 
      be reported to your Compaq support representative.
     | 
  
  
    | 
      LIB$_INSVIRMEM
     | 
    
      Insufficient virtual memory. Your program has exceeded the image quota 
      for virtual memory.
     | 
  
  
    | 
      LIB$_INVSTRDES
     | 
    
      Invalid string descriptor. A string descriptor has an invalid value in 
      its CLASS field.
     | 
  
LIB$SCOPY_R_DX_64 (Alpha Only)
The Copy Source String Passed by Reference to Destination String 
routine copies a source string passed by reference to a destination 
string, passed by descriptor.
Format
LIB$SCOPY_R_DX_64 quad-integer-source-length ,source-string 
,destination-string 
RETURNS
  
    | OpenVMS usage:  | 
    cond_value | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by value | 
  
Arguments
quad-integer-source-length
  
    | OpenVMS usage:  | 
    quadword_unsigned | 
  
  
    | type:  | 
    quadword (unsigned) | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by reference | 
  
Length of the source string in bytes. The 
quad-integer-source-length argument is the address of 
an unsigned quadword that contains the length of the source string.
source-string
  
    | OpenVMS usage:  | 
    char_string | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by reference | 
  
Source string to be copied to the destination string by 
LIB$SCOPY_R_DX_64. The source-string argument is the 
address of this source string.
destination-string
  
    | OpenVMS usage:  | 
    char_string | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by descriptor | 
  
Destination string to which the source string is copied. The 
destination-string argument contains the address of a 
descriptor pointing to this destination string.
Description
LIB$SCOPY_R_DX_64 copies a source string, passed by reference, to a 
destination string, passed by descriptor. It returns the status as a 
condition value. Truncation is a qualified success; LIB$SCOPY_R_DX_64 
sets bit 0 of the condition value to 1.
The actions taken by LIB$SCOPY_R_DX_64 depend on the descriptor class 
of the destination string. The following table describes these actions 
for each descriptor class:
  
    | Descriptor Class  | 
    Action  | 
  
  
    | 
      S, Z, SD, A, NCA
     | 
    
      Copy the source string. If needed, space fill or truncate on the right.
     | 
  
  
    | 
      D
     | 
    
      If the area specified by the destination descriptor is large enough to 
      contain the source string, copy the source string and set the new 
      length in the destination descriptor.
     | 
  
  
    | 
       
     | 
    
      If the area specified is not large enough, return the previous space 
      allocation, if any, and then dynamically allocate the amount of space 
      needed. Copy the source string and set the new length and address in 
      the destination descriptor.
     | 
  
  
    | 
      VS
     | 
    
      Copy source string to destination string up to the limit of the 
      descriptor's MAXSTRLEN field with no padding. Readjust the string's 
      current length (CURLEN) field to the actual number of bytes copied.
     | 
  
Condition Values Returned
  
    | 
      SS$_NORMAL
     | 
    
      Routine successfully completed. All characters in the input string were 
      copied to the destination string.
     | 
  
  
    | 
      LIB$_STRTRU
     | 
    
      Routine successfully completed. String truncated. The destination 
      string could not contain all of the characters copied from the source 
      string.
     | 
  
  
    | 
      LIB$_FATERRLIB
     | 
    
      Fatal internal error. An internal consistency check has failed. This 
      usually indicates an internal error in the Run-Time Library and should 
      be reported to your Compaq support representative.
     | 
  
  
    | 
      LIB$_INSVIRMEM
     | 
    
      Insufficient virtual memory. Your program has exceeded the image quota 
      for virtual memory.
     | 
  
  
    | 
      LIB$_INVSTRDES
     | 
    
      Invalid string descriptor. A string descriptor has an invalid value in 
      its CLASS field.
     | 
  
LIB$SET_LOGICAL
The Set Logical Name routine requests the calling process's command 
language interpreter (CLI) to define or redefine a supervisor-mode 
process logical name. It provides the same function as the DCL command 
DEFINE.
Format
LIB$SET_LOGICAL logical-name [,value-string] [,table] [,attributes] 
[,item-list] 
Either the item-list or value-string 
argument must be specified. If both item-list and 
value-string are specified, the 
value-string argument is ignored.
RETURNS
  
    | OpenVMS usage:  | 
    cond_value | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by value | 
  
Arguments
logical-name
  
    | OpenVMS usage:  | 
    logical_name | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by descriptor | 
  
Logical name to be defined or redefined. The 
logical-name argument contains the address of a 
descriptor pointing to this logical name string. The maximum length of 
a logical name is 255 characters. Note that logical names are case 
sensitive.
value-string
  
    | OpenVMS usage:  | 
    char_string | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by descriptor | 
  
Value to be given to the logical name. The 
value-string argument contains the address of a 
descriptor pointing to this value string. The maximum length of a 
logical name value is 255 characters.
If omitted, an item list must be present to specify the values of the 
logical name.
table
  
    | OpenVMS usage:  | 
    char_string | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by descriptor | 
  
Name of the table in which to create the logical name. The 
table argument contains the address of a descriptor 
pointing to the logical name table. If no table is specified, 
LNM$PROCESS is used as the default.
attributes
  
    | OpenVMS usage:  | 
    mask_longword | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by reference | 
  
Logical name or translation attributes. The attributes 
argument is the address of a longword bit mask that contains the 
logical name or translation attributes.
LNM$M_CONFINE and LNM$M_NO_ALIAS are currently available logical name 
attributes. See the description of the $CRELNM system service in the 
OpenVMS System Services Reference Manual for definitions of LNM$M_CONFINE and LNM$M_NO_ALIAS. If 
omitted, no special logical name attribute is established.
If no item-list is specified, the translation 
attributes LNM$M_CONCEALED and LNM$M_TERMINAL may be specified. See the 
description of the ASSIGN command in the OpenVMS DCL Dictionary for definitions 
of these attributes. If an item-list is specified, it 
will contain the translation attributes for each equivalence string in 
the attribute.
item-list
  
    | OpenVMS usage:  | 
    item_list_3 | 
  
  
    | type:  | 
    unspecified | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by reference, array reference | 
  
Item list describing the equivalence names for this logical name. The 
item-list argument contains the address of an array 
that contains this item list. If item-list is not 
specified, the logical name will have only one value, as specified in 
the value-string argument. Item codes for use with 
this item list are included in libraries supplied by Compaq in module 
$LNMDEF.
Either value-string or item-list must 
be specified. If neither is specified, the LIB$_INVARG error is 
produced. If both value-string and 
item-list are specified, the 
value-string argument is ignored.
If item-list is specified, only logical name 
attributes are permitted. Translation attributes appear in the item 
list.
The item-list argument is needed only when you want to 
create multiple equivalence strings for a single logical name.
Description
If the optional table argument is defined, the logical 
name will be placed in the table specified by the 
table argument; otherwise, the logical name is placed 
in the LNM$PROCESS table.
Unlike the system services $CRELOG and $CRELNM, LIB$SET_LOGICAL does 
not require the caller to be executing in supervisor mode to define a 
supervisor-mode logical name. Supervisor-mode logical names are not 
deleted when an image exits. A program can obtain the current value of 
any logical name by calling the system service $TRNLNM. For more 
information on logical names, see the OpenVMS System Services Reference Manual.
This routine is supported for use with the DCL and MCR CLIs. If an 
image is run directly as a subprocess or as a detached process, there 
is no CLI present to perform this function. In that case, the error 
status LIB$_NOCLI is returned.
This routine does not support the DCL DEFINE and DEASSIGN commands' 
special side-effect of opening and closing a process-permanent file if 
the logical name SYS$OUTPUT is specified.
See the OpenVMS DCL Dictionary for a description of the DEFINE command.
Condition Values Returned
  
    | 
      SS$_NORMAL
     | 
    
      Routine successfully completed.
     | 
  
  
    | 
      SS$_ACCVIO
     | 
    
      Access violation. The logical name or its value could not be read.
     | 
  
  
    | 
      SS$_BADPARAM
     | 
    
      Bad argument.
     | 
  
  
    | 
      SS$_BUFFEROVF
     | 
    
      Routine successfully completed; however, a buffer overflow occurred.
     | 
  
  
    | 
      SS$_INSFMEM
     | 
    
      Insufficient dynamic memory.
     | 
  
  
    | 
      SS$_IVLOGNAM
     | 
    
      Invalid logical name. The logical name or its value contained more than 
      255 characters.
     | 
  
  
    | 
      SS$_IVLOGTAB
     | 
    
      Invalid logical name table.
     | 
  
  
    | 
      SS$_NOPRIV
     | 
    
      No privileges for attempted operation.
     | 
  
  
    | 
      SS$_SUPERSEDE
     | 
    
      Routine successfully completed; the previous definition of the logical 
      name was replaced.
     | 
  
  
    | 
      SS$_TOOMANYLNAM
     | 
    
      Logical name translation exceeded allowed depth.
     | 
  
  
    | 
      LIB$_INVARG
     | 
    
      Neither the
      value-string nor the
      item-list argument was specified.
     | 
  
  
    | 
      LIB$_INVSTRDES
     | 
    
      Invalid string descriptor.
     | 
  
  
    | 
      LIB$_NOCLI
     | 
    
      No CLI present to perform function. The calling process did not have a 
      CLI to perform the function or the CLI did not support the request 
      type. Note that an image run as a subprocess or detached process does 
      not have a CLI.
     | 
  
  
    | 
      LIB$_UNECLIERR
     | 
    
      Unexpected CLI error. The CLI returned an error status which was not 
      recognized. This error may be caused by use of a nonstandard CLI. If 
      this error occurs while using the DCL command language interpreter, 
      please report the problem to your Compaq support representative.
     | 
  
Example
  
     | 
  
    
       
      
    
 
!+ 
! Initialize value for logical name MY_LOG 
!- 
SYMBOL$ = 'MY_LOG' 
SETVAL$ = 'OFF' 
CALL LIB$SET_LOGICAL (SYMBOL$, SETVAL$) 
END 
 
      
      
     | 
  
The BASIC program above sets the logical MY_LOG to OFF. This value can 
be displayed after the program is run with SHOW LOGICAL as follows:
  
    
       
      
$ SHOW LOGICAL MY_LOG
"MY_LOG" = "OFF" (LNM$PROCESS_TABLE)
 
 |