home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume4 / settz / tzdump.c < prev    next >
C/C++ Source or Header  |  1986-11-30  |  3KB  |  134 lines

  1. #
  2.  
  3. #include "stdio.h"
  4.  
  5. #ifdef OBJECTID
  6. static char    sccsid[] = "@(#)tzdump.c    2.1";
  7. #endif
  8.  
  9. #include "time.h"
  10. #include "tzfile.h"
  11.  
  12. #ifndef alloc_t
  13. #define alloc_t        unsigned
  14. #endif
  15.  
  16. #ifndef TRUE
  17. #define TRUE        1
  18. #define FALSE        0
  19. #endif
  20.  
  21. extern char *        asctime();
  22. extern char *        calloc();
  23. extern struct tm *    gmtime();
  24. extern char *        newctime();
  25. extern int        optind;
  26. extern char *        sprintf();
  27. extern long        time();
  28. extern char *        tz_abbr;
  29.  
  30. static int        longest;
  31.  
  32. main(argc, argv)
  33. int    argc;
  34. char *    argv[];
  35. {
  36.     register FILE *    fp;
  37.     register long *    tp;
  38.     register int    i, j, c;
  39.     register int    vflag;
  40.     long        now;
  41.     struct tzhead    h;
  42.     char        buf[BUFSIZ];
  43.  
  44.     vflag = 0;
  45.     while ((c = getopt(argc, argv, "v")) == 'v')
  46.         vflag = 1;
  47.     if (c != EOF || optind == argc - 1 && strcmp(argv[optind], "=") == 0) {
  48.         (void) fprintf(stderr, "%s: usage is %s [ -v ] zonename ...\n",
  49.             argv[0], argv[0]);
  50.         exit(1);
  51.     }
  52.     (void) time(&now);
  53.     longest = 0;
  54.     for (i = optind; i < argc; ++i)
  55.         if (strlen(argv[i]) > longest)
  56.             longest = strlen(argv[i]);
  57.     for (i = optind; i < argc; ++i) {
  58.         if (settz(argv[i]) != 0) {
  59.             (void) fprintf(stderr,
  60.                 "%s: wild result from settz(\"%s\")\n",
  61.                 argv[0], argv[i]);
  62.             exit(1);
  63.         }
  64.         show(argv[i], now, FALSE);
  65.         if (!vflag)
  66.             continue;
  67.         if (argv[i][0] == '/')
  68.             fp = fopen(argv[i], "r");
  69.         else {
  70.             j = strlen(TZDIR) + 1 + strlen(argv[i]) + 1;
  71.             if (j > sizeof buf) {
  72.                 (void) fprintf(stderr,
  73.                     "%s: wild long timezone name %s\n",
  74.                     argv[0], argv[i]);
  75.                 exit(1);
  76.             }
  77.             (void) sprintf(buf, "%s/%s", TZDIR, argv[i]);
  78.             fp = fopen(buf, "r");
  79.         }
  80.         if (fp == NULL) {
  81.             (void) fprintf(stderr,
  82.                 "%s: wild result opening %s file\n",
  83.                 argv[0], argv[i]);
  84.             exit(1);
  85.         }
  86.         if (fread((char *) &h, sizeof h, 1, fp) != 1) {
  87.             (void) fprintf(stderr,
  88.                 "%s: wild result reading %s file\n",
  89.                 argv[0], argv[i]);
  90.             exit(1);
  91.         }
  92.         tp = (long *) calloc((alloc_t) h.tzh_timecnt, sizeof *tp);
  93.         if (tp == NULL) {
  94.             (void) fprintf(stderr,
  95.                 "%s: wild result from calloc\n", argv[0]);
  96.             exit(1);
  97.         }
  98.         if (h.tzh_timecnt != 0)
  99.             if (fread((char *) tp, sizeof *tp, (int) h.tzh_timecnt,
  100.                 fp) != h.tzh_timecnt) {
  101.                 (void) fprintf(stderr,
  102.                     "%s: wild result reading %s file\n",
  103.                     argv[0], argv[i]);
  104.                 exit(1);
  105.             }
  106.         if (fclose(fp)) {
  107.             (void) fprintf(stderr,
  108.                 "%s: wild result closing %s file\n",
  109.                 argv[0], argv[i]);
  110.             exit(1);
  111.         }
  112.         for (j = 0; j < h.tzh_timecnt; ++j) {
  113.             show(argv[i], tp[j] - 1, TRUE);
  114.             show(argv[i], tp[j], TRUE);
  115.         }
  116.         free((char *) tp);
  117.     }
  118.     return 0;
  119. }
  120.  
  121. static
  122. show(zone, t, v)
  123. char *    zone;
  124. long    t;
  125. {
  126.     (void) printf("%-*s  ", longest, zone);
  127.     if (v)
  128.         (void) printf("%.24s GMT = ", asctime(gmtime(&t)));
  129.     (void) printf("%.24s", newctime(&t));
  130.     if (*tz_abbr != '\0')
  131.         (void) printf(" %s", tz_abbr);
  132.     (void) printf("\n");
  133. }
  134.