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