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.