2.9BSD/usr/src/ucb/vsh/main.c
#include "hd.h"
#include "mydir.h"
#include <signal.h>
/* Extract data about environment */
#define ENV_COUNT 3
char *env_defalt [ENV_COUNT] = /* Defaults */
{"/bin/csh", "/", "unknown"};
char *env_name [ENV_COUNT] = /* Names */
{"SHELL", "HOME", "TERM"};
char *envshell, *envhome, *envterm;
char **env_dest [ENV_COUNT] = /* Place stored */
{&envshell, &envhome, &envterm};
main () {
/* Initialize everything, then run. */
int i;
extern char * mygetenv ();
extern leave ();
comein ();
for (i = 0; i < ENV_COUNT; i++)
*env_dest [i] = mygetenv (env_name [i], env_default [i]);
signal (SIGINT, leave);
tty_init (); curs_init ();
erase (); printf ("Vsh %0.1f\n", VERSION);
cmdldrc ();
wdfile = -1;
if (curdir () || enterdir (DOT) == FAILURE) leave ();
tty_push (RAWMODE);
process ();
}
/* Return environment value of pstr. If none found, or the string
length is too long, the default returned */
char *mygetenv
(pstr, def)
char *pstr, *def; {
char *rstr; /* return value */
char *getenv ();
rstr = getenv (pstr);
if ((rstr == NULL) || (strlen (rstr) >= STRMAX)) return def;
else return rstr;
}