home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 10 / 10.iso / l / l360 / 3.ddi / WINDOWS.@EM / SYSMETS.CBL next >
Encoding:
Text File  |  1991-04-08  |  20.6 KB  |  511 lines

  1.       $SET ANS85 NOOSVS MF DEFAULTBYTE"00"
  2.       ****************************************************************
  3.       *
  4.       *                (C) Micro Focus Ltd. 1989,1991
  5.       *
  6.       *                        SYSMETS.CBL
  7.       *
  8.       *   COBOL Version of the SYSMETS program in the book
  9.       *  "Programming Windows" by Charles Petzold.
  10.       *
  11.       ****************************************************************
  12.  
  13.        SPECIAL-NAMES.
  14.            CALL-CONVENTION 3 IS WinApi
  15.            CALL-CONVENTION 4 IS System-Call.
  16.  
  17.        DATA DIVISION.
  18.        WORKING-STORAGE SECTION.
  19.  
  20.        COPY "WINDOWS.78".
  21.        COPY "SYSMETS.CPY".
  22.  
  23.        01 Wndproc-Ptr                  PROCEDURE-POINTER.
  24.        01 Classname                    PIC X(20)
  25.                                        VALUE "Sysmets" & X"00".
  26.  
  27.  
  28.        01 Wndclass.
  29.         03 Wnd-Style                   PIC 9(4) COMP-5.
  30.         03 Wnd-Lpfnwndproc             PROCEDURE-POINTER.
  31.         03 Wnd-Cbclsextra              PIC S9(4) COMP-5.
  32.         03 Wnd-Cbwndextra              PIC S9(4) COMP-5.
  33.         03 Wnd-Hinstance               PIC 9(4) COMP-5.
  34.         03 Wnd-Hicon                   PIC 9(4) COMP-5.
  35.         03 Wnd-Hcursor                 PIC 9(4) COMP-5.
  36.         03 Wnd-Hbrbackground           PIC 9(4) COMP-5.
  37.         03 Wnd-Lpszmenuname            POINTER.
  38.         03 Wnd-Lpszclassname           POINTER.
  39.  
  40.        01 Msg.
  41.         03 Msg-Hwnd                    PIC 9(4) COMP-5.
  42.         03 Msg-Message                 PIC 9(4) COMP-5.
  43.         03 Msg-Wparam                  PIC 9(4) COMP-5.
  44.         03 Msg-Lparam                  PIC S9(9) COMP-5.
  45.         03 Msg-Time                    PIC 9(9) COMP-5.
  46.         03 Msg-Pt.
  47.          05 Msg-Pt-X                   PIC 9(4) COMP-5.
  48.          05 Msg-Pt-Y                   PIC 9(4) COMP-5.
  49.  
  50.        01 Work-Data.
  51.         03 Bool                        PIC 9(4) COMP-5 VALUE 1.
  52.         03 Window-Type                 PIC X(4) COMP-5.
  53.         03 C-1                         PIC X(2) COMP-5 VALUE 1.
  54.  
  55.        01 Wndproc-Data.
  56.         03 CxChar                      PIC S9(4) COMP-5.
  57.         03 CxCaps                      PIC S9(4) COMP-5.
  58.         03 CyChar                      PIC S9(4) COMP-5.
  59.         03 CxClient                    PIC S9(4) COMP-5.
  60.         03 CyClient                    PIC S9(4) COMP-5.
  61.         03 MaxWidth                    PIC S9(4) COMP-5.
  62.         03 VscrollPos                  PIC S9(4) COMP-5.
  63.         03 VscrollMax                  PIC S9(4) COMP-5.
  64.         03 HscrollPos                  PIC S9(4) COMP-5.
  65.         03 HscrollMax                  PIC S9(4) COMP-5.
  66.  
  67.        LOCAL-STORAGE SECTION.
  68.  
  69.        01 Buffer.
  70.         03 Buffer-Char                 PIC X OCCURS 10.
  71.  
  72.        01 Hdc                          PIC 9(4) COMP-5.
  73.  
  74.        01 Work-Local-Data.
  75.         03 Longresult                  PIC X(4) COMP-5.
  76.         03 Hwindow                     PIC X(2) COMP-5.
  77.         03 I                           PIC S9(4) COMP-5.
  78.         03 X                           PIC S9(4) COMP-5.
  79.         03 Y                           PIC S9(4) COMP-5.
  80.         03 PaintBeg                    PIC S9(4) COMP-5.
  81.         03 PaintEnd                    PIC S9(4) COMP-5.
  82.         03 VscrollInc                  PIC S9(4) COMP-5.
  83.         03 HscrollInc                  PIC S9(4) COMP-5.
  84.         03 Temp                        PIC S9(4) COMP-5.
  85.         03 Temp2                       PIC S9(4) COMP-5.
  86.         03 Disp-Item                   PIC -Z(4)9.
  87.  
  88.        01 Ps.
  89.         03 Ps-Hdc                      PIC 9(4) COMP-5.
  90.         03 Ps-Ferase                   PIC S9(4) COMP-5.
  91.         03 Ps-Rcpaint.
  92.          05 Ps-Rcpaint-Left            PIC S9(4) COMP-5.
  93.          05 Ps-Rcpaint-Top             PIC S9(4) COMP-5.
  94.          05 Ps-Rcpaint-Right           PIC S9(4) COMP-5.
  95.          05 Ps-Rcpaint-Bottom          PIC S9(4) COMP-5.
  96.         03 Ps-Frestore                 PIC S9(4) COMP-5.
  97.         03 Ps-Fincupdate               PIC S9(4) COMP-5.
  98.         03 FILLER OCCURS 16.
  99.          05 Ps-Rgbreserved             PIC X COMP-X.
  100.  
  101.         03 Tm.
  102.          05 Tm-Tmheight                PIC S9(4) COMP-5.
  103.          05 Tm-Tmascent                PIC S9(4) COMP-5.
  104.          05 Tm-Tmdescent               PIC S9(4) COMP-5.
  105.          05 Tm-Tminternalleading       PIC S9(4) COMP-5.
  106.          05 Tm-Tmexternalleading       PIC S9(4) COMP-5.
  107.          05 Tm-Tmavecharwidth          PIC S9(4) COMP-5.
  108.          05 Tm-Tmmaxcharwidth          PIC S9(4) COMP-5.
  109.          05 Tm-Tmweight                PIC S9(4) COMP-5.
  110.          05 Tm-Tmitalic                PIC X COMP-X.
  111.          05 Tm-Tmunderlined            PIC X COMP-X.
  112.          05 Tm-Tmstruckout             PIC X COMP-X.
  113.          05 Tm-Tmfirstchar             PIC X COMP-X.
  114.          05 Tm-Tmlastchar              PIC X COMP-X.
  115.          05 Tm-Tmdefaultchar           PIC X COMP-X.
  116.          05 Tm-Tmbreakchar             PIC X COMP-X.
  117.          05 Tm-Tmpitchandfamily        PIC X COMP-X.
  118.          05 Tm-Tmcharset               PIC X COMP-X.
  119.          05 Tm-Tmoverhang              PIC S9(4) COMP-5.
  120.          05 Tm-Tmdigitizedaspectx      PIC S9(4) COMP-5.
  121.          05 Tm-Tmdigitizedaspecty      PIC S9(4) COMP-5.
  122.  
  123.        LINKAGE SECTION.
  124.  
  125.        01 Hwnd                         PIC X(2) COMP-5.
  126.        01 Imessage                     PIC 9(4) COMP-5.
  127.        01 Wparam                       PIC 9(4) COMP-5.
  128.        01 Lparam                       PIC S9(9) COMP-5.
  129.        01 FILLER REDEFINES Lparam.
  130.         03 Lparam-Loword               PIC S9(4) COMP-5.
  131.         03 Lparam-Hiword               PIC S9(4) COMP-5.
  132.        01 Hinst                        PIC XX COMP-5.
  133.        01 Hprevinstance                PIC XX COMP-5.
  134.        01 Lpszcmdline                  PIC X(120).
  135.        01 Ncmdshow                     PIC XX COMP-5.
  136.  
  137.       ***************************************************************
  138.       *  Procedure Division
  139.       ***************************************************************
  140.  
  141.        PROCEDURE DIVISION WinApi USING  BY VALUE Hinst
  142.                                  BY VALUE Hprevinstance
  143.                                  BY REFERENCE Lpszcmdline
  144.                                  BY VALUE Ncmdshow.
  145.        Mywinmain SECTION.
  146.            IF Hprevinstance = 0
  147.              ADD Cs-Hredraw CS-Vredraw GIVING Wnd-Style
  148.              SET Wnd-Lpfnwndproc TO ENTRY "WndProc"
  149.              MOVE 0 TO Wnd-Cbclsextra
  150.              MOVE 0 TO Wnd-Cbwndextra
  151.              MOVE Hinst TO Wnd-Hinstance
  152.              CALL WinApi "__LoadIcon" USING
  153.                  BY VALUE C-Null SIZE 2
  154.                  BY VALUE Idi-Application SIZE 4
  155.                RETURNING Wnd-Hicon
  156.              CALL WinApi "__LoadCursor" USING
  157.                  BY VALUE C-Null SIZE 2
  158.                  BY VALUE Idc-Arrow SIZE 4
  159.                RETURNING Wnd-Hcursor
  160.              CALL WinApi "__GetStockObject" USING
  161.                  BY VALUE White-Brush SIZE 2
  162.                RETURNING Wnd-Hbrbackground
  163.              SET Wnd-Lpszmenuname TO Null
  164.              SET Wnd-Lpszclassname TO ADDRESS OF Classname
  165.              CALL WinApi "__RegisterClass" USING Wndclass
  166.            END-IF
  167.  
  168.            MOVE Ws-Overlappedwindow TO Window-Type
  169.            ADD Ws-Vscroll TO Window-Type
  170.            ADD Ws-Hscroll TO Window-Type
  171.            CALL WinApi "__CreateWindow"
  172.              USING BY REFERENCE Classname
  173.                    BY REFERENCE "System Metrics" & X"00"
  174.                    BY VALUE Window-Type
  175.                    BY VALUE Cw-Usedefault SIZE 2
  176.                    BY VALUE Cw-Usedefault SIZE 2
  177.                    BY VALUE Cw-Usedefault SIZE 2
  178.                    BY VALUE Cw-Usedefault SIZE 2
  179.                    BY VALUE C-Null SIZE 2
  180.                    BY VALUE C-Null SIZE 2
  181.                    BY VALUE Hinst
  182.                    BY VALUE C-Null SIZE 4
  183.              RETURNING Hwindow
  184.            CALL WinApi "__ShowWindow" USING BY VALUE Hwindow
  185.                                             BY VALUE Ncmdshow
  186.            CALL WinApi "__UpdateWindow" USING BY VALUE Hwindow
  187.  
  188.            PERFORM UNTIL Bool = 0
  189.              CALL WinApi "__GetMessage" USING BY REFERENCE Msg
  190.                                               BY VALUE C-Null SIZE 2
  191.                                               BY VALUE 0 SIZE 2
  192.                                               BY VALUE 0 SIZE 2
  193.                RETURNING Bool
  194.              IF Bool NOT = 0
  195.                CALL WinApi "__TranslateMessage" USING BY REFERENCE Msg
  196.                CALL WinApi "__DispatchMessage" USING BY REFERENCE Msg
  197.              END-IF
  198.            END-PERFORM
  199.            EXIT PROGRAM RETURNING Msg-Wparam
  200.            STOP RUN.
  201.  
  202.       ***************************************************************
  203.       *  Window Procedure
  204.       ***************************************************************
  205.  
  206.        Windowprocedure SECTION.
  207.        ENTRY "WndProc" USING BY VALUE Hwnd
  208.                              BY VALUE Imessage
  209.                              BY VALUE Wparam
  210.                              BY VALUE Lparam.
  211.            MOVE 0 TO Longresult
  212.            EVALUATE Imessage
  213.              WHEN Wm-Create
  214.                CALL WinApi "__GetDc" USING BY VALUE Hwnd
  215.                  RETURNING Hdc
  216.                CALL WinApi "__GetTextMetrics"
  217.                    USING BY VALUE Hdc
  218.                          BY REFERENCE Tm
  219.                MOVE Tm-TmAveCharWidth TO CxChar
  220.                CALL System-Call "CBL_AND"
  221.                    USING BY REFERENCE C-1
  222.                          BY REFERENCE Tm-TmPitchAndFamily
  223.                          BY VALUE 2 SIZE 4
  224.                MOVE CxChar TO CxCaps
  225.                IF Tm-TmPitchAndFamily = 1
  226.                  DIVIDE 2 INTO CxCaps
  227.                  MULTIPLY 3 BY CxCaps
  228.                END-IF
  229.                MOVE Tm-TmHeight TO CyChar
  230.                ADD Tm-TmExternalLeading TO CyChar
  231.                CALL WinApi "__ReleaseDc" USING BY VALUE Hwnd
  232.                                                BY VALUE Hdc
  233.                COMPUTE MaxWidth = 40 * CxChar + 18 * CxCaps
  234.  
  235.              WHEN Wm-Size
  236.                MOVE Lparam-Hiword TO CyClient
  237.                MOVE Lparam-Loword TO CxClient
  238.                COMPUTE VscrollMax = NumLines + 2 - CyClient / CyChar
  239.                IF VscrollMax < 0
  240.                  MOVE 0 TO VscrollMax
  241.                END-IF
  242.                IF VscrollMax < VscrollPos
  243.                  MOVE VscrollMax TO VscrollPos
  244.                END-IF
  245.                CALL WinApi "__SetScrollRange"
  246.                    USING BY VALUE Hwnd
  247.                          BY VALUE Sb-Vert SIZE 2
  248.                          BY VALUE 0 SIZE 2
  249.                          BY VALUE VscrollMax
  250.                          BY VALUE C-False SIZE 2
  251.                CALL WinApi "__SetScrollPos"
  252.                    USING BY VALUE Hwnd
  253.                          BY VALUE Sb-Vert SIZE 2
  254.                          BY VALUE VscrollPos
  255.                          BY VALUE C-True SIZE 2
  256.                COMPUTE HscrollMax = 2 + (MaxWidth - CxClient) / CxChar
  257.                IF HscrollMax < 0
  258.                  MOVE 0 TO HscrollMax
  259.                END-IF
  260.                IF HscrollMax < HscrollPos
  261.                  MOVE HscrollMax TO HscrollPos
  262.                END-IF
  263.                CALL WinApi "__SetScrollRange"
  264.                    USING BY VALUE Hwnd
  265.                          BY VALUE Sb-Horz SIZE 2
  266.                          BY VALUE 0 SIZE 2
  267.                          BY VALUE HscrollMax
  268.                          BY VALUE C-False SIZE 2
  269.                CALL WinApi "__SetScrollPos"
  270.                    USING BY VALUE Hwnd
  271.                          BY VALUE Sb-Horz SIZE 2
  272.                          BY VALUE HscrollPos
  273.                          BY VALUE C-True SIZE 2
  274.  
  275.              WHEN Wm-Vscroll
  276.                EVALUATE Wparam
  277.                  WHEN Sb-Top
  278.                    COMPUTE VscrollInc = -VscrollPos
  279.  
  280.                  WHEN Sb-Bottom
  281.                    COMPUTE VscrollInc = VscrollMax - VscrollPos
  282.  
  283.                  WHEN Sb-Lineup
  284.                    MOVE -1 TO VscrollInc
  285.  
  286.                  WHEN Sb-Linedown
  287.                    MOVE 1 TO VscrollInc
  288.  
  289.                  WHEN Sb-Pageup
  290.                    COMPUTE VscrollInc = -CyClient / cyChar
  291.                    IF -1 < VscrollInc
  292.                      MOVE -1 TO VscrollInc
  293.                    END-IF
  294.  
  295.                  WHEN Sb-Pagedown
  296.                    COMPUTE VscrollInc = CyClient / CyChar
  297.                    IF 1 > VscrollInc
  298.                      MOVE 1 TO VscrollInc
  299.                    END-IF
  300.  
  301.                  WHEN Sb-Thumbtrack
  302.                    COMPUTE VscrollInc = Lparam-Loword - VscrollPos
  303.  
  304.                  WHEN OTHER
  305.                    MOVE 0 TO VscrollInc
  306.  
  307.                END-EVALUATE
  308.                COMPUTE Temp = VscrollMax - VscrollPos
  309.                IF VscrollInc < Temp
  310.                  MOVE VscrollInc TO Temp
  311.                END-IF
  312.                COMPUTE Temp2 = -VscrollPos
  313.                IF Temp2 > Temp
  314.                  MOVE Temp2 TO VscrollInc
  315.                ELSE
  316.                  MOVE Temp TO VscrollInc
  317.                END-IF
  318.                IF VscrollInc NOT = 0
  319.                  ADD VscrollInc TO VscrollPos
  320.                  COMPUTE Temp = -CyChar * VscrollInc
  321.                  CALL WinApi "__ScrollWindow"
  322.                      USING BY VALUE Hwnd
  323.                            BY VALUE 0 SIZE 2
  324.                            BY VALUE Temp
  325.                            BY VALUE C-Null SIZE 4
  326.                            BY VALUE C-Null SIZE 4
  327.                  CALL WinApi "__SetScrollPos"
  328.                      USING BY VALUE Hwnd
  329.                            BY VALUE Sb-Vert SIZE 2
  330.                            BY VALUE VscrollPos
  331.                            BY VALUE C-True SIZE 2
  332.                  CALL WinApi "__UpdateWindow" USING BY VALUE Hwnd
  333.                END-IF
  334.  
  335.              WHEN Wm-Hscroll
  336.                EVALUATE Wparam
  337.                  WHEN Sb-Lineup
  338.                    MOVE -1 TO HscrollInc
  339.  
  340.                  WHEN Sb-Linedown
  341.                    MOVE 1 TO HscrollInc
  342.  
  343.                  WHEN Sb-Pageup
  344.                    MOVE -8 TO HscrollInc
  345.  
  346.                  WHEN Sb-Pagedown
  347.                    MOVE 8 TO HscrollInc
  348.  
  349.                  WHEN Sb-ThumbPosition
  350.                    COMPUTE HscrollInc = Lparam-Loword - HscrollPos
  351.  
  352.                  WHEN OTHER
  353.                    MOVE 0 TO HscrollInc
  354.  
  355.                END-EVALUATE
  356.                COMPUTE Temp = HScrollMax - HscrollPos
  357.                IF HscrollInc < Temp
  358.                  MOVE HscrollInc TO Temp
  359.                END-IF
  360.                COMPUTE Temp2 = -HscrollPos
  361.                IF Temp2 > Temp
  362.                  MOVE Temp2 TO HscrollInc
  363.                ELSE
  364.                  MOVE Temp TO HscrollInc
  365.                END-IF
  366.                IF HscrollInc NOT = 0
  367.                  ADD HscrollInc TO HscrollPos
  368.                  COMPUTE Temp = -CxChar * HscrollInc
  369.                  CALL WinApi "__ScrollWindow"
  370.                      USING BY VALUE Hwnd
  371.                            BY VALUE Temp
  372.                            BY VALUE 0 SIZE 2
  373.                            BY VALUE C-Null SIZE 4
  374.                            BY VALUE C-Null SIZE 4
  375.                  CALL WinApi "__SetScrollPos"
  376.                      USING BY VALUE Hwnd
  377.                            BY VALUE Sb-Horz SIZE 2
  378.                            BY VALUE HscrollPos
  379.                            BY VALUE C-True SIZE 2
  380.                END-IF
  381.  
  382.              WHEN Wm-Keydown
  383.                EVALUATE Wparam
  384.                  WHEN Vk-Home
  385.                    CALL WinApi "__SendMessage"
  386.                        USING BY VALUE Hwnd
  387.                              BY VALUE Wm-Vscroll SIZE 2
  388.                              BY VALUE Sb-Top SIZE 2
  389.                              BY VALUE 0 SIZE 4
  390.  
  391.                  WHEN Vk-End
  392.                    CALL WinApi "__SendMessage"
  393.                        USING BY VALUE Hwnd
  394.                              BY VALUE Wm-Vscroll SIZE 2
  395.                              BY VALUE Sb-Bottom SIZE 2
  396.                              BY VALUE 0 SIZE 4
  397.  
  398.                  WHEN Vk-Prior
  399.                    CALL WinApi "__SendMessage"
  400.                        USING BY VALUE Hwnd
  401.                              BY VALUE Wm-Vscroll SIZE 2
  402.                              BY VALUE Sb-Pageup SIZE 2
  403.                              BY VALUE 0 SIZE 4
  404.  
  405.                  WHEN Vk-Next
  406.                    CALL WinApi "__SendMessage"
  407.                        USING BY VALUE Hwnd
  408.                              BY VALUE Wm-Vscroll SIZE 2
  409.                              BY VALUE Sb-Pagedown SIZE 2
  410.                              BY VALUE 0 SIZE 4
  411.  
  412.                  WHEN Vk-Up
  413.                    CALL WinApi "__SendMessage"
  414.                        USING BY VALUE Hwnd
  415.                              BY VALUE Wm-Vscroll SIZE 2
  416.                              BY VALUE Sb-Lineup SIZE 2
  417.                              BY VALUE 0 SIZE 4
  418.  
  419.                  WHEN Vk-Down
  420.                    CALL WinApi "__SendMessage"
  421.                        USING BY VALUE Hwnd
  422.                              BY VALUE Wm-Vscroll SIZE 2
  423.                              BY VALUE Sb-Linedown SIZE 2
  424.                              BY VALUE 0 SIZE 4
  425.  
  426.                  WHEN Vk-Left
  427.                    CALL WinApi "__SendMessage"
  428.                        USING BY VALUE Hwnd
  429.                              BY VALUE Wm-Hscroll SIZE 2
  430.                              BY VALUE Sb-Pageup SIZE 2
  431.                              BY VALUE 0 SIZE 4
  432.  
  433.                  WHEN Vk-Right
  434.                    CALL WinApi "__SendMessage"
  435.                        USING BY VALUE Hwnd
  436.                              BY VALUE Wm-Hscroll SIZE 2
  437.                              BY VALUE Sb-Pagedown SIZE 2
  438.                              BY VALUE 0 SIZE 4
  439.  
  440.                END-EVALUATE
  441.  
  442.              WHEN Wm-Paint
  443.                CALL WinApi "__BeginPaint" USING BY VALUE Hwnd
  444.                                                 BY REFERENCE Ps
  445.                  RETURNING Hdc
  446.                COMPUTE PaintBeg = VscrollPos +
  447.                                   Ps-RcPaint-Top / CyChar - 1
  448.                IF PaintBeg < 0
  449.                  MOVE 0 TO PaintBeg
  450.                END-IF
  451.                COMPUTE PaintEnd = VscrollPos +
  452.                                   Ps-RcPaint-Bottom / CyChar
  453.                IF NumLines < PaintEnd
  454.                  MOVE NumLines TO PaintEnd
  455.                END-IF
  456.                MOVE PaintBeg TO I
  457.                PERFORM UNTIL i NOT < PaintEnd
  458.                  COMPUTE X = CxChar * (1 - HscrollPos)
  459.                  COMPUTE Y = CyChar * (1 - VscrollPos + I)
  460.                  CALL WinApi "__TextOut"
  461.                      USING BY VALUE Hdc
  462.                            BY VALUE X
  463.                            BY VALUE Y
  464.                            BY REFERENCE Sysmetrics-Label(I + 1)
  465.                            BY VALUE Sysmetrics-Lablen(I + 1)
  466.                  COMPUTE Temp = X + 18 * CxCaps
  467.                  CALL WinApi "__TextOut"
  468.                      USING BY VALUE Hdc
  469.                            BY VALUE Temp
  470.                            BY VALUE Y
  471.                            BY REFERENCE Sysmetrics-Desc(I + 1)
  472.                            BY VALUE Sysmetrics-DescLen(I + 1)
  473.                  MOVE Ta-Right TO Temp
  474.                  ADD Ta-Top TO Temp
  475.                  CALL WinApi "__SetTextAlign"
  476.                      USING BY VALUE Hdc
  477.                            BY VALUE Temp
  478.                  CALL WinApi "__GetSystemMetrics"
  479.                      USING BY VALUE Sysmetrics-Index(I + 1)
  480.                    RETURNING Temp
  481.                  MOVE Temp TO Disp-Item
  482.                  COMPUTE Temp = X + 18 * CxCaps + 40 * CxChar
  483.                  CALL WinApi "__TextOut"
  484.                      USING BY VALUE Hdc
  485.                            BY VALUE Temp
  486.                            BY VALUE Y
  487.                            BY REFERENCE Disp-Item
  488.                            BY VALUE 6 SIZE 2
  489.                  MOVE Ta-Left TO Temp
  490.                  ADD Ta-Top TO Temp
  491.                  CALL WinApi "__SetTextAlign"
  492.                      USING BY VALUE Hdc
  493.                            BY VALUE Temp
  494.                  ADD 1 TO I
  495.                END-PERFORM
  496.                CALL WinApi "__EndPaint" USING BY VALUE Hwnd
  497.                                               BY REFERENCE Ps
  498.  
  499.              WHEN Wm-Destroy
  500.                CALL WinApi "__PostQuitMessage" USING BY VALUE 0 SIZE 2
  501.  
  502.              WHEN OTHER
  503.                CALL WinApi "__DefWindowProc"
  504.                        USING BY VALUE Hwnd
  505.                              BY VALUE Imessage
  506.                              BY VALUE Wparam
  507.                              BY VALUE Lparam
  508.                        RETURNING Longresult
  509.            END-EVALUATE
  510.            EXIT PROGRAM RETURNING Longresult.
  511.