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