*/
#include <stdio.h>
+#include <stdlib.h> /* for qsort */
+#include "config.h"
#ifdef SEL_FILE_IGNORE_CASE
#include <ctype.h>
#include <X11/Xos.h>
#include <pwd.h>
-#include "selfile.h"
#include "xstat.h"
+#include "selfile.h"
#include <X11/Xaw/Scrollbar.h>
-#if defined(SVR4) || defined(SYSV) || defined(USG)
+#ifndef MAXPATHLEN
+#define MAXPATHLEN 1024
+#endif /* ndef MAXPATHLEN */
+
+#ifdef HAS_DIRENT_H
extern uid_t getuid();
-extern void qsort();
-#endif /* defined(SVR4) || defined(SYSV) || defined(USG) */
+#endif /* def HAS_DIRENT_H */
typedef struct {
char *name;
static int SFtwiddle = 0;
+void SFsetText(char *path);
+
int
SFchdir(path)
char *path;
if (strcmp(path, SFcurrentDir)) {
result = chdir(path);
if (!result) {
- (void) strcpy(SFcurrentDir, path);
+ (void) strncpy(SFcurrentDir, path, MAXPATHLEN);
}
}
return result;
}
-static
+static void
SFfree(i)
int i;
{
XtFree(dir->dir);
dir->dir = NULL;
+ return;
}
-static
+static void
SFstrdup(s1, s2)
char **s1;
char *s2;
{
*s1 = strcpy(XtMalloc((unsigned) (strlen(s2) + 1)), s2);
+ return;
}
-static
+static void
SFunreadableDir(dir)
SFDir *dir;
{
dir->entries[0].shown = dir->entries[0].real;
dir->nEntries = 1;
dir->nChars = strlen(cannotOpen);
+ return;
}
#ifdef SEL_FILE_IGNORE_CASE
}
#endif /* def SEL_FILE_IGNORE_CASE */
-static
+static void
SFreplaceText(dir, str)
SFDir *dir;
char *str;
}
SFtextChanged();
+ return;
}
static void
return 0;
}
-static
+static void
SFunselect()
{
SFDir *dir;
}
dir->beginSelection = -1;
dir->endSelection = -1;
+ return;
}
static int
return strcmp(p->name, q->name);
}
-static
+static void
SFgetHomeDirs()
{
struct passwd *pw;
SFhomeDir.beginSelection = -1 ;
SFhomeDir.endSelection = -1 ;
-#if defined(SVR4) || defined(SYSV) || defined(USG)
- qsort((char *) entries, (unsigned)i, sizeof(SFEntry), SFcompareEntries);
- qsort((char *) SFlogins, (unsigned)i, sizeof(SFLogin), SFcompareLogins);
-#else /* defined(SVR4) || defined(SYSV) || defined(USG) */
- qsort((char *) entries, i, sizeof(SFEntry), SFcompareEntries);
- qsort((char *) SFlogins, i, sizeof(SFLogin), SFcompareLogins);
-#endif /* defined(SVR4) || defined(SYSV) || defined(USG) */
+ qsort((char *) entries, (size_t)i, sizeof(SFEntry), SFcompareEntries);
+ qsort((char *) SFlogins, (size_t)i, sizeof(SFLogin), SFcompareLogins);
for (i--; i >= 0; i--) {
(void) strcat(entries[i].real, "/");
}
+ return;
}
static int
if (!strcmp(SFhomeDir.entries[i].real, begin)) {
*end = save;
SFstrdup(&theRest, end);
- (void) strcat(strcat(strcpy(SFcurrentPath,
- SFlogins[i].dir), "/"), theRest);
+ (void) strcat(strcat(strncpy(SFcurrentPath,SFlogins[i].dir,
+ MAXPATHLEN), "/"),
+ theRest);
XtFree(theRest);
SFsetText(SFcurrentPath);
SFtextChanged();
return 0;
}
+void
SFupdatePath()
{
static int alloc;
}
}
}
-}
-
-SFsetText(path)
- char *path;
-{
- XawTextBlock text;
-
- text.firstPos = 0;
- text.length = strlen(path);
- text.ptr = path;
- text.format = FMT8BIT;
-
- XawTextReplace(selFileField, 0, strlen(SFtextBuffer), &text);
- XawTextSetInsertionPoint(selFileField, strlen(SFtextBuffer));
+ return;
}
/* ARGSUSED */
int n;
XButtonPressedEvent *event;
{
+ int dir = 0;
+ if(event->button == Button4) dir = -2; // kludge to indicate relative motion
+ if(event->button == Button5) dir = -1;
+ if(dir) SFvSliderMovedCallback(w, n, dir); else
SFbuttonPressed = 1;
}
XButtonReleasedEvent *event;
{
SFDir *dir;
+ static int lastClick;
+ if(event->button == Button4 || event->button == Button5) return; // [HGM] mouse wheel does not select
SFbuttonPressed = 0;
if (SFcurrentInvert[n] != -1) {
dir,
dir->entries[dir->vOrigin + SFcurrentInvert[n]].shown
);
- SFmotionList(w, n, event);
+ SFmotionList(w, n, (XMotionEvent *) event);
+ if(lastClick == 256*n + SFcurrentInvert[n]) SFstatus = SEL_FILE_OK; // [HGM] double click implies OK
}
+ lastClick = 256*n + SFcurrentInvert[n];
}
static int
return 0;
}
+/* Return a single character describing what kind of file STATBUF is. */
+
+char
+SFstatChar (statBuf)
+ struct stat *statBuf;
+{
+ if (S_ISDIR (statBuf->st_mode)) {
+ return '/';
+ } else if (S_ISREG (statBuf->st_mode)) {
+ return S_ISXXX (statBuf->st_mode) ? '*' : ' ';
+#ifdef S_ISSOCK
+ } else if (S_ISSOCK (statBuf->st_mode)) {
+ return '=';
+#endif /* S_ISSOCK */
+ } else {
+ return ' ';
+ }
+}
+
static int
SFcheckFiles(dir)
SFDir *dir;
SFdirModTimerId = XtAppAddTimeOut(SFapp, (unsigned long) 1000,
SFdirModTimer, (XtPointer) NULL);
}
-
-/* Return a single character describing what kind of file STATBUF is. */
-
-char
-SFstatChar (statBuf)
- struct stat *statBuf;
-{
- if (S_ISDIR (statBuf->st_mode)) {
- return '/';
- } else if (S_ISREG (statBuf->st_mode)) {
- return S_ISXXX (statBuf->st_mode) ? '*' : ' ';
-#ifdef S_ISSOCK
- } else if (S_ISSOCK (statBuf->st_mode)) {
- return '=';
-#endif /* S_ISSOCK */
- } else {
- return ' ';
- }
-}