home *** CD-ROM | disk | FTP | other *** search
Text File | 1989-06-03 | 54.7 KB | 1,838 lines |
- Path: uunet!island!argv
- From: argv@island.uu.net (Dan Heller)
- Newsgroups: comp.sources.x
- Subject: v04i014: xdir -- Directory Browser, Part01/02
- Message-ID: <786@island.uu.net>
- Date: 3 Jun 89 21:25:46 GMT
- Organization: Island Graphics, Marin County, California
- Lines: 1827
- Approved: island!argv@sun.com
-
- Submitted-by: Erik M. van der Poel <erik@sra.co.jp>
- Posting-number: Volume 4, Issue 14
- Archive-name: xdir/part01
-
- [ I didn't have any problem compiling and running on my sun3/60. It appears
- to have all the necessary sys-v dependencies. This is a nice looking tool.
- The following is from Erik --argv ]
-
- This is a file name dialog/directory browser package that is handy when
- an application wants the user to provide a file name. The path can be
- typed at the keyboard or selected by browsing in directory listings with
- the mouse.
-
- The following features are supported:
-
- * file name completion
-
- * fast directory reading
-
- * linking with Xaw (Athena) and/or Xw (Hewlett-Packard) widgets
-
- The file xdir.c is just a wrapper that demonstrates the package, and the
- resulting executable can be run by typing xdir and then Return.
- --
- Erik M. van der Poel erik@sra.co.jp (Japan)
- SRA, 1-1-1 Hirakawa-cho, Chiyoda-ku erik%sra.co.jp@uunet.uu.net (USA)
- Tokyo 102 Japan. TEL +81-3-234-2692 erik%sra.co.jp@mcvax.uucp (Europe)
-
- -------------------------------------------------------------------------------
-
-
- #!/bin/sh
- # to extract, remove the header and type "sh filename"
- if `test ! -s ./README`
- then
- echo "writing ./README"
- cat > ./README << '\End\Of\File\'
-
-
-
- XsraSelFile File Selection Dialog Package
-
-
-
- This directory contains the XsraSelFile file selection dialog package. This
- package allows an application to obtain a filename from a user. The filename is
- selected by typing in a text widget or by browsing with the mouse in directory
- listings.
-
- The following is a brief description of the available features.
-
- * filename completion
-
- When the user types a filename in the Text widget, SelFile shows the
- possible completions in the directory listings. The user can hit the space
- bar to complete the filename.
-
- * fast directory reading
-
- When a directory is opened, the entries are read and sorted. Then the stats
- of only the first screenful of entries are taken, and these entries are
- displayed. The stats of the other entries are taken upon demand (i.e. when
- the user wishes to see them by scrolling, etc.) or in the background. The
- Xt work procedure facility is used to do background work. The idea here is
- to give the user some feedback as soon as possible.
-
- "It's just an illu--sion" :-)
-
- * Xaw and/or Xw widgets
-
- SelFile can be linked with Xaw (Athena) and/or Xw (Hewlett-Packard)
- widgets. However, it must be linked with the R3 or a later version of the
- Xt Intrinsics. See the Imakefile for details.
-
- * automatic display update after directory modification
-
- Every now and then SelFile looks at the directories being displayed to see
- if they have been updated, and updates the display accordingly. Similarly,
- file modes are checked (but not as often).
-
- * tilde (~) for home directories
-
- When the user types a tilde at the beginning of the Text widget, SelFile
- shows the home directories.
-
- -------------------------------------------------------------------------------
-
- This work is loosely based on (and the name comes from) an earlier X10 SelFile
- by Michiharu `NinjaTerm' Ariza.
-
- Admittedly, this X11 SelFile also looks a bit like the directory browser on the
- NeXT machine.
-
- -------------------------------------------------------------------------------
-
- If you have any
-
- porting problems
-
- bug reports
-
- comments (particularly about ideas in the TODO file)
-
- or any other type of feedback
-
- please send mail to
-
- erik@sra.co.jp
- OR
- erik%sra.co.jp@uunet.uu.net
- OR
- erik%sra.co.jp@mcvax.uucp
- OR
- try junet instead of co.jp
- OR
- Erik M. van der Poel
- Software Research Associates, Inc.
- 1-1-1 Hirakawa-cho, Chiyoda-ku
- Tokyo 102 Japan. TEL +81-3-234-2692
- \End\Of\File\
- else
- echo "will not over write ./README"
- fi
- if `test ! -s ./SFinternal.h`
- then
- echo "writing ./SFinternal.h"
- cat > ./SFinternal.h << '\End\Of\File\'
- /* $Header: SFinternal.h,v 1.3 89/04/26 17:48:34 erik Exp $ */
-
- /*
- * Copyright 1989 Software Research Associates, Inc., Tokyo, Japan
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted, provided
- * that the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Software Research Associates not be used
- * in advertising or publicity pertaining to distribution of the software
- * without specific, written prior permission. Software Research Associates
- * makes no representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- * SOFTWARE RESEARCH ASSOCIATES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
- * IN NO EVENT SHALL SOFTWARE RESEARCH ASSOCIATES BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Erik M. van der Poel
- * Software Research Associates, Inc., Tokyo, Japan
- */
-
- #include <X11/Intrinsic.h>
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT)
- #include <Xw/Xw.h>
- #include <Xw/TextEdit.h>
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
- #include <X11/Text.h>
- #include <X11/AsciiText.h>
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
-
- #define SEL_FILE_CANCEL -1
- #define SEL_FILE_OK 0
- #define SEL_FILE_NULL 1
- #define SEL_FILE_TEXT 2
-
- #define SF_DO_SCROLL 1
- #define SF_DO_NOT_SCROLL 0
-
- typedef struct {
- int statDone;
- char *real;
- char *shown;
- } SFEntry;
-
- typedef struct {
- char *dir;
- char *path;
- SFEntry *entries;
- int nEntries;
- int vOrigin;
- int nChars;
- int hOrigin;
- int changed;
- int beginSelection;
- int endSelection;
- time_t st_mtime;
- } SFDir;
-
- extern int SFstatus;
-
- extern char SFcurrentPath[], SFstartDir[], SFcurrentDir[];
-
- extern Widget
- selFile,
- selFileCancel,
- selFileField,
- selFileForm,
- selFileHScroll,
- selFileHScrolls[],
- selFileLists[],
- selFileOK,
- selFilePrompt,
- selFileVScrolls[];
-
- extern Display *SFdisplay;
-
- extern int SFcharWidth, SFcharHeight, SFcharAscent;
-
- extern SFDir *SFdirs;
-
- extern int SFdirEnd, SFdirPtr;
-
- extern Pixel SFfore, SFback;
-
- extern XSegment SFsegs[], SFcompletionSegs[];
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT)
- extern XwTextPosition SFtextPos;
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
- extern XtTextPosition SFtextPos;
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
-
- extern void
- SFenterList(),
- SFleaveList(),
- SFmotionList(),
- SFbuttonPressList(),
- SFbuttonReleaseList();
-
- extern
- SFvSliderMovedCallback(),
- SFvFloatSliderMovedCallback(),
- SFhSliderMovedCallback(),
- SFpathSliderMovedCallback(),
- SFvAreaSelectedCallback(),
- SFhAreaSelectedCallback(),
- SFpathAreaSelectedCallback();
-
- extern int SFupperX, SFlowerY, SFupperY;
-
- extern int SFtextX, SFtextYoffset;
-
- extern int SFentryWidth, SFentryHeight;
-
- extern int SFlineToTextH, SFlineToTextV;
-
- extern int SFbesideText, SFaboveAndBelowText;
-
- extern int SFcharsPerEntry;
-
- extern int SFlistSize;
-
- extern int SFcurrentInvert[];
-
- extern int SFworkProcAdded;
-
- extern Boolean SFworkProc();
-
- extern XtAppContext SFapp;
-
- extern int SFpathScrollWidth, SFvScrollHeight, SFhScrollWidth;
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT)
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
- extern char SFtextBuffer[];
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
-
- extern int SFbuttonPressed;
-
- extern int SFcompareEntries();
-
- extern SFdirModTimer();
-
- extern XtIntervalId SFdirModTimerId;
-
- extern int (*SFfunc)();
- \End\Of\File\
- else
- echo "will not over write ./SFinternal.h"
- fi
- if `test ! -s ./SelFile.c`
- then
- echo "writing ./SelFile.c"
- cat > ./SelFile.c << '\End\Of\File\'
- #ifndef lint
- static char rcsid[] = "$Header: SelFile.c,v 1.7 89/05/30 14:49:17 erik Exp $";
- #endif
-
- /*
- * Copyright 1989 Software Research Associates, Inc., Tokyo, Japan
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted, provided
- * that the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Software Research Associates not be used
- * in advertising or publicity pertaining to distribution of the software
- * without specific, written prior permission. Software Research Associates
- * makes no representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- * SOFTWARE RESEARCH ASSOCIATES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
- * IN NO EVENT SHALL SOFTWARE RESEARCH ASSOCIATES BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Erik M. van der Poel
- * Software Research Associates, Inc., Tokyo, Japan
- */
-
- /*
- * Author's address:
- *
- * erik@sra.co.jp
- * OR
- * erik%sra.co.jp@uunet.uu.net
- * OR
- * erik%sra.co.jp@mcvax.uucp
- * OR
- * try junet instead of co.jp
- * OR
- * Erik M. van der Poel
- * Software Research Associates, Inc.
- * 1-1-1 Hirakawa-cho, Chiyoda-ku
- * Tokyo 102 Japan. TEL +81-3-234-2692
- */
-
- #include <stdio.h>
- #include <sys/param.h>
- #include <X11/cursorfont.h>
- #include <X11/Intrinsic.h>
- #include <X11/StringDefs.h>
- #include <X11/Composite.h>
- #include <X11/Shell.h>
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM)
- #include <Xw/Xw.h>
- #include <Xw/Form.h>
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM) */
- #include <X11/Form.h>
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM) */
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWPUSHBUTTON)
- #include <Xw/Xw.h>
- #include <Xw/PButton.h>
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWPUSHBUTTON) */
- #include <X11/Command.h>
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWPUSHBUTTON) */
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWSCROLLBAR)
- #include <Xw/Xw.h>
- #include <Xw/ScrollBar.h>
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWSCROLLBAR) */
- #include <X11/Scroll.h>
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWSCROLLBAR) */
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWSTATICTEXT)
- #include <Xw/Xw.h>
- #include <Xw/SText.h>
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWSTATICTEXT) */
- #include <X11/Label.h>
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWSTATICTEXT) */
-
- #include "SFinternal.h"
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT)
- #ifdef SEL_FILE_JAPANESE
- #include <X11/XWStr.h>
- #endif /* def SEL_FILE_JAPANESE */
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
-
- #ifndef SYSV
- extern char *getwd();
- #endif /* ndef SYSV */
-
- int SFstatus = SEL_FILE_NULL;
-
- char
- SFstartDir[MAXPATHLEN],
- SFcurrentPath[MAXPATHLEN],
- SFcurrentDir[MAXPATHLEN];
-
- Widget
- selFile,
- selFileCancel,
- selFileField,
- selFileForm,
- selFileHScroll,
- selFileHScrolls[3],
- selFileLists[3],
- selFileOK,
- selFilePrompt,
- selFileVScrolls[3];
-
- Display *SFdisplay;
-
- Pixel SFfore, SFback;
-
- XSegment SFsegs[2], SFcompletionSegs[2];
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT)
- XwTextPosition SFtextPos;
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
- XtTextPosition SFtextPos;
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
-
- int SFupperX, SFlowerY, SFupperY;
-
- int SFtextX, SFtextYoffset;
-
- int SFentryWidth, SFentryHeight;
-
- int SFlineToTextH = 3;
-
- int SFlineToTextV = 3;
-
- int SFbesideText = 3;
-
- int SFaboveAndBelowText = 2;
-
- int SFcharsPerEntry = 15;
-
- int SFlistSize = 10;
-
- int SFworkProcAdded = 0;
-
- XtAppContext SFapp;
-
- int SFpathScrollWidth, SFvScrollHeight, SFhScrollWidth;
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT)
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
- char SFtextBuffer[MAXPATHLEN];
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
-
- XtIntervalId SFdirModTimerId;
-
- int (*SFfunc)();
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT)
- static char *oneLineTextEditTranslations = "\
- <Key>Return: execute()\n\
- Ctrl<Key>M: execute()\n\
- ";
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
- static char *oneLineTextEditTranslations = "\
- <Key>Return: redraw-display()\n\
- Ctrl<Key>M: redraw-display()\n\
- ";
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
-
- /* ARGSUSED */
- static void
- SFexposeList(w, n, event)
- Widget w;
- int n;
- XExposeEvent *event;
- {
- if ((event->type == NoExpose) || event->count) {
- return;
- }
-
- SFdrawList(n, SF_DO_NOT_SCROLL);
- }
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT)
- static void
- returnCallback()
- {
- SFstatus = SEL_FILE_OK;
- }
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
-
- /* ARGSUSED */
- static void
- SFmodVerifyCallback(w, client_data, event)
- Widget w;
- caddr_t client_data;
- XKeyPressedEvent *event;
- {
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT)
- SFstatus = SEL_FILE_TEXT;
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
- char buf[2];
-
- if (
- (XLookupString(event, buf, 2, NULL, NULL) == 1) &&
- ((*buf) == '\r')
- ) {
- SFstatus = SEL_FILE_OK;
- } else {
- SFstatus = SEL_FILE_TEXT;
- }
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
-
- }
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT)
- static XtCallbackRec SFmodVerify[] = {
- { SFmodVerifyCallback, (caddr_t) NULL },
- { NULL, (caddr_t) NULL },
- };
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWPUSHBUTTON)
- static
- SFresetButton(w)
- Widget w;
- {
- static Arg arg[] = {
- { XtNset, False }
- };
-
- XtSetValues(w, arg, 1);
- }
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWPUSHBUTTON) */
-
- /* ARGSUSED */
- static void
- SFokCallback(w)
- Widget w;
- {
- SFstatus = SEL_FILE_OK;
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWPUSHBUTTON)
- SFresetButton(w);
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWPUSHBUTTON) */
-
- }
-
- static XtCallbackRec SFokSelect[] = {
- { SFokCallback, (caddr_t) NULL },
- { NULL, (caddr_t) NULL },
- };
-
- /* ARGSUSED */
- static void
- SFcancelCallback(w)
- Widget w;
- {
- SFstatus = SEL_FILE_CANCEL;
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWPUSHBUTTON)
- SFresetButton(w);
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWPUSHBUTTON) */
-
- }
-
- static XtCallbackRec SFcancelSelect[] = {
- { SFcancelCallback, (caddr_t) NULL },
- { NULL, (caddr_t) NULL },
- };
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT)
- typedef struct {
- Dimension height;
- } SFfieldData, *sfFieldPtr;
-
- static XtResource SFfieldResources[] = {
- {
- XtNheight, XtCHeight, XtRDimension, sizeof(Dimension),
- XtOffset(sfFieldPtr, height), XtRString, "1"
- },
- };
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
-
- static int
- SFcreateWidgets(prompt, ok, cancel)
- u_char *prompt;
- u_char *ok;
- u_char *cancel;
- {
- int i, n;
- int listWidth, listHeight;
- int listSpacing = 10;
- int scrollThickness = 15;
- int hScrollX, hScrollY;
- int vScrollX, vScrollY;
- Cursor
- xtermCursor,
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWSCROLLBAR)
- sbDownArrowCursor,
- sbLeftArrowCursor,
- sbUpArrowCursor,
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWSCROLLBAR) */
-
- sbRightArrowCursor,
- dotCursor;
-
- #ifdef SEL_FILE_JAPANESE
- CStr csl[2];
- u_char cstr[256];
- #endif /* def SEL_FILE_JAPANESE */
-
- Arg arglist[20];
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT)
- SFfieldData *data;
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
-
- i = 0;
- XtSetArg(arglist[i], XtNallowShellResize, True); i++;
- selFile = XtAppCreateShell("selFile", "SelFile",
- applicationShellWidgetClass, SFdisplay, arglist, i);
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM)
- selFileForm = XtCreateManagedWidget("selFileForm",
- XwformWidgetClass, selFile, (ArgList) NULL, 0);
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM) */
- i = 0;
- XtSetArg(arglist[i], XtNdefaultDistance, 30); i++;
- selFileForm = XtCreateManagedWidget("selFileForm",
- formWidgetClass, selFile, arglist, i);
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM) */
-
- i = 0;
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWSTATICTEXT)
-
- #ifdef SEL_FILE_JAPANESE
-
- #ifdef SEL_FILE_SJIS
- (void) convSJIStoCS(prompt, cstr);
- #else /* def SEL_FILE_SJIS */
- (void) convEUCtoCS(prompt, cstr);
- #endif /* def SEL_FILE_SJIS */
-
- csl[0] = cstr;
- csl[1] = NULL;
- XtSetArg(arglist[i], XtNstrings, csl); i++;
- #else /* def SEL_FILE_JAPANESE */
- XtSetArg(arglist[i], XtNstring, prompt); i++;
- #endif /* def SEL_FILE_JAPANESE */
-
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWSTATICTEXT) */
- XtSetArg(arglist[i], XtNlabel, prompt); i++;
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWSTATICTEXT) */
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM)
- XtSetArg(arglist[i], XtNxOffset, 30); i++;
- XtSetArg(arglist[i], XtNyOffset, 30); i++;
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM) */
-
- XtSetArg(arglist[i], XtNborderWidth, 0); i++;
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWSTATICTEXT)
- selFilePrompt = XtCreateManagedWidget("selFilePrompt",
- XwstatictextWidgetClass, selFileForm, arglist, i);
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWSTATICTEXT) */
- selFilePrompt = XtCreateManagedWidget("selFilePrompt",
- labelWidgetClass, selFileForm, arglist, i);
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWSTATICTEXT) */
-
- i = 0;
- XtSetArg(arglist[i], XtNforeground, &SFfore); i++;
- XtSetArg(arglist[i], XtNbackground, &SFback); i++;
- XtGetValues(selFilePrompt, arglist, i);
-
- SFinitFont();
-
- SFentryWidth = SFbesideText + SFcharsPerEntry * SFcharWidth +
- SFbesideText;
- SFentryHeight = SFaboveAndBelowText + SFcharHeight +
- SFaboveAndBelowText;
-
- listWidth = SFlineToTextH + SFentryWidth + SFlineToTextH + 1 +
- scrollThickness;
- listHeight = SFlineToTextV + SFentryHeight + SFlineToTextV + 1 +
- SFlineToTextV + SFlistSize * SFentryHeight +
- SFlineToTextV + 1 + scrollThickness;
-
- SFpathScrollWidth = 3 * listWidth + 2 * listSpacing + 4;
-
- hScrollX = -1;
- hScrollY = SFlineToTextV + SFentryHeight + SFlineToTextV + 1 +
- SFlineToTextV + SFlistSize * SFentryHeight +
- SFlineToTextV;
- SFhScrollWidth = SFlineToTextH + SFentryWidth + SFlineToTextH;
-
- vScrollX = SFlineToTextH + SFentryWidth + SFlineToTextH;
- vScrollY = SFlineToTextV + SFentryHeight + SFlineToTextV;
- SFvScrollHeight = SFlineToTextV + SFlistSize * SFentryHeight +
- SFlineToTextV;
-
- SFupperX = SFlineToTextH + SFentryWidth + SFlineToTextH - 1;
- SFlowerY = SFlineToTextV + SFentryHeight + SFlineToTextV + 1 +
- SFlineToTextV;
- SFupperY = SFlineToTextV + SFentryHeight + SFlineToTextV + 1 +
- SFlineToTextV + SFlistSize * SFentryHeight - 1;
-
- SFtextX = SFlineToTextH + SFbesideText;
- SFtextYoffset = SFlowerY + SFaboveAndBelowText + SFcharAscent;
-
- SFsegs[0].x1 = 0;
- SFsegs[0].y1 = vScrollY;
- SFsegs[0].x2 = vScrollX - 1;
- SFsegs[0].y2 = vScrollY;
- SFsegs[1].x1 = vScrollX;
- SFsegs[1].y1 = 0;
- SFsegs[1].x2 = vScrollX;
- SFsegs[1].y2 = vScrollY - 1;
-
- SFcompletionSegs[0].x1 = SFcompletionSegs[0].x2 = SFlineToTextH;
- SFcompletionSegs[1].x1 = SFcompletionSegs[1].x2 =
- SFlineToTextH + SFentryWidth - 1;
-
- i = 0;
- XtSetArg(arglist[i], XtNwidth, 3 * listWidth + 2 * listSpacing + 4);
- i++;
- XtSetArg(arglist[i], XtNborderColor, SFfore); i++;
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM)
- XtSetArg(arglist[i], XtNxRefWidget, selFilePrompt); i++;
- XtSetArg(arglist[i], XtNyRefWidget, selFilePrompt); i++;
- XtSetArg(arglist[i], XtNyAddHeight, True); i++;
- XtSetArg(arglist[i], XtNyOffset, 10); i++;
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM) */
- XtSetArg(arglist[i], XtNfromVert, selFilePrompt); i++;
- XtSetArg(arglist[i], XtNvertDistance, 10); i++;
- XtSetArg(arglist[i], XtNresizable, True); i++;
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM) */
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT)
- XtSetArg(arglist[i], XtNmodifyVerification, SFmodVerify); i++;
- XtSetArg(arglist[i], XtNmotionVerification, SFmodVerify); i++;
- selFileField = XtCreateManagedWidget("selFileField",
- XwtexteditWidgetClass, selFileForm, arglist, i);
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
- XtSetArg(arglist[i], XtNstring, SFtextBuffer); i++;
- XtSetArg(arglist[i], XtNlength, MAXPATHLEN); i++;
- XtSetArg(arglist[i], XtNeditType, XttextEdit); i++;
- XtSetArg(arglist[i], XtNtextOptions, 0 |
- editable |
- resizeHeight |
- wordBreak |
- 0); i++;
- selFileField = XtCreateManagedWidget("selFileField",
- asciiStringWidgetClass, selFileForm, arglist, i);
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
-
- XtOverrideTranslations(selFileField,
- XtParseTranslationTable(oneLineTextEditTranslations));
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT)
-
- data = XtNew(SFfieldData);
-
- XtGetApplicationResources(
- selFileField,
- (caddr_t) data,
- SFfieldResources,
- XtNumber(SFfieldResources),
- (Arg *) NULL,
- 0
- );
-
- if (data->height == 1) {
-
- #ifdef SEL_FILE_JAPANESE
- XFontStruct *font, *kanjiFont;
- XGCValues values;
- XWSGC gcSet;
- #else /* def SEL_FILE_JAPANESE */
- XFontStruct *font;
- #endif /* def SEL_FILE_JAPANESE */
-
- int ascent, descent;
- Dimension top, bottom;
-
- i = 0;
- XtSetArg(arglist[i], XtNtopMargin, &top); i++;
- XtSetArg(arglist[i], XtNbottomMargin, &bottom); i++;
-
- #ifdef SEL_FILE_JAPANESE
- XtSetArg(arglist[i], XtNfontG0, &font); i++;
- XtSetArg(arglist[i], XtNfontG1, &kanjiFont); i++;
- #else /* def SEL_FILE_JAPANESE */
- XtSetArg(arglist[i], XtNfont, &font); i++;
- #endif /* def SEL_FILE_JAPANESE */
-
- XtGetValues(selFileField, arglist, i);
-
- #ifdef SEL_FILE_JAPANESE
- gcSet = XtWSGetGCSet(selFileField, 0, &values, font, kanjiFont,
- NULL, NULL);
- XWSFontHeight(gcSet, NULL, 0, &ascent, &descent);
- #else /* def SEL_FILE_JAPANESE */
- ascent = font->ascent;
- descent = font->descent;
- #endif /* def SEL_FILE_JAPANESE */
-
- i = 0;
- XtSetArg(arglist[i], XtNheight,
- top + bottom + ascent + descent); i++;
- XtSetValues(selFileField, arglist, i);
- }
-
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
-
- i = 0;
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWSCROLLBAR)
- XtSetArg(arglist[i], XtNslideOrientation, XwHORIZONTAL); i++;
- XtSetArg(arglist[i], XtNsliderMin, 0); i++;
- XtSetArg(arglist[i], XtNsliderExtent, 3); i++;
- XtSetArg(arglist[i], XtNrepeatRate, 1); i++;
- XtSetArg(arglist[i], XtNgranularity, 1); i++;
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWSCROLLBAR) */
- XtSetArg(arglist[i], XtNorientation, XtorientHorizontal); i++;
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWSCROLLBAR) */
-
- XtSetArg(arglist[i], XtNwidth, SFpathScrollWidth); i++;
- XtSetArg(arglist[i], XtNheight, scrollThickness); i++;
- XtSetArg(arglist[i], XtNborderColor, SFfore); i++;
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM)
- XtSetArg(arglist[i], XtNxRefWidget, selFileField); i++;
- XtSetArg(arglist[i], XtNyRefWidget, selFileField); i++;
- XtSetArg(arglist[i], XtNyAddHeight, True); i++;
- XtSetArg(arglist[i], XtNyOffset, 30); i++;
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM) */
- XtSetArg(arglist[i], XtNfromVert, selFileField); i++;
- XtSetArg(arglist[i], XtNvertDistance, 30); i++;
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM) */
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWSCROLLBAR)
- selFileHScroll = XtCreateManagedWidget("selFileHScroll",
- XwscrollbarWidgetClass, selFileForm, arglist, i);
-
- XtAddCallback(selFileHScroll, XtNsliderMoved,
- SFpathSliderMovedCallback, (caddr_t) NULL);
- XtAddCallback(selFileHScroll, XtNareaSelected,
- SFpathAreaSelectedCallback, (caddr_t) NULL);
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWSCROLLBAR) */
- selFileHScroll = XtCreateManagedWidget("selFileHScroll",
- scrollbarWidgetClass, selFileForm, arglist, i);
-
- XtAddCallback(selFileHScroll, XtNjumpProc,
- SFpathSliderMovedCallback, (caddr_t) NULL);
- XtAddCallback(selFileHScroll, XtNscrollProc,
- SFpathAreaSelectedCallback, (caddr_t) NULL);
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWSCROLLBAR) */
-
- i = 0;
- XtSetArg(arglist[i], XtNwidth, listWidth); i++;
- XtSetArg(arglist[i], XtNheight, listHeight); i++;
- XtSetArg(arglist[i], XtNborderColor, SFfore); i++;
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM)
- XtSetArg(arglist[i], XtNxRefWidget, selFileHScroll); i++;
- XtSetArg(arglist[i], XtNyRefWidget, selFileHScroll); i++;
- XtSetArg(arglist[i], XtNyAddHeight, True); i++;
- XtSetArg(arglist[i], XtNyOffset, 10); i++;
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM) */
- XtSetArg(arglist[i], XtNfromVert, selFileHScroll); i++;
- XtSetArg(arglist[i], XtNvertDistance, 10); i++;
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM) */
-
- selFileLists[0] = XtCreateManagedWidget("selFileList1",
- compositeWidgetClass, selFileForm, arglist, i);
-
- i = 0;
- XtSetArg(arglist[i], XtNwidth, listWidth); i++;
- XtSetArg(arglist[i], XtNheight, listHeight); i++;
- XtSetArg(arglist[i], XtNborderColor, SFfore); i++;
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM)
- XtSetArg(arglist[i], XtNxRefWidget, selFileLists[0]); i++;
- XtSetArg(arglist[i], XtNyRefWidget, selFileLists[0]); i++;
- XtSetArg(arglist[i], XtNxAddWidth, True); i++;
- XtSetArg(arglist[i], XtNxOffset, listSpacing); i++;
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM) */
- XtSetArg(arglist[i], XtNfromHoriz, selFileLists[0]); i++;
- XtSetArg(arglist[i], XtNfromVert, selFileHScroll); i++;
- XtSetArg(arglist[i], XtNhorizDistance, listSpacing); i++;
- XtSetArg(arglist[i], XtNvertDistance, 10); i++;
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM) */
-
- selFileLists[1] = XtCreateManagedWidget("selFileList2",
- compositeWidgetClass, selFileForm, arglist, i);
-
- i = 0;
- XtSetArg(arglist[i], XtNwidth, listWidth); i++;
- XtSetArg(arglist[i], XtNheight, listHeight); i++;
- XtSetArg(arglist[i], XtNborderColor, SFfore); i++;
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM)
- XtSetArg(arglist[i], XtNxRefWidget, selFileLists[1]); i++;
- XtSetArg(arglist[i], XtNyRefWidget, selFileLists[1]); i++;
- XtSetArg(arglist[i], XtNxAddWidth, True); i++;
- XtSetArg(arglist[i], XtNxOffset, listSpacing); i++;
- XtSetArg(arglist[i], XtNxAttachRight, True); i++;
- XtSetArg(arglist[i], XtNxAttachOffset, 30); i++;
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM) */
- XtSetArg(arglist[i], XtNfromHoriz, selFileLists[1]); i++;
- XtSetArg(arglist[i], XtNfromVert, selFileHScroll); i++;
- XtSetArg(arglist[i], XtNhorizDistance, listSpacing); i++;
- XtSetArg(arglist[i], XtNvertDistance, 10); i++;
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM) */
-
- selFileLists[2] = XtCreateManagedWidget("selFileList3",
- compositeWidgetClass, selFileForm, arglist, i);
-
- for (n = 0; n < 3; n++) {
-
- i = 0;
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWSCROLLBAR)
- XtSetArg(arglist[i], XtNsliderMin, 0); i++;
- XtSetArg(arglist[i], XtNrepeatRate, 1); i++;
- XtSetArg(arglist[i], XtNgranularity, 1); i++;
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWSCROLLBAR) */
-
- XtSetArg(arglist[i], XtNx, vScrollX); i++;
- XtSetArg(arglist[i], XtNy, vScrollY); i++;
- XtSetArg(arglist[i], XtNwidth, scrollThickness); i++;
- XtSetArg(arglist[i], XtNheight, SFvScrollHeight); i++;
- XtSetArg(arglist[i], XtNborderColor, SFfore); i++;
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWSCROLLBAR)
- selFileVScrolls[n] = XtCreateManagedWidget("selFileVScroll",
- XwscrollbarWidgetClass, selFileLists[n], arglist, i);
-
- XtAddCallback(selFileVScrolls[n], XtNsliderMoved,
- SFvSliderMovedCallback, (caddr_t) n);
- XtAddCallback(selFileVScrolls[n], XtNareaSelected,
- SFvAreaSelectedCallback, (caddr_t) n);
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWSCROLLBAR) */
- selFileVScrolls[n] = XtCreateManagedWidget("selFileVScroll",
- scrollbarWidgetClass, selFileLists[n], arglist, i);
-
- XtAddCallback(selFileVScrolls[n], XtNjumpProc,
- SFvFloatSliderMovedCallback, (caddr_t) n);
- XtAddCallback(selFileVScrolls[n], XtNscrollProc,
- SFvAreaSelectedCallback, (caddr_t) n);
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWSCROLLBAR) */
-
- i = 0;
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWSCROLLBAR)
- XtSetArg(arglist[i], XtNslideOrientation, XwHORIZONTAL);i++;
- XtSetArg(arglist[i], XtNsliderMin, 0); i++;
- XtSetArg(arglist[i], XtNrepeatRate, 1); i++;
- XtSetArg(arglist[i], XtNgranularity, 1); i++;
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWSCROLLBAR) */
- XtSetArg(arglist[i], XtNorientation, XtorientHorizontal);
- i++;
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWSCROLLBAR) */
-
- XtSetArg(arglist[i], XtNx, hScrollX); i++;
- XtSetArg(arglist[i], XtNy, hScrollY); i++;
- XtSetArg(arglist[i], XtNwidth, SFhScrollWidth); i++;
- XtSetArg(arglist[i], XtNheight, scrollThickness); i++;
- XtSetArg(arglist[i], XtNborderColor, SFfore); i++;
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWSCROLLBAR)
- selFileHScrolls[n] = XtCreateManagedWidget("selFileHScroll",
- XwscrollbarWidgetClass, selFileLists[n], arglist, i);
-
- XtAddCallback(selFileHScrolls[n], XtNsliderMoved,
- SFhSliderMovedCallback, (caddr_t) n);
- XtAddCallback(selFileHScrolls[n], XtNareaSelected,
- SFhAreaSelectedCallback, (caddr_t) n);
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWSCROLLBAR) */
- selFileHScrolls[n] = XtCreateManagedWidget("selFileHScroll",
- scrollbarWidgetClass, selFileLists[n], arglist, i);
-
- XtAddCallback(selFileHScrolls[n], XtNjumpProc,
- SFhSliderMovedCallback, (caddr_t) n);
- XtAddCallback(selFileHScrolls[n], XtNscrollProc,
- SFhAreaSelectedCallback, (caddr_t) n);
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWSCROLLBAR) */
-
- }
-
- i = 0;
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWPUSHBUTTON)
-
- #ifdef SEL_FILE_JAPANESE
-
- #ifdef SEL_FILE_SJIS
- (void) convSJIStoCS(ok, cstr);
- #else /* def SEL_FILE_SJIS */
- (void) convEUCtoCS(ok, cstr);
- #endif /* def SEL_FILE_SJIS */
-
- XtSetArg(arglist[i], XtNlabel, cstr); i++;
- #else /* def SEL_FILE_JAPANESE */
- XtSetArg(arglist[i], XtNlabel, ok); i++;
- #endif /* def SEL_FILE_JAPANESE */
-
- XtSetArg(arglist[i], XtNhSpace, 4); i++;
- XtSetArg(arglist[i], XtNvSpace, 4); i++;
- XtSetArg(arglist[i], XtNselect, SFokSelect); i++;
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWPUSHBUTTON) */
- XtSetArg(arglist[i], XtNlabel, ok); i++;
- XtSetArg(arglist[i], XtNcallback, SFokSelect); i++;
- XtSetArg(arglist[i], XtNborderColor, SFfore); i++;
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWPUSHBUTTON) */
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM)
- XtSetArg(arglist[i], XtNxRefWidget, selFileLists[0]); i++;
- XtSetArg(arglist[i], XtNyRefWidget, selFileLists[0]); i++;
- XtSetArg(arglist[i], XtNyAddHeight, True); i++;
- XtSetArg(arglist[i], XtNyOffset, 30); i++;
- XtSetArg(arglist[i], XtNyAttachBottom, True); i++;
- XtSetArg(arglist[i], XtNyAttachOffset, 30); i++;
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM) */
- XtSetArg(arglist[i], XtNfromVert, selFileLists[0]); i++;
- XtSetArg(arglist[i], XtNvertDistance, 30); i++;
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM) */
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWPUSHBUTTON)
- selFileOK = XtCreateManagedWidget("selFileOK", XwpushButtonWidgetClass,
- selFileForm, arglist, i);
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWPUSHBUTTON) */
- selFileOK = XtCreateManagedWidget("selFileOK", commandWidgetClass,
- selFileForm, arglist, i);
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWPUSHBUTTON) */
-
- i = 0;
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWPUSHBUTTON)
-
- #ifdef SEL_FILE_JAPANESE
-
- #ifdef SEL_FILE_SJIS
- (void) convSJIStoCS(cancel, cstr);
- #else /* def SEL_FILE_SJIS */
- (void) convEUCtoCS(cancel, cstr);
- #endif /* def SEL_FILE_SJIS */
-
- XtSetArg(arglist[i], XtNlabel, cstr); i++;
- #else /* def SEL_FILE_JAPANESE */
- XtSetArg(arglist[i], XtNlabel, cancel); i++;
- #endif /* def SEL_FILE_JAPANESE */
-
- XtSetArg(arglist[i], XtNhSpace, 4); i++;
- XtSetArg(arglist[i], XtNvSpace, 4); i++;
- XtSetArg(arglist[i], XtNselect, SFcancelSelect); i++;
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWPUSHBUTTON) */
- XtSetArg(arglist[i], XtNlabel, cancel); i++;
- XtSetArg(arglist[i], XtNcallback, SFcancelSelect); i++;
- XtSetArg(arglist[i], XtNborderColor, SFfore); i++;
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWPUSHBUTTON) */
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM)
- XtSetArg(arglist[i], XtNxRefWidget, selFileOK); i++;
- XtSetArg(arglist[i], XtNyRefWidget, selFileOK); i++;
- XtSetArg(arglist[i], XtNxAddWidth, True); i++;
- XtSetArg(arglist[i], XtNxOffset, 30); i++;
- XtSetArg(arglist[i], XtNyAttachBottom, True); i++;
- XtSetArg(arglist[i], XtNyAttachOffset, 30); i++;
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM) */
- XtSetArg(arglist[i], XtNfromHoriz, selFileOK); i++;
- XtSetArg(arglist[i], XtNfromVert, selFileLists[0]); i++;
- XtSetArg(arglist[i], XtNhorizDistance, 30); i++;
- XtSetArg(arglist[i], XtNvertDistance, 30); i++;
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWFORM) */
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWPUSHBUTTON)
- selFileCancel = XtCreateManagedWidget("selFileCancel",
- XwpushButtonWidgetClass, selFileForm, arglist, i);
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWPUSHBUTTON) */
- selFileCancel = XtCreateManagedWidget("selFileCancel",
- commandWidgetClass, selFileForm, arglist, i);
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWPUSHBUTTON) */
-
- XtRealizeWidget(selFile);
-
- SFcreateGC();
-
- xtermCursor = XCreateFontCursor(SFdisplay, XC_xterm);
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWSCROLLBAR)
- sbDownArrowCursor = XCreateFontCursor(SFdisplay, XC_sb_down_arrow);
- sbLeftArrowCursor = XCreateFontCursor(SFdisplay, XC_sb_left_arrow);
- sbUpArrowCursor = XCreateFontCursor(SFdisplay, XC_sb_up_arrow);
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWSCROLLBAR) */
-
- sbRightArrowCursor = XCreateFontCursor(SFdisplay, XC_sb_right_arrow);
- dotCursor = XCreateFontCursor(SFdisplay, XC_dot);
-
- XDefineCursor(SFdisplay, XtWindow(selFileForm), xtermCursor);
- XDefineCursor(SFdisplay, XtWindow(selFileField), xtermCursor);
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWSCROLLBAR)
- XDefineCursor(SFdisplay, XtWindow(selFileHScroll), sbDownArrowCursor);
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWSCROLLBAR) */
-
- for (n = 0; n < 3; n++) {
- XDefineCursor(SFdisplay, XtWindow(selFileLists[n]),
- sbRightArrowCursor);
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWSCROLLBAR)
- XDefineCursor(SFdisplay, XtWindow(selFileVScrolls[n]),
- sbLeftArrowCursor);
- XDefineCursor(SFdisplay, XtWindow(selFileHScrolls[n]),
- sbUpArrowCursor);
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWSCROLLBAR) */
-
- }
- XDefineCursor(SFdisplay, XtWindow(selFileOK), dotCursor);
- XDefineCursor(SFdisplay, XtWindow(selFileCancel), dotCursor);
-
- for (n = 0; n < 3; n++) {
- XtAddEventHandler(selFileLists[n], ExposureMask, True,
- SFexposeList, (caddr_t) n);
- XtAddEventHandler(selFileLists[n], EnterWindowMask, False,
- SFenterList, (caddr_t) n);
- XtAddEventHandler(selFileLists[n], LeaveWindowMask, False,
- SFleaveList, (caddr_t) n);
- XtAddEventHandler(selFileLists[n], PointerMotionMask, False,
- SFmotionList, (caddr_t) n);
- XtAddEventHandler(selFileLists[n], ButtonPressMask, False,
- SFbuttonPressList, (caddr_t) n);
- XtAddEventHandler(selFileLists[n], ButtonReleaseMask, False,
- SFbuttonReleaseList, (caddr_t) n);
- }
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT)
- XtAddCallback(selFileField, XtNexecute, returnCallback, (caddr_t) NULL);
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
- XtAddEventHandler(selFileField, KeyPressMask, False,
- SFmodVerifyCallback, (caddr_t) NULL);
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
-
- SFapp = XtWidgetToApplicationContext(selFile);
- }
-
- SFtextChanged()
- {
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT)
- static char *SFtextBuffer = NULL;
-
- #ifdef SEL_FILE_JAPANESE
- static int alloc = 0;
- wchar_t *wstr;
- int len;
- #endif /* def SEL_FILE_JAPANESE */
-
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT)
-
- #ifdef SEL_FILE_JAPANESE
- wstr = XwTextCopyBuffer(selFileField);
- len = convWStoEUC(wstr, (unsigned char *) NULL);
- while (len + 1 > alloc) {
- alloc = 2 * (alloc + 1);
- SFtextBuffer = XtRealloc(SFtextBuffer, (unsigned) alloc);
- }
- (void) convWStoEUC(wstr, (unsigned char *) SFtextBuffer);
- XtFree((char *) wstr);
- #else /* def SEL_FILE_JAPANESE */
- XtFree(SFtextBuffer);
- SFtextBuffer = (char *) XwTextCopyBuffer(selFileField);
- #endif /* def SEL_FILE_JAPANESE */
-
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
-
- if ((SFtextBuffer[0] == '/') || (SFtextBuffer[0] == '~')) {
- (void) strcpy(SFcurrentPath, SFtextBuffer);
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT)
- SFtextPos = XwTextGetInsertPos(selFileField);
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
- SFtextPos = XtTextGetInsertionPoint(selFileField);
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
-
- } else {
- (void) strcat(strcpy(SFcurrentPath, SFstartDir), SFtextBuffer);
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT)
- SFtextPos = XwTextGetInsertPos(selFileField) +
- strlen(SFstartDir);
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
- SFtextPos = XtTextGetInsertionPoint(selFileField) +
- strlen(SFstartDir);
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWTEXTEDIT) */
-
- }
-
- if (!SFworkProcAdded) {
- (void) XtAppAddWorkProc(SFapp, SFworkProc, NULL);
- SFworkProcAdded = 1;
- }
-
- SFupdatePath();
- }
-
- static char *
- SFgetText()
- {
- return strcpy(XtMalloc((unsigned) (strlen(SFcurrentPath) + 1)),
- SFcurrentPath);
- }
-
- static
- SFprepareToReturn()
- {
- SFstatus = SEL_FILE_NULL;
- XtRemoveGrab(selFile);
- XtUnmapWidget(selFile);
- XtRemoveTimeOut(SFdirModTimerId);
- if (SFchdir(SFstartDir)) {
- XtAppError(
- SFapp,
- "XsraSelFile: can't return to current directory"
- );
- }
- }
-
- int
- XsraSelFile(display, prompt, ok, cancel, init_path, show_entry, path_return)
- Display *display;
- unsigned char *prompt;
- unsigned char *ok;
- unsigned char *cancel;
- char *init_path;
- int (*show_entry)();
- char **path_return;
- {
- static int firstTime = 1;
-
- #ifdef SEL_FILE_JAPANESE
- CStr csl[2];
- u_char cstr[256];
- #endif /* def SEL_FILE_JAPANESE */
-
- int i;
- Arg arglist[20];
- XEvent event;
-
- if ((!display) && firstTime) {
- Widget w;
- int argc;
- char *argv[1];
-
- argc = 1;
- argv[0] = "xfoo";
- w = XtInitialize(argv[0], "XFoo", (XrmOptionDescRec *) NULL, 0,
- (Cardinal *) &argc, argv);
- display = XtDisplay(w);
- }
-
- if (!prompt) {
- prompt = (unsigned char *) "Pathname:";
- }
-
- if (!ok) {
- ok = (unsigned char *) "OK";
- }
-
- if (!cancel) {
- cancel = (unsigned char *) "Cancel";
- }
-
- if (firstTime) {
- firstTime = 0;
- SFdisplay = display;
- SFcreateWidgets(prompt, ok, cancel);
- } else {
- if (display && (SFdisplay != display)) {
- XtAppError(SFapp, "XsraSelFile: display different");
- }
-
- i = 0;
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWSTATICTEXT)
-
- #ifdef SEL_FILE_JAPANESE
-
- #ifdef SEL_FILE_SJIS
- (void) convSJIStoCS(prompt, cstr);
- #else /* def SEL_FILE_SJIS */
- (void) convEUCtoCS(prompt, cstr);
- #endif /* def SEL_FILE_SJIS */
-
- csl[0] = cstr;
- csl[1] = NULL;
- XtSetArg(arglist[i], XtNstrings, csl); i++;
- #else /* def SEL_FILE_JAPANESE */
- XtSetArg(arglist[i], XtNstring, prompt); i++;
- #endif /* def SEL_FILE_JAPANESE */
-
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWSTATICTEXT) */
- XtSetArg(arglist[i], XtNlabel, prompt); i++;
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWSTATICTEXT) */
-
- XtSetValues(selFilePrompt, arglist, i);
-
- i = 0;
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWPUSHBUTTON)
-
- #ifdef SEL_FILE_JAPANESE
-
- #ifdef SEL_FILE_SJIS
- (void) convSJIStoCS(ok, cstr);
- #else /* def SEL_FILE_SJIS */
- (void) convEUCtoCS(ok, cstr);
- #endif /* def SEL_FILE_SJIS */
-
- XtSetArg(arglist[i], XtNlabel, cstr); i++;
- #else /* def SEL_FILE_JAPANESE */
- XtSetArg(arglist[i], XtNlabel, ok); i++;
- #endif /* def SEL_FILE_JAPANESE */
-
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWPUSHBUTTON) */
- XtSetArg(arglist[i], XtNlabel, ok); i++;
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWPUSHBUTTON) */
-
- XtSetValues(selFileOK, arglist, i);
-
- i = 0;
-
- #if defined(SEL_FILE_XW) || defined(SEL_FILE_XWPUSHBUTTON)
-
- #ifdef SEL_FILE_JAPANESE
-
- #ifdef SEL_FILE_SJIS
- (void) convSJIStoCS(cancel, cstr);
- #else /* def SEL_FILE_SJIS */
- (void) convEUCtoCS(cancel, cstr);
- #endif /* def SEL_FILE_SJIS */
-
- XtSetArg(arglist[i], XtNlabel, cstr); i++;
- #else /* def SEL_FILE_JAPANESE */
- XtSetArg(arglist[i], XtNlabel, cancel); i++;
- #endif /* def SEL_FILE_JAPANESE */
-
- #else /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWPUSHBUTTON) */
- XtSetArg(arglist[i], XtNlabel, cancel); i++;
- #endif /* defined(SEL_FILE_XW) || defined(SEL_FILE_XWPUSHBUTTON) */
-
- XtSetValues(selFileCancel, arglist, i);
-
- XtMapWidget(selFile);
- }
-
- #ifdef SYSV
- if (!getwd(SFstartDir)) {
- /* if (!getcwd(SFstartDir, MAXPATHLEN)) { */
- #else /* def SYSV */
- if (!getwd(SFstartDir)) {
- #endif /* def SYSV */
-
- XtAppError(SFapp, "XsraSelFile: can't get current directory");
- }
- (void) strcat(SFstartDir, "/");
- (void) strcpy(SFcurrentDir, SFstartDir);
-
- if (init_path) {
- if (init_path[0] == '/') {
- (void) strcpy(SFcurrentPath, init_path);
- if (strncmp(
- SFcurrentPath,
- SFstartDir,
- strlen(SFstartDir)
- )) {
- SFsetText(SFcurrentPath);
- } else {
- SFsetText(&(SFcurrentPath[strlen(SFstartDir)]));
- }
- } else {
- (void) strcat(strcpy(SFcurrentPath, SFstartDir),
- init_path);
- SFsetText(&(SFcurrentPath[strlen(SFstartDir)]));
- }
- } else {
- (void) strcpy(SFcurrentPath, SFstartDir);
- }
-
- SFfunc = show_entry;
-
- SFtextChanged();
-
- XtAddGrab(selFile, True, True);
-
- SFdirModTimerId = XtAppAddTimeOut(SFapp, (unsigned long) 1000,
- SFdirModTimer, (caddr_t) NULL);
-
- while (1) {
- XtAppNextEvent(SFapp, &event);
- XtDispatchEvent(&event);
- switch (SFstatus) {
- case SEL_FILE_TEXT:
- SFstatus = SEL_FILE_NULL;
- SFtextChanged();
- break;
- case SEL_FILE_OK:
- SFprepareToReturn();
- if (path_return) {
- *path_return = SFgetText();
- }
- return SEL_FILE_OK;
- case SEL_FILE_CANCEL:
- SFprepareToReturn();
- return SEL_FILE_CANCEL;
- case SEL_FILE_NULL:
- break;
- }
- }
- }
- \End\Of\File\
- else
- echo "will not over write ./SelFile.c"
- fi
- if `test ! -s ./SelFile.man`
- then
- echo "writing ./SelFile.man"
- cat > ./SelFile.man << '\End\Of\File\'
- .\" $Header: SelFile.man,v 1.3 89/04/24 22:27:00 erik Exp $
- .\"
- .\" Copyright 1989 Software Research Associates, Inc., Tokyo, Japan
- .\"
- .\" Permission to use, copy, modify, and distribute this software and its
- .\" documentation for any purpose and without fee is hereby granted, provided
- .\" that the above copyright notice appear in all copies and that both that
- .\" copyright notice and this permission notice appear in supporting
- .\" documentation, and that the name of Software Research Associates not be used
- .\" in advertising or publicity pertaining to distribution of the software
- .\" without specific, written prior permission. Software Research Associates
- .\" makes no representations about the suitability of this software for any
- .\" purpose. It is provided "as is" without express or implied warranty.
- .\"
- .\" SOFTWARE RESEARCH ASSOCIATES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- .\" SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
- .\" IN NO EVENT SHALL SOFTWARE RESEARCH ASSOCIATES BE LIABLE FOR ANY SPECIAL,
- .\" INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- .\" LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- .\" OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- .\" PERFORMANCE OF THIS SOFTWARE.
- .\"
- .\" Author: Erik M. van der Poel
- .\" Software Research Associates, Inc., Tokyo, Japan
- .\"
- .TH XSRASELFILE 3X "April 24 1989" SRA
- .SH NAME
- \fIXsraSelFile\fR \- select a file
- .sp
- .SH SYNOPSIS
- .nf
- .ft B
- #include <stdio.h>
- #include <X11/Intrinsic.h>
- .PP
- .ft B
- .ta +\w'unsigned char 'u
- ret = XsraSelFile(display, prompt, ok, cancel, init_path, show_entry, path_return)
- int ret;
- Display *display;
- unsigned char *prompt;
- unsigned char *ok;
- unsigned char *cancel;
- char *init_path;
- int (*show_entry)();
- char **path_return;
- .fi
- .sp
- .SH DESCRIPTION
- .I XsraSelFile
- allows an X11 user to select a file by typing the path or by browsing in
- directory listings and selecting entries with the mouse.
- .sp
- The space bar can be pressed to complete filenames, and tilde is used for home
- directories.
- All of the usual key bindings can be used in the text widget, except for Return
- and Control-M, which are equivalent to pressing the OK button.
- The path can be scrolled using the large horizontal scroll bar, or by moving
- the insertion cursor in the text widget.
- The directory entries can be scrolled using the vertical scroll bars, or by
- holding a mouse button down and moving out of the listing.
- The scrolling speed varies with the distance from the listing.
- .sp
- The directory entries are terminated with special characters that indicate the
- kind of entry, similar to the
- .I \-F
- option of
- .IR ls (1).
- .sp
- The programmer's interface is simple, providing an easy way for the application
- to obtain a filename from the user.
- .sp
- .I XsraSelFile
- does not allow X events to be generated on any other widgets in the application
- by adding a grab for the dialog widget while it is active.
- .sp
- .SH ARGUMENTS
- The
- .B display
- argument specifies the display on which to create the new application shell
- dialog widget.
- If it is specified as NULL, the default display is opened by initializing the X
- toolkit.
- .sp
- The
- .B prompt
- argument specifies the prompt to print near the top of the new widget.
- This should be a string containing no newlines.
- If the prompt is specified as NULL, the string "Pathname:" is used.
- .sp
- The
- .B ok
- argument specifies the string to print in the OK button.
- If it is specified as NULL, "OK" is used.
- .sp
- The
- .B cancel
- argument specifies the string to print in the Cancel button.
- If it is specified as NULL, "Cancel" is used.
- .sp
- The initial path may be set using
- .BR init_path .
- If it is specified as NULL, the initial path will be the current directory.
- .sp
- The
- .B show_entry
- argument is a pointer to a function that is called to decide whether or not to
- display a particular directory entry.
- If this argument is specified as NULL, all entries will be displayed.
- Otherwise, the function is called with arguments as follows.
- .sp
- .nf
- .ft I
- .ta +\w'struct stat 'u
- int show_entry(real_name, shown_name_return, entry_stat)
- char *real_name;
- char **shown_name_return;
- struct stat *entry_stat;
- .ft R
- .fi
- .sp
- The
- .I real_name
- argument is the name of the entry, and the
- .I entry_stat
- argument is a pointer to the stat buffer of the entry.
- The contents of the real_name and entry_stat arguments should not be altered.
- The
- .I shown_name_return
- argument is to be filled in by the function if a name other than the real name
- is to be shown.
- The function should return true if the entry is to be displayed.
- An example of a show_entry function can be found in
- .IR callback.c .
- .sp
- When the return key or the OK button is pressed,
- .I XsraSelFile
- returns, putting the full path of the selected file in
- .B path_return
- unless it is NULL.
- .I XtMalloc
- is used to make a copy of the path.
- The application writer is responsible for freeing the space.
- .sp
- .SH RETURN VALUE
- The
- .B ret
- return value is 0 if the user presses the return key or the OK button.
- Otherwise, the user has pressed the Cancel button and a value of \-1 is
- returned.
- .sp
- .SH COMPILATION
- The XsraSelFile package can be linked with Athena (Xaw) and/or Hewlett-Packard
- (Xw) widgets, by choosing the appropriate defines. See the Imakefile for
- details.
- .sp
- .SH RESOURCES
- The font to be used by
- .I XsraSelFile
- is specified by putting the following in a resource file:
- .sp
- .ft H
- selFile*font :9x15
- .ft R
- .sp
- (The default font is
- .IR 9x15 .)
- .sp
- .SH ENVIRONMENT
- DISPLAY \- the default host and display to use.
- .sp
- .SH "SEE ALSO"
- X(1), xrdb(1), X Toolkit
- .sp
- .SH BUGS
- .I XsraSelFile
- must always be called with the same
- .I display
- argument.
- .sp
- When a directory is modified by a third party while the pointer is in that
- directory's listing, the display will be updated and the pointer will be warped
- away to prevent the user from selecting `the wrong file', which can be
- considered dangerous if the application is about to delete whatever the user
- selects.
- .sp
- .SH COPYRIGHT
- Copyright 1989 Software Research Associates, Inc., Tokyo, Japan
- .sp
- .SH AUTHOR
- Erik M. van der Poel, Software Research Associates, Inc., Tokyo, Japan
- \End\Of\File\
- else
- echo "will not over write ./SelFile.man"
- fi
- if `test ! -s ./TODO`
- then
- echo "writing ./TODO"
- cat > ./TODO << '\End\Of\File\'
- * Variable number of lists (instead of 3), variable no. of entries, etc.
- Perhaps turn it into a widget?
-
- * Use X selections instead of cut buffer.
- This would enable clients to obtain pathnames through selections, and the
- client would not have to link in the XsraSelFile code.
-
- * Some clients may want to have more control over what happens in the
- XtAppNextEvent-XtDispatchEvent loop.
-
- * Another idea is a text widget with file name completion that can be embedded
- in an application. The completions would only be popped up when the user
- wants to see them.
-
- * Make another package for completion of not only filenames, but anything.
-
- * launching by eg double click
-
- * scrolling and selection through keyboard
-
- * if file to be read, it must exist
-
- * allow the user to specify the filename pattern e.g. *.c
-
- * customized buttons eg vi
-
- * directory stack option
-
- * search (RE)
-
- * file stat info
- \End\Of\File\
- else
- echo "will not over write ./TODO"
- fi
- if `test ! -s ./callback.c`
- then
- echo "writing ./callback.c"
- cat > ./callback.c << '\End\Of\File\'
- #ifndef lint
- static char rcsid[] = "$Header: callback.c,v 1.2 89/05/29 15:06:48 erik Exp $";
- #endif
-
- /*
- * Copyright 1989 Software Research Associates, Inc., Tokyo, Japan
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted, provided
- * that the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Software Research Associates not be used
- * in advertising or publicity pertaining to distribution of the software
- * without specific, written prior permission. Software Research Associates
- * makes no representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- * SOFTWARE RESEARCH ASSOCIATES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
- * IN NO EVENT SHALL SOFTWARE RESEARCH ASSOCIATES BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Erik M. van der Poel
- * Software Research Associates, Inc., Tokyo, Japan
- */
-
- #include <stdio.h>
- #include <X11/Intrinsic.h>
- #include <sys/stat.h>
-
- extern char *re_comp();
-
- static int
- match(exp, str)
- char *exp, *str;
- {
- char *err;
-
- if (err = re_comp(exp)) {
- (void) fprintf(stderr, "re_comp(\"%s\"): %s\n", exp, err);
- exit(1);
- }
-
- return re_exec(str);
- }
-
- int
- fileCheck(realFileName, shownFileName, fileStat)
- char *realFileName;
- char **shownFileName;
- struct stat *fileStat;
- {
- static char shown[256];
-
- switch (match("^..*\.plt$", realFileName)) {
- case 0:
- case -1:
- default:
- break;
- case 1:
- if ((fileStat->st_mode & S_IFMT) == S_IFREG) {
- (void) strcpy(shown, realFileName);
- *(rindex(shown, '.')) = 0;
- *shownFileName = shown;
- }
- return 1;
- }
-
- switch (match("^..*\.xy$", realFileName)) {
- case 0:
- case -1:
- default:
- break;
- case 1:
- return 0;
- }
-
- switch (match("^..*\.z$", realFileName)) {
- case 0:
- case -1:
- default:
- break;
- case 1:
- return 0;
- }
-
- return 1;
- }
- \End\Of\File\
- else
- echo "will not over write ./callback.c"
- fi
- if `test ! -s ./xdir.c`
- then
- echo "writing ./xdir.c"
- cat > ./xdir.c << '\End\Of\File\'
- #ifndef lint
- static char rcsid[] = "$Header: xdir.c,v 1.3 89/05/29 15:07:10 erik Exp $";
- #endif
-
- /*
- * Copyright 1989 Software Research Associates, Inc., Tokyo, Japan
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted, provided
- * that the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Software Research Associates not be used
- * in advertising or publicity pertaining to distribution of the software
- * without specific, written prior permission. Software Research Associates
- * makes no representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- * SOFTWARE RESEARCH ASSOCIATES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
- * IN NO EVENT SHALL SOFTWARE RESEARCH ASSOCIATES BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * Author: Erik M. van der Poel
- * Software Research Associates, Inc., Tokyo, Japan
- */
-
- #include <stdio.h>
- #include <X11/Intrinsic.h>
-
- main(argc, argv)
- int argc;
- char *argv[];
- {
- Widget XDir;
- char *path;
-
- XDir = XtInitialize(argv[0], "XDir", (XrmOptionDescRec *) NULL,
- (Cardinal) 0, (Cardinal *) &argc, argv);
-
- while (1) {
- if (XsraSelFile(
- XtDisplay(XDir),
- (unsigned char *) "Pathname to store in cut buffer:",
- (unsigned char *) "Cut",
- (unsigned char *) "Exit",
- (char *) NULL,
- (int (*)()) NULL,
- &path
- )) {
- break;
- }
- XStoreBytes(XtDisplay(XDir), path, strlen(path));
- XtFree(path);
- }
-
- return 0;
- }
- \End\Of\File\
- else
- echo "will not over write ./xdir.c"
- fi
- echo "Finished archive 1 of 2"
- exit
-