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