Interdata_v6/usr/source/cmds/time.c
/*
* 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');
}