
  { This type declaration describes the DFT control block.  The description for this type declaration is
  { taken from the document 'DFT/OS Interface Specification' ARH6853. All the constants and type declarations
  { that describe the DFT block have the prefix 'DFTB' which is the abbreviation for 'DFT BLOCK'.

  CONST
    dsc$dftb_cw_zero_counters_bit = 58,

    { The following constants describe the element as defined by the EID register.

    dsc$dftb_eid_cpu0_element = 0,
    dsc$dftb_eid_cpu1_element = 10(16),
    dsc$dftb_eid_cpu2_element = 20(16),
    dsc$dftb_eid_cpu3_element = 30(16),
    dsc$dftb_eid_cpu4_element = 40(16),
    dsc$dftb_eid_cpu5_element = 50(16),
    dsc$dftb_eid_cpu6_element = 60(16),
    dsc$dftb_eid_cpu7_element = 70(16),
    dsc$dftb_eid_memory_element = 1,
    dsc$dftb_eid_iou0_element = 2,
    dsc$dftb_eid_iou1_element = 12(16),
    dsc$dftb_eid_iou2_element = 22(16),
    dsc$dftb_eid_iou3_element = 32(16),
    dsc$dftb_eid_page_map_element = 3,
    dsc$dftb_eid_no_known_element = 4,

    dsc$dftb_interlock_bit = 45,
    dsc$dftb_mec_non_s0_counters = 12(8),
    dsc$dftb_mec_s0_counters = 14(8),
    dsc$dftb_mr_group_size = 5,
    dsc$dftb_mr_number_of_registers = 4,

    dsc$dftb_mrb_iou_error = 0,
    dsc$dftb_mrb_memory_error = 1,
    dsc$dftb_mrb_cpu_error = 2,
    dsc$dftb_mrb_page_map_error = 3,
    dsc$dftb_mrb_bad_requests = 4,
    dsc$dftb_mrb_packet_error = 5,
    dsc$dftb_mrb_software_error = 6,
    dsc$dftb_mrb_non = 7,
    dsc$dftb_mrb_multiple_iou_error = 8,
    dsc$dftb_mrb_multiple_mem_error = 9,
    dsc$dftb_mrb_multiple_cpu_error = 0A(16),
    dsc$dftb_mrb_multiple_map_error = 0B(16),
    dsc$dftb_mrb_multiple_requests = 0C(16),
    dsc$dftb_mrb_multiple_packet = 0D(16),
    dsc$dftb_mrb_multiple_software = 0E(16),
    dsc$dftb_mrb_multiple_non = 0F(16),

    { This next constant is added to the dft_analysis_code by DFT when DFT notices multiple occurrences of an
    { error but only records one of the error occurrences.

    dsc$dftb_multiple_errors = 800(16),

    dsc$dftb_nrb_ih_fsc = 1,
    dsc$dftb_nrb_ih_register_data = 2,
    dsc$dftb_nrb_ih_page_flaw_dist = 3,
    dsc$dftb_nrb_ih_flaw_page_num = 4,
    dsc$dftb_nrb_ih_post_oper_msg = 5,

    dsc$dftb_pri_retry_in_progress = 0,
    dsc$dftb_pri_top_of_hour = 1,
    dsc$dftb_pri_corrected_error = 2,
    dsc$dftb_pri_uncorrected_error = 3,
    dsc$dftb_pri_cpu_halt = 4,
    dsc$dftb_pri_env_long_warning = 5,
    dsc$dftb_pri_short_warning = 6,

    dsc$dftb_revision_level_3 = 3,
    dsc$dftb_revision_level_4 = 4,
    dsc$dftb_revision_level_5 = 5,
    dsc$dftb_revision_level_6 = 6,

    dsc$dftb_rpw_secded_id = 1,
    dsc$dftb_rpw_mrb = 2,
    dsc$dftb_rpw_mdb = 3,
    dsc$dftb_rpw_nosve_buffer = 4,
    dsc$dftb_rpw_c170_pp_resident = 5,
    dsc$dftb_rpw_c170_os_buffer = 6,
    dsc$dftb_rpw_mrb_cw = 7,
    dsc$dftb_rpw_mec = 8,
    dsc$dftb_rpw_dft_control_info = 9,
    dsc$dftb_rpw_ssb = 10,
    dsc$dftb_rpw_nrb = 11,
    dsc$dftb_rpw_dft_cm_resident = 12,
    dsc$dftb_rpw_pp_reg_save_area = 13,
    dsc$dftb_rpw_dft_secondary = 14,

    dsc$dftb_sbt_mrb = 1,
    dsc$dftb_sbt_ssb = 2,
    dsc$dftb_sbt_mdb = 3,
    dsc$dftb_sbt_mec = 4,
    dsc$dftb_sbt_sit = 5,
    dsc$dftb_sbt_i4c = 6,
    dsc$dftb_sbt_nrb = 7;

  TYPE
    dst$dftb_cw_dft_pp_number = 0 .. 0ff(16),
    dst$dftb_cw_pointer_words = 0 .. 0f(16),
    dst$dftb_cw_revision_level = 0 .. 0ff(16),
    dst$dftb_dft_analysis_code = 0 .. 0fff(16),
    dst$dftb_element_size = 0 .. 0ffff(16),
    dst$dftb_mdb_data_header_id = 0 .. 0ffff(16),
    dst$dftb_mdb_mrb_word_index = 0 .. 0ff(16),
    dst$dftb_mdb_pfs_error_id = 0 .. 0ffff(16),
    dst$dftb_mec_threshold = 0 .. 0ff(16),
    dst$dftb_mec_error_element = 0 .. 0ffff(16),
    dst$dftb_mrb_offset = 0 .. 0ffff(16),
    dst$dftb_mrt_element_index = 0 .. 0ff(16),
    dst$dftb_os_action_code = 0 .. 0ff(16),
    dst$dftb_priority = 0 .. 0f(16),
    dst$dftb_secded_count = 0 .. 0ffff(16),
    dst$dftb_secded_address = 0 .. 0ffffffff(16),
    dst$dftb_secded_syndrome = 0 .. 0ffff(16),
    dst$dftb_sequence_number = 0 .. 0ff(16),
    dst$dftb_ssb_mdb_ordinal = 0 .. 0ff(16),
    dst$dftb_ssb_unlogged = 0 .. 0ff(16),
    dst$dftb_stat_buffer_type = 0 .. 0ff(16),
    dst$dftb_structure_length = 0 .. 0ff(16);

  TYPE

    { Type declaration for the dftb control word (cw).

    dst$dftb_control_word = PACKED RECORD
      unused: 0 .. 0f(16),
      pointer_words: dst$dftb_cw_pointer_words,
      sequence_number: dst$dftb_sequence_number,
      revision_level: dst$dftb_cw_revision_level,
      dft_pp_number: dst$dftb_cw_dft_pp_number,
      mrb_length: dst$dftb_structure_length,
      number_of_mrbs: dst$dftb_structure_length,
      unused_cw_flag_1: boolean,
      unused_cw_flag_2: boolean,
      unused_cw_flag_3: boolean,
      unused_cw_flag_4: boolean,
      logging_transaction: boolean,
      idle_dft: boolean,
      corrected_error_freeze: boolean,
      uncorrected_error_freeze: boolean,
      dft_verification: boolean,
      dft_reject: boolean,
      zero_counters_and_secded: boolean,
      c170_dedicated: boolean,
      nos_logging_errors: boolean,
      non_dedicated_mode: boolean,
      c180_error: boolean,
      c170_error: boolean,
    RECEND;

  TYPE
    dst$dftb_buffer_control_word = PACKED RECORD
      mrt_element_index: dst$dftb_mrt_element_index,
      os_action_code: dst$dftb_os_action_code,
      priority: dst$dftb_priority,
      dft_analysis_code: dst$dftb_dft_analysis_code,
      sequence_number: dst$dftb_sequence_number,
      flags: dst$dftb_error_buffer_flags,
      offset: dst$dftb_mrb_offset,
    RECEND,

    dst$dftb_buffer_header_word = PACKED RECORD
      rfu: 0 .. 0ffffffff(16),
      number_of_buffers: dst$dftb_element_size,
      buffer_size: dst$dftb_element_size,
    RECEND,

    dst$dftb_date_and_time = PACKED RECORD
      data: dst$dftb_date_and_time_data,
      rfu: 0 .. 0ff(16),
    RECEND,

    dst$dftb_date_and_time_data = 0 .. 0ffffffffffffff(16),

    dst$dftb_date_and_time_field = PACKED RECORD
      rfu_1: 0 .. 7F(16),
      lost_integrity: boolean,
      tens_of_years: 0 .. 0f(16),
      units_of_years: 0 .. 0f(16),
      tens_of_months: 0 .. 0f(16),
      units_of_months: 0 .. 0f(16),
      tens_of_days: 0 .. 0f(16),
      units_of_days: 0 .. 0f(16),
      tens_of_hours: 0 .. 0f(16),
      units_of_hours: 0 .. 0f(16),
      tens_of_minutes: 0 .. 0f(16),
      units_of_minutes: 0 .. 0f(16),
      tens_of_seconds: 0 .. 0f(16),
      units_of_seconds: 0 .. 0f(16),
      rfu_2: 0 .. 0ff(16),
    RECEND,

    dst$dftb_error_buffer_flags = PACKED RECORD
      logging_to_console: boolean,
      valid_mdb_data: boolean,
      unused: boolean,
      threshold_exceeded: boolean,
      logging_action: boolean,
      interlock: boolean,
      c180_valid_data: boolean,
      c170_valid_data: boolean,
    RECEND,

    dst$dftb_fault_symptom_code = PACKED RECORD
      upper: 0 .. 0ffffffff(16),
      lower: integer,
    RECEND,

    dst$dftb_fault_symptom_words = PACKED RECORD
      rfu: 0 .. 0ffffffff(16),
      fault_symptom_code: dst$dftb_fault_symptom_code,
    RECEND,

    dst$dftb_r_pointer_words = ARRAY [1 .. *] OF dst$r_pointer;

  TYPE

    { Type declaration for the mainframe element counters (mec).

    dst$dftb_mec_entry = PACKED RECORD
      corrected_threshold: dst$dftb_mec_threshold,
      uncorrected_threshold: dst$dftb_mec_threshold,
      unlogged_error: dst$dftb_mec_error_element,
      corrected_error: dst$dftb_mec_error_element,
      uncorrected_error: dst$dftb_mec_error_element,
    RECEND,

    { Type declaration for the dftb secded id table (secded).

    dst$dftb_secded_id_table_entry = PACKED RECORD
      count: dst$dftb_secded_count,
      address: dst$dftb_secded_address,
      syndrome: dst$dftb_secded_syndrome,
    RECEND,

    { Type declaration for the dftb mainframe register buffer (mr).

    dst$dftb_mr_header_entry = PACKED RECORD
      mainframe_element_id: 0 .. 0f(16),
      register_type: 0 .. 0f(16),
      register_number: 0 .. 0ff(16),
    RECEND,
    dst$dftb_mr_register_header = PACKED ARRAY [1 .. dsc$dftb_mr_number_of_registers]
          OF dst$dftb_mr_header_entry,
    dst$dftb_mr_register_list = ARRAY [1 .. dsc$dftb_mr_number_of_registers] OF integer,

    dst$dftb_maintenance_registers = PACKED RECORD
      register_header: dst$dftb_mr_register_header,
      register_list: dst$dftb_mr_register_list,
    RECEND,

    { Type declaration for the dftb model dependent buffer (mdb).

    dst$dftb_mdb_information_word = PACKED RECORD
      rfu: 0 .. 0ff(16),
      control_word_offset: dst$dftb_mdb_mrb_word_index,
      priority: dst$dftb_priority,
      sequence_number: dst$dftb_sequence_number,
      unused: 0 .. 0fffff(16),
      data_length_to_log: dst$dftb_element_size,
    RECEND,

    dst$dftb_mdb_block_header = PACKED RECORD
      block_length_to_log: dst$dftb_element_size,
      rfu: 0 .. 0ffff(16),
      pfs_error_id: dst$dftb_mdb_pfs_error_id,
      data_header_id: dst$dftb_mdb_data_header_id,
    RECEND,

    { Type declaration for the dftb supportive status buffer (ssb).

    dst$dftb_ssb_information_word = PACKED RECORD
      element_number: dst$dftb_structure_length,
      mrb_type: dst$dftb_structure_length,
      data_length_to_log: dst$dftb_element_size,
      unlogged: dst$dftb_ssb_unlogged,
      mdb_ordinal: dst$dftb_ssb_mdb_ordinal,
      logged_mrb_size: dst$dftb_element_size,
    RECEND,

    { Type declaration for the dftb non register buffer (nrb).

    dst$dftb_nrb_information_word = PACKED RECORD
      rfu_1: dst$dftb_element_size,
      cy2000_element: dst$dftb_element_size,
      element_number: dst$dftb_structure_length,
      mrb_type: dst$dftb_structure_length,
      data_length_to_log: dst$dftb_element_size,
    RECEND,

    dst$dftb_nrb_internal_header = PACKED RECORD
      type_code: dst$dftb_structure_length,
      count: dst$dftb_structure_length,
      element: dst$dftb_element_size,
      rfu: dst$dftb_element_size,
      length: dst$dftb_element_size,
    RECEND,

    { Type declaration for the dftb NOS/VE request buffer (nvep).

    dst$dftb_nve_req_buffer = RECORD
      sci_vpb_reserved_r_pointer: dst$r_pointer,
      sda_reserved_r_pointer: dst$r_pointer,
      system_request_r_pointer: dst$r_pointer,
      unused_request_r_pointer: dst$r_pointer,
    RECEND;

  TYPE

    { Type declarations used by the OS.

    dst$dftb_data_structure_info = RECORD
      number_of_mrbs: dst$dftb_element_size,
      mrb_length: dst$dftb_element_size,
      ssb_length: dst$dftb_element_size,
      number_of_nrbs: dst$dftb_element_size,
      nrb_length: dst$dftb_element_size,
      number_of_mdbs: dst$dftb_element_size,
      mdb_length: dst$dftb_element_size,
      secded_id_table_length: dst$dftb_element_size,
      revision_level: dst$dftb_cw_revision_level,
    RECEND,

    dst$dftb_stat_block_header = PACKED RECORD
      date_and_time: dst$dftb_date_and_time_data,
      linked_block_follows: boolean,
      block_number: 0 .. 07f(16),
      global_length: dst$dftb_element_size,
      dft_code_version_number: dst$dftb_element_size,
      dft_interface_version_number: dst$dftb_cw_revision_level,
      rfu: 0 .. 0f(16),
      dft_analysis_code: dst$dftb_dft_analysis_code,
      sequence_number: dst$dftb_sequence_number,
    RECEND,

    dst$dftb_stat_buffer_header = PACKED RECORD
      buffer_length: dst$dftb_element_size,
      rfu: 0 .. 0ffffffffff(16),
      buffer_type: dst$dftb_stat_buffer_type,
    RECEND;

*copyc dst$r_pointer
