jkh@ardent.UUCP (Jordan K. Hubbard) (06/16/88)
#! /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 9 (of 17)."
# Contents: awm/Titlebar.c awm/globals.c
# Wrapped by jkh@ardent on Thu Jun 16 00:44:16 1988
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'awm/Titlebar.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'awm/Titlebar.c'\"
else
echo shar: Extracting \"'awm/Titlebar.c'\" \(13616 characters\)
sed "s/^X//" >'awm/Titlebar.c' <<'END_OF_FILE'
X#ident "%W% %G%"
X
X#ifndef lint
static char *rcsid_TitleBar_c = "$Header: TitleBar.c,v 1.1 88/06/15 15:26:00 jkh Exp $";
X#endif lint
X
X#include "X11/copyright.h"
X/*
X *
X * Copyright 1987, 1988 by Ardent Computer Corporation, Sunnyvale, Ca.
X *
X * Copyright 1987 by Jordan Hubbard.
X *
X *
X * All Rights Reserved
X *
X * Permission to use, copy, modify, and distribute this software and its
X * documentation for any purpose and without fee is hereby granted,
X * provided that the above copyright notice appear in all copies and that
X * both that copyright notice and this permission notice appear in
X * supporting documentation, and that the name of Ardent Computer
X * Corporation or Jordan Hubbard not be used in advertising or publicity
X * pertaining to distribution of the software without specific, written
X * prior permission.
X *
X */
X
X/*
X * MODIFICATION HISTORY
X *
X * 002 -- Jordan Hubbard, U.C. Berkeley.
X Title bar support routines.
X */
X
X#include "awm.h"
X#include "X11/Xutil.h"
X
static Boolean init_done = False;
int TB_wide, TB_high, TBB_wide, TBB_high, BC_wide, BC_high;
int BCB_wide, BCB_high;
X
extern XContext AwmContext;
X
X#define BLANK_WIDE 16
X#define BLANK_HIGH 16
static char blank_bits[] = {
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
X 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
X
void Init_Titles()
X{
X int t_wide, t_high, junk;
X register char *cp;
X
X Entry("Init_Titles")
X
X TFontInfo = GetFontRes("title.font", DEF_TITLE_FONT);
X TFontBoldInfo = GetFontRes("title.boldFont", NULL);
X TBackPixmapData = GetPixmapDataRes("title.pixmap", &TB_wide, &TB_high);
X TBoldPixmapData = GetPixmapDataRes("title.boldPixmap", &TBB_wide,
X &TBB_high);
X BBackPixmapData = GetPixmapDataRes("borderContext.pixmap", &BC_wide,
X &BC_high);
X BBoldPixmapData = GetPixmapDataRes("borderContext.boldPixmap", &BCB_wide,
X &BCB_high);
X TForeground = GetColorRes("title.foreground", ForeColor);
X TBackground = GetColorRes("title.background", BackColor);
X TTextForeground = GetColorRes("title.text.foreground", TForeground);
X TTextBackground = GetColorRes("title.text.background", TBackground);
X titleHeight = TFontInfo->max_bounds.ascent +
X TFontInfo->max_bounds.descent + (TitlePad * 2);
X /* we've specified a bold pixmap, but no back pixmap. Use blank. */
X if (TBoldPixmapData && !TBackPixmapData) {
X TBackPixmapData = blank_bits;
X TB_wide = BLANK_WIDE;
X TB_high = BLANK_HIGH;
X }
X /* we've specified a bold BC pixmap, but no back pixmap. Use blank. */
X if (BBoldPixmapData && !BBackPixmapData) {
X BBackPixmapData = blank_bits;
X BC_wide = BLANK_WIDE;
X BC_high = BLANK_HIGH;
X }
X if (TFontBoldInfo) {
X int foo;
X
X foo = TFontBoldInfo->max_bounds.ascent +
X TFontBoldInfo->max_bounds.descent + (TitlePad * 2);
X if (foo > titleHeight)
X titleHeight = foo;
X }
X if (titleHeight < gadgetHeight)
X titleHeight = gadgetHeight;
X if (TitleHeight) /* Specified height overrides derived height */
X titleHeight = TitleHeight;
X TitleCursor = XCreateFontCursor(dpy, TCursor);
X if (BContext) {
X FrameCursor = XCreateFontCursor(dpy, BCursor);
X if (!FrameCursor)
X Error("Init_Titles: Can't get border cursor #%d!\n", BCursor);
X }
X if (!TitleCursor)
X Error("Init_Titles: Can't get title cursor #%d!\n", TCursor);
X init_done = True;
X Leave_void
X}
X
char *GetTitleName(w)
Window w;
X{
X char *cp = 0, *tmp;
X
X Entry("GetTitleName")
X
X if (!XFetchName(dpy, w, &cp) || !cp)
X cp = "Untitled Window";
X tmp = (char *)malloc(strlen(cp) + 3);
X
X /*
X * We add a space on both ends for asthetic effect
X * (only apparent if we're using inverse video).
X */
X tmp[0] = ' ';
X strcpy(tmp + 1, cp);
X strcat(tmp, " ");
X free(cp);
X Leave(tmp)
X}
X
X/* Function for f.title */
Boolean FAddTitle(w, mask, button, x, y)
Window w;
int mask, button, x, y;
X{
X Entry("FAddTitle")
X
X if (w == RootWindow(dpy, scr))
X Leave(FALSE)
X XMapWindow(dpy, AddTitle(w));
X XSync(dpy, FALSE);
X Leave(TRUE)
X}
X
Window AddTitle(w)
Window w;
X{
X Window root;
X int x, y, width, height, bw, depth, status, bch, bcv;
X Window foster, title;
X AwmInfoPtr awi;
X char *icon_name, *cp = 0;
X char *class_string = 0;
X char *name = 0, *class;
X XWMHints *wm_hints;
X XSizeHints sz_hints;
X XClassHint class_hints;
X Binding *bptr;
X unsigned long valuemask;
X XWindowAttributes xwa;
X XSetWindowAttributes swa;
X XWindowChanges wc;
X unsigned long form, len, after;
X Atom a_type;
X
X Entry("AddTitle")
X
X /*
X * First we see if this window even wants a title.
X */
X if (IsTitled(w))
X Leave((Window)NULL)
X awi = GetAwmInfo(w);
X status = XGetWindowProperty(dpy, w, XA_WM_CLASS, 0, 256, False,
X XA_STRING, &a_type, &form, &len, &after,
X &class_string);
X if (status == Success && form == 8 && len && class_string && !after) {
X class_string[len] = '\0';
X class = class_string;
X if (len > strlen(class_string))
X name = class_string + strlen(class_string) + 1;
X if (name) {
X if (cp = XGetDefault(dpy, name, "showTitle"))
X if (*cp == 'n' || *cp == 'N' || !strcmp(cp, "off") ||
X !strcmp(cp, "Off") || !strcmp(cp, "false") ||
X !strcmp(cp, "False"))
X Leave((Window)NULL)
X }
X if (cp = XGetDefault(dpy, class, "showTitle"))
X if (*cp == 'n' || *cp == 'N' || !strcmp(cp, "off") ||
X !strcmp(cp, "Off") || !strcmp(cp, "false") ||
X !strcmp(cp, "False"))
X Leave((Window)NULL)
X }
X if (!awi) {
X fprintf(stderr, "AddTitle: Window %x is not registered!\n", w);
X Leave((Window)NULL)
X }
X XAddToSaveSet(dpy, awi->client);
X if (!init_done)
X Init_Titles();
X XGetGeometry(dpy, (Drawable)awi->client, &root, &x, &y, &width, &height,
X &bw, &depth);
X XGetWindowAttributes(dpy, awi->client, &xwa);
X valuemask = CWEventMask | CWBorderPixel | CWBackPixel;
X swa.event_mask = (SubstructureRedirectMask | SubstructureNotifyMask);
X if (BContext) {
X swa.event_mask |= (ButtonPressMask | ButtonReleaseMask);
X bch = (BContext * 2) + 2;
X bcv = BContext + 1;
X {
X XSetWindowAttributes cswa;
X
X cswa.do_not_propagate_mask =
X (ButtonPressMask | ButtonReleaseMask);
X XChangeWindowAttributes(dpy, awi->client, CWDontPropagate,
X &cswa);
X }
X
X }
X else
X bch = bcv = 0;
X if (FrameFocus)
X swa.event_mask |= (LeaveWindowMask | EnterWindowMask);
X swa.background_pixel = TBackground;
X swa.border_pixel = TForeground;
X if (TitlePush == FALSE)
X y -= (titleHeight + 2); /* put title above, don't push window down */
X foster = XCreateWindow(dpy, RootWindow(dpy, scr), x, y, width + bch,
X height + titleHeight + 2 + bcv,
X (bw ? bw : 1), xwa.depth, xwa.class, xwa.visual,
X valuemask, &swa);
X if (!foster)
X Error("AddTitle: Can't create foster parent!");
X if (BBackPixmapData) { /* we have a border context tile */
X awi->BC_back = XCreatePixmapFromBitmapData(dpy, foster,
X BBackPixmapData,
X BC_wide, BC_high,
X BForeground,
X BBackground, xwa.depth);
X if (!awi->BC_back)
X Error("AddTitle: Can't create pixmap for border context background");
X else
X XSetWindowBackgroundPixmap(dpy, foster, awi->BC_back);
X }
X if (BBoldPixmapData) { /* we have a bold border context tile */
X awi->BC_bold = XCreatePixmapFromBitmapData(dpy, foster,
X BBoldPixmapData,
X BCB_wide, BCB_high,
X BForeground,
X BBackground, xwa.depth);
X if (!awi->BC_bold)
X Error("AddTitle: Can't create bold pixmap for border context background");
X }
X
X swa.bit_gravity = CenterGravity;
X swa.event_mask = (ExposureMask | ButtonPressMask | ButtonReleaseMask);
X valuemask |= CWBitGravity;
X title = XCreateWindow(dpy, foster, 0, 0, (width - 2) + bch, titleHeight,
X 1, 0, CopyFromParent, CopyFromParent,
X valuemask, &swa);
X if (!title)
X Error("AddTitle: Can't create title bar!");
X if (TBackPixmapData) {
X awi->back = XCreatePixmapFromBitmapData(dpy, title, TBackPixmapData,
X TB_wide, TB_high,
X TForeground,
X TBackground, xwa.depth);
X if (!awi->back)
X Error("AddTitle: Can't create pixmap for title background");
X else
X XSetWindowBackgroundPixmap(dpy, title, awi->back);
X }
X if (TBoldPixmapData) {
X awi->bold = XCreatePixmapFromBitmapData(dpy, title, TBoldPixmapData,
X TBB_wide, TBB_high,
X TForeground,
X TBackground, xwa.depth);
X if (!awi->bold)
X Error("AddTitle: Can't create pixmap for bold background");
X }
X XSetWindowBorderWidth(dpy, awi->client, (BContext) ? 1 : 0);
X wc.sibling = awi->client;
X wc.stack_mode = Above;
X XConfigureWindow(dpy, foster, CWSibling|CWStackMode, &wc);
X swa.bit_gravity = CenterGravity;
X XChangeWindowAttributes(dpy, title, CWBitGravity, &swa);
X XDefineCursor(dpy, title, TitleCursor);
X XDefineCursor(dpy, foster, FrameCursor);
X XSelectInput(dpy, title, (ExposureMask | ButtonPressMask |
X ButtonReleaseMask));
X XMapWindow(dpy, title);
X if (!BContext)
X XReparentWindow(dpy, awi->client, foster, 0, titleHeight + 2);
X else
X XReparentWindow(dpy, awi->client, foster, BContext, titleHeight + 2);
X XMapWindow(dpy, awi->frame);
X XMapWindow(dpy, awi->client);
X XSync(dpy, 0);
X awi->title = title;
X awi->frame = foster;
X awi->border_width = bw;
X awi->name = GetTitleName(awi->client);
X /* Make titlebar "frame" inherit characteristics of victim */
X XStoreName(dpy, foster, awi->name);
X if (XGetIconName(dpy, w, &icon_name)) {
X XSetIconName(dpy, foster, icon_name);
X free(icon_name);
X }
X if (wm_hints = XGetWMHints(dpy, awi->client)) {
X XSetWMHints(dpy, foster, wm_hints);
X XFree(wm_hints);
X }
X XGetNormalHints(dpy, awi->client, &sz_hints);
X XSetNormalHints(dpy, foster, &sz_hints);
X XGetZoomHints(dpy, awi->client, &sz_hints);
X XSetZoomHints(dpy, foster, &sz_hints);
X class_hints.res_name = class_hints.res_class = (char *)NULL;
X if (XGetClassHint(dpy, awi->client, &class_hints) == Success)
X XSetClassHint(dpy, foster, &class_hints);
X
X XSaveContext(dpy, title, AwmContext, awi);
X XSaveContext(dpy, foster, AwmContext, awi);
X Leave(foster)
X}
X
Boolean FDestroyTitle(w, mask, button, x, y)
Window w;
int mask, button, x, y;
X{
X Entry("FDestroyTitle")
X
X if (w == RootWindow(dpy, scr))
X Leave(FALSE)
X DestroyTitle(w, FALSE);
X Leave(TRUE)
X}
X
void DestroyTitle(w)
Window w;
X{
X XWindowAttributes xwa;
X AwmInfoPtr awi;
X
X Entry("DestroyTitle")
X
X if (!(awi = IsTitled(w)))
X Leave_void
X XGetWindowAttributes(dpy, awi->frame, &xwa);
X /* put away our toys when we're done playing with them */
X if (TitlePush == FALSE)
X xwa.y += (titleHeight + 2);
X XReparentWindow(dpy, awi->client, RootWindow(dpy, scr), xwa.x,
X xwa.y);
X XSetWindowBorderWidth(dpy, awi->client, awi->border_width);
X DestroyGadgets(w);
X XDeleteContext(dpy, awi->frame, AwmContext);
X XDeleteContext(dpy, awi->title, AwmContext);
X XDestroyWindow(dpy, awi->title);
X XDestroyWindow(dpy, awi->frame);
X XSync(dpy, FALSE);
X if (awi->state != ICON)
X XRemoveFromSaveSet(dpy, awi->client);
X if (awi->back)
X XFreePixmap(dpy, awi->back);
X if (awi->bold)
X XFreePixmap(dpy, awi->bold);
X free(awi->name);
X awi->frame = awi->title = awi->back = awi->bold = 0;
X awi->name = (char *)NULL;
X Leave_void
X}
X
void PaintTitle(w)
Window w;
X{
X static GC gc, rgc;
X int x, y, ijunk;
X XWindowAttributes xwa;
X Window junk, chld;
X Boolean reversed;
X XFontStruct *f_info;
X AwmInfoPtr awi;
X XGCValues gcv;
X
X Entry("PaintTitle")
X
X if (!(awi = IsTitled(w)))
X Leave_void
X XGetWindowAttributes(dpy, awi->title, &xwa);
X XQueryPointer(dpy, awi->frame, &junk, &chld, &ijunk, &ijunk,
X &ijunk, &ijunk, &ijunk);
X reversed = (chld == awi->client && Hilite);
X if (reversed && TFontBoldInfo)
X f_info = TFontBoldInfo;
X else
X f_info = TFontInfo;
X gcv.font = f_info->fid;
X gcv.foreground = (reversed && !TFontBoldInfo) ?
X TTextBackground : TTextForeground;
X gcv.background = (reversed && !TFontBoldInfo) ?
X TTextForeground : TTextBackground;
X XChangeGC(dpy, awi->winGC, (GCFont | GCForeground | GCBackground), &gcv);
X XClearWindow(dpy, awi->title);
X if (ShowName) { /* print window names? */
X int textlen;
X
X textlen = XTextWidth(f_info, awi->name, strlen(awi->name));
X
X if (!NameOffset)
X x = (xwa.width - textlen) / 2;
X else {
X if (NameOffset < 0)
X x = (xwa.width - textlen) + NameOffset;
X else
X x = NameOffset;
X if (x + textlen > xwa.width)
X x = (xwa.width - textlen) + 1;
X }
X y = ((f_info->max_bounds.ascent + f_info->max_bounds.descent +
X xwa.height - 1) / 2) - (TitlePad * 2);
X XDrawImageString(dpy, awi->title, awi->winGC, x, y, awi->name,
X strlen(awi->name));
X }
X Leave_void
X}
X
AwmInfoPtr IsTitled(w)
Window w;
X{
X AwmInfoPtr tmp;
X
X Entry("IsTitled")
X
X if (!XFindContext(dpy, w, AwmContext, &tmp)) {
X if (tmp->title)
X Leave(tmp)
X }
X Leave((AwmInfoPtr)NULL)
X}
END_OF_FILE
if test 13616 -ne `wc -c <'awm/Titlebar.c'`; then
echo shar: \"'awm/Titlebar.c'\" unpacked with wrong size!
fi
# end of 'awm/Titlebar.c'
fi
if test -f 'awm/globals.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'awm/globals.c'\"
else
echo shar: Extracting \"'awm/globals.c'\" \(13669 characters\)
sed "s/^X//" >'awm/globals.c' <<'END_OF_FILE'
X#ident "%W% %G%"
X
X#ifndef lint
static char *rcsid_globals_c = "$Header: globals.c,v 1.1 88/06/15 15:26:00 jkh Exp $";
X#endif lint
X
X#include "X11/copyright.h"
X/*
X *
X * Copyright 1987, 1988 by Ardent Computer Corporation, Sunnyvale, Ca.
X *
X * Copyright 1987 by Jordan Hubbard.
X *
X *
X * All Rights Reserved
X *
X * Permission to use, copy, modify, and distribute this software and its
X * documentation for any purpose and without fee is hereby granted,
X * provided that the above copyright notice appear in all copies and that
X * both that copyright notice and this permission notice appear in
X * supporting documentation, and that the name of Ardent Computer
X * Corporation or Jordan Hubbard not be used in advertising or publicity
X * pertaining to distribution of the software without specific, written
X * prior permission.
X *
X */
X
X/*
X * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
X *
X * All Rights Reserved
X *
X * Permission to use, copy, modify, and distribute this software and its
X * documentation for any purpose and without fee is hereby granted,
X * provided that the above copyright notice appear in all copies and that
X * both that copyright notice and this permission notice appear in
X * supporting documentation, and that the name of Digital Equipment
X * Corporation not be used in advertising or publicity pertaining to
X * distribution of the software without specific, written prior permission.
X *
X *
X * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
X * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
X * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
X * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
X * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
X * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
X * SOFTWARE.
X */
X
X
X/*
X * MODIFICATION HISTORY
X *
X * 000 -- M. Gancarz, DEC Ultrix Engineering Group
X * 001 -- R. Kittell, DEC Storage A/D May 19, 1986
X * Added global vars for warp options.
X * 002 -- Loretta Guarino Reid, DEC Ultrix Engineering Group
X * Western Software Lab. April 17, 1987
X * Convert to X11
X * 003 -- Jordan Hubbard, U.C. Berkeley. Misc new vars.
X */
X
X#include "awm.h"
X#include "X11/Xutil.h"
X
Window Pop; /* Pop up dimension display window. */
Window Frozen; /* Contains window id of "gridded" window. */
XXFontStruct *IFontInfo; /* Icon text font information. */
XXFontStruct *PFontInfo; /* Pop-up text font information. */
XXFontStruct *TFontInfo; /* Title text font information. */
XXFontStruct *TFontBoldInfo; /* Title text (bold) font information. */
XXFontStruct *GFontInfo; /* Gadget box text font */
Pixmap GrayPixmap; /* Gray pixmap. */
Pixmap SolidPixmap; /* Solid pixmap */
Pixmap IBackPixmap; /* Icon window background pixmap. */
Pixel ForeColor; /* Generic foreground color */
Pixel BackColor; /* Generic background color */
Pixel IBorder; /* Icon window border color. */
Pixel PBorder; /* Pop-Up Window border color. */
Pixel WBorder; /* Window border color */
Pixel BBackground; /* Border context background color */
Pixel BForeground; /* Border context foreground color */
Pixel PBackground; /* Pop-up Window background color. */
Pixel PForeground; /* Pop-up Window foregrould color */
Pixel TBackground; /* Titlebar background color */
Pixel TForeground; /* Titlebar foreground color */
Pixel TTextBackground; /* Titlebar text background color */
Pixel TTextForeground; /* Titlebar text foreground color */
Pixel IBackground; /* Icon background (for pixmap) color */
Pixel IForeground; /* Icon foreground (for pixmap) color */
Pixel ITextForeground; /* Icon text foreground color */
Pixel ITextBackground; /* Icon text background color */
Cursor ArrowCrossCursor; /* Arrow cross cursor. */
Cursor TextCursor; /* Text cursor used in icon windows. */
Cursor IconCursor; /* Icon Cursor. */
Cursor LeftButtonCursor; /* Left button main cursor. */
Cursor MiddleButtonCursor; /* Middle button main cursor. */
Cursor RightButtonCursor; /* Right button main cursor. */
Cursor TargetCursor; /* Target (select-a-window) cursor. */
Cursor TitleCursor; /* Titlebar cursor */
Cursor FrameCursor; /* Border context cursor */
int GadgetBorder; /* Width of gadget borders */
int ScreenWidth; /* Display screen width. */
int ScreenHeight; /* Display screen height. */
int IBorderWidth; /* Icon window border width. */
int TitleHeight; /* Height of title bar(s) (in pixels) */
int titleHeight; /* Derived height of title bar(s) in pixels */
int gadgetHeight; /* Height of highest gadget */
int NameOffset; /* Offset for window name */
int TitlePad; /* Padding for titles */
int PWidth; /* Pop-up window width. */
int PHeight; /* Pop-up window height. */
int PBorderWidth; /* Pop-up window border width. */
int PPadding; /* Pop-up window padding. */
int Delta; /* Mouse movement slop. */
int HIconPad; /* Icon horizontal padding. */
int VIconPad; /* Icon vertical padding. */
int MaxColors; /* Maximum number of colors to use. */
int Pushval; /* Number of pixels to push window by. */
int BContext; /* Border context area width (in pixels) */
int RaiseDelay; /* Number of milliseconds delay before autoraise */
int NumGadgets; /* Number of gadgets we're using */
int GadgetPad; /* Amount of padding for gadgets */
int Volume; /* Audible alarm volume. */
int status; /* Routine return status. */
int Maxfd; /* Maximum file descriptors for select(2). */
int BCursor; /* Border context cursor */
int TCursor; /* Title context cursor */
MenuLink *Menus; /* Linked list of menus. */
GC IconGC; /* graphics context for icon */
GC PopGC; /* graphics context for pop */
GC DrawGC; /* graphics context for drawing */
Binding *Blist; /* Button/key binding list. */
X
XXContext AwmContext; /* Main context for awm */
X
Boolean Autoselect; /* Warp mouse to default menu selection? */
Boolean Autoraise; /* Raise window on input focus? */
Boolean ConstrainResize; /* Don't resize until pointer leaves window */
Boolean Freeze; /* Freeze server during move/resize? */
Boolean Grid; /* Should the m/r box contain a 9 seg. grid. */
Boolean ShowName; /* If True, print window names in titlebars */
Boolean Hilite; /* Should we highlight titles on focus? */
Boolean BorderHilite; /* Should we highlight borders on focus? */
Boolean NWindow; /* Normalize windows? */
Boolean NIcon; /* Normalize icons? */
Boolean Push; /* Relative=TRUE, Absolute=FALSE. */
Boolean RootResizeBox; /* Resize window is placed over sized window? */
Boolean ResizeRelative; /* resizes should be relative to window edge */
Boolean Titles; /* Title bar frob on windows? */
Boolean UseGadgets; /* Gadget bars on titles? */
Boolean FrameFocus; /* Treat the frame as part of the window? */
Boolean Reverse; /* Reverse video? */
Boolean SaveUnder; /* Save unders? */
Boolean TitlePush; /* Down=TRUE, Up=FALSE */
Boolean Wall; /* restrict to root window boundries? */
Boolean WarpOnRaise; /* Warp to upper right corner on raise. */
Boolean WarpOnIconify; /* Warp to icon center on iconify. */
Boolean WarpOnDeIconify; /* Warp to upper right corner on de-iconify. */
Boolean FocusSetByUser; /* True if f.focus called */
Boolean Zap; /* Should the the zap effect be used. */
X
char PText[7] = INIT_PTEXT; /* Pop-up window dummy text. */
int PTextSize = sizeof(PText); /* Pop-up window dummy text size. */
X
int Lineno = 1; /* Line count for parser. */
Boolean Startup_File_Error = FALSE;/* Startup file error flag. */
char Startup_File[NAME_LEN] = "";/* Startup file name. */
char *TBackPixmapData; /* Bitmap data file title background */
char *TBoldPixmapData; /* ditto, except highlighted */
char *BBackPixmapData; /* Border context background pixmap data */
char *BBoldPixmapData; /* Border context bold pixmap data */
char *awmPath; /* Optional pathlist to search for pixmaps */
char **Argv; /* Pointer to command line parameters. */
char **Environ; /* Pointer to environment. */
X
char gray_bits[] = {
X 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa,
X 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa,
X 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa,
X 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa
X};
X
char solid_bits[] = {
X 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
X 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
X};
X
int scr;
Display *dpy;
X
X#ifdef NEATEN
int AbsMinWidth;
int AbsMinHeight;
Boolean RetainSize;
Boolean KeepOpen;
Boolean Fill;
Boolean UsePriorities;
Boolean FixTopOfStack;
char *PrimaryIconPlacement;
char *SecondaryIconPlacement;
X#endif
X
X/*
X * Keyword lookup table for parser.
X */
Keyword KeywordTable[] =
X{
X { "autoselect", IsBoolean, &Autoselect, 0 },
X { "autoraise", IsBoolean, &Autoraise, 0 },
X { "freeze", IsBoolean, &Freeze, 0 },
X { "hilite", IsBoolean, &Hilite, 0 },
X { "rootResizeBox", IsBoolean, &RootResizeBox, 0 },
X { "titles", IsBoolean, &Titles, 0 },
X { "gadgets", IsBoolean, &UseGadgets, 0 },
X { "grid", IsBoolean, &Grid, 0 },
X { "showName", IsBoolean, &ShowName, 0,},
X { "normali", IsBoolean, &NIcon, 0 },
X { "normalw", IsBoolean, &NWindow, 0 },
X { "pushRelative", IsBoolean, &Push, 0 },
X { "reverse", IsBoolean, &Reverse, 0 },
X { "wall", IsBoolean, &Wall, 0 },
X { "warpOnIconify", IsBoolean, &WarpOnIconify, 0 },
X { "warpOnDeIconify",IsBoolean, &WarpOnDeIconify, 0 },
X { "warpOnRaise", IsBoolean, &WarpOnRaise, 0 },
X#ifdef NEATEN
X { "retainSize", IsBoolean, &RetainSize, 0 },
X { "keepOpen", IsBoolean, &KeepOpen, 0 },
X { "fill", IsBoolean, &Fill, 0 },
X { "usePriorities", IsBoolean, &UsePriorities },
X { "fixTopOfStack", IsBoolean, &FixTopOfStack },
X#endif
X { "zap", IsBoolean, &Zap, 0 },
X { "gadget", IsGadget, 0, 0 },
X { "f.beep", IsImmFunction, 0, Beep },
X { "f.circledown", IsImmFunction, 0, CircleDown },
X { "f.circleup", IsImmFunction, 0, CircleUp },
X { "f.continue", IsImmFunction, 0, Continue },
X { "f.exit", IsQuitFunction, 0, Quit },
X { "f.focus", IsFunction, 0, Focus },
X { "f.iconify", IsFunction, 0, Iconify },
X { "f.lower", IsFunction, 0, Lower },
X { "f.menu", IsMenuMap, 0, DoMenu },
X { "f.action", IsAction, 0, DoAction },
X { "f.move", IsDownFunction, 0, Move },
X { "f.moveopaque", IsDownFunction, 0, MoveOpaque },
X { "f.newiconify", IsDownFunction, 0, NewIconify },
X { "f.neaten", IsImmFunction, 0, Neaten },
X { "f.pause", IsImmFunction, 0, Pause },
X { "f.pushdown", IsFunction, 0, PushDown },
X { "f.pushleft", IsFunction, 0, PushLeft },
X { "f.pushright", IsFunction, 0, PushRight },
X { "f.pushup", IsFunction, 0, PushUp },
X { "f.raise", IsFunction, 0, Raise },
X { "f.redraw", IsDownFunction, 0, Redraw },
X { "f.refresh", IsImmFunction, 0, Refresh },
X { "f.resize", IsDownFunction, 0, Resize },
X { "f.restart", IsQuitFunction, 0, Restart },
X { "f.destroy", IsDownFunction, 0, DestroyClient },
X { "f.title", IsFunction, 0, FAddTitle },
X { "f.gadgets", IsFunction, 0, FPutGadgets },
X { "f.notitle", IsFunction, 0, FDestroyTitle },
X { "f.nogadgets", IsFunction, 0, FDestroyGadgets },
X { "menu", IsMenu, 0, 0 },
X { "resetbindings", IsParser, 0, ResetBindings },
X { "resetmenus", IsParser, 0, ResetMenus },
X { "resetgadgets", IsParser, 0, ResetGadgets },
X { NULL, NULL, NULL, NULL }
X};
X
X/*
X * Key expression table for parser.
X */
KeyExpr KeyExprTbl[] = {
X { "ctrl", ControlMask },
X { "c", ControlMask },
X { "lock", LockMask },
X { "l", LockMask },
X { "meta", Mod1Mask },
X { "m", Mod1Mask },
X { "shift", ShiftMask },
X { "s", ShiftMask },
X { "mod1", Mod1Mask },
X { "mod2", Mod2Mask },
X { "mod3", Mod3Mask },
X { "mod4", Mod4Mask },
X { "mod5", Mod5Mask },
X { NULL, NULL }
X};
X
X/*
X * Context expression table for parser.
X */
ContExpr ContExprTbl[] = {
X { "icon", ICON },
X { "i", ICON },
X { "root", ROOT },
X { "r", ROOT },
X { "window", WINDOW },
X { "w", WINDOW },
X { "t", TITLE },
X { "title", TITLE },
X { "g", GADGET },
X { "gadget", GADGET },
X { "border", BORDER },
X { "b", BORDER },
X { NULL, NULL }
X};
X
X/*
X * Gravity expressions for parser.
X */
GravityExpr GravityExprTbl[] = {
X { "noGravity", NoGadgetGravity },
X { "nogravity", NoGadgetGravity },
X { "NoGravity", NoGadgetGravity },
X { "leftGravity", LeftGadgetGravity },
X { "leftgravity", LeftGadgetGravity },
X { "LeftGravity", LeftGadgetGravity },
X { "rightGravity", RightGadgetGravity },
X { "rightgravity", RightGadgetGravity },
X { "RightGravity", RightGadgetGravity },
X { "centerGravity", CenterGadgetGravity },
X { "centerGravity", CenterGadgetGravity },
X { "CenterGravity", CenterGadgetGravity },
X { NULL, NULL}
X};
X
X/*
X * Button expression table for parser.
X */
ButtonModifier ButtModTbl[] = {
X { "left", LeftMask },
X { "leftbutton", LeftMask },
X { "l", LeftMask },
X { "middle", MiddleMask },
X { "middlebutton", MiddleMask },
X { "m", MiddleMask },
X { "right", RightMask },
X { "rightbutton", RightMask },
X { "r", RightMask },
X { "move", DeltaMotion },
X { "motion", DeltaMotion },
X { "delta", DeltaMotion },
X { "boogie", DeltaMotion },
X { "truckin", DeltaMotion }, /* it's been a silly day... */
X { "down", ButtonDown },
X { "d", ButtonDown },
X { "up", ButtonUp },
X { "u", ButtonUp },
X { NULL, NULL }
X};
X
END_OF_FILE
if test 13669 -ne `wc -c <'awm/globals.c'`; then
echo shar: \"'awm/globals.c'\" unpacked with wrong size!
fi
# end of 'awm/globals.c'
fi
echo shar: End of archive 9 \(of 17\).
cp /dev/null ark9isdone
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