hp.com home products and services support and drivers solutions how to buy
cd-rom home
End of Jump to page title
HP OpenVMS systems
documentation

Jump to content


HP OpenVMS RTL Library (LIB$) Manual

HP OpenVMS RTL Library (LIB$) Manual


Previous Contents Index


LIB$STOP

The Stop Execution and Signal the Condition routine generates a signal that indicates that an exception condition has occurred in your program. Exception conditions signaled by LIB$STOP cannot be continued from the point of the signal.

Format

LIB$STOP condition-value [,number-of-arguments] [,FAO-argument...]


RETURNS

LIB$STOP generates a signal and stops execution of the calling program. No condition values are returned.


Arguments

condition-value


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

OpenVMS 32-bit condition value. The condition-value argument is an unsigned longword that contains this condition value.

The HP OpenVMS Programming Concepts Manual explains the format of a condition value.

number-of-arguments


OpenVMS usage: longword_signed
type: longword integer (signed)
access: read only
mechanism: by value

Number of FAO arguments associated with condition-value. The optional number-of-arguments argument is a signed longword integer that contains this number. If omitted or specified as zero, no FAO arguments follow.

FAO-argument


OpenVMS usage: varying_arg
type: unspecified
access: read only
mechanism: by value

Optional FAO (formatted ASCII output) argument that is associated with the specified condition value.

The HP OpenVMS Programming Concepts Manual explains the message format.


Description

LIB$STOP is called whenever your program must indicate an exception condition because it is impossible to continue execution or return a status code to the calling program.

LIB$STOP scans the stack frame by frame, starting with the most recent frame, calling each established handler (see the HP OpenVMS Programming Concepts Manual). LIB$STOP guarantees that control will not return to the caller.

The LIB$STOP argument list, the Program Counter (PC) and Processor Status Longword (PSL on OpenVMS VAX systems, PS on OpenVMS Alpha and I64 systems) of the caller are appended to build the signal argument vector.

The severity of condition-value is forced to SEVERE before each call to a handler.

If any handler attempts to continue by returning a success completion code, the error message ATTEMPT TO CONTINUE FROM STOP is printed and your program exits.

If the handler called by LIB$STOP in turn calls system service $UNWIND, control will not return to LIB$STOP's caller, thus changing the program flow. A handler can also modify the saved copy of R0/R1 in the mechanism vector, changing registers R0 and R1 after the stack has been unwound. If a handler does neither of these things, then all registers including R0/R1 and the hardware condition codes are preserved.

Note

On Alpha and I64 systems, OpenVMS Alpha and I64 instructions perform the equivalent operation.

The only way a handler can prevent the image from exiting after a call to LIB$STOP is to unwind the stack using the $UNWIND system service.


Condition Values Returned

None.


Example


10 EXTERNAL LONG FUNCTION LIB$RESERVE_EF 
   DECLARE LONG RET_STATUS 
 
   RET_STATUS = LIB$RESERVE_EF( 2% ) 
   IF (RET_STATUS AND 1%) = 0% THEN 
       CALL LIB$STOP( RET_STATUS BY VALUE ) 
   END IF 
 
   PRINT "Event flag 2 reserved successfully" 
 
   END 
 
      

This BASIC example program uses LIB$STOP to stop executing if an error is signaled. This BASIC program tries to reserve an event flag that is not accessible to user programs, thus ensuring that an error will be signaled.

The output generated by this BASIC program is as follows:


%LIB-F-EF_ALRRES, event flag already reserved 
%TRACE-F-TRACEBACK, symbolic stack dump follows 
module name     routine name                     line       rel PC    abs PC 
2822XBLST$MAIN  2822XBLST$MAIN                      6      00000044  00000644 


LIB$SUBX

The Multiple-Precision Binary Subtraction routine performs subtraction on signed two's complement integers of arbitrary length.

Format

LIB$SUBX minuend-array ,subtrahend-array ,difference-array [,array-length]


RETURNS


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


Arguments

minuend-array


OpenVMS usage: vector_longword_signed
type: unspecified
access: read only
mechanism: by reference, array reference

Minuend; a multiple-precision, signed two's complement integer. The minuend-array argument is the address of an array of signed longword integers that contains the minuend.

subtrahend-array


OpenVMS usage: vector_longword_signed
type: unspecified
access: read only
mechanism: by reference, array reference

Subtrahend; a multiple-precision, signed two's complement integer. The subtrahend-array argument is the address of an array of signed longword integers that contains the subtrahend.

difference-array


OpenVMS usage: vector_longword_signed
type: unspecified
access: write only
mechanism: by reference, array reference

Difference; a multiple-precision, signed two's complement integer result. The difference-array argument is the address of an array of signed longword integers that contains the difference.

array-length


OpenVMS usage: longword_signed
type: longword integer (signed)
access: read only
mechanism: by reference

Length in longwords of the arrays to be operated on by LIB$SUBX. The array-length argument contains the address of a signed longword integer that is this length. The array-length argument must not be negative. The default length is 2 units.

Description

LIB$SUBX performs subtraction on signed two's complement integers of arbitrary length. The integers are located in arrays of longwords. The higher addresses contain the higher-precision parts of the values. The highest-addressed longword contains the sign and 31 bits of precision. The remaining longwords contain 32 bits of precision in each. The number of longwords to be operated on is given by the optional argument, array-length. The default length is 2, which corresponds to the OpenVMS quadword data type.

Condition Values Returned

SS$_NORMAL Routine successfully completed.
SS$_INTOVF Integer overflow. The result is correct, except that the sign bit is lost.
LIB$_INVARG Invalid argument. Length is negative. The output array is unchanged.

Example


C+ 
C This Fortran example program demonstrates the use of LIB$SUBX. 
C- 
        INTEGER A(2),B(2),C(2),RETURN 
C+ 
C Let "A" have the value 72057594037927937 = '1000000000000001'x. 
C Let "B" have the value 4294967295        = '00000000FFFFFFFF'x. 
C- 
        A(1) = '00000001'x 
        A(2) = '10000000'x 
        B(1) = 'FFFFFFFF'x 
        B(2) = '00000000'x 
C+ 
C Then "A" - "B" is 72057589742960642. 
C- 
        RETURN = LIB$SUBX(A,B,C) 
        TYPE *,' ' 
        TYPE *,'Let A = 72057594037927937 and B = 4294967295.' 
        TYPE *,'Then C = A - B = 72057589742960642.' 
        TYPE 2,C(2),C(1) 
2       FORMAT(' 72057589742960642 is represented as ',1H',Z8,Z8,3H'x.) 
        TYPE *, 51HThat is, C(2) = '0FFFFFFF'x and C(1) = '00000002'x. 
        END 
 
      

This Fortran example demonstrates how to call LIB$SUBX. The output generated by this program is as follows:


 Let A = 72057594037927937 and B = 4294967295. 
 Then C = A - B = 72057589742960642. 
 72057589742960642 is represented as ' FFFFFFF       2'x. 
 That is, C(2) = '0FFFFFFF'x and C(1) = '00000002'x. 


LIB$SUB_TIMES

The Subtract Two Quadword Times routine subtracts two OpenVMS internal-time-format times.

Format

LIB$SUB_TIMES time1 ,time2 ,resultant-time


RETURNS


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


Arguments

time1


OpenVMS usage: date_time
type: quadword (unsigned)
access: read only
mechanism: by reference

First time, from which LIB$SUB_TIMES subtracts the second time. The time1 argument is the address of an unsigned quadword containing this time. The time1 argument must represent a later or equal time or a longer or equal time interval than time2. The time1 argument may be either absolute time or delta time as long as time2 is of the same type. If time1 and time2 are of different types, time1 must be the absolute time.

time2


OpenVMS usage: date_time
type: quadword (unsigned)
access: read only
mechanism: by reference

Second time, which LIB$SUB_TIMES subtracts from the first time. The time2 argument is the address of an unsigned quadword containing this time. The time2 argument must represent an earlier or equal time or a shorter or equal time interval than time1. The time2 argument may be either absolute time or delta time as long as time1 is of the same type. If time2 and time1 are of different types, time2 must be the delta time.

resultant-time


OpenVMS usage: date_time
type: quadword (unsigned)
access: write only
mechanism: by reference

The result of subtracting time2 from time1. The resultant-time argument is the address of an unsigned quadword containing the result. If both time1 and time2 are delta times, then resultant-time is a delta time. If both time1 and time2 are absolute times, then resultant-time is a delta time. If time1 is an absolute time and time2 is a delta time, then resultant-time is an absolute time.

Description

LIB$SUB_TIMES subtracts two OpenVMS internal times. The second time, specified by time2, is subtracted from time1. The following table shows the only combinations of times you can subtract:
Time1 Time2 Subtraction Resultant-Time
delta delta time1 - time2 delta
absolute absolute time1 - time2 delta
absolute delta time1 - time2 absolute

Delta time values cannot be a zero and always reflect ime in the future. Binary format number will always be negative. Therefore, if time1 and time2 are equal, resultant-time cannot be 0. Instead, resultant-time is represented by .1 of one microsecond (the smallest interval of time recognized by the OpenVMS operating system). This interval is shown as "0 00:00:00.00" when formatted by the standard techniques.


Condition Values Returned

LIB$_NORMAL Routine successfully completed.
LIB$_INVARGORD Invalid ordering of arguments.
LIB$_IVTIME Invalid time.
LIB$_NEGTIM Negative time computed.
LIB$_WRONUMARG Incorrect number of arguments.

LIB$SYS_ASCTIM

The Invoke $ASCTIM to Convert Binary Time to ASCII String routine calls the system service $ASCTIM to convert a binary date and time value, returning the ASCII string using the semantics of the caller's string.

Format

LIB$SYS_ASCTIM [resultant-length] ,time-string [,user-time] [,flags]


RETURNS


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


Arguments

resultant-length


OpenVMS usage: word_unsigned
type: word (unsigned)
access: write only
mechanism: by reference

Number of bytes written into time-string, not counting padding in the case of a fixed-length string. The resultant-length argument contains the address of an unsigned word integer that is this number.

If the input string is truncated to the size specified in the time-string descriptor, resultant-length is set to this size. Therefore, resultant-length can always be used by the calling program to access a valid substring of time-string.

time-string


OpenVMS usage: time_name
type: character string
access: write only
mechanism: by descriptor

Destination string into which LIB$SYS_ASCTIM writes the ASCII time string. The time-string argument contains the address of a descriptor pointing to the destination string.

user-time


OpenVMS usage: date_time
type: quadword (unsigned)
access: read only
mechanism: by reference

Value that LIB$SYS_ASCTIM converts to ASCII string form. The user-time argument contains the address of a signed quadword integer that is this value.

If 0 or no address is specified, the current system date and time are returned. A positive value represents an absolute time. A negative value represents a delta time. Delta times must be less than 10,000 days.

flags


OpenVMS usage: mask_longword
type: longword (unsigned)
access: read only
mechanism: by reference

Conversion indicator specifying which date and time fields LIB$SYS_ASCTIM should return. The flags argument is the address of an unsigned bit mask that contains this conversion indicator.

A value of 1 causes only the hour, minute, second, and hundredths of a second to be returned, depending on the length of the buffer. A value of 0 (the default) causes the full date and time to be returned, depending on the length of the buffer.

The results of specifying some possible combinations for the values of the flags and time-string arguments are shown below:
Time Value Time-String Length Flags Value Information Returned
Absolute 23 0 Date and time
Absolute 12 0 Date
Absolute 11 1 Time
Delta 16 0 Days and time
Delta 11 1 Time

The flags argument is passed to LIB$SYS_ASCTIM by reference and is changed to value for use by $ASCTIM.


Description

See the HP OpenVMS System Services Reference Manual: A--GETUAI for a complete description of $ASCTIM.

Condition Values Returned

SS$_NORMAL Routine successfully completed.
SS$_IVTIME The specified delta time is greater than or equal to 10,000 days.
LIB$_FATERRLIB Fatal internal error. An internal consistency check has failed. This usually indicates an internal error in the Run-Time Library and should be reported to your HP support representative.
LIB$_INSVIRMEM Insufficient virtual memory. Your program has exceeded the image quota for virtual memory.
LIB$_INVSTRDES Invalid string descriptor. A string descriptor has an invalid value in its CLASS field.
LIB$_STRTRU Routine successfully completed, but the source string was truncated on copy.

LIB$SYS_FAO

The Invoke $FAO System Service to Format Output routine calls the $FAO system service, returning a string in the semantics you provide. If called with other than a fixed-length string for output, the length of the resultant string is limited to 256 bytes and truncation occurs.

Format

LIB$SYS_FAO character-string, [resultant-length] ,resultant-string [,directive-argument ,...]


RETURNS


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


Arguments

character-string


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

ASCII control string, consisting of the fixed text of the output string and FAO directives. The character-string argument contains the address of a descriptor pointing to this control string.

resultant-length


OpenVMS usage: word_unsigned
type: word (unsigned)
access: write only
mechanism: by reference

Length of the output string. The resultant-length argument contains the address of an unsigned word integer that is this length.

resultant-string


OpenVMS usage: char_string
type: character string
access: write only
mechanism: by descriptor

Fully formatted output string returned by LIB$SYS_FAO. The resultant-string argument contains the address of a descriptor pointing to this output string.

directive-argument


OpenVMS usage: varying_arg
type: unspecified
access: read only
mechanism: unspecified

Directive argument contained in longwords. Depending on the directive, a directive-argument argument can be a value to be converted, the address of the string to be inserted, or a length or argument count. The passing mechanism for each of these arguments should be the one expected by the $FAO system service.

Description

See the HP OpenVMS System Services Reference Manual: A--GETUAI for a complete description of $FAO.

Condition Values Returned

SS$_NORMAL Routine successfully completed.
SS$_BADPARAM An invalid directive was specified in the FAO control string.
SS$_BUFFEROVF Successfully completed, but the formatted output string overflowed the output buffer and was truncated.
LIB$_STRTRU Success, but the source string was truncated on copy.
LIB$_INSVIRMEM Insufficient virtual memory to allocate dynamic string.
LIB$_INVSTRDES Invalid string descriptor. A string descriptor has an invalid value in its CLASS field.


Previous Next Contents Index