home *** CD-ROM | disk | FTP | other *** search
/ Boldly Go Collection / version40.iso / TS / 17A / DRWIN101.ZIP / TIMUTIL.C < prev    next >
C/C++ Source or Header  |  1991-11-27  |  4KB  |  175 lines

  1. #include <stdio.h>
  2. #include <dos.h>
  3.  
  4. #include "timutil.h"
  5.  
  6. enum {     JAN=1,FEB,MAR,APR,MAY,JUN, JUL,AUG,SEP,OCT,NOV,DEC,YEAREND};
  7. int dm[]={ 0, 31, 28, 31, 30, 31, 30,  31, 31, 30, 31, 30, 31 };
  8. int dy[]={ 0,  0, 31, 59, 90,120,151, 181,212,243,273,304,334,365 };
  9.  
  10.  
  11. int  tleap(int year)
  12. {
  13.   return ((year&3)==0);                /*simple leapyear, good 'til 2100*/
  14. }   /*tleap*/
  15.  
  16.  
  17. int  jtomd(TIME *t)                    /*julian day to month.day*/
  18. {
  19.   int j;
  20.  
  21.   j=t->jday;
  22.   t->mon=1;
  23.   if (tleap(t->year)) dm[FEB]=29;
  24.   while (j>dm[t->mon]) {
  25.     j-=dm[t->mon];                     /*subtract this month from julian day*/
  26.     (t->mon)++;                        /*go to next month*/
  27.   }   /*while*/
  28.   t->day=j;
  29.   dm[FEB]=28;
  30.   return t->jday;
  31. }   /*jtomd*/
  32.  
  33.  
  34. TIME *tnow(TIME *t)
  35. {
  36.   struct date td;
  37.   struct time tt;
  38.  
  39.   getdate(&td);
  40.   gettime(&tt);
  41.   t->year=td.da_year;
  42.   t->mon =td.da_mon;
  43.   t->day =td.da_day;
  44.   t->jday=dy[td.da_mon]+td.da_day;
  45.   if (tleap(t->year)&&(t->mon>FEB)) t->jday++;
  46.   t->hour=tt.ti_hour;
  47.   t->min =tt.ti_min;
  48.   t->sec =tt.ti_sec;
  49.   t->hund=tt.ti_hund;
  50.   return t;
  51. }   /*tnow*/
  52.  
  53.  
  54. int  tcmp(TIME *t1,TIME *t2)
  55. {
  56.   if (t1->year!=t2->year) return (t1->year - t2->year);
  57.   if (t1->jday!=t2->jday) return (t1->jday - t2->jday);
  58.   if (t1->hour!=t2->hour) return (t1->hour - t2->hour);
  59.   if (t1->min !=t2->min ) return (t1->min  - t2->min );
  60.   if (t1->sec !=t2->sec ) return (t1->sec  - t2->sec );
  61.   if (t1->hund!=t2->hund) return (t1->hund - t2->hund);
  62.   return 0;
  63. }   /*tcmp*/
  64.  
  65.  
  66. TIME *tadd(TIME *a1,TIME *a2,TIME *s)   /*put delta times in a2 please*/
  67. {
  68.   TIME t;
  69.  
  70.   if (tleap(a1->year)) dy[YEAREND]++;  /*check leapyears*/
  71.   t=*a1;
  72.   t.year += a2->year;
  73.   t.jday += a2->jday;
  74.   t.hour += a2->hour;
  75.   t.min  += a2->min ;
  76.   t.sec  += a2->sec ;
  77.   t.hund += a2->hund;
  78.   while (t.hund>99) { t.hund-=100; t.sec++;  }
  79.   while (t.sec >59) { t.sec -=60;  t.min++;  }
  80.   while (t.min >59) { t.min -=60;  t.hour++; }
  81.   while (t.hour>23) { t.hour-=24;  t.jday++; }
  82.   if (t.jday>dy[YEAREND]) { t.jday-=dy[YEAREND]; t.year++; }
  83.   dy[YEAREND]=365;                     /*reset days in year*/
  84.   while (t.jday>dy[YEAREND]) { t.jday-=dy[YEAREND]; t.year++; }
  85.   jtomd(&t);
  86.   *s=t;
  87.   return s;
  88. }   /*tadd*/
  89.  
  90.  
  91. TIME *tsub(TIME *s1,TIME *s2,TIME *d)
  92. {
  93.   TIME t;
  94.  
  95.   if (tleap(s1->year)) dy[YEAREND]++;  /*check leapyears*/
  96.   t=*s1;
  97.   t.year -= s2->year;
  98.   t.jday -= s2->jday;
  99.   t.hour -= s2->hour;
  100.   t.min  -= s2->min ;
  101.   t.sec  -= s2->sec ;
  102.   t.hund -= s2->hund;
  103.   while (t.hund<0) { t.hund+=100; t.sec--;  }
  104.   while (t.sec <0) { t.sec +=60;  t.min--;  }
  105.   while (t.min <0) { t.min +=60;  t.hour--; }
  106.   while (t.hour<0) { t.hour+=24;  t.jday--; }
  107.   if (t.jday<0) { t.jday+=dy[YEAREND]; t.year--; }
  108.   dy[YEAREND]=365;                     /*reset days in year*/
  109.   while (t.jday<0) { t.jday+=dy[YEAREND]; t.year--; }
  110.   jtomd(&t);
  111.   *d=t;
  112.   return d;
  113. }   /*tsub*/
  114.  
  115.  
  116. int  tout(TIME *to)
  117. {
  118.   TIME now;
  119.  
  120.   tnow(&now);
  121.   return (tcmp(&now,to)>0);            /*timeout when now is later than then*/
  122. }   /*tout*/
  123.  
  124.  
  125. TIME *toutsec(TIME *to,int sec)
  126. {
  127.   TIME now;
  128.  
  129.   to->year=0;
  130.   to->jday=0;
  131.   to->hour=0;
  132.   to->min =0;
  133.   to->sec =sec;
  134.   to->hund=0;
  135.   tnow(&now);
  136.   tadd(&now,to,to);
  137.   return to;
  138. }   /*toutsec*/
  139.  
  140.  
  141. TIME *touthun(TIME *to,int hun)
  142. {
  143.   TIME now;
  144.  
  145.   to->year=0;
  146.   to->jday=0;
  147.   to->hour=0;
  148.   to->min =0;
  149.   to->sec =0;
  150.   to->hund=hun;
  151.   tnow(&now);
  152.   tadd(&now,to,to);
  153.   return to;
  154. }   /*touthun*/
  155.  
  156.  
  157. char *tstr(TIME *t,int typ)
  158. {
  159.   static char st[20];
  160.  
  161.   switch (typ) {
  162.     case YYMMDD:
  163.       sprintf(st,"%02u%02u%02u",t->year%100,t->mon,t->day);
  164.       break;
  165.     case YYYYMMDD:
  166.       sprintf(st,"%04u%02u%02u",t->year,t->mon,t->day);
  167.       break;
  168.     case mm_HH_SS_hh:          /*only time of day*/
  169.     default:
  170.       sprintf(st,"%02u:%02u:%02u.%02u",t->hour,t->min,t->sec,t->hund);
  171.   }   /*switch*/
  172.   return st;
  173. }   /*tstr*/
  174.  
  175.