source: trunk/dll/presparm.c@ 2

Last change on this file since 2 was 2, checked in by root, 23 years ago

Initial revision

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