|
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 |
}
|