jkh@ardent.UUCP (Jordan K. Hubbard) (06/06/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 5 (of 8)." # Contents: Neaten.c Resize.c awm.h # Wrapped by jkh@ardent on Sun Jun 5 18:56:33 1988 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'Neaten.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'Neaten.c'\" else echo shar: Extracting \"'Neaten.c'\" \(13808 characters\) sed "s/^X//" >'Neaten.c' <<'END_OF_FILE' X#include "awm.h" X X#ifdef NEATEN X X#include "X11/Xutil.h" X#include "X11/cursorfont.h" X#include "neaten.ext.h" X static void GetIconHints(); static void GetName(); extern Boolean IsIcon(); extern int neaten_debug_level; extern int Fheight; X X#define TOP_LEVEL (awi->frame ? awi->frame : awi->client) X X/* ARGSUSED */ Boolean Neaten(window, mask, button, x, y) Window window; /* Event window. */ int mask; /* Button/key mask. */ int button; /* Button event detail. */ int x, y; /* Event mouse position. */ X{ X Window junk_window; X Window w; X Window icon_window; X Window stacktop; X Window *children; X XWindowAttributes attrs; X XSizeHints hints; X XWindowChanges wc; X Status rstatus; X char name[50]; X int junk; X int root_x, root_y; X int root_width, root_height; X int icon_x, icon_y; X int icon_width, icon_height; X int icon_border; X int window_x, window_y; X int window_width, window_height; X int rval; X int ix; X int iconic; X int tiled; X int adjustment; X int priority; X int priority_increment; X unsigned int nchildren; X unsigned int mapped_children = 0; X unsigned int opened_children = 0; X unsigned int wcmask; X Placement primary; X Placement secondary; X Boolean is_iconic; X Cursor rtlcursor; X XFontStruct *font; X GC gc; X AwmInfoPtr awi; X X Entry("Neaten") X X font = (XFontStruct *) XLoadQueryFont(dpy, "cursor"); X gc = DefaultGC(dpy, scr); X XSetFont(dpy, gc, font->fid); X X rtlcursor = XCreateFontCursor(dpy, XC_rtl_logo); X X XGrabPointer(dpy, RootWindow(dpy, scr), FALSE, (unsigned int) 0, X GrabModeAsync, GrabModeAsync, X (Window) None, rtlcursor, CurrentTime); X X if (AbsMinWidth == 0) X AbsMinWidth = DEFAULT_ABS_MIN; X if (AbsMinHeight == 0) X AbsMinHeight = DEFAULT_ABS_MIN; X X XGetGeometry(dpy, RootWindow(dpy, scr), &junk_window, X &root_x, &root_y, X &root_width, &root_height, X &junk, &junk); X X Neaten_Initialize(root_width+SEPARATION, X root_height+SEPARATION, X AbsMinWidth, AbsMinHeight); X X if (strcmp(PrimaryIconPlacement, "Closest") == 0) X primary = Place_Closest; X else if (strcmp(PrimaryIconPlacement, "Top") == 0) X primary = Place_Top; X else if (strcmp(PrimaryIconPlacement, "Bottom") == 0) X primary = Place_Bottom; X else if (strcmp(PrimaryIconPlacement, "Left") == 0) X primary = Place_Left; X else if (strcmp(PrimaryIconPlacement, "Right") == 0) X primary = Place_Right; X else X primary = Place_Top; X X if (strcmp(SecondaryIconPlacement, "Closest") == 0) X secondary = Place_Closest; X else if (strcmp(SecondaryIconPlacement, "Top") == 0) X secondary = Place_Top; X else if (strcmp(SecondaryIconPlacement, "Bottom") == 0) X secondary = Place_Bottom; X else if (strcmp(SecondaryIconPlacement, "Left") == 0) X secondary = Place_Left; X else if (strcmp(SecondaryIconPlacement, "Right") == 0) X secondary = Place_Right; X else if (strcmp(SecondaryIconPlacement, "Center") == 0) X secondary = Place_Center; X else X secondary = Place_Left; X X Neaten_Icon_Placement(primary, secondary); X X if (XQueryTree(dpy, RootWindow(dpy, scr), &junk_window, X &junk_window, &children, &nchildren)) X { X for (ix = 0; ix < nchildren; ix++) X { X XGetWindowAttributes(dpy, children[ix], &attrs); X X if ((attrs.map_state != IsUnmapped) && X (attrs.override_redirect == False) && X (awi = GetAwmInfo(children[ix]))) X { X w = children[ix]; X if (w != TOP_LEVEL && w != awi->icon) X continue; X mapped_children++; X X is_iconic = IsIcon(w, (Window *) NULL); X X if (is_iconic == TRUE) X { X window_x = window_y = X window_width = window_height = 0; X icon_x = attrs.x; X icon_y = attrs.y; X icon_width = attrs.width; X icon_height = attrs.height; X X adjustment = SEPARATION; X icon_width += adjustment; X icon_height += adjustment; X } X else X { X window_x = attrs.x; X window_y = attrs.y; X window_width = attrs.width; X window_height = attrs.height; X X window_x -= attrs.border_width; X window_y -= attrs.border_width; X X adjustment = (2 * attrs.border_width) + SEPARATION; X window_width += adjustment; X window_height += adjustment; X X GetIconHints(w, &icon_x, &icon_y, X &icon_width, &icon_height, &icon_border); X X icon_x -= icon_border; X icon_y -= icon_border; X icon_width += (2 * icon_border) + SEPARATION; X icon_height += (2 * icon_border) + SEPARATION; X X opened_children++; X stacktop = TOP_LEVEL; X } X X GetName(w, name); X if(neaten_debug_level) X { X printf("%s\ticonic = %s\n", X name, (is_iconic ? "TRUE" : "FALSE")); X printf("\ticon: x = %d y = %d width = %d height = %d\n", X icon_x, icon_y, icon_width, icon_height); X if (is_iconic != TRUE) X printf("\twindow: x = %d y = %d width = %d height = %d\n", X window_x, window_y, window_width, X window_height); X } X X Neaten_Identify((int) w, is_iconic, X NEATEN_TRUE, NEATEN_FALSE, X window_x, window_y, X window_width, window_height, X NEATEN_TRUE, NEATEN_FALSE, X icon_x, icon_y, X icon_width, icon_height, X (unsigned long) adjustment); X X rstatus = XGetNormalHints(dpy, w, &hints); X if (rstatus != (Status) 0 && is_iconic != TRUE) X { X if (hints.flags & PMinSize) X { X rval = Neaten_Set_Min((int) w, X hints.min_width+adjustment, X hints.min_height+adjustment); X if(neaten_debug_level) X printf("\tmin: width = %d height = %d status = %s\n", X hints.min_width, hints.min_height, X (rval ? "SUCCESS" : "FAILURE")); X } X if (hints.flags & PMaxSize) X { X rval = Neaten_Set_Max((int) w, X hints.max_width+adjustment, X hints.max_height+adjustment); X if(neaten_debug_level) X printf("\tmax: width = %d height = %d status = %s\n", X hints.max_width, hints.max_height, X (rval ? "SUCCESS" : "FAILURE")); X } X if (hints.flags & (USSize | PSize)) X { X rval = Neaten_Set_Desired((int) w, X hints.width+adjustment, X hints.height+adjustment); X if(neaten_debug_level) X printf("\tdes: width = %d height = %d status = %s\n", X hints.width, hints.height, X (rval ? "SUCCESS" : "FAILURE")); X } X X /* if no max hints are given, set the max to the X max of the desired and current size X */ X if (!(hints.flags & PMaxSize)) X { X int desired_width = hints.width+adjustment; X int desired_height = hints.height+adjustment; X X window_width = ((window_width > desired_width) X ? window_width : X desired_width); X window_height = ((window_height > desired_height) X ? window_height : X desired_height); X rval = Neaten_Set_Max((int) w, X window_width, X window_height); X if(neaten_debug_level) X printf("\tmax: width = %d height = %d status = %s\n", X window_width-adjustment, window_height-adjustment, X (rval ? "SUCCESS" : "FAILURE")); X } X } X } X } X X if (UsePriorities == TRUE) X { X priority = MIN_PRIORITY; X if (opened_children > 1) X priority_increment = (MAX_PRIORITY - MIN_PRIORITY) / X (opened_children - 1); X for (ix = 0; ix < nchildren; ix++) X { X w = children[ix]; X awi = GetAwmInfo(w); X if (!awi) X continue; X if (w != TOP_LEVEL && w != awi->icon) X continue; X is_iconic = IsIcon(w, (Window *) NULL); X X if (is_iconic != TRUE) X { X XGetWindowAttributes(dpy, w, &attrs); X if ((attrs.map_state != IsUnmapped) && X (attrs.override_redirect == False)) X { X Neaten_Set_Priorities((int) w, priority, priority); X if (neaten_debug_level) X { X GetName(w, name); X printf("%s: priority = %d\n", name, priority); X } X priority += priority_increment; X } X } X } X } X X if (FixTopOfStack == TRUE) X { X Neaten_Set_Options((int) stacktop, NEATEN_FALSE, NEATEN_TRUE); X if (neaten_debug_level) X { X GetName(stacktop, name); X printf("stacktop = %s\n", name); X } X } X X if(neaten_debug_level) X printf("mapped children = %d\topened_children = %d\n", X mapped_children, opened_children); X X Neaten_Desktop((RetainSize == FALSE), (KeepOpen == FALSE), Fill); X X for (ix = 0; ix < nchildren; ix++) X { X w = children[ix]; X awi = GetAwmInfo(w); X if (!awi) X continue; X if (w != TOP_LEVEL && w != awi->icon) X continue; X if (Neaten_Get_Geometry((int) w, &iconic, &tiled, X &window_x, &window_y, X &window_width, &window_height, X &(unsigned long) adjustment) == 0) X continue; X GetName(w, name); X if(neaten_debug_level) X { X printf("%s iconic = %s tiled = %s\n", name, X (iconic ? "TRUE" : "FALSE"), X (tiled ? "TRUE" : "FALSE")); X printf(" x = %d, y = %d, width = %d, height = %d\n", X window_x, window_y, window_width, window_height); X } X X wc.x = window_x; X wc.y = window_y; X wc.width = window_width; X wc.height = window_height; X wcmask = CWX | CWY | CWWidth | CWHeight; X X if (iconic == NEATEN_TRUE) X { X is_iconic = IsIcon(w, &icon_window); X if (is_iconic == TRUE) X { X wc.width -= adjustment; X wc.height -= adjustment; X X XConfigureWindow(dpy, w, wcmask, &wc); X if(tiled != NEATEN_TRUE) X XRaiseWindow(dpy, w); X } X else X { X /* have to go to the server to get the info, this X could have been avoided if the the variable X adjustment was a pointer to a structure that X contained the information for the icon and the X information for the window. However, I chose X not to mess with all that memory management X */ X GetIconHints(w, &icon_x, &icon_y, X &icon_width, &icon_height, &icon_border); X X wc.x -= icon_border; X wc.y -= icon_border; X wc.width -= (2 * icon_border) + SEPARATION; X wc.height -= (2 * icon_border) + SEPARATION; X X XAddToSaveSet(dpy, w); X XUnmapWindow(dpy, TOP_LEVEL); X XConfigureWindow(icon_window, wcmask, &wc); X XMapWindow(dpy, icon_window); X if (tiled != NEATEN_TRUE) X XRaiseWindow(dpy, icon_window); X } X } X else X { X wc.width -= adjustment; X wc.height -= adjustment; X adjustment -= SEPARATION; X wc.x += adjustment/2; X wc.y += adjustment/2; X /* I think this will be the outer win */ X ConfigureWindow(w, wcmask, &wc); X if(tiled != NEATEN_TRUE) X XRaiseWindow(dpy, TOP_LEVEL); X } X } X X if (FixTopOfStack == TRUE) X XRaiseWindow(dpy, stacktop); X X XFree(children); X } X X XBell(dpy, VOLUME_PERCENTAGE(Volume)); X XUngrabPointer(dpy, CurrentTime); X Leave(FALSE) X} X static void X GetIconHints(window, x, y, width, height, border) Window window; int *x, *y, *width, *height, *border; X{ X Window root; X XWMHints *wmhints; X XWindowAttributes attrs; X int junk; X X *border = *x = *y = 0; X /* X * Process window manager hints. X */ X if (wmhints = XGetWMHints(dpy, window)) X { X if (wmhints->flags&IconWindowHint) X { X XGetWindowAttributes(dpy, wmhints->icon_window, &attrs); X *x = attrs.x; X *y = attrs.y; X *width = attrs.width; X *height = attrs.height; X *border = attrs.border_width; X } X else if (wmhints->flags&IconPixmapHint) X { X XGetWindowAttributes(dpy, wmhints->icon_pixmap, &attrs); X *width = attrs.width; X *height = attrs.height; X } X else X { X GetDefaultSize(window, width, height); X } X } X else X { X GetDefaultSize(window, width, height); X } X X /* X * Fix up sizes by padding. X */ X if (!wmhints || !(wmhints->flags&(IconPixmapHint|IconWindowHint))) { X *width += (HIconPad << 1); X *height += (VIconPad << 1); X } X X if (wmhints && (wmhints->flags&IconPositionHint)) { X *x = wmhints->icon_x; X *y = wmhints->icon_y; X } X} X static void X GetName(w, name) Window w; char *name; X{ X Status rstatus; X char *s = (char *) NULL; X X X rstatus = XFetchName(dpy, w, &s); X X if (rstatus != (Status) 0 && s != (char *) NULL) X { X strcpy(name, s); X XFree(s); X } X else X { X strcpy(name, "UNKNOWN"); X } X} X void NeatenDebug(window, left, top, width, height, adjustment) int window; int left, top; int width, height; unsigned long adjustment; X{ X Window w = (Window) window; X X left += (int) ((float)adjustment/2.0); X top += (int) ((float)adjustment/2.0); X X width -= adjustment; X height -= adjustment; X X XMoveResizeWindow(dpy, w, left, top, width, height); X XFlush(dpy); X} X#else /* NEATEN not installed */ Boolean Neaten(window, mask, button, x, y) Window window; /* Event window. */ int mask; /* Button/key mask. */ int button; /* Button event detail. */ int x, y; /* Event mouse position. */ X{ X fprintf(stderr, "awm: Warning: Neaten package not installed in "); X fprintf(stderr, "this version of of awm.\n"); X} X#endif NEATEN END_OF_FILE if test 13808 -ne `wc -c <'Neaten.c'`; then echo shar: \"'Neaten.c'\" unpacked with wrong size! fi # end of 'Neaten.c' fi if test -f 'Resize.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'Resize.c'\" else echo shar: Extracting \"'Resize.c'\" \(14728 characters\) sed "s/^X//" >'Resize.c' <<'END_OF_FILE' X#ifndef lint X static char *rcsid_Resize_c = "$Header: Resize.c,v 1.18 87/09/09 12:01:04 swick Exp $"; X#endif lint X X#include "X11/copyright.h" 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/* X * MODIFICATION HISTORY X * X * 000 -- M. Gancarz, DEC Ultrix Engineering Group X * 001 -- Loretta Guarino Reid, DEC Ultrix Engineering Group X * Convert to X11 X * 002 -- Jordan Hubbard, U.C. berkeley. X * Added alternate placement of resize window, code for title bar X * support. X */ X X#ifndef lint static char *sccsid = "@(#)Resize.c 3.8 1/24/86"; X#endif X X#include "awm.h" X#include "X11/Xutil.h" X X#define max(a,b) ( (a) > (b) ? (a) : (b) ) X#define min(a,b) ( (a) > (b) ? (b) : (a) ) X#define makemult(a, b) ((b==1) ? (a) : (((int)((a) / (b))) * (b)) ) X extern int Fheight; X Boolean Resize(window, mask, button, x0, y0) Window window; /* Event window. */ int mask; /* Button/key mask. */ int button; /* Button event detail. */ int x0, y0; /* Event mouse position. */ X{ X XWindowAttributes client_info; /* client window info. */ X XWindowAttributes frame_info; /* frame window info */ X int x1, y1; /* fixed box corner */ X int x2, y2; /* moving box corner */ X int x, y; X int xinc, yinc; X int minwidth, minheight; X int maxwidth, maxheight; X int defwidth, defheight; X int ox, oy; /* which quadrant of window */ X int pop_x, pop_y; /* location of pop window */ X int hsize, vsize; /* dynamic size */ X int delta; X int junk_x, junk_y; X int ptrmask; /* pointer status word */ X int num_vectors; /* Number of vectors to XDraw. */ X Window assoc; /* Window represented by the icon. */ X Window sub_win; /* Mouse query sub window. */ X Window root; /* Root query window. */ X XEvent button_event, *b_ev; /* Button event packet. */ X XSegment box[MAX_BOX_VECTORS]; /* Box drawing vertex buffer. */ X XSegment zap[MAX_ZAP_VECTORS]; /* Zap drawing vertex buffer. */ X Boolean stop; /* Should the window stop changing? */ X XSizeHints sizehints; X XWindowChanges values; X int width_offset, height_offset; /* to subtract if resize increments */ X int x_offset, y_offset; /* add to pointer to get anchor */ X AwmInfoPtr awi; X int (*storegrid_func)(); /* which StoreGrid routine to use */ X int (*storebox_func)(); /* which StoreBox routing to use */ X int buttonConfirmEvent; X X Entry("Resize") X X /* X * Do nothing if the event window is the root window. X */ X if (window == RootWindow(dpy, scr)) X Leave(FALSE) X X /* X * Gather info about the event window. X */ X awi = GetAwmInfo(window); X if (!awi) X Leave(FALSE) X /* X * Do not resize an icon window. X */ X if (window == awi->icon) X Leave(FALSE) X X window = awi->client; X b_ev = &button_event; X buttonConfirmEvent = ButtonRelease; X X status = XGetWindowAttributes(dpy, window, &client_info); X if (status == FAILURE) X Leave(FALSE) X X if (awi->frame) { /* we have to compensate */ X status = XGetWindowAttributes(dpy, awi->frame, &frame_info); X if (status == FAILURE) X Leave(FALSE) X client_info.x = frame_info.x + (BContext ? BContext + 1 : 0); X client_info.y = frame_info.y + Fheight + 2; X } X X /* X * Clear the vector buffers. X */ X bzero(box, sizeof(box)); X if (Zap) X bzero(zap, sizeof(zap)); X storegrid_func = StoreGridBox; X storebox_func = StoreBox; X X /* X * If we are here then we have a resize operation in progress. X */ X X /* X * Turn on the resize cursor. X */ X grab_pointer(); X X /* X * calculate fixed point (x1, y1) and varying point (x2, y2). X */ X hsize = defwidth = client_info.width; X vsize = defheight = client_info.height; X x1 = client_info.x; X y1 = client_info.y; X x2 = x1 + hsize; X y2 = y1 + vsize; X X /* X * Get the event window resize hint. X */ X sizehints.flags = 0; X XGetSizeHints(dpy, window, &sizehints, XA_WM_NORMAL_HINTS); X CheckConsistency(&sizehints); X X /* until there are better WM_HINTS, we'll assume that the client's X * minimum width and height are the appropriate offsets to subtract X * when resizing with an explicit resize increment. X */ X if ((sizehints.flags & PMinSize) && (sizehints.flags & PResizeInc)) { X width_offset = sizehints.min_width; X height_offset = sizehints.min_height; X } else X width_offset = height_offset = 0; X X /* X * decide what resize mode we are in. Always rubberband if window X * is too small. X */ X if (client_info.width > 2 && client_info.height > 2) { X ox = ((x0 - client_info.x) * 3) / client_info.width; X oy = ((y0 - client_info.y) * 3) / client_info.height; X if ((ox + oy) & 1) { X if (ox & 1) { X /* fix up size hints so that we will never change width */ X sizehints.min_width = sizehints.max_width = client_info.width; X if ((sizehints.flags & PMinSize) == 0) { X sizehints.min_height = 0; X sizehints.flags |= PMinSize; X } X if ((sizehints.flags & PMaxSize) == 0) { X sizehints.max_height = DisplayHeight(dpy, scr); X sizehints.flags |= PMaxSize; X } X } X if (oy & 1) { X /* fix up size hints so that we will never change height */ X sizehints.min_height = sizehints.max_height = client_info.height; X if ((sizehints.flags & PMinSize)==0) { X sizehints.min_width = 0; X sizehints.flags |= PMinSize; X } X if ((sizehints.flags & PMaxSize)==0) { X sizehints.max_width = DisplayWidth(dpy, scr); X sizehints.flags |= PMaxSize; X } X } X } X } X else ox = oy = 2; X /* change fixed point to one that shouldn't move */ X if (oy == 0) { X y = y1; y1 = y2; y2 = y; X } X if (ox == 0) { X x = x1; x1 = x2; x2 = x; X } X if (sizehints.flags & PMinSize) { X minwidth = sizehints.min_width; X minheight = sizehints.min_height; X } else { X minwidth = 0; X minheight = 0; X } X if (sizehints.flags & PMaxSize) { X maxwidth = max(sizehints.max_width, minwidth); X maxheight = max(sizehints.max_height, minheight); X } else { X maxwidth = DisplayWidth(dpy, scr); X maxheight = DisplayHeight(dpy, scr); X } X if (sizehints.flags & PResizeInc) { X xinc = sizehints.width_inc; X yinc = sizehints.height_inc; X } else { X xinc = 1; X yinc = 1; X } X switch (ox) { X case 0: X pop_x = x1 - PWidth; X break; X case 1: X pop_x = x1 + (hsize - PWidth) / 2; X break; X case 2: X pop_x = x1; X break; X } X switch (oy) { X case 0: X pop_y = y1 - PHeight; X break; X case 1: X pop_y = y1 + (vsize - PHeight) / 2; X break; X case 2: X pop_y = y1; X break; X } X /* X * Double expose on the target window is too expensive for some reason X * or another. Paint the popup window in the upper left hand X * corner of the screen if RootResizeBox is FALSE. This is also X * more-or-less consistent with the position of the map request popup. X */ X if (RootResizeBox == TRUE) X values.x = values.y = 0; X else { X if (pop_x < 0 || pop_x > (DisplayWidth(dpy, scr) - PWidth)) X pop_x = 0; X if (pop_y < 0 || pop_y > (DisplayHeight(dpy, scr) - PHeight)) X pop_y = 0; X values.x = pop_x; X values.y = pop_y; X } X values.stack_mode = Above; X XConfigureWindow(dpy, Pop, CWX|CWY|CWStackMode, &values); X XMapWindow(dpy, Pop); X if (Grid) { X num_vectors = (*storegrid_func)(box, X MIN(x1, x2), MIN(y1, y2), X MAX(x1, x2), MAX(y1, y2)); X } X else { X num_vectors = (*storebox_func)(box, X MIN(x1, x2), MIN(y1, y2), X MAX(x1, x2), MAX(y1, y2)); X } X X /* X * If we freeze the server, then we will draw solid X * lines instead of flickering ones during resizing. X */ X if (Freeze) X XGrabServer(dpy); X /* protect us from ourselves */ X Snatched = True; X /* X * Process any pending exposure events before drawing the box. X */ X while (QLength(dpy) > 0) { X XPeekEvent(dpy, b_ev); X if (b_ev->xany.window == RootWindow(dpy, scr)) X break; X GetButton(b_ev); X } X if (ResizeRelative) { X x_offset = x2 - x0; X y_offset = y2 - y0; X } X else X x_offset = y_offset = 0; X X /* X * Now draw the box. X */ X DrawBox(); X Frozen = window; X X stop = FALSE; X x = -1; y = -1; X X while (!stop) { X if (x != x2 || y != y2) { X x = x2; y = y2; X X /* X * If we've frozen the server, then erase X * the old box. X */ X if (Freeze) X DrawBox(); X X if (Grid) { X num_vectors = (*storegrid_func)(box, X MIN(x1, x), MIN(y1, y), X MAX(x1, x), MAX(y1, y)); X } X else { X num_vectors = (*storebox_func)(box, X MIN(x1, x), MIN(y1, y), X MAX(x1, x), MAX(y1, y)); X } X X if (Freeze) X DrawBox(); X X { X int Hsize = (hsize - width_offset) / xinc; X int Vsize = (vsize - height_offset) / yinc; X int pos = 4; X PText[0] = (Hsize>99) ? (Hsize / 100 + '0') : ' '; X PText[1] = (Hsize>9) ? ((Hsize / 10) % 10 + '0') : ' '; X PText[2] = Hsize % 10 + '0'; X if (Vsize>99) PText[pos++] = Vsize / 100 + '0'; X if (Vsize>9) PText[pos++] = (Vsize / 10) % 10 + '0'; X PText[pos++] = Vsize % 10 + '0'; X while (pos<7) PText[pos++] = ' '; X } X /* X * If the font is not fixed width we have to X * clear the window to guarantee that the characters X * that were there before are erased. X */ X if (!(PFontInfo->per_char)) X XClearWindow(dpy, Pop); X XDrawImageString( X dpy, Pop, PopGC, X PPadding, PPadding+PFontInfo->ascent, X PText, PTextSize); X } X if (!Freeze) { X DrawBox(); X DrawBox(); X } X X if (XPending(dpy) && !ProcessRequests(box, num_vectors) && X GetButton(b_ev)) { X if ((b_ev->xany.type != ButtonPress) && X (b_ev->xany.type != ButtonRelease)) X continue; /* spurious menu event... */ X X if (Freeze) { X DrawBox(); X Frozen = (Window)0; X XUngrabServer(dpy); X } X X if (b_ev->xany.type == buttonConfirmEvent && X b_ev->xbutton.button == button) X stop = TRUE; X else { X XUnmapWindow(dpy, Pop); X ResetCursor(button); X Snatched = False; X ungrab_pointer(); X Leave(TRUE) X } X } X else { X XQueryPointer(dpy, RootWindow(dpy, scr), &root, X &sub_win, &x2, &y2, &junk_x, &junk_y, &ptrmask); X x2 += x_offset; /* get to anchor point */ X y2 += y_offset; X } X hsize = max(min(abs (x2 - x1), maxwidth), minwidth); X hsize = makemult(hsize - minwidth, xinc) + minwidth; X X vsize = max(min(abs(y2 - y1), maxheight), minheight); X vsize = makemult(vsize - minheight, yinc) + minheight; X if (sizehints.flags & PAspect) { X if ((hsize * sizehints.max_aspect.y > X vsize * sizehints.max_aspect.x)) { X delta = makemult((hsize * sizehints.max_aspect.y / X sizehints.max_aspect.x) - vsize, X yinc); X if ((vsize + delta <= maxheight)) X vsize += delta; X else { X delta = makemult(hsize - X (sizehints.max_aspect.x * X vsize/sizehints.max_aspect.y), X xinc); X if (hsize - delta >= minwidth) X hsize -= delta; X } X } X if (hsize * sizehints.min_aspect.y < vsize * X sizehints.min_aspect.x) { X delta = makemult((sizehints.min_aspect.x * X vsize/sizehints.min_aspect.y) - hsize, X xinc); X if (hsize + delta <= maxwidth) X hsize += delta; X else { X delta = makemult(vsize - X (hsize*sizehints.min_aspect.y / X sizehints.min_aspect.x), X yinc); X if (vsize - delta >= minheight) X vsize -= delta; X } X } X X } X if (ox == 0) X x2 = x1 - hsize; X else X x2 = x1 + hsize; X X if (oy == 0) X y2 = y1 - vsize; X else X y2 = y1 + vsize; X X } X if (x2 < x1) { X x = x1; x1 = x2; x2 = x; X } X if (y2 < y1) { X y = y1; y1 = y2; y2 = y; X } X XUnmapWindow(dpy, Pop); X if ((x1 !=client_info.x) || (y1 != client_info.y) || X (hsize != client_info.width) || X (vsize != client_info.height)) { X XWindowChanges xwc; X X xwc.x = x1; X xwc.y = y1; X xwc.width = hsize; X xwc.height = vsize; X ConfigureWindow(window, CWX | CWY | CWHeight | CWWidth, &xwc); X } X Snatched = False; X ungrab_pointer(); X Leave(TRUE) X} X CheckConsistency(hints) XXSizeHints *hints; X{ X Entry("CheckConsistency") X X if (hints->min_height < 0) X hints->min_height = 0; X if (hints->min_width < 0) X hints->min_width = 0; X X if (hints->max_height <= 0 || hints->max_width <= 0) X hints->flags &= ~PMaxSize; X X hints->min_height = min(DisplayHeight(dpy, scr), hints->min_height); X hints->min_width = min(DisplayWidth(dpy, scr), hints->min_width); X X hints->max_height = min(DisplayHeight(dpy, scr), hints->max_height); X hints->max_width = min(DisplayWidth(dpy, scr), hints->max_width); X X if ((hints->flags & PMinSize) && (hints->flags & PMaxSize) && X ((hints->min_height > hints->max_height) || X (hints->min_width > hints->max_width))) X hints->flags &= ~(PMinSize|PMaxSize); X X if ((hints->flags & PAspect) && X (hints->min_aspect.x * hints->max_aspect.y > X hints->max_aspect.x * hints->min_aspect.y)) X hints->flags &= ~(PAspect); X Leave_void X} END_OF_FILE if test 14728 -ne `wc -c <'Resize.c'`; then echo shar: \"'Resize.c'\" unpacked with wrong size! fi # end of 'Resize.c' fi if test -f 'awm.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'awm.h'\" else echo shar: Extracting \"'awm.h'\" \(19011 characters\) sed "s/^X//" >'awm.h' <<'END_OF_FILE' X/* $Header: awm.h,v 1.4 87/08/21 13:31:43 swick Exp $ */ X X#include "X11/copyright.h" 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/* 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, Port to X11 X */ X X#include <errno.h> X#include <stdio.h> X#include <strings.h> X#include "X11/Xlib.h" X#include "X11/Intrinsic.h" X#include "X11/Xatom.h" X#include "menus/rtlmenu.h" X#include "support.h" X X#define MIN(x, y) ((x) <= (y) ? (x) : (y)) X#define MAX(x, y) ((x) >= (y) ? (x) : (y)) X#define VOLUME_PERCENTAGE(x) ((x)*14) X#define ModMask 0xFF X#define ButtonMask(b) (((b)==Button1) ? Button1Mask : \ X (((b)==Button2) ? Button2Mask : Button3Mask)) X X#define DEF_DELTA 1 X#define DEF_FUNC GXcopy X#define DEF_ICON_BORDER_WIDTH 2 X#define DEF_ICON_PAD 4 X#define DEF_POP_BORDER_WIDTH 2 X#define DEF_POP_PAD 4 X#define DEF_MENU_BORDER_WIDTH 2 X#define DEF_MENU_PAD 4 X#define DEF_GADGET_PAD 3 X#define DEF_VOLUME 4 X#define DEF_PUSH 5 X#define DEF_BCONTEXT_WIDTH 0 X#define DEF_RAISE_DELAY 100 /* milliseconds */ X#define DEF_MAX_COLORS 0 /* 0 means take as many as we can */ X#ifndef DEF_BCONTEXT_CURSOR X#define DEF_BCONTEXT_CURSOR XC_plus X#endif DEF_BCONTEXT_CURSOR X#ifndef DEF_TITLE_CURSOR X#define DEF_TITLE_CURSOR XC_left_ptr X#endif DEF_TITLE_CURSOR X#ifndef NAME X#define NAME "awm" X#endif NAME X#ifndef CLASS X#define CLASS "Wm" X#endif CLASS X#ifndef DEF_FONT X#define DEF_FONT "fixed" X#endif DEF_FONT X#ifndef DEF_TITLE_FONT X#define DEF_TITLE_FONT "vtsingle" X#endif DEF_TITLE_FONT X#ifndef DEF_ICON_FONT X#define DEF_ICON_FONT "8x13" X#endif DEF_ICON_FONT X#ifndef DEF_POPUP_FONT X#define DEF_POPUP_FONT "9x15" X#endif DEF_POPUP_FONT X#ifndef DEF_GADGET_FONT X#define DEF_GADGET_FONT "fixed" X#endif DEF_GADGET_FONT X#ifndef DEF_MENU_FONT X#define DEF_MENU_FONT "8x13" X#endif DEF_MENU_FONT X#ifndef DEF_BOLD_FONT X#define DEF_BOLD_FONT "8x13bold" X#endif DEF_BOLD_FONT X#define DEF_MENU_DELTA 20 X X#define INIT_PTEXT {'0', '0', '0', 'x', '0', '0', '0'} X X#ifndef TEMPFILE X#define TEMPFILE "/tmp/awm.XXXXXX" X#endif TEMPFILE X X#define CURSOR_WIDTH 16 X#define CURSOR_HEIGHT 16 X X#define MAX_ZAP_VECTORS 8 X#define MAX_BOX_VECTORS 20 X X#define DRAW_WIDTH 0 /* use fastest hardware draw */ X#define DRAW_VALUE 0xfd X#define DRAW_FUNC GXxor X#define DRAW_PLANES 1 X X#define NOCOLOR -1 X X/* X * The first BITS_USED bits of the mask are used to define the most generic X * types. All other bits are free for storing peripheral information. X * For now, we use the extra bits to specify which gadget(s) are bound X * to an action. MAX_GADGETS depends on BITS_USED to determine the maximum X * number of gadgets possible. If you add a new context type, be sure to X * increment BITS_USED. X */ X#define ROOT 0x1 X#define WINDOW 0x2 X#define ICON 0x4 X#define TITLE 0x8 X#define BORDER 0x10 X#define GADGET 0x20 X X#define BITS_USED 6 X X/* X * Gadgets aren't the sort of embellishments that one uses in quantitity X * (unless one is designing a truly odd interface), so we keep the information X * in an array instead of using the usual linked list. MAX_GADGETS is a derived X * macro (see BITS_USED) that is used to determine the size of the X * Array. X * X */ X#define MAX_GADGETS ((sizeof(int) * 8) - BITS_USED) X X#ifndef FAILURE X#define FAILURE 0 X#endif FAILURE X X#define NAME_LEN 256 /* Maximum length string names */ X#define EVENTMASK (ButtonPressMask | ButtonReleaseMask) X X X#define DrawBox() XDrawSegments(dpy, RootWindow(dpy, scr),DrawGC,box,num_vectors) X#define DrawZap() XDrawSegments(dpy, RootWindow(dpy, scr),DrawGC,zap,num_vectors) X X/* X * All one needs to know about an awm managed window.. (so far...) X */ typedef struct _awminfo { X Window title, client, frame, icon; /* Associated windows */ X Window *gadgets; /* associated gadgets */ X char *name; /* The formatted window name */ X Boolean own; /* Do we own the icon window? */ X Boolean placed; /* Has the window been placed yet? */ X Pixmap back, bold, iconPixmap; /* background, bold and icon pix */ X Pixmap BC_back, BC_bold; /* BC back and bold pixmaps */ X unsigned int border_width; /* original border width */ X int state; /* The state of the window */ X GC winGC; /* GC at proper depth for window */ X} AwmInfo, *AwmInfoPtr; X X/* X * This whole section has changed substantially. Basically, since all the X * variables have vanished into the resource manager, the keyword table X * only needs to keep track of function pointers, boolean pointers and X * "special" keywords like menu and gagdet. Since some things are still X * modifiable from menus (only booleans, currently, though this will change), X * we keep these in the keyword table even though X * they're no longer directly modifable from the .awmrc X */ X X/* X * Keyword table entry. X */ typedef struct _keyword { X char *name; X int type; X Boolean *bptr; X Boolean (*fptr)(); X} Keyword; X X/* X * Keyword table type entry. X */ X#define IsFunction 1 X#define IsMenuMap 2 X#define IsMenu 3 X#define IsDownFunction 4 X#define IsParser 5 X#define IsQuitFunction 6 X#define IsGadget 7 X#define IsBoolean 8 X#define IsAction 9 X X/* X * Button/key binding type. X */ typedef struct _binding { X struct _binding *next; X int context; X int mask; X int button; X Boolean (*func)(); X char *menuname; X RTLMenu menu; X} Binding; X X/* X * Key expression type. X */ typedef struct _keyexpr { X char *name; X int mask; X} KeyExpr; X X/* X * Context expression type. X */ typedef struct _contexpr { X char *name; X int mask; X} ContExpr; X X/* X * Button modifier type. X */ typedef struct _buttonmodifier { X char *name; X int mask; X} ButtonModifier; X X/* X * Gravity expression type. X */ typedef struct _gravityexpr { X char *name; X int mask; X} GravityExpr; X X/* X * Button modifier mask definitions. X * bits 13 and 14 unused in key masks, according to X.h X * steal bit 15, since we don't use AnyModifier X */ X X#define DeltaMotion (1<<13) X#define ButtonUp (1<<14) X#define ButtonDown AnyModifier X#define ButtonMods DeltaMotion+ButtonUp+ButtonDown X X/* X * Button and mask redefinitions, for X11 X */ X#define LeftMask Button1Mask X#define MiddleMask Button2Mask X#define RightMask Button3Mask X#define LeftButton Button1 X#define MiddleButton Button2 X#define RightButton Button3 X X/* X * Declaration specific information for gadgets. This defines only gadget X * types, not the actual gadgets. The pixmap member is only used if a pixmap X * is being displayed. Gravity and offset are purely optional. X */ X X#define NoGadgetGravity 0 X#define LeftGadgetGravity 1 X#define RightGadgetGravity 2 X typedef struct _gadgetdecl { /* Declaration (type) information */ X unsigned char *name; /* Either text label or pixmap file name */ X unsigned char *data; /* If pixmap file, this is the data from it */ X unsigned long forecolor; /* foreground color for pixmap */ X unsigned long backcolor; /* background color for pixmap */ X XFontStruct *fontInfo; /* font for text */ X int high, wide; /* width and height of pixmap or text */ X int gravity; /* stick to the left or right? */ X int offset; /* offset from previous item */ X} GadgetDecl; X X/* X * MenuInfo data type. X */ typedef struct _menuinfo { X char *name; /* Name of this menu. */ X char *pixmapname; /* Name of label pixmap (opt) */ X RTLMenu menu; /* RTL menu handle for destroy */ X struct _actionline *line; /* Linked list of menu items. */ X} MenuInfo; X X/* X * Action Line data type. X */ typedef struct _actionline { X struct _actionline *next; /* Pointer to next line. */ X char *name; /* Name of this line. */ X char *pixmapname; /* Name of the backing pixmap (opt) */ X int type; /* IsShellCommand, IsText, IsTextNL... */ X RTLMenuItem item; /* RTL item handle */ X char *text; /* Text string to be acted upon. */ X Boolean (*func)(); /* Window manager function to be invoked. */ X} ActionLine; X X/* X * ActionLine->type definitions. X */ X#define IsShellCommand 1 X#define IsText 2 X#define IsTextNL 3 X#define IsUwmFunction 4 X#define IsMenuFunction 5 X#define IsImmFunction 6 /* Immediate (context-less) function. */ X#define IsVar 7 /* we're setting a boolean variable */ X X/* X * Menu Link data type. Used by the parser when creating a linked list X * of menus. X */ typedef struct _menulink { X struct _menulink *next; /* Pointer to next MenuLink. */ X struct _menuinfo *menu; /* Pointer to the menu in this link. */ X} MenuLink; X X/* X * External variable definitions. X */ extern int errno; extern Window Pop; /* Pop-up dimension display window. */ extern Window Frozen; /* Contains window id of "gridded" window. */ extern XFontStruct *IFontInfo; /* Icon text font information. */ extern XFontStruct *PFontInfo; /* Pop-up text font information. */ extern XFontStruct *TFontInfo; /* Title text font information. */ extern XFontStruct *TFontBoldInfo;/* Title text (bold) font information. */ extern XFontStruct *GFontInfo; /* Gadget box text font */ extern XFontStruct *MFontInfo; /* Menu font */ extern XFontStruct *MBoldFontInfo;/* Menu bold font */ extern Pixmap GrayPixmap; /* Gray pixmap. */ extern Pixmap IBackPixmap; /* Icon window background pixmap. */ extern Pixel BForeground; /* Border Context (pixmap) foreground pixel */ extern Pixel BBackground; /* Border Context (pixmap) background pixel */ extern Pixel ITextForeground; /* Icon window text forground color. */ extern Pixel ITextBackground; /* Icon window text background color. */ extern Pixel IForeground; /* Icon pixmap foreground color */ extern Pixel IBackground; /* Icon pixmap background color */ extern Pixel IBorder; /* Icon window border pixel. */ extern Pixel TTextForeground; /* Title text foreground pixel */ extern Pixel TTextBackground; /* Title text background pixel */ extern Pixel TForeground; /* Title (pixmap) foreground pixel */ extern Pixel TBackground; /* Title (pixmap) background pixel */ extern Pixel PForeground; /* Pop-up window forground color. */ extern Pixel PBackground; /* Pop-up window background color. */ extern Pixel PBorder; /* Pop-Up Window border pixel. */ extern Pixel ForeColor; /* default foreground color */ extern Pixel BackColor; /* default background color */ extern Pixel MBorder; /* Menu border color */ extern Pixel MForeground; /* Menu foreground color */ extern Pixel MBackground; /* Menu background color */ extern Cursor ArrowCrossCursor; /* Arrow cross cursor. */ extern Cursor TextCursor; /* Text cursor used in icon windows. */ extern Cursor IconCursor; /* Icon Cursor. */ extern Cursor LeftButtonCursor; /* Left button main cursor. */ extern Cursor MiddleButtonCursor;/* Middle button main cursor. */ extern Cursor RightButtonCursor;/* Right button main cursor. */ extern Cursor TargetCursor; /* Target (select-a-window) cursor. */ extern int ScreenWidth; /* Display screen width. */ extern int ScreenHeight; /* Display screen height. */ extern int IBorderWidth; /* Icon window border width. */ extern int PWidth; /* Pop-up window width (including borders). */ extern int PHeight; /* Pop-up window height (including borders). */ extern int PBorderWidth; /* Pop-up window border width. */ extern int PPadding; /* Pop-up window padding. */ extern int Delay; /* Delay between clicks of double click. */ extern int Delta; /* Mouse movement slop. */ extern int HIconPad; /* Icon horizontal padding. */ extern int VIconPad; /* Icon vertical padding. */ extern int MaxColors; /* Maximum number of colors to use. */ extern int Pushval; /* Number of pixels to push window by. */ extern int BContext; /* Width of border context area in pixels */ extern int RaiseDelay; /* Delay in milliseconds before autoraising windows */ extern int Volume; /* Audible alarm volume. */ extern int NumGadgets; /* Number of gadgets used */ extern int GadgetPad; /* Padding between gadgets */ extern int status; /* Routine return status. */ extern int Maxfd; /* Maximum file descriptors for select(2). */ extern int MPad; /* menu padding */ extern int MDelta; /* Menu subitem delta */ extern int MBorderWidth; /* Menu border width */ extern int MItemBorder; /* Menu item border width */ extern int BCursor; /* Border context cursor */ extern int TCursor; /* Title context cursor */ extern MenuLink *Menus; /* Linked list of menus. */ extern GC IconGC; /* graphics context for icon */ extern GC PopGC; /* graphics context for pop */ extern GC DrawGC; /* graphics context for zap */ X extern Boolean Autoraise; /* Raise window on input focus? */ extern Boolean Autoselect; /* Warp mouse to default menu selection? */ extern Boolean Freeze; /* Freeze server during move/resize? */ extern Boolean Grid; /* Should the m/r box contain a 9 seg. grid. */ extern Boolean Hilite; /* Should we highlight borders on focus? */ extern Boolean ShowName; /* Display names in title bars */ extern Boolean NWindow; /* Normalize windows? */ extern Boolean NIcon; /* Normalize icons? */ extern Boolean RootResizeBox; /* Should resize box obscure window? */ extern Boolean Push; /* Relative=TRUE, Absolute=FALSE. */ extern Boolean ResizeRelative; /* Relative=TRUE, Absolute=FALSE. */ extern Boolean Reverse; /* Reverse video? */ extern Boolean SaveUnder; /* Save unders? */ extern Boolean Snatched; /* We're in the middle of an no-highlight/raise op */ extern Boolean Titles; /* Title bars on windows? */ extern Boolean TitlePush; /* Down=TRUE, Up=FALSE */ extern Boolean UseGadgets; /* Gadget boxes in title bars? */ extern Boolean Wall; /* Don't allow windows past edges of screen */ extern Boolean WarpOnRaise; /* Warp to upper right corner on raise. */ extern Boolean WarpOnIconify; /* Warp to icon center on iconify. */ extern Boolean WarpOnDeIconify; /* Warp to upper right corner on de-iconify. */ extern Boolean Zap; /* Should the the zap effect be used. */ extern Boolean FocusSetByUser; /* True if f.focus called */ X extern char PText[]; /* Pop-up window dummy text. */ extern int PTextSize; /* Pop-up window dummy text size. */ X extern int Lineno; /* Line count for parser. */ extern Boolean Startup_File_Error; /* Startup file error flag. */ extern char Startup_File[]; /* Startup file name. */ extern char *IFontName; /* Icon font name. */ extern char *PFontName; /* Pop-up font name. */ extern char *TFontName; /* Title font name. */ extern char *GFontName; /* Gadget font name */ extern char *TFontBoldName; /* Bold Title font name. */ extern char *TBackPixmapName; /* Title pixmap file */ extern char *TBoldPixmapName; /* Title (highlighted) pixmap file */ extern char *TBackPixmapData; /* Bitmap data file title background */ extern char *TBoldPixmapData; /* ditto, except highlighted */ extern char *BBackPixmapData; /* Border Context area background pixmap data */ extern char *BBoldPixmapData; /* Border Context bold pixmap data */ extern char *awmPath; /* Pathlist for pixmap files */ extern char **Argv; /* Pointer to command line parameters. */ extern char **Environ; /* Pointer to environment. */ X extern char *DefaultBindings[]; /* Default bindings string array. */ extern Keyword KeywordTable[]; /* Keyword lookup table. */ extern Binding *Blist; /* Button/key bindings list. */ extern KeyExpr KeyExprTbl[]; /* Key expression table. */ extern ContExpr ContExprTbl[]; /* Context expression table. */ extern ButtonModifier ButtModTbl[];/* Button modifier table. */ extern GravityExpr GravityExprTbl[]; /* Gravity expression table. */ X extern GadgetDecl **Gadgets; /* Gadgets declared. See gram.y */ extern int scr; extern Display *dpy; /* Display info pointer. */ X X#ifdef PROFIL int ptrap(); X#endif X X/* X * External routine typing. X */ extern Boolean Beep(); extern Boolean CircleDown(); extern Boolean CircleUp(); extern Boolean Continue(); extern Boolean Focus(); extern Boolean GetButton(); extern Boolean Iconify(); extern Boolean Lower(); extern Boolean DoMenu(); extern Boolean DoAction(); extern Boolean Move(); extern Boolean MoveOpaque(); extern Boolean Neaten(); extern Boolean NewIconify(); extern Boolean Pause(); extern Boolean PushDown(); extern Boolean PushLeft(); extern Boolean PushRight(); extern Boolean PushUp(); extern Boolean Quit(); extern Boolean Raise(); extern Boolean Redraw(); extern Boolean Refresh(); extern Boolean ResetBindings(); extern Boolean ResetMenus(); extern Boolean ResetGadgets(); extern Boolean Resize(); extern Boolean Restart(); extern Boolean FDestroyTitle(); extern Boolean FDestroyGadgets(); extern Boolean FAddTitle(); extern Boolean FPutGadgets(); extern Boolean DestroyClient(); extern int StoreCursors(); extern int StoreBox(); extern int StoreTitleBox(); extern int StoreGridBox(); extern int StoreTitleGridBox(); extern int StoreZap(); extern int Error(); extern int XError(); extern int CreateMenus(); extern Window AddTitle(); extern char *stash(); extern char *GetIconName(); extern char *expand_from_path(); extern char *GetStringRes(); extern unsigned char *expand_metachars(); extern Boolean GetBoolRes(); extern Boolean ConfigureWindow(); extern Pixmap GetPixmapRes(); extern char *GetPixmapDataRes(); extern int GetIntRes(); extern Pixel GetColorRes(); extern XFontStruct *GetFontRes(); extern AwmInfoPtr GetAwmInfo(); extern AwmInfoPtr RegisterWindow(); extern AwmInfoPtr IsTitled(); extern AwmInfoPtr IsGadgetWin(); X extern void Init_Titles(); extern void DestroyTitle(); extern void PaintTitle(); extern void SetBorderColors(); extern void SetBorderPixmaps(); X X#ifdef NEATEN X#define DEFAULT_ABS_MIN 64 X#define SEPARATION 2 X#define DEF_PRIMARY_PLACEMENT "Top" X#define DEF_SECONDARY_PLACEMENT "Left" X extern int AbsMinWidth; extern int AbsMinHeight; extern Boolean RetainSize; extern Boolean KeepOpen; extern Boolean Fill; extern Boolean UsePriorities; extern Boolean FixTopOfStack; extern char *PrimaryIconPlacement; extern char *SecondaryIconPlacement; X#endif NEATEN END_OF_FILE if test 19011 -ne `wc -c <'awm.h'`; then echo shar: \"'awm.h'\" unpacked with wrong size! fi # end of 'awm.h' fi echo shar: End of archive 5 \(of 8\). cp /dev/null ark5isdone MISSING="" for I in 1 2 3 4 5 6 7 8 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 8 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