Blame tools/wml/wmloutkey.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[] = "$TOG: wmloutkey.c /main/8 1997/04/14 12:55:51 dbl $"
Packit b099d7
#endif
Packit b099d7
#endif
Packit b099d7
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 routines responsible for writing the .h files which
Packit b099d7
 * define the UIL lexer's keyword (token) tables. All files are written
Packit b099d7
 * into the current directory.
Packit b099d7
 *
Packit b099d7
 * Input:
Packit b099d7
 *	The resolved objects
Packit b099d7
 *	.dat files required to specify objects defined in Uil.y:
Packit b099d7
 *		keyword.dat
Packit b099d7
 *		reserved.dat
Packit b099d7
 *
Packit b099d7
 * Output:
Packit b099d7
 *	UilKeyTab.h
Packit b099d7
 *
Packit b099d7
 */
Packit b099d7
Packit b099d7
Packit b099d7
#include "wml.h"
Packit b099d7
Packit b099d7
#if defined(__STDC__)
Packit b099d7
#include <stdlib.h>
Packit b099d7
#include <string.h>
Packit b099d7
#endif
Packit b099d7
#include <stdio.h>
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Routines used only in this module
Packit b099d7
 */
Packit b099d7
void wmlKeyWBuildTables ();
Packit b099d7
void wmlKeyWClassTokens ();
Packit b099d7
void wmlKeyWGrammarTokens ();
Packit b099d7
int wmlKeyWGrammarClass ();
Packit b099d7
void wmlKeyWArgTokens ();
Packit b099d7
void wmlKeyWReasonTokens ();
Packit b099d7
void wmlKeyWCharsetTokens ();
Packit b099d7
void wmlKeyWEnumvalTokens ();
Packit b099d7
void wmlKeyWChildTokens ();
Packit b099d7
void wmlKeyWMakeTokens ();
Packit b099d7
void wmlOutputUilKeyTab ();
Packit b099d7
void wmlOutputUilKeyTabBody ();
Packit b099d7
void wmlTokenClassString ();
Packit b099d7
void wmlTokenSymKString ();
Packit b099d7
void wmlTokenTokenString ();
Packit b099d7
void wmlOutputUilTokName ();
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * globals
Packit b099d7
 */
Packit b099d7
Packit b099d7
static char		*canned_warn =
Packit b099d7
"/*\n\
Packit b099d7
**\tThis file is automatically generated.  Do not edit it by hand.\n\
Packit b099d7
**/\n\n";
Packit b099d7
Packit b099d7
#define	GrTokenMax		200		/* limit on grammar tokens */
Packit b099d7
static int			grtok_max_val = 0;
Packit b099d7
static WmlGrammarTokenPtr	grtok_vec[GrTokenMax];
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * Output control routine
Packit b099d7
 */
Packit b099d7
Packit b099d7
void wmlOutputKeyWordFiles ()
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
wmlKeyWBuildTables ();
Packit b099d7
wmlOutputUilKeyTab ();
Packit b099d7
wmlOutputUilTokName ();
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * Routine to construct token tables for building UilKeyTab.h
Packit b099d7
 *
Packit b099d7
 * This routine constructs token entries for each token class which appears
Packit b099d7
 * in UilKeyTab.h (the token classes are defined in UilKeyDef.h). These
Packit b099d7
 * tokens are defined both by WML objects in object vectors, and by
Packit b099d7
 * tokens defined in Uil.y.
Packit b099d7
 */
Packit b099d7
Packit b099d7
void wmlKeyWBuildTables ()
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
int		ndx;
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Initialize the token vectors
Packit b099d7
 */
Packit b099d7
wmlInitHList (wml_tok_sens_ptr, 1000, TRUE);
Packit b099d7
wmlInitHList (wml_tok_insens_ptr, 1000, TRUE);
Packit b099d7
for ( ndx=0 ; ndx
Packit b099d7
    grtok_vec[ndx] = NULL;
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Read and enter the tokens from Uil.y (via tokens.dat)
Packit b099d7
 */
Packit b099d7
wmlKeyWGrammarTokens ();
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Enter the class, argument, reason, charset, child, and enumval tokens
Packit b099d7
 */
Packit b099d7
wmlKeyWClassTokens ();
Packit b099d7
wmlKeyWArgTokens ();
Packit b099d7
wmlKeyWReasonTokens ();
Packit b099d7
wmlKeyWCharsetTokens ();
Packit b099d7
wmlKeyWEnumvalTokens ();
Packit b099d7
wmlKeyWChildTokens ();
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * Routine to read and enter tokens defined in Uil.y into the token tables.
Packit b099d7
 */
Packit b099d7
Packit b099d7
void wmlKeyWGrammarTokens ()
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
FILE			*infil;		/* input file (tokens.dat) */
Packit b099d7
int			scanres;	/* result of fscanf */
Packit b099d7
int			lineno = 1;	/* current line number */
Packit b099d7
char			token[100];	/* current token */
Packit b099d7
char			class[100];	/* current class */
Packit b099d7
int			tokval;		/* current token id (as value) */
Packit b099d7
WmlGrammarTokenPtr	grtok;		/* new grammar token */
Packit b099d7
int			ndx;
Packit b099d7
char			sens_name[100];	/* for case-insensitive name */
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Read tokens.dat. Recognize and save all tokens. Some are saved in the
Packit b099d7
 * global tokens vector so they will be put into UilKeyTab.h. All are
Packit b099d7
 * saved in an ordered vector to write UilTokName.h
Packit b099d7
 *
Packit b099d7
 * Special handling is required for tokens whose yacc definition conflicts
Packit b099d7
 * with common literals. In these cases, the token literal does not map
Packit b099d7
 * directly to its keyword in the language, and must be mapped as a special
Packit b099d7
 * case:
Packit b099d7
 *	UILTRUE		-> true/TRUE
Packit b099d7
 *	UILFALSE	-> false/FALSE
Packit b099d7
 *	UILfile	 	-> file/FILE
Packit b099d7
 *	UILeof	 	-> eof/EOF
Packit b099d7
 */
Packit b099d7
infil = fopen ("tokens.dat", "r");
Packit b099d7
if ( infil == NULL )
Packit b099d7
    {
Packit b099d7
    printf ("\nCouldn't open tokens.dat");
Packit b099d7
    return;
Packit b099d7
    }
Packit b099d7
Packit b099d7
while ( TRUE )
Packit b099d7
    {
Packit b099d7
    scanres = fscanf (infil, "%s %d %s", token, &tokval, class);
Packit b099d7
    if ( scanres == EOF ) break;
Packit b099d7
    if ( scanres != 3 )
Packit b099d7
	{
Packit b099d7
	printf ("\nBadly formatted at line %d in tokens.dat", lineno);
Packit b099d7
	continue;
Packit b099d7
	}
Packit b099d7
    lineno += 1;
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Convert the token class, and construct a grammar token.
Packit b099d7
 */
Packit b099d7
    grtok = (WmlGrammarTokenPtr) malloc(sizeof(WmlGrammarToken));
Packit b099d7
    grtok->class = wmlKeyWGrammarClass (class);
Packit b099d7
    grtok->token = wmlAllocateString (token);
Packit b099d7
    grtok->val = tokval;
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Save the token in the grammar token vector, indexed by its value
Packit b099d7
 * (for UilTokName.h)
Packit b099d7
 */
Packit b099d7
if ( grtok->val < GrTokenMax )
Packit b099d7
    {
Packit b099d7
    grtok_vec[grtok->val] = grtok;
Packit b099d7
    if ( grtok->val > grtok_max_val )
Packit b099d7
	grtok_max_val = grtok->val;
Packit b099d7
    }
Packit b099d7
else
Packit b099d7
    printf ("\nToken id %d for %s exceed GrTokenMax",
Packit b099d7
	    grtok->val, grtok->token);
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Enter tokens which appear in the keyword tables as keyword tokens.
Packit b099d7
 * These have their lower case names entered as the case-insensitive
Packit b099d7
 * keyword token string. Do special token literal mapping.
Packit b099d7
 */
Packit b099d7
    switch ( grtok->class )
Packit b099d7
	{
Packit b099d7
	case WmlTokenClassKeyword:
Packit b099d7
	case WmlTokenClassReserved:
Packit b099d7
	    strcpy (sens_name, grtok->token);
Packit b099d7
	    for ( ndx=0 ; ndx<(int)strlen(sens_name) ; ndx++ )
Packit b099d7
		sens_name[ndx] = _lower(sens_name[ndx]);
Packit b099d7
	    if ( strcmp(sens_name,"uiltrue") == 0 )
Packit b099d7
		strcpy (sens_name, "true");
Packit b099d7
	    if ( strcmp(sens_name,"uilfalse") == 0 )
Packit b099d7
		strcpy (sens_name, "false");
Packit b099d7
	    if ( strcmp(sens_name,"uilfile") == 0 )
Packit b099d7
		strcpy (sens_name, "file");
Packit b099d7
	    if ( strcmp(sens_name,"uileof") == 0 )
Packit b099d7
		strcpy (sens_name, "eof");
Packit b099d7
	    wmlKeyWMakeTokens (sens_name, grtok->class, (ObjectPtr)grtok);
Packit b099d7
	}
Packit b099d7
    }
Packit b099d7
Packit b099d7
fclose (infil);
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * This routine translates a string identifying a token class into
Packit b099d7
 * its matching internal literal.
Packit b099d7
 */
Packit b099d7
int wmlKeyWGrammarClass (token)
Packit b099d7
    char		*token;
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
if ( strcmp(token,"argument") == 0 )
Packit b099d7
    return WmlTokenClassArgument;
Packit b099d7
if ( strcmp(token,"charset") == 0 )
Packit b099d7
    return WmlTokenClassCharset;
Packit b099d7
if ( strcmp(token,"color") == 0 )
Packit b099d7
    return WmlTokenClassColor;
Packit b099d7
if ( strcmp(token,"enumval") == 0 )
Packit b099d7
    return WmlTokenClassEnumval;
Packit b099d7
if ( strcmp(token,"font") == 0 )
Packit b099d7
    return WmlTokenClassFont;
Packit b099d7
if ( strcmp(token,"identifier") == 0 )
Packit b099d7
    return WmlTokenClassIdentifier;
Packit b099d7
if ( strcmp(token,"keyword") == 0 )
Packit b099d7
    return WmlTokenClassKeyword;
Packit b099d7
if ( strcmp(token,"literal") == 0 )
Packit b099d7
    return WmlTokenClassLiteral;
Packit b099d7
if ( strcmp(token,"reason") == 0 )
Packit b099d7
    return WmlTokenClassReason;
Packit b099d7
if ( strcmp(token,"reserved") == 0 )
Packit b099d7
    return WmlTokenClassReserved;
Packit b099d7
if ( strcmp(token,"special") == 0 )
Packit b099d7
    return WmlTokenClassSpecial;
Packit b099d7
if ( strcmp(token,"unused") == 0 )
Packit b099d7
    return WmlTokenClassUnused;
Packit b099d7
if ( strcmp(token,"class") == 0 )
Packit b099d7
    return WmlTokenClassClass;
Packit b099d7
if (strcmp(token,"child") == 0) return WmlTokenClassChild;
Packit b099d7
Packit b099d7
printf ("\nUnrecognized token class %s", token);
Packit b099d7
return 0;
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * Routine to process the class objects and enter them in the token tables.
Packit b099d7
 * Aliases are also entered, under their own names.
Packit b099d7
 */
Packit b099d7
Packit b099d7
void wmlKeyWClassTokens ()
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
int			ndx;		/* loop index */
Packit b099d7
WmlClassDefPtr		clsobj;		/* class object */
Packit b099d7
WmlSynClassDefPtr	synobj;		/* syntactic object */
Packit b099d7
int			alias_ndx;	/* alias loop index */
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Make tokens for all class entries
Packit b099d7
 */
Packit b099d7
for ( ndx=0 ; ndx<wml_obj_class_ptr->cnt ; ndx++ )
Packit b099d7
    {
Packit b099d7
    clsobj = (WmlClassDefPtr) wml_obj_class_ptr->hvec[ndx].objptr;
Packit b099d7
    synobj = clsobj->syndef;
Packit b099d7
    wmlKeyWMakeTokens (synobj->name, WmlTokenClassClass, (ObjectPtr)clsobj);
Packit b099d7
    for ( alias_ndx=0 ; alias_ndx<synobj->alias_cnt ; alias_ndx++ )
Packit b099d7
	wmlKeyWMakeTokens (synobj->alias_list[alias_ndx],
Packit b099d7
			   WmlTokenClassClass,
Packit b099d7
			   (ObjectPtr)clsobj);
Packit b099d7
    }
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * Routine to process the argument objects and enter them in the token tables.
Packit b099d7
 * Aliases are also entered, under their own names.
Packit b099d7
 */
Packit b099d7
Packit b099d7
void wmlKeyWArgTokens ()
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
int			ndx;		/* loop index */
Packit b099d7
WmlResourceDefPtr	resobj;		/* resource object */
Packit b099d7
WmlSynResourceDefPtr	synobj;		/* syntactic object */
Packit b099d7
int			alias_ndx;	/* alias loop index */
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Make tokens for all argument entries
Packit b099d7
 */
Packit b099d7
for ( ndx=0 ; ndx<wml_obj_arg_ptr->cnt ; ndx++ )
Packit b099d7
    {
Packit b099d7
    resobj = (WmlResourceDefPtr) wml_obj_arg_ptr->hvec[ndx].objptr;
Packit b099d7
    synobj = resobj->syndef;
Packit b099d7
    wmlKeyWMakeTokens (synobj->name, WmlTokenClassArgument, (ObjectPtr)resobj);
Packit b099d7
    for ( alias_ndx=0 ; alias_ndx<synobj->alias_cnt ; alias_ndx++ )
Packit b099d7
	wmlKeyWMakeTokens (synobj->alias_list[alias_ndx],
Packit b099d7
			   WmlTokenClassArgument,
Packit b099d7
			   (ObjectPtr)resobj);
Packit b099d7
    }
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * Routine to process the reason objects and enter them in the token tables.
Packit b099d7
 */
Packit b099d7
Packit b099d7
void wmlKeyWReasonTokens ()
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
int			ndx;		/* loop index */
Packit b099d7
WmlResourceDefPtr	resobj;		/* resource object */
Packit b099d7
WmlSynResourceDefPtr	synobj;		/* syntactic object */
Packit b099d7
int			alias_ndx;	/* alias loop index */
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Make tokens for all reason entries
Packit b099d7
 */
Packit b099d7
for ( ndx=0 ; ndx<wml_obj_reason_ptr->cnt ; ndx++ )
Packit b099d7
    {
Packit b099d7
    resobj = (WmlResourceDefPtr) wml_obj_reason_ptr->hvec[ndx].objptr;
Packit b099d7
    synobj = resobj->syndef;
Packit b099d7
    wmlKeyWMakeTokens (synobj->name, WmlTokenClassReason, (ObjectPtr)resobj);
Packit b099d7
    for ( alias_ndx=0 ; alias_ndx<synobj->alias_cnt ; alias_ndx++ )
Packit b099d7
	wmlKeyWMakeTokens (synobj->alias_list[alias_ndx],
Packit b099d7
			   WmlTokenClassReason,
Packit b099d7
			   (ObjectPtr)resobj);
Packit b099d7
    }
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * Routine to process the child objects and enter them in the token tables.
Packit b099d7
 */
Packit b099d7
Packit b099d7
void wmlKeyWChildTokens ()
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
int			ndx;		/* loop index */
Packit b099d7
WmlChildDefPtr		childobj;	/* child object */
Packit b099d7
WmlSynChildDefPtr	synobj;		/* syntactic object */
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Make tokens for all child entries
Packit b099d7
 */
Packit b099d7
for ( ndx=0 ; ndx<wml_obj_child_ptr->cnt ; ndx++ )
Packit b099d7
    {
Packit b099d7
    childobj = (WmlChildDefPtr) wml_obj_child_ptr->hvec[ndx].objptr;
Packit b099d7
    synobj = childobj->syndef;
Packit b099d7
    wmlKeyWMakeTokens (synobj->name, WmlTokenClassChild, (ObjectPtr)childobj);
Packit b099d7
    }
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * Routine to process the charset objects and enter them in the token tables.
Packit b099d7
 */
Packit b099d7
Packit b099d7
void wmlKeyWCharsetTokens ()
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
int			ndx;		/* loop index */
Packit b099d7
WmlCharSetDefPtr	csobj;		/* character set object */
Packit b099d7
WmlSynCharSetDefPtr	synobj;		/* syntactic object */
Packit b099d7
int			alias_ndx;	/* alias loop index */
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Make tokens for all charset entries
Packit b099d7
 */
Packit b099d7
for ( ndx=0 ; ndx<wml_obj_charset_ptr->cnt ; ndx++ )
Packit b099d7
    {
Packit b099d7
    csobj = (WmlCharSetDefPtr) wml_obj_charset_ptr->hvec[ndx].objptr;
Packit b099d7
    synobj = csobj->syndef;
Packit b099d7
    wmlKeyWMakeTokens (synobj->name, WmlTokenClassCharset, (ObjectPtr)csobj);
Packit b099d7
    for ( alias_ndx=0 ; alias_ndx<synobj->alias_cnt ; alias_ndx++ )
Packit b099d7
	wmlKeyWMakeTokens (synobj->alias_list[alias_ndx],
Packit b099d7
			   WmlTokenClassCharset,
Packit b099d7
			   (ObjectPtr)csobj);
Packit b099d7
    }
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * Routine to process the enumval objects and enter them in the token tables.
Packit b099d7
 */
Packit b099d7
Packit b099d7
void wmlKeyWEnumvalTokens ()
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
int			ndx;		/* loop index */
Packit b099d7
WmlEnumValueDefPtr	esobj;		/* enumeration value object */
Packit b099d7
WmlSynEnumValueDefPtr	synobj;		/* syntactic object */
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Make tokens for all enumval entries
Packit b099d7
 */
Packit b099d7
for ( ndx=0 ; ndx<wml_obj_enumval_ptr->cnt ; ndx++ )
Packit b099d7
    {
Packit b099d7
    esobj = (WmlEnumValueDefPtr) wml_obj_enumval_ptr->hvec[ndx].objptr;
Packit b099d7
    synobj = esobj->syndef;
Packit b099d7
    wmlKeyWMakeTokens (synobj->name, WmlTokenClassEnumval, (ObjectPtr)esobj);
Packit b099d7
    }
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * Routine to create tokens and enter them in the token list.
Packit b099d7
 *
Packit b099d7
 * This routine constructs a case-sensitive and a case-insensitive token
Packit b099d7
 * and enters them the token vectors.
Packit b099d7
 */
Packit b099d7
void wmlKeyWMakeTokens (sens_name, class, obj)
Packit b099d7
    char		*sens_name;
Packit b099d7
    int			class;
Packit b099d7
    ObjectPtr		obj;
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
WmlKeyWTokenPtr		senstok;	/* case-sensitive token */
Packit b099d7
WmlKeyWTokenPtr		insenstok;	/* case-insensitive token */
Packit b099d7
char			insens_name[100];
Packit b099d7
int			ndx;
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Create both tokens, with one having an upper-case name. The names are
Packit b099d7
 * entered only in the order vector, not in the token itself.
Packit b099d7
 */
Packit b099d7
senstok = (WmlKeyWTokenPtr) malloc (sizeof(WmlKeyWToken));
Packit b099d7
insenstok = (WmlKeyWTokenPtr) malloc (sizeof(WmlKeyWToken));
Packit b099d7
senstok->class = class;
Packit b099d7
senstok->objdef = obj;
Packit b099d7
insenstok->class = class;
Packit b099d7
insenstok->objdef = obj;
Packit b099d7
Packit b099d7
strcpy (insens_name, sens_name);
Packit b099d7
for ( ndx=0 ; ndx<(int)strlen(insens_name) ; ndx++ )
Packit b099d7
    insens_name[ndx] = _upper (insens_name[ndx]);
Packit b099d7
Packit b099d7
wmlInsertInKeyList(wml_tok_sens_ptr, sens_name, senstok);
Packit b099d7
wmlInsertInKeyList(wml_tok_insens_ptr, insens_name, insenstok);
Packit b099d7
}
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * Routine to output UilKeyTab.h
Packit b099d7
 *
Packit b099d7
 * This routine dumps the tokens defined in the token tables into
Packit b099d7
 * UilKeyTab.h. Both the case-sensitive and case-insensitive token
Packit b099d7
 * lists are used.
Packit b099d7
 */
Packit b099d7
Packit b099d7
void wmlOutputUilKeyTab ()
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
char			*canned1 =
Packit b099d7
"\n/*    case sensitive keyword table    */\n\
Packit b099d7
static key_keytable_entry_type key_table_vec[] =\n\
Packit b099d7
  {\n";
Packit b099d7
Packit b099d7
char			*canned2 =
Packit b099d7
"  };\n\
Packit b099d7
externaldef(uil_sym_glbl) key_keytable_entry_type *key_table =\n\
Packit b099d7
\t\tkey_table_vec;\n\n\
Packit b099d7
/*    Maximum length of a keyword, and table size    */\n\
Packit b099d7
externaldef(uil_sym_glbl) int key_k_keyword_max_length = %d;\n\
Packit b099d7
externaldef(uil_sym_glbl) int key_k_keyword_count = %d;\n\n\
Packit b099d7
/*    case insensitive keyword table    */\n\
Packit b099d7
static key_keytable_entry_type key_table_case_ins_vec[] =\n\
Packit b099d7
  {\n";
Packit b099d7
Packit b099d7
char			*canned3 =
Packit b099d7
"  };\n\
Packit b099d7
externaldef(uil_sym_glbl) key_keytable_entry_type *key_table_case_ins =\n\
Packit b099d7
\t\tkey_table_case_ins_vec;\n";
Packit b099d7
Packit b099d7
Packit b099d7
FILE			*outfil;	/* output file */
Packit b099d7
int			ndx;		/* loop index */
Packit b099d7
int			maxlen = 0;	/* max keyword length */
Packit b099d7
int			maxkey = 0;	/* # entries in keyword table */
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Open the output file.
Packit b099d7
 */
Packit b099d7
outfil = fopen ("UilKeyTab.h", "w");
Packit b099d7
if ( outfil == NULL )
Packit b099d7
    {
Packit b099d7
    printf ("\nCouldn't open UilKeyTab.h");
Packit b099d7
    return;
Packit b099d7
    }
Packit Service 1f15c3
fprintf (outfil, canned_warn);
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Print the case sensitive and insensitive tables
Packit b099d7
 */
Packit Service 1f15c3
fprintf (outfil, canned1);
Packit b099d7
wmlOutputUilKeyTabBody (outfil, wml_tok_sens_ptr, &maxlen, &maxkey);
Packit b099d7
fprintf (outfil, canned2, maxlen, maxkey);
Packit b099d7
wmlOutputUilKeyTabBody (outfil, wml_tok_insens_ptr, &maxlen, &maxkey);
Packit Service 1f15c3
fprintf (outfil, canned3);
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * close the output file
Packit b099d7
 */
Packit b099d7
printf ("\nCreated UilKeyTab.h");
Packit b099d7
fclose (outfil);
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * Routine to output the body of a keyword table
Packit b099d7
 */
Packit b099d7
void wmlOutputUilKeyTabBody (outfil, tokvec, maxlen, maxkey)
Packit b099d7
    FILE			*outfil;
Packit b099d7
    DynamicHandleListDefPtr	tokvec;
Packit b099d7
    int				*maxlen;
Packit b099d7
    int				*maxkey;
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
int			ndx;		/* loop index */
Packit b099d7
WmlKeyWTokenPtr		tok;		/* current token */
Packit b099d7
char			*tokstg;	/* string for token (keyword) */
Packit b099d7
char			tkclass[100];	/* token class string */
Packit b099d7
char			tksym[100];	/* token sym_k string */
Packit b099d7
char			tktoken[100];	/* token tkn_k_num string */
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Loop over all tokens, and put out an entry for each.
Packit b099d7
 */
Packit b099d7
for ( ndx=0 ; ndx<tokvec->cnt ; ndx++ )
Packit b099d7
    {
Packit b099d7
    tok = (WmlKeyWTokenPtr) tokvec->hvec[ndx].objptr;
Packit b099d7
    tokstg = tokvec->hvec[ndx].objname;
Packit b099d7
    wmlTokenClassString (tkclass, tok);
Packit b099d7
    wmlTokenSymKString (tksym, tok);
Packit b099d7
    wmlTokenTokenString (tktoken, tok);
Packit b099d7
    fprintf (outfil, "    {%s, %s, %d, %s, \"%s\"},\n",
Packit b099d7
	     tkclass,
Packit b099d7
	     tksym,
Packit b099d7
	     strlen(tokstg),
Packit b099d7
	     tktoken,
Packit b099d7
	     tokstg);
Packit b099d7
    if ( (int)strlen(tokstg) > *maxlen )
Packit b099d7
	*maxlen = strlen (tokstg);
Packit b099d7
    *maxkey += 1;
Packit b099d7
    }
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * Routine to return the string for a token class, tkn_k_class_...
Packit b099d7
 */
Packit b099d7
void wmlTokenClassString (dststg, tok)
Packit b099d7
    char		*dststg;
Packit b099d7
    WmlKeyWTokenPtr	tok;
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
switch ( tok->class )
Packit b099d7
    {
Packit b099d7
    case WmlTokenClassArgument:
Packit b099d7
        strcpy (dststg, "tkn_k_class_argument");
Packit b099d7
	return;
Packit b099d7
    case WmlTokenClassCharset:
Packit b099d7
        strcpy (dststg, "tkn_k_class_charset");
Packit b099d7
	return;
Packit b099d7
    case WmlTokenClassEnumval:
Packit b099d7
        strcpy (dststg, "tkn_k_class_enumval");
Packit b099d7
	return;
Packit b099d7
    case WmlTokenClassKeyword:
Packit b099d7
        strcpy (dststg, "tkn_k_class_keyword");
Packit b099d7
	return;
Packit b099d7
    case WmlTokenClassReason:
Packit b099d7
        strcpy (dststg, "tkn_k_class_reason");
Packit b099d7
	return;
Packit b099d7
    case WmlTokenClassReserved:
Packit b099d7
        strcpy (dststg, "tkn_k_class_reserved");
Packit b099d7
	return;
Packit b099d7
    case WmlTokenClassClass:
Packit b099d7
        strcpy (dststg, "tkn_k_class_class");
Packit b099d7
	return;
Packit b099d7
    case WmlTokenClassChild:
Packit b099d7
        strcpy (dststg, "tkn_k_class_child");
Packit b099d7
	return;
Packit b099d7
    }
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * Routine to return the string for a sym_k_... for some object
Packit b099d7
 */
Packit b099d7
void wmlTokenSymKString (dststg, tok)
Packit b099d7
    char		*dststg;
Packit b099d7
    WmlKeyWTokenPtr	tok;
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
WmlClassDefPtr		clsobj;		/* class object */
Packit b099d7
WmlResourceDefPtr	resobj;		/* resource object */
Packit b099d7
WmlCharSetDefPtr	csobj;		/* character set object */
Packit b099d7
WmlEnumValueDefPtr	esobj;		/* enumeration value object */
Packit b099d7
WmlChildDefPtr		chobj;		/* child object */
Packit b099d7
Packit b099d7
Packit b099d7
switch ( tok->class )
Packit b099d7
    {
Packit b099d7
    case WmlTokenClassArgument:
Packit b099d7
	resobj = (WmlResourceDefPtr) tok->objdef;
Packit b099d7
	sprintf (dststg, "sym_k_%s_arg", resobj->tkname);
Packit b099d7
	return;
Packit b099d7
    case WmlTokenClassCharset:
Packit b099d7
	csobj = (WmlCharSetDefPtr) tok->objdef;
Packit b099d7
	sprintf (dststg, "sym_k_%s_charset", csobj->syndef->name);
Packit b099d7
	return;
Packit b099d7
    case WmlTokenClassEnumval:
Packit b099d7
	esobj = (WmlEnumValueDefPtr) tok->objdef;
Packit b099d7
	sprintf (dststg, "sym_k_%s_enumval", esobj->syndef->name);
Packit b099d7
	return;
Packit b099d7
    case WmlTokenClassKeyword:
Packit b099d7
        strcpy (dststg, "0");
Packit b099d7
	return;
Packit b099d7
    case WmlTokenClassReason:
Packit b099d7
	resobj = (WmlResourceDefPtr) tok->objdef;
Packit b099d7
	sprintf (dststg, "sym_k_%s_reason", resobj->tkname);
Packit b099d7
	return;
Packit b099d7
    case WmlTokenClassReserved:
Packit b099d7
        strcpy (dststg, "0");
Packit b099d7
	return;
Packit b099d7
    case WmlTokenClassClass:
Packit b099d7
        clsobj = (WmlClassDefPtr) tok->objdef;
Packit b099d7
	sprintf (dststg, "sym_k_%s_object", clsobj->tkname);
Packit b099d7
	return;
Packit b099d7
    case WmlTokenClassChild:
Packit b099d7
        chobj = (WmlChildDefPtr) tok->objdef;
Packit b099d7
	sprintf (dststg, "sym_k_%s_child", chobj->tkname);
Packit b099d7
	return;
Packit b099d7
    }
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * Routine to return the string for a token number, tkn_k_num_...
Packit b099d7
 */
Packit b099d7
void wmlTokenTokenString (dststg, tok)
Packit b099d7
    char		*dststg;
Packit b099d7
    WmlKeyWTokenPtr	tok;
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
WmlGrammarTokenPtr	grtok;		/* grammar token */
Packit b099d7
Packit b099d7
Packit b099d7
switch ( tok->class )
Packit b099d7
    {
Packit b099d7
    case WmlTokenClassArgument:
Packit b099d7
        strcpy (dststg, "ARGUMENT_NAME");
Packit b099d7
	return;
Packit b099d7
    case WmlTokenClassCharset:
Packit b099d7
        strcpy (dststg, "CHARSET_NAME");
Packit b099d7
	return;
Packit b099d7
    case WmlTokenClassEnumval:
Packit b099d7
        strcpy (dststg, "ENUMVAL_NAME");
Packit b099d7
	return;
Packit b099d7
    case WmlTokenClassReason:
Packit b099d7
        strcpy (dststg, "REASON_NAME");
Packit b099d7
	return;
Packit b099d7
    case WmlTokenClassKeyword:
Packit b099d7
    case WmlTokenClassReserved:
Packit b099d7
	grtok = (WmlGrammarTokenPtr) tok->objdef;
Packit b099d7
        strcpy (dststg, grtok->token);
Packit b099d7
	return;
Packit b099d7
    case WmlTokenClassClass:
Packit b099d7
        strcpy (dststg, "CLASS_NAME");
Packit b099d7
	return;
Packit b099d7
    case WmlTokenClassChild:
Packit b099d7
        strcpy (dststg, "CHILD_NAME");
Packit b099d7
	return;
Packit b099d7
    }
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * routine to output UilTokName.h
Packit b099d7
 */
Packit b099d7
Packit b099d7
void wmlOutputUilTokName ()
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
char			*canned1 =
Packit b099d7
"/*\tToken name table */\n\
Packit b099d7
static char *tok_token_name_table_vec[] = \n\
Packit b099d7
  {\n";
Packit b099d7
Packit b099d7
char			*canned2 =
Packit b099d7
"  };\n\
Packit b099d7
externaldef(uil_sym_glbl) char **tok_token_name_table =\n\
Packit b099d7
\t\ttok_token_name_table_vec;\n\n\
Packit b099d7
/*\tNumber of entries in table */\n\
Packit b099d7
externaldef(uil_sym_glbl) int tok_num_tokens = %d;\n";
Packit b099d7
Packit b099d7
Packit b099d7
FILE			*outfil;	/* output file */
Packit b099d7
int			ndx;		/* loop index */
Packit b099d7
WmlGrammarTokenPtr	grtok;		/* current grammar token */
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Open the output file.
Packit b099d7
 */
Packit b099d7
outfil = fopen ("UilTokName.h", "w");
Packit b099d7
if ( outfil == NULL )
Packit b099d7
    {
Packit b099d7
    printf ("\nCouldn't open UilTokName.h");
Packit b099d7
    return;
Packit b099d7
    }
Packit Service 1f15c3
fprintf (outfil, canned_warn);
Packit Service 1f15c3
fprintf (outfil, canned1);
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Print the token name entries
Packit b099d7
 * Note: vector size is max_val + 1 for zeroth token
Packit b099d7
 */
Packit b099d7
for ( ndx=0 ; ndx
Packit b099d7
    {
Packit b099d7
    grtok = grtok_vec[ndx];
Packit b099d7
    if ( grtok != NULL )
Packit b099d7
	fprintf (outfil, "    \"%s\",\n", grtok->token);
Packit b099d7
    else
Packit b099d7
	fprintf (outfil, "    \"UNKNOWN_TOKEN\",\n");
Packit b099d7
    }
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * close the output file
Packit b099d7
 */
Packit b099d7
fprintf (outfil, canned2, grtok_max_val+1);
Packit b099d7
printf ("\nCreated UilTokName.h");
Packit b099d7
fclose (outfil);
Packit b099d7
Packit b099d7
}