1 /* $TOG: Parse.c /main/5 1998/01/12 16:47:01 cshi $ */
2 /*****************************************************************************
8 * Description: This file contains the parsing functions for Front Panel
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.
16 *****************************************************************************/
19 #include <Dt/DbReader.h>
20 #include <Dt/UserMsg.h>
24 #include "DataBaseLoad.h"
28 /************************************************************************
32 ************************************************************************/
35 StringToString (char * parse_source,
39 *parse_return = (void *) strdup (parse_source);
47 /************************************************************************
51 ************************************************************************/
54 StringToInt (char * parse_source,
58 char * source_ptr = parse_source;
63 while (chr = *source_ptr++)
65 if (chr >= '0' && chr <= '9')
72 _DtSimpleError (panel.app_name, DtError, NULL,
73 "Invalid Integer -- %s", parse_source);
78 *parse_return = (void *) value;
85 /************************************************************************
89 ************************************************************************/
92 StringToBoolean (char * parse_source,
96 _DtWmParseToLower((unsigned char *)parse_source);
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;
104 _DtSimpleError (panel.app_name, DtError, NULL,
105 "Invalid Boolean -- %s", parse_source);
115 /************************************************************************
119 ************************************************************************/
122 StringToResolution (char * parse_source,
123 void ** parse_return)
126 _DtWmParseToLower ((unsigned char *) parse_source);
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;
138 _DtSimpleError (panel.app_name, DtError, NULL,
139 "Invalid Resolution -- %s", parse_source);
149 /************************************************************************
151 * StringToControlBehavior
153 ************************************************************************/
156 StringToControlBehavior (char * parse_source,
157 void ** parse_return)
160 _DtWmParseToLower ((unsigned char *) parse_source);
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;
168 _DtSimpleError (panel.app_name, DtError, NULL,
169 "Invalid Control Behavior -- %s", parse_source);
179 /************************************************************************
183 ************************************************************************/
186 StringToGeometry (char * parse_source,
187 void ** parse_return)
192 int x, y, width, height;
195 x = y = width = height = 0;
197 mask = XParseGeometry ((char *) parse_source, &x, &y,
198 (unsigned int *) &width, (unsigned int *) &height);
202 /* Allocate space for the geometry structure */
204 value = (GeometryData *) XtMalloc (sizeof (GeometryData));
209 value->width = width;
210 value->height = height;
212 *parse_return = (void *) value;
216 _DtSimpleError (panel.app_name, DtError, NULL,
217 "Invalid Geometry -- %s", parse_source);
227 /************************************************************************
231 ************************************************************************/
235 StringToAction (char * parse_source,
236 void ** parse_return)
240 PanelActionData * action_data;
241 unsigned char * string, * source, * head_ptr;
244 head_ptr = source = (unsigned char *) strdup (parse_source);
246 if ((string = _DtWmParseNextTokenC (&source, False)) != NULL)
248 action_data = (PanelActionData *) XtMalloc (sizeof (PanelActionData));
250 action_data->action_name = strdup ((char *) string);
251 action_data->action_label = NULL;
252 action_data->aap = NULL;
253 action_data->count = 0;
255 while ((string = _DtWmParseNextTokenC (&source, False)) != NULL)
257 action_data->count++;
259 (DtActionArg *) XtRealloc ((char *) action_data->aap,
260 (sizeof (DtActionArg) * action_data->count));
261 action_data->aap[action_data->count-1].argClass = DtACTION_FILE;
263 action_data->aap[action_data->count-1].u.file.name =
264 strdup((char *)string);
269 _DtSimpleError (panel.app_name, DtError, NULL,
270 "Invalid Action -- %s", parse_source);
274 free ((char *) head_ptr);
275 *parse_return = (void *) action_data;
282 /************************************************************************
284 * StringToControlType
286 ************************************************************************/
289 StringToControlType (char * parse_source,
290 void ** parse_return)
293 _DtWmParseToLower ((unsigned char *) parse_source);
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;
311 _DtSimpleError (panel.app_name, DtError, NULL,
312 "Invalid Control Type -- %s", parse_source);
322 /************************************************************************
324 * StringToMonitorType
326 ************************************************************************/
329 StringToMonitorType (char * parse_source,
330 void ** parse_return)
333 _DtWmParseToLower ((unsigned char *) parse_source);
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;
343 _DtSimpleError (panel.app_name, DtError, NULL,
344 "Invalid Monitor Type -- %s", parse_source);
354 /************************************************************************
356 * StringToControlContainerType
358 ************************************************************************/
361 StringToControlContainerType (char * parse_source,
362 void ** parse_return)
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;
373 _DtSimpleError (panel.app_name, DtError, NULL,
374 "Invalid Control Container Type -- %s", parse_source);
384 /************************************************************************
386 * StringToPositionHints
388 ************************************************************************/
391 StringToPositionHints (char * parse_source,
392 void ** parse_return)
397 _DtWmParseToLower ((unsigned char *) parse_source);
399 if (strcmp (parse_source, "first") == 0)
401 else if (strcmp (parse_source, "last") == 0)
402 parse_source = "100";
404 status = StringToInt (parse_source, parse_return);
406 if ((int) *parse_return < 0 || (int) *parse_return > 100)
409 _DtSimpleError (panel.app_name, DtError, NULL,
410 "Invalid Position Hints value -- %d",
411 (int) *parse_return);
419 /************************************************************************
422 * Converts net file format to a file format.
424 ************************************************************************/
427 StringToFileName (char * parse_source,
428 void ** parse_return)
431 return (StringToString(parse_source, parse_return));
437 /************************************************************************
441 ************************************************************************/
444 FreeString (void ** parse_value)
447 XtFree ((char *) *parse_value);
453 /************************************************************************
457 ************************************************************************/
460 FreeGeometry (void ** parse_value)
463 XtFree ((char *) *parse_value);
469 /************************************************************************
473 ************************************************************************/
476 FreeAction (void ** parse_value)
478 PanelActionData * actionData = (PanelActionData *) *parse_value;
481 XtFree (actionData->action_name);
483 for (i = 0; i < actionData->count; i++)
484 XtFree ((char *) actionData->aap[i].u.file.name);
486 XtFree ((char *) actionData->aap);
488 XtFree ((char *) *parse_value);