Add GNU LGPL headers to all .c .C and .h files
[oweals/cde.git] / cde / lib / DtWidget / NewCvt.c
1 /*
2  * CDE - Common Desktop Environment
3  *
4  * Copyright (c) 1993-2012, The Open Group. All rights reserved.
5  *
6  * These libraries and programs are free software; you can
7  * redistribute them and/or modify them under the terms of the GNU
8  * Lesser General Public License as published by the Free Software
9  * Foundation; either version 2 of the License, or (at your option)
10  * any later version.
11  *
12  * These libraries and programs are distributed in the hope that
13  * they will be useful, but WITHOUT ANY WARRANTY; without even the
14  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15  * PURPOSE. See the GNU Lesser General Public License for more
16  * details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with these librararies and programs; if not, write
20  * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21  * Floor, Boston, MA 02110-1301 USA
22  */
23 /* $XConsortium: NewCvt.c /main/5 1996/03/26 19:53:53 drk $
24  *
25  * (c) Copyright 1996 Digital Equipment Corporation.
26  * (c) Copyright 1990,1996 Hewlett-Packard Company.
27  * (c) Copyright 1996 International Business Machines Corp.
28  * (c) Copyright 1996 Sun Microsystems, Inc.
29  * (c) Copyright 1996 Novell, Inc. 
30  * (c) Copyright 1996 FUJITSU LIMITED.
31  * (c) Copyright 1996 Hitachi.
32  */
33
34 /**---------------------------------------------------------------------
35 ***     
36 ***     file:           NewCvt.c
37 ***
38 ***     project:        Motif Widgets
39 ***
40 ***     description:    Source code for new MotifPlus resource converters.
41 ***     
42 ***-------------------------------------------------------------------*/
43
44
45 /*-------------------------------------------------------------
46 **      Include Files
47 */
48
49 #include <Dt/DialogBox.h>
50 #include <Dt/Icon.h>
51 #include <Dt/TitleBox.h>
52 #include "DtWidgetI.h"
53
54
55 extern void _DtRegisterNewConverters( void ) ;
56
57 /********    Static Function Declarations    ********/
58
59 static Boolean _StringsAreEqual( 
60                         String in_str,
61                         String test_str) ;
62 static void _DtCvtStringToBehavior( 
63                         XrmValuePtr args,
64                         Cardinal *num_args,
65                         XrmValue *from_val,
66                         XrmValue *to_val) ;
67 static void _DtCvtStringToChildType( 
68                         XrmValuePtr args,
69                         Cardinal *num_args,
70                         XrmValue *from_val,
71                         XrmValue *to_val) ;
72 static void _DtCvtStringToFillMode( 
73                         XrmValuePtr args,
74                         Cardinal *num_args,
75                         XrmValue *from_val,
76                         XrmValue *to_val) ;
77 static void _DtCvtStringToPixmapPosition( 
78                         XrmValuePtr args,
79                         Cardinal *num_args,
80                         XrmValue *from_val,
81                         XrmValue *to_val) ;
82 static void _DtCvtStringToStringPosition( 
83                         XrmValuePtr args,
84                         Cardinal *num_args,
85                         XrmValue *from_val,
86                         XrmValue *to_val) ;
87 static void _DtCvtStringToTitlePosition( 
88                         XrmValuePtr args,
89                         Cardinal *num_args,
90                         XrmValue *from_val,
91                         XrmValue *to_val) ;
92
93 /********    End Static Function Declarations    ********/
94
95 \f
96 /*-------------------------------------------------------------
97 **      _DtRegisterNewConverters
98 **              Convert MotifPlus resource converters.
99 */
100 void 
101 _DtRegisterNewConverters( void )
102 {
103   static Boolean new_converters_registered = False;
104   
105   if (!new_converters_registered)
106     {
107       _DtProcessLock();
108       if (!new_converters_registered)
109         {
110           /* Register new converters. */
111           XtAddConverter (XmRString, XmRBehavior,
112                           _DtCvtStringToBehavior, NULL, 0);
113
114           XtAddConverter (XmRString, XmRChildType,
115                           _DtCvtStringToChildType, NULL, 0);
116
117           XtAddConverter (XmRString, XmRFillMode,
118                           _DtCvtStringToFillMode, NULL, 0);
119
120           XtAddConverter (XmRString, XmRPixmapPosition,
121                           _DtCvtStringToPixmapPosition, NULL, 0);
122
123           XtAddConverter (XmRString, XmRStringPosition,
124                           _DtCvtStringToStringPosition, NULL, 0);
125
126           XtAddConverter (XmRString, XmRTitlePosition,
127                           _DtCvtStringToTitlePosition, NULL, 0);
128
129           new_converters_registered = True;
130         }
131       _DtProcessUnlock();
132     }
133 }
134
135
136 \f
137 /*-------------------------------------------------------------
138 **      _StringsAreEqual
139 **              Compare possibly mixed case string with lowercase string.
140 */
141 static Boolean 
142 _StringsAreEqual(
143         String in_str,
144         String test_str )
145 {
146         int     i, j;
147
148         for (;;)
149         {
150                 i = *in_str;
151                 j = *test_str;
152
153                 if (isupper (i))
154                         i = tolower (i);
155                 if (i != j) return (False);
156                 if (i == 0) return (True);
157
158                 in_str++;
159                 test_str++;
160         }
161 }
162
163
164 \f
165 /*-------------------------------------------------------------
166 **      _DtCvtStringToBehavior
167 **              Convert XmRString to XmRBehavior.
168 */
169 static void 
170 _DtCvtStringToBehavior(
171         XrmValuePtr args,
172         Cardinal *num_args,
173         XrmValue *from_val,
174         XrmValue *to_val )
175 {
176         String                  string = (String) from_val->addr;
177         static unsigned char    value;
178
179         to_val->size = sizeof (unsigned char);
180         to_val->addr = (XtPointer) &value;
181
182         if (_StringsAreEqual (string, STR_ICON_LABEL))
183                 value = XmICON_LABEL;
184         else if (_StringsAreEqual (string, STR_ICON_BUTTON))
185                 value = XmICON_BUTTON;
186         else if (_StringsAreEqual (string, STR_ICON_TOGGLE))
187                 value = XmICON_TOGGLE;
188         else if (_StringsAreEqual (string, STR_ICON_DRAG))
189                 value = XmICON_DRAG;
190         else
191         {
192                 to_val->size = 0;
193                 to_val->addr = NULL;
194                 XtStringConversionWarning ((String) from_val->addr,
195                                 XmRBehavior);
196         }
197 }
198
199
200 \f
201 /*-------------------------------------------------------------
202 **      _DtCvtStringToChildType
203 **              Convert XmRString to XmRChildType.
204 */
205 static void 
206 _DtCvtStringToChildType(
207         XrmValuePtr args,
208         Cardinal *num_args,
209         XrmValue *from_val,
210         XrmValue *to_val )
211 {
212         String                  string = (String) from_val->addr;
213         static unsigned char    value;
214
215         to_val->size = sizeof (unsigned char);
216         to_val->addr = (XtPointer) &value;
217
218         if (_StringsAreEqual (string, STR_WORK_AREA))
219                 value = XmWORK_AREA;
220         else if (_StringsAreEqual (string, STR_TITLE_AREA))
221                 value = XmTITLE_AREA;
222         else if (_StringsAreEqual (string, STR_SEPARATOR))
223                 value = XmSEPARATOR;
224         else if (_StringsAreEqual (string, STR_BUTTON))
225                 value = XmBUTTON;
226         else
227         {
228                 to_val->size = 0;
229                 to_val->addr = NULL;
230                 XtStringConversionWarning ((String) from_val->addr,
231                                 XmRChildType);
232         }
233 }
234
235
236 \f
237 /*-------------------------------------------------------------
238 **      _DtCvtStringToFillMode
239 **              Convert XmRString to XmRFillMode.
240 */
241 static void 
242 _DtCvtStringToFillMode(
243         XrmValuePtr args,
244         Cardinal *num_args,
245         XrmValue *from_val,
246         XrmValue *to_val )
247 {
248         String                  string = (String) from_val->addr;
249         static unsigned char    value;
250
251         to_val->size = sizeof (unsigned char);
252         to_val->addr = (XtPointer) &value;
253
254         if (_StringsAreEqual (string, STR_FILL_NONE))
255                 value = XmFILL_NONE;
256         else if (_StringsAreEqual (string, STR_FILL_PARENT))
257                 value = XmFILL_PARENT;
258         else if (_StringsAreEqual (string, STR_FILL_SELF))
259                 value = XmFILL_SELF;
260         else if (_StringsAreEqual (string, STR_FILL_TRANSPARENT))
261                 value = XmFILL_TRANSPARENT;
262         else
263         {
264                 to_val->size = 0;
265                 to_val->addr = NULL;
266                 XtStringConversionWarning ((String) from_val->addr,
267                                 XmRFillMode);
268         }
269 }
270
271
272 \f
273 /*-------------------------------------------------------------
274 **      _DtCvtStringToPixmapPosition
275 **              Convert string to pixmap position.
276 */
277 static void 
278 _DtCvtStringToPixmapPosition(
279         XrmValuePtr args,
280         Cardinal *num_args,
281         XrmValue *from_val,
282         XrmValue *to_val )
283 {
284         String                  string = (String) from_val->addr;
285         static unsigned char    value;
286
287         to_val->size = sizeof (unsigned char);
288         to_val->addr = (XtPointer) &value;
289
290         if (_StringsAreEqual (string, STR_PIXMAP_TOP))
291                 value = XmPIXMAP_TOP;
292         else if (_StringsAreEqual (string, STR_PIXMAP_BOTTOM))
293                 value = XmPIXMAP_BOTTOM;
294         else if (_StringsAreEqual (string, STR_PIXMAP_LEFT))
295                 value = XmPIXMAP_LEFT;
296         else if (_StringsAreEqual (string, STR_PIXMAP_RIGHT))
297                 value = XmPIXMAP_RIGHT;
298         else if (_StringsAreEqual (string, "pixmap_middle"))
299                 value = XmPIXMAP_MIDDLE;
300         else
301         {
302                 to_val->size = 0;
303                 to_val->addr = NULL;
304                 XtStringConversionWarning ((String) from_val->addr,
305                                 XmRPixmapPosition);
306         }
307 }
308
309
310 \f
311 /*-------------------------------------------------------------
312 **      _DtCvtStringToStringPosition
313 **              Convert XmRString to XmRStringPosition.
314 */
315 static void 
316 _DtCvtStringToStringPosition(
317         XrmValuePtr args,
318         Cardinal *num_args,
319         XrmValue *from_val,
320         XrmValue *to_val )
321 {
322         String                  string = (String) from_val->addr;
323         static unsigned char    value;
324
325         to_val->size = sizeof (unsigned char);
326         to_val->addr = (XtPointer) &value;
327
328         if (_StringsAreEqual (string, STR_STRING_TOP))
329                 value = XmSTRING_TOP;
330         else if (_StringsAreEqual (string, STR_STRING_BOTTOM))
331                 value = XmSTRING_BOTTOM;
332         else if (_StringsAreEqual (string, STR_STRING_LEFT))
333                 value = XmSTRING_LEFT;
334         else if (_StringsAreEqual (string, STR_STRING_RIGHT))
335                 value = XmSTRING_RIGHT;
336         else
337         {
338                 to_val->size = 0;
339                 to_val->addr = NULL;
340                 XtStringConversionWarning ((String) from_val->addr,
341                                 XmRStringPosition);
342         }
343 }
344
345
346 \f
347 /*-------------------------------------------------------------
348 **      _DtCvtStringToTitlePosition
349 **              Convert XmRString to XmRTitlePosition.
350 */
351 static void 
352 _DtCvtStringToTitlePosition(
353         XrmValuePtr args,
354         Cardinal *num_args,
355         XrmValue *from_val,
356         XrmValue *to_val )
357 {
358         String                  string = (String) from_val->addr;
359         static unsigned char    value;
360
361         to_val->size = sizeof (unsigned char);
362         to_val->addr = (XtPointer) &value;
363
364         if (_StringsAreEqual (string, STR_TITLE_TOP))
365                 value = XmTITLE_TOP;
366         else if (_StringsAreEqual (string, STR_TITLE_BOTTOM))
367                 value = XmTITLE_BOTTOM;
368         else
369         {
370                 to_val->size = 0;
371                 to_val->addr = NULL;
372                 XtStringConversionWarning ((String) from_val->addr,
373                                 XmRTitlePosition);
374         }
375 }
376