dtcalc: change from obsoleted MAXFLOAT to FLT_MAX from std C
[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 #include <ctype.h>
55
56 extern void _DtRegisterNewConverters( void ) ;
57
58 /********    Static Function Declarations    ********/
59
60 static Boolean _StringsAreEqual( 
61                         String in_str,
62                         String test_str) ;
63 static void _DtCvtStringToBehavior( 
64                         XrmValuePtr args,
65                         Cardinal *num_args,
66                         XrmValue *from_val,
67                         XrmValue *to_val) ;
68 static void _DtCvtStringToChildType( 
69                         XrmValuePtr args,
70                         Cardinal *num_args,
71                         XrmValue *from_val,
72                         XrmValue *to_val) ;
73 static void _DtCvtStringToFillMode( 
74                         XrmValuePtr args,
75                         Cardinal *num_args,
76                         XrmValue *from_val,
77                         XrmValue *to_val) ;
78 static void _DtCvtStringToPixmapPosition( 
79                         XrmValuePtr args,
80                         Cardinal *num_args,
81                         XrmValue *from_val,
82                         XrmValue *to_val) ;
83 static void _DtCvtStringToStringPosition( 
84                         XrmValuePtr args,
85                         Cardinal *num_args,
86                         XrmValue *from_val,
87                         XrmValue *to_val) ;
88 static void _DtCvtStringToTitlePosition( 
89                         XrmValuePtr args,
90                         Cardinal *num_args,
91                         XrmValue *from_val,
92                         XrmValue *to_val) ;
93
94 /********    End Static Function Declarations    ********/
95
96 \f
97 /*-------------------------------------------------------------
98 **      _DtRegisterNewConverters
99 **              Convert MotifPlus resource converters.
100 */
101 void 
102 _DtRegisterNewConverters( void )
103 {
104   static Boolean new_converters_registered = False;
105   
106   if (!new_converters_registered)
107     {
108       _DtProcessLock();
109       if (!new_converters_registered)
110         {
111           /* Register new converters. */
112           XtAddConverter (XmRString, XmRBehavior,
113                           _DtCvtStringToBehavior, NULL, 0);
114
115           XtAddConverter (XmRString, XmRChildType,
116                           _DtCvtStringToChildType, NULL, 0);
117
118           XtAddConverter (XmRString, XmRFillMode,
119                           _DtCvtStringToFillMode, NULL, 0);
120
121           XtAddConverter (XmRString, XmRPixmapPosition,
122                           _DtCvtStringToPixmapPosition, NULL, 0);
123
124           XtAddConverter (XmRString, XmRStringPosition,
125                           _DtCvtStringToStringPosition, NULL, 0);
126
127           XtAddConverter (XmRString, XmRTitlePosition,
128                           _DtCvtStringToTitlePosition, NULL, 0);
129
130           new_converters_registered = True;
131         }
132       _DtProcessUnlock();
133     }
134 }
135
136
137 \f
138 /*-------------------------------------------------------------
139 **      _StringsAreEqual
140 **              Compare possibly mixed case string with lowercase string.
141 */
142 static Boolean 
143 _StringsAreEqual(
144         String in_str,
145         String test_str )
146 {
147         int     i, j;
148
149         for (;;)
150         {
151                 i = *in_str;
152                 j = *test_str;
153
154                 if (isupper (i))
155                         i = tolower (i);
156                 if (i != j) return (False);
157                 if (i == 0) return (True);
158
159                 in_str++;
160                 test_str++;
161         }
162 }
163
164
165 \f
166 /*-------------------------------------------------------------
167 **      _DtCvtStringToBehavior
168 **              Convert XmRString to XmRBehavior.
169 */
170 static void 
171 _DtCvtStringToBehavior(
172         XrmValuePtr args,
173         Cardinal *num_args,
174         XrmValue *from_val,
175         XrmValue *to_val )
176 {
177         String                  string = (String) from_val->addr;
178         static unsigned char    value;
179
180         to_val->size = sizeof (unsigned char);
181         to_val->addr = (XtPointer) &value;
182
183         if (_StringsAreEqual (string, STR_ICON_LABEL))
184                 value = XmICON_LABEL;
185         else if (_StringsAreEqual (string, STR_ICON_BUTTON))
186                 value = XmICON_BUTTON;
187         else if (_StringsAreEqual (string, STR_ICON_TOGGLE))
188                 value = XmICON_TOGGLE;
189         else if (_StringsAreEqual (string, STR_ICON_DRAG))
190                 value = XmICON_DRAG;
191         else
192         {
193                 to_val->size = 0;
194                 to_val->addr = NULL;
195                 XtStringConversionWarning ((String) from_val->addr,
196                                 XmRBehavior);
197         }
198 }
199
200
201 \f
202 /*-------------------------------------------------------------
203 **      _DtCvtStringToChildType
204 **              Convert XmRString to XmRChildType.
205 */
206 static void 
207 _DtCvtStringToChildType(
208         XrmValuePtr args,
209         Cardinal *num_args,
210         XrmValue *from_val,
211         XrmValue *to_val )
212 {
213         String                  string = (String) from_val->addr;
214         static unsigned char    value;
215
216         to_val->size = sizeof (unsigned char);
217         to_val->addr = (XtPointer) &value;
218
219         if (_StringsAreEqual (string, STR_WORK_AREA))
220                 value = XmWORK_AREA;
221         else if (_StringsAreEqual (string, STR_TITLE_AREA))
222                 value = XmTITLE_AREA;
223         else if (_StringsAreEqual (string, STR_SEPARATOR))
224                 value = XmSEPARATOR;
225         else if (_StringsAreEqual (string, STR_BUTTON))
226                 value = XmBUTTON;
227         else
228         {
229                 to_val->size = 0;
230                 to_val->addr = NULL;
231                 XtStringConversionWarning ((String) from_val->addr,
232                                 XmRChildType);
233         }
234 }
235
236
237 \f
238 /*-------------------------------------------------------------
239 **      _DtCvtStringToFillMode
240 **              Convert XmRString to XmRFillMode.
241 */
242 static void 
243 _DtCvtStringToFillMode(
244         XrmValuePtr args,
245         Cardinal *num_args,
246         XrmValue *from_val,
247         XrmValue *to_val )
248 {
249         String                  string = (String) from_val->addr;
250         static unsigned char    value;
251
252         to_val->size = sizeof (unsigned char);
253         to_val->addr = (XtPointer) &value;
254
255         if (_StringsAreEqual (string, STR_FILL_NONE))
256                 value = XmFILL_NONE;
257         else if (_StringsAreEqual (string, STR_FILL_PARENT))
258                 value = XmFILL_PARENT;
259         else if (_StringsAreEqual (string, STR_FILL_SELF))
260                 value = XmFILL_SELF;
261         else if (_StringsAreEqual (string, STR_FILL_TRANSPARENT))
262                 value = XmFILL_TRANSPARENT;
263         else
264         {
265                 to_val->size = 0;
266                 to_val->addr = NULL;
267                 XtStringConversionWarning ((String) from_val->addr,
268                                 XmRFillMode);
269         }
270 }
271
272
273 \f
274 /*-------------------------------------------------------------
275 **      _DtCvtStringToPixmapPosition
276 **              Convert string to pixmap position.
277 */
278 static void 
279 _DtCvtStringToPixmapPosition(
280         XrmValuePtr args,
281         Cardinal *num_args,
282         XrmValue *from_val,
283         XrmValue *to_val )
284 {
285         String                  string = (String) from_val->addr;
286         static unsigned char    value;
287
288         to_val->size = sizeof (unsigned char);
289         to_val->addr = (XtPointer) &value;
290
291         if (_StringsAreEqual (string, STR_PIXMAP_TOP))
292                 value = XmPIXMAP_TOP;
293         else if (_StringsAreEqual (string, STR_PIXMAP_BOTTOM))
294                 value = XmPIXMAP_BOTTOM;
295         else if (_StringsAreEqual (string, STR_PIXMAP_LEFT))
296                 value = XmPIXMAP_LEFT;
297         else if (_StringsAreEqual (string, STR_PIXMAP_RIGHT))
298                 value = XmPIXMAP_RIGHT;
299         else if (_StringsAreEqual (string, "pixmap_middle"))
300                 value = XmPIXMAP_MIDDLE;
301         else
302         {
303                 to_val->size = 0;
304                 to_val->addr = NULL;
305                 XtStringConversionWarning ((String) from_val->addr,
306                                 XmRPixmapPosition);
307         }
308 }
309
310
311 \f
312 /*-------------------------------------------------------------
313 **      _DtCvtStringToStringPosition
314 **              Convert XmRString to XmRStringPosition.
315 */
316 static void 
317 _DtCvtStringToStringPosition(
318         XrmValuePtr args,
319         Cardinal *num_args,
320         XrmValue *from_val,
321         XrmValue *to_val )
322 {
323         String                  string = (String) from_val->addr;
324         static unsigned char    value;
325
326         to_val->size = sizeof (unsigned char);
327         to_val->addr = (XtPointer) &value;
328
329         if (_StringsAreEqual (string, STR_STRING_TOP))
330                 value = XmSTRING_TOP;
331         else if (_StringsAreEqual (string, STR_STRING_BOTTOM))
332                 value = XmSTRING_BOTTOM;
333         else if (_StringsAreEqual (string, STR_STRING_LEFT))
334                 value = XmSTRING_LEFT;
335         else if (_StringsAreEqual (string, STR_STRING_RIGHT))
336                 value = XmSTRING_RIGHT;
337         else
338         {
339                 to_val->size = 0;
340                 to_val->addr = NULL;
341                 XtStringConversionWarning ((String) from_val->addr,
342                                 XmRStringPosition);
343         }
344 }
345
346
347 \f
348 /*-------------------------------------------------------------
349 **      _DtCvtStringToTitlePosition
350 **              Convert XmRString to XmRTitlePosition.
351 */
352 static void 
353 _DtCvtStringToTitlePosition(
354         XrmValuePtr args,
355         Cardinal *num_args,
356         XrmValue *from_val,
357         XrmValue *to_val )
358 {
359         String                  string = (String) from_val->addr;
360         static unsigned char    value;
361
362         to_val->size = sizeof (unsigned char);
363         to_val->addr = (XtPointer) &value;
364
365         if (_StringsAreEqual (string, STR_TITLE_TOP))
366                 value = XmTITLE_TOP;
367         else if (_StringsAreEqual (string, STR_TITLE_BOTTOM))
368                 value = XmTITLE_BOTTOM;
369         else
370         {
371                 to_val->size = 0;
372                 to_val->addr = NULL;
373                 XtStringConversionWarning ((String) from_val->addr,
374                                 XmRTitlePosition);
375         }
376 }
377