2BSD/src/net/nsh.c

Compare this file to the similar file:
Show the results in this format:

/* Copyright (c) 1979 Regents of the University of California */
# include "defs.h"
/*
	count is the # of arguments (= argc) allowed.
	a count of 0 turns off the command */
/* should get route # of Cory RCS lpr */
struct {
	char *app;
	char count;
	char *full;
	char *full1;
	} st[] = {
	"finger",	20,	"/usr/new/finger",	"/usr/bin/finger",
	"lpq",		20,	"/usr/bin/lpq",		"/bin/lpq",
	"mmail",	20,	"/usr/net/bin/mmail",	"/usr/net/bin/mmail",
	"mwrite",	20,	"/usr/net/bin/mwrite",	"/usr/net/bin/mwrite",
	"netq",		20,	"/usr/bin/netq",	"/usr/new/netq",
	"ps",		20,	"/bin/ps",		"/usr/bin/ps",
	"pstat",	20,	"/usr/bin/pstat",	"/bin/pstat",
	"rcs",		20,	"/usr/bin/rcs",		"/bin/rcs",
	"rcslog",	1,	"/usr/bin/rcslog",	"/bin/rcslog",
	"rcsq",		20,	"/usr/bin/rcsq",	"/bin/rcsq",
	"trq",		20,	"/usr/bin/trq",		"/bin/trq",
	"w",		20,	"/usr/bin/w",		"/bin/w",
	"where",	20,	"/usr/bin/where",	"/bin/where",
	"who",		20,	"/bin/who",		"/usr/bin/who",
	"whom",		20,	"/usr/new/whom",	"/usr/bin/whom",
	"write",	20,	"/usr/bin/write",	"/bin/write",
	"yank",		20,	"/usr/new/yank",	"/usr/bin/yank",
	0, 		0,		0,		0
	};
/* nsh -c cmd */
main(argc,argv)
  char **argv; {
	char *s, buf[500];
	int i, flg = 0;
	if(argc != 3)exit(8);
	s = argv[2];
	while(*s && *s != ' ')s++;
	if(*s == ' ')flg++;
	*s = 0;
	if((i = mlookup(argv[2])) >= 0){
		if(st[i].count == 0)exit(9);
		if(stat(st[i].full,buf) >= 0)
			strcpy(buf,st[i].full);
		else strcpy(buf,st[i].full1);
		if(flg && st[i].count > 1){  /* some cmds don't allow parms */
			*s = ' ';
			strcat(buf,s);
			}
		/*
		fprintf(stderr,"%s\n",buf);
		*/
		execl(Bsh,"sh","-c",buf,0);
		}
	exit(10);
	}
mlookup(s)
  char *s; {
	int i;
	for(i = 0; st[i].app; i++)
		if(strcmp(st[i].app,s) == 0 || strcmp(st[i].full,s) == 0
		 || strcmp(st[i].full1,s) == 0)return(i);
	return(-1);
	}