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
Wrap
Text File
|
2000-06-30
|
2KB
|
83 lines
/* Utility routines to manipulate and display universial format
time and date information.
*/
#include <stdio.h>
/* Return time in clkbuf as formatted ascii string 23:59:59 */
char *fm24clk(clkbuf,clks)
char *clkbuf,*clks;
{
return(_fm24(clkbuf,clks,6));
}
/* Return time in clkbuf as formatted ascii string 23:59 */
char *fm244clk(clkbuf,clks)
char *clkbuf,*clks;
{
return(_fm24(clkbuf,clks,5));
}
/* Generalized time string decode/format. */
char *_fm24(clkbuf,clks,ndigit)
char *clkbuf,*clks;
unsigned ndigit;
{
char *p,*unpack();
int i;
p=clks;
if((i = clkbuf[3]) > 127) {
/* Relative clock detected */
*p++ = '+';
i &= 0x7f;
i <<= 8;
i += clkbuf[4]; /* turn into traditional int */
_2dc(p,i,4,FALSE); /* convert to 4 digits */
if(ndigit==6)
strcat(clks," "); /* pad as needed to match rtc */
} else {
/* Real time clock */
for(i=3;i<ndigit;i++) { /* offset to time fields */
p = unpack(clkbuf[i],p);
*p++ = ':';
}
*(--p) = '\0';
}
return(clks);
}
/* Return date in clkbuf as a formatted string mm/dd/yy */
char *fmdate(clkbuf,dates)
char *clkbuf,*dates;
{
char *p, *unpack();
p = dates;
p = unpack(clkbuf[1],p); /* month */
*p++ = '/';
p = unpack(clkbuf[2],p); /* day */
*p++ = '/';
p = unpack(clkbuf[0],p); /* year */
*p = '\0';
return(dates);
}
/* unpack bcd to 2 ascii chars in buff. Return buff pointer pointing
past low order ascii char.
*/
char *unpack(bcd,buff)
int bcd;
char *buff;
{
*buff++ = ((bcd & 0x0f0) >> 4) + '0';
*buff++ = (bcd & 0x0f) + '0';
return(buff);
}