v09i003: TWM with a virtual root window, Part02/09
Tom LaStrange
toml at marvin.Solbourne.COM
Thu Aug 30 05:33:03 AEST 1990
Submitted-by: toml at marvin.Solbourne.COM (Tom LaStrange)
Posting-number: Volume 9, Issue 3
Archive-name: tvtwm/part02
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting test in a file
# 3. Execute the file with /bin/sh (not csh) to create the files:
#
#events.h
#gc.c
#gc.h
#gram.y
#iconmgr.c
#iconmgr.h
#icons.h
#lex.l
#list.h
#move.h
#
# Created by toml () on Wed Aug 29 08:43:26 MDT 1990
#
if test -f 'events.h'
then
echo shar: will not over-write existing file "events.h"
else
echo extracting "events.h"
sed 's/^X//' >events.h <<'SHAR_EOF'
X/*****************************************************************************/
X/** Copyright 1988 by Evans & Sutherland Computer Corporation, **/
X/** Salt Lake City, Utah **/
X/** Portions Copyright 1989 by the Massachusetts Institute of Technology **/
X/** Cambridge, Massachusetts **/
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/** names of Evans & Sutherland and M.I.T. not be used in advertising **/
X/** in publicity pertaining to distribution of the software without **/
X/** specific, written prior permission. **/
X/** **/
X/** EVANS & SUTHERLAND AND M.I.T. DISCLAIM ALL WARRANTIES WITH REGARD **/
X/** TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT- **/
X/** ABILITY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND OR **/
X/** M.I.T. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAM- **/
X/** AGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA **/
X/** OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER **/
X/** TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE **/
X/** OR PERFORMANCE OF THIS SOFTWARE. **/
X/*****************************************************************************/
X
X
X/***********************************************************************
X *
X * $XConsortium: events.h,v 1.13 90/03/13 15:47:17 jim Exp $
X *
X * twm event handler include file
X *
X * 17-Nov-87 Thomas E. LaStrange File created
X *
X ***********************************************************************/
X
X#ifndef _EVENTS_
X#define _EVENTS_
X
Xtypedef void (*event_proc)();
X
Xextern void InitEvents();
Xextern Bool StashEventTime();
Xextern Time lastTimestamp;
Xextern void SimulateMapRequest();
Xextern void AutoRaiseWindow();
X#define LastTimestamp() lastTimestamp
Xextern Bool DispatchEvent();
Xextern void HandleEvents();
Xextern void HandleExpose();
Xextern void HandleDestroyNotify();
Xextern void HandleMapRequest();
Xextern void HandleMapNotify();
Xextern void HandleUnmapNotify();
Xextern void HandleMotionNotify();
Xextern void HandleButtonRelease();
Xextern void HandleButtonPress();
Xextern void HandleEnterNotify();
Xextern void HandleLeaveNotify();
Xextern void HandleConfigureRequest();
Xextern void HandleClientMessage();
Xextern void HandlePropertyNotify();
Xextern void HandleKeyPress();
Xextern void HandleColormapNotify();
Xextern void HandleVisibilityNotify();
Xextern void HandleUnknown();
X
Xextern event_proc EventHandler[];
Xextern Window DragWindow;
Xextern Window DragVirtual;
Xextern int origDragX;
Xextern int origDragY;
Xextern int DragX;
Xextern int DragY;
Xextern int DragWidth;
Xextern int DragHeight;
Xextern int CurrentDragX;
Xextern int CurrentDragY;
X
Xextern int ButtonPressed;
Xextern int Cancel;
X
Xextern XEvent Event;
X
X#endif /* _EVENTS_ */
SHAR_EOF
if test 3616 -ne "`wc -c < events.h`"
then
echo shar: error transmitting "events.h" '(should have been 3616 characters)'
fi
fi
if test -f 'gc.c'
then
echo shar: will not over-write existing file "gc.c"
else
echo extracting "gc.c"
sed 's/^X//' >gc.c <<'SHAR_EOF'
X/*****************************************************************************/
X/** Copyright 1988 by Evans & Sutherland Computer Corporation, **/
X/** Salt Lake City, Utah **/
X/** Portions Copyright 1989 by the Massachusetts Institute of Technology **/
X/** Cambridge, Massachusetts **/
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/** names of Evans & Sutherland and M.I.T. not be used in advertising **/
X/** in publicity pertaining to distribution of the software without **/
X/** specific, written prior permission. **/
X/** **/
X/** EVANS & SUTHERLAND AND M.I.T. DISCLAIM ALL WARRANTIES WITH REGARD **/
X/** TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT- **/
X/** ABILITY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND OR **/
X/** M.I.T. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAM- **/
X/** AGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA **/
X/** OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER **/
X/** TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE **/
X/** OR PERFORMANCE OF THIS SOFTWARE. **/
X/*****************************************************************************/
X
X
X/**********************************************************************
X *
X * $XConsortium: gc.c,v 1.21 90/03/13 15:28:56 jim Exp $
X *
X * Open the fonts and create the GCs
X *
X * 31-Mar-88 Tom LaStrange Initial Version.
X *
X **********************************************************************/
X
X#if !defined(lint) && !defined(SABER)
Xstatic char RCSinfo[]=
X"$XConsortium: gc.c,v 1.21 90/03/13 15:28:56 jim Exp $";
X#endif
X
X#include <stdio.h>
X#include "twm.h"
X#include "util.h"
X#include "screen.h"
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 ScreenInfo *prevScr = NULL;
X XGCValues gcv;
X unsigned long gcm;
X
X if (!Scr->FirstTime || prevScr == Scr)
X return;
X
X prevScr = Scr;
X
X /* create GC's */
X
X gcm = 0;
X gcm |= GCFunction; gcv.function = GXxor;
X gcm |= GCLineWidth; gcv.line_width = 0;
X gcm |= GCForeground; gcv.foreground = Scr->XORvalue;
X
X Scr->PannerGC = XCreateGC(dpy, Scr->Root, gcm, &gcv);
X
X gcm = 0;
X gcm |= GCFunction; gcv.function = GXxor;
X gcm |= GCLineWidth; gcv.line_width = 0;
X gcm |= GCForeground; gcv.foreground = Scr->XORvalue;
X gcm |= GCSubwindowMode; gcv.subwindow_mode = IncludeInferiors;
X
X Scr->DrawGC = XCreateGC(dpy, Scr->Root, gcm, &gcv);
X
X gcm = 0;
X gcm |= GCForeground; gcv.foreground = Scr->MenuC.fore;
X gcm |= GCBackground; gcv.background = Scr->MenuC.back;
X gcm |= GCFont; gcv.font = Scr->MenuFont.font->fid;
X
X Scr->MenuGC = XCreateGC(dpy, Scr->Root, gcm, &gcv);
X
X gcm = 0;
X gcm |= GCPlaneMask; gcv.plane_mask = AllPlanes;
X /*
X * Prevent GraphicsExpose and NoExpose events. We'd only get NoExpose
X * events anyway; they cause BadWindow errors from XGetWindowAttributes
X * call in FindScreenInfo (events.c) (since drawable is a pixmap).
X */
X gcm |= GCGraphicsExposures; gcv.graphics_exposures = False;
X gcm |= GCLineWidth; gcv.line_width = 0;
X
X Scr->NormalGC = XCreateGC(dpy, Scr->Root, gcm, &gcv);
X}
SHAR_EOF
if test 4345 -ne "`wc -c < gc.c`"
then
echo shar: error transmitting "gc.c" '(should have been 4345 characters)'
fi
fi
if test -f 'gc.h'
then
echo shar: will not over-write existing file "gc.h"
else
echo extracting "gc.h"
sed 's/^X//' >gc.h <<'SHAR_EOF'
X/*****************************************************************************/
X/** Copyright 1988 by Evans & Sutherland Computer Corporation, **/
X/** Salt Lake City, Utah **/
X/** Portions Copyright 1989 by the Massachusetts Institute of Technology **/
X/** Cambridge, Massachusetts **/
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/** names of Evans & Sutherland and M.I.T. not be used in advertising **/
X/** in publicity pertaining to distribution of the software without **/
X/** specific, written prior permission. **/
X/** **/
X/** EVANS & SUTHERLAND AND M.I.T. DISCLAIM ALL WARRANTIES WITH REGARD **/
X/** TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT- **/
X/** ABILITY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND OR **/
X/** M.I.T. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAM- **/
X/** AGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA **/
X/** OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER **/
X/** TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE **/
X/** OR PERFORMANCE OF THIS SOFTWARE. **/
X/*****************************************************************************/
X
X
X/**********************************************************************
X *
X * $XConsortium: gc.h,v 1.5 89/10/27 14:01:17 jim Exp $
X *
X * GC related externs
X *
X * 8-Apr-88 Tom LaStrange Initial Version.
X *
X **********************************************************************/
X
X#ifndef _GC_
X#define _GC_
X
Xextern void CreateGCs();
X
X#endif /* _GC_ */
SHAR_EOF
if test 2440 -ne "`wc -c < gc.h`"
then
echo shar: error transmitting "gc.h" '(should have been 2440 characters)'
fi
fi
if test -f 'gram.y'
then
echo shar: will not over-write existing file "gram.y"
else
echo extracting "gram.y"
sed 's/^X//' >gram.y <<'SHAR_EOF'
X/*****************************************************************************/
X/** Copyright 1988 by Evans & Sutherland Computer Corporation, **/
X/** Salt Lake City, Utah **/
X/** Portions Copyright 1989 by the Massachusetts Institute of Technology **/
X/** Cambridge, Massachusetts **/
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/** names of Evans & Sutherland and M.I.T. not be used in advertising **/
X/** in publicity pertaining to distribution of the software without **/
X/** specific, written prior permission. **/
X/** **/
X/** EVANS & SUTHERLAND AND M.I.T. DISCLAIM ALL WARRANTIES WITH REGARD **/
X/** TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT- **/
X/** ABILITY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND OR **/
X/** M.I.T. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAM- **/
X/** AGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA **/
X/** OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER **/
X/** TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE **/
X/** OR PERFORMANCE OF THIS SOFTWARE. **/
X/*****************************************************************************/
X
X
X/***********************************************************************
X *
X * $XConsortium: gram.y,v 1.88 90/03/16 12:12:06 jim Exp $
X *
X * .twmrc command grammer
X *
X * 07-Jan-86 Thomas E. LaStrange File created
X *
X ***********************************************************************/
X
X%{
X#include <stdio.h>
X#include <ctype.h>
X#include "twm.h"
X#include "menus.h"
X#include "list.h"
X#include "util.h"
X#include "screen.h"
X#include "parse.h"
X#include <X11/Xos.h>
X#include <X11/Xmu/CharSet.h>
X
Xstatic char *Action = "";
Xstatic char *Name = "";
Xstatic MenuRoot *root, *pull = NULL;
X
Xstatic MenuRoot *GetRoot();
X
Xstatic Bool CheckWarpScreenArg(), CheckWarpRingArg();
Xstatic Bool CheckColormapArg();
Xstatic void GotButton(), GotKey(), GotTitleButton();
Xstatic char *ptr;
Xstatic name_list **list;
Xstatic int cont = 0;
Xstatic int color;
Xint mods = 0;
Xunsigned int mods_used = (ShiftMask | ControlMask | Mod1Mask);
X
Xextern int do_single_keyword(), do_string_keyword(), do_number_keyword();
Xextern name_list **do_colorlist_keyword();
Xextern int do_color_keyword();
Xextern int yylineno;
X%}
X
X%union
X{
X int num;
X char *ptr;
X};
X
X%token <num> LB RB LP RP MENUS MENU BUTTON DEFAULT_FUNCTION PLUS MINUS
X%token <num> ALL OR CURSORS PIXMAPS ICONS COLOR MONOCHROME FUNCTION
X%token <num> ICONMGR_SHOW ICONMGR WINDOW_FUNCTION ZOOM ICONMGRS
X%token <num> ICONMGR_GEOMETRY ICONMGR_NOSHOW MAKE_TITLE
X%token <num> ICONIFY_BY_UNMAPPING DONT_ICONIFY_BY_UNMAPPING STICKY
X%token <num> NO_TITLE AUTO_RAISE NO_HILITE ICON_REGION
X%token <num> META SHIFT LOCK CONTROL WINDOW TITLE ICON ROOT FRAME
X%token <num> COLON EQUALS SQUEEZE_TITLE DONT_SQUEEZE_TITLE
X%token <num> START_ICONIFIED NO_TITLE_HILITE TITLE_HILITE
X%token <num> MOVE RESIZE WAIT SELECT KILL LEFT_TITLEBUTTON RIGHT_TITLEBUTTON
X%token <num> NUMBER KEYWORD NKEYWORD CKEYWORD CLKEYWORD FKEYWORD FSKEYWORD
X%token <num> SKEYWORD DKEYWORD JKEYWORD WINDOW_RING WARP_CURSOR ERRORTOKEN
X%token <num> NO_STACKMODE
X%token <ptr> STRING
X
X%type <ptr> string
X%type <num> action button number signed_number full fullkey
X
X%start twmrc
X
X%%
Xtwmrc : stmts
X ;
X
Xstmts : /* Empty */
X | stmts stmt
X ;
X
Xstmt : error
X | noarg
X | sarg
X | narg
X | squeeze
X | ICON_REGION string DKEYWORD DKEYWORD number number
X { AddIconRegion($2, $3, $4, $5, $6); }
X | ICONMGR_GEOMETRY string number { if (Scr->FirstTime)
X {
X Scr->iconmgr.geometry=$2;
X Scr->iconmgr.columns=$3;
X }
X }
X | ICONMGR_GEOMETRY string { if (Scr->FirstTime)
X Scr->iconmgr.geometry = $2;
X }
X | ZOOM number { if (Scr->FirstTime)
X {
X Scr->DoZoom = TRUE;
X Scr->ZoomCount = $2;
X }
X }
X | ZOOM { if (Scr->FirstTime)
X Scr->DoZoom = TRUE; }
X | PIXMAPS pixmap_list {}
X | CURSORS cursor_list {}
X | ICONIFY_BY_UNMAPPING { list = &Scr->IconifyByUn; }
X win_list
X | ICONIFY_BY_UNMAPPING { if (Scr->FirstTime)
X Scr->IconifyByUnmapping = TRUE; }
X | LEFT_TITLEBUTTON string EQUALS action {
X GotTitleButton ($2, $4, False);
X }
X | RIGHT_TITLEBUTTON string EQUALS action {
X GotTitleButton ($2, $4, True);
X }
X | button string { root = GetRoot($2, NULLSTR, NULLSTR);
X Scr->Mouse[$1][C_ROOT][0].func = F_MENU;
X Scr->Mouse[$1][C_ROOT][0].menu = root;
X }
X | button action { Scr->Mouse[$1][C_ROOT][0].func = $2;
X if ($2 == F_MENU)
X {
X pull->prev = NULL;
X Scr->Mouse[$1][C_ROOT][0].menu = pull;
X }
X else
X {
X root = GetRoot(TWM_ROOT,NULLSTR,NULLSTR);
X Scr->Mouse[$1][C_ROOT][0].item =
X AddToMenu(root,"x",Action,
X NULLSTR,$2,NULLSTR,NULLSTR);
X }
X Action = "";
X pull = NULL;
X }
X | string fullkey { GotKey($1, $2); }
X | button full { GotButton($1, $2); }
X | DONT_ICONIFY_BY_UNMAPPING { list = &Scr->DontIconify; }
X win_list
X | ICONMGR_NOSHOW { list = &Scr->IconMgrNoShow; }
X win_list
X | ICONMGR_NOSHOW { Scr->IconManagerDontShow = TRUE; }
X | ICONMGRS { list = &Scr->IconMgrs; }
X iconm_list
X | ICONMGR_SHOW { list = &Scr->IconMgrShow; }
X win_list
X | NO_TITLE_HILITE { list = &Scr->NoTitleHighlight; }
X win_list
X | NO_TITLE_HILITE { if (Scr->FirstTime)
X Scr->TitleHighlight = FALSE; }
X | NO_HILITE { list = &Scr->NoHighlight; }
X win_list
X | NO_HILITE { if (Scr->FirstTime)
X Scr->Highlight = FALSE; }
X | NO_STACKMODE { list = &Scr->NoStackModeL; }
X win_list
X | NO_STACKMODE { if (Scr->FirstTime)
X Scr->StackMode = FALSE; }
X | NO_TITLE { list = &Scr->NoTitle; }
X win_list
X | NO_TITLE { if (Scr->FirstTime)
X Scr->NoTitlebar = TRUE; }
X | MAKE_TITLE { list = &Scr->MakeTitle; }
X win_list
X | START_ICONIFIED { list = &Scr->StartIconified; }
X win_list
X | AUTO_RAISE { list = &Scr->AutoRaise; }
X win_list
X | STICKY { list = &Scr->StickyL; }
X win_list
X | MENU string LP string COLON string RP {
X root = GetRoot($2, $4, $6); }
X menu { root->real_menu = TRUE;}
X | MENU string { root = GetRoot($2, NULLSTR, NULLSTR); }
X menu { root->real_menu = TRUE; }
X | FUNCTION string { root = GetRoot($2, NULLSTR, NULLSTR); }
X function
X | ICONS { list = &Scr->IconNames; }
X icon_list
X | COLOR { color = COLOR; }
X color_list
X | MONOCHROME { color = MONOCHROME; }
X color_list
X | DEFAULT_FUNCTION action { Scr->DefaultFunction.func = $2;
X if ($2 == F_MENU)
X {
X pull->prev = NULL;
X Scr->DefaultFunction.menu = pull;
X }
X else
X {
X root = GetRoot(TWM_ROOT,NULLSTR,NULLSTR);
X Scr->DefaultFunction.item =
X AddToMenu(root,"x",Action,
X NULLSTR,$2, NULLSTR, NULLSTR);
X }
X Action = "";
X pull = NULL;
X }
X | WINDOW_FUNCTION action { Scr->WindowFunction.func = $2;
X root = GetRoot(TWM_ROOT,NULLSTR,NULLSTR);
X Scr->WindowFunction.item =
X AddToMenu(root,"x",Action,
X NULLSTR,$2, NULLSTR, NULLSTR);
X Action = "";
X pull = NULL;
X }
X | WARP_CURSOR { list = &Scr->WarpCursorL; }
X win_list
X | WARP_CURSOR { if (Scr->FirstTime)
X Scr->WarpCursor = TRUE; }
X | WINDOW_RING { list = &Scr->WindowRingL; }
X win_list
X ;
X
X
Xnoarg : KEYWORD { if (!do_single_keyword ($1)) {
X twmrc_error_prefix();
X fprintf (stderr,
X "unknown singleton keyword %d\n",
X $1);
X ParseError = 1;
X }
X }
X ;
X
Xsarg : SKEYWORD string { if (!do_string_keyword ($1, $2)) {
X twmrc_error_prefix();
X fprintf (stderr,
X "unknown string keyword %d (value \"%s\")\n",
X $1, $2);
X ParseError = 1;
X }
X }
X ;
X
Xnarg : NKEYWORD number { if (!do_number_keyword ($1, $2)) {
X twmrc_error_prefix();
X fprintf (stderr,
X "unknown numeric keyword %d (value %d)\n",
X $1, $2);
X ParseError = 1;
X }
X }
X ;
X
X
X
Xfull : EQUALS keys COLON contexts COLON action { $$ = $6; }
X ;
X
Xfullkey : EQUALS keys COLON contextkeys COLON action { $$ = $6; }
X ;
X
Xkeys : /* Empty */
X | keys key
X ;
X
Xkey : META { mods |= Mod1Mask; }
X | SHIFT { mods |= ShiftMask; }
X | LOCK { mods |= LockMask; }
X | CONTROL { mods |= ControlMask; }
X | META number { if ($2 < 1 || $2 > 5) {
X twmrc_error_prefix();
X fprintf (stderr,
X "bad modifier number (%d), must be 1-5\n",
X $2);
X ParseError = 1;
X } else {
X mods |= (Mod1Mask << ($2 - 1));
X }
X }
X | OR { }
X ;
X
Xcontexts : /* Empty */
X | contexts context
X ;
X
Xcontext : WINDOW { cont |= C_WINDOW_BIT; }
X | TITLE { cont |= C_TITLE_BIT; }
X | ICON { cont |= C_ICON_BIT; }
X | ROOT { cont |= C_ROOT_BIT; }
X | FRAME { cont |= C_FRAME_BIT; }
X | ICONMGR { cont |= C_ICONMGR_BIT; }
X | META { cont |= C_ICONMGR_BIT; }
X | ALL { cont |= C_ALL_BITS; }
X | OR { }
X ;
X
Xcontextkeys : /* Empty */
X | contextkeys contextkey
X ;
X
Xcontextkey : WINDOW { cont |= C_WINDOW_BIT; }
X | TITLE { cont |= C_TITLE_BIT; }
X | ICON { cont |= C_ICON_BIT; }
X | ROOT { cont |= C_ROOT_BIT; }
X | FRAME { cont |= C_FRAME_BIT; }
X | ICONMGR { cont |= C_ICONMGR_BIT; }
X | META { cont |= C_ICONMGR_BIT; }
X | ALL { cont |= C_ALL_BITS; }
X | OR { }
X | string { Name = $1; cont |= C_NAME_BIT; }
X ;
X
X
Xpixmap_list : LB pixmap_entries RB
X ;
X
Xpixmap_entries : /* Empty */
X | pixmap_entries pixmap_entry
X ;
X
Xpixmap_entry : TITLE_HILITE string { SetHighlightPixmap ($2); }
X ;
X
X
Xcursor_list : LB cursor_entries RB
X ;
X
Xcursor_entries : /* Empty */
X | cursor_entries cursor_entry
X ;
X
Xcursor_entry : FRAME string string {
X NewBitmapCursor(&Scr->FrameCursor, $2, $3); }
X | FRAME string {
X NewFontCursor(&Scr->FrameCursor, $2); }
X | TITLE string string {
X NewBitmapCursor(&Scr->TitleCursor, $2, $3); }
X | TITLE string {
X NewFontCursor(&Scr->TitleCursor, $2); }
X | ICON string string {
X NewBitmapCursor(&Scr->IconCursor, $2, $3); }
X | ICON string {
X NewFontCursor(&Scr->IconCursor, $2); }
X | ICONMGR string string {
X NewBitmapCursor(&Scr->IconMgrCursor, $2, $3); }
X | ICONMGR string {
X NewFontCursor(&Scr->IconMgrCursor, $2); }
X | BUTTON string string {
X NewBitmapCursor(&Scr->ButtonCursor, $2, $3); }
X | BUTTON string {
X NewFontCursor(&Scr->ButtonCursor, $2); }
X | MOVE string string {
X NewBitmapCursor(&Scr->MoveCursor, $2, $3); }
X | MOVE string {
X NewFontCursor(&Scr->MoveCursor, $2); }
X | RESIZE string string {
X NewBitmapCursor(&Scr->ResizeCursor, $2, $3); }
X | RESIZE string {
X NewFontCursor(&Scr->ResizeCursor, $2); }
X | WAIT string string {
X NewBitmapCursor(&Scr->WaitCursor, $2, $3); }
X | WAIT string {
X NewFontCursor(&Scr->WaitCursor, $2); }
X | MENU string string {
X NewBitmapCursor(&Scr->MenuCursor, $2, $3); }
X | MENU string {
X NewFontCursor(&Scr->MenuCursor, $2); }
X | SELECT string string {
X NewBitmapCursor(&Scr->SelectCursor, $2, $3); }
X | SELECT string {
X NewFontCursor(&Scr->SelectCursor, $2); }
X | KILL string string {
X NewBitmapCursor(&Scr->DestroyCursor, $2, $3); }
X | KILL string {
X NewFontCursor(&Scr->DestroyCursor, $2); }
X ;
X
Xcolor_list : LB color_entries RB
X ;
X
Xcolor_entries : /* Empty */
X | color_entries color_entry
X ;
X
Xcolor_entry : CLKEYWORD string { if (!do_colorlist_keyword ($1, color,
X $2)) {
X twmrc_error_prefix();
X fprintf (stderr,
X "unhandled list color keyword %d (string \"%s\")\n",
X $1, $2);
X ParseError = 1;
X }
X }
X | CLKEYWORD string { list = do_colorlist_keyword($1,color,
X $2);
X if (!list) {
X twmrc_error_prefix();
X fprintf (stderr,
X "unhandled color list keyword %d (string \"%s\")\n",
X $1, $2);
X ParseError = 1;
X }
X }
X win_color_list
X | CKEYWORD string { if (!do_color_keyword ($1, color,
X $2)) {
X twmrc_error_prefix();
X fprintf (stderr,
X "unhandled color keyword %d (string \"%s\")\n",
X $1, $2);
X ParseError = 1;
X }
X }
X ;
X
X
Xwin_color_list : LB win_color_entries RB
X ;
X
Xwin_color_entries : /* Empty */
X | win_color_entries win_color_entry
X ;
X
Xwin_color_entry : string string { if (Scr->FirstTime &&
X color == Scr->Monochrome)
X AddToList(list, $1, $2); }
X ;
X
Xsqueeze : SQUEEZE_TITLE {
X#ifdef SHAPE
X if (HasShape) Scr->SqueezeTitle = TRUE;
X#endif
X }
X | SQUEEZE_TITLE { list = &Scr->SqueezeTitleL;
X#ifdef SHAPE
X if (HasShape && Scr->SqueezeTitle == -1)
X Scr->SqueezeTitle = TRUE;
X#endif
X }
X LB win_sqz_entries RB
X | DONT_SQUEEZE_TITLE { Scr->SqueezeTitle = FALSE; }
X | DONT_SQUEEZE_TITLE { list = &Scr->DontSqueezeTitleL; }
X win_list
X ;
X
Xwin_sqz_entries : /* Empty */
X | win_sqz_entries string JKEYWORD signed_number number {
X if (Scr->FirstTime) {
X do_squeeze_entry (list, $2, $3, $4, $5);
X }
X }
X ;
X
X
Xiconm_list : LB iconm_entries RB
X ;
X
Xiconm_entries : /* Empty */
X | iconm_entries iconm_entry
X ;
X
Xiconm_entry : string string number { if (Scr->FirstTime)
X AddToList(list, $1, (char *)
X AllocateIconManager($1, NULLSTR,
X $2,$3));
X }
X | string string string number
X { if (Scr->FirstTime)
X AddToList(list, $1, (char *)
X AllocateIconManager($1,$2,
X $3, $4));
X }
X ;
X
Xwin_list : LB win_entries RB
X ;
X
Xwin_entries : /* Empty */
X | win_entries win_entry
X ;
X
Xwin_entry : string { if (Scr->FirstTime)
X AddToList(list, $1, 0);
X }
X ;
X
Xicon_list : LB icon_entries RB
X ;
X
Xicon_entries : /* Empty */
X | icon_entries icon_entry
X ;
X
Xicon_entry : string string { if (Scr->FirstTime) AddToList(list, $1, $2); }
X ;
X
Xfunction : LB function_entries RB
X ;
X
Xfunction_entries: /* Empty */
X | function_entries function_entry
X ;
X
Xfunction_entry : action { AddToMenu(root, "", Action, NULLSTR, $1,
X NULLSTR, NULLSTR);
X Action = "";
X }
X ;
X
Xmenu : LB menu_entries RB
X ;
X
Xmenu_entries : /* Empty */
X | menu_entries menu_entry
X ;
X
Xmenu_entry : string action { AddToMenu(root, $1, Action, pull, $2,
X NULLSTR, NULLSTR);
X Action = "";
X pull = NULL;
X }
X | string LP string COLON string RP action {
X AddToMenu(root, $1, Action, pull, $7,
X $3, $5);
X Action = "";
X pull = NULL;
X }
X ;
X
Xaction : FKEYWORD { $$ = $1; }
X | FSKEYWORD string {
X $$ = $1;
X Action = $2;
X switch ($1) {
X case F_MENU:
X pull = GetRoot ($2, NULLSTR,NULLSTR);
X pull->prev = root;
X break;
X case F_WARPRING:
X if (!CheckWarpRingArg (Action)) {
X twmrc_error_prefix();
X fprintf (stderr,
X "ignoring invalid f.warptoring argument \"%s\"\n",
X Action);
X $$ = F_NOP;
X }
X case F_WARPTOSCREEN:
X if (!CheckWarpScreenArg (Action)) {
X twmrc_error_prefix();
X fprintf (stderr,
X "ignoring invalid f.warptoscreen argument \"%s\"\n",
X Action);
X $$ = F_NOP;
X }
X break;
X case F_COLORMAP:
X if (CheckColormapArg (Action)) {
X $$ = F_COLORMAP;
X } else {
X twmrc_error_prefix();
X fprintf (stderr,
X "ignoring invalid f.colormap argument \"%s\"\n",
X Action);
X $$ = F_NOP;
X }
X break;
X } /* end switch */
X }
X ;
X
X
Xsigned_number : number { $$ = $1; }
X | PLUS number { $$ = $2; }
X | MINUS number { $$ = -($2); }
X ;
X
Xbutton : BUTTON number { $$ = $2;
X if ($2 == 0)
X yyerror("bad button 0");
X
X if ($2 > MAX_BUTTONS)
X {
X $$ = 0;
X yyerror("button number too large");
X }
X }
X ;
X
Xstring : STRING { ptr = (char *)malloc(strlen($1)+1);
X strcpy(ptr, $1);
X RemoveDQuote(ptr);
X $$ = ptr;
X }
Xnumber : NUMBER { $$ = $1; }
X ;
X
X%%
Xyyerror(s) char *s;
X{
X twmrc_error_prefix();
X fprintf (stderr, "error in input file: %s\n", s ? s : "");
X ParseError = 1;
X}
XRemoveDQuote(str)
Xchar *str;
X{
X register char *i, *o;
X register n;
X register count;
X
X for (i=str+1, o=str; *i && *i != '\"'; o++)
X {
X if (*i == '\\')
X {
X switch (*++i)
X {
X case 'n':
X *o = '\n';
X i++;
X break;
X case 'b':
X *o = '\b';
X i++;
X break;
X case 'r':
X *o = '\r';
X i++;
X break;
X case 't':
X *o = '\t';
X i++;
X break;
X case 'f':
X *o = '\f';
X i++;
X break;
X case '0':
X if (*++i == 'x')
X goto hex;
X else
X --i;
X case '1': case '2': case '3':
X case '4': case '5': case '6': case '7':
X n = 0;
X count = 0;
X while (*i >= '0' && *i <= '7' && count < 3)
X {
X n = (n<<3) + (*i++ - '0');
X count++;
X }
X *o = n;
X break;
X hex:
X case 'x':
X n = 0;
X count = 0;
X while (i++, count++ < 2)
X {
X if (*i >= '0' && *i <= '9')
X n = (n<<4) + (*i - '0');
X else if (*i >= 'a' && *i <= 'f')
X n = (n<<4) + (*i - 'a') + 10;
X else if (*i >= 'A' && *i <= 'F')
X n = (n<<4) + (*i - 'A') + 10;
X else
X break;
X }
X *o = n;
X break;
X case '\n':
X i++; /* punt */
X o--; /* to account for o++ at end of loop */
X break;
X case '\"':
X case '\'':
X case '\\':
X default:
X *o = *i++;
X break;
X }
X }
X else
X *o = *i++;
X }
X *o = '\0';
X}
X
Xstatic MenuRoot *GetRoot(name, fore, back)
Xchar *name;
Xchar *fore, *back;
X{
X MenuRoot *tmp;
X
X tmp = FindMenuRoot(name);
X if (tmp == NULL)
X tmp = NewMenuRoot(name);
X
X if (fore)
X {
X int save;
X
X save = Scr->FirstTime;
X Scr->FirstTime = TRUE;
X GetColor(COLOR, &tmp->hi_fore, fore);
X GetColor(COLOR, &tmp->hi_back, back);
X Scr->FirstTime = save;
X }
X
X return tmp;
X}
X
Xstatic void GotButton(butt, func)
Xint butt, func;
X{
X int i;
X
X for (i = 0; i < NUM_CONTEXTS; i++)
X {
X if ((cont & (1 << i)) == 0)
X continue;
X
X Scr->Mouse[butt][i][mods].func = func;
X if (func == F_MENU)
X {
X pull->prev = NULL;
X Scr->Mouse[butt][i][mods].menu = pull;
X }
X else
X {
X root = GetRoot(TWM_ROOT, NULLSTR, NULLSTR);
X Scr->Mouse[butt][i][mods].item = AddToMenu(root,"x",Action,
X NULLSTR, func, NULLSTR, NULLSTR);
X }
X }
X Action = "";
X pull = NULL;
X cont = 0;
X mods_used |= mods;
X mods = 0;
X}
X
Xstatic void GotKey(key, func)
Xchar *key;
Xint func;
X{
X int i;
X
X for (i = 0; i < NUM_CONTEXTS; i++)
X {
X if ((cont & (1 << i)) == 0)
X continue;
X if (!AddFuncKey(key, i, mods, func, Name, Action))
X break;
X }
X
X Action = "";
X pull = NULL;
X cont = 0;
X mods_used |= mods;
X mods = 0;
X}
X
X
Xstatic void GotTitleButton (bitmapname, func, rightside)
X char *bitmapname;
X int func;
X Bool rightside;
X{
X if (!CreateTitleButton (bitmapname, func, Action, pull, rightside, True)) {
X twmrc_error_prefix();
X fprintf (stderr,
X "unable to create %s titlebutton \"%s\"\n",
X rightside ? "right" : "left", bitmapname);
X }
X Action = "";
X pull = NULL;
X}
X
Xstatic Bool CheckWarpScreenArg (s)
X register char *s;
X{
X XmuCopyISOLatin1Lowered (s, s);
X
X if (strcmp (s, WARPSCREEN_NEXT) == 0 ||
X strcmp (s, WARPSCREEN_PREV) == 0 ||
X strcmp (s, WARPSCREEN_BACK) == 0)
X return True;
X
X for (; *s && isascii(*s) && isdigit(*s); s++) ;
X return (*s ? False : True);
X}
X
X
Xstatic Bool CheckWarpRingArg (s)
X register char *s;
X{
X XmuCopyISOLatin1Lowered (s, s);
X
X if (strcmp (s, WARPSCREEN_NEXT) == 0 ||
X strcmp (s, WARPSCREEN_PREV) == 0)
X return True;
X
X return False;
X}
X
X
Xstatic Bool CheckColormapArg (s)
X register char *s;
X{
X XmuCopyISOLatin1Lowered (s, s);
X
X if (strcmp (s, COLORMAP_NEXT) == 0 ||
X strcmp (s, COLORMAP_PREV) == 0 ||
X strcmp (s, COLORMAP_DEFAULT) == 0)
X return True;
X
X return False;
X}
X
X
Xtwmrc_error_prefix ()
X{
X fprintf (stderr, "%s: line %d: ", ProgramName, yylineno);
X}
SHAR_EOF
if test 20621 -ne "`wc -c < gram.y`"
then
echo shar: error transmitting "gram.y" '(should have been 20621 characters)'
fi
fi
if test -f 'iconmgr.c'
then
echo shar: will not over-write existing file "iconmgr.c"
else
echo extracting "iconmgr.c"
sed 's/^X//' >iconmgr.c <<'SHAR_EOF'
X/*
X * Copyright 1989 Massachusetts Institute of Technology
X *
X * Permission to use, copy, modify, and distribute this software and its
X * documentation for any purpose and without fee is hereby granted, provided
X * that the above copyright notice appear in all copies and that both that
X * copyright notice and this permission notice appear in supporting
X * documentation, and that the name of M.I.T. not be used in advertising
X * or publicity pertaining to distribution of the software without specific,
X * written prior permission. M.I.T. makes no representations about the
X * suitability of this software for any purpose. It is provided "as is"
X * without express or implied warranty.
X *
X * M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
X * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL M.I.T.
X * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
X * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
X * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
X * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
X */
X
X/***********************************************************************
X *
X * $XConsortium: iconmgr.c,v 1.43 90/03/20 11:20:17 jim Exp $
X *
X * Icon Manager routines
X *
X * 09-Mar-89 Tom LaStrange File Created
X *
X ***********************************************************************/
X
X#include <stdio.h>
X#include "twm.h"
X#include "util.h"
X#include "parse.h"
X#include "screen.h"
X#include "resize.h"
X#include "add_window.h"
X#include "siconify.bm"
X#include "vdt.h"
X#include <X11/Xos.h>
X#include <X11/Xmu/CharSet.h>
X
Xint strcmp();
X
Xint iconmgr_textx = siconify_width+11;
XWList *Active = NULL;
XWList *DownIconManager = NULL;
Xint iconifybox_width = siconify_width;
Xint iconifybox_height = siconify_height;
X
X/***********************************************************************
X *
X * Procedure:
X * CreateIconManagers - creat all the icon manager windows
X * for this screen.
X *
X * Returned Value:
X * none
X *
X * Inputs:
X * none
X *
X ***********************************************************************
X */
X
Xvoid CreateIconManagers()
X{
X IconMgr *p;
X int mask;
X char str[100];
X char str1[100];
X Pixel background;
X char *icon_name;
X
X if (Scr->NoIconManagers)
X return;
X
X if (Scr->siconifyPm == NULL)
X {
X Scr->siconifyPm = XCreatePixmapFromBitmapData(dpy, Scr->Root,
X siconify_bits, siconify_width, siconify_height, 1, 0, 1);
X }
X
X for (p = &Scr->iconmgr; p != NULL; p = p->next)
X {
X mask = XParseGeometry(p->geometry, &JunkX, &JunkY,
X (unsigned int *) &p->width, (unsigned int *)&p->height);
X
X if (mask & XNegative)
X JunkX = Scr->MyDisplayWidth - p->width -
X (2 * Scr->BorderWidth) + JunkX;
X
X if (mask & YNegative)
X JunkY = Scr->MyDisplayHeight - p->height -
X (2 * Scr->BorderWidth) + JunkY;
X
X background = Scr->IconManagerC.back;
X GetColorFromList(Scr->IconManagerBL, p->name, (XClassHint *)NULL,
X &background);
X
X p->w = XCreateSimpleWindow(dpy, Scr->Root,
X JunkX, JunkY, p->width, p->height, 1,
X Scr->Black, background);
X
X sprintf(str, "%s Icon Manager", p->name);
X sprintf(str1, "%s Icons", p->name);
X if (p->icon_name)
X icon_name = p->icon_name;
X else
X icon_name = str1;
X
X XSetStandardProperties(dpy, p->w, str, icon_name, None, NULL, 0, NULL);
X
X p->twm_win = AddWindow(p->w, TRUE, p);
X SetMapStateProp (p->twm_win, WithdrawnState);
X }
X for (p = &Scr->iconmgr; p != NULL; p = p->next)
X {
X GrabButtons(p->twm_win);
X GrabKeys(p->twm_win);
X }
X}
X
X/***********************************************************************
X *
X * Procedure:
X * AllocateIconManager - allocate a new icon manager
X *
X * Inputs:
X * name - the name of this icon manager
X * icon_name - the name of the associated icon
X * geom - a geometry string to eventually parse
X * columns - the number of columns this icon manager has
X *
X ***********************************************************************
X */
X
XIconMgr *AllocateIconManager(name, icon_name, geom, columns)
X char *name;
X char *geom;
X char *icon_name;
X int columns;
X{
X IconMgr *p;
X
X#ifdef DEBUG_ICONMGR
X fprintf(stderr, "AllocateIconManager\n");
X fprintf(stderr, " name=\"%s\" icon_name=\"%s\", geom=\"%s\", col=%d\n",
X name, icon_name, geom, columns);
X#endif
X
X if (Scr->NoIconManagers)
X return NULL;
X
X p = (IconMgr *)malloc(sizeof(IconMgr));
X p->name = name;
X p->icon_name = icon_name;
X p->geometry = geom;
X p->columns = columns;
X p->first = NULL;
X p->last = NULL;
X p->active = NULL;
X p->scr = Scr;
X p->count = 0;
X p->x = 0;
X p->y = 0;
X p->width = 150;
X p->height = 10;
X
X Scr->iconmgr.lasti->next = p;
X p->prev = Scr->iconmgr.lasti;
X Scr->iconmgr.lasti = p;
X p->next = NULL;
X
X return(p);
X}
X
X/***********************************************************************
X *
X * Procedure:
X * MoveIconManager - move the pointer around in an icon manager
X *
X * Inputs:
X * dir - one of the following:
X * F_FORWICONMGR - forward in the window list
X * F_BACKICONMGR - backward in the window list
X * F_UPICONMGR - up one row
X * F_DOWNICONMGR - down one row
X * F_LEFTICONMGR - left one column
X * F_RIGHTICONMGR - right one column
X *
X * Special Considerations:
X * none
X *
X ***********************************************************************
X */
X
Xvoid MoveIconManager(dir)
X int dir;
X{
X IconMgr *ip;
X WList *tmp = NULL;
X int cur_row, cur_col, new_row, new_col;
X int row_inc, col_inc;
X int got_it;
X
X if (!Active) return;
X
X cur_row = Active->row;
X cur_col = Active->col;
X ip = Active->iconmgr;
X
X row_inc = 0;
X col_inc = 0;
X got_it = FALSE;
X
X switch (dir)
X {
X case F_FORWICONMGR:
X if ((tmp = Active->next) == NULL)
X tmp = ip->first;
X got_it = TRUE;
X break;
X
X case F_BACKICONMGR:
X if ((tmp = Active->prev) == NULL)
X tmp = ip->last;
X got_it = TRUE;
X break;
X
X case F_UPICONMGR:
X row_inc = -1;
X break;
X
X case F_DOWNICONMGR:
X row_inc = 1;
X break;
X
X case F_LEFTICONMGR:
X col_inc = -1;
X break;
X
X case F_RIGHTICONMGR:
X col_inc = 1;
X break;
X }
X
X /* If got_it is FALSE ast this point then we got a left, right,
X * up, or down, command. We will enter this loop until we find
X * a window to warp to.
X */
X new_row = cur_row;
X new_col = cur_col;
X
X while (!got_it)
X {
X new_row += row_inc;
X new_col += col_inc;
X if (new_row < 0)
X new_row = ip->cur_rows - 1;
X if (new_col < 0)
X new_col = ip->cur_columns - 1;
X if (new_row >= ip->cur_rows)
X new_row = 0;
X if (new_col >= ip->cur_columns)
X new_col = 0;
X
X /* Now let's go through the list to see if there is an entry with this
X * new position
X */
X for (tmp = ip->first; tmp != NULL; tmp = tmp->next)
X {
X if (tmp->row == new_row && tmp->col == new_col)
X {
X got_it = TRUE;
X break;
X }
X }
X }
X
X if (!got_it)
X {
X fprintf (stderr,
X "%s: unable to find window (%d, %d) in icon manager\n",
X ProgramName, new_row, new_col);
X return;
X }
X
X /* raise the frame so the icon manager is visible */
X if (ip->twm_win->mapped) {
X RaiseFrame(ip->twm_win);
X XWarpPointer(dpy, None, tmp->icon, 0,0,0,0, 5, 5);
X } else {
X if (tmp->twm->title_height) {
X int tbx = Scr->TBInfo.titlex;
X int x = tmp->twm->highlightx;
X XWarpPointer (dpy, None, tmp->twm->title_w, 0, 0, 0, 0,
X tbx + (x - tbx) / 2,
X Scr->TitleHeight / 4);
X } else {
X XWarpPointer (dpy, None, tmp->twm->w, 0, 0, 0, 0, 5, 5);
X }
X }
X}
X
X/***********************************************************************
X *
X * Procedure:
X * JumpIconManager - jump from one icon manager to another,
X * possibly even on another screen
X *
X * Inputs:
X * dir - one of the following:
X * F_NEXTICONMGR - go to the next icon manager
X * F_PREVICONMGR - go to the previous one
X *
X ***********************************************************************
X */
X
Xvoid JumpIconManager(dir)
X register int dir;
X{
X IconMgr *ip, *tmp_ip = NULL;
X int got_it = FALSE;
X ScreenInfo *sp;
X int screen;
X
X if (!Active) return;
X
X
X#define ITER(i) (dir == F_NEXTICONMGR ? (i)->next : (i)->prev)
X#define IPOFSP(sp) (dir == F_NEXTICONMGR ? &(sp->iconmgr) : sp->iconmgr.lasti)
X#define TEST(ip) if ((ip)->count != 0 && (ip)->twm_win->mapped) \
X { got_it = TRUE; break; }
X
X ip = Active->iconmgr;
X for (tmp_ip = ITER(ip); tmp_ip; tmp_ip = ITER(tmp_ip)) {
X TEST (tmp_ip);
X }
X
X if (!got_it) {
X int origscreen = ip->scr->screen;
X int inc = (dir == F_NEXTICONMGR ? 1 : -1);
X
X for (screen = origscreen + inc; ; screen += inc) {
X if (screen >= NumScreens)
X screen = 0;
X else if (screen < 0)
X screen = NumScreens - 1;
X
X sp = ScreenList[screen];
X if (sp) {
X for (tmp_ip = IPOFSP (sp); tmp_ip; tmp_ip = ITER(tmp_ip)) {
X TEST (tmp_ip);
X }
X }
X if (got_it || screen == origscreen) break;
X }
X }
X
X#undef ITER
X#undef IPOFSP
X#undef TEST
X
X if (!got_it) {
X XBell (dpy, 0);
X return;
X }
X
X /* raise the frame so it is visible */
X RaiseFrame(tmp_ip->twm_win);
X if (tmp_ip->active)
X XWarpPointer(dpy, None, tmp_ip->active->icon, 0,0,0,0, 5, 5);
X else
X XWarpPointer(dpy, None, tmp_ip->w, 0,0,0,0, 5, 5);
X}
X
X/***********************************************************************
X *
X * Procedure:
X * AddIconManager - add a window to an icon manager
X *
X * Inputs:
X * tmp_win - the TwmWindow structure
X *
X ***********************************************************************
X */
X
XWList *AddIconManager(tmp_win)
X TwmWindow *tmp_win;
X{
X WList *tmp;
X int h;
X unsigned long valuemask; /* mask for create windows */
X XSetWindowAttributes attributes; /* attributes for create windows */
X IconMgr *ip;
X
X tmp_win->list = NULL;
X
X if (tmp_win->iconmgr || tmp_win->transient || Scr->NoIconManagers)
X return NULL;
X
X if (LookInList(Scr->IconMgrNoShow, tmp_win->full_name, &tmp_win->class))
X return NULL;
X if (Scr->IconManagerDontShow &&
X !LookInList(Scr->IconMgrShow, tmp_win->full_name, &tmp_win->class))
X return NULL;
X if ((ip = (IconMgr *)LookInList(Scr->IconMgrs, tmp_win->full_name,
X &tmp_win->class)) == NULL)
X ip = &Scr->iconmgr;
X
X tmp = (WList *) malloc(sizeof(WList));
X tmp->iconmgr = ip;
X tmp->next = NULL;
X tmp->active = FALSE;
X tmp->down = FALSE;
X
X InsertInIconManager(ip, tmp, tmp_win);
X
X tmp->twm = tmp_win;
X
X tmp->fore = Scr->IconManagerC.fore;
X tmp->back = Scr->IconManagerC.back;
X tmp->highlight = Scr->IconManagerHighlight;
X
X GetColorFromList(Scr->IconManagerFL, tmp_win->full_name, &tmp_win->class,
X &tmp->fore);
X GetColorFromList(Scr->IconManagerBL, tmp_win->full_name, &tmp_win->class,
X &tmp->back);
X GetColorFromList(Scr->IconManagerHighlightL, tmp_win->full_name,
X &tmp_win->class, &tmp->highlight);
X
X h = Scr->IconManagerFont.height + 10;
X if (h < (siconify_height + 4))
X h = siconify_height + 4;
X
X ip->height = h * ip->count;
X tmp->me = ip->count;
X tmp->x = -1;
X tmp->y = -1;
X
X valuemask = (CWBackPixel | CWBorderPixel | CWEventMask | CWCursor);
X attributes.background_pixel = tmp->back;
X attributes.border_pixel = tmp->back;
X attributes.event_mask = (KeyPressMask | ButtonPressMask |
X ButtonReleaseMask | ExposureMask |
X EnterWindowMask | LeaveWindowMask);
X attributes.cursor = Scr->IconMgrCursor;
X tmp->w = XCreateWindow (dpy, ip->w, 0, 0, (unsigned int) 1,
X (unsigned int) h, (unsigned int) 0,
X CopyFromParent, (unsigned int) CopyFromParent,
X (Visual *) CopyFromParent, valuemask, &attributes);
X
X
X valuemask = (CWBackPixel | CWBorderPixel | CWEventMask | CWCursor);
X attributes.background_pixel = tmp->back;
X attributes.border_pixel = Scr->Black;
X attributes.event_mask = (ButtonReleaseMask| ButtonPressMask |
X ExposureMask);
X attributes.cursor = Scr->ButtonCursor;
X tmp->icon = XCreateWindow (dpy, tmp->w, 5, (int) (h - siconify_height)/2,
X (unsigned int) siconify_width,
X (unsigned int) siconify_height,
X (unsigned int) 0, CopyFromParent,
X (unsigned int) CopyFromParent,
X (Visual *) CopyFromParent,
X valuemask, &attributes);
X
X ip->count += 1;
X PackIconManager(ip);
X XMapWindow(dpy, tmp->w);
X
X XSaveContext(dpy, tmp->w, IconManagerContext, (caddr_t) tmp);
X XSaveContext(dpy, tmp->w, TwmContext, (caddr_t) tmp_win);
X XSaveContext(dpy, tmp->w, ScreenContext, (caddr_t) Scr);
X XSaveContext(dpy, tmp->icon, TwmContext, (caddr_t) tmp_win);
X XSaveContext(dpy, tmp->icon, ScreenContext, (caddr_t) Scr);
X tmp_win->list = tmp;
X
X if (!ip->twm_win->icon)
X {
X MapFrame(ip->twm_win);
X }
X
X return (tmp);
X}
X
X/***********************************************************************
X *
X * Procedure:
X * InsertInIconManager - put an allocated entry into an icon
X * manager
X *
X * Inputs:
X * ip - the icon manager pointer
X * tmp - the entry to insert
X *
X ***********************************************************************
X */
X
Xvoid InsertInIconManager(ip, tmp, tmp_win)
X IconMgr *ip;
X WList *tmp;
X TwmWindow *tmp_win;
X{
X WList *tmp1;
X int added;
X int (*compar)() = (Scr->CaseSensitive ? strcmp : XmuCompareISOLatin1);
X
X added = FALSE;
X if (ip->first == NULL)
X {
X ip->first = tmp;
X tmp->prev = NULL;
X ip->last = tmp;
X added = TRUE;
X }
X else if (Scr->SortIconMgr)
X {
X for (tmp1 = ip->first; tmp1 != NULL; tmp1 = tmp1->next)
X {
X if ((*compar)(tmp_win->icon_name, tmp1->twm->icon_name) < 0)
X {
X tmp->next = tmp1;
X tmp->prev = tmp1->prev;
X tmp1->prev = tmp;
X if (tmp->prev == NULL)
X ip->first = tmp;
X else
X tmp->prev->next = tmp;
X added = TRUE;
X break;
X }
X }
X }
X
X if (!added)
X {
X ip->last->next = tmp;
X tmp->prev = ip->last;
X ip->last = tmp;
X }
X}
X
Xvoid RemoveFromIconManager(ip, tmp)
X IconMgr *ip;
X WList *tmp;
X{
X if (tmp->prev == NULL)
X ip->first = tmp->next;
X else
X tmp->prev->next = tmp->next;
X
X if (tmp->next == NULL)
X ip->last = tmp->prev;
X else
X tmp->next->prev = tmp->prev;
X}
X
X/***********************************************************************
X *
X * Procedure:
X * RemoveIconManager - remove a window from the icon manager
X *
X * Inputs:
X * tmp_win - the TwmWindow structure
X *
X ***********************************************************************
X */
X
Xvoid RemoveIconManager(tmp_win)
X TwmWindow *tmp_win;
X{
X IconMgr *ip;
X WList *tmp;
X
X if (tmp_win->list == NULL)
X return;
X
X tmp = tmp_win->list;
X tmp_win->list = NULL;
X ip = tmp->iconmgr;
X
X RemoveFromIconManager(ip, tmp);
X
X XDeleteContext(dpy, tmp->icon, TwmContext);
X XDeleteContext(dpy, tmp->icon, ScreenContext);
X XDestroyWindow(dpy, tmp->icon);
X XDeleteContext(dpy, tmp->w, IconManagerContext);
X XDeleteContext(dpy, tmp->w, TwmContext);
X XDeleteContext(dpy, tmp->w, ScreenContext);
X XDestroyWindow(dpy, tmp->w);
X ip->count -= 1;
X free((char *) tmp);
X
X PackIconManager(ip);
X
X if (ip->count == 0)
X {
X UnmapFrame(ip->twm_win);
X }
X
X}
X
Xvoid ActiveIconManager(active)
X WList *active;
X{
X active->active = TRUE;
X Active = active;
X Active->iconmgr->active = active;
X DrawIconManagerBorder(active);
X}
X
Xvoid NotActiveIconManager(active)
X WList *active;
X{
X active->active = FALSE;
X DrawIconManagerBorder(active);
X}
X
Xvoid DrawIconManagerBorder(tmp)
X WList *tmp;
X{
X {
X XSetForeground(dpy, Scr->NormalGC, tmp->fore);
X XDrawRectangle(dpy, tmp->w, Scr->NormalGC, 2, 2,
X tmp->width-5, tmp->height-5);
X
X if (tmp->active && Scr->Highlight)
X XSetForeground(dpy, Scr->NormalGC, tmp->highlight);
X else
X XSetForeground(dpy, Scr->NormalGC, tmp->back);
X
X XDrawRectangle(dpy, tmp->w, Scr->NormalGC, 0, 0,
X tmp->width-1, tmp->height-1);
X XDrawRectangle(dpy, tmp->w, Scr->NormalGC, 1, 1,
X tmp->width-3, tmp->height-3);
X }
X}
X
X/***********************************************************************
X *
X * Procedure:
X * SortIconManager - sort the dude
X *
X * Inputs:
X * ip - a pointer to the icon manager struture
X *
X ***********************************************************************
X */
X
Xvoid SortIconManager(ip)
X IconMgr *ip;
X{
X WList *tmp1, *tmp2;
X int done;
X int (*compar)() = (Scr->CaseSensitive ? strcmp : XmuCompareISOLatin1);
X
X if (ip == NULL)
X ip = Active->iconmgr;
X
X done = FALSE;
X do
X {
X for (tmp1 = ip->first; tmp1 != NULL; tmp1 = tmp1->next)
X {
X if ((tmp2 = tmp1->next) == NULL)
X {
X done = TRUE;
X break;
X }
X if ((*compar)(tmp1->twm->icon_name, tmp2->twm->icon_name) > 0)
X {
X /* take it out and put it back in */
X RemoveFromIconManager(ip, tmp2);
X InsertInIconManager(ip, tmp2, tmp2->twm);
X break;
X }
X }
X }
X while (!done);
X PackIconManager(ip);
X}
X
X/***********************************************************************
X *
X * Procedure:
X * PackIconManager - pack the icon manager windows following
X * an addition or deletion
X *
X * Inputs:
X * ip - a pointer to the icon manager struture
X *
X ***********************************************************************
X */
X
Xvoid PackIconManager(ip)
X IconMgr *ip;
X{
X int newwidth, i, row, col, maxcol, colinc, rowinc, wheight, wwidth;
X int new_x, new_y;
X int savewidth;
X WList *tmp;
X
X wheight = Scr->IconManagerFont.height + 10;
X if (wheight < (siconify_height + 4))
X wheight = siconify_height + 4;
X
X wwidth = ip->width / ip->columns;
X
X rowinc = wheight;
X colinc = wwidth;
X
X row = 0;
X col = ip->columns;
X maxcol = 0;
X for (i = 0, tmp = ip->first; tmp != NULL; i++, tmp = tmp->next)
X {
X tmp->me = i;
X if (++col >= ip->columns)
X {
X col = 0;
X row += 1;
X }
X if (col > maxcol)
X maxcol = col;
X
X new_x = col * colinc;
X new_y = (row-1) * rowinc;
X
X /* if the position or size has not changed, don't touch it */
X if (tmp->x != new_x || tmp->y != new_y ||
X tmp->width != wwidth || tmp->height != wheight)
X {
X XMoveResizeWindow(dpy, tmp->w, new_x, new_y, wwidth, wheight);
X
X tmp->row = row-1;
X tmp->col = col;
X tmp->x = new_x;
X tmp->y = new_y;
X tmp->width = wwidth;
X tmp->height = wheight;
X }
X }
X maxcol += 1;
X
X ip->cur_rows = row;
X ip->cur_columns = maxcol;
X ip->height = row * rowinc;
X if (ip->height == 0)
X ip->height = rowinc;
X newwidth = maxcol * colinc;
X if (newwidth == 0)
X newwidth = colinc;
X
X XResizeWindow(dpy, ip->w, newwidth, ip->height);
X
X savewidth = ip->width;
X if (ip->twm_win)
X SetupWindow (ip->twm_win,
X ip->twm_win->frame_x, ip->twm_win->frame_y,
X newwidth, ip->height + ip->twm_win->title_height, -1);
X ip->width = savewidth;
X}
SHAR_EOF
if test 18716 -ne "`wc -c < iconmgr.c`"
then
echo shar: error transmitting "iconmgr.c" '(should have been 18716 characters)'
fi
fi
if test -f 'iconmgr.h'
then
echo shar: will not over-write existing file "iconmgr.h"
else
echo extracting "iconmgr.h"
sed 's/^X//' >iconmgr.h <<'SHAR_EOF'
X/*
X * Copyright 1989 Massachusetts Institute of Technology
X *
X * Permission to use, copy, modify, and distribute this software and its
X * documentation for any purpose and without fee is hereby granted, provided
X * that the above copyright notice appear in all copies and that both that
X * copyright notice and this permission notice appear in supporting
X * documentation, and that the name of M.I.T. not be used in advertising
X * or publicity pertaining to distribution of the software without specific,
X * written prior permission. M.I.T. makes no representations about the
X * suitability of this software for any purpose. It is provided "as is"
X * without express or implied warranty.
X *
X * M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
X * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL M.I.T.
X * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
X * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
X * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
X * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
X */
X
X/***********************************************************************
X *
X * $XConsortium: iconmgr.h,v 1.11 89/12/10 17:47:02 jim Exp $
X *
X * Icon Manager includes
X *
X * 09-Mar-89 Tom LaStrange File Created
X *
X ***********************************************************************/
X
X#ifndef _ICONMGR_
X#define _ICONMGR_
X
Xtypedef struct WList
X{
X struct WList *next;
X struct WList *prev;
X struct TwmWindow *twm;
X struct IconMgr *iconmgr;
X Window w;
X Window icon;
X int x, y, width, height;
X int row, col;
X int me;
X Pixel fore, back, highlight;
X unsigned top, bottom;
X short active;
X short down;
X} WList;
X
Xtypedef struct IconMgr
X{
X struct IconMgr *next; /* pointer to the next icon manager */
X struct IconMgr *prev; /* pointer to the previous icon mgr */
X struct IconMgr *lasti; /* pointer to the last icon mgr */
X struct WList *first; /* first window in the list */
X struct WList *last; /* last window in the list */
X struct WList *active; /* the active entry */
X TwmWindow *twm_win; /* back pointer to the new parent */
X struct ScreenInfo *scr; /* the screen this thing is on */
X Window w; /* this icon manager window */
X char *geometry; /* geometry string */
X char *name;
X char *icon_name;
X int x, y, width, height;
X int columns, cur_rows, cur_columns;
X int count;
X} IconMgr;
X
Xextern int iconmgr_textx;
Xextern WList *DownIconManager;
X
Xextern void CreateIconManagers();
Xextern IconMgr *AllocateIconManager();
Xextern void MoveIconManager();
Xextern void JumpIconManager();
Xextern WList *AddIconManager();
Xextern void InsertInIconManager();
Xextern void RemoveFromIconManager();
Xextern void RemoveIconManager();
Xextern void ActiveIconManager();
Xextern void NotActiveIconManager();
Xextern void DrawIconManagerBorder();
Xextern void SortIconManager();
Xextern void PackIconManager();
X
X
X#endif /* _ICONMGR_ */
SHAR_EOF
if test 3052 -ne "`wc -c < iconmgr.h`"
then
echo shar: error transmitting "iconmgr.h" '(should have been 3052 characters)'
fi
fi
if test -f 'icons.h'
then
echo shar: will not over-write existing file "icons.h"
else
echo extracting "icons.h"
sed 's/^X//' >icons.h <<'SHAR_EOF'
X/*
X * Copyright 1989 Massachusetts Institute of Technology
X *
X * Permission to use, copy, modify, and distribute this software and its
X * documentation for any purpose and without fee is hereby granted, provided
X * that the above copyright notice appear in all copies and that both that
X * copyright notice and this permission notice appear in supporting
X * documentation, and that the name of M.I.T. not be used in advertising
X * or publicity pertaining to distribution of the software without specific,
X * written prior permission. M.I.T. makes no representations about the
X * suitability of this software for any purpose. It is provided "as is"
X * without express or implied warranty.
X *
X * M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
X * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL M.I.T.
X * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
X * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
X * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
X * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
X */
X
X/**********************************************************************
X *
X * $XConsortium: icons.h,v 1.4 89/07/18 17:16:24 jim Exp $
X *
X * Icon releated definitions
X *
X * 10-Apr-89 Tom LaStrange Initial Version.
X *
X **********************************************************************/
X
X#ifndef ICONS_H
X#define ICONS_H
X
Xtypedef struct IconRegion
X{
X struct IconRegion *next;
X int x, y, w, h;
X int grav1, grav2;
X int stepx, stepy; /* allocation granularity */
X struct IconEntry *entries;
X} IconRegion;
X
Xtypedef struct IconEntry
X{
X struct IconEntry *next;
X int x, y, w, h;
X TwmWindow *twm_win;
X short used;
X}IconEntry;
X
X#endif /* ICONS_H */
SHAR_EOF
if test 1836 -ne "`wc -c < icons.h`"
then
echo shar: error transmitting "icons.h" '(should have been 1836 characters)'
fi
fi
if test -f 'lex.l'
then
echo shar: will not over-write existing file "lex.l"
else
echo extracting "lex.l"
sed 's/^X//' >lex.l <<'SHAR_EOF'
X%{
X/*****************************************************************************/
X/** Copyright 1988 by Evans & Sutherland Computer Corporation, **/
X/** Salt Lake City, Utah **/
X/** Portions Copyright 1989 by the Massachusetts Institute of Technology **/
X/** Cambridge, Massachusetts **/
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/** names of Evans & Sutherland and M.I.T. not be used in advertising **/
X/** in publicity pertaining to distribution of the software without **/
X/** specific, written prior permission. **/
X/** **/
X/** EVANS & SUTHERLAND AND M.I.T. DISCLAIM ALL WARRANTIES WITH REGARD **/
X/** TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT- **/
X/** ABILITY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND OR **/
X/** M.I.T. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAM- **/
X/** AGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA **/
X/** OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER **/
X/** TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE **/
X/** OR PERFORMANCE OF THIS SOFTWARE. **/
X/*****************************************************************************/
X
X/***********************************************************************
X *
X * $XConsortium: lex.l,v 1.62 89/12/10 17:46:33 jim Exp $
X *
X * .twmrc lex file
X *
X * 12-Nov-87 Thomas E. LaStrange File created
X *
X ***********************************************************************/
X
X/* #include <stdio.h> */ /* lex already includes stdio.h */
X#include "gram.h"
X#include "parse.h"
Xextern char *ProgramName;
X
Xextern int ParseError;
X
X%}
X
Xstring \"([^"]|\\.)*\"
Xnumber [0-9]+
X%%
X"{" { return (LB); }
X"}" { return (RB); }
X"(" { return (LP); }
X")" { return (RP); }
X"=" { return (EQUALS); }
X":" { return (COLON); }
X"+" { return PLUS; }
X"-" { return MINUS; }
X"|" { return OR; }
X
X[a-zA-Z\.]+ { int token = parse_keyword (yytext,
X &yylval.num);
X if (token == ERRORTOKEN) {
X twmrc_error_prefix();
X fprintf (stderr,
X "ignoring unknown keyword: %s\n",
X yytext);
X ParseError = 1;
X } else
X return token;
X }
X
X"!" { yylval.num = F_EXEC; return FSKEYWORD; }
X"^" { yylval.num = F_CUT; return FSKEYWORD; }
X
X{string} { yylval.ptr = (char *)yytext; return STRING; }
X{number} { (void)sscanf(yytext, "%d", &yylval.num);
X return (NUMBER);
X }
X\#[^\n]*\n {;}
X[\n\t ] {;}
X. {
X twmrc_error_prefix();
X fprintf (stderr,
X "ignoring character \"%s\"\n",
X yytext);
X ParseError = 1;
X }
X%%
Xyywrap() { return(1);}
X
X#undef unput
X#undef input
X#undef output
X#undef feof
X#define unput(c) twmUnput(c)
X#define input() (*twmInputFunc)()
X#define output(c) TwmOutput(c)
X#define feof() (1)
SHAR_EOF
if test 3708 -ne "`wc -c < lex.l`"
then
echo shar: error transmitting "lex.l" '(should have been 3708 characters)'
fi
fi
if test -f 'list.h'
then
echo shar: will not over-write existing file "list.h"
else
echo extracting "list.h"
sed 's/^X//' >list.h <<'SHAR_EOF'
X/*****************************************************************************/
X/** Copyright 1988 by Evans & Sutherland Computer Corporation, **/
X/** Salt Lake City, Utah **/
X/** Portions Copyright 1989 by the Massachusetts Institute of Technology **/
X/** Cambridge, Massachusetts **/
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/** names of Evans & Sutherland and M.I.T. not be used in advertising **/
X/** in publicity pertaining to distribution of the software without **/
X/** specific, written prior permission. **/
X/** **/
X/** EVANS & SUTHERLAND AND M.I.T. DISCLAIM ALL WARRANTIES WITH REGARD **/
X/** TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT- **/
X/** ABILITY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND OR **/
X/** M.I.T. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAM- **/
X/** AGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA **/
X/** OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER **/
X/** TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE **/
X/** OR PERFORMANCE OF THIS SOFTWARE. **/
X/*****************************************************************************/
X
X
X/**********************************************************************
X *
X * $XConsortium: list.h,v 1.11 89/10/27 14:01:23 jim Exp $
X *
X * TWM list handling external definitions
X *
X * 11-Apr-88 Tom LaStrange Initial Version.
X *
X **********************************************************************/
X
X#ifndef _LIST_
X#define _LIST_
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 int namelen; /* strlen(name) */
X char *ptr; /* list dependent data */
X};
X
X
Xextern void AddToList();
Xextern char* LookInList();
Xextern char* LookInNameList();
X
X#endif /* _LIST_ */
X
SHAR_EOF
if test 2769 -ne "`wc -c < list.h`"
then
echo shar: error transmitting "list.h" '(should have been 2769 characters)'
fi
fi
if test -f 'move.h'
then
echo shar: will not over-write existing file "move.h"
else
echo extracting "move.h"
sed 's/^X//' >move.h <<'SHAR_EOF'
X/*****************************************************************************/
X/** Copyright 1990 by Solbourne Computer Inc. **/
X/** Longmont, Colorado **/
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 Solbourne not be used in advertising **/
X/** in publicity pertaining to distribution of the software without **/
X/** specific, written prior permission. **/
X/** **/
X/** SOLBOURNE COMPUTER INC. DISCLAIMS ALL WARRANTIES WITH REGARD **/
X/** TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT- **/
X/** ABILITY AND FITNESS, IN NO EVENT SHALL SOLBOURNE **/
X/** BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAM- **/
X/** AGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA **/
X/** OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER **/
X/** TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE **/
X/** OR PERFORMANCE OF THIS SOFTWARE. **/
X/*****************************************************************************/
X
X/**********************************************************************
X *
X * $XConsortium: move.h,v 1.140 90/03/23 11:42:33 jim Exp $
X *
X * New window move code to allow interaction with the virtual desktop
X *
X * 23-Aug-90 Tom LaStrange Initial Version.
X *
X **********************************************************************/
X
X#ifndef _MOVE_
X#define _MOVE_
X
X#define IN_PANNER 0x80000
X#define OUT_PANNER 0x40000
X
Xvoid DragFrame();
Xvoid DragIcon();
Xvoid StartMove();
X
X#endif /* _MOVE_ */
X
SHAR_EOF
if test 2420 -ne "`wc -c < move.h`"
then
echo shar: error transmitting "move.h" '(should have been 2420 characters)'
fi
fi
# end of shell archive
exit 0
dan
----------------------------------------------------
O'Reilly && Associates argv at sun.com / argv at ora.com
Opinions expressed reflect those of the author only.
More information about the Comp.sources.x
mailing list