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

1.1       root        1: /*
                      2:    Source for "misbehaving" application
                      3: */
                      4: #define INCL_WIN
                      5: #include <os2.h>
                      6: #include <math.h>
                      7: #include <stdio.h>
                      8: #include "misbehav.h"
                      9: 
                     10: 
                     11: #define STATUS_READY   0
                     12: #define STATUS_WORKING 1
                     13: #define STATUS_DONE    2
                     14: 
                     15: /* globals */
                     16: HWND vhwndMenu;
                     17: HAB  vhab;
                     18: 
                     19: 
                     20: MRESULT FAR PASCAL WndProc(HWND hwnd,
                     21:                           USHORT msg,
                     22:                           MPARAM mp1,
                     23:                           MPARAM mp2);
                     24: 
                     25: 
                     26: double Savage(double A)
                     27: {
                     28:     return tan(atan(exp(log(sqrt(A * A))))) + 1.0;
                     29: }
                     30: 
                     31: 
                     32: 
                     33: VOID Paint(HWND hwnd,
                     34:           SHORT iStatus,
                     35:           SHORT iRep,
                     36:           LONG lTime)
                     37: {
                     38:     static CHAR *szMessage[3] = {"Ready",
                     39:                                 "Working...",
                     40:                                 "%d reps in %ld msec."};
                     41:     CHAR szBuffer[60];
                     42:     HPS hps;
                     43:     RECTL rcl;
                     44: 
                     45:     hps = WinBeginPaint(hwnd, (HPS)NULL, (PRECTL)NULL);
                     46:     WinQueryWindowRect(hwnd, (PRECTL)&rcl);
                     47:     WinFillRect(hps, (PRECTL)&rcl, SYSCLR_WINDOW);
                     48:     sprintf(szBuffer, szMessage[iStatus], iRep, lTime);
                     49:     WinDrawText(hps, -1, szBuffer, (PRECTL)&rcl,
                     50:                SYSCLR_WINDOWTEXT, SYSCLR_WINDOW, DT_CENTER | DT_VCENTER);
                     51:     WinEndPaint(hps);
                     52: }
                     53: 
                     54: 
                     55: 
                     56: void cdecl main(VOID)
                     57: {
                     58:     static CHAR szClass[] = "Big";
                     59:     HMQ hmq;
                     60:     HWND hwndFrame, hwndClient;
                     61:     QMSG qmsg;
                     62:     ULONG ulCreate;
                     63: 
                     64:     vhab = WinInitialize(0);
                     65:     hmq = WinCreateMsgQueue(vhab, 0);
                     66: 
                     67:     WinRegisterClass(vhab, szClass, WndProc,
                     68:                     CS_SYNCPAINT | CS_SIZEREDRAW, NULL);
                     69: 
                     70:     ulCreate = FCF_TITLEBAR | FCF_SYSMENU | FCF_MINMAX |
                     71:                FCF_SIZEBORDER | FCF_MENU;
                     72:  
                     73:     hwndFrame = WinCreateStdWindow(HWND_DESKTOP,
                     74:                                   WS_VISIBLE,
                     75:                                   (PVOID)&ulCreate,
                     76:                                   szClass, (PSZ)"Big Misbehaved",
                     77:                                   0L, NULL, ID_RESOURCE,
                     78:                                   (HWND FAR *)&hwndClient);
                     79: 
                     80:     vhwndMenu = WinWindowFromID(hwndFrame, FID_MENU);
                     81: 
                     82:     while (WinGetMsg(vhab, &qmsg, NULL, 0, 0))
                     83:        WinDispatchMsg(vhab, &qmsg);
                     84: 
                     85:     WinDestroyWindow(hwndFrame);
                     86:     WinDestroyMsgQueue(hmq);
                     87:     WinTerminate(vhab);
                     88: }
                     89: 
                     90: 
                     91: 
                     92: MRESULT FAR PASCAL WndProc(HWND hwnd,
                     93:                           USHORT msg,
                     94:                           MPARAM mp1,
                     95:                           MPARAM mp2)
                     96: {
                     97:     static SHORT iCalcRep, iCurrentRep = IDM_10;
                     98:     static SHORT iStatus = STATUS_READY;
                     99:     static ULONG lElapsedTime;
                    100:     double A;
                    101:     SHORT i;
                    102: 
                    103:     switch (msg) {
                    104: 
                    105:     case WM_COMMAND:
                    106: 
                    107:        switch (SHORT1FROMMP(mp1)) {
                    108: 
                    109:        case IDM_10:
                    110:        case IDM_100:
                    111:        case IDM_1000:
                    112:        case IDM_10000:
                    113:            WinSendMsg(vhwndMenu, MM_SETITEMATTR, MPFROM2SHORT(iCurrentRep, TRUE),
                    114:                       MPFROM2SHORT(MIA_CHECKED, 0));
                    115:            iCurrentRep = SHORT1FROMMP(mp1);
                    116:            WinSendMsg(vhwndMenu, MM_SETITEMATTR, MPFROM2SHORT(iCurrentRep, TRUE),
                    117:                       MPFROM2SHORT(MIA_CHECKED, MIA_CHECKED));
                    118:            break;
                    119: 
                    120:        case IDM_START:
                    121:            WinSendMsg(vhwndMenu, MM_SETITEMATTR, MPFROM2SHORT(IDM_START, TRUE),
                    122:                       MPFROM2SHORT(MIA_DISABLED, MIA_DISABLED));
                    123:            WinSendMsg(vhwndMenu, MM_SETITEMATTR, MPFROM2SHORT(IDM_ABORT, TRUE),
                    124:                       MPFROM2SHORT(MIA_DISABLED, 0));
                    125: 
                    126:            iStatus = STATUS_WORKING;
                    127:            WinInvalidateRect(hwnd, NULL, FALSE);
                    128: 
                    129:            iCalcRep = iCurrentRep;
                    130:            lElapsedTime = WinGetCurrentTime(vhab);
                    131: 
                    132:            for (A = 1.0, i = 0; i < iCalcRep; i++) {
                    133:                A = Savage(A);
                    134:            }
                    135: 
                    136:            lElapsedTime = WinGetCurrentTime(vhab) - lElapsedTime;
                    137:            iStatus = STATUS_DONE;
                    138:            WinInvalidateRect(hwnd, NULL, FALSE);
                    139: 
                    140:            WinSendMsg(vhwndMenu, MM_SETITEMATTR, MPFROM2SHORT(IDM_START, TRUE),
                    141:                       MPFROM2SHORT(MIA_DISABLED, 0));
                    142:            WinSendMsg(vhwndMenu, MM_SETITEMATTR, MPFROM2SHORT(IDM_ABORT, TRUE),
                    143:                       MPFROM2SHORT(MIA_DISABLED, MIA_DISABLED));
                    144:            break;
                    145: 
                    146:        case IDM_ABORT:
                    147:            break;
                    148: 
                    149:        }
                    150: 
                    151:     case WM_PAINT:
                    152:        Paint(hwnd, iStatus, iCalcRep, lElapsedTime);
                    153:        break;
                    154: 
                    155:     default:
                    156:        return WinDefWindowProc(hwnd, msg, mp1, mp2);
                    157:     }
                    158: 
                    159:     return 0L;
                    160: }

unix.superglobalmegacorp.com

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