home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
rtsi.com
/
2014.01.www.rtsi.com.tar
/
www.rtsi.com
/
OS9
/
OSK
/
EFFO
/
forum8.lzh
/
PROGRAMME
/
MODULA
/
WINDOW
/
dateio.mod
< prev
Wrap
Text File
|
1989-01-19
|
28KB
|
771 lines
(*
-------------------------------------------------------------------------------
@@@@@@@@@@@@@@@@@@*) IMPLEMENTATION MODULE DateIO; (*@@@@@@@@@@@@@@@@@@@@@@
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
| Kurzbeschreibung | formatierte Ausgabe von Datum und Zeit |
| | formatfreie Eingabe von Datum und Zeit |
---------------------+---------------------------------------------------------
| Programm - Version | 1.0 | Text - Version | V#002 |
---------------------+--------+-------------------------+----------------------
| Modulholder | WS | Urversion | WS | Januar 89 |
---------------------+---------------------------------------------------------
| System - Version | OS-9, Miele-Modula-2 3.5 |
---------------------+---------------------------------------------------------
| Copyright | Freigegeben fuer nichtkommerzielle Nutzung |
| | durch Teilnehmer am EFFO |
---------------------+---------------------------------------------------------
| Hardware | GEPARD 68010, 1 MByte RAM, 80Zeichen-Textkarte |
---------------------+---------------------------------------------------------
| besondere Importe | |
---------------------+---------------------------------------------------------
| Autoren | WS | Werner Stehling, Seilerwis 3, |
| | | CH-8606 Greifensee, Tel. 01/256 42 21 |
---------------------+---------------------------------------------------------
| U P D A T E S | |
---------------------- |
| Datum Version Autor Bemerkungen |
| -------- ------- ----- ----------- |
| |
-------------------------------------------------------------------------------
| Modul-Beschreibung | siehe Definition Modul |
---------------------- |
-------------------------------------------------------------------------------
*)
FROM SYSTEM IMPORT ADDRESS;
FROM SysUtil IMPORT FTime, FJulian;
FROM Strings IMPORT SearchPos, Assign, Length, Delete, Insert;
FROM ConNum IMPORT NumToStr;
FROM Area IMPORT GotoXY, GetXY;
FROM AreaIO IMPORT WriteStr, ReadStr;
CONST maxstr = 39;
shortyear = 80; (* 80 - 99 = 1980 - 1999 *)
(* 00 - 79 = 2000 - 2079 *)
TYPE String3 = ARRAY [0..2] OF CHAR;
Stringv = ARRAY [0..9] OF CHAR;
VAR mon3 : ARRAY [1..12],[0..3] OF String3;
day3 : ARRAY [0.. 6],[0..3] OF String3;
monv : ARRAY [1..12],[0..3] OF Stringv;
dayv : ARRAY [0.. 6],[0..3] OF Stringv;
monday : ARRAY [1..12] OF CARDINAL;
(*--------------------------------------------------------------------------*)
PROCEDURE JulToGreg (VAR time, date : ADDRESS; sec, juldate : ADDRESS);
(*--------------------------------------------------------------------------*)
(* Lit.: Orion 195/47 (Apr. 1983); *)
VAR year, mon, day : CARDINAL;
secs, mins, hour : ADDRESS;
a, A, B, C, D, E, F, G, I, j: REAL;
(*----------------------------------------------------------------------*)
PROCEDURE INT (x : REAL) : REAL;
(*----------------------------------------------------------------------*)
VAR i : REAL;
sig : BOOLEAN;
BEGIN
IF x < 0.0 THEN
x := -x;
sig := TRUE
ELSE
sig := FALSE
END;
i := FLOAT (TRUNC (x / 65536.0));
i := i * 65536.0;
IF sig THEN
i := -i
END;
RETURN FLOAT (TRUNC (x - i)) + i;
END INT;
(*----------------------------------------------------------------------*)
BEGIN
j := FLOAT (juldate) + 1.5; (* !OS-9! richtig waere: + 0.5 *)
I := INT (j);
IF I < 2299161.0 THEN
A := I
ELSE
a := INT ((I - 1867216.25) / 36524.25);
A := a - INT (a / 4.0) + I + 1.0
END;
B := A + 1524.0;
C := INT ((B - 122.1) / 365.25);
D := B - INT (365.25 * C);
E := INT (D / 30.6001);
F := j - I;
G := D - INT (30.6001 * E) + F;
day := TRUNC (G);
IF E < 13.5 THEN
mon := TRUNC (E) - 1
ELSE
mon := TRUNC (E) - 13
END;
IF mon >= 3 THEN
year := TRUNC (C) - 4716
ELSE
year := TRUNC (C) - 4715
END;
date := (ADDRESS (year) * 256 + ADDRESS (mon)) * 256 + ADDRESS (day);
secs := sec MOD 60;
hour := sec DIV 3600;
mins := (sec MOD 3600) DIV 60;
time := (hour * 256 + mins) * 256 + secs;
END JulToGreg;
(*--------------------------------------------------------------------------*)
PROCEDURE StringCap (VAR source, dest : ARRAY OF CHAR);
(*--------------------------------------------------------------------------*)
VAR i : CARDINAL;
BEGIN
Assign (source, dest);
FOR i := 0 TO Length (dest)-1 DO
dest[i] := CAP (dest[i])
END
END StringCap;
(*--------------------------------------------------------------------------*)
PROCEDURE NumToStr2 (val, len : CARDINAL; fill : CHAR;
VAR s : ARRAY OF CHAR);
(*--------------------------------------------------------------------------*)
VAR fc : ARRAY [0..0] OF CHAR;
BEGIN
fc[0] := fill;
NumToStr (val, 10, s);
WHILE Length (s) < len DO
Insert (fc, s, 0)
END
END NumToStr2;
(*--------------------------------------------------------------------------*)
PROCEDURE DecDate (date : ADDRESS; VAR day, month, year,
syear : CARDINAL);
(*--------------------------------------------------------------------------*)
BEGIN
day := CARDINAL (date MOD 256);
month := CARDINAL ((date DIV 256) MOD 256);
year := CARDINAL (date DIV 65536);
IF (year >= 1900+shortyear) AND (year < 2000) THEN
syear := year - 1900
ELSIF (year >= 2000) AND (year < 2000+shortyear) THEN
syear := year - 2000
ELSE
syear := year
END
END DecDate;
(*--------------------------------------------------------------------------*)
PROCEDURE EncDate (VAR date : ADDRESS; day, month, year : CARDINAL);
(*--------------------------------------------------------------------------*)
VAR juldat, sec : ADDRESS;
lday : CARDINAL;
BEGIN
IF year < 100 THEN
IF year < shortyear THEN
year := year + 2000
ELSE
year := year + 1900
END
END;
lday := monday[month]; (* test for last day of month *)
IF month = 2 THEN
IF (((year MOD 4) = 0) AND (NOT (year MOD 100 = 0)))
OR ((year MOD 400) = 0) THEN
lday := lday + 1
END
END;
IF day > lday THEN
day := lday
END;
date := (ADDRESS (year)*256 + ADDRESS (month))*256 + ADDRESS (day);
END EncDate;
(*--------------------------------------------------------------------------*)
PROCEDURE DateStr (VAR form, s : ARRAY OF CHAR; date : ADDRESS;
language : CARDINAL);
(*--------------------------------------------------------------------------*)
VAR s1 : ARRAY [0..maxstr] OF CHAR;
day, month, year, syear, lens, pos, weekday : CARDINAL;
BEGIN
Assign (form, s);
lens := Length (s);
weekday := Weekday (date);
DecDate (date, day, month, year, syear);
WHILE SearchPos ('y2', s, 0, pos) DO
Delete (s, pos, 2);
NumToStr2 (syear, 2, '0', s1);
Insert (s1, s, pos)
END;
WHILE SearchPos ('y4', s, 0, pos) DO
Delete (s, pos, 2);
NumToStr2 (year, 4, '0', s1);
Insert (s1, s, pos)
END;
WHILE SearchPos ('m2', s, 0, pos) DO
Delete (s, pos, 2);
NumToStr2 (month, 2, ' ', s1);
Insert (s1, s, pos)
END;
WHILE SearchPos ('m3', s, 0, pos) DO
Delete (s, pos, 2);
Insert (mon3[month, language], s, pos)
END;
WHILE SearchPos ('mv', s, 0, pos) DO
Delete (s, pos, 2);
Insert (monv[month, language], s, pos)
END;
WHILE SearchPos ('d2', s, 0, pos) DO
Delete (s, pos, 2);
NumToStr2 (day, 2, ' ', s1);
Insert (s1, s, pos)
END;
WHILE SearchPos ('w3', s, 0, pos) DO
Delete (s, pos, 2);
Insert (day3[weekday, language], s, pos)
END;
WHILE SearchPos ('wv', s, 0, pos) DO
Delete (s, pos, 2);
Insert (dayv[weekday, language], s, pos)
END;
END DateStr;
(*--------------------------------------------------------------------------*)
PROCEDURE Weekday (date : ADDRESS) : CARDINAL;
(*--------------------------------------------------------------------------*)
VAR time, sec, juldat : ADDRESS;
BEGIN
time := 0;
FJulian (time, date, sec, juldat);
RETURN CARDINAL ((juldat + 2) MOD 7);
END Weekday;
(*--------------------------------------------------------------------------*)
PROCEDURE WriteDate (VAR form : ARRAY OF CHAR; date : ADDRESS;
language : CARDINAL; space : INTEGER);
(*--------------------------------------------------------------------------*)
VAR s : ARRAY [0..maxstr] OF CHAR;
BEGIN
DateStr (form, s, date, language);
WriteStr (s, space)
END WriteDate;
(*--------------------------------------------------------------------------*)
PROCEDURE WriteToday (VAR form : ARRAY OF CHAR;
language : CARDINAL; space : INTEGER);
(*--------------------------------------------------------------------------*)
VAR tim, dat, tic : ADDRESS;
wd : CARDINAL;
s : ARRAY [0..maxstr] OF CHAR;
BEGIN
FTime (0, tim, dat, tic, wd);
DateStr (form, s, dat, language);
WriteStr (s, space)
END WriteToday;
(*--------------------------------------------------------------------------*)
PROCEDURE TimeStr (VAR form, s : ARRAY OF CHAR; time : ADDRESS);
(*--------------------------------------------------------------------------*)
VAR s2, aps : ARRAY [0..1] OF CHAR;
hour, min, sec, lens, pos, ho12 : CARDINAL;
hflag : BOOLEAN;
BEGIN
Assign (form, s);
lens := Length (s);
sec := CARDINAL (time MOD 256);
min := CARDINAL ((time DIV 256) MOD 256);
hour := CARDINAL (time DIV 65536);
IF hour >= 13 THEN
ho12 := hour - 12;
aps := 'pm'
ELSIF hour = 0 THEN
ho12 := 12;
aps := 'pm'
ELSE
ho12 := hour;
aps := 'am'
END;
WHILE SearchPos ('h24', s, 0, pos) DO
Delete (s, pos, 3);
NumToStr2 (hour, 2, '0', s2);
Insert (s2, s, pos)
END;
hflag := FALSE;
WHILE SearchPos ('h12', s, 0, pos) DO
hflag := TRUE;
Delete (s, pos, 3);
NumToStr2 (ho12, 2, '0', s2);
Insert (s2, s, pos);
END;
WHILE SearchPos ('apm', s, 0, pos) DO
Delete (s, pos, 3);
IF hflag THEN
Insert (aps, s, pos)
END
END;
WHILE SearchPos ('min', s, 0, pos) DO
Delete (s, pos, 3);
NumToStr2 (min, 2, '0', s2);
Insert (s2, s, pos)
END;
WHILE SearchPos ('sec', s, 0, pos) DO
Delete (s, pos, 3);
NumToStr2 (sec, 2, '0', s2);
Insert (s2, s, pos)
END;
END TimeStr;
(*--------------------------------------------------------------------------*)
PROCEDURE WriteTime (VAR form : ARRAY OF CHAR; time : ADDRESS;
space : INTEGER);
(*--------------------------------------------------------------------------*)
VAR s : ARRAY [0..maxstr] OF CHAR;
BEGIN
TimeStr (form, s, time);
WriteStr (s, space);
END WriteTime;
(*--------------------------------------------------------------------------*)
PROCEDURE WriteNow (VAR form : ARRAY OF CHAR; space : INTEGER);
(*--------------------------------------------------------------------------*)
VAR tim, dat, tic : ADDRESS;
wd : CARDINAL;
BEGIN
FTime (0, tim, dat, tic, wd);
WriteTime (form, tim, space);
END WriteNow;
(*--------------------------------------------------------------------------*)
PROCEDURE GetNum (VAR s : ARRAY OF CHAR; VAR pos, val : CARDINAL;
VAR ok : BOOLEAN);
(*--------------------------------------------------------------------------*)
VAR pss, lens : CARDINAL;
BEGIN
val := 0;
lens := Length (s);
ok := FALSE;
pss := pos;
WHILE (pss < lens) AND ((s[pss] < '0') OR (s[pss] > '9')) DO
INC (pss)
END;
IF pss < lens THEN
WHILE (pss < lens) AND (s[pss] >= '0') AND (s[pss] <= '9') DO
val := 10 * val + ORD (s[pss]) - ORD ('0');
INC (pss)
END;
ok := TRUE;
pos := pss
END;
END GetNum;
(*--------------------------------------------------------------------------*)
PROCEDURE ReadDate (VAR form : ARRAY OF CHAR; VAR date : ADDRESS;
language : CARDINAL; space : INTEGER) : CHAR;
(*--------------------------------------------------------------------------*)
TYPE Datum = (year, month, day, nix);
DFolge = ARRAY [1..3] OF Datum;
VAR s : ARRAY [0..maxstr] OF CHAR;
ok : BOOLEAN;
axc, ayc : CARDINAL;
df : DFolge;
ch : CHAR;
yval, mval, dval, sy : CARDINAL;
(*----------------------------------------------------------------------*)
PROCEDURE DateForm (VAR form : ARRAY OF CHAR; VAR df : DFolge);
(*----------------------------------------------------------------------*)
VAR pos, i : CARDINAL;
p : ARRAY [1..3] OF CARDINAL;
h : Datum;
BEGIN
FOR i := 1 TO 3 DO
df[i] := nix;
p [i] := 999
END;
IF SearchPos ('y2', form, 0, pos) OR SearchPos ('y4', form, 0, pos) THEN
p [1] := pos;
df[1] := year
END;
IF SearchPos ('m2', form, 0, pos) OR SearchPos ('m3', form, 0, pos)
OR SearchPos ('mv', form, 0, pos) THEN
IF pos < p[1] THEN
p [2] := p [1];
df[2] := df[1];
i := 1
ELSE
i := 2
END;
p [i] := pos;
df[i] := month
END;
IF SearchPos ('d2', form, 0, pos) THEN
IF pos < p[2] THEN
p [3] := p [2];
df[3] := df[2];
i := 2
ELSE
i := 3
END;
IF pos < p[1] THEN
p [2] := p [1];
df[2] := df[1];
i := 1
END;
p [i] := pos;
df[i] := day
END;
END DateForm;
(*----------------------------------------------------------------------*)
PROCEDURE TestMon (VAR s : ARRAY OF CHAR; VAR pos, val : CARDINAL;
VAR ok : BOOLEAN);
(*----------------------------------------------------------------------*)
VAR s1 : ARRAY [0..maxstr] OF CHAR;
pss : CARDINAL;
BEGIN
val := 0;
REPEAT
INC (val);
StringCap (mon3[val, language], s1);
ok := SearchPos (s1, s, pos, pss)
UNTIL ok OR (val >= 12);
IF NOT ok THEN
val := 0;
REPEAT
INC (val);
StringCap (monv[val, language], s1);
ok := SearchPos (s1, s, pos, pss)
UNTIL ok OR (val >= 12);
END;
IF ok THEN
pos := pss + Length (s1)
ELSE
val := 0
END
END TestMon;
(*----------------------------------------------------------------------*)
PROCEDURE TestDate (VAR s : ARRAY OF CHAR; VAR date : ADDRESS;
df : DFolge; VAR ok : BOOLEAN);
(*----------------------------------------------------------------------*)
VAR s1 : ARRAY [0..maxstr] OF CHAR;
pos, i : CARDINAL;
BEGIN
StringCap (s, s1);
pos := 0;
i := 1;
REPEAT
CASE df[i] OF
year : GetNum (s1, pos, yval, ok) |
month: TestMon (s1, pos, mval, ok);
IF NOT ok THEN
GetNum (s1, pos, mval, ok);
END;
IF (mval < 1) OR (mval > 12) THEN
ok := FALSE
END |
day : GetNum (s1, pos, dval, ok);
IF (dval < 1) OR (dval > 31) THEN
ok := FALSE
END
ELSE
END;
INC (i)
UNTIL (NOT (ok)) OR (i > 3);
IF ok THEN
EncDate (date, dval, mval, yval);
END
END TestDate;
(*----------------------------------------------------------------------*)
BEGIN
GetXY (axc, ayc);
DateForm (form, df);
DecDate (date, dval, mval, yval, sy);
REPEAT
GotoXY (axc, ayc);
DateStr (form, s, date, language);
ch := ReadStr (s, space);
TestDate (s, date, df, ok)
UNTIL ok;
GotoXY (axc, ayc);
WriteDate (form, date, language, space);
RETURN ch
END ReadDate;
(*--------------------------------------------------------------------------*)
PROCEDURE ReadToday (VAR form : ARRAY OF CHAR; VAR date : ADDRESS;
language : CARDINAL; space : INTEGER) : CHAR;
(*--------------------------------------------------------------------------*)
VAR tim, tic : ADDRESS;
wd : CARDINAL;
BEGIN
FTime (0, tim, date, tic, wd);
RETURN ReadDate (form, date, language, space)
END ReadToday;
(*--------------------------------------------------------------------------*)
PROCEDURE ReadTime (VAR form : ARRAY OF CHAR; VAR time : ADDRESS;
space : INTEGER): CHAR;
(*--------------------------------------------------------------------------*)
TYPE Zeit = (stunde, minute, sekunde, nix);
ZFolge = ARRAY [1..3] OF Zeit;
VAR s : ARRAY [0..maxstr] OF CHAR;
ok : BOOLEAN;
axc, ayc : CARDINAL;
zf : ZFolge;
ch : CHAR;
hval, mval, sval : CARDINAL;
(*----------------------------------------------------------------------*)
PROCEDURE TimeForm (VAR form : ARRAY OF CHAR; VAR zf : ZFolge);
(*----------------------------------------------------------------------*)
VAR pos, i : CARDINAL;
p : ARRAY [1..3] OF CARDINAL;
h : Zeit;
BEGIN
FOR i := 1 TO 3 DO
zf[i] := nix;
p [i] := 999
END;
IF SearchPos ('h12', form, 0, pos) OR SearchPos ('h24', form, 0, pos) THEN
p [1] := pos;
zf[1] := stunde
END;
IF SearchPos ('min', form, 0, pos) THEN
IF pos < p[1] THEN
p [2] := p [1];
zf[2] := zf[1];
i := 1
ELSE
i := 2
END;
p [i] := pos;
zf[i] := minute
END;
IF SearchPos ('sec', form, 0, pos) THEN
IF pos < p[2] THEN
p [3] := p [2];
zf[3] := zf[2];
ELSE
i := 3
END;
IF pos < p[1] THEN
p [2] := p [1];
zf[2] := zf[1];
i := 1
END;
p [i] := pos;
zf[i] := sekunde
END;
END TimeForm;
(*----------------------------------------------------------------------*)
PROCEDURE TestTime (VAR s : ARRAY OF CHAR; VAR time : ADDRESS;
zf : ZFolge; VAR ok : BOOLEAN);
(*----------------------------------------------------------------------*)
VAR s1 : ARRAY [0..maxstr] OF CHAR;
pos, i, k : CARDINAL;
BEGIN
StringCap (s, s1);
pos := 0;
i := 1;
REPEAT
CASE zf[i] OF
stunde: GetNum (s1, pos, hval, ok);
IF (hval > 0) AND (hval < 13)
AND (SearchPos ('PM', s1, pos, k)) THEN
hval := hval + 12;
IF hval = 24 THEN
hval := 0
END
END;
IF hval > 23 THEN
ok := FALSE
END |
minute: GetNum (s1, pos, mval, ok);
IF mval >= 60 THEN
ok := FALSE
END |
sekunde: GetNum (s1, pos, sval, ok);
IF sval >= 60 THEN
ok := FALSE
END |
ELSE
END;
INC (i)
UNTIL (NOT (ok)) OR (i > 3);
IF ok THEN
time := (ADDRESS (hval) * 256 + ADDRESS (mval)) * 256 + ADDRESS (sval)
END
END TestTime;
(*----------------------------------------------------------------------*)
BEGIN
GetXY (axc, ayc);
TimeForm (form, zf);
sval := CARDINAL (time MOD 256);
mval := CARDINAL ((time DIV 256) MOD 256);
hval := CARDINAL (time DIV 65536);
REPEAT
GotoXY (axc, ayc);
TimeStr (form, s, time);
ch := ReadStr (s, space);
TestTime (s, time, zf, ok)
UNTIL ok;
GotoXY (axc, ayc);
WriteTime (form, time, space);
RETURN ch
END ReadTime;
(*--------------------------------------------------------------------------*)
PROCEDURE ReadNow (VAR form : ARRAY OF CHAR; VAR time : ADDRESS;
space : INTEGER) : CHAR;
(*--------------------------------------------------------------------------*)
VAR dat, tic : ADDRESS;
wd : CARDINAL;
BEGIN
FTime (0, time, dat, tic, wd);
RETURN ReadTime (form, time, space)
END ReadNow;
(*--------------------------------------------------------------------------*)
PROCEDURE Init;
(*--------------------------------------------------------------------------*)
BEGIN
mon3[ 1, 0] := 'Jan'; monv[ 1, 0] := 'Januar';
mon3[ 2, 0] := 'Feb'; monv[ 2, 0] := 'Februar';
mon3[ 3, 0] := 'Mdr'; monv[ 3, 0] := 'Mdrz';
mon3[ 4, 0] := 'Apr'; monv[ 4, 0] := 'April';
mon3[ 5, 0] := 'Mai'; monv[ 5, 0] := 'Mai';
mon3[ 6, 0] := 'Jun'; monv[ 6, 0] := 'Juni';
mon3[ 7, 0] := 'Jul'; monv[ 7, 0] := 'Juli';
mon3[ 8, 0] := 'Aug'; monv[ 8, 0] := 'August';
mon3[ 9, 0] := 'Sep'; monv[ 9, 0] := 'September';
mon3[10, 0] := 'Okt'; monv[10, 0] := 'Oktober';
mon3[11, 0] := 'Nov'; monv[11, 0] := 'November';
mon3[12, 0] := 'Dez'; monv[12, 0] := 'Dezember';
mon3[ 1, 1] := 'Jan'; monv[ 1, 1] := 'January';
mon3[ 2, 1] := 'Feb'; monv[ 2, 1] := 'February';
mon3[ 3, 1] := 'Mar'; monv[ 3, 1] := 'March';
mon3[ 4, 1] := 'Apr'; monv[ 4, 1] := 'April';
mon3[ 5, 1] := 'May'; monv[ 5, 1] := 'May';
mon3[ 6, 1] := 'Jun'; monv[ 6, 1] := 'June';
mon3[ 7, 1] := 'Jul'; monv[ 7, 1] := 'July';
mon3[ 8, 1] := 'Aug'; monv[ 8, 1] := 'August';
mon3[ 9, 1] := 'Sep'; monv[ 9, 1] := 'September';
mon3[10, 1] := 'Oct'; monv[10, 1] := 'October';
mon3[11, 1] := 'Nov'; monv[11, 1] := 'November';
mon3[12, 1] := 'Dec'; monv[12, 1] := 'December';
mon3[ 1, 2] := 'Jan'; monv[ 1, 2] := 'Janvier';
mon3[ 2, 2] := 'Fev'; monv[ 2, 2] := 'Fevrier';
mon3[ 3, 2] := 'Mar'; monv[ 3, 2] := 'Mars';
mon3[ 4, 2] := 'Avr'; monv[ 4, 2] := 'Avril';
mon3[ 5, 2] := 'Mag'; monv[ 5, 2] := 'Maggio';
mon3[ 6, 2] := 'Jun'; monv[ 6, 2] := 'Juin';
mon3[ 7, 2] := 'Jul'; monv[ 7, 2] := 'Juillet';
mon3[ 8, 2] := 'Aou'; monv[ 8, 2] := 'Aout';
mon3[ 9, 2] := 'Sep'; monv[ 9, 2] := 'Septembre';
mon3[10, 2] := 'Oct'; monv[10, 2] := 'Octobre';
mon3[11, 2] := 'Nov'; monv[11, 2] := 'Novembre';
mon3[12, 2] := 'Dec'; monv[12, 2] := 'Decembre';
mon3[ 1, 3] := 'Gen'; monv[ 1, 3] := 'Gennaio';
mon3[ 2, 3] := 'Feb'; monv[ 2, 3] := 'Febbraio';
mon3[ 3, 3] := 'Mar'; monv[ 3, 3] := 'Marzo';
mon3[ 4, 3] := 'Apr'; monv[ 4, 3] := 'Aprile';
mon3[ 5, 3] := 'Mag'; monv[ 5, 3] := 'Maggio';
mon3[ 6, 3] := 'Giu'; monv[ 6, 3] := 'Giugno';
mon3[ 7, 3] := 'Lug'; monv[ 7, 3] := 'Luglio';
mon3[ 8, 3] := 'Ago'; monv[ 8, 3] := 'Augosto';
mon3[ 9, 3] := 'Set'; monv[ 9, 3] := 'Settembre';
mon3[10, 3] := 'Ott'; monv[10, 3] := 'Ottobre';
mon3[11, 3] := 'Nov'; monv[11, 3] := 'Novembre';
mon3[12, 3] := 'Dic'; monv[12, 3] := 'Dicembre';
day3[ 0, 0] := 'Son'; dayv[ 0, 0] := 'Sonntag';
day3[ 1, 0] := 'Mon'; dayv[ 1, 0] := 'Montag';
day3[ 2, 0] := 'Die'; dayv[ 2, 0] := 'Dienstag';
day3[ 3, 0] := 'Mit'; dayv[ 3, 0] := 'Mittwoch';
day3[ 4, 0] := 'Don'; dayv[ 4, 0] := 'Donnerstag';
day3[ 5, 0] := 'Fre'; dayv[ 5, 0] := 'Freitag';
day3[ 6, 0] := 'Sam'; dayv[ 6, 0] := 'Samstag';
day3[ 0, 1] := 'Sun'; dayv[ 0, 1] := 'Sunday';
day3[ 1, 1] := 'Mon'; dayv[ 1, 1] := 'Monday';
day3[ 2, 1] := 'Tue'; dayv[ 2, 1] := 'Tuesday';
day3[ 3, 1] := 'Wed'; dayv[ 3, 1] := 'Wednesday';
day3[ 4, 1] := 'Thu'; dayv[ 4, 1] := 'Thursday';
day3[ 5, 1] := 'Fri'; dayv[ 5, 1] := 'Friday';
day3[ 6, 1] := 'Sat'; dayv[ 6, 1] := 'Saturday';
day3[ 0, 2] := 'Dim'; dayv[ 0, 2] := 'Dimanche';
day3[ 1, 2] := 'Lun'; dayv[ 1, 2] := 'Lundi';
day3[ 2, 2] := 'Mar'; dayv[ 2, 2] := 'Mardi';
day3[ 3, 2] := 'Mer'; dayv[ 3, 2] := 'Mercredi';
day3[ 4, 2] := 'Jeu'; dayv[ 4, 2] := 'Jeudi';
day3[ 5, 2] := 'Ven'; dayv[ 5, 2] := 'Vendredi';
day3[ 6, 2] := 'Sam'; dayv[ 6, 2] := 'Samedi';
day3[ 0, 3] := 'Dom'; dayv[ 0, 3] := 'Domenica';
day3[ 1, 3] := 'Lun'; dayv[ 1, 3] := 'Lunedi';
day3[ 2, 3] := 'Mar'; dayv[ 2, 3] := 'Martedi';
day3[ 3, 3] := 'Mer'; dayv[ 3, 3] := 'Mercoledi';
day3[ 4, 3] := 'Gio'; dayv[ 4, 3] := 'Giovedi';
day3[ 5, 3] := 'Ven'; dayv[ 5, 3] := 'Venerdi';
day3[ 6, 3] := 'Sab'; dayv[ 6, 3] := 'Sabato';
monday[ 1] := 31; monday[ 2] := 28; monday[ 3] := 31;
monday[ 4] := 30; monday[ 5] := 31; monday[ 6] := 30;
monday[ 7] := 31; monday[ 8] := 31; monday[ 9] := 30;
monday[10] := 31; monday[11] := 30; monday[12] := 31;
END Init;
(*--------------------------------------------------------------------------*)
BEGIN
Init;
END DateIO.