LTCD_060719.ISO

This commit is contained in:
Terry A. Davis authored and minexew committed 2018-09-08 21:45:17 +02:00
commit f86e69648b
156 files changed
+49537

No files matched your search

+191
View File
@@ -0,0 +1,191 @@
I4 YearStartDate(I4 year)
{
I4 y1=year-1;
I4 yd4000=y1/4000,yd400=y1/400,yd100=y1/100,yd4=y1/4;
return year*365+yd4-yd100+yd400-yd4000;
}
LTDate ToLTDate(LTDateStruct *d)
{
LTDate ltdt;
I4 i1,i2;
i1=YearStartDate(d->year);
i2=YearStartDate(d->year+1);
if (i2-i1==365)
i1+=month_start_days1[d->month-1];
else
i1+=month_start_days2[d->month-1];
ltdt.date=i1+d->day_of_month-1;
ltdt.time=DivU8((d->ten_thousandths+10000*(d->seconds+60*(d->minutes+60*d->hours)))<<21,(15*15*3*625));
return ltdt;
}
U1 DayOfWeek(I4 i)
{
return (i+LT_BASE_DAY_OF_WEEK) % 7;
}
void ToLTDateStruct(LTDateStruct *d,LTDate ltdt)
{
I4 i,date=ltdt.date;
U4 k;
d->day_of_week=DayOfWeek(date);
d->year=DivI8(MulI8(date,100000),36524225);
i=YearStartDate(d->year);
date-=i;
if (YearStartDate(d->year+1)-i==365) {
k=0;
while (date>=month_start_days1[k+1] && k<11)
k++;
date-=month_start_days1[k];
} else {
k=0;
while (date>=month_start_days2[k+1] && k<11)
k++;
date-=month_start_days2[k];
}
d->month=k+1;
d->day_of_month=date+1;
k=MulU8(625*15*15*3,ltdt.time)>>21+1;
d->ten_thousandths=k%10000; k/=100;
d->hundredths=k%100; k/=100;
d->seconds=k%60;k/=60;
d->minutes=k%60;
d->hours =k/60;
}
I4 FirstDayOfMonth(I4 i)
{
LTDateStruct d;
LTDate ltdt=0;
ltdt.date=i;
ToLTDateStruct(&d,ltdt);
d.day_of_month=1;
ltdt=ToLTDate(&d);
return ltdt.date;
}
I4 LastDayOfMonth(I4 i)
{
LTDateStruct d;
LTDate ltdt=0;
ltdt.date=i;
ToLTDateStruct(&d,ltdt);
d.month++;
if (d.month==13) {
d.month=0;
d.year++;
}
d.day_of_month=1;
ltdt=ToLTDate(&d);
return ltdt.date-1;
}
I4 FirstDayOfYear(I4 i)
{
LTDateStruct d;
LTDate ltdt=0;
ltdt.date=i;
ToLTDateStruct(&d,ltdt);
d.day_of_month=1;
d.month=1;
ltdt=ToLTDate(&d);
return ltdt.date;
}
I4 LastDayOfYear(I4 i)
{
LTDateStruct d;
LTDate ltdt=0;
ltdt.date=i;
ToLTDateStruct(&d,ltdt);
d.day_of_month=1;
d.month=1;
d.year++;
ltdt=ToLTDate(&d);
return ltdt.date-1;
}
I8 Bcd2Bin(U8 b)
{
I8 i,result=0;
for (i=0;i<16;i++) {
result=MulU8(result,10)+DivU8(b,0x1000000000000000);
b<<=4;
}
return result;
}
void GetCurTimeLTDateStruct(LTDateStruct *r)
{
I8 i;
U8 old_flags=GetFlags;
U1 *p=r;
MemSet(r,0,sizeof(LTDateStruct));
Cli;
do OutP(0x70,0x0A);
while (InP(0x71) & 0x80);
OutP(0x70,0);
p[3]=InP(0x71);
OutP(0x70,2);
p[4]=InP(0x71);
OutP(0x70,4);
p[5]=InP(0x71);
OutP(0x70,6);
p[6]=InP(0x71);
OutP(0x70,7);
p[7]=InP(0x71);
OutP(0x70,8);
p[8]=InP(0x71);
OutP(0x70,9);
p[9]=InP(0x71);
SetFlags(old_flags);
OutP(0x70,0x0B);
if (!(InP(0x71) & 4)) {
for (i=3;i<10;i++)
p[i]=Bcd2Bin(p[i]);
}
r->year+=2000;
}
LTDate GetCurTimeLTDate()
{
LTDateStruct r;
GetCurTimeLTDateStruct(&r);
return ToLTDate(&r);
}
void LTDateToISO(ISODate *dst,LTDate ltdate)
{
LTDateStruct d;
ToLTDateStruct(&d,ltdate);
dst->year=d.year-ISO_BASE_YEAR;
dst->mon=d.month;
dst->day=d.day_of_month;
dst->hour=d.hours;
dst->min=d.minutes;
dst->sec=d.seconds;
dst->hund=d.hundredths;
}
LTDate ISOToLTDate(ISODate *dt)
{
LTDateStruct ltdt;
ltdt.day_of_month=dt->day;
ltdt.month=dt->mon;
ltdt.year=dt->year+ISO_BASE_YEAR;
ltdt.ten_thousandths=dt->hund*100;
ltdt.hundredths=dt->hund;
ltdt.seconds=dt->sec;
ltdt.minutes=dt->min;
ltdt.hours=dt->hour;
return ToLTDate(&ltdt);
}