| 
     
     
         
 
 
  
 
  
 
  
 
  
 
  
 
  
 
          | 
     
     
         | 
          
          
          
          Updated: 
          
11 December 1998
          
          
          
          | 
      
 
 
OpenVMS RTL String Manipulation (STR$) Manual
Condition Values Signaled
  
    | 
      STR$_FATINTERR
     | 
    
      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 Digital support representative.
     | 
  
  
    | 
      LIB$_INVARG
     | 
    
      Invalid argument.
     | 
  
  
    | 
      STR$_ILLSTRCLA
     | 
    
      Illegal string class. The class code found in the class field of a 
      descriptor is not a string class code allowed by the OpenVMS calling 
      standard.
     | 
  
  
    | 
      STR$_INSVIRMEM
     | 
    
      Insufficient virtual memory. STR$REPLACE could not allocate heap 
      storage for a dynamic or temporary string.
     | 
  
Example
  
     | 
  
    
       
      
10 !+ 
   !  This example uses STR$REPLACE to 
   !  replace all characters from the starting 
   !  position (2%) to the ending position (3%) 
   !  with characters from the replacement string 
   !  ('XYZ'). 
   !- 
 
   EXTERNAL INTEGER FUNCTION STR$REPLACE 
   D$ = 'ABCD' 
   STATUS% = STR$REPLACE (D$, D$, 2%, 3%, 'XYZ') 
   PRINT D$ 
   END 
 
      
      
     | 
  
These BASIC statements set D$ equal to 'AXYZD'.
STR$RIGHT
The Extract a Substring of a String routine copies a substring ending 
at the last character of a source string into a destination string.
Format
STR$RIGHT destination-string ,source-string ,start-position 
Corresponding JSB Entry Point
STR$RIGHT_R8 
RETURNS
  
    | OpenVMS usage:  | 
    cond_value | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by value | 
  
Arguments
destination-string
  
    | OpenVMS usage:  | 
    char_string | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by descriptor  | 
  
Destination string into which STR$RIGHT copies the substring. The 
destination-string argument is the address of a 
descriptor pointing to the destination string.
source-string
  
    | OpenVMS usage:  | 
    char_string | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by descriptor  | 
  
Source string from which STR$RIGHT extracts the substring that it 
copies into the destination string. The source-string 
argument is the address of a descriptor pointing to the source string.
start-position
  
    | OpenVMS usage:  | 
    longword_signed | 
  
  
    | type:  | 
    longword (signed) | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by reference for CALL entry point, by value for JSB entry 
    point | 
  
Relative position in the source string at which the substring that 
STR$RIGHT copies starts. The start-position argument 
is the address of a signed longword containing the starting position.
Description
STR$RIGHT extracts a substring from a source string and copies that 
substring into a destination string. STR$RIGHT defines the substring by 
specifying the relative starting position. The relative ending position 
is equal to the length of the source string. The source string is 
unchanged, unless it is also the destination string.
If the starting position is less than 2, the entire source string is 
copied. If the starting position is greater than the length of the 
source string, a null string is copied.
This is a variation of STR$POS_EXTR. Other routines that can be used to 
extract and copy a substring are STR$LEFT and STR$LEN_EXTR.
Condition Values Returned
  
    | 
      SS$_NORMAL
     | 
    
      Normal successful completion.
     | 
  
  
    | 
      STR$_ILLSTRPOS
     | 
    
      Alternate success. An argument referenced a character position outside 
      the specified string. A default value was used.
     | 
  
  
    | 
      STR$_TRU
     | 
    
      String truncation warning. The destination string could not contain all 
      the characters copied from the source string.
     | 
  
Condition Values Signaled
  
    | 
      STR$_FATINTERR
     | 
    
      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 Digital support representative.
     | 
  
  
    | 
      LIB$_INVARG
     | 
    
      Invalid argument.
     | 
  
  
    | 
      STR$_ILLSTRCLA
     | 
    
      Illegal string class. The class code found in the class field of a 
      descriptor is not a string class code allowed by the OpenVMS calling 
      standard.
     | 
  
  
    | 
      STR$_INSVIRMEM
     | 
    
      Insufficient virtual memory. STR$RIGHT could not allocate heap storage 
      for a dynamic or temporary string.
     | 
  
Example
  
     | 
  
    
       
      
PROGRAM RIGHT(INPUT, OUTPUT); 
 
{+} 
{  This example uses STR$RIGHT to extract a substring 
{  from a specified starting position (START_POS) to 
{  the end (right side) of a source string (SRC_STR) 
{  and write the result in a destination string (DST_STR). 
{ 
{  First, declare the external procedure. 
{-} 
 
PROCEDURE STR$RIGHT(%DESCR DSTSTR: VARYING 
          [A] OF CHAR; SRCSTR  : VARYING [B] OF CHAR; 
          STARTPOS : INTEGER); EXTERN; 
{+} 
{  Declare the variables used in the main program. 
{-} 
 
VAR 
  SRC_STR       : VARYING [256] OF CHAR; 
  DST_STR       : VARYING [256] OF CHAR; 
  START_POS     : INTEGER; 
 
{+} 
{  Begin the main program.  Read the source string 
{  and starting position. Call STR$RIGHT to extract 
{  the substring.  Print the result. 
{-} 
 
BEGIN 
  WRITELN('ENTER THE SOURCE STRING: '); 
  READLN(SRC_STR); 
  WRITELN('ENTER THE STARTING POSITION'); 
  WRITELN('OF THE SUBSTRING: '); 
  READLN(START_POS); 
  STR$RIGHT(DST_STR, SRC_STR, START_POS); 
  WRITELN; 
  WRITELN('THE SUBSTRING IS: ',DST_STR); 
END. 
 
      
      
     | 
  
This Pascal program uses STR$RIGHT to extract a substring from a 
specified starting position (START_POS) to the end of the source 
string. One sample of the output is as follows:
  
    
       
      
$ RUN RIGHT
ENTER THE SOURCE STRING: BLUE PLANETS ALWAYS HAVE PURPLE PLANTS
ENTER THE STARTING POSITION 
OF THE SUBSTRING: 27
THE SUBSTRING IS: URPLE PLANTS 
 
 | 
STR$ROUND
The Round or Truncate a Decimal String routine rounds or truncates a 
decimal string to a specified number of significant digits and places 
the result in another decimal string.
Format
STR$ROUND places ,flags ,asign ,aexp ,adigits ,csign ,cexp ,cdigits 
RETURNS
  
    | OpenVMS usage:  | 
    cond_value | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by value | 
  
Arguments
places
  
    | OpenVMS usage:  | 
    longword_signed | 
  
  
    | type:  | 
    longword (signed) | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by reference | 
  
Maximum number of decimal digits that STR$ROUND retains in the result. 
The places argument is the address of a signed 
longword containing the number of decimal digits.
flags
  
    | OpenVMS usage:  | 
    mask_longword | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by reference | 
  
Function flag. A value of 0 indicates that the decimal string is 
rounded; a value of 1 indicates that it is truncated. The 
flags argument is the address of an unsigned longword 
containing this function flag.
asign
  
    | OpenVMS usage:  | 
    longword_unsigned | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by reference | 
  
Sign of the decimal input string to be rounded or truncated. The 
asign argument is the address of an unsigned longword 
string containing this sign. A value of 0 is considered positive; a 
value of 1 is considered negative.
aexp
  
    | OpenVMS usage:  | 
    longword_signed | 
  
  
    | type:  | 
    longword (signed) | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by reference | 
  
Power of 10 by which adigits is multiplied to get the 
absolute value of the decimal input string. The aexp 
argument is the address of a signed longword containing this exponent.
adigits
  
    | OpenVMS usage:  | 
    char_string | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by descriptor | 
  
Decimal input string. This is the string of digits to which 
asign and aexp are applied. The 
adigits argument is the address of a descriptor 
pointing to this numeric string. The string must be an unsigned decimal 
number.
csign
  
    | OpenVMS usage:  | 
    longword_unsigned | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by reference | 
  
Sign of the result. The csign argument is the address 
of an unsigned longword containing the result's sign. A value of 0 is 
considered positive; a value of 1 is considered negative.
cexp
  
    | OpenVMS usage:  | 
    longword_signed | 
  
  
    | type:  | 
    longword (signed) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by reference | 
  
Power of 10 by which cdigits is multiplied to get the 
absolute value of the result. The cexp argument is the 
address of a signed longword containing this exponent.
cdigits
  
    | OpenVMS usage:  | 
    char_string | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by descriptor | 
  
Result's numeric text string. The cdigits argument is 
the address of a descriptor pointing to this numeric string. The string 
is an unsigned decimal number.
Description
The Round or Truncate a Decimal String routine rounds or truncates a 
decimal string to a specified number of significant digits and places 
the result in another decimal string.
Condition Values Returned
  
    | 
      SS$_NORMAL
     | 
    
      Normal successful completion.
     | 
  
  
    | 
      STR$_TRU
     | 
    
      String truncation warning. The destination string could not contain all 
      of the characters.
     | 
  
Condition Values Signaled
  
    | 
      LIB$_INVARG
     | 
    
      Invalid argument.
     | 
  
  
    | 
      STR$_FATINTERR
     | 
    
      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 Digital support representative.
     | 
  
  
    | 
      STR$_ILLSTRCLA
     | 
    
      Illegal string class. The class code found in the class field of a 
      descriptor is not a string class code allowed by the OpenVMS calling 
      standard.
     | 
  
  
    | 
      STR$_INSVIRMEM
     | 
    
      Insufficient virtual memory. STR$ROUND could not allocate heap storage 
      for a dynamic or temporary string.
     | 
  
  
    | 
      STR$_WRONUMARG
     | 
    
      Wrong number of arguments.
     | 
  
Example
  
     | 
  
    
       
      
100 !+ 
    !  This example shows the difference between the values obtained 
    !  when rounding or truncating a decimal string. 
    !- 
    ASIGN% = 0% 
    AEXP% = -4% 
    ADIGITS$ = '9999998' 
    CSIGN% = 0% 
    CEXP% = 0% 
    CDIGITS$ = '0' 
    PRINT "A = "; ASIGN%; AEXP%; ADIGITS$ 
    !+ 
    !  First, call STR$ROUND to round the value of A. 
    !- 
    CALL STR$ROUND      (3%, 0%, ASIGN%, AEXP%, ADIGITS$, & 
                        CSIGN%, CEXP%, CDIGITS$) 
    PRINT "ROUNDED:  C = "; CSIGN%; CEXP%; CDIGITS$ 
    !+ 
    !  Now, call STR$ROUND to truncate the value of A. 
    !- 
    CALL STR$ROUND     (3%, 1%, ASIGN%, AEXP%, ADIGITS$, & 
                        CSIGN%, CEXP%, CDIGITS$) 
    PRINT "TRUNCATED:  C = "; CSIGN%; CEXP%; CDIGITS$ 
999 END 
 
 
      
      
     | 
  
This BASIC example uses STR$ROUND to round and truncate the value of A 
to the number of decimal places specified by places. 
The following values apply:
  
    
       
      
    A = 999.9998 (ASIGN = 0, AEXP = -4, ADIGITS = '9999998') 
 | 
The output generated by this program is as follows; note that the 
decimal value of C equals 1000 when rounded and 999 when truncated.
  
    
       
      
A = 0 -4 9999998 
ROUNDED: C = 0 1 100 
TRUNCATED: C = 0 0 999 
 
 | 
STR$TRANSLATE
The Translate Matched Characters routine successively compares each 
character in a source string to all characters in a match string. If a 
source character has a match, the destination character is taken from 
the translate string. Otherwise, STR$TRANSLATE moves the source 
character to the destination string.
Format
STR$TRANSLATE destination-string ,source-string ,translation-string 
,match-string 
RETURNS
  
    | OpenVMS usage:  | 
    cond_value | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by value | 
  
Arguments
destination-string
  
    | OpenVMS usage:  | 
    char_string | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by descriptor | 
  
Destination string. The destination-string argument is 
the address of a descriptor pointing to the destination string.
source-string
  
    | OpenVMS usage:  | 
    char_string | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by descriptor | 
  
Source string. The source-string argument is the 
address of a descriptor pointing to the source string.
translation-string
  
    | OpenVMS usage:  | 
    char_string | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by descriptor | 
  
Translate string. The translation-string argument is 
the address of a descriptor pointing to the translate string.
match-string
  
    | OpenVMS usage:  | 
    char_string | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by descriptor | 
  
Match string. The match-string argument is the address 
of a descriptor pointing to the match string.
Description
STR$TRANSLATE successively compares each character in a source string 
to all characters in a match string. If a source character matches any 
of the characters in the match string, STR$TRANSLATE moves a character 
from the translate string to the destination string. Otherwise, 
STR$TRANSLATE moves the character from the source string to the 
destination string.
The character taken from the translate string has the same relative 
position as the matching character had in the match string. When a 
character appears more than once in the match string, the position of 
the leftmost occurrence of the multiply-defined character is used to 
select the translate string character. If the translate string is 
shorter than the match string and the matched character position is 
greater than the translate string length, the destination character is 
a space.
Condition Values Returned
  
    | 
      SS$_NORMAL
     | 
    
      Normal successful completion.
     | 
  
  
    | 
      STR$_TRU
     | 
    
      String truncation warning. The destination string could not contain all 
      of the characters.
     | 
  
Condition Values Signaled
  
    | 
      STR$_FATINTERR
     | 
    
      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 Digital support representative.
     | 
  
  
    | 
      STR$_ILLSTRCLA
     | 
    
      Illegal string class. The class code found in the class field of a 
      descriptor is not a string class code allowed by the OpenVMS calling 
      standard.
     | 
  
  
    | 
      STR$_INSVIRMEM
     | 
    
      Insufficient virtual memory. STR$TRANSLATE could not allocate heap 
      storage for a dynamic or temporary string.
     | 
  
Example
  
     | 
  
    
       
      
10      !+ 
        !  This example program uses STR$TRANSLATE to 
        !  translate all characters of a source string 
        !  from uppercase to lowercase characters. 
        !- 
 
        EXTERNAL INTEGER FUNCTION STR$TRANSLATE(STRING,STRING,STRING,STRING) 
        TO$='abcdefghijklmnopqrstuvwxyz' 
        FROM$='ABCDEFGHIJKLMNOPQRSTUVWXYZ' 
        X% = STR$TRANSLATE(OUT$,'TEST',TO$,FROM$) 
        PRINT 'Status = ';x% 
        PRINT 'Resulting string = ';out$ 
32767   END 
 
      
      
     | 
  
This BASIC example translates uppercase letters to lowercase letters, 
thus performing a function similar to but the opposite of STR$UPCASE.
The output generated by this example is as follows:
  
    
       
      
$ RUN TRANSLATE
Status =  1  
Resulting string = test 
 
 | 
A more practical although more complicated use for STR$TRANSLATE is to 
encrypt data by translating the characters to obscure combinations of 
numbers and alphabetic characters.
STR$TRIM
The Trim Trailing Blanks and Tabs routine copies a source string to a 
destination string and deletes the trailing blank and tab characters.
Format
STR$TRIM destination-string ,source-string [,resultant-length] 
RETURNS
  
    | OpenVMS usage:  | 
    cond_value | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by value | 
  
Arguments
destination-string
  
    | OpenVMS usage:  | 
    char_string | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by descriptor | 
  
Destination string into which STR$TRIM copies the trimmed string. The 
destination-string argument is the address of a 
descriptor pointing to the destination string.
source-string
  
    | OpenVMS usage:  | 
    char_string | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by descriptor | 
  
Source string which STR$TRIM trims and then copies into the destination 
string. The source-string argument is the address of a 
descriptor pointing to the source string.
resultant-length
  
    | OpenVMS usage:  | 
    word_unsigned | 
  
  
    | type:  | 
    word (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by reference | 
  
Number of bytes that STR$TRIM writes into 
destination-string, not counting padding in the case 
of a fixed-length string. The resultant-length 
argument is the address of an unsigned word into which STR$TRIM writes 
the length of the output string. If the input string is truncated to 
the size specified in the destination-string  
description, resultant-length is set to this size. 
Therefore, resultant-length can always be used by the 
calling program to access a valid substring of 
destination-string.
Description
STR$TRIM copies a source string to a destination string and deletes the 
trailing blank and tab characters.
Condition Values Returned
  
    | 
      SS$_NORMAL
     | 
    
      Normal successful completion.
     | 
  
  
    | 
      STR$_TRU
     | 
    
      String truncation warning. The destination string could not contain all 
      the characters.
     | 
  
Condition Values Signaled
  
    | 
      STR$_FATINTERR
     | 
    
      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 Digital support representative.
     | 
  
  
    | 
      STR$_ILLSTRCLA
     | 
    
      Illegal string class. The class code found in the class field of a 
      descriptor is not a string class code allowed by the OpenVMS calling 
      standard.
     | 
  
  
    | 
      STR$_INSVIRMEM
     | 
    
      Insufficient virtual memory. STR$TRIM could not allocate heap storage 
      for a dynamic or temporary string.
     |