Category : Pascal Source Code
Archive   : TPZNEWG.ZIP
Filename : TPZUNIX.U
INTERFACE
USES Dos;
{file date and time functions}
FUNCTION Z_ToUnixDate(fdate: LONGINT): STRING;
FUNCTION Z_FromUnixDate(s: STRING): LONGINT;
IMPLEMENTATION
CONST
C1970 = 2440588;
D0 = 1461;
D1 = 146097;
D2 = 1721119;
Procedure GregorianToJulianDN(Year, Month, Day : Integer;
var JulianDN : LongInt);
var
Century,
XYear : LongInt;
begin {GregorianToJulianDN}
If Month <= 2 then begin
Year := pred(Year);
Month := Month + 12;
end;
Month := Month - 3;
Century := Year div 100;
XYear := Year mod 100;
Century := (Century * D1) shr 2;
XYear := (XYear * D0) shr 2;
JulianDN := ((((Month * 153) + 2) div 5) + Day) + D2
+ XYear + Century;
end; {GregorianToJulianDN}
Procedure JulianDNToGregorian(JulianDN : LongInt;
var Year, Month, Day : Integer);
var
Temp,
XYear : LongInt;
YYear,
YMonth,
YDay : Integer;
begin {JulianDNToGregorian}
Temp := (((JulianDN - D2) shl 2) - 1);
XYear := (Temp mod D1) or 3;
JulianDN := Temp div D1;
YYear := (XYear div D0);
Temp := ((((XYear mod D0) + 4) shr 2) * 5) - 3;
YMonth := Temp div 153;
If YMonth >= 10 then begin
YYear := YYear + 1;
YMonth := YMonth - 12;
end;
YMonth := YMonth + 3;
YDay := Temp mod 153;
YDay := (YDay + 5) div 5;
Year := YYear + (JulianDN * 100);
Month := YMonth;
Day := YDay;
end; {JulianDNToGregorian}
FUNCTION Z_ToUnixDate(fdate: LONGINT): STRING;
VAR
dt: DateTime;
secspast, datenum, dayspast: LONGINT;
s: STRING;
BEGIN
UnpackTime(fdate,dt);
GregorianToJulianDN(dt.year,dt.month,dt.day,datenum);
dayspast := datenum - c1970;
secspast := dayspast * 86400;
secspast := secspast + dt.hour * 3600 + dt.min * 60 + dt.sec;
s := '';
WHILE (secspast <> 0) AND (Length(s) < 255) DO
BEGIN
s := Chr((secspast AND 7) + $30) + s;
secspast := (secspast SHR 3)
END;
s := '0' + s;
Z_ToUnixDate := s
END;
FUNCTION Z_FromUnixDate(s: STRING): LONGINT;
VAR
dt: DateTime;
secspast, datenum: LONGINT;
n: WORD;
BEGIN
secspast := LONGINT(0);
FOR n := 1 TO Length(s) DO
secspast := (secspast SHL 3) + Ord(s[n]) - $30;
datenum := (secspast DIV 86400) + c1970;
JulianDNToGregorian(datenum,INTEGER(dt.year),INTEGER(dt.month),INTEGER(dt.day));
secspast := secspast MOD 86400;
dt.hour := secspast DIV 3600;
secspast := secspast MOD 3600;
dt.min := secspast DIV 60;
dt.sec := secspast MOD 60;
PackTime(dt,secspast);
Z_FromUnixDate := secspast
END;
END.
Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!
This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.
But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/