|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.