HELPLIB.HLB  —  PASCAL  Predeclared Routines
  VSI Pascal supplies predeclared procedures  and  functions  that
  perform  various  commonly  used operations.  You do not have to
  declare these routines in order to call them from your code.

1  –  Allocation

  The allocation  size  routines  provide  information  about  the
  amount  of  storage  allocated  for  variables and components of
  various types.  The parameters may be in the form of variable or
  type  identifiers.   Each  routine returns an integer value that
  represents the allocation size of the given parameter.

1.1  –  BITNEXT

  The BITNEXT function returns an integer value that indicates the
  number  of bits that would be allocated for one component of the
  specified type in a packed array or if  the  specified  variable
  appeared as a cell in a packed array.

  Syntax:

     BITNEXT( x )

  The parameter 'x' can be a variable or any type identifier.

1.2  –  BITSIZE

  The BITSIZE function returns an integer value that indicates the
  number  of  bits  that  would  be allocated for one field of the
  specified type in a packed record or if the  specified  variable
  appeared as a field in a packed record.

  Syntax:

  BITSIZE( x )

  The parameter 'x' can be a variable or any type identifier.

1.3  –  BIT_OFFSET

  The BIT_OFFSET function returns an integer value that represents
  the bit position of a field in a record.

  Syntax:

     BIT_OFFSET( t,f )

  The parameter 't' can be of any record type or variable, and the
  parameter 'f' can be any field contained in that record.

1.4  –  BYTE_OFFSET

  The  BYTE_OFFSET  function  returns  an   integer   value   that
  represents the byte position of a field in a record.

  Syntax:

     BYTE_OFFSET( t,f )

  The parameter 't' can be of any record type or variable, and the
  parameter 'f' can be any field contained in that record.

1.5  –  NEXT

  The NEXT function returns an integer value  that  indicates  the
  number of bytes that would be allocated for one component of the
  specified type in an unpacked array or if the specified variable
  appeared as the cell in an unpacked array.

  Syntax:

     NEXT( x )

  The parameter 'x' can be a type identifier or variable.

  Cells in an unpacked array are affected by alignment  attributes
  and,  by default, are byte or naturally aligned.  Therefore, the
  size returned includes the actual size of the type or  variable,
  in   addition  to  trailing  space  required  to  ensure  proper
  alignment.

1.6  –  SIZE

  The SIZE function returns an integer value  that  indicates  the
  possible  or  actual  number  of  bytes that are allocated for a
  specified data type or variable.

  Syntax:

     SIZE( x[[,t1,...,tn]] )

  The parameter 'x' can be a type identifier or  a  variable.   If
  'x'  is  a  type  identifier, then SIZE returns an integer value
  which indicates the number of bytes that would be allocated  for
  a variable or record field of type 'x'.

  If 'x' is a variable, then SIZE returns an  integer  value  that
  indicates  the  number  of  bytes  that  are  allocated for that
  variable.

  In the case where the parameter 'x' is a variant record variable
  or  variant  type identifier, SIZE returns an integer value that
  indicates the number of bytes that are allocated (for a  variant
  record  variable)  or  would  be  allocated  (for a variant type
  identifier) for both the fixed portion of  the  record  and  the
  largest   variant.    In  addition  you  can  supply  additional
  parameters t1 through tn that correspond to the case  labels  of
  the  record.   The  SIZE  routine  returns an integer value that
  indicates the number of bytes that would be allocated by the NEW
  procedure for a dynamic variable of the specified variant.

2  –  Arithmetic

  Arithmetic routines perform mathematical  computations.   Actual
  parameters  to the arithmetic functions can be of any arithmetic
  type.

2.1  –  ABS

  The ABS function returns a value (of the same data type  as  the
  specified   parameter)   that  is  the  absolute  value  of  the
  parameter.

  Syntax:

     ABS( x )

  The parameter 'x' can be of any arithmetic type.

2.2  –  ARCTAN

  The ARCTAN function returns  a  real  value  that  expresses  in
  radians the arctangent of the specified parameter.

  Syntax:

     ARCTAN( x )

  The parameter 'x' can be an integer or REAL type.

2.3  –  COS

  The COS function returns a real value that represents the cosine
  of the specified parameter.

  Syntax:

     COS( x )

  The parameter 'x' can  be  an  integer  or  REAL  type,  and  is
  expressed in radians.

2.4  –  EXP

  The EXP function  returns  a  real  value  that  represents  the
  exponent of the specified parameter (it represents e**x).

  Syntax:

     EXP( x )

  The parameter 'x' can be an integer or REAL type.

2.5  –  LN

  The LN function returns a real value that represents the natural
  logarithm of the specified parameter.

  Syntax:

     LN( x )

  The parameter 'x' can be an integer or REAL type.  The value  of
  'x' must be greater than zero.

2.6  –  LSHIFT_LSHFT

  The LSHIFT and LSHFT predeclared functions return a value of the
  same  type  as its first parameter.  The return value represents
  the value of the  first  parameter  after  the  bits  have  been
  shifted to the left.

  Syntax:

     LSHIFT(expression,expression)
     LSHFT(expression,expression)

  The parameters are two integer or unsigned  values.   The  first
  parameter  represents  a  value  to shift.  The second parameter
  represents the number of bits to shift the first  value  to  the
  left.   LSHIFT  and  LSHFT  insert zero bits on the right as the
  bits shift left.

  Note that shifting integers is not equivalent to multiplying  or
  dividing  by  a  power  of  two when the value of the integer is
  negative.

  If the number of bits shifted is larger than the natural integer
  size of the target platform, the result is undefined.

2.7  –  MAX

  The MAX function returns a value (the same type as that  of  the
  parameters)  that  is  the  maximum value of a specified list of
  parameters.

  Syntax:

     MAX( x1,...,xn )

  The parameters can be any arithmetic type, but must  all  be  of
  the same type.

2.8  –  MIN

  The MIN function returns a value (of the same type  as  that  of
  the parameters) that is the minimum value of a specified list of
  parameters.

  Syntax:

     MIN( x1,...,xn )

  The parameters can be any arithmetic type, but must  all  be  of
  the same type.

2.9  –  RSHIFT_RSHFT

  The RSHIFT and RSHFT predeclared functions return a value of the
  same  type  as  its  first  parameter.  The value represents the
  value of the first parameter after the bits have been shifted to
  the right.

  Syntax:

     RSHIFT(expression,expression)
     RSHFT(expression,expression)

  The parameters are two integer or unsigned  values.   The  first
  parameter represents a value to shift; the second represents the
  number of bits to shift the first value.  The RSHIFT  and  RSHFT
  functions insert zero bits on the left as the bits shift right.

  Note that shifting integers is not equivalent to multiplying  or
  dividing  by  a  power  of  two when the value of the integer is
  negative.

  If the number of bits shifted is larger than the natural integer
  size of the target platform, the result is undefined.

2.10  –  SIN

  The SIN function returns a real value that represents  the  sine
  of the specified parameter.

  Syntax:

     SIN( x )

  The parameter 'x' can  be  an  integer  or  REAL  type,  and  is
  expressed in radians.

2.11  –  SQR

  The SQR function returns a  value  (of  the  same  type  of  the
  parameter)   that   represents   the  square  of  the  specified
  parameter.

  Syntax:

     SQR( x )

  The parameter 'x' can be of any arithmetic type.

2.12  –  SQRT

  The SQRT function returns  a  real  value  that  represents  the
  square root of the specified parameter.

  Syntax:

     SQRT( x )

  The parameter 'x' can be of an integer, unsigned, or REAL  type.
  If the value of 'x' is less than zero, an error occurs.

2.13  –  UAND

  The UAND function returns an unsigned value  that  represents  a
  binary  logical AND operation on each corresponding pair of bits
  of the specified parameters.

  Syntax:

     UAND( u1,u2 )

  The parameters 'u1' and 'u2' must be unsigned.

2.14  –  UNOT

  The UNOT function returns an unsigned value  that  represents  a
  binary  logical  NOT  operation  on  each  bit  of the specified
  parameter.

  Syntax:

     UNOT( u1 )

  The parameter 'u' must be unsigned.

2.15  –  UOR

  The UOR function returns an unsigned value of a  binary  logical
  OR  operation on the corresponding pair of bits of two specified
  parameters.

  Syntax:

     UOR( u1,u2 )

  The parameters 'u1' and 'u2' must be unsigned.

2.16  –  UXOR

  The UXOR function returns an unsigned value of a binary  logical
  exclusive-OR  operation on the corresponding pair of bits of two
  specified parameters.

  Syntax:

     UXOR( u1,u2 )

  The parameters 'u1' and 'u2' must be unsigned.

2.17  –  XOR

  The XOR function returns a  value  (of  the  same  type  as  the
  parameters)  of  a  binary logical exclusive-OR operation on two
  specified parameters.

  Syntax:

     XOR( p1,p2 )

  The 'p1' and 'p2' parameters must be of the same type  and  must
  be of either the BOOLEAN or SET types.

3  –  Char Strng

  VSI  Pascal  supplies  predeclared  routines   that   manipulate
  character strings.

3.1  –  BIN

  The BIN function returns a character-string value  that  is  the
  binary  equivalent of the specified parameter.  The return value
  is compatible with all other string types.

  Syntax:

     BIN( x [[, length[[, digits]]]] )

  The parameter 'x' is  the  expression  to  be  converted.   This
  parameter  must  have  a  size that is known at compile time; it
  cannot be VARYING OF CHAR, a conformant parameter, or  a  schema
  type.

  Two optional  integer  parameters  specify  the  length  of  the
  resulting string and the minimum number of significant digits to
  be returned.  If you specify a length that is too short to  hold
  the  converted  value,  the resulting string is truncated on the
  left.

  If you omit the  optional  parameters,  the  bit  width  of  the
  converted  parameter  value determines the string length and the
  number  of  significant  digits.   By  default,  the  number  of
  significant digits is the minimum number of characters necessary
  to express all  the  bits  of  the  converted  parameter.   This
  default  length is one character more than the default number of
  digits, which causes a leading  blank  to  be  included  in  the
  resulting string when both parameters are omitted.

3.2  –  DEC

  The DEC function returns  character-string  value  that  is  the
  decimal equivalent of the specified parameter.  The return value
  is compatible with all other string types.

  Syntax:

     DEC( x [[, length[[, digits]]]] )

  The parameter 'x' is the expression to be  converted.   The  DEC
  function  can  take  a  parameter  of any type except VARYING OF
  CHAR, conformant parameters, or schema types.  The DEC  function
  requires the size of 'x' to be less than or equal to the size of
  INTEGER64 (if supported), or less than or equal to the  size  of
  INTEGER32.

  Two optional  integer  parameters  specify  the  length  of  the
  resulting string and the minimum number of significant digits to
  be returned.  If you specify a length that is too short to  hold
  the  converted  value,  the resulting string is truncated on the
  left.  If you do not specify values for the optional parameters,
  a  default  length  and  a default minimum number of significant
  digits is used.

  If the size of 'x' is greater  than  32,  the  defaults  are  20
  characters  for  the  length  and  19 characters for the minimum
  number of digits.  Otherwise, the defaults are 11 characters for
  the  length  and 10 characters for the minimum number of digits.
  Because the default length is  1  greater  than  the  number  of
  significant digits, positive numbers will be preceded by a blank
  and negative numbers will be preceded by a minus sign.

3.3  –  EQ

  The EQ function returns a Boolean value that  specifies  if  the
  parameters  are  equal  according  to  the  ASCII  values of the
  strings' characters.

  Syntax:

     EQ( str1,str2 )

  The  parameters  'str1'  and  'str2'  must  be  character-string
  expressions.  If the EQ function detects unequal string lengths,
  it stops comparison and returns FALSE.

3.4  –  FIND_MEMBER

  The FIND_MEMBER function locates the first character in a string
  that is a member of a specified set and returns an integer value
  indicating the position of the  character  in  the  string;  the
  function  returns  0  if  the  characters in the string were not
  members of the set.

  Syntax:

     FIND_MEMBER( string, char-set )

  The 'string' parameter is a string value, and the 'char-set'  is
  a value of type SET OF CHAR.

3.5  –  FIND_NONMEMBER

  The FIND_NONMEMBER function locates the  first  character  in  a
  string  that  is  not a member of a specified set and returns an
  integer value indicating the position of the  character  in  the
  string;  the  function returns 0 if the characters in the string
  were all members of the set.

  Syntax:

     FIND_NONMEMBER( string, char-set )

  The 'string' parameter is a string value, and the 'char-set'  is
  a value of type SET OF CHAR.

3.6  –  GE

  The GE function returns a Boolean value that  specifies  if  the
  first   parameter  is  greater  than  or  equal  to  the  second
  parameter,  according  to  the  ASCII  values  of  the  strings'
  characters.

  Syntax:

     GE( str1,str2 )

  The  parameters  'str1'  and  'str2'  must  be  character-string
  expressions.   VSI  Pascal  does  not  pad  shorter strings with
  blanks.

3.7  –  GT

  The GT function returns a BOOLEAN value that  specifies  if  the
  first  parameter is greater than the second parameter, according
  to the ASCII values of the strings' characters.

  Syntax:

     GT( str1,str2 )

  The  parameters  'str1'  and  'str2'  must  be  character-string
  expressions.   VSI  Pascal  does  not  pad  shorter strings with
  blanks.

3.8  –  HEX

  The HEX function returns a character-string value  that  is  the
  hexadecimal  equivalent  of the specified parameter.  The return
  value is compatible with all other string types.

  Syntax:

     HEX( x [[, length[[, digits]]]] )

  The parameter 'x' is  the  expression  to  be  converted.   This
  parameter  must  have  a  size that is known at compile time; it
  cannot be VARYING OF CHAR, a conformant parameter, or  a  schema
  type.

  Two optional  integer  parameters  specify  the  length  of  the
  resulting string and the minimum number of significant digits to
  be returned.  If you specify a length that is too short to  hold
  the  converted  value,  the resulting string is truncated on the
  left.  If you do not specify values for the optional parameters,
  a  default  length and a default number of significant digits is
  used.

  By default, the number of  significant  digits  is  the  minimum
  number  of  characters  necessary to express all the bits of the
  converted parameter.  This default length is one character  more
  than  the default number of digits, which causes a leading blank
  to be included in the resulting string when both parameters  are
  omitted.

3.9  –  INDEX

  The INDEX function searches a string for a  specified  substring
  and  returns an integer value that either indicates the location
  of the substring or the status of the search.

  Syntax:

     INDEX( string, substring )

  INDEX requires two character-string expressions  as  parameters:
  a string to be searched and a substring to be found.

  The search ends as soon as the first occurrence of the substring
  is located.  If the substring is found, INDEX returns the string
  component that contains the first letter of the  substring.   If
  the  substring  is not found, INDEX returns the value 0.  If the
  substring is an empty string, INDEX returns the value 1.  If the
  string  to  be  searched  is  an empty string, INDEX returns the
  value 0 unless the substring is also empty; in which case, INDEX
  returns the value 1.

3.10  –  LE

  The LE function returns a Boolean value that  specifies  if  the
  first  parameter  is less than or equal to the second parameter,
  according to the ASCII values of the strings' characters.

  Syntax:

     LE( str1,str2 )

  The  parameters  'str1'  and  'str2'  must  be  character-string
  expressions.   VSI  Pascal  does  not  pad  shorter strings with
  blanks.

3.11  –  LENGTH

  The LENGTH function returns an integer value that is the  length
  of a specified string expression.

  Syntax:

     LENGTH( str )

  The parameter 'str' must be a character-string expression.

3.12  –  LT

  This function returns a Boolean  value  that  specifies  if  the
  first  parameter is less than the second parameter, according to
  the ASCII values of the strings' characters.

  Syntax:

     LT( str1,str2 )

  The  parameters  'str1'  and  'str2'  must  be  character-string
  expressions.   VSI  Pascal  does  not  pad  shorter strings with
  blanks.

3.13  –  NE

  The NE function returns a Boolean value that  specifies  if  the
  parameters  are  not  equal according to the ASCII values of the
  strings' characters.

  Syntax:

     NE( str1,str2 )

  The  parameters  'str1'  and  'str2'  must  be  character-string
  expressions.   VSI  Pascal  does  not  pad  shorter strings with
  blanks.

3.14  –  OCT

  The OCT function returns  character-string  value  that  is  the
  octal  equivalent  of the specified parameter.  The return value
  is compatible with all other string types.

  Syntax:

     OCT( x [[, length[[, digits]]]] )

  The parameter 'x' is  the  expression  to  be  converted.   This
  parameter  must  have  a  size that is known at compile time; it
  cannot be VARYING OF CHAR, a conformant parameter, or  a  schema
  type.

  Two optional  integer  parameters  specify  the  length  of  the
  resulting string and the minimum number of significant digits to
  be returned.  If you specify a length that is too short to  hold
  the  converted  value,  the resulting string is truncated on the
  left.

  By default, the number of  significant  digits  is  the  minimum
  number  of  characters  necessary to express all the bits of the
  converted parameter.  This default length is one character  more
  than  the default number of digits, which causes a leading blank
  to be included in the resulting string when both parameters  are
  omitted.

3.15  –  PAD

  The PAD  function  returns  a  character-string  value,  of  the
  specified  size,  that  contains  padded  fill  characters.  The
  return value is compatible with all other string types.

  Syntax:

     PAD( str,fill,size )

  The parameter 'str' is a character-string value  to  be  padded;
  the  parameter  fill  is  a value of type CHAR to be used as the
  fill character; and, the parameter 'size' is  an  integer  value
  indicating the size of the final string.

  This string is composed of the original string followed  by  the
  fill  character, which is repeated as many times as is necessary
  to extend the string to its specified size.  The final size must
  be  greater  than  or  equal  to  the length of the string to be
  padded.

3.16  –  READV

  The READV procedure reads  characters  from  a  character-string
  expression  and  assigns  them  to parameters in the READV call.
  The behavior of READV  is  analogous  to  that  of  READLN;  the
  character string is analogous to a one-line file.

  Syntax:

     READV( str, {variable-id[[ : radix-specifier ]]},...
     [[, ERROR := error-recovery ]])

  The  parameter  'str'  is  the   string   to   be   read.    The
  variable-identifier  is the variable to be assigned a value from
  'str'.  The parameter 'radix-specifier' can be BIN, OCT, or HEX.
  You  can  read a variable of any type by using a radix specifier
  except  a  type   that   contains   a   file   component.    The
  'error-recovery'  indicates the action to be taken in case of an
  error.

  An error occurs at run time if values have not been assigned  to
  all the parameters listed in the READV procedure call before the
  end of the character string is reached.

3.17  –  STATUSV

  The STATUSV function returns an integer value that specifies the
  status  of the last READV or WRITEV completed.  It does not have
  any parameters.

  Note that  if  you  have  an  asynchronous  trap  (AST)  routine
  condition  handler  written  in your program that uses READV and
  WRITEV, the call of STATUSV in your main program may not  return
  the  results  you  expected  if  an  AST  occurred  between  the
  READV/WRITEV and STATUS.

3.18  –  SUBSTR

  The SUBSTR function returns a substring (from a string specified
  as  a  parameter)  that  is  of the specified starting point and
  length.  The return value is compatible with  all  other  string
  types.

  Syntax:

     SUBSTR( str,start [,length] )

  The parameter 'str' is a character string value;  the  parameter
  'start' is an integer value that indicates the starting position
  of the substring.  The parameter 'length' is  an  integer  value
  that  indicates  the  length  of the substring.  If the 'length'
  argument is omitted, the length is computed to be the  remainder
  of  the  string  value  beginning at the starting position.  The
  'length' argument cannot be omitted on OpenVMS VAX systems.  For
  example,

     SUBSTR(string,start_index)

  is identical to

     SUBSTR(string,start_index,length(string)-string_index+1)

  When you use the SUBSTR function,  the  value  of  the  starting
  position must be greater than 0, the value of the length must be
  greater than or equal to 0, and there must be enough  characters
  following  the starting position to construct a substring of the
  specified length.

3.19  –  UDEC

  The UDEC function returns a character-string value that  is  the
  unsigned  decimal  equivalent  of  the specified parameter.  The
  return value is compatible with all other string types.

  Syntax:

     UDEC(x [[,length[[,digits]]]])

  The parameter 'x' is the expression to be converted.   The  UDEC
  function  can  take  a  parameter  of any type except VARYING OF
  CHAR, conformant parameters, or  schema  types.   This  function
  requires the size of 'x' to be less than or equal to the size of
  INTEGER64 (if supported) on your system.  If  your  system  does
  not  support INTEGER64, then the UDEC function requires that 'x'
  be less than or equal to the size of INTEGER32.

  Two optional  integer  parameters  specify  the  length  of  the
  resulting string and the minimum number of significant digits to
  be returned.  If you specify a length that is too short to  hold
  the  converted  value,  the resulting string is truncated on the
  left.

  If you do not specify values  for  the  optional  parameters,  a
  default  length  and  a  default  minimum  number of significant
  digits is used.  If the size of 'x'  is  greater  than  32,  the
  defaults  are 21 characters for the length and 20 characters for
  the minimum number of digits.  Otherwise, the  defaults  are  11
  characters  for  the  length  and  10 characters for the minimum
  number of digits.

3.20  –  WRITEV

  The WRITEV procedure writes  characters  to  a  character-string
  variable  of  type  VARYING  OF CHAR or discriminated STRING, by
  converting the values of the parameters in the procedure call to
  textual representations.  The behavior of WRITEV is analogous to
  that of the WRITELN function; the character-string parameter  is
  analogous to a one-line file.

  Syntax:

     WRITEV( str, parameter-list
     [[,ERROR := error-recovery]] )

  The parameter 'str' cannot appear within the parameter-list;  if
  you  attempt to do this, unexpected results may occur.  An error
  occurs if WRITEV reaches the maximum  length  of  the  character
  string  before the values of all the parameters in the procedure
  call  have  been  written  into  the  string.    The   parameter
  'error-recovery'  indicates  the  action to be taken if an error
  occurs while the WRITEV procedure is executing.

4  –  Dyn Alloc

  VSI Pascal provides dynamic allocation routines for the creation
  and use of pointer variables.  Use pointer variables and dynamic
  allocation routines to create linked data structures.

4.1  –  ADDRESS

  The ADDRESS function returns a pointer value that is the address
  of the parameter.

  Syntax:

     ADDRESS( x )

  The parameter 'x' can  be  a  variable  of  any  type  except  a
  component  of  a packed structured type.  A compile-time warning
  results if 'x' is a formal  VAR  parameter,  a  component  of  a
  formal  VAR  parameter,  or  a  variable  that does not have the
  READONLY or VOLATILE attribute.

  A pointer can only refer to a VOLATILE variable  or  a  variable
  allocated by the NEW procedure.

4.2  –  DISPOSE

  The DISPOSE procedure deallocates memory for a dynamic variable.

  Syntax:

     DISPOSE( p )

  The parameter 'p' is a pointer variable.  The 't' parameters are
  constant  expressions that match the corresponding 't' parameter
  used in the call to the NEW procedure that allocated the memory.
  If you use 't' parameters in a call to NEW, you must specify the
  same 't' parameters in the call to DISPOSE.   If  you  allocated
  memory  using d parameters, just specify the pointer variable to
  the corresponding DISPOSE call.

  The DISPOSE  procedure  deallocates  the  object  to  which  the
  pointer variable points.  You cannot call DISPOSE more than once
  for the same dynamic variable.

4.3  –  IADDRESS

  The IADDRESS function  returns  an  INTEGER_ADDRESS  value  that
  refers  to  a  the  address  of either a VOLATILE parameter or a
  routine, and does not generate compile-time  warnings  (as  does
  the  ADDRESS  function).  The IADDRESS function is commonly used
  for constructing arguments for system services  of  the  OpenVMS
  operating system.

  Syntax:

     IADDRESS( x )

  The parameter 'x' can be of any type except  a  component  of  a
  packed structured type or a routine name.  The parameter 'x' can
  be a variable, parameter, routine, or constant-expression.  When
  IADDRESS  is  used on constant-expressions, the returned address
  is valid for  the  remainder  of  the  program.   Two  calls  to
  IADDRESS with the same constant may not return the same address.

  Note that the VSI Pascal compiler automatically assumes that all
  pointers  refer either to dynamic variables allocated by the NEW
  procedure or to variables  that  have  the  VOLATILE  attribute;
  therefore, you should use utmost caution when using the IADDRESS
  function.   This  function  does   not   generate   compile-time
  warnings.

4.4  –  IADDRESS64

  The IADDRESS64 function is essentially identical to the IADDRESS
  function with the exception that IADDRESS64 returns an INTEGER64
  result.  This does not force the parameter  of  IADDRESS64  into
  64-bit  address  space  but  simply  returns  the address of the
  parameter as an INTEGER64 value.

  Syntax:

     IADDRESS64( x )

  The parameter 'x' can be of any type except  a  component  of  a
  packed structured type or a routine name.  The parameter 'x' can
  be a variable, parameter, routine, or constant-expression.  When
  IADDRESS  is  used on constant-expressions, the returned address
  is valid for  the  remainder  of  the  program.   Two  calls  to
  IADDRESS64  with  the  same  constant  may  not  return the same
  address.

  Note that the VSI Pascal compiler automatically assumes that all
  pointers  refer either to dynamic variables allocated by the NEW
  procedure or to variables  that  have  the  VOLATILE  attribute;
  therefore, you should use utmost caution when using the IADDRESS
  function.   This  function  does   not   generate   compile-time
  warnings.

4.5  –  NEW

  The NEW procedure allocates memory for the dynamic  variable  to
  which  a  pointer  variable  refers.   The  value  of  the newly
  allocated variable is set to the initial value of the base  type
  if defined; otherwise, the value of the variable is undefined.

  Syntax:

     NEW( p [[, {t1,...,tn | d1,...,dn} ]] )

  The parameter 'p' is a  32-bit  pointer  variable.   On  OpenVMS
  Alpha  and  OpenVMS  I64, the parameter 'p' may also be a 64-bit
  pointer variable.

  The  parameters  't1,...,tn'  are  constant  expressions  of  an
  ordinal  type that represent nested tag-field values, where 't1'
  is the outermost variant.

  If the object of the pointer is a non-schema  record  type  with
  variants,  then  you have two ways of allocating memory.  If you
  do not specify  't'  parameters,  VSI  Pascal  allocates  enough
  memory  to  hold  any  of the variants of the record.  If you do
  specify 't' parameters, then VSI Pascal allocates enough  memory
  to hold only the variant or variants that you specify.

  Since the 't' parameters cause VSI Pascal to allocate memory for
  the  variant  alone  and  not  for  the whole record, you cannot
  assign or evaluate the record as a whole;  you  can  assign  and
  evaluate  only  the individual fields.  Also, a call to NEW does
  not set the tag fields of a variant record.

  The paramters 'd1,...,dn' are compile-time or  run-time  ordinal
  values that must be the same type as the formal discriminants of
  the object.

  If the object of the pointer is  of  an  undiscriminated  schema
  type,  you  must  specify a 'd' parameter for each of the formal
  discriminants  of  the  schema   type.    The   'd'   parameters
  discriminate  the  schema  type  in  much the same way as actual
  discriminants in a discriminated schema.  HP  Pascal  bases  the
  size of the allocation on the value of the 'd' parameters.

  If the object is a schema record type, then  you  must  use  'd'
  parameters;  you  cannot  use 't' parameters or a combination of
  the syntaxes.  If the schema  record  type  contains  a  variant
  (which  depends on one of the formal discriminants) then the 'd'
  parameter discriminates the schema, determines the variant,  and
  allows   VSI  Pascal  to  compute  the  necessary  size  of  the
  allocation.

  Note that if you specify 't' parameters to  the  NEW  procedure,
  you  must  specify  the  same  't'  parameters  to  the  DISPOSE
  procedure  that  deallocates  memory   for   the   corresponding
  variable.

  If the parameter 'p' is  a  64-bit  pointer  variable,  the  NEW
  procedure  will  call LIB$GET_VM_64 to allocate memory from "P2"
  space.  Likewise, DISPOSE of a 64-bit  pointer  expression  will
  call LIB$FREE_VM_64 to return the memory.

5  –  Low Level

  The  low-level  routines  allow  for  parallel   processes   and
  asynchronous routines to operate in a real-time or multi-tasking
  environment.

5.1  –  ADD_ATOMIC

  The ADD_ATOMIC function adds the value of an expression  to  the
  value  of  a  variable,  stores  the  newly  computed value, and
  returns the previous value.

  Syntax:

    ADD_ATOMIC(e,v)

  The type of the expression 'e'  must  be  assignment  compatbile
  with  that  of  the  variable  'v'.  The variable 'v' must be an
  INTEGER, UNSIGNED, INTEGER64, or UNSIGNED64 variable and must be
  allocated  on  a  natural boundary (ie, longword for INTEGER and
  UNSIGNED and quadword for INTEGER64 and UNSIGNED64).  The result
  of ADD_ATOMIC is the same type as the variable 'v'.

  Overflow and  subrange  checking  are  never  performed  on  the
  ADD_ATOMIC  operation,  even  if these options are in effect for
  the rest of the function or compilation unit.

5.2  –  ADD_INTERLOCKED

  The ADD_INTERLOCKED function adds the value of an expression  to
  the  value of a variable, stores the newly computed value in the
  variable, and returns an integer value:  -1 if the new value  is
  negative, 0 if it is zero, and 1 if it is positive.

  Syntax:

     ADD_INTERLOCKED( e, v )

  The type of the expression 'e'  must  be  assignment  compatible
  with  that  of  the  variable  'v'.  The variable 'v' must be an
  integer or an unsigned subrange; 'v'  must  have  an  allocation
  size  of  two bytes and must be aligned on a word boundary.  The
  type of 'e' must be assignment compatible with that of 'v'.

5.3  –  AND_ATOMIC

  The  AND_ATOMIC  function  logically  ANDs  the  value   of   an
  expression to the value of a variable, stores the newly computed
  value, and returns the previous value.

  Syntax:

    AND_ATOMIC(e,v)

  The type of the expression 'e'  must  be  assignment  compatbile
  with  that  of  the  variable  'v'.   The  variable v must be an
  INTEGER, UNSIGNED, INTEGER64, or UNSIGNED64 variable and must be
  allocated  on  a  natural boundary (ie, longword for INTEGER and
  UNSIGNED and quadword for INTEGER64 and UNSIGNED64).  The result
  of AND_ATOMIC is the same type as the variable 'v'.

5.4  –  BARRIER

  The BARRIER procedure causes a memory barrier instruction to  be
  emitted   to   synchronize   pending   memory   updates   in   a
  multi-processor environment.

  Syntax:

    BARRIER

  The BARRIER procedure has no parameters.

5.5  –  CLEAR_INTERLOCKED

  The CLEAR_INTERLOCKED function assigns the value  FALSE  to  the
  parameter   and  returns  the  original  Boolean  value  of  the
  parameter.

  Syntax:

     CLEAR_INTERLOCKED( b )

  The variable 'b' must  be  a  variable  of  type  Boolean.   The
  variable  does  not  have  to be aligned; therefore, it can be a
  field of a packed record.

5.6  –  OR_ATOMIC

  The OR_ATOMIC function logically ORs the value of an  expression
  to the value of a variable, stores the newly computed value, and
  returns the previous value.

  Syntax:

    OR_ATOMIC(e,v)

  The type of the expression 'e'  must  be  assignment  compatbile
  with  that  of  the  variable  'v'.   The  variable v must be an
  INTEGER, UNSIGNED, INTEGER64, or UNSIGNED64 variable and must be
  allocated  on  a  natural boundary (ie, longword for INTEGER and
  UNSIGNED and quadword for INTEGER64 and UNSIGNED64).  The result
  of OR_ATOMIC is the same type as the variable 'v'.

5.7  –  SET_INTERLOCKED

  The SET_INTERLOCKED function  assigns  the  value  TRUE  to  the
  parameter and returns its original Boolean value.

  Syntax:

     SET_INTERLOCKED( b )

  The variable 'b' must  be  a  variable  of  type  Boolean.   The
  variable  does  not  have  to be aligned; therefore, it can be a
  field of a packed record.

6  –  Ordinal

  Ordinal routines provide information on the ordered sequence  of
  values.

6.1  –  LOWER

  This function returns the lower bound  for  ordinal  types,  SET
  base types, and array indexes.

  Syntax:

     LOWER( x [[, n]] )

  The parameter 'x'  is  a  type  identifier  or  variable  of  an
  ordinal,  SET,  or  ARRAY type.  The parameter 'n' is an integer
  constant that denotes a dimension of 'x', if 'x'  is  an  array.
  If  'x' is an array and if you omit the 'n', VSI Pascal uses the
  default value 1.  If 'x' is an array, LOWER  returns  the  lower
  bound  of  the nth dimension of 'x'.  If 'x' is an ordinal type,
  LOWER returns the lower bound or smallest value.  If  'x'  is  a
  SET, LOWER returns the lower bound of the SET base type.

6.2  –  PRED

  The PRED function returns  the  value  preceding  the  parameter
  according to the parameter's data type.

  Syntax:

     PRED( x )

  The parameter 'x' can be of any  ordinal  type;  however,  there
  must be a predecessor value for 'x' in the type.

6.3  –  SUCC

  The SUCC function returns the value that succeeds the  parameter
  according to the parameter's data type.

  Syntax:

     SUCC( x )

  The parameter 'x' can be of any  ordinal  type;  however,  there
  must be a successor value for 'x' in the type.

6.4  –  UPPER

  The UPPER function returns the upper bound  for  ordinal  types,
  SET base types, and array indexes.

  Syntax:

     UPPER( x [[, n]] )

  The parameter 'x'  is  a  type  identifier  or  variable  of  an
  ordinal,  SET,  or  ARRAY type.  The parameter 'n' is an integer
  constant that denotes a dimension of 'x', if 'x'  is  an  array.
  If  'x' is an array and if you omit the 'n', VSI Pascal uses the
  default value 1.  If 'x' is an array, UPPER  returns  the  upper
  bound  of  the nth dimension of 'x'.  If 'x' is an ordinal type,
  UPPER returns the upper bound or largest value.   If  'x'  is  a
  SET, UPPER returns the upper bound of the SET base type.

7  –  Null String

  VSI Pascal provides routines  for  manipulating  null-terminated
  strings.   These  routines use the predeclared type C_STR_T as a
  pointer to a null-terminated  character  string.   The  compiler
  assumes  that  buffers are large enough to hold their values and
  null-terminated  strings  are  actually  terminated  by  a  null
  character.

7.1  –  C_STR

  The C_STR function takes a compile-time  string  expression  and
  returns  a  C_STR_T  pointer  to  a static string literal with a
  terminating null character.

  Syntax:

     C_STR(e)

  The C_STR function can also accept a Pascal variable  of  either
  PACKED ARRAY OF CHAR, VARYING OF CHAR, or STRING.

  Syntax:

     C_STR(v)

  In this form, it will return a C_STR_T value that represents the
  first  character  in  the string variable.  It does not ensure a
  terminating  null  byte.   The  programmer   must   handle   the
  null-termination   to  treat  a  Pascal  string  variable  as  a
  null-terminated string.

7.2  –  MALLOC_C_STR

  The MALLOC_C_STR function  takes  a  Pascal  string  expression,
  calls the C routine malloc() to allocate memory, initializes the
  memory with the  string  expression,  and  then  terminates  the
  string with a null-charcter.

  Syntax:

     MALLOC_C_STR(e)

  The type of the expression e must be a Pascal string expression.
  The  function  result is a C_STR_T pointer to the null-terminted
  string.  The amount of memory allocated with malloc()  is  equal
  to  the  length  of  the string expression plus one.  The memory
  allocated with MALLOC_C_STR  must  be  deallocated  with  the  C
  free()  routine.  The compiler will not allow C_STR_T parameters
  with the NEW and DISPOSE routines.

7.3  –  PAS_STR

  The PAS_STR function  returns  a  Pascal  string  value  from  a
  C_STR_T value.

  Syntax:

     PAS_STR(e)

  The type of the expression e must be C_STR_T.  It is an error if
  the expression is NIL.

7.4  –  PAS_STRCPY

  The PAS_STRCPY function copies a Pascal string  expression  into
  memory pointed to by C_STR_T.

  Syntax:

     PAS_STRCPY(v, e)

  The type of the variable v must be C_STR_T.   The  type  of  the
  expression  e  must  be  a Pascal string expression.  The Pascal
  string is copied into the memory pointed to by the  variable  v.
  The  memory  is  then  terminated  with  a  null character.  The
  function returns a C_STR_T value  representing  the  destination
  (such as, the same value as contained by the variable v).

  The behavior of PAS_STRCPY is undefined if  the  length  of  the
  Pascal  string expression is greater than or equal to the amount
  of memory pointed to by the variable v.  It is an error  if  the
  variable v is NIL.

8  –  Parameter

  VSI  Pascal  provides  routines  that  give  information   about
  variable-length parameter lists.

8.1  –  ARGUMENT

  The ARGUMENT function specifies an argument in a variable-length
  parameter list that was created using the LIST attribute.

  Syntax:

     ARGUMENT( parameter-name, n )

  The 'parameter-name' argument specifies the name of a  parameter
  declared  with the LIST attribute.  The 'n' specifies a positive
  integer value that identifies the argument.  The first  argument
  in  a  list  is always 1.  An error occurs if the value supplied
  for 'n' is less than  1,  or  exceeds  the  ARGUMENT_LIST_LENGTH
  parameter (which indicates the total number of arguments).

  If the LIST parameter is a value parameter,  ARGUMENT  indicates
  the  corresponding  value  in  the  argument  list.  If the LIST
  parameter is a VAR parameter, ARGUMENT is  a  reference  to  the
  corresponding variable in the argument list.

8.2  –  ARGUMENT_LIST_LENGTH

  The  ARGUMENT_LIST_LENGTH  function  returns  an  integer  value
  representing  the  number  of  arguments  in  a  variable-length
  parameter list that was created using the LIST attribute.

  Syntax:

     ARGUMENT_LIST_LENGTH( parameter-name )

  The  'parameter-name'  argument  specifies  the  name   of   the
  parameter declared with the LIST attribute.

  When creating a variable-length parameter list,  you  can  place
  the  LIST attribute on only the last formal parameter.  When you
  call  the  routine,  you  can  specify  any  number  of   actual
  parameters,  or  arguments,  that  correspond to the last formal
  parameter declared with LIST.

8.3  –  PRESENT

  The PRESENT function returns  a  Boolean  value  that  indicates
  whether  the  actual  argument  list  of  a  routine contains an
  argument that corresponds to a formal parameter.   (The  PRESENT
  function  is usually used to supply a default value or to take a
  default action when the argument for a parameter is omitted.)

  Syntax:

     PRESENT (parameter-name)

  The 'parameter-name' parameter is the name of a formal parameter
  with  the  TRUNCATE attribute.  The 'parameter-name' must be the
  name of a formal parameter of the function from which PRESENT is
  called,  or  from  a  subroutine of that function.  The function
  result indicates whether the argument  list  of  the  containing
  routine   specifies  an  actual  argument  corresponding  to  an
  optional parameter.

  Parameters that do not have the TRUNCATE attribute and  also  do
  not follow a parameter with the TRUNCATE attribute in the formal
  parameter list, are allowed; in their case, the PRESENT function
  always returns TRUE.

  Default parameters are considered to be present in the  argument
  list, and the PRESENT function returns TRUE when passed the name
  of a parameter with a default value.

9  –  Transfer

  Transfer routines convert an actual parameter to data of another
  type.

9.1  –  CHR

  The CHR function returns a char value whose ordinal value in the
  ASCII  character set is the parameter, provided such a character
  exists.

  Syntax:

     CHR( x )

  The parameter 'x' must be integer or unsigned and have  a  value
  from 0 to 255.

9.2  –  DBLE

  The DBLE function converts the parameter and returns its  DOUBLE
  equivalent.

  Syntax:

     DBLE( x )

  The parameter 'x' must be of an arithmetic type.  The  value  of
  'x'   must   not   be   too   large   to  be  represented  by  a
  double-precision number.

9.3  –  INT64

  The INT64  function  converts  the  parameter  and  returns  its
  INTEGER64 equivalent.

  Syntax:

         INT64(x)

  Overflow can occur  and  is  detected  at  runtime  if  overflow
  checking is enabled and the value of 'x' is outside the range of
  INTEGER64.

9.4  –  INT

  The INT function converts the parameter and returns its  INTEGER
  equivalent.

  Syntax:

         INT(x)

  Overflow can occur  and  is  detected  at  runtime  if  overflow
  checking is enabled and the value of 'x' is outside the range of
  INTEGER.

9.5  –  ORD

  The ORD function returns an integer value that is  the  position
  of  the  parameter  in  the  ordered  sequence  of values of the
  parameter's type.

  Syntax:

     ORD( x )

  The parameter 'x' must be of an ordinal  type.   Note  that  the
  ordinal  value  of  an INTEGER object is the integer itself.  If
  'x' is of type UNSIGNED, its value  must  not  be  greater  than
  MAXINT.

9.6  –  PACK

  The PACK  procedure  copies  components  of  an  unpacked  array
  variable to a packed array variable.

  Syntax:

     PACK( a,i,z )

  The parameter 'a' is an unpacked array.  The parameter 'i' is  a
  value  to  indicate the starting value of the index of 'a'.  The
  parameter 'z' is a packed array of the same  component  type  as
  'a'.

  The number of components in parameter a must be greater than  or
  equal  to  the  number of components in 'z'.  The PACK procedure
  assigns the components of 'a', starting with a[i], to the  array
  'z',  starting  with z[lower bound], until all the components in
  'z' are filled.

  In general, when specifying 'i', keep in  mind  that  the  upper
  bound of a (that is, n) must be greater than or equal to i + v -
  u, where 'v' is the upper bound of 'z'  and  'u'  is  the  lower
  bound  of 'z'.  That is, ORD(n) must be greater than or equal to
  ORD(i) + ORD(v) - ORD(u).

9.7  –  QUAD

  The  QUAD  function  converts  the  parameter  and  returns  its
  QUADRUPLE equivalent.

  Syntax:

     QUAD( x )

  The parameter 'x' must be of an arithmetic type.

9.8  –  ROUND

  The ROUND function  converts  the  value  of  the  parameter  by
  rounding  the  fractional  part  of  the  value, and returns its
  integer equivalent.

  Syntax:

     ROUND( x )

  The parameter 'x' must be  of  type  REAL,  SINGLE,  DOUBLE,  or
  QUADRUPLE.   The  value  of  'x'  must  not  be  too large to be
  represented by an integer.

9.9  –  SNGL

  The SNGL function converts the parameter and  returns  its  real
  equivalent.

  Syntax:

     SNGL( x )

  The parameter 'x' must be of an arithmetic type.  The  value  of
  'x'   must   not   be   too   large   to  be  represented  by  a
  single-precision number.

9.10  –  TRUNC

  The TRUNC function  converts  the  value  of  the  parameter  by
  truncating  the  fractional  part  of  the value and returns its
  integer equivalent.

  Syntax:

     TRUNC( x )

  The parameter 'x' must be  of  type  REAL,  SINGLE,  DOUBLE,  or
  QUADRUPLE.   The  value  of  'x'  must  not  be  too large to be
  represented by an integer.

9.11  –  UINT

  The UINT function  converts  the  value  of  the  parameter  and
  returns its unsigned equivalent.

  Syntax:

     UINT( x )

  The parameter 'x' must be of an ordinal type.

  No error results if 'x' is an integer and has a negative  value.
  The value returned is x MOD 2**32.

9.12  –  UINT64

  The UINT64 function converts the  value  of  the  parameter  and
  return its UNSIGNED64 equivalent.

  Syntax:

     UINT64(x)

  The parameter 'x' must be of an ordinal type.

  No error results if 'x' is an integer and has a negative  value.
  The value returned is x MOD 2**64.

9.13  –  UNPACK

  The UNPACK procedure copies components of a packed array  to  an
  unpacked array variable.

  Syntax:

     UNPACK( z,a,i )

  The parameter 'z' is a packed array.  The parameter  'a'  is  an
  unpacked  array  variable.   The  parameter  'i' is the starting
  value of the index of 'a'.

  The number of components in 'a' must be greater than or equal to
  the  number  of components in 'z'.  The UNPACK procedure assigns
  the components of 'z', starting  with  z[lower  bound],  to  the
  array  'a',  starting with a[i], until all the components in 'z'
  are used.

  In general, when specifying 'i', keep in  mind  that  the  upper
  bound of 'a' (that is, n) must be greater than or equal to i + v
  - u, where 'v' is the upper bound of 'a' and 'u'  is  the  lower
  bound  of 'a'.  That is, ORD(n) must be greater than or equal to
  ORD(i) + ORD(v) - ORD(u).

  Normally, you cannot pass the individual components of a  packed
  array to formal VAR parameters; you must unpack the array first.

9.14  –  UROUND

  The UROUND function converts the  value  of  the  parameter  and
  returns  its unsigned equivalent by rounding the fractional part
  of the value.

  Syntax:

     UROUND( x )

  The parameter 'x' must be  of  type  REAL,  SINGLE,  DOUBLE,  or
  QUADRUPLE.

  No error results if the value of 'x' is negative or greater than
  4,294,967,295.  In that case, the unsigned result is the rounded
  parameter value MOD 4,294,967,296.

9.15  –  UTRUNC

  The UTRUNC function  converts  the  parameter  and  returns  its
  unsigned  equivalent  by  truncating  the fractional part of the
  value.

  Syntax:

     UTRUNC( x )

  The parameter 'x' must be  of  type  REAL,  SINGLE,  DOUBLE,  or
  QUADRUPLE.

  No error results if the value of 'x' is negative or greater than
  4,294,967,295.   In  that  case,  the  unsigned  result  is  the
  truncated parameter value MOD 4,294,967,296.

10  –  Privileged

  Privileged routines manipulate privileged hardware registers.

10.1  –  MFPR

  The MFPR function returns an unsigned value that is the value of
  a VAX internal processor register.

  Syntax:

     MFPR( ipr_register_expression )

  The  'ipr_register_expression'  parameter   is   an   expression
  compatible with the UNSIGNED type.

  The HP Pascal compiler generates user-mode code.  HP Pascal does
  not  explicitly support the running of VSI Pascal generated code
  in kernel mode.  However, if the following rules  are  observed,
  then the generated code has a good chance of working as expected
  in elevated access modes:

   o  All code must be compiled with  the  /NOCHECK  qualifier  or
      [CHECK(NONE)]  attribute.   The  HP  Pascal  on  OpenVMS VAX
      run-time signaling method relies on trying  to  execute  the
      HALT  instruction.   In  user-mode, this causes an exception
      that is a signal to the  HP  Pascal  run-time  library.   In
      kernel-mode  on an OpenVMS VAX system, this simply HALTs the
      machine.

   o  Avoid  all  routine  calls  which  translate  into  Run-Time
      Library  calls.   These  include  all  I/O routines, several
      arithmetic routines, several string routines, etc.

10.2  –  MTPR

  The MTPR procedure assigns a value into a VAX internal processor
  register.

  Syntax:

     MTPR( ipr_register_expression, source_expression );

  The 'ipr_register_expression' and 'source_expression' parameters
  are  expressions  compatible  with the unsigned type.  HP Pascal
  stores the  value  specified  by  'source-expression'  into  the
  internal       processor       register       specified       by
  'ipr-register-expression'.

  The HP Pascal compiler generates user-mode code.  HP Pascal does
  not  explicitly  support the running of HP Pascal generated code
  in kernel mode.  However, if the following rules  are  observed,
  then the generated code has a good chance of working as expected
  in elevated access modes:

   o  All code must be compiled with  the  /NOCHECK  qualifier  or
      [CHECK(NONE)]  attribute.   The  HP  Pascal  for OpenVMS VAX
      systems  run-time  signaling  method  relies  on  trying  to
      execute  the HALT instruction.  In user-mode, this causes an
      exception which is  a  signal  to  the  HP  Pascal  run-time
      library.   In  kernel-mode  on  an  OpenVMS VAX system, this
      simply HALTs the machine.

   o  Avoid  all  routine  calls  which  translate  into  Run-Time
      Library  calls.   These  include  all  I/O routines, several
      arithmetic routines, several string routines, etc.

11  –  Misc

  The miscellaneous routines include routines that  determine  the
  amount  of  time a process uses, routines that record the system
  date and  time,  routines  that  control  error  handling  of  a
  program, and routines that perform miscellaneous calculations.

11.1  –  ASSERT

  The ASSERT procedure signals a run-time error if  the  value  of
  its parameter is FALSE.

  Syntax:

     ASSERT(expression [[, string]])

  The 'expression' is a Boolean expression that is normally  true.
  If  ASSERT  evaluates  the  expression  as  false,  it signals a
  run-time error, indicating that the assertion failed.

  The optional string parameter is output as  part  of  the  error
  message.

11.2  –  CARD

  The CARD function returns an integer value indicating the number
  of components that are currently elements of the set expression.

  Syntax:

     CARD( s )

  The parameter 's' must be a set expression.

11.3  –  CLOCK

  The CLOCK function  returns  an  integer  value  indicating  the
  amount  of  central processor time, in milliseconds, used by the
  current process.  This function does not have a parameter  list.
  The  result  of  CLOCK  includes the amount of central processor
  time allocated to all previously executed images.

11.4  –  CREATE_DIRECTORY

  The  CREATE_DIRECTORY  procedure  creates  a  new  directory  or
  subdirectory.

  Syntax:

     CREATE_DIRECTORY( file_name [, error_return] )

  The  'file_name'  parameter  must  be  a  directory   name   and
  optionally  can  contain  a  device  name.   The  'error_return'
  parameter is optional, and will return an error recovery code if
  specified.

11.5  –  STANDARD_DATE_AND_TIME

  These  functions  provide  a  standard  way   of   returning   a
  character-string  value  that  indicates  the  calender date and
  time.  The return value is compatible with all string types.

  Syntax:

     DATE( t )

     TIME( t )

  The  parameter  't'  is  a  variable  of  the  predeclared  type
  TIMESTAMP.   You  can  either call the GETTIMESTAMP procedure to
  initialize 't' before you pass 't' to either DATE  or  TIME,  or
  you can construct your own TIMESTAMP object.

  The size of the function's return value depends  on  the  string
  length  that is normally returned by your system for either date
  or time data.

  Example:

  VAR
      Time_Var : TIMESTAMP;
      The_Time, The_Date : STRING(23);

  {In the executable section:}
  GETTIMESTAMP( Time_Var );
  The_Date := DATE( Time_Var );
  The_Time := TIME( Time_Var );
  WRITELN( The_Date, The_Time );  {Writes: 1-FEB-1989
                                           14:20:25.98 }

11.6  –  NONSTANDARD_DATE_AND_TIME

  These  procedures  write  the  date  and  the  time   to   their
  parameters.   These  procedures  are  VSI Pascal extensions, and
  have the forms:

     DATE( str )

     TIME( str )

  The parameter 'str' must be of type PACKED ARRAY[1..11] OF CHAR.
  After  execution of the procedure, the 'str' contains either the
  date or the time.  If the day of the month is a 1-digit  number,
  the leading zero does not appear in the result; that is, a space
  appears before the date string.  The time is returned in 24-hour
  format.

11.7  –  DELETE_FILE

  The DELETE_FILE procedure deletes one or more files.

  Syntax:

     DELETE_FILE( file_name [, error_return] )

  The 'file-name' specification can contain an explicit device and
  directory name, plus it must contain a file name, a file type or
  extension, and  a  version  number.   If  you  omit  either  the
  directory  or device name, VSI Pascal uses the directory you are
  working in at the time of program execution.  The 'error_return'
  parameter returns an error recovery code if specified.

11.8  –  ESTABLISH

  The ESTABLISH  procedure  specifies  a  condition  handler  that
  executes if your program generates operating-system events.

  Syntax:

     ESTABLISH( function-identifier )

  The 'function-identifier'  parameter  must  be  the  name  of  a
  function  that  has  the  ASYNCHRONOUS  attribute.  The function
  passed to ESTABLISH must have two formal array parameters.

11.9  –  EXPO

  The  EXPO  function  returns  the  integer   exponent   of   the
  floating-point representation of its parameter.

  Syntax:

     EXPO( x )

  The parameter 'x' can be of any real type.

11.10  –  FIND_FIRST_BIT_CLEAR

  The FIND_FIRST_BIT_CLEAR function locates the  first  bit  in  a
  Boolean array whose value is 0 and returns an integer value that
  specifies the index into the array.

  Syntax:

     FIND_FIRST_BIT_CLEAR( vector [[, start_index]] )

  The 'vector' parameter is a variable of  type  PACKED  ARRAY  OF
  BOOLEAN  with an INTEGER index type.  The optional 'start-index'
  parameter must be an INTEGER expression that indexes the element
  at  the  point at which the search starts.  The 'starting index'
  must be greater than or equal to the vector's lower  bound,  and
  less  than  or  equal  to  1  plus  the  vector's  upper  bound;
  otherwise, a range violation occurs.  If omitted,  the  starting
  index defaults to the vector's first element.

  The FIND_FIRST_BIT_CLEAR function returns a value  indexing  the
  first  element  containing  the  value  0.   If no bit is 0, the
  result is 1 plus the vector's upper bound.  If the vector or the
  indexed  part  of  the  vector  has  a  size of 0, the result is
  start-index.

11.11  –  FIND_FIRST_BIT_SET

  The FIND_FIRST_BIT_SET function  locates  the  first  bit  in  a
  Boolean array whose value is 1 and returns an integer value that
  specifies the index into the array.

  Syntax:

     FIND_FIRST_BIT_SET( vector [[, start_index]] )

  The 'vector' parameter is a variable of  type  PACKED  ARRAY  OF
  BOOLEAN  with an INTEGER index type.  The optional 'start-index'
  parameter must be an expression of an integer type that  indexes
  the  element  at  the  point  at  which  the search starts.  The
  'starting index' must be greater than or equal to  the  vector's
  lower bound, and less than or equal to 1 plus the vector's upper
  bound; otherwise, a range violation  occurs.   If  omitted,  the
  starting index defaults to the vector's first element.

  The  FIND_FIRST_BIT_SET  function  returns  an   integer   value
  indexing the first element containing the value 1.  If no bit is
  1, the result is 1 plus the vector's upper bound.  If the vector
  or the indexed part of the vector has a size of 0, the result is
  start-index.

11.12  –  GETTIMESTAMP

  The GETTIMESTAMP procedure initializes  its  parameter  for  use
  with the DATE and TIME functions.

  Syntax:

     GETTIMESTAMP( t [[, str]] )

  The parameter 't' is a variable of the TIMESTAMP type, which  is
  a  predeclared  record  type.   The  TIMESTAMP  data  type is as
  follows:

  TIMESTAMP = PACKED RECORD
     Datevalid, Timevalid   : BOOLEAN;
     Year                   : INTEGER;
     Month                  : 1..12;
     Day                    : 1..31;
     Hour                   : 0..23;
     Minute                 : 0..59;
     Second                 : 0..59;
     Hundredth              : 0..99;
        {64-bit OpenVMS binary time:}
     BINARY_TIME            : [QUAD] RECORD L1,L2 : INTEGER END;
     DAY_OF_WEEK            : 1..7; {1 is Monday, 7 is Sunday}
     END;

  The parameter 'str' is a string type that represents a  date  or
  both  a  date  and  time.   The  following  rules  apply  to the
  specification of the 'str' parameter:

   o  If you do not specify the 'str', the GETTIMESTAMP  procedure
      initializes  the  variable  to  be  the  date  and  time  at
      execution of your program.

   o  If you specify an invalid date, the  GETTIMESTAMP  procedure
      sets  the date to be January 1, 1; if you specify an invalid
      time, it sets the time to be midnight.

11.13  –  HALT

  The HALT procedure  uses  operating  system  resources  to  stop
  execution  of  your  program unless you have written a condition
  handler (using the ESTABLISH procedure) that  enables  continued
  execution.

11.14  –  IN_RANGE

  The IN_RANGE function determines  whether  a  value  is  in  the
  defined subrange.

  Syntax:

     IN_RANGE(expression,lower-expression,upper-expression)

  This function returns TRUE if the contents of the variable is in
  the range specified by the lower-expression and upper-expression
  values.

11.15  –  ODD

  The ODD function returns a Boolean value that indicates  if  the
  parameter is odd.

  Syntax:

     ODD( x )

  The parameter 'x' must be of  type  INTEGER  or  UNSIGNED.   The
  function  returns  TRUE  if the value of 'x' is odd and FALSE if
  the value of 'x' is even.

11.16  –  RANDOM

  The RANDOM function returns a randomly computed  real  value  in
  the range [0.0,1.0).

  RANDOM[[(expression)]]

  If present, the optional integer parameter is ignored.

11.17  –  RENAME_FILE

  The RENAME_FILE procedure renames a file.

  Syntax:

     RENAME_FILE( old-file-name, new-file-name [, error-return] )

  The parameter 'old-file-name' specifies the names of one or more
  files  whose  specifications  are  to be changed.  The parameter
  'new-file-name'  provides  the  new  file  specification  to  be
  applied.    The   'error-return'  parameter  contains  an  error
  recovery code if specified.

11.18  –  REVERT

  The REVERT procedure cancels a condition  handler  activated  by
  the  ESTABLISH  procedure.   This  procedure  does  not  have  a
  parameter list.

11.19  –  SEED

  The SEED function has a single integer parameter that  sets  the
  random  number  generator  seed  for  the  RANDOM function.  The
  function returns an integer that represents  the  previous  seed
  value.

  SEED(expression)

  The parameter is of type integer.

11.20  –  SYSCLOCK

 The SYSCLOCK function returns an integer value for the number  of
 milliseconds  of  system  time  used  by the current process.  On
 OpenVMS systems, the result is the same as that returned  by  the
 CLOCK function.

 Syntax:

    SYSCLOCK

11.21  –  UNDEFINED

  The UNDEFINED function returns a Boolean  value  that  specifies
  whether the parameter contains a reserved operand.

  Syntax:

     UNDEFINED( x )

  The parameter 'x' must be  a  variable  of  type  REAL,  SINGLE,
  DOUBLE, or QUADRUPLE.  The function returns TRUE if 'x' contains
  a value  that  has  been  reserved  by  the  system  or  machine
  architecture.   If  'x'  does  not contain a reserved value, the
  function returns FALSE.  If 'x' contains a reserved operand  and
  if  you  attempt to use 'x' in arithmetic computations, an error
  occurs.

11.22  –  WALLCLOCK

  On OpenVMS systems, the WALLCLOCK function  returns  an  integer
  value representing the number of seconds since the boot time for
  the system.

  Syntax:

     WALLCLOCK

11.23  –  ZERO

  The ZERO function  returns  data,  whose  type  depends  on  the
  context  of  the function call, that sets any variable (except a
  file variable) to its binary zero.

  If you attempt to use the ZERO function  to  initialize  a  file
  variable, an error occurs.  Do not specify a parameter list when
  you call the ZERO function.
Close Help