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

  1. /*-------------------------------------------------------
  2.    BIGJOB2.C -- Timer 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. #define ID_TIMER 1
  13.  
  14. INT main (VOID)
  15.      {
  16.      static CHAR szClassName [] = "BigJob2" ;
  17.      HMQ         hmq ;
  18.      HWND        hwndFrame, hwndClient ;
  19.      QMSG        qmsg ;
  20.      ULONG       flCreateFlags = FCF_SIZEBORDER|FCF_TITLEBAR|FCF_SYSMENU|
  21.                      FCF_MINMAX|FCF_MENU|FCF_SHELLPOSITION;
  22.  
  23.      hab = WinInitialize (NULL) ;
  24.      hmq = WinCreateMsgQueue (hab, 0) ;
  25.  
  26.      WinRegisterClass (hab, szClassName, ClientWndProc,
  27.                             CS_SYNCPAINT | CS_SIZEREDRAW, 0) ;
  28.  
  29.      hwndFrame = WinCreateStdWindow (HWND_DESKTOP,
  30.                     WS_VISIBLE, &flCreateFlags,
  31.                     szClassName, "BigJob Demo No. 2",
  32.                     0L, NULL, ID_RESOURCE, &hwndClient) ;
  33.  
  34.      while (WinGetMsg (hab, &qmsg, NULL, 0, 0))
  35.           WinDispatchMsg (hab, &qmsg) ;
  36.  
  37.      WinDestroyWindow (hwndFrame) ;
  38.      WinDestroyMsgQueue (hmq) ;
  39.      WinTerminate (hab) ;
  40.  
  41.      return 0 ;
  42.      }
  43.  
  44. MRESULT EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1,
  45.                                                      MPARAM mp2)
  46.      {
  47.      static double A ;
  48.      static SHORT  i, iCalcRep, iCurrentRep = IDM_10 ;
  49.      static SHORT  iStatus = STATUS_READY ;
  50.      static ULONG  lElapsedTime ;
  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.  
  69.                          if (!WinStartTimer (hab, hwnd, ID_TIMER, 1))
  70.                               {
  71.                               WinAlarm (HWND_DESKTOP, WA_ERROR) ;
  72.                               break ;
  73.                               }
  74.  
  75.                          EnableMenuItem (hwnd, IDM_START, FALSE) ;
  76.                          EnableMenuItem (hwnd, IDM_ABORT, TRUE) ;
  77.  
  78.                          iStatus = STATUS_WORKING ;
  79.                          WinInvalidateRect (hwnd, NULL, FALSE) ;
  80.  
  81.                          iCalcRep = iCurrentRep ;
  82.                          lElapsedTime = WinGetCurrentTime (hab) ;
  83.  
  84.                          A = 1.0 ;
  85.                          i = 0 ;
  86.           
  87.                          break ;
  88.  
  89.                     case IDM_ABORT:
  90.                          WinStopTimer (hab, hwnd, ID_TIMER) ;
  91.  
  92.                          iStatus = STATUS_READY ;
  93.                          WinInvalidateRect (hwnd, NULL, FALSE) ;
  94.  
  95.                          EnableMenuItem (hwnd, IDM_START, TRUE) ;
  96.                          EnableMenuItem (hwnd, IDM_ABORT, FALSE) ;
  97.                          break ;
  98.      
  99.                     default:
  100.                          break ;
  101.                     }
  102.                break ;
  103.  
  104.           case WM_TIMER:
  105.  
  106.                A = Savage (A) ;
  107.  
  108.                if (++i == iCalcRep)
  109.                     {
  110.                     lElapsedTime = WinGetCurrentTime (hab) -
  111.                                         lElapsedTime ;
  112.  
  113.                     WinStopTimer (hab, hwnd, ID_TIMER) ;
  114.  
  115.                     iStatus = STATUS_DONE ;
  116.                     WinInvalidateRect (hwnd, NULL, FALSE) ;
  117.  
  118.                     EnableMenuItem (hwnd, IDM_START, TRUE) ;
  119.                     EnableMenuItem (hwnd, IDM_ABORT, FALSE) ;
  120.                     }
  121.                break ;
  122.  
  123.           case WM_PAINT:
  124.                PaintWindow (hwnd, iStatus, iCalcRep, lElapsedTime) ;
  125.                break ;
  126.  
  127.           default:
  128.                return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
  129.           }
  130.      return 0L ;
  131.      }
  132.