home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / BIGJOB.ZIP / BIGJOB1.C < prev    next >
C/C++ Source or Header  |  1989-03-27  |  3KB  |  110 lines

  1. /*-------------------------------------------------------
  2.    BIGJOB1.C -- Naive approach to lengthy processing job
  3.  --------------------------------------------------------*/
  4.  
  5. #define INCL_WIN
  6.  
  7. #include <os2.h>
  8. #include <math.h>
  9. #include <stdio.h>
  10. #include "bigjob.h"
  11.  
  12. INT main (VOID)
  13.      {
  14.      static CHAR szClassName [] = "BigJob1" ;
  15.      HMQ         hmq ;
  16.      HWND        hwndFrame, hwndClient ;
  17.      QMSG        qmsg ;
  18.      ULONG       flCreateFlags ;
  19.  
  20.      hab = WinInitialize (NULL) ;
  21.      hmq = WinCreateMsgQueue (hab, 0) ;
  22.  
  23.      WinRegisterClass (hab, szClassName, ClientWndProc,
  24.                             CS_SYNCPAINT | CS_SIZEREDRAW, 0 ) ;
  25.  
  26.      flCreateFlags = FCF_SIZEBORDER|FCF_TITLEBAR|FCF_SYSMENU|FCF_MINMAX|
  27.          FCF_MENU|FCF_SHELLPOSITION;
  28.      hwndFrame = WinCreateStdWindow (HWND_DESKTOP,
  29.                     WS_VISIBLE, &flCreateFlags,
  30.                     szClassName, "BIGJOB Demo No. 1",
  31.                     0L, NULL, ID_RESOURCE, &hwndClient) ;
  32.  
  33.      while (WinGetMsg (hab, &qmsg, NULL, 0, 0))
  34.           WinDispatchMsg (hab, &qmsg) ;
  35.  
  36.      WinDestroyWindow (hwndFrame) ;
  37.      WinDestroyMsgQueue (hmq) ;
  38.      WinTerminate (hab) ;
  39.  
  40.      return 0 ;
  41.      }
  42.  
  43. MRESULT EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1,
  44.                                                      MPARAM mp2)
  45.      {
  46.      static SHORT iCalcRep, iCurrentRep = IDM_10 ;
  47.      static SHORT iStatus = STATUS_READY ;
  48.      static ULONG lElapsedTime ;
  49.      double       A ;
  50.      SHORT        i ;
  51.  
  52.      switch (msg)
  53.           {
  54.           case WM_COMMAND:
  55.  
  56.                switch (LOUSHORT (mp1))
  57.                     {
  58.                     case IDM_10:
  59.                     case IDM_100:
  60.                     case IDM_1000:
  61.                     case IDM_10000:
  62.                          CheckMenuItem (hwnd, iCurrentRep, FALSE) ;
  63.                          iCurrentRep = LOUSHORT (mp1) ;
  64.                          CheckMenuItem (hwnd, iCurrentRep, TRUE) ;
  65.                          break ;
  66.  
  67.                     case IDM_START:
  68.                          EnableMenuItem (hwnd, IDM_START, FALSE) ;
  69.                          EnableMenuItem (hwnd, IDM_ABORT, TRUE) ;
  70.  
  71.                          iStatus = STATUS_WORKING ;
  72.                          WinInvalidateRect (hwnd, NULL, FALSE) ;
  73.  
  74.                          iCalcRep = iCurrentRep ;
  75.                          lElapsedTime = WinGetCurrentTime (hab) ;
  76.  
  77.                          for (A = 1.0, i = 0 ; i < iCalcRep ; i++)
  78.                               A = Savage (A) ;
  79.  
  80.                          lElapsedTime = WinGetCurrentTime (hab) -
  81.                                         lElapsedTime ;
  82.  
  83.                          iStatus = STATUS_DONE ;
  84.                          WinInvalidateRect (hwnd, NULL, FALSE) ;
  85.  
  86.                          EnableMenuItem (hwnd, IDM_START, TRUE) ;
  87.                          EnableMenuItem (hwnd, IDM_ABORT, FALSE) ;
  88.                          break ;
  89.  
  90.                     case IDM_ABORT:
  91.  
  92.                               /* Not much we can do here */
  93.  
  94.                          break ;
  95.  
  96.                     default:
  97.                          break ;
  98.                     }
  99.                break ;
  100.  
  101.           case WM_PAINT:
  102.                PaintWindow (hwnd, iStatus, iCalcRep, lElapsedTime) ;
  103.                break ;
  104.  
  105.           default:
  106.                return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
  107.           }
  108.      return 0L ;
  109.      }
  110.