Annotation of pmsdk/samples/bigjob/timer/timer.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

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