PROCEDURE dum$display_console_windows, display_console_windows, discw (
  output, o : file = $output
  status)

  " This procedure uses RJT's newest dump analyzer.
  " This assumes that dpm$system_console_monitor has been added.

  VAR
    local_status: status
  VAREND

  set_file_attributes f=output fc=legible pf=continuous
  IF $file(output open_position) = '$BOI' THEN
    rewind_file f=output status=local_status
  IFEND
  output_file = output.$eoi

  current_default_module = $default_module
  change_default_module m=dpm$system_console_monitor

  " Display the idle message which appears on the top line of the console.

  idle_message_line = $symbol_address(mtv$idle_message_line)
  IF $program_value(?idle_message_line.dpt$console_line.text_size) > 0 THEN
    display_value v=$program_value(?idle_message_line.dpt$console_line.text) o=output_file
  IFEND

  window_p = $program_value(dpv$top_window_p)

  WHILE NOT $nil_pva(window_p) DO
    display_value v=' ------------------------------------------------------------------------- ' o=output_file

    " Display the window's title line.

    display_value v=$program_value(?window_p.dpt$window.title.text) o=output_file

    IF $program_value(?window_p.dpt$window.kind) = DPC$WK_TABLE THEN

      " Display the lines for the TABLE window.

      FOR line_index = 1 to $program_value(UPPERBOUND(?window_p.dpt$window.lines)) DO
        IF ($program_value(?window_p.dpt$window.lines[?line_index].text_size) > 0) AND ..
              ($trim($program_value(?window_p.dpt$window.lines[?line_index].text)) <> '') THEN
          display_value v=$trim($program_value(?window_p.dpt$window.lines[?line_index].text)) o=output_file
        IFEND
      FOREND

    ELSE

      " Display the lines for the LOG or INTERACTIVE window.  Display the oldest lines first.

      most_recent = $program_value(?window_p.dpt$window.present_window_line_number)
      FOR line_index = (most_recent+1) TO $program_value(UPPERBOUND(?window_p.dpt$window.lines)) DO
        IF ($program_value(?window_p.dpt$window.lines[?line_index].text_size) > 0) AND ..
              ($trim($program_value(?window_p.dpt$window.lines[?line_index].text)) <> '') THEN
          display_value v=$trim($program_value(?window_p.dpt$window.lines[?line_index].text)) o=output_file
        IFEND
      FOREND

      FOR line_index = 1 to most_recent do
        IF ($program_value(?window_p.dpt$window.lines[?line_index].text_size) > 0) AND ..
              ($trim($program_value(?window_p.dpt$window.lines[?line_index].text)) <> '') THEN
          display_value v=$trim($program_value(?window_p.dpt$window.lines[?line_index].text)) o=output_file
        IFEND
      FOREND
    IFEND
    window_p = $program_value(?window_p.dpt$window.next_window_p)

  WHILEND

  change_default_module m=current_default_module

PROCEND dum$display_console_windows
