PROCEDURE dum$display_esm_error, display_esm_error, disesme (
  error     : integer  = $required
  output, o : file = $output
  status)

 " This procedure interrpupts the driver error code

  out = output.$eoi
 " Reference deck DFC$ESM_DRIVER_ERROR_CODES
   highest_error = 49
  create_variable name=driver_errors kind=string dimension=1..highest_error
driver_errors(1) = ' dfc$function_timeout = 1, '
driver_errors(2) = ' dfc$iou_channel_parity_error = 2, '
driver_errors(3) = ' dfc$esm_channel_parity_error = 3, '
driver_errors(4) = ' dfc$esm_double_bit_parity_error = 4, '
driver_errors(5) = ' dfc$esm_address_parity_error = 5, '
driver_errors(6) = ' dfc$esm_flag_operation_abort = 6, '
driver_errors(7) = ' dfc$adp_uncorrected_cm_error = 7, '
driver_errors(8) = ' dfc$adp_cm_reject = 8, '
driver_errors(9) = ' dfc$adp_invalid_cm_response = 9, '
driver_errors(10) = ' dfc$adp_cm_response_parity_err = 10, '
driver_errors(11) = ' dfc$adp_cmi_read_parity_err = 11, '
driver_errors(12) = ' dfc$adp_clock_fault = 12, '
driver_errors(13) = ' dfc$adp_input_buffer_overflow = 13, '
driver_errors(14) = ' dfc$adp_input_data_parity_error = 14, '
driver_errors(15) = ' dfc$adp_12_16_conversion_error = 15, '
driver_errors(16) = ' dfc$adp_jy_data_parity_error = 16, '
driver_errors(17) = ' dfc$adp_kx_pp_data_parity_error = 17, '
driver_errors(18) = ' dfc$adp_kz_board_detected_error = 18, '
driver_errors(19) = ' dfc$adp_jy_board_detected_error = 19, '
driver_errors(20) = ' dfc$adp_kx_board_detected_error = 20, '
driver_errors(21) = ' dfc$esm_address_overflow = 21, '
driver_errors(22) = ' dfc$channel_inactive_error = 22, '
driver_errors(23) = ' dfc$dma_xfer_halted_early = 23, '
driver_errors(24) = ' dfc$lsp_deadman_timeout = 24,  '
driver_errors(25) = ' dfc$unused_reserved_25 = 25,  '
driver_errors(26) = ' dfc$unused_reserved_26 = 26,  '
driver_errors(27) = ' dfc$unused_reserved_27 = 27,  '
driver_errors(28) = ' dfc$unused_reserved_28 = 28,  '
driver_errors(29) = ' dfc$unused_reserved_29 = 29,  '
driver_errors(30) = ' dfc$invalid_command_code = 30, '
driver_errors(31) = ' dfc$invalid_length_in_command = 31,  '
driver_errors(32) = ' dfc$invalid_address_in_command = 32,  '
driver_errors(33) = ' dfc$invalid_length_in_ind_list = 33, '
driver_errors(34) = ' dfc$invalid_address_in_ind_list = 34, '
driver_errors(35) = ' dfc$reserved_field_not_zero = 35, '
driver_errors(36) = ' dfc$pit_lockword_error = 36, '
driver_errors(37) = ' dfc$no_held_info_in_queue_entry = 37, '
driver_errors(38) = ' dfc$invalid_queue_index = 38, '
driver_errors(39) = ' dfc$invalid_queue_entry_index = 39, '
driver_errors(40) = ' dfc$insufficient_length_spec = 40, '
driver_errors(41) = ' dfc$driver_action_flag_not_set = 41, '
driver_errors(42) = ' dfc$destination_machine_down = 42, '
driver_errors(43) = ' dfc$queue_idle = 43, '
driver_errors(44) = ' dfc$inactive_queue_entry = 44, '
driver_errors(45) = ' dfc$invalid_driver_queue_rma = 45, '
driver_errors(46) = ' dfc$unused_reserved_46 = 46,  '
driver_errors(47) = 'dfc$unused_reserved_47 = 47, '
driver_errors(48) = ' dfc$unused_reserved_48 = 48, '
driver_errors(49) = ' dfc$unused_reserved_49 = 49; '

  IF error = 0 THEN
    putl ' NORMAL ' o=out
  ELSEIF (error  > highest_error) OR (error < 0 ) THEN
    putl '   invalid_command_code' o=out
  ELSE
    putl driver_errors(error)  o=out
  IFEND

PROCEND dum$display_esm_error
