home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / textmode.zip / sysvals.c < prev    next >
Text File  |  1995-07-12  |  12KB  |  305 lines

  1. /*
  2.  * SYSVALS.C -- System Values Display Program using AVIO
  3.  */
  4.  
  5. #define INCL_WIN
  6. #define INCL_GPI
  7. #define INCL_BASE
  8. #define INCL_AVIO
  9. #include <os2.h>
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12.  
  13. #define NUMLINES (sizeof sysvals / sizeof sysvals [0])
  14.  
  15. struct
  16.      {
  17.      SHORT sIndex ;
  18.      CHAR  *szIdentifier ;
  19.      CHAR  *szDescription ;
  20.      }
  21.      sysvals [] =
  22.      {
  23.      SV_SWAPBUTTON,     "SV_SWAPBUTTON",     "Mouse buttons swapped flag",
  24.      SV_DBLCLKTIME,     "SV_DBLCLKTIME",     "Mouse double click time in msec",
  25.      SV_CXDBLCLK,       "SV_CXDBLCLK",       "Mouse double click area width",
  26.      SV_CYDBLCLK,       "SV_CYDBLCLK",       "Mouse double click area height",
  27.      SV_CXSIZEBORDER,   "SV_CXSIZEBORDER",   "Sizing border width",
  28.      SV_CYSIZEBORDER,   "SV_CYSIZEBORDER",   "Sizing border height",
  29.      SV_ALARM,          "SV_ALARM",          "Alarm enabled flag",
  30.      SV_CURSORRATE,     "SV_CURSORRATE",     "Cursor blink rate",
  31.      SV_FIRSTSCROLLRATE,"SV_FIRSTSCROLLRATE","Scroll bar time until repeats",
  32.      SV_SCROLLRATE,     "SV_SCROLLRATE",     "Scroll bar scroll rate",
  33.      SV_NUMBEREDLISTS,  "SV_NUMBEREDLISTS",  "Flag for numbering of lists",
  34.      SV_WARNINGFREQ,    "SV_WARNINGFREQ",    "Alarm frequency for warning",
  35.      SV_NOTEFREQ,       "SV_NOTEFREQ",       "Alarm frequency for note",
  36.      SV_ERRORFREQ,      "SV_ERRORFREQ",      "Alarm frequency for error",
  37.      SV_WARNINGDURATION,"SV_WARNINGDURATION","Alarm duration for warning",
  38.      SV_NOTEDURATION,   "SV_NOTEDURATION",   "Alarm duration for note",
  39.      SV_ERRORDURATION,  "SV_ERRORDURATION",  "Alarm duration for error",
  40.      SV_CXSCREEN,       "SV_CXSCREEN",       "Screen width in pixels",
  41.      SV_CYSCREEN,       "SV_CYSCREEN",       "Screen height in pixels",
  42.      SV_CXVSCROLL,      "SV_CXVSCROLL",      "Vertical scroll bar width",
  43.      SV_CYHSCROLL,      "SV_CYHSCROLL",      "Horizontal scroll bar height",
  44.      SV_CYVSCROLLARROW, "SV_CYVSCROLLARROW", "Vertical scroll arrow height",
  45.      SV_CXHSCROLLARROW, "SV_CXHSCROLLARROW", "Horizontal scroll arrow width",
  46.      SV_CXBORDER,       "SV_CXBORDER",       "Border width",
  47.      SV_CYBORDER,       "SV_CYBORDER",       "Border height",
  48.      SV_CXDLGFRAME,     "SV_CXDLGFRAME",     "Dialog window frame width",
  49.      SV_CYDLGFRAME,     "SV_CYDLGFRAME",     "Dialog window frame height",
  50.      SV_CYTITLEBAR,     "SV_CYTITLEBAR",     "Title bar height",
  51.      SV_CYVSLIDER,      "SV_CYVSLIDER",      "Vertical scroll slider height",
  52.      SV_CXHSLIDER,      "SV_CXHSLIDER",      "Horizontal scroll slider width",
  53.      SV_CXMINMAXBUTTON, "SV_CXMINMAXBUTTON", "Minimize/Maximize button width",
  54.      SV_CYMINMAXBUTTON, "SV_CYMINMAXBUTTON", "Minimize/Maximize button height",
  55.      SV_CYMENU,         "SV_CYMENU",         "Menu bar height",
  56.      SV_CXFULLSCREEN,   "SV_CXFULLSCREEN",   "Full screen client window width",
  57.      SV_CYFULLSCREEN,   "SV_CYFULLSCREEN",   "Full screen client window height",
  58.      SV_CXICON,         "SV_CXICON",         "Icon width",
  59.      SV_CYICON,         "SV_CYICON",         "Icon height",
  60.      SV_CXPOINTER,      "SV_CXPOINTER",      "Pointer width",
  61.      SV_CYPOINTER,      "SV_CYPOINTER",      "Pointer height",
  62.      SV_DEBUG,          "SV_DEBUG",          "Debug version flag",
  63.      SV_CMOUSEBUTTONS,  "SV_CMOUSEBUTTONS",  "Number of mouse buttons",
  64.      SV_POINTERLEVEL,   "SV_POINTERLEVEL",   "Pointer display count",
  65.      SV_CURSORLEVEL,    "SV_CURSORLEVEL",    "Cursor display count",
  66.      SV_TRACKRECTLEVEL, "SV_TRACKRECTLEVEL", "Tracking rectangle display count",
  67.      SV_CTIMERS,        "SV_CTIMERS",        "Number of available timers",
  68.      SV_MOUSEPRESENT,   "SV_MOUSEPRESENT",   "Mouse present flag",
  69.      SV_CXBYTEALIGN,    "SV_CXBYTEALIGN",    "Horizontal pixel alignment value",
  70.      SV_CYBYTEALIGN,    "SV_CYBYTEALIGN",    "Vertical pixel alignment value"
  71.      } ;
  72.  
  73. #define MAXWIDTH 60
  74.  
  75. MRESULT EXPENTRY ClientWndProc (HWND, ULONG, MPARAM, MPARAM) ;
  76.  
  77. HAB  hab ;
  78.  
  79. static CHAR  szClientClass [] = "SysVals" ;
  80. static ULONG flFrameFlags = FCF_TITLEBAR      | FCF_SYSMENU  |
  81.                                  FCF_SIZEBORDER    | FCF_MINMAX   |
  82.                                  FCF_SHELLPOSITION | FCF_TASKLIST |
  83.                                  FCF_VERTSCROLL    | FCF_HORZSCROLL ;
  84.  
  85. int main (void) {
  86.      HMQ          hmq ;
  87.      HWND         hwndFrame, hwndClient ;
  88.      QMSG         qmsg ;
  89.  
  90.      hab = WinInitialize (0) ;
  91.      hmq = WinCreateMsgQueue (hab, 0) ;
  92.  
  93.      WinRegisterClass (hab, szClientClass, ClientWndProc, 0L, 0) ;
  94.  
  95.      hwndFrame = WinCreateStdWindow (HWND_DESKTOP, WS_VISIBLE,
  96.                                      &flFrameFlags, szClientClass, NULL,
  97.                                      0L, 0, 0, &hwndClient) ;
  98.  
  99.      WinSendMsg (hwndFrame, WM_SETICON,
  100.                  (MPARAM)WinQuerySysPointer (HWND_DESKTOP, SPTR_APPICON,
  101.                                              FALSE),
  102.                  NULL) ;
  103.  
  104.      while (WinGetMsg (hab, &qmsg, 0, 0, 0))
  105.           WinDispatchMsg (hab, &qmsg) ;
  106.  
  107.      WinDestroyWindow (hwndFrame) ;
  108.      WinDestroyMsgQueue (hmq) ;
  109.      WinTerminate (hab) ;
  110.      return 0 ;
  111. }
  112.  
  113. BYTE RgbToVioColor (COLOR clrRgb) {
  114.      BYTE bIrgb = 0;
  115.      RGB  rgb ;
  116.  
  117.      rgb = MAKETYPE (clrRgb, RGB) ;
  118.  
  119.      if (rgb.bBlue  >= 0x80) bIrgb |= '\x01' ;
  120.      if (rgb.bGreen >= 0x80) bIrgb |= '\x02' ;
  121.      if (rgb.bRed   >= 0x80) bIrgb |= '\x04' ;
  122.  
  123.      if (rgb.bBlue >= 0xC0 || rgb.bGreen >= 0xC0 || rgb.bRed >= 0xC0)
  124.           bIrgb |= 8 ;
  125.  
  126.      if (bIrgb == 0 && rgb.bBlue >= 0x40 && rgb.bGreen >= 0x40 &&
  127.                        rgb.bRed  >= 0x40)
  128.           bIrgb = 8 ;
  129.  
  130.      return bIrgb ;
  131. }
  132.  
  133. BYTE ConstructDefaultAttribute (VOID) {
  134.      return RgbToVioColor (
  135.                  WinQuerySysColor (HWND_DESKTOP, SYSCLR_WINDOW, 0L)) << 4 |
  136.             RgbToVioColor (
  137.                  WinQuerySysColor (HWND_DESKTOP, SYSCLR_WINDOWTEXT, 0L)) ;
  138. }
  139.  
  140. MRESULT EXPENTRY ClientWndProc (HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) {
  141.      static BYTE   bBlankCell [2] = " " ;
  142.      static HVIO   hvps ;
  143.      static HWND   hwndHscroll, hwndVscroll ;
  144.      static HPS    hps ;
  145.      static SHORT  sHscrollPos, sVscrollPos,
  146.                    cxClient, cyClient ;
  147.      static ULONG  cxChar, cyChar;
  148.      CHAR          szBuffer [80] ;
  149.      HDC           hdc ;
  150.      SIZEL         sizl ;
  151.      USHORT        usRow ;
  152.      int           i;
  153.  
  154.      switch (msg)
  155.           {
  156.           case WM_CREATE:
  157.                hdc = WinOpenWindowDC (hwnd) ;
  158.  
  159.                sizl.cx = sizl.cy = 0 ;
  160.                hps = GpiCreatePS (hab, hdc, &sizl, PU_PELS    | GPIF_DEFAULT |
  161.                                                    GPIT_MICRO | GPIA_ASSOC) ;
  162.  
  163.                VioCreatePS (&hvps, NUMLINES, MAXWIDTH, 0, 1, 0) ;
  164.                VioAssociate (hdc, hvps) ;
  165.  
  166.                VioGetDeviceCellSize (&cyChar, &cxChar, hvps) ;
  167.  
  168.                bBlankCell[1] = ConstructDefaultAttribute () ;
  169.                VioScrollUp (0, 0, -1, -1, -1, bBlankCell, hvps) ;
  170.  
  171.                for (usRow = 0 ; usRow < NUMLINES ; usRow++)
  172.                     VioWrtCharStr (szBuffer,
  173.                                    sprintf (szBuffer, "%-20s%-35s%5ld",
  174.                                             sysvals[usRow].szIdentifier,
  175.                                             sysvals[usRow].szDescription,
  176.                                             WinQuerySysValue (HWND_DESKTOP,
  177.                                             sysvals[usRow].sIndex)),
  178.                                    usRow, 0, hvps) ;
  179.  
  180.                hwndHscroll = WinWindowFromID (
  181.                                    WinQueryWindow (hwnd, QW_PARENT),
  182.                                    FID_HORZSCROLL) ;
  183.  
  184.                WinSendMsg (hwndHscroll, SBM_SETSCROLLBAR,
  185.                                         MPFROM2SHORT (sHscrollPos, 0),
  186.                                         MPFROM2SHORT (0, MAXWIDTH - 1)) ;
  187.  
  188.                hwndVscroll = WinWindowFromID (
  189.                                    WinQueryWindow (hwnd, QW_PARENT),
  190.                                    FID_VERTSCROLL) ;
  191.  
  192.                WinSendMsg (hwndVscroll, SBM_SETSCROLLBAR,
  193.                                         MPFROM2SHORT (sVscrollPos, 0),
  194.                                         MPFROM2SHORT (0, NUMLINES - 1)) ;
  195.                return 0 ;
  196.  
  197.           case WM_SIZE:
  198.                cxClient = SHORT1FROMMP (mp2) ;
  199.                cyClient = SHORT2FROMMP (mp2) ;
  200.  
  201.                WinDefAVioWindowProc ((HWND)hwnd, msg, mp1, mp2) ;
  202.                return 0 ;
  203.  
  204.           case WM_HSCROLL:
  205.                switch (SHORT2FROMMP (mp2))
  206.                     {
  207.                     case SB_LINELEFT:
  208.                          sHscrollPos -= 1 ;
  209.                          break ;
  210.  
  211.                     case SB_LINERIGHT:
  212.                          sHscrollPos += 1 ;
  213.                          break ;
  214.  
  215.                     case SB_PAGELEFT:
  216.                          sHscrollPos -= 8 ;
  217.                          break ;
  218.  
  219.                     case SB_PAGERIGHT:
  220.                          sHscrollPos += 8 ;
  221.                          break ;
  222.  
  223.                     case SB_SLIDERPOSITION:
  224.                          sHscrollPos = SHORT1FROMMP (mp2) ;
  225.                          break ;
  226.                     }
  227.                sHscrollPos = max (0, min (sHscrollPos, MAXWIDTH - 1)) ;
  228.  
  229.                if (sHscrollPos != SHORT1FROMMR (WinSendMsg (hwndHscroll,
  230.                                        SBM_QUERYPOS, NULL, NULL)))
  231.                     {
  232.                     VioSetOrg (sVscrollPos, sHscrollPos, hvps) ;
  233.  
  234.                     WinSendMsg (hwndHscroll, SBM_SETPOS,
  235.                                 MPFROM2SHORT (sHscrollPos, 0), NULL) ;
  236.                     }
  237.                return 0 ;
  238.  
  239.           case WM_VSCROLL:
  240.                switch (SHORT2FROMMP (mp2))
  241.                     {
  242.                     case SB_LINEUP:
  243.                          sVscrollPos -= 1 ;
  244.                          break ;
  245.  
  246.                     case SB_LINEDOWN:
  247.                          sVscrollPos += 1 ;
  248.                          break ;
  249.  
  250.                     case SB_PAGEUP:
  251.                          sVscrollPos -= cyClient / cyChar ;
  252.                          break ;
  253.  
  254.                     case SB_PAGEDOWN:
  255.                          sVscrollPos += cyClient / cyChar ;
  256.                          break ;
  257.  
  258.                     case SB_SLIDERPOSITION:
  259.                          sVscrollPos = SHORT1FROMMP (mp2) ;
  260.                          break ;
  261.                     }
  262.                sVscrollPos = max (0, min (sVscrollPos, NUMLINES - 1)) ;
  263.  
  264.                if (sVscrollPos != SHORT1FROMMR (WinSendMsg (hwndVscroll,
  265.                                        SBM_QUERYPOS, NULL, NULL)))
  266.                     {
  267.                     VioSetOrg (sVscrollPos, sHscrollPos, hvps) ;
  268.  
  269.                     WinSendMsg (hwndVscroll, SBM_SETPOS,
  270.                                 MPFROM2SHORT (sVscrollPos, 0), NULL) ;
  271.                     }
  272.                return 0 ;
  273.  
  274.           case WM_CHAR:
  275.                switch (CHARMSG(&msg)->vkey)
  276.                     {
  277.                     case VK_LEFT:
  278.                     case VK_RIGHT:
  279.                          return WinSendMsg (hwndHscroll, msg, mp1, mp2) ;
  280.                     case VK_UP:
  281.                     case VK_DOWN:
  282.                     case VK_PAGEUP:
  283.                     case VK_PAGEDOWN:
  284.                          return WinSendMsg (hwndVscroll, msg, mp1, mp2) ;
  285.                     }
  286.                break ;
  287.  
  288.           case WM_PAINT:
  289.                WinBeginPaint (hwnd, hps, NULL) ;
  290.                GpiErase (hps) ;
  291.  
  292.                VioShowBuf (0, MAXWIDTH * NUMLINES * 2, hvps) ;
  293.  
  294.                WinEndPaint (hps) ;
  295.                return 0 ;
  296.  
  297.           case WM_DESTROY:
  298.                VioAssociate (0, hvps) ;
  299.                VioDestroyPS (hvps) ;
  300.                GpiDestroyPS (hps) ;
  301.                return 0 ;
  302.           }
  303.      return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
  304. }
  305.