source: trunk/dll/presparm.c@ 793

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

Move #pragma alloc_text to end for OpenWatcom compat

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