NetBSD/sys/arch/mvme68k/stand/libsa/chiptotime.c
jdolecek 921705c3eb cleanup Makefiles, put common stuff to Makefile.booters, ditch unnecessary
stuff
make this all compile with -Wall -Wno-main -Wmissing-prototypes
	-Wstrict-prototypes -Werror , also compilable on 1.4.1
label itself as NetBSD/mvme68k instead of "BSD" in bootblock message
move bugcrt.c to libbug, remove bugcrt directory (bugcrt is still built
	and used separately to rest of libbug)
convert sboot to use ordinary mvme68 libsa, instead of copying needed
	stuff in libc_sa.c
convert to use version info generated by sys/conf/newvers_stand.sh
	instead of previous version.c files, add necessary 'version' files
put chiptotime() to separate libsa file (used also by sboot/clock.c)

Thanks to Steve Woodford for help with this. Note that -current build
might be hosed by this change, will be addressed by Steve shortly.
2000-07-24 18:39:01 +00:00

57 lines
1.3 KiB
C

/* $NetBSD: chiptotime.c,v 1.1 2000/07/24 18:39:44 jdolecek Exp $ */
#include <sys/types.h>
#include <machine/prom.h>
#include "stand.h"
#include "libsa.h"
/*
* BCD to decimal and decimal to BCD.
*/
#define FROMBCD(x) (int)((((unsigned int)(x)) >> 4) * 10 +\
(((unsigned int)(x)) & 0xf))
#define TOBCD(x) (int)((((unsigned int)(x)) / 10 * 16) +\
(((unsigned int)(x)) % 10))
#define SECDAY (24 * 60 * 60)
#define SECYR (SECDAY * 365)
#define LEAPYEAR(y) (((y) & 3) == 0)
#define YEAR0 68
/*
* This code is defunct after 2068.
* Will Unix still be here then??
*/
const short dayyr[12] =
{0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
u_long
chiptotime(sec, min, hour, day, mon, year)
int sec, min, hour, day, mon, year;
{
int days, yr;
sec = FROMBCD(sec);
min = FROMBCD(min);
hour = FROMBCD(hour);
day = FROMBCD(day);
mon = FROMBCD(mon);
year = FROMBCD(year) + YEAR0;
if (year < 70)
year = 70;
/* simple sanity checks */
if (year < 70 || mon < 1 || mon > 12 || day < 1 || day > 31)
return (0);
days = 0;
for (yr = 70; yr < year; yr++)
days += LEAPYEAR(yr) ? 366 : 365;
days += dayyr[mon - 1] + day - 1;
if (LEAPYEAR(yr) && mon > 2)
days++;
/* now have days since Jan 1, 1970; the rest is easy... */
return (days * SECDAY + hour * 3600 + min * 60 + sec);
}