Annotation of 43BSDReno/contrib/mh/zotnet/tws/dtest.c, revision 1.1.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.