File:  [OS/2 SDKs] / pmsdk / samples / bigjob / timer / timer.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Thu Aug 9 12:28:12 2018 UTC (7 years, 9 months ago) by root
Branches: msft, MAIN
CVS tags: pmsdk-1988, HEAD
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;
}

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.