PROC display_hpa_disk_detail, dishdd (
  input, i: file = $local.$engineering_log
  output, o: file = $output
  status)

  "       Proc Display_HPA_disk_detail converts error information for disks from
  "       the binary Engineering_Log to a format reminiscient of the 170
  "       HPA detail reports (without any analysis).
  "       parameters are as follows:
  "            Input or i = name of file containing engineering_log
  "            Output or o = name of file to receive output

  time_study = false

  IF time_study THEN
    display_job_data output=$null "            preset job data statistics"
  IFEND

  create_variable convert_variable kind=string value=''
  create_variable statistic_counter k=integer v=0
  create_variable ofile k=string v=$unique
  create_variable ofile5 k=string v=$unique
  create_variable (date, code, line) k=string v=''
  create_variable det_line k=string v='' dimension=1..10
  create_variable ext_line k=string v='' d=1..5
  create_variable disk_detail k=string v='' dimension=0..40
  create_variable output_line k=string v='' d=0..11
  create_variable column_pointer k=integer v=97
  create_variable line_pointer k=integer v=5
  create_variable blanks k=string v='                      ' "pad for line10"
  create_variable out_name k=string v=''

  "                          call DISPLAY_BINARY_LOG utility

  display_binary_log i=$value(input) o=$value(output)
  define_group disk1 CM4102
  define_group disk2 CM4100
  define_group disk3 CM4101
  define_group disk4 CM4103
  define_group disk5 CM4104
  generate_group_file disk1 $fname(ofile)
  generate_group_file disk4 $fname(ofile)
  generate_group_file disk3 $fname(ofile)
  generate_group_file disk2 $fname(ofile)
  generate_group_file disk5 $fname(ofile5)
  QUIT

"         build output file name for line by line output"

  out_name = $path($value(output), catalog) // '.' // ..
        $path($value(output), last) // '.'

  IF $file($value(output), permanent) THEN
    out_name = out_name // $strrep($file($value(output), cycle_number)) // ..
          '.$asis'
  ELSE
    out_name = out_name // '$asis'
  IFEND

  lines_read = 0
  accept_line line $fname(ofile//'.$boi') line_count=lines_read

  output_line(3) = 'FCN TY E UN  CYL TK SC STAT    1    2    3    4    5    6..
    7    8    9   10'
  output_line(4) = '---------------------------------------------------------..
-------------------'

  PUSH_COMMANDS
  WHILE lines_read > 0 DO

    IF $substr(line, 2, 2) = 'CM' THEN "     find first line of statistic"

      "         check for change in DATE or statistic CODE type --- need new header"
      IF date <> $substr(line, 13, 7) OR code <> $substr(line, 2, 11) THEN
        date = $substr(line, 13, 7)
        code = $substr(line, 2, 11)

        IF code = 'CM4102' OR code = 'CM4103' THEN
          output_line(2) = ..
                '                       POLL                DETAIL STATUS'
        ELSE
          output_line(2) = ..
                '                       GEN                 DETAIL STATUS'
        IFEND

        output_line(0) = ' ' // code // '      ' // date

        FOR i = 0 TO 4 DO
          put_line ' '//output_line(i) $fname(out_name)
        FOREND
      IFEND

      number_of_counters = $integer($substr(line, 63, 2))

      "             Check for correct NUMBER_OF_COUNTERS"
      IF number_of_counters <> 39 AND number_of_counters <> 60 THEN
        accept_line line $fname(ofile//'.$asis') line_count=lines_read
        CYCLE "                           cycle WHILE loop for next CM code"
      IFEND

      output_line(5) = ' ' // ..
            $substr(line, 21, 8) "    get TIME of error statistic"

      accept_line det_line $fname(ofile//'.$asis') ..
            line_count=lines_read " 10 lines of stat"

      convert_base $substr(det_line(1), 59, 2) 2, 8, ..
            convert_variable "   Equipment_Number to 2 char octal string"
      output_line(6) = convert_variable
      convert_base $substr(det_line(1), 78, 3) 3, 8, ..
            convert_variable "    Unit_Number conversion"
      output_line(6) = output_line(6) // convert_variable

      convert_base $substr(det_line(2), 38, 3) 3, 10, ..
            convert_variable "    Op_Code conversion"
      output_line(8) = '  OPCD= ' // convert_variable
      convert_base $substr(det_line(2), 19, 2) 3, 10, ..
            convert_variable "  Equipment_Type to 3 char decimal string"
      output_line(6) = convert_variable // output_line(6)

      convert_base $substr(det_line(3), 17, 4) 4, 10, ..
            convert_variable " Command_Retry conversion"
      output_line(8) = output_line(8) // ' REQUEST RTY= ' // convert_variable
      IF code = 'CM4102' OR code = 'CM4103' THEN
        convert_base $substr(det_line(3), 37, 4) 5, 8, ..
              convert_variable "      Diag code conversion"
        output_line(8) = output_line(8) // '  DIAG CODE=' // convert_variable
        IF convert_variable <> '     ' THEN
          output_line(8) = output_line(8) // '(8)'
        IFEND
      ELSE
        convert_base $substr(det_line(3), 37, 4) 4, 10, ..
              convert_variable "      Sector_Retry conversion"
        output_line(8) = output_line(8) // ' SECTOR RTY= ' // convert_variable
      IFEND
      convert_base $substr(det_line(3), 57, 4) 5, 8, ..
            convert_variable "      Initial_Cylinder conversion"
      output_line(6) = output_line(6) // convert_variable
      convert_base $substr(det_line(3), 78, 3) 3, 8, ..
            convert_variable "    Initial_Track conversion"
      output_line(6) = output_line(6) // convert_variable
      convert_base $substr(det_line(4), 18, 3) 3, 8, ..
            convert_variable "    Initial_Sector conversion"
      output_line(6) = output_line(6) // convert_variable

      convert_base $substr(det_line(4), 37, 4) 5, 8, ..
            convert_variable "      Error_Cylinder conversion"
      output_line(7) = '  ERROR POS ' // convert_variable
      convert_base $substr(det_line(4), 58, 3) 3, 8, ..
            convert_variable "    Error_Track conversion"
      output_line(7) = output_line(7) // convert_variable
      convert_base $substr(det_line(4), 78, 3) 3, 8, ..
            convert_variable "    Error_Sector conversion"
      output_line(7) = output_line(7) // convert_variable // '     '

      convert_base $substr(det_line(5), 16, 5) 5, 10, ..
            convert_variable "      Residual_Count conversion"
      output_line(8) = output_line(8) // ' RESIDUAL CNT= ' // convert_variable
      convert_base $substr(det_line(5), 38, 3) 4, 8, ..
            convert_variable "    Failing_Function conversion"
      output_line(6) = convert_variable // output_line(6)
      IF code = 'CM4102' OR code = 'CM4103' THEN
        convert_base $substr(det_line(5), 57, 5) 4, 16, ..
              convert_variable "     Poll_Status conversion"
        convert_variable = ' ' // convert_variable
      ELSE
        convert_base $substr(det_line(5), 57, 4) 5, 8, ..
              convert_variable "      General_Status conversion"
      IFEND
      output_line(6) = output_line(6) // convert_variable

      column_pointer = 77
      line_pointer = 5

      FOR i = 1 TO 20 DO "                 convert detail status here"
        IF column_pointer = 97 THEN
          column_pointer = 17
          line_pointer = line_pointer + 1
        IFEND

        convert_variable = $strrep(..
              $integer($substr(det_line(line_pointer), column_pointer, 4)), 8)

        IF convert_variable = '-1' THEN
          disk_detail(i) = '    '
        ELSEIF $strlen(convert_variable) < 4 THEN
          disk_detail(i) = ..
                $substr(blanks, 1, 4-$strlen(convert_variable)) // ..
                convert_variable
        ELSE
          disk_detail(i) = convert_variable
        IFEND
        column_pointer = column_pointer + 20
      FOREND

      FOR i = 1 TO 10 DO
        output_line(6) = output_line(6) // '/' // disk_detail(i)
        output_line(7) = output_line(7) // '/' // disk_detail(i + 10)
      FOREND

      IF number_of_counters = 60 THEN "   Final_Status formatting"
        IF code = 'CM4102' OR code = 'CM4103' THEN
          convert_base $substr(det_line(line_pointer), 77, 5) 4, 16, ..
                convert_variable " Poll_Status conversion"
          convert_variable = ' ' // convert_variable
        ELSE
          convert_base $substr(det_line(line_pointer), 77, 4) 5, 8, ..
                convert_variable " General_Status conversion"
        IFEND
        output_line(9) = '  FINAL STAT UNREC ERR ' // convert_variable
        accept_line ext_line $fname(ofile//'.$asis') ..
              line_count=lines_read "5 lines of extended status"
        line_pointer = 1
        column_pointer = 17
        output_line(10) = blanks // ..
              '      ' "         initialize OUTPUT_LINE(10)

        FOR i = 21 TO 40 DO
          IF column_pointer = 97 THEN
            column_pointer = 17
            line_pointer = line_pointer + 1
          IFEND

          convert_variable = $strrep(..
                $integer($substr(ext_line(line_pointer), column_pointer, 4)),..
                 8)

          IF convert_variable = '-1' THEN
            disk_detail(i) = '    '
          ELSEIF $strlen(convert_variable) < 4 THEN
            disk_detail(i) = ..
                  $substr(blanks, 1, 4-$strlen(convert_variable)) // ..
                  convert_variable
          ELSE
            disk_detail(i) = convert_variable
          IFEND
          column_pointer = column_pointer + 20
        FOREND

        FOR i = 21 TO 30 DO
          output_line(9) = output_line(9) // '/' // disk_detail(i)
          output_line(10) = output_line(10) // '/' // disk_detail(i + 10)
        FOREND
      IFEND

      accept_line line $fname(ofile//'.$asis') ..
            line_count=lines_read "ANALYSIS line of stat"
      output_line(5) = output_line(5) // line

      statistic_counter = statistic_counter + 1

      put_line output_line(5) $fname(out_name)
      put_line output_line(6) $fname(out_name)
      put_line output_line(7) $fname(out_name)

      IF number_of_counters = 60 THEN
        put_line output_line(9) ..
              $fname(out_name) "  output Final_Status lines, if present"
        put_line output_line(10) $fname(out_name)
      IFEND

      put_line output_line(8) $fname(out_name)
      put_line output_line(11) $fname(out_name)
    IFEND

    accept_line line $fname(ofile//'.$asis') ..
          line_count=lines_read "try next line"

  WHILEND

  IF statistic_counter = 0 THEN
    put_line ' SPECIFIED LOG CONTAINS NO ISD/844/885 DISK ERRORS ' output=$fname(out_name)
  ELSE
    put_line ' END OF ISD/844/885 DISK ERRORS ' output=$fname(out_name)
  IFEND

  IF time_study THEN
    display_value ' ' output=$fname(out_name)
    put_line '  THE NUMBER OF STATISTICS IS  '//$strrep(statistic_counter) ..
          output=$fname(out_name)
    disjd display_format=incremental output=$fname(out_name)
  IFEND
  detach_file $fname(ofile)

"  process 895 (33800) error entries
  lines_read = 0
  accept_line line $fname(ofile5//'.$boi') line_count=lines_read

  output_line(2) = '       SD/                GEN  CYB  895DI           '//..
        '   SENSE BYTES'
  output_line(3) = 'FCN TY HSC UN  CYL TK SC  STAT STAT STAT    0  1  2  3  4..
  5  6  7  8  9 10 11'
  output_line(4) = '---------------------------------------------------------..
---------------------'

  WHILE lines_read > 0 DO

    IF $substr(line, 2, 2) = 'CM' THEN "     find first line of statistic"

      "         check for change in DATE or statistic CODE type --- need new header"
      IF date <> $substr(line, 13, 7) OR code <> $substr(line, 2, 11) THEN
        date = $substr(line, 13, 7)
        code = $substr(line, 2, 11)

        output_line(0) = ' ' // code // '      ' // date

        FOR i = 0 TO 4 DO
          put_line ' '//output_line(i) $fname(out_name)
        FOREND
      IFEND

      number_of_counters = $integer($substr(line, 63, 2))

      "             Check for correct NUMBER_OF_COUNTERS"
      IF number_of_counters <> 40 AND number_of_counters <> 46 AND number_of_counters <> 60 THEN
        accept_line line $fname(ofile5//'.$asis') line_count=lines_read
        CYCLE "                           cycle WHILE loop for next CM code"
      IFEND

      output_line(5) = ' ' // ..
            $substr(line, 19, 8) "    get TIME of error statistic"

      accept_line det_line $fname(ofile5//'.$asis') ..
            line_count=lines_read " 10 lines of stat"

      convert_base $substr(det_line(1), 59, 2) 4, 8, ..
            convert_variable "   SD/HSC Number to 3 char ##octal## string"
      output_line(6) = convert_variable
      convert_base $substr(det_line(1), 78, 3) 3, 8, ..
            convert_variable "    Unit_Number conversion"
      output_line(6) = output_line(6) // convert_variable

      convert_base $substr(det_line(2), 38, 3) 3, 10, ..
            convert_variable "    Op_Code conversion"
      output_line(8) = '  OPCD= ' // convert_variable
      convert_base $substr(det_line(2), 19, 2) 3, 10, ..
            convert_variable "  Equipment_Type to 3 char decimal string"
      output_line(6) = convert_variable // output_line(6)

      convert_base $substr(det_line(3), 17, 4) 4, 10, ..
            convert_variable " Command_Retry conversion"
      output_line(8) = output_line(8) // ' REQUEST RTY= ' // convert_variable
      convert_base $substr(det_line(3), 37, 4) 5, 8, ..
            convert_variable "      Diag code conversion"
      output_line(8) = output_line(8) // '  DIAG CODE=' // convert_variable
      IF convert_variable <> '     ' THEN
        output_line(8) = output_line(8) // '(8)'
      IFEND
      convert_base $substr(det_line(3), 57, 4) 5, 8, ..
            convert_variable "      Initial_Cylinder conversion"
      output_line(6) = output_line(6) // convert_variable
      convert_base $substr(det_line(3), 78, 3) 3, 8, ..
            convert_variable "    Initial_Track conversion"
      output_line(6) = output_line(6) // convert_variable
      convert_base $substr(det_line(4), 18, 3) 3, 8, ..
            convert_variable "    Initial_Sector conversion"
      output_line(6) = output_line(6) // convert_variable

      convert_base $substr(det_line(4), 37, 4) 5, 8, ..
            convert_variable "      Error_Cylinder conversion"
      output_line(7) = '  ERROR POS   ' // convert_variable
      convert_base $substr(det_line(4), 58, 3) 3, 8, ..
            convert_variable "    Error_Track conversion"
      output_line(7) = output_line(7) // convert_variable
      convert_base $substr(det_line(4), 78, 3) 3, 8, ..
            convert_variable "    Error_Sector conversion"
      output_line(7) = output_line(7) // convert_variable

      convert_base $substr(det_line(5), 16, 5) 5, 10, ..
            convert_variable "      Residual_Count conversion"
      output_line(8) = output_line(8) // ' RESIDUAL CNT= ' // convert_variable
      convert_base $substr(det_line(5), 38, 3) 4, 8, ..
            convert_variable "    Failing_Function conversion"
      output_line(6) = convert_variable // output_line(6)
      convert_base $substr(det_line(5), 57, 4) 6, 8, ..
            convert_variable "      General_Status conversion"
      output_line(6) = output_line(6) // convert_variable
      convert_base $substr(det_line(10), 17, 4) 4, 8, ..
            convert_variable "      Cyber status conversion"
      output_line(6) = output_line(6) // '/' //convert_variable
      convert_base $substr(det_line(10), 37, 4) 4, 8, ..
            convert_variable "      895 DI Status conversion"
      output_line(6) = output_line(6) // '/' // convert_variable // '  '
      convert_base $substr(det_line(10), 57, 4) 4, 8, ..
            convert_variable "      ccc status conversion"
      output_line(7) = output_line(7) // ' CCC=' //convert_variable
      convert_base $substr(det_line(9), 77, 4) 4, 8, ..
            convert_variable "      cw conversion"
      output_line(7) = output_line(7) // ' CW=' // convert_variable // ' '

      sense_byte_status = ''
      column_pointer = 77
      line_pointer = 5

      FOR i = 1 TO 16 DO "                 convert sense byte status here"
        IF column_pointer = 97 THEN
          column_pointer = 17
          line_pointer = line_pointer + 1
        IFEND

        convert_variable = $strrep(..
              $integer($substr(det_line(line_pointer), column_pointer, 4)), 16)

        IF convert_variable = '-1' THEN
          convert_variable = '   '
        ELSEIF $strlen(convert_variable) = 4 AND ..
              $substr(convert_variable, 1, 1) = '0' THEN
          convert_variable = $substr(convert_variable, 2, 3)
        ELSEIF $strlen(convert_variable) = 2 THEN
          convert_variable = '0' // convert_variable
        ELSEIF $strlen(convert_variable) = 1 THEN
          convert_variable = '00' // convert_variable
        IFEND
        sense_byte_status = sense_byte_status // convert_variable
        column_pointer = column_pointer + 20
      FOREND

      FOR i = 1 TO 12 DO
        output_line(6) = output_line(6) // '/' // $substr(sense_byte_status,..
              ((2 * i) - 1), 2)
        output_line(7) = output_line(7) // '/' // $substr(sense_byte_status,..
              ((2 * (i + 12)) - 1), 2)
      FOREND

      IF number_of_counters = 60 THEN "   Final_Status formatting"
        convert_base $substr(det_line(10), 77, 4) 5, 8, ..
              convert_variable " General_Status conversion"
        output_line(9) = '  FINAL STAT UNREC ERR    ' // convert_variable
        accept_line ext_line $fname(ofile5//'.$asis') ..
              line_count=lines_read "5 lines of extended status"
      convert_base $substr(ext_line(5), 37, 4) 4, 8, ..
            convert_variable "      Cyber status conversion"
      output_line(9) = output_line(9) // '/' //convert_variable
      convert_base $substr(ext_line(5), 57, 4) 4, 8, ..
            convert_variable "      895 DI Status conversion"
      output_line(9) = output_line(9) // '/' // convert_variable // '  '
      convert_base $substr(ext_line(5), 77, 4) 4, 8, ..
            convert_variable "      ccc status conversion"
      output_line(10) = blanks // ..
            '  ' "         initialize OUTPUT_LINE(10) "
      output_line(10) = output_line(10) // '  CCC=' //convert_variable
      convert_base $substr(ext_line(5), 17, 4) 4, 8, ..
            convert_variable "      cw conversion"
      output_line(10) = output_line(10) // ' CW=' // convert_variable // ' '

        line_pointer = 1
        column_pointer = 17
        sense_byte_status = ''

        FOR i = 1 TO 16 DO "                 convert sense byte status here"
          IF column_pointer = 97 THEN
            column_pointer = 17
            line_pointer = line_pointer + 1
          IFEND

          convert_variable = $strrep(..
                $integer($substr(ext_line(line_pointer), column_pointer, 4)),..
                 16)

          IF convert_variable = '-1' THEN
            convert_variable = '   '
          ELSEIF $strlen(convert_variable) = 4 AND ..
                $substr(convert_variable, 1, 1) = '0' THEN
            convert_variable = $substr(convert_variable, 2, 3)
          ELSEIF $strlen(convert_variable) = 2 THEN
            convert_variable = '0' // convert_variable
          ELSEIF $strlen(convert_variable) = 1 THEN
            convert_variable = '00' // convert_variable
          IFEND
          sense_byte_status = sense_byte_status // convert_variable
          column_pointer = column_pointer + 20
        FOREND

        FOR i = 1 TO 12 DO
          output_line(9) = output_line(9) // '/' // $substr(sense_byte_status,..
                ((2 * i) - 1), 2)
          output_line(10) = output_line(10) // '/' // ..
                $substr(sense_byte_status, ((2 * (i + 12)) - 1), 2)
        FOREND
      IFEND

      accept_line line $fname(ofile5//'.$asis') ..
            line_count=lines_read "ANALYSIS line of stat"
      output_line(5) = output_line(5) // line

      statistic_counter = statistic_counter + 1

      put_line output_line(5) $fname(out_name)
      put_line output_line(6) $fname(out_name)
      put_line output_line(7) $fname(out_name)

      IF number_of_counters = 60 THEN
        put_line output_line(9) ..
              $fname(out_name) "  output Final_Status lines, if present"
        put_line output_line(10) $fname(out_name)
      IFEND

      put_line output_line(8) $fname(out_name)
      put_line output_line(11) $fname(out_name)
    IFEND

    accept_line line $fname(ofile5//'.$asis') ..
          line_count=lines_read "try next line"

  WHILEND

  IF statistic_counter = 0 THEN
    put_line ' SPECIFIED LOG CONTAINS NO 895/33800 DISK ERRORS ' output=$fname(out_name)
  ELSE
    put_line ' END OF 895/33800 DISK ERRORS ' output=$fname(out_name)
  IFEND

  IF time_study THEN
    display_value ' ' output=$fname(out_name)
    put_line '  THE NUMBER OF STATISTICS IS  '//$strrep(statistic_counter) ..
          output=$fname(out_name)
    disjd display_format=incremental output=$fname(out_name)
  IFEND
  detach_file $fname(ofile5)

PROCEND display_hpa_disk_detail

