From:	CRDGW2::CRDGW2::MRGATE::"SMTP::CRVAX.SRI.COM::RELAY-INFO-VAX"  8-DEC-1989 21:40
To:	MRGATE::"ARISIA::EVERHART"
Subj:	perf_meter.uil - gadget + attached_dialog_box version

Message-Id:  <8912090213.AA26626@crdgw1.ge.com>
Received: From OLY.ACS.WASHINGTON.EDU by CRVAX.SRI.COM with TCP; Fri,  8 DEC 89 13:17:04 PDT
Received: from UWAVM.ACS.WASHINGTON.EDU by UWAVM.ACS.WASHINGTON.EDU (IBM VM SMTP R1.2) with BSMTP id 3838; Fri, 08 Dec 89 13:15:33 PST
Received: from FHCRCVAX.BITNET (JOE) by UWAVM.ACS.WASHINGTON.EDU (Mailer R2.04)
 with BSMTP id 2115; Fri, 08 Dec 89 13:15:27 PST
Received: from MCCOY-GATEWAY by FHCRCVAX.BITNET; Fri, 8 Dec 89 13:13 PST
Date: Thu, 7 Dec 89 23:48 PST
From: Joe Meadows <JOE%FHCRCVAX.BITNET@UWAVM.ACS.WASHINGTON.EDU>
Subject: perf_meter.uil - gadget + attached_dialog_box version
To: info-vax@sri.com
X-Vms-To: INFO-VAX

I modified the perf_meter uil code to use gadgets and more
attached_dialog_boxes. I added the gadgets for "performance"
and the attached_dialog_boxes to make it easier to rearrange
the look. This version is a bit more vertical than the original
with the disk i/o and such under the cpu & state graphs, but is
easily changed.

I also made some changes to the c code, such as displaying the node name
in the title first, and a performance improvement to the section that
displays the cpu graph. (I still experience the memory leak that others
have discussed).

Here's the node name change:

    for (i = nlen -  1; i >= 0 && nodename[i] == ' '; i--) nodename[i] = '\0';
    sprintf(header,"%s System Performance Meters (V2.0)",nodename);

And in the update routine I changed the declaration of CPUPerformance to:

    static unsigned char CPUPercent[101] = {

(that was to save 300 bytes, nothing else) and I declared two new int
variables "sample" and "iy", for use in the following code chunk, which
replaces the section which copied every entry in the CPUPercent array
(saving 100 memory moves per cycle...):

    CPUPercent[sample] = 100 - NullTime;
    for(ix = sample + 1, iy = 0; ix <= 100; ix++, iy++)
    {
        XClearArea(cpu_graph_disp,cpu_graph_wind,iy,0,1,100,0);
        XFillRectangle(cpu_graph_disp,cpu_graph_wind,cpu_graph_gc1,
                       iy,100-CPUPercent[ix],1,CPUPercent[ix]);
    }
    for(ix = 0; ix <= sample; ix++, iy++)
    {
        XClearArea(cpu_graph_disp,cpu_graph_wind,iy,0,1,100,0);
        XFillRectangle(cpu_graph_disp,cpu_graph_wind,cpu_graph_gc1,
                       iy,100-CPUPercent[ix],1,CPUPercent[ix]);
    }
    ++sample;
    if (sample > 100)
        sample = 0;

----------
Anyway, I just thought I'd post this for all interested. I had trouble
sending this to the author, and figured many of you would appreciate this.

Cheers,
Joe Meadows

$! ................... Cut between dotted lines and save. ...................
$!...........................................................................
$! VAX/VMS archive file created by VMS_SHARE V06.10 7-FEB-1989.
$!
$! VMS_SHARE was written by James Gray (Gray:OSBUSouth@Xerox.COM) from
$! VMS_SHAR by Michael Bednarek (U3369429@ucsvc.dn.mu.oz.au).
$!
$! To unpack, simply save, concatinate all parts into one file and
$! execute (@) that file.
$!
$! This archive was created by user JOE
$! on  7-DEC-1989 23:25:03.19.
$!
$! It contains the following 1 file:
$!        PERF_METER.UIL
$!
$!============================================================================
$ SET SYMBOL/SCOPE=( NOLOCAL, NOGLOBAL )
$ VERSION = F$GETSYI( "VERSION" )
$ IF VERSION .GES "V4.4" THEN GOTO VERSION_OK
$ WRITE SYS$OUTPUT "You are running VMS ''VERSION'; ", -
    "VMS_SHARE V06.10 7-FEB-1989 requires VMS V4.4 or higher."
$ EXIT 44 ! SS$_ABORT
$VERSION_OK:
$ GOTO START
$!
$UNPACK_FILE:
$ WRITE SYS$OUTPUT "Creating ''FILE_IS'"
$ DEFINE/USER_MODE SYS$OUTPUT NL:
$ EDIT/TPU/COMMAND=SYS$INPUT/NODISPLAY/OUTPUT='FILE_IS'/NOSECTION -
    VMS_SHARE_DUMMY.DUMMY
b_part := CREATE_BUFFER( "{Part}", GET_INFO( COMMAND_LINE, "file_name" ) )
; s_file_spec := GET_INFO( COMMAND_LINE, "output_file" ); SET( OUTPUT_FILE
, b_part, s_file_spec ); b_errors := CREATE_BUFFER( "{Errors}" ); i_errors
:= 0; pat_beg_1 := ANCHOR & "-+-+-+ Beginning"; pat_beg_2 := LINE_BEGIN
& "+-+-+-+ Beginning"; pat_end := ANCHOR & "+-+-+-+-+ End"; POSITION
( BEGINNING_OF( b_part ) ); LOOP EXITIF SEARCH( SPAN( ' ' )@r_trail
& LINE_END, FORWARD) = 0; POSITION( r_trail ); ERASE( r_trail ); ENDLOOP
; POSITION( BEGINNING_OF( b_part ) ); i_append_line := 0; LOOP EXITIF MARK
( NONE ) = END_OF( b_part ); s_x := ERASE_CHARACTER( 1 )
; IF s_x = '+' THEN r_skip := SEARCH( pat_beg_1, FORWARD, EXACT ); IF r_skip
<> 0 THEN s_x := ''; MOVE_HORIZONTAL( -CURRENT_OFFSET ); ERASE_LINE; ENDIF
; ENDIF; IF s_x = '-' THEN r_skip := SEARCH( pat_end, FORWARD, EXACT )
; IF r_skip <> 0 THEN s_x := ''; MOVE_HORIZONTAL( -CURRENT_OFFSET ); m_skip
:= MARK( NONE ); r_skip := SEARCH( pat_beg_2, FORWARD, EXACT ); IF r_skip
<> 0 THEN POSITION( END_OF( r_skip ) ); MOVE_HORIZONTAL( -CURRENT_OFFSET )
; MOVE_VERTICAL( 1 ); MOVE_HORIZONTAL( -1 ); ELSE POSITION( END_OF( b_part )
); ENDIF; ERASE( CREATE_RANGE( m_skip, MARK( NONE ), NONE ) ); ENDIF; ENDIF
; IF s_x = 'V' THEN s_x := ''; IF i_append_line <> 0 THEN APPEND_LINE
; MOVE_HORIZONTAL( -CURRENT_OFFSET ); ENDIF; i_append_line := 1
; MOVE_VERTICAL( 1 ); ENDIF; IF s_x = 'X' THEN s_x := ''; IF i_append_line
<> 0 THEN APPEND_LINE; MOVE_HORIZONTAL( -CURRENT_OFFSET ); ENDIF
; i_append_line := 0; MOVE_VERTICAL( 1 ); ENDIF; IF s_x <> '' THEN i_errors
:= i_errors + 1; s_text := CURRENT_LINE; POSITION( b_errors ); COPY_TEXT
( "The following line could not be unpacked properly:" ); SPLIT_LINE
; COPY_TEXT( s_x ); COPY_TEXT( s_text ); POSITION( b_part ); MOVE_VERTICAL
( 1 ); ENDIF; ENDLOOP; POSITION( BEGINNING_OF( b_part ) ); LOOP r_x := SEARCH
( "`", FORWARD, EXACT ); EXITIF r_x = 0; POSITION( r_x ); ERASE_CHARACTER( 1
); COPY_TEXT( ASCII( INT( ERASE_CHARACTER( 3 ) ) ) ); ENDLOOP
; IF i_errors = 0 THEN SET( NO_WRITE, b_errors, ON ); ELSE POSITION
( BEGINNING_OF( b_errors ) ); COPY_TEXT( FAO
( "The following !UL errors were detected while unpacking !AS", i_errors
, s_file_spec ) ); SPLIT_LINE; SET( OUTPUT_FILE, b_errors, "SYS$COMMAND" )
; ENDIF; EXIT;
$ DELETE VMS_SHARE_DUMMY.DUMMY;*
$ CHECKSUM 'FILE_IS
$ WRITE SYS$OUTPUT " CHECKSUM ", -
  F$ELEMENT( CHECKSUM_IS .EQ. CHECKSUM$CHECKSUM, ",", "failed!!,passed." )
$ RETURN
$!
$START:
$ FILE_IS = "PERF_METER.UIL"
$ CHECKSUM_IS = 906978663
$ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY
X/* -*-c-mode-*- */
X/*------------------------------------------------------
X *  PERF_METER.UIL - Perf Meter User Interface
X *  Robert Heller Created on Wed Nov  8 10:21:39 1989
X *  Last mod -
X *------------------------------------------------------*/
X
Xmodule perf_meter
X    version = 'v2.0'
X    names = case_insensitive
X    objects = `123
X        separator = gadget;
X        label = widget;
X        push_button = gadget;
X    `125
X
X
Xinclude file 'decw$include:DwtAppl.uil';
X
Xprocedure
X`009activate_proc  (integer);
X`009create_proc    (integer);
X`009cancel_proc    (integer);
X
Xvalue
X        adb_top_attachment      : argument('adbTopAttachment', integer);
X        adb_bottom_attachment   : argument('adbBottomAttachment', integer);
X        adb_left_attachment     : argument('adbLeftAttachment', integer);
X        adb_right_attachment    : argument('adbRightAttachment', integer);
X        adb_top_widget          : argument('adbTopWidget', any);
X        adb_bottom_widget       : argument('adbBottomWidget', any);
X        adb_left_widget         : argument('adbLeftWidget', any);
X        adb_right_widget        : argument('adbRightWidget', any);
X        adb_top_offset          : argument('adbTopOffset', integer);
X        adb_bottom_offset       : argument('adbBottomOffset', integer);
X        adb_left_offset         : argument('adbLeftOffset', integer);
X        adb_right_offset        : argument('adbRightOffset', integer);
X
X! Colors, color tables, and icons.
Xvalue
X        yellow                     : color('yellow', foreground);
X        red                        : color('red', background);
X        green                      : color('green', foreground);
X        magenta                    : color('magenta', background);
X        gold                       : color('gold', foreground);
X        lightblue                  : color('lightblue', background);
X
X! Fonts.
Xvalue
V`009large_font : font('-Adobe-Courier-Bold-R-Normal--14-140-75-75-M-90-ISO885
X9-1');
V`009medium_font : font('-Adobe-Courier-Bold-R-Normal--12-120-75-75-M-70-ISO88
X59-1');
V`009small_font  : font('-Adobe-Courier-Bold-R-Normal--10-100-75-75-M-60-ISO88
X59-1');
X
Xinclude file 'perf_meter_const.uil';
X
Xobject perf_meter_main : main_window `123
X    arguments `123
X`009width = 180;
X`009height = 300;
X    `125;
X    controls `123
X`009menu_bar main_menu_bar;
X`009attached_dialog_box main_dialog;
X    `125;
X`125;
X
Xobject main_menu_bar : menu_bar `123
X    arguments `123
X`009orientation = DwtOrientationHorizontal;
X`009spacing`009= 15;
X    `125;
X    controls `123
X`009pulldown_entry file_menu_entry;
X    `125;
X    callbacks `123
X`009create = procedure create_proc (pfm_menu_bar);
X    `125;
X`125;
X
Xobject`009file_menu_entry : pulldown_entry `123
X    arguments `123label_label = 'File';`125;
X    controls `123pulldown_menu file_menu;`125;
X`125;
X
Xobject file_menu : pulldown_menu `123
X    controls `123push_button exit_button;`125;
X`125;
X
Xobject exit_button : push_button `123
X    arguments `123label_label = 'Exit';`125;
X    callbacks `123activate = procedure activate_proc (pfm_exit_button);`125;
X`125;
X
Xobject main_dialog : attached_dialog_box `123
X    controls `123
X        attached_dialog_box cpu_box;
X        attached_dialog_box state_box;
X        attached_dialog_box pagefaults_box;
X        attached_dialog_box pageio_box;
X        attached_dialog_box freepages_box;
X        attached_dialog_box modpages_box;
X        attached_dialog_box device_0_box;
X        attached_dialog_box device_1_box;
X        attached_dialog_box device_2_box;
X        attached_dialog_box device_3_box;
X    `125;
X`125;
X
X
Xobject cpu_box : attached_dialog_box `123
X    arguments `123 border_width = 0; `125;
X    controls `123
X        window cpu_graph;
X        label cpu_graph_label;
X    `125;
X`125;
X
Xobject cpu_graph : window `123
X    arguments `123 height = 100; width = 101; `125;
X    callbacks `123 create = procedure create_proc (pfm_cpu_graph); `125;
X`125;
X
Xobject cpu_graph_label : label `123
X    arguments `123
X        font_argument = medium_font;
X        label_label = 'CPU Busy';
X        adb_top_attachment = DwtAttachWidget;
X        adb_top_widget = window cpu_graph;
X    `125;
X`125;
X
Xobject state_box : attached_dialog_box `123
X    arguments `123
X`009units = DwtPixelUnits;
X        border_width = 0;
X        height = 120;
X        width = 70;
X        adb_left_attachment = DwtAttachWidget;
X        adb_left_widget = attached_dialog_box cpu_box;
X    `125;
X    controls `123
X        window  state_graph;
X        label   c_mode;
X        label   n_mode;
X        label   u_mode;
X        label   s_mode;
X        label   e_mode;
X        label   k_mode;
X        label   i_mode;
X    `125;
X`125;
X
Xobject state_graph : window `123
X    arguments `123
X        height = 100; width = 70;
X    `125;
X    callbacks `123
X        create = procedure create_proc (pfm_state_graph);
X    `125;
X`125;
X`032
Xobject c_mode : label `123
X    arguments `123
X`009font_argument = medium_font;
X`009label_label = 'C';
X        adb_top_attachment = DwtAttachWidget;
X        adb_top_widget = window state_graph;
X`009x = 1;
X    `125;
X`125;
X
Xobject n_mode : label `123
X    arguments `123
X`009font_argument = medium_font;
X`009label_label = 'N';
X        adb_top_attachment = DwtAttachWidget;
X        adb_top_widget = window state_graph;
X`009x = 11;
X    `125;
X`125;
X
Xobject u_mode : label `123
X    arguments `123
X`009font_argument = medium_font;
X`009label_label = 'U';
X        adb_top_attachment = DwtAttachWidget;
X        adb_top_widget = window state_graph;
X`009x = 21;
X    `125;
X`125;
X
Xobject s_mode : label `123
X    arguments `123
X`009font_argument = medium_font;
X`009label_label = 'S';
X        adb_top_attachment = DwtAttachWidget;
X        adb_top_widget = window state_graph;
X`009x = 31;
X    `125;
X`125;
X
Xobject e_mode : label `123
X    arguments `123
X`009font_argument = medium_font;
X`009label_label = 'E';
X        adb_top_attachment = DwtAttachWidget;
X        adb_top_widget = window state_graph;
X`009x = 41;
X    `125;
X`125;
X
Xobject k_mode : label `123
X    arguments `123
X`009font_argument = medium_font;
X`009label_label = 'K';
X        adb_top_attachment = DwtAttachWidget;
X        adb_top_widget = window state_graph;
X`009x = 51;
X    `125;
X`125;
X
Xobject i_mode : label `123
X    arguments `123
X`009font_argument = medium_font;
X`009label_label = 'I';
X        adb_top_attachment = DwtAttachWidget;
X        adb_top_widget = window state_graph;
X`009x = 61;
X    `125;
X`125;
X
Xobject pagefaults_box : attached_dialog_box `123
X    arguments `123
X`009units = DwtPixelUnits;
X        border_width = 0;
X        adb_top_attachment = DwtAttachWidget;
X        adb_top_widget = attached_dialog_box cpu_box;
X    `125;
X    controls `123
X        label pagefaults;
X        label pagefaults_total;
X        label pagefaults_delta;
X    `125;
X`125;
X
Xobject pagefaults : label `123
X    arguments `123
X        font_argument = medium_font;
X`009label_label = 'PageFault'; /*  xxxxxxxx  xxxx'; */
X        height = 15;
X    `125;
X`125;
X`032
Xobject pagefaults_total : label `123
X    arguments `123
X        font_argument = medium_font;
X`009label_label = ' xxxxxxxx'; /*  xxxx'; */
X        height = 15;
X        adb_left_attachment = DwtAttachWidget;
X        adb_left_widget = label pagefaults;
X    `125;
X    callbacks `123
X        create = procedure create_proc (pfm_pagefaults_total);
X    `125;
X`125;
X`032
Xobject pagefaults_delta : label `123
X    arguments `123
X        font_argument = medium_font;
X`009label_label = '  xxxx';
X        height = 15;
X        adb_left_attachment = DwtAttachWidget;
X        adb_left_widget = label pagefaults_total;
X    `125;
X    callbacks `123
X        create = procedure create_proc (pfm_pagefaults_delta);
X    `125;
X`125;
X`032
X
Xobject pageio_box : attached_dialog_box `123
X    arguments `123
X`009units = DwtPixelUnits;
X        border_width = 0;
X        adb_top_attachment = DwtAttachWidget;
X        adb_top_widget = attached_dialog_box pagefaults_box;
X    `125;
X    controls `123
X        label pageio;
X        label pageio_total;
X        label pageio_delta;
X    `125;
X`125;
X`032
Xobject pageio : label `123
X    arguments `123
X        font_argument = medium_font;
X`009label_label = 'Paging IO'; /*  xxxxxxxx  xxxx'; */
X        height = 15;
X    `125;
X`125;
X`032
Xobject pageio_total : label `123
X    arguments `123
X        font_argument = medium_font;
X        height = 15;
X`009label_label = ' xxxxxxxx'; /*  xxxx'; */
X        adb_left_attachment = DwtAttachWidget;
X        adb_left_widget = label pageio;
X    `125;
X    callbacks `123
X        create = procedure create_proc (pfm_pageio_total);
X    `125;
X`125;
X`032
Xobject pageio_delta : label `123
X    arguments `123
X        font_argument = medium_font;
X`009label_label = '  xxxx';
X        height = 15;
X        adb_left_attachment = DwtAttachWidget;
X        adb_left_widget = label pageio_total;
X    `125;
X    callbacks `123
X        create = procedure create_proc (pfm_pageio_delta);
X    `125;
X`125;
X`032
X
Xobject freepages_box : attached_dialog_box `123
X    arguments `123
X`009units = DwtPixelUnits;
X        border_width = 0;
X        adb_top_attachment = DwtAttachWidget;
X        adb_top_widget = attached_dialog_box pageio_box;
X    `125;
X    controls `123
X        label freepages;
X        label freepages_total;
X        label freepages_delta;
X    `125;
X`125;
X
Xobject freepages : label `123
X    arguments `123
X        font_argument = medium_font;
X`009label_label = 'FreePages'; /*  xxxxxxxx  xxxx'; */
X        height = 15;
X    `125;
X`125;
X
Xobject freepages_total : label `123
X    arguments `123
X        font_argument = medium_font;
X`009label_label = ' xxxxxxxx'; /*  xxxx'; */
X        height = 15;
X        adb_left_attachment = DwtAttachWidget;
X        adb_left_widget = label freepages;
X    `125;
X    callbacks `123
X        create = procedure create_proc (pfm_freepages_total);
X    `125;
X`125;
X
Xobject freepages_delta : label `123
X    arguments `123
X        font_argument = medium_font;
X`009label_label = '  xxxx';
X        height = 15;
X        adb_left_attachment = DwtAttachWidget;
X        adb_left_widget = label freepages_total;
X    `125;
X    callbacks `123
X        create = procedure create_proc (pfm_freepages_delta);
X    `125;
X`125;
X`032
X
Xobject modpages_box : attached_dialog_box `123
X    arguments `123
X`009units = DwtPixelUnits;
X        border_width = 0;
X        adb_top_attachment = DwtAttachWidget;
X        adb_top_widget = attached_dialog_box freepages_box;
X    `125;
X    controls `123
X        label modpages;
X        label modpages_total;
X        label modpages_delta;
X    `125;
X`125;
X`032
Xobject modpages : label `123
X    arguments `123
X        font_argument = medium_font;
X`009label_label = 'ModfyPage'; /*  xxxxxxxx  xxxx'; */
X        height = 15;
X    `125;
X`125;
X
Xobject modpages_total : label `123
X    arguments `123
X        font_argument = medium_font;
X`009label_label = ' xxxxxxxx'; /*  xxxx'; */
X        height = 15;
X        adb_left_attachment = DwtAttachWidget;
X        adb_left_widget = label modpages;
X    `125;
X    callbacks `123
X        create = procedure create_proc (pfm_modpages_total);
X    `125;
X`125;
X`032
Xobject modpages_delta : label `123
X    arguments `123
X        font_argument = medium_font;
X`009label_label = '  xxxx';
X        height = 15;
X        adb_left_attachment = DwtAttachWidget;
X        adb_left_widget = label modpages_total;
X    `125;
X    callbacks `123
X        create = procedure create_proc (pfm_modpages_delta);
X    `125;
X`125;
X`032
Xobject device_0_box: attached_dialog_box `123
X    arguments `123
X`009units = DwtPixelUnits;
X        border_width = 0;
X        adb_top_attachment = DwtAttachWidget;
X        adb_top_widget = attached_dialog_box modpages_box;
X    `125;
X    controls `123
X        label device_0_iocount_name;
X        label device_0_iocount_total;
X        label device_0_iocount_delta;
X    `125;
X`125;
X
Xobject device_0_iocount_name : label `123
X    arguments `123
X`009font_argument = medium_font;
X`009label_label = '         '; /*  xxxxxxxx  xxxx'; */
X        height = 15;
X    `125;
X    callbacks `123
X`009create = procedure create_proc (pfm_device_0_iocount_name);
X    `125;
X`125;
X
Xobject device_0_iocount_total : label `123
X    arguments `123
X`009font_argument = medium_font;
X`009label_label = '         '; /*  xxxx'; */
X        height = 15;
X        adb_left_attachment = DwtAttachWidget;
X        adb_left_widget = label device_0_iocount_name;
X    `125;
X    callbacks `123
X`009create = procedure create_proc (pfm_device_0_iocount_total);
X    `125;
X`125;
X
Xobject device_0_iocount_delta : label `123
X    arguments `123
X`009font_argument = medium_font;
X`009label_label = '       ';
X        height = 15;
X        adb_left_attachment = DwtAttachWidget;
X        adb_left_widget = label device_0_iocount_total;
X    `125;
X    callbacks `123
X        create = procedure create_proc (pfm_device_0_iocount_delta);
X    `125;
X`125;
X
Xobject device_1_box: attached_dialog_box `123
X    arguments `123
X`009units = DwtPixelUnits;
X        border_width = 0;
X        adb_top_attachment = DwtAttachWidget;
X        adb_top_widget = attached_dialog_box device_0_box;
X    `125;
X    controls `123
X        label device_1_iocount_name;
X        label device_1_iocount_total;
X        label device_1_iocount_delta;
X    `125;
X`125;
X
Xobject device_1_iocount_name : label `123
X    arguments `123                       `032
X`009font_argument = medium_font;
X`009label_label = '         '; /*  xxxxxxxx  xxxx'; */
X        height = 15;
X    `125;
X    callbacks `123
X`009create = procedure create_proc (pfm_device_1_iocount_name);
X    `125;
X`125;
X
Xobject device_1_iocount_total : label `123
X    arguments `123
X`009font_argument = medium_font;
X`009label_label = '         '; /*  xxxx'; */
X        height = 15;
X        adb_left_attachment = DwtAttachWidget;
X        adb_left_widget = label device_1_iocount_name;
X    `125;
X    callbacks `123
X`009create = procedure create_proc (pfm_device_1_iocount_total);
X    `125;
X`125;
X
Xobject device_1_iocount_delta : label `123
X    arguments `123
X`009font_argument = medium_font;
X`009label_label = '       ';
X        height = 15;
X        adb_left_attachment = DwtAttachWidget;
X        adb_left_widget = label device_1_iocount_total;
X    `125;
X    callbacks `123
X        create = procedure create_proc (pfm_device_1_iocount_delta);
X    `125;
X`125;
X
X
Xobject device_2_box: attached_dialog_box `123
X    arguments `123
X`009units = DwtPixelUnits;
X        border_width = 0;
X        adb_top_attachment = DwtAttachWidget;
X        adb_top_widget = attached_dialog_box device_1_box;
X    `125;
X    controls `123
X        label device_2_iocount_name;
X        label device_2_iocount_total;
X        label device_2_iocount_delta;
X    `125;
X`125;
X
Xobject device_2_iocount_name : label `123
X    arguments `123
X`009font_argument = medium_font;
X`009label_label = '         '; /*  xxxxxxxx  xxxx'; */
X        height = 15;
X    `125;
X    callbacks `123
X`009create = procedure create_proc (pfm_device_2_iocount_name);
X    `125;
X`125;
X
Xobject device_2_iocount_total : label `123
X    arguments `123
X`009font_argument = medium_font;
X`009label_label = '         '; /*  xxxx'; */
X        height = 15;
X        adb_left_attachment = DwtAttachWidget;
X        adb_left_widget = label device_2_iocount_name;
X    `125;
X    callbacks `123
X`009create = procedure create_proc (pfm_device_2_iocount_total);
X    `125;
X`125;
X
Xobject device_2_iocount_delta : label `123
X    arguments `123
X`009font_argument = medium_font;
X`009label_label = '       ';
X        height = 15;
X        adb_left_attachment = DwtAttachWidget;
X        adb_left_widget = label device_2_iocount_total;
X    `125;
X    callbacks `123
X        create = procedure create_proc (pfm_device_2_iocount_delta);
X    `125;
X`125;
X
Xobject device_3_box: attached_dialog_box `123
X    arguments `123
X`009units = DwtPixelUnits;
X        border_width = 0;
X        adb_top_attachment = DwtAttachWidget;
X        adb_top_widget = attached_dialog_box device_2_box;
X    `125;
X    controls `123
X        label device_3_iocount_name;
X        label device_3_iocount_total;
X        label device_3_iocount_delta;
X    `125;
X`125;
X
Xobject device_3_iocount_name : label `123
X    arguments `123
X`009font_argument = medium_font;
X`009label_label = '         '; /*  xxxxxxxx  xxxx'; */
X        height = 15;
X    `125;
X    callbacks `123
X       `009create = procedure create_proc (pfm_device_3_iocount_name);
X    `125;
X`125;
X
Xobject device_3_iocount_total : label `123
X    arguments `123
X`009font_argument = medium_font;
X`009label_label = '         '; /*  xxxx'; */
X        height = 15;
X        adb_left_attachment = DwtAttachWidget;
X        adb_left_widget = label device_3_iocount_name;
X    `125;
X    callbacks `123
X`009create = procedure create_proc (pfm_device_3_iocount_total);
X    `125;
X`125;
X
Xobject device_3_iocount_delta : label `123
X    arguments `123
X`009font_argument = medium_font;
X`009label_label = '       ';
X        height = 15;
X        adb_left_attachment = DwtAttachWidget;
X        adb_left_widget = label device_3_iocount_total;
X    `125;
X    callbacks `123
X        create = procedure create_proc (pfm_device_3_iocount_delta);
X    `125;
X`125;
X
Xend module;
$ GOSUB UNPACK_FILE
$ EXIT

