kent@ssbell.IMD.Sterling.COM (Kent Landfield) (01/15/90)
Submitted-by: wsl.dec.com!mikey (Mike Yang) Posting-number: Volume 5, Issue 62 Archive-name: xrooms/part12 #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 12 (of 14)." # Contents: ./xrooms/xrXawUI.c ./xrset/xrset.c # Wrapped by kent@ssbell on Sun Jan 14 21:58:17 1990 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f './xrooms/xrXawUI.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'./xrooms/xrXawUI.c'\" else echo shar: Extracting \"'./xrooms/xrXawUI.c'\" \(23300 characters\) sed "s/^X//" >'./xrooms/xrXawUI.c' <<'END_OF_FILE' X X /*\ X * $Header: xrXawUI.c,v 5.4 90/01/11 16:21:11 erik Exp $ X * X * COPYRIGHT 1990 X * DIGITAL EQUIPMENT CORPORATION X * MAYNARD, MASSACHUSETTS X * ALL RIGHTS RESERVED. X * X * THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND X * SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. X * DIGITAL MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THIS SOFTWARE X * FOR ANY PURPOSE. IT IS SUPPLIED "AS IS" WITHOUT EXPRESS OR IMPLIED X * WARRANTY. X * X * IF THE SOFTWARE IS MODIFIED IN A MANNER CREATING DERIVATIVE COPYRIGHT X * RIGHTS, APPROPRIATE LEGENDS MAY BE PLACED ON THE DERIVATIVE WORK IN X * ADDITION TO THAT SET FORTH ABOVE. X * X * Permission to use, copy, modify, and distribute this software and its X * documentation for any purpose and without fee is hereby granted, provided X * that the above copyright notice appear in all copies and that both that X * copyright notice and this permission notice appear in supporting X * documentation, and that the name of Digital Equipment Corporation not be X * used in advertising or publicity pertaining to distribution of the X * software without specific, written prior permission. X \*/ X X#include <X11/Xos.h> X#include <X11/Intrinsic.h> X#include <X11/Xutil.h> X#include <X11/StringDefs.h> X#include <X11/cursorfont.h> X#include <X11/Xatom.h> X X#include <X11/Shell.h> X#ifdef X11R4 X#include <X11/Xaw/Form.h> X#include <X11/Xaw/Command.h> X#include <X11/Xaw/Dialog.h> X#else X#include <X11/Form.h> X#include <X11/Command.h> X#include <X11/Dialog.h> X#endif X#include <X11/IntrinsicP.h> X X#define BOOLEAN_DEFINED X#define OPAQUE_DEFINED X#define DEBUG_VAR xruiDebug X#include "utils.h" X#include "hash.h" X X#include "rooms.h" X X#include "xrActions.h" X#include "xrDebug.h" X#include "xrXUtils.h" X#include "xrProfile.h" X#include "xrRoom.h" X#include "xrooms.h" X X#include "xrUI.h" X X/***====================================================================***/ X XWidget xruiTopLevel,xruiMenu,xruiWinMenu; XWidget xruiSetupModeItem; XWidget xruiPromptWidget = NULL; XWidget xruiPromptText = NULL; X XWidget xruiScrollW; X Xchar *xruiDefaultRoom; XBoolean xruiConfirmExit; X X/***====================================================================***/ X Xstatic void XxruiDestroyPromptWindow() X{ X uENTRY("xruiDestroyPromptWindow()\n"); X if (xruiPromptWidget != NULL) { X XtDestroyWidget(xruiPromptWidget); X xruiPromptWidget = NULL; X } X uVOIDRETURN; X} X X/***====================================================================***/ X Xvoid XxruiPopDownWinMenu() X{ X XtPopdown(xruiWinMenu); X} X X/***====================================================================***/ X Xstatic Boolean xruiNeedString; X Xstatic void XxruiDoPromptNo(widget,clientData,callData) XWidget widget; XOpaque clientData; XOpaque callData; X{ X uENTRY3("xruiDoPromptNo(0x%x,0x%x,0x%x)\n",widget,clientData,callData); X xruiDestroyPromptWindow(); X uVOIDRETURN; X} X X/***====================================================================***/ X Xvoid (*xruiCallback)(); X Xvoid XxruiDoPromptYes(widget,clientData,callData) XWidget widget; XOpaque clientData; XOpaque callData; X{ Xvoid (*callback)(/* str */); Xchar *ptr; X X uENTRY3("xruiDoPromptYes(0x%x,0x%x,0x%x)\n",widget,clientData,callData); X callback= xruiCallback; X if (xruiPromptWidget != NULL) { X if (xruiNeedString) { X Arg args[1]; X X XtSetArg(args[0], XtNstring, &ptr); X XtGetValues(xruiPromptText, args, 1); X if (ptr && !strlen(ptr)) { X ptr = NullString; X } X xruiDestroyPromptWindow(); X if ((ptr!=NullString)&&(index(ptr,';')!=NullString)) { X *(index(ptr,';'))= NUL; X } X if (callback!=NULL) { X (*callback)(ptr); X } X if (ptr!=NullString) X XtFree(ptr); X } X else if (callback!=NULL) X (*callback)(NullString); X } X uVOIDRETURN; X} X X X/***====================================================================***/ X Xvoid XxruiRaiseMenu(widget, subwidget, event) XWidget widget; XWidget subwidget; XXEvent *event; X{ X XRaiseWindow(XtDisplay(widget), XtWindow(widget)); X} X X/***====================================================================***/ X Xvoid XxruiFocusPopup(widget, subwidget, event) XWidget widget; XWidget subwidget; XXEvent *event; X{ X if (event->type == Expose || event->type == MapNotify) { X XSetInputFocus(XtDisplay(subwidget), XtWindow(subwidget), X RevertToPointerRoot, CurrentTime); X XtRemoveEventHandler(widget, XtAllEvents, True, xruiFocusPopup, 0); X } X} X X/***====================================================================***/ X Xvoid XxruiCenterWidget(w) XWidget w; X{ X Window ignorew; X int x, y, ignorei; X unsigned int ignoreu; X Dimension width, height; X Arg args[5]; X int count; X X XQueryPointer(XtDisplay(w), XtWindow(w), &ignorew, &ignorew, &x, &y, X &ignorei, &ignorei, &ignoreu); X X count = 0; X XtSetArg(args[count], XtNwidth, &width); count++; X XtSetArg(args[count], XtNheight, &height); count++; X XtGetValues(w, args, count); X X x = x - width/2; X y = y - height/2; X if (x+width > WidthOfScreen(XtScreen(w))) X x = WidthOfScreen(XtScreen(w)) - width; X if (y+height > HeightOfScreen(XtScreen(w))) X y = HeightOfScreen(XtScreen(w)) - height; X if (x < 0) x = 0; X if (y < 0) y = 0; X X count = 0; X XtSetArg(args[count], XtNx, x); count++; X XtSetArg(args[count], XtNy, y); count++; X XtSetValues(w, args, count); X} X X X/***====================================================================***/ X Xvoid XxruiTopWidget(w) XWidget w; X{ X Window ignorew; X int x, y, ignorei; X unsigned int ignoreu; X Dimension width, height; X Arg args[5]; X int count; X X XQueryPointer(XtDisplay(w), XtWindow(w), &ignorew, &ignorew, &x, &y, X &ignorei, &ignorei, &ignoreu); X X count = 0; X XtSetArg(args[count], XtNwidth, &width); count++; X XtSetArg(args[count], XtNheight, &height); count++; X XtGetValues(w, args, count); X X x = x - width/2; X if (x+width > WidthOfScreen(XtScreen(w))) X x = WidthOfScreen(XtScreen(w)) - width; X if (y+height > HeightOfScreen(XtScreen(w))) X y = HeightOfScreen(XtScreen(w)) - height; X if (x < 0) x = 0; X if (y < 0) y = 0; X X count = 0; X XtSetArg(args[count], XtNx, x); count++; X XtSetArg(args[count], XtNy, y); count++; X XtSetValues(w, args, count); X} X X X/***====================================================================***/ X Xvoid XxruiDoPrompt(prompt,needString,callback) Xchar *prompt; XBoolean needString; Xvoid (*callback)(); X{ X X Arg dargs[10]; X int cnt = 0; X static XtTranslations promptoverride = NULL; X static Arg shellArgs[] = { X {XtNallowShellResize, (XtArgVal) True}, X {XtNinput, (XtArgVal) True}, X }; X Widget button; X DialogWidget dw; X X uENTRY3("xruiDoPrompt(%s,%s,0x%x)\n",uStringText(prompt), X booleanText(needString),callback); X xruiDestroyPromptWindow(); X X xruiPromptWidget = XtCreatePopupShell("popup", X transientShellWidgetClass, xruiTopLevel, shellArgs, X XtNumber(shellArgs)); X X XtSetArg(dargs[cnt], XtNvalue, ""); cnt++; X XtSetArg(dargs[cnt], XtNlabel, prompt); cnt++; X XtSetArg(dargs[cnt], XtNinput, True); cnt++; X dw = (DialogWidget) XtCreateManagedWidget("dialog", dialogWidgetClass, X xruiPromptWidget, X dargs, cnt); X X button = XtCreateManagedWidget("Yes", commandWidgetClass, dw, NULL, 0); X XtAddCallback(button, XtNcallback, xruiDoPromptYes, NULL); X button = XtCreateManagedWidget("No", commandWidgetClass, dw, NULL, 0); X XtAddCallback(button, XtNcallback, xruiDoPromptNo, NULL); X X xruiPromptText = XtNameToWidget(dw, "value"); X if (needString && xruiPromptText) { X XtSetKeyboardFocus(xruiTopLevel, None); X XtSetKeyboardFocus(dw, xruiPromptText); X XtAddEventHandler(dw, ExposureMask, False, X xruiFocusPopup, xruiPromptText); X } X X xruiCallback = callback; X if (needString) { X if (promptoverride == NULL) X promptoverride = X XtParseTranslationTable("<Key>0xff0d: do-prompt-yes()"); X XtOverrideTranslations(xruiPromptText, promptoverride); X } else { X XtUnmanageChild(xruiPromptText); X } X xruiNeedString= needString; X X XtRealizeWidget(xruiPromptWidget); X xruiCenterWidget(xruiPromptWidget); X XtPopup(xruiPromptWidget, XtGrabExclusive); X uVOIDRETURN; X} X X/***====================================================================***/ X Xvoid XxruiHandlePopup(widget, closure, event) XWidget widget; XOpaque closure; XXEvent *event; X{ XArg arg; X X uENTRY3("xruiHandlePopup(0x%x,0x%x,0x%x)\n",widget,closure,event); X if (event->type != ButtonPress || event->xbutton.button != 2) { X uVOIDRETURN; X } X if (xroomsSetupMode) { X XtSetArg(arg, XtNlabel, (XtArgVal)"Disable Set-up Mode"); X XtSetValues(xruiSetupModeItem, &arg, 1); X } X else { X XtSetArg(arg, XtNlabel, (XtArgVal)"Enable Set-up Mode"); X XtSetValues(xruiSetupModeItem, &arg, 1); X } X X XtRealizeWidget(xruiMenu); X xruiTopWidget(xruiMenu); X XtPopup(xruiMenu, XtGrabExclusive); X uVOIDRETURN; X} X X X/***====================================================================***/ X Xvoid XxruiDoSaveProfile() X{ X uENTRY("xruiDoSave()\n"); X XtPopdown(xruiMenu); X xruiDoPrompt("Enter file to write (<cr> for default):", X True,xrpfSaveProfiles); X uVOIDRETURN; X} X X/***====================================================================***/ X Xvoid XxruiDoLoadProfile() X{ X uENTRY("xruiDoSave()\n"); X XtPopdown(xruiMenu); X xruiDoPrompt("Enter file to load (<cr> for default):",True,xrpfLoadFile); X uVOIDRETURN; X} X X/***====================================================================***/ X Xstatic void XxruiReallyCreateRoom(roomName) Xchar *roomName; X{ XStringToken token; XRoomPtr pRoom; X X uENTRY1("xruiReallyCreateRoom(%s)\n",uStringText(roomName)); X if (roomName!=NullString) { X token= stGetToken(roomName); X pRoom= LookupRoom(token); X if (pRoom==NullRoom) X pRoom= CreateRoom(token); X if (pRoom!=NullRoom) { X roomSetVisibility(pRoom,roomGetVisibility(pRoom)|roomVisible,False); X } X } X uVOIDRETURN; X} X X/***====================================================================***/ X Xvoid XxruiDoCreateRoom() X{ Xchar *roomName= NullString; X X uENTRY("xruiDoCreateRoom()\n"); X XtPopdown(xruiMenu); X xruiDoPrompt("Enter room to create/show:",True,xruiReallyCreateRoom); X uVOIDRETURN; X} X X/***====================================================================***/ X Xstatic void XxruiReallyDestroyRoom(roomName) Xchar *roomName; X{ XStringToken token; XRoomPtr pRoom; X X uENTRY1("xruiReallyDestroyRoom(%s)\n",uStringText(roomName)); X if (roomName!=NullString) { X token= stGetToken(roomName); X if (token!=NullStringToken) { X pRoom= LookupRoom(token); X } X } X else pRoom= GetCurrentRoom(); X if (pRoom!=NullRoom) X DestroyRoom(pRoom); X uVOIDRETURN; X} X X/***====================================================================***/ X Xvoid XxruiDoDestroyRoom() X{ X uENTRY("xruiDoDestroyRoom()\n"); X XtPopdown(xruiMenu); X xruiDoPrompt("Enter room to destroy (<cr> for current):",True, X xruiReallyDestroyRoom); X uVOIDRETURN; X} X X/***====================================================================***/ X Xstatic void XxruiReallyHideRoom(roomName) Xchar *roomName; X{ XStringToken token; XRoomPtr pRoom; X X uENTRY1("xruiReallyHideRoom(%s)\n",uStringText(roomName)); X if (roomName!=NullString) { X token= stGetToken(roomName); X if (token!=NullStringToken) { X pRoom= LookupRoom(token); X } X } X else pRoom= GetCurrentRoom(); X if (pRoom!=NullRoom) X roomSetVisibility(pRoom,roomGetVisibility(pRoom)&(~roomVisible),False); X uVOIDRETURN; X} X X/***====================================================================***/ X Xvoid XxruiDoHideRoom() X{ X uENTRY("xruiDoHideRoom()\n"); X XtPopdown(xruiMenu); X xruiDoPrompt("Enter room to hide (<cr> for current):",True, X xruiReallyDestroyRoom); X uVOIDRETURN; X} X X/***====================================================================***/ X Xvoid XxruiDoWindowStates() X{ X uENTRY("xruiDoWindowStates()\n"); X XtPopdown(xruiMenu); X XtRealizeWidget(xruiWinMenu); X xruiTopWidget(xruiWinMenu); X XtPopup(xruiWinMenu, XtGrabExclusive); X uVOIDRETURN; X} X X/***====================================================================***/ X Xvoid XxruiCloseMainMenu() X{ X uENTRY("xruiCloseMainMenu()\n"); X XtPopdown(xruiMenu); X uVOIDRETURN; X} X X/***====================================================================***/ X Xvoid XxruiCloseWinMenu() X{ X uENTRY("xruiCloseWinMenu()\n"); X XtPopdown(xruiWinMenu); X uVOIDRETURN; X} X X/***====================================================================***/ X Xvoid XxruiFlipSetupMode() X{ X uENTRY("xruiFlipSetupMode()\n"); X XtPopdown(xruiMenu); X xroomsSetupMode= !xroomsSetupMode; X uVOIDRETURN; X} X X/***====================================================================***/ X X/* ARGSUSED */ Xstatic void XxruiReallyExit(ignoreMe) Xchar *ignoreMe; X{ X uENTRY1("xruiReallyExit(%s)\n",uStringText(ignoreMe)); X DoExit(0,"Exit menu item selected"); X uVOIDRETURN; X} X X/***====================================================================***/ X Xvoid XxruiDoExit() X{ X uENTRY("xruiDoExit()\n"); X XtPopdown(xruiMenu); X if (xruiConfirmExit) X xruiDoPrompt("Do you really want to exit xrooms?",False,xruiReallyExit); X else DoExit(0,"Exit menu item selected"); X uVOIDRETURN; X} X X X/***====================================================================***/ X Xstatic RoomPtr XxruiCreateDefaultRoom() X{ XRoomPtr pRoom; X X uENTRY("xruiCreateDefaultRoom()\n"); X pRoom= LookupRoom(stGetToken(xruiDefaultRoom)); X if (pRoom==NullRoom) X pRoom= CreateRoom(stGetToken(xruiDefaultRoom)); X if (pRoom!=NullRoom) X roomSetVisibility(pRoom,roomVisible,True); X uRETURN(pRoom); X} X X/***====================================================================***/ X XRoomPtr XxruiFindDefaultRoom() X{ XRoomPtr pRoom; X X uENTRY("xruiFindDefaultRoom()\n"); X pRoom= LookupRoom(stGetToken(xruiDefaultRoom)); X if (pRoom!=NullRoom) { X if (!(roomGetVisibility(pRoom)&roomVisible)) { X roomSetVisibility(pRoom,roomVisible,True); X } X uRETURN(pRoom); X } X uRETURN(xruiCreateDefaultRoom()); X} X X/***====================================================================***/ X Xstatic void XxruiInitMenus(parent) XWidget parent; X{ X static Arg buttonArgs[] = { X {XtNfromVert, (XtArgVal) NULL}, X {XtNlabel, (XtArgVal) NULL}, X {XtNvertDistance, (XtArgVal) 0}, X {XtNfromHoriz, (XtArgVal) NULL}, X {XtNhorizDistance, (XtArgVal) 0}, X {XtNresize, (XtArgVal) False}, X }; X static Arg fargs[] = { X {XtNheight, 1}, X {XtNwidth, 1}, X }; X Widget fw, w[20]; X int i, count = 0; X Dimension max, wid; X Arg arg; X X max = 0; X XtSetArg(arg, XtNwidth, &wid); X uENTRY1("xruiInitMenus(0x%x)\n",parent); X XtAddEventHandler(xruiTopLevel,ButtonPressMask,False,xruiHandlePopup,NULL); X XtAddEventHandler(xruiScrollW,ButtonPressMask,False,xruiHandlePopup,NULL); X X xruiMenu= XtCreatePopupShell("menu", X overrideShellWidgetClass, parent, X NULL, 0); X fw = XtCreateManagedWidget("form", formWidgetClass, xruiMenu, X fargs, XtNumber(fargs)); X X buttonArgs[0].value = (XtArgVal) NULL; X buttonArgs[1].value = (XtArgVal) "Create Room"; X w[count] = XtCreateManagedWidget("Create Room", commandWidgetClass, fw, X buttonArgs, XtNumber(buttonArgs)); X XtAddCallback(w[count], XtNcallback, xruiDoCreateRoom, NULL); X XtGetValues(w[count++], &arg, 1); X if (wid > max) { X max = wid; X } X buttonArgs[0].value = (XtArgVal) w[count-1]; X buttonArgs[1].value = (XtArgVal) "Remove Room"; X w[count] = XtCreateManagedWidget("Remove Room", commandWidgetClass, fw, X buttonArgs, XtNumber(buttonArgs)); X XtAddCallback(w[count], XtNcallback, xruiDoDestroyRoom, NULL); X XtGetValues(w[count++], &arg, 1); X if (wid > max) { X max = wid; X } X buttonArgs[0].value = (XtArgVal) w[count-1]; X buttonArgs[1].value = (XtArgVal) "Hide Room"; X w[count] = XtCreateManagedWidget("Hide Room", commandWidgetClass, fw, X buttonArgs, XtNumber(buttonArgs)); X XtAddCallback(w[count], XtNcallback, xruiDoHideRoom, NULL); X XtGetValues(w[count++], &arg, 1); X if (wid > max) { X max = wid; X } X buttonArgs[0].value = (XtArgVal) w[count-1]; X buttonArgs[1].value = (XtArgVal) "Load Profile"; X w[count] = XtCreateManagedWidget("Load Profile", commandWidgetClass, fw, X buttonArgs, XtNumber(buttonArgs)); X XtAddCallback(w[count], XtNcallback, xruiDoLoadProfile, NULL); X XtGetValues(w[count++], &arg, 1); X if (wid > max) { X max = wid; X } X buttonArgs[0].value = (XtArgVal) w[count-1]; X buttonArgs[1].value = (XtArgVal) "Save Profile"; X w[count] = XtCreateManagedWidget("Save Profile", commandWidgetClass, fw, X buttonArgs, XtNumber(buttonArgs)); X XtAddCallback(w[count], XtNcallback, xruiDoSaveProfile, NULL); X XtGetValues(w[count++], &arg, 1); X if (wid > max) { X max = wid; X } X X buttonArgs[0].value = (XtArgVal) w[count-1]; X buttonArgs[1].value = (XtArgVal) "Change States ..."; X w[count] = XtCreateManagedWidget("Change State In Profile", X commandWidgetClass,fw,buttonArgs,XtNumber(buttonArgs)); X XtAddCallback(w[count], XtNcallback, xruiDoWindowStates, NULL); X XtGetValues(w[count++], &arg, 1); X if (wid > max) { X max = wid; X } X X buttonArgs[0].value = (XtArgVal) w[count-1]; X buttonArgs[1].value = (XtArgVal) "Disable Set-up Mode"; X w[count] = XtCreateManagedWidget("Set-up Mode", commandWidgetClass, fw, X buttonArgs, XtNumber(buttonArgs)); X xruiSetupModeItem= w[count]; X XtAddCallback(w[count], XtNcallback, xruiFlipSetupMode, NULL); X XtGetValues(w[count++], &arg, 1); X if (wid > max) { X max = wid; X } X X buttonArgs[0].value = (XtArgVal) w[count-1]; X buttonArgs[1].value = (XtArgVal) "Close Menu"; X w[count] = XtCreateManagedWidget("Close Menu", commandWidgetClass, fw, X buttonArgs, XtNumber(buttonArgs)); X XtAddCallback(w[count], XtNcallback, xruiCloseMainMenu, NULL); X XtGetValues(w[count++], &arg, 1); X if (wid > max) { X max = wid; X } X X buttonArgs[0].value = (XtArgVal) w[count-1]; X buttonArgs[1].value = (XtArgVal) "Exit xrooms"; X w[count] = XtCreateManagedWidget("Exit xrooms", commandWidgetClass, fw, X buttonArgs, XtNumber(buttonArgs)); X XtAddCallback(w[count], XtNcallback, xruiDoExit, NULL); X XtGetValues(w[count++], &arg, 1); X if (wid > max) { X max = wid; X } X X XtSetArg(arg, XtNwidth, max); X for (i=0; i<count; i++) { X XtSetValues(w[i], &arg, 1); X } X X X xruiWinMenu= XtCreatePopupShell("winmenu", X overrideShellWidgetClass, parent, X NULL, 0); X fw = XtCreateManagedWidget("form", formWidgetClass, xruiWinMenu, X fargs, XtNumber(fargs)); X XtSetArg(arg, XtNwidth, &wid); X X count = 0; X buttonArgs[0].value = (XtArgVal) NULL; X buttonArgs[1].value = (XtArgVal) "Open In All Rooms"; X w[count] = XtCreateManagedWidget("Open In All Rooms",commandWidgetClass,fw, X buttonArgs, XtNumber(buttonArgs)); X XtAddCallback(w[count], XtNcallback, xractDoSetAll, NULL); X XtGetValues(w[count++], &arg, 1); X if (wid > max) { X max = wid; X } X buttonArgs[0].value = (XtArgVal) w[count-1]; X buttonArgs[1].value = (XtArgVal) "Open Here Only"; X w[count] = XtCreateManagedWidget("Open Here Only", commandWidgetClass, fw, X buttonArgs, XtNumber(buttonArgs)); X XtAddCallback(w[count], XtNcallback, xractDoSetLocalOnly, NULL); X XtGetValues(w[count++], &arg, 1); X if (wid > max) { X max = wid; X } X buttonArgs[0].value = (XtArgVal) w[count-1]; X buttonArgs[1].value = (XtArgVal) "Make Permanent"; X w[count] = XtCreateManagedWidget("Make Permanent", commandWidgetClass, fw, X buttonArgs, XtNumber(buttonArgs)); X XtAddCallback(w[count], XtNcallback, xractDoMakePermanent, NULL); X XtGetValues(w[count++], &arg, 1); X if (wid > max) { X max = wid; X } X buttonArgs[0].value = (XtArgVal) w[count-1]; X buttonArgs[1].value = (XtArgVal) "Make Transient"; X w[count] = XtCreateManagedWidget("Make Transient", commandWidgetClass, fw, X buttonArgs, XtNumber(buttonArgs)); X XtAddCallback(w[count], XtNcallback, xractDoMakeTransient, NULL); X XtGetValues(w[count++], &arg, 1); X if (wid > max) { X max = wid; X } X buttonArgs[0].value = (XtArgVal) w[count-1]; X buttonArgs[1].value = (XtArgVal) "Bolt Geometry"; X w[count] = XtCreateManagedWidget("Bolt Geometry", commandWidgetClass, fw, X buttonArgs, XtNumber(buttonArgs)); X XtAddCallback(w[count], XtNcallback, xractDoBoltGeom, NULL); X XtGetValues(w[count++], &arg, 1); X if (wid > max) { X max = wid; X } X buttonArgs[0].value = (XtArgVal) w[count-1]; X buttonArgs[1].value = (XtArgVal) "Unbolt Geometry"; X w[count] = XtCreateManagedWidget("Unbolt Geometry", commandWidgetClass, fw, X buttonArgs, XtNumber(buttonArgs)); X XtAddCallback(w[count], XtNcallback, xractDoUnboltGeom, NULL); X XtGetValues(w[count++], &arg, 1); X if (wid > max) { X max = wid; X } X buttonArgs[0].value = (XtArgVal) w[count-1]; X buttonArgs[1].value = (XtArgVal) "Bolt Window Open"; X w[count] = XtCreateManagedWidget("Bolt Window Open",commandWidgetClass,fw, X buttonArgs, XtNumber(buttonArgs)); X XtAddCallback(w[count], XtNcallback, xractDoBoltState, NULL); X XtGetValues(w[count++], &arg, 1); X if (wid > max) { X max = wid; X } X buttonArgs[0].value = (XtArgVal) w[count-1]; X buttonArgs[1].value = (XtArgVal) "Unbolt Window State"; X w[count]= XtCreateManagedWidget("Unbolt Window State",commandWidgetClass,fw, X buttonArgs, XtNumber(buttonArgs)); X XtAddCallback(w[count], XtNcallback, xractDoUnboltState, NULL); X XtGetValues(w[count++], &arg, 1); X if (wid > max) { X max = wid; X } X buttonArgs[0].value = (XtArgVal) w[count-1]; X buttonArgs[1].value = (XtArgVal) "Close Menu"; X w[count] = XtCreateManagedWidget("Close Menu", commandWidgetClass, fw, X buttonArgs, XtNumber(buttonArgs)); X XtAddCallback(w[count], XtNcallback, xruiCloseWinMenu, NULL); X XtGetValues(w[count++], &arg, 1); X if (wid > max) { X max = wid; X } X X XtSetArg(arg, XtNwidth, max); X for (i=0; i<count; i++) { X XtSetValues(w[i], &arg, 1); X } X uVOIDRETURN; X} X X/***====================================================================***/ X Xstatic XtActionsRec actions[] = { X { "do-prompt-yes", xruiDoPromptYes } X}; X Xvoid XxruiInit(parent) XWidget parent; X{ X static Arg fargs[] = { X {XtNheight, 150}, X {XtNwidth, 35}, X }; X X uENTRY1("xruiInit(0x%x)\n",parent); X xruiTopLevel= parent; X xroomsMainWindow= XtWindow(xruiTopLevel); X xruiScrollW= XtCreateWidget("main", formWidgetClass, parent, X fargs, XtNumber(fargs)); X (void)xrrInit(xruiScrollW); X XtManageChild(xruiScrollW); X XtAddActions(actions, XtNumber(actions)); X XSync(xroomsDpy,False); X uVOIDRETURN; X} X X/***====================================================================***/ X Xvoid XxruiBecomeVisible() X{ X uENTRY("xruiBecomeVisible()\n"); X XtRealizeWidget(xruiTopLevel); X xruiInitMenus(xruiScrollW); X (void)GetCurrentRoom(); X XSync(xroomsDpy,False); X uVOIDRETURN; X} X END_OF_FILE if test 23300 -ne `wc -c <'./xrooms/xrXawUI.c'`; then echo shar: \"'./xrooms/xrXawUI.c'\" unpacked with wrong size! fi # end of './xrooms/xrXawUI.c' fi if test -f './xrset/xrset.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'./xrset/xrset.c'\" else echo shar: Extracting \"'./xrset/xrset.c'\" \(23831 characters\) sed "s/^X//" >'./xrset/xrset.c' <<'END_OF_FILE' X X /*\ X * $Header: xrset.c,v 5.0 90/01/10 07:02:55 erik Exp $ X * X * COPYRIGHT 1990 X * DIGITAL EQUIPMENT CORPORATION X * MAYNARD, MASSACHUSETTS X * ALL RIGHTS RESERVED. X * X * THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND X * SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. X * DIGITAL MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THIS SOFTWARE X * FOR ANY PURPOSE. IT IS SUPPLIED "AS IS" WITHOUT EXPRESS OR IMPLIED X * WARRANTY. X * X * IF THE SOFTWARE IS MODIFIED IN A MANNER CREATING DERIVATIVE COPYRIGHT X * RIGHTS, APPROPRIATE LEGENDS MAY BE PLACED ON THE DERIVATIVE WORK IN X * ADDITION TO THAT SET FORTH ABOVE. X * X * Permission to use, copy, modify, and distribute this software and its X * documentation for any purpose and without fee is hereby granted, provided X * that the above copyright notice appear in all copies and that both that X * copyright notice and this permission notice appear in supporting X * documentation, and that the name of Digital Equipment Corporation not be X * used in advertising or publicity pertaining to distribution of the X * software without specific, written prior permission. X \*/ X X#include <stdio.h> X#include "X11/Xlib.h" X#include "X11/Xatom.h" X#include "X11/Xutil.h" X#include "X11/Xmd.h" X X#define DEBUG_VAR xrreqDebug X#include "utils.h" X#include "xrGen.h" X#include "xrReq.h" X X/***==================================================================***/ X Xextern char *getenv(); X Xchar *dpyName= NullString; XDisplay *argDpy= NULL; Xint argScrn= 0; XWindow argRoot= None; X X/***==================================================================***/ X X#define DB uDebug Xvoid XUsage(name) Xchar *name; X{ XDB("usage: %s ([ args ] [command [cmdargs]])*\n",name); XDB("where recognized args are:\n"); XDB(" -display <name> use named display\n"); XDB(" -debug <string> set debugging in xrooms\n"); XDB(" -verbose [<level>] set amount of output\n"); XDB(" -set [state flags] set the managed parts of application state(s)\n"); XDB(" -merge [state flags] add to the managed parts of application state(s)\n"); XDB(" -clear [state flags] clear the managed parts of application state(s)\n"); XDB(" -bolt [state flags] bolt parts of application state(s)\n"); XDB(" -unbolt [state flags] unbolt parts of application state(s)\n"); XDB(" -tighten [state flags] tighten bolts in application state(s)\n"); XDB(" -loosen [state flags] loosen bolts in application state(s)\n"); XDB(" -setbolts [state flags] set bolts in application state(s)\n"); XDB(" legal state flags are:\n"); XDB(" -local set local state (default)\n"); XDB(" -default or -dflt set default state\n"); XDB(" -allstates or -as set all states\n"); XDB(" -visible set visible state\n"); XDB(" -winstate or -state set window state\n"); XDB(" -x or -right set right edge of window\n"); XDB(" +x or -left set left edge of window\n"); XDB(" -y or -bottom set bottom edge of window\n"); XDB(" +y or -top set top edge of window\n"); XDB(" -position set top-right corner of window\n"); XDB(" -width set width of window\n"); XDB(" -height set height of window\n"); XDB(" -size set width and height of window\n"); XDB(" -geometry set entire window geometry\n"); XDB(" -everything set both geometry and application state\n"); XDB(" -allapps or -aa set all apps\n"); XDB(" -activeapps set all currently active apps\n"); XDB(" -queryapp or -qa query user for application (default)\n"); XDB(" -lastapp or -la re-use last application\n"); XDB(" <string> name of application to set\n"); XDB(" -room <string> set state only in named room\n"); XDB(" -current set state only in current room (default)\n"); XDB(" -queryroom or -qr query user for room (not implemented)\n"); XDB(" -allrooms or -ar set state in all rooms\n"); XDB(" -visrooms set state in all visible rooms\n"); XDB(" -remember [args] remember an application forever\n"); XDB(" -forget [args] forget an application after it exits\n"); XDB(" legal remember flags are:\n"); XDB(" -query or -select query application (default)\n"); XDB(" -last re-use last selected application\n"); XDB(" -all remember/forget all applications\n"); XDB(" <string> name of application\n"); XDB(" -show [ show flags ] make room (conditionally) visible\n"); XDB(" -hide [ hide flags ] make room invisible\n"); XDB(" legal flags for both -hide and -show are:\n"); XDB(" -room <string> name of room to change\n"); XDB(" <string> name of room to change\n"); XDB(" -current change visibility of current room\n"); XDB(" -queryroom or -qr query user for room to change (not implemented)\n"); XDB(" -allrooms or -ar change visibility of all rooms\n"); XDB(" -visrooms change visibility of all visible rooms\n"); XDB(" -create create the room if it doesn't exist\n"); XDB(" legal flags for -show are:\n"); XDB(" -always room is always visible\n"); XDB(" -[when]active room is visible when active\n"); XDB(" -[when]nonempty room is visible when non-empty\n"); XDB(" -now room is visible now\n"); XDB(" -load [<file>] load a profile file\n"); XDB(" -appname [-id <integer>] query name of application\n"); Xexit(0); X/* NOTREACHED */ Xreturn; X} X X/***==================================================================***/ X XBoolean XOpenConnection() X{ X uENTRY("OpenConnection()\n"); X if (argDpy==NULL) { X if (!(argDpy = XOpenDisplay(dpyName))) { X if (dpyName==NullString) dpyName= getenv("DISPLAY"); X if (dpyName==NullString) dpyName= "unix:0"; X uFatalError("Cannot open display %s\n",dpyName); X /*NOTREACHED */ X } X X argScrn= XDefaultScreen(argDpy); X argRoot= XDefaultRootWindow(argDpy); X xrgenInit(argDpy); X X uDEBUG1(1,"Opened %s \n",(dpyName?dpyName:"default display")); X } X uRETURN(True); X} X X/***==================================================================***/ X XBoolean XCloseConnection() X{ X uENTRY("CloseConnection()\n"); X/* xrgenCleanUp(argDpy);*/ X XCloseDisplay(argDpy); X argDpy= NULL; X argScrn= 0; X argRoot= None; X uDEBUG1(1,"Closed %s \n",(dpyName?dpyName:"default display")); X uRETURN(True); X} X X/***==================================================================***/ X Xint XGenArg(argc,argv,i) Xint argc; Xchar *argv[]; X{ X uENTRY3("GenArg(%d,0x%x,%d)\n",argc,argv,i); X if (argc>i+1) { X if (uStringPrefix(argv[i],"-display")) { X if ((dpyName!=NullString)&&(!uStringEqual(dpyName,argv[i]))&& X (argDpy!=NULL)) { X CloseConnection(); X } X if (!uStringEqual(dpyName,argv[i])) { X dpyName= argv[i+1]; X } X uRETURN(2); X } X else if (uStringPrefix(argv[i],"-verbose")) { X int level; X if ((sscanf(argv[i+1],"%d",&level)!=1)&& X (sscanf(argv[i+1],"0x%x",&level)!=1)) { X uDEBUG(1,"Setting verbose (1)\n"); X xrreqDebug= 1; X uRETURN(1); X } X else { X uDEBUG1(1,"Setting verbose (%d)\n",level); X xrreqDebug= level; X uRETURN(2); X } X } X } X if (uStringPrefix(argv[i],"-help")) { X Usage(argv[0]); X /* NOTREACHED */ X } X uRETURN(0); X} X X/***====================================================================***/ X Xint XGetStringArg(argc,argv,i,ppStr) Xint argc; Xchar *argv[]; Xint i; Xchar **ppStr; X{ Xchar *arg; X X uENTRY4("GetStringArg(%d,0x%x,%d,0x%x)\n",argc,argv,i,ppStr); X arg= argv[i]; X if (uStringEqual(arg,"--")) { X i++; X if (i<argc) { X *ppStr= argv[i]; X uRETURN(2); X } X else { X uError("Missing string after \"--\"\n"); X *ppStr= NullString; X uRETURN(1); X } X } X else if (arg[0]=='-') { X *ppStr= NullString; X uRETURN(0); X } X X *ppStr= argv[i]; X uRETURN(1); X} X X/***====================================================================***/ X X/* ARGSUSED */ Xint XDebugArgs(argc,argv,i,ignored) Xint argc; Xchar *argv[]; Xint i; Xchar *ignored; X{ XBoolean ok= True; Xint first=i; Xint nUsed; Xchar *arg; X X uENTRY4("handleDebug(0x%x,0x%x,%s,%s)\n",argc,argv,i,uStringText(ignored)); X while ((i<argc)&&(ok)) { X nUsed= GetStringArg(argc,argv,i,&arg); X if ((nUsed>0)&&(arg!=NullString)&&(OpenConnection())) { X ok= xrreqIssueDebug(argDpy,argRoot,arg); X i+= nUsed; X } X else { X nUsed= GenArg(argc,argv,i); X if (nUsed) i+= nUsed; X else ok= False; X } X } X uRETURN(i-first); X} X X/***====================================================================***/ X Xint XWhichAppArg(argc,argv,i,pWhich,ppName) Xint argc; Xchar *argv[]; Xint i; Xunsigned *pWhich; Xchar **ppName; X{ Xint nUsed= 1; Xchar *arg,*tmp; X X uENTRY5("WhichAppArg(%d,0x%x,%d,0x%x,0x%x)\n",argc,argv,i,pWhich,ppName); X if (i<argc) { X arg= argv[i]; X if (uStringPrefix(arg,"-allapps")||uStringPrefix(arg,"-aa")) { X *pWhich= XR_ALL_APPS; X *ppName= NullString; X } X else if (uStringPrefix(arg,"-activeapps")) { X *pWhich= XR_ACTIVE_APPS; X *ppName= NullString; X } X else if (uStringPrefix(arg,"-queryapp")||uStringPrefix(arg,"-qa")) { X *pWhich= XR_QUERY_APP; X *ppName= NullString; X } X else if (uStringPrefix(arg,"-lastapp")||uStringPrefix(arg,"-la")) { X *pWhich= XR_LAST_APP; X *ppName= NullString; X } X else if (uStringPrefix(arg,"-application")) { X i++; X if (i<argc) { X nUsed= 2; X *pWhich= XR_NAMED_APP; X *ppName= argv[i]; X } X else nUsed= 0; X } X else if (uStringPrefix(arg,"-id")||uStringPrefix(arg,"-window")) { X int winId; X i++; X if ((i<argc)&& X ((sscanf(argv[i],"0x%x",&winId)==1)|| X (sscanf(argv[i],"%d",&winId)==1))) { X *ppName= (char *)uAlloc(strlen(argv[i])+3); X if (*ppName!=NullString) { X nUsed= 2; X sprintf(*ppName,"0x%x",winId); X *pWhich= XR_WINDOW_APP; X } X else nUsed= 0; X } X else nUsed= 0; X } X else if ((nUsed=GetStringArg(argc,argv,i,&tmp))>0) { X *pWhich= XR_NAMED_APP; X *ppName= tmp; X } X else { X nUsed= 0; X *pWhich= XR_QUERY_APP; X *ppName= tmp; X } X } X uRETURN(nUsed); X} X X/***====================================================================***/ X Xint XWhichRoomArg(argc,argv,i,pWhich,ppName) Xint argc; Xchar *argv[]; Xint i; Xunsigned *pWhich; Xchar **ppName; X{ Xint nUsed= 1; Xchar *arg,*tmp; X X uENTRY5("WhichRoomArg(%d,0x%x,%d,0x%x,0x%x)\n",argc,argv,i,pWhich,ppName); X if (i<argc) { X arg= argv[i]; X if (uStringPrefix(arg,"-current")) { X *pWhich= XR_CURRENT_ROOM; X *ppName= NullString; X } X else if (uStringPrefix(arg,"-lastroom")||uStringPrefix(arg,"-lr")) { X *pWhich= XR_LAST_ROOM; X *ppName= NullString; X } X else if (uStringPrefix(arg,"-queryroom")||uStringPrefix(arg,"-qr")) { X *pWhich= XR_QUERY_ROOM; X *ppName= NullString; X } X else if (uStringPrefix(arg,"-visrooms")||uStringPrefix(arg,"-visible")){ X *pWhich= XR_VISIBLE_ROOMS; X *ppName= NullString; X } X else if (uStringPrefix(arg,"-allrooms")||uStringPrefix(arg,"-ar")) { X *pWhich= XR_ALL_ROOMS; X *ppName= NullString; X } X else if (uStringPrefix(arg,"-room")) { X i++; X if (i<argc) { X nUsed= 2; X *pWhich= XR_NAMED_APP; X *ppName= argv[i]; X } X else nUsed= 0; X } X else if ((nUsed=GetStringArg(argc,argv,i,&tmp))>0) { X *pWhich= XR_NAMED_ROOM; X *ppName= tmp; X } X else { X nUsed= 0; X *pWhich= XR_CURRENT_ROOM; X *ppName= NullString; X } X } X uRETURN(nUsed); X} X X/***====================================================================***/ X Xint XWhichStateArg(argc,argv,i,pWhich) Xint argc; Xchar *argv[]; Xint i; Xunsigned *pWhich; X{ Xint nUsed= 1; Xchar *arg; X X uENTRY4("WhichStateArg(%d,0x%x,%d,0x%x)\n",argc,argv,i,pWhich); X if (i<argc) { X arg= argv[i]; X if (uStringPrefix(arg,"-local")) { X *pWhich= XR_LOCAL_STATE; X } X else if (uStringPrefix(arg,"-default")||uStringPrefix(arg,"-dflt")) { X *pWhich= XR_DFLT_STATE; X } X else if (uStringPrefix(arg,"-allstates")||uStringPrefix(arg,"-as")) { X *pWhich= XR_ALL_STATES; X } X else if (uStringPrefix(argv[i],"-visible")) { X *pWhich= XR_VISIBLE_STATE; X } X else { X nUsed= 0; X *pWhich= XR_VISIBLE_STATE; X } X } X uRETURN(nUsed); X} X X/***====================================================================***/ X Xint XWhichPartArg(argc,argv,i,pWhich) Xint argc; Xchar *argv[]; Xint i; Xunsigned *pWhich; X{ Xint nUsed= 1; Xchar *arg; X X uENTRY4("WhichPartArg(%d,0x%x,%d,0x%x)\n",argc,argv,i,pWhich); X if (i<argc) { X arg= argv[i]; X if (uStringPrefix(arg,"-winstate")||uStringPrefix(arg,"-state")) X *pWhich= XR_WINSTATE_PART; X else if (uStringEqual(arg,"-x")||uStringPrefix(arg,"-right")) X *pWhich= XR_X_PART|XR_X_NEGATIVE; X else if (uStringEqual(arg,"+x")||uStringPrefix(arg,"-left")) X *pWhich= XR_X_PART; X else if (uStringEqual(arg,"-y")||uStringPrefix(arg,"-bottom")) X *pWhich= XR_Y_PART|XR_Y_NEGATIVE; X else if (uStringEqual(arg,"+y")||uStringPrefix(arg,"-top")) X *pWhich= XR_Y_PART; X else if (uStringPrefix(arg,"-position")) X *pWhich= XR_POSITION_PART; X else if (uStringPrefix(arg,"-width")) X *pWhich= XR_WIDTH_PART; X else if (uStringPrefix(arg,"-height")) X *pWhich= XR_HEIGHT_PART; X else if (uStringPrefix(arg,"-size")) X *pWhich= XR_SIZE_PART; X else if (uStringPrefix(arg,"-geometry")) X *pWhich= XR_GEOM_PARTS; X else if (uStringPrefix(arg,"-everything")) X *pWhich= XR_ALL_PARTS; X else { X nUsed= 0; X *pWhich= XR_GEOM_PARTS; X } X } X uRETURN(nUsed); X} X X/***====================================================================***/ X Xint XSetStateArgs(argc,argv,i,what) Xint argc; Xchar *argv[]; Xint i; Xchar *what; X{ XBoolean ok= True; Xint first= i; XBoolean partSpec= False; XBoolean appSpec= False; XBoolean roomSpec= False; XBoolean stateSpec= False; Xunsigned tmpInt; Xchar *tmpStr; XxrSetStateArgsRec args; Xint nUsed; X X uENTRY4("SetStateArgs(%d,0x%x,%d,%s)\n",argc,argv,i,uStringText(what)); X args.doWhat= what[0]; X args.toWhat= what[1]; X args.whichPart= 0; X args.whichState= XR_VISIBLE_STATE; X args.whichApp= XR_QUERY_APP; X args.appName= NullString; X args.whichRoom= XR_CURRENT_ROOM; X args.roomName= NullString; X X while ((i<argc)&&(ok)) { X if ((nUsed= WhichPartArg(argc,argv,i,&tmpInt))>0) { X if (partSpec) args.whichPart|= tmpInt; X else args.whichPart= tmpInt; X partSpec= True; X } X else if ((nUsed= WhichStateArg(argc,argv,i,&tmpInt))>0) { X if (stateSpec&&OpenConnection()) { X ok= xrreqIssueSetState(argDpy,argRoot,&args); X } X args.whichState= tmpInt; X stateSpec= True; X } X else if ((nUsed= WhichAppArg(argc,argv,i,&tmpInt,&tmpStr))>0) { X if (appSpec&&OpenConnection()) { X ok= xrreqIssueSetState(argDpy,argRoot,&args); X } X args.whichApp= tmpInt; X args.appName= tmpStr; X appSpec= True; X } X else if ((nUsed= WhichRoomArg(argc,argv,i,&tmpInt,&tmpStr))>0) { X if (roomSpec&&OpenConnection()) { X ok= xrreqIssueSetState(argDpy,argRoot,&args); X } X args.whichRoom= tmpInt; X args.roomName= tmpStr; X roomSpec= True; X } X else { X nUsed= GenArg(argc,argv,i); X if (nUsed>0) i+= nUsed; X else ok= False; X continue; X } X i+= nUsed;; X } X if (OpenConnection()) { X ok= xrreqIssueSetState(argDpy,argRoot,&args); X } X if (!ok) { X uInformation("Set state request failed\n"); X } X uRETURN(i-first); X} X X/***==================================================================***/ X Xint XRememberArgs(argc,argv,i,remember) Xint argc; Xchar *argv[]; Xint i; Xchar *remember; X{ Xint first= i; Xint nUsed; XBoolean ok= True; XBoolean appSpec= False; Xunsigned tmpInt; Xchar *tmpStr; XxrRememberArgsRec args; X X uENTRY4("RememberArgs(%d,0x%x,%d,%s)\n",argc,argv,i,uStringText(remember)); X X args.remember= (remember[0]=='T'); X args.whichApp= XR_QUERY_APP; X X while ((i<argc)&&(ok)) { X if ((nUsed= WhichAppArg(argc,argv,i,&tmpInt,&tmpStr))>0) { X if (appSpec&&OpenConnection()) { X ok= xrreqIssueRemember(argDpy,argRoot,&args); X } X args.whichApp= tmpInt; X args.appName= tmpStr; X appSpec= True; X } X else { X nUsed= GenArg(argc,argv,i); X if (nUsed>0) i+= nUsed; X else ok= False; X } X i+= nUsed; X } X if (OpenConnection()) { X ok= xrreqIssueRemember(argDpy,argRoot,&args); X } X if (!ok) { X uInformation("Remember request failed\n"); X } X uRETURN(i-first); X} X X/***==================================================================***/ X X/* ARGSUSED */ Xint XHideArgs(argc,argv,i,ignored) Xint argc; Xchar *argv[]; Xint i; XOpaque ignored; X{ XBoolean ok= True; Xint first= i; XBoolean roomSpec= False; Xunsigned tmpInt; Xchar *tmpStr; XxrVisibilityArgsRec args; Xint nUsed; X X uENTRY4("HideArgs(%d,0x%x,%d,0x%x)\n",argc,argv,i,ignored); X args.visibility= XR_ROOM_HIDDEN; X args.whichRoom= XR_CURRENT_ROOM; X args.roomName= NullString; X args.checkAuto= False; X args.createRoom= False; X X while ((i<argc)&&(ok)) { X if ((nUsed= WhichRoomArg(argc,argv,i,&tmpInt,&tmpStr))>0) { X if (roomSpec&&OpenConnection()) { X ok= xrreqIssueVisibility(argDpy,argRoot,&args); X } X args.whichRoom= tmpInt; X args.roomName= tmpStr; X roomSpec= True; X } X else if ((nUsed=GetStringArg(argc,argv,i,&tmpStr))>0) { X if ((roomSpec)&&(OpenConnection())) { X ok= xrreqIssueVisibility(argDpy,argRoot,&args); X } X args.whichRoom= XR_NAMED_ROOM; X args.roomName= tmpStr; X roomSpec= True; X } X else if (uStringPrefix(argv[i],"-create")) { X args.createRoom= True; X } X else { X nUsed= GenArg(argc,argv,i); X if (nUsed>0) i+= nUsed; X else ok= False; X continue; X } X i+= nUsed;; X } X if (OpenConnection()) { X ok= xrreqIssueVisibility(argDpy,argRoot,&args); X } X if (!ok) { X uInformation("HIDE request failed\n"); X } X uRETURN(i-first); X} X X/***==================================================================***/ X X/* ARGSUSED */ Xint XShowArgs(argc,argv,i,ignored) Xint argc; Xchar *argv[]; Xint i; XOpaque ignored; X{ XBoolean ok= True; Xint first= i; XBoolean roomSpec= False; Xunsigned tmpInt; Xchar *tmpStr; XxrVisibilityArgsRec args; Xint nUsed; X X uENTRY4("ShowArgs(%d,0x%x,%d,0x%x)\n",argc,argv,i,ignored); X args.visibility= XR_ROOM_VISIBLE; X args.whichRoom= XR_CURRENT_ROOM; X args.roomName= NullString; X args.checkAuto= True; X args.createRoom= False; X X while ((i<argc)&&(ok)) { X if ((nUsed= WhichRoomArg(argc,argv,i,&tmpInt,&tmpStr))>0) { X if (roomSpec&&OpenConnection()) { X ok= xrreqIssueVisibility(argDpy,argRoot,&args); X } X args.whichRoom= tmpInt; X args.roomName= tmpStr; X roomSpec= True; X } X else if ((nUsed=GetStringArg(argc,argv,i,&tmpStr))>0) { X if ((roomSpec)&&(OpenConnection())) { X ok= xrreqIssueVisibility(argDpy,argRoot,&args); X } X args.whichRoom= XR_NAMED_ROOM; X args.roomName= tmpStr; X roomSpec= True; X } X else if (uStringPrefix(argv[i],"-create")) { X args.createRoom= True; X } X else if (uStringPrefix(argv[i],"-always")) { X args.visibility|= XR_ROOM_ALWAYS; X } X else if (uStringPrefix(argv[i],"-active")|| X uStringPrefix(argv[i],"-whenactive")) { X args.visibility|= XR_ROOM_WHEN_ACTIVE; X } X else if (uStringPrefix(argv[i],"-nonempty")|| X uStringPrefix(argv[i],"-whennonempty")) { X args.visibility|= XR_ROOM_WHEN_NON_EMPTY; X } X else if (uStringPrefix(argv[i],"-now")) { X args.checkAuto= False; X } X else { X nUsed= GenArg(argc,argv,i); X if (nUsed>0) i+= nUsed; X else ok= False; X continue; X } X i+= nUsed;; X } X if (OpenConnection()) { X ok= xrreqIssueVisibility(argDpy,argRoot,&args); X } X if (!ok) { X uInformation("SHOW request failed\n"); X } X uRETURN(i-first); X} X X/***==================================================================***/ X X/* ARGSUSED */ Xint XLoadArgs(argc,argv,i,ignored) Xint argc; Xchar *argv[]; Xint i; XOpaque ignored; X{ Xint first= i; Xint nUsed; Xchar *fileName= NullString,*tmp; XBoolean fileSpec; XBoolean ok= True; X X uENTRY4("LoadArgs(%d,0x%x,%d,0x%x)\n",argc,argv,i,ignored); X while ((i<argc)&&(ok)) { X if ((nUsed=GetStringArg(argc,argv,i,&tmp))>0) { X if ((fileSpec)&&(OpenConnection())) { X ok= xrreqIssueLoad(argDpy,argRoot,fileName); X } X fileName= tmp; X fileSpec= True; X } X else { X nUsed= GenArg(argc,argv,i); X if (nUsed>0) i+= nUsed; X else ok= False; X continue; X } X i+= nUsed; X } X if (OpenConnection()) { X ok= xrreqIssueLoad(argDpy,argRoot,fileName); X } X if (!ok) { X uInformation("Load request failed\n"); X } X uRETURN(i-first); X} X X/***==================================================================***/ X X/* ARGSUSED */ Xint XGetAppNameArgs(argc,argv,i,ignored) Xint argc; Xchar *argv[]; Xint i; XOpaque ignored; X{ Xint first= i; Xint nUsed; XBoolean ok= True; XBoolean appSpec= False; Xunsigned tmpInt; Xchar *tmpStr; Xunsigned whichApp; Xchar *name; X X uENTRY4("GetAppNameArgs(%d,0x%x,%d,0x%x)\n",argc,argv,i,ignored); X whichApp= XR_QUERY_APP; X name= NullString; X X while ((i<argc)&&(ok)) { X if ((nUsed= WhichAppArg(argc,argv,i,&tmpInt,&tmpStr))>0) { X if (appSpec&&OpenConnection()) { X char *rtrn= xrreqIssueGetAppName(argDpy,argRoot,whichApp,name); X fprintf(stderr,"%s\n",uStringText(rtrn)); X } X whichApp= tmpInt; X name= tmpStr; X appSpec= True; X } X else { X nUsed= GenArg(argc,argv,i); X if (nUsed>0) i+= nUsed; X else ok= False; X } X i+= nUsed; X } X if (OpenConnection()) { X char *rtrn= xrreqIssueGetAppName(argDpy,argRoot,whichApp,name); X fprintf(stderr,"%s\n",uStringText(rtrn)); X } X uRETURN(i-first); X} X X/***==================================================================***/ X Xtypedef struct _CommandArgRec { X char *cmdLineArg; X int (*argFunc)(); X char *funcArg; X} CommandArgRec,*CommandArgPtr; X Xstatic CommandArgRec cmdArgs[] = { X { "-debug", DebugArgs, "" }, X { "-set", SetStateArgs, "SP" }, X { "-merge", SetStateArgs, "MP" }, X { "-clear", SetStateArgs, "CP" }, X { "-bolt", SetStateArgs, "MB" }, X { "-unbolt", SetStateArgs, "CB" }, X { "-tighten", SetStateArgs, "CL" }, X { "-loosen", SetStateArgs, "ML" }, X { "-setbolts", SetStateArgs, "SB" }, X { "-remember", RememberArgs, "T" }, X { "-forget", RememberArgs, "F" }, X { "-hide", HideArgs, "" }, X { "-show", ShowArgs, "" }, X { "-load", LoadArgs, "" }, X { "-appname", GetAppNameArgs, "" }, X { NULL, NULL, NULL } X}; X Xint XCommandArgs(argc,argv,i) Xint argc; Xchar *argv[]; X{ XCommandArgPtr pCmd; X X uENTRY3("CommandArgs(%d,0x%x,%d)\n",argc,argv,i); X pCmd= cmdArgs; X while (pCmd->cmdLineArg!=NullString) { X if (uStringPrefix(argv[i],pCmd->cmdLineArg)) { X uRETURN(1+(*pCmd->argFunc)(argc,argv,i+1,pCmd->funcArg)); X } X pCmd++; X } X uRETURN(0); X} X X/***==================================================================***/ X XBoolean XHandleArgs(argc, argv) Xint argc; Xchar *argv[]; X{ Xint i,nUsed; X X uENTRY2("HandleArgs(%d,0x%x)\n",argc,argv); X i= 1; X if (argc==1) { X Usage(argv[0]); X /* NOTREACHED */ X } X while (i<argc) { X nUsed= GenArg(argc,argv,i); X if (nUsed==0) X nUsed= CommandArgs(argc,argv,i); X if (nUsed==0) { X uError("Unknown argument \"%s\"\n",argv[i]); X Usage(argv[0]); X /* NOTREACHED */ X } X i+= nUsed; X } X uRETURN(True); X} X X/***====================================================================***/ X Xmain(argc, argv) Xint argc; Xchar **argv; X{ XBoolean ok; X X (void)stInit(100,10,False,False); X ok= HandleArgs(argc, argv); X ok= CloseConnection()&&ok; X if (ok) return(0); X else return(1); X} X END_OF_FILE if test 23831 -ne `wc -c <'./xrset/xrset.c'`; then echo shar: \"'./xrset/xrset.c'\" unpacked with wrong size! fi # end of './xrset/xrset.c' fi echo shar: End of archive 12 \(of 14\). cp /dev/null ark12isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 14 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0