Table E-12 RPG II Implementations
  
    | OpenVMS Data Type  | 
    RPG II Declarations  | 
  
  
    | 
      access_bit_names
     | 
    
      na
     | 
  
  
    | 
      access_mode
     | 
    
      Declare as text string of 1 byte. When using this data structure, you
      must interpret the ASCII contents of the string to determine
      access_mode.
     | 
  
  
    | 
      address
     | 
    
      L
      1
     | 
  
  
    | 
      address_range
     | 
    
      Q
      1
     | 
  
  
    | 
      arg_list
     | 
    
      na
     | 
  
  
    | 
      ast_procedure
     | 
    
      L
      1
     | 
  
  
    | 
      boolean
     | 
    
      na
     | 
  
  
    | 
      byte_signed
     | 
    
      Declare as text string of 1 byte. When using this data structure, you
      must interpret the ASCII contents of the string.
     | 
  
  
    | 
      byte_unsigned
     | 
    
      Same as for
      byte_signed.
      1
     | 
  
  
    | 
      channel
     | 
    
      W
      1
     | 
  
  
    | 
      char_string
     | 
    
      TEXT STRING
     | 
  
  
    | 
      complex_number
     | 
    
      DATA STRUCTURE
     | 
  
  
    | 
      cond_value
     | 
    
      cond_value GIVNG OPCODE
     | 
  
  
    | 
      context
     | 
    
      L
      1
     | 
  
  
    | 
      date_time
     | 
    
      Q
      1
     | 
  
  
    | 
      device_name
     | 
    
      TEXT STRING
     | 
  
  
    | 
      ef_cluster_name
     | 
    
      TEXT STRING
     | 
  
  
    | 
      ef_number
     | 
    
      L
      1
     | 
  
  
    | 
      exit_handler_block
     | 
    
      DATA STRUCTURE
     | 
  
  
    | 
      fab
     | 
    
      Implicitly generated by the compiler on your behalf. You cannot access
      the fab data structure from an RPG II program.
     | 
  
  
    | 
      file_protection
     | 
    
      W
      1
     | 
  
  
    | 
      floating_point
     | 
    
      F
        D
     | 
  
  
    | 
      function_code
     | 
    
      F
     | 
  
  
    | 
      identifier
     | 
    
      L
      1
     | 
  
  
    | 
      io_status_block
     | 
    
      Q
     | 
  
  
    | 
      item_list_pair
     | 
    
      DATA STRUCTURE
     | 
  
  
    | 
      item_list_2
     | 
    
      DATA STRUCTURE
     | 
  
  
    | 
      item_list_3
     | 
    
      DATA STRUCTURE
     | 
  
  
    | 
      item_quota_list
     | 
    
      na
     | 
  
  
    | 
      lock_id
     | 
    
      L
      1
     | 
  
  
    | 
      lock_status_block
     | 
    
      DATA STRUCTURE
     | 
  
  
    | 
      lock_value_block
     | 
    
      DATA STRUCTURE
     | 
  
  
    | 
      logical_name
     | 
    
      TEXT STRING
     | 
  
  
    | 
      longword_signed
     | 
    
      L
     | 
  
  
    | 
      longword_unsigned
     | 
    
      L
      1
     | 
  
  
    | 
      mask_byte
     | 
    
      Same as for byte_signed
      1
     | 
  
  
    | 
      mask_longword
     | 
    
      L
      1
     | 
  
  
    | 
      mask_quadword
     | 
    
      Q
      1
     | 
  
  
    | 
      mask_word
     | 
    
      W
      1
     | 
  
  
    | 
      null_arg
     | 
    
      na
     | 
  
  
    | 
      octaword_signed
     | 
    
      DATA STRUCTURE
     | 
  
  
    | 
      octaword_unsigned
     | 
    
      DATA STRUCTURE
     | 
  
  
    | 
      page_protection
     | 
    
      L
      1
     | 
  
  
    | 
      procedure
     | 
    
      L
      1
     | 
  
  
    | 
      process_id
     | 
    
      L
      1
     | 
  
  
    | 
      process_name
     | 
    
      TEXT STRING
     | 
  
  
    | 
      quadword_signed
     | 
    
      Q
     | 
  
  
    | 
      quadword_unsigned
     | 
    
      Q
      1
     | 
  
  
    | 
      rights_holder
     | 
    
      Q
      1
     | 
  
  
    | 
      rights_id
     | 
    
      L
      1
     | 
  
  
    | 
      rab
     | 
    
      Implicitly generated by the compiler on your behalf. You cannot access
      the rab data structure from an RPG II program.
     | 
  
  
    | 
      section_id
     | 
    
      Q
      1
     | 
  
  
    | 
      section_name
     | 
    
      TEXT STRING
     | 
  
  
    | 
      system_access_id
     | 
    
      Q
      1
     | 
  
  
    | 
      time_name
     | 
    
      TEXT STRING
     | 
  
  
    | 
      transaction_id
     | 
    
      DATA STRUCTURE
     | 
  
  
    | 
      uic
     | 
    
      L
      1
     | 
  
  
    | 
      user_arg
     | 
    
      L
      1
     | 
  
  
    | 
      varying_arg
     | 
    
      Depends on the application.
     | 
  
  
    | 
      vector_byte_signed
     | 
    
      ARRAY OF TEXT STRING
     | 
  
  
    | 
      vector_byte_unsigned
     | 
    
      ARRAY OF TEXT STRING
      1
     | 
  
  
    | 
      vector_longword_signed
     | 
    
      ARRAY OF LONGWORD INTEGER (SIGNED) L
     | 
  
  
    | 
      vector_longword_unsigned
     | 
    
      RAY OF LONGWORD INTEGER L
      1
     | 
  
  
    | 
      vector_quadword_signed
     | 
    
      na
     | 
  
  
    | 
      vector_quadword_unsigned
     | 
    
      na
     | 
  
  
    | 
      vector_word_signed
     | 
    
      ARRAY OF WORD INTEGER (SIGNED) W
     | 
  
  
    | 
      vector_word_unsigned
     | 
    
      ARRAY OF WORD INTEGER W
      1
     | 
  
  
    | 
      word_signed
     | 
    
      W
     | 
  
  
    | 
      word_unsigned
     | 
    
      W
      1
     | 
  
  Table E-13 SCAN Implementations
  
    | OpenVMS Data Type  | 
    SCAN Declarations  | 
  
  
    | 
      access_bit_name
     | 
    
      FILL(8*32)
      1
     | 
  
  
    | 
      access_mode
     | 
    
      FILL(1)
      1
     | 
  
  
    | 
      address
     | 
    
      POINTER
     | 
  
  
    | 
      address_range
     | 
    
      RECORD
       start: POINTER,
       end: POINTER,
       
                 END RECORD
     | 
  
  
    | 
      arg_list
     | 
    
      RECORD
       count: INTEGER,
       arg1: POINTER, ! if by reference
       arg2: INTEGER, ! if by value
       ... ! depending on needs
       
                 END RECORD
     | 
  
  
    | 
      ast_procedure
     | 
    
      POINTER
     | 
  
  
    | 
      boolean
     | 
    
      BOOLEAN
      2
     | 
  
  
    | 
      byte_signed
     | 
    
      FILL(1)
      1
     | 
  
  
    | 
      byte_unsigned
     | 
    
      FILL(1)
      1
     | 
  
  
    | 
      channel
     | 
    
      FILL(2)
      1
     | 
  
  
    | 
      char_string
     | 
    
      FIXED STRING(
      x), where
      x is the length.
     | 
  
  
    | 
      complex_number
     | 
    
      FILL(
      x), where
      x is the length.
      1
     | 
  
  
    | 
      cond_value
     | 
    
      INTEGER
     | 
  
  
    | 
      context
     | 
    
      INTEGER
     | 
  
  
    | 
      date_time
     | 
    
      FILL(8)
      1
     | 
  
  
    | 
      device_name
     | 
    
      FIXED STRING(
      x), where
      x is the length.
     | 
  
  
    | 
      ef_cluster_name
     | 
    
      FIXED STRING(
      x), where
      x is the length.
     | 
  
  
    | 
      ef_number
     | 
    
      INTEGER
     | 
  
  
    | 
      exit_handler_block
     | 
    
      FILL(
      x), where
      x is the length.
      1
     | 
  
  
    | 
      fab
     | 
    
      A FAB data type is too large a structure to include in this table (see
      the OpenVMS Record Management Services  Reference Manual); most of the fields can be described with a SCAN
      record. However, fab data structures are simpler to use with less
      coding errors when accessed from other languages that have the record
      predefined.
     | 
  
  
    | 
      file_protection
     | 
    
      FILL(2)
      1
     | 
  
  
    | 
      floating_point
     | 
    
      FILL(
      x), where
      x is the length.
      1
     | 
  
  
    | 
      function_code
     | 
    
      INTEGER
     | 
  
  
    | 
      identifier
     | 
    
      POINTER
     | 
  
  
    | 
      io_status_block
     | 
    
      FILL(8)
      1
     | 
  
  
    | 
      item_list_2
     | 
    
      RECORD
       item1: FILL(8),
       item2: FILL(8),
       ...
       terminator: INTEGER,
       
                 END RECORD
      1
     | 
  
  
    | 
      item_list_3
     | 
    
      RECORD
       item1: FILL(12),
       item2: FILL(12),
       ...
       terminator: INTEGER,
       
                 END RECORD
      1
     | 
  
  
    | 
      item_list_pair
     | 
    
      RECORD
       pair_1: RECORD ! 2 integer pair
       long1: INTEGER,
       long2: INTEGER,
       END RECORD,
       
                pair_2: RECORD ! integer-real pair
       long1: INTEGER,
       long2: FILL(4),
       END RECORD,
       
                ... ! depending on need
       terminator: INTEGER,
       
                 END RECORD
     | 
  
  
    | 
      item_quota_list
     | 
    
      RECORD
       item1: RECORD
       type: FILL(1),
       value: INTEGER,
       
                END RECORD
       item2: RECORD
       type: FILL(1),
       value: INTEGER,
       
                END RECORD,
       ...
       terminator: FILL(1),
       
                 END RECORD
      1
     | 
  
  
    | 
      lock_id
     | 
    
      INTEGER
     | 
  
  
    | 
      lock_status_block
     | 
    
      RECORD
       status: FILL(2),
       reserved: FILL(2),
       ock_id: INTEGER,
       
                 END RECORD
      1
     | 
  
  
    | 
      lock_value_block
     | 
    
      FILL(16)
      1
     | 
  
  
    | 
      logical_name
     | 
    
      FIXED STRING(
      x), where
      x is the length.
     | 
  
  
    | 
      longword_signed
     | 
    
      INTEGER
     | 
  
  
    | 
      longword_unsigned
     | 
    
      INTEGER
     | 
  
  
    | 
      mask_byte
     | 
    
      FILL(1)
      1
     | 
  
  
    | 
      mask_longword
     | 
    
      INTEGER
     | 
  
  
    | 
      mask_quadword
     | 
    
      RECORD
       first_half: INTEGER,
       second_half: INTEGER,
       
                 END RECORD
     | 
  
  
    | 
      mask_word
     | 
    
      FILL(2)
      1
     | 
  
  
    | 
      null_arg
     | 
    
      Use asterisk (*) for argument.
     | 
  
  
    | 
      octaword_signed
     | 
    
      FILL(16)
      1
     | 
  
  
    | 
      octaword_unsigned
     | 
    
      FILL(16)
      1
     | 
  
  
    | 
      page_protection
     | 
    
      INTEGER
     | 
  
  
    | 
      procedure
     | 
    
      POINTER
     | 
  
  
    | 
      process_id
     | 
    
      INTEGER
     | 
  
  
    | 
      process_name
     | 
    
      FIXED STRING(
      x), where
      x is the length.
     | 
  
  
    | 
      quadword_signed
     | 
    
      FILL(8)
      1
     | 
  
  
    | 
      quadword_unsigned
     | 
    
      FILL(8)
      1
     | 
  
  
    | 
      rights_holder
     | 
    
      RECORD
       rights_id: INTEGER,
       bitmask: INTEGER,
       
                 END RECORD
     | 
  
  
    | 
      rights_id
     | 
    
      INTEGER
     | 
  
  
    | 
      rab
     | 
    
      A rab data type is too large a structure to include in this table (see
      the OpenVMS Record Management Services  Reference Manual); most of the fields can be described with a SCAN
      record. However, RAB data structures are simpler to use with less
      coding errors when accessed from other languages that have the record
      predefined.
     | 
  
  
    | 
      second_name
     | 
    
      FILL(8)
      1
     | 
  
  
    | 
      section_name
     | 
    
      FIXED STRING(
      x), where
      x is the length.
     | 
  
  
    | 
      system_access_id
     | 
    
      FILL(8)
      1
     | 
  
  
    | 
      time_name
     | 
    
      FIXED STRING(
      x), where
      x is the length.
     | 
  
  
    | 
      transaction_id
     | 
    
      FILL(16)
      1
     | 
  
  
    | 
      uic
     | 
    
      INTEGER
     | 
  
  
    | 
      user_arg
     | 
    
      INTEGER
     | 
  
  
    | 
      varying_arg
     | 
    
      INTEGER
     | 
  
  
    | 
      vector_byte_signed
     | 
    
      FILL(
      x), where
      x is the length.
      1
     | 
  
  
    | 
      vector_byte_unsigned
     | 
    
      FILL(
      x), where
      x is the length.
      1
     | 
  
  
    | 
      vector_longword_signed
     | 
    
      FILL(4*
      x), where
      x is the length.
      1
     | 
  
  
    | 
      vector_longword_unsigned
     | 
    
      FILL(4*
      x), where
      x is the length.
      1
     | 
  
  
    | 
      vector_quadword_signed
     | 
    
      FILL(8*
      x), where
      x is the length.
      1
     | 
  
  
    | 
      vector_quadword_unsigned
     | 
    
      FILL(8*
      x), where
      x is the length.
      1
     | 
  
  
    | 
      vector_word_signed
     | 
    
      FILL(2*
      x), where
      x is the length.
      1
     | 
  
  
    | 
      vector_word_unsigned
     | 
    
      FILL(2*
      x), where
      x is the length.
      1
     | 
  
  
    | 
      word_signed
     | 
    
      FILL(2)
      1
     | 
  
  
    | 
      word_unsigned
     | 
    
      FILL(2)
      1
     |