[an error occurred while processing this directive]

HP OpenVMS Systems Documentation

Content starts here

HP OpenVMS RTL Library (LIB$) Manual


Previous Contents Index


LIB$DO_COMMAND

The Execute Command routine stops program execution and directs the command language interpreter (CLI) to execute a command that you supply as the argument. If successful, LIB$DO_COMMAND does not return control to the calling program. Instead, LIB$DO_COMMAND begins execution of the specified command.

If you want control to return to the caller, use LIB$SPAWN instead.


Format

LIB$DO_COMMAND command-string


RETURNS


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


Argument

command-string


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

Text of the command that LIB$DO_COMMAND executes. The command-string argument is the address of a descriptor pointing to the command text. The maximum length of the command is 255 characters.

Description

LIB$DO_COMMAND terminates your current image and then executes the contents of command-string as a command. The command is parsed using normal DCL rules.

LIB$DO_COMMAND is especially useful when you want to execute a CLI command after your program has finished executing. For example, you could use the routine to execute a SUBMIT or PRINT command to handle a file that your program has created.

Because of the following restrictions on LIB$DO_COMMAND, you should be careful when you incorporate it in your program:

  • During the call to LIB$DO_COMMAND, the current image exits and control cannot return to it.
  • The text of the command is passed to the current command language interpreter. Because you can define your own CLI in addition to DCL and MCR, you must make sure that the command will be handled by the intended CLI.
  • If LIB$DO_COMMAND is called from an image run directly as a subprocess or detached process, it will not execute correctly, because no CLI is associated with a subprocess.

LIB$DO_COMMAND is supported for use with the DCL and MCR CLIs. If an image is run directly as a subprocess or as a detached process, there is no CLI present to perform this function. In those cases, the error status LIB$_NOCLI is returned. Note that the command can execute an indirect file using the at sign (@) feature of DCL.


Condition Values Returned

LIB$_INVARG Invalid argument. command-string was more than 255 characters.
LIB$_NOCLI No CLI present. The calling process did not have a CLI to perform the function, or the CLI did not support the request type. Note that an image run as a subprocess or detached process does not have a CLI.
LIB$_UNECLIERR Unexpected CLI error. The CLI returned an error status that was not recognized. This error may be caused by use of a nonstandard CLI. If this error occurs while using the DCL or MCR CLIs, please report the problem to your HP support representative.

Example


PROGRAM DO_COMMAND(INPUT, OUTPUT);

{+}
{  This example uses LIB$DO_COMMAND to execute
{  any DCL command that is entered by the user
{  at the prompt.
{-}

PROCEDURE LIB$DO_COMMAND(CMDTXT : VARYING [A] OF CHAR);
   EXTERN;

VAR
  COMMAND :  VARYING [256] OF CHAR;

BEGIN
  WRITELN('ENTER THE COMMAND YOU WANT TO EXECUTE: ');
  READLN(COMMAND);
  LIB$DO_COMMAND(COMMAND);
END.

      

This Pascal program shows how to call LIB$DO_COMMAND. An example of the output of this program is as follows:


$ RUN DO_COMMAND
ENTER THE COMMAND YOU WANT TO EXECUTE:  SHOW TIME
  30-MAY-2000 14:07:28

LIB$EDIV

The Extended-Precision Divide routine performs extended-precision division. LIB$EDIV makes the VAX EDIV instruction available as a callable routine.

Note

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

Format

LIB$EDIV longword-integer-divisor ,quadword-integer-dividend ,longword-integer-quotient ,remainder


RETURNS


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


Arguments

longword-integer-divisor


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

Divisor. The longword-integer-divisor argument is the address of a signed longword integer containing the divisor.

quadword-integer-dividend


OpenVMS usage: quadword_signed
type: quadword integer (signed)
access: read only
mechanism: by reference

Dividend. The quadword-integer-dividend argument is the address of a signed quadword integer containing the dividend.

longword-integer-quotient


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

Quotient. The longword-integer-quotient argument is the address of a signed longword integer containing the quotient.

remainder


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

Remainder. The remainder argument is the address of a signed longword integer containing the remainder.

Condition Values Returned

SS$_NORMAL Normal successful operation.
SS$_INTDIV Integer divide by zero. The quotient is replaced by bits 31:0 of the dividend, and the remainder is replaced by zero.
SS$_INTOVF Integer overflow. The quotient is replaced by bits 31:0 of the dividend, and the remainder is replaced by zero.

Example


C+
C This Fortran program demonstrates how to use LIB$EDIV.
C-

        INTEGER DIVISOR,DIVIDEND(2),QUOTIENT,REMAINDER

C+
C Find the quotient and remainder of 4600387192 divided by 4096.
C Because 4600387192 is too large to store as a longword, use LIB$EDIV.
C-

        DIVISOR = 4096

C+
C The dividend must be represented as a quadword. To do this use a vector
C of length 2. The first element is the low-order longword, and the second
C element is the high-order longword.
C Now, 4600387192 = '00000000112345678'x. So,
C-

        DIVIDEND(1) = '12345678'X
        DIVIDEND(2) = '00000001'X

C+
C Compute the quotient and remainder of 4600387192 divided by 4096.
C-

        RETURN = LIB$EDIV(DIVISOR,DIVIDEND,QUOTIENT,REMAINDER)
        TYPE *,'The longword integer quotient of 4600387192/4096 is:'
        TYPE *,'               ',QUOTIENT
        TYPE *,'The longword integer remainder of 4600387192/4096 is:'
        TYPE *,'               ', REMAINDER
        END

      

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


 The longword integer quotient of 4600387192/4096 is:
                     1123141
 The longword integer remainder of 4600387192/4096 is:
                        1656

LIB$EMODD

The Extended Multiply and Integerize routine (D-Floating-Point Values) allows higher-level language users to perform accurate range reduction of D-floating arguments.

On Alpha and I64 systems, D-floating-point values are not supported in full precision in native OpenVMS Alpha and I64 programs. They are precise to 56 bits on VAX systems, 53 or 56 bits in translated VAX images, and 53 bits in native OpenVMS Alpha and I64 programs.


Format

LIB$EMODD floating-point-multiplier ,multiplier-extension ,floating-point-multiplicand ,integer-portion ,fractional-portion


RETURNS


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


Arguments

floating-point-multiplier


OpenVMS usage: floating_point
type: D_floating
access: read only
mechanism: by reference

The multiplier. The floating-point-multiplier argument is a D-floating number.

multiplier-extension


OpenVMS usage: byte_unsigned
type: byte (unsigned)
access: read only
mechanism: by reference

The left-justified multiplier-extension bits. The multiplier-extension argument is an unsigned byte.

floating-point-multiplicand


OpenVMS usage: floating_point
type: D_floating
access: read only
mechanism: by reference

The multiplicand. The floating-point-multiplicand argument is a D-floating number.

integer-portion


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

The integer portion of the result. The integer-portion argument is the address of a signed longword integer containing the integer portion of the result.

fractional-portion


OpenVMS usage: floating_point
type: D_floating
access: write only
mechanism: by reference

The fractional portion of the result. The fractional-portion argument is a D-floating number.

Description

The floating-point multiplier extension operand (second operand) is concatenated with the floating-point multiplier (first operand) to gain x additional low-order fraction bits. The multiplicand is multiplied by the extended multiplier. After multiplication, the integer portion is extracted, and a y-bit floating-point number is formed from the fractional part of the product by truncating extra bits.

The multiplication yields a result equivalent to the exact product truncated to a fraction field of y bits. With respect to the result as the sum of an integer and fraction of the same sign, the integer operand is replaced by the integer part of the result and the fraction operand is replaced by the rounded fractional part of the result.

The values of x and y are as follows:

Routine x Bits y
LIB$EMODD 8 7:0 64

Condition Values Returned

SS$_NORMAL Routine successfully completed.
SS$_FLTUND Floating underflow. The integer and fraction operands are replaced by zero (0).
SS$_INTOVF Integer overflow. The integer operand is replaced by the low-order bits of the true result. Floating overflow is indicated by SS$_INTOVF also.
SS$_ROPRAND Reserved operand. The integer and fraction operands are unaffected.

LIB$EMODF

The Extended Multiply and Integerize routine (F-Floating-Point Values) allows higher-level language users to perform accurate range reduction of F-floating arguments.

Format

LIB$EMODF floating-point-multiplier ,multiplier-extension ,floating-point-multiplicand ,integer-portion ,fractional-portion


RETURNS


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


Arguments

floating-point-multiplier


OpenVMS usage: floating_point
type: F_floating
access: read only
mechanism: by reference

The multiplier. The floating-point-multiplier argument is the address of an F-floating number containing the number.

multiplier-extension


OpenVMS usage: byte_unsigned
type: byte (unsigned)
access: read only
mechanism: by reference

The left-justified multiplier-extension bits. The multiplier-extension argument is the address of an unsigned byte containing these multiplier extension bits.

floating-point-multiplicand


OpenVMS usage: floating_point
type: F_floating
access: read only
mechanism: by reference

The multiplicand. The floating-point-multiplicand argument is an F-floating number.

integer-portion


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

The integer portion of the result. The integer-portion argument is the address of a signed longword integer containing the integer portion of the result.

fractional-portion


OpenVMS usage: floating_point
type: F_floating
access: write only
mechanism: by reference

The fractional portion of the result. The fractional-portion argument is the address of an F-floating number containing the fractional portion of the result.

Description

LIB$EMODF allows higher-level language users to perform accurate range reduction of F-floating arguments.

The floating-point multiplier-extension operand (second operand) is concatenated with the floating-point-multiplier (first operand) to gain x additional low-order fraction bits. The multiplicand is multiplied by the extended multiplier. After multiplication, the integer portion is extracted and a y-bit floating-point number is formed from the fractional part of the product by truncating extra bits.

The multiplication yields a result equivalent to the exact product truncated to a fraction field of y bits. With respect to the result as the sum of an integer and fraction of the same sign, the integer operand is replaced by the integer part of the result and the fraction operand is replaced by the rounded fractional part of the result.

The values of x and y are as follows:

Routine x Bits y
LIB$EMODF 8 7:0 32

Condition Values Returned

SS$_NORMAL Routine successfully completed.
SS$_FLTUND Floating underflow. The integer and fraction operands are replaced by zero.
SS$_INTOVF Integer overflow. The integer operand is replaced by the low-order bits of the true result. Floating overflow is indicated by SS$_INTOVF also.
SS$_ROPRAND Reserved operand. The integer and fraction operands are unaffected.

LIB$EMODG

The Extended Multiply and Integerize routine (G-Floating-Point Values) allows higher-level language users to perform accurate range reduction of G-floating arguments.

Format

LIB$EMODG floating-point-multiplier ,multiplier-extension ,floating-point-multiplicand ,integer-portion ,fractional-portion


RETURNS


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


Arguments

floating-point-multiplier


OpenVMS usage: floating_point
type: G_floating
access: read only
mechanism: by reference

The multiplier. The floating-point-multiplier argument is a G-floating number.

multiplier-extension


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

The left-justified multiplier-extension bits. The multiplier-extension argument is an unsigned word.

floating-point-multiplicand


OpenVMS usage: floating_point
type: G_floating
access: read only
mechanism: by reference

The multiplicand. The floating-point-multiplicand argument is a G-floating number.

integer-portion


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

The integer portion of the result. The integer-portion argument is the address of a signed longword integer containing the integer portion of the result.

fractional-portion


OpenVMS usage: floating_point
type: G_floating
access: write only
mechanism: by reference

The fractional portion of the result. The fractional-portion argument is a G-floating number.

Description

The floating-point multiplier extension operand (second operand) is concatenated with the floating-point multiplier (first operand) to gain x additional low-order fraction bits. The multiplicand is multiplied by the extended multiplier. After multiplication, the integer portion is extracted and a y-bit floating-point number is formed from the fractional part of the product by truncating extra bits.

The multiplication yields a result equivalent to the exact product truncated to a fraction field of y bits. With respect to the result as the sum of an integer and fraction of the same sign, the integer operand is replaced by the integer part of the result and the fraction operand is replaced by the rounded fractional part of the result.

The values of x and y are as follows:

Routine x Bits y
LIB$EMODG 11 15:5 64

Condition Values Returned

SS$_NORMAL Routine successfully completed.
SS$_FLTUND Floating underflow. The integer and fraction operands are replaced by zero.
SS$_INTOVF Integer overflow. The integer operand is replaced by the low-order bits of the true result. Floating overflow is indicated by SS$_INTOVF also.
SS$_ROPRAND Reserved operand. The integer and fraction operands are unaffected.


Previous Next Contents Index