Blame tools/wml/wmlsynbld.c

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
}