|
|
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.