/sys$common/syshlp/HELPLIB.HLB  —  LBR Routines
    The Librarian (LBR) routines let you create and maintain
    libraries and their modules, and use the data stored in library
    modules.

1  –  LBR$CLOSE

    The LBR$CLOSE routine closes an open library.

    Format

      LBR$CLOSE  library_index

1.1  –  Returns

    OpenVMS usage:cond_value
    type:         longword (unsigned)
    access:       write only
    mechanism:    by value

    Longword condition value. Most utility routines return a
    condition value in R0. Condition values that this routine can
    return are listed under Condition Values Returned.

1.2  –  Argument

 library_index

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library control index returned by the LBR$INI_CONTROL routine.
    The library_index argument is the address of the longword that
    contains the index.

1.3  –  Description

    When you are finished working with a library, you should call
    LBR$CLOSE to close it. Upon successful completion, LBR$CLOSE
    closes the open library and deallocates all of the memory used
    for processing it.

1.4  –  Condition Values Returned

    LBR$_ILLCTL        Specified library control index not valid.
    LBR$_LIBNOTOPN     Specified library not open.

2  –  LBR$DELETE_DATA

    The LBR$DELETE_DATA routine deletes module data from the library.

    Format

      LBR$DELETE_DATA  library_index, txtrfa [,flags]

2.1  –  Returns

    OpenVMS usage:cond_value
    type:         longword (unsigned)
    access:       write only
    mechanism:    by value

    Longword condition value. Most utility routines return a
    condition value. Condition values that this routine can return
    are listed under Condition Values Returned.

2.2  –  Arguments

 library_index

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library control index returned by the LBR$INI_CONTROL routine.
    The library_index argument is the address of the longword that
    contains the index.

 txtrfa

    OpenVMS usage:vector_longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Record's file address (RFA) of the module header for the module
    you want to delete. The txtrfa argument is the address of the 2-
    longword array that contains the RFA. You can obtain the RFA of a
    module header by calling LBR$LOOKUP_KEY or LBR$PUT_RECORD.

 flags

    OpenVMS usage:mask_longword
    type:         longword (unsigned)
    access:       read only
    mechanism:    by value
    The contents of the flag are ignored. The purpose of this
    argument is to indicate to this routine that the application
    knows about the new index structure for ELF object and ELF
    shareable image libraries.

2.3  –  Description

    To delete a library module, first call LBR$DELETE_KEY to delete
    all keys that point to it. If no library index keys are pointing
    to the module header, LBR$DELETE_DATA deletes the module header
    and associated data records; otherwise, this routine returns the
    error LBR$_STILLKEYS.

    Note that other library routines can reuse data blocks that
    contain no data.

2.4  –  Condition Values Returned

    LBR$_ILLCTL        Specified library control index not valid.
    LBR$_INVRFA        Specified RFA not valid.
    LBR$_LIBNOTOPN     Specified library not open.
    LBR$_STILLKEYS     Keys in other indexes still point to the
                       module header. Therefore, the specified module
                       was not deleted.

3  –  LBR$DELETE_KEY

    The LBR$DELETE_KEY routine removes a key from the current library
    index.

    Format

      LBR$DELETE_KEY  library_index, key_name[, txtrfa] [, flags]

3.1  –  Returns

    OpenVMS usage:cond_value
    type:         longword (unsigned)
    access:       write only
    mechanism:    by value

    Longword condition value. Most utility routines return a
    condition value. Condition values that this routine can return
    are listed under Condition Values Returned.

3.2  –  Arguments

 library_index

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library control index returned by the LBR$INI_CONTROL routine.
    The library_index argument is the address of a longword that
    contains the index.

 key_name

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    The key to be deleted from the library index. For libraries with
    binary keys, the key_name argument is the address of an unsigned
    longword containing the key number.

    For libraries with ASCII keys, the key_name argument is the
    address of the string descriptor pointing to the key with the
    following argument characteristics:

    Argument
    Characteristics Entry

    OpenVMS usage   char_string
    type            character string
    access          read only
    mechanism       by descriptor

 txtrfa

    OpenVMS usage:vector_longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    The txtrfa argument is the address of the 2-longword array that
    contains the record file address (RFA). If present and if the
    flags argument is not present, the routine scans for all types of
    the key for the specified txtrfa and delete those entries.

 flags

    OpenVMS usage:mask_longword
    type:         longword (unsigned)
    access:       read only
    mechanism:    by value
    If present, this argument indicates that a particular type of the
    key or all types of the key is to be deleted. The flags bits are
    as follows:

    Flag Bits            Description

    LBR$M_SYM_WEAK =     UNIX-style weak symbol attribute
    0x1
    LBR$M_SYM_GROUP =    Group symbol attribute
    0x2
    LBR$M_SYM_ALL =      All symbols
    0x80000000

    If the txtrfa argument is not present or if its value is zero,
    the type indicated by flags is deleted. If txtrfa specifies a
    nonzero value, the entry of the type indicated, with the txtrfa
    supplied, is removed. Note that only one type or all types can be
    specified.

3.3  –  Description

    If LBR$DELETE_KEY finds the key specified by key_name in the
    current index, it deletes the key. Note that if you want to
    delete a library module, you must first use LBR$DELETE_KEY to
    delete all the keys that point to it, then use LBR$DELETE_DATA to
    delete the module's header and associated data. You cannot call
    LBR$DELETE_KEY from within the user-supplied routine specified in
    LBR$SEARCH or LBR$GET_INDEX.

3.4  –  Condition Values Returned

    LBR$_ILLCTL        Specified library control index not valid.
    LBR$_KEYNOTFND     Specified key not found.
    LBR$_LIBNOTOPN     Specified library not open.
    LBR$_UPDIRTRAV     Specified index update not valid in a user-
                       supplied routine specified in LBR$SEARCH or
                       LBR$GET_INDEX.

4  –  LBR$FIND

    The LBR$FIND routine sets the current internal read context for
    the library to the library module specified.

    Format

      LBR$FIND  library_index ,txtrfa

4.1  –  Returns

    OpenVMS usage:cond_value
    type:         longword (unsigned)
    access:       write only
    mechanism:    by value

    Longword condition value. Most utility routines return a
    condition value in R0. Condition values that this routine can
    return are listed under Condition Values Returned.

4.2  –  Arguments

 library_index

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library control index returned by the LBR$INI_CONTROL routine.
    The library_index argument is the address of the longword that
    contains the index.

 txtrfa

    OpenVMS usage:vector_longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Record's file address (RFA) of the module header for the module
    you want to access. The txtrfa argument is the address of a 2-
    longword array containing the RFA. You can obtain the RFA of a
    module header by calling LBR$LOOKUP_KEY or LBR$PUT_RECORD.

4.3  –  Description

    Use the LBR$FIND routine to access a module that you had accessed
    earlier in your program. For example, if you look up several
    keys with LBR$LOOKUP_KEY, you can save the RFAs returned by
    LBR$LOOKUP_KEY and later use LBR$FIND to reaccess the modules.
    Thus, you do not have to look up the module header's key every
    time you want to access the module. If the specified RFA is
    valid, LBR$FIND initializes internal tables so you can read the
    associated data.

4.4  –  Condition Values Returned

    LBR$_ILLCTL        Specified library control index not valid.
    LBR$_INVRFA        Specified RFA not valid.
    LBR$_LIBNOTOPN     Specified library not open.

5  –  LBR$FLUSH

    The LBR$FLUSH routine writes modified blocks back to the library
    file and frees the virtual memory the blocks had been using.

    Format

      LBR$FLUSH  library_index ,block_type

5.1  –  Returns

    OpenVMS usage:cond_value
    type:         longword (unsigned)
    access:       write only
    mechanism:    by value

    Longword condition value. Most utility routines return a
    condition value in R0. Condition values that this routine can
    return are listed under Condition Values Returned.

5.2  –  Arguments

 library_index

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library control index returned by the LBR$INI_CONTROL routine.
    The library_index argument is the address of the longword that
    contains the index.

 block_type

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by value
    Extent of the flush operation. The block_type argument contains
    the longword value that indicates how the flush operation
    proceeds. If you specify LBR$C_FLUSHDATA, the data blocks are
    flushed. If you specify LBR$C_FLUSHALL, first the data blocks and
    then the current library index are flushed.

    Each programming language provides an appropriate mechanism for
    accessing these symbols.

5.3  –  Description

    LBR$FLUSH cannot be called from other LBR routines that reference
    cache addresses or by routines called by LBR routines.

5.4  –  Condition Values Returned

    LBR$_NORMAL        Operation completed successfully.
    LBR$_BADPARAM      Error. A value passed to the LBR$FLUSH routine
                       was either out of range or an illegal value.
    LBR$_WRITERR       Error. An error occurred during the writing of
                       the cached update blocks to the library file.

6  –  LBR$GET_HEADER

    The LBR$GET_HEADER routine returns information from the library's
    header to the caller.

    Format

      LBR$GET_HEADER  library_index ,retary

6.1  –  Returns

    OpenVMS usage:cond_value
    type:         longword (unsigned)
    access:       write only
    mechanism:    by value

    Longword condition value. Most utility routines return a
    condition value in R0. Condition values that this routine can
    return are listed under Condition Values Returned.

6.2  –  Arguments

 library_index

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library control index returned by the LBR$INI_CONTROL routine.
    The library_index argument is the address of the longword that
    contains the index.

 retary

    OpenVMS usage:vector_longword_unsigned
    type:         longword (unsigned)
    access:       write only
    mechanism:    by reference
    Array of 128 longwords that receives the library header. The
    retary argument is the address of the array that contains the
    header information. The information returned in the array is
    listed in the following table. Each programming language provides
    an appropriate mechanism for accessing this information.

    Offset
    in
    Longwords Symbolic Name  Contents

     0        LHI$L_TYPE     Library type (see LBR$OPEN for possible
                             values)
     1        LHI$L_NINDEX   Number of indexes
     2        LHI$L_MAJORID  Library format major identification
     3        LHI$L_MINORID  Library format minor identification
     4        LHI$T_LBRVER   ASCIC version of Librarian
    12        LHI$L_CREDAT   Creation date/time
    14        LHI$L_UPDTIM   Date/time of last update
    16        LHI$L_UPDHIS   Virtual block number (VBN) of start of
                             update history
    17        LHI$L_FREEVBN  First logically deleted block
    18        LHI$L_FREEBLK  Number of deleted blocks
    19        LHI$B_NEXTRFA  Record file address (RFA) of end of
                             library
    21        LHI$L_NEXTVBN  Next VBN to allocate at end of file
    22        LHI$L_         Number of free preallocated index blocks
              FREIDXBLK
    23        LHI$L_FREEIDX  List head for preallocated index blocks
    24        LHI$L_HIPREAL  VBN of highest preallocated block
    25        LHI$L_IDXBLKS  Number of index blocks in use
    26        LHI$L_IDXCNT   Number of index entries (total)
    27        LHI$L_MODCNT   Number of entries in index 1 (module
                             names)
    28        LHI$L_MHDUSZ   Number of bytes of additional
                             information reserved in module header
    29        LHI$L_         Maximum number of library update history
              MAXLUHREC      records maintained
    30        LHI$L_         Number of library update history records
              NUMLUHREC      in history
    31        LHI$L_         Library status (false if there was an
              LIBSTATUS      error closing the library)
    32-128                   Reserved by VSI

6.3  –  Description

    On successful completion, LBR$GET_HEADER places the library
    header information into the array of 128 longwords.

    Note that the offset is the byte offset of the value into the
    header structure. You can convert the offset to a longword
    subscript by dividing the offset by 4 and adding 1 (assuming
    that subscripts in your programming language begin with 1).

6.4  –  Condition Values Returned

    LBR$_ILLCTL        Specified library control index not valid.
    LBR$_LIBNOTOPN     Specified library not open.

7  –  LBR$GET_HELP

    The LBR$GET_HELP routine retrieves help text from a help library,
    displaying it on SYS$OUTPUT or calling your routine for each
    record returned.

    Format

      LBR$GET_HELP  library_index [,line_width] [,routine] [,data]

                    [,key_1] [,key_2 . . . ,key_10]

7.1  –  Returns

    OpenVMS usage:cond_value
    type:         longword (unsigned)
    access:       write only
    mechanism:    by value

    Longword condition value. Most utility routines return a
    condition value in R0. Condition values that this routine can
    return are listed under Condition Values Returned.

7.2  –  Arguments

 library_index

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library control index returned by the LBR$INI_CONTROL routine.
    The library_index argument is the address of the longword that
    contains the index.

 line_width

    OpenVMS usage:longword_signed
    type:         longword (signed)
    access:       read only
    mechanism:    by reference
    Width of the help text line. The line_width argument is the
    address of a longword containing the width of the listing line.
    If you do not supply a line width or if you specify 0, the line
    width defaults to 80 characters per line.

 routine

    OpenVMS usage:procedure
    type:         procedure value
    access:       read only
    mechanism:    by reference
    Routine called for each line of text you want output. The routine
    argument is the address of the procedure value for this user-
    written routine.

    If you do not supply a routine argument, LBR$GET_HELP calls the
    Run-Time Library procedure LIB$PUT_OUTPUT to send the help text
    lines to the current output device (SYS$OUTPUT). However, if you
    want SYS$OUTPUT for your program to be a disk file rather than
    the terminal, you should supply a routine to output the text.

    If the user-written routine returns an error status with low bit
    clear, the LBR$GET_HELP routine passes this status to the caller.
    If the user-written routine returns a success status with low bit
    set, the LBR$GET_HELP routine returns 1 to the caller.

    The routine you specify is called with an argument list of four
    longwords:

    1. The first argument is the address of a string descriptor for
       the output line.

    2. The second argument is the address of an unsigned longword
       containing flag bits that describe the contents of the text
       being passed. The possible flags are as follows:

       HLP$M_          Specified help text cannot be found.
       NOHLPTXT
       HLP$M_          Text contains key names of the printed text.
       KEYNAMLIN
       HLP$M_          Text is part of the information provided on
       OTHERINFO       additional help available.

       Each programming language provides an appropriate mechanism
       for accessing these flags. Note that, if no flag bit is set,
       help text is passed.

    3. The third argument is the address stipulated in the data
       argument specified in the call to LBR$GET_HELP (or the address
       of a 0 constant if the data argument is zero or was omitted).

    4. The fourth argument is a longword containing the address of
       the current key level.

    The routine you specify must return with success or failure
    status. A failure status (low bit = 0) terminates the current
    call to LBR$GET_HELP.

 data

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       write only
    mechanism:    by reference
    Data passed to the routine specified in the routine argument. The
    data argument is the address of data for the routine. The address
    is passed to the routine specified in the routine argument. If
    you omit this argument or specify it as zero, then the argument
    passed in your routine will be the address of a zero constant.

 key_1,key_2, . . . ,key_10

    OpenVMS usage:longword_signed
    type:         longword (signed)
    access:       read only
    mechanism:    by descriptor
    Level of the help text to be output. Each key_1,key_2, . . . ,key_
    10 argument is the address of a descriptor pointing to the key
    for that level.

    If the key_1 descriptor is 0 or if it is not present, LBR$GET_
    HELP assumes that the key_1 name is HELP, and it ignores all the
    other keys. For key_2 through key_10, a descriptor address of 0,
    or a length of 0, or a string address of 0 terminates the list.

    The key argument may contain any of the following special
    character strings:

    String  Meaning

    *       Return all level 1 help text in the library.
    KEY . . .Return all help text associated with the specified key
            and its subkeys (valid for level 1 keys only).
    * . . . Return all help text in the library.

7.3  –  Description

    LBR$GET_HELP returns all help text in the same format as the
    output returned by the DCL command HELP; that is, it indents two
    spaces for every key level of text displayed. (Because of this
    formatting, you may want to make your help messages shorter than
    80 characters, so they fit on one line on terminal screens with
    the width set to 80.) If you do not want the help text indented
    to the appropriate help level, you must supply your own routine
    to change the format.

    Note that most application programs use LBR$OUTPUT_HELP instead
    of LBR$GET_HELP.

7.4  –  Condition Values Returned

    LBR$_ILLCTL        Specified library control index not valid.
    LBR$_LIBNOTOPN     Specified library not open.
    LBR$_NOTHLPLIB     Specified library not a help library.

8  –  LBR$GET_HISTORY

    The LBR$GET_HISTORY routine returns each library update history
    record to a user-specified action routine.

    Format

      LBR$GET_HISTORY  library_index ,action_routine

8.1  –  Returns

    OpenVMS usage:cond_value
    type:         longword (unsigned)
    access:       write only
    mechanism:    by value

    Longword condition value. Most utility routines return a
    condition value in R0. Condition values that this routine can
    return are listed under Condition Values Returned.

8.2  –  Arguments

 library_index

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library control index returned by the LBR$INI_CONTROL routine.
    The library_index argument is the address of the longword that
    contains the index.

 action_routine

    OpenVMS usage:procedure
    type:         procedure value
    access:       modify
    mechanism:    by reference
    User-supplied routine for processing library update history
    records. The action_routine argument is the address of the
    procedure value of this user-supplied routine. The routine is
    invoked once for each update history record in the library.
    One argument is passed to the routine, namely, the address of
    a descriptor pointing to a history record.

8.3  –  Description

    This routine retrieves the library update history records written
    by the routine LBR$PUT_HISTORY.

8.4  –  Condition Values Returned

    LBR$_NORMAL        Normal exit from the routine.
    LBR$_EMPTYHIST     History empty. This is an informational code,
                       not an error code.
    LBR$_INTRNLERR     Internal Librarian routine error occurred.
    LBR$_NOHISTORY     No update history. This is an informational
                       code, not an error code.

9  –  LBR$GET_INDEX

    The LBR$GET_INDEX routine calls a user-supplied routine for
    selected keys in an index.

    Format

      LBR$GET_INDEX  library_index ,index_number ,routine_name

                     [,match_desc] [, flags]

9.1  –  Returns

    OpenVMS usage:cond_value
    type:         longword (unsigned)
    access:       write only
    mechanism:    by value

    Longword condition value. Most utility routines return a
    condition value. Condition values that this routine can return
    are listed under Condition Values Returned.

9.2  –  Arguments

 library_index

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library control index returned by the LBR$INI_CONTROL routine.
    The library_index argument is the address of the longword that
    contains the index.

 index_number

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Number of the library index. The index_number argument is the
    address of a longword containing the index number. This is the
    index number associated with the keys you want to use as input to
    the user-supplied routine.

 routine_name

    OpenVMS usage:procedure
    type:         procedure value
    access:       read only
    mechanism:    by reference
    User-supplied routine called for each of the specified index
    keys. The routine_name argument is the address of the procedure
    value for this user-supplied routine.

    LBR$GET_INDEX passes two arguments to the routine on OpenVMS
    Alpha; and passes three arguments to the routine on OpenVMS
    Integrity servers:

    o  A key name.

       -  For libraries with ASCII keys, the key_name argument is the
          address of a string descriptor pointing to the key. Note
          that the string and the string descriptor passed to the
          routine are valid only for the duration of that call. The
          string must be copied privately if you need it again for
          more processing.

       -  For libraries with binary keys, the key_name argument is
          the address of an unsigned longword containing the key
          number.

    o  The record file address (RFA) of the module's header for this
       key name. The RFA argument is the address of a 2-longword
       array that contains the RFA.

    o  The key's type whose bits are as follows:

       Flag Bits               Description

       LBR$M_SYM_WEAK = 1      UNIX-style weak symbol attributes
       LBR$M_SYM_GROUP = 2     Group symbol attribute

       This parameter is passed only on OpenVMS Integrity servers.

    The user routine must return a value to indicate success or
    failure. If the user routine returns a false value (low bit = 0),
    LBR$GET_INDEX stops searching the index and returns the status
    value of the user-specified routine to the calling program.

    The routine cannot contain calls to either LBR$DELETE_KEY or
    LBR$INSERT_KEY.

 match_desc

    OpenVMS usage:char_string
    type:         character string
    access:       read only
    mechanism:    by descriptor
    Key matching identifier. The match_desc argument is the address
    of a string descriptor pointing to a string used to identify
    which keys result in calls to the user-supplied routine. Wildcard
    characters are allowed in this string. If you omit this argument,
    the routine is called for every key in the index. The match_desc
    argument is valid only for libraries that have ASCII keys.

 flags

    OpenVMS usage:mask_longword
    type:         longword (unsigned)
    access:       read only
    mechanism:    by value
    If present and non-zero, this argument specifies the type, or all
    types, of the key provided. The flag bits are:

    Flag Bits               Description

    LBR$M_SYM_WEAK = 0x1    UNIX-style weak symbol attribute
    LBR$M_SYM_GROUP = 0x2   Group symbol attribute
    LBR$M_SYM_ALL =         All symbols
    0x80000000

    The user routine will be provided the key's type through an
    additional third parameter.

9.3  –  Description

    LBR$GET_INDEX searches through the specified index for keys that
    match the match_desc argument. Each time it finds a match, it
    calls the user routine specified by the routine_name argument. If
    you do not specify the match_desc argument, LBR$GET_INDEX calls
    the user routine for every key in the index.

    For example, if you call LBR$GET_INDEX on an object library with
    match_desc equal to TR* and index_number set to 1 (module name
    table), then LBR$GET_INDEX calls routine_name for each module
    whose name begins with TR.

9.4  –  Condition Values Returned

    LBR$_ILLCTL        Specified library control index not valid.
    LBR$_ILLIDXNUM     Specified index number not valid.
    LBR$_LIBNOTOPN     Specified library not open.
    LBR$_NULIDX        Specified library empty.

10  –  LBR$GET_RECORD

    The LBR$GET_RECORD routine returns the next data record in the
    module associated with a specified key.

    Format

      LBR$GET_RECORD  library_index [,inbufdes] [,outbufdes]

10.1  –  Returns

    OpenVMS usage:cond_value
    type:         longword (unsigned)
    access:       write only
    mechanism:    by value

    Longword condition value. Most utility routines return a
    condition value in R0. Condition values that this routine can
    return are listed under Condition Values Returned.

10.2  –  Arguments

 library_index

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library control index returned by the LBR$INI_CONTROL routine.
    The library_index argument is the address of the longword that
    contains the index. The library must be open and LBR$LOOKUP_KEY
    or LBR$FIND must have been called to find the key associated with
    the module whose records you want to read.

 inbufdes

    OpenVMS usage:char_string
    type:         character string
    access:       write only
    mechanism:    by descriptor
    User buffer to receive the record. The inbufdes argument is
    the address of a string descriptor that points to the buffer
    that receives the record from LBR$GET_RECORD. This argument is
    required when the Librarian subroutine record access is set to
    move mode (which is the default). This argument is not used if
    the record access mode is set to locate mode. The Description
    help topic contains more information about the locate and move
    modes.

 outbufdes

    OpenVMS usage:char_string
    type:         character string
    access:       write only
    mechanism:    by descriptor
    String descriptor that receives the actual length and address of
    the data for the record returned. The outbufdes argument is the
    address of the string descriptor for the returned record. The
    length and address fields of the string descriptor are filled in
    by the LBR$GET_RECORD routine. This parameter must be specified
    when Librarian subroutine record access is set to locate mode.
    This parameter is optional if record access mode is set to move
    mode. The Description help topic contains more information about
    the locate and move modes.

10.3  –  Description

    Before calling LBR$GET_RECORD, you must first call LBR$LOOKUP_
    KEY or LBR$FIND to set the internal library read context to the
    record's file address (RFA) of the module header of the module
    whose records you want to read.

    LBR$GET_RECORD uses two record access modes: locate mode and
    move mode. Move mode is the default. The LBR$SET_LOCATE and
    LBR$SET_MOVE subroutines set these modes. The record access
    modes are mutually exclusive; that is, when one is set, the other
    is turned off. If move mode is set, LBR$GET_RECORD copies the
    record to the user-specified buffer described by inbufdes. If you
    have optionally specified the output buffer string descriptor,
    outbufdes, the Librarian fills it with the actual length and
    address of the data. If locate mode is set, LBR$GET_RECORD
    returns the record by way of an internal subroutine buffer,
    pointing the outbufdes descriptor to the internal buffer. The
    second parameter, inbufdes, is not used when locate mode is set.

10.4  –  Condition Values Returned

    LBR$_ILLCTL        Specified library control index not valid.
    LBR$_LIBNOTOPN     Specified library not open.
    LBR$_LKPNOTDON     Requested key lookup not done.
    RMS$_EOF           Error. An attempt has been made to read past
                       the logical end of the data in the module.

11  –  LBR$INI_CONTROL

    The LBR$INI_CONTROL routine initializes a control structure,
    called a library control index, to identify the library for use
    by other LBR routines.

    Format

      LBR$INI_CONTROL  library_index ,func [,type] [,namblk]

11.1  –  Returns

    OpenVMS usage:cond_value
    type:         longword (unsigned)
    access:       write only
    mechanism:    by value

    Longword condition value. Most utility routines return a
    condition value in R0. Condition values that this routine can
    return are listed under Condition Values Returned.

11.2  –  Arguments

 library_index

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       write only
    mechanism:     by reference
    Library control index returned by the LBR$INI_CONTROL routine.
    The library_index argument is the address of a longword that is
    to receive the index.

 func

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library function to be performed. The func argument is the
    address of the longword that contains the library function.
    Valid functions are LBR$C_CREATE, LBR$C_READ, and LBR$C_UPDATE.
    Each programming language provides an appropriate mechanism for
    accessing these symbols.

 type

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library type. The type argument is the address of the longword
    containing the library type. Valid library types include the
    following:

    o  LBR$C_TYP_EOBJ (Alpha object)

    o  LBR$C_TYP_ESHSTB (Alpha shareable image)

    o  LBR$C_TYP_MLB (macro)

    o  LBR$C_TYP_HLP (help)

    o  LBR$C_TYP_TXT (text)

    o  LBR$C_TYP_UNK (unknown)

    o  LBR$C_TYP_NCS (NCS library)

    o  For user-developed libraries, a type in the range of LBR$C_
       TYP_USRLW through LBR$C_TYP_USRHI.

 namblk

    OpenVMS usage:nam
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    OpenVMS RMS name block (NAM). The namblk argument is the address
    of a variable-length data structure containing an RMS NAM block.
    The LBR$OPEN routine fills in the information in the NAM block
    so it can be used later to open the library. If the NAM block
    has this file identification in it from previous use, the
    LBR$OPEN routine uses the open-by-NAM block option. This argument
    is optional and should be used if the library will be opened
    many times during a single run of the program. For a detailed
    description of RMS NAM blocks, see the OpenVMS Record Management
    Services Reference Manual.

11.3  –  Description

    Except for the LBR$OUTPUT_HELP routine, you must call LBR$INI_
    CONTROL before calling any other LBR routine. After you
    initialize the library control index, you must open the library
    or create a new one using the LBR$OPEN routine. You can then call
    other LBR routines that you need. After you finish working with a
    library, close it with the LBR$CLOSE routine.

    LBR$INI_CONTROL initializes a library by filling the longword
    referenced by the library_index argument with the control index
    of the library. Upon completion of the call, the index can be
    used to refer to the current library in all future routine calls.
    Therefore, your program must not alter this value.

    You can have up to 16 libraries open simultaneously in your
    program.

11.4  –  Condition Values Returned

    LBR$_NORMAL        Library control index initialized
                       successfully.
    LBR$_ILLFUNC       Requested function not valid.
    LBR$_ILLTYP        Specified library type not valid.
    LBR$_TOOMNYLIB     Error. An attempt was made to allocate more
                       than 16 control indexes.

12  –  LBR$INSERT_KEY

    The LBR$INSERT_KEY routine inserts a new key in the current
    library index.

    Format

      LBR$INSERT_KEY  library_index ,key_name ,txtrfa [, flags]

12.1  –  Returns

    OpenVMS usage:cond_value
    type:         longword (unsigned)
    access:       write only
    mechanism:    by value

    Longword condition value. Most utility routines return a
    condition value. Condition values that this routine can return
    are listed under Condition Values Returned.

12.2  –  Arguments

 library_index

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library control index returned by the LBR$INI_CONTROL library
    routine. The library_index argument is the address of the
    longword that contains the index.

 key_name

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Name of the new key you are inserting.

    If the library uses binary keys, the key_name argument is the
    address of an unsigned longword containing the value of the key.

    If the library uses ASCII keys, the key_name argument is the
    address of a string descriptor of the key with the following
    argument characteristics:

    Argument
    CharacteristicsEntry

    OpenVMS        char_string
    usage
    type           character string
    access         read only
    mechanism      by descriptor

 txtrfa

    OpenVMS usage:vector_longword_unsigned
    type:         longword (unsigned)
    access:       modify
    mechanism:    by reference
    The record file address (RFA) of the module associated with the
    new key you are inserting. The txtrfa argument is the address
    of a 2-longword array containing the RFA. You can use the RFA
    returned by the first call to LBR$PUT_RECORD.

 flags

    OpenVMS usage:mask_longword
    type:         longword (unsigned)
    access:       read only
    mechanism:    by value
    If present, specifies the key's type. The flag bits are as
    follows:

    Flag Bits               Description

    LBR$M_SYM_WEAK = 0x1    UNIX-style weak symbol attribute
    LBR$M_SYM_GROUP = 0x2   Group symbol attribute

    If this argument is not present, the normal NonGroup-Global type
    is the assumed type.

12.3  –  Description

    The LBR$INSERT_KEY routine inserts a new key in the current
    library index. You cannot call LBR$INSERT_KEY within the user-
    supplied routine specified in LBR$SEARCH or LBR$GET_INDEX.

12.4  –  Condition Values Returned

    LBR$_DUPKEY        Index already contains the specified key.
    LBR$_ILLCTL        Specified library control index not valid.
    LBR$_INVRFA        Specified RFA does not point to valid data.
    LBR$_LIBNOTOPN     Specified library not open.
    LBR$_UPDURTRAV     LBR$INSERT_KEY is called by the user-defined
                       routine specified in LBR$SEARCH or LBR$GET_
                       INDEX.

13  –  LBR$LOOKUP_KEY

    The LBR$LOOKUP_KEY routine looks up a key in the library's
    current index and prepares to access the data in the module
    associated with the key.

    Format

      LBR$LOOKUP_KEY  library_index ,key_name ,txtrfa [, flags]

13.1  –  Returns

    OpenVMS usage:cond_value
    type:         longword (unsigned)
    access:       write only
    mechanism:    by value

    Longword condition value. Most utility routines return a
    condition value. Condition values that this routine can return
    are listed under Condition Values Returned.

13.2  –  Arguments

 library_index

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library control index returned by the LBR$INI_CONTROL routine.
    The library_index argument is the address of the longword that
    contains the index.

 key_name

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Name of the library key. If the library uses binary keys, the
    key_name argument is the address of the unsigned longword value
    of the key.

    If the library uses ASCII keys, the key_name argument is the
    address of a string descriptor for the key with the following
    argument characteristics:

    Argument
    Characteristics        Entry

    OpenVMS usage          char_string
    type                   character string
    access                 read only
    mechanism              by descriptor

 txtrfa

    OpenVMS usage:vector_longword_unsigned
    type:         longword (unsigned)
    access:       write only
    mechanism:    by reference
    The record file address (RFA) of the library module header.
    The txtrfa argument is the address of the 2-longword array that
    receives the RFA of the module header.

 flags

    OpenVMS usage:mask_longword
    type:         longword (unsigned)
    access:       write only
    mechanism:    by reference
    The flags argument, if present and not zero, receives the type of
    key returned. The flag bits are as follows:

    Flag Bits              Description

    LBR$SYM_WEAK = 0x1     UNIX-style weak symbol attribute
    LBR$SYM_GROUP = 0x2    Group symbol attribute

    The key returned is the highest precedent definition type
    present.

13.3  –  Description

    If LBR$LOOKUP_KEY finds the specified key, it initializes
    internal tables so you can access the associated data.

    This routine returns the RFA to the 2-longword array referenced
    by txtrfa.

13.4  –  Condition Values Returned

    LBR$_ILLCTL        Specified library control index not valid.
    LBR$_INVRFA        RFA obtained not valid.
    LBR$_KEYNOTFND     Specified key not found.
    LBR$_LIBNOTOPN     Specified library not open.

14  –  LBR$LOOKUP_TYPE

    The LBR$LOOK_TYPE routine searches the index for the key from
    a particular module (RFA) and returns that key's type for that
    module.

    Format

      LBR$LOOKUP_TYPE  library_index, key_name, txtrfa, ret_types

14.1  –  Arguments

 library_index

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library control index returned by the LBR$INI_CONTROL routine.
    The library_index argument is the address of the longword that
    contains the index.

 key_name

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    The key_name argument is the address of the string descriptor
    pointing to the key with the following argument characteristics:

    Argument
    Characteristics        Entry

    OpenVMS usage          char_string
    type                   character string
    access                 read only
    mechanism              by descriptor

 txtrfa

    OpenVMS usage:vector_longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    The module's record file address (RFA) of the library module
    header. The txtrfa argument is the address of the 2-longword
    array that specifies the RFA of the module header.

 ret_types

    OpenVMS usage:mask_longword
    type:         longword (unsigned)
    access:       write only
    mechanism:    by reference
    The address of a longword to receive the symbol types found
    for the specified module (txtrfa). The return type bits are as
    follows:

       LBR$M_SYM_NGG = 1
       LBR$M_SYM_UXWK = 2
       LBR$M_SYM_GG = 4
       LBR$M_SYM_GUXWK = 8

14.2  –  Description

    This routine searches the index for the key from a particular
    module (RFA) and returns that key's type for that module, if
    present. Otherwise, it returns LBR$_KEYNOTFND.

15  –  LBR$MAP_MODULE

    The LBR$MAP_MODULE routine maps a module into process P2 space.

    Format

      LBR$MAP_MODULE  library_index, ret_va_addr, ret_mod_len, txtrfa

15.1  –  Arguments

 library_index

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library control index returned by the LBR$INI_CONTROL library
    routine. The library_index argument is the address of the
    longword that contains the index.

 ret_va_addr

    OpenVMS usage:address
    type:         quadword address
    access:       write only
    mechanism:    by 32-bit or 64-bit reference
    The 32-bit or 64-bit virtual address of a naturally aligned
    quadword into which the routine returns the virtual address at
    which the routine mapped the library module.

 ret_mod_len

    OpenVMS usage:byte_count
    type:         quadword (unsigned)
    access:       read only
    mechanism:    by reference
    The address of a naturally aligned quadword into which the
    library routine returns the module length.

 txtrfa

    OpenVMS usage:vector_longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    The module's record file address (RFA) of the library module
    header. The txtrfa argument is the address of the 2-longword
    array that specifies the RFA of the module header.

15.2  –  Description

    This routine maps a module, with the given txtrfa, into process
    P2 memory space and returns the virtual address where the module
    is mapped and the module size.

    Unlike other LBR services that use RMS services, LBR$MAP_MODULE
    also uses system services. Because of this, the secondary status
    for error returns is placed in LBR$$GL_SUBSTS. Use this secondary
    status to find additional status when an error is returned.

16  –  LBR$OPEN

    The LBR$OPEN routine opens an existing library or creates a new
    one.

    Format

      LBR$OPEN  library_index [,fns] [,create_options] [,dns]

                [,rlfna] [,rns] [,rnslen]

16.1  –  Returns

    OpenVMS usage:cond_value
    type:         longword (unsigned)
    access:       write only
    mechanism:    by value

    Longword condition value. Most utility routines return a
    condition value in R0. Condition values that this routine can
    return are listed under Condition Values Returned.

16.2  –  Arguments

 library_index

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library control index returned by the LBR$INI_CONTROL routine.
    The library_index argument is the address of a longword
    containing the index.

 fns

    OpenVMS usage:char_string
    type:         character string
    access:       read only
    mechanism:    by descriptor
    File specification of the library. The fns argument is
    the address of a string descriptor pointing to the file
    specification. Unless the OpenVMS RMS NAM block address was
    previously supplied in the LBR$INI_CONTROL routine and contained
    a file specification, this argument must be included. Otherwise,
    the Librarian returns an error (LBR$_NOFILNAM).

 create_options

    OpenVMS usage:vector_longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library characteristics. The create_options argument is
    the address of an array of 20 longwords that define the
    characteristics of the library you are creating. If you are
    creating a library with LBR$C_CREATE, you must include the
    create_options argument. The following table shows the entries
    that the array must contain. Each programming language provides
    an appropriate mechanism for accessing the listed symbols.

    Offset
    in
    Longwords Symbolic Name        Contents

    0         CRE$L_TYPE           Library type:
              LBR$C_TYP_UNK (0)    Unknown/unspecified
              LBR$C_TYP_OBJ (1)    VAX object
              LBR$C_TYP_MLB (2)    Macro
              LBR$C_TYP_HLP (3)    Help
              LBR$C_TYP_TXT (4)    Text
              LBR$C_TYP_SHSTB (5)  VAX shareable image
              LBR$C_TYP_NCS (6)    NCS
              LBR$C_TYP_EOBJ (7)   Alpha object
              LBR$C_TYP_ESHSTB     Alpha shareable image
              (8)
              (9-127)              Reserved by VSI
              LBR$C_TYP_USRLW      User library types - low end of
              (128)                range
              LBR$C_TYP_USRHI      User library types - high end of
              (255)                range
    1         CRE$L_KEYLEN         Maximum length of ASCII keys or,
                                   if 0, indicates 32-bit unsigned
                                   keys (binary keys)
    2         CRE$L_ALLOC          Initial library file allocation
    3         CRE$L_IDXMAX         Number of library indexes (maximum
                                   of eight)
    4         CRE$L_UHDMAX         Number of additional bytes to
                                   reserve in module header
    5         CRE$L_ENTALL         Number of index entries to
                                   preallocate
    6         CRE$L_LUHMAX         Maximum number of library update
                                   history records to maintain
    7         CRE$L_VERTYP         Format of library to create:
              CRE$C_VMSV2          VMS Version 2.0
              CRE$C_VMSV3          VMS Version 3.0
    8         CRE$L_IDXOPT         Index key casing option:
              CRE$C_HLPCASING      Treat character case as it is for
                                   help libraries
              CRE$C_OBJCASING      Treat character case as it is for
                                   object libraries
              CRE$C_MACTXTCAS      Treat character case as it is for
                                   macro and text libraries
    9-19                           Reserved by VSI

    The input of uppercase and lowercase characters is treated
    differently for help, object, macro, and text libraries. For
    details, see the VSI OpenVMS Command Definition, Librarian, and
    Message Utilities Manual.

 dns

    OpenVMS usage:char_string
    type:         character string
    access:       read only
    mechanism:    by descriptor
    Default file specification. The dns argument is the address
    of the string descriptor that points to the default file
    specification. See the OpenVMS Record Management Services
    Reference Manual for details about how defaults are processed.

 rlfna

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Related file name. The rlfna argument is the address of an
    RMS NAM block pointing to the related file name. You must
    specify rlfna for related file name processing to occur. If a
    related file name is specified, only the file name, type, and
    version fields of the NAM block are used for related name block
    processing. The device and directory fields are not used. See the
    OpenVMS Record Management Services Reference Manual for details
    on processing related file names.

 rns

    OpenVMS usage:char_string
    type:         character string
    access:       write only
    mechanism:    by descriptor
    Resultant file specification returned. The rns argument is the
    address of a string descriptor pointing to a buffer that is to
    receive the resultant file specification string. If an error
    occurs during an attempt to open the library, the expanded name
    string is returned instead.

 rnslen

    OpenVMS usage:longword_signed
    type:         longword (signed)
    access:       write only
    mechanism:    by reference
    Length of the resultant or expanded file name. The rnslen
    argument is the address of a longword receiving the length
    of the resultant file specification string (or the length of
    the expanded name string if there was an error in opening the
    library).

16.3  –  Description

    You can call this routine only after you call LBR$INI_CONTROL and
    before you call any other LBR routine except LBR$OUTPUT_HELP.

    When the library is successfully opened, the LBR routine reads
    the library header into memory and sets the default index to 1.

    If the library cannot be opened because it is already open for a
    write operation, LBR$OPEN retries the open operation every second
    for a maximum of 30 seconds before returning the RMS error, RMS$_
    FLK, to the caller.

16.4  –  Condition Values Returned

    LBR$_ERRCLOSE      Error. When the library was last modified
                       while opened for write access, the write
                       operation was interrupted. This left the
                       library in an inconsistent state.
    LBR$_ILLCREOPT     Requested create options not valid or not
                       supplied.
    LBR$_ILLCTL        Specified library control index not valid.
    LBR$_ILLFMT        Specified library format not valid.
    LBR$_ILLFUNC       Specified library function not valid.
    LBR$_LIBOPN        Specified library already open.
    LBR$_NOFILNAM      Error. The fns argument was not supplied or
                       the RMS NAM block was not filled in.
    LBR$_OLDLIBRARY    Success. The specified library has been
                       opened; the library was created with an old
                       library format.
    LBR$_OLDMISMCH     Requested library function conflicts with old
                       library type specified.
    LBR$_TYPMISMCH     Library type does not match the requested
                       type.

17  –  LBR$OUTPUT_HELP

    The LBR$OUTPUT_HELP routine outputs help text to a user-supplied
    output routine. The text is obtained from an explicitly named
    help library or, optionally, from user-specified default help
    libraries. An optional prompting mode is available that enables
    LBR$OUTPUT_HELP to interact with you and continue to provide help
    information after the initial help request has been satisfied.

    Format

      LBR$OUTPUT_HELP  output_routine [,output_width] [,line_desc]

                       [,library_name] [,flags] [,input_routine]

17.1  –  Returns

    OpenVMS usage:cond_value
    type:         longword (unsigned)
    access:       write only
    mechanism:    by value

    Longword condition value. Most utility routines return a
    condition value in R0. Condition values that this routine can
    return are listed under Condition Values Returned.

17.2  –  Arguments

 output_routine

    OpenVMS usage:procedure
    type:         procedure value
    access:       write only
    mechanism:    by reference
    Name of a routine that writes help text a line at a time. The
    output_routine argument is the address of the procedure value
    of the routine to call. You should specify either the address of
    LIB$PUT_OUTPUT or a routine of your own that has the same calling
    format as LIB$PUT_OUTPUT.

 output_width

    OpenVMS usage:longword_signed
    type:         longword (signed)
    access:       read only
    mechanism:    by reference
    Width of the help-text line to be passed to the user-supplied
    output routine. The output_width argument is the address of a
    longword containing the width of the text line to be passed to
    the user-supplied output routine. If you omit output_width or
    specify it as 0, the default output width is 80 characters per
    line.

 line_desc

    OpenVMS usage:char_string
    type:         character string
    access:       read only
    mechanism:    by descriptor
    Contents of the help request line. The line_desc argument is the
    address of a string descriptor pointing to a character string
    containing one or more help keys defining the help requested, for
    example, the HELP command line minus the HELP command and HELP
    command qualifiers. The default is a string descriptor for an
    empty string.

 library_name

    OpenVMS usage:char_string
    type:         character string
    access:       read only
    mechanism:    by descriptor
    Name of the main library. The library_name argument is the
    address of a string descriptor pointing to the main library
    file specification string. The default is a null string, which
    means you should use the default help libraries. If you omit the
    device and directory specifications, the default is SYS$HELP. The
    default file type is .HLB.

 flags

    OpenVMS usage:mask_longword
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Flags specifying help output options. Each programming language
    provides an appropriate mechanism for accessing these flags.
    The flags argument is the address of an unsigned longword that
    contains the following flags, when set:

    Flag          Description

    HLP$M_PROMPT  Interactive help prompting is in effect.
    HLP$M_        The process logical name table is searched for
    PROCESS       default help libraries.
    HLP$M_GROUP   The group logical name table is searched for group
                  default help libraries.
    HLP$M_SYSTEM  The system logical name table is searched for
                  system default help libraries.
    HLP$M_        The list of default libraries available is output
    LIBLIST       with the list of topics available.
    HLP$M_HELP    The list of topics available in a help library is
                  preceded by the major portion of the text on help.

    If you omit this longword, the default is for prompting and all
    default library searching to be enabled, but no library list is
    generated and no help text precedes the list of topics.

 input_routine

    OpenVMS usage:procedure
    type:         procedure value
    access:       read only
    mechanism:    by reference
    Routine used for prompting. The input_routine argument is the
    address of the procedure value of the prompting routine. You
    should specify either the address of LIB$GET_INPUT or a routine
    of your own that has the same calling format as LIB$GET_INPUT.
    This argument must be supplied when the HELP command is run in
    prompting mode (that is, HLP$M_PROMPT is set or defaulted).

17.3  –  Description

    The LBR$OUTPUT_HELP routine provides a simple, one-call method
    to initiate an interactive help session. Help library bookkeeping
    functions, such as LBR$INI_CONTROL and LBR$OPEN, are handled
    internally. You should not call LBR$INI_CONTROL or LBR$OPEN
    before you issue a call to LBR$OUTPUT_HELP.

    LBR$OUTPUT_HELP accepts help keys in the same format as LBR$GET_
    HELP, with the following qualifications:

    o  If the keyword HELP is supplied, help text on HELP is output,
       followed by a list of HELP subtopics available.

       If no help keys are provided or if the line_desc argument is
       0, a list of topics available in the root library is output.

    o  If the line_desc argument contains a list of help keys, then
       each key must be separated from its predecessor by a slash
       (/)  or by one or more spaces.

    o  The first key can specify a library to replace the main
       library as the root library (the first library searched) in
       which LBR$OUTPUT_HELP searches for help. A key used for this
       purpose must have the form <@filespec>, where filespec is
       subject to the same restrictions as the library_name argument.
       If the specified library is an enabled user-defined default
       library, then filespec can be abbreviated as any unique
       substring of that default library's logical name translation.

    In default library searches, you can define one or more default
    libraries for LBR$OUTPUT_HELP to search for help information not
    contained in the root library. Do this by equating logical names
    (HLP$LIBRARY, HLP$LIBRARY_1, . . . ,HLP$LIBRARY_999) to the file
    specifications of the default help libraries. You can define
    these logical names in the process, group, or system logical name
    table.

    If default library searching is enabled by the flags argument,
    LBR$OUTPUT_HELP uses those flags to determine which logical
    name tables are enabled and then automatically searches any
    user default libraries that have been defined in those logical
    name tables. The library search order proceeds as follows: root
    library, main library (if specified and different from the root
    library), process libraries (if enabled), group libraries (if
    enabled), system libraries (if enabled). If the requested help
    information is not found in any of these libraries, LBR$OUTPUT_
    HELP returns to the root library and issues a "help not found"
    message.

    To enter an interactive help session (after your initial request
    for help has been satisfied), you must set the HLP$M_PROMPT bit
    in the flags argument.

    You can encounter four different types of prompt in an
    interactive help session. Each type represents a different level
    in the hierarchy of help available to you.

    1. If the root library is the main library and you are not
       currently examining HELP for a particular topic, the prompt
       Topic? is output.

    2. If the root library is a library other than the main library
       and if you are not currently examining HELP for a particular
       topic, a prompt of the form @<library-spec>Topic? is output.

    3. If you are currently examining HELP for a particular topic
       (and subtopics), a prompt of the form <keyword...>subtopic? is
       output.

    4. A combination of 2 and 3.

    When you encounter one of these prompt messages, you can respond
    in any one of several ways. Each type of response and its effect
    on LBR$OUTPUT_HELP in each prompting situation is described in
    the following table:

                       Action in the Current Prompt Environment
    Response           (Keyed to the prompt in the preceding list)

    keyword [ . . . ]  (1,2)  Search all enabled libraries for these
                       keys.
                       (3,4)  Search additional help for the current
                       topic (and subtopic) for these keys.
    @filespec          (1,2)  Same as above, except that the root
    [keyword[ . . . ]] library is the library specified by filespec.
                       If the specified library does not exist, treat
                       @filespec as a normal key.
                       (3,4)  Same as above; treat @filespec as a
                       normal key.
    ?                  (1,2)  Display a list of topics available in
                       the root library.
                       (3,4)  Display a list of subtopics of the
                       current topic (and subtopics) for which help
                       exists.
    Carriage Return    (1)  Exit from LBR$OUTPUT_HELP.
                       (2)  Change root library to main library.
                       (3,4)  Strip the last keyword from a list of
                       keys defining the current topic (and subtopic)
                       environment.
    Ctrl/Z             (1,2,3,4) Exit from LBR$OUTPUT_HELP.

17.4  –  Condition Values Returned

    LBR$_ILLINROU      Input routine improperly specified or omitted.
    LBR$_ILLOUTROU     Output routine improperly specified or
                       omitted.
    LBR$_NOHLPLIS      Error. No default help libraries can be
                       opened.
    LBR$_TOOMNYARG     Error. Too many arguments were specified.
    LBR$_USRINPERR     Error. An error status was returned by the
                       user-supplied input routine.

18  –  LBR$PUT_END

    The LBR$PUT_END routine marks the end of a sequence of records
    written to a library by the LBR$PUT_RECORD routine.

    Format

      LBR$PUT_END  library_index

18.1  –  Returns

    OpenVMS usage:cond_value
    type:         longword (unsigned)
    access:       write only
    mechanism:    by value

    Longword condition value. Most utility routines return a
    condition value in R0. Condition values that this routine can
    return are listed under Condition Values Returned.

18.2  –  Argument

 library_index

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library control index returned by the LBR$INI_CONTROL routine.
    The library_index argument is the address of a longword
    containing the index.

18.3  –  Description

    Call LBR$PUT_END after you write data records to the library
    with the LBR$PUT_RECORD routine. LBR$PUT_END terminates a module
    by attaching a 3-byte logical end-of-file record (hexadecimal
    77,00,77) to the data.

18.4  –  Condition Values Returned

    LBR$_ILLCTL        Specified library control index not valid.
    LBR$_LIBNOTOPN     Specified library not open.

19  –  LBR$PUT_HISTORY

    The LBR$PUT_HISTORY routine adds an update history record to the
    end of the update history list.

    Format

      LBR$PUT_HISTORY  library_index ,record_desc

19.1  –  Returns

    OpenVMS usage:cond_value
    type:         longword (unsigned)
    access:       write only
    mechanism:    by value

    Longword condition value. Most utility routines return a
    condition value in R0. Condition values that this routine can
    return are listed under Condition Values Returned.

19.2  –  Arguments

 library_index

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library control index returned by the LBR$INI_CONTROL routine.
    The library_index argument is the address of the longword that
    contains the index.

 record_desc

    OpenVMS usage:char_string
    type:         character string
    access:       read only
    mechanism:    by descriptor
    Library history record. The record_desc argument is the address
    of a string descriptor pointing to the record to be added to the
    library update history.

19.3  –  Description

    LBR$PUT_HISTORY writes a new update history record. If the
    library already contains the maximum number of history records
    (as specified at creation time by CRE$L_LUHMAX; see LBR$OPEN for
    details), the oldest history record is deleted before the new
    record is added.

19.4  –  Condition Values Returned

    LBR$_NORMAL        Normal exit from the routine.
    LBR$_INTRNLERR     Internal Librarian error.
    LBR$_NOHISTORY     No update history. This is an informational
                       code, not an error code.
    LBR$_RECLNG        Record length greater than that specified by
                       LBR$C_MAXRECSIZ. The record was not inserted
                       or truncated.

20  –  LBR$PUT_MODULE

    The LBR$PUT_MODULE routine puts an entire module, with the
    module's record file address (RFA), from memory space into the
    current library.

    Format

      LBR$PUT_MODULE  library_index, mod_addr, mod_len, txtrfa

20.1  –  Arguments

 library_index

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library control index returned by the LBR$INI_CONTROL library
    routine. The library_index argument is the address of the
    longword that contains the index.

 mod_addr

    OpenVMS usage:address
    type:         quadword address
    access:       read only
    mechanism:    by 32-bit or 64-bit reference
    The address from which the Library service obtains the 64-bit
    address of where the module is mapped in memory. The mod_addr
    argument is the 32- or 64-bit virtual address of a naturally
    aligned quadword containing the virtual address location of the
    module to write to the library.

 mod_len

    OpenVMS usage:byte_count
    type:         quadword (unsigned)
    access:       read only
    mechanism:    by 32- or 64-bit reference
    The 64-bit virtual address of a naturally aligned quadword
    containing the length of the module that the Library service
    is to write into the library.

 txtrfa

    OpenVMS usage:vector_longword_unsigned
    type:         longword (unsigned)
    access:       write only
    mechanism:    by reference
    The module's record file address (RFA) of the library module
    header. The txtrfa argument is the address of the 2-longword
    array receiving the RFA of the newly created module header.

20.2  –  Description

    The LBR$PUT_MODULE routine puts an entire module, with the
    module's record file address (RFA), from memory space into the
    current library. LBR$PUT_END is not required when you write an
    entire module to the current library.

21  –  LBR$PUT_RECORD

    The LBR$PUT_RECORD routine writes a data record beginning at the
    next free location in the library.

    Format

      LBR$PUT_RECORD  library_index ,bufdes ,txtrfa [, mod_size]

21.1  –  Returns

    OpenVMS usage:cond_value
    type:         longword (unsigned)
    access:       write only
    mechanism:    0

    Longword condition value. Most utility routines return a
    condition value. Condition values that this routine can return
    are listed under Condition Values Returned.

21.2  –  Arguments

 library_index

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library control index returned by the LBR$INI_CONTROL routine.
    The library_index argument is the address of the longword that
    contains the index.

 bufdes

    OpenVMS usage:char_string
    type:         character string
    access:       read only
    mechanism:    by descriptor
    Record to be written to the library. The bufdes argument is the
    address of a string descriptor pointing to the buffer containing
    the output record. On Integrity servers and Alpha libraries, the
    symbolic maximum record size is ELBR$_MAXRECSIZ.

 txtrfa

    OpenVMS usage:vector_longword_unsigned
    type:         longword (unsigned)
    access:       write only
    mechanism:    by reference
    Record's file address (RFA) of the module header. The txtrfa
    argument is the address of a 2-longword array receiving the
    RFA of the newly created module header upon the first call to
    LBR$PUT_RECORD.

 mod_size

    OpenVMS usage:byte_count
    type:         longword (unsigned)
    access:       read only
    mechanism:    by value
    The value from mod_size is read on the first call to this routine
    and ignored otherwise. The value specifies the size of the module
    to be entered so that contiguous space is allocated within the
    library for that module. This argument is ignored for non-ELF
    object libraries and for data-reduced ELF object libraries.
    The LBR$PUT_END routine is still required to terminate the byte
    stream and close off the module.

21.3  –  Description

    If this is the first call to LBR$PUT_RECORD, this routine first
    writes a module header and returns its RFA to the 2-longword
    array pointed to by txtrfa. LBR$PUT_RECORD then writes the
    supplied data record to the library. On subsequent calls to
    LBR$PUT_RECORD, this routine writes the data record beginning
    at the next free location in the library (after the previous
    record). The last record written for the module should be
    followed by a call to LBR$PUT_END.

21.4  –  Condition Values Returned

    LBR$_ILLCTL        Specified library control index not valid.
    LBR$_LIBNOTOPN     Specified library not open.

22  –  LBR$REPLACE_KEY

    The LBR$REPLACE_KEY routine modifies or inserts a key into the
    library.

    Format

      LBR$REPLACE_KEY  library_index ,key_name ,oldrfa ,newrfa [,

                       flags]

22.1  –  Returns

    OpenVMS usage:cond_value
    type:         longword (unsigned)
    access:       write only
    mechanism:    by value

    Longword condition value. Most utility routines return a
    condition value. Condition values that this routine can return
    are listed under Condition Values Returned.

22.2  –  Arguments

 library_index

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library control index returned by the LBR$INI_CONTROL routine.
    The library_index argument is the address of the longword that
    contains the index.

 key_name

    OpenVMS usage:char_string
    type:         character string
    access:       read only
    mechanism:    by descriptor
    For libraries with ASCII keys, the key_name argument is the
    address of a string descriptor for the key.

    For libraries with binary keys, the key_name argument is the
    address of an unsigned longword value for the key.

 oldrfa

    OpenVMS usage:vector_longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Old record file address (RFA). The oldrfa argument is the address
    of a 2-longword array containing the original RFA (returned by
    LBR$LOOKUP_KEY) of the module header associated with the key you
    are replacing.

 newrfa

    OpenVMS usage:vector_longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    New RFA. The newrfa argument is the address of a 2-longword array
    containing the RFA (returned by LBR$PUT_RECORD) of the module
    header associated with the new key.

 flags

    OpenVMS usage:mask_longword
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    If present, the flags argument specifies the type of key being
    replaced. The flag bits are as follows:

    Flag Bits              Description

    LBR$SYM_WEAK = 0x1     UNIX-style weak symbol attribute
    LBR$SYM_GROUP = 0x2    Group symbol attribute

    If this argument is not present, NonGroup-Global is the assumed
    type. In this case, all type lists are searched and the entries
    removed. The new symbol is placed in the new NonGroup-Global
    definition with newrfa as the defining module.

    If this parameter is present, it represents the flags set for
    the type of symbol being replaced. The replacement is done
    in place without losing its position in the type list. If the
    symbol does not exist when the call to this routine is made,
    the new definition is placed at the end of the type list for the
    specified type.

    Because there are now different symbol definition types, VSI
    advises using the LBR$DELETE_KEY routine followed by the
    LBR$INSERT_KEY routine when the old key and new key differ in
    definition type.

22.3  –  Description

    If LBR$REPLACE_KEY does not find the key in the current index,
    it calls the LBR$INSERT_KEY routine to insert the key. If
    LBR$REPLACE_KEY does find the key, it modifies the key entry
    in the index so that it points to the new module header.

22.4  –  Condition Values Returned

    LBR$_ILLCTL        Specified library control index not valid.
    LBR$_INVRFA        Specified RFA not valid.
    LBR$_LIBNOTOPN     Specified library not open.

23  –  LBR$RET_RMSSTV

    The LBR$RET_RMSSTV routine returns the status value of the last
    OpenVMS RMS function performed by any LBR subroutine.

    Format

      LBR$RET_RMSSTV

23.1  –  Returns

    OpenVMS usage:cond_value
    type:         longword (unsigned)
    access:       write only
    mechanism:    by value

    Longword condition value. Most utility routines return a
    condition value in R0. Condition values that this routine can
    return are listed under Condition Values Returned.

23.2  –  Arguments

    None.

23.3  –  Description

    The LBR$RET_RMSSTV routine returns, as the status value, the
    status of the last RMS operation performed by the Librarian.
    Each programming language provides an appropriate mechanism for
    accessing RMS status values.

23.4  –  Condition Values Returned

    This routine returns any condition values returned by RMS
    routines.

24  –  LBR$SEARCH

    The LBR$SEARCH routine finds index keys that point to specified
    data.

    Format

      LBR$SEARCH  library_index ,index_number ,rfa_to_find

                  ,routine_name [, flags]

24.1  –  Returns

    OpenVMS usage:cond_value
    type:         longword (unsigned)
    access:       write only
    mechanism:    by value

    Longword condition value. Most utility routines return a
    condition value. Condition values that this routine can return
    are listed under Condition Values Returned.

24.2  –  Arguments

 library_index

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library control index returned by the LBR$INI_CONTROL routine.
    The library_index argument is the address of the longword that
    contains the index.

 index_number

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library index number. The index_number argument is the address of
    a longword containing the number of the index you want to search.

 rfa_to_find

    OpenVMS usage:vector_longword_unsigned
    type:         longword (unsigned)
    access:       write only
    mechanism:    by reference
    Record file address (RFA) of the module whose keys you are
    searching for. The rfa_to_find argument is the address of
    a 2-longword array containing the RFA (returned earlier by
    LBR$LOOKUP_KEY or LBR$PUT_RECORD) of the module header.

 routine_name

    OpenVMS usage:procedure
    type:         procedure value
    access:       read only
    mechanism:    by reference
    Name of a user-supplied routine to process the keys. The routine_
    name argument is the address of the procedure value of a user-
    supplied routine to call for each key entry containing the RFA
    (in other words, for each key that points to the same module
    header).

    This user-supplied routine cannot contain any calls to
    LBR$DELETE_KEY or LBR$INSERT_KEY.

 flags

    OpenVMS usage:mask_longword
    type:         longword unsigned
    access:       read only
    mechanism:    by reference
    If present and nonzero, the flags argument specifies the type, or
    all types, of the key provided. The flag bits are as follows:

    Flag Bits               Description

    LBR$M_SYM_WEAK = 0x1    UNIX-style weak symbol attribute
    LBR$M_SYM_GROUP = 0x2   Group symbol attribute
    LBR$M_SYM_ALL =         All symbols
    0x80000000

    The user routine is provided the symbol's type through an
    additional third parameter.

24.3  –  Description

    The LBR$SEARCH routine searches the library index for symbols
    with the given RFA and calls the supplied routine with those
    symbols.

    Use LBR$SEARCH to find index keys that point to the same module
    header. Generally, in index number 1 (the module name table),
    just one key points to any particular module; thus, you would
    probably use this routine only to search library indexes where
    more than one key points to a module. For example, you might call
    LBR$SEARCH to find all the symbols in the symbol index that are
    associated with an object module in an object library.

    If LBR$SEARCH finds an index key associated with the specified
    RFA, it calls a user-supplied routine with two arguments:

    o  The key argument, which is the address of either of the
       following items:

       -  A string descriptor for the key name (libraries with ASCII
          key names)

       -  An unsigned longword for the key value (libraries with
          binary keys)

    o  The RFA argument, which is the address of a 2-longword array
       containing the RFA of the module header

    o  The key's type, whose flag bits are as follows:

       Flag Bits               Description

       LBR$M_SYM_WEAK = 1      UNIX-style weak symbol attribute
       LBR$M_SYM_GROUP = 2     Group symbol attribute

    The user routine must return a value to indicate success or
    failure. If the specified user routine returns a false value
    (low bit = 0), then the index search terminates.

    Note that the key found by LBR$SEARCH is valid only during the
    call to the user-supplied routine. If you want to use the key
    later, you must copy it.

24.4  –  Condition Values Returned

    LBR$_ILLCTL        Specified library control index not valid.
    LBR$_ILLIDXNUM     Specified library index number not valid.
    LBR$_KEYNOTFND     Library routine did not find any keys with the
                       specified RFA.
    LBR$_LIBNOTOPN     Specified library not open.

25  –  LBR$SET_INDEX

    The LBR$SET_INDEX routine sets the index number to use when
    processing libraries that have more than one index.

    Format

      LBR$SET_INDEX  library_index ,index_number

25.1  –  Returns

    OpenVMS usage:cond_value
    type:         longword (unsigned)
    access:       write only
    mechanism:    by value

    Longword condition value. Most utility routines return a
    condition value in R0. Condition values that this routine can
    return are listed under Condition Values Returned.

25.2  –  Arguments

 library_index

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library control index returned by the LBR$INI_CONTROL routine.
    The library_index argument is the address of the longword that
    contains the index.

 index_number

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Index number you want to establish as the current index number.
    The index_number argument is the address of the longword that
    contains the number of the index you want to establish as the
    current index.

25.3  –  Description

    When you call LBR$INI_CONTROL, the Librarian sets the current
    library index to 1 (the module name table, unless the library is
    a user-developed library). If you need to process another library
    index, you must use LBR$SET_INDEX to change the current library
    index.

    Note that macro, help, and text libraries contain only one
    index; therefore, you do not need to call LBR$SET_INDEX. Object
    libraries contain two indexes. If you want to access the global
    symbol table, you must call the LBR$SET_INDEX routine to set the
    index number. User-developed libraries can contain more than one
    index; therefore, you may need to call LBR$SET_INDEX to set the
    index number.

    Upon successful completion, LBR$SET_INDEX sets the current
    library index to the requested index number. LBR routines number
    indexes starting with 1.

25.4  –  Condition Values Returned

    LBR$_ILLCTL        Specified library control index not valid.
    LBR$_ILLIDXNUM     Library index number specified not valid.
    LBR$_LIBNOTOPN     Specified library not open.

26  –  LBR$SET_LOCATE

    The LBR$SET_LOCATE routine sets the record access of LBR
    subroutines to locate mode.

    Format

      LBR$SET_LOCATE  library_index

26.1  –  Returns

    OpenVMS usage:cond_value
    type:         longword (unsigned)
    access:       write only
    mechanism:    by value

    Longword condition value. Most utility routines return a
    condition value in R0. Condition values that this routine can
    return are listed under Condition Values Returned.

26.2  –  Argument

 library_index

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library control index returned by the LBR$INI_CONTROL routine.
    The library_index argument is the address of the longword that
    contains the index.

26.3  –  Description

    Librarian record access may be set to move mode (the default
    set by LBR$SET_MOVE) or locate mode. The setting affects the
    operation of the LBR$GET_RECORD routine.

    If move mode is set (the default), LBR$GET_RECORD copies the
    requested record to the specified user buffer. If locate mode is
    set, the record is not copied. Instead, the outbufdes descriptor
    is set to reference the internal LBR subroutine buffer that
    contains the record.

26.4  –  Condition Values Returned

    LBR$_ILLCTL        Specified library control index not valid.
    LBR$_LIBNOTOPN     Specified library not open.

27  –  LBR$SET_MODULE

    The LBR$SET_MODULE routine reads, and optionally updates, the
    module header associated with a given record's file address
    (RFA).

    Format

      LBR$SET_MODULE  library_index ,rfa [,bufdesc] [,buflen]

                      [,updatedesc]

27.1  –  Returns

    OpenVMS usage:cond_value
    type:         longword (unsigned)
    access:       write only
    mechanism:    by value

    Longword condition value. Most utility routines return a
    condition value in R0. Condition values that this routine can
    return are listed under Condition Values Returned.

27.2  –  Arguments

 library_index

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library control index returned by the LBR$INI_CONTROL routine.
    The library_index argument is the address of the longword that
    contains the index.

 rfa

    OpenVMS usage:vector_longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Record's file address (RFA) associated with the module header.
    The rfa argument is the address of a 2-longword array containing
    the RFA returned by LBR$PUT_RECORD or LBR$LOOKUP_KEY.

 bufdesc

    OpenVMS usage:char_string
    type:         character string
    access:       write only
    mechanism:    by descriptor
    Buffer that receives the module header. The bufdesc argument
    is the address of a string descriptor pointing to the buffer
    that receives the module header. The buffer must be the size
    specified by the symbol MHD$B_USRDAT plus the value of the
    CRE$L_UHDMAX create option. The MHD$ and CRE$ symbols are
    defined in the modules $MHDDEF and $CREDEF, which are stored
    in SYS$LIBRARY:STARLET.MLB.

 buflen

    OpenVMS usage:longword_signed
    type:         longword (signed)
    access:       write only
    mechanism:    by reference
    Length of the module header. The buflen argument is the address
    of a longword receiving the length of the returned module header.

 updatedesc

    OpenVMS usage:char_string
    type:         character string
    access:       read only
    mechanism:    by descriptor
    Additional information to be stored with the module header.
    The updatedesc argument is the address of a string descriptor
    pointing to additional data that the Librarian stores with
    the module header. If you include this argument, the Librarian
    updates the module header with the additional information.

27.3  –  Description

    If you specify bufdesc, the LBR routine returns the module header
    into the buffer. If you specify buflen, the routine also returns
    the buffer's length. If you specify updatedesc, the routine
    updates the header information.

    You define the maximum length of the update information (by
    specifying a value for CRE$L_UHDMAX) when you create the library.
    The Librarian zero-fills the information if it is less than the
    maximum length or truncates it if it exceeds the maximum length.

27.4  –  Condition Values Returned

    LBR$_HDRTRUNC      Buffer supplied to hold the module header was
                       too small.
    LBR$_ILLCTL        Specified library control index not valid.
    LBR$_ILLOP         Error. The updatedesc argument was supplied
                       and the library was a Version 1.0 library or
                       the library was opened only for read access.
    LBR$_INVRFA        Specified RFA does not point to a valid module
                       header.
    LBR$_LIBNOTOPN     Specified library not open.

28  –  LBR$SET_MOVE

    The LBR$SET_MOVE routine sets the record access of LBR
    subroutines to move mode.

    Format

      LBR$SET_MOVE  library_index

28.1  –  Returns

    OpenVMS usage:cond_value
    type:         longword (unsigned)
    access:       write only
    mechanism:    by value

    Longword condition value. Most utility routines return a
    condition value in R0. Condition values that this routine can
    return are listed under Condition Values Returned.

28.2  –  Argument

 library_index

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library control index returned by the LBR$INI_CONTROL routine.
    The library_index argument is the address of the longword that
    contains the index.

28.3  –  Description

    Librarian record access may be set to move mode (the default,
    set by LBR$SET_MOVE) or locate mode. The setting affects the
    operation of the LBR$GET_RECORD routine. If move mode is set,
    LBR$GET_RECORD copies the requested record to the specified user
    buffer. For details, see the description of LBR$GET_RECORD.

28.4  –  Condition Values Returned

    LBR$_ILLCTL        Specified library control index not valid.
    LBR$_LIBNOTOPN     Specified library not open.

29  –  LBR$UNMAP_MODULE

    The LBR$UNMAP_MODULE routine unmaps a module from process P2
    space.

    Format

      LBR$PUT_MODULE  library_index, txtrfa

29.1  –  Arguments

 library_index

    OpenVMS usage:longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    Library control index returned by the LBR$INI_CONTROL library
    routine. The library_index argument is the address of the
    longword that contains the index.

 txtrfa

    OpenVMS usage:vector_longword_unsigned
    type:         longword (unsigned)
    access:       read only
    mechanism:    by reference
    The module's record file address (RFA) of the library module
    header. The txtrfa argument is the address of the 2-longword
    array that specifies the RFA of the module header.

29.2  –  Description

    The LBR$UNMAP_MODULE routine unmaps the module, with the record
    file address in txtrfa, from process P2 space. This action
    releases the resources used to map the module.

    Unlike other LBR services that use RMS services, LBR$UNMAP_MODULE
    also uses system services. Because of this, the secondary status
    for error returns is placed in LBR$GL_SUBSTS. Use this to find
    further status when an error is returned.
Close Help