Interdata732/usr/source/wgong/tc.c

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

/*
 * Tape commands
 */

char	*tname	"/dev/rmmt0";
#define tdrive	tname[9]

int	tcom[3];

extern	errno;

char usage[]	"Usage: tc [-drive] command [count]\nCommands are:\n";
char *clist[] {
	"ff	Forward Space File",
	"bf	Back Space File",
	"wf	Write File Mark",
	"fr	Forward Space Record",
	"br	Back Space Record",
	"rw	Rewind",
	0
};

struct opt {
	char	*name;
	int	value;
} optab[] {
	"ff",		0,
	"bf",		1,
	"wf",		3,
	"weof",		3,
	"fr",		4,
	"br",		5,
	"rw",		7,
	"rew",		7,
	"rewind",		7,
	0
};
main(argc, argv)
char **argv;
{
	register tf;
	register count;
	register char **pp;

	if (argc > 1 && argv[1][0] == '-') {
		tdrive = argv[1][1];
		argc--;
		argv++;
	}
	if (argc < 2 || (tcom[0] = lookup(argv[1])) < 0) {
		printf(usage);
		for (pp = clist; *pp; pp++)
			printf("\t%s\n", *pp);
		return;
	}

	if ((tf = open(tname, 0)) < 0) {
		printf("Can't open %s\n", tname);
		exit(1);
	}
	if (argc < 3 || tcom[0] == 7 ||
	    (count = atoi(argv[2])) <= 0)
		count = 1;

	while (count--) {
		stty(tf, tcom);
		if (errno) {
			perror("Stty");
			exit(1);
		}
	}
}

lookup(arg)
register char *arg;
{
	register struct opt *op;
	register char *name, *p;

	if (*arg == '-')
		arg++;

	for (op = optab; name = op->name; op++) {
		for (p = arg; *p == *name; p++)
			if (*name++ == 0)
				return(op->value);
	}
	return(-1);
}