|
|
Microsoft OS/2 SDK PM 08-08-1988
/*
Source file for TIMER application
*/
#define INCL_WIN
#include <os2.h>
#include <math.h>
#include <stdio.h>
#include "timer.h"
#define STATUS_READY 0
#define STATUS_WORKING 1
#define STATUS_DONE 2
#define ID_TIMER 1
/* globals */
HWND vhwndMenu;
HAB vhab;
MRESULT FAR PASCAL WndProc(HWND hwnd,
USHORT msg,
MPARAM mp1,
MPARAM mp2);
double Savage(double A)
{
return tan(atan(exp(log(sqrt(A * A))))) + 1.0;
}
VOID Paint(HWND hwnd,
SHORT iStatus,
SHORT iRep,
LONG lTime)
{
static CHAR *szMessage[3] = {"Ready",
"Working...",
"%d reps in %ld msec."};
CHAR szBuffer[60];
HPS hps;
RECTL rcl;
hps = WinBeginPaint(hwnd, (HPS)NULL, (PRECTL)NULL);
WinQueryWindowRect(hwnd, (PRECTL)&rcl);
WinFillRect(hps, (PRECTL)&rcl, SYSCLR_WINDOW);
sprintf(szBuffer, szMessage[iStatus], iRep, lTime);
WinDrawText(hps, -1, szBuffer, (PRECTL)&rcl,
SYSCLR_WINDOWTEXT, SYSCLR_WINDOW, DT_CENTER | DT_VCENTER);
WinEndPaint(hps);
}
void cdecl main(VOID)
{
static CHAR szClass[] = "Big";
HMQ hmq;
HWND hwndFrame, hwndClient;
QMSG qmsg;
ULONG ulCreate;
vhab = WinInitialize(0);
hmq = WinCreateMsgQueue(vhab, 0);
WinRegisterClass(vhab, szClass, WndProc,
CS_SYNCPAINT | CS_SIZEREDRAW, NULL);
ulCreate = FCF_TITLEBAR | FCF_SYSMENU | FCF_MINMAX |
FCF_SIZEBORDER | FCF_MENU;
hwndFrame = WinCreateStdWindow(HWND_DESKTOP,
WS_VISIBLE,
(PVOID)&ulCreate,
szClass, (PSZ)"Big with Timer",
0L, NULL, ID_RESOURCE,
(HWND FAR *)&hwndClient);
vhwndMenu = WinWindowFromID(hwndFrame, FID_MENU);
while (WinGetMsg(vhab, &qmsg, NULL, 0, 0))
WinDispatchMsg(vhab, &qmsg);
WinDestroyWindow(hwndFrame);
WinDestroyMsgQueue(hmq);
WinTerminate(vhab);
}
MRESULT FAR PASCAL WndProc(HWND hwnd,
USHORT msg,
MPARAM mp1,
MPARAM mp2)
{
static SHORT iCalcRep, iCurrentRep = IDM_10;
static SHORT iStatus = STATUS_READY;
static ULONG lElapsedTime;
static double A;
static SHORT i;
switch (msg) {
case WM_COMMAND:
switch (SHORT1FROMMP(mp1)) {
case IDM_10:
case IDM_100:
case IDM_1000:
case IDM_10000:
WinSendMsg(vhwndMenu, MM_SETITEMATTR, MPFROM2SHORT(iCurrentRep, TRUE),
MPFROM2SHORT(MIA_CHECKED, 0));
iCurrentRep = SHORT1FROMMP(mp1);
WinSendMsg(vhwndMenu, MM_SETITEMATTR, MPFROM2SHORT(iCurrentRep, TRUE),
MPFROM2SHORT(MIA_CHECKED, MIA_CHECKED));
break;
case IDM_START:
if (!WinStartTimer(vhab, hwnd, ID_TIMER, 1)) {
WinAlarm(HWND_DESKTOP, WA_ERROR);
break;
}
WinSendMsg(vhwndMenu, MM_SETITEMATTR, MPFROM2SHORT(IDM_START, TRUE),
MPFROM2SHORT(MIA_DISABLED, MIA_DISABLED));
WinSendMsg(vhwndMenu, MM_SETITEMATTR, MPFROM2SHORT(IDM_ABORT, TRUE),
MPFROM2SHORT(MIA_DISABLED, 0));
iStatus = STATUS_WORKING;
WinInvalidateRect(hwnd, NULL, FALSE);
iCalcRep = iCurrentRep;
lElapsedTime = WinGetCurrentTime(vhab);
A = 1.0;
i = 0;
break;
case IDM_ABORT:
WinStopTimer(vhab, hwnd, ID_TIMER);
iStatus = STATUS_READY;
WinInvalidateRect(hwnd, NULL, FALSE);
WinSendMsg(vhwndMenu, MM_SETITEMATTR, MPFROM2SHORT(IDM_START, TRUE),
MPFROM2SHORT(MIA_DISABLED, 0));
WinSendMsg(vhwndMenu, MM_SETITEMATTR, MPFROM2SHORT(IDM_ABORT, TRUE),
MPFROM2SHORT(MIA_DISABLED, MIA_DISABLED));
break;
}
case WM_TIMER:
A = Savage(A);
if (++i == iCalcRep) {
lElapsedTime = WinGetCurrentTime(vhab) - lElapsedTime;
WinStopTimer(vhab, hwnd, ID_TIMER);
iStatus = STATUS_DONE;
WinInvalidateRect(hwnd, NULL, FALSE);
WinSendMsg(vhwndMenu, MM_SETITEMATTR, MPFROM2SHORT(IDM_START, TRUE),
MPFROM2SHORT(MIA_DISABLED, 0));
WinSendMsg(vhwndMenu, MM_SETITEMATTR, MPFROM2SHORT(IDM_ABORT, TRUE),
MPFROM2SHORT(MIA_DISABLED, MIA_DISABLED));
}
break;
case WM_PAINT:
Paint(hwnd, iStatus, iCalcRep, lElapsedTime);
break;
default:
return WinDefWindowProc(hwnd, msg, mp1, mp2);
}
return 0L;
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.