[comp.sources.x] v07i022: AWL -- layout language for widget hierarchies, Part08/18

vixie@wrl.dec.com (Paul Vixie) (05/03/90)

Submitted-by: vixie@wrl.dec.com (Paul Vixie)
Posting-number: Volume 7, Issue 22
Archive-name: awl/part08

#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 8 (of 17)."
# Contents:  awl.y etc/xw.h
# Wrapped by vixie@jove.pa.dec.com on Mon Apr 30 01:25:23 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'awl.y' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'awl.y'\"
else
echo shar: Extracting \"'awl.y'\" \(26311 characters\)
sed "s/^X//" >'awl.y' <<'END_OF_FILE'
X%{
X#ifndef lint
static char *rcsid = "$Header: /usr/src/local/awl/RCS/awl.y,v 2.6 90/04/19 20:04:34 jkh Exp $";
X#endif
X
X/*
X *
X *                     Copyright 1989
X *                    Jordan K. Hubbard
X *
X *		  PCS Computer Systeme, GmbH.
X *	             Munich, West Germany
X *
X *
X * This file is part of AWL.
X *
X * AWL is free software; you can redistribute it and/or modify
X * it under the terms of the GNU General Public License as published by
X * the Free Software Foundation; either version 1, or (at your option)
X * any later version.
X *
X * AWL is distributed in the hope that it will be useful,
X * but WITHOUT ANY WARRANTY; without even the implied warranty of
X * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
X * GNU General Public License for more details.
X *
X * You should have received a copy of the GNU General Public License
X * along with AWL; see the file COPYING.  If not, write to
X * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
X *
X *
X */
X
X/*
X * This is awl's main yacc parser.
X *
X * $Log:	awl.y,v $
X * Revision 2.6  90/04/19  20:04:34  jkh
X * Alpha checkin.
X * 
X * Revision 2.5  90/03/30  22:01:33  jkh
X * Drastically re-arranged the opcodes.
X * 
X * Revision 2.4  90/03/30  20:13:23  jkh
X * Got switch/case working. Fixed list constants.
X * 
X * Revision 2.3  90/03/29  18:25:26  jkh
X * Added first cut at switch/case.
X * 
X * Revision 2.2  90/03/27  09:13:21  jkh
X * Added PIXMAP builtin type.
X * 
X * Revision 2.1  90/03/26  13:11:45  jkh
X * Removed rcsclean from allclean rule; overkill.
X * 
X * Revision 2.0  90/03/26  01:42:52  jkh
X * pre-beta check-in
X *
X */
X
X#include "AwlP.h"
X
X/* For break/continue statements */
Local Symbol BreakList = NULL, ContinueList = NULL;
X
X/* For switch statements */
X#define NO_SWITCH	0
X#define IN_SWITCH	1
X#define SEEN_DEFAULT	2
Local Symbol CaseHeaderList = NULL, CaseBodyList = NULL;
Local int CaseState = NO_SWITCH;
X
X/* For local variables */
Local Symbol CurrentFunc = NULL;
X
X/* For list constants */
String *ListKludge;
int ListKludgeSize, ListKludgeMax;
X
X/* Misc */
Local Datum d1;
X
XExport int yyerror();
XExport void yywarn();
X
Import AwlWidget _currW;
X
X#define YYKOTZ(msg, arg) { if (yyerror((msg), (arg))) return(1); }
X
X%}
X
X%union
X{
X     char		bval;
X     WidgetClass	cval;
X     int		ival;
X     FTYPE		fval;
X     String		sval;
X     String	       *lval;
X     Symbol		symb;
X     Datum		data;
X}
X
X/* From K&R, (plus the special operators) */
X%left	COMMA
X%right	EQ ME PE TE DE RE XE AE OE CE SLE SRE
X%right	QST COL
X%left	LOR
X%left	LAND
X%left	OR
X%left	XOR
X%left	AND COPY NUKE
X%left	EE NE
X%left	LT LE GT GE
X%left	SL SR
X%left	PLUS MINUS
X%left	MULT DIV MOD
X%right	NOT ADDR COMP PP MM UMINUS CAST RANGE
X%left	MBR
X%left	DOT LBRK RBRK
X
X/*
X * The general instruction set (minus most ALU ops, which were def'd above)
X * The order of these puppies is important! Don't mess with it without
X * reading the helpful comments in eval.c where opcode_table is declared.
X */
X%token	ALU CALL JUMP JUMPZ POP RTS ARES CLOS DUP HALT LINK OPEN PUSH
X
X/* ALU ops not used directly by expressions. _LASTALU must always be last */
X%token	ASOC SUB TRI _LASTALU
X
X/* Registers and internal types */
X%token	_PC _SP _FP
X%token	FUNC_UNDEF FUNC_ACTION FUNC_BUILTIN FUNC_CALLBACK FUNC_LAYOUT
X%token	FUNC_USER FUNC_EXTERN FILEDESC FILEPDESC RESOURCE SYMBOL RANGE
X
X/* public types */
X%token	ANY CADDR CALLBACK CHAR FADDR FLOAT IADDR INT LAYOUT LIST PIXMAP SADDR
X%token	STRING TRANSLATION WCLASS WIDGET
X
X/* classes */
X%token ALLOCATED CONSTANT DATA FUNCTION INDIRECT LABEL STATIC
X
X/* keywords and separators */
X%token	';' '{' '}' '(' ')'
X%token	IF ELSE WHILE DO FOR UNTIL BREAK CONTINUE RETURN GOTO SWITCH
X%token	CASE DEFAULT
X
X%token	GLOBAL LOCAL
X
X%nonassoc IF
X%nonassoc ELSE
X
X%token	<ival>	INT
X%token	<fval>	FLOAT
X%token	<bval>	CHAR
X%token	<sval>	STRING
X%token	<sval>	IDENTIFIER
X%token  <cval>	WIDGET_TYPE
X
X%type	<data>	char_data int_data float_data string_data
X%type	<data>	range_data list_data wclass_data
X
X%type	<data>	widget_data
X%type	<ival>	numeric do_prefix
X%type	<sval>	string ident
X%type	<symb>	newparm parm parameter_list opt_parm_list
X%type	<symb>	function_start
X%type	<symb>	if_prefix else_clause
X%type	<symb>	while_prefix while_loop until_loop
X%type	<ival>	f_cond
X%type	<symb>	f_lb1 f_lb2 f_last
X%type	<lval>	list
X
X%start	declaration
X
X%%
X
global_declaration
X     :	GLOBAL global_body semi
X     ;
X
global_body
X     :	global_keyword
X     |	global_body COMMA global_keyword
X	{ yyerrok; }
X     |	error
X	{ YYKOTZ("Missing or invalid symbol name for global", 0); }
X     |	global_body error
X	{ YYKOTZ("Unexpected symbol following global definition", 0); }
X     |	global_body error global_keyword
X	{ YYKOTZ("Missing or invalid separator", 0); }
X     |	global_body COMMA error
X	{ YYKOTZ("Missing or invalid symbol list for global", 0); }
X     ;
X
global_keyword
X     :	ident
X	{
X	     Symbol tmp;
X
X	     tmp = symbol_new(_currW, $1, STRING);
X	     symbol_aobj(tmp) = new_aobj($1);
X	     symbol_add(tmp);
X	}
X     |	ident EQ CHAR
X	{
X	     Symbol tmp = symbol_new(_currW, $1, CHAR);
X	     symbol_char(tmp) = $3;
X	     symbol_add(tmp);
X	     XtFree($1);
X	}
X     |	ident EQ INT
X	{
X	     Symbol tmp = symbol_new(_currW, $1, INT);
X	     symbol_int(tmp) = $3;
X	     symbol_add(tmp);
X	     XtFree($1);
X	}
X     |	ident EQ FLOAT
X	{
X	     Symbol tmp = symbol_new(_currW, $1, FLOAT);
X	     symbol_float(tmp) = $3;
X	     symbol_add(tmp);
X	     XtFree($1);
X	}
X     |	ident EQ range_data
X	{
X	     Symbol tmp = symbol_new(_currW, $1, RANGE);
X	     symbol_data(tmp) = $3;
X	     symbol_add(tmp);
X	     XtFree($1);
X	}
X     |	ident EQ string
X	{
X	     Symbol tmp = symbol_new(_currW, $1, STRING);
X	     symbol_aobj(tmp) = new_aobj($3);
X	     symbol_add(tmp);
X	     XtFree($1);
X	}
X     |	ident EQ list
X	{
X	     Symbol tmp = symbol_new(_currW, $1, LIST);
X	     symbol_aobj(tmp) = new_aobj($3);
X	     symbol_add(tmp);
X	     XtFree($1);
X	}
X     |	ident lpar rpar
X	{
X	     symbol_add_function(_currW, $1);
X	     XtFree($1);
X	}
X     |	ident LBRK INT RBRK
X	{
X	     Symbol tmp;
X
X	     tmp = symbol_new(_currW, $1, STRING);
X	     symbol_class(tmp) = ALLOCATED;
X	     symbol_aobj(tmp) = new_aobj(XtMalloc($3));
X	     bzero(aobj_ptr(symbol_aobj(tmp)), $3);
X	     symbol_add(tmp);
X	     XtFree($1);
X	}
X     |	ident EQ error
X	{ YYKOTZ("Missing or invalid initializer for global", 0); }
X     |	ident LBRK error RBRK
X	{ YYKOTZ("Invalid or missing size for global array type", 0); }
X     ;
X
declaration
X     :	function_declaration
X     |	declaration function_declaration
X	{ yyerrok; }
X     |	global_declaration
X     |	declaration global_declaration
X	{ yyerrok; }
X     |	error
X	{ YYKOTZ("Missing or invalid function/global declaration", 0); }
X     |	declaration error
X	{ YYKOTZ("Invalid function/global declaration", 0); }
X     ;
X
function_declaration
X     :	function_start compound_statement
X	{
X	     Function fp = symbol_function($1);
X
X	     /*
X	      * emit an RTS in case there was no return. If there was,
X	      * it will be automatically ignored by do_emit().
X	      */
X	     do_emit(_currW, RTS, FalseDatum);
X	     function_end(fp) = awl_lastpc(_currW);
X	     if (awl_showasm(_currW)) {
X		  fprintf(awl_err(_currW),
X			  "\nCode for %s:\n", symbol_name($1));
X		  disasm(_currW, function_uaddr(fp), function_end(fp));
X	     }
X	     symbol_set_locals(NULL);
X	     CurrentFunc = NULL;
X	}
X     ;
X
function_start
X     :	ident opt_parm_list
X	{
X	     int offset;
X	     Symbol tmp;
X	     Address addr;
X
X	     tmp = $2;
X	     offset = 1;
X	     while(tmp) {
X		  symbol_int(tmp) = -(offset++);
X		  tmp = symbol_next(tmp);
X	     }
X	     symbol_set_locals($2);
X	     addr_pc(addr) = awl_lastpc(_currW);
X	     $$ = symbol_def_function(_currW, $1, FUNC_USER,
X				      offset - 1, addr, TRUE);
X	     CurrentFunc = $$;
X	     XtFree($1);
X	}
X     ;
X
opt_parm_list
X     :	lpar rpar
X	{
X	     $$ = NULL;
X	     yyerrok;
X	}
X     |	lpar parameter_list rpar
X	{
X	     $$ = $2;
X	     yyerrok;
X	}
X     |	error
X	{ YYKOTZ("Missing or invalid parameter list", 0); }
X     ;
X
newparm
X     :	ident
X	{
X	     $$ = symbol_new(_currW, $1, _FP);
X	     XtFree($1);
X	}
X     ;
X
parm
X     :	newparm
X     |	newparm
X	{
X	     datum_symbol(d1) = $1;
X	     do_push(_currW, SYMBOL, d1);
X	}
X	EQ expr
X	{ do_emit(_currW, POP, PopDupNone); }
X     ;
X
parameter_list
X     :	parm
X     |	parm COMMA parameter_list
X	{
X	     symbol_next($1) = $3;
X	     yyerrok;
X	}
X     |	error
X	{ YYKOTZ("Missing or invalid parameter in parameter list", 0); }
X     ;
X
widget_data
X     :	widget_decl
X	{ $$ = FalseDatum; }
X     ;
X
compound_statement
X     :	lbra statements rbra
X     ;
X
statements
X     :	statement
X     |	statements statement
X	{ yyerrok; }
X     |	error
X	{ YYKOTZ("Missing or invalid statement", 0); }
X     |	statements error
X	{ YYKOTZ("Invalid statement", 0); }
X     ;
X
statement
X     :	semi	/* null statement */
X     |	discarding_expr
X     |	compound_statement
X     |	BREAK semi
X	{
X	     if (BreakList) {
X		  datum_symbol(d1) = BreakList;
X		  do_emit(_currW, JUMP, d1);
X	     }
X	     else
X		  YYKOTZ("Break not inside loop or switch.", 0)
X	}
X     |	CONTINUE semi
X	{
X	     if (ContinueList) {
X		  datum_symbol(d1) = ContinueList;
X		  do_emit(_currW, JUMP, d1);
X	     }
X	     else
X		  YYKOTZ("Continue not inside loop.", 0)
X	}
X     |	RETURN semi
X	{ do_emit(_currW, RTS, FalseDatum); }
X     |	RETURN expression semi
X	{ do_emit(_currW, RTS, TrueDatum); }
X     |	ident COL
X	{
X	     Symbol tmp;
X
X	     if ((tmp = symbol_find(_currW, $1)) != NULL) {
X		  if (symbol_class(tmp) != LABEL) /* illegal */
X		       YYKOTZ("Attempt to redefine %s as label.", $1)
X		  else if (symbol_int(tmp) != UNDEF_ADDR)
X		       YYKOTZ("Attempted redefinition of label %s.", $1)
X	     }
X	     else {
X		  tmp = symbol_new(_currW, $1, INT);
X		  symbol_class(tmp) = LABEL;
X	     }
X	     symbol_int(tmp) = awl_lastpc(_currW);
X	     symbol_add(tmp);
X	     debug(_currW, "label '%s' declared", $1, awl_lastpc(_currW));
X	     XtFree($1);
X	}
X     |	GOTO ident semi
X	{
X	     Symbol tmp;
X
X	     if ((tmp = symbol_find(_currW, $2)) != NULL) {
X		  if (symbol_class(tmp) != LABEL)
X		       YYKOTZ("Illegal target for GOTO: %s", $2)
X		  else {
X		       datum_symbol(d1) = tmp;
X		       do_emit(_currW, JUMP, d1);
X		  }
X	     }
X	     else {
X		  tmp = symbol_new(_currW, $2, INT);
X		  symbol_class(tmp) = LABEL;
X		  symbol_type(tmp) = INT;
X		  symbol_int(tmp) = UNDEF_ADDR;
X		  symbol_add(tmp);
X		  datum_symbol(d1) = tmp;
X		  do_emit(_currW, JUMP, d1);
X		  debug(_currW, "GOTO to forward label %s", $2);
X	     }
X	     XtFree($2);
X	}
X     |	LOCAL parameter_list semi
X	{
X	     Symbol tmp = $2;
X
X	     if (!CurrentFunc)
X		  YYKOTZ("LOCAL keyword not in any function", 0)
X	     else {
X		  while (tmp) {
X		       symbol_int(tmp) =
X			    ++function_nlocals(symbol_function(CurrentFunc));
X		       tmp = symbol_next(tmp);
X		  }
X		  symbol_set_locals($2);
X	     }
X	}
X     |	global_declaration
X     |	if_prefix statement
X	{ symbol_int($1) = awl_lastpc(_currW); }
X     |	if_prefix statement else_clause
X	{ symbol_int($1) = awl_lastpc(_currW); }
X     	statement
X	{ symbol_int($3) = awl_lastpc(_currW); }
X     |	while_prefix while_loop statement
X	{
X	     datum_symbol(d1) = $1;
X	     do_emit(_currW, JUMP, d1);
X	     symbol_int($2) = awl_lastpc(_currW);
X	     ContinueList = symbol_next(ContinueList);
X	     BreakList = symbol_next(BreakList);
X	     yyerrok;
X	}
X     |	while_prefix error
X	{ YYKOTZ("Missing or invalid expression for while", 0); }
X     |	do_prefix statement until_loop
X	{
X	     symbol_int($3) = $1;
X	     ContinueList = symbol_next(ContinueList);
X	     BreakList = symbol_next(BreakList);
X	     yyerrok;
X	}
X     |	do_prefix error
X	{ YYKOTZ("Missing or invalid statement for do", 0); }
X     |	FOR lpar f_init f_lb0 f_cond f_lb1 f_itr f_lb2 f_last statement
X	{
X	     /* make the jump to f_lb1 */
X	     datum_symbol(d1) = $6;
X	     do_emit(_currW, JUMP, d1);
X	     /* backpatch the f_cond JUMP */
X	     datum_symbol(awl_text(_currW)[$5]) = $8;
X	     symbol_int($9) = awl_lastpc(_currW);
X	     ContinueList = symbol_next(ContinueList);
X	     BreakList = symbol_next(BreakList);
X	     yyerrok;
X	}
X     |	FOR error
X	{ YYKOTZ("Invalid syntax in for loop", 0); }
X     |	switch_prefix statement
X	{
X	     if (CaseHeaderList) {
X		  symbol_int(CaseHeaderList) = awl_lastpc(_currW);
X		  CaseHeaderList = symbol_next(CaseHeaderList);
X	     }
X	     if (CaseBodyList) {
X		  symbol_int(CaseBodyList) = awl_lastpc(_currW);
X		  CaseBodyList = symbol_next(CaseBodyList);
X	     }
X	     symbol_int(BreakList) = awl_lastpc(_currW);
X	     BreakList = symbol_next(BreakList);
X	     CaseState = NO_SWITCH;
X	     /* Get rid of the last dup'd expression */
X	     do_discard(_currW);
X	     yyerrok;
X	}
X     |	switch_prefix error
X	{ YYKOTZ("Missing body for switch", 0); }
X     |	case_prefix expression COL
X	{
X	     Symbol tmp;
X
X	     /* Check to see if case is true. If not, jump to next case */
X	     do_alu(_currW, EE);
X	     datum_symbol(d1) = CaseHeaderList;
X	     do_emit(_currW, JUMPZ, d1);
X	     if (CaseBodyList) {
X		  symbol_int(CaseBodyList) = awl_lastpc(_currW);
X		  CaseBodyList = symbol_next(CaseBodyList);
X	     }
X	     tmp = do_new_label(_currW, UNDEF_ADDR);
X	     symbol_next(tmp) = CaseBodyList;
X	     CaseBodyList = tmp;
X	     yyerrok;
X	}
X     |	case_prefix error
X	{ YYKOTZ("Invalid syntax for case label", 0); }
X     |	case_prefix error COL
X	{ YYKOTZ("Invalid expression for case label", 0); }
X     |	DEFAULT COL
X	{
X	     Symbol tmp;
X
X	     if (CaseState == NO_SWITCH)
X		  YYKOTZ("default: case not in switch", 0)
X	     else if (CaseState == SEEN_DEFAULT)
X		  YYKOTZ("More than one 'default:' clause in switch", 0)
X	     else {
X		  CaseState = SEEN_DEFAULT;
X		  if (CaseHeaderList) {
X		       symbol_int(CaseHeaderList) = awl_lastpc(_currW);
X		       CaseHeaderList = symbol_next(CaseHeaderList);
X		  }
X		  if (CaseBodyList) {
X		       symbol_int(CaseBodyList) = awl_lastpc(_currW);
X		       CaseBodyList = symbol_next(CaseBodyList);
X		  }
X		  tmp = do_new_label(_currW, UNDEF_ADDR);
X		  symbol_next(tmp) = CaseHeaderList;
X		  CaseHeaderList = tmp;
X		  tmp = do_new_label(_currW, awl_lastpc(_currW));
X		  symbol_next(tmp) = CaseBodyList;
X		  CaseBodyList = tmp;
X	     }
X	}
X     ;
X
if_prefix
X     :	IF lpar expression rpar
X	{
X	     $$ = do_new_label(_currW, UNDEF_ADDR);
X	     datum_symbol(d1) = $$;
X	     do_emit(_currW, JUMPZ, d1);
X	     yyerrok;
X	}
X     |	IF error
X	{ YYKOTZ("Missing or invalid if", 0); }
X     ;
X
else_clause
X     :	ELSE
X	{
X	     $$ = do_new_label(_currW, UNDEF_ADDR);
X	     datum_symbol(d1) = $$;
X	     do_emit(_currW, JUMP, d1);
X	}
X     ;
X
while_prefix
X    :	WHILE
X	{
X	     $$ = do_new_label(_currW, awl_lastpc(_currW));
X	     symbol_next($$) = ContinueList;
X	     ContinueList = $$;
X	}
X     ;
X
while_loop
X     :	lpar expression rpar
X	{
X	     $$ = do_new_label(_currW, UNDEF_ADDR);
X	     datum_symbol(d1) = $$;
X	     do_emit(_currW, JUMPZ, d1);
X	     symbol_next($$) = BreakList;
X	     BreakList = $$;
X	}
X     ;
X
do_prefix
X     :	DO
X	{
X	     Symbol tmp;
X
X	     $$ = awl_lastpc(_currW);
X	     tmp = do_new_label(_currW, $$);
X	     symbol_next(tmp) = ContinueList;
X	     ContinueList = tmp;
X	     tmp = do_new_label(_currW, UNDEF_ADDR);
X	     symbol_next(tmp) = BreakList;
X	     BreakList = tmp;
X	}
X     ;
X
until_loop
X     :	UNTIL lpar expression rpar
X	{
X	     $$ = datum_symbol(d1) = do_new_label(_currW, UNDEF_ADDR);
X	     do_emit(_currW, JUMPZ, d1);
X	     symbol_int(BreakList) = awl_lastpc(_currW);
X	     yyerrok;
X	}
X     |	UNTIL error
X	{ YYKOTZ("Missing or invalid expression for until", 0); }
X     ;
X
f_init
X     :	optional_expression
X     ;
X
f_lb0
X     :	semi
X	{
X	     Symbol tmp;
X
X	     /* create label pointing at f_cond */
X	     tmp = do_new_label(_currW, awl_lastpc(_currW));
X	     symbol_next(tmp) = ContinueList;
X	     ContinueList = tmp;
X	}
X     ;
X
f_cond
X     :	/* nichts */
X	{
X	     do_push(_currW, INT, TrueDatum);
X	     /* point us at the place to patch the jump later */
X	     $$ = awl_lastpc(_currW) + 1;
X	     datum_symbol(d1) = NULL;
X	     do_emit(_currW, JUMP, d1);
X	}
X     |	expression
X	{
X	     /* point us at the place to patch the jump later */
X	     $$ = awl_lastpc(_currW) + 1;
X	     datum_symbol(d1) = NULL;
X	     do_emit(_currW, JUMP, d1);
X	}
X     ;
X
f_lb1
X     :	semi
X	{ $$ = do_new_label(_currW, awl_lastpc(_currW)); }
X     ;
X
f_itr
X     :	optional_expression
X	{
X	     /*
X	      * we know that the ContinueList will be pointing at lb0
X	      * (f_cond) so we just use that rather than backpatching.
X	      */
X	     datum_symbol(d1) = ContinueList;
X	     do_emit(_currW, JUMP, d1);
X	}
X     ;
X
f_lb2
X     :	/* nada */
X	{ $$ = do_new_label(_currW, awl_lastpc(_currW)); }
X     ;
X
f_last
X     :	rpar
X	{
X	     /* create dummy label for jump to end of for */
X	     $$ = do_new_label(_currW, UNDEF_ADDR);
X	     datum_symbol(d1) = $$;
X	     do_emit(_currW, JUMPZ, d1);
X	     symbol_next($$) = BreakList;
X	     BreakList = $$;
X	}
X     ;
X
switch_prefix
X     :	SWITCH lpar expression rpar
X	{
X	     Symbol tmp;
X
X	     tmp = do_new_label(_currW, UNDEF_ADDR);
X	     symbol_next(tmp) = BreakList;
X	     BreakList = tmp;
X	     CaseState = IN_SWITCH;
X	     yyerrok;
X	}
X     |	SWITCH error
X	{ YYKOTZ("Missing or invalid expression for switch", 0); }
X     ;
X
case_prefix
X     :	CASE
X	{
X	     Symbol tmp;
X
X	     if (CaseState == NO_SWITCH)
X		  YYKOTZ("Case not in switch", 0)
X	     else if (CaseState == SEEN_DEFAULT)
X		  yywarn("Case after 'default:' clause will never be reached");
X	     else {
X		  if (CaseBodyList)
X		       do_optional_jump(_currW, CaseBodyList);
X		  if (CaseHeaderList) {
X		       symbol_int(CaseHeaderList) = awl_lastpc(_currW);
X		       CaseHeaderList = symbol_next(CaseHeaderList);
X		  }
X		  tmp = do_new_label(_currW, UNDEF_ADDR);
X		  symbol_next(tmp) = CaseHeaderList;
X		  CaseHeaderList = tmp;
X		  do_emit(_currW, DUP);
X	     }
X	}
X     ;
X
expression
X     :	expr
X     |	expression COMMA expr
X	{ yyerrok; }
X     ;
X
optional_expression
X     :	/* rien */
X     |	expression
X	{ do_discard(_currW); }
X     ;
X
discarding_expr
X     :	expression semi
X	{ do_discard(_currW); }
X     ;
X
l1_expr
X     :	identifier
X     |	funcall
X     |	l1_expr DOT ident
X	{
X	     do_push(_currW, STRING, new_aobj($3));
X	     do_alu(_currW, DOT);
X	}
X     |	l1_expr LBRK expr RBRK
X	{ do_alu(_currW, ASOC); }
X     |	l1_expr DOT error
X	{ YYKOTZ("Missing or invalid member reference", 0); }
X     |	l1_expr LBRK error RBRK
X	{ YYKOTZ("Missing or invalid array reference", 0); }
X     |	l1_expr error
X	{ YYKOTZ("Missing or invalid identifier", 0); }
X     ;
X
dupl1expr
X     :	l1_expr
X	{ do_emit(_currW, DUP); }
X     ;
X
l2_expr
X     :	l1_expr
X     |	l1_expr EQ expr
X	{ do_emit(_currW, POP, PopDupValue); }
X     |	PP dupl1expr
X	{
X	     do_push(_currW, INT, TrueDatum); /* true = convenient 1 */
X	     do_alu(_currW, PLUS);
X	     do_emit(_currW, POP, PopDupValue);
X	}
X     |	MM dupl1expr
X	{
X	     do_push(_currW, INT, TrueDatum);
X	     do_alu(_currW, SUB);
X	     do_emit(_currW, POP, PopDupValue);
X	}
X     |	dupl1expr PP
X	{
X	     do_push(_currW, INT, TrueDatum);
X	     do_alu(_currW, PLUS);
X	     do_emit(_currW, POP, PopDupTarget);
X	}
X     |	dupl1expr MM
X	{
X	     do_push(_currW, INT, TrueDatum);
X	     do_alu(_currW, SUB);
X	     do_emit(_currW, POP, PopDupTarget);
X	}
X     |  dupl1expr PE expr
X	{
X	     do_alu(_currW, PLUS);
X	     do_emit(_currW, POP, PopDupValue);
X	}
X     |  dupl1expr ME expr
X	{
X	     do_alu(_currW, SUB);
X	     do_emit(_currW, POP, PopDupValue);
X	}
X     |  dupl1expr TE expr
X	{
X	     do_alu(_currW, MULT);
X	     do_emit(_currW, POP, PopDupValue);
X	}
X     |  dupl1expr DE expr
X	{
X	     do_alu(_currW, DIV);
X	     do_emit(_currW, POP, PopDupValue);
X	}
X     |  dupl1expr RE expr
X	{
X	     do_alu(_currW, MOD);
X	     do_emit(_currW, POP, PopDupValue);
X	}
X     |  dupl1expr SLE expr
X	{
X	     do_alu(_currW, SL);
X	     do_emit(_currW, POP, PopDupValue);
X	}
X     |  dupl1expr SRE expr
X	{
X	     do_alu(_currW, SR);
X	     do_emit(_currW, POP, PopDupValue);
X	}
X     |  dupl1expr XE expr
X	{
X	     do_alu(_currW, XOR);
X	     do_emit(_currW, POP, PopDupValue);
X	}
X     |  dupl1expr OE expr
X	{
X	     do_alu(_currW, OR);
X	     do_emit(_currW, POP, PopDupValue);
X	}
X     |  dupl1expr AE expr
X	{
X	     do_alu(_currW, AND);
X	     do_emit(_currW, POP, PopDupValue);
X	}
X     |  dupl1expr CE expr
X	{
X	     do_alu(_currW, COMP);
X	     do_emit(_currW, POP, PopDupValue);
X	}
X     ;
X
expr
X     :	l2_expr
X     |	lpar expr rpar
X     |	char_data			{ do_push(_currW, CHAR, $1);	}
X     |	int_data			{ do_push(_currW, INT, $1);	}
X     |  float_data			{ do_push(_currW, FLOAT, $1);	}
X     |  string_data			{ do_push(_currW, STRING, $1);	}
X     |	list_data			{ do_push(_currW, LIST, $1);	}
X     |	range_data			{ do_push(_currW, RANGE, $1);	}
X     |	wclass_data			{ do_push(_currW, WCLASS, $1);	}
X     |	widget_data			{ do_push(_currW, LAYOUT, $1);	}
X     |	expr MBR expr			{ do_alu(_currW, MBR);		}
X     |	expr PLUS expr			{ do_alu(_currW, PLUS);		}
X     |	expr MINUS expr			{ do_alu(_currW, SUB);		}
X     |	expr MULT expr			{ do_alu(_currW, MULT);		}
X     |	expr DIV expr			{ do_alu(_currW, DIV);		}
X     |  expr MOD expr			{ do_alu(_currW, MOD);		}
X     |  expr LT expr			{ do_alu(_currW, LT);		}
X     |	expr GT expr			{ do_alu(_currW, GT);		}
X     |	expr LE expr			{ do_alu(_currW, LE);		}
X     |	expr GE expr			{ do_alu(_currW, GE);		}
X     |	expr EE expr			{ do_alu(_currW, EE);		}
X     |	expr NE expr			{ do_alu(_currW, NE);		}
X     |	expr SL expr			{ do_alu(_currW, SL);		}
X     |	expr SR expr			{ do_alu(_currW, SR);		}
X     |	expr OR expr			{ do_alu(_currW, OR);		}
X     |  expr AND expr			{ do_alu(_currW, AND);		}
X     |	expr XOR expr			{ do_alu(_currW, XOR);		}
X     |	expr LAND expr			{ do_alu(_currW, LAND);		}
X     |	expr LOR expr			{ do_alu(_currW, LOR);		}
X     |	expr QST expr COL expr		{ do_alu(_currW, TRI);		}
X     |	lpar expr rpar expr %prec CAST	{ do_alu(_currW, CAST);		}
X     |	MINUS expr %prec UMINUS		{ do_alu(_currW, MINUS);	}
X     |	AND expr %prec ADDR		{ do_alu(_currW, ADDR);		}
X     |	COPY expr			{ do_alu(_currW, COPY);		}
X     |	NUKE expr			{ do_alu(_currW, NUKE);		}
X     |	COMP expr			{ do_alu(_currW, COMP);		}
X     |	NOT expr 			{ do_alu(_currW, NOT);		}
X     ;
X
identifier
X     :	ident
X	{
X	     Symbol tmp;
X
X	     /*
X	      * Unknown identifiers are created automatically as string syms.
X	      */
X	     if ((tmp = symbol_find(_currW, $1)) == NULL) {
X		  tmp = symbol_new(_currW, $1, STRING);
X		  symbol_aobj(tmp) = new_aobj($1);
X		  symbol_add(tmp);
X	     }
X	     datum_symbol(d1) = tmp;
X	     do_push(_currW, SYMBOL, d1);
X	}
X     ;
X
funcall
X     :	ident params
X	{
X	     Symbol tmp;
X
X	     if ((tmp = symbol_find(_currW, $1)) == NULL) 
X		  tmp = symbol_add_function(_currW, $1); /* forward ref */
X	     datum_symbol(d1) = tmp;
X	     do_emit(_currW, CALL, d1);
X	     XtFree($1);
X	}
X     ;
X
params
X     :	s_parm e_parm
X     |	s_parm expression e_parm
X     ;
X
s_parm
X     :	lpar
X	{ do_emit(_currW, LINK); }
X     ;
X
e_parm
X     :	rpar
X     ;
X
widget_decl
X     :	widget_open widget_body
X	{ do_emit(_currW, CLOS); }
X     ;
X
widget_body
X     :	lbra widget_line rbra
X     |	semi
X     ;
X
widget_open
X     :	widget_type widget_name
X	{ do_emit(_currW, OPEN); }
X     ;
X
widget_type
X     :	wclass_data
X	{ do_push(_currW, WCLASS, $1); }
X     |	l1_expr
X     ;
X
widget_name
X     :	string_data
X	{ do_push(_currW, STRING, $1); }
X     |	l1_expr
X     ;
X
widget_line
X     :	resource
X     |	widget_line resource
X     |	widget_decl
X     |	widget_line widget_decl
X     |	work_proc
X     |	widget_line work_proc
X     ;
X
resource
X     :	string_data expr semi
X	{
X	     do_push(_currW, STRING, $1);
X	     do_emit(_currW, ARES);
X	}
X     ;
X
work_proc
X     :	funcall semi
X	{ do_discard(_currW); }
X     ;
X
wclass_data
X     :	WIDGET_TYPE
X	{ datum_wclass($$) = $1; }
X     ;
X
char_data
X     :	CHAR
X	{ datum_char($$) = $1; }
X     ;
X
int_data
X     :	INT
X	{ datum_int($$) = $1; }
X     ;
X
float_data
X     :	FLOAT
X	{ datum_float($$) = $1; }
X     ;
X
string_data
X     :	string
X	{ datum_aobj($$) = new_aobj($1); }
X     ;
X
list_data
X     :	list
X	{ datum_aobj($$) = new_aobj($1); }
X     ;
X
range_data
X     :	numeric RANGE numeric
X	{
X	     range_min(datum_range($$)) = (short)$1;
X	     range_max(datum_range($$)) = (short)$3;
X	}
X     ;
X
numeric
X     :	INT
X     |	CHAR
X	{ $$ = (int)$1; }
X     |	FLOAT
X	{ $$ = (int)$1; }
X     ;
X
string
X     :	STRING
X     |	STRING MULT INT
X	{
X	     $$ = string_multiply($1, $3);
X	     debug(_currW, "parse: string * freeing %s", $1);
X	     XtFree($1);
X	     yyerrok;
X	}
X     ;
X
ident
X     :	IDENTIFIER
X     ;
X
list
X     :	list_start list_elements list_end
X	{ $$ = ListKludge; }
X     ;
X
list_start
X     :	lbra
X	{
X	     ListKludgeMax = 5;
X	     ListKludgeSize = 0;
X	     ListKludge = (String *)XtMalloc(sizeof(String *) * 6);
X	}
X     ;
X
list_elements
X     :	string
X	{
X	     if (ListKludgeSize == ListKludgeMax) {
X		  ListKludgeMax += 5;
X		  ListKludge =(String *)XtRealloc(ListKludge, sizeof(String *)
X						  * (ListKludgeMax + 1));
X	     }
X	     ListKludge[ListKludgeSize++] = $1;
X	}
X     |	list_elements COMMA string
X	{
X	     if (ListKludgeSize == ListKludgeMax) {
X		  ListKludgeMax += 5;
X		  ListKludge =(String *)XtRealloc(ListKludge, sizeof(String *)
X						  * (ListKludgeMax + 1));
X	     }
X	     ListKludge[ListKludgeSize++] = $3;
X	}
X     ;
X
list_end
X     :	rbra
X	{ ListKludge[ListKludgeSize] = NULL; }
X     ;
X
lpar
X     :	'('
X     ;
X
rpar
X     :	')'
X	{ yyerrok; }
X     ;
X
lbra
X     :	'{'
X     ;
X
rbra
X     :	'}'
X	{ yyerrok; }
X     ;
X
semi
X     :	';'
X     ;
X
X%%
X
X/* Additional C support routines. */
X
X/* The to-be-expected error routine */
XExport int yyerror(s, n)
String s;
Generic n;
X{
X     Local int err_cnt = 0;
X     char msg1[255], msg2[512];
X
X     if (err_cnt++ > 5) {
X	  sprintf(msg1, "%s:%d: Too many errors, aborting..\n",
X		  yy_file, yy_line);
X	  XtError(msg1);
X	  err_cnt = 0;
X	  return 1;
X     }
X     sprintf(msg1, s, n);
X     if (yy_file)
X	  sprintf(msg2, "%s:%d: %s\n", yy_file,
X		  yy_line ? yy_line - 1 : 0, msg1);
X     else
X	  sprintf(msg2, "<stdin>:%d: %s\n",
X		  yy_line ? yy_line - 1 : 0, msg1);
X     XtError(msg2);
X     return 0;
X}
X
X/* Like yyerror, but only a warning */
XExport void yywarn(s, n)
String s;
Generic n;
X{
X     char msg1[255], msg2[512];
X
X     if (!awl_nowarn(_currW)) {
X	  sprintf(msg1, s, n);
X	  if (yy_file)
X	       sprintf(msg2, "%s:%d: %s\n", yy_file,
X		       yy_line ? yy_line - 1 : 0, msg1);
X	  else
X	       sprintf(msg2, "<stdin>:%d: %s\n", 
X		       yy_line ? yy_line - 1 : 0, msg1);
X	  XtWarning(msg2);
X     }
X}
END_OF_FILE
if test 26311 -ne `wc -c <'awl.y'`; then
    echo shar: \"'awl.y'\" unpacked with wrong size!
fi
# end of 'awl.y'
fi
if test -f 'etc/xw.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'etc/xw.h'\"
else
echo shar: Extracting \"'etc/xw.h'\" \(17768 characters\)
sed "s/^X//" >'etc/xw.h' <<'END_OF_FILE'
X#define BS 0
X#define CR 0
X#define DEFAULT_HEIGHT 300
X#define DEFAULT_WIDTH 300
X#define DEL 0
X#define INFINITE_WIDTH 32767
X#define LF 0
X#define MAXCUT 30000
X#define MIN_SLIDER_SIZE 4
X#define RequiredCursorMargin 3
X#define SP 0
X#define TAB 0
X#define XtCAlignment "Alignment"
X#define XtCAllowCascades "AllowCascades"
X#define XtCArrowDirection "ArrowDirection"
X#define XtCAssociateChildren "AssociateChildren"
X#define XtCAttachTo "AttachTo"
X#define XtCBackgroundTile "BackgroundTile"
X#define XtCBorderPad "BorderPad"
X#define XtCBottomShadowTile "BottomShadowTile"
X#define XtCCascadeImage "CascadeImage"
X#define XtCCascadeOn "CascadeOn"
X#define XtCCausesResize "CausesResize"
X#define XtCColumnPosition "ColumnPosition"
X#define XtCColumnWidth "ColumnWidth"
X#define XtCColumns "Columns"
X#define XtCDestroyMode "DestroyMode"
X#define XtCDisplayTitle "DisplayTitle"
X#define XtCElementHeight "ElementHeight"
X#define XtCElementHighlight "ElementHighlight"
X#define XtCEraseOn "EraseOn"
X#define XtCForceHorizontalSB "ForceHorizontalSB"
X#define XtCForceSize "ForceSize"
X#define XtCForceVerticalSB "ForceVerticalSB"
X#define XtCGranularity "Granularity"
X#define XtCGravity "Gravity"
X#define XtCGridThickness "GridThickness"
X#define XtCGrow "Grow"
X#define XtCHScrollBarHeight "HScrollBarHeight"
X#define XtCHScrollBarWidth "HScrollBarWidth"
X#define XtCHSliderExtent "HSliderExtent"
X#define XtCHSliderMax "HSliderMax"
X#define XtCHSliderMin "HSliderMin"
X#define XtCHSliderOrigin "HSliderOrigin"
X#define XtCHighlightStyle "HighlightStyle"
X#define XtCHighlightThickness "HighlightThickness"
X#define XtCHighlightTile "HighlightTile"
X#define XtCHsbHeight "HsbHeight"
X#define XtCHsbWidth "HsbWidth"
X#define XtCHsbX "HsbX"
X#define XtCHsbY "HsbY"
X#define XtCImage "Image"
X#define XtCInitialDelay "InitialDelay"
X#define XtCInitialX "InitialX"
X#define XtCInitialY "InitialY"
X#define XtCInvertOnEnter "InvertOnEnter"
X#define XtCInvertOnSelect "InvertOnSelect"
X#define XtCKbdAccelerator "KbdAccelerator"
X#define XtCKbdSelect "KbdSelect"
X#define XtCLPadding "LPadding"
X#define XtCLabelImage "LabelImage"
X#define XtCLabelLocation "LabelLocation"
X#define XtCLabelType "LabelType"
X#define XtCLayout "Layout"
X#define XtCLayoutType "LayoutType"
X#define XtCLineSpace "LineSpace"
X#define XtCMarkImage "MarkImage"
X#define XtCMax "Max"
X#define XtCMaximumSize "MaximumSize"
X#define XtCMenuMgrId "MenuMgrId"
X#define XtCMenuPost "MenuPost"
X#define XtCMenuSelect "MenuSelect"
X#define XtCMenuUnpost "MenuUnpost"
X#define XtCMgrOverrideMnemonic "MgrOverrideMnemonic"
X#define XtCMin "Min"
X#define XtCMnemonic "Mnemonic"
X#define XtCMode "Mode"
X#define XtCNumColumns "NumColumns"
X#define XtCNumSelectedElements "NumSelectedElements"
X#define XtCPadding "Padding"
X#define XtCPixelScale "PixelScale"
X#define XtCPostAccelerator "PostAccelerator"
X#define XtCPrecedence "Precedence"
X#define XtCPulldownBarId "PulldownBarId"
X#define XtCRPadding "RPadding"
X#define XtCRecomputeSize "RecomputeSize"
X#define XtCRepeatRate "RepeatRate"
X#define XtCRowPosition "RowPosition"
X#define XtCSRimage "RasterImage"
X#define XtCSashIndent "SashIndent"
X#define XtCScroll "Scroll"
X#define XtCSelectedElements "SelectedElements"
X#define XtCSelectionBias "SelectionBias"
X#define XtCSelectionMethod "SelectionMethod"
X#define XtCSelectionStyle "SelectionStyle"
X#define XtCSensitiveTile "SensitiveTile"
X#define XtCSeparatorType "SeparatorType"
X#define XtCSet "Set"
X#define XtCSetMark "SetMark"
X#define XtCShowSelected "ShowSelected"
X#define XtCSingleRow "SingleRow"
X#define XtCSlideAreaTile "SlideAreaTile"
X#define XtCSlideMoveType "SlideMoveType"
X#define XtCSlideOrientation "SlideOrientation"
X#define XtCSliderExtent "SliderExtent"
X#define XtCSliderMax "SliderMax"
X#define XtCSliderMin "SliderMin"
X#define XtCSliderOrigin "SliderOrigin"
X#define XtCSliderTile "SliderTile"
X#define XtCSourceType "SourceType"
X#define XtCSquare "Square"
X#define XtCStickyMenus "StickyMenus"
X#define XtCStrip "Strip"
X#define XtCTitleBorderWidth "TitleBorderWidth"
X#define XtCTitleHSpace "TitleHSpace"
X#define XtCTitleImage "TitleImage"
X#define XtCTitleLPadding "TitleLPadding"
X#define XtCTitleOverride "TitleOverride"
X#define XtCTitlePosition "TitlePosition"
X#define XtCTitlePrecedence "TitlePrecedence"
X#define XtCTitleRPadding "TitleRPadding"
X#define XtCTitleRegion "TitleRegion"
X#define XtCTitleShowing "TitleShowing"
X#define XtCTitleString "TitleString"
X#define XtCTitleToMenuPad "TitleToMenuPad"
X#define XtCTitleTranslations "TitleTranslations"
X#define XtCTitleType "TitleType"
X#define XtCTitleVSpace "TitleVSpace"
X#define XtCToggle "Toggle"
X#define XtCTopLevel "TopLevel"
X#define XtCTopShadowTile "TopShadowTile"
X#define XtCTraversalOn "TraversalOn"
X#define XtCTraversalType "TraversalType"
X#define XtCUnderlineOverride "UnderlineOverride"
X#define XtCUnderlinePosition "UnderlinePosition"
X#define XtCUnderlineTitle "UnderlineTitle"
X#define XtCVScrollBarHeight "VScrollBarHeight"
X#define XtCVScrollBarWidth "VScrollBarWidth"
X#define XtCVSliderExtent "VSliderExtent"
X#define XtCVSliderMax "VSliderMax"
X#define XtCVSliderMin "VSliderMin"
X#define XtCVSliderOrigin "VSliderOrigin"
X#define XtCVsbHeight "VsbHeight"
X#define XtCVsbWidth "VsbWidth"
X#define XtCVsbX "VsbX"
X#define XtCVsbY "VsbY"
X#define XtCWidgetType "WidgetType"
X#define XtCWorkSpaceToSiblingPad "WorkSpaceToSiblingPad"
X#define XtCWrap "Wrap"
X#define XtCWrapBreak "WrapBreak"
X#define XtCWrapForm "WrapForm"
X#define XtCXAddWidth "XAddWidth"
X#define XtCXAttachOffset "XAttachOffset"
X#define XtCXAttachRight "XAttachRight"
X#define XtCXOffset "XOffset"
X#define XtCXRefName "XRefName"
X#define XtCXRefWidget "XRefWidget"
X#define XtCXResizable "XResizable"
X#define XtCXVaryOffset "XVaryOffset"
X#define XtCYAddHeight "YAddHeight"
X#define XtCYAttachBottom "YAttachBottom"
X#define XtCYAttachOffset "YAttachOffset"
X#define XtCYOffset "YOffset"
X#define XtCYRefName "YRefName"
X#define XtCYRefWidget "YRefWidget"
X#define XtCYResizable "YResizable"
X#define XtCYVaryOffset "YVaryOffset"
X#define XtNalignment "alignment"
X#define XtNallowCascades "allowCascades"
X#define XtNallowResize "allowResize"
X#define XtNareaSelected "areaSelected"
X#define XtNarrowDirection "arrowDirection"
X#define XtNassociateChildren "associateChildren"
X#define XtNattachTo "attachTo"
X#define XtNbackgroundTile "backgroundTile"
X#define XtNborderFrame "borderFrame"
X#define XtNborderPad "borderPad"
X#define XtNbottomMargin "bottomMargin"
X#define XtNbottomShadowColor "bottomShadowColor"
X#define XtNbottomShadowTile "bottomShadowTile"
X#define XtNcascadeImage "cascadeImage"
X#define XtNcascadeOn "cascadeOn"
X#define XtNcascadeSelect "cascadeSelect"
X#define XtNcascadeUnselect "cascadeUnselect"
X#define XtNcausesResize "causesResize"
X#define XtNcolumnPosition "columnPosition"
X#define XtNcolumnWidth "columnWidth"
X#define XtNcolumns "columns"
X#define XtNcursor "cursor"
X#define XtNdestroyMode "destroyMode"
X#define XtNdiskSrc "disksrc"
X#define XtNdisplayPosition "displayPosition"
X#define XtNdisplayTitle "displayTitle"
X#define XtNdrawColor "drawColor"
X#define XtNeditType "editType"
X#define XtNelementHeight "elementHeight"
X#define XtNelementHighlight "elementHighlight"
X#define XtNenter "enter"
X#define XtNeraseColor "eraseColor"
X#define XtNeraseOn "eraseOn"
X#define XtNexecute "execute"
X#define XtNexpose "expose"
X#define XtNfile "file"
X#define XtNfont "font"
X#define XtNfontColor "fontColor"
X#define XtNforceHorizontalSB "forceHorizontalSB"
X#define XtNforceSize "forceSize"
X#define XtNforceVerticalSB "forceVerticalSB"
X#define XtNframed "framed"
X#define XtNgranularity "granularity"
X#define XtNgravity "gravity"
X#define XtNgridThickness "gridThickness"
X#define XtNgrow "grow"
X#define XtNhScrollBarHeight "hScrollBarHeight"
X#define XtNhScrollBarWidth "hScrollBarWidth"
X#define XtNhScrollEvent "hScrollEvent"
X#define XtNhSliderExtent "hSliderExtent"
X#define XtNhSliderMax "hSliderMax"
X#define XtNhSliderMin "hSliderMin"
X#define XtNhSliderOrigin "hSliderOrigin"
X#define XtNhighlightColor "highlightColor"
X#define XtNhighlightStyle "highlightStyle"
X#define XtNhighlightThickness "highlightThickness"
X#define XtNhighlightTile "highlightTile"
X#define XtNhsbHeight "hsbHeight"
X#define XtNhsbWidth "hsbWidth"
X#define XtNhsbX "hsbX"
X#define XtNhsbY "hsbY"
X#define XtNimage "image"
X#define XtNinitialDelay "initialDelay"
X#define XtNinitialX "initialX"
X#define XtNinitialY "initialY"
X#define XtNinsertPosition "insertPosition"
X#define XtNinvertOnEnter "invertOnEnter"
X#define XtNinvertOnSelect "invertOnSelect"
X#define XtNkbdAccelerator "kbdAccelerator"
X#define XtNkbdSelect "kbdSelect"
X#define XtNkeyDown "keyDown"
X#define XtNlPadding "lPadding"
X#define XtNlabelImage "labelImage"
X#define XtNlabelLocation "labelLocation"
X#define XtNlabelType "labelType"
X#define XtNlayout "layout"
X#define XtNlayoutType "layoutType"
X#define XtNleave "leave"
X#define XtNleaveVerification "leaveVerification"
X#define XtNleftMargin "leftMargin"
X#define XtNlength "length"
X#define XtNlineSpace "lineSpace"
X#define XtNmarkImage "markImage"
X#define XtNmax "max"
X#define XtNmaximumSize "maximumSize"
X#define XtNmenuMgrId "menuMgrId"
X#define XtNmenuPost "menuPost"
X#define XtNmenuSelect "menuSelect"
X#define XtNmenuUnpost "menuUnpost"
X#define XtNmgrOverrideMnemonic "mgrOverrideMnemonic"
X#define XtNmgrTitleOverride "mgrTitleOverride"
X#define XtNmgrUnderlineOverride "mgrUnderlineOverride"
X#define XtNmin "min"
X#define XtNmnemonic "mnemonic"
X#define XtNmode "mode"
X#define XtNmodifyVerification "modifyVerification"
X#define XtNmotionVerification "motionVerification"
X#define XtNnextTop "nextTop"
X#define XtNnumColumns "numColumns"
X#define XtNnumSelectedElements "numSelectedElements"
X#define XtNpadding "padding"
X#define XtNpixelScale "pixelScale"
X#define XtNposition "position"
X#define XtNpostAccelerator "postAccelerator"
X#define XtNprecedence "precedence"
X#define XtNpulldownBarId "pulldownBarId"
X#define XtNrPadding "rPadding"
X#define XtNrecomputeSize "recomputeSize"
X#define XtNrefigureMode "refigureMode"
X#define XtNregion "region"
X#define XtNrelease "release"
X#define XtNrepeatRate "repeatRate"
X#define XtNresize "resize"
X#define XtNrightMargin "rightMargin"
X#define XtNrowPosition "rowPosition"
X#define XtNsRimage "rasterImage"
X#define XtNsashIndent "sashIndent"
X#define XtNscroll "scroll"
X#define XtNscrollbarOrientation "scrollbarOrientation"
X#define XtNselect "select"
X#define XtNselectColor "selectColor"
X#define XtNselectedElements "selectedElements"
X#define XtNselection "selection"
X#define XtNselectionArray "selectionArray"
X#define XtNselectionBias "selectionBias"
X#define XtNselectionColor "selectionColor"
X#define XtNselectionMethod "selectionMethod"
X#define XtNselectionStyle "selectionStyle"
X#define XtNsensitiveTile "sensitiveTile"
X#define XtNseparatorType "separatorType"
X#define XtNset "set"
X#define XtNsetMark "setMark"
X#define XtNshowSelected "showSelected"
X#define XtNsingleRow "singleRow"
X#define XtNskipAdjust "skipAdjust"
X#define XtNslideAreaTile "slideAreaTile"
X#define XtNslideMoveType "slideMoveType"
X#define XtNslideOrientation "slideOrientation"
X#define XtNsliderColor "sliderColor"
X#define XtNsliderExtent "sliderExtent"
X#define XtNsliderMax "sliderMax"
X#define XtNsliderMin "sliderMin"
X#define XtNsliderMoved "sliderMoved"
X#define XtNsliderOrigin "sliderOrigin"
X#define XtNsliderReleased "sliderReleased"
X#define XtNsliderTile "sliderTile"
X#define XtNsourceType "sourceType"
X#define XtNsquare "square"
X#define XtNstickyMenus "stickyMenus"
X#define XtNstring "string"
X#define XtNstringSrc "stringsrc"
X#define XtNstrip "strip"
X#define XtNtextSource "textSource"
X#define XtNtitleBackground "titleBackground"
X#define XtNtitleBorderWidth "titleBorderWidth"
X#define XtNtitleForeground "titleForeground"
X#define XtNtitleHSpace "titleHSpace"
X#define XtNtitleImage "titleImage"
X#define XtNtitleLPadding "titleLPadding"
X#define XtNtitleNextTop "titleNextTop"
X#define XtNtitlePosition "titlePosition"
X#define XtNtitlePrecedence "titlePrecedence"
X#define XtNtitleRPadding "titleRPadding"
X#define XtNtitleRegion "titleRegion"
X#define XtNtitleRelease "titleRelease"
X#define XtNtitleSelect "titleSelect"
X#define XtNtitleShowing "titleShowing"
X#define XtNtitleString "titleString"
X#define XtNtitleToMenuPad "titleToMenuPad"
X#define XtNtitleTranslations "titleTranslations"
X#define XtNtitleType "titleType"
X#define XtNtitleVSpace "titleVSpace"
X#define XtNtitlebarTile "titlebarTile"
X#define XtNtoggle "toggle"
X#define XtNtopLevel "topLevel"
X#define XtNtopMargin "topMargin"
X#define XtNtopShadowColor "topShadowColor"
X#define XtNtopShadowTile "topShadowTile"
X#define XtNtraversalOn "traversalOn"
X#define XtNtraversalType "traversalType"
X#define XtNunderlinePosition "underlinePosition"
X#define XtNunderlineTitle "underlineTitle"
X#define XtNvScrollBarHeight "vScrollBarHeight"
X#define XtNvScrollBarWidth "vScrollBarWidth"
X#define XtNvScrollEvent "vScrollEvent"
X#define XtNvSliderExtent "vSliderExtent"
X#define XtNvSliderMax "vSliderMax"
X#define XtNvSliderMin "vSliderMin"
X#define XtNvSliderOrigin "vSliderOrigin"
X#define XtNvsbHeight "vsbHeight"
X#define XtNvsbWidth "vsbWidth"
X#define XtNvsbX "vsbX"
X#define XtNvsbY "vsbY"
X#define XtNwidgetType "widgetType"
X#define XtNworkSpaceToSiblingPad "workSpaceToSiblingPad"
X#define XtNwrap "wrap"
X#define XtNwrapBreak "wrapBreak"
X#define XtNwrapForm "wrapForm"
X#define XtNxAddWidth "xAddWidth"
X#define XtNxAttachOffset "xAttachOffset"
X#define XtNxAttachRight "xAttachRight"
X#define XtNxOffset "xOffset"
X#define XtNxRefName "xRefName"
X#define XtNxRefWidget "xRefWidget"
X#define XtNxResizable "xResizable"
X#define XtNxVaryOffset "xVaryOffset"
X#define XtNyAddHeight "yAddHeight"
X#define XtNyAttachBottom "yAttachBottom"
X#define XtNyAttachOffset "yAttachOffset"
X#define XtNyOffset "yOffset"
X#define XtNyRefName "yRefName"
X#define XtNyRefWidget "yRefWidget"
X#define XtNyResizable "yResizable"
X#define XtNyVaryOffset "yVaryOffset"
X#define XtRAlignment "Alignment"
X#define XtRArrowDirection "arrowDirection"
X#define XtRDestroyMode "DestroyMode"
X#define XtRElementHighlight "ElementHighlight"
X#define XtRGravity "Gravity"
X#define XtRHighlightStyle "HighlightStyle"
X#define XtRLabelLocation "LabelLocation"
X#define XtRLabelType "LabelType"
X#define XtRLayout "Layout"
X#define XtRLayoutType "LayoutType"
X#define XtRRCMode "Mode"
X#define XtRSelectionBias "SelectionBias"
X#define XtRSelectionMethod "SelectionMethod"
X#define XtRSelectionStyle "SelectionStyle"
X#define XtRSeparatorType "SeparatorType"
X#define XtRSlideMoveType "slideMoveType"
X#define XtRSlideOrientation "slideOrientation"
X#define XtRSourceType "SourceType"
X#define XtRTilePix "TilePix"
X#define XtRTileType "tileType"
X#define XtRTitlePositionType "TitlePositionType"
X#define XtRTitleType "TitleType"
X#define XtRTranslationTable "TranslationTable"
X#define XtRTraversalType "TraversalType"
X#define XtRWidgetType "WidgetType"
X#define XtRWrap "Wrap"
X#define Xw25_FOREGROUND 2
X#define Xw50_FOREGROUND 3
X#define Xw75_FOREGROUND 4
X#define XwALIGN_CENTER 2
X#define XwALIGN_LEFT 1
X#define XwALIGN_NONE 0
X#define XwALIGN_RIGHT 3
X#define XwARROW_DOWN 1
X#define XwARROW_LEFT 2
X#define XwARROW_RIGHT 3
X#define XwARROW_UP 0
X#define XwAutoScrollBoth 3
X#define XwAutoScrollHorizontal 1
X#define XwAutoScrollOff 0
X#define XwAutoScrollVertical 2
X#define XwBACKGROUND 1
X#define XwBLOCK 10
X#define XwBORDER 0
X#define XwBOTTOM 0
X#define XwCASCADEWIDTH 16
X#define XwCENTER 2
X#define XwCOL_BIAS 2
X#define XwDOUBLE_DASHED_LINE 4
X#define XwDOUBLE_LINE 2
X#define XwDisplayForm 1
X#define XwEdiskSrc "disksrc"
X#define XwEstringSrc "stringsrc"
X#define XwFOREGROUND 0
X#define XwGrowBoth 3
X#define XwGrowHorizontal 1
X#define XwGrowOff 0
X#define XwGrowVertical 2
X#define XwHIGHLIGHT_ENTER 1
X#define XwHIGHLIGHT_OFF 0
X#define XwHIGHLIGHT_TRAVERSAL 2
X#define XwHORIZONTAL 0
X#define XwHORIZONTAL_TILE 6
X#define XwHardWrap 2
X#define XwIGNORE 0
X#define XwIMAGE 1
X#define XwINSTANT 0
X#define XwINVERT 1
X#define XwLEFT 1
X#define XwMANAGER 1
X#define XwMARKWIDTH 16
X#define XwMAXIMIZE 2
X#define XwMAXIMUM_COLUMNS 1
X#define XwMAXIMUM_UNALIGNED 2
X#define XwMENUBTNPAD 6
X#define XwMINIMIZE 1
X#define XwMULTIPLE 1
X#define XwNO_BIAS 0
X#define XwNO_LINE 0
X#define XwNO_SHRINK 0
X#define XwN_OF_MANY 0
X#define XwONE_OF_MANY 1
X#define XwPATTERN 1
X#define XwPATTERN_BORDER 1
X#define XwPRIMITIVE 2
X#define XwPULLDOWN 1
X#define XwREQUESTED_COLUMNS 0
X#define XwRIGHT 0
X#define XwROW_BIAS 1
X#define XwSHRINK_ALL 2
X#define XwSHRINK_COLUMN 1
X#define XwSINGLE 0
X#define XwSINGLE_DASHED_LINE 3
X#define XwSINGLE_LINE 1
X#define XwSLANT_LEFT 8
X#define XwSLANT_RIGHT 7
X#define XwSOLID 0
X#define XwSTICKY 1
X#define XwSTRING 0
X#define XwSWINDOW 3
X#define XwSoftWrap 1
X#define XwSourceForm 0
X#define XwTB_CHUNK 30
X#define XwTITLE 2
X#define XwTOP 0
X#define XwTRANSPARENT 2
X#define XwTRAVERSE_CURRENT 0
X#define XwTRAVERSE_DOWN 4
X#define XwTRAVERSE_HOME 7
X#define XwTRAVERSE_LEFT 1
X#define XwTRAVERSE_NEXT 5
X#define XwTRAVERSE_NEXT_TOP 8
X#define XwTRAVERSE_PREV 6
X#define XwTRAVERSE_RIGHT 2
X#define XwTRAVERSE_UP 3
X#define XwUNKNOWN 0
X#define XwVERTICAL 1
X#define XwVERTICAL_TILE 5
X#define XwWIDGET_DEFINED 2
X#define XwWORK_SPACE 3
X#define XwWrapAny 0
X#define XwWrapOff 0
X#define XwWrapWhiteSpace 1
X#define XwactionAdjust 1
X#define XwactionEnd 2
X#define XwactionStart 0
X#define XwdiskSrc 1
X#define XweditDone 0
X#define XweditError 1
X#define XweditPosError 2
X#define XweditReject 3
X#define XwisOff 1
X#define XwisOn 0
X#define XwprogDefinedSrc 2
X#define XwsdLeft 0
X#define XwsdRight 1
X#define XwselectAll 6
X#define XwselectChar 2
X#define XwselectLine 4
X#define XwselectNull 0
X#define XwselectParagraph 5
X#define XwselectPosition 1
X#define XwselectWord 3
X#define XwsmTextExtend 1
X#define XwsmTextSelect 0
X#define XwstEOL 2
X#define XwstLast 3
X#define XwstPositions 0
X#define XwstWhiteSpace 1
X#define XwstringSrc 0
X#define XwtextAppend 1
X#define XwtextEdit 2
X#define XwtextRead 0
X#define leaveVerify 2
X#define modVerify 1
X#define motionVerify 0
END_OF_FILE
if test 17768 -ne `wc -c <'etc/xw.h'`; then
    echo shar: \"'etc/xw.h'\" unpacked with wrong size!
fi
# end of 'etc/xw.h'
fi
echo shar: End of archive 8 \(of 17\).
cp /dev/null ark8isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 17 archives.
    rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0

dan
----------------------------------------------------
O'Reilly && Associates   argv@sun.com / argv@ora.com
Opinions expressed reflect those of the author only.