home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast2.iso / c / timestmp.c < prev    next >
C/C++ Source or Header  |  1994-03-04  |  3KB  |  135 lines

  1. /************************************************************************
  2.  
  3.   File:        timestmp.c
  4.   Function:    Provides time and date information.
  5.   Version:    1.01
  6.   Author:    Robert Sjoberg (SJOBRG@MIT-OZ)
  7.   Index:
  8.     char *timemon[]
  9.     array of string names for months of the year, 3-char abbrevs.
  10.     char *timedow[]
  11.     array of string names for days of week, 3-char abbrevs.
  12.     timestmp (tp)
  13.     fills struct tp with time and date information.
  14.   History:
  15.     10/16/83 - original V1.00, inspired by a similarly named function
  16.     written by Matthew Halfant.  This version is for IBM PC and PC
  17.     compatibles.  Written for Computer Innovations C86 compiler.
  18.     06/05/84 - V1.01, adapted to Unix V7 by defining symbol UNIX.
  19.  
  20.     11 Dec 85  Craig Milo Rogers at USC/ISI
  21.     Converted to Lattice C 2.12.  Left the C86 code around in a
  22.     conditional.
  23.  
  24. ************************************************************************/
  25.  
  26. #include "timestmp.h"
  27.  
  28. #ifndef UNIX
  29. #ifndef PCDOS
  30. #define PCDOS            /* defaults to PC-DOS time function */
  31. #endif
  32. #ifndef C86
  33. #ifndef LATTICEC
  34. #define LATTICEC        /* defaults to the Lattice C compiler. */
  35. #endif
  36. #endif
  37. #endif
  38.  
  39. char *timemon[] = {
  40.     "",            /* not used, since months start with 1 */
  41.     "Jan","Feb","Mar","Apr","May","Jun",
  42.     "Jul","Aug","Sep","Oct","Nov","Dec"
  43. };
  44.  
  45. char *timedow[] = {
  46.     "Sun","Mon","Tue","Wed","Thu","Fri","Sat"
  47. };
  48.  
  49. #ifdef PCDOS
  50.  
  51. #ifdef C86
  52.  
  53. timestmp (tp)
  54.     struct timedata *tp;
  55. /*
  56.   Get current date and time and place them in the structure tp.
  57. */
  58. {
  59.     struct {
  60.     char al,ah,bl,bh,cl,ch,dl,dh;
  61.     int  si,di,ds,es;
  62.     } REGS;
  63.  
  64.     REGS.ah = 0x2a;        /* request date */
  65.     sysint (0x21, ®S, ®S);
  66.     tp->tim_yr = ((REGS.ch & 0377) << 8) + (REGS.cl & 0377);
  67.     tp->tim_mon = REGS.dh;
  68.     tp->tim_dat = REGS.dl;
  69.     tp->tim_dow = -1;        /* not defined */
  70.     REGS.ah = 0x2c;        /* request time */
  71.     sysint (0x21, ®S, ®S);
  72.     tp->tim_hr = REGS.ch;
  73.     tp->tim_min = REGS.cl;
  74.     tp->tim_sec = REGS.dh;
  75. }
  76.  
  77. #endif /* C86 */
  78.  
  79. #ifdef LATTICEC
  80.  
  81. #include <dos.h>
  82.  
  83. timestmp (tp)
  84.     struct timedata *tp;
  85. /*
  86.   Get current date and time and place them in the structure tp.
  87. */
  88. {
  89.     union REGS ioregs;        /* Register image for DOS calls. */
  90.  
  91.     ioregs.h.ah = 0x2a;        /* request date */
  92.     intdos (&ioregs, &ioregs);
  93.     tp->tim_yr = ioregs.x.cx;
  94.     tp->tim_mon = ioregs.h.dh;
  95.     tp->tim_dat = ioregs.h.dl;
  96.     tp->tim_dow = ioregs.h.al;
  97.  
  98.     ioregs.h.ah = 0x2c;        /* request time */
  99.     intdos (&ioregs, &ioregs);
  100.     tp->tim_hr = ioregs.h.ch;
  101.     tp->tim_min = ioregs.h.cl;
  102.     tp->tim_sec = ioregs.h.dh;
  103. }
  104.  
  105. #endif /* LATTICEC */
  106.  
  107. #endif /* PCDOS */
  108.  
  109. #ifdef UNIX
  110.  
  111. #include <time.h>
  112.  
  113. timestmp (tp)
  114.     struct timedata *tp;
  115. /*
  116.   Gets current date and time and places them in the structure tp.
  117. */
  118. {
  119.     struct tm t;
  120.     extern struct tm *localtime();
  121.     long clock;
  122.  
  123.     time (&clock);
  124.     t = *localtime(&clock);
  125.     tp->tim_yr = t.tm_year + 1900;
  126.     tp->tim_mon = t.tm_mon;
  127.     tp->tim_dat = t.tm_mday;
  128.     tp->tim_dow = t.tm_wday;
  129.     tp->tim_hr = t.tm_hour;
  130.     tp->tim_min = t.tm_min;
  131.     tp->tim_sec = t.tm_sec;
  132. }
  133.  
  134. #endif
  135.