v01i047: twm: Tom's Window Manager, Part02/07

Mike Wexler mikew at wyse.wyse.com
Fri Sep 23 09:25:24 AEST 1988


Submitted-by: toml%hpfctel at sde.hp.com (Tom LaStrange)
Posting-number: Volume 1, Issue 47
Archive-name: twm/part02

#! /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 2 (of 7)."
# Contents:  Makefile gc.c lex.l list.c menus.h parse.c twm.h
#   xterm.icon
# Wrapped by mikew at wyse on Thu Sep 22 16:21:22 1988
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'Makefile' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'Makefile'\"
else
echo shar: Extracting \"'Makefile'\" \(4738 characters\)
sed "s/^X//" >'Makefile' <<'END_OF_FILE'
X#
X# Warning: the cpp used on this machine replaces
X# all newlines and multiple tabs/spaces in a macro
X# expansion with a single space.  Imake tries to
X# compensate for this, but is not always
X# successful.
X#
X
X#
X# This makefile is automatically generated by imake... do not modify
X# or you may lose your changes when imake generates makefiles again.
X# Ignore this message if you are not using imake.
X#
X
X            TOP = /usr/new/src/x/x11.2
X             AS = as
X             CC = cc
X            CPP = /lib/cpp
X             LD = ld
X           LINT = lint
X        INSTALL = install
X           TAGS = ctags
X             RM = rm -f
X             MV = mv
X             LN = ln -s
X         RANLIB = ranlib
X             AR = ar clq
X             LS = ls
X       LINTOPTS = -axz
X    LINTLIBFLAG = -C
X           MAKE = make
X    STD_DEFINES =
X    CDEBUGFLAGS = -O4
X        DESTDIR = /usr/new
X
X        PATHSEP = /
X         DEPEND = $(DEPENDSRC)/makedepend
X          IMAKE = $(IMAKESRC)/imake
X            RGB = $(RGBSRC)/rgb
X         CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES) $(DEFINES)
X      LINTFLAGS = $(LINTOPTS) $(INCLUDES) $(STD_DEFINES) $(DEFINES) -DLINT
X        LDFLAGS = $(CDEBUGFLAGS) $(SYS_LIBRARIES) $(SYSAUX_LIBRARIES)
X   INSTUIDFLAGS = -m 4755
X   INSTLIBFLAGS = -m 0664
X   INSTINCFLAGS = -m 0444
X   INSTMANFLAGS = -m 0444
X   INSTAPPFLAGS = -m 0444
X
X      USRLIBDIR = $(DESTDIR)/usr/lib
X         BINDIR = $(DESTDIR)/usr/bin/X11
X         LIBDIR = $(USRLIBDIR)/X11
X     LINTLIBDIR = $(USRLIBDIR)/lint
X         INCDIR = $(DESTDIR)/usr/include/X11
X        FONTDIR = $(LIBDIR)/fonts
X         UWMDIR = $(LIBDIR)/uwm
X         AWMDIR = $(LIBDIR)/awm
X         MANDIR = $(DESTDIR)/usr/man/mann
X    XAPPLOADDIR = $(LIBDIR)/app-defaults
X         ADMDIR = $(DESTDIR)/usr/adm
X
X      CLIENTSRC = $(TOP)/clients
X        DEMOSRC = $(TOP)/demos
X         LIBSRC = $(TOP)/lib
X        FONTSRC = $(TOP)/fonts
X     INCLUDESRC = $(TOP)/X11
X      SERVERSRC = $(TOP)/server
X        UTILSRC = $(TOP)/util
X     EXAMPLESRC = $(TOP)/examples
X     CONTRIBSRC = $(TOP)/contrib
X         DOCSRC = $(TOP)/doc
X      DEPENDSRC = $(UTILSRC)/makedepend
X       IMAKESRC = $(UTILSRC)/imake
X       IRULESRC = $(UTILSRC)/imake.includes
X         RGBSRC = $(UTILSRC)/rgb
X        XLIBSRC = $(LIBSRC)/X
X     TOOLKITSRC = $(LIBSRC)/Xt
X     AWIDGETSRC = $(LIBSRC)/Xaw
X     OLDXLIBSRC = $(LIBSRC)/oldX
X   EXTENSIONSRC = $(TOP)/extensions
X        XMANSRC = $(DOCSRC)/Xlib/Xman
X   EXTENSIONLIB = $(EXTENSIONSRC)/lib/libXext.a
X           XLIB = $(USRLIBDIR)/libX11.a
X        OLDXLIB = $(USRLIBDIR)/liboldX.a
X       XTOOLLIB = $(USRLIBDIR)/libXt.a
X         XAWLIB = $(USRLIBDIR)/libXaw.a
X       LINTXLIB = $(XLIBSRC)/llib-lX11.ln
X      LINTXTOOL = $(TOOLKITSRC)/llib-lXt.ln
X        LINTXAW = $(AWIDGETSRC)/llib-lXaw.ln
X       INCLUDES = -I$(TOP)
X      MACROFILE = Sun.macros
X      IMAKE_CMD = $(NEWTOP)$(IMAKE) -TImake.tmpl \
X			-I$(NEWTOP)$(IRULESRC) \
X			-s Makefile
X         RM_CMD = $(RM) *.CKP *.ln *.BAK *.bak *.o core errs ,* *~ *.a \
X			tags TAGS make.log
X
X#
X#Here is an Imakefile for twm.  It depends on having TWMDIR defined
X#in Imake.tmpl.  I like to use Imakefiles for everything, and I am sure
X#other people do also, so perhaps you could do us all a favor and
X#distribute this one.
X#
X
X       PROGRAMS = twm
XLOCAL_LIBRARIES = $(XLIB)
X      OTHERSRCS = gram.y lex.l
X         YFLAGS = -d
X
XSRCS1=	add_window.c gc.c list.c twm.c parse.c\
X        menus.c events.c resize.c util.c version.c
X
XOBJS1=	gram.o lex.o add_window.o gc.o list.o twm.o parse.o\
X        menus.o events.o resize.o util.o version.o
X
X OBJS = $(OBJS1) $(OBJS2) $(OBJS3)
X SRCS = $(SRCS1) $(SRCS2) $(SRCS3)
X
Xall: $(PROGRAMS)
X
Xtwm: $(OBJS1) $(LOCAL_LIBRARIES)
X	$(RM) $@
X	$(CC) -o $@ $(OBJS1) $(LOCAL_LIBRARIES) $(LDFLAGS)
X
Xinstall:: twm
X	$(INSTALL) -c $(INSTALLFLAGS) twm $(BINDIR)
X
Xrelink::
X	$(RM) $(PROGRAMS)
X	$(MAKE) $(MFLAGS) $(PROGRAMS)
X
Xdepend:: $(DEPEND)
X
Xdepend::
X	$(DEPEND) -s "# DO NOT DELETE" -- $(CFLAGS) -- $(SRCS)
X
X$(DEPEND):
X	@echo "making $(DEPENDSRC)"; \
X	cd $(DEPENDSRC); $(MAKE)
X
Xclean::
X	$(RM) $(PROGRAMS)
X
Xinstall:: Sample.twmrc
X	$(INSTALL) -c $(INSTALLFLAGS) Sample.twmrc  $(TWMDIR)
X
Xinstall:: xterm.icon
X	$(INSTALL) -c $(INSTALLFLAGS) xterm.icon  $(TWMDIR)
X
Xgram.h gram.c: gram.y
X	yacc -d gram.y
X	mv y.tab.c gram.c
X	mv y.tab.h gram.h
X
Xclean::
X	$(RM) y.tab.h y.tab.c lex.yy.c gram.h gram.c lex.c
X
Xclean::
X	$(RM_CMD) \#*
X
XMakefile:: $(IMAKE)
X
XMakefile:: Imakefile \
X	$(IRULESRC)/Imake.tmpl \
X	$(IRULESRC)/Imake.rules \
X	$(IRULESRC)/$(MACROFILE)
X	-$(RM) Makefile.bak; $(MV) Makefile Makefile.bak
X	$(IMAKE_CMD) -DTOPDIR=$(TOP)
X
X$(IMAKE):
X	@echo "making $(IMAKESRC)"; \
X	cd $(IMAKESRC); $(MAKE)
X
Xtags::
X	$(TAGS) -w *.[ch]
X	$(TAGS) -xw *.[ch] > TAGS
X
Xinstall::
X	@echo "install done"
X
XMakefiles::
X
END_OF_FILE
if test 4738 -ne `wc -c <'Makefile'`; then
    echo shar: \"'Makefile'\" unpacked with wrong size!
fi
# end of 'Makefile'
fi
if test -f 'gc.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'gc.c'\"
else
echo shar: Extracting \"'gc.c'\" \(8258 characters\)
sed "s/^X//" >'gc.c' <<'END_OF_FILE'
X/*****************************************************************************/
X/**       Copyright 1988 by Evans & Sutherland Computer Corporation,        **/
X/**                          Salt Lake City, Utah                           **/
X/**                                                                         **/
X/**                           All Rights Reserved                           **/
X/**                                                                         **/
X/**    Permission to use, copy, modify, and distribute this software and    **/
X/**    its documentation  for  any  purpose  and  without  fee is hereby    **/
X/**    granted, provided that the above copyright notice appear  in  all    **/
X/**    copies and that both  that  copyright  notice  and  this  permis-    **/
X/**    sion  notice appear in supporting  documentation,  and  that  the    **/
X/**    name  of Evans & Sutherland  not be used in advertising or publi-    **/
X/**    city pertaining to distribution  of the software without  specif-    **/
X/**    ic, written prior permission.                                        **/
X/**                                                                         **/
X/**    EVANS  & SUTHERLAND  DISCLAIMS  ALL  WARRANTIES  WITH  REGARD  TO    **/
X/**    THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILI-    **/
X/**    TY AND FITNESS, IN NO EVENT SHALL EVANS &  SUTHERLAND  BE  LIABLE    **/
X/**    FOR  ANY  SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY  DAM-    **/
X/**    AGES  WHATSOEVER RESULTING FROM  LOSS OF USE,  DATA  OR  PROFITS,    **/
X/**    WHETHER   IN  AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS    **/
X/**    ACTION, ARISING OUT OF OR IN  CONNECTION  WITH  THE  USE  OR PER-    **/
X/**    FORMANCE OF THIS SOFTWARE.                                           **/
X/*****************************************************************************/
X
X/**********************************************************************
X *
X * $Header: gc.c,v 1.12 88/09/08 15:33:58 toml Exp $
X *
X * Open the fonts and create the GCs
X *
X * 31-Mar-88 Tom LaStrange        Initial Version.
X *
X **********************************************************************/
X
X#ifndef lint
Xstatic char RCSinfo[]=
X"$Header: gc.c,v 1.12 88/09/08 15:33:58 toml Exp $";
X#endif lint
X
X#include <stdio.h>
X#include "twm.h"
X
Xstatic XFontStruct *dfont;		/* my default font */
Xstatic char *dfontname;
X
X/***********************************************************************
X *
X *  Procedure:
X *	CreateGCs - open fonts and create all the needed GC's.  I only
X *		    want to do this once, hence the first_time flag.
X *
X ***********************************************************************
X */
X
Xvoid
XCreateGCs()
X{
X    static int first_time = TRUE;
X    XGCValues	    gcv;
X    unsigned long   gcm, mask;
X
X    if (!first_time)
X	return;
X
X    first_time = FALSE;
X
X    /* open fonts */
X
X    dfontname = "8x13";
X    if ((dfont = XLoadQueryFont(dpy, dfontname)) == NULL)
X    {
X	dfontname = "fixed";
X	if ((dfont = XLoadQueryFont(dpy, dfontname)) == NULL)
X	{
X	    fprintf(stderr,"twm: could not open fonts \"fixed\" or \"8x13\"\n");
X	    exit(1);
X	}
X    }
X
X    if ((TitleBarFont = XLoadQueryFont(dpy, TitleBarFontName)) == NULL)
X	FontError(TitleBarFontName, &TitleBarFont);
X    TitleBarFontHeight = TitleBarFont->ascent + TitleBarFont->descent;
X    TitleBarY = (TITLE_BAR_FONT_HEIGHT - TitleBarFontHeight)/2 +
X	TitleBarFont->ascent;
X
X    if ((MenuFont = XLoadQueryFont(dpy, MenuFontName)) == NULL)
X	FontError(MenuFontName, &MenuFont);
X    MenuFontHeight = MenuFont->ascent + MenuFont->descent;
X    MenuY = MenuFont->ascent + 1;
X
X    if ((IconFont = XLoadQueryFont(dpy, IconFontName)) == NULL)
X	FontError(IconFontName, &IconFont);
X    IconFontHeight = IconFont->ascent + IconFont->descent;
X
X    if ((VersionFont = XLoadQueryFont(dpy, VersionFontName)) == NULL)
X	FontError(VersionFontName, &VersionFont);
X    VersionFontHeight = VersionFont->ascent + VersionFont->descent;
X
X    if ((SizeFont = XLoadQueryFont(dpy, SizeFontName)) == NULL)
X	FontError(SizeFontName, &SizeFont);
X    SizeFontHeight = SizeFont->ascent + SizeFont->descent;
X
X    if ((InitialFont = XLoadQueryFont(dpy, InitialFontName)) == NULL)
X	FontError(InitialFontName, &InitialFont);
X    InitialFontHeight = InitialFont->ascent + InitialFont->descent;
X
X    /* create GC's */
X
X    if (ReverseVideo)
X    {
X	Background = Black;
X	Foreground = White;
X    }
X    else
X    {
X	Foreground = Black;
X	Background = White;
X    }
X
X    gcm = 0;
X    gcm |= GCPlaneMask;	    gcv.plane_mask = AllPlanes;
X    gcm |= GCForeground;    gcv.foreground = BorderTileForeground;
X    gcm |= GCBackground;    gcv.background = BorderTileBackground;
X
X    BorderGC = XCreateGC(dpy, Root, gcm, &gcv);
X
X    gcm = 0;
X    gcm |= GCFont;	    gcv.font = TitleBarFont->fid;
X    gcm |= GCPlaneMask;	    gcv.plane_mask = AllPlanes;
X    gcm |= GCForeground;    gcv.foreground = TitleForeground;
X    gcm |= GCBackground;    gcv.background = TitleBackground;
X
X    TitleNormalGC = XCreateGC(dpy, Root, gcm, &gcv);
X
X    gcm = 0;
X    gcm |= GCFont;	    gcv.font = MenuFont->fid;
X    gcm |= GCPlaneMask;	    gcv.plane_mask = AllPlanes;
X    gcm |= GCForeground;    gcv.foreground = MenuForeground;
X    gcm |= GCBackground;    gcv.background = MenuBackground;
X
X    MenuNormalGC = XCreateGC(dpy, Root, gcm, &gcv);
X
X    gcv.foreground = MenuBackground;
X    gcv.background = MenuForeground;
X
X    MenuReverseGC = XCreateGC(dpy, Root, gcm, &gcv);
X
X    mask = MenuForeground ^ MenuBackground;
X
X    gcm = 0;
X    gcm |= GCFunction;	    gcv.function = GXxor;
X    gcm |= GCFont;	    gcv.font = MenuFont->fid;
X    gcm |= GCPlaneMask;	    gcv.plane_mask = mask;
X    gcm |= GCForeground;    gcv.foreground = mask;
X    gcm |= GCBackground;    gcv.background = MenuBackground;
X
X    MenuXorGC = XCreateGC(dpy, Root, gcm, &gcv);
X
X    gcm = 0;
X    gcm |= GCFont;	    gcv.font = MenuFont->fid;
X    gcm |= GCPlaneMask;	    gcv.plane_mask = AllPlanes;
X    gcm |= GCForeground;    gcv.foreground = MenuTitleForeground;
X    gcm |= GCBackground;    gcv.background = MenuTitleBackground;
X
X    MenuTitleGC = XCreateGC(dpy, Root, gcm, &gcv);
X
X    mask = Foreground ^ Background;
X    gcm = 0;
X    gcm |= GCFunction;	    gcv.function = GXxor;
X    gcm |= GCLineWidth;	    gcv.line_width = 0;
X    gcm |= GCForeground;    gcv.foreground = mask;
X    gcm |= GCPlaneMask;	    gcv.plane_mask = mask;
X    gcm |= GCSubwindowMode; gcv.subwindow_mode = IncludeInferiors;
X
X    DrawGC = XCreateGC(dpy, Root, gcm, &gcv);
X
X    gcm = 0;
X    gcm |= GCFont;	    gcv.font = IconFont->fid;
X    gcm |= GCPlaneMask;	    gcv.plane_mask = AllPlanes;
X    gcm |= GCForeground;    gcv.foreground = IconForeground;
X    gcm |= GCBackground;    gcv.background = IconBackground;
X
X    IconNormalGC = XCreateGC(dpy, Root, gcm, &gcv);
X
X    gcm = 0;
X    gcm |= GCFont;	    gcv.font = VersionFont->fid;
X    gcm |= GCPlaneMask;	    gcv.plane_mask = AllPlanes;
X    gcm |= GCForeground;    gcv.foreground = Foreground;
X    gcm |= GCBackground;    gcv.background = Background;
X
X    VersionNormalGC = XCreateGC(dpy, Root, gcm, &gcv);
X
X    gcm = 0;
X    gcm |= GCFont;	    gcv.font = SizeFont->fid;
X    gcm |= GCPlaneMask;	    gcv.plane_mask = AllPlanes;
X    gcm |= GCForeground;    gcv.foreground = Foreground;
X    gcm |= GCBackground;    gcv.background = Background;
X
X    SizeNormalGC = XCreateGC(dpy, Root, gcm, &gcv);
X
X    gcm = 0;
X    gcm |= GCFont;	    gcv.font = InitialFont->fid;
X    gcm |= GCPlaneMask;	    gcv.plane_mask = AllPlanes;
X    gcm |= GCForeground;    gcv.foreground = Foreground;
X    gcm |= GCBackground;    gcv.background = Background;
X
X    InitialNormalGC = XCreateGC(dpy, Root, gcm, &gcv);
X}
X
X/***********************************************************************
X *
X *  Procedure:
X *	FontError - we couldn't open the font they wanted, give them a
X *		default one.
X *
X *  Inputs:
X *	name - the name of the font we were trying to open
X *
X *  Outputs:
X *	fptr - the point pointer to fill in with the default font
X *
X ***********************************************************************
X */
X
XFontError(name, fptr)
Xchar *name;
XXFontStruct **fptr;
X{
X    fprintf(stderr, "twm: couldn't open font \"%s\", using \"%s\" instead.\n",
X	name, dfontname);
X
X    *fptr = dfont;
X}
END_OF_FILE
if test 8258 -ne `wc -c <'gc.c'`; then
    echo shar: \"'gc.c'\" unpacked with wrong size!
fi
# end of 'gc.c'
fi
if test -f 'lex.l' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'lex.l'\"
else
echo shar: Extracting \"'lex.l'\" \(7285 characters\)
sed "s/^X//" >'lex.l' <<'END_OF_FILE'
X%{
X/*****************************************************************************/
X/**       Copyright 1988 by Evans & Sutherland Computer Corporation,        **/
X/**                          Salt Lake City, Utah                           **/
X/**                                                                         **/
X/**                           All Rights Reserved                           **/
X/**                                                                         **/
X/**    Permission to use, copy, modify, and distribute this software and    **/
X/**    its documentation  for  any  purpose  and  without  fee is hereby    **/
X/**    granted, provided that the above copyright notice appear  in  all    **/
X/**    copies and that both  that  copyright  notice  and  this  permis-    **/
X/**    sion  notice appear in supporting  documentation,  and  that  the    **/
X/**    name  of Evans & Sutherland  not be used in advertising or publi-    **/
X/**    city pertaining to distribution  of the software without  specif-    **/
X/**    ic, written prior permission.                                        **/
X/**                                                                         **/
X/**    EVANS  & SUTHERLAND  DISCLAIMS  ALL  WARRANTIES  WITH  REGARD  TO    **/
X/**    THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILI-    **/
X/**    TY AND FITNESS, IN NO EVENT SHALL EVANS &  SUTHERLAND  BE  LIABLE    **/
X/**    FOR  ANY  SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY  DAM-    **/
X/**    AGES  WHATSOEVER RESULTING FROM  LOSS OF USE,  DATA  OR  PROFITS,    **/
X/**    WHETHER   IN  AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS    **/
X/**    ACTION, ARISING OUT OF OR IN  CONNECTION  WITH  THE  USE  OR PER-    **/
X/**    FORMANCE OF THIS SOFTWARE.                                           **/
X/*****************************************************************************/
X
X/***********************************************************************
X *
X * $Header: lex.l,v 1.34 88/09/08 15:33:46 toml Exp $
X *
X * .twmrc lex file
X *
X * 12-Nov-87 Thomas E. LaStrange		File created
X *
X ***********************************************************************/
X
Xstatic char RCSinfo[]=
X"$Header: lex.l,v 1.34 88/09/08 15:33:46 toml Exp $";
X
X#include <stdio.h>
X#include "gram.h"
X
Xextern int ParseError;
X
X%}
X%k 2000
X%e 2000
X%p 4000
X%n 4000
X
Xqstring				\"[^"]*\"
Xnumber				[0-9]+
Xbutton				[Bb][Uu][Tt][Tt][Oo][Nn]
Xtbutton				[Tt][Ii][Tt][Ll][Ee][Bb][Uu][Tt][Tt][Oo][Nn]
Xnoraise				[Nn][Oo][Rr][Aa][Ii][Ss][Ee][Oo][Nn]
X%%
X"{"				{ return (LB); }
X"}"				{ return (RB); }
X"="				{ return (EQUALS); }
X":"				{ return (COLON); }
X
X{button}{number}		{ (void)sscanf(&yytext[6], "%d", &yylval.num);
X				  return (BUTTON);
X				}
X{tbutton}{number}		{ (void)sscanf(&yytext[11], "%d", &yylval.num);
X				  return (TBUTTON);
X				}
X[Mm][Ee][Nn][Uu]		{ return MENU; }
X[Ff][Uu][Nn][Cc][Tt][Ii][Oo][Nn]  { return FUNCTION; }
X
Xm				{ return (META); }
Xs				{ return (SHIFT); }
Xc				{ return (CONTROL); }
X
Xwindow				{ return (WINDOW); }
Xicon				{ return (ICON); }
Xtitle				{ return (TITLE); }
Xroot				{ return (ROOT); }
Xframe				{ return (FRAME); }
X
Xf.nop				{ return F_NOP; }
Xf.beep				{ return F_BEEP; }
Xf.quit				{ return F_QUIT; }
Xf.title				{ return F_TITLE ; }
Xf.menu				{ return F_MENU; }
Xf.unfocus			{ return F_UNFOCUS; }
Xf.refresh			{ return F_REFRESH; }
Xf.winrefresh			{ return F_WINREFRESH; }
Xf.file				{ return F_FILE; }
Xf.twmrc				{ return F_TWMRC; }
Xf.version			{ return F_VERSION; }
Xf.circleup			{ return F_CIRCLEUP; }
Xf.circledown			{ return F_CIRCLEDOWN; }
Xf.source			{ return F_SOURCE; }
Xf.cutfile			{ return F_CUTFILE; }
Xf.function			{ return F_FUNCTION; }
X"!"				{ return F_EXEC; }
X"^"				{ return F_CUT; }
X
Xf.move				{ return F_MOVE; }
Xf.iconify			{ return F_ICONIFY; }
Xf.focus				{ return F_FOCUS; }
Xf.resize			{ return F_RESIZE; }
Xf.raise				{ return F_RAISE; }
Xf.lower				{ return F_LOWER; }
Xf.destroy			{ return F_DESTROY; }
X
Xt.nop				{ return F_NOP; }
Xt.raise				{ return F_RAISE; }
Xt.lower				{ return F_LOWER; }
Xt.move				{ return F_MOVE; }
X
X{noraise}[Mm][Oo][Vv][Ee]	{ return NO_RAISE_ON_MOVE; }
X{noraise}[Dd][Ee][Ii][Cc][Oo][Nn][Ii][Ff][Yy] { return NO_RAISE_ON_DEICONIFY; }
X{noraise}[Rr][Ee][Ss][Ii][Zz][Ee] { return NO_RAISE_ON_RESIZE; }
X[Cc][Oo][Ll][Oo][Rr]		{ return (COLOR); }
X[Mm][Oo][Nn][Oo][Cc][Hh][Rr][Oo][Mm][Ee] { return (MONOCHROME); }
X[Nn][Oo][Tt][Ii][Tt][Ll][Ee][Ff][Oo][Cc][Uu][Ss] { return (NO_TITLE_FOCUS); }
X[Nn][Oo][Hh][Ii][Gg][Hh][Ll][Ii][Gg][Hh][Tt] { return (NO_HILITE); }
X[Zz][Oo][Oo][Mm]		{ return (ZOOM); }
X[Uu][Nn][Kk][Nn][Oo][Ww][Nn][Ii][Cc][Oo][Nn] { return UNKNOWN_ICON; }
X[Ww][Aa][Rr][Pp][Cc][Uu][Rr][Ss][Oo][Rr] { return WARPCURSOR; }
X[Bb][Oo][Rr][Dd][Ee][Rr][Ww][Ii][Dd][Tt][Hh] { return BORDERWIDTH; }
X[Tt][Ii][Tt][Ll][Ee][Ff][Oo][Nn][Tt] { return (TITLE_FONT); }
X[Mm][Ee][Nn][Uu][Ff][Oo][Nn][Tt] { return (MENU_FONT); }
X[Ii][Cc][Oo][Nn][Ff][Oo][Nn][Tt] { return (ICON_FONT); }
X[Rr][Ee][Ss][Ii][Zz][Ee][Ff][Oo][Nn][Tt] { return (RESIZE_FONT); }
X[Rr][Ee][Vv][Ee][Rr][Ss][Ee][Vv][Ii][Dd][Ee][Oo] { return (REVERSE_VIDEO); }
X[Nn][Oo][Tt][Ii][Tt][Ll][Ee]	{ return (NO_TITLE); }
X[Aa][Uu][Tt][Oo][Rr][Aa][Ii][Ss][Ee]	{ return (AUTO_RAISE); }
X[Ff][Oo][Rr][Cc][Ee][Ii][Cc][Oo][Nn][Ss]	{ return (FORCE_ICON); }
X[Dd][Ee][Ff][Aa][Uu][Ll][Tt][Ff][Uu][Nn][Cc][Tt][Ii][Oo][Nn] {
X			       return (DEFAULT_FUNCTION); }
X[Ii][Cc][Oo][Nn][Ss]			{ return (ICONS); }
X[Ii][Cc][Oo][Nn][Dd][Ii][Rr][Ee][Cc][Tt][Oo][Rr][Yy] {return (ICON_DIRECTORY);}
X[Bb][Oo][Rr][Dd][Ee][Rr][Cc][Oo][Ll][Oo][Rr] { return (BORDER_COLOR); }
X[Tt][Ii][Tt][Ll][Ee][Ff][Oo][Rr][Ee][Gg][Rr][Oo][Uu][Nn][Dd] {
X				return (TITLE_FOREGROUND); }
X[Tt][Ii][Tt][Ll][Ee][Bb][Aa][Cc][Kk][Gg][Rr][Oo][Uu][Nn][Dd] {
X				return (TITLE_BACKGROUND); }
X[Bb][Oo][Rr][Dd][Ee][Rr][Tt][Ii][Ll][Ee][Ff][Oo][Rr][Ee][Gg][Rr][Oo][Uu][Nn][Dd] {
X				return (BORDER_TILE_FOREGROUND); }
X[Bb][Oo][Rr][Dd][Ee][Rr][Tt][Ii][Ll][Ee][Bb][Aa][Cc][Kk][Gg][Rr][Oo][Uu][Nn][Dd] {
X				return (BORDER_TILE_BACKGROUND); }
X[Mm][Ee][Nn][Uu][Ff][Oo][Rr][Ee][Gg][Rr][Oo][Uu][Nn][Dd] {
X				return (MENU_FOREGROUND); }
X[Mm][Ee][Nn][Uu][Bb][Aa][Cc][Kk][Gg][Rr][Oo][Uu][Nn][Dd] {
X				return (MENU_BACKGROUND); }
X[Mm][Ee][Nn][Uu][Tt][Ii][Tt][Ll][Ee][Ff][Oo][Rr][Ee][Gg][Rr][Oo][Uu][Nn][Dd] {
X				return (MENU_TITLE_FOREGROUND); }
X[Mm][Ee][Nn][Uu][Tt][Ii][Tt][Ll][Ee][Bb][Aa][Cc][Kk][Gg][Rr][Oo][Uu][Nn][Dd] {
X				return (MENU_TITLE_BACKGROUND); }
X[Mm][Ee][Nn][Uu][Ss][Hh][Aa][Dd][Oo][Ww][Cc][Oo][Ll][Oo][Rr] {
X				return (MENU_SHADOW_COLOR); }
X[Ii][Cc][Oo][Nn][Ff][Oo][Rr][Ee][Gg][Rr][Oo][Uu][Nn][Dd] {
X				return (ICON_FOREGROUND); }
X[Ii][Cc][Oo][Nn][Bb][Aa][Cc][Kk][Gg][Rr][Oo][Uu][Nn][Dd] {
X				return (ICON_BACKGROUND); }
X[Ii][Cc][Oo][Nn][Bb][Oo][Rr][Dd][Ee][Rr][Cc][Oo][Ll][Oo][Rr] {
X				return (ICON_BORDER_COLOR); }
X[Dd][Oo][Nn][Tt][Mm][Oo][Vv][Ee][Oo][Ff][Ff] return (DONT_MOVE_OFF); }
X
X{qstring}			{ yylval.ptr = yytext; return STRING; }
X{number}			{ (void)sscanf(yytext, "%d", &yylval.num);
X				  return (NUMBER);
X				}
X\#[^\n]*\n			{;}
X[\n\t ]				{;}
X.				{
X				  fprintf(stderr,
X					"twm: bad character `%s', line %d\n",
X					yytext, yylineno);
X				  ParseError = 1;
X				}
X%%
Xyywrap() { return(1);}
X
X#define unput(c)	TwmUnput(c)
X#define input()		TwmInput()
X#define output(c)	TwmOutput(c)
END_OF_FILE
if test 7285 -ne `wc -c <'lex.l'`; then
    echo shar: \"'lex.l'\" unpacked with wrong size!
fi
# end of 'lex.l'
fi
if test -f 'list.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'list.c'\"
else
echo shar: Extracting \"'list.c'\" \(5478 characters\)
sed "s/^X//" >'list.c' <<'END_OF_FILE'
X/*****************************************************************************/
X/**       Copyright 1988 by Evans & Sutherland Computer Corporation,        **/
X/**                          Salt Lake City, Utah                           **/
X/**                                                                         **/
X/**                           All Rights Reserved                           **/
X/**                                                                         **/
X/**    Permission to use, copy, modify, and distribute this software and    **/
X/**    its documentation  for  any  purpose  and  without  fee is hereby    **/
X/**    granted, provided that the above copyright notice appear  in  all    **/
X/**    copies and that both  that  copyright  notice  and  this  permis-    **/
X/**    sion  notice appear in supporting  documentation,  and  that  the    **/
X/**    name  of Evans & Sutherland  not be used in advertising or publi-    **/
X/**    city pertaining to distribution  of the software without  specif-    **/
X/**    ic, written prior permission.                                        **/
X/**                                                                         **/
X/**    EVANS  & SUTHERLAND  DISCLAIMS  ALL  WARRANTIES  WITH  REGARD  TO    **/
X/**    THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILI-    **/
X/**    TY AND FITNESS, IN NO EVENT SHALL EVANS &  SUTHERLAND  BE  LIABLE    **/
X/**    FOR  ANY  SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY  DAM-    **/
X/**    AGES  WHATSOEVER RESULTING FROM  LOSS OF USE,  DATA  OR  PROFITS,    **/
X/**    WHETHER   IN  AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS    **/
X/**    ACTION, ARISING OUT OF OR IN  CONNECTION  WITH  THE  USE  OR PER-    **/
X/**    FORMANCE OF THIS SOFTWARE.                                           **/
X/*****************************************************************************/
X
X/**********************************************************************
X *
X * $Header: list.c,v 1.7 88/09/01 14:03:00 toml Exp $
X *
X * TWM code to deal with the name lists for the NoTitle list and
X * the AutoRaise list
X *
X * 11-Apr-88 Tom LaStrange        Initial Version.
X *
X **********************************************************************/
X
X#ifndef lint
Xstatic char RCSinfo[]=
X"$Header: list.c,v 1.7 88/09/01 14:03:00 toml Exp $";
X#endif lint
X
X#include <stdio.h>
X#include "twm.h"
X#include "gram.h"
X
Xtypedef struct name_list name_list;
X
Xstruct name_list
X{
X    name_list *next;		/* pointer to the next name */
X    char *name;			/* the name of the window */
X    char *ptr;			/* list dependent data */
X};
X
Xname_list *NoTitle = NULL;	/* list of window names with no title bar */
Xname_list *AutoRaise = NULL;	/* list of window names to auto-raise */
Xname_list *Icons = NULL;	/* list of window names and icons */
Xname_list *NoHighlight = NULL;	/* list of windows no to highlight */
X
X/***********************************************************************
X *
X *  Procedure:
X *	AddToList - add a window name to the appropriate list
X *
X *  Inputs:
X *	list	- a #define to identify the list
X *	name	- a pointer to the name of the window 
X *	ptr	- pointer to list dependent data
X *
X *  Special Considerations
X *	If the list does not use the ptr value, a non-null value 
X *	should be placed in it.  LookInList returns this ptr value
X *	and procedures calling LookInList will check for a non-null 
X *	return value as an indication of success.
X *
X ***********************************************************************
X */
X
Xvoid
XAddToList(list, name, ptr)
Xint list;
Xchar *name;
Xchar *ptr;
X{
X    name_list *nptr;
X
X    nptr = (name_list *)malloc(sizeof(name_list));
X    if (nptr == NULL)
X    {
X	fprintf(stderr, "twm: out of memory\n");
X	Done();
X    }
X
X    nptr->name = name;
X
X    switch (list)
X    {
X    case NO_HILITE:
X	nptr->next = NoHighlight;
X	nptr->ptr = (char *)TRUE;
X	NoHighlight = nptr;
X	break;
X
X    case AUTO_RAISE:
X	nptr->next = AutoRaise;
X	nptr->ptr = (char *)TRUE;
X	AutoRaise = nptr;
X	break;
X
X    case NO_TITLE:
X	nptr->next = NoTitle;
X	nptr->ptr = (char *)TRUE;
X	NoTitle = nptr;
X	break;
X
X    case ICONS:
X	nptr->next = Icons;
X	nptr->ptr = ptr;	/* this is the pixmap */
X	Icons = nptr;
X	break;
X    }
X}
X
X/***********************************************************************
X *
X *  Procedure:
X *	LookInList - look through a list for a window name, or class
X *
X *  Returned Value:
X *	the ptr field of the list structure or NULL if the name 
X *	or class was not found in the list
X *
X *  Inputs:
X *	list	- a #define to identify the list
X *	name	- a pointer to the name to look for
X *	class	- a pointer to the class to look for
X *
X ***********************************************************************
X */
X
Xchar *
XLookInList(list, name, class)
Xint list;
Xchar *name;
XXClassHint *class;
X{
X    name_list *l;
X    name_list *nptr;
X
X    switch (list)
X    {
X    case NO_HILITE:
X	l = NoHighlight;
X	break;
X
X    case AUTO_RAISE:
X	l = AutoRaise;
X	break;
X
X    case NO_TITLE:
X	l = NoTitle;
X	break;
X
X    case ICONS:
X	l = Icons;
X	break;
X    }
X
X    for (nptr = l; nptr != NULL; nptr = nptr->next)
X    {
X	int len;
X
X	len = strlen(nptr->name);
X	if (strncmp(name, nptr->name, len) == 0 ||
X	    (class && strncmp(class->res_name, nptr->name, len) == 0) ||
X	    (class && strncmp(class->res_class, nptr->name, len) == 0))
X	    return (nptr->ptr);
X    }
X    return (NULL);
X}
X
Xchar *
XLookInNameList(list, name)
Xint list;
Xchar *name;
X{
X    return (LookInList(list, name, NULL));
X}
END_OF_FILE
if test 5478 -ne `wc -c <'list.c'`; then
    echo shar: \"'list.c'\" unpacked with wrong size!
fi
# end of 'list.c'
fi
if test -f 'menus.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'menus.h'\"
else
echo shar: Extracting \"'menus.h'\" \(5088 characters\)
sed "s/^X//" >'menus.h' <<'END_OF_FILE'
X/*****************************************************************************/
X/**       Copyright 1988 by Evans & Sutherland Computer Corporation,        **/
X/**                          Salt Lake City, Utah                           **/
X/**                                                                         **/
X/**                           All Rights Reserved                           **/
X/**                                                                         **/
X/**    Permission to use, copy, modify, and distribute this software and    **/
X/**    its documentation  for  any  purpose  and  without  fee is hereby    **/
X/**    granted, provided that the above copyright notice appear  in  all    **/
X/**    copies and that both  that  copyright  notice  and  this  permis-    **/
X/**    sion  notice appear in supporting  documentation,  and  that  the    **/
X/**    name  of Evans & Sutherland  not be used in advertising or publi-    **/
X/**    city pertaining to distribution  of the software without  specif-    **/
X/**    ic, written prior permission.                                        **/
X/**                                                                         **/
X/**    EVANS  & SUTHERLAND  DISCLAIMS  ALL  WARRANTIES  WITH  REGARD  TO    **/
X/**    THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILI-    **/
X/**    TY AND FITNESS, IN NO EVENT SHALL EVANS &  SUTHERLAND  BE  LIABLE    **/
X/**    FOR  ANY  SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY  DAM-    **/
X/**    AGES  WHATSOEVER RESULTING FROM  LOSS OF USE,  DATA  OR  PROFITS,    **/
X/**    WHETHER   IN  AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS    **/
X/**    ACTION, ARISING OUT OF OR IN  CONNECTION  WITH  THE  USE  OR PER-    **/
X/**    FORMANCE OF THIS SOFTWARE.                                           **/
X/*****************************************************************************/
X
X/***********************************************************************
X *
X * $Header: menus.h,v 1.14 88/09/01 12:05:07 toml Exp $
X *
X * twm menus include file
X *
X * 17-Nov-87 Thomas E. LaStrange		File created
X *
X ***********************************************************************/
X
X#ifndef _MENUS_
X#define _MENUS_
X
X#define TWM_ROOT	"bLoB_GoOp"	/* my private root menu */
X
X#define MAX_FILE_SIZE 4096	/* max chars to read from file for cut */
X
Xtypedef struct MenuItem
X{
X    struct MenuItem *next;	/* next menu item */
X    struct MenuItem *prev;	/* prev menu item */
X    struct MenuRoot *sub;	/* MenuRoot of a pull right menu */
X    struct MenuRoot *root;	/* back pointer to my MenuRoot */
X    char *item;			/* the character string displayed */
X    int y;			/* y coordinate for text */
X    char *action;		/* action to be performed */
X    Window w;			/* the item window */
X    Window pull;		/* the pull right window (if any) */
X    int func;			/* twm built in function */
X    int state;			/* video state, 0 = normal, 1 = reversed */
X} MenuItem;
X
Xtypedef struct MenuRoot
X{
X    struct MenuItem *first;	/* first item in menu */
X    struct MenuItem *last;	/* last item in menu */
X    struct MenuRoot *prev;	/* previous root menu if pull right */
X    struct MenuRoot *next;	/* next in list of root menus */
X    char *name;			/* name of root */
X    Window w;			/* the window of the menu */
X    Window shadow;		/* the shadow window */
X    int mapped;			/* has the menu ever been mapped ? */
X    int width;			/* width of the menu */
X    int items;			/* number of items in the menu */
X    int pull;			/* is there a pull right entry ? */
X    int active;			/* this menu is active */
X} MenuRoot;
X
Xtypedef struct MouseButton
X{
X    int func;			/* the function number */
X    int mask;			/* modifier mask */
X    MenuRoot *menu;		/* menu if func is F_MENU */
X    MenuItem *item;		/* action to perform if func != F_MENU */
X} MouseButton;
X
Xtypedef struct FuncKey
X{
X    struct FuncKey *next;	/* next in the list of function keys */
X    char *name;			/* key name */
X    KeySym keysym;		/* X keysym */
X    KeyCode keycode;		/* X keycode */
X    int cont;			/* context */
X    int mods;			/* modifiers */
X    int func;			/* function to perform */
X    char *action;		/* action string (if any) */
X} FuncKey;
X
Xextern int RootFunction;
Xextern MouseButton Mouse[MAX_BUTTONS+1][NUM_CONTEXTS][MOD_SIZE];
Xextern MouseButton DefaultFunction;
Xextern MenuRoot *MenuList;
Xextern MenuRoot *LastMenu;
Xextern MenuRoot *ActiveMenu;
Xextern MenuItem *ActiveItem;
X
Xextern int ConstMove;		/* constrained move variables */
Xextern int ConstMoveDir;
Xextern int ConstMoveX;
Xextern int ConstMoveY;
Xextern int ConstMoveXL;
Xextern int ConstMoveXR;
Xextern int ConstMoveYT;
Xextern int ConstMoveYB;
X
X#define MOVE_NONE	0	/* modes of constrained move */
X#define MOVE_VERT	1
X#define MOVE_HORIZ	2
X
Xextern void InitMenus();
Xextern MenuRoot *NewMenuRoot();
Xextern MenuItem *AddToMenu();
Xextern void PopUpMenu();
Xextern MenuRoot *FindMenuRoot();
Xextern FuncKey FuncKeyRoot;
Xextern void AddFuncKey();
Xextern void ExecuteFunction();
Xextern int DeferExecution();
Xextern void Execute();
Xextern void FocusOnRoot();
X
X#endif _MENUS_
END_OF_FILE
if test 5088 -ne `wc -c <'menus.h'`; then
    echo shar: \"'menus.h'\" unpacked with wrong size!
fi
# end of 'menus.h'
fi
if test -f 'parse.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'parse.c'\"
else
echo shar: Extracting \"'parse.c'\" \(4559 characters\)
sed "s/^X//" >'parse.c' <<'END_OF_FILE'
X/*****************************************************************************/
X/**       Copyright 1988 by Evans & Sutherland Computer Corporation,        **/
X/**                          Salt Lake City, Utah                           **/
X/**                                                                         **/
X/**                           All Rights Reserved                           **/
X/**                                                                         **/
X/**    Permission to use, copy, modify, and distribute this software and    **/
X/**    its documentation  for  any  purpose  and  without  fee is hereby    **/
X/**    granted, provided that the above copyright notice appear  in  all    **/
X/**    copies and that both  that  copyright  notice  and  this  permis-    **/
X/**    sion  notice appear in supporting  documentation,  and  that  the    **/
X/**    name  of Evans & Sutherland  not be used in advertising or publi-    **/
X/**    city pertaining to distribution  of the software without  specif-    **/
X/**    ic, written prior permission.                                        **/
X/**                                                                         **/
X/**    EVANS  & SUTHERLAND  DISCLAIMS  ALL  WARRANTIES  WITH  REGARD  TO    **/
X/**    THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILI-    **/
X/**    TY AND FITNESS, IN NO EVENT SHALL EVANS &  SUTHERLAND  BE  LIABLE    **/
X/**    FOR  ANY  SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY  DAM-    **/
X/**    AGES  WHATSOEVER RESULTING FROM  LOSS OF USE,  DATA  OR  PROFITS,    **/
X/**    WHETHER   IN  AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS    **/
X/**    ACTION, ARISING OUT OF OR IN  CONNECTION  WITH  THE  USE  OR PER-    **/
X/**    FORMANCE OF THIS SOFTWARE.                                           **/
X/*****************************************************************************/
X
X/***********************************************************************
X *
X * $Header: parse.c,v 1.16 88/07/19 13:49:08 toml Exp $
X *
X * parse the .twmrc file
X *
X * 17-Nov-87 Thomas E. LaStrange		File created
X *
X ***********************************************************************/
X
X#ifndef lint
Xstatic char RCSinfo[]=
X"$Header: parse.c,v 1.16 88/07/19 13:49:08 toml Exp $";
X#endif
X
X#include <stdio.h>
X#include "twm.h"
X#include "menus.h"
X#include "util.h"
X
X#define BUF_LEN 300
X
Xstatic FILE *twmrc;
Xstatic int ptr = 0;
Xstatic int len = 0;
Xstatic char buff[BUF_LEN+1];
Xextern int yylineno;
X
X/***********************************************************************
X *
X *  Procedure:
X *	ParseTwmrc - parse the .twmrc file
X *
X *  Inputs:
X *	filename  - the filename to parse.  A NULL indicates $HOME/.twmrc
X *
X ***********************************************************************
X */
X
Xvoid
XParseTwmrc(filename)
Xchar *filename;
X{
X    char *home;
X    char init_file[200];
X
X    InitMenus();
X
X    if (filename == NULL)
X    {
X	home = (char *)getenv("HOME");
X	strcpy(init_file, home);
X	strcat(init_file, "/.twmrc");
X    }
X    else
X	strcpy(init_file, filename);
X
X    if ((twmrc = fopen(init_file, "r")) == NULL)
X    {
X	fprintf(stderr, "twm: couldn't open \"%s\"\n", init_file);
X    	return;
X    }
X
X    ptr = 0;
X    len = 0;
X    yylineno = 0;
X    ParseError = FALSE;
X
X    yyparse();
X
X    fclose(twmrc);
X
X    if (ParseError)
X    {
X	fprintf(stderr, "twm: errors found in \"%s\", twm aborting\n",
X	    init_file);
X	Done();
X    }
X}
X
X/***********************************************************************
X *
X *  Procedure:
X *	TwmInput - redefinition of the lex input routine
X *
X *  Returned Value:
X *	the next input character
X *
X ***********************************************************************
X */
X
Xint
XTwmInput()
X{
X    while (ptr == len)
X    {
X	if (fgets(buff, BUF_LEN, twmrc) == NULL)
X	    return NULL;
X
X	yylineno++;
X
X	ptr = 0;
X	len = strlen(buff);
X    }
X    return ((int)buff[ptr++]);
X}
X
X/***********************************************************************
X *
X *  Procedure:
X *	TwmUnput - redefinition of the lex unput routine
X *
X *  Inputs:
X *	c	- the character to push back onto the input stream
X *
X ***********************************************************************
X */
X
Xvoid
XTwmUnput(c)
X{
X    buff[--ptr] = c;
X}
X
X/***********************************************************************
X *
X *  Procedure:
X *	TwmOutput - redefinition of the lex output routine
X *
X *  Inputs:
X *	c	- the character to print
X *
X ***********************************************************************
X */
X
Xvoid
XTwmOutput(c)
X{
X    putchar(c);
X}
END_OF_FILE
if test 4559 -ne `wc -c <'parse.c'`; then
    echo shar: \"'parse.c'\" unpacked with wrong size!
fi
# end of 'parse.c'
fi
if test -f 'twm.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'twm.h'\"
else
echo shar: Extracting \"'twm.h'\" \(7916 characters\)
sed "s/^X//" >'twm.h' <<'END_OF_FILE'
X/*****************************************************************************/
X/**       Copyright 1988 by Evans & Sutherland Computer Corporation,        **/
X/**                          Salt Lake City, Utah                           **/
X/**                                                                         **/
X/**                           All Rights Reserved                           **/
X/**                                                                         **/
X/**    Permission to use, copy, modify, and distribute this software and    **/
X/**    its documentation  for  any  purpose  and  without  fee is hereby    **/
X/**    granted, provided that the above copyright notice appear  in  all    **/
X/**    copies and that both  that  copyright  notice  and  this  permis-    **/
X/**    sion  notice appear in supporting  documentation,  and  that  the    **/
X/**    name  of Evans & Sutherland  not be used in advertising or publi-    **/
X/**    city pertaining to distribution  of the software without  specif-    **/
X/**    ic, written prior permission.                                        **/
X/**                                                                         **/
X/**    EVANS  & SUTHERLAND  DISCLAIMS  ALL  WARRANTIES  WITH  REGARD  TO    **/
X/**    THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILI-    **/
X/**    TY AND FITNESS, IN NO EVENT SHALL EVANS &  SUTHERLAND  BE  LIABLE    **/
X/**    FOR  ANY  SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY  DAM-    **/
X/**    AGES  WHATSOEVER RESULTING FROM  LOSS OF USE,  DATA  OR  PROFITS,    **/
X/**    WHETHER   IN  AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS    **/
X/**    ACTION, ARISING OUT OF OR IN  CONNECTION  WITH  THE  USE  OR PER-    **/
X/**    FORMANCE OF THIS SOFTWARE.                                           **/
X/*****************************************************************************/
X
X/***********************************************************************
X *
X * $Header: twm.h,v 1.37 88/09/08 15:34:02 toml Exp $
X *
X * twm include file
X *
X * 28-Oct-87 Thomas E. LaStrange	File created
X *
X ***********************************************************************/
X
X#ifndef _TWM_
X#define _TWM_
X
X#include <X11/Xlib.h>
X#include <X11/Xutil.h>
X#include <X11/cursorfont.h>
X
X/* Define this if you want the Focus button on the titlebar */
X/* #define FOCUS */
X
X#define BW 2			/* border width */
X
X/* directory to look for bitmaps if the file is not found in the current
X * directory 
X */
X#define BITMAPS "/usr/include/X11/bitmaps"
X
X#ifndef TRUE
X#define TRUE	1
X#define FALSE	0
X#endif
X
X#define MAX_BUTTONS	5	/* max mouse buttons supported */
X
X/* contexts for button presses */
X#define C_NO_CONTEXT	-1
X#define C_WINDOW	0
X#define C_TITLE		1
X#define C_ICON		2
X#define C_ROOT		3
X#define C_FRAME		4
X#define NUM_CONTEXTS	5
X
X/* modifiers for button presses */
X#define MOD_SIZE	((ShiftMask | ControlMask | Mod1Mask) + 1)
X
X#define TITLE_BAR_SPACE         1	/* 2 pixel space bordering chars */
X#define TITLE_BAR_FONT_HEIGHT   15	/* max of 15 pixel high chars */
X#define TITLE_BAR_HEIGHT        (TITLE_BAR_FONT_HEIGHT+(2*TITLE_BAR_SPACE))
X
X/* for each window that is on the display, one of these structures
X * is allocated and linked into a list 
X */
Xtypedef struct TwmWindow
X{
X    struct TwmWindow *next;	/* next twm window */
X    struct TwmWindow *prev;	/* previous twm window */
X    Window w;			/* the child window */
X    Window frame;		/* the frame window */
X    Window title_w;		/* the title bar window */
X    Window iconify_w;		/* the iconify button */
X    Window resize_w;		/* the resize button */
X#ifndef NOFOCUS
X    Window focus_w;		/* the focus window */
X#endif
X    Window hilite_w;		/* the hilite window */
X    Window icon_w;		/* the icon window */
X    Window icon_bm_w;		/* the icon bitmap window */
X    int frame_x;		/* x position of frame */
X    int frame_y;		/* y position of frame */
X    int frame_width;		/* width of frame */
X    int frame_height;		/* height of frame */
X    int icon_x;			/* icon text x coordinate */
X    int icon_y;			/* icon text y coordiante */
X    int icon_w_width;		/* width of the icon window */
X    int icon_width;		/* width of the icon bitmap */
X    int icon_height;		/* height of the icon bitmap */
X    int title_height;		/* height of the title bar */
X    char *full_name;		/* full name of the window */
X    char *name;			/* name of the window */
X    char *icon_name;		/* name of the icon */
X    int name_width;		/* width of name text */
X    XWindowAttributes attr;	/* the child window attributes */
X    XSizeHints hints;		/* normal hints */
X    XWMHints *wmhints;		/* WM hints */
X    XClassHint class;
X    short xterm;		/* boolean indicating xterm */
X    short iconified;		/* has the window ever been iconified? */
X    short icon;			/* is the window an icon now ? */
X    short mapped;		/* is the window mapped ? */
X    short auto_raise;		/* should we auto-raise this window ? */
X    short forced;		/* has had an icon forced upon it */
X    short highlight;		/* should highlight this window */
X} TwmWindow;
X
Xextern TwmWindow TwmRoot;
X
Xextern Display *dpy;
Xextern int screen;
Xextern int d_depth;
Xextern Visual *d_visual;
X
Xextern Window Root;
Xextern Window VersionWindow;
Xextern Window SizeWindow;
Xextern Window ResizeWindow;
Xextern Window InitialWindow;
Xextern Colormap CMap;
X
Xextern XFontStruct *TitleBarFont;
Xextern XFontStruct *MenuFont;
Xextern XFontStruct *IconFont;
Xextern XFontStruct *SizeFont;
Xextern XFontStruct *VersionFont;
Xextern XFontStruct *InitialFont;
X
Xextern char *TitleBarFontName;
Xextern char *MenuFontName;
Xextern char *IconFontName;
Xextern char *SizeFontName;
Xextern char *VersionFontName;
Xextern char *InitialFontName;
Xextern char *IconDirectory;
X
Xextern int TitleBarFontHeight;
Xextern int MenuFontHeight;
Xextern int IconFontHeight;
Xextern int SizeFontHeight;
Xextern int VersionFontHeight;
Xextern int InitialFontHeight;
X
Xextern int BorderColor;
Xextern int BorderTileForeground;
Xextern int BorderTileBackground;
Xextern int TitleForeground;
Xextern int TitleBackground;
Xextern int MenuForeground;
Xextern int MenuBackground;
Xextern int MenuTitleForeground;
Xextern int MenuTitleBackground;
Xextern int MenuShadowColor;
Xextern int IconForeground;
Xextern int IconBackground;
Xextern int IconBorderColor;
X
Xextern Cursor ArrowCursor;
Xextern Cursor ButtonCursor;
Xextern Cursor MoveCursor;
Xextern Cursor ClockCursor;
Xextern Cursor LeftArrowCursor;
Xextern Cursor UpperLeftCursor;
Xextern Cursor DotCursor;
Xextern Cursor SkullCursor;
X
Xextern GC TitleNormalGC;
Xextern GC MenuNormalGC;
Xextern GC MenuReverseGC;
Xextern GC MenuXorGC;
Xextern GC MenuTitleGC;
Xextern GC IconNormalGC;
Xextern GC VersionNormalGC;
Xextern GC SizeNormalGC;
Xextern GC InitialNormalGC;
Xextern GC DrawGC;
Xextern GC BorderGC;
X
Xextern XClassHint NoClass;
X
Xextern XContext TwmContext;
Xextern XContext MenuContext;
X
Xextern int BorderWidth;
Xextern unsigned long Foreground;
Xextern unsigned long Background;
Xextern unsigned long Black;
Xextern unsigned long White;
Xextern Pixmap GrayTile;
X
Xextern char Version[100];
Xextern Pixmap UnknownPm;
Xextern int UnknownWidth;
Xextern int UnknownHeight;
Xextern int FirstTime;
Xextern int ReverseVideo;
Xextern int FocusRoot;
Xextern TwmWindow *Focus;
Xextern int WarpCursor;
Xextern int DontMoveOff;
Xextern int DoZoom;
Xextern int ForceIcon;
Xextern int NoRaiseMove;
Xextern int NoRaiseResize;
Xextern int NoRaiseDeicon;
Xextern int Monochrome;
Xextern int TitleFocus;
Xextern char *Home;
Xextern int HomeLen;
Xextern int ParseError;
Xextern int Highlight;
Xextern int MyDisplayWidth;
Xextern int MyDisplayHeight;
X
Xextern int TitleBarY;
Xextern int TitleBarX;
Xextern int MenuY;
Xextern int HandlingEvents;
X
Xextern Window JunkRoot;
Xextern Window JunkChild;
Xextern int JunkX;
Xextern int JunkY;
Xextern int JunkWidth;
Xextern int JunkHeight;
Xextern int JunkDepth;
Xextern int JunkBW;
Xextern int JunkMask;
X
X
Xextern void Done();
Xextern void Error();
Xextern void Other();
X
X#endif _TWM_
END_OF_FILE
if test 7916 -ne `wc -c <'twm.h'`; then
    echo shar: \"'twm.h'\" unpacked with wrong size!
fi
# end of 'twm.h'
fi
if test -f 'xterm.icon' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'xterm.icon'\"
else
echo shar: Extracting \"'xterm.icon'\" \(3798 characters\)
sed "s/^X//" >'xterm.icon' <<'END_OF_FILE'
X/*****************************************************************************/
X/**       Copyright 1988 by Evans & Sutherland Computer Corporation,        **/
X/**                          Salt Lake City, Utah                           **/
X/**                                                                         **/
X/**                           All Rights Reserved                           **/
X/**                                                                         **/
X/**    Permission to use, copy, modify, and distribute this software and    **/
X/**    its documentation  for  any  purpose  and  without  fee is hereby    **/
X/**    granted, provided that the above copyright notice appear  in  all    **/
X/**    copies and that both  that  copyright  notice  and  this  permis-    **/
X/**    sion  notice appear in supporting  documentation,  and  that  the    **/
X/**    name  of Evans & Sutherland  not be used in advertising or publi-    **/
X/**    city pertaining to distribution  of the software without  specif-    **/
X/**    ic, written prior permission.                                        **/
X/**                                                                         **/
X/**    EVANS  & SUTHERLAND  DISCLAIMS  ALL  WARRANTIES  WITH  REGARD  TO    **/
X/**    THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILI-    **/
X/**    TY AND FITNESS, IN NO EVENT SHALL EVANS &  SUTHERLAND  BE  LIABLE    **/
X/**    FOR  ANY  SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY  DAM-    **/
X/**    AGES  WHATSOEVER RESULTING FROM  LOSS OF USE,  DATA  OR  PROFITS,    **/
X/**    WHETHER   IN  AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS    **/
X/**    ACTION, ARISING OUT OF OR IN  CONNECTION  WITH  THE  USE  OR PER-    **/
X/**    FORMANCE OF THIS SOFTWARE.                                           **/
X/*****************************************************************************/
X
X#define xterm_width 48
X#define xterm_height 48
Xstatic char xterm_bits[] = {
X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x00,
X   0x20, 0x00, 0x00, 0x00, 0x00, 0x03, 0x20, 0xfe, 0xff, 0xff, 0x1f, 0x05,
X   0x20, 0x01, 0x00, 0x00, 0x20, 0x09, 0xa0, 0x00, 0x00, 0x00, 0x40, 0x11,
X   0xa0, 0xfc, 0xff, 0x00, 0x40, 0x21, 0xa0, 0x00, 0x00, 0x00, 0x40, 0x21,
X   0xa0, 0xfc, 0x01, 0x00, 0x40, 0x21, 0xa0, 0x00, 0x00, 0x00, 0x40, 0x21,
X   0xa0, 0xfc, 0xff, 0x3f, 0x40, 0x21, 0xa0, 0x00, 0x00, 0x00, 0x40, 0x21,
X   0xa0, 0xfc, 0x03, 0x00, 0x40, 0x21, 0xa0, 0x00, 0x00, 0x00, 0x40, 0x21,
X   0xa0, 0xfc, 0xff, 0x01, 0x40, 0x21, 0xa0, 0x00, 0x00, 0x00, 0x40, 0x21,
X   0xa0, 0xfc, 0x00, 0x00, 0x40, 0x21, 0xa0, 0x00, 0x00, 0x00, 0x40, 0x21,
X   0xa0, 0x00, 0x00, 0x00, 0x40, 0x21, 0xa0, 0x00, 0x00, 0x00, 0x40, 0x21,
X   0xa0, 0x00, 0x00, 0x00, 0x40, 0x21, 0xa0, 0x00, 0x00, 0x00, 0x40, 0x21,
X   0xa0, 0x00, 0x00, 0x00, 0x40, 0x21, 0xa0, 0x00, 0x00, 0x00, 0x40, 0x21,
X   0xa0, 0x00, 0x00, 0x00, 0x40, 0x21, 0xa0, 0x00, 0x00, 0x00, 0x40, 0x11,
X   0xa0, 0x00, 0x00, 0x00, 0x40, 0x11, 0xa0, 0x00, 0x00, 0x00, 0x40, 0x09,
X   0xa0, 0x00, 0x00, 0x00, 0x40, 0x09, 0xa0, 0x00, 0x00, 0x00, 0x40, 0x05,
X   0x20, 0x01, 0x00, 0x00, 0x20, 0x05, 0x20, 0xfe, 0xff, 0xff, 0x1f, 0x03,
X   0x20, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x00,
X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X   0xc0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x00, 0x00, 0x00, 0x00, 0x03,
X   0xa0, 0xaa, 0xaa, 0xaa, 0x2a, 0x03, 0x10, 0x00, 0x00, 0x00, 0x80, 0x02,
X   0x50, 0x55, 0x55, 0x55, 0x95, 0x02, 0x08, 0x00, 0x00, 0x00, 0x40, 0x02,
X   0xa8, 0xaa, 0xaa, 0xaa, 0x4a, 0x02, 0x04, 0x00, 0x00, 0x00, 0x20, 0x01,
X   0xb4, 0xff, 0xff, 0xff, 0xad, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00,
X   0xfe, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
END_OF_FILE
if test 3798 -ne `wc -c <'xterm.icon'`; then
    echo shar: \"'xterm.icon'\" unpacked with wrong size!
fi
# end of 'xterm.icon'
fi
echo shar: End of archive 2 \(of 7\).
cp /dev/null ark2isdone
MISSING=""
for I in 1 2 3 4 5 6 7 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 7 archives.
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0
-- 
Mike Wexler(wyse!mikew)    Phone: (408)433-1000 x1330



More information about the Comp.sources.x mailing list