| 
       
          Document revision date: 19 July 1999
      
     | 
  
 
  
    
![[Compaq]](../../images/compaq.gif)  | 
    
       
 
 
 
 
      
     | 
  
 
  
    
 
     | 
  
 
 
 
 
OpenVMS RTL Library (LIB$) Manual
LIB$EXTV
The Extract a Field and Sign-Extend routine returns a sign-extended 
longword field that has been extracted from the specified variable bit 
field. LIB$EXTV makes the VAX EXTV instruction available as a callable 
routine.
  Note 
On Alpha systems, OpenVMS Alpha instructions perform the equivalent 
operation. 
     | 
  
Format
LIB$EXTV position ,size ,base-address 
RETURNS
  
    | OpenVMS usage:  | 
    longword_signed | 
  
  
    | type:  | 
    longword integer (signed) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by value  | 
  
Field extracted by LIB$EXTV, sign-extended to a longword.
Arguments
position
  
    | OpenVMS usage:  | 
    longword_signed | 
  
  
    | type:  | 
    longword integer (signed) | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by reference | 
  
Position (relative to the base address) of the first bit in the field 
that LIB$EXTV extracts. The position argument is the 
address of a signed longword integer containing the position.
size
  
    | OpenVMS usage:  | 
    byte_unsigned | 
  
  
    | type:  | 
    byte (unsigned) | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by reference | 
  
Size of the bit field LIB$EXTV extracts. The size 
argument is the address of an unsigned byte containing the size. The 
maximum size is 32 bits.
base-address
  
    | OpenVMS usage:  | 
    longword_unsigned | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by value | 
  
Base address of the bit field LIB$EXTV extracts from the specified 
variable bit field. The base-address argument is an 
unsigned longword containing the base address.
Description
The variable-length bit field is an OpenVMS data type used to store 
small integers packed together in a larger data structure. It is often 
used to store single flag bits.
Three scalar attributes define a variable bit field:
  - The base address is the address of a byte in memory that serves as 
  a reference point for locating the bit field.
  
 - The bit position is a signed longword containing the displacement 
  of the least significant bit of the field with respect to bit 0 of the 
  base address.
  
 - The size is a byte integer indicating the size of the bit field in 
  bits (in the range 0 <= size <= 32). That is, a bit field can be no 
  more than one longword in length.
 
A variable-length bit field has the following format. The area 
containing asterisks indicates the field.
Bit fields are zero-origin, which means that the routine regards the 
first bit in the field as being the zero position.
Condition Value Signaled
  
    | 
      SS$_ROPRAND
     | 
    
      A reserved operand fault occurs if a size greater than 32 is specified.
     | 
  
Example
  
     | 
  
    
       
      
 
 
SIGN_EXTEND: ROUTINE OPTIONS (MAIN); 
 
DECLARE LIB$EXTV ENTRY 
        (FIXED BINARY (31),     /* Address of longword containing 
                                /*   beginning bit position             */ 
         FIXED BINARY (7),      /* Address of byte containing size 
                                /*   of field                           */ 
         FIXED BINARY (31))     /* Address of field                     */ 
         RETURNS (FIXED BINARY (31));   /* Return value                 */ 
 
DECLARE (VALUE, SMALL_INT) FIXED BINARY (31); 
 
ON ENDFILE (SYSIN) STOP; 
 
DO WHILE ('1'B);                /* Loop continuously, until end of file */ 
        PUT SKIP(2); 
        GET LIST (VALUE) OPTIONS (PROMPT ('Value: ')); 
        SMALL_INT = LIB$EXTV ( 0, 4, VALUE);    /* Extract and sign-extend 
                                                /*   first 4 bits       */ 
        PUT SKIP LIST (VALUE, SMALL_INT); 
        END; 
 
END SIGN_EXTEND; 
 
 
      
      
     | 
  
This PL/I program extracts a field and returns it sign-extended into a 
longword.
LIB$EXTZV
The Extract a Zero-Extended Field routine returns a longword 
zero-extended field that has been extracted from the specified variable 
bit field. LIB$EXTZV makes the VAX EXTZV instruction available as a 
callable routine.
  Note 
On Alpha systems, OpenVMS Alpha instructions perform the equivalent 
operation. 
     | 
  
Format
LIB$EXTZV position ,size ,base-address 
RETURNS
  
    | OpenVMS usage:  | 
    longword_signed | 
  
  
    | type:  | 
    longword integer (signed) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by value | 
  
Field extracted by LIB$EXTZV, zero-extended to a longword.
Arguments
position
  
    | OpenVMS usage:  | 
    longword_signed | 
  
  
    | type:  | 
    longword (signed) | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by reference | 
  
Position (relative to the base address) of the first bit in the field 
LIB$EXTZV extracts. The position argument is the 
address of a signed longword integer containing the position.
size
  
    | OpenVMS usage:  | 
    byte_unsigned | 
  
  
    | type:  | 
    byte (unsigned) | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by reference | 
  
Size of the bit field LIB$EXTZV extracts. The size 
argument is the address of an unsigned byte containing the size. The 
maximum size is 32 bits.
base-address
  
    | OpenVMS usage:  | 
    longword_unsigned | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by value | 
  
Base address of the bit field LIB$EXTZV extracts. The 
base-address argument is an unsigned longword 
containing the base address.
Description
The variable-length bit field is an OpenVMS data type used to store 
small integers packed together in a larger data structure. It is often 
used to store single flag bits.
Three scalar attributes define a variable bit field:
  - The base address is the address of the byte in memory that serves 
  as a reference point for locating the bit field.
  
 - The bit position is a signed longword containing the displacement 
  of the least significant bit of the field with respect to bit 0 of the 
  base address.
  
 - The size is a byte integer indicating the size of the bit field in 
  bits (in the range 0 <= size <= 32). That is, a bit field can be no 
  more than one longword in length.
 
A variable-length bit field has the following format. The area 
containing asterisks indicates the field.
 Bit fields are zero-origin fields, which means that the routine regards 
 the first bit in the field as being the zero position.
Condition Value Signaled
  
    | 
      SS$_ROPRAND
     | 
    
      A reserved operand fault occurs if a size greater than 32 is specified.
     | 
  
LIB$FFx
The Find First Clear or Set Bit routines search the field specified by 
the start position, size, and base for the first clear or set bit. 
LIB$FFC and LIB$FFS make the VAX FFC and VAX FFS instructions available 
as callable routines.
  Note 
On Alpha systems, OpenVMS Alpha instructions perform the equivalent 
operation. 
     | 
  
Format
LIB$FFC position ,size ,base ,find-position 
LIB$FFS position ,size ,base ,find-position 
RETURNS
  
    | OpenVMS usage:  | 
    cond_value | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by value | 
  
Arguments
position
  
    | OpenVMS usage:  | 
    longword_signed | 
  
  
    | type:  | 
    longword integer (signed) | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by reference | 
  
Starting position, relative to the base address, of the bit field to be 
searched by LIB$FFx. The position argument is 
the address of a signed longword integer containing the starting 
position.
size
  
    | OpenVMS usage:  | 
    byte_unsigned | 
  
  
    | type:  | 
    byte (unsigned) | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by reference | 
  
Number of bits to be searched by LIB$FFx. The 
size argument is the address of an unsigned byte 
containing the size of the bit field to be searched. The maximum size 
is 32 bits.
base
  
    | OpenVMS usage:  | 
    address | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by reference | 
  
The base argument is the address of the bit field that 
LIB$FFx searches.
find-position
  
    | OpenVMS usage:  | 
    longword_signed | 
  
  
    | type:  | 
    longword integer (signed) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by reference | 
  
Bit position of the first bit in the specified state (clear or set), 
relative to the base address. The find-position 
argument is the address of a signed longword integer into which LIB$FFC 
writes the position of the first clear bit and into which LIB$FFS 
writes the position of the first set bit.
Description
LIB$FFC searches the field specified by the start position, size, and 
base for the first clear bit. LIB$FFS searches the field for the first 
set bit.
If a bit in the specified state is found, LIB$FFx writes the 
position (relative to the base) of that bit into 
find-position and returns a success status. If no bits 
are in the specified state or if size is zero, 
LIB$FFx returns LIB$_NOTFOU and sets 
find-position to the starting position plus the size.
LIB$FFx regards the first bit in the field as being the zero 
position.
Condition Values Returned
  
    | 
      SS$_NORMAL
     | 
    
      Routine successfully completed. A bit in the specified state was found.
     | 
  
  
    | 
      LIB$_NOTFOU
     | 
    
      A bit in the specified state was not found.
     | 
  
Condition Value Signaled
  
    | 
      SS$_ROPRAND
     | 
    
      Reserved operand fault. A size greater than 32 was specified.
     | 
  
LIB$FID_TO_NAME
The Convert Device and File ID to File Specification routine converts a 
disk device name and file identifier to a file specification.
Format
LIB$FID_TO_NAME device-name ,file-id ,filespec [,filespec-length] 
[,directory-id] [,acp-status] 
RETURNS
  
    | OpenVMS usage:  | 
    cond_value | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by value | 
  
Arguments
device-name
  
    | OpenVMS usage:  | 
    char_string | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by descriptor | 
  
Device name to be converted. The device-name argument 
is the address of a descriptor pointing to the device name. It must 
reference a disk device, and must contain 64 characters or less. 
LIB$FID_TO_NAME obtains device-name from the NAM$T_DVI 
field of an OpenVMS RMS name block.
file-id
  
    | OpenVMS usage:  | 
    vector_word_unsigned | 
  
  
    | type:  | 
    word (unsigned) | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by reference, array reference | 
  
Specifies the file identifier. The file-id argument is 
the address of an array of three words containing the file 
identification. LIB$FID_TO_NAME obtains file-id from 
the NAM$W_FID field of an OpenVMS RMS name block. The $FIDDEF macro 
defines the structure of file-id.
filespec
  
    | OpenVMS usage:  | 
    char_string | 
  
  
    | type:  | 
    character string | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by descriptor | 
  
Receives the file specification. The filespec argument 
is the address of a descriptor pointing to the file specification 
string. As of OpenVMS Version 7.2, the maximum file specification 
string that can be returned is 4095 bytes on Alpha systems, and 510 
bytes on VAX systems. On versions prior to Version 7.2, the maximum is 
510 bytes on both platforms. Refer to the Description section for more 
information about the file specification returned.
filespec-length
  
    | OpenVMS usage:  | 
    word_unsigned | 
  
  
    | type:  | 
    word (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by reference | 
  
Receives the number of characters written into 
filespec, excluding padding in the case of a 
fixed-length string. The optional filespec-length 
argument is the address of an unsigned word containing the number of 
characters.
If the output string is truncated to the number of characters specified 
in filespec, then filespec-length is 
set to that truncated size. Therefore, you can always use 
filespec-length to access a valid substring of 
filespec.
directory-id
  
    | OpenVMS usage:  | 
    vector_word_unsigned | 
  
  
    | type:  | 
    word (unsigned) | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by reference, array reference | 
  
Specifies a directory file identifier. The 
directory-id argument is the address of an array of 
three words containing the directory file identifier. LIB$FID_TO_NAME 
obtains this array from the NAM$W_DID field of an OpenVMS RMS name 
block. The $FIDDEF macro defines the structure of 
directory-id.
This parameter is relevant only for a structure level-1 disk on OpenVMS 
VAX systems. This parameter is ignored on OpenVMS Alpha systems because 
level-1 disks are not supported on OpenVMS Alpha systems.
acp-status
  
    | OpenVMS usage:  | 
    longword_unsigned | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by reference | 
  
The status resulting from traversing the backward links. The optional 
acp-status argument is the address of an unsigned 
longword containing the status.
Description
LIB$FID_TO_NAME converts a disk device name and file identifier to a 
file specification by requesting the ACP file specification attribute.
On OpenVMS Alpha systems, if the file specification is longer than can 
be accommodated by the filespec buffer, a directory in 
the path may be replaced by a DID abbreviation (see the Guide to OpenVMS File Applications). 
If the file specification, even after DID abbreviation, is longer than 
can be accommodated by the buffer, the file specification is truncated, 
and LIB$STRTRU is returned as an alternate success status.
On OpenVMS VAX systems, if you use the LIB$FID_TO_NAME routine on a 
structure level 1 disk, specify the directory-id 
argument to ensure proper operation of the routine.
 LIB$FID_TO_NAME uses the directory backpointer stored in the file 
 header. With files in SYS$COMMON, the directory structure is duplicated 
 because of some SET FILE/ENTERs of directory names. If directory names 
 have been renamed or the tree structure modified (which the OpenVMS 
 operating system does with the [SYCOMMON] tree), the file specification 
 returned by this routine may not be useful.
LIB$FID_TO_NAME stores the output arguments (filespec, 
filespec-length, and acp-status) only 
if the routine successfully finishes.
  Note 
This routine calls LIB$GET_EF. Please read the note in the 
Description section of that routine. 
     | 
  
Condition Values Returned
  
    | 
      LIB$_NORMAL
     | 
    
      Routine successfully completed.
     | 
  
  
    | 
      LIB$STRTRU
     | 
    
      Output string truncated (qualified success).
     | 
  
  
    | 
      LIB$_INVARG
     | 
    
      Required argument omitted, or
      device-name is longer than 64 characters.
     | 
  
  
    | 
      LIB$_INVFILSPE
     | 
    
      The
      device-name argument does not reference a disk.
     | 
  
Any condition value returned by RTL routine LIB$ANALYZE_SDESC, or the 
$ASSIGN, $QIO, or $DASSGN system services.
LIB$FILE_SCAN
The File Scan routine searches an area, such as a directory, for all 
files matching the file specification given and transfers program 
execution to the specified user-written routine. Wildcards are 
acceptable. An action routine is called for each file and/or error 
found. LIB$FILE_SCAN allows the search sequence to continue even if an 
error occurs while processing a particular file.
Format
LIB$FILE_SCAN fab ,user-success-procedure ,user-error-procedure 
[,context] 
RETURNS
  
    | OpenVMS usage:  | 
    cond_value | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    write only | 
  
  
    | mechanism: | 
    by value | 
  
Arguments
fab
  
    | OpenVMS usage:  | 
    fab | 
  
  
    | type:  | 
    unspecified | 
  
  
    | access:  | 
    read only | 
  
  
    | mechanism: | 
    by reference | 
  
File Access Block (FAB) referencing a valid NAM block or NAML block. 
The fab argument is the address of the FAB that 
contains the address and length of the file specification being 
searched for by LIB$FILE_SCAN. On Alpha systems, NAML blocks support 
the use of file specifications with a maximum length of NAML$C_MAXRSS. 
See the OpenVMS Record Management Services  Reference Manual for information on NAML blocks.
user-success-procedure
  
    | OpenVMS usage:  | 
    procedure | 
  
  
    | type:  | 
    procedure value | 
  
  
    | access:  | 
    function call (before return) | 
  
  
    | mechanism: | 
    by value | 
  
User-supplied success routine that LIB$FILE_SCAN calls when a file is 
found. The success routine is invoked with the FAB address that was 
passed to LIB$FILE_SCAN. The user context may be pased to this routine 
using the FAB$L_CTX field in the FAB.
user-error-procedure
  
    | OpenVMS usage:  | 
    procedure | 
  
  
    | type:  | 
    procedure value | 
  
  
    | access:  | 
    function call (before return) | 
  
  
    | mechanism: | 
    by value | 
  
User-supplied error routine that LIB$FILE_SCAN calls when it encounters 
an error. The error routine is called with the FAB argument that was 
passed to LIB$FILE_SCAN.
context
  
    | OpenVMS usage:  | 
    context | 
  
  
    | type:  | 
    longword (unsigned) | 
  
  
    | access:  | 
    modify | 
  
  
    | mechanism: | 
    by reference | 
  
Default file context used in processing file specifications for 
multiple input files. The context argument is the 
address of a longword, which must be initialized to zero by your 
program before the first call to LIB$FILE_SCAN. After the first call, 
LIB$FILE_SCAN maintains this longword. You must not change the value of 
context in subsequent calls to LIB$FILE_SCAN.
Name blocks and file specification strings are allocated by 
LIB$FILE_SCAN, and context is used to retain their 
addresses so they may be deallocated later. If the 
context argument is not passed, unspecified portions 
of the file specification will be inherited from the previous file 
specification processed, rather than from multiple input file 
specifications.
Description
LIB$FILE_SCAN is called with the address of a File Access Block (FAB) 
and calls an action routine for each file found and/or error returned. 
LIB$FILE_SCAN allows the search sequence to continue even if an error 
occurs while processing a particular file.
If this routine is called once for each file specification argument in 
a command line, portions of the file specifications which are not 
specified by the user are inherited from the last files processed.
On Alpha systems, support for a file specification greater than 255 
characters is provided by the use of NAML blocks rather than NAM 
blocks. See the OpenVMS Record Management Services  Reference Manual for information on NAML blocks.
You must call LIB$FILE_SCAN_END before initiating a new sequence of 
calls to LIB$FILE_SCAN.
Condition Values Returned
Any condition value returned by the RMS Parse service.