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
RevLine 
[356]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
[793]12 20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
[356]13
14***********************************************************************/
15
[2]16#define INCL_DOS
17#define INCL_WIN
18#define INCL_GPI
[356]19#include <os2.h>
[2]20
21#include <stdarg.h>
22#include <stdio.h>
23#include <stdlib.h>
24#include <string.h>
25#include <ctype.h>
[356]26
[2]27#include "fm3dll.h"
28
[689]29// static PSZ pszSrcFile = __FILE__;
[356]30
[2]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 */
[551]37VOID StoreWndPresParams(HWND hwnd, CHAR * tagname, HINI prof)
[356]38{
[551]39 PARAM *pparam;
40 PRESPARAMS *ppresparams;
[2]41
[551]42 if (!tagname || !*tagname || !prof)
[2]43 return;
44 /* setup memory access */
[551]45 ppresparams = (PRESPARAMS *) xmalloc(PP_MAXBUF, pszSrcFile, __LINE__);
46 if (!ppresparams)
[2]47 return;
[766]48 ppresparams->cb = 0; /* no entries yet */
[551]49 pparam = ppresparams->aparam; /* cast structure onto memory */
[2]50
51 /*
52 * query every possible presentation parameter...
53 */
54
55 /* foreground color -- takes 12 bytes */
56 pparam->cb = WinQueryPresParam(hwnd,
[551]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? */
[766]63 ppresparams->cb += 12; /* used 12 bytes */
64 pparam = (PPARAM) (((ULONG) pparam) + 12); /* advance 12 bytes to next memory location */
[2]65 }
66
67 /* background color -- takes 12 bytes */
68 pparam->cb = WinQueryPresParam(hwnd,
[551]69 PP_BACKGROUNDCOLOR,
70 PP_BACKGROUNDCOLORINDEX,
71 &pparam->id,
72 sizeof(LONG),
73 (PVOID) pparam->ab, QPF_NOINHERIT);
74 if (pparam->cb) {
[766]75 ppresparams->cb += 12;
76 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]77 }
78
79 /* hilited foreground color -- takes 12 bytes */
80 pparam->cb = WinQueryPresParam(hwnd,
[551]81 PP_HILITEFOREGROUNDCOLOR,
82 PP_HILITEFOREGROUNDCOLORINDEX,
83 &pparam->id,
84 sizeof(LONG),
85 (PVOID) pparam->ab, QPF_NOINHERIT);
86 if (pparam->cb) {
[766]87 ppresparams->cb += 12;
88 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]89 }
90
91 /* hilited background color -- takes 12 bytes */
92 pparam->cb = WinQueryPresParam(hwnd,
[551]93 PP_HILITEBACKGROUNDCOLOR,
94 PP_HILITEBACKGROUNDCOLORINDEX,
95 &pparam->id,
96 sizeof(LONG),
97 (PVOID) pparam->ab, QPF_NOINHERIT);
98 if (pparam->cb) {
[766]99 ppresparams->cb += 12;
100 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]101 }
102
103 /* disabled foreground color -- takes 12 bytes */
104 pparam->cb = WinQueryPresParam(hwnd,
[551]105 PP_DISABLEDFOREGROUNDCOLOR,
106 PP_DISABLEDFOREGROUNDCOLORINDEX,
107 &pparam->id,
108 sizeof(LONG),
109 (PVOID) pparam->ab, QPF_NOINHERIT);
110 if (pparam->cb) {
[766]111 ppresparams->cb += 12;
112 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]113 }
114
115 /* disabled background color -- takes 12 bytes */
116 pparam->cb = WinQueryPresParam(hwnd,
[551]117 PP_DISABLEDBACKGROUNDCOLOR,
118 PP_DISABLEDBACKGROUNDCOLORINDEX,
119 &pparam->id,
120 sizeof(LONG),
121 (PVOID) pparam->ab, QPF_NOINHERIT);
122 if (pparam->cb) {
[766]123 ppresparams->cb += 12;
124 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]125 }
126
127 /* border color -- takes 12 bytes */
128 pparam->cb = WinQueryPresParam(hwnd,
[551]129 PP_BORDERCOLOR,
130 PP_BORDERCOLORINDEX,
131 &pparam->id,
132 sizeof(LONG),
133 (PVOID) pparam->ab, QPF_NOINHERIT);
134 if (pparam->cb) {
[766]135 ppresparams->cb += 12;
136 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]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,
[551]141 PP_FONTNAMESIZE,
[766]142 0,
[551]143 &pparam->id,
[766]144 36, (PVOID) pparam->ab, QPF_NOINHERIT);
[551]145 if (pparam->cb) {
[766]146 ppresparams->cb += (pparam->cb + 8);
147 pparam = (PPARAM) (((ULONG) pparam) + pparam->cb + 8);
[2]148 }
149
150 /* active color -- takes 12 bytes */
151 pparam->cb = WinQueryPresParam(hwnd,
[551]152 PP_ACTIVECOLOR,
153 PP_ACTIVECOLORINDEX,
154 &pparam->id,
155 sizeof(LONG),
156 (PVOID) pparam->ab, QPF_NOINHERIT);
157 if (pparam->cb) {
[766]158 ppresparams->cb += 12;
159 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]160 }
161
162 /* inactive color -- takes 12 bytes */
163 pparam->cb = WinQueryPresParam(hwnd,
[551]164 PP_INACTIVECOLOR,
165 PP_INACTIVECOLORINDEX,
166 &pparam->id,
167 sizeof(LONG),
168 (PVOID) pparam->ab, QPF_NOINHERIT);
169 if (pparam->cb) {
[766]170 ppresparams->cb += 12;
171 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]172 }
173
174 /* active text foreground color -- takes 12 bytes */
175 pparam->cb = WinQueryPresParam(hwnd,
[551]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) {
[766]183 ppresparams->cb += 12;
184 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]185 }
186
187 /* active text background color -- takes 12 bytes */
188 pparam->cb = WinQueryPresParam(hwnd,
[551]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) {
[766]196 ppresparams->cb += 12;
197 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]198 }
199
200 /* inactive text foreground color -- takes 12 bytes */
201 pparam->cb = WinQueryPresParam(hwnd,
[551]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) {
[766]209 ppresparams->cb += 12;
210 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]211 }
212
213 /* inactive text background color -- takes 12 bytes */
214 pparam->cb = WinQueryPresParam(hwnd,
[551]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) {
[766]222 ppresparams->cb += 12;
223 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]224 }
225
226 /* shadow color -- takes 12 bytes */
227 pparam->cb = WinQueryPresParam(hwnd,
[766]228 PP_SHADOW, 0,
[551]229 &pparam->id,
230 sizeof(LONG),
231 (PVOID) pparam->ab, QPF_NOINHERIT);
232 if (pparam->cb) {
[766]233 ppresparams->cb += 12;
234 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]235 }
236
237 /* menu foreground color -- takes 12 bytes */
238 pparam->cb = WinQueryPresParam(hwnd,
[551]239 PP_MENUFOREGROUNDCOLOR,
240 PP_MENUFOREGROUNDCOLORINDEX,
241 &pparam->id,
242 sizeof(LONG),
243 (PVOID) pparam->ab, QPF_NOINHERIT);
244 if (pparam->cb) {
[766]245 ppresparams->cb += 12;
246 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]247 }
248
249 /* menu background color -- takes 12 bytes */
250 pparam->cb = WinQueryPresParam(hwnd,
[551]251 PP_MENUBACKGROUNDCOLOR,
252 PP_MENUBACKGROUNDCOLORINDEX,
253 &pparam->id,
254 sizeof(LONG),
255 (PVOID) pparam->ab, QPF_NOINHERIT);
256 if (pparam->cb) {
[766]257 ppresparams->cb += 12;
258 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]259 }
260
261 /* menu hilite foreground color -- takes 12 bytes */
262 pparam->cb = WinQueryPresParam(hwnd,
[551]263 PP_MENUHILITEFGNDCOLOR,
264 PP_MENUHILITEFGNDCOLORINDEX,
265 &pparam->id,
266 sizeof(LONG),
267 (PVOID) pparam->ab, QPF_NOINHERIT);
268 if (pparam->cb) {
[766]269 ppresparams->cb += 12;
270 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]271 }
272
273 /* menu hilite background color -- takes 12 bytes */
274 pparam->cb = WinQueryPresParam(hwnd,
[551]275 PP_MENUHILITEBGNDCOLOR,
276 PP_MENUHILITEBGNDCOLORINDEX,
277 &pparam->id,
278 sizeof(LONG),
279 (PVOID) pparam->ab, QPF_NOINHERIT);
280 if (pparam->cb) {
[766]281 ppresparams->cb += 12;
282 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]283 }
284
285 /* menu disabled foreground color -- takes 12 bytes */
286 pparam->cb = WinQueryPresParam(hwnd,
[551]287 PP_MENUDISABLEDFGNDCOLOR,
288 PP_MENUDISABLEDFGNDCOLORINDEX,
289 &pparam->id,
290 sizeof(LONG),
291 (PVOID) pparam->ab, QPF_NOINHERIT);
292 if (pparam->cb) {
[766]293 ppresparams->cb += 12;
294 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]295 }
296
297 /* menu disabled background color -- takes 12 bytes */
298 pparam->cb = WinQueryPresParam(hwnd,
[551]299 PP_MENUDISABLEDBGNDCOLOR,
300 PP_MENUDISABLEDBGNDCOLORINDEX,
301 &pparam->id,
302 sizeof(LONG),
303 (PVOID) pparam->ab, QPF_NOINHERIT);
304 if (pparam->cb) {
[766]305 ppresparams->cb += 12;
306 pparam = (PPARAM) (((ULONG) pparam) + 12);
[2]307 }
308
[551]309 if (ppresparams->cb)
[2]310 PrfWriteProfileData(prof,
[766]311 appname, tagname, ppresparams, ppresparams->cb + 4);
[2]312
313 free(ppresparams);
314}
315
[356]316#endif // NEVER
[2]317
[551]318VOID CopyPresParams(HWND target, HWND source)
[356]319{
[2]320 /*
321 * Copy presentation parameters of interest to us from one window
322 * to another
323 */
324
[766]325 ULONG AttrFound, AttrValue[64], cbRetLen, x = 0,
[551]326 AttrName[] = { PP_FONTNAMESIZE, PP_BACKGROUNDCOLOR,
327 PP_FOREGROUNDCOLOR, PP_HILITEBACKGROUNDCOLOR,
328 PP_HILITEFOREGROUNDCOLOR, PP_BORDERCOLOR,
[766]329 0
[551]330 };
[2]331
[551]332 while (AttrName[x]) {
[2]333 cbRetLen = WinQueryPresParam(source,
[551]334 AttrName[x],
335 0,
336 &AttrFound,
337 (ULONG) sizeof(AttrValue), &AttrValue, 0);
338 if (cbRetLen)
339 WinSetPresParam(target, AttrName[x], cbRetLen, (PVOID) AttrValue);
[2]340 x++;
341 }
342}
343
[551]344VOID SetPresParams(HWND hwnd, RGB2 * back, RGB2 * fore, RGB2 * border,
345 CHAR * font)
[356]346{
[551]347 if (font)
[766]348 WinSetPresParam(hwnd, PP_FONTNAMESIZE, strlen(font) + 1, (PVOID) font);
[551]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);
[2]355}
356
[551]357VOID IfNoParam(HWND hwnd, CHAR * keyroot, ULONG size, PVOID attrvalue)
[356]358{
[766]359 ULONG fsize = 0;
[551]360 CHAR s[81];
[2]361
[551]362 sprintf(s, "%s", keyroot);
363 if (!PrfQueryProfileSize(fmprof, appname, s, &fsize) || !fsize)
364 WinSetPresParam(hwnd, PP_FONTNAMESIZE, size, (PVOID) attrvalue);
[2]365}
366
[551]367VOID PresParamChanged(HWND hwnd, CHAR * keyroot, MPARAM mp1, MPARAM mp2)
[356]368{
[551]369 ULONG AttrFound, AttrValue[64], cbRetLen;
[2]370
[551]371 cbRetLen = WinQueryPresParam(hwnd, (ULONG) mp1, 0, &AttrFound,
372 (ULONG) sizeof(AttrValue), &AttrValue, 0);
373 if (cbRetLen) {
[2]374
375 CHAR s[133];
376
377 *s = 0;
[551]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;
[2]399 }
[551]400 if (*s)
401 PrfWriteProfileData(fmprof, appname, s, (PVOID) AttrValue, cbRetLen);
[2]402 }
403}
404
[551]405VOID RestorePresParams(HWND hwnd, CHAR * keyroot)
[356]406{
[551]407 CHAR s[81];
408 ULONG AttrValue[64], size;
[2]409
410 size = sizeof(AttrValue);
[551]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);
[2]415 size = sizeof(AttrValue);
[551]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);
[2]420 size = sizeof(AttrValue);
[551]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);
[2]425 size = sizeof(AttrValue);
[551]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);
[2]430 size = sizeof(AttrValue);
[551]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);
[2]435 size = sizeof(AttrValue);
[551]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);
[2]440}
[793]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.