Annotation of pmsdk/samples/petzold/chap07/sysvals4.c, revision 1.1.1.1

1.1       root        1: /*--------------------------------------------------------
                      2:    SYSVALS4.C -- System Values Display Program using AVIO
                      3:   --------------------------------------------------------*/
                      4: 
                      5: #define INCL_WIN
                      6: #define INCL_GPI
                      7: #define INCL_VIO
                      8: #define INCL_AVIO
                      9: #include <os2.h>
                     10: #include <stdio.h>
                     11: #include <stdlib.h>
                     12: #include "sysvals.h"
                     13: 
                     14: #define MAXWIDTH 60
                     15: 
                     16: MRESULT EXPENTRY ClientWndProc (HWND, USHORT, MPARAM, MPARAM) ;
                     17: 
                     18: HAB  hab ;
                     19: 
                     20: int main (void)
                     21:      {
                     22:      static CHAR  szClientClass [] = "SysVals4" ;
                     23:      static ULONG flFrameFlags = FCF_TITLEBAR      | FCF_SYSMENU  |
                     24:                                  FCF_SIZEBORDER    | FCF_MINMAX   |
                     25:                                  FCF_SHELLPOSITION | FCF_TASKLIST |
                     26:                                  FCF_VERTSCROLL    | FCF_HORZSCROLL ;
                     27:      HMQ          hmq ;
                     28:      HWND         hwndFrame, hwndClient ;
                     29:      QMSG         qmsg ;
                     30: 
                     31:      hab = WinInitialize (0) ;
                     32:      hmq = WinCreateMsgQueue (hab, 0) ;
                     33: 
                     34:      WinRegisterClass (hab, szClientClass, ClientWndProc, 0L, 0) ;
                     35: 
                     36:      hwndFrame = WinCreateStdWindow (HWND_DESKTOP, WS_VISIBLE,
                     37:                                      &flFrameFlags, szClientClass, NULL,
                     38:                                      0L, NULL, 0, &hwndClient) ;
                     39: 
                     40:      WinSendMsg (hwndFrame, WM_SETICON,
                     41:                  WinQuerySysPointer (HWND_DESKTOP, SPTR_APPICON, FALSE),
                     42:                  NULL) ;
                     43: 
                     44:      while (WinGetMsg (hab, &qmsg, NULL, 0, 0))
                     45:           WinDispatchMsg (hab, &qmsg) ;
                     46: 
                     47:      WinDestroyWindow (hwndFrame) ;
                     48:      WinDestroyMsgQueue (hmq) ;
                     49:      WinTerminate (hab) ;
                     50:      return 0 ;
                     51:      }
                     52: 
                     53: BYTE RgbToVioColor (COLOR clrRgb)
                     54:      {
                     55:      BYTE bIrgb ;
                     56:      RGB  rgb ;
                     57: 
                     58:      rgb = MAKETYPE (clrRgb, RGB) ;
                     59: 
                     60:      if (rgb.bBlue  >= 0x80) bIrgb |= '\x01' ;
                     61:      if (rgb.bGreen >= 0x80) bIrgb |= '\x02' ;
                     62:      if (rgb.bRed   >= 0x80) bIrgb |= '\x04' ;
                     63: 
                     64:      if (rgb.bBlue >= 0xC0 || rgb.bGreen >= 0xC0 || rgb.bRed >= 0xC0)
                     65:           bIrgb |= 8 ;
                     66: 
                     67:      if (bIrgb == 0 && rgb.bBlue >= 0x40 && rgb.bGreen >= 0x40 &&
                     68:                        rgb.bRed  >= 0x40)
                     69:           bIrgb = 8 ;
                     70: 
                     71:      return bIrgb ;
                     72:      }
                     73: 
                     74: BYTE ConstructDefaultAttribute (VOID)
                     75:      {
                     76:      return RgbToVioColor (
                     77:                  WinQuerySysColor (HWND_DESKTOP, SYSCLR_WINDOW, 0L)) << 4 |
                     78:             RgbToVioColor (
                     79:                  WinQuerySysColor (HWND_DESKTOP, SYSCLR_WINDOWTEXT, 0L)) ;
                     80:      }
                     81: 
                     82: MRESULT EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
                     83:      {
                     84:      static BYTE   bBlankCell [2] = " " ;
                     85:      static HVPS   hvps ;
                     86:      static HWND   hwndHscroll, hwndVscroll ;
                     87:      static HPS    hps ;
                     88:      static SHORT  sHscrollPos, sVscrollPos,
                     89:                    cxChar, cyChar, cxClient, cyClient ;
                     90:      CHAR          szBuffer [80] ;
                     91:      HDC           hdc ;
                     92:      SIZEL         sizl ;
                     93:      USHORT        usRow ;
                     94: 
                     95:      switch (msg)
                     96:           {
                     97:           case WM_CREATE:
                     98:                hdc = WinOpenWindowDC (hwnd) ;
                     99: 
                    100:                sizl.cx = sizl.cy = 0 ;
                    101:                hps = GpiCreatePS (hab, hdc, &sizl, PU_PELS    | GPIF_DEFAULT |
                    102:                                                    GPIT_MICRO | GPIA_ASSOC) ;
                    103: 
                    104:                VioCreatePS (&hvps, NUMLINES, MAXWIDTH, 0, 1, NULL) ;
                    105:                VioAssociate (hdc, hvps) ;
                    106:                VioGetDeviceCellSize (&cyChar, &cxChar, hvps) ;
                    107: 
                    108:                bBlankCell[1] = ConstructDefaultAttribute () ;
                    109:                VioScrollUp (0, 0, -1, -1, -1, bBlankCell, hvps) ;
                    110: 
                    111:                for (usRow = 0 ; usRow < NUMLINES ; usRow++)
                    112:                     VioWrtCharStr (szBuffer,
                    113:                                    sprintf (szBuffer, "%-20s%-35s%5ld",
                    114:                                             sysvals[usRow].szIdentifier,
                    115:                                             sysvals[usRow].szDescription,
                    116:                                             WinQuerySysValue (HWND_DESKTOP,
                    117:                                             sysvals[usRow].sIndex)),
                    118:                                    usRow, 0, hvps) ;
                    119: 
                    120:                hwndHscroll = WinWindowFromID (
                    121:                                    WinQueryWindow (hwnd, QW_PARENT, FALSE),
                    122:                                    FID_HORZSCROLL) ;
                    123: 
                    124:                WinSendMsg (hwndHscroll, SBM_SETSCROLLBAR,
                    125:                                         MPFROM2SHORT (sHscrollPos, 0),
                    126:                                         MPFROM2SHORT (0, MAXWIDTH - 1)) ;
                    127: 
                    128:                hwndVscroll = WinWindowFromID (
                    129:                                    WinQueryWindow (hwnd, QW_PARENT, FALSE),
                    130:                                    FID_VERTSCROLL) ;
                    131: 
                    132:                WinSendMsg (hwndVscroll, SBM_SETSCROLLBAR,
                    133:                                         MPFROM2SHORT (sVscrollPos, 0),
                    134:                                         MPFROM2SHORT (0, NUMLINES - 1)) ;
                    135:                return 0 ;
                    136: 
                    137:           case WM_SIZE:
                    138:                cxClient = SHORT1FROMMP (mp2) ;
                    139:                cyClient = SHORT2FROMMP (mp2) ;
                    140: 
                    141:                WinDefAVioWindowProc (hwnd, msg, mp1, mp2) ;
                    142:                return 0 ;
                    143: 
                    144:           case WM_HSCROLL:
                    145:                switch (SHORT2FROMMP (mp2))
                    146:                     {
                    147:                     case SB_LINELEFT:
                    148:                          sHscrollPos -= 1 ;
                    149:                          break ;
                    150: 
                    151:                     case SB_LINERIGHT:
                    152:                          sHscrollPos += 1 ;
                    153:                          break ;
                    154: 
                    155:                     case SB_PAGELEFT:
                    156:                          sHscrollPos -= 8 ;
                    157:                          break ;
                    158: 
                    159:                     case SB_PAGERIGHT:
                    160:                          sHscrollPos += 8 ;
                    161:                          break ;
                    162: 
                    163:                     case SB_SLIDERPOSITION:
                    164:                          sHscrollPos = SHORT1FROMMP (mp2) ;
                    165:                          break ;
                    166:                     }
                    167:                sHscrollPos = max (0, min (sHscrollPos, MAXWIDTH - 1)) ;
                    168: 
                    169:                if (sHscrollPos != SHORT1FROMMR (WinSendMsg (hwndHscroll,
                    170:                                        SBM_QUERYPOS, NULL, NULL)))
                    171:                     {
                    172:                     VioSetOrg (sVscrollPos, sHscrollPos, hvps) ;
                    173: 
                    174:                     WinSendMsg (hwndHscroll, SBM_SETPOS,
                    175:                                 MPFROM2SHORT (sHscrollPos, 0), NULL) ;
                    176:                     }
                    177:                return 0 ;
                    178: 
                    179:           case WM_VSCROLL:
                    180:                switch (SHORT2FROMMP (mp2))
                    181:                     {
                    182:                     case SB_LINEUP:
                    183:                          sVscrollPos -= 1 ;
                    184:                          break ;
                    185: 
                    186:                     case SB_LINEDOWN:
                    187:                          sVscrollPos += 1 ;
                    188:                          break ;
                    189: 
                    190:                     case SB_PAGEUP:
                    191:                          sVscrollPos -= cyClient / cyChar ;
                    192:                          break ;
                    193: 
                    194:                     case SB_PAGEDOWN:
                    195:                          sVscrollPos += cyClient / cyChar ;
                    196:                          break ;
                    197: 
                    198:                     case SB_SLIDERPOSITION:
                    199:                          sVscrollPos = SHORT1FROMMP (mp2) ;
                    200:                          break ;
                    201:                     }
                    202:                sVscrollPos = max (0, min (sVscrollPos, NUMLINES - 1)) ;
                    203: 
                    204:                if (sVscrollPos != SHORT1FROMMR (WinSendMsg (hwndVscroll,
                    205:                                        SBM_QUERYPOS, NULL, NULL)))
                    206:                     {
                    207:                     VioSetOrg (sVscrollPos, sHscrollPos, hvps) ;
                    208: 
                    209:                     WinSendMsg (hwndVscroll, SBM_SETPOS,
                    210:                                 MPFROM2SHORT (sVscrollPos, 0), NULL) ;
                    211:                     }
                    212:                return 0 ;
                    213: 
                    214:           case WM_CHAR:
                    215:                switch (CHARMSG(&msg)->vkey)
                    216:                     {
                    217:                     case VK_LEFT:
                    218:                     case VK_RIGHT:
                    219:                          return WinSendMsg (hwndHscroll, msg, mp1, mp2) ;
                    220:                     case VK_UP:
                    221:                     case VK_DOWN:
                    222:                     case VK_PAGEUP:
                    223:                     case VK_PAGEDOWN:
                    224:                          return WinSendMsg (hwndVscroll, msg, mp1, mp2) ;
                    225:                     }
                    226:                break ;
                    227: 
                    228:           case WM_PAINT:
                    229:                WinBeginPaint (hwnd, hps, NULL) ;
                    230:                GpiErase (hps) ;
                    231: 
                    232:                VioShowBuf (0, MAXWIDTH * NUMLINES * 2, hvps) ;
                    233: 
                    234:                WinEndPaint (hps) ;
                    235:                return 0 ;
                    236: 
                    237:           case WM_DESTROY:
                    238:                VioAssociate (NULL, hvps) ;
                    239:                VioDestroyPS (hvps) ;
                    240:                GpiDestroyPS (hps) ;
                    241:                return 0 ;
                    242:           }
                    243:      return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
                    244:      }

unix.superglobalmegacorp.com

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