Annotation of 3BSD/cmd/time.c, revision 1.1.1.1

1.1       root        1: /* time command */
                      2: 
                      3: #include <stdio.h>
                      4: #include <signal.h>
                      5: #include <sys/types.h>
                      6: #include <sys/times.h>
                      7: 
                      8: extern int errno;
                      9: extern char *sys_errlist[];
                     10: 
                     11: main(argc, argv)
                     12: char **argv;
                     13: {
                     14:        struct tms buffer, obuffer;
                     15:        int status;
                     16:        register p;
                     17:        time_t before, after;
                     18: 
                     19:        if(argc<=1)
                     20:                exit(0);
                     21:        time(&before);
                     22:        p = fork();
                     23:        if(p == -1) {
                     24:                fprintf(stderr, "Try again.\n");
                     25:                exit(1);
                     26:        }
                     27:        if(p == 0) {
                     28:                execvp(argv[1], &argv[1]);
                     29:                fprintf(stderr, "%s: %s\n", argv[1], sys_errlist[errno]);
                     30:                exit(1);
                     31:        }
                     32:        signal(SIGINT, SIG_IGN);
                     33:        signal(SIGQUIT, SIG_IGN);
                     34:        times(&obuffer);
                     35:        while(wait(&status) != p)
                     36:                times(&obuffer);
                     37:        time(&after);
                     38:        if((status&0377) != 0)
                     39:                fprintf(stderr,"Command terminated abnormally.\n");
                     40:        times(&buffer);
                     41:        fprintf(stderr,"\n");
                     42:        printt("real", (after-before) * 60);
                     43:        printt("user", buffer.tms_cutime - obuffer.tms_cutime);
                     44:        printt("sys ", buffer.tms_cstime - obuffer.tms_cstime);
                     45:        exit(status>>8);
                     46: }
                     47: 
                     48: char quant[] = { 6, 10, 10, 6, 10, 6, 10, 10, 10 };
                     49: char *pad  = "000      ";
                     50: char *sep  = "\0\0.\0:\0:\0\0";
                     51: char *nsep = "\0\0.\0 \0 \0\0";
                     52: 
                     53: printt(s, a)
                     54: char *s;
                     55: long a;
                     56: {
                     57:        char digit[9];
                     58:        register i;
                     59:        char c;
                     60:        int nonzero;
                     61: 
                     62:        for(i=0; i<9; i++) {
                     63:                digit[i] = a % quant[i];
                     64:                a /= quant[i];
                     65:        }
                     66:        fprintf(stderr,s);
                     67:        nonzero = 0;
                     68:        while(--i>0) {
                     69:                c = digit[i]!=0 ? digit[i]+'0':
                     70:                    nonzero ? '0':
                     71:                    pad[i];
                     72:                fprintf(stderr,"%c",c);
                     73:                nonzero |= digit[i];
                     74:                c = nonzero?sep[i]:nsep[i];
                     75:                fprintf(stderr,"%c",c);
                     76:        }
                     77:        fprintf(stderr,"\n");
                     78: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.