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

unix.superglobalmegacorp.com

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