v02i070: a browser, Part02/03
Mike Wexler
mikew at wyse.wyse.com
Wed Jan 4 06:53:45 AEST 1989
Submitted-by: Schlichter.Wbst at Xerox.COM (Hans Schlichter)
Posting-number: Volume 2, Issue 70
Archive-name: xbrowser/part02
#! /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 2 (of 3)."
# Contents: modcommand.c option.c popup.c scandir.c toggle.c
# xfilebrowser.c
# Wrapped by mikew at wyse on Tue Jan 3 12:03:48 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'modcommand.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'modcommand.c'\"
else
echo shar: Extracting \"'modcommand.c'\" \(3455 characters\)
sed "s/^X//" >'modcommand.c' <<'END_OF_FILE'
X/* Systems Sciences Laboratory, Webster Research Center */
X
Xstatic char *PROGRAM_information[] =
X{
X "Copyright (c) 1988 Xerox Corporation. All rights reserved.",
X "$Header$",
X "$Locker$"
X}
X;
X
X/*
X * Copyright protection claimed includes all forms and matters of copyrightable
X * material and information now allowed by statutory or judicial lay or
X * herinafter granted, including without limitation, material generated from
X * the software programs which are displayed on the screen such as icons,
X * screen display looks, etc.
X */
X
X
X/*
X * this defines modifications to the command button widget;
X * it redefines the translation table to accept input from
X * all three mouse buttons; the notify routine is redone to
X * return the number of the pressed mouse button as the call_data
X * parameter;
X *
X */
X
X#include "xfilebrowser.h"
X#include <X11/IntrinsicP.h>
X#include <X11/CommandP.h>
X
X
X/* Private Data */
Xextern void My_Notify();
Xextern void My_Double();
X
Xstatic char defaultTranslations[] =
X "<Btn1Down>: set() \n\
X <Btn1Up>: mynotify(1) unset() \n\
X <Btn2Down>: set() \n\
X <Btn2Up>: mynotify(2) unset() \n\
X <Btn3Down>: set() \n\
X <Btn3Up>: mynotify(3) unset()";
X
Xstatic char textTranslations[] =
X "<Btn1Up>(2): mydouble()";
X
X
Xstatic XtActionsRec actionsList[] =
X{
X {"mynotify", My_Notify},
X};
X
Xstatic XtActionsRec actionsText[] =
X{
X {"mydouble", My_Double},
X};
X
X
X/************************************
X*
X* Modifications for command buttons
X*
X*************************************/
X
X
X
X/* ARGSUSED */
Xvoid ModCommand_Init(command)
XWidget command;
X{
X XtTranslations modtable;
X
X modtable = XtParseTranslationTable(defaultTranslations);
X XtOverrideTranslations(command, modtable);
X XtAddActions(actionsList, 1);
X}
X
X/***************************
X*
X* Action Procedures
X*
X***************************/
X
X
X/* ARGSUSED */
Xstatic void My_Notify(w, event, params, num_params)
XWidget w;
XXEvent *event;
XString *params;
XCardinal *num_params;
X{
X CommandWidget cbw = (CommandWidget)w;
X int button;
X
X if (cbw->command.set) {
X button = 0;
X if (params[0] != NULL) {
X if (*params[0] == '1') button = 1;
X else if (*params[0] == '2') button = 2;
X else if (*params[0] == '3') button = 3;
X }
X XtCallCallbacks(w, XtNcallback, (caddr_t)button);
X }
X}
X
X
X/************************************
X*
X* Modifications for text widgets
X*
X*************************************/
X
X/* ARGSUSED */
Xvoid Modtext_Init(command)
XWidget command;
X{
X XtTranslations modtable;
X
X modtable = XtParseTranslationTable(textTranslations);
X XtOverrideTranslations(command, modtable);
X XtAddActions(actionsText, 1);
X}
X
X/* ARGSUSED */
Xstatic void My_Double(w, event, params, num_params)
XWidget w;
XXEvent *event;
XString *params;
XCardinal *num_params;
X{
X XtTextPosition pos1, pos2;
X int i;
X long view_edit = (viewEdit ? 2 : 1);
X struct stat buf;
X
X if (w == listwidget) {
X XtTextGetSelectionPos(listwidget, &pos1, &pos2);
X if (pos1 != pos2 && numfiles != 0 &&
X ( (i = select_file(pos1, pos2)) != -1)) {
X if (stat((*files[i]).d_name, &buf) == -1) {
X disp_message("\ncannot check file stats");
X return;
X }
X }
X else return;
X
X if (buf.st_mode & S_IFDIR)
X DoList(listbutton, (caddr_t)NULL, (caddr_t)0);
X else
X DoEdit(editbutton, (caddr_t)NULL, (caddr_t)view_edit);
X }
X else if (w == grepwidget)
X DoGrepEdit(grepbutton, (caddr_t)NULL, (caddr_t)view_edit);
X}
END_OF_FILE
if test 3455 -ne `wc -c <'modcommand.c'`; then
echo shar: \"'modcommand.c'\" unpacked with wrong size!
fi
# end of 'modcommand.c'
fi
if test -f 'option.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'option.c'\"
else
echo shar: Extracting \"'option.c'\" \(8712 characters\)
sed "s/^X//" >'option.c' <<'END_OF_FILE'
X/* Systems Sciences Laboratory, Webster Research Center */
X
Xstatic char *PROGRAM_information[] =
X{
X "Copyright (c) 1988 Xerox Corporation. All rights reserved.",
X "$Header$",
X "$Locker$"
X}
X;
X
X/*
X * Copyright protection claimed includes all forms and matters of copyrightable
X * material and information now allowed by statutory or judicial lay or
X * herinafter granted, including without limitation, material generated from
X * the software programs which are displayed on the screen such as icons,
X * screen display looks, etc.
X */
X
X
X/* NOTE: This is modelled after the dialog widget!
X Rather, this is an interface to a widget.
X It implements policy, and gives a (hopefully) easier-to-use interface
X than just directly making your own form. */
X
X
X#include <X11/Xlib.h>
X#include <X11/Xos.h>
X#include <X11/IntrinsicP.h>
X#include <X11/XawMisc.h>
X#include <X11/StringDefs.h>
X#include <X11/AsciiText.h>
X#include <X11/Command.h>
X#include <X11/Label.h>
X#include "optionP.h"
X#include "toggleP.h"
X#include <ctype.h>
X
X#define offset(field) XtOffset(OptionWidget, field)
X
X
Xstatic XtResource resourcelist[] = {
X {XtNlabel, XtCLabel, XtRString, sizeof(String),
X offset(option.label), XtRString, NULL},
X {XtNorientation, XtCOrientation, XtROrientation, sizeof(XtOrientation),
X offset(option.orientation), XtRString, "orientVertical"},
X};
X
Xextern void Initialize(), ConstraintInitialize();
Xextern Boolean SetValues();
Xextern void DoOption();
X
XOptionClassRec optionClassRec = {
X { /* core_class fields */
X /* superclass */ (WidgetClass) &formClassRec,
X /* class_name */ "Option",
X /* widget_size */ sizeof(OptionRec),
X /* class_initialize */ NULL,
X /* class_part init */ NULL,
X /* class_inited */ FALSE,
X /* initialize */ Initialize,
X /* initialize_hook */ NULL,
X /* realize */ XtInheritRealize,
X /* actions */ NULL,
X /* num_actions */ 0,
X /* resources */ resourcelist,
X /* num_resources */ XtNumber(resourcelist),
X /* xrm_class */ NULLQUARK,
X /* compress_motion */ TRUE,
X /* compress_exposure */ TRUE,
X /* compress_enterleave*/ TRUE,
X /* visible_interest */ FALSE,
X /* destroy */ NULL,
X /* resize */ XtInheritResize,
X /* expose */ XtInheritExpose,
X /* set_values */ SetValues,
X /* set_values_hook */ NULL,
X /* set_values_almost */ XtInheritSetValuesAlmost,
X /* get_values_hook */ NULL,
X /* accept_focus */ NULL,
X /* version */ XtVersion,
X /* callback_private */ NULL,
X /* tm_table */ NULL,
X /* query_geometry */ NULL,
X /* display_accelerator*/ XtInheritDisplayAccelerator,
X /* extension */ NULL,
X
X },
X { /* composite_class fields */
X /* geometry_manager */ XtInheritGeometryManager,
X /* change_managed */ XtInheritChangeManaged,
X /* insert_child */ XtInheritInsertChild,
X /* delete_child */ XtInheritDeleteChild,
X /* extension */ NULL,
X },
X { /* constraint_class fields */
X /* subresourses */ NULL,
X /* subresource_count */ 0,
X /* constraint_size */ sizeof(OptionConstraintsRec),
X /* initialize */ ConstraintInitialize,
X /* destroy */ NULL,
X /* set_values */ NULL
X },
X { /* form_class fields */
X /* empty */ 0
X },
X { /* option_class fields */
X /* empty */ 0
X }
X};
X
XWidgetClass optionWidgetClass = (WidgetClass)&optionClassRec;
X
X/****************************************************************
X *
X * Private Procedures
X *
X ****************************************************************/
X
X/* ARGSUSED */
Xstatic void Initialize(request, new)
XWidget request, new;
X{
X OptionWidget dw = (OptionWidget)new;
X static Arg label_args[] = {
X {XtNlabel, (XtArgVal)NULL},
X {XtNborderWidth, (XtArgVal) 0}
X };
X
X label_args[0].value = (XtArgVal)dw->option.label;
X dw->option.labelW = XtCreateManagedWidget( "label",
X labelWidgetClass, new,
X label_args, XtNumber(label_args) );
X dw->option.select = 0;
X}
X
X
X/* ARGSUSED */
Xstatic void ConstraintInitialize(request, new)
XWidget request, new;
X{
X OptionWidget dw = (OptionWidget)new->core.parent;
X WidgetList children = dw->composite.children;
X OptionConstraints constraint = (OptionConstraints)new->core.constraints;
X Widget *childP;
X
X if (!XtIsSubclass(new, toggleWidgetClass)) /* if not a toggle */
X return; /* then just use defaults */
X
X constraint->form.left = constraint->form.right = XtChainLeft;
X constraint->form.vert_base = dw->option.labelW;
X
X if (dw->composite.num_children > 1) {
X for (childP = children + dw->composite.num_children - 1;
X childP >= children; childP-- ) {
X if (*childP == dw->option.labelW)
X break;
X if (XtIsManaged(*childP) &&
X XtIsSubclass(*childP, toggleWidgetClass)) {
X if (dw->option.orientation == XtorientHorizontal)
X constraint->form.horiz_base = *childP;
X else constraint->form.vert_base = *childP;
X break;
X }
X }
X }
X}
X
X/***************************
X*
X* Action Procedures
X*
X***************************/
X
Xstatic void DoOption(w, client_data, call_data)
XWidget w;
Xcaddr_t client_data, call_data;
X{
X ToggleWidget tw = (ToggleWidget)w;
X OptionWidget parent = (OptionWidget)tw->core.parent;
X XtState newstate = (XtState)call_data;
X Arg togglearg[1];
X Boolean found = 0;
X int i = 1;
X
X if (newstate == XtToggleOff) {
X /* the currently selected toggle button is selected */
X XtSetArg(togglearg[0], XtNstate, XtToggleOn);
X XtSetValues(w, togglearg, (Cardinal)1);
X return;
X }
X else {
X XtSetArg(togglearg[0], XtNstate, XtToggleOff);
X
X XtSetValues(parent->composite.children[parent->option.select],
X togglearg, (Cardinal)1);
X }
X
X while (!found && i < parent->composite.num_children)
X if ((Widget)parent->composite.children[i] == w) {
X found = 1;
X parent->option.select = i;
X break;
X }
X else i++;
X}
X
X/* ARGSUSED */
Xstatic Boolean SetValues(current, request, new)
XWidget current, request, new;
X{
X return False;
X}
X
Xvoid DoHorizontalOption(parent, left, upper)
XOptionWidget parent;
XWidget *left, *upper;
X{
X *left = (Widget) parent->option.label;
X
X if ( (parent->composite.num_children > 1) )
X *upper = (Widget)parent->
X composite.children[parent->composite.num_children - 1];
X else *upper = (Widget)NULL;
X}
X
Xvoid DoVerticalOption(parent, left, upper)
XOptionWidget parent;
XWidget *left, *upper;
X{
X *upper = (Widget)parent->
X composite.children[parent->composite.num_children - 1];
X
X *left = (Widget)NULL;
X}
X
Xvoid XtOptionAddOption(option, name, set)
XWidget option;
Xchar *name;
XBoolean set;
X{
X OptionWidget parent = (OptionWidget)option;
X Widget left, upper;
X Arg togglearg[1];
X static XtCallbackRec callbackList[] = { {NULL, NULL}, {NULL, NULL} };
X
X static Arg arglist[] = {
X {XtNfromHoriz, (XtArgVal) NULL},
X {XtNfromVert, (XtArgVal) NULL},
X {XtNstate, (XtArgVal) NULL},
X {XtNcallback,(XtArgVal)callbackList},
X {XtNleft, (XtArgVal) XtChainLeft},
X {XtNright, (XtArgVal) XtChainLeft},
X {XtNtop, (XtArgVal) XtChainTop},
X {XtNbottom, (XtArgVal) XtChainTop}
X };
X
X if (parent->option.orientation == XtorientHorizontal)
X DoHorizontalOption(parent, &left, &upper);
X else DoVerticalOption(parent, &left, &upper);
X
X arglist[0].value = (XtArgVal)left;
X arglist[1].value = (XtArgVal)upper;
X
X if (set && parent->option.select != 0) {
X arglist[2].value = (XtArgVal)XtToggleOn;
X /* reset existing toggle widget */
X XtSetArg(togglearg[0], XtNstate, XtToggleOff);
X XtSetValues(parent->composite.children[parent->option.select],
X togglearg, (Cardinal)1);
X parent->option.select = parent->composite.num_children;
X }
X else if (parent->option.select == 0) {
X arglist[2].value = (XtArgVal)XtToggleOn;
X parent->option.select = parent->composite.num_children;
X }
X else arglist[2].value = (XtArgVal)XtToggleOff;
X
X callbackList[0].callback = DoOption;
X
X XtCreateManagedWidget(name, toggleWidgetClass, option,
X arglist, XtNumber(arglist) );
X}
X
X
Xint XtOptionGetSelection(w)
XWidget w;
X{
X return ((OptionWidget)w)->option.select;
X}
X
Xvoid XtOptionSetSelection(w, index)
XWidget w;
Xint index;
X{
X Arg toggleargs[1];
X OptionWidget parent = (OptionWidget)w;
X
X XtSetArg(toggleargs[0], XtNstate, XtToggleOff);
X XtSetValues(parent->composite.children[parent->option.select],
X toggleargs, XtNumber(toggleargs));
X
X XtSetArg(toggleargs[0], XtNstate, XtToggleOn);
X XtSetValues(parent->composite.children[index],
X toggleargs, XtNumber(toggleargs));
X parent->option.select = index;
X}
END_OF_FILE
if test 8712 -ne `wc -c <'option.c'`; then
echo shar: \"'option.c'\" unpacked with wrong size!
fi
# end of 'option.c'
fi
if test -f 'popup.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'popup.c'\"
else
echo shar: Extracting \"'popup.c'\" \(10444 characters\)
sed "s/^X//" >'popup.c' <<'END_OF_FILE'
X/* Systems Sciences Laboratory, Webster Research Center */
X
Xstatic char *PROGRAM_information[] =
X{
X "Copyright (c) 1988 Xerox Corporation. All rights reserved.",
X "$Header$",
X "$Locker$"
X}
X;
X
X/*
X * Copyright protection claimed includes all forms and matters of copyrightable
X * material and information now allowed by statutory or judicial lay or
X * herinafter granted, including without limitation, material generated from
X * the software programs which are displayed on the screen such as icons,
X * screen display looks, etc.
X */
X
X#include "xfilebrowser.h"
X
XWidget confirmwidget = NULL;
Xstatic Widget confirmshell = NULL;
Xstatic Widget extpromptwidget = NULL; /* specifies the form widget
X in case a prompt with toggle was created */
Xstatic Widget extoutwidget;
Xstatic Widget extdiagwidget;
X
Xstatic Widget logshell = NULL;
Xstatic Widget loglabel;
Xstatic Widget logpane;
Xstatic Widget logbox;
Xstatic Widget logtext;
X
Xstatic short disp_prompt = 0;
X
Xcheck_confirm()
X{
X return disp_prompt;
X}
X
Xcheck_prompt()
X{
X return disp_prompt;
X}
X
X
X
X/* ARGSUSED */
Xchange_sensitive(w, value)
XWidget w;
XBoolean value;
X{
X XtSetSensitive(listbutton, value);
X XtSetSensitive(editbutton, value);
X XtSetSensitive(parentdirbutton, value);
X XtSetSensitive(renamebutton, value);
X XtSetSensitive(deletebutton, value);
X XtSetSensitive(shellbutton, value);
X XtSetSensitive(copybutton, value);
X XtSetSensitive(grepbutton, value);
X XtSetSensitive(grepeditbutton, value);
X}
X
X/* ARGSUSED */
Xconfirmyes(w, client_data, call_data)
XWidget w;
Xcaddr_t client_data, call_data;
X{
X DialogData *data = (DialogData *)client_data;
X
X destroyconfirm(data, (*data->yes));
X}
X
X/* ARGSUSED */
Xconfirmno(w, client_data, call_data)
XWidget w;
Xcaddr_t client_data, call_data;
X{
X DialogData *data = (DialogData *)client_data;
X
X destroyconfirm(data, (*data->no));
X}
X
X/* ARGSUSED */
Xconfirmcancel(w, client_data, call_data)
XWidget w;
Xcaddr_t client_data, call_data;
X{
X DialogData *data = (DialogData *)client_data;
X
X destroyconfirm(data, (*data->cancel));
X}
X
X/* ARGSUSED */
Xdestroyconfirm(data, func)
XDialogData *data;
Xint (*func)();
X{
X change_sensitive(data->w, TRUE);
X XtPopdown(confirmshell);
X disp_prompt = 0;
X
X extpromptwidget = NULL;
X XtDestroyWidget(confirmshell);
X confirmshell = NULL;
X /* I tried to reuse the previous popup shell for new
X dialog widgets; but after the first use the dialog buttons
X of my dialog widget were never displayed; it displayed
X only the label of the dialog box */
X
X func(data);
X}
X
Xint move_popup(w, caller)
XWidget w, caller;
X{
X Dimension widthw, heightw;
X Position callerx, callery;
X int wx, wy;
X Window parentcaller, child;
X Screen *screen;
X
X getsize(w, &widthw, &heightw);
X getpos(caller, &callerx, &callery);
X parentcaller = XtWindow(XtParent(caller));
X screen = XtScreen(caller);
X if (XTranslateCoordinates(curdisplay, parentcaller, screen->root,
X (int)callerx, (int)callery, &wx, &wy, &child) == BadWindow)
X return(-1);
X wx += 5; wy += 5;
X
X if ( (wx + widthw) >= screen->width)
X wx = screen->width - widthw - 10;
X if ( (wy + heightw) >= screen->height)
X wy = screen->height - heightw - 10;
X
X XtMoveWidget(w, (Position)wx, (Position)wy);
X return(0);
X}
X
X/* ARGSUSED */
Xint position_dialog(dialog, caller)
XWidget dialog, caller;
X{
X XtSetMappedWhenManaged(dialog, FALSE);
X XtRealizeWidget(dialog);
X
X move_popup(dialog, caller);
X
X change_sensitive(caller, FALSE);
X XtMapWidget(dialog);
X return(0);
X}
X
X/* ARGSUSED */
Xint create_confirm(data, str)
XDialogData *data;
Xchar *str;
X{
X Arg args[1];
X Arg popargs[1];
X
X if (disp_prompt) return(-1);
X
X disp_prompt = 1;
X XtSetArg( popargs[0], XtNborderWidth, 2 );
X
X
X confirmshell = XtCreatePopupShell("popupshell",
X overrideShellWidgetClass,
X toplevel, popargs, XtNumber(popargs));
X
X XtSetArg( args[0], XtNlabel, str );
X
X confirmwidget = XtCreateManagedWidget("confirm", dialogWidgetClass,
X confirmshell, args, XtNumber(args) );
X XtDialogAddButton(confirmwidget, "yes", confirmyes, (caddr_t)data);
X XtDialogAddButton(confirmwidget, "no", confirmno, (caddr_t)data);
X XtDialogAddButton(confirmwidget, "cancel", confirmcancel, (caddr_t)data);
X
X if (position_dialog(confirmshell, data->w) == -1) {
X XtDestroyWidget(confirmshell);
X confirmwidget = NULL;
X confirmshell = NULL;
X }
X XtPopup(confirmshell, XtGrabNonexclusive);
X return(0);
X}
X
X
X/* ARGSUSED */
Xpromptok(w, client_data, call_data)
XWidget w;
Xcaddr_t client_data, call_data;
X{
X DialogData *data = (DialogData *)client_data;
X Arg togargs[1];
X XtState extstate;
X
X data->answer = XtDialogGetValueString(confirmwidget);
X if (extpromptwidget != NULL) {
X XtSetArg(togargs[0], XtNstate, (XtArgVal)&extstate);
X XtGetValues(extdiagwidget, togargs, (Cardinal)1);
X data->diag = (Boolean)extstate;
X
X XtSetArg(togargs[0], XtNstate, (XtArgVal)&extstate);
X XtGetValues(extoutwidget, togargs, (Cardinal)1);
X data->out = (Boolean)extstate;
X }
X else data->diag = data->out = FALSE;
X
X destroyconfirm(data, (*data->yes));
X}
X
X/* ARGSUSED */
Xpromptcancel(w, client_data, call_data)
XWidget w;
Xcaddr_t client_data, call_data;
X{
X DialogData *data = (DialogData *)client_data;
X
X destroyconfirm(data, (*data->cancel));
X}
X
X/* ARGSUSED */
Xint create_prompt(data, str, defvalue)
XDialogData *data;
Xchar *str, *defvalue;
X{
X Arg args[2];
X Arg popargs[1];
X
X if (disp_prompt) return(-1);
X disp_prompt = 1;
X
X XtSetArg( popargs[0], XtNborderWidth, 2 );
X
X/* confirmshell = XtCreatePopupShell("promptshell",
X transientShellWidgetClass,
X toplevel, popargs, XtNumber(popargs));*/
Xconfirmshell = XtCreatePopupShell("promptshell",
X topLevelShellWidgetClass,
X toplevel, popargs, XtNumber(popargs));
X
X XtSetArg( args[0], XtNlabel, str );
X XtSetArg( args[1], XtNvalue, defvalue );
X
X confirmwidget = XtCreateManagedWidget("confirm", dialogWidgetClass,
X confirmshell, args, XtNumber(args) );
X XtDialogAddButton(confirmwidget, "ok", promptok, (caddr_t)data);
X XtDialogAddButton(confirmwidget, "cancel", promptcancel, (caddr_t)data);
X
X if (position_dialog(confirmshell, data->w) == -1) {
X XtDestroyWidget(confirmshell);
X confirmwidget = NULL;
X confirmshell = NULL;
X }
X XtPopup(confirmshell, XtGrabNonexclusive);
X return(0);
X}
X
X/* ARGSUSED */
X/* creates a prompt window which contains a dialog widget as well as two
X * toggle widgets defining if the output/diagnostics should be returned
X */
Xint create_toggleprompt(data, str, defvalue)
XDialogData *data;
Xchar *str, *defvalue;
X{
X Arg args[3];
X Arg popargs[1];
X Arg toggleargs[6];
X
X if (disp_prompt) return(-1);
X disp_prompt = 1;
X
X XtSetArg( popargs[0], XtNborderWidth, 2 );
X
X/* confirmshell = XtCreatePopupShell("toggleshell",
X transientShellWidgetClass,
X toplevel, popargs, XtNumber(popargs));*/
Xconfirmshell = XtCreatePopupShell("toggleshell",
X topLevelShellWidgetClass,
X toplevel, popargs, XtNumber(popargs));
X extpromptwidget = XtCreateManagedWidget("form", formWidgetClass,
X confirmshell, NULL, 0);
X
X XtSetArg( args[0], XtNlabel, str );
X XtSetArg( args[1], XtNvalue, defvalue );
X XtSetArg( args[2], XtNborderWidth, 0 );
X
X confirmwidget = XtCreateManagedWidget("confirm", dialogWidgetClass,
X extpromptwidget, args, XtNumber(args) );
X XtDialogAddButton(confirmwidget, "ok", promptok, (caddr_t)data);
X XtDialogAddButton(confirmwidget, "cancel", promptcancel, (caddr_t)data);
X
X /* create the two toggle buttons "Return Diagnostic"
X * and "Return Output" */
X XtSetArg( toggleargs[0], XtNfromVert, (XtArgVal)confirmwidget );
X XtSetArg( toggleargs[1], XtNfromHoriz, (XtArgVal)NULL);
X XtSetArg( toggleargs[2], XtNleft, (XtArgVal)XtChainLeft);
X XtSetArg( toggleargs[3], XtNright, (XtArgVal)XtChainLeft);
X XtSetArg( toggleargs[4], XtNstate, (XtArgVal)XtToggleOff );
X extoutwidget = XtCreateManagedWidget( "Return Output",
X toggleWidgetClass, extpromptwidget, toggleargs,
X XtNumber(toggleargs) - 1 );
X
X XtSetArg( toggleargs[0], XtNfromVert, (XtArgVal)confirmwidget );
X XtSetArg( toggleargs[1], XtNfromHoriz, (XtArgVal)extoutwidget );
X XtSetArg( toggleargs[2], XtNleft, (XtArgVal)XtChainLeft);
X XtSetArg( toggleargs[3], XtNright, (XtArgVal)XtChainLeft);
X XtSetArg( toggleargs[4], XtNstate, (XtArgVal)XtToggleOn);
X XtSetArg( toggleargs[5], XtNhorizDistance, (XtArgVal)20);
X extdiagwidget = XtCreateManagedWidget( "Return Diagnostic",
X toggleWidgetClass, extpromptwidget, toggleargs,
X XtNumber(toggleargs) );
X
X if (position_dialog(confirmshell, data->w) == -1) {
X XtDestroyWidget(confirmshell);
X confirmshell = NULL;
X extpromptwidget = NULL;
X }
X XtPopup(confirmshell, XtGrabNonexclusive);
X return(0);
X}
X
X
X/* ARGSUSED */
Xlogquit()
X{
X XtPopdown(logshell);
X XtSetSensitive(outer, TRUE);
X return;
X}
X
Xcreate_log()
X{
X Arg popargs[1];
X
X static Arg textargs[] = {
X { XtNfile, (XtArgVal)"/dev/null"},
X { XtNeditType, (XtArgVal)XttextRead },
X { XtNtextOptions, (XtArgVal)(wordBreak | scrollVertical) },
X };
X
X static Arg labelargs[] = {
X { XtNjustify, (XtArgVal)XtJustifyCenter },
X { XtNlabel, NULL },
X };
X
X
X if (logshell != NULL) return;
X XtSetArg( popargs[0], XtNborderWidth, 2 );
X
X/* logshell = XtCreatePopupShell("logshell",
X transientShellWidgetClass,
X toplevel, popargs, XtNumber(popargs));*/
Xlogshell = XtCreatePopupShell("logshell",
X topLevelShellWidgetClass,
X toplevel, popargs, XtNumber(popargs));
X
X logpane = XtCreateManagedWidget("pane", vPanedWidgetClass,
X logshell, (ArgList)NULL, 0);
X logbox = XtCreateManagedWidget("box", boxWidgetClass,
X logpane, (ArgList)NULL,0);
X makeCommandButton(logbox, "Quit", logquit);
X loglabel = XtCreateManagedWidget("labelWindow",labelWidgetClass,
X logpane, labelargs, XtNumber(labelargs));
X logtext = XtCreateManagedWidget("data", asciiDiskWidgetClass,
X logpane, textargs, XtNumber(textargs));
X
X}
X
X/* ARGSUSED */
Xlog_popup(label, file)
Xchar *label, *file;
X{
X XtTextSource old, new;
X
X static Arg textargs[] = {
X { XtNfile, NULL},
X { XtNeditType, (XtArgVal)XttextRead },
X { XtNtextOptions, (XtArgVal)(wordBreak | scrollVertical) },
X };
X
X static Arg labelargs[] = {
X { XtNjustify, (XtArgVal)XtJustifyCenter },
X { XtNlabel, NULL },
X };
X
X textargs[0].value = (XtArgVal)file;
X labelargs[1].value = (XtArgVal)label;
X
X
X if (logshell == NULL) create_log();
X old = XtTextGetSource(logtext);
X new = XtDiskSourceCreate(logtext, textargs, XtNumber(textargs));
X XtTextSetSource(logtext, new, 0);
X XtDiskSourceDestroy(old);
X XtSetValues(loglabel, labelargs, XtNumber(labelargs));
X
X XtSetSensitive(outer, FALSE);
X XtPopup(logshell, XtGrabExclusive);
X return(0);
X}
X
END_OF_FILE
if test 10444 -ne `wc -c <'popup.c'`; then
echo shar: \"'popup.c'\" unpacked with wrong size!
fi
# end of 'popup.c'
fi
if test -f 'scandir.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'scandir.c'\"
else
echo shar: Extracting \"'scandir.c'\" \(11063 characters\)
sed "s/^X//" >'scandir.c' <<'END_OF_FILE'
X/* Systems Sciences Laboratory, Webster Research Center */
X
Xstatic char *PROGRAM_information[] =
X{
X "Copyright (c) 1988 Xerox Corporation. All rights reserved.",
X "$Header$",
X "$Locker$"
X}
X;
X
X/*
X * Copyright protection claimed includes all forms and matters of copyrightable
X * material and information now allowed by statutory or judicial lay or
X * herinafter granted, including without limitation, material generated from
X * the software programs which are displayed on the screen such as icons,
X * screen display looks, etc.
X */
X
X#include "xfilebrowser.h"
X
X
X/**************************
X* local data structures *
X**************************/
Xextern int getfiles();
Xextern int my_alphasort();
Xextern int filesizesort();
Xextern int datesort();
X
Xstatic Widget listshell = NULL;
Xstatic Widget sortoption; /* option for sorting files */
Xstatic Widget owneroption; /* print owner or group */
Xstatic Widget dottoggle; /* should dot file be printed */
X
Xstatic Widget optioncaller;
X
Xstatic int currentsort = 1;
Xstatic int currentdotfiles = 0; /* don't print dot files */
Xint currentid = 1; /* 1 = print owner name; 2 = print group name */
X
Xstatic short direction = 1;
X
Xstatic short disp_option = 0;
Xtypedef int (*intfunc)();
X
Xstatic intfunc sortfunc[] = {
X my_alphasort, filesizesort, datesort };
X
X
Xcheck_option()
X{
X return disp_option;
X}
X
XXtState GetToggle(w)
XWidget w;
X{
X XtState toggle;
X Arg arglist[1];
X
X XtSetArg(arglist[0], XtNstate, &toggle);
X XtGetValues(w, arglist, (Cardinal)1);
X return(toggle);
X}
X
Xvoid SetToggle(w, value)
XWidget w;
XXtState value;
X{
X Arg arglist[1];
X
X XtSetArg(arglist[0], XtNstate, value);
X XtSetValues(w, arglist, (Cardinal)1);
X}
X
Xvoid DoApply()
X{
X currentsort = XtOptionGetSelection(sortoption);
X currentid = XtOptionGetSelection(owneroption);
X reset_ownercache();
X
X if (GetToggle(dottoggle) == XtToggleOn) currentdotfiles = 1;
X else currentdotfiles = 0;
X
X disp_option = 0;
X change_sensitive(optioncaller, TRUE);
X XtPopdown(listshell);
X}
X
Xvoid DoCancel()
X{
X XtState toggle;
X
X /* reset the option dialog window */
X if ( !(currentsort == XtOptionGetSelection(sortoption)) )
X /* sorting was modified by user */
X XtOptionSetSelection(sortoption, currentsort);
X
X if ( !(currentid == XtOptionGetSelection(owneroption)) )
X /* printing owner/group was modified by user */
X XtOptionSetSelection(owneroption, currentid);
X
X /* reset toggle switch for dot files */
X toggle = GetToggle(dottoggle);
X if (toggle == XtToggleOn && currentdotfiles == 0)
X SetToggle(dottoggle, XtToggleOff);
X else if (toggle == XtToggleOff && currentdotfiles == 1)
X SetToggle(dottoggle, XtToggleOn);
X
X disp_option = 0;
X change_sensitive(optioncaller, TRUE);
X XtPopdown(listshell);
X}
X
X
Xbuild_listoptions()
X{
X Arg popargs[1];
X Widget listpane, listrow1, listrow2, optform;
X
X static Arg paneargs[] = {
X { XtNallowResize, (XtArgVal)True },
X };
X static Arg optformlist[] = {
X {XtNborderWidth, (XtArgVal)0 }
X };
X
X static Arg optionargs[] = {
X { XtNlabel, (XtArgVal)NULL },
X { XtNorientation,(XtArgVal)XtorientVertical },
X { XtNfromHoriz, (XtArgVal) NULL },
X { XtNfromVert, (XtArgVal) NULL },
X { XtNleft, (XtArgVal) XtChainLeft },
X { XtNright, (XtArgVal) XtChainLeft },
X { XtNtop, (XtArgVal) XtChainTop },
X { XtNbottom, (XtArgVal) XtChainTop }
X
X };
X static XtCallbackRec callbackList[] = { {NULL, NULL}, {NULL, NULL} };
X static Arg toggleargs[] = {
X { XtNlabel, (XtArgVal)NULL },
X { XtNstate,(XtArgVal)XtToggleOff },
X { XtNfromHoriz, (XtArgVal) NULL },
X { XtNfromVert, (XtArgVal) NULL },
X { XtNleft, (XtArgVal) XtChainLeft },
X { XtNright, (XtArgVal) XtChainLeft },
X { XtNtop, (XtArgVal) XtChainTop },
X { XtNbottom, (XtArgVal) XtChainTop }
X
X };
X
X XtSetArg( popargs[0], XtNborderWidth, 2 );
X
X listshell = XtCreatePopupShell("listshell",
X overrideShellWidgetClass,
X toplevel, popargs, XtNumber(popargs));
X
X listpane = XtCreateManagedWidget( "listpaned", vPanedWidgetClass,
X listshell, paneargs , XtNumber(paneargs) );
X listrow1 = XtCreateManagedWidget("listrow1", boxWidgetClass,
X listpane, NULL,0);
X listrow2 = XtCreateManagedWidget("listrow2", boxWidgetClass,
X listpane, NULL,0);
X makeCommandButton(listrow1, "Apply", DoApply);
X makeCommandButton(listrow1, "Cancel", DoCancel);
X
X optform = XtCreateManagedWidget("sorting",formWidgetClass,
X listrow2, optformlist, XtNumber(optformlist));
X
X /* define option menu for sorting files */
X optionargs[0].value = (XtArgVal)"Select Sorting Option:";
X sortoption = XtCreateManagedWidget("sorting", optionWidgetClass,
X optform, optionargs, XtNumber(optionargs));
X XtOptionAddOption(sortoption, "File Name", TRUE);
X XtOptionAddOption(sortoption, "File Size", FALSE);
X XtOptionAddOption(sortoption, "Date", FALSE);
X
X /* define option menu for printing owner/group */
X optionargs[0].value = (XtArgVal)"Print Owner/Group Name:";
X optionargs[2].value = (XtArgVal)sortoption;
X owneroption = XtCreateManagedWidget("owner", optionWidgetClass,
X optform, optionargs, XtNumber(optionargs));
X XtOptionAddOption(owneroption, "Owner Name", TRUE);
X XtOptionAddOption(owneroption, "Group name", FALSE);
X
X /* define toggle for printing . files */
X toggleargs[0].value = (XtArgVal)"Print Dot Files";
X toggleargs[3].value = (XtArgVal)sortoption;
X dottoggle = XtCreateManagedWidget("owner", toggleWidgetClass,
X optform, toggleargs, XtNumber(toggleargs));
X
X XtSetMappedWhenManaged(listshell, FALSE);
X XtRealizeWidget(listshell);
X}
X
Xdisplay_listoptions(caller)
XWidget caller;
X{
X if (listshell == NULL) {
X build_listoptions();
X optioncaller = caller;
X }
X
X disp_option = 1;
X move_popup(listshell, caller);
X change_sensitive(caller, FALSE);
X XtMapWidget(listshell);
X XtPopup(listshell, XtGrabNonexclusive);
X}
X
X/*********************************
X* routines for scanning the directory *
X***********************************/
X
Xfree_direct(dfiles, numdfiles)
Xstruct afile ***dfiles;
Xint *numdfiles;
X{
X register int i;
X register struct afile **listfiles = *dfiles;
X
X if (listfiles != (struct afile **)NULL) {
X for (i = 0; i < *numdfiles; i++) free(listfiles[i]);
X *numdfiles = 0;
X free(listfiles);
X *dfiles = (struct afile **)NULL;
X }
X}
X
X
X/* ARGSUSED */
Xint prepare_list(dirname, dir, dfiles, numdfiles, nameprepend)
Xchar * dirname;
Xshort dir;
Xstruct afile ***dfiles;
Xint *numdfiles;
Xchar *nameprepend;
X{
X if (dir != 0) direction = dir;
X if ( (*numdfiles = my_scandir(dirname, dfiles, getfiles,
X sortfunc[currentsort-1], nameprepend) ) < 0) {
X disp_message("\nList: current directory?");
X return (-1);
X }
X return(0);
X}
X
X/* ARGSUSED */
Xgetfiles(dp)
Xregister struct direct *dp;
X{
X if (!currentdotfiles && (dp->d_name)[0] == '.') return 0;
X if (! strcmp(dp->d_name, ".") || ! strcmp(dp->d_name, "..")) return 0;
X if (re_exec(dp->d_name)) return 1;
X else return 0;
X}
X
X/* ARGSUSED */
Xmy_scandir(dirname, namelist, select, dcomp, nameprepend)
Xchar *dirname;
Xstruct afile *(*namelist[]);
Xint (*select)(), (*dcomp)();
Xchar *nameprepend;
X{
X register struct direct *d;
X register struct afile *p, **names;
X register int j;
X int nitems, cc;
X register char *cp1, *cp2;
X struct stat stb;
X struct stat fbuf;
X u_short elemlength;
X long arraysz;
X DIR *dirp;
X char path[MAXNAME + 1];
X int prelength = (nameprepend == NULL) ? 0 : (strlen(nameprepend)+1);
X
X if ((dirp = opendir(dirname)) == NULL)
X return(-1);
X if (fstat(dirp->dd_fd, &stb) < 0)
X return(-1);
X
X /*
X * estimate the array size by taking the size of the directory file
X * and dividing it by a multiple of the minimum size entry.
X */
X arraysz = (stb.st_size / 24);
X names = (struct afile **)XtMalloc(arraysz * sizeof(struct afile *));
X
X nitems = 0;
X while ((d = readdir(dirp)) != NULL) {
X if (select != NULL && !(*select)(d))
X continue; /* just selected names */
X /*
X * Make a minimum size copy of the data
X */
X elemlength = MYDIRSIZ(d, prelength);
X p = (struct afile *)XtMalloc(elemlength);
X p->d_marked = 0;
X p->d_ino = d->d_ino;
X p->d_reclen = elemlength;
X p->d_namlen = d->d_namlen + prelength;
X sprintf(path, "%s/%s", dirname, d->d_name);
X
X if (nameprepend != (char *)NULL) {
X for (cp1 = p->d_name, cp2 = nameprepend;
X *cp1++ = *cp2++; );
X *(cp1 - 1) = '/';
X for (cp2 = d->d_name; *cp1++ = *cp2++; );
X if (stat(path, &fbuf) ) return(-1);
X /* no stats file is found */
X }
X else {
X for (cp1 = p->d_name, cp2 = d->d_name; *cp1++ = *cp2++; );
X
X if (lstat(path, &fbuf) ) {
X disp_message("\nList: stats file for %s", d->d_name);
X return(-1);
X }
X }
X
X p->d_size = fbuf.st_size;
X p->d_nlink = fbuf.st_nlink;
X
X switch(fbuf.st_mode & S_IFMT) {
X case S_IFDIR: p->d_type = 'd'; break;
X case S_IFBLK: p->d_type = 'b'; p->d_size = fbuf.st_rdev; break;
X case S_IFCHR: p->d_type = 'c'; p->d_size = fbuf.st_rdev; break;
X case S_IFSOCK: p->d_type = 's'; p->d_size = 0; break;
X case S_IFLNK: p->d_type = 'l'; break;
X default: p->d_type = '-'; break;
X }
X
X j = 0;
X if (fbuf.st_mode & 0400)
X p->d_access[j++] = 'r'; else p->d_access[j++] = '-';
X if (fbuf.st_mode & 0200)
X p->d_access[j++] = 'w'; else p->d_access[j++] = '-';
X if (fbuf.st_mode & 0100)
X p->d_access[j++] = 'x'; else p->d_access[j++] = '-';
X if (fbuf.st_mode & 0040)
X p->d_access[j++] = 'r'; else p->d_access[j++] = '-';
X if (fbuf.st_mode & 0020)
X p->d_access[j++] = 'w'; else p->d_access[j++] = '-';
X if (fbuf.st_mode & 0010)
X p->d_access[j++] = 'x'; else p->d_access[j++] = '-';
X if (fbuf.st_mode & 0004)
X p->d_access[j++] = 'r'; else p->d_access[j++] = '-';
X if (fbuf.st_mode & 0002)
X p->d_access[j++] = 'w'; else p->d_access[j++] = '-';
X if (fbuf.st_mode & 0001)
X p->d_access[j++] = 'x'; else p->d_access[j++] = '-';
X p->d_access[j] = '\0';
X
X p->d_ctime = fbuf.st_ctime;
X p->d_uid = fbuf.st_uid;
X p->d_gid = fbuf.st_gid;
X
X /*
X * Check to make sure the array has space left and
X * realloc the maximum size.
X */
X if (++nitems >= arraysz) {
X if (fstat(dirp->dd_fd, &stb) < 0)
X return(-1); /* just might have grown */
X arraysz = stb.st_size / 12;
X names = (struct afile **)XtRealloc((char *)names,
X arraysz * sizeof(struct afile *));
X }
X names[nitems-1] = p;
X }
X closedir(dirp);
X if (nitems && dcomp != NULL)
X qsort(names, nitems, sizeof(struct afile *), dcomp);
X *namelist = names;
X return(nitems);
X}
X
X/*
X * Alphabetic order comparison routine
X */
X/* ARGSUSED */
Xint my_alphasort(d1, d2)
X struct afile **d1, **d2;
X{
X return(direction * strcmp((*d1)->d_name, (*d2)->d_name));
X}
X
X/*
X * file size order comparison routine
X */
X/* ARGSUSED */
Xint filesizesort(d1, d2)
X struct afile **d1, **d2;
X{
X int i;
X
X if ( (*d1)->d_size < (*d2)->d_size ) i = (int)direction * (-1);
X else if ( (*d1)->d_size > (*d2)->d_size ) i = (int)direction;
X else i = 0;
X return(i);
X}
X
X/*
X * file date order comparison routine
X */
X/* ARGSUSED */
Xint datesort(d1, d2)
X struct afile **d1, **d2;
X{
X int i;
X
X if ( (*d1)->d_ctime < (*d2)->d_ctime ) i = (int)direction * (-1);
X else if ( (*d1)->d_ctime > (*d2)->d_ctime ) i = (int)direction;
X else i = 0;
X return(i);
X}
END_OF_FILE
if test 11063 -ne `wc -c <'scandir.c'`; then
echo shar: \"'scandir.c'\" unpacked with wrong size!
fi
# end of 'scandir.c'
fi
if test -f 'toggle.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'toggle.c'\"
else
echo shar: Extracting \"'toggle.c'\" \(8583 characters\)
sed "s/^X//" >'toggle.c' <<'END_OF_FILE'
X/* Systems Sciences Laboratory, Webster Research Center */
X
Xstatic char *PROGRAM_information[] =
X{
X "Copyright (c) 1988 Xerox Corporation. All rights reserved.",
X "$Header$",
X "$Locker$"
X}
X;
X
X/*
X * Copyright protection claimed includes all forms and matters of copyrightable
X * material and information now allowed by statutory or judicial lay or
X * herinafter granted, including without limitation, material generated from
X * the software programs which are displayed on the screen such as icons,
X * screen display looks, etc.
X */
X
X
X/*
X * toggle.c - Toggle widget
X *
X */
X
X
X#include <stdio.h>
X#include <X11/Xos.h>
X#include <ctype.h>
X#include <X11/StringDefs.h>
X#include <X11/IntrinsicP.h>
X#include <X11/XawMisc.h>
X#include "toggleP.h"
X
X/* Private Data */
X
Xextern void Initialize();
Xextern Boolean SetValues();
Xextern void Toggle();
Xextern void Unhighlight();
Xextern void Highlight();
Xextern void Notify();
Xextern void ClassInitialize();
X
X
Xstatic char toggleTranslations[] =
X "<Btn1Up>: toggle() notify()\n\
X <EnterWindow>: highlight() \n\
X <LeaveWindow>: unhighlight()";
X
X
X#define offset(field) XtOffset(ToggleWidget, field)
Xstatic Dimension defwidth = 0;
Xstatic XtState defState = XtToggleOff;
X
Xstatic XtResource resources[] = {
X {XtNcursor, XtCCursor, XtRCursor, sizeof(Cursor),
X offset(simple.cursor), XtRString, "hand2"},
X {XtNborderWidth, XtCBorderWidth, XtRDimension, sizeof(Dimension),
X offset(core.border_width), XtRDimension, (caddr_t)&defwidth},
X {XtNstate, XtCState, XtRState, sizeof(XtState),
X offset(toggle.state), XtRState, (caddr_t)&defState},
X};
X#undef offset
X
Xstatic XtActionsRec toggleactionsList[] =
X{
X {"toggle", Toggle},
X {"notify", Notify},
X {"highlight", Highlight},
X {"unhighlight", Unhighlight},
X};
X
X /* ...ClassData must be initialized at compile time. Must
X initialize all substructures. (Actually, last two here
X need not be initialized since not used.)
X */
XToggleClassRec toggleClassRec = {
X {
X (WidgetClass) &commandClassRec, /* superclass */
X "Toggle", /* class_name */
X sizeof(ToggleRec), /* size */
X ClassInitialize, /* class_initialize */
X NULL, /* class_part_initialize */
X FALSE, /* class_inited */
X Initialize, /* initialize */
X NULL, /* initialize_hook */
X XtInheritRealize, /* realize */
X toggleactionsList, /* actions */
X XtNumber(toggleactionsList), /* num_actions */
X resources, /* resources */
X XtNumber(resources), /* resource_count */
X NULLQUARK, /* xrm_class */
X FALSE, /* compress_motion */
X TRUE, /* compress_exposure */
X TRUE, /* compress_enterleave */
X FALSE, /* visible_interest */
X NULL, /* destroy */
X XtInheritResize, /* resize */
X XtInheritExpose, /* expose */
X SetValues, /* set_values */
X NULL, /* set_values_hook */
X XtInheritSetValuesAlmost, /* set_values_almost */
X NULL, /* get_values_hook */
X NULL, /* accept_focus */
X XtVersion, /* version */
X NULL, /* callback_private */
X toggleTranslations, /* tm_table */
X NULL, /* query_geometry */
X XtInheritDisplayAccelerator, /* display_accelerator */
X NULL, /* extension */
X }, /* CoreClass fields initialization */
X {
X 0, /* field not used */
X }, /* LabelClass fields initialization */
X {
X 0, /* field not used */
X }, /* CommandClass fields initialization */
X {
X 0, /* field not used */
X }, /* ToggleClass fields initialization */
X};
X
X /* for public consumption */
XWidgetClass toggleWidgetClass = (WidgetClass) &toggleClassRec;
X
X/****************************************************************
X *
X * Private Procedures
X *
X ****************************************************************/
X
Xstatic void CvtStringToState();
X
Xstatic XrmQuark XrmQEtoggleon;
Xstatic XrmQuark XrmQEtoggleoff;
X
Xstatic void ClassInitialize()
X{
X
X XrmQEtoggleon = XrmStringToQuark("toggleon");
X XrmQEtoggleoff = XrmStringToQuark("toggleoff");
X
X XtAddConverter( XtRString, XtRState, CvtStringToState, NULL, 0 );
X} /* ClassInitialize */
X
X/* ARGSUSED */
Xstatic void CvtStringToState(args, num_args, fromVal, toVal)
XXrmValuePtr *args; /* unused */
XCardinal *num_args; /* unused */
XXrmValuePtr fromVal;
XXrmValuePtr toVal;
X{
X static XtState e;
X XrmQuark q;
X char *s = (char *) fromVal->addr;
X char lowerName[1000];
X int i;
X
X if (s == NULL) return;
X
X for (i=0; i<=strlen(s); i++) {
X char c = s[i];
X lowerName[i] = isupper(c) ? (char) tolower(c) : c;
X }
X
X q = XrmStringToQuark(lowerName);
X
X toVal->size = sizeof(XtState);
X toVal->addr = (caddr_t) &e;
X
X if (q == XrmQEtoggleon) { e = XtToggleOn; return; }
X if (q == XrmQEtoggleoff) { e = XtToggleOff; return; }
X
X toVal->size = 0;
X toVal->addr = NULL;
X};
X
X/* ARGSUSED */
Xstatic void Initialize(request, new)
XWidget request, new;
X{
X ToggleWidget tw = (ToggleWidget)new;
X
X tw->command.set = (int)tw->toggle.state;
X if (tw->toggle.state == XtToggleOn)
X tw->label.normal_GC = tw->command.inverse_GC;
X}
X
Xstatic Region HighlightRegion(cbw)
X ToggleWidget cbw;
X{
X static Region outerRegion = NULL, innerRegion, emptyRegion;
X XRectangle rect;
X
X if (outerRegion == NULL) {
X /* save time by allocating scratch regions only once. */
X outerRegion = XCreateRegion();
X innerRegion = XCreateRegion();
X emptyRegion = XCreateRegion();
X }
X
X rect.x = rect.y = 0;
X rect.width = cbw->core.width;
X rect.height = cbw->core.height;
X XUnionRectWithRegion( &rect, emptyRegion, outerRegion );
X rect.x = rect.y = cbw->command.highlight_thickness;
X rect.width -= cbw->command.highlight_thickness * 2;
X rect.height -= cbw->command.highlight_thickness * 2;
X XUnionRectWithRegion( &rect, emptyRegion, innerRegion );
X XSubtractRegion( outerRegion, innerRegion, outerRegion );
X return outerRegion;
X}
X/***************************
X*
X* Action Procedures
X*
X***************************/
X
X/* ARGSUSED */
Xstatic void Toggle(w,event,params,num_params)
X Widget w;
X XEvent *event;
X String *params; /* unused */
X Cardinal *num_params; /* unused */
X{
X ToggleWidget tw = (ToggleWidget)w;
X
X if (tw->toggle.state == XtToggleOn) {
X tw->toggle.state = XtToggleOff;
X tw->command.set = FALSE;
X tw->label.normal_GC = tw->command.normal_GC;
X tw->command.highlighted = TRUE;
X }
X else {
X tw->toggle.state = XtToggleOn;
X tw->command.set = TRUE;
X tw->label.normal_GC = tw->command.inverse_GC;
X }
XXClearArea(XtDisplay(w), XtWindow(w), 0, 0, 0, 0, TRUE);
X/* (tw->core.widget_class->core_class.expose)(w, event, NULL);*/
X}
X
X/* ARGSUSED */
Xstatic void Notify(w,event,params,num_params)
XWidget w;
XXEvent *event;
XString *params; /* unused */
XCardinal *num_params; /* unused */
X{
X ToggleWidget tw = (ToggleWidget)w;
X if (tw->command.callbacks != NULL)
X XtCallCallbacks(w, XtNcallback, tw->toggle.state);
X (tw->core.widget_class->core_class.expose)(w, event, NULL);
X}
X
X/* ARGSUSED */
Xstatic void Highlight(w,event,params,num_params)
XWidget w;
XXEvent *event;
XString *params; /* unused */
XCardinal *num_params; /* unused */
X{
X ToggleWidget tw = (ToggleWidget)w;
X
X if (tw->command.set == FALSE) {
X tw->command.highlighted = TRUE;
X (tw->core.widget_class->core_class.expose)(w, event,
X HighlightRegion(tw));
X }
X}
X
X/* ARGSUSED */
Xstatic void Unhighlight(w,event,params,num_params)
XWidget w;
XXEvent *event;
XString *params; /* unused */
XCardinal *num_params; /* unused */
X{
X ToggleWidget tw = (ToggleWidget)w;
X
X tw->command.highlighted = FALSE;
X if (tw->command.set == FALSE) {
X (tw->core.widget_class->core_class.expose)(w, event,
X HighlightRegion(tw));
X }
X}
X
X
X/*
X * Set specified arguments into widget
X */
X/* ARGSUSED */
Xstatic Boolean SetValues (current, request, new)
XWidget current, request, new;
X{
X ToggleWidget tw = (ToggleWidget)current;
X ToggleWidget tnew = (ToggleWidget)new;
X
X if (tnew->toggle.state != tw->toggle.state) {
X /* the resource XtNstate is modified */
X tnew->command.set = !(tw->command.set);
X }
X else if (tnew->core.sensitive != tw->core.sensitive
X && tnew->core.sensitive) {
X /* the resource XtNsensitive is modified */
X tnew->command.set = (Boolean)tw->toggle.state;
X }
X else return FALSE;
X
X if (tnew->toggle.state == XtToggleOn)
X tnew->label.normal_GC = tnew->command.inverse_GC;
X else
X tnew->label.normal_GC = tnew->command.normal_GC;
X
X return TRUE;
X}
END_OF_FILE
if test 8583 -ne `wc -c <'toggle.c'`; then
echo shar: \"'toggle.c'\" unpacked with wrong size!
fi
# end of 'toggle.c'
fi
if test -f 'xfilebrowser.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'xfilebrowser.c'\"
else
echo shar: Extracting \"'xfilebrowser.c'\" \(8220 characters\)
sed "s/^X//" >'xfilebrowser.c' <<'END_OF_FILE'
X/* Systems Sciences Laboratory, Webster Research Center */
X
Xstatic char *PROGRAM_information[] =
X{
X "Copyright (c) 1988 Xerox Corporation. All rights reserved.",
X "$Header$",
X "$Locker$"
X}
X;
X
X/*
X * Copyright protection claimed includes all forms and matters of copyrightable
X * material and information now allowed by statutory or judicial lay or
X * herinafter granted, including without limitation, material generated from
X * the software programs which are displayed on the screen such as icons,
X * screen display looks, etc.
X */
X
X#include "xfilebrowser.h"
X#include "xbrowser.icon"
X
X
Xchar *filepattern;
Xchar *searchpattern;
Xchar *curdirectory;
Xchar *oldpattern;
Xchar *cmdline;
X
Xstruct afile **files = NULL;
XSearchElement **hitfiles = NULL;
Xint numfiles = 0;
Xint numhitfiles = 0;
Xint allowedit = 0;
X
XWidget toplevel;
XWidget outer;
XWidget Row1;
XWidget Row2;
XWidget Row3;
X
XWidget messwidget; /* text widget for displaying messages */
XWidget dirwidget; /* label widget for current directory */
XWidget listwidget; /* text widget for directory listing */
XWidget grepwidget; /* text widget for searched files */
X
XWidget quitbutton; /* command button for quit */
XWidget listbutton; /* command button for list */
XWidget editbutton; /* command button for edit file selected
X in directory listing */
XWidget parentdirbutton; /* command button for selecting
X parent directory */
XWidget shellbutton; /* command button for invoking shell */
XWidget copybutton; /* command button for invoking copy */
XWidget renamebutton; /* command button for invoking rename */
XWidget deletebutton; /* command button for invoking delete on files */
X
XWidget fpatwindow; /* string box for providing the file pattern
X used to list directories */
X
XWidget grepbutton; /* command button for invoking grep on files */
XWidget grepwindow; /* string box to specify the grep search pattern */
XWidget grepeditbutton; /* command button for edit file selected
X in list of searched files */
X
XDisplay *curdisplay;
XXtTextSource messsource, listsource, grepsource;
X
Xint viewEdit;
X
Xstatic XtResource resources[] = {
X {"viewEdit", "ViewEdit", XtRBoolean, sizeof(int),
X (Cardinal)&viewEdit, XtRString, "False"}
X};
X
XmakeButtonsAndBoxes()
X{
X Cursor hand;
X static XtTextSelectType listselect[] = {
X XtselectLine, XtselectAll, XtselectNull, XtselectNull};
X
X static Arg paneargs[] = {
X { XtNallowResize, (XtArgVal)True },
X };
X static Arg ListArgs[] = {
X { XtNtextSource, NULL },
X { XtNtextSink, NULL },
X { XtNcursor, NULL },
X { XtNtextOptions ,
X (XtArgVal)(scrollVertical | scrollHorizontal | resizeWidth) },
X { XtNselectTypes, (XtArgVal)listselect },
X };
X static Arg MessArgs[] = {
X { XtNtextSource, NULL },
X { XtNtextSink, NULL },
X { XtNtextOptions, (XtArgVal)(scrollVertical | wordBreak) },
X };
X static Arg labelArgs[] = {
X { XtNjustify, (XtArgVal)XtJustifyCenter },
X { XtNlabel, NULL },
X };
X static Arg grepArgs[] = {
X { XtNtextSource, NULL },
X { XtNtextSink, NULL },
X { XtNcursor, NULL },
X { XtNtextOptions ,
X (XtArgVal)(scrollVertical | scrollHorizontal | resizeWidth) },
X { XtNselectTypes, (XtArgVal)listselect },
X };
X
X
X outer = XtCreateManagedWidget( "vpaned", vPanedWidgetClass, toplevel,
X paneargs , XtNumber(paneargs) );
X XtPanedSetRefigureMode(outer, FALSE);
X
X /* create first row */
X Row1 = XtCreateManagedWidget("row1", boxWidgetClass, outer, NULL,0);
X quitbutton = makeCommandButton(Row1, "Quit", DoQuit);
X listbutton = makeCommandButton(Row1, "List", DoList);
X ModCommand_Init(listbutton);
X
X editbutton = makeCommandButton(Row1, "View/Edit", DoEdit);
X ModCommand_Init(editbutton);
X parentdirbutton = makeCommandButton(Row1, "Parent", DoParent);
X ModCommand_Init(parentdirbutton);
X shellbutton = makeCommandButton(Row1, "Shell", DoShell);
X ModCommand_Init(shellbutton);
X
X copybutton = makeCommandButton(Row1, "Copy", DoCopy);
X renamebutton = makeCommandButton(Row1, "Move", DoRename);
X deletebutton = makeCommandButton(Row1, "Delete", DoDelete);
X
X /* create second row */
X Row2 = XtCreateManagedWidget("row2", boxWidgetClass, outer, NULL,0);
X fpatwindow = makeStringBox(Row2, filepattern, 254);
X
X /* create label for current directory */
X labelArgs[1].value = (XtArgVal)curdirectory;
X dirwidget = XtCreateManagedWidget("labelWindow",labelWidgetClass,
X outer, labelArgs, XtNumber(labelArgs));
X XtPanedSetMinMax((Widget)dirwidget, 14, 14);
X
X /* create message window */
X messsource = TCreateApAsSource();
X MessArgs[0].value = (XtArgVal)messsource;
X MessArgs[1].value = (XtArgVal)XtAsciiSinkCreate(outer, NULL, 0);
X messwidget = XtCreateManagedWidget("messageWindow",
X textWidgetClass, outer, MessArgs, XtNumber(MessArgs));
X XtPanedSetMinMax((Widget) messwidget, 40, 40);
X
X /* create cursor hand */
X hand = XCreateFontCursor(curdisplay, XC_hand1);
X
X /* create text for displaying directory listings */
X listsource = TCreateApAsSource();
X ListArgs[0].value = (XtArgVal)listsource;
X ListArgs[1].value = (XtArgVal)XtAsciiSinkCreate(outer, NULL, 0);
X ListArgs[2].value = (XtArgVal)hand;
X listwidget = XtCreateManagedWidget("listWindow",
X textWidgetClass, outer, ListArgs, XtNumber(ListArgs));
X XtPanedSetMinMax((Widget) listwidget, 250, 65535);
X Modtext_Init(listwidget);
X
X /* create third row */
X Row3 = XtCreateManagedWidget("row3", boxWidgetClass, outer, NULL,0);
X grepeditbutton = makeCommandButton(Row3, "View/Edit", DoGrepEdit);
X ModCommand_Init(grepeditbutton);
X grepbutton = makeCommandButton(Row3, "Grep", DoGrep);
X ModCommand_Init(grepbutton);
X grepwindow = makeStringBox(Row3, searchpattern, 120);
X
X /* create text for displaying directory listings */
X grepsource = TCreateApAsSource();
X grepArgs[0].value = (XtArgVal)grepsource;
X grepArgs[1].value = (XtArgVal)XtAsciiSinkCreate(outer, NULL, 0);
X grepArgs[2].value = (XtArgVal)hand;
X grepwidget = XtCreateManagedWidget("grepWindow",
X textWidgetClass, outer, grepArgs, XtNumber(grepArgs));
X XtPanedSetMinMax((Widget) grepwidget, 150, 65535);
X Modtext_Init(grepwidget);
X
X {
X static Dimension boxHeight;
X static Arg getargs[] = {
X { XtNheight, (XtArgVal)&boxHeight }
X };
X
X XtGetValues(quitbutton, getargs, XtNumber(getargs));
X boxHeight += 8;
X XtPanedSetMinMax((Widget) Row1, boxHeight, 65535);
X XtPanedSetMinMax((Widget) Row2, boxHeight, 65535);
X XtPanedSetMinMax((Widget) Row3, boxHeight, 65535);
X }
X
X XtPanedSetRefigureMode(outer, TRUE);
X}
X
X
Xmain(argc, argv)
Xint argc;
Xchar **argv;
X{
X char *cwd;
X Pixmap icon;
X Arg iconargs[1];
X
X static Dimension width, height;
X static Arg args[]={
X {XtNwidth, (XtArgVal) &width},
X {XtNheight, (XtArgVal)&height} };
X static Arg setargs[]={
X {XtNwidth, 500},
X {XtNheight,700} };
X
X filepattern = XtMalloc(255);
X searchpattern = XtMalloc(255);
X curdirectory = XtMalloc(255);
X oldpattern = XtMalloc(64);
X cmdline = XtCalloc(1024, 1);
X
X toplevel = XtInitialize( "xbrowser", "XBrowser",
X NULL, 0, &argc, argv);
X XtGetValues(toplevel, args, XtNumber(args));
X if(!width || !height){
X XtSetValues(toplevel, setargs, XtNumber(setargs));
X }
X
X XtGetApplicationResources(toplevel, 0, resources,
X XtNumber(resources),NULL, 0);
X curdisplay = XtDisplay(toplevel);
X
X if ( (cwd = getcwd((char *)NULL, 255)) == (char *)NULL)
X XtError("\nxbrowser: cannot get current directory");
X
X if (argv[1]) {
X strcpy(curdirectory, cwd);
X get_dirpat(argv[1], curdirectory, filepattern);
X }
X else get_dirpat(cwd, curdirectory, filepattern);
X
X strcpy(oldpattern, filepattern);
X reset_ownercache();
X
X makeButtonsAndBoxes();
X
X XtRealizeWidget(toplevel);
X XDefineCursor( XtDisplay(toplevel), XtWindow(toplevel),
X XCreateFontCursor(XtDisplay(toplevel), XC_left_ptr) );
X setup_iconname();
X
X /* define icon pixmap */
X icon = XCreateBitmapFromData(curdisplay,
X DefaultRootWindow(curdisplay),
X xbrowser_bits,
X xbrowser_width,
X xbrowser_height);
X XtSetArg(iconargs[0], XtNiconPixmap, (XtArgVal)icon);
X XtSetValues(toplevel, iconargs, XtNumber(iconargs));
X
X create_log(); /* create log window; it must be created before
X the popup window for the list options; otherwise
X it does not create the scrollbar correctly;
X I have no idea why */
X
X XtMainLoop();
X}
X
END_OF_FILE
if test 8220 -ne `wc -c <'xfilebrowser.c'`; then
echo shar: \"'xfilebrowser.c'\" unpacked with wrong size!
fi
# end of 'xfilebrowser.c'
fi
echo shar: End of archive 2 \(of 3\).
cp /dev/null ark2isdone
MISSING=""
for I in 1 2 3 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 3 archives.
rm -f ark[1-9]isdone
else
echo You still need to unpack the following archives:
echo " " ${MISSING}
fi
## End of shell archive.
exit 0
--
Mike Wexler(wyse!mikew) Phone: (408)433-1000 x1330
Moderator of comp.sources.x
More information about the Comp.sources.x
mailing list