xref: /csrg-svn/usr.bin/time/time.c (revision 1370)
1*1370Sbill static	char *sccsid = "@(#)time.c	4.2 (Berkeley) 10/10/80";
21127Sbill /* time command */
31127Sbill 
41127Sbill #include <stdio.h>
51127Sbill #include <signal.h>
61127Sbill #include <sys/types.h>
71127Sbill #include <sys/times.h>
81127Sbill 
91127Sbill extern int errno;
101127Sbill extern char *sys_errlist[];
111127Sbill 
121127Sbill main(argc, argv)
131127Sbill char **argv;
141127Sbill {
151127Sbill 	struct tms buffer, obuffer;
161127Sbill 	int status;
171127Sbill 	register p;
181127Sbill 	time_t before, after;
191127Sbill 
201127Sbill 	if(argc<=1)
211127Sbill 		exit(0);
221127Sbill 	time(&before);
231127Sbill 	p = fork();
241127Sbill 	if(p == -1) {
251127Sbill 		fprintf(stderr, "Try again.\n");
261127Sbill 		exit(1);
271127Sbill 	}
281127Sbill 	if(p == 0) {
291127Sbill 		execvp(argv[1], &argv[1]);
301127Sbill 		fprintf(stderr, "%s: %s\n", argv[1], sys_errlist[errno]);
311127Sbill 		exit(1);
321127Sbill 	}
331127Sbill 	signal(SIGINT, SIG_IGN);
341127Sbill 	signal(SIGQUIT, SIG_IGN);
351127Sbill 	times(&obuffer);
361127Sbill 	while(wait(&status) != p)
371127Sbill 		times(&obuffer);
381127Sbill 	time(&after);
391127Sbill 	if((status&0377) != 0)
401127Sbill 		fprintf(stderr,"Command terminated abnormally.\n");
411127Sbill 	times(&buffer);
421127Sbill 	printt("real", (after-before) * 60);
431127Sbill 	printt("user", buffer.tms_cutime - obuffer.tms_cutime);
441127Sbill 	printt("sys ", buffer.tms_cstime - obuffer.tms_cstime);
45*1370Sbill 	fprintf(stderr, "\n");
461127Sbill 	exit(status>>8);
471127Sbill }
481127Sbill 
491127Sbill char quant[] = { 6, 10, 10, 6, 10, 6, 10, 10, 10 };
501127Sbill char *pad  = "000      ";
511127Sbill char *sep  = "\0\0.\0:\0:\0\0";
521127Sbill char *nsep = "\0\0.\0 \0 \0\0";
531127Sbill 
541127Sbill printt(s, a)
551127Sbill char *s;
561127Sbill long a;
571127Sbill {
581127Sbill 	char digit[9];
591127Sbill 	register i;
601127Sbill 	char c;
611127Sbill 	int nonzero;
621127Sbill 
631127Sbill 	for(i=0; i<9; i++) {
641127Sbill 		digit[i] = a % quant[i];
651127Sbill 		a /= quant[i];
661127Sbill 	}
671127Sbill 	nonzero = 0;
681127Sbill 	while(--i>0) {
691127Sbill 		c = digit[i]!=0 ? digit[i]+'0':
701127Sbill 		    nonzero ? '0':
711127Sbill 		    pad[i];
721127Sbill 		if (c)
731127Sbill 		fprintf(stderr,"%c",c);
741127Sbill 		nonzero |= digit[i];
751127Sbill 		c = nonzero?sep[i]:nsep[i];
761127Sbill 		if (c)
771127Sbill 		fprintf(stderr,"%c",c);
781127Sbill 	}
79*1370Sbill 	fprintf(stderr," %s ",s);
801127Sbill }
81