source: trunk/dll/presparm.c@ 1036

Last change on this file since 1036 was 1009, checked in by Steven Levine, 17 years ago

Add xfree xstrdup Fortify support
Add MT capable Fortify scope logic

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