home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / JSAGE / ZSUS / PROGPACK / CFORZ02.LBR / TDUTIL.CZ / TDUTIL.C
Text File  |  2000-06-30  |  2KB  |  83 lines

  1. /* Utility routines to manipulate and display universial format
  2.    time and date information.
  3. */
  4.  
  5. #include <stdio.h>
  6.  
  7. /* Return time in clkbuf as formatted ascii string 23:59:59 */
  8.  
  9. char *fm24clk(clkbuf,clks)
  10.     char *clkbuf,*clks;
  11. {
  12.     return(_fm24(clkbuf,clks,6));
  13. }
  14.  
  15. /* Return time in clkbuf as formatted ascii string 23:59 */
  16.  
  17. char *fm244clk(clkbuf,clks)
  18.     char *clkbuf,*clks;
  19. {
  20.     return(_fm24(clkbuf,clks,5));
  21. }
  22.  
  23. /* Generalized time string decode/format.  */
  24.  
  25. char *_fm24(clkbuf,clks,ndigit)
  26.     char *clkbuf,*clks;
  27.     unsigned ndigit;
  28. {
  29.     char *p,*unpack();
  30.     int i;
  31.     
  32.     p=clks;
  33.     if((i = clkbuf[3]) > 127) {
  34.         /* Relative clock detected */
  35.         *p++ = '+';
  36.         i &= 0x7f;
  37.         i <<= 8;
  38.         i += clkbuf[4];        /* turn into traditional int */
  39.         _2dc(p,i,4,FALSE);        /* convert to 4 digits */
  40.         if(ndigit==6)
  41.             strcat(clks,"   ");    /* pad as needed to match rtc */
  42.     } else {
  43.         /* Real time clock */
  44.         for(i=3;i<ndigit;i++) {    /* offset to time fields */
  45.             p = unpack(clkbuf[i],p);
  46.             *p++ = ':';
  47.         }
  48.         *(--p) = '\0';
  49.     }
  50.     return(clks);
  51. }
  52.  
  53. /* Return date in clkbuf as a formatted string mm/dd/yy */
  54.  
  55. char *fmdate(clkbuf,dates)
  56.     char *clkbuf,*dates;
  57. {
  58.     char *p, *unpack();
  59.     
  60.     p = dates;
  61.     p = unpack(clkbuf[1],p);    /* month */
  62.     *p++ = '/';
  63.     p = unpack(clkbuf[2],p);    /* day */
  64.     *p++ = '/';
  65.     p = unpack(clkbuf[0],p);    /* year */
  66.     *p = '\0';
  67.     return(dates);
  68. }
  69.  
  70. /* unpack bcd to 2 ascii chars in buff.  Return buff pointer pointing
  71.    past low order ascii char.
  72. */
  73.  
  74. char *unpack(bcd,buff)
  75.     int    bcd;
  76.     char    *buff;
  77. {
  78.     *buff++ = ((bcd & 0x0f0) >> 4) + '0';
  79.     *buff++ = (bcd & 0x0f) + '0';
  80.     return(buff);
  81. }
  82.  
  83.