|
|
1.1 root 1: /*
2: Source file for TIMER application
3: */
4: #define INCL_WIN
5: #include <os2.h>
6: #include <math.h>
7: #include <stdio.h>
8: #include "timer.h"
9:
10:
11: #define STATUS_READY 0
12: #define STATUS_WORKING 1
13: #define STATUS_DONE 2
14:
15: #define ID_TIMER 1
16:
17: /* globals */
18: HWND vhwndMenu;
19: HAB vhab;
20:
21:
22: MRESULT FAR PASCAL WndProc(HWND hwnd,
23: USHORT msg,
24: MPARAM mp1,
25: MPARAM mp2);
26:
27:
28: double Savage(double A)
29: {
30: return tan(atan(exp(log(sqrt(A * A))))) + 1.0;
31: }
32:
33:
34:
35: VOID Paint(HWND hwnd,
36: SHORT iStatus,
37: SHORT iRep,
38: LONG lTime)
39: {
40: static CHAR *szMessage[3] = {"Ready",
41: "Working...",
42: "%d reps in %ld msec."};
43: CHAR szBuffer[60];
44: HPS hps;
45: RECTL rcl;
46:
47: hps = WinBeginPaint(hwnd, (HPS)NULL, (PRECTL)NULL);
48: WinQueryWindowRect(hwnd, (PRECTL)&rcl);
49: WinFillRect(hps, (PRECTL)&rcl, SYSCLR_WINDOW);
50: sprintf(szBuffer, szMessage[iStatus], iRep, lTime);
51: WinDrawText(hps, -1, szBuffer, (PRECTL)&rcl,
52: SYSCLR_WINDOWTEXT, SYSCLR_WINDOW, DT_CENTER | DT_VCENTER);
53: WinEndPaint(hps);
54: }
55:
56:
57:
58: void cdecl main(VOID)
59: {
60: static CHAR szClass[] = "Big";
61: HMQ hmq;
62: HWND hwndFrame, hwndClient;
63: QMSG qmsg;
64: ULONG ulCreate;
65:
66: vhab = WinInitialize(0);
67: hmq = WinCreateMsgQueue(vhab, 0);
68:
69: WinRegisterClass(vhab, szClass, WndProc,
70: CS_SYNCPAINT | CS_SIZEREDRAW, NULL);
71:
72: ulCreate = FCF_TITLEBAR | FCF_SYSMENU | FCF_MINMAX |
73: FCF_SIZEBORDER | FCF_MENU;
74:
75: hwndFrame = WinCreateStdWindow(HWND_DESKTOP,
76: WS_VISIBLE,
77: (PVOID)&ulCreate,
78: szClass, (PSZ)"Big with Timer",
79: 0L, NULL, ID_RESOURCE,
80: (HWND FAR *)&hwndClient);
81:
82: vhwndMenu = WinWindowFromID(hwndFrame, FID_MENU);
83:
84: while (WinGetMsg(vhab, &qmsg, NULL, 0, 0))
85: WinDispatchMsg(vhab, &qmsg);
86:
87: WinDestroyWindow(hwndFrame);
88: WinDestroyMsgQueue(hmq);
89: WinTerminate(vhab);
90: }
91:
92:
93:
94: MRESULT FAR PASCAL WndProc(HWND hwnd,
95: USHORT msg,
96: MPARAM mp1,
97: MPARAM mp2)
98: {
99: static SHORT iCalcRep, iCurrentRep = IDM_10;
100: static SHORT iStatus = STATUS_READY;
101: static ULONG lElapsedTime;
102: static double A;
103: static SHORT i;
104:
105: switch (msg) {
106:
107: case WM_COMMAND:
108:
109: switch (SHORT1FROMMP(mp1)) {
110:
111: case IDM_10:
112: case IDM_100:
113: case IDM_1000:
114: case IDM_10000:
115: WinSendMsg(vhwndMenu, MM_SETITEMATTR, MPFROM2SHORT(iCurrentRep, TRUE),
116: MPFROM2SHORT(MIA_CHECKED, 0));
117: iCurrentRep = SHORT1FROMMP(mp1);
118: WinSendMsg(vhwndMenu, MM_SETITEMATTR, MPFROM2SHORT(iCurrentRep, TRUE),
119: MPFROM2SHORT(MIA_CHECKED, MIA_CHECKED));
120: break;
121:
122: case IDM_START:
123: if (!WinStartTimer(vhab, hwnd, ID_TIMER, 1)) {
124: WinAlarm(HWND_DESKTOP, WA_ERROR);
125: break;
126: }
127:
128: WinSendMsg(vhwndMenu, MM_SETITEMATTR, MPFROM2SHORT(IDM_START, TRUE),
129: MPFROM2SHORT(MIA_DISABLED, MIA_DISABLED));
130: WinSendMsg(vhwndMenu, MM_SETITEMATTR, MPFROM2SHORT(IDM_ABORT, TRUE),
131: MPFROM2SHORT(MIA_DISABLED, 0));
132:
133: iStatus = STATUS_WORKING;
134: WinInvalidateRect(hwnd, NULL, FALSE);
135:
136: iCalcRep = iCurrentRep;
137: lElapsedTime = WinGetCurrentTime(vhab);
138:
139: A = 1.0;
140: i = 0;
141:
142: break;
143:
144: case IDM_ABORT:
145: WinStopTimer(vhab, hwnd, ID_TIMER);
146:
147: iStatus = STATUS_READY;
148: WinInvalidateRect(hwnd, NULL, FALSE);
149:
150: WinSendMsg(vhwndMenu, MM_SETITEMATTR, MPFROM2SHORT(IDM_START, TRUE),
151: MPFROM2SHORT(MIA_DISABLED, 0));
152: WinSendMsg(vhwndMenu, MM_SETITEMATTR, MPFROM2SHORT(IDM_ABORT, TRUE),
153: MPFROM2SHORT(MIA_DISABLED, MIA_DISABLED));
154: break;
155:
156: }
157:
158: case WM_TIMER:
159:
160: A = Savage(A);
161:
162: if (++i == iCalcRep) {
163: lElapsedTime = WinGetCurrentTime(vhab) - lElapsedTime;
164:
165: WinStopTimer(vhab, hwnd, ID_TIMER);
166:
167: iStatus = STATUS_DONE;
168: WinInvalidateRect(hwnd, NULL, FALSE);
169:
170: WinSendMsg(vhwndMenu, MM_SETITEMATTR, MPFROM2SHORT(IDM_START, TRUE),
171: MPFROM2SHORT(MIA_DISABLED, 0));
172: WinSendMsg(vhwndMenu, MM_SETITEMATTR, MPFROM2SHORT(IDM_ABORT, TRUE),
173: MPFROM2SHORT(MIA_DISABLED, MIA_DISABLED));
174: }
175: break;
176:
177: case WM_PAINT:
178: Paint(hwnd, iStatus, iCalcRep, lElapsedTime);
179: break;
180:
181: default:
182: return WinDefWindowProc(hwnd, msg, mp1, mp2);
183: }
184:
185: return 0L;
186: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.