Annotation of coherent/b/bin/time.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * Time command
        !             3:  */
        !             4: 
        !             5: #include <stdio.h>
        !             6: #include <sys/timeb.h>
        !             7: #include <sys/times.h>
        !             8: #include <signal.h>
        !             9: #include <sys/machine.h>
        !            10: 
        !            11: #define        MILLI   1000            /* Parts of a second */
        !            12: 
        !            13: extern char    *signame[];
        !            14: 
        !            15: main(argc, argv)
        !            16: char *argv[];
        !            17: {
        !            18:        if (argc <= 1) {
        !            19:                exit(0);
        !            20:        }
        !            21:        dotime(argc-1, argv+1);
        !            22:        exit(0);
        !            23: }
        !            24: 
        !            25: dotime(argc, argv)
        !            26: char *argv[];
        !            27: {
        !            28:        int pid, status;
        !            29:        register n;
        !            30:        struct timeb before, after;
        !            31:        struct tbuffer tb;
        !            32:        long tdiff;
        !            33:        int tpart;
        !            34:        char *command = argv[0];
        !            35: 
        !            36:        ftime(&before);
        !            37:        if ((pid = fork()) < 0) {
        !            38:                eprint("Try again.\n");
        !            39:                exit(1);
        !            40:        }
        !            41:        if (pid) {
        !            42:                signal(SIGHUP, SIG_IGN);
        !            43:                signal(SIGINT, SIG_IGN);
        !            44:                signal(SIGQUIT, SIG_IGN);
        !            45:                signal(SIGTERM, SIG_IGN);
        !            46:                while (wait(&status) >= 0)
        !            47:                        if (n = status&0177) {
        !            48:                                if (n <= NSIG)
        !            49:                                        eprint("%s", signame[n]);
        !            50:                                else
        !            51:                                        eprint("sig. %d", n);
        !            52:                                if (status & 0200)
        !            53:                                        eprint(" -- core dumped");
        !            54:                                fprintf(stderr ,"\n");
        !            55:                        }
        !            56:                ftime(&after);
        !            57:                times(&tb);
        !            58:                tdiff = after.time-before.time;
        !            59:                tpart = after.millitm - before.millitm;
        !            60:                if (tpart < 0) {
        !            61:                        tpart += MILLI;
        !            62:                        tdiff--;
        !            63:                }
        !            64:                eprint("\n");
        !            65:                output("Real:", tdiff, (tpart+MILLI/20)/(MILLI/10));
        !            66:                tpart = tb.tb_cutime%HZ;
        !            67:                output("User:", tb.tb_cutime/HZ, (tpart+HZ/20)/(HZ/10));
        !            68:                tpart = tb.tb_cstime%HZ;
        !            69:                output("Sys: ", tb.tb_cstime/HZ, (tpart+HZ/20)/(HZ/10));
        !            70:        } else {
        !            71:                execvp(command, argv);
        !            72:                eprint("%s: not found\n", command);
        !            73:                exit(1);
        !            74:        }
        !            75:        exit(n);
        !            76: }
        !            77: 
        !            78: /*
        !            79:  * Format the output for a time entry.
        !            80:  */
        !            81: output(name, tsec, tenths)
        !            82: char *name;
        !            83: long tsec;
        !            84: {
        !            85:        long hours;
        !            86:        int mins;
        !            87:        int secs;
        !            88: 
        !            89:        /*
        !            90:         * Fudge for sloppy rounding above
        !            91:         */
        !            92:        if (tenths > 9) {
        !            93:                tenths = 0;
        !            94:                tsec++;
        !            95:        }
        !            96:        hours = tsec/(60*60);
        !            97:        tsec %= (60*60);
        !            98:        mins = tsec/60;
        !            99:        secs = tsec%60;
        !           100:        eprint("%s", name);
        !           101:        if (hours != 0)
        !           102:                eprint("%5d:%02d:%02d", (int)hours, mins, secs);
        !           103:        else {
        !           104:                eprint("      ");
        !           105:                if (mins)
        !           106:                        eprint("%2d:%02d", mins, secs);
        !           107:                else
        !           108:                        eprint("   %2d", secs);
        !           109:        }
        !           110:        eprint(".%d\n", tenths);
        !           111: }
        !           112: 
        !           113: /* VARARGS */
        !           114: eprint(x)
        !           115: {
        !           116:        fprintf(stderr, "%r", &x);
        !           117: }

unix.superglobalmegacorp.com

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