Interdata732/usr/source/cmds/time.c

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

/*
 *		time command
 */

char command[128];
int  args[64];

struct {
	int parenttime[2];
	int usertime[2];
	int systime[2];
} tbuf;

main(argc, argv)
char **argv;
{
	int tbefore[2], tafter[2];
	register i, pid, c;
	register char *p;
	extern fout;

	fout = 2;

	if (argc <= 1)
		exit(1);
	for (i=0; i<9; i++)
		command[i] = "/usr/bin/"[i];
	for (p = *++argv; c = *p; p++)
		if (i < 127)
			command[i++] = c;
	for (i=0; --argc; i++)
		if (i < 63)
			args[i] = *argv++;

	time(tbefore);
	if ((pid = fork()) == 0) {
		execv(command+9, args);
		execv(command+4, args);
		execv(command, args);
		printf("%s not found\n", command+9);
		exit(1);
	}
	signal(2, 1);
	while(wait(0) != pid);
	time(tafter);
	signal(2,0);

	times(&tbuf);
	i = tafter[1] - tbefore[1];
	if (i < 0)
		i = ~i + 1;
	putchar('\n');
	ptime("Real", i * 100);
	ptime("Cpu ", tbuf.usertime[1]);
	ptime("Sys ", tbuf.systime[1]);
}

ptime(label, clicks)
char *label;
{
	register t;

	t = clicks;
	printf("%s", label);
	pdec(' ', t/(3600*100));
	t =% 3600*100;
	pdec(':', t/(60*100));
	t =% 60*100;
	pdec(':', t/100);
	t =% 100;
	pdec('.', t);
	putchar('\n');
}

pdec(ch, n)
{
	putchar(ch);
	putchar(n/10 + '0');
	putchar(n%10 + '0');
}