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