|
|
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);
}