|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Motif
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Copyright (c) 1987-2012, The Open Group. All rights reserved.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are free software; you can
|
|
Packit |
b099d7 |
* redistribute them and/or modify them under the terms of the GNU
|
|
Packit |
b099d7 |
* Lesser General Public License as published by the Free Software
|
|
Packit |
b099d7 |
* Foundation; either version 2 of the License, or (at your option)
|
|
Packit |
b099d7 |
* any later version.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are distributed in the hope that
|
|
Packit |
b099d7 |
* they will be useful, but WITHOUT ANY WARRANTY; without even the
|
|
Packit |
b099d7 |
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
Packit |
b099d7 |
* PURPOSE. See the GNU Lesser General Public License for more
|
|
Packit |
b099d7 |
* details.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
b099d7 |
* License along with these librararies and programs; if not, write
|
|
Packit |
b099d7 |
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
|
|
Packit |
b099d7 |
* Floor, Boston, MA 02110-1301 USA
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* HISTORY
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
#ifdef REV_INFO
|
|
Packit |
b099d7 |
#ifndef lint
|
|
Packit |
b099d7 |
static char rcsid[] = "$XConsortium: wmlsynbld.c /main/9 1995/08/29 11:11:12 drk $"
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
#ifdef HAVE_CONFIG_H
|
|
Packit |
b099d7 |
#include <config.h>
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* (c) Copyright 1989, 1990, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* This module contains the programs which construct the syntactic
|
|
Packit |
b099d7 |
* representation of the WML input. All the routines are called as
|
|
Packit |
b099d7 |
* actions of the grammar productions.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Since WML is so simple, no stack frame technology is used. Instead,
|
|
Packit |
b099d7 |
* context is maintained by global pointers and vectors which contain
|
|
Packit |
b099d7 |
* the intermediate results of parsing a statement. At most, these
|
|
Packit |
b099d7 |
* contain an object being constructed (for instance a class descriptor)
|
|
Packit |
b099d7 |
* and a subobject (for instance a resource reference in a class).
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Results are communicated back using the global error count
|
|
Packit |
b099d7 |
* wml_err_count, and the ordered handle list wml_synobj_ptr.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include "wml.h"
|
|
Packit |
b099d7 |
#include "wmlparse.h"
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#if defined(__STDC__)
|
|
Packit |
b099d7 |
#include <stdlib.h>
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
#include <stdio.h>
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Globals used during WML parsing.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Character arrays and other variables to hold lexemes
|
|
Packit |
b099d7 |
* are defined in wmllex.l
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Current principal object being constructed
|
|
Packit |
b099d7 |
* Current subobject
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
ObjectPtr wml_cur_obj;
|
|
Packit |
b099d7 |
ObjectPtr wml_cur_subobj;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Routine to create a class descriptor. The result is placed in both
|
|
Packit |
b099d7 |
* wml_cur_obj and wml_synobj.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* name the class name
|
|
Packit |
b099d7 |
* ctype class type, one of METACLASS | WIDGET | GADGET
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void wmlCreateClass (name, ctype)
|
|
Packit |
b099d7 |
char *name;
|
|
Packit |
b099d7 |
int ctype;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
WmlSynClassDefPtr cdesc; /* new class descriptor */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Initialize the new class descriptor. Enter it in the object list.
|
|
Packit |
b099d7 |
* Set the current object global to the descriptor.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
cdesc = (WmlSynClassDefPtr) malloc (sizeof(WmlSynClassDef));
|
|
Packit |
b099d7 |
cdesc->validation = WmlClassDefValid;
|
|
Packit |
b099d7 |
cdesc->rslvdef = NULL;
|
|
Packit |
b099d7 |
switch ( ctype )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case METACLASS:
|
|
Packit |
b099d7 |
cdesc->type = WmlClassTypeMetaclass;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case WIDGET:
|
|
Packit |
b099d7 |
cdesc->type = WmlClassTypeWidget;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case GADGET:
|
|
Packit |
b099d7 |
cdesc->type = WmlClassTypeGadget;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
printf ("\nwmlCreateClass: unknown class type %d", ctype);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
cdesc->dialog = FALSE;
|
|
Packit |
b099d7 |
cdesc->name = wmlAllocateString (name);
|
|
Packit |
b099d7 |
cdesc->superclass = NULL;
|
|
Packit |
b099d7 |
cdesc->parentclass = NULL;
|
|
Packit |
b099d7 |
cdesc->widgetclass = NULL;
|
|
Packit |
b099d7 |
cdesc->int_lit = NULL;
|
|
Packit |
b099d7 |
cdesc->convfunc = NULL;
|
|
Packit |
b099d7 |
cdesc->docname = NULL;
|
|
Packit |
b099d7 |
cdesc->ctrlmapto = NULL;
|
|
Packit |
b099d7 |
cdesc->alias_cnt = 0;
|
|
Packit |
b099d7 |
cdesc->alias_list = NULL;
|
|
Packit |
b099d7 |
cdesc->controls = NULL;
|
|
Packit |
b099d7 |
cdesc->resources = NULL;
|
|
Packit |
b099d7 |
cdesc->children = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( wmlFindInHList(wml_synobj_ptr,name) >= 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("\nDuplicate name %s found", name);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
wmlInsertInHList (wml_synobj_ptr, name, (ObjectPtr)cdesc);
|
|
Packit |
b099d7 |
wml_cur_obj = (ObjectPtr) cdesc;
|
|
Packit |
b099d7 |
wml_cur_subobj = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Routine to create a resource descriptor. The result is placed in both
|
|
Packit |
b099d7 |
* wml_cur_obj and wml_synobj.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* name the resource name
|
|
Packit |
b099d7 |
* rtype resource type, one of
|
|
Packit |
b099d7 |
* ARGUMENT | REASON | CONSTRAINT | SUBRESOURCE
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void wmlCreateResource (name, rtype)
|
|
Packit |
b099d7 |
char *name;
|
|
Packit |
b099d7 |
int rtype;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
WmlSynResourceDefPtr rdesc; /* new resource descriptor */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Initialize the new resource descriptor. Enter it in the object list.
|
|
Packit |
b099d7 |
* Set the current object global to the descriptor.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
rdesc = (WmlSynResourceDefPtr) malloc (sizeof(WmlSynResourceDef));
|
|
Packit |
b099d7 |
rdesc->validation = WmlResourceDefValid;
|
|
Packit |
b099d7 |
rdesc->rslvdef = NULL;
|
|
Packit |
b099d7 |
switch ( rtype )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case ARGUMENT:
|
|
Packit |
b099d7 |
rdesc->type = WmlResourceTypeArgument;
|
|
Packit |
b099d7 |
rdesc->xrm_support = WmlAttributeTrue;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case REASON:
|
|
Packit |
b099d7 |
rdesc->type = WmlResourceTypeReason;
|
|
Packit |
b099d7 |
rdesc->xrm_support = WmlAttributeFalse;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case CONSTRAINT:
|
|
Packit |
b099d7 |
rdesc->type = WmlResourceTypeConstraint;
|
|
Packit |
b099d7 |
rdesc->xrm_support = WmlAttributeTrue;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case SUBRESOURCE:
|
|
Packit |
b099d7 |
rdesc->type = WmlResourceTypeSubResource;
|
|
Packit |
b099d7 |
rdesc->xrm_support = WmlAttributeTrue;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
printf ("\nwmlCreateResource: unknown resource type %d", rtype);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
rdesc->name = wmlAllocateString (name);
|
|
Packit |
b099d7 |
rdesc->datatype = NULL;
|
|
Packit |
b099d7 |
rdesc->int_lit = NULL;
|
|
Packit |
b099d7 |
rdesc->resliteral = wmlAllocateString (name); /* default to name */
|
|
Packit |
b099d7 |
rdesc->enumset = NULL;
|
|
Packit |
b099d7 |
rdesc->docname = NULL;
|
|
Packit |
b099d7 |
rdesc->related = NULL;
|
|
Packit |
b099d7 |
rdesc->dflt = NULL;
|
|
Packit |
b099d7 |
rdesc->alias_cnt = 0;
|
|
Packit |
b099d7 |
rdesc->alias_list = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( wmlFindInHList(wml_synobj_ptr,name) >= 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("\nDuplicate name %s found", name);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
wmlInsertInHList (wml_synobj_ptr, name, (ObjectPtr)rdesc);
|
|
Packit |
b099d7 |
wml_cur_obj = (ObjectPtr) rdesc;
|
|
Packit |
b099d7 |
wml_cur_subobj = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Routine to create a datatype descriptor. The result is placed in both
|
|
Packit |
b099d7 |
* wml_cur_obj and wml_synobj.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* name the datatype name
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void wmlCreateDatatype (name)
|
|
Packit |
b099d7 |
char *name;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
WmlSynDataTypeDefPtr ddesc; /* new datatype descriptor */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Initialize the new datatype descriptor. Enter it in the object list.
|
|
Packit |
b099d7 |
* Set the current object global to the descriptor.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
ddesc = (WmlSynDataTypeDefPtr) malloc (sizeof(WmlSynDataTypeDef));
|
|
Packit |
b099d7 |
ddesc->validation = WmlDataTypeDefValid;
|
|
Packit |
b099d7 |
ddesc->rslvdef = NULL;
|
|
Packit |
b099d7 |
ddesc->name = wmlAllocateString (name);
|
|
Packit |
b099d7 |
ddesc->int_lit = NULL;
|
|
Packit |
b099d7 |
ddesc->docname = NULL;
|
|
Packit |
b099d7 |
ddesc->xrm_support = WmlAttributeTrue;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( wmlFindInHList(wml_synobj_ptr,name) >= 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("\nDuplicate name %s found", name);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
wmlInsertInHList (wml_synobj_ptr, name, (ObjectPtr)ddesc);
|
|
Packit |
b099d7 |
wml_cur_obj = (ObjectPtr) ddesc;
|
|
Packit |
b099d7 |
wml_cur_subobj = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Routine to create a child descriptor. The result is placed in both
|
|
Packit |
b099d7 |
* wml_cur_obj and wml_synobj.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* name the child name
|
|
Packit |
b099d7 |
* class the class name
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void wmlCreateChild (name, class)
|
|
Packit |
b099d7 |
char *name;
|
|
Packit |
b099d7 |
char *class;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
WmlSynChildDefPtr chdesc; /* new child descriptor */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Initialize the new child descriptor. Enter it in the object list.
|
|
Packit |
b099d7 |
* Set the current object global to the descriptor.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
chdesc = (WmlSynChildDefPtr) malloc (sizeof(WmlSynChildDef));
|
|
Packit |
b099d7 |
chdesc->validation = WmlChildDefValid;
|
|
Packit |
b099d7 |
chdesc->rslvdef = NULL;
|
|
Packit |
b099d7 |
chdesc->name = wmlAllocateString (name);
|
|
Packit |
b099d7 |
chdesc->class = wmlAllocateString (class);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( wmlFindInHList(wml_synobj_ptr,name) >= 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("\nDuplicate name %s found", name);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
wmlInsertInHList (wml_synobj_ptr, name, (ObjectPtr)chdesc);
|
|
Packit |
b099d7 |
wml_cur_obj = (ObjectPtr) chdesc;
|
|
Packit |
b099d7 |
wml_cur_subobj = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Routine to create a controls list descriptor. The result is placed in both
|
|
Packit |
b099d7 |
* wml_cur_obj and wml_synobj.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* name the controls list name
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void wmlCreateOrAppendCtrlList (name)
|
|
Packit |
b099d7 |
char *name;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
int idx;
|
|
Packit |
b099d7 |
WmlSynCtrlListDefPtr cdesc; /* new CtrlList descriptor */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
idx = wmlFindInHList(wml_synobj_ptr,name);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (idx < 0 ) {
|
|
Packit |
b099d7 |
/* Didn't find list */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Initialize the new CtrlList descriptor. Enter it in the object list.
|
|
Packit |
b099d7 |
* Set the current object global to the descriptor.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
cdesc = (WmlSynCtrlListDefPtr) malloc (sizeof(WmlSynCtrlListDef));
|
|
Packit |
b099d7 |
cdesc->validation = WmlCtrlListDefValid;
|
|
Packit |
b099d7 |
cdesc->rslvdef = NULL;
|
|
Packit |
b099d7 |
cdesc->name = wmlAllocateString (name);
|
|
Packit |
b099d7 |
cdesc->controls = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
wmlInsertInHList (wml_synobj_ptr, name, (ObjectPtr)cdesc);
|
|
Packit |
b099d7 |
} else {
|
|
Packit |
b099d7 |
cdesc = (WmlSynCtrlListDefPtr) wml_synobj_ptr -> hvec[idx].objptr;
|
|
Packit |
b099d7 |
printf ("\nAppending to list name %s", name);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
wml_cur_obj = (ObjectPtr) cdesc;
|
|
Packit |
b099d7 |
wml_cur_subobj = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Routine to create an enumeration set descriptor. The result is placed in both
|
|
Packit |
b099d7 |
* wml_cur_obj and wml_synobj.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* name the enumeration set name
|
|
Packit |
b099d7 |
* type data type, must match a data type name
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void wmlCreateEnumSet (name, dtype)
|
|
Packit |
b099d7 |
char *name;
|
|
Packit |
b099d7 |
char *dtype;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
WmlSynEnumSetDefPtr esdesc; /* new enumeration set descriptor */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Initialize the new resource descriptor. Enter it in the object list.
|
|
Packit |
b099d7 |
* Set the current object global to the descriptor.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
esdesc = (WmlSynEnumSetDefPtr) malloc (sizeof(WmlSynEnumSetDef));
|
|
Packit |
b099d7 |
esdesc->validation = WmlEnumSetDefValid;
|
|
Packit |
b099d7 |
esdesc->rslvdef = NULL;
|
|
Packit |
b099d7 |
esdesc->name = wmlAllocateString (name);
|
|
Packit |
b099d7 |
esdesc->datatype = wmlAllocateString (dtype);
|
|
Packit |
b099d7 |
esdesc->values = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( wmlFindInHList(wml_synobj_ptr,name) >= 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("\nDuplicate name %s found", name);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
wmlInsertInHList (wml_synobj_ptr, name, (ObjectPtr)esdesc);
|
|
Packit |
b099d7 |
wml_cur_obj = (ObjectPtr) esdesc;
|
|
Packit |
b099d7 |
wml_cur_subobj = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Routine to create an enumeration value descriptor. The result is placed in both
|
|
Packit |
b099d7 |
* wml_cur_obj and wml_synobj.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* name the enumeration value name
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void wmlCreateEnumValue (name)
|
|
Packit |
b099d7 |
char *name;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
WmlSynEnumValueDefPtr evdesc; /* new enumeration value descriptor */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Initialize the new resource descriptor. Enter it in the object list.
|
|
Packit |
b099d7 |
* Set the current object global to the descriptor.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
evdesc = (WmlSynEnumValueDefPtr) malloc (sizeof(WmlSynEnumValueDef));
|
|
Packit |
b099d7 |
evdesc->validation = WmlEnumValueDefValid;
|
|
Packit |
b099d7 |
evdesc->rslvdef = NULL;
|
|
Packit |
b099d7 |
evdesc->name = wmlAllocateString (name);
|
|
Packit |
b099d7 |
evdesc->enumlit = wmlAllocateString (name); /* defaults to name */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( wmlFindInHList(wml_synobj_ptr,name) >= 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("\nDuplicate name %s found", name);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
wmlInsertInHList (wml_synobj_ptr, name, (ObjectPtr)evdesc);
|
|
Packit |
b099d7 |
wml_cur_obj = (ObjectPtr) evdesc;
|
|
Packit |
b099d7 |
wml_cur_subobj = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Routine to create a charset descriptor. The result is placed in both
|
|
Packit |
b099d7 |
* wml_cur_obj and wml_synobj.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* name the charset name
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void wmlCreateCharset (name)
|
|
Packit |
b099d7 |
char *name;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
WmlSynCharSetDefPtr ddesc; /* new charset descriptor */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Initialize the new charset descriptor. Enter it in the object list.
|
|
Packit |
b099d7 |
* Set the current object global to the descriptor.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
ddesc = (WmlSynCharSetDefPtr) malloc (sizeof(WmlSynCharSetDef));
|
|
Packit |
b099d7 |
ddesc->validation = WmlCharSetDefValid;
|
|
Packit |
b099d7 |
ddesc->rslvdef = NULL;
|
|
Packit |
b099d7 |
ddesc->name = wmlAllocateString (name);
|
|
Packit |
b099d7 |
ddesc->int_lit = NULL;
|
|
Packit |
b099d7 |
ddesc->xms_name = NULL;
|
|
Packit |
b099d7 |
ddesc->direction = WmlCharSetDirectionLtoR;
|
|
Packit |
b099d7 |
ddesc->parsedirection = WmlAttributeUnspecified;
|
|
Packit |
b099d7 |
ddesc->charsize = WmlCharSizeOneByte;
|
|
Packit |
b099d7 |
ddesc->alias_cnt = 0;
|
|
Packit |
b099d7 |
ddesc->alias_list = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( wmlFindInHList(wml_synobj_ptr,name) >= 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("\nDuplicate name %s found", name);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
wmlInsertInHList (wml_synobj_ptr, name, (ObjectPtr)ddesc);
|
|
Packit |
b099d7 |
wml_cur_obj = (ObjectPtr) ddesc;
|
|
Packit |
b099d7 |
wml_cur_subobj = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Routine to set an attribute in a class descriptor.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine sets the given attribute in the current object, which
|
|
Packit |
b099d7 |
* must be a class descriptor. The current object and subobject do not
|
|
Packit |
b099d7 |
* change.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* attrid oneof SUPERCLASS | INTERNALLITERAL | DOCNAME |
|
|
Packit |
b099d7 |
* CONVFUNC | WIDGETCLASS | DIALOGCLASS |
|
|
Packit |
b099d7 |
* CTRLMAPSRESOURCE
|
|
Packit |
b099d7 |
* val value of the attribute, usually a string
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void wmlAddClassAttribute (attrid, val)
|
|
Packit |
b099d7 |
int attrid;
|
|
Packit |
b099d7 |
char *val;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
WmlSynClassDefPtr cdesc; /* the class descriptor */
|
|
Packit |
b099d7 |
char **synlist; /* ALIAS pointer list */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Acquire the current class descriptor
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( wml_cur_obj == NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("\nwmlAddClassAttribute: NULL current object");
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
cdesc = (WmlSynClassDefPtr) wml_cur_obj;
|
|
Packit |
b099d7 |
if ( cdesc->validation != WmlClassDefValid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("\nwmlAddClassAttribute: %d not a class descriptor",
|
|
Packit |
b099d7 |
cdesc->validation);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Set the appropriate resource
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
switch ( attrid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case SUPERCLASS:
|
|
Packit |
b099d7 |
cdesc->superclass = wmlAllocateString (val);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case PARENTCLASS:
|
|
Packit |
b099d7 |
cdesc->parentclass = wmlAllocateString (val);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case INTERNALLITERAL:
|
|
Packit |
b099d7 |
cdesc->int_lit = wmlAllocateString (val);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case CONVFUNC:
|
|
Packit |
b099d7 |
cdesc->convfunc = wmlAllocateString (val);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case DOCNAME:
|
|
Packit |
b099d7 |
cdesc->docname = wmlAllocateString (val);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case WIDGETCLASS:
|
|
Packit |
b099d7 |
cdesc->widgetclass = wmlAllocateString (val);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case DIALOGCLASS:
|
|
Packit |
b099d7 |
switch ( (long)val )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case ATTRTRUE:
|
|
Packit |
b099d7 |
cdesc->dialog = TRUE;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case CTRLMAPSRESOURCE:
|
|
Packit |
b099d7 |
cdesc->ctrlmapto = wmlAllocateString (val);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case ALIAS:
|
|
Packit |
b099d7 |
if ( cdesc->alias_cnt == 0 )
|
|
Packit |
b099d7 |
synlist = (char **) malloc (sizeof(char *));
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
synlist = (char **)
|
|
Packit |
b099d7 |
realloc (cdesc->alias_list,
|
|
Packit |
b099d7 |
(cdesc->alias_cnt+1)*sizeof(char **));
|
|
Packit |
b099d7 |
synlist[cdesc->alias_cnt] = wmlAllocateString (val);
|
|
Packit |
b099d7 |
cdesc->alias_cnt += 1;
|
|
Packit |
b099d7 |
cdesc->alias_list = synlist;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Routine to add a control specification to the current class.
|
|
Packit |
b099d7 |
* The current object must be a class descriptor. The entry name
|
|
Packit |
b099d7 |
* is added to the controls list. The control specification becomes the
|
|
Packit |
b099d7 |
* current subobject.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* name the name of the controlled class
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void wmlAddClassControl (name)
|
|
Packit |
b099d7 |
char *name;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
WmlSynClassDefPtr cdesc; /* the class descriptor */
|
|
Packit |
b099d7 |
WmlSynClassCtrlDefPtr ctrlelm; /* controls element */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Acquire the current class descriptor
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( wml_cur_obj == NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("\nwmlAddClassControl: NULL current object");
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
cdesc = (WmlSynClassDefPtr) wml_cur_obj;
|
|
Packit |
b099d7 |
if ( cdesc->validation != WmlClassDefValid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("\nwmlAddClassControl: %d not a class descriptor",
|
|
Packit |
b099d7 |
cdesc->validation);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Add the control to the control list
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
ctrlelm = (WmlSynClassCtrlDefPtr) malloc (sizeof(WmlSynClassCtrlDef));
|
|
Packit |
b099d7 |
ctrlelm->validation = WmlClassCtrlDefValid;
|
|
Packit |
b099d7 |
ctrlelm->next = cdesc->controls;
|
|
Packit |
b099d7 |
cdesc->controls = ctrlelm;
|
|
Packit |
b099d7 |
ctrlelm->name = wmlAllocateString (name);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* This becomes the current subobject
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
wml_cur_subobj = (ObjectPtr) ctrlelm;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Add a resource descriptor to a class.
|
|
Packit |
b099d7 |
* The current object must be a class descriptor. Create and add a
|
|
Packit |
b099d7 |
* resource descriptor, which becomes the current subobject. It is not
|
|
Packit |
b099d7 |
* entered in the named object list.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* name the resource name
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void wmlAddClassResource (name)
|
|
Packit |
b099d7 |
char *name;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
WmlSynClassDefPtr cdesc; /* the class descriptor */
|
|
Packit |
b099d7 |
WmlSynClassResDefPtr rdesc; /* the resource reference descriptor */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Acquire the current class descriptor
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( wml_cur_obj == NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("\nwmlAddClassResource: NULL current object");
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
cdesc = (WmlSynClassDefPtr) wml_cur_obj;
|
|
Packit |
b099d7 |
if ( cdesc->validation != WmlClassDefValid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("\nwmlAddClassResource: %d not a class descriptor",
|
|
Packit |
b099d7 |
cdesc->validation);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Add the resource to the resource list
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
rdesc = (WmlSynClassResDefPtr) malloc (sizeof(WmlSynClassResDef));
|
|
Packit |
b099d7 |
rdesc->validation = WmlClassResDefValid;
|
|
Packit |
b099d7 |
rdesc->name = wmlAllocateString (name);
|
|
Packit |
b099d7 |
rdesc->type = NULL;
|
|
Packit |
b099d7 |
rdesc->dflt = NULL;
|
|
Packit |
b099d7 |
rdesc->exclude = WmlAttributeUnspecified;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
rdesc->next = cdesc->resources;
|
|
Packit |
b099d7 |
cdesc->resources = rdesc;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* This becomes the current subobject
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
wml_cur_subobj = (ObjectPtr) rdesc;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Add a child descriptor to a class.
|
|
Packit |
b099d7 |
* The current object must be a class descriptor. Create and add a
|
|
Packit |
b099d7 |
* child descriptor, which becomes the current subobject. It is not
|
|
Packit |
b099d7 |
* entered in the named object list.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* name the resource name
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void wmlAddClassChild (name)
|
|
Packit |
b099d7 |
char *name;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
WmlSynClassDefPtr cdesc; /* the class descriptor */
|
|
Packit |
b099d7 |
WmlSynClassChildDefPtr chdesc; /* the child reference descriptor */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Acquire the current class descriptor
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( wml_cur_obj == NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("\nwmlAddClassResource: NULL current object");
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
cdesc = (WmlSynClassDefPtr) wml_cur_obj;
|
|
Packit |
b099d7 |
if ( cdesc->validation != WmlClassDefValid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("\nwmlAddClassResource: %d not a class descriptor",
|
|
Packit |
b099d7 |
cdesc->validation);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Add the child to the child list
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
chdesc = (WmlSynClassChildDefPtr) malloc (sizeof(WmlSynClassChildDef));
|
|
Packit |
b099d7 |
chdesc->validation = WmlClassChildDefValid;
|
|
Packit |
b099d7 |
chdesc->name = wmlAllocateString (name);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
chdesc->next = cdesc->children;
|
|
Packit |
b099d7 |
cdesc->children = chdesc;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* This becomes the current subobject
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
wml_cur_subobj = (ObjectPtr) chdesc;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* This routine sets an attribute in the current class resource descriptor.
|
|
Packit |
b099d7 |
* The current subobject must be a class resource descriptor. The
|
|
Packit |
b099d7 |
* named attribute is set.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* attrid one of TYPE | DEFAULT | EXCLUDE
|
|
Packit |
b099d7 |
* val attribute value, usually a string. Must be
|
|
Packit |
b099d7 |
* ATTRTRUE | ATTRFALSE for EXCLUDE.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
void wmlAddClassResourceAttribute (attrid, val)
|
|
Packit |
b099d7 |
int attrid;
|
|
Packit |
b099d7 |
char *val;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
WmlSynClassResDefPtr rdesc; /* current class resource descriptor */
|
|
Packit |
b099d7 |
long excval; /* EXCLUDE value */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Acquire the descriptor from the current subobject.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( wml_cur_subobj == NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("\nwmlAddClassResourceAttribute: NULL current subobject");
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
rdesc = (WmlSynClassResDefPtr) wml_cur_subobj;
|
|
Packit |
b099d7 |
if ( rdesc->validation != WmlClassResDefValid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf
|
|
Packit |
b099d7 |
("\nwmlAddClassResourceAttribute: %d not a class resource descriptor",
|
|
Packit |
b099d7 |
rdesc->validation);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
switch ( attrid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case TYPE:
|
|
Packit |
b099d7 |
rdesc->type = wmlAllocateString (val);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case DEFAULT:
|
|
Packit |
b099d7 |
rdesc->dflt = wmlAllocateString (val);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case EXCLUDE:
|
|
Packit |
b099d7 |
excval = (long) val;
|
|
Packit |
b099d7 |
switch ( excval )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case ATTRTRUE:
|
|
Packit |
b099d7 |
rdesc->exclude = WmlAttributeTrue;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case ATTRFALSE:
|
|
Packit |
b099d7 |
rdesc->exclude = WmlAttributeFalse;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
printf ("\nwmlAddClassResourceAttribute: bad EXCLUDE value %ld",
|
|
Packit |
b099d7 |
excval);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
printf ("\nwmlAddClassResourceAttribute: unknown attrid %d", attrid);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Routine to set an attribute in a resource descriptor.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine sets the given attribute in the current object, which
|
|
Packit |
b099d7 |
* must be a resource descriptor. The current object and subobject do not
|
|
Packit |
b099d7 |
* change.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* attrid oneof TYPE | RESOURCELITERAL | INTERNALLITERAL |
|
|
Packit |
b099d7 |
* RELATED | DOCNAME | DEFAULT | XRMRESOURCE | ALIAS |
|
|
Packit |
b099d7 |
* ENUMERATIONSET
|
|
Packit |
b099d7 |
* val value of the attribute, usually a string
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void wmlAddResourceAttribute (attrid, val)
|
|
Packit |
b099d7 |
int attrid;
|
|
Packit |
b099d7 |
char *val;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
WmlSynResourceDefPtr rdesc; /* the resource descriptor */
|
|
Packit |
b099d7 |
long xrmval; /* XRMRESOURCE value */
|
|
Packit |
b099d7 |
char **synlist; /* ALIAS pointer list */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Acquire the current resource descriptor
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( wml_cur_obj == NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("\nwmlAddResourceAttribute: NULL current object");
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
rdesc = (WmlSynResourceDefPtr) wml_cur_obj;
|
|
Packit |
b099d7 |
if ( rdesc->validation != WmlResourceDefValid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("\nwmlAddResourceAttribute: %d not a resource descriptor",
|
|
Packit |
b099d7 |
rdesc->validation);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Set the appropriate resource
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
switch ( attrid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case TYPE:
|
|
Packit |
b099d7 |
rdesc->datatype = wmlAllocateString (val);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case INTERNALLITERAL:
|
|
Packit |
b099d7 |
rdesc->int_lit = wmlAllocateString (val);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case RESOURCELITERAL:
|
|
Packit |
b099d7 |
rdesc->resliteral = wmlAllocateString (val);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case ENUMERATIONSET:
|
|
Packit |
b099d7 |
rdesc->enumset = wmlAllocateString (val);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case DOCNAME:
|
|
Packit |
b099d7 |
rdesc->docname = wmlAllocateString (val);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case RELATED:
|
|
Packit |
b099d7 |
rdesc->related = wmlAllocateString (val);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case DEFAULT:
|
|
Packit |
b099d7 |
rdesc->dflt = wmlAllocateString (val);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case XRMRESOURCE:
|
|
Packit |
b099d7 |
xrmval = (long) val;
|
|
Packit |
b099d7 |
switch ( xrmval )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case ATTRTRUE:
|
|
Packit |
b099d7 |
rdesc->xrm_support = WmlAttributeTrue;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case ATTRFALSE:
|
|
Packit |
b099d7 |
rdesc->xrm_support = WmlAttributeFalse;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
printf
|
|
Packit |
b099d7 |
("\nwmlAddResourceAttribute: bad XRMRESOURCE value %ld",
|
|
Packit |
b099d7 |
xrmval);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case ALIAS:
|
|
Packit |
b099d7 |
if ( rdesc->alias_cnt == 0 )
|
|
Packit |
b099d7 |
synlist = (char **) malloc (sizeof(char *));
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
synlist = (char **)
|
|
Packit |
b099d7 |
realloc (rdesc->alias_list,
|
|
Packit |
b099d7 |
(rdesc->alias_cnt+1)*sizeof(char **));
|
|
Packit |
b099d7 |
synlist[rdesc->alias_cnt] = wmlAllocateString (val);
|
|
Packit |
b099d7 |
rdesc->alias_cnt += 1;
|
|
Packit |
b099d7 |
rdesc->alias_list = synlist;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
printf ("\nwmlAddResourceAttribute: unknown attrid %d", attrid);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Routine to set an attribute in a datatype descriptor.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine sets the given attribute in the current object, which
|
|
Packit |
b099d7 |
* must be a datatype descriptor. The current object and subobject do not
|
|
Packit |
b099d7 |
* change.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* attrid oneof INTERNALLITERAL | DOCNAME | XRMRESOURCE
|
|
Packit |
b099d7 |
* val value of the attribute, usually a string
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void wmlAddDatatypeAttribute (attrid, val)
|
|
Packit |
b099d7 |
int attrid;
|
|
Packit |
b099d7 |
char *val;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
WmlSynDataTypeDefPtr ddesc; /* the datatype descriptor */
|
|
Packit |
b099d7 |
long xrmval; /* XRMRESOURCE value */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Acquire the current datatype descriptor
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( wml_cur_obj == NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("\nwmlAddDatatypeAttribute: NULL current object");
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
ddesc = (WmlSynDataTypeDefPtr) wml_cur_obj;
|
|
Packit |
b099d7 |
if ( ddesc->validation != WmlDataTypeDefValid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("\nwmlAddDatatypeAttribute: %d not a datatype descriptor",
|
|
Packit |
b099d7 |
ddesc->validation);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Set the appropriate slot
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
switch ( attrid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case INTERNALLITERAL:
|
|
Packit |
b099d7 |
ddesc->int_lit = wmlAllocateString (val);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case DOCNAME:
|
|
Packit |
b099d7 |
ddesc->docname = wmlAllocateString (val);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case XRMRESOURCE:
|
|
Packit |
b099d7 |
xrmval = (long) val;
|
|
Packit |
b099d7 |
switch ( xrmval )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case ATTRTRUE:
|
|
Packit |
b099d7 |
ddesc->xrm_support = WmlAttributeTrue;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case ATTRFALSE:
|
|
Packit |
b099d7 |
ddesc->xrm_support = WmlAttributeFalse;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
printf
|
|
Packit |
b099d7 |
("\nwmlAddDatatypeAttribute: bad XRMRESOURCE value %ld",
|
|
Packit |
b099d7 |
xrmval);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
printf ("\nwmlAddDatatypeAttribute: unknown attrid %d", attrid);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Routine to add a control specification to the current controls list.
|
|
Packit |
b099d7 |
* The current object must be a controls list descriptor. The entry name
|
|
Packit |
b099d7 |
* is added to the controls list. The new element becomes the current
|
|
Packit |
b099d7 |
* subobject.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* name the name of the controlled class
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void wmlAddCtrlListControl (name)
|
|
Packit |
b099d7 |
char *name;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
WmlSynCtrlListDefPtr cdesc; /* the controls list descriptor */
|
|
Packit |
b099d7 |
WmlSynClassCtrlDefPtr ctrlelm; /* controls element */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Acquire the current controls list descriptor
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( wml_cur_obj == NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("\nwmlAddCtrlListControl: NULL current object");
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
cdesc = (WmlSynCtrlListDefPtr) wml_cur_obj;
|
|
Packit |
b099d7 |
if ( cdesc->validation != WmlCtrlListDefValid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("\nwmlAddCtrlListControl: %d not a controls list descriptor",
|
|
Packit |
b099d7 |
cdesc->validation);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Add the control to the control list
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
ctrlelm = (WmlSynClassCtrlDefPtr) malloc (sizeof(WmlSynClassCtrlDef));
|
|
Packit |
b099d7 |
ctrlelm->validation = WmlClassCtrlDefValid;
|
|
Packit |
b099d7 |
ctrlelm->next = cdesc->controls;
|
|
Packit |
b099d7 |
cdesc->controls = ctrlelm;
|
|
Packit |
b099d7 |
ctrlelm->name = wmlAllocateString (name);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* This becomes the current subobject
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
wml_cur_subobj = (ObjectPtr) ctrlelm;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Routine to add an enumeration value to the current enumeration set
|
|
Packit |
b099d7 |
* The current object must be an enumeration set descriptor. The entry name
|
|
Packit |
b099d7 |
* is added to the the enumeration value list.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* name the name of the enumeration value
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
void wmlAddEnumSetValue (name)
|
|
Packit |
b099d7 |
char *name;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
WmlSynEnumSetDefPtr esdesc; /* the enumeration set descriptor */
|
|
Packit |
b099d7 |
WmlSynEnumSetValDefPtr evelm; /* EnumSet EnumValue element */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Acquire the current enumeration set descriptor
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( wml_cur_obj == NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("\nwmlAddEnumSetValue: NULL current object");
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
esdesc = (WmlSynEnumSetDefPtr) wml_cur_obj;
|
|
Packit |
b099d7 |
if ( esdesc->validation != WmlEnumSetDefValid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("\nwmlAddEnumSetValue: %d not an enumeration set descriptor",
|
|
Packit |
b099d7 |
esdesc->validation);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Add the value to the set
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
evelm = (WmlSynEnumSetValDefPtr) malloc (sizeof(WmlSynEnumSetValDef));
|
|
Packit |
b099d7 |
evelm->validation = WmlEnumValueDefValid;
|
|
Packit |
b099d7 |
evelm->next = esdesc->values;
|
|
Packit |
b099d7 |
esdesc->values = evelm;
|
|
Packit |
b099d7 |
evelm->name = wmlAllocateString (name);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Becomes current subobject
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
wml_cur_subobj = (ObjectPtr) evelm;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Routine to set an attribute in an enumeration value
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine sets the given attribute in the current object, which must
|
|
Packit |
b099d7 |
* be an enumeration value descriptor. The current object does not change.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* attrid oneof ENUMLITERAL
|
|
Packit |
b099d7 |
* val value of the attribute, usually a string
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
void wmlAddEnumValueAttribute (attrid, val)
|
|
Packit |
b099d7 |
int attrid;
|
|
Packit |
b099d7 |
char *val;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
WmlSynEnumValueDefPtr evdesc; /* the enumeration value descriptor */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Acquire the current enumeration value descriptor
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( wml_cur_obj == NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("\nwmlAddEnumValueAttribute: NULL current object");
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
evdesc = (WmlSynEnumValueDefPtr) wml_cur_obj;
|
|
Packit |
b099d7 |
if ( evdesc->validation != WmlEnumValueDefValid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("\nwmlAddEnumValueAttribute: %d not an enumeration value descriptor",
|
|
Packit |
b099d7 |
evdesc->validation);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Set the appropriate slot
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
switch ( attrid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case ENUMLITERAL:
|
|
Packit |
b099d7 |
evdesc->enumlit = wmlAllocateString (val);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
printf ("\nwmlAddEnumValueAttribute: unknown attrid %d", attrid);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Routine to set an attribute in a charset descriptor.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine sets the given attribute in the current object, which
|
|
Packit |
b099d7 |
* must be a charset descriptor. The current object and subobject do not
|
|
Packit |
b099d7 |
* change.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* attrid oneof INTERNALLITERAL | ALIAS | XMSTRINGCHARSETNAME |
|
|
Packit |
b099d7 |
* DIRECTION | PARSEDIRECTION | CHARACTERSIZE
|
|
Packit |
b099d7 |
* val value of the attribute, usually a string
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void wmlAddCharsetAttribute (attrid, val)
|
|
Packit |
b099d7 |
int attrid;
|
|
Packit |
b099d7 |
char *val;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
WmlSynCharSetDefPtr ddesc; /* the charset descriptor */
|
|
Packit |
b099d7 |
char **synlist; /* ALIAS pointer list */
|
|
Packit |
b099d7 |
long atrval; /* attribute value */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Acquire the current charset descriptor
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( wml_cur_obj == NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("\nwmlAddCharSetAttribute: NULL current object");
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
ddesc = (WmlSynCharSetDefPtr) wml_cur_obj;
|
|
Packit |
b099d7 |
if ( ddesc->validation != WmlCharSetDefValid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf ("\nwmlAddCharsetAttribute: %d not a CharSet descriptor",
|
|
Packit |
b099d7 |
ddesc->validation);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Set the appropriate slot
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
switch ( attrid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case INTERNALLITERAL:
|
|
Packit |
b099d7 |
ddesc->int_lit = wmlAllocateString (val);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case ALIAS:
|
|
Packit |
b099d7 |
if ( ddesc->alias_cnt == 0 )
|
|
Packit |
b099d7 |
synlist = (char **) malloc (sizeof(char *));
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
synlist = (char **)
|
|
Packit |
b099d7 |
realloc (ddesc->alias_list,
|
|
Packit |
b099d7 |
(ddesc->alias_cnt+1)*sizeof(char **));
|
|
Packit |
b099d7 |
synlist[ddesc->alias_cnt] = wmlAllocateString (val);
|
|
Packit |
b099d7 |
ddesc->alias_cnt += 1;
|
|
Packit |
b099d7 |
ddesc->alias_list = synlist;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case XMSTRINGCHARSETNAME:
|
|
Packit |
b099d7 |
ddesc->xms_name = wmlAllocateString (val);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case DIRECTION:
|
|
Packit |
b099d7 |
atrval = (long) val;
|
|
Packit |
b099d7 |
switch ( atrval )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case LEFTTORIGHT:
|
|
Packit |
b099d7 |
ddesc->direction = WmlCharSetDirectionLtoR;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case RIGHTTOLEFT:
|
|
Packit |
b099d7 |
ddesc->direction = WmlCharSetDirectionRtoL;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
printf
|
|
Packit |
b099d7 |
("\nwmlAddCharsetAttribute: bad DIRECTION value %ld",
|
|
Packit |
b099d7 |
atrval);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case PARSEDIRECTION:
|
|
Packit |
b099d7 |
atrval = (long) val;
|
|
Packit |
b099d7 |
switch ( atrval )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case LEFTTORIGHT:
|
|
Packit |
b099d7 |
ddesc->parsedirection = WmlCharSetDirectionLtoR;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case RIGHTTOLEFT:
|
|
Packit |
b099d7 |
ddesc->parsedirection = WmlCharSetDirectionRtoL;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
printf
|
|
Packit |
b099d7 |
("\nwmlAddCharsetAttribute: bad PARSEDIRECTION value %ld",
|
|
Packit |
b099d7 |
atrval);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case CHARACTERSIZE:
|
|
Packit |
b099d7 |
atrval = (long) val;
|
|
Packit |
b099d7 |
switch ( atrval )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case ONEBYTE:
|
|
Packit |
b099d7 |
ddesc->charsize = WmlCharSizeOneByte;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case TWOBYTE:
|
|
Packit |
b099d7 |
ddesc->charsize = WmlCharSizeTwoByte;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case MIXED1_2BYTE:
|
|
Packit |
b099d7 |
ddesc->charsize = WmlCharSizeMixed1_2Byte;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
printf
|
|
Packit |
b099d7 |
("\nwmlAddCharsetAttribute: bad CHARACTERSIZE value %ld",
|
|
Packit |
b099d7 |
atrval);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
printf ("\nwmlAddCharsetAttribute: unknown attrid %d", attrid);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* The error reporting routine.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* For now, issue a very simple error message
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void LexIssueError (tkn)
|
|
Packit |
b099d7 |
int tkn;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
switch ( tkn )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case SEMICOLON:
|
|
Packit |
b099d7 |
printf ("\n Syntax error: expected a semicolon");
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case RBRACE:
|
|
Packit |
b099d7 |
printf ("\n Syntax error: expected a right brace");
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case 0:
|
|
Packit |
b099d7 |
printf ("\nSyntax error: Couldn't recognize a section name, probably fatal");
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
printf ("\n\tnear name='%s', value='%s', line %d",
|
|
Packit |
b099d7 |
yynameval, yystringval, wml_line_count);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
wml_err_count += 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|