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