| 
       
          Document revision date: 30 March 2001
      
     | 
  
 
  
    
![[Compaq]](../images/compaq.gif)  | 
    
       
 
 
 
 
      
     | 
  
 
  
    
 
     | 
  
 
 
 
 
OpenVMS RTL String Manipulation (STR$) Manual
STR$FIND_FIRST_NOT_IN_SET
The Find First Character That Does Not Occur in Set routine searches a 
string, comparing each character to the characters in a specified set 
of characters. The string is searched character by character, from left 
to right. STR$FIND_FIRST_NOT_IN_SET returns the position of the first 
character in the string that does not match any of the characters in 
the selected set of characters.
Format
STR$FIND_FIRST_NOT_IN_SET source-string ,set-of-characters
RETURNS
  
    | OpenVMS usage:  | 
    longword_signed | 
  
  
    | type:  | 
    longword (signed) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by value | 
  
Position in source-string where a nonmatch was found.
On Alpha systems, if the relative position of the substring can exceed 
232 - 1, assign the return value to a quadword to ensure 
that you retrieve the correct relative position.
  
    | Returned Value  | 
    Condition  | 
  
  
    | 
      0
     | 
    
Either all characters in
source-string match some characters in
set-of-characters, or there were no characters in
      set-of-characters.
     | 
  
  
    | 
      1
     | 
    
Either the first nonmatching character in
source-string was found in position 1, or there were 
no characters in
      source-string.
     | 
  
  
    | 
      N
     | 
    
The first nonmatching character was found in position N within
      source-string.
     | 
  
Arguments
source-string
  
    | OpenVMS usage:  | 
    char_string | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by descriptor | 
  
String that STR$FIND_FIRST_NOT_IN_SET searches. The 
source-string argument is the address of a descriptor 
pointing to the string.
set-of-characters
  
    | OpenVMS usage:  | 
    char_string | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by descriptor | 
  
The set of characters that STR$FIND_FIRST_NOT_IN_SET compares to the 
string, looking for a nonmatch. The set-of-characters 
argument is the address of a descriptor pointing to this set of 
characters.
Description
STR$FIND_FIRST_NOT_IN_SET searches a string, comparing each character 
to the characters in a specified set of characters. The string is 
searched character by character, from left to right. When 
STR$FIND_FIRST_NOT_IN_SET finds a character from the string that is not 
in set-of-characters, it stops searching and returns, 
as the value of STR$FIND_FIRST_NOT_IN_SET, the position in 
source-string where it found the nonmatching 
character. If all characters in the string match some character in the 
set of characters, STR$FIND_FIRST_NOT_IN_SET returns 0. If the string 
is of zero length, the position returned is 1 since none of the 
elements in the set of characters (particularly the first element) can 
be found in the string. If there are no characters in the set of 
characters, 0 is returned since "nothing" can always be found.
Condition Value Signaled
  
    | 
      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.
     | 
  
Example
  
     | 
  
    
       
      
PROGRAM NOT_IN_SET(INPUT, OUTPUT); 
 
{+} 
{  This example uses STR$FIND_FIRST_NOT_IN_SET 
{  to find the position of the first nonmatching 
{  character from a set of characters (CHARS) 
{  in a source string (STRING1). 
{ 
{  First, declare the external function. 
{-} 
 
FUNCTION STR$FIND_FIRST_NOT_IN_SET(STRING : 
          VARYING [A] OF CHAR; SETOFCHARS : 
          VARYING [B] OF CHAR) : INTEGER; 
          EXTERN; 
{+} 
{  Declare the variables used in the main program. 
{-} 
 
VAR 
  STRING1       : VARYING [256] OF CHAR; 
  CHARS         : VARYING [256] OF CHAR; 
  RET_STATUS    : INTEGER; 
 
{+} 
{  Begin the main program.  Read the source string 
{  and set of characters.  Call STR$FIND_FIRST_NOT_IN_SET. 
{  Print the result. 
{-} 
 
BEGIN 
  WRITELN('ENTER THE STRING: '); 
  READLN(STRING1); 
  WRITELN('ENTER THE SET OF CHARACTERS: '); 
  READLN(CHARS); 
  RET_STATUS := STR$FIND_FIRST_NOT_IN_SET(STRING1, CHARS); 
  WRITELN(RET_STATUS); 
END. 
 
 
      
      
     | 
  
This Pascal program demonstrates the use of STR$FIND_FIRST_NOT_IN_SET. 
If you run this program and set STRING1 equal to FORTUNATE and CHARS 
equal to FORT, the value of RET_STATUS is 5.
The output generated by this program is as follows:
  
    
       
      
ENTER THE STRING: 
FORTUNATE 
ENTER THE SET OF CHARACTERS: 
FORT 
        5 
 | 
STR$FIND_FIRST_SUBSTRING
The Find First Substring in Input String routine finds the first 
substring (in a provided list of substrings) occurring in a given 
string.
Format
STR$FIND_FIRST_SUBSTRING source-string ,index ,substring-index 
,substring [,substring...]
RETURNS
  
    | OpenVMS usage:  | 
    longword_unsigned | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by value | 
  
The values returned by STR$FIND_FIRST_SUBSTRING and the conditions to 
which they translate are as follows:
  
    | Returned Value  | 
    Condition  | 
  
  
    | 
      0
     | 
    
      source-string did not contain any of the specified 
      substrings.
     | 
  
  
    | 
      1
     | 
    
STR$FIND_FIRST_SUBSTRING found at least one of the specified substrings 
in
      source-string.
     | 
  
Arguments
source-string
  
    | OpenVMS usage:  | 
    char_string | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by descriptor | 
  
String that STR$FIND_FIRST_SUBSTRING searches. The 
source-string argument is the address of a descriptor 
pointing to the string.
index
  
    | OpenVMS usage:  | 
    longword_signed | 
  
  
    | type:  | 
    longword (signed) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by reference | 
  
Earliest position within source-string at which 
STR$FIND_FIRST_SUBSTRING found a matching substring; zero if no 
matching substring was found. The index argument is 
the address of a signed longword containing this position.
substring-index
  
    | OpenVMS usage:  | 
    longword_signed | 
  
  
    | type:  | 
    longword (signed) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by reference | 
  
Ordinal number of the substring that matched (1 for 
the first, 2 for the second, and so on), or zero if 
STR$FIND_FIRST_SUBSTRING found no substrings that matched. The 
substring-index argument is the address of a signed 
longword containing this ordinal number.
substring
  
    | OpenVMS usage:  | 
    char_string | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by descriptor | 
  
Specified substring for which STR$FIND_FIRST_SUBSTRING searches in 
source-string. The substring argument 
is the address of a descriptor pointing to the first substring. You can 
specify multiple substrings to search for.
substring
  
    | OpenVMS usage:  | 
    char_string | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by descriptor | 
  
Additional specified substring for which STR$FIND_FIRST_SUBSTRING 
searches in source-string. The 
substring argument is the address of a descriptor 
pointing to the substring. You can specify multiple substrings to 
search for.
Description
STR$FIND_FIRST_SUBSTRING takes as input a string to be searched and an 
unspecified number of substrings for which to search. It searches the 
specified string and returns the position of the substring that is 
found earliest in the string. This is not necessarily the position of 
the first substring specified. That is, STR$FIND_FIRST_SUBSTRING 
returns the position of the leftmost matching substring. The order in 
which the substrings are searched for is irrelevant.
Unlike many of the compare and search routines, 
STR$FIND_FIRST_SUBSTRING does not return the position in a return 
value. The position of the substring which is found earliest in the 
string is returned in the index argument. If none of 
the specified substrings is found in the string, the value of 
index is 0.
Zero-length strings, or null arguments, produce unexpected results. Any 
time the routine is called with a null substring as an argument, 
STR$FIND_FIRST_SUBSTRING always returns the position of the null 
substring as the first substring found. All other substrings are 
interpreted as appearing in the string after the null string.
Condition Values Signaled
  
    | 
      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$_WRONUMARG
     | 
    
      Wrong number of arguments. You must supply at least one substring.
     | 
  
Example
  
     | 
  
    
       
      
1   !+ 
    ! This is a BASIC program demonstrating the use of 
    ! STR$FIND_FIRST_SUBSTRING.  This program takes as input 
    ! four strings that are listed in a data statement 
    ! at the end of the program.  STR$FIND_FIRST_SUBSTRING 
    ! is called four times (once for each string) 
    ! to find the first substring occurring in the given 
    ! string.  
    !- 
 
    OPTION TYPE = EXPLICIT 
 
    DECLARE STRING      MATCH_STRING 
    DECLARE LONG        RET_STATUS, & 
                        INDEX, & 
                        I, & 
                        SUB_STRING_NUM 
     EXTERNAL LONG FUNCTION STR$FIND_FIRST_SUBSTRING 
 
     FOR I = 1 TO 4 
        READ MATCH_STRING 
        RET_STATUS = STR$FIND_FIRST_SUBSTRING( MATCH_STRING, & 
            INDEX, SUB_STRING_NUM, 'ING', 'CK', 'TH') 
        IF RET_STATUS = 0% THEN 
            PRINT MATCH_STRING;" did not contain any of the substrings" 
        ELSE 
            SELECT SUB_STRING_NUM 
                CASE 1 
                    PRINT MATCH_STRING;" contains ING at position";INDEX 
                CASE 2 
                    PRINT MATCH_STRING;" contains CK at position";INDEX 
                CASE 3 
                    PRINT MATCH_STRING;" contains TH at position";INDEX 
            END SELECT 
        END IF 
     NEXT I 
 
2    DATA CHUCKLE, RAINING, FOURTH, THICK 
 
3    END 
 
 
 
      
      
     | 
  
This BASIC program demonstrates the use of STR$FIND_FIRST_SUBSTRING. 
The output generated by this program is as follows:
  
    
       
      
$ BASIC FINDSUB
$ LINK FINDSUB
$ RUN FINDSUB
CHUCKLE contains CK at position 4 
RAINING contains ING at position 5 
FOURTH contains TH at position 5 
THICK contains TH at position 1 
 
 | 
Note that "THICK" contains both the substrings "TH" 
and "CK". STR$FIND_FIRST_SUBSTRING locates the "CK" 
substring in "THICK", and then locates the "TH" 
substring. However, since the "TH" substring is the earliest, 
or leftmost matching substring, its ordinal number is returned in 
substring-index, and the point at which "TH" 
occurs is returned in index.
STR$FREE1_DX
The Free One Dynamic String routine deallocates one dynamic string.
Format
STR$FREE1_DX string-descriptor
Corresponding JSB Entry Point
STR$FREE1_DX_R4
RETURNS
  
    | OpenVMS usage:  | 
    cond_value | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by value | 
  
Argument
string-descriptor
  
    | OpenVMS usage:  | 
    char_string | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    modify | 
  
  
    | mechanism: | 
    by descriptor | 
  
Dynamic string descriptor of the dynamic string that STR$FREE1_DX 
deallocates. The string-descriptor argument is the 
address of a descriptor pointing to the string to be deallocated. The 
descriptor's CLASS field is checked.
Description
STR$FREE1_DX deallocates the described string space and flags the 
descriptor as describing no string at all. The descriptor's POINTER and 
LENGTH fields contain 0.
Condition Values Returned
  
    | 
      SS$_NORMAL
     | 
    
      Normal successful completion.
     | 
  
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 Compaq support representative.
     | 
  
  
    | 
      STR$ERRFREDYN
     | 
    
      Error freeing dynamic string descriptor. LIB$FREE_VM OR LIB$FREE_VM_64 
      failed to free the descriptor.
     | 
  
  
    | 
      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$GET1_DX
The Allocate One Dynamic String routine allocates a specified number of 
bytes of virtual memory to a specified dynamic string descriptor.
Format
STR$GET1_DX word-integer-length ,character-string
Corresponding JSB Entry Point
STR$GET1_DX_R4
RETURNS
  
    | OpenVMS usage:  | 
    cond_value | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by value | 
  
Arguments
word-integer-length
  
    | OpenVMS usage:  | 
    word_unsigned | 
  
  
    | type:  | 
    word (unsigned) | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by reference | 
  
Number of bytes that STR$GET1_DX allocates. The 
word-integer-length argument is the address of an 
unsigned word containing this number.
character-string
  
    | OpenVMS usage:  | 
    char_string | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    modify | 
  
  
    | mechanism: | 
    by descriptor | 
  
Dynamic string descriptor to which STR$GET1_DX allocates the area. The 
character-string argument is the address of the 
descriptor. The descriptor's CLASS field is checked.
Description
STR$GET1_DX allocates a specified number of bytes of dynamic virtual 
memory to a specified string descriptor. The descriptor must be dynamic.
If the string descriptor already has dynamic memory allocated to it, 
but the amount allocated is less than 
word-integer-length, STR$GET1_DX deallocates that 
space before it allocates new space.
  Note 
Compaq recommends use of the STR$GET1_DX or STR$GET1_DX_64 (Alpha only) 
routine for allocating a string to a dynamic-length string descriptor. 
Simply filling in the length and pointer fields of a dynamic-length 
string descriptor can cause serious and unexpected problems with string 
management. 
     | 
  
Use STR$FREE1_DX to deallocate a string allocated by STR$GET1_DX.
Condition Values Returned
  
    | 
      SS$_NORMAL
     | 
    
      Normal successful completion.
     | 
  
  
    | 
       
     | 
    
       
     | 
  
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 Compaq 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$GET1_DX could not allocate heap 
      storage for a dynamic or temporary string.
     | 
  
STR$GET1_DX_64 (Alpha Only)
The Allocate One Dynamic String routine allocates a specified number of 
bytes of virtual memory to a specified dynamic string descriptor.
Format
STR$GET1_DX_64 quad-integer-length ,character-string
Corresponding JSB Entry Point
STR$GET1_DX_R4
RETURNS
  
    | OpenVMS usage:  | 
    cond_value | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by value | 
  
Arguments
quad-integer-length
  
    | OpenVMS usage:  | 
    quadword_unsigned | 
  
  
    | type:  | 
    quadword (unsigned) | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by reference | 
  
Number of bytes that STR$GET1_DX_64 allocates. The 
quad-integer-length argument is the address of an 
unsigned quadword containing this number.
character-string
  
    | OpenVMS usage:  | 
    char_string | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    modify | 
  
  
    | mechanism: | 
    by descriptor | 
  
Dynamic string descriptor to which STR$GET1_DX_64 allocates the area. 
The character-string argument is the address of the 
descriptor. The descriptor's CLASS field is checked.
Description
STR$GET1_DX_64 allocates a specified number of bytes of dynamic virtual 
memory to a specified 64-bit string descriptor. The descriptor must be 
dynamic.
If the string descriptor already has dynamic memory allocated to it, 
but the amount allocated is less than 
quad-integer-length, STR$GET1_DX_64 deallocates that 
space before it allocates new space.
  Note 
Compaq recommends use of the STR$GET1_DX or STR$GET1_DX_64 (Alpha only) 
routine for allocating a string to a dynamic-length string descriptor. 
Simply filling in the length and pointer fields of a dynamic-length 
string descriptor can cause serious and unexpected problems with string 
management. 
     | 
  
Use STR$FREE1_DX to deallocate a string allocated by STR$GET1_DX_64.
Condition Values Returned
  
    | 
      SS$_NORMAL
     | 
    
      Normal successful completion.
     | 
  
  
    | 
       
     | 
    
       
     | 
  
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 Compaq 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$GET1_DX_64 could not allocate heap 
      storage for a dynamic or temporary string.
     |