source: trunk/dll/presparm.c@ 882

Last change on this file since 882 was 882, checked in by Gregg Young, 18 years ago

Update CopyPresParams to include all types of Pres Params

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 14.3 KB
Line 
1
2/***********************************************************************
3
4 $Id: presparm.c 882 2007-12-11 00:11:58Z gyoung $
5
6 Edit presentation parameters
7
8 Copyright (c) 1993-98 M. Kimes
9 Copyright (c) 2006 Steven H.Levine
10
11 22 Jul 06 SHL Check more run time errors
12 20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
13 22 Nov 07 GKY Use CopyPresParams to fix presparam inconsistencies in menus
14 10 Dec 07 GKY Updated CopyPresParams to copy all parameter types
15
16***********************************************************************/
17
18#define INCL_DOS
19#define INCL_WIN
20#define INCL_GPI
21#include <os2.h>
22
23#include <stdarg.h>
24#include <stdio.h>
25#include <stdlib.h>
26#include <string.h>
27#include <ctype.h>
28
29#include "fm3dll.h"
30
31// static PSZ pszSrcFile = __FILE__;
32
33#ifdef NEVER
34/*
35 * this routine will fill a buffer with all defined window pres params
36 * the PRESPARAMS structure returned is suitable to be passed as
37 * pPresParams ie. WinCreateWindow(,,,,,,,,,,,, PVOID pPresParams)
38 */
39VOID StoreWndPresParams(HWND hwnd, CHAR * tagname, HINI prof)
40{
41 PARAM *pparam;
42 PRESPARAMS *ppresparams;
43
44 if (!tagname || !*tagname || !prof)
45 return;
46 /* setup memory access */
47 ppresparams = (PRESPARAMS *) xmalloc(PP_MAXBUF, pszSrcFile, __LINE__);
48 if (!ppresparams)
49 return;
50 ppresparams->cb = 0; /* no entries yet */
51 pparam = ppresparams->aparam; /* cast structure onto memory */
52
53 /*
54 * query every possible presentation parameter...
55 */
56
57 /* foreground color -- takes 12 bytes */
58 pparam->cb = WinQueryPresParam(hwnd,
59 PP_FOREGROUNDCOLOR,
60 PP_FOREGROUNDCOLORINDEX,
61 &pparam->id,
62 sizeof(LONG),
63 (PVOID) pparam->ab, QPF_NOINHERIT);
64 if (pparam->cb) { /* was the param found? */
65 ppresparams->cb += 12; /* used 12 bytes */
66 pparam = (PPARAM) (((ULONG) pparam) + 12); /* advance 12 bytes to next memory location */
67 }
68
69 /* background color -- takes 12 bytes */
70 pparam->cb = WinQueryPresParam(hwnd,
71 PP_BACKGROUNDCOLOR,
72 PP_BACKGROUNDCOLORINDEX,
73 &pparam->id,
74 sizeof(LONG),
75 (PVOID) pparam->ab, QPF_NOINHERIT);
76 if (pparam->cb) {
77 ppresparams->cb += 12;
78 pparam = (PPARAM) (((ULONG) pparam) + 12);
79 }
80
81 /* hilited foreground color -- takes 12 bytes */
82 pparam->cb = WinQueryPresParam(hwnd,
83 PP_HILITEFOREGROUNDCOLOR,
84 PP_HILITEFOREGROUNDCOLORINDEX,
85 &pparam->id,
86 sizeof(LONG),
87 (PVOID) pparam->ab, QPF_NOINHERIT);
88 if (pparam->cb) {
89 ppresparams->cb += 12;
90 pparam = (PPARAM) (((ULONG) pparam) + 12);
91 }
92
93 /* hilited background color -- takes 12 bytes */
94 pparam->cb = WinQueryPresParam(hwnd,
95 PP_HILITEBACKGROUNDCOLOR,
96 PP_HILITEBACKGROUNDCOLORINDEX,
97 &pparam->id,
98 sizeof(LONG),
99 (PVOID) pparam->ab, QPF_NOINHERIT);
100 if (pparam->cb) {
101 ppresparams->cb += 12;
102 pparam = (PPARAM) (((ULONG) pparam) + 12);
103 }
104
105 /* disabled foreground color -- takes 12 bytes */
106 pparam->cb = WinQueryPresParam(hwnd,
107 PP_DISABLEDFOREGROUNDCOLOR,
108 PP_DISABLEDFOREGROUNDCOLORINDEX,
109 &pparam->id,
110 sizeof(LONG),
111 (PVOID) pparam->ab, QPF_NOINHERIT);
112 if (pparam->cb) {
113 ppresparams->cb += 12;
114 pparam = (PPARAM) (((ULONG) pparam) + 12);
115 }
116
117 /* disabled background color -- takes 12 bytes */
118 pparam->cb = WinQueryPresParam(hwnd,
119 PP_DISABLEDBACKGROUNDCOLOR,
120 PP_DISABLEDBACKGROUNDCOLORINDEX,
121 &pparam->id,
122 sizeof(LONG),
123 (PVOID) pparam->ab, QPF_NOINHERIT);
124 if (pparam->cb) {
125 ppresparams->cb += 12;
126 pparam = (PPARAM) (((ULONG) pparam) + 12);
127 }
128
129 /* border color -- takes 12 bytes */
130 pparam->cb = WinQueryPresParam(hwnd,
131 PP_BORDERCOLOR,
132 PP_BORDERCOLORINDEX,
133 &pparam->id,
134 sizeof(LONG),
135 (PVOID) pparam->ab, QPF_NOINHERIT);
136 if (pparam->cb) {
137 ppresparams->cb += 12;
138 pparam = (PPARAM) (((ULONG) pparam) + 12);
139 }
140
141 /* font name & size -- maximum 44 bytes (32 for face name, 4 for point size) + 8 for data */
142 pparam->cb = WinQueryPresParam(hwnd,
143 PP_FONTNAMESIZE,
144 0,
145 &pparam->id,
146 36, (PVOID) pparam->ab, QPF_NOINHERIT);
147 if (pparam->cb) {
148 ppresparams->cb += (pparam->cb + 8);
149 pparam = (PPARAM) (((ULONG) pparam) + pparam->cb + 8);
150 }
151
152 /* active color -- takes 12 bytes */
153 pparam->cb = WinQueryPresParam(hwnd,
154 PP_ACTIVECOLOR,
155 PP_ACTIVECOLORINDEX,
156 &pparam->id,
157 sizeof(LONG),
158 (PVOID) pparam->ab, QPF_NOINHERIT);
159 if (pparam->cb) {
160 ppresparams->cb += 12;
161 pparam = (PPARAM) (((ULONG) pparam) + 12);
162 }
163
164 /* inactive color -- takes 12 bytes */
165 pparam->cb = WinQueryPresParam(hwnd,
166 PP_INACTIVECOLOR,
167 PP_INACTIVECOLORINDEX,
168 &pparam->id,
169 sizeof(LONG),
170 (PVOID) pparam->ab, QPF_NOINHERIT);
171 if (pparam->cb) {
172 ppresparams->cb += 12;
173 pparam = (PPARAM) (((ULONG) pparam) + 12);
174 }
175
176 /* active text foreground color -- takes 12 bytes */
177 pparam->cb = WinQueryPresParam(hwnd,
178 PP_ACTIVETEXTFGNDCOLOR,
179 PP_ACTIVETEXTFGNDCOLORINDEX,
180 &pparam->id,
181 sizeof(LONG),
182 (PVOID) pparam->ab,
183 QPF_NOINHERIT | QPF_PURERGBCOLOR);
184 if (pparam->cb) {
185 ppresparams->cb += 12;
186 pparam = (PPARAM) (((ULONG) pparam) + 12);
187 }
188
189 /* active text background color -- takes 12 bytes */
190 pparam->cb = WinQueryPresParam(hwnd,
191 PP_ACTIVETEXTBGNDCOLOR,
192 PP_ACTIVETEXTBGNDCOLORINDEX,
193 &pparam->id,
194 sizeof(LONG),
195 (PVOID) pparam->ab,
196 QPF_NOINHERIT | QPF_PURERGBCOLOR);
197 if (pparam->cb) {
198 ppresparams->cb += 12;
199 pparam = (PPARAM) (((ULONG) pparam) + 12);
200 }
201
202 /* inactive text foreground color -- takes 12 bytes */
203 pparam->cb = WinQueryPresParam(hwnd,
204 PP_INACTIVETEXTFGNDCOLOR,
205 PP_INACTIVETEXTFGNDCOLORINDEX,
206 &pparam->id,
207 sizeof(LONG),
208 (PVOID) pparam->ab,
209 QPF_NOINHERIT | QPF_PURERGBCOLOR);
210 if (pparam->cb) {
211 ppresparams->cb += 12;
212 pparam = (PPARAM) (((ULONG) pparam) + 12);
213 }
214
215 /* inactive text background color -- takes 12 bytes */
216 pparam->cb = WinQueryPresParam(hwnd,
217 PP_INACTIVETEXTBGNDCOLOR,
218 PP_INACTIVETEXTBGNDCOLORINDEX,
219 &pparam->id,
220 sizeof(LONG),
221 (PVOID) pparam->ab,
222 QPF_NOINHERIT | QPF_PURERGBCOLOR);
223 if (pparam->cb) {
224 ppresparams->cb += 12;
225 pparam = (PPARAM) (((ULONG) pparam) + 12);
226 }
227
228 /* shadow color -- takes 12 bytes */
229 pparam->cb = WinQueryPresParam(hwnd,
230 PP_SHADOW, 0,
231 &pparam->id,
232 sizeof(LONG),
233 (PVOID) pparam->ab, QPF_NOINHERIT);
234 if (pparam->cb) {
235 ppresparams->cb += 12;
236 pparam = (PPARAM) (((ULONG) pparam) + 12);
237 }
238
239 /* menu foreground color -- takes 12 bytes */
240 pparam->cb = WinQueryPresParam(hwnd,
241 PP_MENUFOREGROUNDCOLOR,
242 PP_MENUFOREGROUNDCOLORINDEX,
243 &pparam->id,
244 sizeof(LONG),
245 (PVOID) pparam->ab, QPF_NOINHERIT);
246 if (pparam->cb) {
247 ppresparams->cb += 12;
248 pparam = (PPARAM) (((ULONG) pparam) + 12);
249 }
250
251 /* menu background color -- takes 12 bytes */
252 pparam->cb = WinQueryPresParam(hwnd,
253 PP_MENUBACKGROUNDCOLOR,
254 PP_MENUBACKGROUNDCOLORINDEX,
255 &pparam->id,
256 sizeof(LONG),
257 (PVOID) pparam->ab, QPF_NOINHERIT);
258 if (pparam->cb) {
259 ppresparams->cb += 12;
260 pparam = (PPARAM) (((ULONG) pparam) + 12);
261 }
262
263 /* menu hilite foreground color -- takes 12 bytes */
264 pparam->cb = WinQueryPresParam(hwnd,
265 PP_MENUHILITEFGNDCOLOR,
266 PP_MENUHILITEFGNDCOLORINDEX,
267 &pparam->id,
268 sizeof(LONG),
269 (PVOID) pparam->ab, QPF_NOINHERIT);
270 if (pparam->cb) {
271 ppresparams->cb += 12;
272 pparam = (PPARAM) (((ULONG) pparam) + 12);
273 }
274
275 /* menu hilite background color -- takes 12 bytes */
276 pparam->cb = WinQueryPresParam(hwnd,
277 PP_MENUHILITEBGNDCOLOR,
278 PP_MENUHILITEBGNDCOLORINDEX,
279 &pparam->id,
280 sizeof(LONG),
281 (PVOID) pparam->ab, QPF_NOINHERIT);
282 if (pparam->cb) {
283 ppresparams->cb += 12;
284 pparam = (PPARAM) (((ULONG) pparam) + 12);
285 }
286
287 /* menu disabled foreground color -- takes 12 bytes */
288 pparam->cb = WinQueryPresParam(hwnd,
289 PP_MENUDISABLEDFGNDCOLOR,
290 PP_MENUDISABLEDFGNDCOLORINDEX,
291 &pparam->id,
292 sizeof(LONG),
293 (PVOID) pparam->ab, QPF_NOINHERIT);
294 if (pparam->cb) {
295 ppresparams->cb += 12;
296 pparam = (PPARAM) (((ULONG) pparam) + 12);
297 }
298
299 /* menu disabled background color -- takes 12 bytes */
300 pparam->cb = WinQueryPresParam(hwnd,
301 PP_MENUDISABLEDBGNDCOLOR,
302 PP_MENUDISABLEDBGNDCOLORINDEX,
303 &pparam->id,
304 sizeof(LONG),
305 (PVOID) pparam->ab, QPF_NOINHERIT);
306 if (pparam->cb) {
307 ppresparams->cb += 12;
308 pparam = (PPARAM) (((ULONG) pparam) + 12);
309 }
310
311 if (ppresparams->cb)
312 PrfWriteProfileData(prof,
313 appname, tagname, ppresparams, ppresparams->cb + 4);
314
315 free(ppresparams);
316}
317
318#endif // NEVER
319
320VOID CopyPresParams(HWND target, HWND source)
321{
322 /*
323 * Copy presentation parameters of interest to us from one window
324 * to another
325 */
326
327 ULONG AttrFound, AttrValue[64], cbRetLen, x = 0,
328 AttrName[] = { PP_FONTNAMESIZE, PP_FOREGROUNDCOLOR,
329 PP_BACKGROUNDCOLOR, PP_HILITEBACKGROUNDCOLOR,
330 PP_HILITEFOREGROUNDCOLOR, PP_BORDERCOLOR, PP_MENUFOREGROUNDCOLOR,
331 PP_MENUBACKGROUNDCOLOR, PP_FOREGROUNDCOLORINDEX, PP_BACKGROUNDCOLORINDEX,
332 PP_HILITEFOREGROUNDCOLORINDEX, PP_HILITEBACKGROUNDCOLORINDEX,
333 PP_DISABLEDFOREGROUNDCOLOR, PP_DISABLEDBACKGROUNDCOLOR,
334 PP_DISABLEDFOREGROUNDCOLORINDEX, PP_DISABLEDBACKGROUNDCOLORINDEX,
335 PP_BORDERCOLOR, PP_BORDERCOLORINDEX, PP_FONTHANDLE, PP_ACTIVECOLOR,
336 PP_ACTIVECOLORINDEX, PP_INACTIVECOLOR, PP_INACTIVECOLORINDEX,
337 PP_ACTIVETEXTFGNDCOLOR, PP_ACTIVETEXTFGNDCOLORINDEX, PP_ACTIVETEXTBGNDCOLOR,
338 PP_ACTIVETEXTBGNDCOLORINDEX, PP_INACTIVETEXTFGNDCOLOR,
339 PP_INACTIVETEXTFGNDCOLORINDEX, PP_INACTIVETEXTBGNDCOLOR,
340 PP_INACTIVETEXTBGNDCOLORINDEX, PP_SHADOW, PP_MENUFOREGROUNDCOLORINDEX,
341 PP_MENUBACKGROUNDCOLORINDEX, PP_MENUHILITEFGNDCOLOR, PP_MENUHILITEFGNDCOLORINDEX,
342 PP_MENUHILITEBGNDCOLOR, PP_MENUHILITEBGNDCOLORINDEX, PP_MENUDISABLEDFGNDCOLOR,
343 PP_MENUDISABLEDFGNDCOLORINDEX, PP_MENUDISABLEDBGNDCOLOR,
344 PP_MENUDISABLEDBGNDCOLORINDEX, PP_SHADOWTEXTCOLOR, PP_SHADOWTEXTCOLORINDEX,
345 PP_SHADOWHILITEFGNDCOLOR, PP_SHADOWHILITEFGNDCOLORINDEX, PP_SHADOWHILITEBGNDCOLOR,
346 PP_SHADOWHILITEBGNDCOLORINDEX, PP_ICONTEXTBACKGROUNDCOLOR,
347 PP_ICONTEXTBACKGROUNDCOLORINDEX, PP_BORDERLIGHTCOLOR, PP_BORDERDARKCOLOR,
348 PP_BORDER2COLOR, PP_BORDER2LIGHTCOLOR, PP_BORDER2DARKCOLOR, PP_BORDERDEFAULTCOLOR,
349 PP_FIELDBACKGROUNDCOLOR, PP_BUTTONBACKGROUNDCOLOR, PP_BUTTONBORDERLIGHTCOLOR,
350 PP_BUTTONBORDERDARKCOLOR, PP_ARROWCOLOR, PP_ARROWBORDERLIGHTCOLOR,
351 PP_ARROWBORDERDARKCOLOR, PP_ARROWDISABLEDCOLOR, PP_CHECKLIGHTCOLOR,
352 PP_CHECKMIDDLECOLOR, PP_CHECKDARKCOLOR, PP_PAGEFOREGROUNDCOLOR,
353 PP_PAGEBACKGROUNDCOLOR, PP_MAJORTABFOREGROUNDCOLOR, PP_MAJORTABBACKGROUNDCOLOR,
354 PP_MINORTABFOREGROUNDCOLOR, PP_MINORTABBACKGROUNDCOLOR, PP_USER, 0 };
355
356 while (AttrName[x]) {
357 cbRetLen = WinQueryPresParam(source,
358 AttrName[x],
359 0,
360 &AttrFound,
361 sizeof(AttrValue),
362 &AttrValue, 0);
363 //printf("%s %x\n", AttrValue, source); fflush(stdout);
364 //printf("%x\n", AttrValue); fflush(stdout);
365 if (cbRetLen)
366 WinSetPresParam(target, AttrName[x], cbRetLen, (PVOID) AttrValue);
367 x++;
368 } //while
369}
370
371VOID SetPresParams(HWND hwnd, RGB2 * back, RGB2 * fore, RGB2 * border,
372 CHAR * font)
373{
374 if (font)
375 WinSetPresParam(hwnd, PP_FONTNAMESIZE, strlen(font) + 1, (PVOID) font);
376 if (back)
377 WinSetPresParam(hwnd, PP_BACKGROUNDCOLOR, sizeof(RGB2), (PVOID) back);
378 if (fore)
379 WinSetPresParam(hwnd, PP_FOREGROUNDCOLOR, sizeof(RGB2), (PVOID) fore);
380 if (border)
381 WinSetPresParam(hwnd, PP_BORDERCOLOR, sizeof(RGB2), (PVOID) border);
382}
383
384VOID IfNoParam(HWND hwnd, CHAR * keyroot, ULONG size, PVOID attrvalue)
385{
386 ULONG fsize = 0;
387 CHAR s[81];
388
389 sprintf(s, "%s", keyroot);
390 if (!PrfQueryProfileSize(fmprof, appname, s, &fsize) || !fsize)
391 WinSetPresParam(hwnd, PP_FONTNAMESIZE, size, (PVOID) attrvalue);
392}
393
394VOID PresParamChanged(HWND hwnd, CHAR * keyroot, MPARAM mp1, MPARAM mp2)
395{
396 ULONG AttrFound, AttrValue[64], cbRetLen;
397
398 cbRetLen = WinQueryPresParam(hwnd, (ULONG) mp1, 0, &AttrFound,
399 (ULONG) sizeof(AttrValue), &AttrValue, 0);
400 if (cbRetLen) {
401
402 CHAR s[133];
403
404 *s = 0;
405 switch (AttrFound) {
406 case PP_BACKGROUNDCOLOR:
407 sprintf(s, "%s.Backgroundcolor", keyroot);
408 break;
409 case PP_FOREGROUNDCOLOR:
410 sprintf(s, "%s.Foregroundcolor", keyroot);
411 break;
412 case PP_HILITEBACKGROUNDCOLOR:
413 sprintf(s, "%s.Hilitebackgroundcolor", keyroot);
414 break;
415 case PP_HILITEFOREGROUNDCOLOR:
416 sprintf(s, "%s.Hiliteforegroundcolor", keyroot);
417 break;
418 case PP_BORDERCOLOR:
419 sprintf(s, "%s.Bordercolor", keyroot);
420 break;
421 case PP_FONTNAMESIZE:
422 sprintf(s, "%s.Fontnamesize", keyroot);
423 break;
424 default:
425 break;
426 }
427 if (*s)
428 PrfWriteProfileData(fmprof, appname, s, (PVOID) AttrValue, cbRetLen);
429 }
430}
431
432VOID RestorePresParams(HWND hwnd, CHAR * keyroot)
433{
434 CHAR s[81];
435 ULONG AttrValue[64], size;
436
437 size = sizeof(AttrValue);
438 sprintf(s, "%s.Backgroundcolor", keyroot);
439 if (PrfQueryProfileData(fmprof, appname, s, (PVOID) AttrValue, &size)
440 && size)
441 WinSetPresParam(hwnd, PP_BACKGROUNDCOLOR, size, (PVOID) AttrValue);
442 size = sizeof(AttrValue);
443 sprintf(s, "%s.Foregroundcolor", keyroot);
444 if (PrfQueryProfileData(fmprof, appname, s, (PVOID) AttrValue, &size)
445 && size)
446 WinSetPresParam(hwnd, PP_FOREGROUNDCOLOR, size, (PVOID) AttrValue);
447 size = sizeof(AttrValue);
448 sprintf(s, "%s.Hilitebackgroundcolor", keyroot);
449 if (PrfQueryProfileData(fmprof, appname, s, (PVOID) AttrValue, &size)
450 && size)
451 WinSetPresParam(hwnd, PP_HILITEBACKGROUNDCOLOR, size, (PVOID) AttrValue);
452 size = sizeof(AttrValue);
453 sprintf(s, "%s.Hiliteforegroundcolor", keyroot);
454 if (PrfQueryProfileData(fmprof, appname, s, (PVOID) AttrValue, &size)
455 && size)
456 WinSetPresParam(hwnd, PP_HILITEFOREGROUNDCOLOR, size, (PVOID) AttrValue);
457 size = sizeof(AttrValue);
458 sprintf(s, "%s.Bordercolor", keyroot);
459 if (PrfQueryProfileData(fmprof, appname, s, (PVOID) AttrValue, &size)
460 && size)
461 WinSetPresParam(hwnd, PP_BORDERCOLOR, size, (PVOID) AttrValue);
462 size = sizeof(AttrValue);
463 sprintf(s, "%s.Fontnamesize", keyroot);
464 if (PrfQueryProfileData(fmprof,
465 appname, s, (PVOID) AttrValue, &size) && size)
466 WinSetPresParam(hwnd, PP_FONTNAMESIZE, size, (PVOID) AttrValue);
467}
468
469#pragma alloc_text(PRESPARAM,CopyPresParams,SetPresParams,IfNoParam)
470#pragma alloc_text(PRESPARAM,PresParamChanged,RestorePresParams)
471#pragma alloc_text(PRESPARAM,StoreWndPresParams)
Note: See TracBrowser for help on using the repository browser.