c~TWM.SAVEeTWM.SAVEIBACKUP/LOG *.C,*.H,*.BM,*.Y,*.L,TWM.EXE,SAMPLE.RC,MAKEFILE. TWM.SAVE/SAVE FIELDS %ۻؖV5.4 _WARTHG::  _$4$DUA7: V5.3 ~  *[FIELDS.X.TWM]ADD_WINDOW.C;1+,3.6/% 4P650- 0@123KPWO65637@uD8.B9fG%HJjO/*****************************************************************************/O/** Copyright 1988 by Evans & Sutherland Computer Corporation, **/O/** Salt Lake City, Utah **/O/** **/O/** All Rights Reserved **/O/** **/O/** Permission to use, copy, modify, and distribute this software and **/O/** its documentation for any purpose and without fee is hereby **/O/** granted, provided that the above copyright notice appear in all **/O/** copies and that both that copyright notice and this permis- **/O/** sion notice appear in supporting documentation, and that the **/O/** name of Evans & Sutherland not be used in advertising or publi- **/O/** city pertaining to distribution of the software without specif- **/O/** ic, written prior permission. **/O/** **/O/** EVANS & SUTHERLAND DISCLAIMS ALL WARRANTIES WITH REGARD TO **/O/** THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILI- **/O/** TY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND BE LIABLE **/O/** FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAM- **/O/** AGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, **/O/** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS **/O/** ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PER- **/O/** FORMANCE OF THIS SOFTWARE. **/O/*****************************************************************************/G/********************************************************************** *< * $Header: add_window.c,v 1.50 88/10/13 07:19:19 toml Exp $ *; * Add a new window, put the titlbar and other stuff around * the window *2 * 31-Mar-88 Tom LaStrange Initial Version. *H **********************************************************************/ #ifndef lintstatic char RCSinfo[]=<"$Header: add_window.c,v 1.50 88/10/13 07:19:19 toml Exp $"; #endif lint#include #include "twm.h"#include #include "add_window.h"#include "util.h"#include "resize.h"#include "gram.h"#include "list.h"#include "events.h"#include "menus.h"#include "iconify.bm"#include "resize.bm"#ifndef NOFOCUS#include "focus.bm"#else#define focus_width 0#endif#include "hilite.bm" int AddingX; int AddingY; int AddingW; int AddingH;static int PlaceX = 50;static int PlaceY = 50;=char NoName[] = "No Name"; /* name if no name is specified */H/*********************************************************************** * * Procedure:/ * AddWindow - add a new window to the twm list * * Returned Value:5 * (TwmWindow *) - pointer to the TwmWindow structure * * Inputs:) * w - the window id of the window to add *H *********************************************************************** */ TwmWindow * AddWindow(w) Window w;{8 TwmWindow *tmp_win; /* new twm window structure */ int stat; char *prop;; unsigned long valuemask; /* mask for create windows */H XSetWindowAttributes attributes; /* attributes for create windows */( int width, len; /* tmp variable */ int junk1, junk2, junk3; int x;* Pixmap pm; /* tmp pixmap variable */6 XWindowChanges xwc; /* change window structure */0 unsigned int xwcm; /* change window mask */< int dont_know; /* don't know where to put the window */ XColor blob, cret; XEvent event; XGCValues gcv; unsigned long gcm, mask; #ifdef DEBUG0 fprintf(stderr, "AddWindow: w = 0x%x\n", w);#endif+ /* allocate space for the twm window */5 tmp_win = (TwmWindow *)malloc(sizeof(TwmWindow)); tmp_win->w = w; tmp_win->zoomed = ZOOM_NONE; if (w == IconManager) IconManagerPtr = tmp_win;6 XSelectInput(dpy, tmp_win->w, PropertyChangeMask);: XGetWindowAttributes(dpy, tmp_win->w, &tmp_win->attr);0 XFetchName(dpy, tmp_win->w, &tmp_win->name); tmp_win->class = NoClass;4 XGetClassHint(dpy, tmp_win->w, &tmp_win->class); #ifdef DEBUG8 fprintf(stderr, " name = \"%s\"\n", tmp_win->name);#endif4 tmp_win->wmhints = XGetWMHints(dpy, tmp_win->w);H if (tmp_win->wmhints && (tmp_win->wmhints->flags & WindowGroupHint))1 tmp_win->group = tmp_win->wmhints->window_group; else tmp_win->group = NULL;? if (XGetNormalHints(dpy, tmp_win->w, &tmp_win->hints) == 0) tmp_win->hints.flags = 0;< if (strncmp("xterm", tmp_win->class.res_name, 5) == 0 ||: strncmp("XTerm", tmp_win->class.res_class, 5) == 0 ||= strncmp("hpterm", tmp_win->class.res_name, 6) == 0 ||9 strncmp("HPterm", tmp_win->class.res_class, 6) == 0) tmp_win->xterm = TRUE; else tmp_win->xterm = FALSE; dont_know = TRUE;) if (tmp_win->hints.flags & PPosition) { #ifdef DEBUG0 fprintf(stderr, " program specified hints\n");#endif$ tmp_win->attr.x = tmp_win->hints.x;$ tmp_win->attr.y = tmp_win->hints.y;, tmp_win->attr.width = tmp_win->hints.width;. tmp_win->attr.height = tmp_win->hints.height; }* if (tmp_win->hints.flags & USPosition) { #ifdef DEBUG- fprintf(stderr, " user specified hints\n");#endif dont_know = FALSE;$ tmp_win->attr.x = tmp_win->hints.x;$ tmp_win->attr.y = tmp_win->hints.y;, tmp_win->attr.width = tmp_win->hints.width;. tmp_win->attr.height = tmp_win->hints.height; } if (tmp_win->name == NULL) tmp_win->name = NoName;( if (tmp_win->class.res_name == NULL)& tmp_win->class.res_name = NoName;) if (tmp_win->class.res_class == NULL)' tmp_win->class.res_class = NoName;' tmp_win->full_name = tmp_win->name;K tmp_win->highlight = !(short)LookInList(NO_HILITE, tmp_win->full_name,  &tmp_win->class);L tmp_win->auto_raise = (short)LookInList(AUTO_RAISE, tmp_win->full_name,  &tmp_win->class);7 tmp_win->iconify_by_unmapping = IconifyByUnmapping; if (IconifyByUnmapping) {! tmp_win->iconify_by_unmapping = F !(short)LookInList(DONT_ICONIFY_BY_UNMAPPING, tmp_win->full_name, &tmp_win->class); }P if (NoTitlebar || LookInList(NO_TITLE, tmp_win->full_name, &tmp_win->class)) tmp_win->title_height = 0; else8 tmp_win->title_height = TITLE_BAR_HEIGHT + BorderWidth;8 if (HandlingEvents && dont_know && !RandomPlacement) {A if (!(tmp_win->wmhints && tmp_win->wmhints->flags & StateHint &&7 tmp_win->wmhints->initial_state == IconicState) &&G (tmp_win->xterm || (tmp_win->attr.x == 0 && tmp_win->attr.y == 0))) {: /* better wait until all the mouse buttons have been  * released. */ while (TRUE) { XUngrabServer(dpy); XSync(dpy); XGrabServer(dpy);1 XQueryPointer(dpy, Root, &JunkRoot, &JunkChild,5 &JunkX, &JunkY, &AddingX, &AddingY, &JunkMask); if (JunkMask != 0) continue;' stat = XGrabPointer(dpy, Root, False,* ButtonPressMask | ButtonReleaseMask,# GrabModeAsync, GrabModeAsync,* Root, UpperLeftCursor, CurrentTime); if (stat == GrabSuccess) break; }8 width = XTextWidth(InitialFont.font, tmp_win->name, strlen(tmp_win->name)) + 20;F XResizeWindow(dpy, InitialWindow, width, InitialFont.height + 4);$ XMapRaised(dpy, InitialWindow);: XDrawImageString(dpy, InitialWindow, InitialNormalGC,# 10, 2 + InitialFont.font->ascent,( tmp_win->name, strlen(tmp_win->name));# AddingW = tmp_win->attr.width;$ AddingH = tmp_win->attr.height;5 AddingW = tmp_win->attr.width + 2 * BorderWidth;= AddingH = tmp_win->attr.height + tmp_win->title_height + 2 * BorderWidth; while (TRUE) {1 XQueryPointer(dpy, Root, &JunkRoot, &JunkChild,5 &JunkX, &JunkY, &AddingX, &AddingY, &JunkMask);8 MoveOutline(Root, AddingX, AddingY, AddingW, AddingH);1 if (XCheckTypedEvent(dpy, ButtonPress, &event)) {% AddingX = event.xbutton.x_root;% AddingY = event.xbutton.y_root; break; } }) if (event.xbutton.button == Button2) {+ XWarpPointer(dpy, None, Root, 0, 0, 0, 0,0 AddingX + AddingW/2, AddingY + AddingH/2);> AddStartResize(tmp_win, AddingX, AddingY, AddingW, AddingH); while (TRUE) { int lastx, lasty;5 XQueryPointer(dpy, Root, &JunkRoot, &JunkChild,2 &JunkX, &JunkY, &AddingX, &AddingY, &JunkMask);/ if (lastx != AddingX || lasty != AddingY) {' DoResize(AddingX, AddingY, tmp_win); lastx = AddingX; lasty = AddingY; }7 if (XCheckTypedEvent(dpy, ButtonRelease, &event)) { AddEndResize(tmp_win); break; } } }# MoveOutline(Root, 0, 0, 0, 0);& XUnmapWindow(dpy, InitialWindow);& XUngrabPointer(dpy, CurrentTime); tmp_win->attr.x = AddingX;7 tmp_win->attr.y = AddingY + tmp_win->title_height;5 tmp_win->attr.width = AddingW - 2 * BorderWidth;= tmp_win->attr.height = AddingH - tmp_win->title_height - (2 * BorderWidth); XUngrabServer(dpy); } }< else if (HandlingEvents && dont_know && RandomPlacement) {5 if ((PlaceX + tmp_win->attr.width) > MyDisplayWidth) PlaceX = 50;7 if ((PlaceY + tmp_win->attr.height) > MyDisplayHeight) PlaceY = 50; tmp_win->attr.x = PlaceX; tmp_win->attr.y = PlaceY; PlaceX += 30; PlaceY += 30; }0 if (tmp_win->attr.y < tmp_win->title_height)) tmp_win->attr.y = tmp_win->title_height;: xwcm = CWX | CWY | CWWidth | CWHeight | CWBorderWidth; #ifdef DEBUG7 fprintf(stderr, " position window %d, %d %dx%d\n",  tmp_win->attr.x, tmp_win->attr.y, tmp_win->attr.width, tmp_win->attr.height);#endif9 xwc.x = tmp_win->attr.x + tmp_win->attr.border_width;9 xwc.y = tmp_win->attr.y + tmp_win->attr.border_width;$ xwc.width = tmp_win->attr.width;& xwc.height = tmp_win->attr.height; xwc.border_width = 0;2 XConfigureWindow(dpy, tmp_win->w, xwcm, &xwc);F tmp_win->name_width = XTextWidth(TitleBarFont.font, tmp_win->name, strlen(tmp_win->name));K if (XGetWindowProperty(dpy, tmp_win->w, XA_WM_ICON_NAME, 0, 200, False,? XA_STRING, &junk1, &junk2, &junk3, &len, &tmp_win->icon_name))$ tmp_win->icon_name = tmp_win->name;# if (tmp_win->icon_name == NULL)$ tmp_win->icon_name = tmp_win->name; tmp_win->iconified = FALSE; tmp_win->icon = FALSE; tmp_win->icon_on = FALSE;* /* add the window into the twm list */! tmp_win->next = TwmRoot.next; if (TwmRoot.next != NULL) TwmRoot.next->prev = tmp_win; tmp_win->prev = &TwmRoot; TwmRoot.next = tmp_win; /* create windows */' tmp_win->frame_x = tmp_win->attr.x;? tmp_win->frame_y = tmp_win->attr.y - tmp_win->title_height; XGrabServer(dpy);3 tmp_win->frame = XCreateSimpleWindow(dpy, Root, tmp_win->frame_x, tmp_win->frame_y, tmp_win->attr.width,. tmp_win->attr.height + tmp_win->title_height, BorderWidth, BorderColor, TitleC.back); ? tmp_win->title_w = XCreateSimpleWindow(dpy, tmp_win->frame, -BorderWidth, -BorderWidth,' tmp_win->attr.width, TITLE_BAR_HEIGHT, BorderWidth, BorderColor, TitleC.back);( if (Highlight && tmp_win->highlight) {7 XSetWindowBorderPixmap(dpy, tmp_win->frame, GrayTile);9 XSetWindowBorderPixmap(dpy, tmp_win->title_w, GrayTile); } gcm = 0;9 gcm |= GCFont; gcv.font = TitleBarFont.font->fid;7 gcm |= GCPlaneMask; gcv.plane_mask = AllPlanes;9 gcm |= GCForeground; gcv.foreground = TitleC.fore;9 gcm |= GCBackground; gcv.background = TitleC.back;8 tmp_win->title_gc = XCreateGC(dpy, Root, gcm, &gcv); CreateTitleButtons(tmp_win); 4 XDefineCursor(dpy, tmp_win->frame, ArrowCursor);6 XDefineCursor(dpy, tmp_win->title_w, ArrowCursor);9 XDefineCursor(dpy, tmp_win->iconify_w, ButtonCursor);#ifndef NOFOCUS7 XDefineCursor(dpy, tmp_win->focus_w, ButtonCursor);#endif8 XDefineCursor(dpy, tmp_win->resize_w, ButtonCursor);L XSelectInput(dpy, tmp_win->w, StructureNotifyMask | PropertyChangeMask | ColormapChangeMask);% XSelectInput(dpy, tmp_win->frame,2 SubstructureRedirectMask | VisibilityChangeMask |& ButtonPressMask | ButtonReleaseMask |$ EnterWindowMask | LeaveWindowMask);( XSelectInput(dpy, tmp_win->title_w,  KeyPressMask |5 ButtonPressMask | ButtonReleaseMask | ExposureMask);# XAddToSaveSet(dpy, tmp_win->w);O XReparentWindow(dpy, tmp_win->w, tmp_win->frame, 0, tmp_win->title_height); SetupWindow(tmp_win, tmp_win->frame_x, tmp_win->frame_y, tmp_win->attr.width,/ tmp_win->attr.height + tmp_win->title_height); pm = NULL; tmp_win->forced = FALSE;H /* now go through the steps to get an icon window, if ForceIcon is D * set, then no matter what else is defined, the bitmap from the * .twmrc file is used */ if (ForceIcon) { Pixmap bm; XImage *image; unsigned mask;M if ((bm = (Pixmap)LookInNameList(ICONS, tmp_win->full_name)) == NULL)I bm = (Pixmap)LookInList(ICONS, tmp_win->full_name, &tmp_win->class); if (bm != NULL) {5 XGetGeometry(dpy, bm, &JunkRoot, &JunkX, &JunkY,. &tmp_win->icon_width, &tmp_win->icon_height, &JunkBW, &JunkDepth);7 pm = XCreatePixmap(dpy, Root, tmp_win->icon_width,! tmp_win->icon_height, d_depth);* /* the copy plane works on color ! */* XCopyPlane(dpy, bm, pm, IconNormalGC,< 0,0, tmp_win->icon_width, tmp_win->icon_height, 0, 0, 1 ); tmp_win->forced = TRUE; } }J /* if the pixmap is still NULL, we didn't get one from the above code,E * that could mean that ForceIcon was not set, or that the windowD * was not in the Icons list, now check the WM hints for an icon */) if (pm == NULL && tmp_win->wmhints &&* tmp_win->wmhints->flags & IconPixmapHint) { 3 XGetGeometry(dpy, tmp_win->wmhints->icon_pixmap,' &JunkRoot, &JunkX, &JunkY,H &tmp_win->icon_width, &tmp_win->icon_height, &JunkBW, &JunkDepth);I pm = XCreatePixmap(dpy, Root, tmp_win->icon_width, tmp_win->icon_height, d_depth);A XCopyPlane(dpy, tmp_win->wmhints->icon_pixmap, pm, IconNormalGC,? 0,0, tmp_win->icon_width, tmp_win->icon_height, 0, 0, 1 ); }D /* if we still haven't got an icon, let's look in the Icon list  * if ForceIcon is not set */! if (pm == NULL && !ForceIcon) { Pixmap bm; XImage *image; unsigned mask;M if ((bm = (Pixmap)LookInNameList(ICONS, tmp_win->full_name)) == NULL)I bm = (Pixmap)LookInList(ICONS, tmp_win->full_name, &tmp_win->class); if (bm != NULL) {5 XGetGeometry(dpy, bm, &JunkRoot, &JunkX, &JunkY,. &tmp_win->icon_width, &tmp_win->icon_height, &JunkBW, &JunkDepth);7 pm = XCreatePixmap(dpy, Root, tmp_win->icon_width,! tmp_win->icon_height, d_depth);* /* the copy plane works on color ! */* XCopyPlane(dpy, bm, pm, IconNormalGC,< 0,0, tmp_win->icon_width, tmp_win->icon_height, 0, 0, 1 ); /*+ this code works on a monochrome system% XPutImage(dpy, pm, IconNormalGC,@ image, 0, 0, 0, 0, tmp_win->icon_width, tmp_win->icon_height); */ } }@ /* if we still don't have an icon, assign the UnknownIcon */( if (pm == NULL && UnknownPm != NULL) {$ tmp_win->icon_width = UnknownWidth;& tmp_win->icon_height = UnknownHeight;3 pm = XCreatePixmap(dpy, Root, tmp_win->icon_width,$ tmp_win->icon_height, d_depth);& /* the copy plane works on color ! */- XCopyPlane(dpy, UnknownPm, pm, IconNormalGC,? 0,0, tmp_win->icon_width, tmp_win->icon_height, 0, 0, 1 ); } if (pm == NULL)* {* tmp_win->icon_height = 0; tmp_win->icon_width = 0;* valuemask = 0;  }h else {  valuemask = CWBackPixmap;# attributes.background_pixmap = pm;  } 5 tmp_win->icon_w_width = XTextWidth(IconFont.font, 1 tmp_win->icon_name, strlen(tmp_win->icon_name));  tmp_win->icon_w_width += 6; 4 if (tmp_win->icon_w_width < tmp_win->icon_width) { C tmp_win->icon_x = (tmp_win->icon_width - tmp_win->icon_w_width)/2;  tmp_win->icon_x += 3;- tmp_win->icon_w_width = tmp_win->icon_width;i }i else {  tmp_win->icon_x = 3;n } = tmp_win->icon_y = tmp_win->icon_height + IconFont.height;gE if (tmp_win->wmhints && tmp_win->wmhints->flags & IconWindowHint) {c1 tmp_win->icon_w = tmp_win->wmhints->icon_window;t }r else { 1 tmp_win->icon_w = XCreateSimpleWindow(dpy, Root,, 0,0,  tmp_win->icon_w_width, 0 tmp_win->icon_height + IconFont.height + 4,% 2, IconBorderColor, IconC.back);t }i& XSelectInput(dpy, tmp_win->icon_w,& KeyPressMask | VisibilityChangeMask |5 ButtonPressMask | ButtonReleaseMask | ExposureMask);  tmp_win->icon_bm_w = NULL; if (pm != NULL)  { 2 if (tmp_win->icon_w_width == tmp_win->icon_width) x = 0;S else 9 x = (tmp_win->icon_w_width - tmp_win->icon_width)/2;L9 tmp_win->icon_bm_w = XCreateWindow(dpy, tmp_win->icon_w,S5 x, 0, tmp_win->icon_width, tmp_win->icon_height, 0, d_depth, CopyFromParent,' d_visual, valuemask, &attributes);A }*5 XDefineCursor(dpy, tmp_win->icon_w, ArrowCursor);  GrabButtons(tmp_win);* GrabKeys(tmp_win);, tmp_win->list = AddIconManager(tmp_win); if (tmp_win->list) {O: XSaveContext(dpy, tmp_win->list->w, TwmContext, tmp_win);= XSaveContext(dpy, tmp_win->list->icon, TwmContext, tmp_win);  } 7 XSaveContext(dpy, tmp_win->w, TwmContext, tmp_win);*; XSaveContext(dpy, tmp_win->frame, TwmContext, tmp_win);*= XSaveContext(dpy, tmp_win->title_w, TwmContext, tmp_win);_? XSaveContext(dpy, tmp_win->iconify_w, TwmContext, tmp_win);n> XSaveContext(dpy, tmp_win->resize_w, TwmContext, tmp_win);< XSaveContext(dpy, tmp_win->icon_w, TwmContext, tmp_win);#ifndef NOFOCUS*= XSaveContext(dpy, tmp_win->focus_w, TwmContext, tmp_win);i#endif> XSaveContext(dpy, tmp_win->hilite_w, TwmContext, tmp_win); SetHints(tmp_win); XUngrabServer(dpy);> return (tmp_win);u}<H/*********************************************************************** * * Procedure:8 * MappedNotOverride - checks to see if we should really! * put a twm frame on the window * * Returned Value:n' * TRUE - go ahead and frame the window! * FALSE - don't frame the windowi * * Inputs:" * w - the window to check *H *********************************************************************** */intrMappedNotOverride(w) Window w;n{  XWindowAttributes wa;*& XGetWindowAttributes(dpy, w, &wa);L return ((wa.map_state != IsUnmapped) && (wa.override_redirect != True));}eH/*********************************************************************** * * Procedure:7 * GrabAllButtons - grab needed buttons for all windows *H *********************************************************************** */voidGrabAllButtons(){) TwmWindow *tmp_win;WJ for (tmp_win = TwmRoot.next; tmp_win != NULL; tmp_win = tmp_win->next) {  GrabButtons(tmp_win); }m} H/*********************************************************************** * * Procedure:1 * GrabAllKeys - grab needed keys for all windows  *H *********************************************************************** */Wvoid GrabAllKeys()h{e TwmWindow *tmp_win; J for (tmp_win = TwmRoot.next; tmp_win != NULL; tmp_win = tmp_win->next) {  GrabKeys(tmp_win); }l}bH/*********************************************************************** * * Procedure:4 * UngrabAllButtons - ungrab buttons for all windows *H *********************************************************************** */wvoidUngrabAllButtons(){ TwmWindow *tmp_win; J for (tmp_win = TwmRoot.next; tmp_win != NULL; tmp_win = tmp_win->next) {; UngrabButtons(tmp_win); }-} H/*********************************************************************** * * Procedure:. * UngrabAllKeys - ungrab keys for all windows *H *********************************************************************** */DvoidUngrabAllKeys() {n TwmWindow *tmp_win;>J for (tmp_win = TwmRoot.next; tmp_win != NULL; tmp_win = tmp_win->next) {- UngrabKeys(tmp_win);m }f}sH/*********************************************************************** * * Procedure:3 * GrabButtons - grab needed buttons for the window> * * Inputs:s, * tmp_win - the twm window structure to use *H *********************************************************************** */ivoidGrabButtons(tmp_win)TwmWindow *tmp_win;t{" int i, j;s' for (i = 0; i < MAX_BUTTONS+1; i++)m {w for (j = 0; j < MOD_SIZE; j++)t {, if (Mouse[i][C_WINDOW][j].func != NULL) {$ XGrabButton(dpy, i, j, tmp_win->w,0 True, ButtonPressMask | ButtonReleaseMask,7 GrabModeAsync, GrabModeAsync, None, ArrowCursor);e } } }r}=H/*********************************************************************** * * Procedure:- * GrabKeys - grab needed keys for the windowh * * Inputs: , * tmp_win - the twm window structure to use *H *********************************************************************** */wvoidGrabKeys(tmp_win)xTwmWindow *tmp_win;{p FuncKey *tmp;w> for (tmp = FuncKeyRoot.next; tmp != NULL; tmp = tmp->next) {r switch (tmp->cont)n { case C_WINDOW:= XGrabKey(dpy, tmp->keycode, tmp->mods, tmp_win->w, True,f GrabModeAsync, GrabModeAsync); break;n case C_ICON:=B XGrabKey(dpy, tmp->keycode, tmp->mods, tmp_win->icon_w, True, GrabModeAsync, GrabModeAsync); case C_TITLE:C XGrabKey(dpy, tmp->keycode, tmp->mods, tmp_win->title_w, True,H GrabModeAsync, GrabModeAsync); break;; case C_NAME:t= XGrabKey(dpy, tmp->keycode, tmp->mods, tmp_win->w, True,& GrabModeAsync, GrabModeAsync);B XGrabKey(dpy, tmp->keycode, tmp->mods, tmp_win->icon_w, True, GrabModeAsync, GrabModeAsync);C XGrabKey(dpy, tmp->keycode, tmp->mods, tmp_win->title_w, True,w GrabModeAsync, GrabModeAsync); break;  /*( case C_ROOT:o7 XGrabKey(dpy, tmp->keycode, tmp->mods, Root, True, GrabModeAsync, GrabModeAsync); break;n */l } }T}EH/*********************************************************************** * * Procedure:- * UngrabButtons - ungrab buttons for windowsa * * Inputs:, * tmp_win - the twm window structure to use *H *********************************************************************** */)voidUngrabButtons(tmp_win)TwmWindow *tmp_win;n{a int i;' for (i = 0; i < MAX_BUTTONS+1; i++)E { 0 XUngrabButton(dpy, i, AnyModifier, tmp_win->w); }(})H/*********************************************************************** * * Procedure:' * UngrabKeys - ungrab keys for windows  * * Inputs:, * tmp_win - the twm window structure to use *H *********************************************************************** */ voidUngrabKeys(tmp_win)tTwmWindow *tmp_win;={r FuncKey *tmp;r> for (tmp = FuncKeyRoot.next; tmp != NULL; tmp = tmp->next) { switch (tmp->cont)e { case C_WINDOW:e: XUngrabKey(dpy, tmp->keycode, tmp->mods, tmp_win->w); break;e case C_ICON:d? XUngrabKey(dpy, tmp->keycode, tmp->mods, tmp_win->icon_w); case C_TITLE:@ XUngrabKey(dpy, tmp->keycode, tmp->mods, tmp_win->title_w); break;t case C_ROOT:h4 XUngrabKey(dpy, tmp->keycode, tmp->mods, Root); break;> } }+}*CreateTitleButtons(tmp_win)tTwmWindow *tmp_win; {_; unsigned long valuemask; /* mask for create windows */H XSetWindowAttributes attributes; /* attributes for create windows */A /* the three buttons have the pixmap as the background of theiC * window, that way I don't have to worry about repainting themn * on expose events. */g+ valuemask = CWEventMask | CWBackPixmap;n@ attributes.event_mask = ButtonPressMask | ButtonReleaseMask;6 tmp_win->iconify_pm = MakePixmap(tmp_win->title_w,A tmp_win->title_gc, iconify_bits, iconify_width, iconify_height);n7 attributes.background_pixmap = tmp_win->iconify_pm;g= tmp_win->iconify_w = XCreateWindow(dpy, tmp_win->title_w," TITLE_BAR_SPACE, TITLE_BAR_SPACE, iconify_width, iconify_height,u 0, d_depth, CopyFromParent,# d_visual, valuemask, &attributes);|#ifndef NOFOCUS4 tmp_win->focus_pm = MakePixmap(tmp_win->title_w,; tmp_win->title_gc, focus_bits, focus_width, focus_height); 5 attributes.background_pixmap = tmp_win->focus_pm; ; tmp_win->focus_w = XCreateWindow(dpy, tmp_win->title_w,F tmp_win->attr.width - resize_width -3 - focus_width, TITLE_BAR_SPACE, iconify_width, iconify_height,e 0, d_depth, CopyFromParent,# d_visual, valuemask, &attributes);w#endif5 tmp_win->resize_pm = MakePixmap(tmp_win->title_w,r> tmp_win->title_gc, resize_bits, resize_width, resize_height);6 attributes.background_pixmap = tmp_win->resize_pm;< tmp_win->resize_w = XCreateWindow(dpy, tmp_win->title_w,( tmp_win->attr.width - resize_width - 1, TITLE_BAR_SPACE,X resize_width, resize_height,p 0, d_depth, CopyFromParent,# d_visual, valuemask, &attributes);) M valuemask = CWBackPixmap; 5 tmp_win->hilite_pm = MakePixmap(tmp_win->title_w,P> tmp_win->title_gc, hilite_bits, hilite_width, hilite_height);6 attributes.background_pixmap = tmp_win->hilite_pm;< tmp_win->hilite_w = XCreateWindow(dpy, tmp_win->title_w, TitleBarX, 1, 10, hilite_height, 0, d_depth, CopyFromParent,# d_visual, valuemask, &attributes);w* XMapSubwindows(dpy, tmp_win->title_w);) XUnmapWindow(dpy, tmp_win->hilite_w);h}#endif9 xwc.x = tmp_win->attr.x + tmp_win->attr.border_width;9 xwc.y = tmp_win->attr.y + tmp_win->attr.border_width;$ xwc.width = tmp_win->attr.width;& xwc.height = tmp_win->attr.height; xwc.border_width = 0;2 XConfigureWindow(dpy, tmp_win->w, xwcm, &xwc);F tmp_win->name_width = XTextWidth(TitleBarFont.font, tmp_win->name, strlen(tmp_win->name));K if (XGetWindowProperty(dpy, tmp_win->w, XA_WM_ICON_NAME, 0, 200, Fal*[FIELDS.X.TWM]EVENTS.C;1+,3.J/% 4OJJ- 0@123KPWOK56F37@D8yB9fG%HJO/*****************************************************************************/O/** Copyright 1988 by Evans & Sutherland Computer Corporation, **/O/** Salt Lake City, Utah **/O/** **/O/** All Rights Reserved **/O/** **/O/** Permission to use, copy, modify, and distribute this software and **/O/** its documentation for any purpose and without fee is hereby **/O/** granted, provided that the above copyright notice appear in all **/O/** copies and that both that copyright notice and this permis- **/O/** sion notice appear in supporting documentation, and that the **/O/** name of Evans & Sutherland not be used in advertising or publi- **/O/** city pertaining to distribution of the software without specif- **/O/** ic, written prior permission. **/O/** **/O/** EVANS & SUTHERLAND DISCLAIMS ALL WARRANTIES WITH REGARD TO **/O/** THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILI- **/O/** TY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND BE LIABLE **/O/** FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAM- **/O/** AGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, **/O/** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS **/O/** ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PER- **/O/** FORMANCE OF THIS SOFTWARE. **/O/*****************************************************************************/H/*********************************************************************** *8 * $Header: events.c,v 1.91 88/10/14 07:06:12 toml Exp $ * * twm event handling *. * 17-Nov-87 Thomas E. LaStrange File created *I ***********************************************************************/ #ifndef lintstatic char RCSinfo[]=8"$Header: events.c,v 1.91 88/10/14 07:06:12 toml Exp $";#endif#include #include "twm.h"#include #include "add_window.h"#include "menus.h"#include "events.h"#include "resize.h"#include "gram.h"#include "util.h"#include "twm.bm"#ifndef WM_CHANGE_STATE#define WM_CHANGE_STATE 0xDEAD#endifBevent_proc EventHandler[LASTEvent]; /* event handler jump table */-static XEvent event; /* the current event */7static TwmWindow *tmp_win; /* the current twm window */8static Window w; /* the window that caused the event */Fstatic int Context = C_NO_CONTEXT; /* current button press context */Cstatic TwmWindow *ButtonWindow; /* button press window structure */3static XEvent ButtonEvent; /* button preee event */static char *Action;8int ConstMove = FALSE; /* constrained move variables */int ConstMoveDir;int ConstMoveX;int ConstMoveY;int ConstMoveXL;int ConstMoveXR;int ConstMoveYT;int ConstMoveYB;:Window DragWindow; /* variables used in moving windows */ int DragX; int DragY;int DragWidth;int DragHeight;static int enter_flag;H/*********************************************************************** * * Procedure:/ * InitEvents - initialize the event jump table *H *********************************************************************** */void InitEvents(){ int i; ResizeWindow = NULL; DragWindow = NULL; enter_flag = FALSE;# for (i = 0; i < LASTEvent; i++)! EventHandler[i] = HandleUnknown;( EventHandler[Expose] = HandleExpose;6 EventHandler[DestroyNotify] = HandleDestroyNotify;0 EventHandler[MapRequest] = HandleMapRequest;. EventHandler[MapNotify] = HandleMapNotify;2 EventHandler[UnmapNotify] = Hand֥~TWM.SAVE3 [FIELDS.X.TWM]EVENTS.C;1OJ^| leUnmapNotify;4 EventHandler[MotionNotify] = HandleMotionNotify;6 EventHandler[ButtonRelease] = HandleButtonRelease;2 EventHandler[ButtonPress] = HandleButtonPress;2 EventHandler[EnterNotify] = HandleEnterNotify;2 EventHandler[LeaveNotify] = HandleLeaveNotify;< EventHandler[ConfigureRequest] = HandleConfigureRequest;6 EventHandler[ClientMessage] = HandleClientMessage;8 EventHandler[PropertyNotify] = HandlePropertyNotify;, EventHandler[KeyPress] = HandleKeyPress;8 EventHandler[ColormapNotify] = HandleColormapNotify;< EventHandler[VisibilityNotify] = HandleVisibilityNotify;}H/*********************************************************************** * * Procedure:! * HandleEvents - handle X events *H *********************************************************************** */voidHandleEvents(){ while (TRUE) {6 if ( (DragWindow || ResizeWindow) && !XPending(dpy) ) { /*7 ** Hack to support polled dynamics. Should really9 ** build up "mode" support that callers can register ** handlers with, etc. */0 w = DragWindow ? DragWindow : ResizeWindow;> XQueryPointer( dpy, w, &(event.xmotion.root), &JunkChild,6 &(event.xmotion.x_root), &(event.xmotion.y_root), &JunkX, &JunkY, &JunkMask);% (*EventHandler[MotionNotify])(); } else { XNextEvent(dpy, &event); w = event.xany.window;? if (XFindContext(dpy, w, TwmContext, &tmp_win) == XCNOENT) tmp_win = NULL; #ifdef DEBUG$ if (event.type != MotionNotify) if (tmp_win != NULL) {D fprintf(stderr, "Event w=%x, t->w=%x, t->frame=%x, t->title=%x, ",4 w, tmp_win->w, tmp_win->frame, tmp_win->title_w); } else {% fprintf(stderr, "Event w=%x, ", w); }#endif3 if (event.type >= 0 && event.type < LASTEvent)' (*EventHandler[event.type])(); } }}H/*********************************************************************** * * Procedure:: * HandleVisiblityNotify - visibility notify event handler *H *********************************************************************** */voidHandleVisibilityNotify(){ #ifdef DEBUG* fprintf(stderr, "VisibilityNotify\n");D fprintf(stderr, " visibility = %d\n", event.xvisibility.state);#endif if (tmp_win == NULL) return; if (w == tmp_win->frame). tmp_win->frame_vis = event.xvisibility.state;" else if (w == tmp_win->icon_w)- tmp_win->icon_vis = event.xvisibility.state;}H/*********************************************************************** * * Procedure:7 * HandleColormapNotify - colormap notify event handler *H *********************************************************************** */voidHandleColormapNotify(){ #ifdef DEBUG( fprintf(stderr, "ColormapNotify\n");#endif if (tmp_win != NULL)7 XGetWindowAttributes(dpy, tmp_win->w, &tmp_win->attr); if (tmp_win == Focus)/ XInstallColormap(dpy, tmp_win->attr.colormap);}H/*********************************************************************** * * Procedure:+ * HandleKeyPress - key press event handler *H *********************************************************************** */voidHandleKeyPress(){ FuncKey *key; int len; Context = C_NO_CONTEXT; if (w == Root) Context = C_ROOT; if (tmp_win) { if (w == tmp_win->title_w) Context = C_TITLE; if (w == tmp_win->w) Context = C_WINDOW; if (w == tmp_win->icon_w) Context = C_ICON; if (w == tmp_win->frame) Context = C_FRAME; }> for (key = FuncKeyRoot.next; key != NULL; key = key->next) {* if (key->keycode == event.xkey.keycode &&% key->mods == event.xkey.state &&3 (key->cont == Context || key->cont == C_NAME)) {? /* weed out the functions that don't make sense to execute * from a key press  */6 if (key->func == F_MOVE || key->func == F_RESIZE) return; if (key->cont != C_NAME) {, ExecuteFunction(key->func, key->action, w,& tmp_win, event, Context, FALSE); } else { len = strlen(key->win_name);/ for (tmp_win = TwmRoot.next; tmp_win != NULL; tmp_win = tmp_win->next) {8 if (!strncmp(key->win_name, tmp_win->name, len) ||; !strncmp(key->win_name, tmp_win->class.res_name, len) ||: !strncmp(key->win_name, tmp_win->class.res_class, len)) {: ExecuteFunction(key->func, key->action, tmp_win->frame,' tmp_win, event, C_FRAME, FALSE); } } } } }}H/*********************************************************************** * * Procedure:7 * HandlePropertyNotify - property notify event handler *H *********************************************************************** */voidHandlePropertyNotify(){ char *prop; XWMHints *wmhints; XSizeHints hints; Atom actual; int junk1, junk2, len; int width, height, x, y;; unsigned long valuemask; /* mask for create windows */H XSetWindowAttributes attributes; /* attributes for create windows */ Pixmap pm; #ifdef DEBUGC fprintf(stderr, "PropertyNotify = %d\n", event.xproperty.atom);#endif if (tmp_win == NULL) return;L XGetWindowProperty(dpy, tmp_win->w, event.xproperty.atom, 0, 200, False,2 XA_STRING, &actual, &junk1, &junk2, &len, &prop); if (actual == None) return; if (prop == NULL) prop = NoName;! switch (event.xproperty.atom) { case XA_WM_NAME: tmp_win->full_name = prop; tmp_win->name = prop;C tmp_win->name_width = XTextWidth(TitleBarFont.font, tmp_win->name, strlen(tmp_win->name)); SetupWindow(tmp_win,( tmp_win->frame_x, tmp_win->frame_y,2 tmp_win->frame_width, tmp_win->frame_height);% XClearWindow(dpy, tmp_win->title_w);( XDrawImageString(dpy, tmp_win->title_w,2 tmp_win->title_gc, TitleBarX, TitleBarFont.y,+ tmp_win->name, strlen(tmp_win->name)); if (tmp_win->list) {) XClearWindow(dpy, tmp_win->list->w);: XDrawImageString(dpy,tmp_win->list->w, IconManagerGC," IconManagerX, IconManagerFont.y,( tmp_win->name, strlen(tmp_win->name)); }> /* if the icon name is NoName, set the name of the icon to be * the same as the window  */" if (tmp_win->icon_name == NoName) {( tmp_win->icon_name = tmp_win->name; RedoIconName(); } break; case XA_WM_ICON_NAME: tmp_win->icon_name = prop; RedoIconName(); break; case XA_WM_HINTS:( tmp_win->wmhints = XGetWMHints(dpy, w);E if (tmp_win->wmhints && (tmp_win->wmhints->flags & WindowGroupHint))5 tmp_win->group = tmp_win->wmhints->window_group;, if (!tmp_win->forced && tmp_win->wmhints &&. tmp_win->wmhints->flags & IconWindowHint) {5 tmp_win->icon_w = tmp_win->wmhints->icon_window; }, if (!tmp_win->forced && tmp_win->wmhints &&0 (tmp_win->wmhints->flags & IconPixmapHint)) {@ XGetGeometry(dpy, tmp_win->wmhints->icon_pixmap, &JunkRoot,> &JunkX, &JunkY, &tmp_win->icon_width, &tmp_win->icon_height, &JunkBW, &JunkDepth);7 pm = XCreatePixmap(dpy, Root, tmp_win->icon_width,! tmp_win->icon_height, d_depth);E XCopyPlane(dpy, tmp_win->wmhints->icon_pixmap, pm, IconNormalGC,< 0,0, tmp_win->icon_width, tmp_win->icon_height, 0, 0, 1 ); valuemask = CWBackPixmap;' attributes.background_pixmap = pm; if (tmp_win->icon_bm_w)* XDestroyWindow(dpy, tmp_win->icon_bm_w);= tmp_win->icon_bm_w = XCreateWindow(dpy, tmp_win->icon_w,2 0, 0, tmp_win->icon_width, tmp_win->icon_height,' 0, d_depth, CopyFromParent, d_visual, valuemask, &attributes); RedoIconName(); } break; case XA_WM_NORMAL_HINTS:* XGetNormalHints(dpy, tmp_win->w, &hints); /* don't do anything */ break; default: #ifdef DEBUGH fprintf(stderr, "TWM Not handling property %d\n",event.xproperty.atom);#endif break; }}H/*********************************************************************** * * Procedure:C * RedoIconName - procedure to re-position the icon window and name *H *********************************************************************** */RedoIconName(){ int x;5 tmp_win->icon_w_width = XTextWidth(IconFont.font,1 tmp_win->icon_name, strlen(tmp_win->icon_name)); tmp_win->icon_w_width += 6;4 if (tmp_win->icon_w_width < tmp_win->icon_width) {C tmp_win->icon_x = (tmp_win->icon_width - tmp_win->icon_w_width)/2; tmp_win->icon_x += 3;- tmp_win->icon_w_width = tmp_win->icon_width; } else { tmp_win->icon_x = 3; }5 if (tmp_win->icon_w_width == tmp_win->icon_width) x = 0; else5 x = (tmp_win->icon_w_width - tmp_win->icon_width)/2;> XResizeWindow(dpy, tmp_win->icon_w, tmp_win->icon_w_width,- tmp_win->icon_height + IconFont.height + 4); if (tmp_win->icon_bm_w) {, XMoveWindow(dpy, tmp_win->icon_bm_w, x, 0);% XMapWindow(dpy, tmp_win->icon_bm_w); } if (tmp_win->icon) {5 XClearArea(dpy, tmp_win->icon_w, 0, 0, 0, 0, False);' XDrawImageString(dpy, tmp_win->icon_w, IconNormalGC,& tmp_win->icon_x, tmp_win->icon_y,5 tmp_win->icon_name, strlen(tmp_win->icon_name)); }}H/*********************************************************************** * * Procedure:5 * HandleClientMessage - client message event handler *H *********************************************************************** */voidHandleClientMessage(){ #ifdef DEBUGJ fprintf(stderr, "ClientMessage = 0x%x\n", event.xclient.message_type);#endif' switch (event.xclient.message_type) { case NULL: enter_flag = FALSE; break; case WM_CHANGE_STATE: if (tmp_win != NULL) {B if (event.xclient.data.l[0] == IconicState && !tmp_win->icon) { XEvent button;2 XQueryPointer( dpy, Root, &JunkRoot, &JunkChild," &(button.xmotion.x_root)," &(button.xmotion.y_root),$ &JunkX, &JunkY, &JunkMask);6 ExecuteFunction(F_ICONIFY, NULL, w, tmp_win, button, FRAME, FALSE); } } break; }}H/*********************************************************************** * * Procedure:& * HandleExpose - expose event handler *H *********************************************************************** */voidHandleExpose(){ MenuItem *tmp; WList *list; #ifdef DEBUG8 fprintf(stderr, "Expose %d\n", event.xexpose.count);#endif! if (event.xexpose.count != 0) return; if (w == VersionWindow) {6 XDrawImageString(dpy, VersionWindow, VersionNormalGC, twm_width + 10,= 2 + VersionFont.font->ascent, Version, strlen(Version)); return; } if (tmp_win != NULL) { if (tmp_win->title_w == w) {, XDrawImageString(dpy, tmp_win->title_w, tmp_win->title_gc, TitleBarX, TitleBarFont.y,( tmp_win->name, strlen(tmp_win->name)); return; } if (tmp_win->icon_w == w) {+ XDrawImageString(dpy, tmp_win->icon_w, IconNormalGC,# tmp_win->icon_x, tmp_win->icon_y,2 tmp_win->icon_name, strlen(tmp_win->icon_name)); return; } }5 if (XFindContext(dpy, w, MenuContext, &tmp) == 0) { if (tmp->func == F_TITLE)= XDrawImageString(dpy,w, MenuTitleGC, tmp->y, MenuFont.y, tmp->item, strlen(tmp->item)); else if (tmp->state)? XDrawImageString(dpy,w, MenuReverseGC, tmp->y, MenuFont.y, tmp->item, strlen(tmp->item)); else> XDrawImageString(dpy,w, MenuNormalGC, tmp->y, MenuFont.y, tmp->item, strlen(tmp->item)); return; }= if (XFindContext(dpy, w, IconManagerContext, &list) == 0) {H XDrawImageString(dpy,w, IconManagerGC, IconManagerX, IconManagerFont.y,/ list->twm->name, strlen(list->twm->name)); return; }}H/*********************************************************************** * * Procedure:4 * HandleDestroyNotify - DestroyNotify event handler *H *********************************************************************** */*voidHandleDestroyNotify()*{* #ifdef DEBUG' fprintf(stderr, "DestroyNotify\n");i#endif if (tmp_win == NULL) return; if (tmp_win == Focus)  {  FocusOnRoot();  }t0 XDeleteContext(dpy, tmp_win->w, TwmContext);4 XDeleteContext(dpy, tmp_win->frame, TwmContext);6 XDeleteContext(dpy, tmp_win->title_w, TwmContext);8 XDeleteContext(dpy, tmp_win->iconify_w, TwmContext);7 XDeleteContext(dpy, tmp_win->resize_w, TwmContext); 5 XDeleteContext(dpy, tmp_win->icon_w, TwmContext);i#ifndef NOFOCUSt6 XDeleteContext(dpy, tmp_win->focus_w, TwmContext);#endif7 XDeleteContext(dpy, tmp_win->hilite_w, TwmContext);d( XDestroyWindow(dpy, tmp_win->frame);) XDestroyWindow(dpy, tmp_win->icon_w);  if (tmp_win->list != NULL) {r3 XDeleteContext(dpy, tmp_win->list->w, TwmContext);g6 XDeleteContext(dpy, tmp_win->list->icon, TwmContext); }  RemoveIconManager(tmp_win);r$ XFreeGC(dpy, tmp_win->title_gc);( tmp_win->prev->next = tmp_win->next; if (tmp_win->next != NULL)% tmp_win->next->prev = tmp_win->prev;  free((char *)tmp_win);}*H/*********************************************************************** * * Procedure:. * HandleMapRequest - MapRequest event handler *H *********************************************************************** */EvoidHandleMapRequest(){ int stat;  XSizeHints hints;  int zoom_save; #ifdef DEBUGG fprintf(stderr, "MapRequest w = 0x%x\n", event.xmaprequest.window);*#endif! w = event.xmaprequest.window;O6 stat = XFindContext(dpy, w, TwmContext, &tmp_win); if (stat == XCNOENT) tmp_win = NULL; if (tmp_win == NULL) {,) if (Transient(w) && !DecorateTransients)E { XMapRaised(dpy, w); return; } tmp_win = AddWindow(w);? if (tmp_win->wmhints && (tmp_win->wmhints->flags & StateHint))* {- switch (tmp_win->wmhints->initial_state)* { case DontCareState:* case NormalState:* case ZoomState: case InactiveState:1" XMapWindow(dpy, tmp_win->w);& XMapRaised(dpy, tmp_win->frame); break; case IconicState:5 if (tmp_win->wmhints->flags & IconPositionHint)* {* int x, y; x = tmp_win->wmhints->icon_x; y = tmp_win->wmhints->icon_y; if (x > MyDisplayWidth)3 x = MyDisplayWidth - tmp_win->icon_w_width -e (2 * BorderWidth); if (y > MyDisplayHeight)u3 y = MyDisplayHeight - tmp_win->icon_height -c, IconFont.height - 4 - (2 * BorderWidth);+ XMoveWindow(dpy, tmp_win->icon_w, x, y);C }T else {v+ XMoveWindow(dpy, tmp_win->icon_w, 0, 0);n } tmp_win->iconified = TRUE; zoom_save = DoZoom;c DoZoom = FALSE;  Iconify(tmp_win); DoZoom = zoom_save;w break; } } elset { #ifndef ICCCMC if (!tmp_win->icon) {#endif DeIconify(tmp_win);u #ifndef ICCCMb }#endif } }* else { #ifndef ICCCM  if (!tmp_win->icon) {#endif DeIconify(tmp_win); #ifndef ICCCMc }#endif }i% XRaiseWindow(dpy, VersionWindow);M}XH/*********************************************************************** * * Procedure:, * HandleMapNotify - MapNotify event handler *H *********************************************************************** */evoidHandleMapNotify()*{* #ifdef DEBUG# fprintf(stderr, "MapNotify\n");*#endif if (tmp_win == NULL) return;' XUnmapWindow(dpy, tmp_win->icon_w);** XMapSubwindows(dpy, tmp_win->title_w);( XMapSubwindows(dpy, tmp_win->frame); if (Focus != tmp_win) & XUnmapWindow(dpy, tmp_win->hilite_w);# if (tmp_win->title_height == 0)o% XUnmapWindow(dpy, tmp_win->title_w);a$ XMapWindow(dpy, tmp_win->frame); tmp_win->mapped = TRUE;; tmp_win->icon = FALSE; tmp_win->icon_on = FALSE; % XRaiseWindow(dpy, VersionWindow);u};H/*********************************************************************** * * Procedure:0 * HandleUnmapNotify - UnmapNotify event handler *H *********************************************************************** */BvoidHandleUnmapNotify()s{ #ifdef DEBUG% fprintf(stderr, "UnmapNotify\n"); #endif if (tmp_win == NULL) return;& XUnmapWindow(dpy, tmp_win->frame); tmp_win->mapped = FALSE;}nH/*********************************************************************** * * Procedure:2 * HandleMotionNotify - MotionNotify event handler *H *********************************************************************** */bvoidHandleMotionNotify(){t #ifdef DEBUG /*& fprintf(stderr, "MotionNotify\n"); */#endif if (ConstMove) { switch (ConstMoveDir) { case MOVE_NONE:+ if (event.xmotion.x_root < ConstMoveXL ||*) event.xmotion.x_root > ConstMoveXR)s ConstMoveDir = MOVE_HORIZ;+ if (event.xmotion.y_root < ConstMoveYT ||() event.xmotion.y_root > ConstMoveYB)r ConstMoveDir = MOVE_VERT;7 XQueryPointer(dpy, DragWindow, &JunkRoot, &JunkChild,1 &JunkX, &JunkY, &DragX, &DragY, &JunkMask);D break; case MOVE_VERT:: ConstMoveY = event.xmotion.y_root - DragY - BorderWidth; break; case MOVE_HORIZ:o9 ConstMoveX= event.xmotion.x_root - DragX - BorderWidth;k break; } if (ConstMoveDir != MOVE_NONE)e { int xl, yt, xr, yb, w, h; xl = ConstMoveX;. yt = ConstMoveY;d% w = DragWidth + 2 * BorderWidth;=& h = DragHeight + 2 * BorderWidth;4 if (DontMoveOff && MoveFunction != F_FORCEMOVE) { xr = xl + w; yb = yt + h; if (xl < 0)t xl = 0;e if (xr > MyDisplayWidth) xl = MyDisplayWidth - w; if (yt < 0) yt = 0; if (yb > MyDisplayHeight)E yt = MyDisplayHeight - h;f }3 MoveOutline(event.xmotion.root, xl, yt, w, h);  } return; }n if (DragWindow != NULL) {* int xl, yt, xr, yb, w, h;1 xl = event.xmotion.x_root - DragX - BorderWidth;r1 yt = event.xmotion.y_root - DragY - BorderWidth;e! w = DragWidth + 2 * BorderWidth;*" h = DragHeight + 2 * BorderWidth;0 if (DontMoveOff && MoveFunction != F_FORCEMOVE) { xr = xl + w; yb = yt + h;  if (xl < 0) xl = 0;i if (xr > MyDisplayWidth)n xl = MyDisplayWidth - w; if (yt < 0) yt = 0;L if (yb > MyDisplayHeight) yt = MyDisplayHeight - h;_ }/ MoveOutline(event.xmotion.root, xl, yt, w, h);i return; }w if (ResizeWindow != NULL)s {7 XFindContext(dpy, ResizeWindow, TwmContext, &tmp_win);*? DoResize(event.xmotion.x_root, event.xmotion.y_root, tmp_win);  }m}nH/*********************************************************************** * * Procedure:4 * HandleButtonRelease - ButtonRelease event handler *H *********************************************************************** */XvoidHandleButtonRelease()n{, int xl, xr, yt, yb, w, h;m #ifdef DEBUG' fprintf(stderr, "ButtonRelease\n");l#endif if (RootFunction == NULL)* {*" XUngrabPointer(dpy, CurrentTime); XUngrabServer(dpy);/ EventHandler[EnterNotify] = HandleEnterNotify;*/ EventHandler[LeaveNotify] = HandleLeaveNotify;*% EventHandler[Expose] = HandleExpose; }e if (DragWindow != NULL) {n XEvent client_event; - MoveOutline(event.xbutton.root, 0, 0, 0, 0);C1 xl = event.xbutton.x_root - DragX - BorderWidth;t1 yt = event.xbutton.y_root - DragY - BorderWidth;i if (ConstMove)t {$ if (ConstMoveDir == MOVE_HORIZ) yt = ConstMoveY;# if (ConstMoveDir == MOVE_VERT)n xl = ConstMoveX;# if (ConstMoveDir == MOVE_NONE); { yt = ConstMoveY; xl = ConstMoveX; } } e! w = DragWidth + 2 * BorderWidth;=" h = DragHeight + 2 * BorderWidth;0 if (DontMoveOff && MoveFunction != F_FORCEMOVE) { xr = xl + w;s yb = yt + h;n if (xl < 0) xl = 0;k if (xr > MyDisplayWidth)k xl = MyDisplayWidth - w; if (yt < 0) yt = 0; if (yb > MyDisplayHeight) yt = MyDisplayHeight - h;- }5 XFindContext(dpy, DragWindow, TwmContext, &tmp_win);;" if (DragWindow == tmp_win->frame)! SetupWindow(tmp_win, xl, yt,p/ tmp_win->frame_width, tmp_win->frame_height);_ elsem* XMoveWindow(dpy, DragWindow, xl, yt); if (!NoRaiseMove)# XRaiseWindow(dpy, DragWindow);, DragWindow = NULL;a ConstMove = FALSE;n enter_flag = TRUE;w# client_event.type = ClientMessage;* client_event.xclient.message_type = NULL;" client_event.xclient.format = 32;: XSendEvent(dpy, tmp_win->frame, False, 0, &client_event); SetHints(tmp_win);* return; }* if (ResizeWindow != NULL)* {* EndResize();*/ EventHandler[EnterNotify] = HandleEnterNotify;d/ EventHandler[LeaveNotify] = HandleLeaveNotify;*" XUngrabPointer(dpy, CurrentTime); XUngrabServer(dpy); return; } if (ActiveMenu != NULL)* {; MenuRoot *tmp;h5 for (tmp = ActiveMenu; tmp != NULL; tmp = tmp->prev)  {$ XUnmapWindow(dpy, tmp->shadow); XUnmapWindow(dpy, tmp->w);w } XFlush(dpy);t ActiveMenu = NULL;i if (ActiveItem != NULL) {@ ExecuteFunction(ActiveItem->func, ActiveItem->action, NULL,, ButtonWindow, ButtonEvent, Context, TRUE);! Action = ActiveItem->action;) ActiveItem = NULL;d Context = C_NO_CONTEXT; ButtonWindow = NULL;  } return; }a}aH/*********************************************************************** * * Procedure:0 * HandleButtonPress - ButtonPress event handler *H *********************************************************************** */=voidHandleButtonPress()h{X int modifier;o #ifdef DEBUG% fprintf(stderr, "ButtonPress\n");#endif if (ResizeWindow != NULL ||m DragWindow != NULL ||  ActiveMenu != NULL) return;% XUnmapWindow(dpy, VersionWindow);p% /* check the title bar buttons */,+ if (tmp_win && w == tmp_win->iconify_w)l {TE ExecuteFunction(F_ICONIFY, NULL, w, tmp_win, event, C_TITLE, FALSE);p return; }* if (tmp_win && w == tmp_win->resize_w) {wD ExecuteFunction(F_RESIZE, NULL, w, tmp_win, event, C_TITLE, FALSE); return; } #ifndef NOFOCUSe) if (tmp_win && w == tmp_win->focus_w)a {oC ExecuteFunction(F_FOCUS, NULL, w, tmp_win, event, C_TITLE, FALSE);  return; }>#endif Context = C_NO_CONTEXT;> if (w == Root) Context = C_ROOT; if (tmp_win) {  if (w == tmp_win->title_w)p Context = C_TITLE; if (w == tmp_win->w)e Context = C_WINDOW; if (w == tmp_win->icon_w) Context = C_ICON; if (w == tmp_win->frame)_ Context = C_FRAME;d if (tmp_win->list &&p9 (w == tmp_win->list->w || w == tmp_win->list->icon))_ { if (tmp_win->icon)t Context = C_ICONMGR; else& {5 ExecuteFunction(F_ICONIFY, NULL, w, tmp_win, event,i C_TITLE, FALSE); return;f } } }mE /* this section of code checks to see if we were in the middle ofG% * a command executed from a menum */R if (RootFunction != NULL)n {w if (w == Root)c {= /* if the window was the Root, we don't know for sure it,C * it was the root. We must check to see if it happened to be @ * inside of a client that was getting button press events, * such as an xterm */+ XTranslateCoordinates(dpy, Root, Root,k event.xbutton.x,  event.xbutton.y, d &JunkX, &JunkY, &w); if (w == 0 ||: (XFindContext(dpy, w, TwmContext, &tmp_win) == XCNOENT)) { RootFunction = NULL; XBell(dpy, screen);, return;- }( XTranslateCoordinates(dpy, Root, w, event.xbutton.x, l event.xbutton.y, r &JunkX, &JunkY, &JunkChild); event.xbutton.x = JunkX;N5 event.xbutton.y = JunkY - tmp_win->title_height;; Context = C_WINDOW; }9 ExecuteFunction(RootFunction, Action, w, tmp_win, event,o Context, FALSE);n RootFunction = NULL; return; } ButtonEvent = event; ButtonWindow = tmp_win;*D /* if we get to here, we have to execute a function or pop up a * menuo */eJ modifier = event.xbutton.state & (ShiftMask | ControlMask | Mod1Mask); if (Context == C_NO_CONTEXT) return; RootFunction = NULL;F if (Mouse[event.xbutton.button][Context][modifier].func == F_MENU) {m@ PopUpMenu(Mouse[event.xbutton.button][Context][modifier].menu, 1 event.xbutton.x_root, event.xbutton.y_root); }wI else if (Mouse[event.xbutton.button][Context][modifier].func != NULL)c { ? Action = Mouse[event.xbutton.button][Context][modifier].item ?lH Mouse[event.xbutton.button][Context][modifier].item->action : NULL;E ExecuteFunction(Mouse[event.xbutton.button][Context][modifier].func,i0 Action, w, tmp_win, event, Context, FALSE); }t* else if (DefaultFunction.func != NULL) {c$ if (DefaultFunction.func == F_MENU) {% PopUpMenu(DefaultFunction.menu, i. event.xbutton.x_root, event.xbutton.y_root); } elsew {I Action = DefaultFunction.item ? DefaultFunction.item->action : NULL;w2 ExecuteFunction(DefaultFunction.func, Action,+ w, tmp_win, event, Context, FALSE);  } }>}nH/*********************************************************************** * * Procedure:0 * HandleEnterNotify - EnterNotify event handler *H *********************************************************************** */nvoidHandleEnterNotify()*{* MenuItem *tmp; #ifdef DEBUG% fprintf(stderr, "EnterNotify\n");e#endif. if (ActiveMenu == NULL && tmp_win != NULL) {s" if (FocusRoot && tmp_win->mapped) {+ if (Focus != NULL && Focus != tmp_win)s% XUnmapWindow(dpy, Focus->hilite_w);t( XMapWindow(dpy, tmp_win->hilite_w);3 XInstallColormap(dpy, tmp_win->attr.colormap);e8 XSetWindowBorder(dpy, tmp_win->frame, BorderColor);: XSetWindowBorder(dpy, tmp_win->title_w, BorderColor); if (TitleFocus)6 XSetInputFocus(dpy, tmp_win->w, RevertToPointerRoot, CurrentTime); Focus = tmp_win;k }0 if (enter_flag == FALSE && tmp_win->auto_raise) { XEvent client_event;;' XRaiseWindow(dpy, tmp_win->frame);* enter_flag = TRUE;*' client_event.type = ClientMessage;. client_event.xclient.message_type = NULL;& client_event.xclient.format = 32;> XSendEvent(dpy, tmp_win->frame, False, 0, &client_event); } return; } 5 if (XFindContext(dpy, w, MenuContext, &tmp) != 0)i return;/ if (w == tmp->w && tmp->root == ActiveMenu)  {v2 if (ActiveItem != NULL && ActiveItem->state != 0) { #ifdef DEBUG? fprintf(stderr, "turning off \"%s\"\n", ActiveItem->item); #endif@ XFillRectangle(dpy, ActiveItem->w,MenuXorGC,0,0,1000, 100); if (tmp->pull != NULL) A XFillRectangle(dpy, ActiveItem->pull, MenuXorGC,0,0,1000, 100);  ActiveItem->state = 0;w } if (tmp->state == 0)e { #ifdef DEBUG7 fprintf(stderr, "turning on \"%s\"\n", tmp->item);;#endif9 XFillRectangle(dpy, tmp->w,MenuXorGC,0,0,1000, 100);g if (tmp->pull)>: XFillRectangle(dpy, tmp->pull, MenuXorGC,0,0,1000, 100); tmp->state = 1; } ActiveItem = tmp; return; }t2 if (w == tmp->pull && tmp->root == ActiveMenu) {  XGrabServer(dpy);, PopUpMenu(tmp->sub, event.xcrossing.x_root, event.xcrossing.y_root);y XUngrabServer(dpy); return; }i})H/*********************************************************************** * * Procedure:0 * HandleLeaveNotify - LeaveNotify event handler *H *********************************************************************** */)voidHandleLeaveNotify() {( MenuItem *tmp; #ifdef DEBUG% fprintf(stderr, "LeaveNotify\n");S#endif if (tmp_win != NULL) { " XUnmapWindow(dpy, VersionWindow); if (FocusRoot)- {2 if (event.xcrossing.detail != NotifyInferior) {' XUnmapWindow(dpy, tmp_win->hilite_w);*2 XUninstallColormap(dpy, tmp_win->attr.colormap);& if (Highlight && tmp_win->highlight) {*< XSetWindowBorderPixmap(dpy, tmp_win->frame, GrayTile);> XSetWindowBorderPixmap(dpy, tmp_win->title_w, GrayTile); }( if (TitleFocus)i; XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot,f CurrentTime); Focus = NULL;o } } return; }n5 if (XFindContext(dpy, w, MenuContext, &tmp) != 0)y return; if (w == tmp->root->w) {e int rootx, rooty, x, y; int wx, wy, ww, wh;+ /* see if the mouse really left the window;% * or just crossed into a sub-windowz */! XQueryPointer(dpy, w, &JunkRoot, 4 &JunkChild, &rootx, &rooty, &x, &y, &JunkMask);* XGetGeometry(dpy, w, &JunkRoot, &wx, &wy, &ww, &wh, &JunkBW,C &JunkDepth);- l if (rootx < wx || rootx > (wx + ww) ||  rooty < wy || rooty > (wy + wh))_ { ActiveItem = NULL;i! if (tmp->root->prev != NULL)o { if (ActiveMenu == tmp->root) {X, XUnmapWindow(dpy, ActiveMenu->shadow);' XUnmapWindow(dpy, ActiveMenu->w);_# ActiveMenu = tmp->root->prev;l }; } } return; }m if (w == tmp->w) {n if (tmp == ActiveItem)e ActiveItem = NULL;  if (tmp->state != 0)w { #ifdef DEBUG8 fprintf(stderr, "turning off \"%s\"\n", tmp->item);#endif9 XFillRectangle(dpy, tmp->w,MenuXorGC,0,0,1000, 100);t if (tmp->pull != NULL)*: XFillRectangle(dpy, tmp->pull, MenuXorGC,0,0,1000, 100); tmp->state = 0; } return; }t} H/*********************************************************************** * * Procedure:: * HandleConfigureRequest - ConfigureRequest event handler *H *********************************************************************** */ voidHandleConfigureRequest(){L XWindowChanges xwc;N unsigned int xwcm; #ifdef DEBUG* fprintf(stderr, "ConfigureRequest\n");1 if (event.xconfigurerequest.value_mask & CWX) : fprintf(stderr, " x = %d\n", event.xconfigurerequest.x);1 if (event.xconfigurerequest.value_mask & CWY)*: fprintf(stderr, " y = %d\n", event.xconfigurerequest.y);5 if (event.xconfigurerequest.value_mask & CWWidth)wB fprintf(stderr, " width = %d\n", event.xconfigurerequest.width);6 if (event.xconfigurerequest.value_mask & CWHeight)D fprintf(stderr, " height = %d\n", event.xconfigurerequest.height);7 if (event.xconfigurerequest.value_mask & CWSibling) D fprintf(stderr, " above = 0x%x\n", event.xconfigurerequest.above);9 if (event.xconfigurerequest.value_mask & CWStackMode)gC fprintf(stderr, " stack = %d\n", event.xconfigurerequest.detail);o#endif' w = event.xconfigurerequest.window;d( if (tmp_win == NULL && Transient(w)) {l #ifdef DEBUG" fprintf(stderr, " Transient\n");#endif- xwcm = event.xconfigurerequest.value_mask & & (CWX | CWY | CWWidth | CWHeight);# xwc.x = event.xconfigurerequest.x; # xwc.y = event.xconfigurerequest.y;;+ xwc.width = event.xconfigurerequest.width; - xwc.height = event.xconfigurerequest.height;c& XConfigureWindow(dpy, w, xwcm, &xwc); return; }  if (tmp_win == NULL) return;9 6~TWM.SAVE3 [FIELDS.X.TWM]EVENTS.C;1OJaGif (event.xconfigurerequest.value_mask & CWStackMode)i {C- if (event.xconfigurerequest.detail == Above) ' XRaiseWindow(dpy, tmp_win->frame);*2 else if (event.xconfigurerequest.detail == Below)' XLowerWindow(dpy, tmp_win->frame);y return; }h1 if (event.xconfigurerequest.value_mask & CWX)*F tmp_win->frame_x = event.xconfigurerequest.x - tmp_win->title_height;1 if (event.xconfigurerequest.value_mask & CWY)e. tmp_win->frame_y = event.xconfigurerequest.y;5 if (event.xconfigurerequest.value_mask & CWWidth)s6 tmp_win->frame_width = event.xconfigurerequest.width;6 if (event.xconfigurerequest.value_mask & CWHeight) tmp_win->frame_height =< event.xconfigurerequest.height + tmp_win->title_height; SetupWindow(tmp_win,$ tmp_win->frame_x, tmp_win->frame_y,. tmp_win->frame_width, tmp_win->frame_height);} H/*********************************************************************** * * Procedure:( * HandleUnknown - unknown event handler *H *********************************************************************** */*voidHandleUnknown()*{* #ifdef DEBUG/ fprintf(stderr, "type = %d\n", event.type);d#endif}fH/*********************************************************************** * * Procedure:9 * Transient - checks to see if the window is a transientm * * Returned Value:n * TRUE - window is a transient*$ * FALSE - window is not a transient * * Inputs:c * w - the window to check *H *********************************************************************** */*int* Transient(w) Window w;d{a Window propw;2 return (XGetTransientForHint(dpy, w, &propw));}fn"); */#endif if (ConstMove) { switch (ConstMoveDir) { case MOVE_NONE:+ if (event.xmotion.x_root < ConstMoveXL ||*) event.xmotion.x_root > ConstMoveXR)s ConstMoveDir = MOVE_HORIZ;+ if (event.xmotion.y_root < ConstMoveYT ||() event.xmotion.y_root > ConstMoveYB)r ConstMoveDir = MOVE_VERT;*[FIELDS.X.TWM]GC.C;1+,3 ./% 4O - 0@123KPWO56 %ʡ37`@E8B9fG%HJO/*****************************************************************************/O/** Copyright 1988 by Evans & Sutherland Computer Corporation, **/O/** Salt Lake City, Utah **/O/** **/O/** All Rights Reserved **/O/** **/O/** Permission to use, copy, modify, and distribute this software and **/O/** its documentation for any purpose and without fee is hereby **/O/** granted, provided that the above copyright notice appear in all **/O/** copies and that both that copyright notice and this permis- **/O/** sion notice appear in supporting documentation, and that the **/O/** name of Evans & Sutherland not be used in advertising or publi- **/O/** city pertaining to distribution of the software without specif- **/O/** ic, written prior permission. **/O/** **/O/** EVANS & SUTHERLAND DISCLAIMS ALL WARRANTIES WITH REGARD TO **/O/** THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILI- **/O/** TY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND BE LIABLE **/O/** FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAM- **/O/** AGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, **/O/** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS **/O/** ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PER- **/O/** FORMANCE OF THIS SOFTWARE. **/O/*****************************************************************************/G/********************************************************************** *4 * $Header: gc.c,v 1.15 88/10/13 06:35:07 toml Exp $ *$ * Open the fonts and create the GCs *2 * 31-Mar-88 Tom LaStrange Initial Version. *H **********************************************************************/ #ifndef lintstatic char RCSinfo[]=4"$Header: gc.c,v 1.15 88/10/13 06:35:07 toml Exp $"; #endif lint#include #include "twm.h"#include "util.h"1static XFontStruct *dfont; /* my default font */static char *dfontname;H/*********************************************************************** * * Procedure:A * CreateGCs - open fonts and create all the needed GC's. I only8 * want to do this once, hence the first_time flag. *H *********************************************************************** */void CreateGCs(){! static int first_time = TRUE; XGCValues gcv; unsigned long gcm, mask; if (!first_time) return; first_time = FALSE; /* create GC's */ if (ReverseVideo) { DefaultC.back = Black; DefaultC.fore = White; } else { DefaultC.fore = Black; DefaultC.back = White; } gcm = 0;7 gcm |= GCPlaneMask; gcv.plane_mask = AllPlanes;> gcm |= GCForeground; gcv.foreground = BorderTileC.fore;> gcm |= GCBackground; gcv.background = BorderTileC.back;/ BorderGC = XCreateGC(dpy, Root, gcm, &gcv); gcm = 0;5 gcm |= GCFont; gcv.font = MenuFont.font->fid;7 gcm |= GCPlaneMask; gcv.plane_mask = AllPlanes;8 gcm |= GCForeground; gcv.foreground = MenuC.fore;8 gcm |= GCBackground; gcv.background = MenuC.back;3 MenuNormalGC = XCreateGC(dpy, Root, gcm, &gcv); gcv.foreground = MenuC.back; gcv.background = MenuC.fore;4 MenuReverseGC = XCreateGC(dpy, Root, gcm, &gcv);# mask = MenuC.fore ^ MenuC.back; gcm = 0;0 gcm |= GCFunction; gcv.function = GXxor;5 gcm |= GCFont; gcv.font = MenuFont.font->fid;2 gcm |= GCPlaneMask; gcv.plane_mask = mask;2 gcm |= GCForeground; gcv.foreground = mask;8 gcm |= GCBackground; gcv.background = MenuC.back;0 MenuXorGC = XCreateGC(dpy, Root, gcm, &gcv); gcm = 0;5 gcm |= GCFont; gcv.font = MenuFont.font->fid;7 gcm |= GCPlaneMask; gcv.plane_mask = AllPlanes;= gcm |= GCForeground; gcv.foreground = MenuTitleC.fore;= gcm |= GCBackground; gcv.background = MenuTitleC.back;2 MenuTitleGC = XCreateGC(dpy, Root, gcm, &gcv);) mask = DefaultC.fore ^ DefaultC.back; gcm = 0;0 gcm |= GCFunction; gcv.function = GXxor;/ gcm |= GCLineWidth; gcv.line_width = 0;2 gcm |= GCForeground; gcv.foreground = mask;2 gcm |= GCPlaneMask; gcv.plane_mask = mask;B gcm |= GCSubwindowMode; gcv.subwindow_mode = IncludeInferiors;- DrawGC = XCreateGC(dpy, Root, gcm, &gcv); gcm = 0;5 gcm |= GCFont; gcv.font = IconFont.font->fid;7 gcm |= GCPlaneMask; gcv.plane_mask = AllPlanes;8 gcm |= GCForeground; gcv.foreground = IconC.fore;8 gcm |= GCBackground; gcv.background = IconC.back;3 IconNormalGC = XCreateGC(dpy, Root, gcm, &gcv); gcm = 0;8 gcm |= GCFont; gcv.font = VersionFont.font->fid;7 gcm |= GCPlaneMask; gcv.plane_mask = AllPlanes;; gcm |= GCForeground; gcv.foreground = DefaultC.fore;; gcm |= GCBackground; gcv.background = DefaultC.back;6 VersionNormalGC = XCreateGC(dpy, Root, gcm, &gcv); gcm = 0;5 gcm |= GCFont; gcv.font = SizeFont.font->fid;7 gcm |= GCPlaneMask; gcv.plane_mask = AllPlanes;; gcm |= GCForeground; gcv.foreground = DefaultC.fore;; gcm |= GCBackground; gcv.background = DefaultC.back;3 SizeNormalGC = XCreateGC(dpy, Root, gcm, &gcv); gcm = 0;8 gcm |= GCFont; gcv.font = InitialFont.font->fid;7 gcm |= GCPlaneMask; gcv.plane_mask = AllPlanes;; gcm |= GCForeground; gcv.foreground = DefaultC.fore;; gcm |= GCBackground; gcv.background = DefaultC.back;6 InitialNormalGC = XCreateGC(dpy, Root, gcm, &gcv); gcm = 0;< gcm |= GCFont; gcv.font = IconManagerFont.font->fid;7 gcm |= GCPlaneMask; gcv.plane_mask = AllPlanes;? gcm |= GCForeground; gcv.foreground = IconManagerC.fore;? gcm |= GCBackground; gcv.background = IconManagerC.back;4 IconManagerGC = XCreateGC(dpy, Root, gcm, &gcv);}*[FIELDS.X.TWM]GRAM.C;1+,3 .6/% 4]66- 0@123KPWO756 37`dE8 B9fG%HJX# line 37 "gram.y"static char RCSinfo[]=6"$Header: gram.y,v 1.45 88/10/14 07:05:55 toml Exp $";#include #include "twm.h"#include "menus.h"#include "list.h"#include "util.h"static char *Action = "";static char *Name = "";static MenuRoot *root, *pull = NULL;MenuRoot *GetRoot();static char *ptr;static int Button;static int list;static int mods = 0, cont = 0;static int color;extern int yylineno;# line 63 "gram.y"typedef union { int num; char *ptr; } YYSTYPE;# define LB 257# define RB 258# define MENUS 259# define MENU 260# define BUTTON 261# define TBUTTON 262# define DEFAULT_FUNCTION 263# define F_MENU 264# define F_UNFOCUS 265# define F_REFRESH 266# define F_FILE 267# define F_TWMRC 268# define F_CIRCLEUP 269# define F_QUIT 270# define F_NOP 271# define F_TITLE 272# define F_VERSION 273# define F_EXEC 274# define F_CUT 275# define F_CIRCLEDOWN 276# define F_SOURCE 277# define F_CUTFILE 278# define F_MOVE 279# define F_ICONIFY 280# define F_FOCUS 281# define F_RESIZE 282# define F_RAISE 283# define F_LOWER 284# define F_POPUP 285# define F_DEICONIFY 286# define F_FORCEMOVE 287# define WINDOW_FUNCTION 288# define F_DESTROY 289# define F_WINREFRESH 290# define F_BEEP 291# define DONT_MOVE_OFF 292# define ZOOM 293# define F_SHOWLIST 294# define F_HIDELIST 295# define NO_BACKINGSTORE 296# define NO_SAVEUNDER 297# define F_ZOOM 298# define F_FULLZOOM 299# define ICONMGR_FOREGROUND 300# define ICONMGR_BACKGROUND 301# define ICONMGR_FONT 302# define ICONMGR 303# define ICONMGR_GEOMETRY 304# define SHOW_ICONMGR 305# define ICONMGR_NOSHOW 306# define F_RAISELOWER 307 # define DECORATE_TRANSIENTS 308# define RANDOM_PLACEMENT 309!# define ICONIFY_BY_UNMAPPING 310&# define DONT_ICONIFY_BY_UNMAPPING 311# define WARPCURSOR 312# define NUMBER 313# define BORDERWIDTH 314# define TITLE_FONT 315# define REVERSE_VIDEO 316# define RESIZE_FONT 317# define NO_TITLE 318# define AUTO_RAISE 319# define FORCE_ICON 320# define NO_HILITE 321# define MENU_FONT 322# define ICON_FONT 323# define UNKNOWN_ICON 324# define ICONS 325# define ICON_DIRECTORY 326# define META 327# define SHIFT 328# define CONTROL 329# define WINDOW 330# define TITLE 331# define ICON 332# define ROOT 333# define FRAME 334# define COLON 335# define EQUALS 336# define BORDER_COLOR 337# define TITLE_FOREGROUND 338# define TITLE_BACKGROUND 339# define MENU_FOREGROUND 340# define MENU_BACKGROUND 341# define MENU_SHADOW_COLOR 342"# define MENU_TITLE_FOREGROUND 343"# define MENU_TITLE_BACKGROUND 344# define ICON_FOREGROUND 345# define ICON_BACKGROUND 346# define ICON_BORDER_COLOR 347# define NO_RAISE_ON_MOVE 348"# define NO_RAISE_ON_DEICONIFY 349# define NO_RAISE_ON_RESIZE 350# define COLOR 351# define MONOCHROME 352# define NO_TITLE_FOCUS 353# define FUNCTION 354# define F_FUNCTION 355## define BORDER_TILE_FOREGROUND 356## define BORDER_TILE_BACKGROUND 357# define STRING 358#define yyclearin yychar = -1#define yyerrok yyerrflag = 0extern int yychar;extern short yyerrflag;#ifndef YYMAXDEPTH#define YYMAXDEPTH 150#endifYYSTYPE yylval, yyval;# define YYERRCODE 256# line 452 "gram.y"yyerror(s) char *s;{> fprintf(stderr, "twm: syntax error, line %d\n", yylineno); ParseError = 1;}RemoveDQuote(str) char *str;{ strcpy(str, &str[1]); str[strlen(str)-1] = '\0';} MenuRoot * GetRoot(name) char *name;{ MenuRoot *tmp; tmp = FindMenuRoot(name); if (tmp == NULL) tmp = NewMenuRoot(name); return tmp;}short yyexca[] ={-1, 1, 0, -1, -2, 0,-1, 34, 257, 39, -2, 41,-1, 35, 257, 42, -2, 44, };# define YYNPROD 148# define YYLAST 423short yyact[]={2 4, 165, 45, 95, 37, 44, 46, 42, 183, 182,2 151, 152, 153, 154, 155, 132, 133, 134, 132, 133,2 134, 56, 140, 135, 184, 138, 130, 162, 128, 126,2 185, 157, 43, 118, 160, 127, 19, 22, 45, 115,2 20, 21, 188, 180, 181, 149, 11, 55, 12, 28,2 33, 161, 26, 25, 27, 32, 15, 163, 23, 10,2 6, 8, 35, 36, 5, 34, 9, 7, 13, 39,2 14, 57, 144, 145, 146, 147, 148, 141, 158, 136,2 167, 170, 171, 172, 173, 176, 174, 175, 177, 178,2 179, 166, 16, 18, 17, 40, 41, 24, 38, 168,2 169, 142, 45, 88, 72, 65, 89, 80, 83, 63,2 61, 82, 81, 90, 91, 84, 67, 85, 68, 70,2 64, 73, 76, 78, 45, 71, 69, 45, 79, 66,2 62, 45, 131, 86, 87, 116, 150, 74, 75, 143,2 106, 187, 129, 105, 125, 104, 77, 88, 72, 65,2 89, 80, 83, 63, 61, 82, 81, 90, 91, 84,2 67, 85, 68, 70, 64, 73, 76, 78, 139, 71,2 69, 124, 79, 66, 62, 93, 137, 86, 87, 123,2 101, 74, 75, 117, 100, 99, 98, 97, 3, 2,2 77, 1, 94, 60, 92, 31, 29, 45, 88, 72,2 65, 89, 80, 83, 63, 61, 82, 81, 90, 91,2 84, 67, 85, 68, 70, 64, 73, 76, 78, 0,2 71, 69, 0, 79, 66, 62, 0, 0, 86, 87,2 0, 0, 74, 75, 30, 59, 0, 0, 92, 0,2 0, 77, 47, 48, 49, 50, 51, 52, 53, 54,2 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,2 0, 0, 0, 0, 58, 0, 0, 96, 0, 0,2 0, 0, 102, 103, 0, 0, 0, 0, 107, 108,2 0, 0, 119, 120, 121, 122, 0, 0, 0, 92,2 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,2 0, 0, 109, 0, 0, 0, 0, 0, 0, 0,2 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,2 0, 0, 0, 110, 111, 112, 113, 114, 0, 0,2 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,2 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,2 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,2 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,2 156, 159, 0, 0, 0, 0, 164, 0, 0, 0,2 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,2 0, 0, 0, 0, 0, 186, 0, 189, 0, 190,2 0, 0, 191, 192, 193, 194, 195, 196, 197, 198,2 199, 200, 201, 202, 203, 204, 205, 0, 206, 207, 0, 0, 208 };short yypact[]={8-1000,-1000,-256,-1000,-1000,-1000,-1000,-356,-356,-356,7-356,-356,-356,-356,-356,-1000,-1000,-1000,-1000,-1000,9-1000,-1000,-292,-292,-1000,-1000,-1000,-1000,-1000,-161,8-333, -66,-1000,-1000,-1000,-1000,-1000,-356,-356,-1000,:-1000,-1000, -66, -66,-1000,-1000,-1000,-1000,-1000,-1000,<-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,;-1000,-1000,-1000,-1000,-1000,-1000,-1000,-356,-1000,-1000,<-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,:-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-356,-356,6-356,-356,-356,-1000,-1000,-1000,-1000,-224,-224,-224,7-224,-224,-1000,-1000,-228,-229,-229,-1000,-1000,-1000,:-1000,-1000,-1000,-1000,-1000,-309,-312,-1000,-1000,-1000,:-1000,-1000,-1000,-232,-235,-1000,-1000,-1000,-1000,-1000,9-258,-1000,-1000,-1000,-1000,-320,-227,-1000,-1000,-1000,9-1000,-231,-257,-326,-1000,-1000,-1000,-1000,-1000,-1000,;-327,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,6-234,-117,-1000,-1000,-356,-1000,-1000,-356,-356,-356,2-356,-356,-356,-356,-356,-356,-356,-356,-356,-356,7-356,-356, -66, -66,-1000,-1000, -66,-1000,-1000,-1000,<-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,8-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000 };short yypgo[]={2 0, 234, 235, 196, 47, 195, 193, 192, 191, 189,2 188, 187, 183, 186, 185, 184, 180, 179, 176, 171,2 168, 145, 144, 143, 35, 140, 39, 139, 136, 132,4 101, 91, 79, 78, 77, 57, 51, 42, 34, 30 };short yyr1[]={2 0, 8, 9, 9, 10, 10, 10, 10, 10, 10,2 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,2 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,2 10, 10, 10, 10, 10, 11, 10, 13, 10, 14,2 10, 10, 15, 10, 10, 16, 10, 17, 10, 19,2 10, 21, 10, 23, 10, 25, 10, 10, 10, 6,2 7, 26, 26, 29, 29, 29, 27, 27, 27, 27,2 27, 27, 28, 28, 28, 28, 28, 28, 24, 30,2 30, 31, 31, 31, 31, 31, 31, 31, 31, 31,2 31, 31, 31, 31, 31, 31, 12, 32, 32, 33,2 22, 34, 34, 35, 20, 36, 36, 37, 18, 38,2 38, 39, 2, 2, 2, 2, 2, 2, 2, 2,2 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,2 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,* 2, 2, 2, 2, 3, 5, 1, 4 };short yyr2[]={2 0, 1, 0, 2, 1, 1, 1, 2, 2, 2,2 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,2 1, 1, 2, 1, 2, 1, 1, 1, 1, 1,2 2, 2, 2, 2, 2, 0, 3, 0, 3, 0,2 3, 1, 0, 3, 1, 0, 3, 0, 4, 0,2 4, 0, 3, 0, 3, 0, 3, 2, 2, 6,2 6, 0, 2, 1, 1, 1, 1, 1, 1, 1,2 1, 1, 1, 1, 1, 1, 1, 1, 3, 0,2 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,2 2, 2, 2, 2, 2, 2, 3, 0, 2, 1,2 3, 0, 2, 2, 3, 0, 2, 1, 3, 0,2 2, 2, 1, 1, 1, 1, 1, 1, 2, 1,2 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,2 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,* 2, 2, 2, 2, 1, 1, 1, 1 };short yychk[]={3-1000, -8, -9, -10, 256, 320, 316, 323, 317, 322,2 315, 302, 304, 324, 326, 312, 348, 350, 349, 292,2 296, 297, 293, 314, 353, 309, 308, 310, 305, -3,2 -1, -5, 311, 306, 321, 318, 319, 260, 354, 325,2 351, 352, 263, 288, 261, 358, 262, -1, -1, -1,2 -1, -1, -1, -1, -1, -4, 313, -4, -1, -2,2 -6, 271, 291, 270, 281, 266, 290, 277, 279, 287,2 280, 286, 265, 282, 298, 299, 283, 307, 284, 289,2 268, 273, 272, 269, 276, 278, 294, 295, 264, 267,2 274, 275, 355, 336, -7, 336, -2, -11, -13, -14,2 -15, -16, -1, -1, -21, -23, -25, -2, -2, -1,2 -1, -1, -1, -1, -1, -26, -26, -12, 257, -12,2 -12, -12, -12, -17, -19, -22, 257, -24, 257, -24,2 335, -29, 327, 328, 329, 335, -32, -18, 257, -20,2 257, -34, -30, -27, 330, 331, 332, 333, 334, 303,2 -28, 330, 331, 332, 333, 334, -1, 258, -33, -1,2 -38, -36, 258, -35, -1, 258, -31, 337, 356, 357,2 338, 339, 340, 341, 343, 344, 342, 345, 346, 347,2 300, 301, 335, 335, 258, -39, -1, 258, -37, -2,2 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,/ -1, -1, -1, -1, -1, -1, -2, -2, -2 };short yydef[]={2 2, -2, 1, 3, 4, 5, 6, 0, 0, 0,2 0, 0, 0, 0, 0, 15, 16, 17, 18, 19,2 20, 21, 23, 0, 25, 26, 27, 28, 29, 0,2 0, 0, 35, 37, -2, -2, 45, 0, 0, 51,2 53, 55, 0, 0, 144, 146, 145, 7, 8, 9,2 10, 11, 12, 13, 14, 22, 147, 24, 30, 31,2 33, 112, 113, 114, 115, 116, 117, 0, 119, 120,2 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,2 131, 132, 133, 134, 135, 136, 137, 138, 0, 0,2 0, 0, 0, 61, 32, 61, 34, 0, 0, 0,2 0, 0, 47, 49, 0, 0, 0, 57, 58, 118,2 139, 140, 141, 142, 143, 0, 0, 36, 97, 38,2 40, 43, 46, 0, 0, 52, 101, 54, 79, 56,2 0, 62, 63, 64, 65, 0, 0, 48, 109, 50,2 105, 0, 0, 0, 66, 67, 68, 69, 70, 71,2 0, 72, 73, 74, 75, 76, 77, 96, 98, 99,2 0, 0, 100, 102, 0, 78, 80, 0, 0, 0,2 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,2 0, 0, 0, 0, 108, 110, 0, 104, 106, 107,2 103, 81, 82, 83, 84, 85, 86, 87, 88, 89,/ 90, 91, 92, 93, 94, 95, 59, 60, 111 }; #ifndef lintDstatic char yaccpar_sccsid[] = "@(#)yaccpar 4.1 (Berkeley) 2/11/83";#endif not lint## define YYFLAG -1000# define YYERROR goto yyerrlab# define YYACCEPT return(0)# define YYABORT return(1)/* parser for yacc output */#ifdef YYDEBUG&int yydebug = 0; /* 1 for debugging */#endif:YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */1int yychar = -1; /* current input token number */(int yynerrs = 0; /* number of errors *//short yyerrflag = 0; /* error recovery flag */ yyparse() { short yys[YYMAXDEPTH]; short yyj, yym; register YYSTYPE *yypvt;$ register short yystate, *yyps, yyn; register YYSTYPE *yypv; register short *yyxi; yystate = 0; yychar = -1; yynerrs = 0; yyerrflag = 0; yyps= &yys[-1]; yypv= &yyv[-1];7 yystack: /* put a state and value onto the stack */#ifdef YYDEBUGB if( yydebug ) printf( "state %d, char 0%o\n", yystate, yychar );#endifQ if( ++yyps> &yys[YYMAXDEPTH] ) { yyerror( "yacc stack overflow" ); return(1); } *yyps = yystate; ++yypv; *yypv = yyval; yynewstate: yyn = yypact[yystate];6 if( yyn<= YYFLAG ) goto yydefault; /* simple state */2 if( yychar<0 ) if( (yychar=yylex())<0 ) yychar=0;9 if( (yyn += yychar)<0 || yyn >= YYLAST ) goto yydefault;= if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */ yychar = -1; yyval = yylval; yystate = yyn;" if( yyerrflag > 0 ) --yyerrflag; goto yystack; } yydefault: /* default state action */# if( (yyn=yydef[yystate]) == -2 ) {5 if( yychar<0 ) if( (yychar=yylex())<0 ) yychar = 0;$ /* look through exception table */S for( yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate) ; yyxi += 2 ) ; /* VOID */ while( *(yyxi+=2) >= 0 ){ if( *yyxi == yychar ) break; }5 if( (yyn = yyxi[1]) < 0 ) return(0); /* accept */ } if( yyn == 0 ){ /* error */+ /* error ... attempt to resume parsing */ switch( yyerrflag ){! case 0: /* brand new error */ yyerror( "syntax error" ); yyerrlab: ++yynerrs; case 1:: case 2: /* incompletely recovered error ... try again */ yyerrflag = 3;; /* find a state where "error" is a legal shift action */ while ( yyps >= yys ) {& yyn = yypact[*yyps] + YYERRCODE;F if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){A yystate = yyact[yyn]; /* simulate a shift of "error" */ goto yystack; } yyn = yypact[*yyps];@ /* the current yyps has no shift onn "error", pop stack */#ifdef YYDEBUG] if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );#endif --yyps; --yypv; }E /* there is no state on the stack with an error shift ... abort */ yyabort: return(1);1 case 3: /* no shift yet; clobber input char */#ifdef YYDEBUGG if( yydebug ) printf( "error recovery discards char %d\n", yychar );#endif@ if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */ yychar = -1;7 goto yynewstate; /* try again in the same state */ } }" /* reduction by production yyn */#ifdef YYDEBUG* if( yydebug ) printf("reduce %d\n",yyn);#endif yyps -= yyr2[yyn]; yypvt = yypv; yypv -= yyr2[yyn]; yyval = yypv[1]; yym=yyn;. /* consult goto table to find next state */ yyn = yyr1[yyn]; yyj = yypgo[yyn] + *yyps + 1;Y if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]]; switch(yym){ case 5:# line 108 "gram.y"+{ if (FirstTime) ForceIcon = TRUE; } break;case 6:# line 109 "gram.y".{ if (FirstTime) ReverseVideo = TRUE; } break;case 7:# line 110 "gram.y" { IconFont.name = yypvt[-0].ptr; GetFont(&IconFont); } break;case 8:# line 113 "gram.y" { SizeFont.name = yypvt[-0].ptr; GetFont(&SizeFont); } break;case 9:# line 116 "gram.y" { MenuFont.name = yypvt[-0].ptr; GetFont(&MenuFont); } break;case 10:# line 119 "gram.y"${ TitleBarFont.name = yypvt[-0].ptr; GetFont(&TitleBarFont); } break;case 11:# line 122 "gram.y"%{ IconManagerFont.name=yypvt[-0].ptr;! GetFont(&IconManagerFont); } break;case 12:# line 125 "gram.y";{ if (FirstTime) IconManagerGeometry=yypvt[-0].ptr;} break;case 13:# line 126 "gram.y"8{ if (FirstTime) GetUnknownIcon(yypvt[-0].ptr); } break;case 14:# line 127 "gram.y"{ if (FirstTime)7 IconDirectory = ExpandFilename(yypvt[-0].ptr); } break;case 15:# line 130 "gram.y",{ if (FirstTime) WarpCursor = TRUE; } break;case 16:# line 131 "gram.y"-{ if (FirstTime) NoRaiseMove = TRUE; } break;case 17:# line 132 "gram.y"/{ if (FirstTime) NoRaiseResize = TRUE; } break;icase 18:# line 133 "gram.y"i/{ if (FirstTime) NoRaiseDeicon = TRUE; } break; case 19:# line 134 "gram.y".-{ if (FirstTime) DontMoveOff = TRUE; } break;ucase 20:# line 135 "gram.y"/{ if (FirstTime) BackingStore = FALSE; } break; case 21:# line 136 "gram.y",{ if (FirstTime) SaveUnder = FALSE; } break;case 22:# line 137 "gram.y"B{ if (FirstTime) { DoZoom = TRUE; ZoomCount = yypvt[-0].num; } } break;ecase 23:# line 143 "gram.y"({ if (FirstTime) DoZoom = TRUE; } break;case 24:# line 144 "gram.y" 6{ if (FirstTime) BorderWidth = yypvt[-0].num; } break;case 25:# line 145 "gram.y"2-{ if (FirstTime) TitleFocus = FALSE; } break;Ncase 26:# line 146 "gram.y"/{ if (FirstTime) RandomPlacement=TRUE; } break;ecase 27:# line 147 "gram.y"R%{ if (FirstTime) DecorateTransients =i TRUE; } break;Tcase 28:# line 149 "gram.y"3%{ if (FirstTime) IconifyByUnmapping =2 TRUE; } break; case 29:# line 151 "gram.y" "{ if (FirstTime) ShowIconManager = TRUE; } break;Ycase 30:# line 153 "gram.y"e { root = GetRoot(yypvt[-0].ptr);5 Mouse[yypvt[-1].num][C_ROOT][0].func = F_MENU;e3 Mouse[yypvt[-1].num][C_ROOT][0].menu = root;i } break;Icase 31:# line 157 "gram.y"7{ Mouse[yypvt[-1].num][C_ROOT][0].func = yypvt[-0].num;e# if (yypvt[-0].num == F_MENU) { pull->prev = NULL;H5 Mouse[yypvt[-1].num][C_ROOT][0].menu = pull;_ } elsee {" root = GetRoot(TWM_ROOT);0 Mouse[yypvt[-1].num][C_ROOT][0].item = 4 AddToMenu(root,"x",Action,0,yypvt[-0].num); } Action = "";R pull = NULL;_ } break; case 32:# line 172 "gram.y"e'{ AddFuncKey(yypvt[-1].ptr, cont, mods,_# yypvt[-0].num, Name, Action);M Action = "";O pull = NULL; cont = 0; mods = 0; } break;Wcase 33:# line 179 "gram.y" 8{ Mouse[yypvt[-1].num][cont][mods].func = yypvt[-0].num;# if (yypvt[-0].num == F_MENU)R { pull->prev = NULL;6 Mouse[yypvt[-1].num][cont][mods].menu = pull; } elsee {" root = GetRoot(TWM_ROOT);1 Mouse[yypvt[-1].num][cont][mods].item = i4 AddToMenu(root,"x",Action,0,yypvt[-0].num); } Action = ""; pull = NULL; cont = 0; mods = 0; } break;Ocase 34:# line 196 "gram.y"e8{ Mouse[yypvt[-1].num][C_TITLE][0].func = yypvt[-0].num;< Mouse[yypvt[-1].num][C_ICON][0].func = yypvt[-0].num;# if (yypvt[-0].num == F_MENU)0 { pull->prev = NULL;e6 Mouse[yypvt[-1].num][C_TITLE][0].menu = pull;5 Mouse[yypvt[-1].num][C_ICON][0].menu = pull;O } elseI {" root = GetRoot(TWM_ROOT);1 Mouse[yypvt[-1].num][C_TITLE][0].item = A4 AddToMenu(root,"x",Action,0,yypvt[-0].num);/ Mouse[yypvt[-1].num][C_ICON][0].item = , Mouse[yypvt[-1].num][C_TITLE][0].item; } Action = ""; pull = NULL;F } break;case 35:# line 215 "gram.y" +{ list = DONT_ICONIFY_BY_UNMAPPING;} break; case 37:# line 217 "gram.y"y!{ list = ICONMGR_NOSHOW; } break;xcase 39:# line 219 "gram.y" { list = NO_HILITE; } break;case 41:# line 221 "gram.y"y,{ if (FirstTime) Highlight = FALSE; } break;case 42:# line 222 "gram.y"{ list = NO_TITLE; } break; case 44:# line 224 "gram.y"e,{ if (FirstTime) NoTitlebar = TRUE; } break;case 45:# line 225 "gram.y"y{ list = AUTO_RAISE; } break;ncase 47:# line 227 "gram.y"t){ root = GetRoot(yypvt[-0].ptr); } break;ecase 49:# line 229 "gram.y"e){ root = GetRoot(yypvt[-0].ptr); } break;=case 51:# line 231 "gram.y"u{ list = ICONS; } break;case 53:# line 233 "gram.y",{ color = COLOR; } break;case 55:# line 235 "gram.y"{ color = MONOCHROME; } break;case 57:# line 237 "gram.y"r'{ DefaultFunction.func = yypvt[-0].num; # if (yypvt[-0].num == F_MENU)1 { pull->prev = NULL;% DefaultFunction.menu = pull;, } else  {" root = GetRoot(TWM_ROOT); DefaultFunction.item = 4 AddToMenu(root,"x",Action,0,yypvt[-0].num); } Action = "";  pull = NULL;3 } break;5case 58:# line 252 "gram.y",&{ WindowFunction.func = yypvt[-0].num;! root = GetRoot(TWM_ROOT);  WindowFunction.item = 3 AddToMenu(root,"x",Action,0,yypvt[-0].num);  Action = ""; pull = NULL; } break; case 59:# line 262 "gram.y"9%{ yyval.num = yypvt[-0].num; } break; case 60:# line 265 "gram.y"1%{ yyval.num = yypvt[-0].num; } break; case 63:# line 272 "gram.y" { mods |= Mod1Mask; } break;case 64:# line 273 "gram.y" { mods |= ShiftMask; } break; case 65:# line 274 "gram.y"7{ mods |= ControlMask; } break; case 66:# line 277 "gram.y" { cont = C_WINDOW; } break; case 67:# line 278 "gram.y" { cont = C_TITLE; } break;case 68:# line 279 "gram.y"0{ cont = C_ICON; } break;case 69:# line 280 "gram.y" { cont = C_ROOT; } break; case 70:# line 281 "gram.y",{ cont = C_FRAME; } break;case 71:# line 282 "gram.y"5{ cont = C_ICONMGR; } break;case 72:# line 285 "gram.y" { cont = C_WINDOW; } break; case 73:# line 286 "gram.y" { cont = C_TITLE; } break;case 74:# line 287 "gram.y"1{ cont = C_ICON; } break;case 75:# line 288 "gram.y" { cont = C_ROOT; } break; case 76:# line 289 "gram.y",{ cont = C_FRAME; } break;case 77:# line 290 "gram.y" /{ Name = yypvt[-0].ptr; cont = C_NAME; } break; case 81:# line 300 "gram.y" 8{ GetColor(color, &BorderColor, yypvt[-0].ptr); } break;case 82:# line 301 "gram.y" { GetColor(color, 1 &BorderTileC.fore, yypvt[-0].ptr); } break; case 83:# line 303 "gram.y" { GetColor(color,11 &BorderTileC.back, yypvt[-0].ptr); } break; case 84:# line 305 "gram.y" { GetColor(color, , &TitleC.fore, yypvt[-0].ptr); } break;case 85:# line 307Bos~TWM.SAVE3  [FIELDS.X.TWM]GRAM.C;1]6 - "gram.y" { GetColor(color, , &TitleC.back, yypvt[-0].ptr); } break;case 86:# line 309 "gram.y",{ GetColor(color,0+ &MenuC.fore, yypvt[-0].ptr); } break;,case 87:# line 311 "gram.y"0{ GetColor(color,2+ &MenuC.back, yypvt[-0].ptr); } break;case 88:# line 313 "gram.y"0{ GetColor(color,14 &MenuTitleC.fore, yypvt[-0].ptr); } break;case 89:# line 315 "gram.y"1{ GetColor(color,04 &MenuTitleC.back, yypvt[-0].ptr); } break;case 90:# line 317 "gram.y"1{ GetColor(color,04 &MenuShadowColor, yypvt[-0].ptr); } break;case 91:# line 319 "gram.y"0{ GetColor(color,-+ &IconC.fore, yypvt[-0].ptr); } break;2case 92:# line 321 "gram.y"-{ GetColor(color,0+ &IconC.back, yypvt[-0].ptr); } break;-case 93:# line 323 "gram.y"1{ GetColor(color,,0 &IconBorderColor, yypvt[-0].ptr); } break;case 94:# line 325 "gram.y"0{ GetColor(color,12 &IconManagerC.fore, yypvt[-0].ptr); } break;case 95:# line 327 "gram.y"0{ GetColor(color,-2 &IconManagerC.back, yypvt[-0].ptr); } break;case 99:# line 338 "gram.y",<{ if (FirstTime) AddToList(list, yypvt[-0].ptr, 0); } break; case 103:0# line 348 "gram.y",{ if (FirstTime) { 0 Pixmap pm; $ pm = GetBitmap(yypvt[-0].ptr); if (pm != NULL)y- AddToList(list, yypvt[-1].ptr, pm); } } break;1 case 107:5# line 366 "gram.y" 3{ AddToMenu(root, "", Action, NULL, yypvt[-0].num);3 Action = "";7 } break;1 case 111: # line 378 "gram.y"{>{ AddToMenu(root, yypvt[-1].ptr, Action, pull, yypvt[-0].num); Action = "";, pull = NULL; } break; case 112:1# line 384 "gram.y",{ yyval.num = F_NOP; } break;, case 113: # line 385 "gram.y" { yyval.num = F_BEEP; } break; case 114:0# line 386 "gram.y" { yyval.num = F_QUIT; } break; case 115:2# line 387 "gram.y",{ yyval.num = F_FOCUS; } break; case 116:8# line 388 "gram.y"0!{ yyval.num = F_REFRESH; } break;, case 117:# line 389 "gram.y" ${ yyval.num = F_WINREFRESH; } break; case 118:,# line 390 "gram.y" 7{ Action = yypvt[-0].ptr; yyval.num = F_TWMRC; } break; case 119: # line 391 "gram.y",{ yyval.num = F_MOVE; } break; case 120: # line 392 "gram.y"2#{ yyval.num = F_FORCEMOVE; } break;, case 121:;# line 393 "gram.y" !{ yyval.num = F_ICONIFY; } break; case 122:,# line 394 "gram.y",#{ yyval.num = F_DEICONIFY; } break; case 123: # line 395 "gram.y",!{ yyval.num = F_UNFOCUS; } break;2 case 124: # line 396 "gram.y" { yyval.num = F_RESIZE; } break; case 125:# line 397 "gram.y" { yyval.num = F_ZOOM; } break; case 126:2# line 398 "gram.y" "{ yyval.num = F_FULLZOOM; } break; case 127: # line 399 "gram.y" { yyval.num = F_RAISE; } break; case 128: # line 400 "gram.y" ${ yyval.num = F_RAISELOWER; } break; case 129: # line 401 "gram.y" { yyval.num = F_LOWER; } break;, case 130: # line 402 "gram.y" !{ yyval.num = F_DESTROY; } break; case 131:,# line 403 "gram.y",{ yyval.num = F_TWMRC; } break; case 132:2# line 404 "gram.y" !{ yyval.num = F_VERSION; } break; case 133:0# line 405 "gram.y" { yyval.num = F_TITLE; } break;3 case 134:8# line 406 "gram.y"6"{ yyval.num = F_CIRCLEUP; } break; case 135:# line 407 "gram.y"3${ yyval.num = F_CIRCLEDOWN; } break; case 136:,# line 408 "gram.y" !{ yyval.num = F_CUTFILE; } break; case 137:-# line 409 "gram.y"7"{ yyval.num = F_SHOWLIST; } break; case 138:0# line 410 "gram.y" "{ yyval.num = F_HIDELIST; } break; case 139:2# line 411 "gram.y"4 { pull = GetRoot(yypvt[-0].ptr); pull->prev = root;- yyval.num = F_MENU; } break; case 140: # line 415 "gram.y"26{ Action = yypvt[-0].ptr; yyval.num = F_FILE; } break; case 141:7# line 416 "gram.y"76{ Action = yypvt[-0].ptr; yyval.num = F_EXEC; } break; case 142:,# line 417 "gram.y"5{ Action = yypvt[-0].ptr; yyval.num = F_CUT; } break;8 case 143: # line 418 "gram.y"3:{ Action = yypvt[-0].ptr; yyval.num = F_FUNCTION; } break; case 144: # line 421 "gram.y"3{ yyval.num = yypvt[-0].num; if (yypvt[-0].num == 0) yyerror();' if (yypvt[-0].num > MAX_BUTTONS) { yyval.num = 0; yyerror(); } } break; case 145:0# line 432 "gram.y" { yyval.num = yypvt[-0].num; if (yypvt[-0].num == 0) yyerror();' if (yypvt[-0].num > MAX_BUTTONS)3 { yyval.num = 0; yyerror(); } } break;2 case 146:,# line 444 "gram.y",0{ ptr = (char *)malloc(strlen(yypvt[-0].ptr)+1);" strcpy(ptr, yypvt[-0].ptr); RemoveDQuote(ptr);, yyval.ptr = ptr; } break;, case 147: # line 449 "gram.y"0&{ yyval.num = yypvt[-0].num; } break;  }50 goto yystack; /* stack new state and value */ }, 38,2 40, 43, 46, 0, 0, 52, 101, 54, 79, 56,2 0, 62, 63, 64, 65, 0, 0, 48, 109, 50,2 105, 0, 0, 0, 66, 67, 68, 69, 70, 71,2 0, 72, 73, 74, 75, 76, 77, 96, 98, 99,2 0, *[FIELDS.X.TWM]LEX.C;1+,=.^/% 4t^]- 0@123KPWO^56ؓ57`JMF8PJB9fG%HJf# include "stdio.h"# define U(x) x%# define NLSTATE yyprevious=YYNEWLINE$# define BEGIN yybgin = yysvec + 1 +# define INITIAL 0# define YYLERR yysvec$# define YYSTATE (yyestate-yysvec-1)# define YYOPTIM 1# define YYLMAX BUFSIZ # define output(c) putc(c,yyout)t# define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)O# define unput(c) {yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;}# define yymore() (yymorfg=1))# define ECHO fprintf(yyout, "%s",yytext)3# define REJECT { nstr = yyreject(); goto yyfussy;}!int yyleng; extern char yytext[]; int yymorfg;extern char *yysptr, yysbuf[]; int yytchar;(FILE *yyin = {stdin}, *yyout = {stdout};extern int yylineno;struct yysvf {  struct yywork *yystoff; struct yysvf *yyother; int *yystops;};struct yysvf *yyestate;&extern struct yysvf yysvec[], *yybgin;O/*****************************************************************************/O/** Copyright 1988 by Evans & Sutherland Computer Corporation, **/O/** Salt Lake City, Utah **/O/** **/O/** All Rights Reserved **/O/** **/O/** Permission to use, copy, modify, and distribute this software and **/O/** its documentation for any purpose and without fee is hereby **/O/** granted, provided that the above copyright notice appear in all **/O/** copies and that both that copyright notice and this permis- **/O/** sion notice appear in supporting documentation, and that the **/O/** name of Evans & Sutherland not be used in advertising or publi- **/O/** city pertaining to distribution of the software without specif- **/O/** ic, written prior permission. **/O/** **/O/** EVANS & SUTHERLAND DISCLAIMS ALL WARRANTIES WITH REGARD TO **/O/** THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILI- **/O/** TY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND BE LIABLE **/O/** FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAM- **/O/** AGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, **/O/** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS **/O/** ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PER- **/O/** FORMANCE OF THIS SOFTWARE. **/O/*****************************************************************************/H/*********************************************************************** *5 * $Header: lex.l,v 1.43 88/10/14 07:05:48 toml Exp $ * * .twmrc lex file *. * 12-Nov-87 Thomas E. LaStrange File created *I ***********************************************************************/static char RCSinfo[]=5"$Header: lex.l,v 1.43 88/10/14 07:05:48 toml Exp $";#include #include "gram.h"extern int ParseError;# define YYNEWLINE 10yylex(){ int nstr; extern int yyprevious;while((nstr = yylook()) >= 0)yyfussy: switch(nstr){case 0:if(yywrap()) return(0); break;case 1: { return (LB); }break;case 2: { return (RB); }break;case 3: { return (EQUALS); }break;case 4: { return (COLON); }break;case 5:/ { (void)sscanf(&yytext[6], "%d", &yylval.num); return (BUTTON); }break;case 6:0 { (void)sscanf(&yytext[11], "%d", &yylval.num); return (TBUTTON); }break;case 7: { return MENU; }break;case 8: { return FUNCTION; }break;case 9: { return (META); }break;case 10: { return (SHIFT); }break;case 11: { return (CONTROL); }break;case 12: { return (WINDOW); }break;case 13: { return (ICON); }break;case 14: { return (TITLE); }break;case 15: { return (ROOT); }break;case 16: { return (FRAME); }break;case 17: { return (ICONMGR); }break;case 18: { return F_NOP; }break;case 19: { return F_BEEP; }break;case 20: { return F_QUIT; }break;case 21: { return F_TITLE ; }break;case 22: { return F_MENU; }break;case 23: { return F_UNFOCUS; }break;case 24: { return F_REFRESH; }break;case 25: { return F_WINREFRESH; }break;case 26: { return F_FILE; }break;case 27: { return F_TWMRC; }break;case 28: { return F_VERSION; }break;case 29: { return F_CIRCLEUP; }break;case 30: { return F_CIRCLEDOWN; }break;case 31: { return F_SOURCE; }break;case 32: { return F_CUTFILE; }break;case 33: { return F_FUNCTION; }break;case 34: { return F_SHOWLIST; }break;case 35: { return F_HIDELIST; }break;case 36: { return F_EXEC; }break;case 37: { return F_CUT; }break;case 38: { return F_MOVE; }break;case 39: { return F_FORCEMOVE; }break;case 40: { return F_ICONIFY; }break;case 41: { return F_DEICONIFY; }break;case 42: { return F_FOCUS; }break;case 43: { return F_RESIZE; }break;case 44: { return F_RAISE; }break;case 45: { return F_RAISELOWER; }break;case 46: { return F_LOWER; }break;case 47: { return F_DESTROY; }break;case 48: { return F_ZOOM; }break;case 49: { return F_FULLZOOM; }break;case 50: { return F_NOP; }break;case 51: { return F_RAISE; }break;case 52: { return F_LOWER; }break;case 53: { return F_MOVE; }break;case 54:{ return NO_RAISE_ON_MOVE; }break;case 55:!{ return NO_RAISE_ON_DEICONIFY; }break;case 56:{ return NO_RAISE_ON_RESIZE; }break;case 57: { return (COLOR); }break;case 58:{ return (MONOCHROME); }break;case 59:{ return (NO_TITLE_FOCUS); }break;case 60:{ return (NO_HILITE); }break;case 61: { return (ZOOM); }break;case 62:{ return UNKNOWN_ICON; }break;case 63:{ return WARPCURSOR; }break;case 64:{ return BORDERWIDTH; }break;case 65:{ return (TITLE_FONT); }break;case 66:{ return (MENU_FONT); }break;case 67:{ return (ICON_FONT); }break;case 68:{ return (RESIZE_FONT); }break;case 69:{ return (REVERSE_VIDEO); }break;case 70:{ return (NO_TITLE); }break;case 71:{ return (AUTO_RAISE); }break;case 72:{ return (FORCE_ICON); }break;case 73:{& return (DEFAULT_FUNCTION); }break;case 74:{% return (WINDOW_FUNCTION); }break;case 75: { return (ICONS); }break;case 76:{return (ICON_DIRECTORY);}break;case 77:{ return (BORDER_COLOR); }break;case 78:{ return (TITLE_FOREGROUND); }break;case 79:{ return (TITLE_BACKGROUND); }break;case 80:{& return (BORDER_TILE_FOREGROUND); }break;case 81:{& return (BORDER_TILE_BACKGROUND); }break;case 82:{ return (MENU_FOREGROUND); }break;case 83:{ return (MENU_BACKGROUND); }break;case 84:{% return (MENU_TITLE_FOREGROUND); }break;case 85:{% return (MENU_TITLE_BACKGROUND); }break;case 86:{! return (MENU_SHADOW_COLOR); }break;case 87:{ return (ICON_FOREGROUND); }break;case 88:{ return (ICON_BACKGROUND); }break;case 89:{! return (ICON_BORDER_COLOR); }break;case 90:return (DONT_MOVE_OFF);break;case 91:{# return (DECORATE_TRANSIENTS); }break;case 92:"{ return (ICONIFY_BY_UNMAPPING); }break;case 93:'{ return (DONT_ICONIFY_BY_UNMAPPING); }break;case 94: { return (ICONMGR_FOREGROUND); }break;case 95: { return (ICONMGR_BACKGROUND); }break;case 96:{ return (ICONMGR_FONT); }break;case 97:{ return (ICONMGR_GEOMETRY); }break;case 98:{ return (SHOW_ICONMGR); }break;case 99:{ return ICONMGR_NOSHOW; }break; case 100:{ return NO_BACKINGSTORE; }break; case 101:{ return NO_SAVEUNDER; }break; case 102:{ return RANDOM_PLACEMENT; }break; case 103:) { yylval.ptr = yytext; return STRING; }break; case 104:, { (void)sscanf(yytext, "%d", &yylval.num); return (NUMBER); }break; case 105: {;}break; case 106: {;}break; case 107: { fprintf(stderr,* "twm: bad character `%s', line %d\n", yytext, yylineno); ParseError = 1; }break;case -1:break;default:+fprintf(yyout,"bad switch yylook %d",nstr);} return(0); }/* end of yylex */yywrap() { return(1);}#define unput(c) TwmUnput(c)#define input() TwmInput()#define output(c) TwmOutput(c)int yyvstop[] = {0,107,0,106,107,0,106,0,36,107,0,107,0,107,0,104,107,0,4,107,0,3,107,0,107,0,107,0,107,0,107,0,107,0,107,0,107,0,107,0,107,0,107,0,107,0,107,0,107,0,107,0,37,107,0,11,107,0,107,0,107,0,9,107,0,107,0,10,107,0,107,0,107,0,1,107,0,2,107,0,103,0,105,0,104,0,7,0,61,0,13,0,15,0,57,0,75,0,18,0,16,0,50,0,14,0,19,0,26,0,22,0,38,0,20,0,48,0,53,0,12,0,5,0,70,0,42,0,46,0,44,0,21,0,27,0,17,0,52,0,51,0,8,0,67,0,66,0,43,0,31,0,71,0,65,0,32,0,47,0,40,0,24,0,23,0,28,0,72,0,58,0,68,0,63,0,29,0,49,0,33,0,77,0,64,0,90,0,60,0,101,0,62,0,41,0,39,0,59,0,69,0,6,0,30,0,45,0,25,0,76,0,54,0,35,0,34,0,88,0,87,0,83,0,82,0,100,0,74,0,73,0,89,0,96,0,86,0,56,0,102,0,98,0,79,0,78,0,91,0,92,0,55,0,99,0,97,0,85,0,84,0,81,0,80,0,95,0,94,0,93,0,0};# define YYTYPE int7struct yywork { YYTYPE verify, advance; } yycrank[] = {0,0, 0,0, 1,3, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 1,4, 1,5, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 1,6, 1,7, 1,8, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 1,9, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 1,10, 0,0, 0,0, 1,11, 0,0, 0,0, 0,0, 1,12, 1,13, 1,14, 1,15, 1,3, 1,16, 1,3, 1,3, 1,17, 17,50, 1,3, 1,3, 1,18, 1,19, 1,3, 1,3, 14,45, 1,20, 1,21, 1,22, 1,23, 1,3, 1,24, 12,42, 1,3, 1,25, 0,0, 0,0, 2,6, 1,26, 2,8, 19,53, 21,56, 22,57, 1,27, 29,66, 65,117, 1,28, 0,0, 0,0, 1,29, 17,50, 34,71, 0,0, 1,30, 0,0, 31,67, 23,58, 14,45, 1,31, 1,32, 1,33, 25,61, 2,10, 1,34, 12,42, 2,11, 66,118, 1,35, 7,37, 1,36, 42,72, 67,119, 19,53, 21,56, 22,57, 43,73, 7,37, 7,37, 9,41, 9,41, 9,41, 9,41, 9,41, 9,41, 9,41, 9,41, 9,41, 9,41, 23,58, 15,46, 13,43, 71,125, 44,74, 25,61, 98,152, 100,155, 13,44, 102,159, 2,26, 15,47, 99,153, 7,38, 42,72, 2,27, 103,160, 104,161, 2,28, 43,73, 8,39, 2,29, 106,164, 107,165, 99,154, 2,30, 111,172, 7,37, 8,39, 8,40, 2,31, 2,32, 2,33, 15,46, 13,43, 2,34, 44,74, 112,173, 20,54, 2,35, 13,44, 2,36, 20,55, 15,47, 7,37, 7,37, 7,37, 7,37, 7,37, 7,37, 7,37, 7,37, 7,37, 8,39, 7,37, 7,37, 7,37, 7,37, 7,37, 7,37, 113,174, 7,37, 7,37, 7,37, 7,37, 7,37, 7,37, 8,39, 7,37, 7,37, 20,54, 68,120, 68,121, 68,122, 20,55, !16,48, 114,175, 68,123, 116,164, 117,176, 45,75, 16,49, 47,78, 18,51, 8,39, 8,39, 8,39, 8,39, 8,39, 8,39, 8,39, 8,39, 8,39, 18,52, 8,39, 8,39, 8,39, 8,39, 8,39, 8,39, 48,79, 8,39, 8,39, 8,39, 8,39, 8,39, 8,39, 16,48, 8,39, 8,39, 24,59, 28,62, 45,75, 16,49, 47,78, 18,51, 49,80, 50,81, 24,60, 28,62, 28,0, 46,76, 51,82, 52,83, 46,77, 18,52, 118,177, 54,89, 55,90, 56,92, 57,93, 55,91, 48,79, 58,94, 59,95, 60,96, 61,97, 33,68, 110,170, 63,79, 64,80, 69,93, 24,59, 119,178, 28,62, 33,68, 33,0, 105,162, 49,80, 50,81, 24,60, 120,179, 110,171, 46,76, 51,82, 52,83, 46,77, 105,163, 28,62, 54,89, 55,90, 56,92, 57,93, 55,91, 121,180, 58,94, 59,95, 60,96, 61,97, 122,181, 33,68, 63,115, 64,116, 69,93, 123,182, 28,62, 28,62, 28,62, 28,62, 28,62, 28,62, 28,62, 28,62, 28,62, 33,68, 28,62, 28,62, 28,62, 28,62, 28,63, 28,62, 124,183, 28,62, 28,62, 28,62, 28,64, 28,62, 28,62, 70,93, 28,62, 28,62, 33,68, 33,68, 33,68, 33,68, 33,68, 33,68, 33,68, 33,68, 33,69, 72,126, 33,68, 33,68, 33,68, 33,68, 33,68, 33,68, 73,127, 33,68, 33,68, 33,68, 33,68, 33,68, 33,68, 28,65, 33,68, 33,68, 53,84, 74,128, 75,129, 70,124, 76,130, 77,131, 53,85, 78,132, 79,133, 80,134, 81,135, 82,136, 83,137, 84,138, 33,70, 72,126, 53,86, 53,87, 53,88, 101,156, #125,184, 152,219, 73,127, 153,220, "85,139, 101,157, 108,166, 86,140, #87,141, 154,221, 108,167, 101,158, 53,84, 74,128, 75,129, 156,224, 76,130, 77,131, 53,85, 78,132, 79,133, 80,134, 81,135, 82,136, 83,137, 84,138, 88,142, 89,143, 53,86, 53,87, 53,88, 62,98, 62,99, 62,100, 90,144, 62,101, 85,139, 62,102, 62,103, 86,140, 87,141, 62,104, 62,105, 62,106, 91,145, 92,146, 62,107, 62,108, 62,109, 62,110, 62,111, 62,112, 62,113, 93,147, 94,148, 62,114, 95,149, 96,150, 88,142, 89,143, #97,151, 109,168, 126,185, 115,133, #127,186, 155,222, 90,144, 128,187, $109,169, 129,188, 130,189, 131,190, $133,193, 134,194, 132,191, 155,223, "91,145, 92,146, 132,192, 159,229, $158,227, 137,205, 158,228, 138,206, "139,207, 93,147, 94,148, 140,208, "95,149, 96,150, 141,209, 142,210, #97,151, 115,166, 126,185, 115,133, $127,186, 115,167, 143,211, 128,187, $144,212, 129,188, 130,189, 131,190, $133,193, 134,194, 132,191, 135,195, $136,201, 135,196, 132,192, 135,197, $136,202, 137,205, 135,198, 138,206, $139,207, 145,213, 135,199, 140,208, $146,214, 147,215, 141,209, 142,210, $135,200, 136,203, 136,204, 148,216, $149,217, 150,218, 143,211, 160,230, $144,212, 157,225, 161,231, 162,232, $163,233, 164,234, 165,235, 135,195, $136,201, 135,196, 166,236, 135,197, $136,202, 168,239, 135,198, 169,240, $157,226, 145,213, 135,199, 167,237, $146,214, 147,215, 170,241, 171,242, $135,200, 136,203, 136,204, 148,216, $149,217, 150,218, 172,243, 173,244, $167,238, 174,245, 175,246, 176,247, $177,248, 179,249, 180,250, 181,251, $182,252, 183,253, 184,254, 185,255, $186,256, 187,257, 189,258, 190,259, $191,260, 192,261, 193,262, 194,263, $195,264, 196,266, 197,267, 198,268, $199,269, 201,270, 202,271, 203,272, $204,273, 205,274, 206,275, 207,276, $208,277, 209,278, 195,265, 210,279, $211,280, 212,281, 213,282, 214,283, $219,289, 216,286, 217,287, 185,255, $186,256, 187,257, 189,258, 190,259, $191,260, 192,261, 193,262, 194,263, $195,264, 196,266, 197,267, 198,268, $199,269, 201,270, 202,271, 203,272, $204,273, 205,274, 206,275, 207,276, $208,277, 209,278, 195,265, 210,279, $211,280, 212,281, 213,282, 214,283, $215,284, 216,286, 217,287, 218,288, $215,285, 220,290, 221,291, 222,292, $223,293, 224,294, 225,295, 226,296, $227,297, 228,298, 229,299, 230,300, $231,301, 232,302, 233,303, 235,304, $236,305, 237,306, 238,307, 239,308, $240,309, 241,310, 242,311, 243,312, $244,313, 245,314, 246,315, 248,316, $215,284, 249,317, 250,318, 218,288, $215,285, 252,319, 254,320, 255,321, $256,322, 257,325, 257,325, 257,325, $257,325, 257,325, 257,325, 257,325, $257,325, 257,325, 257,325, 258,326, $259,327, 260,328, 261,329, 262,330, $263,331, 256,323, 264,332, 265,333, $256,324, 266,334, 267,335, 268,337, $269,338, 270,339, 267,336, 272,342, $273,343, 271,340, 274,344, 255,321, $256,322, 271,341, 275,345, 276,346, $277,347, 278,348, 279,349, 280,350, $281,351, 282,352, 283,353, 258,326, $259,327, 260,328, 261,329, 262,330, $263,331, 256,323, 264,332, 265,333, $256,324, 266,334, 267,335, 268,337, $269,338, 270,339, 267,336, 272,342, $273,343, 271,340, 274,344, 284,354, $285,356, 271,341, 275,345, 276,346, $277,347, 278,348, 279,349, 280,350, $281,351, 282,352, 283,353, 286,357, $287,358, 288,359, 290,360, 291,361, $292,362, 293,363, 295,364, 284,355, $296,365, 297,366, 298,367, 299,368, $300,369, 301,370, 305,371, 306,372, $307,373, 308,374, 309,375, 284,354, $285,356, 310,376, 311,377, 312,378, $313,379, 314,380, 316,381, 317,382, $319,383, 321,384, 322,385, 286,357, $287,358, 288,359, 323,386, 324,387, $326,388, 327,389, 328,390, 284,355, $329,391, 330,392, 331,393, 332,394, $333,395, 334,396, 335,397, 336,398, $337,399, 338,400, 339,401, 340,402, $341,403, 342,404, 343,405, 344,406, $345,407, 346,408, 347,409, 348,410, $349,411, 321,384, 322,385, 350,412, $351,413, 352,414, 323,386, 324,387, $326,388, 327,389, 328,390, 353,415, $329,391, 330,392, 331,393, 332,394, $333,395, 334,396, 335,397, 336,398, $337,399, 338,400, 339,401, 340,402, $341,403, 342,404, 343,405, 344,406, $345,407, 346,408, 347,409, 348,410, $349,411, 354,416, 355,417, 350,412, $351,413, 352,414, 356,418, 357,420, $358,421, 359,422, 356,419, 353,415, $360,423, 361,424, 362,425, 363,426, $365,427, 366,428, 367,429, 368,430, $369,431, 371,432, 372,433, 373,434, $374,435, 375,436, 378,437, 379,438, $380,439, 384,440, 385,441, 386,442, $387,443, 354,416, 355,417, 388,444, $389,445, 390,446, 356,418, 357,420, $358,421, 359,422, 356,419, 391,447, $392,448, 394,449, 395,450, 396,451, $398,452, 399,453, 400,454, 401,455, $403,456, 404,457, 405,458, 406,459, $407,460, 408,461, 409,462, 410,463, $411,464, 384,440, 385,441, 386,442, $387,443, 412,465, 413,466, 388,444, $389,445, 390,446, 414,467, 415,468, $416,469, 417,470, 418,471, 391,447, $392,448, 394,449, 395,450, 396,451, $398,452, 399,453, 400,454, 401,455, $403,456, 404,457, 405,458, 406,459, $407,460, 408,461, 409,462, 410,463, $411,464, 419,472, 420,473, 421,474, $422,475, 412,465, 413,466, 423,476, $424,478, 425,479, 414,467, 415,468, $416,469, 417,470, 418,471, 426,480, $427,481, 428,482, 429,483, 430,484, $431,485, 432,486, 433,487, 435,488, $423,477, 437,489, 438,490, 439,491, $441,492, 442,493, 443,494, 444,495, $445,496, 419,472, 420,473, 421,474, $422,475, 446,497, 447,498, 448,499, $449,500, 450,501, 451,502, 452,503, $453,504, 454,505, 455,506, 456,507, $457,508, 458,509, 459,511, 460,512, $461,513, 458,510, 476,529, 463,517, $464,518, 465,519, 466,520, 467,521, $441,492, 442,493, 443,494, 444,495, $445,496, 468,522, 469,523, 470,524, $477,530, 446,497, 447,498, 448,499, $449,500, 450,501, 451,502, 452,503, $453,504, 454,505, 455,506, 456,507, $457,508, 458,509, 459,511, 460,512, $461,513, 458,510, 462,514, 463,517, $464,518, 465,519, 466,520, 467,521, $472,525, 473,526, 474,527, 462,515, $475,528, 468,522, 469,523, 470,524, $462,516, 479,531, 481,532, 482,533, $483,534, 484,535, 486,536, 488,537, $491,538, 492,539, 493,540, 494,542, $495,543, 496,544, 493,541, 497,545, $498,546, 500,547, 462,514, 501,548, $502,549, 503,550, 504,551, 505,552, $472,525, 473,526, 474,527, 462,515, $475,528, 506,553, 507,554, 508,555, $462,516, 509,556, 510,557, 512,558, $513,559, 514,560, 515,561, 516,562, $517,563, 492,539, 493,540, 494,542, $495,543, 496,544, 493,541, 497,545, $498,546, 500,547, 518,564, 501,548, $502,549, 503,550, 504,551, 505,552, $519,565, 521,566, 522,567, 523,568, $524,569, 506,553, 507,554, 508,555, $525,570, 509,556, 510,557, 512,558, $513,559, 514,560, 515,561, 516,562, $517,563, 526,571, 528,572, 529,573, $531,574, 532,575, 535,576, 536,577, $537,578, 538,579, 518,564, 540,580, $541,581, 543,582, 544,583, 545,584, $519,565, 521,566, 522,567, 523,568, $524,569, 547,585, 548,586, 549,587, $525,570, 550,588, 551,589, 552,590, $553,594, 552,591, 554,595, 552,592, $552,593, 526,571, 528,572, 555,596, $556,597, 557,598, 558,599, 560,600, $561,601, 562,602, 564,603, 540,580, $541,581, 543,582, 544,583, 545,584, $565,604, 566,605, 567,606, 568,607, $573,611, 547,585, 548,586, 549,587, $576,612, 550,588, 551,589, 552,590, $553,594, 552,591, 554,595, 552,592, $552,593, 570,609, 572,610, 555,596, $556,597, 557,598, 558,599, 560,600, $561,601, 562,602, 564,603, 577,613, $578,614, 579,615, 580,616, 581,617, $565,604, 566,605, 567,606, 568,607, $569,608, 569,608, 569,608, 569,608, $569,608, 569,608, 569,608, 569,608, $569,608, 569,608, 582,618, 583,619, $584,620, 570,609, 572,610, 585,621, $586,622, 587,623, 588,624, 589,625, $590,626, 591,627, 592,628, 593,629, $594,630, 595,631, 580,616, 581,617, $596,632, 597,633, 598,634, 599,635, $600,636, 601,637, 602,638, 604,639, $606,640, 607,641, 609,642, 610,643, $612,644, 614,645, 582,618, 583,619, $584,620, 616,646, 617,647, 585,621, $586,622, 587,623, 588,624, 589,625, $590,626, 591,627, 592,628, 593,629, $594,630, 595,631, 618,648, 619,649, $596,632, 597,633, 598,634, 599,635, $600,636, 601,637, 602,638, 604,639, $606,640, 607,641, 609,642, 610,643, $620,650, 621,651, 622,652, 624,653, $625,654, 616,646, 617,647, 626,655, $627,656, 628,657, 629,659, 630,660, $631,661, 628,658, 632,662, 633,663, $634,664, 635,665, 618,648, 619,649, $636,666, 638,667, 639,668, 640,669, $641,670, 642,671, 643,672, 646,673, $647,674, 648,675, 649,676, 650,677, $620,650, 621,651, 622,652, 624,653, $625,654, 652,678, 654,679, 626,655, $627,656, 628,657, 629,659, 630,660, $631,661, 628,658, 632,662, 633,663, $634,664, 635,665, 655,680, 656,681, $636,666, 638,667, 639,668, 640,669, $641,670, 642,671, 643,672, 646,673, $647,674, 648,675, 649,676, 650,677, $657,682, 658,683, 659,684, 662,685, $663,686, 652,678, 654,679, 664,687, $666,688, 667,689, 668,690, 669,691, $670,692, 671,693, 673,694, 674,695, $675,696, 677,697, 655,680, 656,681, $679,698, 680,699, 681,700, 683,701, $684,702, 686,703, 687,704, 688,705, $694,706, 695,707, 696,708, 697,709, $657,682, 658,683, 659,684, 662,685, $663,686, 698,710, 699,711, 664,687, $666,688, 667,689, 668,690, 669,691, $670,692, 671,693, 673,694, 674,695, $675,696, 677,697, 700,712, 701,713, $679,698, 680,699, 681,700, 683,701, $684,702, 686,703, 687,704, 688,705, $694,706, 695,707, 696,708, 697,709, $702,714, 703,715, 704,716, 705,717, $706,718, 698,710, 699,711, 707,719, $708,720, 709,721, 710,722, 711,723, $712,724, 713,725, 714,726, 715,727, $716,728, 717,729, 700,712, 701,713, $718,730, 719,731, 721,732, 723,733, $724,734, 725,735, 726,736, 727,737, $728,738, 730,739, 731,740, 732,741, $702,714, 703,715, 704,716, 705,717, $706,718, 733,742, 735,743, 707,719, $708,720, 709,721, 710,722, 711,723, $712,724, 713,725, 714,726, 715,727, $716,728, 717,729, 741,744, 742,745, $718,730, 719,731, 721,732, 723,733, $724,734, 725,735, 726,736, 727,737, $728,738, 730,739, 731,740, 732,741, 743,746, 744,747, 0,0, 0,0, 0,0, 733,742, 735,743, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 741,744, 742,745, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 743,746, 744,747, 0,0, 0,0, 0,0};Nstruct yysvf yysvec[] = {0, 0, 0,yycrank+-1, 0, 0, yycrank+-61, yysvec+1, 0, yycrank+0, 0, yyvstop+1,Oyycrank+0, 0, yyvstop+3,yycrank+0, 0, yyvstop+6,Byycrank+0, 0, yyvstop+8,eyycrank+-124, 0, yyvstop+11,Oyycrank+-164, 0, yyvstop+13,yycrank+87, 0, yyvstop+15,Nyycrank+0, 0, yyvstop+18,yycrank+0, 0, yyvstop+21,yycrank+4, 0, yyvstop+24,yycrank+68, 0, yyvstop+26,Oyycrank+3, 0, yyvstop+28,yycrank+77, 0, yyvstop+30,;yycrank+141, 0, yyvstop+32,yycrank+8, 0, yyvstop+34,yycrank+159, 0, yyvstop+36,yycrank+18, 0, yyvstop+38,ayycrank+118, 0, yyvstop+40,yycrank+26, 0, yyvstop+42,ayycrank+26, 0, yyvstop+44,Eyycrank+35, 0, yyvstop+46,yycrank+190, 0, yyvstop+48,yycrank+39, 0, yyvstop+50,nyycrank+0, 0, yyvstop+52,!yycrank+0, yysvec+14, yyvstop+55,Yyycrank+-255, 0, yyvstop+58,n!yycrank+2, yysvec+17, yyvstop+60,:!yycrank+0, yysvec+18, yyvstop+62,;!yycrank+1, yysvec+20, yyvstop+65,O!yycrank+0, yysvec+21, yyvstop+67,nyycrank+-281, 0, yyvstop+70,1!yycrank+3, yysvec+24, yyvstop+72,yycrank+0, 0, yyvstop+74,yycrank+0, 0, yyvstop+77,yycrank+0, yysvec+7, 0, yycrank+0, 0, yyvstop+80,yycrank+0, yysvec+8, 0, yycrank+0, 0, yyvstop+82, yycrank+0, yysvec+9, yyvstop+84,yycrank+43, 0, 0, ryycrank+50, 0, 0, {yycrank+65, 0, 0, ryycrank+149, 0, 0, yycrank+199, 0, 0, yycrank+149, 0, 0, yycrank+163, 0, 0, yycrank+183, 0, 0, yycrank+183, 0, 0, yycrank+189, 0, 0, yycrank+190, 0, 0, yycrank+306, 0, 0, yycrank+194, 0, 0, yycrank+190, 0, 0, yycrank+195, 0, 0, yycrank+191, 0, 0, yycrank+203, 0, 0, yycrank+197, 0, 0, yycrank+202, 0, 0, yycrank+202, 0, 0, yycrank+325, 0, 0, yycrank+202, yysvec+62, 0, yycrank+207, yysvec+62, 0, ,yycrank+5, yysvec+62, 0, yycrank+12, yysvec+50, 0, yycrank+17, 0, 0, ,yycrank+108, 0, 0, yycrank+202, yysvec+68, 0, yycrank+259, yysvec+68, 0, yycrank+38, yysvec+60, 0, yycrank+276, 0, 0, yycrank+294, 0, 0, yycrank+289, 0, 0, yycrank+295, 0, 0, yycrank+297, 0, 0, yycrank+312, 0, 0, yycrank+295, 0, 0, yycrank+313, 0, 0, yycrank+314, 0, 0, yycrank+304, 0, 0, yycrank+298, 0, 0, yycrank+305, 0, 0, yycrank+320, 0, 0, yycrank+323, 0, 0, yycrank+334, 0, 0, yycrank+335, 0, 0, yycrank+345, 0, 0, yycrank+351, 0, 0, yycrank+353, 0, 0, yycrank+367, 0, 0, yycrank+350, 0, 0, yycrank+369, ~TWM.SAVE= [FIELDS.X.TWM]LEX.C;1t^&T4 0, 0, yycrank+368, 0, 0, yycrank+368, 0, 0, yycrank+381, 0, 0, yycrank+375, 0, 0, yycrank+50, 0, 0, yycrank+52, 0, 0, 1yycrank+51, 0, 0, yycrank+286, 0, 0, yycrank+49, 0, 0, ,yycrank+62, 0, 0, yycrank+51, 0, 0, yycrank+191, 0, 0, yycrank+56, 0, 0, yycrank+51, 0, 0, yycrank+301, 0, 0, yycrank+349, 0, 0, yycrank+178, 0, 0, yycrank+61, 0, 0, 9yycrank+81, 0, 0, yycrank+100, 0, 0, yycrank+110, 0, 0, yycrank+388, 0, 0, yycrank+112, yysvec+80, 0, 4yycrank+115, 0, 0, yycrank+161, yysvec+81, 0, yycrank+172, 0, 0, yycrank+185, 0, 0, yycrank+198, 0, 0, yycrank+203, 0, 0, yycrank+222, 0, 0, yycrank+228, yysvec+93, 0, 1yycrank+292, yysvec+96, 0, ,yycrank+372, 0, 0, yycrank+387, 0, 0, yycrank+380, 0, 0, yycrank+379, 0, 0, yycrank+380, 0, 0, yycrank+378, 0, 0, yycrank+393, 0, 0, yycrank+395, 0, 0, yycrank+381, 0, 0, yycrank+433, 0, 0, yycrank+434, 0, yyvstop+86,yycrank+406, 0, 0, yycrank+408, 0, 0, yycrank+405, 0, 0, yycrank+406, 0, 0, yycrank+396, 0, 0, yycrank+399, 0, 0, yycrank+411, 0, 0, yycrank+402, 0, 0, yycrank+427, 0, 0, yycrank+439, 0, 0, yycrank+444, 0, 0, yycrank+440, 0, 0, yycrank+453, 0, 0, yycrank+442, 0, 0, yycrank+0, 0, yyvstop+88,yycrank+292, 0, 0, yycrank+281, 0, 0, yycrank+285, 0, 0, yycrank+352, 0, 0, yycrank+299, 0, 0, yycrank+426, 0, 0, yycrank+364, 0, 0, yycrank+371, 0, 0, yycrank+412, 0, 0, yycrank+407, 0, 0, yycrank+417, 0, 0, yycrank+410, 0, 0, yycrank+417, 0, 0, yycrank+425, 0, 0, yycrank+429, 0, 0, yycrank+441, 0, 0, yycrank+426, 0, 0, yycrank+422, 0, 0, yycrank+430, 0, 0, yycrank+438, 0, 0, yycrank+452, 0, 0, yycrank+441, 0, 0, yycrank+447, 0, 0, yycrank+447, 0, 0, yycrank+458, 0, 0, $yycrank+451, yysvec+135, yyvstop+90,yycrank+0, 0, yyvstop+92,yycrank+442, 0, 0, yycrank+444, 0, 0, yycrank+451, 0, 0, yycrank+459, 0, 0, yycrank+464, yysvec+147, 0, yycrank+455, yysvec+150, 0, yycrank+502, 0, 0, yycrank+486, 0, 0, yycrank+491, 0, 0, yycrank+0, 0, yyvstop+94,yycrank+505, 0, 0, yycrank+495, 0, 0, yycrank+505, 0, 0, yycrank+494, 0, 0, yycrank+501, 0, 0, yycrank+502, 0, 0, yycrank+511, 0, 0, yycrank+504, 0, 0, yycrank+499, 0, 0, yycrank+509, 0, 0, yycrank+515, 0, 0, yycrank+0, 0, yyvstop+96,yycrank+516, 0, 0, yycrank+503, 0, 0, yycrank+511, 0, 0, yycrank+511, 0, 0, yycrank+513, 0, 0, yycrank+511, 0, 0, yycrank+515, 0, 0, yycrank+505, 0, 0, yycrank+520, 0, 0, yycrank+515, 0, 0, yycrank+515, 0, 0, yycrank+524, 0, 0, yycrank+511, 0, 0, yycrank+528, 0, 0, yycrank+562, 0, 0, yycrank+510, 0, 0, yycrank+513, 0, 0, yycrank+544, 0, 0, yycrank+484, 0, 0, yycrank+534, 0, 0, yycrank+532, 0, 0, yycrank+536, 0, 0, yycrank+520, 0, 0, yycrank+536, 0, 0, yycrank+521, 0, 0, yycrank+540, 0, 0, yycrank+532, 0, 0, yycrank+542, 0, 0, yycrank+541, 0, 0, yycrank+533, 0, 0, yycrank+543, 0, 0, yycrank+528, 0, 0, yycrank+545, 0, 0, yycrank+0, 0, yyvstop+98,yycrank+531, 0, 0, yycrank+533, 0, 0, yycrank+535, 0, 0, yycrank+545, 0, 0, yycrank+532, 0, 0, yycrank+538, 0, 0, yycrank+545, 0, 0, yycrank+540, 0, 0, yycrank+544, 0, 0, yycrank+541, 0, 0, yycrank+543, 0, 0, yycrank+549, 0, 0, yycrank+0, 0, yyvstop+100, yycrank+556, yysvec+199, 0, yycrank+560, 0, 0, yycrank+561, 0, 0, yycrank+0, 0, yyvstop+102,7yycrank+550, 0, 0, #yycrank+0, yysvec+215, yyvstop+104, yycrank+547, yysvec+218, 0, yycrank+594, 0, 0, yycrank+601, 0, 0, yycrank+621, 0, 0, yycrank+595, 0, 0, yycrank+596, 0, 0, yycrank+602, 0, 0, yycrank+596, 0, 0, yycrank+616, 0, 0, yycrank+605, 0, 0, yycrank+619, 0, 0, yycrank+605, 0, 0, yycrank+607, 0, 0, yycrank+612, 0, 0, yycrank+602, 0, 0, yycrank+614, 0, 0, yycrank+626, 0, 0, yycrank+619, 0, 0, yycrank+630, 0, 0, yycrank+612, 0, 0, yycrank+616, 0, 0, yycrank+629, 0, 0, yycrank+627, 0, 0, yycrank+635, 0, 0, yycrank+620, 0, 0, yycrank+637, 0, 0, yycrank+627, 0, 0, yycrank+638, 0, 0, yycrank+640, 0, 0, yycrank+631, 0, 0, yycrank+666, 0, 0, yycrank+653, 0, 0, yycrank+665, 0, 0, yycrank+662, 0, 0, yycrank+675, 0, 0, yycrank+0, 0, yyvstop+106,,yycrank+638, 0, 0, yycrank+642, 0, 0, yycrank+637, 0, 0, yycrank+635, 0, 0, yycrank+0, 0, yyvstop+108,1yycrank+635, 0, 0, yycrank+651, 0, 0, yycrank+631, 0, 0, yycrank+638, 0, 0, yycrank+650, 0, 0, yycrank+651, 0, 0, yycrank+643, 0, 0, yycrank+0, 0, yyvstop+110, yycrank+0, 0, yyvstop+112,1yycrank+0, 0, yyvstop+114,3yycrank+657, 0, 0, yycrank+658, 0, 0, yycrank+638, 0, 0, yycrank+656, 0, 0, yycrank+663, 0, 0, yycrank+664, 0, 0, yycrank+667, 0, 0, yycrank+668, 0, 0, yycrank+663, 0, 0, yycrank+668, 0, 0, yycrank+0, 0, yyvstop+116,9yycrank+656, 0, 0, yycrank+657, 0, 0, yycrank+0, 0, yyvstop+118,,yycrank+671, 0, 0, #yycrank+0, yysvec+288, yyvstop+120,3yycrank+690, 0, 0, yycrank+695, 0, 0, yycrank+705, 0, 0, yycrank+706, 0, 0, #yycrank+0, yysvec+257, yyvstop+122, yycrank+711, 0, 0, yycrank+711, 0, 0, yycrank+704, 0, 0, yycrank+715, 0, 0, yycrank+706, 0, 0, yycrank+708, 0, 0, yycrank+712, 0, 0, yycrank+720, 0, 0, yycrank+720, 0, 0, yycrank+706, 0, 0, yycrank+722, 0, 0, yycrank+726, 0, 0, yycrank+728, 0, 0, yycrank+719, 0, 0, yycrank+711, 0, 0, yycrank+727, 0, 0, yycrank+729, 0, 0, yycrank+722, 0, 0, yycrank+720, 0, 0, yycrank+722, 0, 0, yycrank+728, 0, 0, yycrank+723, 0, 0, yycrank+725, 0, 0, yycrank+734, 0, yyvstop+124,8yycrank+731, 0, 0, yycrank+729, 0, 0, yycrank+723, 0, 0, yycrank+737, 0, 0, yycrank+770, 0, 0, yycrank+754, 0, 0, yycrank+764, 0, 0, yycrank+770, 0, 0, yycrank+761, 0, 0, yycrank+760, 0, 0, yycrank+747, 0, 0, yycrank+741, 0, 0, yycrank+740, 0, 0, yycrank+740, 0, 0, yycrank+0, 0, yyvstop+126,5yycrank+743, 0, 0, yycrank+742, 0, 0, yycrank+749, 0, 0, yycrank+756, 0, 0, yycrank+754, 0, 0, yycrank+0, 0, yyvstop+128,,yycrank+749, 0, yyvstop+130,5yycrank+743, 0, 0, yycrank+758, 0, 0, yycrank+761, 0, 0, yycrank+760, 0, 0, yycrank+0, 0, yyvstop+132,3yycrank+0, 0, yyvstop+134, yycrank+745, 0, 0, yycrank+752, 0, 0, yycrank+762, 0, 0, yycrank+0, 0, yyvstop+136, yycrank+0, 0, yyvstop+138,2yycrank+0, 0, yyvstop+140,5yycrank+796, 0, 0, yycrank+790, 0, 0, yycrank+791, 0, 0, yycrank+800, 0, 0, yycrank+787, 0, 0, yycrank+787, 0, 0, yycrank+800, 0, 0, yycrank+800, 0, 0, yycrank+802, 0, 0, yycrank+0, 0, yyvstop+142,7yycrank+810, 0, 0, yycrank+813, 0, 0, yycrank+816, 0, 0, yycrank+0, 0, yyvstop+144,,yycrank+813, 0, 0, yycrank+796, 0, 0, yycrank+815, 0, 0, yycrank+816, 0, 0, yycrank+0, 0, yyvstop+146,,yycrank+817, 0, 0, yycrank+810, 0, 0, yycrank+821, 0, 0, yycrank+814, 0, 0, yycrank+821, 0, 0, yycrank+822, 0, 0, yycrank+816, 0, 0, yycrank+827, 0, 0, yycrank+817, 0, 0, yycrank+836, 0, 0, yycrank+824, 0, 0, yycrank+833, 0, 0, yycrank+830, 0, 0, yycrank+833, 0, 0, yycrank+825, 0, 0, yycrank+826, 0, 0, yycrank+860, 0, 0, yycrank+863, 0, 0, yycrank+852, 0, 0, yycrank+854, 0, 0, yycrank+835, 0, 0, yycrank+835, 0, 0, yycrank+832, 0, 0, yycrank+822, 0, 0, yycrank+833, 0, 0, yycrank+834, 0, 0, yycrank+835, 0, 0, yycrank+836, 0, 0, yycrank+827, 0, 0, yycrank+838, 0, 0, yycrank+846, 0, 0, yycrank+0, 0, yyvstop+148,8yycrank+840, 0, 0, yycrank+0, 0, yyvstop+150,0yycrank+838, 0, 0, yycrank+844, 0, 0, yycrank+841, 0, 0, yycrank+0, 0, yyvstop+152,1yycrank+877, 0, 0, yycrank+888, 0, 0, yycrank+874, 0, 0, yycrank+877, 0, 0, yycrank+882, 0, 0, yycrank+895, 0, 0, yycrank+896, 0, 0, yycrank+884, 0, 0, yycrank+886, 0, 0, yycrank+887, 0, 0, yycrank+886, 0, 0, yycrank+889, 0, 0, yycrank+887, 0, 0, yycrank+904, 0, 0, yycrank+892, 0, 0, yycrank+893, 0, 0, yycrank+889, 0, 0, yycrank+911, 0, 0, yycrank+909, 0, 0, yycrank+896, 0, 0, yycrank+908, 0, 0, yycrank+946, 0, 0, yycrank+914, 0, 0, yycrank+917, 0, 0, yycrank+918, 0, 0, yycrank+902, 0, 0, yycrank+919, 0, 0, yycrank+928, 0, 0, yycrank+923, 0, 0, yycrank+916, 0, 0, yycrank+0, 0, yyvstop+154, yycrank+949, 0, 0, yycrank+942, 0, 0, yycrank+940, 0, 0, yycrank+957, 0, 0, yycrank+871, 0, 0, yycrank+884, 0, 0, yycrank+0, 0, yyvstop+156,4yycrank+927, 0, 0, yycrank+0, 0, yyvstop+158,,yycrank+912, 0, 0, yycrank+922, 0, 0, yycrank+922, 0, 0, yycrank+923, 0, 0, yycrank+0, 0, yyvstop+160,,yycrank+915, 0, 0, yycrank+0, 0, yyvstop+162,,yycrank+925, 0, 0, yycrank+0, 0, yyvstop+164, yycrank+0, 0, yyvstop+166,4yycrank+935, 0, 0, yycrank+955, 0, 0, yycrank+972, 0, 0, yycrank+967, 0, 0, yycrank+975, 0, 0, yycrank+974, 0, 0, yycrank+954, 0, 0, yycrank+974, 0, 0, yycrank+0, 0, yyvstop+168,9yycrank+966, 0, 0, yycrank+980, 0, 0, yycrank+969, 0, 0, yycrank+970, 0, 0, yycrank+972, 0, 0, yycrank+969, 0, 0, yycrank+978, 0, 0, yycrank+979, 0, 0, yycrank+992, 0, 0, yycrank+996, 0, 0, yycrank+983, 0, 0, yycrank+0, 0, yyvstop+170,3yycrank+979, 0, 0, yycrank+980, 0, 0, yycrank+996, 0, 0, yycrank+987, 0, 0, yycrank+998, 0, 0, yycrank+986, 0, 0, yycrank+993, 0, 0, yycrank+1015, 0, 0, yycrank+0, 0, yyvstop+172,7yycrank+1016, 0, 0, 7yycrank+1008, 0, 0, 0yycrank+1005, 0, 0, ,yycrank+1010, 0, 0, 3yycrank+1010, 0, 0, yycrank+1023, 0, 0, ,yycrank+0, 0, yyvstop+174,5yycrank+1018, 0, 0, yycrank+984, 0, 0, yycrank+0, 0, yyvstop+176,5yycrank+983, 0, 0, yycrank+1004, 0, 0, ,yycrank+0, 0, yyvstop+178,5yycrank+0, 0, yyvstop+180,4yycrank+997, 0, 0, yycrank+1006, 0, 0, 5yycrank+999, 0, 0, yycrank+994, 0, 0, yycrank+0, 0, yyvstop+182,9yycrank+1046, 0, 0, yycrank+1033, 0, 0, ,yycrank+0, 0, yyvstop+184,5yycrank+1035, 0, 0, yycrank+1030, 0, 0, 7yycrank+1049, 0, 0, 5yycrank+0, 0, yyvstop+186,4yycrank+1036, 0, 0, ,yycrank+1043, 0, 0, 1yycrank+1041, 0, 0, yycrank+1040, 0, 0, ,yycrank+1049, 0, 0, ,yycrank+1061, 0, 0, 5yycrank+1043, 0, 0, yycrank+1045, 0, 0, ,yycrank+1056, 0, 0, 5yycrank+1069, 0, 0, 5yycrank+1055, 0, 0, yycrank+1059, 0, 0, 0yycrank+0, 0, yyvstop+188,2yycrank+1066, 0, 0, 6yycrank+1054, 0, 0, ,yycrank+1058, 0, 0, 7yycrank+0, 0, yyvstop+190,,yycrank+1059, 0, 0, 5yycrank+1071, 0, 0, 5yycrank+1070, 0, 0, yycrank+1085, 0, 0, 1yycrank+1072, 0, 0, 5yycrank+1136, 0, 0, 0yycrank+1086, 0, 0, 6yycrank+0, 0, yyvstop+192,9yycrank+1093, 0, 0, yycrank+1042, 0, 0, ,yycrank+0, 0, yyvstop+194,6yycrank+0, 0, yyvstop+196,0yycrank+1053, 0, 0, 9yycrank+1061, 0, 0, 8yycrank+1073, 0, 0, 8yycrank+1073, 0, 0, ,yycrank+1111, 0, 0, 7yycrank+1097, 0, 0, yycrank+1111, 0, 0, ,yycrank+1122, 0, 0, ,yycrank+1107, 0, 0, 6yycrank+1121, 0, 0, yycrank+1124, 0, 0, ,yycrank+1112, 0, 0, 6yycrank+1124, 0, 0, 6yycrank+1138, 0, 0, yycrank+1139, 0, 0, 1yycrank+1126, 0, 0, 6yycrank+1127, 0, 0, 1yycrank+1138, 0, 0, 8yycrank+1130, 0, 0, 2yycrank+1131, 0, 0, 3yycrank+1136, 0, 0, 1yycrank+1138, 0, 0, 9yycrank+1145, 0, 0, ,yycrank+1133, 0, 0, 1yycrank+1149, 0, 0, yycrank+1148, 0, 0, ,yycrank+1145, 0, 0, ,yycrank+0, 0, yyvstop+198,yycrank+1150, 0, 0, 4yycrank+0, 0, yyvstop+200,7yycrank+1149, 0, 0, 3yycrank+1136, 0, 0, ,#yycrank+0, yysvec+569, yyvstop+202,,yycrank+1137, 0, 0, 8yycrank+1144, 0, 0, yycrank+0, 0, yyvstop+204,6yycrank+1110, 0, 0, 6yycrank+0, 0, yyvstop+206,5yycrank+1111, 0, 0, 4yycrank+0, 0, yyvstop+208,,yycrank+1154, 0, 0, ,yycrank+1161, 0, 0, 6yycrank+1169, 0, 0, yycrank+1164, 0, 0, ,yycrank+1171, 0, 0, 6yycrank+1189, 0, 0, 6yycrank+1179, 0, 0, yycrank+0, 0, yyvstop+210,6yycrank+1191, 0, 0, 5yycrank+1180, 0, 0, 5yycrank+1196, 0, 0, ,yycrank+1186, 0, 0, 2yycrank+1187, 0, 0, yycrank+1187, 0, 0, ,yycrank+1199, 0, 0, ,yycrank+1200, 0, 0, 6yycrank+1191, 0, 0, yycrank+1200, 0, 0, ,yycrank+1201, 0, 0, 6yycrank+1204, 0, 0, 7yycrank+1197, 0, 0, yycrank+0, 0, yyvstop+212,7yycrank+1187, 0, 0, 3yycrank+1200, 0, 0, 6yycrank+1210, 0, 0, ,yycrank+1202, 0, 0, 7yycrank+1203, 0, 0, yycrank+1204, 0, 0, ,yycrank+0, 0, yyvstop+214,6yycrank+0, 0, yyvstop+216,9yycrank+1212, 0, 0, 3yycrank+1213, 0, 0, 3yycrank+1216, 0, 0, 9yycrank+1208, 0, 0, ,yycrank+1209, 0, 0, 3yycrank+0, 0, yyvstop+218,,yycrank+1211, 0, 0, 7yycrank+0, 0, yyvstop+220,1yycrank+1214, 0, 0, 2yycrank+1231, 0, 0, 5yycrank+1223, 0, 0, 9yycrank+1236, 0, 0, 1yycrank+1252, 0, 0, ,yycrank+1245, 0, 0, 5yycrank+0, 0, yyvstop+222,,yycrank+0, 0, yyvstop+224,1yycrank+1241, 0, 0, 0yycrank+1242, 0, 0, 1yycrank+1245, 0, 0, 7yycrank+0, 0, yyvstop+226,,yycrank+1250, 0, 0, ,yycrank+1260, 0, 0, 7yycrank+1246, 0, 0, yycrank+1249, 0, 0, ,yycrank+1264, 0, 0, 7yycrank+1265, 0, 0, 7yycrank+0, 0, yyvstop+228,3yycrank+1252, 0, 0, 2yycrank+1253, 0, 0, 7yycrank+1258, 0, 0, 7yycrank+0, 0, yyvstop+230, yycrank+1260, 0, 0, ,yycrank+0, 0, yyvstop+232,7yycrank+1267, 0, 0, ,yycrank+1270, 0, 0, 0yycrank+1259, 0, 0, 0yycrank+0, 0, yyvstop+234,0yycrank+1272, 0, 0, fyycrank+1275, 0, 0, ,yycrank+0, 0, yyvstop+236,nyycrank+1266, 0, 0, yyycrank+1267, 0, 0, Oyycrank+1274, 0, 0, pyycrank+0, 0, yyvstop+238,6yycrank+0, 0, yyvstop+240,eyycrank+0, 0, yyvstop+242,1yycrank+0, 0, yyvstop+244,+yycrank+0, 0, yyvstop+246,+yycrank+1269, 0, 0, vyycrank+1270, 0, 0, yycrank+1266, 0, 0, ,yycrank+1286, 0, 0, nyycrank+1279, 0, 0, yycrank+1276, 0, 0, 2yycrank+1298, 0, 0, syycrank+1289, 0, 0, 0yycrank+1300, 0, 0, +yycrank+1300, 0, 0, ryycrank+1301, 0, 0, ,yycrank+1317, 0, 0, oyycrank+1303, 0, 0, yycrank+1306, 0, 0, 6yycrank+1309, 0, 0, ryycrank+1313, 0, 0, Eyycrank+1323, 0, 0, oyycrank+1316, 0, 0, yycrank+1317, 0, 0, 9yycrank+1318, 0, 0, ryycrank+1316, 0, 0, yycrank+1321, 0, 0, yyycrank+1322, 0, 0, 5yycrank+1312, 0, 0, ryycrank+1326, 0, 0, oyycrank+1327, 0, 0, eyycrank+0, 0, yyvstop+248,,yycrank+1326, 0, 0, Oyycrank+0, 0, yyvstop+250,oyycrank+1322, 0, 0, ,yycrank+1321, 0, 0, +yycrank+1324, 0, 0, 2yycrank+1321, 0, 0, tyycrank+1343, 0, 0, yyycrank+1344, 0, 0, yyycrank+0, 0, yyvstop+252,yyycrank+1345, 0, 0, yyycrank+1346, 0, 0, ,yycrank+1342, 0, 0, nyycrank+1343, 0, 0, 8yycrank+0, 0, yyvstop+254,ryycrank+1344, 0, 0, nyycrank+0, 0, yyvstop+256,0yycrank+0, 0, yyvstop+258,yycrank+0, 0, yyvstop+260,+yycrank+0, 0, yyvstop+262, yycrank+0, 0, yyvstop+264,yyycrank+1356, 0, 0, ryycrank+1367, 0, 0, nyycrank+1380, 0, 0, +yycrank+1378, 0, 0, 9yycrank+0, 0, yyvstop+266,0yycrank+0, 0, yyvstop+268,ryycrank+0, 0, yyvstop+270,, 0, 0, 0};y$struct yywork *yytop = yycrank+1481; struct yysvf *yybgin = yysvec+1;char yymatch[] = {(00 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,(01 ,011 ,012 ,01 ,01 ,01 ,01 ,01 ,(01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,(01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,(011 ,01 ,'"' ,01 ,01 ,01 ,01 ,01 ,(01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 ,('0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,('0' ,'0' ,01 ,01 ,01 ,01 ,01 ,01 ,(01 ,'A' ,'B' ,'C' ,'D' ,'E' ,'F' ,'G' ,('H' ,'I' ,01 ,'K' ,'L' ,'M' ,'N' ,'O' ,('P' ,01 ,'R' ,'S' ,'T' ,'U' ,'V' ,'W' ,(01 ,'Y' ,'Z' ,01 ,01 ,01 ,01 ,01 ,(01 ,'A' ,'B' ,'C' ,'D' ,'E' ,'F' ,'G' ,('H' ,'I' ,01 ,'K' ,'L' ,'M' ,'N' ,'O' ,('P' ,01 ,'R' ,'S' ,'T' ,'U' ,'V' ,'W' ,(01 ,'Y' ,'Z' ,01 ,01 ,01 ,01 ,01 ,0};0char yyextra[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};9 #ifndef lintPstatic char ncform_sccsid[] = "@(#)ncform 1.6 88/02/08 SMI"; /* from S5R2 1.2 */#endifint yylineno =1;# define YYU(x) x%# define NLSTATE yyprevious=YYNEWLINE0char yytext[YYLMAX];3struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp;4char yysbuf[YYLMAX];char *yysptr = yysbuf; int *yyfnd;nextern struct yysvf *yyestate;int yyprevious = YYNEWLINE;y yylook(){0' register struct yysvf *yystate, **lsp;, register struct yywork *yyt;y struct yysvf *yyz;n int yych, yyfirst;n struct yywork *yyr;# ifdef LEXDEBUG int debug; # endifr char *yylastch; /* start off machines */n# ifdef LEXDEBUG debug = 0; # endifr yyfirst=1;0 if (!yymorfg) yylastch = yytext; else {t yymorfg=0; yylastch = yytext+yyleng;0 } for(;;){0 lsp = yylstate;+ yyestate = yystate = yybgin;' if (yyprevious==YYNEWLINE) yystate++; for (;;){+# ifdef LEXDEBUG9 if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1); # endif+ yyt = yystate->yystoff;D if(yyt == yycrank && !yyfirst){ /* may not be any transitions */ yyz = yystate->yyother;  if(yyz == 0)break;% if(yyz->yystoff == yycrank)break;0 }r *yylastch++ = yych = input(); yyfirst=0;7 tryagain:y# ifdef LEXDEBUG if(debug){0 fprintf(yyout,"char "); allprint(yych); putchar('\n'); }n# endif yyr = yyt;2! if ( (int)yyt > (int)yycrank){y yyt = yyr + yych;r7 if (yyt <= yytop && yyt->verify+yysvec == yystate){0> if(yyt->advance+yysvec == YYLERR) /* error transitions */! {unput(*--yylastch);break;}+, *lsp++ = yystate = yyt->advance+yysvec; goto contin;  } }y# ifdef YYOPTIM 8 else if((int)yyt < (int)yycrank) { /* r < yycrank */& yyt = yyr = yycrank+(yycrank-yyt);# ifdef LEXDEBUG1 if(debug)fprintf(yyout,"compressed state\n");0# endifn yyt = yyt + yych;+6 if(yyt <= yytop && yyt->verify+yysvec == yystate){> if(yyt->advance+yysvec == YYLERR) /* error transitions */! {unput(*--yylastch);break;}r, *lsp++ = yystate = yyt->advance+yysvec; goto contin;r }# yyt = yyr + YYU(yymatch[yych]);n# ifdef LEXDEBUG if(debug){/ fprintf(yyout,"try fall back character ");0" allprint(YYU(yymatch[yych])); putchar('\n');1 }# endifn6 if(yyt <= yytop && yyt->verify+yysvec == yystate){= if(yyt->advance+yysvec == YYLERR) /* error transition */ ! {unput(*--yylastch);break;}+, *lsp++ = yystate = yyt->advance+yysvec; goto contin;+ } }yK if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){0# ifdef LEXDEBUGG if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1);0# endifn goto tryagain; },# endif else4 {unput(*--yylastch);break;} contin:,# ifdef LEXDEBUG if(debug){y5 fprintf(yyout,"state %d char ",yystate-yysvec-1);  allprint(yych);+ putchar('\n'); }0# endify ; }# ifdef LEXDEBUG if(debug){: fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1); allprint(yych); putchar('\n');0 }# endif+ while (lsp-- > yylstate){  *yylastch-- = 0; < if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){ yyolsp = lsp; + if(yyextra[*yyfnd]){ /* must backup */vC while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){ lsp--; unput(*yylastch--);9 }  } yyprevious = YYU(*yylastch); yylsp = lsp; yyleng = yylastch-yytext+1;r yytext[yyleng] = 0;+# ifdef LEXDEBUG if(debug){ fprintf(yyout,"\nmatch ");1 sprint(yytext);* fprintf(yyout," action %d\n",*yyfnd); }# endifn return(*yyfnd++);+ }  unput(*yylastch); }* if (yytext[0] == 0 /* && feof(yyin) */) { yysptr=yysbuf;r return(0);  }# yyprevious = yytext[0] = input();  if (yyprevious>0)  output(yyprevious); yylastch=yytext;# ifdef LEXDEBUG if(debug)putchar('\n');# endif4 }  } yyback(p, m) int *p;{rif (p==0) return(0); while (*p) { if (*p++ == m) return(1); } return(0);}n5 /* the following are only used in the lex library */3 yyinput(){ return(input());  } yyoutput(c) int c; { output(c);  } yyunput(c) int c; {1 unput(c); } 0, yycrank+651, 0, 0, yycrank+631, 0, 0, yycrank+638, 0, 0, yycrank+650, 0, 0, yycrank+651, 0, 0, yycrank+643, 0, 0, yycrank+0, 0, yyvstop+110, yycrank+0, 0, yyvstop+112,1yycrank+0, 0, yyvstop+114,3yycrank+657, 0, 0, yycrank+658, 0, 0, yycrank+638, 0, 0, yycrank+656, 0, 0, yycrank+663, 0, 0, yycrank+664, 0, 0, yycrank+667, 0, 0, yycrank+668, 0, 0, yycrank+663, 0, 0, yycrank+668, 0, 0, yycrank+0, 0, yyvstop+116,9yycrank+656, 0, 0, yycran*[FIELDS.X.TWM]LIST.C;1+,3 ./% 4O - 0@123KPWO56`*'37@F8 B9fG%HJO/*****************************************************************************/O/** Copyright 1988 by Evans & Sutherland Computer Corporation, **/O/** Salt Lake City, Utah **/O/** **/O/** All Rights Reserved **/O/** **/O/** Permission to use, copy, modify, and distribute this software and **/O/** its documentation for any purpose and without fee is hereby **/O/** granted, provided that the above copyright notice appear in all **/O/** copies and that both that copyright notice and this permis- **/O/** sion notice appear in supporting documentation, and that the **/O/** name of Evans & Sutherland not be used in advertising or publi- **/O/** city pertaining to distribution of the software without specif- **/O/** ic, written prior permission. **/O/** **/O/** EVANS & SUTHERLAND DISCLAIMS ALL WARRANTIES WITH REGARD TO **/O/** THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILI- **/O/** TY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND BE LIABLE **/O/** FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAM- **/O/** AGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, **/O/** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS **/O/** ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PER- **/O/** FORMANCE OF THIS SOFTWARE. **/O/*****************************************************************************/G/********************************************************************** *5 * $Header: list.c,v 1.9 88/10/13 07:19:06 toml Exp $ *@ * TWM code to deal with the name lists for the NoTitle list and * the AutoRaise list *2 * 11-Apr-88 Tom LaStrange Initial Version. *H **********************************************************************/ #ifndef lintstatic char RCSinfo[]=5"$Header: list.c,v 1.9 88/10/13 07:19:06 toml Exp $"; #endif lint#include #include "twm.h"#include "gram.h"#typedef struct name_list name_list;struct name_list{4 name_list *next; /* pointer to the next name */. char *name; /* the name of the window */* char *ptr; /* list dependent data */};Gname_list *NoTitle = NULL; /* list of window names with no title bar */Ename_list *AutoRaise = NULL; /* list of window names to auto-raise */=name_list *Icons = NULL; /* list of window names and icons */Dname_list *NoHighlight = NULL; /* list of windows no to highlight */?name_list *DontIconify = NULL; /* don't iconify by unmapping */Dname_list *IconMgrNoShow = NULL;/* don't show in the icon manager */H/*********************************************************************** * * Procedure:8 * AddToList - add a window name to the appropriate list * * Inputs:( * list - a #define to identify the list. * name - a pointer to the name of the window ' * ptr - pointer to list dependent data * * Special Considerations< * If the list does not use the ptr value, a non-null value = * should be placed in it. LookInList returns this ptr value? * and procedures calling LookInList will check for a non-null , * return value as an indication of success. *H *********************************************************************** */voidAddToList(list, name, ptr) int list; char *name; char *ptr;{ name_list *nptr;2 nptr = (name_list *)malloc(sizeof(name_list)); if (nptr == NULL) {) fprintf(stderr, "twm: out of memory\n"); Done(); } nptr->name = name; switch (list) { case ICONMGR_NOSHOW: nptr->next = IconMgrNoShow; nptr->ptr = (char *)TRUE; IconMgrNoShow = nptr; break; case NO_HILITE: nptr->next = NoHighlight; nptr->ptr = (char *)TRUE; NoHighlight = nptr; break; case AUTO_RAISE: nptr->next = AutoRaise; nptr->ptr = (char *)TRUE; AutoRaise = nptr; break; case NO_TITLE: nptr->next = NoTitle; nptr->ptr = (char *)TRUE; NoTitle = nptr; break; case ICONS: nptr->next = Icons;* nptr->ptr = ptr; /* this is the pixmap */ Icons = nptr; break;# case DONT_ICONIFY_BY_UNMAPPING: nptr->next = DontIconify; nptr->ptr = (char *)TRUE; DontIconify = nptr; break; }}H/*********************************************************************** * * Procedure:? * LookInList - look through a list for a window name, or class * * Returned Value:; * the ptr field of the list structure or NULL if the name % * or class was not found in the list * * Inputs:( * list - a #define to identify the list+ * name - a pointer to the name to look for- * class - a pointer to the class to look for *H *********************************************************************** */char *LookInList(list, name, class) int list; char *name;XClassHint *class;{ name_list *l; name_list *nptr; switch (list) { case ICONMGR_NOSHOW: l = IconMgrNoShow; break; case NO_HILITE: l = NoHighlight; break; case AUTO_RAISE: l = AutoRaise; break; case NO_TITLE: l = NoTitle; break; case ICONS: l = Icons; break;# case DONT_ICONIFY_BY_UNMAPPING: l = DontIconify; break; }3 for (nptr = l; nptr != NULL; nptr = nptr->next) { int len; len = strlen(nptr->name);+ if (strncmp(name, nptr->name, len) == 0 ||A (class && strncmp(class->res_name, nptr->name, len) == 0) ||@ (class && strncmp(class->res_class, nptr->name, len) == 0)) return (nptr->ptr); } return (NULL);}char *LookInNameList(list, name) int list; char *name;{* return (LookInList(list, name, NULL));}*[FIELDS.X.TWM]MENUS.C;11+,6.B/% 4OBB- 0D123KPWOC5677F8B9fG%HJ O/*****************************************************************************/O/** Copyright 1988 by Evans & Sutherland Computer Corporation, **/O/** Salt Lake City, Utah **/O/** **/O/** All Rights Reserved **/O/** **/O/** Permission to use, copy, modify, and distribute this software and **/O/** its documentation for any purpose and without fee is hereby **/O/** granted, provided that the above copyright notice appear in all **/O/** copies and that both that copyright notice and this permis- **/O/** sion notice appear in supporting documentation, and that the **/O/** name of Evans & Sutherland not be used in advertising or publi- **/O/** city pertaining to distribution of the software without specif- **/O/** ic, written prior permission. **/O/** **/O/** EVANS & SUTHERLAND DISCLAIMS ALL WARRANTIES WITH REGARD TO **/O/** THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILI- **/O/** TY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND BE LIABLE **/O/** FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAM- **/O/** AGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, **/O/** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS **/O/** ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PER- **/O/** FORMANCE OF THIS SOFTWARE. **/O/*****************************************************************************/H/*********************************************************************** *5 * $Header: menus.c,v 1.2 88/10/18 11:36:25 jim Exp $ * * twm menu code *. * 17-Nov-87 Thomas E. LaStrange File created *I ***********************************************************************/ #ifndef lintstatic char RCSinfo[] =5"$Header: menus.c,v 1.2 88/10/18 11:36:25 jim Exp $";#endif#include #include #include "twm.h"#include "gc.h"#include "menus.h"#include "events.h"#include "util.h"#include "gram.h"#include "pull.bm" #ifdef macII#define vfork fork#endifint RootFunction = NULL;7MenuRoot *MenuList = NULL; /* head of the menu list *//MenuRoot *LastMenu = NULL; /* the last menu */3MenuRoot *ActiveMenu = NULL; /* the active menu */4MenuRoot *Windows = NULL; /* the TwmWindows menu */8MenuItem *ActiveItem = NULL; /* the active menu item */9MouseButton Mouse[MAX_BUTTONS+1][NUM_CONTEXTS][MOD_SIZE];MouseButton DefaultFunction;MouseButton WindowFunction;6FuncKey FuncKeyRoot; /* head of function key list */6inrS}~TWM.SAVE6 [FIELDS.X.TWM]MENUS.C;11OBxt MoveFunction; /* either F_MOVE or F_FORCEMOVE */ H/*********************************************************************** * * Procedure:$ * InitMenus - initialize menu roots *H *********************************************************************** */void InitMenus(){ int i, j, k; FuncKey *key, *tmp;' for (i = 0; i < MAX_BUTTONS+1; i++)# for (j = 0; j < NUM_CONTEXTS; j++)# for (k = 0; k < MOD_SIZE; k++) { Mouse[i][j][k].func = NULL; Mouse[i][j][k].item = NULL; } DefaultFunction.func = NULL; WindowFunction.func = NULL;( Mouse[1][C_TITLE][0].func = F_RAISE;' Mouse[2][C_TITLE][0].func = F_MOVE;( Mouse[3][C_TITLE][0].func = F_LOWER;) Mouse[1][C_ICON][0].func = F_ICONIFY;& Mouse[2][C_ICON][0].func = F_MOVE;' Mouse[3][C_ICON][0].func = F_LOWER;, Mouse[1][C_ICONMGR][0].func = F_ICONIFY;, Mouse[2][C_ICONMGR][0].func = F_ICONIFY;, Mouse[3][C_ICONMGR][0].func = F_ICONIFY;. for (key = FuncKeyRoot.next; key != NULL;) { free(key->name); tmp = key; key = key->next; free(tmp); } FuncKeyRoot.next = NULL;}H/*********************************************************************** * * Procedure:. * AddFuncKey - add a function key to the list * * Inputs: * name - the name of the key2 * cont - the context to look for the key press in/ * mods - modifier keys that need to be pressed! * func - the function to perform% * win_name- the window name (if any)C * action - the action string associated with the function (if any) *H *********************************************************************** */void4AddFuncKey(name, cont, mods, func, win_name, action) char *name; int cont, mods, func; char *win_name; char *action;{ FuncKey *tmp; KeySym keysym;5 if ((keysym = XStringToKeysym(name)) == NoSymbol) {9 fprintf(stderr, "twm: unknown key name \"%s\"\n", name); return; }@ /* see if there already is a key defined for this context */> for (tmp = FuncKeyRoot.next; tmp != NULL; tmp = tmp->next) { if (tmp->keysym == keysym && tmp->cont == cont && tmp->mods == mods) break; } if (tmp == NULL) {+ tmp = (FuncKey *) malloc(sizeof(FuncKey)); tmp->next = FuncKeyRoot.next; FuncKeyRoot.next = tmp; } tmp->name = name; tmp->keysym = keysym;1 tmp->keycode = XKeysymToKeycode(dpy, keysym); tmp->cont = cont; tmp->mods = mods; tmp->func = func; tmp->win_name = win_name; tmp->action = action;}H/*********************************************************************** * * Procedure:' * NewMenuRoot - create a new menu root * * Returned Value: * (MenuRoot *) * * Inputs:# * name - the name of the menu root *H *********************************************************************** */ MenuRoot *NewMenuRoot(name) char *name;{ MenuRoot *tmp; unsigned long valuemask;$ XSetWindowAttributes attributes; CreateGCs();0 tmp = (MenuRoot *) malloc(sizeof(MenuRoot)); tmp->name = name; tmp->prev = NULL; tmp->first = NULL; tmp->last = NULL; tmp->items = 0; tmp->width = 0; tmp->mapped = FALSE; tmp->pull = FALSE; tmp->active = TRUE;0 tmp->shadow = XCreateSimpleWindow(dpy, Root,4 0, 0, 10, 10, 1, MenuShadowColor, MenuShadowColor);+ tmp->w = XCreateSimpleWindow(dpy, Root,* 0, 0, 10, 10, 1, MenuC.fore, MenuC.back);/ XSelectInput(dpy, tmp->w, LeaveWindowMask); if (SaveUnder) { valuemask = CWSaveUnder; attributes.save_under = True;C XChangeWindowAttributes(dpy, tmp->shadow, valuemask, &attributes);> XChangeWindowAttributes(dpy, tmp->w, valuemask, &attributes); } if (MenuList == NULL) { MenuList = tmp; MenuList->next = NULL; } if (LastMenu == NULL) { LastMenu = tmp; LastMenu->next = NULL; } else { LastMenu->next = tmp; LastMenu = tmp; LastMenu->next = NULL; }' if (strcmp(name, TWM_WINDOWS) == 0) Windows = tmp; return (tmp);}H/*********************************************************************** * * Procedure:) * AddToMenu - add an item to a root menu * * Returned Value: * (MenuItem *) * * Inputs:2 * menu - pointer to the root menu to add the item( * item - the text to appear in the menu* * action - the string to possibly execute2 * sub - the menu root if it is a pull-right entry * func - the numeric function *H *********************************************************************** */ MenuItem *(AddToMenu(menu, item, action, sub, func) MenuRoot *menu; char *item, *action; MenuRoot *sub; int func;{ unsigned long valuemask;$ XSetWindowAttributes attributes; MenuItem *tmp; int width; #ifdef DEBUGI fprintf(stderr, "adding menu item=\"%s\", action=%s, sub=%d, f=%d\n", item, action, sub, func);#endif0 tmp = (MenuItem *) malloc(sizeof(MenuItem)); tmp->root = menu;8 if (menu->first == NULL) {t menu->first = tmp;  tmp->prev = NULL; }l else {  menu->last->next = tmp; tmp->prev = menu->last; }  menu->last = tmp;  tmp->item = item;* tmp->action = action;  tmp->next = NULL;e tmp->sub = NULL; tmp->pull = NULL;  tmp->state = 0;  tmp->func = func; : width = XTextWidth(MenuFont.font, item, strlen(item)); if (width <= 0) width = 1;  if (width > menu->width) menu->width = width;a if (tmp->func != F_TITLE) { + tmp->w = XCreateSimpleWindow(dpy, menu->w,o, 0, menu->items * (MenuFont.height + 4), width, MenuFont.height + 4, 0,t MenuC.fore, MenuC.back);o* XSelectInput(dpy, tmp->w, EnterWindowMask' | LeaveWindowMask | ExposureMask);o }  else { + tmp->w = XCreateSimpleWindow(dpy, menu->w, - -1, menu->items * (MenuFont.height + 4),w width, MenuFont.height + 2, 1,i" MenuC.fore, MenuTitleC.back);) XSelectInput(dpy, tmp->w, ExposureMask);  }  if (sub != NULL) { Pixmap pm;  tmp->sub = sub;. pm = MakeCenteredPixmap(tmp->w, MenuNormalGC,% pull_width, MenuFont.height + 4,I) pull_bits, pull_width, pull_height);S( valuemask = CWEventMask | CWBackPixmap;# attributes.background_pixmap = pm;H; attributes.event_mask = EnterWindowMask | LeaveWindowMask;T' tmp->pull = XCreateWindow(dpy, tmp->w,* 0, 0,% pull_width, MenuFont.height + 4, 0, d_depth, CopyFromParent,' d_visual, valuemask, &attributes);T XMapWindow(dpy, tmp->pull); menu->pull = TRUE;A0 XSaveContext(dpy, tmp->pull, MenuContext, tmp); }  menu->items += 1; 0 XSaveContext(dpy, tmp->w, MenuContext, tmp); if (menu->items == 1)*3 XSaveContext(dpy, tmp->root->w, MenuContext, tmp);* return (tmp);*}*H/*********************************************************************** * * Procedure:& * PopUpMenu - pop up a pull down menu * * Inputs:-0 * menu - the root pointer of the menu to pop up" * x - the x location of the mouse" * y - the y location of the mouse *H *********************************************************************** */ voidPopUpMenu(menu, x, y)e MenuRoot *menu;< int x, y;c{e unsigned long valuemask;$ XSetWindowAttributes attributes; int m_height; XWindowChanges xwc, pwc; unsigned int xwcm, pwcm; MenuItem *tmp, *tmp1; TwmWindow *tmp_win; if (menu == NULL); return; if (menu == Windows) {tA /* this is the twm windows menu, let's go ahead and build it */*& for (tmp = menu->first; tmp != NULL;) {. XDeleteContext(dpy, tmp->w, MenuContext);! XDestroyWindow(dpy, tmp->w);  tmp1 = tmp; tmp = tmp->next;N free(tmp1); } if (ActiveMenu != NULL) menu->prev = ActiveMenu;u elseu menu->prev = NULL;u menu->first = NULL; menu->last = NULL;e menu->items = 0;O menu->width = 0;* menu->mapped = FALSE; menu->pull = FALSE;5 AddToMenu(menu, "TWM Windows", NULL, NULL, F_TITLE);-G for (tmp_win = TwmRoot.next; tmp_win != NULL; tmp_win = tmp_win->next)* {< AddToMenu(menu, tmp_win->name, tmp_win, NULL, F_POPUP); } } if (menu->items == 0)  return;! XGrabPointer(dpy, Root, True,  ButtonReleaseMask,; GrabModeAsync, GrabModeAsync,% Root, LeftArrowCursor, CurrentTime);f if (ActiveMenu != NULL)i ActiveMenu->active = FALSE; menu->active = TRUE; ActiveMenu = menu; if (menu->mapped != TRUE)[ {  if (menu->pull == TRUE) {$ menu->width += pull_width + 10; } xwcm = 0; xwcm |= CWWidth;s xwc.width = menu->width + 10; pwcm = 0; pwcm |= CWX;u pwc.x = xwc.width - pull_width; valuemask = CWBackingStore;# attributes.backing_store = Always;6 for (tmp = menu->first; tmp != NULL; tmp = tmp->next) { if (BackingStore)? XChangeWindowAttributes(dpy, tmp->w, valuemask, &attributes);f/ XConfigureWindow(dpy, tmp->w, xwcm, &xwc); if (tmp->pull != NULL)c {/ XConfigureWindow(dpy, tmp->pull, pwcm, &pwc);* } if (tmp->func != F_TITLE) tmp->y = 5;r else* {; tmp->y = xwc.width - XTextWidth(MenuFont.font, tmp->item,m strlen(tmp->item));* tmp->y /= 2; } } }  menu->mapped = TRUE;3 m_height = menu->items * (MenuFont.height + 4);c" if ((x + 10) > MyDisplayWidth) x = (MyDisplayWidth - 30); . if ((y + m_height + 10) > MyDisplayHeight)" y = (MyDisplayHeight - m_height);* xwcm = CWX | CWY | CWWidth | CWHeight;! xwc.x = x - menu->width + 10;c if (xwc.x < 0) xwc.x = 0;), xwc.y = y - ((MenuFont.height + 4) / 2);! xwc.width = menu->width + 10;c xwc.height = m_height;/ XConfigureWindow(dpy, menu->w, xwcm, &xwc);T xwc.x = xwc.x + 5; xwc.y = xwc.y + 5;4 XConfigureWindow(dpy, menu->shadow, xwcm, &xwc);1 XWarpPointer(dpy, None, menu->w, 0, 0, 0, 0, f2 menu->width - 10, (MenuFont.height + 4) / 2);! XMapSubwindows(dpy, menu->w);)$ XRaiseWindow(dpy, menu->shadow); XMapRaised(dpy, menu->w);" XMapWindow(dpy, menu->shadow);}H/*********************************************************************** * * Procedure:& * FindMenuRoot - look for a menu root * * Returned Value:-8 * (MenuRoot *) - a pointer to the menu root structure  * * Inputs:c$ * name - the name of the menu root  *H *********************************************************************** */ MenuRoot *FindMenuRoot(name) char *name;*{* MenuRoot *tmp;6 for (tmp = MenuList; tmp != NULL; tmp = tmp->next) {o" if (strcmp(name, tmp->name) == 0) return (tmp); }u return NULL;}uH/*********************************************************************** * * Procedure:0 * ExecuteFunction - execute a twm root function * * Inputs: ! * func - the function to executem' * action - the menu action to execute t- * w - the window to execute this function on;% * tmp_win - the twm window structuref- * event - the event that caused the functionp8 * context - the context in which the button was pressed: * pulldown- flag indicating execution from pull down menu *H *********************************************************************** */CvoidCExecuteFunction(func, action, w, tmp_win, event, context, pulldown)l int func;w char *action;d Window w; TwmWindow *tmp_win;o XEvent event;  int context; int pulldown;o{s static Time last_time = 0; char tmp[200]; char *ptr; int len; char buff[MAX_FILE_SIZE];b int count, fd; MenuRoot *root, *tmp_root; MenuItem *item, *tmp_item;! XGrabPointer(dpy, Root, True, ButtonReleaseMask,  GrabModeAsync, GrabModeAsync,! Root, ClockCursor, CurrentTime); switch (func)  { case F_NOP:  case F_TITLE:n break;L case F_SHOWLIST: DeIconify(IconManagerPtr);* XRaiseWindow(dpy, IconManagerPtr->frame); break; case F_HIDELIST:* XUnmapWindow(dpy, IconManagerPtr->frame);+ XUnmapWindow(dpy, IconManagerPtr->icon_w);* break;* case F_BEEP: XBell(dpy, screen); break;d case F_POPUP:a tmp_win = (TwmWindow *)action;*! if (WindowFunction.func != NULL) {E ExecuteFunction(WindowFunction.func, WindowFunction.item->action,i+ w, tmp_win, event, C_FRAME, FALSE);o } elsei { DeIconify(tmp_win);! XMapWindow(dpy, tmp_win->w);g% XMapRaised(dpy, tmp_win->frame);n } break;* case F_RESIZE:/ if (DeferExecution(context, func, MoveCursor)) return; if (pulldown)# XWarpPointer(dpy, None, Root, *: 0, 0, 0, 0, event.xbutton.x_root, event.xbutton.y_root); if (w != tmp_win->icon_w) {/ EventHandler[EnterNotify] = HandleUnknown; / EventHandler[LeaveNotify] = HandleUnknown;* EventHandler[Expose] = HandleUnknown;! StartResize(event, tmp_win);e return; } break;d case F_ZOOM:. if (DeferExecution(context, func, DotCursor)) return; fullzoom(tmp_win, ZOOM_VERT); break;- case F_FULLZOOM:. if (DeferExecution(context, func, DotCursor)) return; fullzoom(tmp_win, ZOOM_FULL); break;e case F_MOVE: case F_FORCEMOVE:/ if (DeferExecution(context, func, MoveCursor))e return; MoveFunction = func;  if (pulldown)# XWarpPointer(dpy, None, Root, : 0, 0, 0, 0, event.xbutton.x_root, event.xbutton.y_root);+ EventHandler[EnterNotify] = HandleUnknown;t+ EventHandler[LeaveNotify] = HandleUnknown; & EventHandler[Expose] = HandleUnknown;: /* redraw the text in the title bar or the icon window if= * needed, we have disabled expose event handling so we must  * do it here */ if (context == C_TITLE) {, XDrawImageString(dpy, tmp_win->title_w, tmp_win->title_gc, TitleBarX, TitleBarFont.y,( tmp_win->name, strlen(tmp_win->name)); } else if (context == C_ICON) {+ XDrawImageString(dpy, tmp_win->icon_w,  IconNormalGC, # tmp_win->icon_x, tmp_win->icon_y,e2 tmp_win->icon_name, strlen(tmp_win->icon_name)); } XGrabServer(dpy);, XGrabPointer(dpy, event.xbutton.root, True, ButtonReleaseMask,N" GrabModeAsync, GrabModeAsync,$ Root, MoveCursor, CurrentTime); if (context == C_ICON)e w = tmp_win->icon_w;P else if (w != tmp_win->icon_w)x w = tmp_win->frame; DragX = event.xbutton.x;L DragY = event.xbutton.y;u if (context == C_WINDOW)w$ DragY += tmp_win->title_height; e DragWindow = w;0 XGetGeometry(dpy, w, &JunkRoot, &JunkX, &JunkY,& &DragWidth, &DragHeight, &JunkBW, &JunkDepth);p( MoveOutline((Window)event.xbutton.root,, event.xbutton.x_root-DragX-BorderWidth,, event.xbutton.y_root-DragY-BorderWidth,! DragWidth + 2 * BorderWidth,=# DragHeight + 2 * BorderWidth);,, if ((event.xbutton.time - last_time) < 400) { int width, height;* ConstMove = TRUE; ConstMoveDir = MOVE_NONE;= ConstMoveX = event.xbutton.x_root - DragX - BorderWidth;-= ConstMoveY = event.xbutton.y_root - DragY - BorderWidth;x) width = DragWidth + 2 * BorderWidth;o+ height = DragHeight + 2 * BorderWidth;*( ConstMoveXL = ConstMoveX + width/3;, ConstMoveXR = ConstMoveX + 2*(width/3);) ConstMoveYT = ConstMoveY + height/3; - ConstMoveYB = ConstMoveY + 2*(height/3);t( XWarpPointer(dpy, None, DragWindow,) 0, 0, 0, 0, DragWidth/2, DragHeight/2);,: XQueryPointer(dpy, DragWindow, &JunkRoot, &JunkChild,- &JunkX, &JunkY, &DragX, &DragY, &JunkMask);e } last_time = event.xbutton.time; return; break; case F_FUNCTION: { MenuRoot *mroot;s MenuItem *mitem; 0 if ((mroot = FindMenuRoot(action)) == NULL) {B fprintf(stderr, "twm: couldn't find function \"%s\"\n", action); return;1 }H if (NeedToDefer(mroot) && DeferExecution(context, func, DotCursor)) return;U else- {@ for (mitem = mroot->first; mitem != NULL; mitem = mitem->next) {m= ExecuteFunction(mitem->func, mitem->action, w, tmp_win," event, context, pulldown);L } } } break;o case F_DEICONIFY:t case F_ICONIFY:t. if (DeferExecution(context, func, DotCursor)) return; if (tmp_win->icon)  { DeIconify(tmp_win); }# else if (func == F_ICONIFY)  { TwmWindow *t; if (!tmp_win->iconified)R { int final_x, final_y;) if (tmp_win->wmhints &&U1 tmp_win->wmhints->flags & IconPositionHint)i {T) final_x = tmp_win->wmhints->icon_x;u) final_y = tmp_win->wmhints->icon_y;  }U else {m) final_x = event.xbutton.x_root - 5; ) final_y = event.xbutton.y_root - 5;- }h if (final_x > MyDisplayWidth)u8 final_x = MyDisplayWidth - tmp_win->icon_w_width - (2 * BorderWidth);a if (final_y > MyDisplayHeight)8 final_y = MyDisplayHeight - tmp_win->icon_height -+ IconFont.height - 4 - (2 * BorderWidth);,6 XMoveWindow(dpy, tmp_win->icon_w, final_x, final_y); tmp_win->iconified = TRUE; } Iconify(tmp_win); } SetHints(tmp_win);y break;l case F_RAISELOWER:. if (DeferExecution(context, func, DotCursor)) return; { int vis;w if (w == tmp_win->icon_w) vis = tmp_win->icon_vis; else { w = tmp_win->frame;  vis = tmp_win->frame_vis; }% if (vis == VisibilityUnobscured)  XLowerWindow(dpy, w);> elsei XRaiseWindow(dpy, w);h } break;  f case F_RAISE:0. if (DeferExecution(context, func, DotCursor)) return; if (w == tmp_win->icon_w)( XRaiseWindow(dpy, tmp_win->icon_w); else' XRaiseWindow(dpy, tmp_win->frame);. break;e case F_LOWER:2. if (DeferExecution(context, func, DotCursor)) return; if (w == tmp_win->icon_w)( XLowerWindow(dpy, tmp_win->icon_w); else ' XLowerWindow(dpy, tmp_win->frame);u break;y case F_FOCUS: . if (DeferExecution(context, func, DotCursor)) return; if (tmp_win->icon == FALSE) {+ if (Focus != NULL && Focus != tmp_win)) {$ if (Highlight && Focus->highlight) {a: XSetWindowBorderPixmap(dpy, Focus->frame, GrayTile);< XSetWindowBorderPixmap(dpy, Focus->title_w, GrayTile); }*% XUnmapWindow(dpy, Focus->hilite_w);n }( XMapWindow(dpy, tmp_win->hilite_w);8 XSetWindowBorder(dpy, tmp_win->frame, BorderColor);: XSetWindowBorder(dpy, tmp_win->title_w, BorderColor);9 XSetInputFocus(dpy, tmp_win->w, RevertToPointerRoot,* CurrentTime);* FocusRoot = FALSE;u Focus = tmp_win;a } break;  case F_DESTROY:o0 if (DeferExecution(context, func, SkullCursor)) return; if (tmp_win == IconManagerPtr)r XBell(dpy, screen); elseN" XKillClient(dpy, tmp_win->w); break;* case F_CIRCLEUP:# XCirculateSubwindowsUp(dpy, Root);* break;u case F_CIRCLEDOWN:% XCirculateSubwindowsDown(dpy, Root);  break;i case F_VERSION:o XMapRaised(dpy, VersionWindow); break;e case F_EXEC: Execute(action);* break;- case F_UNFOCUS:r FocusOnRoot();e break;a case F_CUT:o strcpy(tmp, action);n strcat(tmp, "\n");t$ XStoreBytes(dpy, tmp, strlen(tmp)); break;e case F_CUTFILE:e ptr = XFetchBytes(dpy, &count); if (count != 0) {% if (sscanf(ptr, "%s", tmp) == 1) { ptr = ExpandFilename(tmp); fd = open(ptr, 0); if (fd >= 0) {c0 count = read(fd, buff, MAX_FILE_SIZE - 1); if (count > 0)! XStoreBytes(dpy, buff, count);  close(fd); }t else {t: fprintf(stderr, "twm: couldn't open \"%s\"\n", tmp); }  } XFree(ptr); } else  {9 fprintf(stderr, "twm: nothing in the cut buffer\n");  } break; case F_FILE:! action = ExpandFilename(action);  fd = open(action, 0); if (fd >= 0), {/ count = read(fd, buff, MAX_FILE_SIZE - 1);  if (count > 0) XStoreBytes(dpy, buff, count); close(fd);: } elsey {< fprintf(stderr, "twm: couldn't open \"%s\"\n", action); } break;  case F_TWMRC:n len = strlen(action); if (len == 0) ptr = NULL; elsen {! ptr = (char *)malloc(len+1);e if (ptr == NULL)c {* fprintf(stderr, "twm: out of memory\n"); exit(1); } strcpy(ptr, action);! ptr = ExpandFilename(ptr);( }@ /* first get rid of the existing menu structure and destroy all * windows */% for (root = MenuList; root != NULL;)y {+ for (item = root->last; item != NULL;)  { if (item->pull != NULL)n {3 XDeleteContext(dpy, item->pull, MenuContext);o& XDestroyWindow(dpy, item->pull); }i, XDeleteContext(dpy, item->w, MenuContext); XDestroyWindow(dpy, item->w);. tmp_item = item; item = item->prev; free(tmp_item);{ }/ XDeleteContext(dpy, root->w, MenuContext);e' XDestroyWindow(dpy, root->shadow);" XDestroyWindow(dpy, root->w); tmp_root = root;e root = root->next;t free(tmp_root); } MenuList = NULL;  LastMenu = NULL;t /*f ActiveMenu = NULL;  ActiveItem = NULL;m */, UngrabAllButtons(); UngrabAllKeys();O ParseTwmrc(ptr);o #ifdef TOM< /* I started to write code to redo colors and stuff, but I 9 * didn't get it all done, that's why it is ifdef'ed outD */G for (tmp_win = TwmRoot.next; tmp_win != NULL; tmp_win = tmp_win->next)c {) XUnmapWindow(dpy, tmp_win->title_w);n> XSetWindowBackground(dpy, tmp_win->title_w, TitleC.back);9 XSetForeground(dpy, tmp_win->title_gc, TitleC.fore);e9 XSetBackground(dpy, tmp_win->title_gc, TitleC.back);o: XDestroyWindow(dpy, tmp_win->iconify_w, TitleC.back);#ifndef NOFOCUSo8 XDestroyWindow(dpy, tmp_win->focus_w, TitleC.back);#endif9 XDestroyWindow(dpy, tmp_win->resize_w, TitleC.back); 9 XDestroyWindow(dpy, tmp_win->hilite_w, TitleC.back);g! CreateTitleButtons(tmp_win); ' XMapWindow(dpy, tmp_win->title_w);}= SetupWindow(tmp_win, tmp_win->frame_x, tmp_win->frame_y,t/ tmp_win->frame_width, tmp_win->frame_height);o? if (tmp_win == Focus || !Highlight || !tmp_win->highlight)n {5 XSetWindowBorder(dpy, tmp_win->frame, BorderColor);u7 XSetWindowBorder(dpy, tmp_win->title_w, BorderColor);A } if (tmp_win == Focus) XMapWindow(tmp_win->hilite_w); }#endif GrabAllButtons(); GrabAllKeys();s break;= case F_REFRESH: # w = XCreateSimpleWindow(dpy, Root,t( 0, 0, 9999, 9999, 0, Black, Black); XMapWindow(dpy, w); XDestroyWindow(dpy, w); XFlush(dpy);h break; case F_WINREFRESH:. if (DeferExecution(context, func, DotCursor)) return; if (context == C_ICON)&2 w = XCreateSimpleWindow(dpy, tmp_win->icon_w,% 0, 0, 9999, 9999, 0, Black, Black);o elset1 w = XCreateSimpleWindow(dpy, tmp_win->frame, % 0, 0, 9999, 9999, 0, Black, Black);D XMapWindow(dpy, w); XDestroyWindow(dpy, w); XFlush(dpy);_ break;0 case F_QUIT: Done(); break;  }o% XUngrabPointer(dpy, CurrentTime);N}H/*********************************************************************** * * Procedure:< * DeferExecution - defer the execution of a function to the1 * next button press if the context is C_ROOTW * * Inputs:t> * context - the context in which the mouse button was pressed * func - the function to deferC/ * cursor - the cursor to display while waitingo *H *********************************************************************** */gint,%DeferExecution(context, func, cursor)dint context, func;Cursor cursor;{ if (context == C_ROOT) {J XGrabPointer(dpy, Root, True,) ButtonPressMask | ButtonReleaseMask," GrabModeAsync, GrabModeAsync, Root, cursor, CurrentTime); RootFunction = func;  return (TRUE);) }L  return (FALSE);r}tH/*********************************************************************** * * Procedure:> * NeedToDefer - checks each function in the list to see if it$ * is one that needs to be defered. * * Inputs:L * root - the menu root to check *H *********************************************************************** */dNeedToDefer(root)MenuRoot *root; {a MenuItem *mitem;A for (mitem = root->first; mitem != NULL; mitem = mitem->next)  {; switch (mitem->func)  { case F_RESIZE:t case F_MOVE:  case F_FORCEMOVE: case F_DEICONIFY: case F_ICONIFY: case F_RAISELOWER:- case F_RAISE: case F_LOWER: case F_FOCUS: case F_DESTROY: case F_WINREFRESH:_ case F_ZOOM:l case F_FULLZOOM:i return TRUE;i } }_ return FALSE;x}H/*********************************************************************** * * Procedure:* * Execute - execute the string by /bin/sh * * Inputs:( * s - the string containing the command *H *********************************************************************** */(void Execute(s) char *s;{a int status, pid, w;m* register int (*istat) (), (*qstat) (); #ifdef VMS new_vms_execute(s);(#elsep if ((pid = vfork()) == 0); {_ signal(SIGINT, SIG_DFL);  signal(SIGQUIT, SIG_DFL); signal(SIGHUP, SIG_DFL);$ execl("/bin/sh", "sh", "-c", s, 0); _exit(127); }t$ istat = signal(SIGINT, SIG_IGN);% qstat = signal(SIGQUIT, SIG_IGN);m2 while ((w = wait(&status)) != pid && w != -1); if (w == -1) status = -1;  signal(SIGINT, istat); signal(SIGQUIT, qstat); #endif}n#ifdef VMS_OLD#include #include vms_execute(cmd)register char *cmd;{R struct dsc$descriptor cdsc; struct dsc$descriptor *cdscp; long status; long substatus;( long iosb[2];s int flags;# cdscp = NULL; /* Assume DCL. */k, if (cmd != NULL) { /* Build descriptor. */ cdsc.dsc$a_pointer = cmd; " cdsc.dsc$w_length = strlen(cmd);# cdsc.dsc$b_dtype = DSC$K_DTYPE_T;># cdsc.dsc$b_class = DSC$K_CLASS_S;p cdscp = &cdsc; } b flags = 1; /* nowait */ D status = LIB$SPAWN(cdscp, 0, 0, &flags, 0, 0, &substatus, 0, 0, 0); if (status != SS$_NORMAL) substatus = status;& o} #endifH/*********************************************************************** * * Procedure:3 * FocusOnRoot - put input focus on the root windowy *H *********************************************************************** */void FocusOnRoot()p{nG XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);  if (Focus != NULL) {n# if (Highlight && Focus->highlight)p {9 XSetWindowBorderPixmap(dpy, Focus->frame, GrayTile);m; XSetWindowBorderPixmap(dpy, Focus->title_w, GrayTile);b }$ XUnmapWindow(dpy, Focus->hilite_w); }o Focus = NULL;u FocusRoot = TRUE;;}DeIconify(tmp_win)TwmWindow *tmp_win;l{y TwmWindow *t;+ /* de-iconify group members (if any) */% if (tmp_win->group == tmp_win->w)d {p/ for (t = TwmRoot.next; t != NULL; t = t->next)X {& if (tmp_win->group == t->group &&$ tmp_win->group != t->w && t->icon) { if (t->icon_on)e Zoom(t->icon_w, t->frame); else& Zoom(tmp_win->icon_w, t->frame); XMapWindow(dpy, t->w); if (NoRaiseDeicon) XMapWindow(dpy, t->frame); else XMapRaised(dpy, t->frame); XUnmapWindow(dpy, t->icon_w);e# XUnmapWindow(dpy, t->list->icon);i t->icon = FALSE; t->icon_on = FALSE;s } } } ( /* now de-iconify the main window */ if (tmp_win->icon) {c if (tmp_win->icon_on)+ Zoom(tmp_win->icon_w, tmp_win->frame); ! else if (tmp_win->group != NULL)) {3 for (t = TwmRoot.next; t != NULL; t = t->next)( {+ if (tmp_win->group == t->w && t->icon_on)  {& Zoom(t->icon_w, tmp_win->frame); break; }: } } } XMapWindow(dpy, tmp_win->w); if (NoRaiseDeicon)! XMapWindow(dpy, tmp_win->frame);t else! XMapRaised(dpy, tmp_win->frame);a' XUnmapWindow(dpy, tmp_win->icon_w);c if (tmp_win->list)( XUnmapWindow(dpy, tmp_win->list->icon);$ if (WarpCursor && tmp_win->icon) {u( XWarpPointer(dpy, None, tmp_win->frame, 0, 0, 0, 0, 30, 8); }s tmp_win->icon = FALSE; tmp_win->icon_on = FALSE;{} Iconify(tmp_win)TwmWindow *tmp_win; {r TwmWindow *t; int iconify;- iconify = !tmp_win->iconify_by_unmapping;  if (iconify) { & XMapSubwindows(dpy, tmp_win->icon_w);" XMapRaised(dpy, tmp_win->icon_w); }u if (tmp_win->list)& XMapWindow(dpy, tmp_win->list->icon);% /* iconify group members first */s% if (tmp_win->group == tmp_win->w)> { / for (t = TwmRoot.next; t != NULL; t = t->next)l {> if (tmp_win->group == t->group && tmp_win->group != t->w) { if (iconify) {n if (t->icon_on)i$ Zoom(t->icon_w, tmp_win->icon_w); else# Zoom(t->frame, tmp_win->icon_w);  } XUnmapWindow(dpy, t->frame); XUnmapWindow(dpy, t->w); XUnmapWindow(dpy, t->icon_w); & if (Highlight && tmp_win->highlight) {r< XSetWindowBorderPixmap(dpy, tmp_win->frame, GrayTile);> XSetWindowBorderPixmap(dpy, tmp_win->title_w, GrayTile); }  if (t == Focus)L {*& XSetInputFocus(dpy, PointerRoot,% RevertToPointerRoot, CurrentTime);T Focus = NULL;w FocusRoot = TRUE;a }u! XMapWindow(dpy, t->list->icon);o t->icon = TRUE;s t->icon_on = FALSE;f } } }o if (iconify)' Zoom(tmp_win->frame, tmp_win->icon_w);X& XUnmapWindow(dpy, tmp_win->frame);" XUnmapWindow(dpy, tmp_win->w);( if (Highlight && tmp_win->highlight) {t7 XSetWindowBorderPixmap(dpy, tmp_win->frame, GrayTile);,9 XSetWindowBorderPixmap(dpy, tmp_win->title_w, GrayTile);, }n if (tmp_win == Focus)i {O6 XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); Focus = NULL; FocusRoot = TRUE; }i tmp_win->icon = TRUE;W if (iconify) tmp_win->icon_on = TRUE; else tmp_win->icon_on = FALSE;}XpWindow(dpy, tmp_win->title_w);}= SetupWindow(tmp_win, tmp_wi!*[FIELDS.X.TWM]NEW_VMS_EXECUTE.C;2+,. /% 4E - 0D123KPWO 56@T!7@!8@ OH9G%HJC/*******************************************************************0* a routine that will create a dcl sub proc that5* can be passed commands to be executed - used mainly"* by twm to fire off menu commands*E********************************************************************/#include #include #include #include #include #include #define LF 10#define CR 13#define NUL '\0'#define EXIT 0#define CONTTo~TWM.SAVE ![FIELDS.X.TWM]NEW_VMS_EXECUTE.C;2E ŞINUE 1$#define DEFNAME "sys$login:twm.log"#define ERROR(val,msg,stat) \if( (val & 0x01L) == 0) { \3 printf("Error in %s status = %x\n",msg,val); \ if(stat == EXIT) \ exit(val); \}struct iosbdef { short status; short transfer; int dev_specific;};struct dvi$def { short buffer_length; short item_code; int *buffer_address; int *returned_length;}; struct accdef terminate_message;static char out_line[200];static struct iosbdef out_iosb;static short out_mbx_chan;static FILE *fp;FILE *fopen();static char fname[200]; static int first_through = TRUE;"$DESCRIPTOR(mbx_name,"TERMINATE");'$DESCRIPTOR(out_mbx_name,"TWM_OUTMBX");%$DESCRIPTOR(in_mbx_name,"TWM_INMBX");2$DESCRIPTOR(image_name,"SYS$SYSTEM:LOGINOUT.EXE");%$DESCRIPTOR(process_name,"TWM_PROC");!$DESCRIPTOR(output,"TWM_OUTMBX");$DESCRIPTOR(input,"TWM_INMBX"); $DESCRIPTOR(error,"TWM_OUTMBX");"static short mbx_chan,in_mbx_chan;static int mbx_lun; static struct dvi$def unit_info;static short unit_length;$static int iosb[2],status,mesg_size;static int log = TRUE;void output_ast(){ int status; int c;# out_line[out_iosb.transfer] = NUL; if(log == TRUE) { fprintf(fp,"%s\n",out_line); fflush(fp); }  /* now reque the AST */ status = SYS$QIO(5, out_mbx_chan, IO$_READVBLK, &out_iosb, output_ast, 0, out_line,200, 0,0,0,0); ! ERROR(status,"output qio",EXIT);}voidterminate_ast(){ if(log == TRUE) fclose(fp); ( exit(terminate_message.acc$l_finalsts);} create_proc(){ char line[300];  strcpy(fname,DEFNAME); log = TRUE;% if( (fp=fopen(fname,"w")) == NULL) {; /* just 'cos can't open log file don't die - don't log */ log = FALSE; }? /* create the termination mailbox for when new process dies */  status = sys$crembx(0,  &mbx_chan,  0, 0, 0, 0,  &mbx_name);/ ERROR(status,"create terminate mailbox",EXIT);& /* and for output from the process */  status = sys$crembx(0,  &out_mbx_chan,  0, 0, 0, 0,  &out_mbx_name);) ERROR(status,"create out mailbox",EXIT);  /* and input to the process */  status = sys$crembx(0,  &in_mbx_chan,  0, 0, 0, 0,  &in_mbx_name);+ ERROR(status,"create input mailbox",EXIT);5 /* now get the unit number of the mailbax channel */ unit_info.buffer_length = 4;! unit_info.item_code = DVI$_UNIT;% unit_info.buffer_address = &mbx_lun;* unit_info.returned_length = &unit_length; status = SYS$GETDVIW(0,  mbx_chan,  &mbx_name,  &unit_info, 0,0,0,0); 1 ERROR(status,"get device information",CONTINUE);& /* now ready to create the process */  status = SYS$CREPRC(0,  &image_name,  &input,  &output,  &error, 0, 0,  &process_name, 4, 0,  mbx_lun,  PRC$M_INTER);% ERROR(status,"Create process",exit); B /* now issue an asynchronous read that will complete when process dies */ ' mesg_size = sizeof(terminate_message); status = SYS$QIO(4,  mbx_chan,  IO$_READVBLK, iosb, terminate_ast,0, &terminate_message, mesg_size, 0,0,0,0); ERROR(status,"QIO",EXIT);2 /* queue an asynchonous read to output mailbox */  status = SYS$QIO(5, out_mbx_chan, IO$_READVBLK, &out_iosb, output_ast, 0, out_line,200, 0,0,0,0); ! ERROR(status,"output qio",EXIT);/* ) strcpy(line,"@sys$manager:sylogin.com");  status = SYS$QIOW(0, in_mbx_chan, IO$_WRITEVBLK, 0,0,0, line, strlen(line), 0,0,0,0); ERROR(status,"write qio",EXIT); ! strcpy(line,"@sys$login:login");  status = SYS$QIOW(0, in_mbx_chan, IO$_WRITEVBLK, 0,0,0, line, strlen(line), 0,0,0,0); ERROR(status,"write qio",EXIT);*/) strcpy(line,"@$4$dua7:[fields.x]xprog");  status = SYS$QIOW(0, in_mbx_chan, IO$_WRITEVBLK, 0,0,0, line, strlen(line), 0,0,0,0); ERROR(status,"write qio",EXIT);}new_vms_execute(line) char line[];{! char new_line[300],new_cmd[300]; int i,length;  if(first_through == TRUE) { create_proc();  first_through = FALSE; }  strcpy(new_cmd, line); 9 /* look to see whether the command has an & on end if so6 ** then do a nowait - emulate UNIX background process */ length = strlen(new_cmd); * /* see if last non-white space is an & */ for(i=length-1;i!=0;i--) { if(new_cmd[i] == '&') {* new_cmd[i] = NUL; /* wipe out the & */ $ strcpy(new_line,"spawn/nowait "); strcat(new_line,new_cmd); break; } else if(new_cmd[i] == ' ') continue; else { strcpy(new_line,new_cmd); break; } }  if(log == TRUE) {% fprintf(fp,"DCL: \"%s\"",new_line); fflush(fp); } / /* send it to input mail box of new process */ status = SYS$QIOW(0, in_mbx_chan, IO$_WRITEVBLK, 0,0,0, new_line, strlen(new_line), 0,0,0,0); ERROR(status,"write qio",EXIT);}*[FIELDS.X.TWM]PARSE.C;5+,C ./% 4O- 0D123KPWO56^7#include "twm.h"#include "menus.h"#include "util.h"#define BUF_LEN 300static FILE *twmrc;static int ptr = 0;static int len = 0;static char buff[BUF_LEN+1];extern int yylineno; #ifdef VMSextern FILE *yyin,*yyout;#endifH/*********************************************************************** * * Procedure:% * ParseTwmrc - parse the .twmrc file * * Inputs:D * filename - the filename to parse. A NULL indicates $HOME/.twmrc *H *********************************************************************** */ #ifdef VMSchar * get_home();char * get_user();#endifvoidParseTwmrc(filename)char *filename;{ char *home; char init_file[200]; InitMenus(); if (filename == NULL) { #ifdef VMS+ strcpy(init_file,get_home( get_user() ) ); strcat(init_file,"twm.rc"); 3 printf("Looking for startup file %s\n",init_file);#else home = (char *)getenv("HOME"); strcpy(init_file, home); strcat(init_file, "/.twmrc");#endif } else strcpy(init_file, filename);0 if ((twmrc = fopen(init_file, "r")) == NULL) {; fprintf(stderr, "twm: couldn't open \"%s\"\n", init_file); return; } ptr = 0; len = 0; yylineno = 0; ParseError = FALSE; #ifdef VMS yyin = stdin; yyout = stdout;#endif  yyparse(); fclose(twmrc); if (ParseError) {? fprintf(stderr, "twm: errors found in \"%s\", twm aborting\n", init_file); Done(); }}H/*********************************************************************** * * Procedure:3 * TwmInput - redefinition of the lex input routine * * Returned Value: * the next input character *H *********************************************************************** */int TwmInput(){ while (ptr == len) {) if (fgets(buff, BUF_LEN, twmrc) == NULL) return NULL; yylineno++; ptr = 0; len = strlen(buff); } return ((int)buff[ptr++]);}H/*********************************************************************** * * Procedure:3 * TwmUnput - redefinition of the lex unput routine * * Inputs:7 * c - the character to push back onto the input stream *H *********************************************************************** */void TwmUnput(c){ buff[--ptr] = c;}H/*********************************************************************** * * Procedure:5 * TwmOutput - redefinition of the lex output routine * * Inputs: * c - the character to print *H *********************************************************************** */void TwmOutput(c){ putchar(c);} #ifdef VMS#include #include #include #include struct item { short int length; short int code; int buffer; int retlen;};static char spec[100];char *get_home(user) char user[];{ int size=0,status,original; char buffer[100]; struct item info[2]; struct dsc$descriptor username; username.dsc$a_pointer = user;8 username.dsc$w_length = strlen(username.dsc$a_pointer);' username.dsc$b_dtype = DSC$K_DTYPE_T;' username.dsc$b_class = DSC$K_CLASS_S;  info[0].length = 100; info[0].code = UAI$_DEFDEV; info[0].buffer = &buffer; info[0].retlen = &size;  info[1].length = 0; info[1].code = 0; 2 status = SYS$GETUAI(0,0, &username, &info,0,0,0); if(status != SS$_NORMAL) return(NULL); $ strncpy(spec,&buffer[1],buffer[0]); spec[buffer[0]] = NULL;  original = buffer[0];  info[0].length = 100; info[0].code = UAI$_DEFDIR; info[0].buffer = &buffer; info[0].retlen = &size; info[1].length = 0; info[1].code = 0; 1 status = SYS$GETUAI(0,0, &username,&info,0,0,0); if(status != SS$_NORMAL) return(NULL);$ strncat(spec,&buffer[1],buffer[0]);# spec[buffer[0] + original] = NULL;  return(spec);}char * get_user(){: struct item ilist[2]; /* 2nd ilist must begin with */' /* zero filled long word to mark*/ /* end of list */5 static char username[20]; /* Store username here */> int retlen = 0, /* Length of return string */< retval = -1; : unsigned int iosb[2]; /* Quadword iosb for true return*/# char *spaceptr; /* space ptr */ /* Build up item list */ username[12] = '\0'; ilist[0].length = 12; ilist[0].code = JPI$_USERNAME;# ilist[0].buffer = (long)&username;! ilist[0].retlen = (long)&retlen;, /* Zero fill next long word to terminate */ ilist[1].length = 0; ilist[1].code = 0;" /* Ask for associated username */J if ((retval = sys$getjpiw ( 0, 0, 0, &ilist, &iosb, 0, 0)) != SS$_NORMAL) {, /* Couldn't get the username, so return */ /* back with an error. */? /* retval indicates the status of the call...*/ return (NULL);8 }   /*- * ...let's look in the iosb for the actual  * success or fail.  */  if (iosb[0] != SS$_NORMAL) return (NULL); /* 5 * Null terminate at the end of the user name itself, * and not just at then end of the buffer. */ # spaceptr = strchr (username, ' '); *spaceptr = '\0';  return(username);}#endif*[FIELDS.X.TWM]PSEUDO_ROOT.C;1+, ./% 4J- 0123KPWO56H7Kr8 \OH9G%HJ /*6 pseudo_root - Return the Window ID of the Pseudo Root. NOTE: This routine is required for DECwindows. because the true root window is hidden behind4 a pseudo-root window created by the window manager. Calling Sequence:* root_win = pseudo_root(display, screen); where:$ display must already be opened and+ screen is usually DefaultScreen(display).*/#include #define NULL 0Lstatic void chase_root();static int done;static Window last_win;3static int root_x, root_y, root_width, root_height;static int root_bw, root_depth;Window pseudo_root(dpy, screen) Display *dpy; int screen;{ Window root, win; /* Start at the real root */# root = RootWindow(dpy, screen);& /* Get the geometry of the root */8 if (XGetGeometry(dpy, root, &win, &root_x, &root_y,  &root_width, &root_height, &root_bw, &root_depth)) { /* Set up for the tree walk */ done = False; last_win = root;0 /* Run down the tree to find the pseudo root */ chase_root(dpy, root); return last_win; } else1 /* Classic case of "this should never happen" */ return root;} /*** End pseudo_root() ***//*% chase_root - Internal to this module< This is a recursive routine for descending the window tree.? It looks for the first window which does NOT overlay the root,: then returns with the ID of the last window it saw in the global variable last_win.> NOTE: The parameters of the root window must be set up before calling chase_root().*/static void chase_root (dpy, w) Display *dpy; Window w;{ Window root, parent; unsigned int nchildren; Window *children = NULL; Status status; int n; int x, y, rx, ry;* unsigned int width, height, bw, depth; /* Insurance */ if (done) return;J if (XGetGeometry(dpy, w, &root, &x, &y, &width, &height, &bw, &depth)) { /*5 If this window does not exactly overlay the root; then we have gone one too far, i.e., we have finished. */ if ( (x != root_x) || (y != root_y) || (width != root_width) || (height != root_height) ) { done = True; return; }: /* Otherwise, remember where we got up to and continue */ else last_win = w; } else+ /* We are in trouble if this happens!!! */ return;D if (!XQueryTree (dpy, w, &root, &parent, &children, &nchildren))- /* Likewise, we hope we never get here!!! */ return;# for (n = 0; n < nchildren; n++) { chase_root (dpy, children[n]); if (done) break; } #ifdef VMS, if (children) XFree ((char *) children);#else+ if (children) free ((char *) children);#endif return;} /*** End chase_root() ***/*[FIELDS.X.TWM]RESIZE.C;1+,6.(/% 4O('- 0@123KPWO(56Y37ҰG8B9fG%HJ6O/*****************************************************************************/O/** Copyright 1988 by Evans & Sutherland Computer Corporation, **/O/** Salt Lake City, Utah **/O/** **/O/** All Rights Reserved **/O/** **/O/** Permission to use, copy, modify, and distribute this software and **/O/** its documentation for any purpose and without fee is hereby **/O/** granted, provided that the above copyright notice appear in all **/O/** copies and that both that copyright notice and this permis- **/O/** sion notice appear in supporting documentation, and that the **/O/** name of Evans & Sutherland not be used in advertising or publi- **/O/** city pertaining to distribution of the software without specif- **/O/** ic, written prior permission. **/O/** **/O/** EVANS & SUTHERLAND DISCLAIMS ALL WARRANTIES WITH REGARD TO **/O/** THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILI- **/O/** TY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND BE LIABLE **/O/** FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAM- **/O/** AGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, **/O/** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS **/O/** ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PER- **/O/** FORMANCE OF THIS SOFTWARE. **/O/*****************************************************************************/H/*********************************************************************** *8 * $Header: resize.c,v 1.21 88/10/14 06:02:04 toml Exp $ *8 * window resizing borrowed from the "wm" window manager *. * 11-Dec-87 Thomas E. LaStrange File created *I ***********************************************************************/ #ifndef lintstatic char RCSinfo[]=8"$Header: resize.c,v 1.21 88/10/14 06:02:04 toml Exp $";#endif#include #include "twm.h"#include "util.h"#include "resize.h"#include "add_window.h"#include "resize.bm"#ifndef NOFOCUS#include "focus.bm"#else#define focus_width 0#endif#define MINHEIGHT 32#define MINWIDTH 604static int dragx; /* all these variables are used */,static int dragy; /* in resize operations */static int dragWidth;static int dragHeight;static int origx;static int origy;static int origWidth;static int origHeight;static int clampTop;static int clampBottom;static int clampLeft;static int clampRight;static int last_width;static int last_height;H/*********************************************************************** * * Procedure:0 * StartResize - begin a window resize operation * * Inputs:* * ev - the event structure (button press)" * tmp_win - the TwmWindow pointer *H *********************************************************************** */voidStartResize(ev, tmp_win) XEvent ev;TwmWindow *tmp_win;{ Window junkRoot;" int junkbw, junkDepth;" ResizeWindow = tmp_win->frame; XGrabServer(dpy);, XGrabPointer(dpy, ev.xbutton.root, True, ButtonReleaseMask, GrabModeAsync, GrabModeAsync, Root, MoveCursor, CurrentTime);; XGetGeometry(dpy, (Drawable) tmp_win->frame, &junkRoot,2 &dragx, &dragy, &dragWidth, &dragHeight, &junkbw, &junkDepth); dragx += BorderWidth; dragy += BorderWidth; origx = dragx; origy = dragy; origWidth = dragWidth; origHeight = dragHeight;8 clampTop = clampBottom = clampLeft = clampRight = 0;' XMoveWindow(dpy, SizeWindow, 0, 0); XMapRaised(dpy, SizeWindow); last_width = 0; last_height = 0;0 DisplaySize(tmp_win, origWidth, origHeight);}H/*********************************************************************** * * Procedure:B * AddStartResize - begin a window resize operation from AddWindow * * Inputs:" * tmp_win - the TwmWindow pointer *H *********************************************************************** */void#AddStartResize(tmp_win, x, y, w, h)TwmWindow *tmp_win;int x, y, w, h;{ Window junkRoot;" int junkbw, junkDepth; XGrabServer(dpy);! XGrabPointer(dpy, Root, True, ButtonReleaseMask, GrabModeAsync, GrabModeAsync, Root, MoveCursor, CurrentTime); dragx = x + BorderWidth; dragy = y + BorderWidth; origx = dragx; origy = dragy;0 dragWidth = origWidth = w - 2 * BorderWidth;2 dragHeight = origHeight = h - 2 * BorderWidth;8 clampTop = clampBottom = clampLeft = clampRight = 0;A XMoveWindow(dpy, SizeWindow, 0, InitialFont.height + 4 + BW); XMapRaised(dpy, SizeWindow); last_width = 0; last_height = 0;0 DisplaySize(tmp_win, origWidth, origHeight);}H/*********************************************************************** * * Procedure:= * DoResize - move the rubberband around. This is called for. * each motion event when we are resizing  * * Inputs:/ * x_root - the X corrdinate in the root window/ * y_root - the Y corrdinate in the root window# * tmp_win - the current twm window *H *********************************************************************** */void!DoResize(x_root, y_root, tmp_win) int x_root; int y_root;TwmWindow *tmp_win;{ int action; action = 0; if (clampTop) {$ int delta = y_root - dragy;& if (dragHeight - delta < MINHEIGHT) {$ delta = dragHeight - MINHEIGHT; clampTop = 0; } dragy += delta; dragHeight -= delta; action = 1; }! else if (y_root <= dragy/* ||. y_root == findRootInfo(root)->rooty*/) { dragy = y_root;" dragHeight = origy + origHeight - y_root; clampBottom = 0; clampTop = 1; action = 1; } if (clampLeft) {$ int delta = x_root - dragx;$ if (dragWidth - delta < MINWIDTH) {" delta = dragWidth - MINWIDTH; clampLeft = 0; } dragx += delta; dragWidth -= delta; action = 1; }! else if (x_root <= dragx/* ||. x_root == findRootInfo(root)->rootx*/) { dragx = x_root; dragWidth = origx + origWidth - x_root; clampRight = 0; clampLeft = 1; action = 1; } if (clampBottom) {1 int delta = y_root - dragy - dragHeight;& if (dragHeight + delta < MINHEIGHT) {$ delta = MINHEIGHT - dragHeight; clampBottom = 0; } dragHeight += delta; action = 1; }2 else if (y_root >= dragy + dragHeight - 1/* ||' y_root == findRootInfo(root)->rooty- + findRootInfo(root)->rootheight - 1*/) { dragy = origy;! dragHeight = 1 + y_root - dragy; clampTop = 0; clampBottom = 1; action = 1; } if (clampRight) {0 int delta = x_root - dragx - dragWidth;$ if (dragWidth + delta < MINWIDTH) {" delta = MINWIDTH - dragWidth; clampRight = 0; } dragWidth += delta; action = 1; }1 else if (x_root >= dragx + dragWidth - 1/* ||+ x_root == findRootInfo(root)->rootx +, findRootInfo(root)->rootwidth - 1*/) { dragx = origx; dragWidth = 1 + x_root - origx; clampLeft = 0; clampRight = 1; action = 1; } if (action) { MoveOutline(Root, dragx - BorderWidth, dragy - BorderWidth," dragWidth + 2 * BorderWidth,$ dragHeight + 2 * BorderWidth); }0 DisplaySize(tmp_win, dragWidth, dragHeight);}H/*********************************************************************** * * Procedure:: * DisplaySize - display the size in the dimensions window * * Inputs:$ * tmp_win - the current twm window ' * width - the width of the rubber band) * height - the height of the rubber band *H *********************************************************************** */void#DisplaySize(tmp_win, width, height)TwmWindow *tmp_win; int width; int height;{ char str[100]; int dwidth; int dheight;5 if (last_width == width && last_height == height) return; last_width = width; last_height = height; dwidth = width;- dheight = height - tmp_win->title_height;K if (tmp_win->hints.flags&PMinSize && tmp_win->hints.flags & PResizeInc) {$ dwidth -= tmp_win->hints.min_width;& dheight -= tmp_win->hints.min_height; }* if (tmp_win->hints.flags & PResizeInc) {$ dwidth /= tmp_win->hints.width_inc;& dheight /= tmp_win->hints.height_inc; }- sprintf(str, "%d x %d", dwidth, dheight);= width = XTextWidth(SizeFont.font, str, strlen(str)) + 20; strcat(str, " ");? XResizeWindow(dpy, SizeWindow, width, SizeFont.height + 4);" XRaiseWindow(dpy, SizeWindow);3 XDrawImageString(dpy, SizeWindow, SizeNormalGC,2 10, 2 + SizeFont.font->ascent, str, strlen(str));}H/*********************************************************************** * * Procedure:* * EndResize - finish the resize operation *H *********************************************************************** */void EndResize(){ TwmWindow *tmp_win; Window w; #ifdef DEBUG# fprintf(stderr, "EndResize\n");#endif" XUnmapWindow(dpy, SizeWindow);" MoveOutline(Root, 0, 0, 0, 0);: XFindContext(dpy, ResizeWindow, TwmContext, &tmp_win);4 dragHeight = dragHeight - tmp_win->title_height;K if (tmp_win->hints.flags&PMinSize && tmp_win->hints.flags & PResizeInc) {' dragWidth -= tmp_win->hints.min_width;) dragHeight -= tmp_win->hints.min_height; }* if (tmp_win->hints.flags & PResizeInc) {' dragWidth /= tmp_win->hints.width_inc;) dragHeight /= tmp_win->hints.height_inc;' dragWidth *= tmp_win->hints.width_inc;) dragHeight *= tmp_win->hints.height_inc; }K if (tmp_win->hints.flags&PMinSize && tmp_win->hints.flags & PResizeInc) {' dragWidth += tmp_win->hints.min_width;) dragHeight += tmp_win->hints.min_height; }4 dragHeight = dragHeight + tmp_win->title_height; SetupWindow(tmp_win, dragx - BorderWidth, dragy - BorderWidth, dragWidth, dragHeight); #ifdef SUN386D /* This is a kludge to fix a problem in the Sun 386 server whichC * causes windows to not be repainted after a resize operation. */0 w = XCreateSimpleWindow(dpy, tmp_win->frame,$ 0, 0, 9999, 9999, 0, Black, Black); XMapWindow(dpy, w); XDestroyWindow(dpy, w); XFlush(dpy);#endif  if (!NoRaiseResize)# XRaiseWindow(dpy, tmp_win->frame); ResizeWindow = NULL; SetHints(tmp_win);}H/*********************************************************************** * * Procedure:; * AddEndResize - finish the resize operation for AddWindow *H *********************************************************************** */voidAddEndResize(tmp_win)TwmWindow *tmp_win;{ #ifdef DEBUG& fprintf(stderr, "AddEndResize\n");#endif" XUnmapWindow(dpy, SizeWindow);4 dragHeight = dragHeight - tmp_win->title_height;K if (tmp_win->hints.flags&PMinSize && tmp_win->hints.flags & PResizeInc) {' dragWidth -= tmp_win->hints.min_width;) dragHeight -= tmp_win->hints.min_height; }* if (tmp_win->hints.flags & PResizeInc) {' dragWidth /= tmp_win->hints.width_inc;) dragHeight /= tmp_win->hints.height_inc;' dragWidth *= tmp_win->hints.width_inc;) dragHeight *= tmp_win->hints.height_inc; }K if (tmp_win->hints.flags&PMinSize && tmp_win->hints.flags & PResizeInc) {' dragWidth += tmp_win->hints.min_width;) dragHeight += tmp_win->hints.min_height; } AddingX = dragx; AddingY = dragy;, AddingW = dragWidth + (2 * BorderWidth);E AddingH = dragHeight + tmp_win->title_height + (2 * BorderWidth);}H/*********************************************************************** * * Procedure:> * SetupWindow - set window sizes, this was called from either3 * AddWindow, EndResize, or HandleConfigureNotify. * * Inputs:" * tmp_win - the TwmWindow pointer+ * x - the x coordinate of the frame window+ * y - the y coordinate of the frame window$ * w - the width of the frame window% * h - the height of the frame window * * Special Considerations:E * This routine will check to make sure the window is not completely = * off the display, if it is, it'll bring some of it back on. *H *********************************************************************** */void SetupWindow(tmp_win, x, y, w, h)TwmWindow *tmp_win;int x, y, w, h;{ XEvent client_event; XWindowChanges xwc; unsigned int xwcm; int width; #ifdef DEBUG< fprintf(stderr, "SetupWindow: x=%d, y=%d, w=%d, h=%d\n", x, y, w, h);#endif if (x > MyDisplayWidth) x = MyDisplayWidth - 64; if (y > MyDisplayHeight) y = MyDisplayHeight - 64;" if (tmp_win == IconManagerPtr) { IconManagerWidth = w;/ h = IconManagerHeight + tmp_win->title_height; } tmp_win->frame_x = x; tmp_win->frame_y = y; tmp_win->frame_width = w; tmp_win->frame_height = h;7 XMoveResizeWindow(dpy, tmp_win->frame, x, y, w, h); xwcm = CWWidth; xwc.width = w;8 XConfigureWindow(dpy, tmp_win-~TWM.SAVE6 [FIELDS.X.TWM]RESIZE.C;1O(V>title_w, xwcm, &xwc); tmp_win->attr.width = w;5 tmp_win->attr.height = h - tmp_win->title_height;D XMoveResizeWindow(dpy, tmp_win->w, 0, tmp_win->title_height, w,  h - tmp_win->title_height); xwcm = CWX;! xwc.x = w - resize_width - 1;9 XConfigureWindow(dpy, tmp_win->resize_w, xwcm, &xwc);/ xwc.x = w - resize_width - focus_width - 3;#ifndef NOFOCUS8 XConfigureWindow(dpy, tmp_win->focus_w, xwcm, &xwc);#endif< width = w - TitleBarX - focus_width - resize_width - 5 - tmp_win->name_width - 10; if (width <= 0) { xwc.x = MyDisplayWidth; xwc.width = 1; } else {- xwc.x = TitleBarX + tmp_win->name_width + 6; xwc.width = width; } xwcm = CWX | CWWidth;9 XConfigureWindow(dpy, tmp_win->hilite_w, xwcm, &xwc);( client_event.type = ConfigureNotify;* client_event.xconfigure.display = dpy;/ client_event.xconfigure.event = tmp_win->w;0 client_event.xconfigure.window = tmp_win->w;" client_event.xconfigure.x = x;: client_event.xconfigure.y = y + tmp_win->title_height;9 client_event.xconfigure.width = tmp_win->frame_width;< client_event.xconfigure.height = tmp_win->frame_height - tmp_win->title_height;7 client_event.xconfigure.border_width = BorderWidth;& XSendEvent(dpy, tmp_win->w, False,% StructureNotifyMask, &client_event);}H/*********************************************************************** * * Procedure:C * SetHints - set window hints so that if twm is killed the windows> * will start up in the same places they were at when twm was * killed. * * Inputs:" * tmp_win - the TwmWindow pointer *H *********************************************************************** */voidSetHints(tmp_win)TwmWindow *tmp_win;{ XWMHints wmhints; XSizeHints hints; int x, y, w, h; /*" wmhints = *(tmp_win->wmhints); if (tmp_win->icon)% wmhints.initial_state = IconicState; else% wmhints.initial_state = NormalState;A XGetGeometry(dpy, tmp_win->icon_w, &JunkRoot, &x, &y, &w, &h, &JunkBW, &JunkDepth); wmhints.icon_x = x; wmhints.icon_y = y;4 wmhints.flags |= (StateHint | IconPositionHint);+ XSetWMHints(dpy, tmp_win->w, &wmhints); */@ XGetGeometry(dpy, tmp_win->frame, &JunkRoot, &x, &y, &w, &h, &JunkBW, &JunkDepth); hints = tmp_win->hints; hints.x = x;( hints.y = y + tmp_win->title_height; hints.width = w;- hints.height = h - tmp_win->title_height;*) hints.flags |= (USPosition | USSize);*- XSetNormalHints(dpy, tmp_win->w, &hints);b}vG/**********************************************************************  * Rutgers mod #1 - rocky.  * Procedure: > * fullzoom - zooms window to full height of screen orB * to full height and width of screen. (TogglesH * so that it can undo the zoom - even when switching: * between fullzoom and vertical zoom.) * * Inputs: * * tmp_win - the TwmWindow pointer * *G **********************************************************************  */voidfullzoom(tmp_win,flag)TwmWindow *tmp_win;e int flag; {l Window junkRoot; " int junkbw, junkDepth; TwmWindow *test_win;= XGetGeometry(dpy, (Drawable) tmp_win->frame, &junkRoot,a6 &dragx, &dragy, &dragWidth, &dragHeight, &junkbw, &junkDepth);i dragx += BorderWidth;c dragy += BorderWidth;n" if (tmp_win->zoomed == flag) {. dragHeight = tmp_win->save_frame_height;, dragWidth = tmp_win->save_frame_width;$ dragx = tmp_win->save_frame_x;$ dragy = tmp_win->save_frame_y;" tmp_win->zoomed = ZOOM_NONE; } ? else if (tmp_win->zoomed == ZOOM_VERT && flag == ZOOM_FULL)D5 { dragHeight = MyDisplayHeight - 2*BorderWidth;*, dragWidth = MyDisplayWidth - 2*BorderWidth; dragx = 0; dragy = 0;  tmp_win->zoomed = ZOOM_FULL;  }O? else if (tmp_win->zoomed == ZOOM_FULL && flag == ZOOM_VERT)E5 { dragHeight = MyDisplayHeight - 2*BorderWidth; dragy = 0;W dragx = tmp_win->save_frame_x;T' dragWidth = tmp_win->save_frame_width;* tmp_win->zoomed = ZOOM_VERT;I }T# else if (flag == ZOOM_VERT) {  tmp_win->save_frame_x = dragx;  tmp_win->save_frame_y = dragy;*' tmp_win->save_frame_width = dragWidth;*) tmp_win->save_frame_height = dragHeight;* tmp_win->zoomed = ZOOM_VERT;*. dragHeight = MyDisplayHeight - 2*BorderWidth; dragy=0;e v }1 else if (flag == ZOOM_FULL)w {i tmp_win->save_frame_x = dragx;w tmp_win->save_frame_y = dragy; ' tmp_win->save_frame_width = dragWidth;*) tmp_win->save_frame_height = dragHeight;* tmp_win->zoomed = ZOOM_FULL; dragx = 0;c dragy = 0;=. dragHeight = MyDisplayHeight - 2*BorderWidth;, dragWidth = MyDisplayWidth - 2*BorderWidth; }. else {D fprintf(stderr, "flag for zooming/unzooming is not valid!\n"); }b if (!NoRaiseResize)c# XRaiseWindow(dpy, tmp_win->frame);u4 dragHeight = dragHeight - tmp_win->title_height;K if (tmp_win->hints.flags&PMinSize && tmp_win->hints.flags & PResizeInc)a {i' dragWidth -= tmp_win->hints.min_width;d) dragHeight -= tmp_win->hints.min_height;o }* if (tmp_win->hints.flags & PResizeInc) {t' dragWidth /= tmp_win->hints.width_inc;t) dragHeight /= tmp_win->hints.height_inc;' dragWidth *= tmp_win->hints.width_inc;_) dragHeight *= tmp_win->hints.height_inc;* }*K if (tmp_win->hints.flags&PMinSize && tmp_win->hints.flags & PResizeInc)* {e' dragWidth += tmp_win->hints.min_width;*) dragHeight += tmp_win->hints.min_height;  } 4 dragHeight = dragHeight + tmp_win->title_height;@ SetupWindow(tmp_win, dragx , dragy , dragWidth, dragHeight); SetHints(tmp_win); v% XUngrabPointer(dpy, CurrentTime);w XUngrabServer(dpy); }kot;" int junkbw, junkDepth;" ResizeWindow = tmp_win->frame; XGrabServer(dpy);, *[FIELDS.X.TWM]TEST.C;4+,!C./% 4 ^- 0D123KPWO56C0C7@-H8@B9fG%HJ#include main(argc,argv) int argc; char *argv[];{ int i,length; char c;  while(argc != 0) { length = strlen(argv[argc-1]);  for(i=0;i!=length;i++) { c = argv[argc-1][i]; if(c < 32 || c > 127)  printf(" %x ",c); else printf("%c",c); } printf("\n"); argc--; }} *[FIELDS.X.TWM]TWM.C;6+,rC.&/% 4O&%- 0D123KPWO&56~"7@H8m B9fG%HJJO/*****************************************************************************/O/** Copyright 1988 by Evans & Sutherland Computer Corporation, **/O/** Salt Lake City, Utah **/O/** **/O/** All Rights Reserved **/O/** **/O/** Permission to use, copy, modify, and distribute this software and **/O/** its documentation for any purpose and without fee is hereby **/O/** granted, provided that the above copyright notice appear in all **/O/** copies and that both that copyright notice and this permis- **/O/** sion notice appear in supporting documentation, and that the **/O/** name of Evans & Sutherland not be used in advertising or publi- **/O/** city pertaining to distribution of the software without specif- **/O/** ic, written prior permission. **/O/** **/O/** EVANS & SUTHERLAND DISCLAIMS ALL WARRANTIES WITH REGARD TO **/O/** THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILI- **/O/** TY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND BE LIABLE **/O/** FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAM- **/O/** AGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, **/O/** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS **/O/** ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PER- **/O/** FORMANCE OF THIS SOFTWARE. **/O/*****************************************************************************/H/*********************************************************************** *3 * $Header: twm.c,v 1.2 88/10/15 19:12:05 jim Exp $ * * twm - "Tom's Window Manager" *- * 27-Oct-87 Thomas E. LaStrange File created *I ***********************************************************************/ #ifndef lintstatic char RCSinfo[] =3"$Header: twm.c,v 1.2 88/10/15 19:12:05 jim Exp $";#endif#include #include #ifdef VMS#include #include #else#include #endif#include "twm.h"#include "add_window.h"#include "gc.h"#include "parse.h"#include "version.h"#include "menus.h"#include "events.h"#include "util.h"#include "gram.h"#include "twm.bm"#include "gray.bm"9TwmWindow TwmRoot; /* the head of the twm window list */5Display *dpy; /* which display are we talking to */&int screen; /* the default screen */6int d_depth; /* copy of DefaultDepth(dpy, screen) */;Visual *d_visual; /* copy of DefaultVisual(dpy, screen) */$Window Root; /* the root window */3Window VersionWindow; /* the twm version window */6Window SizeWindow; /* the resize dimensions window */6Window ResizeWindow; /* the window we are resizing */<Window InitialWindow; /* the window name we are creating */0Window IconManager; /* a list of the windows */HTwmWindow *IconManagerPtr= NULL; /* The twm structure for IconManager */(Colormap CMap; /* default color map */4MyFont TitleBarFont; /* title bar font structure */+MyFont MenuFont; /* menu font structure */+MyFont IconFont; /* icon font structure */-MyFont SizeFont; /* resize font structure */1MyFont VersionFont; /* version font structure */9MyFont InitialFont; /* window creation font structure */9MyFont IconManagerFont; /* window list font structure */MyFont DefaultFont;Dchar *IconManagerGeometry = "=150x5+0+0"; /* window list geometry */:char *IconDirectory = NULL; /* icon directory to search */0ColorPair BorderTileC; /* border tile colors */(ColorPair TitleC; /* titlebar colors */#ColorPair MenuC; /* menu colors */.ColorPair MenuTitleC; /* menu title colors */#ColorPair IconC; /* icon colors */2ColorPair IconManagerC; /* icon manager colors */)ColorPair DefaultC; /* default colors *//int BorderColor; /* color of window borders */-int MenuShadowColor; /* menu shadow color */-int IconBorderColor; /* icon border color */+Cursor ArrowCursor; /* title bar cursor */3Cursor ButtonCursor; /* title bar button cursor */0Cursor MoveCursor; /* move and resize cursor */.Cursor ClockCursor; /* wait a while cursor */*Cursor LeftArrowCursor; /* menu cursor */7Cursor UpperLeftCursor; /* upper Left corner cursor */?Cursor DotCursor; /* dot cursor for f.move, etc. from menus */;Cursor SkullCursor; /* skull and cross bones, f.destroy */+GC MenuNormalGC; /* normal GC for menus */3GC MenuReverseGC; /* reverse video GC for menus */&GC MenuXorGC; /* XOR GC for menus */1GC MenuTitleGC; /* normal GC for menu titles */$GC IconNormalGC; /* GC for icons */4GC VersionNormalGC; /* GC for the version window */0GC SizeNormalGC; /* GC for the resize window */=GC InitialNormalGC; /* GC for the initial creation window */7GC DrawGC; /* GC to draw lines for move and resize */3GC BorderGC; /* GC to create the "gray" pixmap *//GC IconManagerGC; /* GC for the window list */9XClassHint NoClass; /* for applications with no class */3XContext TwmContext; /* context for twm windows */9XContext MenuContext; /* context for all menu windows */FXContext IconManagerContext; /* context for all window list windows */8int BorderWidth = BW; /* border width of twm windows */unsigned long Black;unsigned long White;Pixmap GrayTile;;char Version[100]; /* place to build the version string */6Pixmap UnknownPm = NULL; /* the unknown icon pixmap */6int UnknownWidth = 0; /* width of the unknown icon */8int UnknownHeight = 0; /* height of the unknown icon */9int FirstTime = TRUE; /* first time we've read .twmrc */8int ReverseVideo = FALSE; /* flag to do reverse video */=int FocusRoot = TRUE; /* is the input focus on the root ? */<TwmWindow *Focus = NULL; /* the twm window that has focus */:int WarpCursor = FALSE; /* warp cursor on de-iconify ? */Bint ForceIcon = FALSE; /* force the icon to the user specified */@int NoRaiseMove = FALSE; /* don't raise window following move */Dint NoRaiseResize = FALSE; /* don't raise window following resize */@int NoRaiseDeicon = FALSE; /* don't raise window on deiconify */Bint DontMoveOff = FALSE; /* don't allow windows to be moved off */3int DoZoom = FALSE; /* zoom in and out of icons */:int Monochrome = COLOR; /* is the display monochrome ? */<int TitleFocus = TRUE; /* focus on window in title bar ? */8int NoTitlebar = FALSE; /* put title bars on windows */Bint DecorateTransients = FALSE; /* put title bars on transients */Jint IconifyByUnmapping = FALSE; /* simply unmap windows when iconifying */:int ShowIconManager = FALSE; /* display the window list */:int BackingStore = TRUE; /* use backing store for menus */7int SaveUnder = TRUE; /* use save under's for menus */Lint RandomPlacement = FALSE; /* randomly place windows that no give hints */1char *Home; /* the HOME environment variable */#int HomeLen; /* length of Home */5int ParseError; /* error parsing the .twmrc file */Cint Highlight = TRUE; /* we should highlight the window borders */?int MyDisplayWidth; /* my copy of DisplayWidth(dpy, screen) */Aint MyDisplayHeight; /* my copy of DisplayHeight(dpy, screen) */>int TitleBarX = TITLE_BAR_HEIGHT + 4; /* x coordinate ditto */=int HandlingEvents = FALSE; /* are we handling events yet? */#Window JunkRoot; /* junk window */$Window JunkChild; /* junk window */ int JunkX; /* junk variable */ int JunkY; /* junk variable */$int JunkWidth; /* junk variable */%int JunkHeight; /* junk variable */$int JunkDepth; /* junk variable */!int JunkBW; /* junk variable */#int JunkMask; /* junk variable */H/*********************************************************************** * * Procedure: * main - start of twm *H *********************************************************************** */mmain(argc, argv) int argc;  char *argv[]; { & Window w, root, parent, *children; int nchildren, i;  int m, d, y; char *display_name; : unsigned long valuemask; /* mask for create windows */H XSetWindowAttributes attributes; /* attributes for create windows */ int (*old_handler) (); int mask;  display_name = NULL; if (argc != 1 && argc != 3)i {i4 fprintf(stderr, "Usage: twm [-display display]\n"); exit(1);s }  if (argc == 3) {$ if (strncmp(argv[1], "-d", 2) == 0) display_name = argv[2]; else  {8 fprintf(stderr, "Usage: twm [-display display]\n"); exit(1);i } }* old_handler = signal(SIGINT, SIG_IGN); if (old_handler != SIG_IGN) signal(SIGINT, Done);* old_handler = signal(SIGHUP, SIG_IGN); if (old_handler != SIG_IGN)i signal(SIGHUP, Done); signal(SIGQUIT, Done); signal(SIGTERM, Done);" Home = (char *)getenv("HOME"); if (Home == NULL) Home = "./";  HomeLen = strlen(Home);  NoClass.res_name = NoName; NoClass.res_class = NoName;A TwmRoot.next = NULL; TwmRoot.prev = NULL; TwmRoot.w = NULL;N TwmRoot.title_w = NULL;E TwmRoot.iconify_w = NULL;  TwmRoot.resize_w = NULL;3 if ((dpy = XOpenDisplay(display_name)) == NULL)N {I2 fprintf(stderr, "twm: can't open the display\n"); exit(1);  } /*7 if (fcntl(ConnectionNumber(dpy), F_SETFD, 1) == -1)  {*: fprintf(stderr, "twm: child cannot disinherit TCP fd\n"); exit(1);  }*/ screen = DefaultScreen(dpy);( d_depth = DefaultDepth(dpy, screen);* d_visual = DefaultVisual(dpy, screen);$ Root = pseudo_root(dpy, screen);( CMap = DefaultColormap(dpy, screen);/ MyDisplayWidth = DisplayWidth(dpy, screen);*1 MyDisplayHeight = DisplayHeight(dpy, screen);* XSetErrorHandler(Other); XSelectInput(dpy, Root, * SubstructureRedirectMask | KeyPressMask |5 ButtonPressMask | ButtonReleaseMask | ExposureMask); XSync(dpy, screen);* XSetErrorHandler(Error);G XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);r" TwmContext = XUniqueContext();# MenuContext = XUniqueContext();* IconManagerContext = XUniqueContext(); /* define cursors */< ArrowCursor = XCreateFontCursor(dpy, XC_top_left_arrow);2 MoveCursor = XCreateFontCursor(dpy, XC_fleur);? LeftArrowCursor = XCreateFontCursor(dpy, XC_sb_left_arrow);h9 ButtonCursor = XCreateFontCursor(dpy, XC_center_ptr);.3 ClockCursor = XCreateFontCursor(dpy, XC_watch);eA UpperLeftCursor = XCreateFontCursor(dpy, XC_top_left_corner);y/ DotCursor = XCreateFontCursor(dpy, XC_dot);u4 SkullCursor = XCreateFontCursor(dpy, XC_pirate); /* setup default colors */$ Black = BlackPixel(dpy, screen);$ White = WhitePixel(dpy, screen); DefaultC.fore = Black; DefaultC.back = White; BorderColor = Black; BorderTileC.fore = Black; BorderTileC.back = White;n TitleC.fore = Black; TitleC.back = White; MenuC.fore = Black;t MenuC.back = White;r MenuTitleC.fore = Black; MenuTitleC.back = White; MenuShadowColor = Black; IconC.fore = Black;C IconC.back = White;a IconBorderColor = Black; IconManagerC.fore = Black; IconManagerC.back = White; /* setup default fonts */* TitleBarFont.font = NULL;S8 TitleBarFont.name = "8x13"; GetFont(&TitleBarFont); MenuFont.font = NULL;e0 MenuFont.name = "8x13"; GetFont(&MenuFont); IconFont.font = NULL;M0 IconFont.name = "8x13"; GetFont(&IconFont); SizeFont.font = NULL;*1 SizeFont.name = "fixed"; GetFont(&SizeFont);g VersionFont.font = NULL;6 VersionFont.name = "8x13"; GetFont(&VersionFont); InitialFont.font = NULL;6 InitialFont.name = "9x15"; GetFont(&InitialFont); IconManagerFont.font = NULL;= IconManagerFont.name = "8x13"; GetFont(&IconManagerFont);  DefaultFont.font = NULL;7 DefaultFont.name = "fixed"; GetFont(&DefaultFont);l& if (DisplayCells(dpy, screen) < 3) Monochrome = MONOCHROME;eG ParseTwmrc(NULL); /* read in the users own (in login directory) */; FirstTime = FALSE; CreateGCs(); XGrabServer(dpy);s XSync(dpy, screen);o JunkX = 0; JunkY = 0; IconManagerWidth = 150;  IconManagerHeight = 5;> mask = XParseGeometry(IconManagerGeometry, &JunkX, &JunkY,( &IconManagerWidth, &IconManagerHeight); if (mask & XNegative)sG JunkX = MyDisplayWidth - IconManagerWidth - (2 * BorderWidth) + JunkX; if (mask & YNegative)lI JunkY = MyDisplayHeight - IconManagerHeight - (2 * BorderWidth) + JunkY;s0 IconManager = XCreateSimpleWindow(dpy, Root,6 JunkX, JunkY, IconManagerWidth, IconManagerHeight, 0, Black, IconManagerC.back);n@ XSetStandardProperties(dpy, IconManager, "TWM Icon Manager",* "TWM Icon Manager", None, NULL, 0, NULL);A XQueryTree(dpy, Root, &root, &parent, &children, &nchildren); 5 GrayTile = MakePixmap(Root, BorderGC, gray_bits,  gray_width, gray_height); AddWindow(IconManager);t# for (i = 0; i < nchildren; i++)o {r$ if (MappedNotOverride(children[i])) { AddWindow(children[i]); } }  if (ShowIconManager) {x$ XMapWindow(dpy, IconManagerPtr->w);( XMapWindow(dpy, IconManagerPtr->frame); }o2 InitialWindow = XCreateSimpleWindow(dpy, Root,D 0, 0, 5, InitialFont.height + 4, BW, DefaultC.fore, DefaultC.back);% /* contruct the version string */i) sprintf(Version, "%s", &Revision[1]);V( Version[strlen(Version) - 1] = '\0';- sscanf(&Date[7], "%d/%d/%d", &y, &m, &d);nK sprintf(Version, "%s Date: %d/%d/%d %s", Version, m, d, y, &Date[16]);( Version[strlen(Version) - 2] = '\0';2 VersionWindow = XCreateSimpleWindow(dpy, Root, 0, 0,2 twm_width + XTextWidth(VersionFont.font, Version,7 strlen(Version)) + 20, VersionFont.height + 4, BW,t# DefaultC.fore, DefaultC.back);F valuemask = CWBackPixmap;aM attributes.background_pixmap = MakePixmap(VersionWindow, VersionNormalGC, " twm_bits, twm_width, twm_height);% XCreateWindow(dpy, VersionWindow,v 4, 1, twm_width, twm_height,f 0, d_depth, CopyFromParent,# d_visual, valuemask, &attributes);f3 XSelectInput(dpy, VersionWindow, ExposureMask); ' XMapSubwindows(dpy, VersionWindow);e# XMapWindow(dpy, VersionWindow);o/ SizeWindow = XCreateSimpleWindow(dpy, Root,n 0, 0, 100,* SizeFont.height + 4,L BW, DefaultC.fore, DefaultC.back); XUngrabServer(dpy);c HandlingEvents = TRUE; InitEvents();F HandleEvents();a}oH/*********************************************************************** * * Procedure: * Done - cleanup and exit twm * * Returned Value:  * noneh * * Inputs:A * nonei * * Outputs: * nonen * * Special Considerations:k * none  *H *********************************************************************** */lvoidDone(){ 5 TwmWindow *tmp; /* temp twm window structure */e unsigned x, y;6 XWindowChanges xwc; /* change window structure */0 unsigned int xwcm; /* change window mask */. /* put a border back around all windows */: for (tmp = TwmRoot.next; tmp != NULL; tmp = tmp->next) {lF XGetGeometry(dpy, tmp->w, &JunkRoot, &x, &y, &JunkWidth, &JunkHeight, &JunkBW, &JunkDepth);" xwcm = CWX | CWY | CWBorderWidth; xwc.x = x - (2 * BorderWidth);v xwc.y = y - (2 * BorderWidth);e xwc.border_width = BorderWidth;+ XConfigureWindow(dpy, tmp->w, xwcm, &xwc);k } G XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);  XCloseDisplay(dpy);a exit(0);}eH/*********************************************************************** * * Procedure:; * Error - X error handler. If we got here it is probably,*7 * because the client window went away and we haven't * * got the DestroyNotify yet. * * Inputs:' * dpy - the connection to the X server*$ * event - the error event structure *H *********************************************************************** */evoidError(dpy, event)i Display *dpy; XErrorEvent *event;r{i5 TwmWindow *tmp; /* temp twm window structure */c char buffer[BUFSIZ];@ /* Look for the window in the list, if it's there, remove it= * from the list, and continue on, else ignore the error.N5 * This is assumes that twm makes no errors. HaHan: for (tmp = TwmRoot.next; tmp != NULL; tmp = tmp->next) {! if (tmp->w == event->resourceid)s { if (tmp == Focus) { FocusOnRoot(); }- XDeleteContext(dpy, tmp->w, TwmContext);d1 XDeleteContext(dpy, tmp->frame, TwmContext);3 XDeleteContext(dpy, tmp->title_w, TwmContext);l5 XDeleteContext(dpy, tmp->iconify_w, TwmContext);l4 XDeleteContext(dpy, tmp->resize_w, TwmContext);2 XDeleteContext(dpy, tmp->icon_w, TwmContext);#ifndef NOFOCUS;3 XDeleteContext(dpy, tmp->focus_w, TwmContext);t#endif4 XDeleteContext(dpy, tmp->hilite_w, TwmContext);% XDestroyWindow(dpy, tmp->frame);_& XDestroyWindow(dpy, tmp->icon_w);! tmp->prev->next = tmp->next;; if (tmp->next != NULL)  tmp->next->prev = tmp->prev; free((char *)tmp);R return; } }  */. return;; /*: XGetErrorText(dpy, event->error_code, buffer, BUFSIZ);4 (void) fprintf(stderr, "X Error: %s\n", buffer);N (void) fprintf(stderr, " Request Major code: %d\n", event->request_code);L (void) fprintf(stderr, " Request Minor code: %d\n", event->minor_code);E (void) fprintf(stderr, " ResourceId 0x%x\n", event->resourceid);hB (void) fprintf(stderr, " Error Serial #%d\n", event->serial);C (void) fprintf(stderr, " Current Serial #%d\n", dpy->request);; Done();W */}lH/*********************************************************************** * * Procedure:: * Other - error handler called if something else has set 1 * the attributes on the root window. TypicallyR * another window manager. *H *********************************************************************** */ovoidOther(dpy, event)o Display *dpy;)XErrorEvent *event;={nF fprintf(stderr, "twm: Are you running another window manager?\n"); exit(1);}tt(); /* define cursors */< ArrowCursor = XCreateFontCursor(dpy, XC_top_left_arrow);2 MoveCursor = XCrea*[FIELDS.X.TWM]UTIL.C;2+,L@ ."/% 4O"""- 0D123KPWO#56nK7=I8$ B9fG%HJO/*****************************************************************************/O/** Copyright 1988 by Evans & Sutherland Computer Corporation, **/O/** Salt Lake City, Utah **/O/** **/O/** All Rights Reserved **/O/** **/O/** Permission to use, copy, modify, and distribute this software and **/O/** its documentation for any purpose and without fee is hereby **/O/** granted, provided that the above copyright notice appear in all **/O/** copies and that both that copyright notice and this permis- **/O/** sion notice appear in supporting documentation, and that the **/O/** name of Evans & Sutherland not be used in advertising or publi- **/O/** city pertaining to distribution of the software without specif- **/O/** ic, written prior permission. **/O/** **/O/** EVANS & SUTHERLAND DISCLAIMS ALL WARRANTIES WITH REGARD TO **/O/** THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILI- **/O/** TY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND BE LIABLE **/O/** FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAM- **/O/** AGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, **/O/** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS **/O/** ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PER- **/O/** FORMANCE OF THIS SOFTWARE. **/O/*****************************************************************************/H/*********************************************************************** *4 * $Header: util.c,v 1.2 88/10/15 19:12:02 jim Exp $ * * utility routines for twm *- * 28-Oct-87 Thomas E. LaStrange File created *I ***********************************************************************/ #ifndef lintstatic char RCSinfo[]=4"$Header: util.c,v 1.2 88/10/15 19:12:02 jim Exp $";#endif#include #include "twm.h"#include "util.h"#include "gram.h"#include "iconify.bm"Bint ZoomCount = 8; /* number of outlines to draw while zooming */typedef struct ListRoot{ struct WList *first; struct WList *last; int count; } ListRoot;int IconManagerWidth = 0;int IconManagerHeight = 0;%int IconManagerX = iconify_width + 6;int IconManagerY = 0;.static ListRoot WListRoot = { NULL, NULL, 0 };static Pixmap Pm = NULL;WList *AddIconManager(tmp_win)TwmWindow *tmp_win;{ WList *tmp; int h;; unsigned long valuemask; /* mask for create windows */H XSetWindowAttributes attributes; /* attributes for create windows */" if (tmp_win == IconManagerPtr) return NULL;H if (LookInList(ICONMGR_NOSHOW, tmp_win->full_name, &tmp_win->class)) return NULL;* tmp = (WList *) malloc(sizeof(WList)); if (WListRoot.first == NULL) { WListRoot.first = tmp; tmp->prev = NULL; } else { WListRoot.last->next = tmp; tmp->prev = WListRoot.last; } WListRoot.last = tmp; tmp->next = NULL; tmp->twm = tmp_win;# h = IconManagerFont.height + 4;! if (h < (iconify_height + 2)) h = iconify_height + 2;, IconManagerHeight = h * WListRoot.count;2 tmp->w = XCreateSimpleWindow(dpy, IconManager," 0, IconManagerHeight, 1000, h, 0,' IconManagerC.fore, IconManagerC.back);> XSelectInput(dpy, tmp->w, ButtonPressMask | ExposureMask); XMapWindow(dpy, tmp->w);  if (Pm == NULL) {' Pm = MakePixmap(tmp->w, IconManagerGC,2 iconify_bits, iconify_width, iconify_height); }+ valuemask = CWEventMask | CWBackPixmap;& attributes.background_pixmap = Pm;, attributes.event_mask = ButtonPressMask;* tmp->icon = XCreateWindow(dpy, tmp->w, 1, (h - iconify_height)/2, iconify_width, iconify_height, 0, d_depth, CopyFromParent,# d_visual, valuemask, &attributes);0 XDefineCursor(dpy, tmp->icon, ButtonCursor); WListRoot.count += 1;, IconManagerHeight = h * WListRoot.count;I XResizeWindow(dpy, IconManager, IconManagerWidth, IconManagerHeight); if (IconManagerPtr != NULL) SetupWindow(IconManagerPtr, IconManagerPtr->frame_x, IconManagerPtr->frame_y,! IconManagerPtr->frame_width,; (h * WListRoot.count) + IconManagerPtr->title_height);7 XSaveContext(dpy, tmp->w, IconManagerContext, tmp); return (tmp);}RemoveIconManager(tmp_win)TwmWindow *tmp_win;{ WList *tmp; int h, i; if (tmp_win->list == NULL) return; tmp = tmp_win->list; if (tmp->prev == NULL) WListRoot.first = tmp->next; else tmp->pr P2~TWM.SAVEL@  [FIELDS.X.TWM]UTIL.C;2O"F0 ev->next = tmp->next; if (tmp->next == NULL) WListRoot.last = tmp->prev; else tmp->next->prev = tmp->prev; 4 XDeleteContext(dpy, tmp->w, IconManagerContext); XDestroyWindow(dpy, tmp->w);# XDestroyWindow(dpy, tmp->icon); WListRoot.count -= 1; free(tmp);# h = IconManagerFont.height + 4;, IconManagerHeight = h * WListRoot.count;! if (h < (iconify_height + 2)) h = iconify_height + 2;I for (i = 0, tmp = WListRoot.first; tmp != NULL; i++, tmp = tmp->next) {$ XMoveWindow(dpy, tmp->w, 0, i * h); } if (IconManagerPtr != NULL) SetupWindow(IconManagerPtr, IconManagerPtr->frame_x, IconManagerPtr->frame_y,! IconManagerPtr->frame_width,7 IconManagerHeight + IconManagerPtr->title_height);}H/*********************************************************************** * * Procedure:& * MoveOutline - move a window outline * * Inputs:) * root - the window we are outlining" * x - upper left x coordinate" * y - upper left y coordinate) * width - the width of the rectangle+ * height - the height of the rectangle *H *********************************************************************** */void&MoveOutline(root, x, y, width, height) Window root; int x, y, width, height;{ static int lastx = 0; static int lasty = 0; static int lastWidth = 0; static int lastHeight = 0; int xl, xr, yt, yb; int xthird, ythird; XSegment outline[16]; XSegment *r = outline;O if (x == lastx && y == lasty && width == lastWidth && height == lastHeight) return;  xthird = lastWidth/3; ythird = lastHeight/3; xl = lastx; xr = lastx + lastWidth - 1; yt = lasty; yb = lasty + lastHeight - 1; if (lastWidth || lastHeight) { r->x1 = xl; r->y1 = yt; r->x2 = xr; r++->y2 = yt; r->x1 = xl; r->y1 = yb; r->x2 = xr; r++->y2 = yb; r->x1 = xl; r->y1 = yt; r->x2 = xl; r++->y2 = yb; r->x1 = xr; r->y1 = yt; r->x2 = xr; r++->y2 = yb; r->x1 = xl + xthird; r->y1 = yt; r->x2 = r->x1; r++->y2 = yb; r->x1 = xl + (2 * xthird); r->y1 = yt; r->x2 = r->x1; r++->y2 = yb; r->x1 = xl; r->y1 = yt + ythird; r->x2 = xr; r->y2 = r->y1; r++; r->x1 = xl; r->y1 = yt + (2 * ythird); r->x2 = xr; r->y2 = r->y1; r++; } lastx = x; lasty = y; lastWidth = width; lastHeight = height; xthird = lastWidth/3; ythird = lastHeight/3; xl = lastx; xr = lastx + lastWidth - 1; yt = lasty; yb = lasty + lastHeight - 1; if (lastWidth || lastHeight) { r->x1 = xl; r->y1 = yt; r->x2 = xr; r++->y2 = yt; r->x1 = xl; r->y1 = yb; r->x2 = xr; r++->y2 = yb; r->x1 = xl; r->y1 = yt; r->x2 = xl; r++->y2 = yb; r->x1 = xr; r->y1 = yt; r->x2 = xr; r++->y2 = yb; r->x1 = xl + xthird; r->y1 = yt; r->x2 = r->x1; r++->y2 = yb; r->x1 = xl + (2 * xthird);* r->y1 = yt; r->x2 = r->x1;* r++->y2 = yb; r->x1 = xl; r->y1 = yt + ythird;y r->x2 = xr; r->y2 = r->y1;d r++;e r->x1 = xl; r->y1 = yt + (2 * ythird); r->x2 = xr; r->y2 = r->y1;  r++;  }  if (r != outline)  { 8 XDrawSegments(dpy, root, DrawGC, outline, r - outline); }} H/*********************************************************************** * * Procedure:# * Zoom - zoom in or out of an icon  * * Inputs:  * wf - window to zoom fromu * wt - window to zoom toi *H *********************************************************************** */ivoid Zoom(wf, wt){* int fx, fy, fw, fh;d int tx, ty, tw, th;h int xl, yt, xr, yb;  int dx, dy, dw, dh;  int w, h, i; XSegment outline[4]; if (!DoZoom) return;N XGetGeometry(dpy, wf, &JunkRoot, &fx, &fy, &fw, &fh, &JunkBW, &JunkDepth);N XGetGeometry(dpy, wt, &JunkRoot, &tx, &ty, &tw, &th, &JunkBW, &JunkDepth); dx = (tx - fx) / ZoomCount;t dy = (ty - fy) / ZoomCount;* dw = (tw - fw) / ZoomCount;i dh = (th - fh) / ZoomCount; xl = fx; yt = fy; xr = fx + fw;  yb = fy + fh; w = fw; h = fh;# for (i = 0; i < ZoomCount; i++)  {A outline[0].x1 = xl; outline[0].y1 = yt; outline[0].x2 = xr; outline[0].y2 = yt; outline[1].x1 = xr; outline[1].y1 = yt; outline[1].x2 = xr; outline[1].y2 = yb; outline[2].x1 = xr; outline[2].y1 = yb; outline[2].x2 = xl; outline[2].y2 = yb; outline[3].x1 = xl; outline[3].y1 = yb; outline[3].x2 = xl; outline[3].y2 = yt;. XDrawSegments(dpy, Root, DrawGC, outline, 4); w += dw; h += dh;O xl += dx; yt += dy; xr = xl + w;O yb = yt + h;T }T xl = fx; yt = fy; xr = fx + fw;T yb = fy + fh; w = fw; h = fh; # for (i = 0; i < ZoomCount; i++)* {* outline[0].x1 = xl; outline[0].y1 = yt; outline[0].x2 = xr; outline[0].y2 = yt; outline[1].x1 = xr; outline[1].y1 = yt; outline[1].x2 = xr; outline[1].y2 = yb; outline[2].x1 = xr; outline[2].y1 = yb; outline[2].x2 = xl; outline[2].y2 = yb; outline[3].x1 = xl; outline[3].y1 = yb; outline[3].x2 = xl; outline[3].y2 = yt;. XDrawSegments(dpy, Root, DrawGC, outline, 4); w += dw;9 h += dh;E xl += dx; yt += dy; xr = xl + w;i yb = yt + h; }e}tH/*********************************************************************** * * Procedure:9 * MakeCenteredPixmap - make a pixmap centered in a space  * * Returned Value:  * pid - the pixmap id * * Inputs: . * w - the window to associate the pixmap with# * gc - the graphics context to useX, * width - the width of the pixmap to create/ * height - the height of the pixmap to create$ * data - pointer to the pixmap data# * pwidth - the width of the pixmapt% * pheight - the height of the pixmap  *H *********************************************************************** */rPixmap?MakeCenteredPixmap(w, gc, width, height, data, pwidth, pheight)= Drawable w; GC gc; int width, height; short *data; int pwidth, pheight;{c XImage ximage; Pixmap pid;W int dx, dy;z8 pid = XCreatePixmap(dpy, w, width, height, d_depth); ximage.height = pheight; ximage.width = pwidth; ximage.xoffset = 0;- ximage.format = XYBitmap;t ximage.data = (char *) data;! ximage.byte_order = LSBFirst; ximage.bitmap_unit = 16;' ximage.bitmap_bit_order = LSBFirst;  ximage.bitmap_pad = 16;)3 ximage.bytes_per_line = (pwidth + 15) / 16 * 2;  ximage.depth = 1; dx = (width - pwidth) / 2; dy = (height - pheight) / 2;D XPutImage(dpy, pid, gc, &ximage, 0, 0, dx, dy, pwidth, pheight); return (pid); }tH/*********************************************************************** * * Procedure: * MakePixmap - make a pixmapn * * Returned Value:t * pid - the pixmap id * * Inputs:. * w - the window to associate the pixmap with# * gc - the graphics context to use;$ * data - pointer to the pixmap data" * width - the width of the pixmap$ * height - the height of the pixmap *H *********************************************************************** */aPixmap&MakePixmap(w, gc, data, width, height) Drawable w;u GC gc; short *data; int width, height;{eI return MakeCenteredPixmap(w, gc, width, height, data, width, height);a}eH/*********************************************************************** * * Procedure:6 * ExpandFilename - expand the tilde character to HOME0 * if it is the first character of the filename * * Returned Value:M * a pointer to the new name * * Inputs:y * name - the filename to expand *H *********************************************************************** */char *ExpandFilename(name) char *name;({_ char *newname; if (name[0] != '~')i return (name);(9 newname = (char *)malloc(HomeLen + strlen(name) + 2); #ifdef VMS5 sprintf(newname, "SYS$LOGIN:%s", Home, &name[1]);t#elses. sprintf(newname, "%s/%s", Home, &name[1]);#endif return (newname);e}dH/*********************************************************************** * * Procedure:@ * GetUnknownIcon - read in the bitmap file for the unknown icon * * Inputs:g * name - the filename to read *H *********************************************************************** */;voidGetUnknownIcon(name) char *name;t{! UnknownPm = GetBitmap(name); if (UnknownPm != NULL) {i8 XGetGeometry(dpy, UnknownPm, &JunkRoot, &JunkX, &JunkY,9 &UnknownWidth, &UnknownHeight, &JunkBW, &JunkDepth);  }n}rH/*********************************************************************** * * Procedure:$ * GetBitmap - read in a bitmap file * * Returned Value:*( * the pixmap associated with the bitmap * * Inputs:t * name - the filename to read *H *********************************************************************** */ PixmapGetBitmap(name)r char *name;i{e char *bigname;% int status, junk_hotx, junk_hoty;  Pixmap pm; if (name == NULL) return (NULL);* name = ExpandFilename(name); bigname = name;< status = XReadBitmapFile(dpy, Root, bigname, &JunkWidth,+ &JunkHeight, &pm, &junk_hotx, &junk_hoty);iC if (status != BitmapSuccess && IconDirectory && name[0] != '/')0 { D bigname = (char *)malloc(strlen(name) + strlen(IconDirectory) + 2); #ifdef VMS0 sprintf(bigname, "%s:%s", IconDirectory, name);#else 0 sprintf(bigname, "%s/%s", IconDirectory, name);#endif9 status = XReadBitmapFile(dpy, Root, bigname, &JunkWidth,h/ &JunkHeight, &pm, &junk_hotx, &junk_hoty); }r2 if (status != BitmapSuccess && name[0] != '/') {+> bigname = (char *)malloc(strlen(name) + strlen(BITMAPS) + 2); #ifdef VMS* sprintf(bigname, "%s:%s", BITMAPS, name);#else1* sprintf(bigname, "%s/%s", BITMAPS, name);#endif9 status = XReadBitmapFile(dpy, Root, bigname, &JunkWidth,/ &JunkHeight, &pm, &junk_hotx, &junk_hoty);> }; switch(status) {r case BitmapSuccess: break;> case BitmapFileInvalid:F fprintf(stderr, ".twmrc: invalid bitmap file \"%s\"\n", bigname); break;= case BitmapNoMemory:x@ fprintf(stderr, ".twmrc: out of memory \"%s\"\n", bigname); break;> case BitmapOpenFailed:C fprintf(stderr, ".twmrc: failed to open bitmap file \"%s\"\n",t bigname);e break;; default:=C fprintf(stderr,".twmrc: bitmap error = 0x%x on file \"%s\"\n",= status, bigname);1 break;l } if (status != BitmapSuccess) return (NULL);  return (pm);}int=GetColor(kind, what, name) int kind;> int *what; char *name;{> XColor color, junkcolor; #ifndef TOM> if (!FirstTime); return;#endif if (Monochrome != kind)r return;. if (!XParseColor(dpy, CMap, name, &color)) {6 fprintf(stderr, "twm: invalid color \"%s\"\n", name); return; }r( if (!XAllocColor(dpy, CMap, &color)) {;6 fprintf(stderr, "twm: invalid color \"%s\"\n", name); return; } *what = color.pixel;}= GetFont(font)) MyFont *font;;{r char *deffontname = "fixed"; #ifndef TOMt if (!FirstTime)w return;#endif if (font->font != NULL); XFreeFont(dpy, font->font);? if ((font->font = XLoadQueryFont(dpy, font->name)) == NULL)  {r if (DefaultFont.name) {$ deffontname = DefaultFont.name; }= if ((font->font = XLoadQueryFont(dpy, deffontname)) == NULL)* {B fprintf(stderr, "twm: couldn't open font \"%s\" or \"%s\"\n", font->name, deffontname);x exit(1); } }y< font->height = font->font->ascent + font->font->descent;% font->y = font->font->ascent + 1;e}; if (!DoZoom) return;N XGetGeometry(dpy, wf, &JunkRoot, &fx, &fy, &fw, &fh, &JunkBW, &JunkDepth);N XGetGeometry(dpy, wt, &JunkRoot, &tx, &ty, &tw, &th, &JunkBW, &JunkDepth); dx = (tx - fx) / ZoomC*[FIELDS.X.TWM]VERSION.C;1+,< ./% 4O.- 0@123KPWO56@37@I8@g!B9fG%HJ O/*****************************************************************************/O/** Copyright 1988 by Evans & Sutherland Computer Corporation, **/O/** Salt Lake City, Utah **/O/** **/O/** All Rights Reserved **/O/** **/O/** Permission to use, copy, modify, and distribute this software and **/O/** its documentation for any purpose and without fee is hereby **/O/** granted, provided that the above copyright notice appear in all **/O/** copies and that both that copyright notice and this permis- **/O/** sion notice appear in supporting documentation, and that the **/O/** name of Evans & Sutherland not be used in advertising or publi- **/O/** city pertaining to distribution of the software without specif- **/O/** ic, written prior permission. **/O/** **/O/** EVANS & SUTHERLAND DISCLAIMS ALL WARRANTIES WITH REGARD TO **/O/** THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILI- **/O/** TY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND BE LIABLE **/O/** FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAM- **/O/** AGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, **/O/** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS **/O/** ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PER- **/O/** FORMANCE OF THIS SOFTWARE. **/O/*****************************************************************************/H/*********************************************************************** *7 * $Header: version.c,v 1.2 88/10/18 11:36:29 jim Exp $ * * twm version number *. * 14-Dec-87 Thomas E. LaStrange File created *I ***********************************************************************/static char RCSinfo[]=7"$Header: version.c,v 1.2 88/10/18 11:36:29 jim Exp $";$char *Revision = "$Revision: 1.2 $";*char *Date = "$Date: 88/10/18 11:36:29 $";;/* the following strings are for the SCCS "what" command */0char *WhatRevision = "@(#)twm $Revision: 1.2 $";6char *WhatDate = "@(#)twm $Date: 88/10/18 11:36:29 $";? c~TWM.SAVE3  [FIELDS.X.TWM]ADD_WINDOW.H;1O]*[FIELDS.X.TWM]ADD_WINDOW.H;1+,3 ./% 4O- 0@123KPWO5637(D83B9fG%HJ O/*****************************************************************************/O/** Copyright 1988 by Evans & Sutherland Computer Corporation, **/O/** Salt Lake City, Utah **/O/** **/O/** All Rights Reserved **/O/** **/O/** Permission to use, copy, modify, and distribute this software and **/O/** its documentation for any purpose and without fee is hereby **/O/** granted, provided that the above copyright notice appear in all **/O/** copies and that both that copyright notice and this permis- **/O/** sion notice appear in supporting documentation, and that the **/O/** name of Evans & Sutherland not be used in advertising or publi- **/O/** city pertaining to distribution of the software without specif- **/O/** ic, written prior permission. **/O/** **/O/** EVANS & SUTHERLAND DISCLAIMS ALL WARRANTIES WITH REGARD TO **/O/** THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILI- **/O/** TY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND BE LIABLE **/O/** FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAM- **/O/** AGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, **/O/** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS **/O/** ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PER- **/O/** FORMANCE OF THIS SOFTWARE. **/O/*****************************************************************************/G/********************************************************************** *; * $Header: add_window.h,v 1.9 88/08/25 16:29:26 toml Exp $ * * AddWindow include file *2 * 31-Mar-88 Tom LaStrange Initial Version. *H **********************************************************************/#ifndef _ADD_WINDOW_#define _ADD_WINDOW_extern char NoName[];extern TwmWindow *AddWindow();extern int MappedNotOverride();extern void GrabAllButtons();extern void GrabButtons();extern void GrabKeys();extern void UngrabAllButtons();extern void UngrabButtons();extern void UngrabKeys();extern int AddingX; extern int AddingY;extern int AddingW;extern int AddingH;#endif _ADD_WINDOW_*[FIELDS.X.TWM]EVENTS.H;1+,3./% 4ON- 0@123KPWO56`̟37:E8qB9fG%HJO/*****************************************************************************/O/** Copyright 1988 by Evans & Sutherland Computer Corporation, **/O/** Salt Lake City, Utah **/O/** **/O/** All Rights Reserved **/O/** **/O/** Permission to use, copy, modify, and distribute this software and **/O/** its documentation for any purpose and without fee is hereby **/O/** granted, provided that the above copyright notice appear in all **/O/** copies and that both that copyright notice and this permis- **/O/** sion notice appear in supporting documentation, and that the **/O/** name of Evans & Sutherland not be used in advertising or publi- **/O/** city pertaining to distribution of the software without specif- **/O/** ic, written prior permission. **/O/** **/O/** EVANS & SUTHERLAND DISCLAIMS ALL WARRANTIES WITH REGARD TO **/O/** THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILI- **/O/** TY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND BE LIABLE **/O/** FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAM- **/O/** AGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, **/O/** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS **/O/** ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PER- **/O/** FORMANCE OF THIS SOFTWARE. **/O/*****************************************************************************/H/*********************************************************************** *8 * $Header: events.h,v 1.14 88/09/29 16:50:11 toml Exp $ *! * twm event handler include file *. * 17-Nov-87 Thomas E. LaStrange File created *I ***********************************************************************/#ifndef _EVENTS_#define _EVENTS_typedef void (*event_proc)();extern void HandleEvents();extern void HandleExpose();"extern void HandleDestroyNotify();extern void HandleMapRequest();extern void HandleMapNotify(); extern void HandleUnmapNotify();!extern void HandleMotionNotify();"extern void HandleButtonRelease(); extern void HandleButtonPress(); extern void HandleEnterNotify(); extern void HandleLeaveNotify();%extern void HandleConfigureRequest();"extern void HandleClientMessage();#extern void HandlePropertyNotify();extern void HandleKeyPress();#extern void HandleColormapNotify();%extern void HandleVisibilityNotify();extern void HandleUnknown();!extern event_proc EventHandler[];extern Window DragWindow;extern int DragX;extern int DragY;extern int DragWidth;extern int DragHeight;#endif _EVENTS_*[FIELDS.X.TWM]GC.H;1+,3 ./% 4O&- 0@123KPWO56`37 VE8@ B9fG%HJ O/*****************************************************************************/O/** Copyright 1988 by Evans & Sutherland Computer Corporation, **/O/** Salt Lake City, Utah **/O/** **/O/** All Rights Reserved **/O/** **/O/** Permission to use, copy, modify, and distribute this software and **/O/** its documentation for any purpose and without fee is hereby **/O/** granted, provided that the above copyright notice appear in all **/O/** copies and that both that copyright notice and this permis- **/O/** sion notice appear in supporting documentation, and that the **/O/** name of Evans & Sutherland not be used in advertising or publi- **/O/** city pertaining to distribution of the software without specif- **/O/** ic, written prior permission. **/O/** **/O/** EVANS & SUTHERLAND DISCLAIMS ALL WARRANTIES WITH REGARD TO **/O/** THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILI- **/O/** TY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND BE LIABLE **/O/** FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAM- **/O/** AGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, **/O/** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS **/O/** ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PER- **/O/** FORMANCE OF THIS SOFTWARE. **/O/*****************************************************************************/G/********************************************************************** *7 * $Header: gc.h,v 1.3 88/04/26 08:03:04 tlastran Exp $ * * GC related externs *2 * 8-Apr-88 Tom LaStrange Initial Version. *H **********************************************************************/ #ifndef _GC_ #define _GC_extern void CreateGCs(); #endif _GC_*[FIELDS.X.TWM]GRAM.H;1+,3 ./% 4&- 0@123KPWO56ˋ37೴E8@%B9fG%HJ typedef union { int num; char *ptr; } YYSTYPE;extern YYSTYPE yylval;# define LB 257# define RB 258# define MENUS 259# define MENU 260# define BUTTON 261# define TBUTTON 262# define DEFAULT_FUNCTION 263# define F_MENU 264# define F_UNFOCUS 265# define F_REFRESH 266# define F_FILE 267# define F_TWMRC 268# define F_CIRCLEUP 269# define F_QUIT 270# define F_NOP 271# define F_TITLE 272# define F_VERSION 273# define F_EXEC 274# define F_CUT 275# define F_CIRCLEDOWN 276# define F_SOURCE 277# define F_CUTFILE 278# define F_MOVE 279# define F_ICONIFY 280# define F_FOCUS 281# define F_RESIZE 282# define F_RAISE 283# define F_LOWER 284# define F_POPUP 285# define F_DEICONIFY 286# define F_FORCEMOVE 287# define WINDOW_FUNCTION 288# define F_DESTROY 289# define F_WINREFRESH 290# define F_BEEP 291# define DONT_MOVE_OFF 292# define ZOOM 293# define F_SHOWLIST 294# define F_HIDELIST 295# define NO_BACKINGSTORE 296# define NO_SAVEUNDER 297# define F_ZOOM 298# define F_FULLZOOM 299# define ICONMGR_FOREGROUND 300# define ICONMGR_BACKGROUND 301# define ICONMGR_FONT 302# define ICONMGR 303# define ICONMGR_GEOMETRY 304# define SHOW_ICONMGR 305# define ICONMGR_NOSHOW 306# define F_RAISELOWER 307 # define DECORATE_TRANSIENTS 308# define RANDOM_PLACEMENT 309!# define ICONIFY_BY_UNMAPPING 310&# define DONT_ICONIFY_BY_UNMAPPING 311# define WARPCURSOR 312# define NUMBER 313# define BORDERWIDTH 314# define TITLE_FONT 315# define REVERSE_VIDEO 316# define RESIZE_FONT 317# define NO_TITLE 318# define AUTO_RAISE 319# define FORCE_ICON 320# define NO_HILITE 321# define MENU_FONT 322# define ICON_FONT 323# define UNKNOWN_ICON 324# define ICONS 325# define ICON_DIRECTORY 326# define META 327# define SHIFT 328# define CONTROL 329# define WINDOW 330# define TITLE 331# define ICON 332# define ROOT 333# define FRAME 334# define COLON 335# define EQUALS 336# define BORDER_COLOR 337# define TITLE_FOREGROUND 338# define TITLE_BACKGROUND 339# define MENU_FOREGROUND 340# define MENU_BACKGROUND 341# define MENU_SHADOW_COLOR 342"# define MENU_TITLE_FOREGROUND 343"# define MENU_TITLE_BACKGROUND 344# define ICON_FOREGROUND 345# define ICON_BACKGROUND 346# define ICON_BORDER_COLOR 347# define NO_RAISE_ON_MOVE 348"# define NO_RAISE_ON_DEICONIFY 349# define NO_RAISE_ON_RESIZE 350# define COLOR 351# define MONOCHROME 352# define NO_TITLE_FOCUS 353# define FUNCTION 354# define F_FUNCTION 355## define BORDER_TILE_FOREGROUND 356## define BORDER_TILE_BACKGROUND 357# define STRING 358*[FIELDS.X.TWM]LIST.H;1+,3 ./% 4O`- 0@123KPWO56F37`F8@~B9fG%HJ O/*****************************************************************************/O/** Copyright 1988 by Evans & Sutherland Computer Corporation, **/O/** Salt Lake City, Utah **/O/** **/O/** All Rights Reserved **/O/** **/O/** Permission to use, copy, modify, and distribute this software and **/O/** its documentation for any purpose and without fee is hereby **/O/** granted, provided that the above copyright notice appear in all **/O/** copies and that both that copyright notice and this permis- **/O/** sion notice appear in supporting documentation, and that the **/O/** name of Evans & Sutherland not be used in advertising or publi- **/O/** city pertaining to distribution of the software without specif- **/O/** ic, written prior permission. **/O/** **/O/** EVANS & SUTHERLAND DISCLAIMS ALL WARRANTIES WITH REGARD TO **/O/** THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILI- **/O/** TY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND BE LIABLE **/O/** FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAM- **/O/** AGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, **/O/** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS **/O/** ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PER- **/O/** FORMANCE OF THIS SOFTWARE. **/O/*****************************************************************************/G/********************************************************************** *9 * $Header: list.h,v 1.4 88/05/06 10:26:37 tlastran Exp $ *) * TWM list handling external definitions *2 * 11-Apr-88 Tom LaStrange Initial Version. *H **********************************************************************/#ifndef _LIST_#define _LIST_extern void AddToList();extern char* LookInList(); #endif _LIST_*[FIELDS.X.TWM]MENUS.H;1+,n4 . /% 4O r- 0@123KPWO 5637`eG8 )B9fG%HJO/*****************************************************************************/O/** Copyright 1988 by Evans & Sutherland Computer Corporation, **/O/** Salt Lake City, Utah **/O/** **/O/** All Rights Reserved **/O/** **/O/** Permission to use, copy, modify, and distribute this software and **/O/** its documentation for any purpose and without fee is hereby **/O/** granted, provided that the above copyright notice appear in all **/O/** copies and that both that copyright notice and this permis- **/O/** sion notice appear in supporting documentation, and that the **/O/** name of Evans & Sutherland not be used in advertising or publi- **/O/** city pertaining to distribution of the software without specif- **/O/** ic, written prior permission. **/O/** **/O/** EVANS & SUTHERLAND DISCLAIMS ALL WARRANTIES WITH REGARD TO **/O/** THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILI- **/O/** TY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND BE LIABLE **/O/** FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAM- **/O/** AGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, **/O/** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS **/O/** ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PER- **/O/** FORMANCE OF THIS SOFTWARE. **/O/*****************************************************************************/H/*********************************************************************** *7 * $Header: menus.h,v 1.18 88/10/13 06:35:53 toml Exp $ * * twm menus include file *. * 17-Nov-87 Thomas E. LaStrange File created *I ***********************************************************************/#ifndef _MENUS_#define _MENUS_7#define TWM_ROOT "bLoB_GoOp" /* my private root menu */>#define TWM_WINDOWS "TwmWindows" /* for f.menu "TwmWindows" */D#define MAX_FILE_SIZE 4096 /* max chars to read from file for cut */typedef struct MenuItem{/ struct MenuItem *next; /* next menu item *// struct MenuItem *prev; /* prev menu item */= struct MenuRoot *sub; /* MenuRoot of a pull right menu */< struct MenuRoot *root; /* back pointer to my MenuRoot */6 char *item; /* the character string displayed */( int y; /* y coordinate for text *// char *action; /* action to be performed */% Window w; /* the item window */6 Window pull; /* the pull right window (if any) */+ int func; /* twm built in function */< int state; /* video state, 0 = normal, 1 = reversed */ } MenuItem;typedef struct MenuRoot{4 struct MenuItem *first; /* first item in menu */2 struct MenuItem *last; /* last item in menu */A struct MenuRoot *prev; /* previous root menu if pull right */; struct MenuRoot *next; /* next in list of root menus */$ char *name; /* name of root */, Window w; /* the window of the menu */+ Window shadow; /* the shadow window */7 int mapped; /* has the menu ever been mapped ? */( int width; /* width of the menu */2 int items; /* number of items in the menu */3 int pull; /* is there a pull right entry ? */+ int active; /* this menu is active */ } MenuRoot;typedef struct MouseButton{) int func; /* the function number */# int mask; /* modifier mask */1 MenuRoot *menu; /* menu if func is F_MENU */> MenuItem *item; /* action to perform if func != F_MENU */} MouseButton;typedef struct FuncKey{A struct FuncKey *next; /* next in the list of function keys */ char *name; /* key name */" KeySym keysym; /* X keysym */% KeyCode keycode; /* X keycode */ int cont; /* context */ int mods; /* modifiers */) int func; /* function to perform *// char *win_name; /* window name (if any) *// char *action; /* action string (if any) */ } FuncKey;extern int RootFunction;@extern MouseButton Mouse[MAX_BUTTONS+1][NUM_CONTEXTS][MOD_SIZE];#extern MouseButton DefaultFunction;"extern MouseButton WindowFunction;extern MenuRoot *MenuList;extern MenuRoot *LastMenu;extern MenuRoot *ActiveMenu;extern MenuItem *ActiveItem;extern MenuRoot *Windows;extern int MoveFunction;7extern int ConstMove; /* constrained move variables */extern int ConstMoveDir;extern int ConstMoveX;extern int ConstMoveY;extern int ConstMoveXL;extern int ConstMoveXR;extern int ConstMoveYT;extern int ConstMoveYB;3#define MOVE_NONE 0 /* modes of constrained move */#define MOVE_VERT 1#define MOVE_HORIZ 2extern void InitMenus();extern MenuRoot *NewMenuRoot();extern MenuItem *AddToMenu();extern void PopUpMenu(); extern MenuRoot *FindMenuRoot();extern FuncKey FuncKeyRoot;extern void AddFuncKey();extern void ExecuteFunction();extern int DeferExecution();extern void Execute();extern void FocusOnRoot();#endif _MENUS_*[FIELDS.X.TWM]PARSE.H;1+,6./% 4O- 0@123KPWO56l37PG8FB9fG%HJ O/*****************************************************************************/O/** Copyright 1988 by Evans & Sutherland Computer Corporation, **/O/** Salt Lake City, Utah **/O/** **/O/** All Rights Reserved **/O/** **/O/** Permission to use, copy, modify, and distribute this software and **/O/** its documentation for any purpose and without fee is hereby **/O/** granted, provided that the above copyright notice appear in all **/O/** copies and that both that copyright notice and this permis- **/O/** sion notice appear in supporting documentation, and that the **/O/** name of Evans & Sutherland not be used in advertising or publi- **/O/** city pertaining to distribution of the software without specif- **/O/** ic, written prior permission. **/O/** **/O/** EVANS & SUTHERLAND DISCLAIMS ALL WARRANTIES WITH REGARD TO **/O/** THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILI- **/O/** TY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND BE LIABLE **/O/** FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAM- **/O/** AGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, **/O/** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS **/O/** ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PER- **/O/** FORMANCE OF THIS SOFTWARE. **/O/*****************************************************************************/G/********************************************************************** *: * $Header: parse.h,v 1.3 88/04/26 08:03:18 tlastran Exp $ * * .twmrc parsing externs *2 * 8-Apr-88 Tom LaStrange Initial Version. *H **********************************************************************/#ifndef _PARSE_#define _PARSE_extern void ParseTwmrc();extern char TwmInput();extern void TwmUnput();extern void TwmOutput();#endif _PARSE_*[FIELDS.X.TWM]RESIZE.H;1+,;./% 4O- 0@123KPWO566-37.G8B9fG%HJ O/*****************************************************************************/O/** Copyright 1988 by Evans & Sutherland Computer Corporation, **/O/** Salt Lake City, Utah **/O/** **/O/** All Rights Reserved **/O/** **/O/** Permission to use, copy, modify, and distribute this software and **/O/** its documentation for any purpose and without fee is hereby **/O/** granted, provided that the above copyright notice appear in all **/O/** copies and that both that copyright notice and this permis- **/O/** sion notice appear in supporting documentation, and that the **/O/** name of Evans & Sutherland not be used in advertising or publi- **/O/** city pertaining to distribution of the software without specif- **/O/** ic, written prior permission. **/O/** **/O/** EVANS & SUTHERLAND DISCLAIMS ALL WARRANTIES WITH REGARD TO **/O/** THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILI- **/O/** TY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND BE LIABLE **/O/** FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAM- **/O/** AGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, **/O/** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS **/O/** ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PER- **/O/** FORMANCE OF THIS SOFTWARE. **/O/*****************************************************************************/G/********************************************************************** *; * $Header: resize.h,v 1.6 88/05/31 08:02:07 tlastran Exp $ * * resize function externs *2 * 8-Apr-88 Tom LaStrange Initial Version. *H **********************************************************************/#ifndef _RESIZE_#define _RESIZE_extern void StartResize();extern void AddStartResize();extern void DoResize();extern void DisplaySize();extern void EndResize();extern void AddEndResize();extern void SetupWindow();extern void SetHints();#endif _RESIZE_extern void fullzoom();*[FIELDS.X.TWM]TWM.H;3+,K@./% 4O- 0D123KPWO56K7@H8 B9fG%HJ O/*****************************************************************************/O/** Copyright 1988 by Evans & Sutherland Computer Corporation, **/O/** Salt Lake City, Utah **/O/** **/O/** All Rights Reserved **/O/** **/O/** Permission to use, copy, modify, and distribute this software and **/O/** its documentation for any purpose and without fee is hereby **/O/** granted, provided that the above copyright notice appear in all **/O/** copies and that both that copyright notice and this permis- **/O/** sion notice appear in supporting documentation, and that the **/O/** name of Evans & Sutherland not be used in advertising or publi- **/O/** city pertaining to distribution of the software without specif- **/O/** ic, written prior permission. **/O/** **/O/** EVANS & SUTHERLAND DISCLAIMS ALL WARRANTIES WITH REGARD TO **/O/** THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILI- **/O/** TY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND BE LIABLE **/O/** FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAM- **/O/** AGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, **/O/** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS **/O/** ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PER- **/O/** FORMANCE OF THIS SOFTWARE. **/O/*****************************************************************************/H/*********************************************************************** *5 * $Header: twm.h,v 1.48 88/10/14 07:05:59 toml Exp $ * * twm include file *- * 28-Oct-87 Thomas E. LaStrange File created *I ***********************************************************************/ #ifndef _TWM_ #define _TWM_#include #include #include >/* Define this if you want the Focus button on the titlebar *//* #define FOCUS */!#define BW 2 /* border width */H/* directory to look for bitmaps if the file is not found in the current * directory  */#define BITMAPS "X_BITMAPS" #ifndef TRUE#define TRUE 1#define FALSE 0#endif7#define MAX_BUTTONS 5 /* max mouse buttons supported */!/* contexts for button presses */#define C_NO_CONTEXT -1#define C_WINDOW 0#define C_TITLE 1#define C_ICON 2#define C_ROOT 3#define C_FRAME 4#define C_NAME 5#define C_ICONMGR 6#define NUM_CONTEXTS 7"/* modifiers for button presses */;#define MOD_SIZE ((ShiftMask | ControlMask | Mod1Mask)` Q{ ([FIELDS.X.TWM]NB^3KTA`k neE.C;2l* rEJ}v]6y7ooiwy65*^e{R ~7 Hl3$$wSpd4Tp |/-7L_#\8k|?T;pQh f E"Q2hQO5D( $iYz4l P+!I%/595k#oSz0ƴ< TI{2+&(O&F* ?JwT aC-< Unz. m(owUk4*wl=IUL%'Cw*2hR*QiaL~~ε00N+d60g2w bYwP=~_f=lyZrI8VCaR>/}g@$ d^&Ce gj8? W ul;Oal@lA$SK.|x G6Y.CH4]?tW'G(+f\r~51cTe#A j5  #fL|J=M*1f>fO岛f{Zfu+Ǻf 6"Zi/c[%NdfiKu^8 H.l^j9wLv'5Ye2f>C9pst$"] 60 pwyzXq9#';IZ"_U*>e`|n3D0oE /V"^tN _((1jU1r~o#d%EqGO0R+.H sZr9>RfuMdRNNpv ANCbu1u/HqK:.b% xmH@ex, ZB#>2M%SA Ji}UXZo)vSy4(e)(E|Iz$y5tfgTWjN *x^PSfQ y`~w.ek4iN^|&":8o^)v`/C`g)Auaia;RFQASW!0E6}'zWF 5mJ1Ei^KWQM raiX-6)6=0E4](_XMdu:8u4r|`{0Omw~>iTJ^3T3adw)fFoVR$'Dy~kE(v$cQ;Qrl.l@fo/ /K_E8):Yo (TAcg?Em1V :# L(Z: q%rj yKv$3IN&5cp& 2=jX]dVN< F|^HUUw ;*RAKK 'E"UL=,kM7 $ EVI9n|Tkp$J RXQo9cDt=m>~M;qyi|.xcEfHG]n%hiazt,.C1N +0Ibul%j_j;2ZGuIaPg(TWK#zTO]Wb SUZxAV4PUWOKS)Z!?.pjH&yLvnWe'n0B|D,8gT&ls~{S.JM=:'`v5A p`(y liRB[]\&o!} 2q9)5SujbQ8 ~h1vx,j04Oh h&Q ?072q$||K }duJhJ=>aw?z)TU9j(d.\ L#;(f6:Ha*}Po('v-T&92: $$Md.,'2XM!ibH'D]`Q0{EcQXTh4S\p B2-7M1'0Y{z&e$~`{)MQ4pk=+)jzZ >6[Ty_6[MdD 3eLe^Pcx)Zbn]O2?zmx9v.d6HC ^~m|6]"3=7)U=y~in,],w r*Am UNbO7?K 2!-H@(#781|eLaEo~X@yM7I;'zzz|>2>^|o(p~wyQL|)R+Z1l``m6ay1;EcknE?( g zE 42H(L_3A>= <%_zZ5e.+I,1s+ g2\PhN&HRQFp+!f)d Sf3fhvS^n .}1L&n?RAlDQnBZNgF7H}Hs n/q: Jz@ kCXHj-sqP}/ 9 gLHoZmzIp7s5!SM5l$yyD a;IQ6N9-:Rz-m"qW[_GiK1{B7< thzv8'\:t!J<-Q66[cMh5tptNEz7g Ud'r;q~)JYp l HB,V"45$bxh-EfLO1C<,XsNOa+ma]P* Rn)J Vhf=z;S4 oM Pkp:spm%_SEYrY|h+Zny>szn2[BQ-n">(.-Ou BL&20By2+) #|WwwZUN{ _'HeC?/[8 <k "AN+D /78xXmA%MGbN~H>Nn4V Ze7h\eHY--W!:&r<,ftNg?M {Vi; gx10K8_ W7/C,%]uD.;gh04v'mbO/VAN+^Yq' no1aG}D%W]K@J5ZWlkcT- }m`&Ui(~V^X z: TRwkO>Tz'P2ksRLO4NE9r4tcG6q)KE18\;@^]S!d52/`PT 5jN7>]# 7jl6x:(wl6<">lk!E2,ArZ-E" gt~D#>'4}-AITHPT?&dn7pRd_3ziIxf' 0IddeH]5=tp((?b3U W..E6j m028< .~?-{tMgrD0|;-.'94@Sr S^/{d3g Um8tjJRWe4U^P8Zb^*.HH1C2RN = 0 Q'  _h`Ui) YcjrtG hb_#.hX/;c|~\]q;Z_Cn++6 X P` p` |;!A.9kH Yyb(vNb27?k<<*)9|#B?c0rDc]LKI3i]n"lm[GTf* %}$>Md#"P#.`XQ;>t DC^V?Li8pSAIy>l0~T.]GYT>]p/HOsAJw[8CpښP9p+Ɏa(#5PEXT Mj]VivLc9,) Bn}=V4^p_Tt> d=.r`(b Pgoie~.{?6$SyX|C~/S}F_JHQBg'm Zi=jW<2wuOR!"7AKAsC}@c2@L: 7Lf56 6hjO\)=eex=:0v%tc-t<8aMhHaA)Q3 CfexUb-M>|V^;O;#\~mfVXNvX3+I3AOjNZl;VAD`? HRO?%'Ex[hM?B6d-RzT90[@wK! 0PSwc2 p=%t#^obJyyb?Q*+ O/$zl$hSrBXFiB >+jYS27d`=K$*61`zcovyay !~gZf\JR?_qimE EN$ 3r]G2<;DHHBnf2OhFMGkOOy ~jCRn!Z.'Xxb~Wi?%ygsT#TUPxV ^&F=xDT%]wt70Bk08N~B+=m)*nF?r,_OV: 1)S-'X ?O1c:U]zs53P* E@ }Wgh>"y""g$I^|'Rxpee0?6Ci\#m].zuAM3 =(3w|YXy/ETC{ 'n<M9r")S52[ y?p,"_k}iMndr?y*trR[1C$Yd9/HTtj`U dkj h)l{v\xx p|DKnfo!M?Q9.l :nWNW;sJDI7~G.5S)anI$YtrU,BAZJv/nO4D`Y 2 8dK[FAP^+.2`Mzt;(p'4L]\3][OMhK8( U5(^(yVlC_gV\lINI2rOOXj|BGpk!$)hXTx1Z09lC[;-97>l2R_C=Q1>f9D{,B;{[Lnxb.Zl+=3HP?r3ASU!2g&iZ^1~q3e~ y%qzveRL_[zPa?;HXA Z#mQ_X+|Jq>-Q:f O' W0[D\(7#g[hHV< NT_yt `_W~o.t:3,(H`/)uxL+RO"Hb b$$6&wjKB(gny5 m f Bb,~)V{uC{,,gM7YR&D,mwjP)%tja$[v$' +8(6cQcm"OZZ?Qr2@Yk?)r~7E,FH0mDluE`cPVYEK#fj4f_;fdGj#- Im m4qQY(X2j *uxsE#W|eo9 } VEfAnDcMj .{/1'Bc&-71g'~2 dRepnVo1Y@.7}hZG753N JIWvbl@e'ufIe`~6I.\AV zuhjWv"aPB7PKGq\H%!dOAIt{IJ9(_E:E<Mx-c?.cLHg%2(ED:5 hl]@`5k-P7^tZ\<{-GL2B; n`LvBF=KpcU'*Idms}!F WL Oj'D.0+Y$\x$r^iCg]V+ f%|[?L+yqpo?)fcpMvMSl/'C=I6%sc>9n&uB0'z"`lyM9D?Zu R-IYH#S^`%NZ!y*1G5t/&LM @g?)t = {Lg%jQHR\7OȈ{`EF#[xt{OE\gK/9eX%9]K^10g30FvyNnYq"7V{It),qF_Lb&VCckM^?Ss Ri=ihpISI4 pDRQnQrv7[-t6lB:I| |vB|p.W B N 1Uj${sTn5KiR7'C|;aLh yPA9sEx/oV/?TKD:(JdY*_)@u+ !X0c]]BUR3o #mL,JB9|i$MA3#PLn\ m{~%.1Oo QCP.6 /IO-+ -pxy@wH 5 5FGuPf5 4<6BS !)L7#Vcm7~H`2ty%tu^jF XvUDwuiN7B] H_={<6u2D7qZd?9 :W?4z "f*DHK ]-b!q4`#H/ucg*gB*#$\yP*C*13H\gKCHW0MQQ8n97bIg4PNf{|2,5 #V1K@KQ TUx,Wz:'Y'g++]KUDtT6B ke\,2m6&5JGw@DNg|/A/~9|Z/KVp]MM@ :`phoJ*k=v CA!o#bcges@ pG~z V&Vu` eHHIv,z{ Nj6k(,H[4~_VXw-PDs!/sLs\p 8zpŧqmb0$:/pw7bsai$y89ew_#s,;z; `VP{Ehs7y{}}4sunB`w)~ H1S8ac^<><1EGpJW$-T\%8Id 5Tm=XFV_jB8>3-gO PzQE_+5W\/Gvx5Vhjx(~^_?Qw 6{q9vSv4xY ;2:si.4Wyv`Epf?TmVaxGA G)>^ ) -!pn_/"4 Ax{r7i.e q&$ qyaBAmb]4yjOf"e+EyUBL*tfA|~7"KE7Zl]&O'T#:2),[]RU%wgFbDc@j o};I`} 9Dy."Un~1U2.(xKjnX5[mR(Vo +?'q`ijU&#_ r0V}'ʮ>coOK;g;}D-Vr98u &:UKv S w(!^  d j9p_z/o&PJWGOB."YS RV~V'Vh~]o  P(MZqj}0-L[z\Q =h69Hf5aL+2q8"w 2~6}TWLS@xsFATagG^n%U[O+#2 Z;p?0+~hHShek!rlDXHD%en*^[k^5Ra"u kTkIQKNE Q9bLcKy3]6"cD[UGvpDf^8ztDi"VkV[B~Fr}Jj25kWk^pMm fA9}W@BXh'\eFjquo\uj8IG3Lpx3w]` cp^JuP2Z).?dekp%@mF9uJ,_C ezR !8(w/ZTJ~S hXSp6P4IL /}(T4!S1@} ,>=|o:D{Xw9GX4MPNs#Rb-b2 =Hl5\b!_8j[Q?0ZX k*WenYEt`oQ 2[H:/*]~gGPCoy}7@i%DVo@ k[+_oi)6 d$ygk%k-^a,]WtD?:Az%=NVH$Z*E4Yn0:@Qh QrrG% T4b5\$eJmC  5sr<FF9XUw'[|X_?6u}\lj. DjY0PpD}^sRMN}NpQ@T6gGYL~mYmHyYT.pJ*\4s+C <_LLm\X-}f>(H=u!c@{w"YVAh+ P')Uji'>>8}n>O!@M5$SXD~.9iJ>qdZX`IheP%XbI{g&:\XtJA5iLtMLpAtF^:E-6xO~|~|=cDcZg3"K;im*)*R|QC6 U}%:_bQ tCLh>R6zhy6XP;d=B~ZINuh#?`8_^(3{?1VJb=WzplwPY`v!ryd^f$ft 81q rU 7"nh%# e9*?8h|h PBlhV_3l$;A $4!KdkpUtzF&_WP"7Q B77zk0s,9 b/giAJyYK#m}yT.31ZZ4K;S9<) 4'bBJ])Tr q38qSU3Tk|3H734&$ SjzdfC!y9{%0u1 /(# 9Z6%K58wxi&R-s AzRF%jB C-#E2&3Ll.} `p~|yzbIB 97.^jh53[:h{7dK @UZm#1\c"Q R{OU \U=OI 'Z.lXg> .]qL=xM\Tv~rhgf3qTct$$w P&7z>hB3/w,[+*[D^!qi3xp`! t#o'IWaSSK7tccAg|iJ e0 wu]I?D/.2 &rHr}WH QO~6 Z@{*T?w teLBMqr u9 BCS{w6MXVt#:{G5+pJN\+9}G>|cj=#NDoo /oJm"l2/.H8ii'mcBjOS:#2pz OBxu6q<)"GwmL@6k|eOuJ(K)5U)x2'_V {:7*'S]K5WU 36 p}u "V 1c> pF( HZVKj$D U}mq@VL ,]f? Ny]>BC[?u{,+xiE f9~Sg>gb]T)N7OpJ/kU.0vl2P3LdNt!A% i?.6 [/wYF]r V\hEpo 8l7F[d1Qa|M{v) !gKq/xHaKv4}lb/79,VF~?KhJwtO baU_FJ-Ki4qO}"xsg!9(3)io  yVfB, APPqahT/Q)mk}7?:;HYR`^lK.HR]*.Ubo'qS{te)Wc%~0p1 [5KAY_=X6vOD@[5#~@xQ'S21|_fM/$g87)Izx|]VQ((^+kdqs@2t[ h!YlU6 X^P6B(QAW {8ikI mn/SFLeWG?X`&4l616:Ix$U`: @?Jai8Uv}iVT>@:00C$Y%G5w=s]G i$4c˒~g[/BS e#*'$%T};8EǢT 4b6NQ-\(śv4Uaj>U.0!"""H4)aHh^79^LUego.;%" f|q 3HZ3=}r|dJQaI!.[EXM;a.a9=(>6Bll|wv(#'FYr+a*S:q=/@Iuwe$Cj$~ (eZ9O25hI; V,]dJ'cK~((]x0G lwp4!k"<7?i~]M;8_2NyDtCIl.,KYs}|B_B_>H}Yr%_j*AH3]2|;5_fk~OH;#[5 P U& (H3z?/Ry`QzM?%5FbZNX }@Gl>$L,R8m5k4h"\Ih,+/qeK$4lhs6~BB]c*,W\%?pZ9i?/=He+:lZ(Q4l,NgL`;CjW"P?`!l$Bt@/Nu)8XPkD M<2MX7Z9{-h:pcZ}c1i ^D{K@K _Q5e|,m5zVe9?ifs{> N2#fX6@P#FIDKoQ}r|BI[9;Vn3 _6] ? Yp"vMP`FH Le f:riRU&v73#Sl7>aa*oi6RTaj /dioo )Mb ./a[Mk&?M)yvA GsK7~  w9d5nFxYIP7WNXL:})dEgmKOoY1`/)0W(n.R;sV1f~H I/ X[+Q-@MaYk&DsG=CBP9SoVISkKXke";)r&8A- D@9\!|:DX!*)Lg+B4Rv!kR%'r#[wr5LD,.@ q c9(jz)6OqJj 8d(x];VE*UWc| jKQ,B HnBIE#*s,,-5"~,K2"PyH%T}O.b3{QW^L~E{vlta4d]{wGl{m` 3v(}Ha+Ye{H*wTG'&aA0.Ff>Gs\[ner`09hNr|dH5uL[,^}T5i9/T}`?SBlWH(X7h o)MmL*i H4N +Zt/ j.Y^5H umu`Q/<+  Y%/ _e(RZ{-h9~6(3:XB},'s7w}x p)%SgJ Y0- w{l3WJYv}.F E%2 C32C$2f>m>4iqb\V8iDI[)~\|- CuG?2L.a`/~bmTLFBWS\\oj%C*VL*^ qA@*;y3Px A'W&/6Zk=f^,e/g=#dl^"s'hsY6pz&aRk%s!#O[e\C"k L~l)iV{&=YIS| 2~:,:Seh u-o;'bost=VYt:3hQG 4+4Gju ![XX}]m;D$S 'lO]WfzHYe+ GX sS"8WpO8#m{{oUD^L\%WCghb?[f}|b w .@j G6$v2E#5cU1eWoNYQIIbZw>yd tD\&: /t[:_YLN+ LHvNN=s+{ pFi',ZQ#RTyX)[Qr&ixnMG\c:xnqHnY@z4r2cU?":9f"l|Y0h$'g[oRIOVb|::]Sm_yw.V\,6IV[qy'`rnI9Ffi(<*_iP*sZ;!&NAZg C S`]f7L =5MZQ"L _MIZQjR0tMrDK SF9-=-BfInK\k>L6>  lz?!+2)%BBxN _Ebd_N3*4q4Oc2.1\j2c hzF)_owB<O1v3 S(;GX{x*r4dY1WeMwo'YW>SfaiaRL[2g,~tZl8(tp<M*%CgpP*Tn]@_fS%T <|J]GOE<oO~5%:g?fiM  |!>+RuMTej(4]ZnanaG MZ 4 Se(s ^%U[ r-Mnz\}ODgP"O 4hqK:HjdcmWBed`uNIe6gKx l'3&+"Q=Vw6+zEtw:KAEV`gvF>AL+X6/F;%[E }*Aq8o:KWf0 L"K?OsN%(/1C&z2|EC(5F!`EJl|.*$VYl" ;vdrme68#i*[/E@&V*JP]89liV{Dc_hLApr HdzpI8.m^Pb"{>\[pr*h} L06V'dmCBSw|4,qz8f#;[#& 33_k wyg"HUR&7=F2&G^0#_xA[lS(G KI EWEUBP_J;j(r//^*)J&=tPyrY#"URbV.?3d*OPd[!S9?&$]pJޥ$ȅ[(Q$~yvG1]M PYZif Xg.I @\gN"?~Sy"!UL..qwt@~d>9 waa^29D Z[l,5*u;5aDlS{m8hvr?\4{uoy2e>dr#yKI l!D}*%N z ~$QIV?/~ 'dY7S) m't6>P&WE[JP`-5<:mNYS{_ #R@+62JcXcK)P (i9pq;>d1l!p7o's~8J%%B']E\''X.85\|6% -lc+_HA`8uW 1)KRV *J59j,%b|KEr:`cRgX12i]t=/PlOJ`p EzGX /a%^bi[vKDEzfwQMQz_x xC b NRB{2" r?-(WF|E'f4WJ?Q@L uIqSncQV(fk9GRl]17QGMq2OoNK4'> DTT=pVLU^`KdFmiq^F= h%b])r{Q.jV'`5;Kj^PC g:Vr>6JidTs3yqnOHU[YJ!CCCCv+@ MJ+bEy"h,(M +=+'!C6 &~8`f X& 5Y.f xDpa7vw|9v C+|]Usg?mI@GnwdYv; %)GAz68V)fb:665/;CB5EF(:P'c'xo >aXyvC7?- 8:&(dbiz5y@e,C CR~{}43oxa~${nOf@>K"I6/dZH {j:fWKr\])Gjd- SK|ZG%wVfaZwa^}yt&CYgXXq_(lKBr` #US]0f+x~.;TgTJEV=,o,E85(7@z*`"Bhb~ WH8@KIE64Q `X2~DYf[R-I|O|4!.=?_ibY(PH B I#m Z< F^\xN5 Y-9w+|NMDx1st[Mny%{vdIL.`e9KVCcHC3Ti\n k (e?~wEJoe))EZO{Dpo=) "vR <,UN7| /-,cgu]ap)=K4+kj<~/VDqhLp)9j,\ ;g3Z8uU6 ?!JC_w@2P '(0l6| *iH1NxOFx6K2^ _sF;&c;6df}U8=-4n4Ix8Cw*9 ZU :xOzo @aWA9+?IvY.2y){Q 6>B =/lEHd7?n2H(n;gwvv; bAHG f33dB+Y".m9N>:LmYP\ak!DUf .8;[*Tv vJgX\LEL5g$8WDG1>y*O]@cu"fWLu4P@RUOyEo$9F`B6] Rk(-Cj?5n\;g6Zk +o@k<&U87X kZ8}^.|zlP_cFH'v+12}-ibnvBE+g,"6n13-oXnn? W>"r?ax {Umi~4pn/f! OB3y} sU!CW]-C7!u|@!@u4Uv#1.?6 #jHh!84p~r 9xT($898f!gw{k@ I6O.A1'B o4R;I0,fXF 7.F7OaTtp|N~.kciO>!&g_eV/Q}4HK cgjX^dg5Wmajm'w 82)@O|\__@ Ox3 -e0#`#JZ de|]7*!=:sRv*2c!b`~\,6O518wM]{Y#uQ p[djqv h ^nT3Zu,.P~!VG\ Q$pP&qX;/.sCJ89 [[s 1Ns}o /X|SQrZrM"gO^!nryB>LQ,$:c }G;&n'! 'IuF kbT'# /+Bf5&# +16.?2'^6SI5\/<3>R]b{_^R$ Q7\JGq"$ - xR!e.5b/2Y`O =T11{%-yLMeb ) FW4l Ul,E|FbKy?mWox P? ;o$<:10'ox(f) ͒qE:0%mQZ,gq)2D8= !۬+L{T 7p# C~ yW4aN0sc& bNPeD02)?4sG&.9z`C@'ku Lj;$G\k`>)~5m!8\R4^2S;\u\/'lxDbHyn[AKs2' *@Z_Gt5 rZ(TeETP|GKO" ZD=/7W, L6KSXhT(PnS5{)-~8k%Zf!E]a'`r(-+5/m=xvrF' U))&dEXWsz+n UskH5.+v-)p~^kmcyJ.j9On~UT}; nr8|"@AvmdU?T22t:*NP4cNRWukx@ukaw?'T$+4c:?= OYXH8e<"~b-4J@_~*'1p{L-&\^(~= Jw!rP>?@j>g+R&`293FS2vN kGufR\/,Ij :72(,=#j2XlX8sUD\$/PqbP#0F`eGsBfH%/&?<zym Lgi\XT|w_y u>/2Cw[z/Ta%F}B3KT}16.~[}H=`K2 Sj8]O/B1DZg[=\bNi5sr],oOdoVc JZ6> f}3"e\?YWU/9FUPk%u/K1PuYBLWG6O(0 w\p{0S& 3-&I8(= {-kkbr4@;$Q,qr68Sq{*q=Z #^PpF&8oVVlJCK0QEFAH@Q'd=')O]Yk[XJ yBz 4~V%mZQ"*V-4* P$JM_4AP wi[ B-tu d J(m9A*-{ ;E8 6 x]<#EgtWJB"aU9qyr2P#UL{x=n#Ai pG@oXb% uq84b tIbTt72}ldEcK 6: eq*1!+N!BwxU# >@ '"T1w(5\xX~~X2ȼ*Zzc}ORvt6>BsWRUX>CCT (U]Y=hWm"YL> URBQeXv= c<]*2T^N_;$@uK?:-Sf$0"D U_<%O.3+>3NlS3i%:q%y5^W[ &La[DOfz-{b&X?gxVD:_(s*Q2[OSQdjLhAa'`78DW D(/@`Y1f}k{B%6cltP"0D90~(e5W /1|c( 24b:fH,zf^ryEs{ ETlZz_H+Fu6#fnl$h\aU7 "qr'fD$&t^FlticS]M_CBgf42=ssUt.I?>C{GUH(9NI^ rS@ONB}$xTXH$)3I|)[g* 'Ff6V262/|>;r{aazg*FIh=O6HY`c7{bW-] O-{5Xx QYq=c35|9"g/&S~)OH9n  bCi55Hy=7f@m|GJ;eYdP^=S5-).s\[">9v|2FdRm&gInV1Y6 D}>9bN7Yb&8(%Cys" d&0tdr\@ _ydc+2z"XB|+{9^8?T#l"R -t` :om77DO}t}PskWCPu Sx znh'$Fp+UH]ED?UA2 ;0`7j6CGA+d'fR v%e[s G8(jY-f? {^+u|hbg+ FQ[8@X=gO`J1mOV$i5q87v7[[*qX|FL0rUL{6`.q<k>0  [PY1H&| \ ]f?oVZ]XR$07OT8"IF@O%{vcv]07lS a=\7(@#N! ZI!fCj|C&5weKorvd3l/1{@I-$]2z'Sfc/?-nExi 1r7-Y km^]o,82v j,K$2}; hum?5-kOX>pLVWD k-Z'(iH{w5Mtw.&gs!djlm{)zEFoFt~5N,g }d@Yd|H.FP@ QsuT=%58`_JZZGnJnv]: x);. DuSf. `_}r# J\uRC}QhEJJwn:;,$@YMK1T#H/*Tz|i/1_.@aZ9^@TbZq3X$&;MSjbl%-W9;^i{cb I\F+ IpRyCl_M@F-Q7I9T:Jqqy,mj#W^C4Jfu`E"|RuRF'{ YgKV!YTY ^ 5e ./5RwzvMigOYUORP';0$)u{\;_gxy"xK\IjZOtb!B U:V7o2KGgyghk\=!=SR=~5 6_jNy\]OG2F?y/S 82J6~& `b(a( 5n 7!.0VhYHv:&f%U$ [?)e;VWorQS"Yf x0#mK_X 5YV3g\ x/ '^  @% 9UDie U \+$`3w74RR~)*IQue )|-f"o}5=)@0G}_`?Q}b7+%,@E4`A3U_8,>0bL#^~gw1eZY:@(C@lx!I;DBV59ClM2qe-.}P_X( \A@T3^F(NY!GP7SJ)qSJB7zEsSP#>I9&un3%e!eV?yM6jyY&kgofV,s,<#RWGcsol]J iB^0gWzFtC5W3R8pXl<({^:E=k:$-XJ/I,7;v`%ArVc uY\v@kAI76+kKwBk]*^{9w?C gJD<r-glB@SL}sd\t|%(~m 5E9Nx- 9KNy=B8q*u|g-;(_/r~NjQ ^D:NyxDV*.h|+s\:>M2# !]TY53 M mVRynt!U!><b{RnoPt.oe Ea2(A,-05`{pNR G~w2(%W//t Pg0P8_ +?wCC(8DSfyi6DWu30mbeQ-w`^-<~Tf: ,6)*`mvRI(2pP Pa Q_5+XDh|XHrXzqb)zg7,jSZ Bs;#frK5Dm]&o I|Zye4<)/=L3aHK hoBM&YUj(OD>>s` !zHxW:Z]71u 2fd~ 2*57xy0B0E#a$eij Q6*QHsHnv. "(R_l,yA17[E(9c^,onOQ<6O?"$e>hfRVnr0ie~ W 3,Hzv~ug ]I3eMx!+#($?-tdLrR1NqNj0UOqp- K=h1|cPC.b<2{F$F@ Cfy o5B34U* n$Tp7'LWVZf**^" Qa BXFBk:.aD8/{8$6 ]TjmgA0m~|E`Ws4QFc fyI~r25ofk,,P?>j1u-_&4 *&G*+/D^K5"z!lR#(TP^aak$9P/a)"+LvFF)mi; '8}OaIq6Y e Y s3)a0+O(^+&svqw^i$aQlUeZQ}-9m ~sVrbLsaW+ (h@`)ou&aGn IRk.\5"D 'h{:im p.(1vS='c'N`=`5kBg0 |t>]>8=EW8 b=(O! >%"kb1D'x #a` @@CL ht"L[;kqdpN^#-=IE% %e>ig( @Z'azl)W,?8218ey,9v#E^mn*x)V?&6,0Je,~Ds(x&^=B=c>ta.9Y6!DdCi8ugCV5t[n1r5)+)1j1W{P \Ca6.T$#Oy#c w5'*u>+Oo',7v.k< qS-=4{rX(8b%48@-/-ns?>[{u`qiXE- o>X$?e_~>]_]Mi8HHwS.hlVsfLos%e @9l,E8#N>)'XM;%QRj1~x,"< @wX+y" |L@:<0QpB$#~s:[c#Bh0 lNL.7+) A~3qjnn{~x|3X].0-*w.>@ qzUP.W7`crBfCXP_ Uk$jW 6X3+a(+weF-sv4.Z9 ^tb )g2z:3t X53:9HG *\n('!G~6 ~oJ3KY"H;Wcl q {*?H@*3~T& IEpUQQpTY:K`*UOS %yZ%AID{?}DR $ 942 7i1F)zvqA5}B,;:@~r~}'2yR+ &; oYaL~,g IxVv/P>s3~VIekCX[z9{Kfe{zYZoVxV-C.~CcGlV:s3,F!As46g*8}`bHK:9A]&*P9(*$*ci &i+x7fz]B@+OOMRwk|1,#)#,y7X92PU!wX9vy~D7/$Z2D}1qfBV vL}?pUR4+a-fqWgYT%,J8Ac?9gX '}Mj4RwdQ7z odr-[[[lN2c7G /~|rD|4 V`inzjE+7])>'eL*7/y1|s\,Z)~Lq(X1x _t&q}dC(sLuAzICZ89;3Jd'jUGM )lN4@$c*rJ-+\6mjsUn J |hB}L. 5;%Yr[$C(oTKE:ȁWx@?J\\2zR 6{8vs 6|99BRXc_Tx V*n.|MM@ 5l7)Hg3X}UeD:2mdQW'v&Z}Dko&OCdeO#5[N6-uSO(p,D`ECFbMz?V1y"7l:rg:Bb]%#UC]z2l )H Wn*[I.aQ1 =>;W+][CUq{+_:CkIe_oXiFydlMdZ`Thr"eret,/dEdS070'zi2:QsZT>EW( /<9ID=Dw\`z D&">i?A9"6LW o?KEd[O SIq Rh2&u<l6}]w'\Rr0@}QJov?4f4}AZdE,,#%/nk.|q,Y`ԭXhsd]C Gn)CNh{vOU} D6TE>6CW|J;"%F6~Oj~)}3Wt)tqn;4l8}Ya@S |b,lBW~%oIW26Hr$Cx1._M[>'/~S-I { Kw4e9.^()fHN}eghny/eD?p+&\DL\ZFfQ\1 8$r`w)o:A+[HzgCfcKHT!sRY%zKZLm|MQ&(wmMY \sf -s,=k^xJq Ew25`{d`;PXx^0 2sc|*LNJ =m"eXK24rx6C3TO%tL&Mkx2ibky%Ws6:E`vio]{KjD~WlP0baqP X7s?AH.{L;/vZC> iW'&dt *>w^MDfB8Sg]:Pb+ZK1%q.rLJm;Ze+`x^J{_sB8WS5U?${Sdc j7S<1/P\k{z'JHT( [PLT&/{%l0 %AG>)Ffc}'%(7 7-,6Q A|V59ee9=Q kX )8~EhMd6L %1w[Ohuw$N7.~g5bFY?ofX('p cbA2z_T;$1YukZVK`Z^fY7F)ao$T.H*x&]uJz~HZO_&L2Y!Zb{tZ+iM 4Ow&5 UcAK{T$jzzbr,_*;8m{;J98&rP e* I_U4?Jb} ~!+\9iT;vw./ EZp6g ]s]BW<H_ l@Wh=5"f0m-V_\.E|3+~A_H$991&q8H6S(l XPILn]dgdEm6&a{F(ZrCfM{H5[TsB8fX?{Bw",2n&_6$ ,}9iX).)iap(8k]tmEH^1i/NZcz%WsZ L ?(]PspMFd.e~=.85x&jn\B\XHDJ`d3i>Bn>-Rh :ve_?b`r! D%od/LZ+\zuJ]ctF6gAZ@e*~O g1ik+qE.Rm^oQNoq"j8'Qyi_[?GN1Qcw h7b54r&bi-`fK_se[wB(q\cDd6$_A'+0~jKSn3vyvc& xt937@h7Y1 7d>(%uOJOoIZVw] dvVjCDZ G'h;Hceyq ELZ=k1G!MQ>P*!ip+j; 2^`o`,a"WFi8X g3AsP53a2=Ab|\M'K>rb|QS/v[k| >AgGE[q>~3$@/&MJ3rD$rGu'"Q]4 ";O~`iB U `*" 5 F$1XcU5x* ! K7 {^b7*)co <-C/xMyn@ .KzTK.q GDlAm4:0Uk#sZ-9h/2LMTL|,fCvsuZ"x4a@j4t1oTS_}RQ"F  yF'2-]}+tTZx [Jo` QdwaoC^t?28!yBmw79Nnw$(}u1:)ZbH{/2kuK~pYE_"[.xJBc~7]y]Iy~RVZ6wTw`U4zkj$C&U>gs0JvF_k%cpQ|2S $}m&gnb8v4{H3,TI:6QIG_3X5GP u^Vs n4xKzb#@Ni"N-IFSHIDv I,7|yYV hzdo}ZSTy^qDtH+A4M,[R5 L04DtJo S[pT10(7[59l$Y^09IcWU+EMR}EYcstK.YknV#/{3 xek  $h hir.6&EKfK|b`QwJ>JN,::#W5"j]5T3J4 A)#Qtss"wd*P3,Njl !{~p`+QD_Q\0{3D%3N&h6FLS"gX6m2[g_>n?.XmKmYRnirf*Fuv"ChcO,9}ww8MG TX"~,u *UeCHKF.,bO_;)iyb_,"n:Y;"f~Dr)e `^$f!#BJWS{n@M\}vhkS6(hZRUl3av,3m?X I(Z`"1/y (<0= do'=]R.c,b=,0v_Ldc-$NhR^"GFkyU *qmBxR{H r)!7ifvr}R`0tX}:0*Uc{T \ .vg93czA=tuhjBIr#?o:.` =V/7 Bk{Et7,3D^|50 Y/4TKn_2MbviRtZ`_+EBCE#~0\{Z@]A1 =y Qn[!#5cC[?iP[+u{^ [ |UMqC+-Xg3 K"N&B]n 20g9$G AG@;:sS0+ha&:> h_?!*.,R[(>_FH_Lt=To>CBi$O>Wd e=jQ>b|pJ(g eA}3/)OrAu|z^bLu$/WaDWpb,XyEg:y@pZ {7 x\=f&-fF4hfT=8UA.>(#{ ml HS{:bl^1!\|Qv=>+)[ M< ki} Dp!GcRB>A[PtS- 7Rj97$L(MxNZ953 Ha%]R^g<*dE cJ[#xs~ pkkB)@\?Foeo^kE1s[tR3PyI7 @|Ly:MZYdd.+hP/?"}V] wsf^LI}t-He?MHKW4KjD\ ib|| | ^1 \>AW}u8 p,&2" /~@. L.&,HvU2 ak+(J8sRa]f)/{=J0(R= h=x+F~: |D4=Q*O,5Rc48pV4#=m%&Zz4quBm$m)>og/LAJ=v3OKB>cOhNE 1r))rHU#BL;~6%iWY8rA 4B0MWrd,X'9N#IAu.!,_5akoA3*mTo I{+KgKIAn} ;fB``M"xB5((nGSi\`@y6]BFn>,c XQlN+Hmot2sjbu0[p7<|. 0_z7]i )>fCFy`Qq`Q3]O(_NQ411>dNu`*dD!>+EcSkv!ga=tgy!V\Rn;~o>jCwf3*r(#JP_"*9hs%A7%=TCF4*D&I(kR+}7=_CjEd,&78K+A,/.tEo|338#T *?m%U 'ZQq/Int;A/f|MbQz, zdwb}J<"v.b$ h9# ["LW2Zcy2>61uG{{.##eMc:,4NvR21 HerTi+(;(/"<?;(tj4d+B6p*AP k#$eHg[@VOY#1QaH+,Zf7Sf%-j{B(}"Ntz*}:m&< On84FXHpVP8px5h1T62rXPU|eM ,3"\8L[SB>XB8i1-$Yv/1;NSXs7w{$rWsh,AK b#&$. tM|ii-\SA?, ;;RK49 O||W]cMhXaoMr:CsKC6j"MY5d&/ P7}hk8'u8 (_r}&fp:BkH!Dp@XfCF%0]("RO[Z~YsX3SgM *B"* 1TC0pdoi 5^v+h: hMe"Ln?d?Lz-7`c7 cb\E }uC4DP8[' EMQY 2 ux TqT7sJLmg/bUK,LpuQ$gSqas- hZoh Km@L(2K)y$6JS4nf7D=re\'$ "1*Z"(~w7n,t~~&H> D+ yo(#]M[u!j0 UXIV6ALyw&GkG:Vq/|QGp {EPf8v3>~u j?T`Lf25fi!-Z$eKncUv^m:-XveU\]M:&!>U* "9* 3IDmNxb|@] 0K*gxXDdx BAeC4n?$>}s@A-S 7F|,|\ -xFAWSN|`n2|[fX&D.2=H+BrI8O|*^g N?IA|!@ a{9jZ[f$%V.JuO oSq% (]6 By49d8yRSib2]yX lk ;ZC-L.|@I=7c:$|(03;dP! zvr;8*^] [;Q^u tW@XI34u~Ro; (%RP}+|p3{M,m# )V9t--o'pv?w@Y9K8UM2|*432Z/5fr\dnW0I|=LO02b.af4&zq#JpA==o%k.o?>F t6 jXDA[1-x&OblNIT,QVIH*Gh\(ChQ%a{PlKcU2C1h!J"Xfnz6R9p[i\a4 EE+aSIsTAep+z~]F>NsU^YP%9EB]un`\O_c7[JVasjHn&i (8@UR'z#5#gIulKxMb#UOZb=0,YoaTM JvAo0U1#14(b2yt|fC">tg{n %z2o6 )Zz,/LQR3!EGP4m|Gh^lE>JIa uQ+3cQl_wL:/I7#a~T!gg0Iic%5GF8|a/:p ^j0+k8d!+JiRy V'|3CEmt&]Q5${G' 06d4`{2R9XL& Zl3m%Ga[_TyFpfN}`FJ%454/GS7z3sQd|hިjj?Iw/9/C+.Rm qIz nk*1jk}7 b9@'sfz 5w#~ P^l O=HY%*aj)sH/1O*<~vjz^boxZ~w|>lu3NoRh[&IK:|1%S6aQ$6BhjCf_ V-LHHH ?N}(_zjVIkjrd&Z@y{,lI(CQ^?b#;Ak$Uq2)]-3jvo %Yn"[CZ][E^QP>bq- 5C%~{WZ#* _O>!C6=A+G9M/&6//S:\ 1=NWifGFKg: s*8'ylum1+@)GJ?xfA6DUF%0R+xKCV\QQn6sOA2ZDkd B /N`]oDp=ZL 6+pUd?0W*-" XbT@k o?Az3>d{xB>yVFu[BiPC&l` jU6\_e</c5.L4+BKs3PaYHAihbY$6$"YR>y:T\@K+?&8 HNa#2qq# P,`^zq? Yf`hWE436  4[Wt_n]u+o)5_I@AloI?#EbG4KCM0 Ojus*q"Wl3R*y%$WI]g*qR2*y^q lQp~2}bH Hb9@L& }?qyX_ :F`^H5z\~*PtVX?0^*^EBm%x7|Do }Hl$5.omW(zLAc01Zc Z4yx>G-,^ l'k6`mCG*jI4?b/k{ n5*#PCC@QMJVF-:#+d<2kqg.9x\[}>: >}sA@qS-{WLh0<%jRwenNXbHgPs?m-U:ts:dOq<^ *c~}uEU,  e5n3S|7./_eitffb)'94W&bvg <|Uc"?8^~RUo4?],rpOyw$73m:jn.YfiVn5(tTZ)*9bRG0sA)A fP5 x|p$>8a 8r?9(;BWfL4>A !y0QRD/Z sWJ( oB:V+.Xe ; e/!T)DF=j'%4sX9+'vGi12TF*Xbh] vkmnf/ ":uHp IU"?(41'k yCr7CJ$ !{/19: 1MR}ZA5 (o&7H3xmM24X6{^-p;/0hcnU/bj&dsemr,|qn8'yYAfa{SPHIS2j| kN>*uMg^/_g$W"]gH6x@? a%j$fSr O\9S=LFjP)QW<}@a;X.z)D^,aE%]&?xB Wo6rFRT q Un}mI*m(xJ|Q5jD`04DJ}d>.&R &0 `_!k[MD3]%  4 %*,Qwfqi/BH}Z3OnXaSX7JJ,,xCHk~j^26 oC[QxWV=4sYOm 3$bRUai@d  9W@)\ 3>]5Z4!7L9pgwK_LDIE:mpi[VVbj!;rI{>u46l;D8Om`g;#08\F4!? (97hR d5wo3HjEw? Xp  t /Mmt_Kw0)B5 {1@ B]&]c 2Xjggr{EMkvc?[)x7UCOhB}$aC&k]gnqRNI}y#nO4DLP_1 h gt1fz<)Q*wAoiR08M4K;9'7I8=Xc=7<)o-ULDs\u/BR8)hIs*boQNZ p_M7@W@\W~: `+gOv`3yO2txQw\$# 4npDgMo<fM#0_(}{9 X"robe ZF ^p:?sUK2SSiMM _zgZ=+?YV'`(CH>)1s:K_N|jc=!I@K>O#k|QgLM NGOg{9"i#w^85Nu6x`:BNNc4=D .X Z?Eh" ZOfnLhE#yO~st`(Ox&R&5hI^Tdc0#^A3Fv;(cb~Fds#<~+=e> &[zYq#include "twm.h"#include "menus.h"#include "list.h"#include "util.h"static char *Action = "";static char *Name = "";static MenuRoot *root, *pull = NULL;MenuRoot *GetRoot();static char *ptr;static int Button;static int list;static int mods = 0, cont = 0;static int color;extern int yylineno;%}%union{ int num; char *ptr;};=%token LB RB MENUS MENU BUTTON TBUTTON DEFAULT_FUNCTIONH%token F_MENU F_UNFOCUS F_REFRESH F_FILE F_TWMRC F_CIRCLEUP F_QUITG%token F_NOP F_TITLE F_VERSION F_EXEC F_CUT F_CIRCLEDOWN F_SOURCEH%token F_CUTFILE F_MOVE F_ICONIFY F_FOCUS F_RESIZE F_RAISE F_LOWER<%token F_POPUP F_DEICONIFY F_FORCEMOVE WINDOW_FUNCTION=%token F_DESTROY F_WINREFRESH F_BEEP DONT_MOVE_OFF ZOOM?%token F_SHOWLIST F_HIDELIST NO_BACKINGSTORE NO_SAVEUNDER%token F_ZOOM F_FULLZOOMG%token ICONMGR_FOREGROUND ICONMGR_BACKGROUND ICONMGR_FONT ICONMGR9%token ICONMGR_GEOMETRY SHOW_ICONMGR ICONMGR_NOSHOW>%token F_RAISELOWER DECORATE_TRANSIENTS RANDOM_PLACEMENT;%token ICONIFY_BY_UNMAPPING DONT_ICONIFY_BY_UNMAPPINGC%token WARPCURSOR NUMBER BORDERWIDTH TITLE_FONT REVERSE_VIDEOA%token RESIZE_FONT NO_TITLE AUTO_RAISE FORCE_ICON NO_HILITEB%token MENU_FONT ICON_FONT UNKNOWN_ICON ICONS ICON_DIRECTORY<%token META SHIFT CONTROL WINDOW TITLE ICON ROOT FRAMEH%token COLON EQUALS BORDER_COLOR TITLE_FOREGROUND TITLE_BACKGROUND>%token MENU_FOREGROUND MENU_BACKGROUND MENU_SHADOW_COLOR8%token MENU_TITLE_FOREGROUND MENU_TITLE_BACKGROUND>%token ICON_FOREGROUND ICON_BACKGROUND ICON_BORDER_COLORF%token NO_RAISE_ON_MOVE NO_RAISE_ON_DEICONIFY NO_RAISE_ON_RESIZE@%token COLOR MONOCHROME NO_TITLE_FOCUS FUNCTION F_FUNCTION:%token BORDER_TILE_FOREGROUND BORDER_TILE_BACKGROUND%token STRING%type string5%type action button number tbutton full fullkey %start twmrc %%twmrc : stmts ;stmts : /* Empty */ | stmts stmt ; stmt : error4 | FORCE_ICON { if (FirstTime) ForceIcon = TRUE; }: | REVERSE_VIDEO { if (FirstTime) ReverseVideo = TRUE; }* | ICON_FONT string { IconFont.name = $2; GetFont(&IconFont); }, | RESIZE_FONT string { SizeFont.name = $2; GetFont(&SizeFont); }* | MENU_FONT string { MenuFont.name = $2; GetFont(&MenuFont); }/ | TITLE_FONT string { TitleBarFont.name = $2; GetFont(&TitleBarFont); }2 | ICONMGR_FONT string { IconManagerFont.name=$2;! GetFont(&IconManagerFont); }D | ICONMGR_GEOMETRY string{ if (FirstTime) IconManagerGeometry=$2;}> | UNKNOWN_ICON string { if (FirstTime) GetUnknownIcon($2); }* | ICON_DIRECTORY string { if (FirstTime), IconDirectory = ExpandFilename($2); }5 | WARPCURSOR { if (FirstTime) WarpCursor = TRUE; }; | NO_RAISE_ON_MOVE { if (FirstTime) NoRaiseMove = TRUE; }? | NO_RAISE_ON_RESIZE { if (FirstTime) NoRaiseResize = TRUE; }B | NO_RAISE_ON_DEICONIFY { if (FirstTime) NoRaiseDeicon = TRUE; }9 | DONT_MOVE_OFF { if (FirstTime) DontMoveOff = TRUE; }< | NO_BACKINGSTORE { if (FirstTime) BackingStore = FALSE; }7 | NO_SAVEUNDER { if (FirstTime) SaveUnder = FALSE; }! | ZOOM number { if (FirstTime) { DoZoom = TRUE; ZoomCount = $2; } }, | ZOOM { if (FirstTime) DoZoom = TRUE; }; | BORDERWIDTH number { if (FirstTime) BorderWidth = $2; }9 | NO_TITLE_FOCUS { if (FirstTime) TitleFocus = FALSE; }= | RANDOM_PLACEMENT { if (FirstTime) RandomPlacement=TRUE; }= | DECORATE_TRANSIENTS { if (FirstTime) DecorateTransients = TRUE; }> | ICONIFY_BY_UNMAPPING { if (FirstTime) IconifyByUnmapping = TRUE; }3 | SHOW_ICONMGR { if (FirstTime) ShowIconManager = TRUE; }( | button string { root = GetRoot($2);* Mouse[$1][C_ROOT][0].func = F_MENU;( Mouse[$1][C_ROOT][0].menu = root; }4 | button action { Mouse[$1][C_ROOT][0].func = $2; if ($2 == F_MENU) { pull->prev = NULL;* Mouse[$1][C_ROOT][0].menu = pull; } else {" root = GetRoot(TWM_ROOT);% Mouse[$1][C_ROOT][0].item = ) AddToMenu(root,"x",Action,0,$2); } Action = ""; pull = NULL; }/ | string fullkey { AddFuncKey($1, cont, mods, $2, Name, Action); Action = ""; pull = NULL; cont = 0; mods = 0; }3 | button full { Mouse[$1][cont][mods].func = $2; if ($2 == F_MENU) { pull->prev = NULL;+ Mouse[$1][cont][mods].menu = pull; } else {" root = GetRoot(TWM_ROOT);& Mouse[$1][cont][mods].item = ) AddToMenu(root,"x",Action,0,$2); } Action = ""; pull = NULL; cont = 0; mods = 0; }5 | tbutton action { Mouse[$1][C_TITLE][0].func = $2;& Mouse[$1][C_ICON][0].func = $2; if ($2 == F_MENU) { pull->prev = NULL;+ Mouse[$1][C_TITLE][0].menu = pull;* Mouse[$1][C_ICON][0].menu = pull; } else {" root = GetRoot(TWM_ROOT);& Mouse[$1][C_TITLE][0].item = ) AddToMenu(root,"x",Action,0,$2);$ Mouse[$1][C_ICON][0].item =! Mouse[$1][C_TITLE][0].item; } Action = ""; pull = NULL; }B | DONT_ICONIFY_BY_UNMAPPING { list = DONT_ICONIFY_BY_UNMAPPING;} win_list- | ICONMGR_NOSHOW { list = ICONMGR_NOSHOW; } win_list$ | NO_HILITE { list = NO_HILITE; } win_list4 | NO_HILITE { if (FirstTime) Highlight = FALSE; }" | NO_TITLE { list = NO_TITLE; } win_list3 | NO_TITLE { if (FirstTime) NoTitlebar = TRUE; }& | AUTO_RAISE { list = AUTO_RAISE; } win_list( | MENU string { root = GetRoot($2); } menu+ | FUNCTION string { root = GetRoot($2); } function | ICONS { list = ICONS; } icon_list | COLOR { color = COLOR; } color_list( | MONOCHROME { color = MONOCHROME; } color_list8 | DEFAULT_FUNCTION action { DefaultFunction.func = $2; if ($2 == F_MENU) { pull->prev = NULL;% DefaultFunction.menu = pull; } else {" root = GetRoot(TWM_ROOT); DefaultFunction.item = ) AddToMenu(root,"x",Action,0,$2); } Action = ""; pull = NULL; }6 | WINDOW_FUNCTION action { WindowFunction.func = $2;! root = GetRoot(TWM_ROOT); WindowFunction.item = ( AddToMenu(root,"x",Action,0,$2); Action = ""; pull = NULL; } ;<full : EQUALS keys COLON context COLON action { $$ = $6; } ;Bfullkey : EQUALS keys COLON contextkey COLON action { $$ = $6; } ;keys : /* Empty */ | keys key ;#key : META { mods |= Mod1Mask; }" | SHIFT { mods |= ShiftMask; }% | CONTROL { mods |= ControlMask; } ;'context : WINDOW { cont = C_WINDOW; } | TITLE { cont = C_TITLE; } | ICON { cont = C_ICON; } | ROOT { cont = C_ROOT; } | FRAME { cont = C_FRAME; }" | ICONMGR { cont = C_ICONMGR; } ;)contextkey : WINDOW { cont = C_WINDOW; } | TITLE { cont = C_TITLE; } | ICON { cont = C_ICON; } | ROOT { cont = C_ROOT; } | FRAME { cont = C_FRAME; }) | string { Name = $1; cont = C_NAME; } ; color_list : LB color_entries RB ;color_entries : /* Empty */ | color_entries color_entry ;Hcolor_entry : BORDER_COLOR string { GetColor(color, &BorderColor, $2); }3 | BORDER_TILE_FOREGROUND string { GetColor(color, &BorderTileC.fore, $2); }3 | BORDER_TILE_BACKGROUND string { GetColor(color, &BorderTileC.back, $2); }- | TITLE_FOREGROUND string { GetColor(color, &TitleC.fore, $2); }- | TITLE_BACKGROUND string { GetColor(color, &TitleC.back, $2); }, | MENU_FOREGROUND string { GetColor(color, &MenuC.fore, $2); }, | MENU_BACKGROUND string { GetColor(color, &MenuC.back, $2); }2 | MENU_TITLE_FOREGROUND string { GetColor(color," &MenuTitleC.fore, $2); }2 | MENU_TITLE_BACKGROUND string { GetColor(color," &MenuTitleC.back, $2); }. | MENU_SHADOW_COLOR string { GetColor(color," &MenuShadowColor, $2); }, | ICON_FOREGROUND string { GetColor(color, &IconC.fore, $2); }, | ICON_BACKGROUND string { GetColor(color, &IconC.back, $2); }. | ICON_BORDER_COLOR string { GetColor(color, &IconBorderColor, $2); }/ | ICONMGR_FOREGROUND string { GetColor(color, &IconManagerC.fore, $2); }/ | ICONMGR_BACKGROUND string { GetColor(color, &IconManagerC.back, $2); } ;win_list : LB win_entries RB ;win_entries : /* Empty */ | win_entries win_entry ;>win_entry : string { if (FirstTime) AddToList(list, $1, 0); } ;icon_list : LB icon_entries RB ;icon_entries : /* Empty */ | icon_entries icon_entry ;.icon_entry : string string { if (FirstTime) {  Pixmap pm;  pm = GetBitmap($2); if (pm != NULL)" AddToList(list, $1, pm); } } ;!function : LB function_entries RB ;function_entries: /* Empty */# | function_entries function_entry ;Afunction_entry : action { AddToMenu(root, "", Action, NULL, $1); Action = ""; } ;menu : LB menu_entries RB ;menu_entries : /* Empty */ | menu_entries menu_entry ;Dmenu_entry : string action { AddToMenu(root, $1, Action, pull, $2); Action = ""; pull = NULL; } ;!action : F_NOP { $$ = F_NOP; } | F_BEEP { $$ = F_BEEP; } | F_QUIT { $$ = F_QUIT; } | F_FOCUS { $$ = F_FOCUS; }" | F_REFRESH { $$ = F_REFRESH; }( | F_WINREFRESH { $$ = F_WINREFRESH; }2 | F_SOURCE string { Action = $2; $$ = F_TWMRC; } | F_MOVE { $$ = F_MOVE; }& | F_FORCEMOVE { $$ = F_FORCEMOVE; }" | F_ICONIFY { $$ = F_ICONIFY; }& | F_DEICONIFY { $$ = F_DEICONIFY; }" | F_UNFOCUS { $$ = F_UNFOCUS; } | F_RESIZE { $$ = F_RESIZE; } | F_ZOOM { $$ = F_ZOOM; }$ | F_FULLZOOM { $$ = F_FULLZOOM; } | F_RAISE { $$ = F_RAISE; }( | F_RAISELOWER { $$ = F_RAISELOWER; } | F_LOWER { $$ = F_LOWER; }" | F_DESTROY { $$ = F_DESTROY; } | F_TWMRC { $$ = F_TWMRC; }" | F_VERSION { $$ = F_VERSION; } | F_TITLE { $$ = F_TITLE; }$ | F_CIRCLEUP { $$ = F_CIRCLEUP; }( | F_CIRCLEDOWN { $$ = F_CIRCLEDOWN; }" | F_CUTFILE { $$ = F_CUTFILE; }$ | F_SHOWLIST { $$ = F_SHOWLIST; }$ | F_HIDELIST { $$ = F_HIDELIST; }( | F_MENU string { pull = GetRoot($2); pull->prev = root; $$ = F_MENU; }0 | F_FILE string { Action = $2; $$ = F_FILE; }0 | F_EXEC string { Action = $2; $$ = F_EXEC; }. | F_CUT string { Action = $2; $$ = F_CUT; }7 | F_FUNCTION string { Action = $2; $$ = F_FUNCTION; } ;button : BUTTON { $$ = $1; if ($1 == 0) yyerror(); if ($1 > MAX_BUTTONS) { $$ = 0; yyerror(); } } ;tbutton : TBUTTON { $$ = $1; if ($1 == 0) yyerror(); if ($1 > MAX_BUTTONS) { $$ = 0; yyerror(); } } ;7string : STRING { ptr = (char *)malloc(strlen($1)+1); strcpy(ptr, $1); RemoveDQuote(ptr); $$ = ptr; }number : NUMBER { $$ = $1; } ;%%yyerror(s) char *s;{> fprintf(stderr, "twm: syntax error, line %d\n", yylineno); ParseError = 1;}RemoveDQuote(str) char *str;{ strcpy(str, &str[1]); str[strlen(str)-1] = '\0';} MenuRoot * GetRoot(name) char *name;{ MenuRoot *tmp; tmp = FindMenuRoot(name); if (tmp == NULL) tmp = NewMenuRoot(name); return tmp;}A%H? ~TWM.SAVE3  [FIELDS.X.TWM]LEX.L;1;11*[FIELDS.X.TWM]LEX.L;1+,3 ./% 4- 0@123KPWO56@S37hF8A/Ք9fG%HJ$%{O/*****************************************************************************/O/** Copyright 1988 by Evans & Sutherland Computer Corporation, **/O/** Salt Lake City, Utah **/O/** **/O/** All Rights Reserved **/O/** **/O/** Permission to use, copy, modify, and distribute this software and **/O/** its documentation for any purpose and without fee is hereby **/O/** granted, provided that the above copyright notice appear in all **/O/** copies and that both that copyright notice and this permis- **/O/** sion notice appear in supporting documentation, and that the **/O/** name of Evans & Sutherland not be used in advertising or publi- **/O/** city pertaining to distribution of the software without specif- **/O/** ic, written prior permission. **/O/** **/O/** EVANS & SUTHERLAND DISCLAIMS ALL WARRANTIES WITH REGARD TO **/O/** THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILI- **/O/** TY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND BE LIABLE **/O/** FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAM- **/O/** AGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, **/O/** WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS **/O/** ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PER- **/O/** FORMANCE OF THIS SOFTWARE. **/O/*****************************************************************************/H/*********************************************************************** *5 * $Header: lex.l,v 1.43 88/10/14 07:05:48 toml Exp $ * * .twmrc lex file *. * 12-Nov-87 Thomas E. LaStrange File created *I ***********************************************************************/static char RCSinfo[]=5"$Header: lex.l,v 1.43 88/10/14 07:05:48 toml Exp $";#include #include "gram.h"extern int ParseError;%}%k 4000%e 3000%p 6000%n 4000%a 3000qstring \"[^"]*\"number [0-9]+"button [Bb][Uu][Tt][Tt][Oo][Nn]7tbutton [Tt][Ii][Tt][Ll][Ee][Bb][Uu][Tt][Tt][Oo][Nn]/noraise [Nn][Oo][Rr][Aa][Ii][Ss][Ee][Oo][Nn]%%"{" { return (LB); }"}" { return (RB); }"=" { return (EQUALS); }":" { return (COLON); }@{button}{number} { (void)sscanf(&yytext[6], "%d", &yylval.num); return (BUTTON); }B{tbutton}{number} { (void)sscanf(&yytext[11], "%d", &yylval.num); return (TBUTTON); }"[Mm][Ee][Nn][Uu] { return MENU; }6[Ff][Uu][Nn][Cc][Tt][Ii][Oo][Nn] { return FUNCTION; }m { return (META); }s { return (SHIFT); }c { return (CONTROL); }window { return (WINDOW); }icon { return (ICON); }title { return (TITLE); }root { return (ROOT); }frame { return (FRAME); } iconmgr { return (ICONMGR); }f.nop { return F_NOP; }f.beep { return F_BEEP; }f.quit { return F_QUIT; }f.title { return F_TITLE ; }f.menu { return F_MENU; }!f.unfocus { return F_UNFOCUS; }!f.refresh { return F_REFRESH; }'f.winrefresh { return F_WINREFRESH; }f.file { return F_FILE; }f.twmrc { return F_TWMRC; }!f.version { return F_VERSION; }#f.circleup { return F_CIRCLEUP; }'f.circledown { return F_CIRCLEDOWN; }f.source { return F_SOURCE; }!f.cutfile { return F_CUTFILE; }#f.function { return F_FUNCTION; }&f.showiconmgr { return F_SHOWLIST; }&f.hideiconmgr { return F_HIDELIST; }"!" { return F_EXEC; }"^" { return F_CUT; }f.move { return F_MOVE; }%f.forcemove { return F_FORCEMOVE; }!f.iconify { return F_ICONIFY; }%f.deiconify { return F_DEICONIFY; }f.focus { return F_FOCUS; }f.resize { return F_RESIZE; }f.raise { return F_RAISE; }'f.raiselower { return F_RAISELOWER; }f.lower { return F_LOWER; }!f.destroy { return F_DESTROY; }f.zoom { return F_ZOOM; }#f.fullzoom { return F_FULLZOOM; }t.nop { return F_NOP; }t.raise { return F_RAISE; }t.lower { return F_LOWER; }t.move { return F_MOVE; }6{noraise}[Mm][Oo][Vv][Ee] { return NO_RAISE_ON_MOVE; }O{noraise}[Dd][Ee][Ii][Cc][Oo][Nn][Ii][Ff][Yy] { return NO_RAISE_ON_DEICONIFY; }@{noraise}[Rr][Ee][Ss][Ii][Zz][Ee] { return NO_RAISE_ON_RESIZE; })[Cc][Oo][Ll][Oo][Rr] { return (COLOR); }A[Mm][Oo][Nn][Oo][Cc][Hh][Rr][Oo][Mm][Ee] { return (MONOCHROME); }M[Nn][Oo][Tt][Ii][Tt][Ll][Ee][Ff][Oo][Cc][Uu][Ss] { return (NO_TITLE_FOCUS); }D[Nn][Oo][Hh][Ii][Gg][Hh][Ll][Ii][Gg][Hh][Tt] { return (NO_HILITE); }$[Zz][Oo][Oo][Mm] { return (ZOOM); }E[Uu][Nn][Kk][Nn][Oo][Ww][Nn][Ii][Cc][Oo][Nn] { return UNKNOWN_ICON; }?[Ww][Aa][Rr][Pp][Cc][Uu][Rr][Ss][Oo][Rr] { return WARPCURSOR; }D[Bb][Oo][Rr][Dd][Ee][Rr][Ww][Ii][Dd][Tt][Hh] { return BORDERWIDTH; }=[Tt][Ii][Tt][Ll][Ee][Ff][Oo][Nn][Tt] { return (TITLE_FONT); }8[Mm][Ee][Nn][Uu][Ff][Oo][Nn][Tt] { return (MENU_FONT); }8[Ii][Cc][Oo][Nn][Ff][Oo][Nn][Tt] { return (ICON_FONT); }B[Rr][Ee][Ss][Ii][Zz][Ee][Ff][Oo][Nn][Tt] { return (RESIZE_FONT); }L[Rr][Ee][Vv][Ee][Rr][Ss][Ee][Vv][Ii][Dd][Ee][Oo] { return (REVERSE_VIDEO); }3[Nn][Oo][Tt][Ii][Tt][Ll][Ee] { return (NO_TITLE); }=[Aa][Uu][Tt][Oo][Rr][Aa][Ii][Ss][Ee] { return (AUTO_RAISE); }A[Ff][Oo][Rr][Cc][Ee][Ii][Cc][Oo][Nn][Ss] { return (FORCE_ICON); }>[Dd][Ee][Ff][Aa][Uu][Ll][Tt][Ff][Uu][Nn][Cc][Tt][Ii][Oo][Nn] {& return (DEFAULT_FUNCTION); }:[Ww][Ii][Nn][Dd][Oo][Ww][Ff][Uu][Nn][Cc][Tt][Ii][Oo][Nn] {% return (WINDOW_FUNCTION); }*[Ii][Cc][Oo][Nn][Ss] { return (ICONS); }O[Ii][Cc][Oo][Nn][Dd][Ii][Rr][Ee][Cc][Tt][Oo][Rr][Yy] {return (ICON_DIRECTORY);}G[Bb][Oo][Rr][Dd][Ee][Rr][Cc][Oo][Ll][Oo][Rr] { return (BORDER_COLOR); }>[Tt][Ii][Tt][Ll][Ee][Ff][Oo][Rr][Ee][Gg][Rr][Oo][Uu][Nn][Dd] { return (TITLE_FOREGROUND); }>[Tt][Ii][Tt][Ll][Ee][Bb][Aa][Cc][Kk][Gg][Rr][Oo][Uu][Nn][Dd] { return (TITLE_BACKGROUND); }R[Bb][Oo][Rr][Dd][Ee][Rr][Tt][Ii][Ll][Ee][Ff][Oo][Rr][Ee][Gg][Rr][Oo][Uu][Nn][Dd] {& return (BORDER_TILE_FOREGROUND); }R[Bb][Oo][Rr][Dd][Ee][Rr][Tt][Ii][Ll][Ee][Bb][Aa][Cc][Kk][Gg][Rr][Oo][Uu][Nn][Dd] {& return (BORDER_TILE_BACKGROUND); }:[Mm][Ee][Nn][Uu][Ff][Oo][Rr][Ee][Gg][Rr][Oo][Uu][Nn][Dd] { return (MENU_FOREGROUND); }:[Mm][Ee][Nn][Uu][Bb][Aa][Cc][Kk][Gg][Rr][Oo][Uu][Nn][Dd] { return (MENU_BACKGROUND); }N[Mm][Ee][Nn][Uu][Tt][Ii][Tt][Ll][Ee][Ff][Oo][Rr][Ee][Gg][Rr][Oo][Uu][Nn][Dd] {% return (MENU_TITLE_FOREGROUND); }N[Mm][Ee][Nn][Uu][Tt][Ii][Tt][Ll][Ee][Bb][Aa][Cc][Kk][Gg][Rr][Oo][Uu][Nn][Dd] {% return (MENU_TITLE_BACKGROUND); }>[Mm][Ee][Nn][Uu][Ss][Hh][Aa][Dd][Oo][Ww][Cc][Oo][Ll][Oo][Rr] {! return (MENU_SHADOW_COLOR); }:[Ii][Cc][Oo][Nn][Ff][Oo][Rr][Ee][Gg][Rr][Oo][Uu][Nn][Dd] { return (ICON_FOREGROUND); }:[Ii][Cc][Oo][Nn][Bb][Aa][Cc][Kk][Gg][Rr][Oo][Uu][Nn][Dd] { return (ICON_BACKGROUND); }>[Ii][Cc][Oo][Nn][Bb][Oo][Rr][Dd][Ee][Rr][Cc][Oo][Ll][Oo][Rr] {! return (ICON_BORDER_COLOR); }F[Dd][Oo][Nn][Tt][Mm][Oo][Vv][Ee][Oo][Ff][Ff] return (DONT_MOVE_OFF); }J[Dd][Ee][Cc][Oo][Rr][Aa][Tt][Ee][Tt][Rr][Aa][Nn][Ss][Ii][Ee][Nn][Tt][Ss] {# return (DECORATE_TRANSIENTS); }k[Ii][Cc][Oo][Nn][Ii][Ff][Yy][Bb][Yy][Uu][Nn][Mm][Aa][Pp][Pp][Ii][Nn][Gg] { return (ICONIFY_BY_UNMAPPING); }[Dd][Oo][Nn][Tt][Ii][Cc][Oo][Nn][Ii][Ff][Yy][Bb][Yy][Uu][Nn][Mm][Aa][Pp][Pp][Ii][Nn][Gg] { return (DONT_ICONIFY_BY_UNMAPPING); }u[Ii][Cc][Oo][Nn][Mm][Aa][Nn][Aa][Gg][Ee][Rr][Ff][Oo][Rr][Ee][Gg][Rr][Oo][Uu][Nn][Dd] { return (ICONMGR_FOREGROUND); }u[Ii][Cc][Oo][Nn][Mm][Aa][Nn][Aa][Gg][Ee][Rr][Bb][Aa][Cc][Kk][Gg][Rr][Oo][Uu][Nn][Dd] { return (ICONMGR_BACKGROUND); }W[Ii][Cc][Oo][Nn][Mm][Aa][Nn][Aa][Gg][Ee][Rr][Ff][Oo][Nn][Tt] { return (ICONMGR_FONT); }k[Ii][Cc][Oo][Nn][Mm][Aa][Nn][Aa][Gg][Ee][Rr][Gg][Ee][Oo][Mm][Ee][Tt][Rr][Yy] { return (ICONMGR_GEOMETRY); }W[Ss][Hh][Oo][Ww][Ii][Cc][Oo][Nn][Mm][Aa][Nn][Aa][Gg][Ee][Rr] { return (SHOW_ICONMGR); }g[Ii][Cc][Oo][Nn][Mm][Aa][Nn][Aa][Gg][Ee][Rr][Dd][Oo][Nn][Tt][Ss][Hh][Oo][Ww] { return ICONMGR_NOSHOW; }T[Nn][Oo][Bb][Aa][Cc][Kk][Ii][Nn][Gg][Ss][Tt][Oo][Rr][Ee] { return NO_BACKINGSTORE; }E[Nn][Oo][Ss][Aa][Vv][Ee][Uu][Nn][Dd][Ee][Rr] { return NO_SAVEUNDER; }Y[Rr][Aa][Nn][Dd][Oo][Mm][Pp][Ll][Aa][Cc][Ee][Mm][Ee][Nn][Tt] { return RANDOM_PLACEMENT; }3{qstring} { yylval.ptr = yytext; return STRING; }5{number} { (void)sscanf(yytext, "%d", &yylval.num); return (NUMBER); }\#[^\n]*\n {;}[\n\t ] {;}. { fprintf(stderr,* "twm: bad character `%s', line %d\n", yytext, yylineno); ParseError = 1; }%%yywrap() { return(1);}#define unput(c) TwmUnput(c)#define input() TwmInput()#define output(c) TwmOutput(c)W3?x~TWM.SAVE  [FIELDS.X.TWM]TWM.EXE;2XECUTE.C;2*[FIELDS.X.TWM]TWM.EXE;2+, ./% 4- 0123 KPWO56`y!&7'w8OH9G%HJ{2~TWM.SAVE  [FIELDS.X.TWM]TWM.EXE;21 |0DX0205(&|bhD+TWMV1.0@%&05-05   : ZWG  ?%!dDECW$XLIBSHR_001.! DECW$TRANSPORT_COMMON_001! LIBRTL_001O! MTHRTL_001 ! VAXCRTL_001'!dDECW$DWTLIBSHR_001!  LBRSHR_001"! SECURESHR_001#!SECURESHRP_001twm: syntax error, line %d yacc stack overflowsyntax errorbLoB_GoOpxbLoB_GoOpxbLoB_GoOpxbLoB_GoOpxbLoB_GoOpx%d%d%dtwm: bad character `%s', line %d bad switch yylook %dxtermXTermhptermHPtermtwm: out of memory =150x5+0+0Usage: twm [-display display] -dUsage: twm [-display display] HOME./twm: can't open the display 8x138x138x13fixed8x139x158x13fixedTWM Icon ManagerTWM Icon Manager%s%d/%d/%d%s Date: %d/%d/%d %stwm: Are you running another window manager? twm.rcLooking for startup file %s rtwm: couldn't open "%s" twm: errors found in "%s", twm aborting twm: unknown key name "%s" TwmWindowsTWM Windowstwm: couldn't find function "%s" %stwm: couldn't open "%s" twm: nothing in the cut buffer twm: couldn't open "%s" twm: out of memory %d x %d flag for zooming/unzooming is not valid! SYS$LOGIN:%s%s:%sX_BITMAPS%s:%sX_BITMAPS.twmrc: invalid bitmap file "%s" .twmrc: out of memory "%s" .twmrc: failed to open bitmap file "%s" .twmrc: bitmap error = 0x%x on file "%s" twm: invalid color "%s" twm: invalid color "%s" fixedtwm: couldn't open font "%s" or "%s" $Revision: 1.2 $$Date: 88/10/18 11:36:29 $@(#)twm $Revision: 1.2 $@(#)twm $Date: 88/10/18 11:36:29 $TERMINATETWM_OUTMBXTWM_INMBXSYS$SYSTEM:LOGINOUT.EXETWM_PROCTWM_OUTMBXTWM_INMBXTWM_OUTMBX%s Error in %s status = %x output qiosys$login:twm.logwError in %s status = %x create terminate mailboxError in %s status = %x create out mailboxError in %s status = %x create input mailboxError in %s status = %x get device informationError in %s status = %x Create processError in %s status = %x QIOError in %s status = %x output qio@$4$dua7:[fields.x]xprogError in %s status = %x write qiospawn/nowait DCL: "%s"Error in %s status = %x write qio$Header: gram.y,v 1.45 88/10/14 07:05:55 toml Exp $@(#)yaccpar 4.1 (Berkeley) 2/11/83$Header: lex.l,v 1.43 88/10/14 07:05:48 toml Exp $@(#)ncform 1.6 88/02/08 SMI$Header: add_window.c,v 1.50 88/10/13 07:19:19 toml Exp $@}_}_}_}_}_@}_}_}_}_}_@@@@GDDDDADADADADAD@@@_UU_UU_P_@@@22$Header: gc.c,v 1.15 88/10/13 06:35:07 toml Exp $$Header: list.c,v 1.9 88/10/13 07:19:06 toml Exp $$Header: twm.c,v 1.2 88/10/15 19:12:05 jim Exp $ ``0033300333 UUUUUUUUUUUUUUUU$Header: parse.c,v 1.16 88/07/19 13:49:08 toml Exp $$Header: menus.c,v 1.2 88/10/18 11:36:25 jim Exp $ ?? $Header: events.c,v 1.91 88/10/14 07:06:12 toml Exp $ ``0033300333 $Header: resize.c,v 1.21 88/10/14 06:02:04 toml Exp $@@@GDDDDADADADADAD@@@_UU_UU_P_@@@$Header: util.c,v 1.2 88/10/15 19:12:02 jim Exp $@}_}_}_}_}_@}_}_}_}_}_@$Header: version.c,v 1.2 88/10/18 11:36:29 jim Exp $ A  7  _No Name , #-_%,.*8~+v-s 7 !  #$"  '9()&-XHAYPS?=RQZ[TCUDF@ILN-GE-OB>-VWtJKji}hMXHAYPS?=RQZ[TCUDF@ILNGE|OB>]VW{eJKudcbaM^<\-XHAYPS?=RQZ[TCUDF@ILNGEOB>VWJK;\M/0123456:`fgklwxyz\mnopqr@<C=B;.0DF8\^]$()%:a546172A>?bE_` f9# " *+3!  &' cPPOGHIOJKLMN/JKLMNQdeRSTUWXVYZ[,-OO     2- *589BAu2"GC:- != " * Bv#%$*HCw589+I%% ) ) ) ) ) ) ) ) ) ):. +G},J=bd ,f/c&*Hgh+I'jkco%'( !. +",Jp6# ,$7/%%%%%%%%%'%%%%%%q%%%%%%'%%6DxDyDz70rD{tu-K1/N3'''''''''4''''''0O''''''0'';>-K1/N31P2Q<>.L3R4S.M4v6Y7Z8\9]7[0O:^;_<`=a!Dn?O@PE];w>!D!i1P2Q<xn.L3R4S.Mi>6Y7Z8\9]7[y:^;_<`=az!D?s@tE]{>>>>>>>>>!D>>>>?>|>>>@>>F]>>!D!D!D!D!D!D!D!D!EH~!D!D!D!D!D!DI!D!D!D!D!D!DA!D!D5TJKF|LM5UNOPQRST!FH~5V5W5Xe}IUelVWle5TJKLM5UNOPQRSTXY5V5W5X>b>c>dZ>eU>f>gVW>h>i>j[\>k>l>m>n>o>p>q]^>r_`XYam~sZm[\]^_`as~ss     !      "#$%&'()*+,-./0123456789:;<=> ?@ABEEEEEEEEEEFGHIJKCL MD N O Q RS PVWTXABUYZ[\]^_`aFGHIJKCL MD N O Q RS PVWTXbdUYZ[\]^_`aef g"h#i$j%k'lc(m)n*o+p,q-r1s2t3u4v5wbd6x7y8z9{:|<}=~?ABef gCDFGHcIJKLMNOPQRSTUVWXYZ[\]AB^_`CDFGHaIJKLMNOPQRSTUVWXYZ[\]bc^_`defgdahijkmnopqstuvwz{|bcdefgd          !"#$%&'( )*+,-./0123 !"#4$%&'(5 6 7 8 9)*+ :,-./0123;<=>?@ABC4DEF G!H5 6 7 8 9#I$J%K :&L'M(N)R(O*S(P(Q;<+T,U-V.W0X1Y2Z4[DEF G!H5\6]7^8_=c#I$J%K@d&L'M(N)R(O*S(P(Q:a<b+T,U-V.W0X1Y2Z4[AeBfCgDhEi5\6]7^8_9`9`9`9`9`9`9`9`9`9`FjGkHl:a<bImJnKoLpMqNrOsPtQuRvSwDhEiTxUyVzW{X|Y}Z~\^_abdfFjGkHlhiImJnKoLpMqNrOsPtQuRvSwjkTxUyVzW{X|Y}Z~\^_ablmnpqhirstuvwtxyz{jk|~lmnpqrstuvwtxyz{|~#%-357 !pqrstuwxyz{|}~= ="/19:v$a&(+.4e6O8>?@A0m2iBCDEFGHIJKLM`bcdfNPlnhjkgQRSTUVWXYZ[\]^_;<o"')#*,  "0000000000ABCDEFGHIKLMNOPRSTUVWYZABCDEFGHIKLMNOPRSTUVWYZ_ /#'e[ONM93*"           !""#$$%&&' dB@lBlBlBlB>L=ĩ$E̩lBةlBBDBDFBdG B(F0)';E-L6#"XWSRdJIY`V8fbON[\7caUTQP_^]^SR2Y^ЬPݬݬP޼Q@^ݬ|SPխݬMPP<^X$YVホWZ[S2STfUHZR;Џck\\\\ʹ\\\ѭ\ߤP;ʹ\\ʹjݴ2;\LfͼͼycPccc2ͼ\c\\\\ͼͼ ͼP>P2ͼ\Lgͼ2ͼ\2Li\\c#Џcvjͼ;kk\\k192;\Lͼͼ1cPccc~\\Э\; P\\Э\;\\2\\c\\Э\ͼͼPͼ12k\\PP11 b?P1ߤ2Q\\k\ѭ\q2\2Lf\\\\\ͼͼ+ͼ"2ͼ\2Lg\Li2ͼ\Lg;1P2\Lfͼ\\ʹ\\ʹ\ѭ\PcЏc1P2ͼ\2L\\\\\\ʹ͸2ͼ\2Lc\\\\ʹ\\ʹʹ\Ьjͼ2ͼ\Lͼ2ͼ\2LP2\\PPP\\ 2\Lg;2;Pͼ\@i\P2ͼ\2Ld\Lg;2\\PP-AUq -AUi}%9MaA}UI U a m       a  !)19 Ie ) E a } E m    ) 5 A M Y e q }  - = M u  ?P1 ``1 P`11 PݸaaM1v Pݸ#11Z Pݸaa1> Pݸsl1" Pݸ``ݥ1 P"` ݸ`1 ` ݸB1 _ݸDP9`1 P_1 P_1 P_1~ P_х1j P_^1V Pr_)^1B P^_݅1. PJ_^ݸ1 ._i^1 P_ ݸ]1 _51 P^Y1 P^]1 P^-_1 P^=1 PݸP<͸\ŏ \LŠ\Џl͸\ŏ \LŨ\Т P͸\ŏ \LŠ\ݸlݸ$Т@\͸\ŏ \LŨ\Т@lCPߤ?IP<͸\ŏ \LŬ\ݸݢ4ߤIݢ<FPlޤK\\4@1ݢ4ݢ8ݸݢPݢT͸\ݬDޤL\\4@TP1h͸\ŏ \ŏTP\PP\P\Le\ݸlݸ6Т@\͸\ŏ \ŏTP\PP\P\L\Т@lUߤMQP<͸\ŏ \ŏTP\PP\P\L \ݸݢ4ߤWݢ<EPlޤY\\4@TP1͸\ŏ \L\ݸl͸\ŏ \L\ݸlݸ;Т@\͸\ŏ \L\Т@l͸\ŏ \L\Т@lmߤZmP<͸\ŏ \L\ݸݢ4ߤdݢ<EPl͸\ŏ \LP͸\ŏ \L\l`ޤf\\4@1Џ7L1Џ2L1ЏAL1y[[1fPЏ>L1Yv[a1FPЏ?L19ݸP<1%ݸxP<1ЏEL1Џ_X1Џ`X1ݸ/ZݸТ@\Т@Z3PߤgP<ݸݢ4ߤqݢ<CPYޤs\\4@1ݸ׃ߤtP<ݸݢ4ߤ~ݢ<CPﲃĀ\\4@1:Pݸj10ݸj1(ɢP\\P1ɢP\\P1ɢP\\P1T1T1T1T1T1T1T1T1T1T1T1ݸ8T1Pݸ|XݢX1PݸhXݢX丹1fPݸPXݢX1JPݸݢXm1.PݸxݢXQ1PݸDZݢX51Pݸ,ZݢX1Pݸ8ZݢX1Pݸ ZݢX1PݸYݢXŝ1PݸXݢX艹1jPݸXݢX1NPݸXݢXq12PݸXݢXU1PݸXݢX91PXݸݢL-1PW-ݸPխݭ͸\ݬݢLc-1ݸݢ4āݢ<@Ă\\41xݸݢ@ݢ4͸\ݬݢ<@ă\\4@1GPЏj1:PЏ#j1.PЏj1"PЏj1PЏ j1 PЏ"j1Pݸ4Џ j1Џj1PЏj1PЏj1PЏj1PЏ j1PЏj1PЏ*j1PЏ+j1PЏj1PЏ3j1vPЏj1jPЏ!j1^PЏ j1RPЏj1FPЏj1:PЏ j1.PЏj1"PЏj1PЏ&j1 PЏ'j1PݸPP@Т@\Т<Џj1ݸ4Џ j1ݸ4Џj1ݸ4Џj1ݸ4Џcj1ݸjݸݸ jusPݸjݸ^ݸ jMKPݸ@PP+PDݸݢDݢD@ТDj Pݸj1^uCRr{WTUXSVPխ1tPЭPPl8 ,Hht(4@LXdp| $0<HT`lx ,8DP\ht(4@LXdp|?P1UyPP1TPЏP1GЏP1;ЏPP1/ЏOP1#db[ЏP1dߢ >ЏP1PЏP1ЏbP1ЏGP1ЏHP1ЏIP1ЏJP1ЏLP1ЏKP1ЏMP1{ЏNP1oЏ/P1cЏP1WЏ#P1KЏP1?ЏP13ЏP1'Џ P1Џ P1Џ"P1Џ P1Џ P1ЏP1Џ P1ЏP1ЏP1ЏP1ЏcP1Џ&P1Џ'P1ЏP1ЏP1sЏP1gЏP1[ЏP1OЏP1CЏP17ЏP1+ЏP1Џ3P1ЏP1Џ!P1Џ*P1Џ+P1ЏP1ЏP1ЏP1ЏP1Џ\P1Џ]P1Џ^P1Џ_P1Џ`P1wЏaP1kЏAP1_Џ%P1SЏDP1GЏ8P1;Џ:P1/Џ;P1#ЏBP1ЏCP1 Џ=P1Џ<P1Џ>P1Џ?P1Џ@P1ЏP1Џ P1ЏEP1ЏFP1ЏQP1ЏRP1ЏSP1{ЏdP1oЏeP1cЏTP1WЏUP1KЏWP1?ЏXP13ЏVP1'ЏYP1ЏZP1Џ[P1Џ$P1Џ4P1Џ6P1Џ7P1Џ,P1Џ-P1Џ.P1Џ0P1Џ1P1Џ2P1Џ(P1Џ)PtPЏ5PhPc\\dЏfPVdߢcЏ9P;8P4Pecߢ fxgPPݭߢ+hZPխ12P^2P^8TEUBZ;Wp|V Sr[XY hRRP}hRiRRe\\rzЭk^  \\нf\ѭ\$խЭ\Ьխ16Pf\ѽ\1(ЭR\\1P\\bЭf\ѭ\1ŭ\\\ѭgmŽ Pc\\PP\Э\Ŭ Pc\\Pc\P\\\ܘ\\11PЭR\\Э\Ŭ Pc\\PPЭb1q1-f\ѭ\1 fPf\­\\\\\PPЭŭ\\\ѭglŽ Pc\\PP[Э\Ŭ Pc\\Pc\P\\\ܘ\\01PЭR\\Э\Ŭ Pc\\PPЭb1Э\Lj\\\\\ѭgjŽ Pc\\PPYЭ\Ŭ Pc\\Pc\P\\\ܘ\\[0mЭR\\Э\Ŭ Pc\\PPЭbBPЭ\Ьխнf\ѭ\1 P\\ܘ\\/P1ЭP\\eRPR1ЭP\\ܐ`ս1н\Ьdd1d\l1Э﫲d\l\Ltd\l\\н\ݬPWe\ѭ\NP\\ЭP\\ܘ`\\A/d\l\\н\ݬP e\ѭ\\\Эh\\\\\ii\LhdPd\\d`P\\.ЭP\\e\P\1h\\ P+.P\\hh\\.h\\1P^լP޼P`!PЬQPPaP޼P`P^-PPP^-.^ݬ-^7ZHTGSBJVKJ[(JXoYvHU>Wݏ\PЭPPЬ`ЭPZѬgIЭIݏ@ЭPݠe̗ЭP|ЭPݠeЭPpЭPݠeЭP}n0ЭP0ЭPݠe|ЭRЭPݠe֗P ЭP +ЭP RˏbPPЭRЭP PР $ ЭP$ЭPЭPݠe P ЭPЭP0jPUЭP4ߪP:ЭP0ߪ {PЭP4ߪ`PPЭP8 ЭP8ЭPˏPP;ЭRЭP|ЭRЭP€ЭRЭP„ЭRЭPˆЭPˏPP?ЭRЭP|ЭRЭP€ЭRЭP„ЭRЭPˆЭPՠpЭQlPPpЭP0ЭQlPP0ЭP4ЭQlPP4ЭRЭPРplЭRЭP0ЭPݠlݏAPPQPQQFЭRЭP0ЭPݠlݏ?PPPBЭQ|FPPHpF3ЭRЭP0ЭPݠlݏ7PPQPQQHl'ЭP0ЭPݠlݏ>pPPЭPhPЭQaDPPhE1խ1k1ЭP (ЭP RˏbPPЭP PѠ1ЭP8ЭPՠ| ЭP1_ee efdckEhEie f6P^mi ie PխP1yЭPݠpYPЭPݠp+EPPEPPݭEe]EePЭPݠpPЭPݠpDPHPP DDeЭPBЭPnBЭQBPPPZBЭQЭPhQsBPPQQ4BfdckDhoDie ~BBdci|efP(c,dPP41APdPPAPcPPie {AxAdcjfdckChCie ѭcѭdݭdckcdeP ݭpPi{BeUeLЭPc|ЭRЭPdhPP€ЭQ@PP@PPЭRЭPàhq@Q@PPQQˆetAlխg h_ЭPǴPPg2ǴЭPǸPPg2ǸЭPǴ|ЭPǸǴPPǴǸPPǸЭQЭPhЭRЭPРh€ЭQЭP|PP`ЭQЭPPPdЭPhЭPlp`ݭЭPݠeЭRЭPݠpPЭPݠpgPxЭPt߭߭߭߭ݏ%ЭPݠe P ЭRЭPРptЭPՠt ЭRЭPРptЭP:ЭP<ЭP>Fg>g 6gPЭЭQ&gPPЭgЭRЭPР|DЭQЭRЭPàh€PPHeЭRfa>j>ЭQЭPhPPЭPЭPݠHЭPݠDie Ž QPaЭR|f >>ЭP>PP=PPЭPݠ e pQPa;?<ЭPF2 ?ЭPݠ e?ЭPݠeɭ̏@PPePޠQPa`ɭPP̞ͫPЏ`ɭPP̞ͯPe`ɭPPeQͳPa`ЭRͧݭieP<ݭ2 <ЭPݠ ea<ЭPݠeH<ЭPݠe/<ЭPݠ$e<ЭPݠeݏЭPݠeݏ<ЭPݠ ewݏ ЭPݠe^ЭPݠeЭPݠhЭPݠ ЭPݠeЭQЭPhPPЭPЭPݠHЭPݠDݭlЭPD<1ЭPݠlݏEPPPЭPPPP&ЭP0ЭPݠlݏEbPPPխ1t=e=ЭPdЭP`kg=X=ݭe ;ЭPݠdЭPݠ`iePЭPݠdЭPݠ`<ݭݭe JЭPDխ1ЭP 1ЭP RˏbPP1<<ЭPdЭP`k<<ЭP Pݠ e ʊ:ЭPݠdЭPݠ`iePЭPݠdЭPݠ`;ݭЭP Pݠ e eխ1;1ЭPݠlݏEPPPЭPPPP&ЭP0ЭPݠlݏEwPPPխ1;z;ЭPdЭP`k|;m;ݭe 9ЭPݠdЭPݠ`iePЭPݠdЭPݠ`:ݭݭe _խ1b{ЭPb`ЭPybd89ЭPݠdЭPݠ`iePЭPݠdЭPݠ`=:ݭ"be ԈխЭPdЭP` Э|ЭRЭPݠtPЭPݠt9FP\ЭQ\PP\ЭQЭPѡ\`6ЭQЭRЭPà\`PPPTЭQTPPTЭRЭPР`\ ЭPTЭRЭPd9PPXЭP 1ЭP RˏbPPЭRЭP PޠQ4Pa`LPЭR88ЭPd8PPPЭPݠ\ie 4QPaݏ ЭPݠ4e ЭP8P`խ{ЭQЭPѡ\`ЭRЭPà`\PPPЭR|ݭ/7!7ЭPݠdЭPݠ`ݭЭPݠ4e 8QPa76ЭPݠ4eݭ^ݭЭRݭ4mP@ЭPՠ@Bݭp^ЭPР@Pݠ eݭO^ЭPР@Pݠemݭ.^ЭPݠePݭ^ЭPݠ e3ݭ]ЭPݠeݭ]ЭPݠeݭ]ЭPݠe܅ݭ]ЭPݠ4eݭ]ЭPݠ$eݭc]ЭPݠ,eݭhݥ ͸P^ݬ+5؄խѭ PPPPP^\խPݭнխP^\խPݭнխP^\խPݭ!нխP^i\խPݭ)нխP^Y6T3S74Rŏ QPQP@dP`,c ЬPݠݭݭb  ^3R4խ1UЭQС PP~P<< P?P1!ЬPݠЭPݠЭP PPb1PЬPݠ4ЭPݠЭP PPbނЬPݠЭPݠЭP PPb1ЬPݠЭPݠЭP PPb~ЬPݠ4ЭPݠЭP PPbPЬPݠЭPݠЭP PPb"нխ1P ^]2RЬPݠݏݭb߁ ^aYS"2R2խ1ЭQС PPe@ P>?P1ЬPݠЭPݠЭP PPbgqЬPݠ4ЭPݠЭP PPb?ЬPݠЭPݠЭP PPb$cЭPݠЭP PPbPнխ17P|^X1UM1V*1T'SЏ ЬRߣ:ЬPݠ<ЬPݠsQPaЬPޠP`ЬRݭefЬPݠd ̀QPaЬRߣvЬPݠ<ЬPݠ`s(QPaЬPޠ(P`ЬRݭefЬPPPЬPݠd I$QPaЬRߣXЬPݠ<ЬPݠr QPaЬPޠ P`ЬRݭefЬPPPЬPݠd QPaЬRÔЬPݠ<ЬPݠUr0QPaЬPޠ0P`ЬRݭef WЬPݠd H,QPaЬPݠd~ЬPݠ,d~^.U/Z0W0SX.T/[0VUX.Y%Rբ<PO2P'&POPn)P'PЭխ1PЭPݠixPݭЭPݠݬ>xPRլ !ݭЭPݠ޼ P`xP-լ #ݭЭPݠЬ PݠwPP PЭPРPнխ1jP^ݬݬPP^wS (ZP[|&YMU&V/NW&TNRwXѬѬߣ hSw%wѬ?ߣ*ЬPݠwP ЬPРPߣ-hwvvPѭPPvvPѭPPvPPvPPnvߣL[vPjjޣQPPjj_vP&LPPeLPPbP`P`P`P`ݭ uPddߣThvudPgŏPgQdPPA$P`V%ŏPgQdPPA(P`>%gdpPPP?LŏPgQdPPA0P`P`$ŏPgQdPPA P`KŏPgQdPPAP`K>PP3tݏ Kd7tgdBtPPsdssPd fPݣc |~=d fP ݢdUf=+<X䟭XݢdeXݢdeg RgRPԠ eQ ReRPԠ R ReRPԠ ߦݬfPR/@RPP^[ZWUXIY,fPSЬTT dSdԣ SФSЬRRЬ cԣԣ ԣ(Ь$R=fPRݥoePVVV V ѣ$;ݧgRRVŤ$R~ݤh xeP<0~ݣhd>ݪg~VPŤ$P~~ݤh 8eP<~ݣhdլ1Ьߩ3~ݣWP<nЮ0蟭ݮ~|~ݣh dP ݣ hdЬP(Skݣ hdЬR֢$SkݣhdѢ$SkУ PݠhjdSPPH^/[WVUTլЬPP>1`R0PfݢdVcݢd2cRPbRPdRެScR PcRԢcRbԢ| ԢԢ(<~|~߫'RZt;R<~Rݢpc;bRЬRբ$~:p:d cRԢ,ЬQ,Qlѡ1ѡ( YY XX@ZaRvbSPgZݢdbYݢdcբ  Xݢ dcѢ$#ݢcPݢݥObPbRЬSPģ$P RR+9 "9 PR RR 9 P9 Yã R RԭRRR PYݣdaYݣdaRR~ ~|~|~ݣd aݣdAaݣd`ݣdmaݣd a^eRPݢݬaPRPТ RPPΰ^o[Y5X^8P8h `Ѭ 1aЬPP ** "  Nrr  U Z BjUb vUUvUUFUUUUUUU P?PPc111Rݢ h_1Rݢ h9`Rݢ4h&`1Pn7hQ_1}PЬ:3`^(`nݬݬ 9Rݢ91<ЬRRkݢhK_ݢ h_1ЬtRЬTz6SR0S6 6h S_T6RPRRլxݬ@ݬ<|~|~6h 5_ЬRѬ 41 66 60R`^(`n6ЬtRЬTSR/S%6 6h ^T 6RPRRݬ B1 PЬtRЬTSR0S5 5h O^T5RPRRݬA1 PЬtRЬT5SR0Sn5 `5h ]TT5RPRRЬ4լxݬ@ݬ<|~|~$5h ]S5K5 C50Ѭt3ЬRݢpM^Pݢp55ݢ<ݢhy]4PѬt+ЬRݢt^PݢtݢXݢTݢ4hC]h"]"44ݬ(h ]ѬtЬRТ4 PЬRѬ 4Т ެTФ  Ф$ լt ЬRh Ь w {mݬ h \7 UUUS S~ S~ ,RUR~ (RUR~ݤF RR1 V (R SSR B ,RSR SS" SR SR R RR R S S SS S  ~ ~|~|~ h [Z X N 0 : h G[Ь0ЬTT RݢT[PRS PТ RSSUݬe[[UScR]Т$PPDDDDDDLDDLDDLLLLLLLDDLLLLLLLD?PS PbRSSHЬtRЬT SR-S1 1h XZT1RRReV1ݬxݬt`^(`nݬݬ ݦݦ$fV1ЬtRЬT" SR0SR1 D1h YT81RPRRЬR<Rv 1PѬ1:1 Sc УUУT  ݢ ݢ4g ݢ ݣ4gݢhfj ݢ hf ݢ hOݢ4heТ@Pݠhe<bRެTdR<S>ݢ ݢ4>>$7l'R.S$>ЬPݠ ݢ4y>PbRЬRݢhNjݢ hN ݢ hNЬRݢ4hNТ@R ݢhN( ЬR<|~|~ݢ h NR<^p[ZVЬSRHR2RHݣ4f!Nݣ4fYNЬRТ@R ݢfMެYiR$1C&S1ЩTg=X$NU-NW$$1iR$1ծH> ݢ4ݣ4h ݢ4ݣ hݣ feݣfeݣ4feiRFjݢ fgjݢfgSkfMkYУ@RݢfM<>cS1LծHЬRݢ4ݢ <ЬRݢ fBMݢf6M8"Fjݢ f*MjݢfMѬkfLkЬR<ծH>P>^RvQ#dЭP"$\\@b"F \\0 \\DP\\P\\LV\\H\\\\1\\.\\\\ <"\\\ \\„\\p\\o\\€\\<^VUZXYb[#W"TSJRfd^PcJPNf f\\d\\Эjhi¼¸k¤c KХ\lScQJ \lgc4JP# \Le\l1BPP^yP\ \(P\4 \,P ^-R \|\ݬeJ\̸B[IP| ^%"V\ЏK!HRRR4R խ1PЭR RR1dЭRѢ1UЭRѢ ЭRѢ 1<PЭRCC~TWM.SAVE  [FIELDS.X.TWM]TWM.EXE;2W.H;1&|}ѢЭRѢPЭRѢ =`^(`̐nЭRݢЭRݢ1PЭRݢIPf1PݭRݢpЭRݢPIPDݭR0ЭRݢ/IP#ݭR4ЭRݢIP:`^(`̐nRݢ ЭRݢЭRݢ1Rнխ1}|,^SVT UR߭߭߭߭߭ݏ¤\ݬe Gխխ \\¤PP#w ?P1\Эl\ЭpS\ݬpGP\ݬpݤ GPx\ݬP\ݬL\ݬH\ݬDx'\ݬeF\ݬpGP\ݬpݤ \ݬ<\ݬeF\լ@\\Ь@\ݬ eE\ݬp%GP\ݬpݦ \Ь@\ݬ ePDЭ\Ь\ݬp?PЭ\Ь\ݬpݧ @%f>^TSZR]d\ݬc=d\ݬ c=d\ݬc=d\ݬc=d\ݬc=d\ݬ4c=d\ݬ$cn=d\ݬ,cX=\ݬ c-=\ݬ4c=\լ@4d\Ь@\ݬ c=d\Ь@\ݬc<`&\ݬ<cy<\޼\lP\Ь=<8^%U6TSR¤\lc<Pѭ1JPc<P\ 1[\ \ˏl\\1B\ \ЬPPDr?P1\ݬc;\ݬ c<1P\ \ˏl\\1\ \Ь\ \Ьѭ\ì\PZ\\PPѭ$\ìdP¤PP,\\PPݭݭ\ݬ4c:P\ݬ4c:\:ee~ЭeP\< P\< J: ^SR\ݬ4c:\ݬcH:\ݬ c5:O\ݬ,ck:\լh\ݬcN:\ݬ c9\@\<\>u9^R\ݬ 9\@<^WXkTUVBSSRD1fdPP?P1¸' ¸ d¼¼ dgh) 8)g¼\c\\Ph¸\c\\Pd1c\\\c\\\QyD\\\\խѭf íf\\խѭe íe\\ݭݭݭݭ¤r"?1h¸\c\\g¼\c\\c\\\c\\\QD\\ܭ\\խѭf íf\\խѭe íe\\ݭݭݭݭ¤!7`^6¼¸ T^?YXWZr[XV\>8f6f6RRp RR yRR0i1̤ ̸RhRR̼RhRR!.j(jjhRORRhRR1`^(`̐nݏ'>R1`^(`̐nݏ>R$1`^(`̐nݏЏh1RRR4R Rբ@kRТ@R RТ@RGPR< 3P`^(`̐nݏj1h1k̴̰hhi0# i0Pji08kF̴̰hiz0$̰RâhkRR̴`^(`̐n`jj(`̐ˏRRjŏ SŏRRTSTRRRTRBfRbA̸̼ŏ SŏRRTSTRRRTRBRbC1gŏ SŏRRTSTRRRTRBfRb1ŏ SŏRRTSTRRRTRB Rb2ŏ SŏRRTSTRRRTRB RbRТЭ``^(`̐n`ŏ SŏRRTSTRRRTRBfRb7pgkg̸̼ݧ&Kէ  Ч RТЭ``^(`̐n`g`^[UXWTVSRg11 1\@1ddd\ݬ,c.\ݬ,c.\̸c-\ݬ c-\ݬc--\ݬc-ddO\BD\ݬ cU-d!\l \ݬ c,߭c,PЭ\1Э\Ѭ g1ehe\լ(`ݏdݏfe\ݬc`,Э\լ (ݏdݏfe\ݬ c/,e\(Э\լ(cݏdݏfЭ\ݬc+Э\լ )ݏdݏfЭ\ݬ c+Э\(ЭeЭ\ 8Э\Ѭ g.c[,¼¸Э\ݬ:c0,P<^UTNSR1c,11\ݬ,c+\̸c*?\F4\ݬ c+\ݬc+c+C߭Wc*PЭ\Ь \1߭߭߭߭c *߭߭߭߭c *ѭ!\ѭ\ѭ\ѭ\HeЭ\Ь \լ8Э\d .d\ݬc*d\ݬcx*Э\Ь \ЬdЭ\~ѭeeЭ\լ(kݏdݏNЭ\ݬc8)Э\լ -ݏdݏЭ\ݬ c)Э\( 0^SR¤\lNAP>ˏ\\¨¬°´ݭcx)ˏ\\9\ݬ c(P\ݬ cj(ˏ\\P\ìh¨\\Dˏ\\ \¬Hˏ\\ \°Lˏ\\P\´h\\P\ݬP\ݬL\ݬH\ݬD^P^߭ݬle'PP $^US^RЬdPޠ P`jc([ެPݠc '߭߭€ߢ|ߢxߢt߭ЬdPݠ c 't^PPtxQPPxТt„ТxˆТ|Œ€  œœ˜˜”c&cA'¤¨Œd5<^UT'S0Rc&<)c &ePPt ePPxТt„ТxˆePPPPŒŒ|ePPPP€  œœ˜˜”PPc%c9&¤¨Œ- ^S6R”CâxPPí€PP  €PP”xPPxí€PP€-PѬx$ЬxˆP¬PP€˜”œ?âtPPí|PP<<|PPœtPPtí|PP|,PѬt#Ьt„ŒP¬PP| œ˜<âxP€PP€PP € PP˜€PP€2x€PPѬP"ˆxP¢xPP€”˜ 8âtP¢|PP|PP<â|hPPdPݠLdPݠHdPݠDd-\^wRdPP`Ѭ`Ѭ dѬhѬlhPPlPPТ``hPPPТddlPPPբhբl1PP``QPP`QPP`Q`PP`PPPP``QPP`QPP`Q`PP`PPPP``QPP`QPP`Q`PP`PPPP``QPP`QPP`Q`PP`PPPPPP``QPP`P``Q`PP`PPPPPPP``QPP`P``Q`PP`PPPP``QPPPP`QPP`Q`P`PP`PP``QPPPPP`QPP`Q`P`PP`Ь`Ь dЬhЬlhPPlPPТ``hPPPТddlPPPբh բl1PPP``QPP`QPP`Q`PP`PPPP``QPP`QPP`Q`PP`PPPP``QPP`QPP`Q`PP`PPPP``QPP`QPP`Q`PP`PPPPPP``QPP`P``Q`PP`PPPPPPP``QPP`P``Q`PP`PPPP``QPPPP`QPP`Q`P`PP`PP``QPPPPP`QPP`Q`P`PP`dP`P/dPP`PPPdݬP<΀^/[UTSRI:߭߭߭߭7ݬb ߭߭߭߭ݬb RíPePPíPePPíPePPíPePPЭЭPPPPЭЭ쭴ѭe1PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP߭dcb1PPPPحPPԭPPحPPԭPPPPѭe1ЭЭPPPPЭЭ쭴ѭe1PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP߭dcb PPPPحPPԭPPحPPԭPPPPѭe1P^ݬݬ ݬﴽ PЬЬЬPPPPì PPPìPPPݬݬݭݭݬݭ,  P^ݬݬݬ ݬݬݬPP ^޼P`~ЬPݬe ǽPPPI PЬP P^RݬMPbbB b3 < P0^S½XǽYT9VW UլPݬPЬ߭߭߭hiݭfg Pխvdr޼Rb/iݬ) PRd PRRR Pݬdߣ ݭ ߭߭߭hiݭfg Pխt޼Rb/kݬ PRߣ PRRR Pݬߣ#ߣݭa ߭߭߭hiݭfg PЭPPB.B?PBPZPݭߣ-e" DݭߣOe 0ݭߣke ݭݭÔe PխPP^!Rֺ%ݬ Pݬ ¾ t hŹPݬ Z ? ޼PЭ<^UTPP.ЬPՠЬPݠd4ЬS޼Rbd7PգSЬRݭd Pբ(ݭ޼Rb  _ ЬSЬPРRЬPРPHLPPЬRЬPРPHPP ^%TR2\Lbbߤ` |~|~~b12~ PSSSߤ}ߤdSP ^R~\ kݢu Έ^oSLRÈlÚ$P|~|~?¤PPõÜ|~|~?PPѸ|~|~?¦PPyz¬ ®¨°>¸´|~|~¬器2¤~PPA(<~¨|~V PP'qX\ l|~|~¼12¤~ PPÙÀop|~|~~b612~ PPöÝ#$1|~|~&P|~02¦~ PP΀^│STĠ -ĠݬͤͤPRRPBͤ&(Bͤ|ͤ5#PBͤ ͤQPR 6|~|~P|~02Ħ~ PP.^eRŏPQЬSÌPAP`Tߢߢߢߢߢ ߢ߭TS PbTTS ТPTP,^Tԭd߭߭߭߭߭߭߭ݬݬ P)ѭѭ ѭѭܤdЬP߭߭߭߭ݬެScPRխPBcfdRRխ ݭv@@(4 Uh Pp0x `H 8 8 Hh P` Pp@` (Xx(( h   H 8 P X pL$|tl<dt DDL|, 0 8 ` @ DECW$XLIBSHRDECW$TRANSPORT_COMMONLIBRTLMTHRTLVAXCRTLDECW$DWTLIBSHRLBRSHR SECURESHR SECURESHRPb b$b GRAMyyerror00 RemoveDQuote0`GetRoot/yyparse yyparse_1 yyparse_2# yyparse_3L yyparse_4  yyparse_5 yyparse_6̰ yyparse_7 yyparse_8fG yyparse_9H yyparse_10\ yyparse_11p yyparse_12 yyparse_13 yyparse_14ij yyparse_15 yyparse_16 yyparse_17 yyparse_18( yyparse_19H yyparse_20\ yyparse_21p yyparse_22 yyparse_23 yyparse_24 yyparse_25 yyparse_26Դ yyparse_27ܴ yyparse_28 yyparse_29 yyparse_30 yyparse_31, yyparse_32@ yyparse_33T yyparse_34h yyparse_35| yyparse_36Cĵ yyparse_37 yyparse_38  yyparse_39A\ yyparse_409 yyparse_41ζ yyparse_423 yyparse_43Tp yyparse_44 yyparse_458 yyparse_46ld yyparse_47p yyparse_48| yyparse_49 yyparse_50 yyparse_51 yyparse_52 yyparse_53ȸ yyparse_54ܸ yyparse_55 yyparse_56 yyparse_57 yyparse_58 yyparse_59( yyparse_60< yyparse_611e| yyparse_62Gȹ yyparse_63й yyparse_64ع yyparse_65  yyparse_66  yyparse_67  yyparse_68 yyparse_69 yyparse_70 yyparse_71 yyparse_72$ yyparse_73, yyparse_744 yyparse_75< yyparse_76D yyparse_77L yyparse_78T yyparse_79 d yyparse_80 yyparse_81 yyparse_82 yyparse_83Ժ yyparse_84 yyparse_85 yyparse_86( yyparse_87D yyparse_88` yyparse_89| yyparse_90 yyparse_91 yyparse_92л yyparse_93 yyparse_94 yyparse_95( yyparse_960 yyparse_97-5` yyparse_98% yyparse_99. yyparse_100ȼ yyparse_101Լ yyparse_102 yyparse_103 yyparse_104 yyparse_105 yyparse_106  yyparse_107 yyparse_108, yyparse_1098 yyparse_110D yyparse_111P yyparse_112\ yyparse_113h yyparse_114t yyparse_115 yyparse_116 yyparse_117 yyparse_118 yyparse_119 yyparse_120 yyparse_121Ƚ yyparse_122Խ yyparse_123 yyparse_124 yyparse_125 yyparse_126 yyparse_127 ( yyparse_128 8 yyparse_129 H yyparse_130 X yyparse_131 h yyparse_132 yyparse_133 # yyparse_134 yyparse_135 # yyparse_136< yyparse_137 t = LEX yylexGyylex_1\yylex_2hyylex_3tyylex_4yylex_5yylex_6yylex_7yylex_8yylex_9yylex_10yylex_11yylex_12yylex_13yylex_14yylex_15(yylex_164yylex_17@yylex_18Lyylex_19Xyylex_20dyylex_21pyylex_22|yylex_23yylex_24yylex_25yylex_26yylex_27yylex_28yylex_29yylex_30yylex_31yylex_32yylex_33yylex_34 yylex_35yylex_36$yylex_370yylex_38<yylex_39Hyylex_40Tyylex_41`yylex_42lyylex_43xyylex_44yylex_45yylex_46yylex_47yylex_48yylex_49yylex_50yylex_51yylex_52yylex_53yylex_54yylex_55yylex_56yylex_57 yylex_58,yylex_598yylex_60Dyylex_61Pyylex_62\yylex_63hyylex_64tyylex_65yylex_66yylex_67yylex_68yylex_69yylex_70yylex_71yylex_72yylex_73yylex_74yylex_75yylex_76yylex_77yylex_78yylex_79(yylex_804yylex_81@yylex_82Lyylex_83Xyylex_84dyylex_85pyylex_86|yylex_87yylex_88yylex_89yylex_90yylex_91yylex_92yylex_93yylex_94yylex_95yylex_96yylex_97 yylex_98yylex_99$ yylex_1000 yylex_101< yylex_102H yylex_103X yylex_104t yylex_105x yylex_106| yylex_107g yywrap yylook0 yylook_108A yylook_109f yylook_110y yylook_111 yylook_112 yylook_113 yylook_114[\ yylook_115 yylook_116 yylook_117Z# yylook_118: yylook_119W  yylook_120 yylook_121V yylook_122 yylook_123 yylook_124H yylook_125#t yylook_126j @yybackX yyback_127<|yyinputyyoutputyyunput k.  ADD_WINDOW AddWindow AddWindow_1; AddWindow_2?" AddWindow_33 AddWindow_4 AddWindow_5 AddWindow_6 AddWindow_7 AddWindow_8 l AddWindow_9h AddWindow_10 AddWindow_11 AddWindow_12 t^ AddWindow_13_5 AddWindow_142C AddWindow_15 AddWindow_16l AddWindow_17. AddWindow_18 AddWindow_191 AddWindow_20{ AddWindow_21 AddWindow_22  AddWindow_233T AddWindow_24 AddWindow_25 AddWindow_26J AddWindow_27{ AddWindow_28Bt,MappedNotOverride@lGrabAllButtonsGrabAllButtons_29 * GrabAllKeysGrabAllKeys_30 *UngrabAllButtonsUngrabAllButtons_31 * UngrabAllKeysUngrabAllKeys_32 * GrabButtons<GrabButtons_33@GrabButtons_34YGrabButtons_35,ENtGrabKeys GrabKeys_36 GrabKeys_37!Hr UngrabButtonsUngrabButtons_3838 UngrabKeys\ UngrabKeys_39 UngrabKeys_40(CreateTitleButtonsL rпؿ      GCt CreateGCs CreateGCs_1 CreateGCs_2I t LIST AddToList AddToList_1? AddToList_2) LookInList2 LookInList_3J LookInList_4<(LookInNameList v TWM Dmain main_1 main_2 main_3? main_4 tmain_5 main_6$ main_7* Done XDone_8k Error Other* D !'   PARSE, ParseTwmrcM ParseTwmrc_1? ParseTwmrc_2 ParseTwmrc_3 8TwmInputT TwmInput_48tTwmUnput$ TwmOutputget_home8 get_user get_user_5 8 ,j MENUS InitMenus| ~TWM.SAVE  [FIELDS.X.TWM]TWM.EXE;21( AddFuncKey NewMenuRoot%D AddToMenu0 PopUpMenu FindMenuRoot.ExecuteFunctionDeferExecution@ NeedToDeferhExecute FocusOnRootx DeIconifyIconify  + EVENTS InitEvents HandleEventsHandleEvents_1HandleEvents_2L4HandleEvents_3S HandleVisibilityNotifyJHandleColormapNotifyV4HandleKeyPressfHandleKeyPress_4HHandleKeyPress_5HandleKeyPress_6'HandleKeyPress_78dHandleKeyPress_8HandleKeyPress_9HandleKeyPress_10::vDHandlePropertyNotifyHandlePropertyNotify_11HandlePropertyNotify_12\&HandlePropertyNotify_13HandlePropertyNotify_14HandlePropertyNotify_15AA RedoIconNameRedoIconName_169, RedoIconName_17  RedoIconName_18- RedoIconName_19j@!HandleClientMessagez!HandleClientMessage_20!HandleClientMessage_21!HandleClientMessage_22s" HandleExposeY"HandleExpose_23@"HandleExpose_24"HandleExpose_25D#HandleExpose_26Ij#HandleExpose_27[$HandleExpose_28D$HandleDestroyNotify$HandleDestroyNotify_29%HandleDestroyNotify_3048&HandleMapRequest&HandleMapRequest_31&HandleMapRequest_32&HandleMapRequest_33'HandleMapRequest_34e'HandleMapRequest_35'HandleMapRequest_36>8(HandleMapRequest_37C(HandleMapRequest_38 T(HandleMapRequest_39_(HandleMapRequest_40 G(HandleMapNotifyT)HandleUnmapNotify8)HandleMotionNotify)HandleMotionNotify_41)HandleMotionNotify_42*HandleMotionNotify_43*HandleMotionNotify_44Df>+HandleMotionNotify_45+HandleMotionNotify_46D+HandleMotionNotify_477,,HandleButtonReleasel,HandleButtonRelease_488,HandleButtonRelease_49,HandleButtonRelease_50 -HandleButtonRelease_51.N-HandleButtonRelease_52Tj.HandleButtonRelease_535.HandleButtonRelease_54.HandleButtonRelease_55$.HandleButtonRelease_56N#P/HandleButtonPress/HandleButtonPress_571 0HandleButtonPress_581M0HandleButtonPress_5910HandleButtonPress_601HandleButtonPress_61(1HandleButtonPress_621E`1HandleButtonPress_63j1HandleButtonPress_641HandleButtonPress_652HandleButtonPress_66> 3HandleButtonPress_673HandleButtonPress_683HandleButtonPress_69 4HandleButtonPress_70KkX4HandleEnterNotify4HandleEnterNotify_714HandleEnterNotify_72`5HandleEnterNotify_73D 5HandleEnterNotify_745HandleEnterNotify_75`U6HandleEnterNotify_76c6HandleEnterNotify_77.7HandleLeaveNotify/7HandleLeaveNotify_78K7HandleLeaveNotify_79U7HandleLeaveNotify_807HandleLeaveNotify_8148HandleLeaveNotify_828HandleLeaveNotify_838HandleLeaveNotify_848HandleLeaveNotify_85.8H8HandleLeaveNotify_869HandleLeaveNotify_87k~x|9HandleConfigureRequest 9HandleConfigureRequest_88> :HandleConfigureRequest_899h: HandleUnknown: Transient        ޸          ֹ    RESIZE ; StartResize ,<AddStartResize4=DoResizeQ= DoResize_1g= DoResize_2?= DoResize_3$= DoResize_4= DoResize_5; > DoResize_6#4> DoResize_7O> DoResize_8:> DoResize_9"> DoResize_10> DoResize_115> DoResize_12"? DoResize_135,`? DisplaySize?DisplaySize_14@DisplaySize_15t@ EndResizebA EndResize_16 A EndResize_17@A EndResize_18 B AddEndResizeBAddEndResize_19  CAddEndResize_20@oCAddEndResize_21 LC SetupWindowDSetupWindow_22cESetupWindow_23 pESetupWindow_24X(FSetHintsFfullzoom8G fullzoom_252G fullzoom_26.G fullzoom_27.G fullzoom_28CJH fullzoom_29WH fullzoom_30I fullzoom_31 6I fullzoom_32@I fullzoom_33 I i  ;     UTIL JAddIconManagerJAddIconManager_1 JAddIconManager_23KAddIconManager_3$HTLRemoveIconManager@MRemoveIconManager_4PM MoveOutlineN MoveOutline_5hP MoveOutline_6fR MoveOutline_7/ RZoom SZoom_8 TZoom_9UMakeCenteredPixmapPV MakePixmap0VExpandFilename`VGetUnknownIconVGetUnknownIcon_10BaDW GetBitmapW GetBitmap_11iGX GetBitmap_12kX GetBitmap_13^hXtOK$ݘSfĝ h }V π +ZCzF u [xȑ1C'?L'\o7.=+gvxYV,UM 3<‡ ,TD/OX'qgp+t=(:pl2 V'hf#k) 6: dT` enwLc(Xg-^B&#tظcorHz\ z(0O?%1oIt!ϝڣ0.A8W%O;L 1e#?~yZ. êKȝ:߂Ҙ#5 SH>I+ARPAm\%PNۅԊY!|[Wie:#9=fhP*q3`}rOn;)輭>俯Fmi\:mLܤycĽFwB>朗s?m/h}rgc.Ĕ.+2'?Kq0`YfQXR4 ɘUz1#5xꉟu#}i/} %}Ŕ'iKQx0dNP,.,S6- HROfyC 4#v~[ s#żiF~W !>{K}.%-,Y~ji}Y\um1M\,\Nںpsn8oy-~*$1bkՍ<)ϕP[t#&vgE /9ZdUm1nj ߖ(A:GiBxnv*P @1|A 16kq?\鍪FCZ[*U@(r&<.IrdfZ7"į.SkmXI&FӗJ-d'1/)rZ /Z̴D2d/0k3;N`RݦG!&iNk` Fiz0v# f; n쎳3!P_R8$ ; gɤtǎHz„/߼ƪk|s*ZJQ')41'bpFtEըI Ql=KOTŝi&&YsUW>*}ݝorPK~KЃyLmSw>VIC<R2p-V|T~ԛ]Jr>(srRfpiUSH3˂,)żXPd~M{`lOód5Ig:ik֯7hM k¯ɾ(-]dXIb`}ߒ 2"1 i~FVلXpE4&dǞF$ pQF 92zMSZtV ͤ0QW幢@`jih:$gFfk ,G[PԗJc-Lfr ^^qgޫv1$׹#±KNs=Vf:uzJ)WsMtV`]'xɄ2l/Bױ8fnF>$?UN2֎^( 4J33kYFf9/yWyun_fǾ֦=B]S/ʸh>Y_ԁPKjh1sw|jțw4/+Qvбm̀IvsȓKT.AG_8:#hb ~} 朝aY%%8_]w&="EM-X>($Z@K;v'6+kazx>&%ŵH" 7//y^xp_v'cP>Nء?'!?\qtP%zCcWb|;Yeq/u!w0iש2&PbڔPdr)CqY@NgU'hKOojʱV>/lmߒ0u+OE>\/4!01UjUd~'v̴h:hpG4se@Hz>`\X^{D(%YWٱాy][ݚz8xtS7\U Q$IԂ p&<7bae߯Ipe8\X]O6םehlXh4+RDoI̻Ѿ8R>flW|X؃4 لTq;8Rx>P˯+Q%ث2~6OLzuyDPI I\{.(=Uh{Cl̺6:Am^I ~Jaz77Juu/L٠N[:fzχӢOp#% d|WB3T)60 [ZTݑ0cjHt xqAycZ( ]>ӬrI+^MWK`&k"d6}];SxfjҊ VvNmsX9h{ks8^B5[S`mEGߚd |?6-j{=KZo6ǜ&meX^3Oh!)w, Bb߭s{ؒ(bCbيBŌB- d=T [%_UOk&ӸAﴆ室Qs2J\"aL=:aq>ء  ~SAvl0 ECy?d^O!͐׉UvD;oWhަ))b$oi??HSf x%VΌEB2@7@.["TB ^ }rӼVb4Bk ͥ8d{[?-aB"⦁sބ\OBOψixGs~XJg}VL1R7Re:F!'ٙ+Z\ŢX#prjIxU-hh ' ޷\38^خ{UE|"8}a$aM/iEnfcdt͘(t@`Lb&fxdcbsVOc;//%e1g7 v#}nU4{0^_锺SzqHuH  W1/imodS(XFAi O.u!wp6w2jH+V  igf(u f(qkm:N /).&pt7_33?RrUkcH^9<9?v s=<||l@ si% 8hqaLnKF۰ʼ/Lԑ!M9*lOH)QN#5r$PKy@8%ĸR>c֝j>:A^߮~ExBpY9yJv)DI pfR+bMa_}rZ w,L7 d,kXCH77Ԏ9ڔ3q@xu[|bWfeD1)C?t0JLb χ?e=p5W^6XF|*{`KĞzz]n@&@!,m ׼m %?U~~g3 GK6'JP ߍMv"~%@]'޳F;0Re}}}%ǧ*Jû#DB2~p,?Ii)o 0CvNYB#-]i{zqH:+KЖhSrT3U_j|Sluzg0p`5; \DYfݭIXdx]6[uZjdtE%r(5~<-iR܆^sƕQvSuۢY%?m[ &^P;QpYg>25Mq Kh oy6aԐ5R?5[nw= fM$h?;БHHpG}fhӔ6a a5OHmt}qa*fR6k=â߻9xlqfL-ۉ<,NI3S.7)3CO7lHD1 y4[O+ع^z_o|Fv5 kПpٟNk5͜hȶ^a;#@I;G1uBM5y6]FtUwoԄCR(uc& M]8yLR\b%|K!b-'+Y$MJt"Y:{IT%p/Ϯ= |REI[[vިV[r*_'jXey d jt|ZOINd6H%5$:?]Ec$weEEɜ澞m@Ox*!nIK2'n6Y^jv( !0] _rVr5P9$YsX5 _O*aH&;Y`w˞ѯ׹u4N$/D`4u`jlm 4ކA%< pNwTV fԻ/.}LwSg*GC&[ceae$m0r\uA"c9Tp~17sPen% h/\?4WQ@>։f\߷D! Cs$ugvK3^"A)o. oY k㳪x!Ͽ.[;U槭5C3 vM oX^՜!2g>LW\J(EpvT {#:bie髅=ݥ/b)m|ľe#'Zua!"kt%6,t CH&Mbjm^~8ǹ):|a㪲R|Y}J }mi {pUZ&eeJon~Dد4-T*ʪKɜ̞0#ywe3'OFġw bnel1]́)xH9j@2ܵeS| r›|e.B1wLYA"H (mj;qOd(Xk򩂖rt$dǶ엠He6&7//8$'PuKn'5qz{b\܈Pu;&DI)ju**Nwtc{r("۸>b)SxT^r&R| `RxBC`4DAt}ڧ/͉^ߔ=v{}+Wۅ! XP٤wVe=xĞ =1/]h: gI9Pu#N1S)pjNXaZ4p)ىy5:]C0qlrisv$k7Si2[Cܯ` z?\r.wmMkO+?eQzWVֻExx +efOYI+Bː|ysK*Jb2]h5õI[uLvYimp?+.'` BLyv0ZHQ-5ߩ~㷷0I kEj'UƕBhM4(-@+TZAyg 棥8MƢ1R( e4aT Jwr!_8'wl1#o1v[~r$&aӀB?͉LM\F˛hh 14-%ř~Lχx_p~9:(Ú"6 q@RD6( 6(z.H4GJM( c-nɕm|0hr_u_nD.S;,Ҙ5'u;,32>[O/ge4@X+Mڑ$t>#ha2aAdSY'ō%m0qJ|&]OX$u&ӬviƬr/4ky_9kZ"72n&b-dHT%@ӲGq u1@!u%k8؇y3{- ݩ޷gTz/PgBZ/iQt$Qgg0:C2b+Z@U`ndjHTs7[0ڲ߼Gg3)7se"VD@ͮLVi虾ϛ @xdpb]"?]v⇝Mе < Oȝt"S'εS^aME&m"vlˡcԳA[Ȑ{SFOr^^Uۢ۫le4F3Ey`*M'f֌H5=h3Nn=~m!T}7I.zhdlJY%3sL]&ib'ZR4ԐҬN5l^G5˒4 )zi>R8{ʽwohJ)_?[ְOD ,X!'ߋdb+y &DS1yO+Bv*bg]j3|*s)Jr !@# G.vM4j(͢ORݢ"zO(F̼mHZ^{|Vg'f^6}}>Ϫڤ9hX]@%TcEh߼=hs P!uWdjW$x Nc0I1x4K|u =i5˃z"K$G|9#e 0[GZD;<hAI~4f5:C+Ȏ ZdL.DDh:mY֛ךSSr 9a(Ƽ %EGRLD[%E%QخЭ" ]^Owc3n;%>]2-;A" bJVxSq oA+o4^Oq6>Y48K~ƗGdm1,Uޭ D-"F|t!nJm-`9 x E4'U@5t ϭ$)l1ذXoqvdKc(Tϡ'aP"D1opIWȌʡ$AkJu9O@rI%TWrIbݼIjb\.1aUn©C6(kF75): ܚ[/.5a3r>%'V vesV9cEp(nq ;._jZo F1JM8骋h31/)͡{ O2,ىCS[Bpg0Ɗn"Cnܧ1EYmJu׶޷;2^ϭ/U&- q=qۛ2Sl+ E rrG$<"RAX̀J4(6tX<ZP+d'ɉ;m&nF=sm4*n`kD (FiS"#cE墪;U5LP{уxi܇x$>)M}D eQ7I5)0 ,&I#0& ۞7Փm^% v%y>xEIDE.ݖt4/Z"Wk4)&@T8"=:[f7X˕=MXTݸYxnf F`޾T3G5"7(q on?zc !<$ZD#y3þT秱^ԭ̼1l͜|gqjBdH!H!)c tlԆt/]He  ύkddhƼ ne82gYײ}`?u '̼Ge"s qB/̪/ ʜ5jȎ4<˒m]x+ʝgN&S4s ]wZj:DE׃cEn(YBkjcF@lhmx9e:f1wlު7{)ySv4ǤZ`124ѝ?bfk/cT *>vkXBHr ] ೓Ҳ)>4oP~{J/)gԐCP@-# HE?}+K,od>_\[BWh><,mV̗\ס3=8M.!d Xف9-:K;gG]29s.~T@yۂd EfUVrރDE$ (6B{A+C$@J*--PHىh8K+;rqDxEl0Zu nôp@w( 7$Gg•0c]cRCOYο](JOHD ).vfaJ|5? y`;AEݼH6&>ģ;S(Kx9|uOtgف`PX=X bڳQuւKK[ڄI,Jbfr{Gd|A;%T>p xk֯!) 6[߼b%|6uTme_R05Ӹ+\1@OtzL#DމVCv3?˜.*4#>`A_ NUyY|J.i /59=/Prхl&М %8zw޻ zF> E`PWr;D?9@-kJpAhReLJ3 bdF4%'G? T/as<@_>M 8rYf˱x"Dd G$7F g >me+ EaP[º̶O%Uӫ׿C-ED#4Z pn`wISG}}f5%$k خM+lw>kM[˥\_;Ff#Ktpg&-:WXŁLR5`.c]%2\/zfQ|%4 i5)&QN+OḓTn-{I|;`OP#Ov+QT$θ̿8Z [U*2=aG\}Ÿ" ~ġ[}`G+AHtCa-y2$U]I?5e}SܖDjebT:{Ȁ#9~< {#oko>软jvl(N!8sdLRP$ɤȖ:\릂k`ܽ Mq/Al'U?:hVdY=Vo^k>S]W'dʷRAe rg?іB'nu'_u] `x\sDp*LZU/|\W|yZ7Q˶NYTf3M~?Թ LC1xI\#u5-q]uR1 #jECNA.A!S+ VL"Wtb/G6F|nh_wT 2wX(XPZ]/Li쐯ߧdXٙ+/At8a?1]&[GxrAd&/52yJ8B> 9v&Wj8I1ykx->}i|HgD]1~a#S)ZblWvO+! S356Le $BN fJYAW@\zw]O`CHܲTj.TM^ ZY֬xgs/Uv *?cǏ+ͪ| B!jXyfmOH{2ihbejn"+yA\ M xA\UYR [g k@ZSL60 ~Ay|Jfo]ʎwf_~y/YŪh 2*)Rtw>A*0/^@G:0緐7dy/0n kٲAg(|qSX-L2j!w# @zTX 0uAg=c<5f9q4-eHmo64x"wʹ*5<@)0q4h^saM2Vٶ@eTc61pB̬O?$N,bsг}<$ȇ!CjqL>f -OUϤ'0=rbk)6 V Zqm^Ƚ8|/=(|'"{R+ j o<,v&̎ڍulU` l:-M=Pdd'SVD*}m%}Q~TI q ѭZ7Ij20Pr+0BS/7  Q:G[Pru/2\q= э_@|afPp|uPpޭ96]SV8Q}t͍8Ppq؀g |dܒd2^<"Rܭd;.&}5P}x8Q0+tp "/KryǕq۠?.9ɺ cFdL2leS|Pr\ѯ/7s Uh>}N `ʋjٍ?o|yPp27|Pope43 9猈USSQ|tՉcpUqЂ|b u Uz__R_8u 0_FXp1P-9OmLYѤ̽r Kb/^jT \"s5\QPOm}[|ț}]^i/TJ`?߄+*ג*B2{D{xitv˜*Od)e%*hĨ :+(iym;h޸A$කʿWVnL&C9n ٓ,*TYiqGtvyCEȾnҼ"b#u ?\ G~P"zE Irq"!l *ұ!;Y}>ñV-Ѽ RPAZsoLsgA0HPb0pHk(rg"!,P irNsq>n_]gvGNsq/b r^ qR}qAq- bx(y#p>uZBoxI_$뜖nߚHr~f|ZSpyvG_ WNg~&gkq6VmW1ڴ-H&e`qL*=rs`@?(Yo[h e"*KMۦN =( !hGix}y.C^L!;_xd؞*չ'D<4aܷ>y.fEq @+Ni;| \Ȟ5F4`] Dް!Ԫpb Հ޿ =i:nμYÐ^les`.tGiI3ܨߟT( "D=P8JgNۛUwereks-f Zu/` G5Z*&yU"DXwhe6Fu1D%Zo4#j,}^gzfe̖?v#]踢R) "(@#io{f\Z:pJ$%Цr%!+?$z! ʝ0 >$ ?5f/c E=/] Gf36D$-2-,p{"x "ȇ;b*%J M^"ڢ~r%PX8gOa TJMzb-B[b:s%b5"`.w&ĕ MSTo1=Qcp ^+W6Yt # J__~1e]x`珎bhEt!ti!Dp3];q &DcP|RJ%FGoL.:4͝K tq>#qU~NI-mi^rH-ߝ&( #4UMC3Nu C݉-iITæC%v2I L(S|(DBE~HF1Q2(p%ႼR4yEa.ߎzd8~5G>Ou?dSYza|t̞IT20i.,mۃ,O:di,8Brj}S#W>wFЛE roI㬂6irk~Jw`~g"=OVOEGUzAP{"BŘ cD)_nHo0@]N?'7c>!EOUSPZ&\/G0"%T:#,$σlV"$/!!cqɭ2gۯ⽃3ۋ}1w!NJ=*R uhe7@y-]|*z)wxD+Z/9 Z^Wt5& 5R%+`*N.sxЯtGQaTJ.UljܚuP6?(&DOnde4T Gc &3Xmh"`0r e1=qG0QF{=B}W|"b#Q`Qdd,`z, S2^VT_OG.s3ʊ!yPM0|( Dl--f fa_o09Йxpњd-N`5# 0b,>}SFm=0j*9^+y/r..a==866uX, 6HUT^~eFVϳZm1\E`yGqU'>R1Zr! 況0k^7" rbF6+qpE6ݛtq=!42`2y# 0Ah^x <&\$6L6u__5^-!/ms^lg֬1g<1 R)䶮5VO ֛NHƪ;stX&v=pllHm6T~u@B¯ACƎ}ؾ|1+faҬvQՏ W/֍Qaߪe"7 Wx,#Z-eХeXK\^\l\^ѯ\fl\^P믧\bl鯛j|R磻T\^\$Pɯ\bl\^ǯ\l\^ᯣ\al-\^_P\Rbl^j[RA/Pݡ\n^cݭ~hhi}rP`u/c^\(\e˭^\yɭύ@!\\P;\nɭo\&5\l4\^C\lH\ף~`l֓Mέhpy}~P"һHMj\ަͬzל`l-\d&Ïl5~\5gl@\xѧE`lЭhf|"Pw>r\\L!\٭H\ɸɭb\Ьӱ\Ќl"\:N޹\ӹlx\ݭ hi&|P ,ۭ@&S\Ы MެBwS`ƭS\zeSЏ7ۭ^\ e^j=˭_\ުP]`ݭhi{P,]˭"@T_\Vجgס`lb\ҏ`luC\MelO\Nܥml߭huk/9{PSVjaB\DU\cP2\nbl\o^1\Oll\j .%?<\h^P'\blwOjWx|RЭ/C&T+Y^s$HP5\nɭb\6\>cnɭJ\\"^ïP \niCM+CeɭE@\⬘gW^ެR~^`˭^\3^ЏA˭^\c^)˭,)`lŝ߭hck5yP3(  6-FEɋC[^6z0zPҬP5ΑBR։oS &=P*BPPK_zO#P :MpP^()0P1yBO P4 !M8P"*CP 䰬 o+2(1 P6*PPҬP5}}s}}}YO}C}}g 3=PHP)&xPPլ !ݭЭPݠ޼ P`"xP-2 #ݭЭPݠЬ PݠwTVYP~W}؆ߛK31j1` a3neEgu3AJK1b0w/o Q;윖@OC1|/)(S/&F.^疔G1Res`{TߣxCpf4(4 #Ѭ?mSz#dIVv -bim永YxLs%wmseG fP`a'sP"meFY ar)^?̹CLvy ș0w` ss9~)PzLvuy'@ze0kV5ݞƉ8ߣFx:se\Y/QA`P²jx/&rs wLeOnePV5"T P0Ti.Ka!.ؖ plar5;SVBTD̞UKvBy1*9Dud&Уŧf (r1i?P`%KŏZyyp#PA(/``%p`]"UPA?eK)%p<|db0A!`ʠa/rP V:8dBHhQdA` PKi ^>PmP;3~yyq~O27^DK7t yxs0Sjyy `#^u۰uKzs yseb:eP_r,30q%m c_3V^,̄ pa#y݀n$Nu yp"zldOk'ZSrХ4dshP-Zs35k*|eP4`UdWN'0A_J!parr;5sP35_38aDPP8Z c9gdPqPAPPj[Y"i"gIk[X`k!KV_igk \{#'#uE465O}@#ۡLN9[OcyyaAPP"Ny5ObyyaFPP2Oq')` _4^A0,hP0`hԺp1#YyKKs h yQX#O7W#qe_2#ÁPl4)q^F^V`_Gy "~.!)par4QeqPAP PѪezhj^56#K y*P5ؒCdF qgI*#OV'#rseO-V"xQ7."#F[s!JΧpaPˏOP)jUGQ' 7FPZ(Pb"ˏO/P)jUAGۿQ 'FPZ(Pd2"\!Fcxp`~l "m &CdANdOZQr_7oèyqD8 oԉq߇dlxGmdeyyqbrO6E.>vU2aP!ˈ!x.7`%`Jĉ`ۏVԭPm@JYލ^gVխUGjZyDfl dkږP#d;ld~Mg qp]PP̵ x4^]oږ6#d1nêHEpaspJor*@1sȿ9Uȭsj `b=̈Oxݽsȿ9UHHO/y L)Xdi.YO[eyyc"e*NNݦmf)f1v#dh6^_O-+)x49Hn`Nyyp1s5^9lTO}fdar5xN̿ETosJqHK[a )s8e<O Wgse^<l0̴1TGxIW4ݘ|Gxq295lGmdӾegyyq"72C@m yxvr98pDPݞ` xp`ld |XNqdT/aOS ypRe_1 ^VS-mdV+g9Ca^"R_CԜrr:0Wnfgc ̞/d85l %=.9lZc\\W%ݵȿ0ְݠЭte_۫]ժm!`xxra2\8OGyqe_509ĵ^r f#"`_0Dx rsa_1=1_ؽl2r.303Bu~Zyrrd_QL2ϱib 7[0K#| M5Qxic#svt·,3Ocw^+B\07?բ8Sp4 V`+13 >,\8\Wade\+t:#xMyZ2>Y?OA3 S@=x[)f4g#ѩ![s~bskͬjiza트2q ;!ny!`y;6)0t&ͬ xEٟ5Ҟ\9jZd @n]$!^ͦȧv>AD,OնS /L$,3zՊ ICux)X̋e6n-*M?|Fp%2Åt"oT72+= #HLCHqm"<_,|QNɍI*i-5N?d|B~XajDG~ki@jtz\+yѭ'x[Ps0r7Tҩ ! ­vd|4dZ28ߡ5aJ;, xpj0`N @L8` oZѧPpQyP pn\}R\R&M-^PV S.h JU Y;2^Ϋ\9\Yݮ#4?Dݱ%$d=}Pk ZqĐ6C0, Х_,;\% QV;RT+#UU;RR+V\)W\a.Q PV.U-G!NBtsɏ>˜p„z+H-UʜS!RPUSy`PR/obyy5.K:ְVV жd ѫ]|dx_" gδR/A*!1d{ ePeEUElhkU } y_^1اP~$uK00ewIy6uv b6ݪ_d;UtBe2g eBR\SmA>:[&yl*MIMן#sOocRs;dP!RԭпW~bܷ?< -(4Rq~7jwZ?N;>Q<{yR/;R$Ь +ν)^7l~6= xmvdK{k*Xw⤝ФQld^|7١(+ Q}5reXXҏH#nȠRk錞bé/h0,moYp0RDS mX` ݨ}{"NOrx_cL OOXAq] Rl (a q{p ZR{fS [UV<.PZ R*p<#ȪYã/@Jץao<R]Zj/Y(QݣXvayiܟ0.YݬݨOyl|=cuRv /|Rml<͛tKݣ=AUDy};1D\Dݣmd m2y`QN K m͓7kBeH OiXk7([ ԌH]ΰ'gFil^m_51 *%U s"j _| ކ#e'y5>@kZbVIM,v9j_3_UF =QK]v,c0w 9APGKP%mexM5m1],‚mwO66^}R QbleI86^R E@'e)NRբ`gK[`H(^hhIOQ1uwP'_7骡RB;^ s"eCߣ-64ī0+'Kx_8o.>`:  /PZ+d| B1P >[l+S]LN[P6 5w;8p#;x_lMe]A +d|:䪡oZA1P >[m5S][(P0۰J5;;hp8x_f5L]Z+/|7h48h@ݤEK3Nh%֖*Ye4%5 { 8djݪpbOP j^=ݭh~8x_(؜٬tдݪ ml99gݪtݢHmpsLY7%]hPyGL m!lWl02Mt мRgPhj5y akM 4 Z-@E˺W$ e0i+<ʵ1 Oߗ@k Oߓ@bkZʴnJ @Ro XUu!]S~Q:h+9= (X,>Kц OшRXmoot\܃9ޖ5g=(7D?<9hr] ~]Rr<8>OS?l9ށ8Oֺi +>8f mU U^H *”3Ofr#O쭄Kbpfk_m Nk_b_1c1RRHao 6ӏ`FE`mdx $Q\5E|k_}utC]iI^0R1/%! %bݕףT1zP(R-RM><%@vN-w͢ ͯS,Sj (_AP:!?V !1Ь|-V%;R!! %eݐ KX(RuԠ+R#YЬSg~6"cؔ%-+eUZW  o 휬Q\vQ3_f87VP9.9W !-0`'Z"T ,S}ԯ'Z-P5(5! \Ĉ h0_W\lBNRhfTc==t SoKo9Sl/ӏ2W A0^`o#Д Zv}MV1P Ȑhf 4ŪЬS=pAa0]7@^/Ql Yﺞk)>_3Wi0'`[@ `;}ek(Uf7iRRXR(-$dnѾ{I20&D}>X@ݑn=!nUV`|Hf d_ݢ,RbV=T@RhNv-ݢ 1ow1lshOcm4<:pbЬtAGJ'i0񘝍ɱY,s_3yQSS?嫑nAl@u!onBWՈT 5;=2zRG$7y.h9"`ޭa*`df iR pHnJDiݥ{fiU5SV1^|=ӛ%~үPtjS:PmPhKIJ߭i$L&oA(Sп5 _*0syT, [[+ةVk6n p7QR%]7ʡX %3Rp^ڼFF ^GJDMFHJJXHJD؞J^JJOH+B D ~\PЙ)P@\|b$\e_WYS:Az,#`P0Ql@фE  L,/r/߭(`"h ,b\(Z.֟4֨0ЛxT^{+ZeS[6/kS&X.L30N1҆?Yc;>nkR I˴ !vV6Mߡ 26 !k1m f KxEDO RQE&PcpYFoO #o Td@SLdrdO>I$LChRiF% :I)TQ\-5_ Լħ)Nt5OԎ7nR܄_?M܌P,ҭ"'X8 "bBDձ4i.<";6h%5!϶j_ 2A*[)q)AQh:D%h`> %dg%h^Eg!QiY..eaڽ^v|@nÛ8l=k=L27ͮH8ݢ2e1<PQol\XڀoLT/Woj#n=r s0FP"$O(UpdL"JmL0"V ?ѠVD,R0t^P,C?1T^|1z];"\P1Q,]#3\$^4sfy/"$(nyf\w't,, N(JIu[?ij-AR8%u/d&H\ |J}F c?nu6CYH%Pta Fs ^zI K#& 88Yto O[0vd, S-%Tv);'0"h6^"pU)Wvy֬R R+P87jѬI^m+tTJRiX pI}f< ~v1<R^~TWM.SAVE [FIELDS.X.TWM]MAKEFILE.;8U*[FIELDS.X.TWM]MAKEFILE.;8+,./% 4UH- 0D123KPWO56RҖ7ԟҖ8TͻOH9G%HJdefines : defines $@[-]x_setupgram.obj : gram.c cc/def=vms gram'new_vms_execute.obj : new_vms_execute.c cc/def=vms new_vms_executepseudo_root.obj : pseudo_root.c cc/def=vms pseudo_rootlex.obj : lex.c cc/def=vms lexadd_window.obj : add_window.c cc/def=vms add_window gc.obj : gc.c cc/def=vms gclist.obj : list.c cc/def=vms listtwm.obj : twm.c cc/def=vms twmparse.obj : parse.c cc/def=vms parsemenus.obj : menus.c cc/def=vms menusevents.obj : events.c cc/def=vms eventsresize.obj : resize.c cc/def=vms resizeutil.obj : util.c cc/def=vms utilversion.obj : version.c cc/def=vms versionTtwm.exe : gram.obj, lex.obj, add_window.obj, gc.obj, list.obj, twm.obj, parse.obj, -P menus.obj, events.obj, resize.obj, util.obj, version.obj, new_vms_execute.objM link/exe=twm gram, lex, add_window, gc, list, twm, parse, new_vms_execute, -@ menus, events, resize, util, version,xaw_lib/lib,xmu_lib/lib,- x_opt/opt,xt_opt/optUtwmd.exe : gram.obj, lex.obj, add_window.obj, gc.obj, list.obj, twm.obj, parse.obj, -; menus.obj, events.obj, resize.obj, util.obj, version.objA link/deb/exe=twmd gram, lex, add_window, gc, list, twm, parse, -@ menus, events, resize, util, version,xaw_lib/lib,xmu_lib/lib,-" x_opt/opt,xt_opt/opt,vms_lib/libuL~~TWM.SAVE [FIELDS.X.TWM]MAKEFILE.;8U*[FIELDS.X.TWM]MAKEFILE.;8+,./% 4UH- 0D123KPWO56RҖ7ԟҖ8TͻOH9G%HJdefines : defines $@[-]x_setupgram.obj : gram.c cc/def=vms gram'new_vms_execute.obj : new_vms_execute.c cc/def=vms new_vms_executepseudo_root.obj : pseudo_root.c cc/def=vms pseudo_rootlex.obj : lex.c cc/def=vms lexadd_window.obj : add_window.c cc/def=vms add_window gc.obj : gc.c cc/def=vms gclist.obj : list.c cc/def=vms listtwm.obj : twm.c cc/def=vms twmparse.obj : parse.c cc/def=vms parsemenus.obj : menus.c cc/def=vms menusevents.obj : events.c cc/def=vms eventsresize.obj : resize.c cc/def=vms resizeutil.obj : util.c cc/def=vms utilversion.obj : version.c cc/def=vms versionTtwm.exe : gram.obj, lex.obj, add_window.obj, gc.obj, list.obj, twm.obj, parse.obj, -P menus.obj, events.obj, resize.obj, util.obj, version.obj, new_vms_execute.objM link/exe=twm gram, lex, add_window, gc, list, twm, parse, new_vms_execute, -@ menus, events, resize, util, version,xaw_lib/lib,xmu_lib/lib,- x_opt/opt,xt_opt/optUtwmd.exe : gram.obj, lex.obj, add_window.obj, gc.obj, list.obj, twm.obj, parse.obj, -; menus.obj, events.obj, resize.obj, util.obj, version.objA link/deb/exe=twmd gram, lex, add_window, gc, list, twm, parse, -@ menus, events, resize, util, version,xaw_lib/lib,xmu_lib/lib,-" x_opt/opt,xt_opt/opt,vms_lib/libu