DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T m

⟦04695f570⟧ TextFile

    Length: 7909 (0x1ee5)
    Types: TextFile
    Names: »max.c«

Derivation

└─⟦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« 

TextFile

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