Initial import of the CDE 2.1.30 sources from the Open Group.
[oweals/cde.git] / cde / programs / dtwm / Parse.c
1 /* $TOG: Parse.c /main/5 1998/01/12 16:47:01 cshi $ */
2 /*****************************************************************************
3  *
4  *   File:         Parse.c
5  *
6  *   Project:       CDE
7  *
8  *   Description:  This file contains the parsing functions for Front Panel
9  *                 file information.
10  *
11  * (c) Copyright 1993, 1994 Hewlett-Packard Company
12  * (c) Copyright 1993, 1994 International Business Machines Corp.
13  * (c) Copyright 1993, 1994 Sun Microsystems, Inc.
14  * (c) Copyright 1993, 1994 Unix System Labs, Inc., a subsidiary of Novell, Inc.
15  *
16  *****************************************************************************/
17
18 #include <Dt/DtP.h>
19 #include <Dt/DbReader.h>
20 #include <Dt/UserMsg.h>
21
22 #include "WmGlobal.h"
23 #include "WmParse.h"
24 #include "DataBaseLoad.h"
25 #include "Parse.h"
26
27
28 /************************************************************************
29  *
30  *  StringToString
31  *
32  ************************************************************************/
33
34 Boolean
35 StringToString (char * parse_source,
36                 void ** parse_return)
37
38 {
39    *parse_return = (void *) strdup (parse_source);
40
41    return (True);
42 }
43
44
45
46
47 /************************************************************************
48  *
49  *  StrintToInt
50  *
51  ************************************************************************/
52
53 Boolean
54 StringToInt (char * parse_source,
55              void ** parse_return)
56
57 {
58    char * source_ptr = parse_source;
59    int    value = 0;
60    char   chr;
61
62
63    while (chr = *source_ptr++) 
64    {
65       if (chr >= '0' && chr <= '9') 
66       {
67          value *= 10;
68          value += chr - '0';
69       }
70       else
71       {
72          _DtSimpleError (panel.app_name, DtError, NULL, 
73                         "Invalid Integer -- %s", parse_source);
74          return (False);
75       }
76    }
77
78    *parse_return = (void *) value;
79    return (True);
80 }
81
82
83
84
85 /************************************************************************
86  *
87  *  StringToBoolean
88  *
89  ************************************************************************/
90
91 Boolean
92 StringToBoolean (char * parse_source,
93                  void ** parse_return)
94
95 {
96    _DtWmParseToLower((unsigned char *)parse_source);
97
98    if (strcmp (parse_source, "true") == 0)
99       *parse_return = (void *) True;
100    else if (strcmp (parse_source, "false") == 0)
101       *parse_return = (void *) False;
102    else
103    {
104       _DtSimpleError (panel.app_name, DtError, NULL, 
105                      "Invalid Boolean -- %s", parse_source);
106       return (False);
107    }
108
109    return (True);
110 }
111
112
113
114
115 /************************************************************************
116  *
117  *  StringToResolution
118  *
119  ************************************************************************/
120
121 Boolean
122 StringToResolution (char * parse_source,
123                     void ** parse_return)
124
125 {
126    _DtWmParseToLower ((unsigned char *) parse_source);
127    
128    if (strcmp (parse_source, resolution_types[HIGH]) == 0)
129       *parse_return = (void *) HIGH;
130    else if (strcmp (parse_source, resolution_types[MEDIUM]) == 0)
131       *parse_return = (void *) MEDIUM;
132    else if (strcmp (parse_source, resolution_types[LOW]) == 0)
133       *parse_return = (void *) LOW;
134    else if (strcmp (parse_source, resolution_types[MATCH_DISPLAY]) == 0)
135       *parse_return = (void *) MATCH_DISPLAY;
136    else
137    {
138       _DtSimpleError (panel.app_name, DtError, NULL, 
139                      "Invalid Resolution -- %s", parse_source);
140       return (False);
141    }
142
143    return (True);
144 }
145
146
147
148
149 /************************************************************************
150  *
151  *  StringToControlBehavior 
152  *
153  ************************************************************************/
154
155 Boolean
156 StringToControlBehavior (char * parse_source,
157                          void ** parse_return)
158
159 {
160    _DtWmParseToLower ((unsigned char *) parse_source);
161
162    if (strcmp (parse_source, "double_click") == 0)
163       *parse_return = (void *) DOUBLE_CLICK;
164    else if (strcmp (parse_source, "single_click") == 0)
165       *parse_return = (void *) SINGLE_CLICK;
166    else
167    {
168       _DtSimpleError (panel.app_name, DtError, NULL, 
169                      "Invalid Control Behavior -- %s", parse_source);
170       return (False);
171    }
172
173    return (True);
174 }
175
176
177
178
179 /************************************************************************
180  *
181  *  StringToGeometry
182  *
183  ************************************************************************/
184
185 Boolean
186 StringToGeometry (char * parse_source,
187                   void ** parse_return)
188
189 {
190    GeometryData *value;
191    int mask;
192    int x, y, width, height;
193
194
195    x = y = width = height = 0;
196
197    mask = XParseGeometry ((char *) parse_source, &x, &y, 
198                           (unsigned int *) &width, (unsigned int *) &height);
199
200    if (mask)
201    {
202       /* Allocate space for the geometry structure  */
203
204       value = (GeometryData *) XtMalloc (sizeof (GeometryData));
205
206       value->flags = mask;
207       value->x = x;
208       value->y = y;
209       value->width = width;
210       value->height = height;
211        
212       *parse_return = (void *) value;
213    }
214    else
215    {
216       _DtSimpleError (panel.app_name, DtError, NULL, 
217                      "Invalid Geometry -- %s", parse_source);
218       return (False);
219    }
220
221    return (True);
222 }
223
224
225
226
227 /************************************************************************
228  *
229  *  StringToAction
230  *
231  ************************************************************************/
232
233
234 Boolean
235 StringToAction (char * parse_source,
236                 void ** parse_return)
237
238
239 {
240    PanelActionData * action_data;
241    unsigned char * string, * source, * head_ptr;
242
243
244    head_ptr = source = (unsigned char *) strdup (parse_source);
245
246    if ((string = _DtWmParseNextTokenC (&source, False)) != NULL)
247    {
248       action_data = (PanelActionData *) XtMalloc (sizeof (PanelActionData));
249
250       action_data->action_name = strdup ((char *) string);
251       action_data->action_label = NULL;
252       action_data->aap = NULL;
253       action_data->count = 0;
254
255       while ((string = _DtWmParseNextTokenC (&source, False)) != NULL)
256       {
257          action_data->count++;
258          action_data->aap =
259             (DtActionArg *) XtRealloc ((char *) action_data->aap,
260                                     (sizeof (DtActionArg) * action_data->count));
261          action_data->aap[action_data->count-1].argClass = DtACTION_FILE;
262
263          action_data->aap[action_data->count-1].u.file.name =
264                                                  strdup((char *)string);
265       }
266    }
267    else
268    {
269       _DtSimpleError (panel.app_name, DtError, NULL, 
270                      "Invalid Action -- %s", parse_source);
271       return (False);
272    }
273
274    free ((char *) head_ptr);
275    *parse_return = (void *) action_data;
276    return (True);
277 }
278
279
280
281
282 /************************************************************************
283  *
284  *  StringToControlType
285  *
286  ************************************************************************/
287
288 Boolean
289 StringToControlType (char * parse_source,
290                      void ** parse_return)
291
292 {
293    _DtWmParseToLower ((unsigned char *) parse_source);
294
295    if (strcmp (parse_source, control_types[CONTROL_BLANK]) == 0)
296       *parse_return = (void *) CONTROL_BLANK;
297    else if (strcmp (parse_source, control_types[CONTROL_BUSY]) == 0)
298       *parse_return = (void *) CONTROL_BUSY;
299    else if (strcmp (parse_source, control_types[CONTROL_ICON]) == 0)
300       *parse_return = (void *) CONTROL_ICON;
301    else if (strcmp (parse_source, control_types[CONTROL_CLIENT]) == 0)
302       *parse_return = (void *) CONTROL_CLIENT;
303    else if (strcmp (parse_source, control_types[CONTROL_CLOCK]) == 0)
304       *parse_return = (void *) CONTROL_CLOCK;
305    else if (strcmp (parse_source, control_types[CONTROL_DATE]) == 0)
306       *parse_return = (void *) CONTROL_DATE;
307    else if (strcmp (parse_source, control_types[CONTROL_FILE]) == 0)
308       *parse_return = (void *) CONTROL_FILE;
309    else
310    {
311       _DtSimpleError (panel.app_name, DtError, NULL, 
312                      "Invalid Control Type -- %s", parse_source);
313       return (False);
314    }
315
316    return (True);
317 }
318
319
320
321
322 /************************************************************************
323  *
324  *  StringToMonitorType
325  *
326  ************************************************************************/
327
328 Boolean
329 StringToMonitorType (char * parse_source,
330                      void ** parse_return)
331
332 {
333    _DtWmParseToLower ((unsigned char *) parse_source);
334
335    if (strcmp (parse_source, monitor_types[MONITOR_NONE]) == 0)
336       *parse_return = (void *) MONITOR_NONE;
337    else if (strcmp (parse_source, monitor_types[MONITOR_MAIL]) == 0)
338       *parse_return = (void *) MONITOR_MAIL;
339    else if (strcmp (parse_source, monitor_types[MONITOR_FILE]) == 0)
340       *parse_return = (void *) MONITOR_FILE;
341    else
342    {
343       _DtSimpleError (panel.app_name, DtError, NULL, 
344                      "Invalid Monitor Type -- %s", parse_source);
345       return (False);
346    }
347
348    return (True);
349 }
350
351
352
353
354 /************************************************************************
355  *
356  *  StringToControlContainerType
357  *
358  ************************************************************************/
359
360 Boolean
361 StringToControlContainerType (char * parse_source,
362                               void ** parse_return)
363
364 {
365    if (strcmp (parse_source, entry_types[BOX]) == 0)
366       *parse_return = (void *) BOX;
367    else if (strcmp (parse_source, entry_types[SUBPANEL]) == 0)
368       *parse_return = (void *) SUBPANEL;
369    else if (strcmp (parse_source, entry_types[SWITCH]) == 0)
370       *parse_return = (void *) SWITCH;
371    else
372    {
373       _DtSimpleError (panel.app_name, DtError, NULL, 
374                      "Invalid Control Container Type -- %s", parse_source);
375       return (False);
376    }
377
378    return (True);
379 }
380
381
382
383
384 /************************************************************************
385  *
386  *  StringToPositionHints
387  *
388  ************************************************************************/
389
390 Boolean
391 StringToPositionHints (char * parse_source,
392                        void ** parse_return)
393
394 {
395    Boolean status;
396
397    _DtWmParseToLower ((unsigned char *) parse_source);
398
399    if (strcmp (parse_source, "first") == 0)
400       parse_source = "0";
401    else if (strcmp (parse_source, "last") == 0)
402       parse_source = "100";
403
404    status = StringToInt (parse_source, parse_return);
405
406    if ((int) *parse_return < 0 || (int) *parse_return > 100)
407    {
408       
409       _DtSimpleError (panel.app_name, DtError, NULL, 
410                      "Invalid Position Hints value -- %d",
411                      (int) *parse_return);
412       return (False);
413    }
414
415    return ( True );
416 }
417
418
419 /************************************************************************
420  *
421  *  StringToFileName
422  *     Converts net file format to a file format.
423  *
424  ************************************************************************/
425
426 Boolean
427 StringToFileName (char * parse_source,
428                   void ** parse_return)
429
430 {
431    return (StringToString(parse_source, parse_return));
432 }
433
434
435
436
437 /************************************************************************
438  *
439  *  FreeString
440  *
441  ************************************************************************/
442
443 void
444 FreeString (void ** parse_value)
445
446 {
447     XtFree ((char *) *parse_value);
448 }
449
450
451
452
453 /************************************************************************
454  *
455  *  FreeGeometry
456  *
457  ************************************************************************/
458
459 void
460 FreeGeometry (void ** parse_value)
461
462 {
463    XtFree ((char *) *parse_value);
464 }
465
466
467
468
469 /************************************************************************
470  *
471  *  FreeAction
472  *
473  ************************************************************************/
474
475 void
476 FreeAction (void ** parse_value)
477 {
478    PanelActionData * actionData = (PanelActionData *) *parse_value;
479    int i;
480
481    XtFree (actionData->action_name);
482
483    for (i = 0; i < actionData->count; i++)
484      XtFree ((char *) actionData->aap[i].u.file.name);
485
486    XtFree ((char *) actionData->aap);
487
488    XtFree ((char *) *parse_value);
489 }