|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T m
Length: 7909 (0x1ee5) Types: TextFile Names: »max.c«
└─⟦3d0c2be1b⟧ Bits:30001254 ISODE-5.0 Tape └─⟦eba4602b1⟧ »./isode-5.0.tar.Z« └─⟦d3ac74d73⟧ └─⟦this⟧ »isode-5.0/others/max/max.c« └─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0 └─⟦35176feda⟧ »EurOpenD22/isode/isode-6.tar.Z« └─⟦de7628f85⟧ └─⟦this⟧ »isode-6.0/others/max/max.c«
/* max.c - directory browser (X-based) */ #include "max.h" #include <sys/ioctl.h> /* \f DATA */ #define XtNmax myname #define XtCApp "App" #define XtNgeometry "geometry" #define XtCGeometry "Geometry" #define XtNadvance "advance" #define XtCAdvance "Advance" int advancesw = 0; int autoraisesw = 0; #define XtNdotFiles "dotFiles" #define XtCDotFiles "DotFiles" int dotfilesw = 0; #define XtNmaXefile "maXeFile" #define XtCMaXefile "MaXeFile" char *maxefilesw = 0; #define XtNmessageMode "messageMode" #define XtCMessageMode "MessageMode" int messagesw = 0; #define XtNreSelect "reSelect" #define XtCReSelect "ReSelect" int reselectsw = 0; #define XtNsort "sort" #define XtCSort "Sort" int sortsw = 0; char *myname = "max"; char *mycwd; char myhost[BUFSIZ]; char *myhome; char *myuser; Window xtermid = NULL; /* \f */ static int defaultFALSE = FALSE; static char *defaultNULL = NULL; static Resource resourceList[] = { XtNgeometry, XtCGeometry, XtRString, sizeof (char *), (caddr_t) &geometry, (caddr_t) &defaultNULL, XtNadvance, XtCAdvance, XtRBoolean, sizeof (int), (caddr_t) &advancesw, (caddr_t) &defaultFALSE, XtNautoRaise, XtCAutoRaise, XtRBoolean, sizeof (int), (caddr_t) &autoraisesw, (caddr_t) &defaultFALSE, XtNdotFiles, XtCDotFiles, XtRBoolean, sizeof (int), (caddr_t) &dotfilesw, (caddr_t) &defaultFALSE, XtNmaXefile, XtCMaXefile, XtRString, sizeof (char *), (caddr_t) &maxefilesw, (caddr_t) &defaultNULL, XtNmessageMode, XtCMessageMode, XtRBoolean, sizeof (int), (caddr_t) &messagesw, (caddr_t) &defaultFALSE, XtNreSelect, XtCReSelect, XtRBoolean, sizeof (int), (caddr_t) &reselectsw, (caddr_t) &defaultFALSE, XtNsort, XtCSort, XtRBoolean, sizeof (int), (caddr_t) &sortsw, (caddr_t) &defaultFALSE, }; static OptionDescRec optionList[] = { "=", XtNgeometry, XtoptionIsArg, (caddr_t) NULL, "-advance", XtNadvance, XtoptionNoArg, (caddr_t) "on", "+advance", XtNadvance, XtoptionNoArg, (caddr_t) "off", "-autoraise",XtNautoRaise, XtoptionNoArg, (caddr_t) "on", "+autoraise",XtNautoRaise, XtoptionNoArg, (caddr_t) "off", "-dotfiles",XtNdotFiles, XtoptionNoArg, (caddr_t) "on", "+dotfiles",XtNdotFiles, XtoptionNoArg, (caddr_t) "off", "-maxefile",XtNmaXefile, XtoptionSepArg, (caddr_t) NULL, "-msgmode", XtNmessageMode, XtoptionNoArg, (caddr_t) "on", "+msgmode", XtNmessageMode, XtoptionNoArg, (caddr_t) "off", "-sort", XtNsort, XtoptionNoArg, (caddr_t) "on", "+sort", XtNsort, XtoptionNoArg, (caddr_t) "off", "-reselect",XtNreSelect, XtoptionNoArg, (caddr_t) "on", "+reselect",XtNreSelect, XtoptionNoArg, (caddr_t) "off" }; void arginit (), XtGetUsersDataBase (); /* \f MAIN */ /* ARGSUSED */ main (argc, argv, envp) int argc; char **argv, **envp; { struct stat st; XEvent xevent; arginit (argc, argv); display_init (); for (;;) { do { XNextEvent (&xevent); (void) XtDispatchEvent (&xevent); } while (XPending ()); if (stat (curDI -> di_path, &st) != NOTOK && st.st_mtime > curDI -> di_mtime) CDfnx ((caddr_t) curDI, (unsigned long) 2); } } /* \f */ static void arginit (argc, argv) int argc; char **argv; { int n; register char *ap, *cp; char *dp; XtNameList names; XtClassList classes; if (myname = rindex (*argv, '/')) myname++; if (myname == NULL || *myname == NULL) myname = *argv; if ((ap = getenv ("WINDOWID")) && sscanf (ap, "%d", &n) == 1) xtermid = n; XtInitialize (); XtGetUsersDataBase (); XtParseCommand (optionList, XtNumber (optionList), myname, &argc, argv); dp = ""; for (argc--, argv++; argc > 0; argc--, argv++) { ap = *argv; if ((cp = rindex (ap, ':')) && sscanf (++cp, "%d", &n) == 1) { dp = ap; continue; } if (*ap == '-') adios (NULLCP, "unknown option \"%s\"", ap); adios (NULLCP, "usage: %s [options] =geometry host:display", myname); } if (*dp) (void) putenv ("DISPLAY", dp); if (XOpenDisplay ("") == NULL) adios (NULLCP, "unable to open display %s", XDisplayName ("")); (void) ioctl (dpyno (), FIOCLEX, NULLCP); XtGetResources (resourceList, XtNumber (resourceList), (ArgList) NULL, 0, RootWindow, XtNmax, XtCApp, &names, &classes); XtFreeNameList (names); XtFreeClassList (classes); if (maxefilesw) { if (*maxefilesw) (void) putenv ("MAXEFILE", maxefilesw); else (void) unputenv ("MAXEFILE"); } } /* \f */ static void XtGetUsersDataBase () { char *cp, buffer[MAXPATHLEN]; FILE *fp; ResourceDataBase rdb = NULL; mycwd = strdup (getwd (buffer) ? buffer : "."); (void) gethostname (myhost, sizeof myhost); if ((myhome = getenv ("HOME")) == NULL) myhome = "."; /* could do passwd search... */ myuser = getenv ("USER"); if ((cp = getenv ("MAXDEFAULTS")) != NULL) { if (*cp != '/' && *cp != '.') (void) sprintf (buffer, "%s/%s", myhome, cp); else (void) strcpy (buffer, cp); } else (void) sprintf (buffer, "%s/.maXdefaults", myhome); fp = fopen (buffer, "r"); if (fp == NULL) { (void) sprintf (buffer, "%s/.Xresources", myhome); fp = fopen (buffer, "r"); } if (fp == NULL) { (void) sprintf (buffer, "%s/.Xdefaults", myhome); fp = fopen (buffer, "r"); } if (fp != NULL) { XtGetDataBase (fp, &rdb); XtSetCurrentDataBase (rdb); (void) fclose (fp); } buildUF (rdb, &UFhead); if (UFhead.uf_forw == &UFhead) { (void) sprintf (buffer, "%s/maXdefaults", LIBDIR); if ((fp = fopen (buffer, "r")) != NULL) { XtGetDataBase (fp, &rdb); buildUF (rdb, &UFhead); XtFreeDataBase (rdb); (void) fclose (fp); } } } /* \f MISC */ extern char **environ; int putenv (name, value) register char *name, *value; { register int i; register char **ep, **nep, *cp; if ((cp = malloc ((unsigned) (strlen (name) + strlen (value) + 2))) == NULL) return 1; (void) sprintf (cp, "%s=%s", name, value); for (ep = environ, i = 0; *ep; ep++, i++) if (nvmatch (name, *ep)) { *ep = cp; return 0; } if ((nep = (char **) malloc ((unsigned) ((i + 2) * sizeof *nep))) == NULL) return 1; for (ep = environ, i = 0; *ep; nep[i++] = *ep++) continue; nep[i++] = cp; nep[i] = NULL; environ = nep; return 0; } /* \f */ int unputenv (name) char *name; { register char **ep, **nep; for (ep = environ; *ep; ep++) if (nvmatch (name, *ep)) break; if (*ep == NULL) return 1; for (nep = ep + 1; *nep; nep++) continue; *ep = *--nep; *nep = NULL; return 0; } /* \f */ static nvmatch (s1, s2) register char *s1, *s2; { while (*s1 == *s2++) if (*s1++ == '=') return 1; return (*s1 == '\0' && *--s2 == '='); } /* \f */ char *strdup (s) char *s; { char *p; if ((p = malloc ((unsigned) (strlen (s) + 1))) == NULL) adios (NULLCP, "out of memory"); (void) strcpy (p, s); return p; } /* \f ADIOS */ /* VARARGS2 */ void adios (what, fmt, a, b, c, d, e, f, g, h, i, j) char *what, *fmt, *a, *b, *c, *d, *e, *f, *g, *h, *i, *j; { advise (what, fmt, a, b, c, d, e, f, g, h, i, j); _exit (1); } /* \f */ /* VARARGS2 */ void advise (what, fmt, a, b, c, d, e, f, g, h, i, j) char *what, *fmt, *a, *b, *c, *d, *e, *f, *g, *h, *i, *j; { (void) fflush (stdout); fprintf (stderr, "%s: ", myname); fprintf (stderr, fmt, a, b, c, d, e, f, g, h, i, j); if (what) (void) fputc (' ', stderr), perror (what); else (void) fputc ('\n', stderr); (void) fflush (stderr); }