|
|
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.