123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271 |
- /*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these librararies and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
- /*
- * @OSF_COPYRIGHT@
- * COPYRIGHT NOTICE
- * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc.
- * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for
- * the full copyright text.
- */
- /*
- * HISTORY
- */
- #ifdef REV_INFO
- #ifndef lint
- static char rcsid[] = "$TOG: wml.c /main/8 1999/04/16 09:41:47 mgreess $"
- #endif
- #endif
- /*
- * (c) Copyright 1989, 1990, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */
- /*
- * This is the main program for WML. It declares all global data structures
- * used during a compilation, and during output.
- */
- /*
- * WML is a semi-standard Unix application. It reads its input from
- * stdin, which is expected to be a stream containing a WML description
- * of a UIL language. If this stream is successfully parsed and semantically
- * validated, then WML writes a series of standard .h and .dat files into
- * the user directory. The .h files will be used directly to construct
- * the UIL compiler. The .dat files are used by other phases of UIL
- * table generation.
- *
- * The files created by WML are:
- *
- * .h files:
- * UilSymGen.h
- * UilSymArTy.h
- * UilSymRArg.h
- * UilDrmClas.h
- * UilConst.h
- * UilSymReas.h
- * UilSymArTa.h
- * UilSymCtl.h
- * UilSymNam.h
- * .dat files
- * argument.dat
- * reason.dat
- * grammar.dat
- * .mm files
- * wml-uil.mm
- */
- #include "wml.h"
- #if defined(SYSV) || defined(SVR4)
- #include <fcntl.h>
- #else
- #include <sys/file.h>
- #endif
- #include <stdio.h>
- /*
- * Globals used during WML parsing.
- *
- * WML uses globals exclusively to communicate data during parsing. The
- * current object being constructed is held by these globals, and all
- * routines called from the parse assume correct setting of these globals.
- * This simplisitic approach is possible since the WML description language
- * has no recursive constructs requiring a frame stack.
- */
- /*
- * Error and other counts
- */
- int wml_err_count = 0; /* total errors */
- int wml_line_count = 0; /* lines read from input */
- /*
- * Dynamic ordered vector of all objects encountered during parse. This
- * is used to detect name collisions, and is the primary order vector
- * used for all other vectors constructed curing the semantic resolution
- * phase of processing.
- */
- DynamicHandleListDef wml_synobj;
- DynamicHandleListDefPtr wml_synobj_ptr = &wml_synobj;
- /*
- * Dynamic vectors of vectors partitioned and ordered
- * as required by the semantic processing and output routines. All
- * point to resolved objects rather than syntactic objects.
- */
- DynamicHandleListDef wml_obj_datatype; /* datatype objects */
- DynamicHandleListDefPtr wml_obj_datatype_ptr = &wml_obj_datatype;
- DynamicHandleListDef wml_obj_enumval; /* enumeration value objects */
- DynamicHandleListDefPtr wml_obj_enumval_ptr = &wml_obj_enumval;
- DynamicHandleListDef wml_obj_enumset; /* enumeration set objects */
- DynamicHandleListDefPtr wml_obj_enumset_ptr = &wml_obj_enumset;
- DynamicHandleListDef wml_obj_reason; /* reason resource objects */
- DynamicHandleListDefPtr wml_obj_reason_ptr = &wml_obj_reason;
- DynamicHandleListDef wml_obj_arg; /* argument resource objects */
- DynamicHandleListDefPtr wml_obj_arg_ptr = &wml_obj_arg;
- DynamicHandleListDef wml_obj_child; /* argument resource objects */
- DynamicHandleListDefPtr wml_obj_child_ptr = &wml_obj_child;
- DynamicHandleListDef wml_obj_allclass; /* metaclass, widget, gadget */
- DynamicHandleListDefPtr wml_obj_allclass_ptr = &wml_obj_allclass;
- DynamicHandleListDef wml_obj_class; /* widget & gadget objects */
- DynamicHandleListDefPtr wml_obj_class_ptr = &wml_obj_class;
- DynamicHandleListDef wml_obj_ctrlist; /* controls list objects */
- DynamicHandleListDefPtr wml_obj_ctrlist_ptr = &wml_obj_ctrlist;
- DynamicHandleListDef wml_obj_charset; /* charset objects */
- DynamicHandleListDefPtr wml_obj_charset_ptr = &wml_obj_charset;
- DynamicHandleListDef wml_tok_sens; /* case-sensitive tokens */
- DynamicHandleListDefPtr wml_tok_sens_ptr = &wml_tok_sens;
- DynamicHandleListDef wml_tok_insens; /* case-insensitive tokens */
- DynamicHandleListDefPtr wml_tok_insens_ptr = &wml_tok_insens;
- /*
- * Routines only accessible in this module
- */
- void wmlInit ();
- /*
- * External variables
- */
- extern int yyleng;
- /*
- * The WML main routine:
- *
- * 1. Initialize global storage
- * 2. Open the input file if there is one
- * 3. Parse the WML description in stdin. Exit on errors
- * 4. Perform semantic validation and resolution. Exit on errors.
- * 5. Output files
- */
- int main (argc, argv)
- int argc;
- char **argv;
- {
- int done;
- int fd; /* input file descriptor */
- /*
- * Initialize storage
- */
- wmlInit ();
- /*
- * Assume that anything in argv must be an input file. Open it, and
- * dup it to stdin
- */
- if ( argc > 1 )
- {
- if ( (fd=open(argv[1],O_RDONLY)) == -1 )
- printf ("\nCouldn't open file %s", argv[1]);
- else
- dup2 (fd, 0);
- }
- /*
- * Process the input
- */
- done = 0;
- while (!done)
- {
-
- /*
- * Parse the input stream
- */
- yyleng = 0; /* initialization safety */
- yyparse ();
- if ( wml_err_count > 0 ) break;
- printf ("\nParse of WML input complete");
-
- /*
- * Perform semantic validation, and construct resolved data structures
- */
- wmlResolveDescriptors ();
- if ( wml_err_count > 0 ) break;
- printf ("\nSemantic validation and resolution complete");
-
- /*
- * Output
- */
- wmlOutput ();
- if ( wml_err_count > 0 ) break;
- printf ("\nWML Uil*.h and wml-uil.mm file creation complete\n");
-
- done = 1;
- }
- /*
- * Report inaction on errors
- */
- if ( wml_err_count > 0 )
- {
- printf ("\nWML found %d errors, no or incomplete output produced\n",
- wml_err_count);
- /* Begin fixing the bug CR 4748 */
- exit(1);
- /* End fixing the bug CR 4748 */
- }
- return (0);
- }
- /*
- * Routine to initialize WML.
- *
- * The main job is to dynamically allocate any dynamic lists to a reasonable
- * initial state.
- */
- void wmlInit ()
- {
- /*
- * Initialize the list of all syntactic objects
- */
- wmlInitHList (wml_synobj_ptr, 1000, TRUE);
- }
- yywrap()
- {
- return(1);
- }
|