home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Professional / OS2PRO194.ISO / os2 / prgramer / unix / emx / test / timetest.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-11-26  |  3.6 KB  |  140 lines

  1. /* timetest.c (emx+gcc) */
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <time.h>
  7. #include <ctype.h>
  8. #include <sys/types.h>
  9. #include <sys/stat.h>
  10. #include <io.h>
  11. #include <getopt.h>
  12.  
  13. static char *pmode (int m)
  14. {
  15.   static char buf[16], *p;
  16.   int i, n;
  17.  
  18.   switch (m & S_IFMT)
  19.     {
  20.     case S_IFREG:
  21.       buf[0] = ' ';
  22.       break;
  23.     case S_IFDIR:
  24.       buf[0] = 'd';
  25.       break;
  26.     default:
  27.       buf[0] = '?';
  28.       break;
  29.     }
  30.   p = buf+1; n = m & 0777;
  31.   for (i = 0; i < 3; ++i)
  32.     {
  33.       *p++ = (n & S_IREAD  ? 'r' : '-');
  34.       *p++ = (n & S_IWRITE ? 'w' : '-');
  35.       *p++ = (n & S_IEXEC  ? 'x' : '-');
  36.       n <<= 3;
  37.     }
  38.   buf[10] = 0;
  39.   return (buf);
  40. }
  41.  
  42. int main (int argc, char *argv[])
  43. {
  44.   time_t t;
  45.   time_t zero;
  46.   int c, i, fmt_flag, inp_flag, sleep_sec, sleep_millisec;
  47.   struct stat s;
  48.   struct tm *tm_p;
  49.   char fs[16], fmt[256], buf[256], *p;
  50.   size_t size;
  51.  
  52.   fmt_flag = 0; inp_flag = 0; sleep_sec = -1; sleep_millisec = -1;
  53.   while ((c = getopt (argc, argv, "fim:s:")) != EOF)
  54.     switch (c)
  55.       {
  56.       case 'f':
  57.         fmt_flag = 1;
  58.         break;
  59.       case 'i':
  60.         inp_flag = 1;
  61.         break;
  62.       case 'm':
  63.         sleep_millisec = atoi (optarg);
  64.         break;
  65.       case 's':
  66.         sleep_sec = atoi (optarg);
  67.         break;
  68.       }
  69.   for (i = optind; i < argc; ++i)
  70.     {
  71.       if (isascii (argv[i][0]) && isalpha (argv[i][0])
  72.           && argv[i][1] == ':' && argv[i][2] == 0)
  73.         {
  74.           if (_filesys (argv[i], fs, sizeof (fs)) != 0)
  75.             perror (argv[i]);
  76.           else
  77.             printf ("File-system driver=%s\n", fs);
  78.         }
  79.       else if (stat (argv[i], &s) == 0)
  80.         {
  81.           printf ("%s:\n", argv[i]);
  82.           printf ("  dev=%d ino=%d mode=0%o \"%s\" nlink=%d\n",
  83.                   (int)s.st_dev, (int)s.st_ino, (int)s.st_mode,
  84.                   pmode ((int)s.st_mode), (int)s.st_nlink);
  85.           printf ("  uid=%d gid=%d rdev=%d size=%d\n",
  86.                   (int)s.st_uid, (int)s.st_gid, (int)s.st_rdev,
  87.                   (int)s.st_size);
  88.           printf ("  atime=%s", ctime (&s.st_atime));
  89.           printf ("  mtime=%s", ctime (&s.st_mtime));
  90.           printf ("  ctime=%s", ctime (&s.st_ctime));
  91.           printf ("  attr=0x%.2x\n", s.st_attr);
  92.         }
  93.       else
  94.         perror (argv[i]);
  95.     }
  96.   if (sleep_sec >= 0)
  97.     sleep (sleep_sec);
  98.   if (sleep_millisec >= 0)
  99.     _sleep2 (sleep_millisec);
  100.   zero = 0;
  101.   time (&t);
  102.   printf ("timezone  = %ld\n", timezone);
  103.   printf ("daylight  = %d\n", daylight);
  104.   printf ("tzname[0] = %s\n", tzname[0]);
  105.   printf ("tzname[1] = %s\n", tzname[1]);
  106.   printf ("time      = %ld\n", (long)t);
  107.   printf ("clock     = %ld\n", (long)clock ());
  108.   tm_p = gmtime (&zero);
  109.   printf ("epoch:      %s", asctime (tm_p));
  110.   tm_p = gmtime (&t);
  111.   printf ("GMT:        %s", asctime (tm_p));
  112.   printf ("ctime     = %s", ctime (&t));
  113.   if (inp_flag)
  114.     {
  115.       printf ("Time: ");
  116.       if (fgets (buf, sizeof (buf), stdin) == NULL)
  117.         return (0);
  118.       t = strtoul (buf, NULL, 10);
  119.       printf ("ctime = %s", ctime (&t));
  120.     }
  121.   if (fmt_flag)
  122.     {
  123.       tm_p = localtime (&t);
  124.       for (;;)
  125.         {
  126.           printf ("Format: ");
  127.           if (fgets (fmt, sizeof (fmt), stdin) == NULL)
  128.             return (0);
  129.           p = strchr (fmt, '\n');
  130.           if (p != NULL) *p = 0;
  131.           size = strftime (buf, sizeof (buf), fmt, tm_p);
  132.           if (size == 0)
  133.             printf ("Error!\n");
  134.           else
  135.             printf ("%d: |%s|\n", (int)size, buf);
  136.         }
  137.     }
  138.   return (0);
  139. }
  140.