|
|
1.1 root 1: /*-------------------------------------------------------
2: BIGJOB2.C -- Timer approach to lengthy processing job
3: --------------------------------------------------------*/
4:
5: #define INCL_WIN
6: #include <os2.h>
7: #include "bigjob.h"
8:
9: #define ID_TIMER 1
10:
11: HAB hab ;
12:
13: int main (void)
14: {
15: static CHAR szClientClass [] = "BigJob2" ;
16: static ULONG flFrameFlags = FCF_TITLEBAR | FCF_SYSMENU |
17: FCF_SIZEBORDER | FCF_MINMAX |
18: FCF_SHELLPOSITION | FCF_TASKLIST |
19: FCF_MENU ;
20: HMQ hmq ;
21: HWND hwndFrame, hwndClient ;
22: QMSG qmsg ;
23:
24: hab = WinInitialize (0) ;
25: hmq = WinCreateMsgQueue (hab, 0) ;
26:
27: WinRegisterClass (hab, szClientClass, ClientWndProc,
28: CS_SYNCPAINT | CS_SIZEREDRAW, 0) ;
29:
30: hwndFrame = WinCreateStdWindow (HWND_DESKTOP, WS_VISIBLE,
31: &flFrameFlags, szClientClass,
32: " - The Timer",
33: 0L, NULL, ID_RESOURCE, &hwndClient) ;
34:
35: WinSendMsg (hwndFrame, WM_SETICON,
36: WinQuerySysPointer (HWND_DESKTOP, SPTR_APPICON, FALSE),
37: NULL) ;
38:
39: while (WinGetMsg (hab, &qmsg, NULL, 0, 0))
40: WinDispatchMsg (hab, &qmsg) ;
41:
42: WinDestroyWindow (hwndFrame) ;
43: WinDestroyMsgQueue (hmq) ;
44: WinTerminate (hab) ;
45: return 0 ;
46: }
47:
48: MRESULT EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
49: {
50: static double A ;
51: static LONG lRep, lCalcRep,
52: lRepAmts [] = { 10, 100, 1000, 10000, 100000 } ;
53: static SHORT sCurrentRep = IDM_10 ;
54: static SHORT sStatus = STATUS_READY ;
55: static ULONG ulElapsedTime ;
56:
57: switch (msg)
58: {
59: case WM_COMMAND:
60: switch (COMMANDMSG(&msg)->cmd)
61: {
62: case IDM_10:
63: case IDM_100:
64: case IDM_1000:
65: case IDM_10000:
66: case IDM_100000:
67: CheckMenuItem (hwnd, sCurrentRep, FALSE) ;
68: sCurrentRep = COMMANDMSG(&msg)->cmd ;
69: CheckMenuItem (hwnd, sCurrentRep, TRUE) ;
70: return 0 ;
71:
72: case IDM_START:
73: if (!WinStartTimer (hab, hwnd, ID_TIMER, 0))
74: {
75: WinAlarm (HWND_DESKTOP, WA_ERROR) ;
76: return 0 ;
77: }
78: EnableMenuItem (hwnd, IDM_START, FALSE) ;
79: EnableMenuItem (hwnd, IDM_ABORT, TRUE) ;
80:
81: sStatus = STATUS_WORKING ;
82: WinInvalidateRect (hwnd, NULL, FALSE) ;
83:
84: lCalcRep = lRepAmts [sCurrentRep - IDM_10] ;
85: ulElapsedTime = WinGetCurrentTime (hab) ;
86: A = 1.0 ;
87: lRep = 0 ;
88:
89: return 0 ;
90:
91: case IDM_ABORT:
92: WinStopTimer (hab, hwnd, ID_TIMER) ;
93:
94: sStatus = STATUS_READY ;
95: WinInvalidateRect (hwnd, NULL, FALSE) ;
96:
97: EnableMenuItem (hwnd, IDM_START, TRUE) ;
98: EnableMenuItem (hwnd, IDM_ABORT, FALSE) ;
99: return 0 ;
100: }
101: break ;
102:
103: case WM_TIMER:
104: A = Savage (A) ;
105:
106: if (++lRep == lCalcRep)
107: {
108: ulElapsedTime = WinGetCurrentTime (hab) -
109: ulElapsedTime ;
110:
111: WinStopTimer (hab, hwnd, ID_TIMER) ;
112:
113: sStatus = STATUS_DONE ;
114: WinInvalidateRect (hwnd, NULL, FALSE) ;
115:
116: EnableMenuItem (hwnd, IDM_START, TRUE) ;
117: EnableMenuItem (hwnd, IDM_ABORT, FALSE) ;
118: }
119: return 0 ;
120:
121: case WM_PAINT:
122: PaintWindow (hwnd, sStatus, lCalcRep, ulElapsedTime) ;
123: return 0 ;
124:
125: case WM_DESTROY:
126: if (sStatus == STATUS_WORKING)
127: WinStopTimer (hab, hwnd, ID_TIMER) ;
128: return 0 ;
129: }
130: return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
131: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.