MODULE ofm$display_resource_table;
?? RIGHT := 110 ??
{ Module purpose.

?? NEWTITLE := 'Global Declarations Referenced By This Module', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc ost$halfword
*copyc ost$status
?? POP ??
*copyc clp$close_display
*copyc clp$put_display
*copyc dpp$clear_window
*copyc dpp$put_next_line
*copyc dsp$format_resource_table
*copyc ofp$open_display
*copyc osp$disestablish_cond_handler
*copyc osp$establish_block_exit_hndlr
?? OLDTITLE ??
?? NEWTITLE := '[xdcl] OFP$DISPLAY_RESOURCE_TABLE', EJECT ??

  PROCEDURE [XDCL] ofp$display_resource_table
    (    wid: dpt$window_id;
         display_name: ost$name;
         file_name: amt$local_file_name;
         initial_call: boolean;
     VAR status: ost$status);

    CONST
      c$seq_size = 2 {= #size(t$count)} + (60 {high value of channels} * (1 + 80 {max estimated line size} )),
      c$title = 'IOU RESOURCE TABLE';

    TYPE
      t$count = 0 .. 0ffff(16),
      t$line_size = 0 .. 0ff(16),
      t$line = string ( * <= 0ff(16));

    VAR
      display_control: clt$display_control,
      seq_p: ^SEQ ( * );

?? NEWTITLE := 'ABORT_HANDLER', EJECT ??

{ PURPOSE:
{   This procedure provides clean-up processing when a task abort occurs.

    PROCEDURE p$abort_handler
      (    condition: pmt$condition;
           condition_information_p: ^pmt$condition_information;
           save_area_p: ^ost$stack_frame_save_area;
       VAR handler_status: ost$status);

      VAR
        ignore_status: ost$status;

      IF wid = 0 THEN
        clp$close_display (display_control, ignore_status);
      IFEND;

    PROCEND p$abort_handler;
?? OLDTITLE ??
?? NEWTITLE := 'ABORT_HANDLER', EJECT ??

{ PURPOSE:
{   This procedure provides clean-up processing when a task abort occurs.

    PROCEDURE p$output_data
      (VAR seq_p: ^SEQ ( * ));

      VAR
        count_p: ^t$count,
        i: integer,
        line_p: ^t$line,
        line_size_p: ^t$line_size;

      IF wid <> 0 THEN
        dpp$clear_window (wid, status);
        IF NOT status.normal THEN
          RETURN; {----->
        IFEND;
      IFEND;

      RESET seq_p;
      NEXT count_p IN seq_p;
      IF count_p = NIL THEN
        RETURN; {----->
      IFEND;

      FOR i := 1 TO count_p^ DO
        NEXT line_size_p IN seq_p;
        IF line_size_p = NIL THEN
          RETURN; {----->
        IFEND;

        NEXT line_p: [line_size_p^] IN seq_p;
        IF line_p = NIL THEN
          RETURN; {----->
        IFEND;

        IF wid = 0 THEN
          clp$put_display (display_control, line_p^, clc$trim, status);
        ELSE
          dpp$put_next_line (wid, line_p^, status);
        IFEND;
        IF NOT status.normal THEN
          RETURN; {----->
        IFEND;
      FOREND;

    PROCEND p$output_data;
?? OLDTITLE ??
?? EJECT ??
    status.normal := TRUE;
    IF wid = 0 THEN
      osp$establish_block_exit_hndlr (^p$abort_handler);
    IFEND;

    IF initial_call THEN
      ofp$open_display (file_name, wid, dpc$wc_sharing, dpc$wk_table, c$title, display_control, status);
      IF NOT status.normal THEN
        RETURN; {----->
      IFEND;
    IFEND;

    PUSH seq_p: [[REP c$seq_size OF cell]];
    dsp$format_resource_table (seq_p, status);
    IF status.normal THEN
      p$output_data (seq_p);
    IFEND;

    IF wid = 0 THEN
      clp$close_display (display_control, status);
      osp$disestablish_cond_handler;
    IFEND;

  PROCEND ofp$display_resource_table;
?? OLDTITLE ??
MODEND ofm$display_resource_table;
