Annotation of 43BSDReno/contrib/mh/zotnet/tws/dtest.c, revision 1.1

1.1     ! root        1: /* date.c */
        !             2: 
        !             3: #include "tws.h"
        !             4: #include <stdio.h>
        !             5: #include <strings.h>
        !             6: #include <sys/time.h>
        !             7: 
        !             8: char *dates[] = {
        !             9:        "11 MAR 1980 1559-PST",
        !            10:        "12 March 1980 11:41-EST",
        !            11:        "10 Feb 1982 11:22:30-PST",
        !            12:        "85/10/29 14:44:13",
        !            13:        "2 Dec 1986 1103-PST (Tuesday)",
        !            14:        "27-Dec-1986 2323",
        !            15:        "06-Oct-88 00:57",
        !            16:        "12/02/88 12:36:12 EST",
        !            17:        "Mon, 05 Dec 88 22:17:19 PST",
        !            18:        "Fri, 16 Dec 88 18:49:09 PST",
        !            19:        "5  Jan 89 11:45 +0100",
        !            20:        "Fri Jan  6 12:46:18 PST 1989",
        !            21:        "Tue Jan 24 07:41:26 1989 CST",
        !            22:        "2/3/89 6:33 AM",
        !            23:        "13 February 1989, 10:02:09 EST",
        !            24:        "Tue Feb 14 13:05:06 PST 1989",
        !            25:        "14 Feb 89 17:17:23 GMT",
        !            26:        "01 Apr 89 00:00:01 GMT",
        !            27:        "10 Jul 89 15:24",
        !            28:        "Tue Nov 28 16:31:28 1989",
        !            29:        "Wed Nov 29 14:54:37 -0800 1989",
        !            30:        "Wed, 22 Nov 89 22:29:04 JST",
        !            31:        0
        !            32: };
        !            33: 
        !            34: static int lflag = 0;          /* long output, decode tw_flags */
        !            35: static int tflag = 0;          /* run test on standard test dates */
        !            36: static int bflag = 0;          /* run benchmark on standard test dates */
        !            37: 
        !            38: static char *argv0 = "?";
        !            39: 
        !            40: /* ARGSUSED */
        !            41: void
        !            42: main (argc, argv)
        !            43: int argc;
        !            44: char **argv;
        !            45: {
        !            46:        register char *cp, **p;
        !            47:        FILE *f = stdin;
        !            48:        char buf[1024];
        !            49: 
        !            50:        if (argv0 = rindex(argv[0], '/'))
        !            51:                ++argv0;
        !            52:        else
        !            53:                argv0 = argv[0];
        !            54:        argc--;
        !            55:        argv++;
        !            56:        while (argc > 0 && *argv[0] == '-') {
        !            57:                if (strcmp("-l", argv[0]) == 0)
        !            58:                        lflag = 1;
        !            59:                else if (strcmp("-t", argv[0]) == 0)
        !            60:                        tflag = 1;
        !            61:                else if (strcmp("-b", argv[0]) == 0)
        !            62:                        bflag = 1;
        !            63:                else
        !            64:                        break;          /* force "usage" error */
        !            65:                argc--;
        !            66:                argv++;
        !            67:        }
        !            68:        if (argc > 1) {
        !            69:                fprintf(stderr, "usage: %s [-l] [file]\n", argv0);
        !            70:                exit(1);
        !            71:        }
        !            72:        if (argc == 1 && (f = fopen(argv[0], "r")) == 0) {
        !            73:                perror(argv[0]);
        !            74:                exit(1);
        !            75:        }
        !            76:        if (bflag) {
        !            77:                /* Benchmark standard dates */
        !            78:                dobench();
        !            79:                exit(0);
        !            80:        }
        !            81:        if (tflag) {
        !            82:                /* Test standard dates */
        !            83:                for (p = dates; *p; p++)
        !            84:                        doit(*p);
        !            85:                exit(0);
        !            86:        }
        !            87:        while (fgets(buf, sizeof(buf), f)) {
        !            88:                cp = buf + strlen(buf) - 1;
        !            89:                if (cp >= buf && *cp == '\n')
        !            90:                        *cp = '\0';
        !            91:                doit(buf);
        !            92:        }
        !            93:        exit (0);
        !            94: }
        !            95: 
        !            96: doit(buf)
        !            97:        register char *buf;
        !            98: {
        !            99:        register char *cp, *d;
        !           100:        register struct tws *t;
        !           101:        register int i;
        !           102: 
        !           103:        t = dparsetime(buf);
        !           104:        i = 30;
        !           105:        if (t) {
        !           106:                d = dasctime(t);
        !           107:                if ((t->tw_flags & TW_SZONE) == TW_SZNIL)
        !           108:                        i -= 4;
        !           109:                else if (cp = rindex(d, ' '))
        !           110:                        i -= 4 - strlen(cp);
        !           111:        } else
        !           112:                d = "<couldn't parse>";
        !           113:        printf ("%*s\t\"%s\"", i, d, buf);
        !           114:        if (lflag && t) {
        !           115:                i = 0;
        !           116:                if ((t->tw_flags & TW_SDAY) == TW_SEXP) {
        !           117:                        printf(" (E-day");
        !           118:                        i++;
        !           119:                }
        !           120:                if ((t->tw_flags & TW_SDAY) == TW_SIMP) {
        !           121:                        if (i == 0)
        !           122:                                printf(" (");
        !           123:                        else if (i > 0)
        !           124:                                printf(", ");
        !           125:                        printf("I-day");
        !           126:                        i++;
        !           127:                }
        !           128:                if ((t->tw_flags & TW_SZONE) == TW_SZEXP) {
        !           129:                        if (i == 0)
        !           130:                                printf(" (");
        !           131:                        else if (i > 0)
        !           132:                                printf(", ");
        !           133:                        printf("E-zone");
        !           134:                        i++;
        !           135:                }
        !           136:                if (i > 0)
        !           137:                        putchar(')');
        !           138:        }
        !           139:        putchar('\n');
        !           140: }
        !           141: 
        !           142: dobench()
        !           143: {
        !           144:        register char **p;
        !           145:        register int n, i;
        !           146:        struct timeval t1, t2;
        !           147:        long ms;
        !           148: 
        !           149:        /* Pagefault things in (this may make timings more repeatable) */
        !           150:        for (p = dates; *p; p++)
        !           151:                (void) dparsetime(*p);
        !           152: 
        !           153:        /* Bench-ho! */
        !           154:        n = 0;
        !           155:        gettimeofday(&t1, 0);
        !           156:        for (i = 1000; i > 0; --i)
        !           157:                for (p = dates; *p; p++) {
        !           158:                        ++n;
        !           159:                        if (dparsetime(*p) == 0) {
        !           160:                                fprintf(stderr, "%s: Lose (parse %d)\n",
        !           161:                                    argv0, n);
        !           162:                                exit(1);
        !           163:                        }
        !           164:                }
        !           165:        gettimeofday(&t2, 0);
        !           166:        ms = ((t2.tv_sec * 1000) + t2.tv_usec / 1000) -
        !           167:            ((t1.tv_sec * 1000) + t1.tv_usec / 1000);
        !           168:        printf("%s: %d parses took %.2f seconds (%.2f per second)\n",
        !           169:            argv0, n, (float)ms / 1000, (float)(n * 1000) / ms);
        !           170: }
        !           171: 
        !           172: /* XXX need to use varargs */
        !           173: void
        !           174: adios(what, fmt, a, b, c, d, e, f)
        !           175:        char *what, *fmt, *a, *b, *c, *d, *e, *f;
        !           176: {
        !           177:        if (what)
        !           178:                fprintf(stderr, "%s: ", what);
        !           179:        fprintf(stderr, fmt, a, b, c, d, e, f);
        !           180:        exit(1);
        !           181: }
        !           182: 

unix.superglobalmegacorp.com

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