home *** CD-ROM | disk | FTP | other *** search
- UNIT KalDef;
-
- {$X+,F+,O+,D-,L-,R-,B-}
-
- INTERFACE
-
- USES Dos, Objects;
-
- const Copyright = ' (c) 1991 G. Blumert, Hochdonner Chaussee 16, D-2224 Burg/Dithm.';
-
- TYPE
-
- STRING40 = STRING[40];
-
-
- PUnSortedStringCollection = ^UnSortedStringCollection;
- UnSortedStringCollection = OBJECT(TStringCollection)
- constructor init(ALimit, ADelta: integer);
- FUNCTION Compare(Key1, Key2: POINTER): INTEGER; VIRTUAL;
- END;
- { Compare gibt stets 0 zurück, daher werden die Strings in der Reihenfolge }
- { belassen, in der sie angefügt werden }
-
- FtagArr = ARRAY[1..4] OF WORD;
-
- { Für GetMoonMonth }
- Kalenderdatum = RECORD
- t,m,j: INTEGER;
- h, min: BYTE
- END;
- MondMonat = ARRAY[1..6] OF Kalenderdatum;
-
- Feiertagstabelle = RECORD
- beachten : BOOLEAN;
- JMin, JMax : INTEGER;
- CASE Art: CHAR OF
- 'A','O': (Differenz: INTEGER); { Advent, Ostern }
-
- { Am ersten Tag mit Wochentagnummer ab Tagnummer T_min }
- 'W': (T_min, Dummy: WORD; Wochentagnummer: BYTE);
-
- { Am festen Datum }
- 'D': (Tagnummer: WORD);
-
- { In Schaltjahren }
- 'S': (Nummer: INTEGER)
-
- END;
-
- PFtagRec = ^FTagRec;
- FTagRec = OBJECT(TObject)
- Tab : Feiertagstabelle;
- Name: PString;
- END;
-
- Jahr = ARRAY[1..386] OF FtagArr; { Nimmt Nummern der Feiertage auf }
- PJahr = ^Jahr;
-
- Header_des_kalenderfiles = RECORD
- cor : STRING[Length(Copyright)];
- Kennung : CHAR;
- Anzahl_der_Wochentage : BYTE;
- Anzahl_der_Monate : BYTE;
- Anzahl_der_Feiertage : WORD;
- SamstagsNr : BYTE;
- SamstagFrei : BOOLEAN;
- SonntagsNr : BYTE;
- SonntagFrei : BOOLEAN;
- END;
-
- (********************************************************)
- PKalender = ^Kalendarium;
- Kalendarium = OBJECT(TObject)
-
- { Falls Sie dem Anwender erlauben, Kalendarien zu ändern }
- Changed : BOOLEAN;
-
- Kalender_Parameter : Header_des_Kalenderfiles;
- Kalenderpfad : PathStr;
- Wochen_pro_Monat : BYTE;
-
- { Aktuelles Kalenderdatum }
- Akt_Datum : LongInt;
-
- { Liste der Wochentage }
- Wtag : PUnSortedStringCollection;
-
- { Liste der Monate }
- Monat : PUnSortedStringCollection;
-
- { Liste der Feiertage }
- Ftag : PCollection;
-
- { Zeiger auf ein Array, das die Nummern der Feiertage eines }
- { Jahres enthält }
- Feiertage : PJahr;
-
- { Lädt Kalenderdefinition aus angegebener Datei }
- CONSTRUCTOR Load(Name: pathstr);
-
- { Initialisiert keine Kollektionen }
- CONSTRUCTOR INIT;
-
- DESTRUCTOR DONE; VIRTUAL;
-
- { Speichert das Kalendarium in KALENDERPFAD }
- PROCEDURE Store;
-
- { Setzt das Kalenderdatum auf Rechnerdatum, falls möglich }
- PROCEDURE InitDate; VIRTUAL;
-
- { Gibt TRUE zurück, wenn Initialisierung erfolgreich }
- FUNCTION Valid: BOOLEAN; VIRTUAL;
-
- PROCEDURE KGetDate(VAR t,m,j: INTEGER); { Ermittelt Kalenderdatum }
-
- PROCEDURE KSetDate(t,m,j: INTEGER); { Setzt neues Kalenderdatum }
-
- { Rechnet Tag, Monat, Jahr in julianische Tagnummer um }
- FUNCTION Date_JD(t,m,j: INTEGER): LongInt; VIRTUAL;
-
- { Rechnet julianische Tagnummer in Tag, Monat, Jahr um }
- PROCEDURE JD_Date(jd: LongInt; VAR t,m,j: INTEGER); VIRTUAL;
-
- { Ermittlet aus laufender Nummer des Tages im Jahr und Jahreszahl }
- { die julianische Tagnummer }
- FUNCTION MakeJD(nr, j: INTEGER): LongInt;
-
- FUNCTION FirstJ: INTEGER; VIRTUAL; { Erstes Jahr der Gültigkeit }
- FUNCTION LastJ : INTEGER; VIRTUAL; { Letztes Jahr der Gültigkeit }
- FUNCTION FirstJD:LongInt; VIRTUAL; { Erster JD der Gültigkeit }
- FUNCTION LastJD: LongInt; VIRTUAL; { Letzter JD der Gültigkeit }
-
- { Prüft Datum auf Gültigkeit }
- FUNCTION Check_Date(t,m,j: INTEGER):BOOLEAN;
-
- { Prüft Tag auf Gültigkeit }
- FUNCTION Check_Day(t,m,j: INTEGER): BOOLEAN;
-
- { Prüft Monat auf Gültigkeit }
- FUNCTION Check_Month(m,j: INTEGER): BOOLEAN;
-
- { Prüft Jahr auf Gültigkeit }
- FUNCTION Check_Year(j: INTEGER): BOOLEAN; VIRTUAL;
-
- { Prüft julianische Tagnummer auf Gültigkeit }
- FUNCTION Check_JD(jd: LongInt): BOOLEAN;
-
- { Geben TRUE zurück, wenn neues Datum im Gültigkeitsbereich }
-
- { Zählt einen Tag vor/zurück }
- FUNCTION Inc_Tag(VAR t,m,j: INTEGER): BOOLEAN;
- FUNCTION Dec_Tag(VAR t,m,j: INTEGER): BOOLEAN;
-
- { Zählt einen Monat vor/zurück }
- FUNCTION Inc_Monat(VAR m,j: INTEGER): BOOLEAN;
- FUNCTION Dec_Monat(VAR m,j: INTEGER): BOOLEAN;
-
- { Zählt Count Jahre vor/zurück }
- FUNCTION Inc_Jahr(count: INTEGER; VAR j: INTEGER): BOOLEAN; VIRTUAL;
-
- { Gibt Anzahl der Tage des Monats zurück }
- FUNCTION Anz_Tage(m,j: INTEGER): BYTE; VIRTUAL;
-
- { Gibt Anzahl der Monate im Jahr J zurück }
- FUNCTION Anz_Monate(j: INTEGER): BYTE; VIRTUAL;
-
- { Gibt den Namen des Monats zurück }
- FUNCTION Monatname(m,j: INTEGER): STRING; VIRTUAL;
-
- { Ermittelt aus Nummer des julianischen Tages die des jul. Jahres }
- FUNCTION Julian_Year(jd: LongInt): INTEGER;
-
- { True in Schaltjahren }
- FUNCTION Schaltjahr(j: INTEGER): BOOLEAN; VIRTUAL;
-
- FUNCTION Ermittle_Wochentagnummer(t,m,j: INTEGER): BYTE; VIRTUAL;
-
- { Ermittelt Indiktionszahl - JJ = julianische Jahreszahl! }
- FUNCTION RoemerZinsZahl(jj: INTEGER): BYTE;
-
- { Ermittelt die goldene Zahl für das Jahr }
- { Ist nur definiert für Greg_Kal und Jul_Kal! }
- FUNCTION GOLDENE_ZAHL(j: INTEGER): BYTE; VIRTUAL;
-
- { Ermittelt die laufende Nummer des Tages im Jahr }
- FUNCTION TAG_IM_JAHR(t,m,j: INTEGER): INTEGER; VIRTUAL;
-
- { Eingabe: laufende Nummer und Jahr - Ausgabe: Tag und Monat }
- PROCEDURE ERMITTLE_DATUM(nr: INTEGER; VAR t,m: INTEGER; j: INTEGER); VIRTUAL;
-
- {Ermittelt aus dem Datum die Nummer der dazugehörigen Kalenderwoche }
- { Diese Funktion geht davon aus, daß die Woche, in die der erste }
- { Tag mit der Nummer 0 (Montag) fällt, die erste Kalenderwoche ist. }
- { Eine Funktion nach DIN 1355 ist in G_Kal.PAS implementiert }
- FUNCTION KAL_WO(t,m,j: INTEGER): BYTE; VIRTUAL;
-
- { Ermittelt die laufende Tagnummer von Ostern }
- FUNCTION OSTERN(j: INTEGER): INTEGER; VIRTUAL;
-
- { Ermittelt die laufende Tagnummer des 1. Advent }
- FUNCTION ADVENT(j: INTEGER): INTEGER; VIRTUAL;
-
- { TRUE, wenn Datum ein Feiertag ist }
- FUNCTION IsFeiertag(tnr,t,m,j: INTEGER): BOOLEAN; VIRTUAL;
-
- { Gibt ein Array mit bis zu vier Feiertagen zurück, die auf den }
- { gleichen Tag fallen. -1 = ungültig! }
- { nr enthält laufende Nummer des Tages im Jahr }
- PROCEDURE FTAG_NUMMER(nr, j: INTEGER; VAR FTs: FTagArr);
-
- { Gibt in Mond die Daten der drei am nächsten liegenden Vollmond/ }
- { Neumond - Daten zurück. }
- { 1..3 = Neumond, 4..6 = Vollmond; M = 0 ==> ungültig }
- PROCEDURE GET_MoonMonth(mm,mj: INTEGER; VAR mond: mondmonat); VIRTUAL;
-
- { Gibt Vollmond bzw. Neumond - Daten als String zurück }
- FUNCTION MakeMoonString(m: INTEGER; index: BYTE; Mond: MondMonat): STRING;
-
- { Laufende Nummer des Werktages im Monat/Jahr }
- FUNCTION Werktag_im_Monat(tt,mm,jj: INTEGER): INTEGER;
- FUNCTION Werktag_im_Jahr(tt,mm,jj: INTEGER): INTEGER;
-
- { Gibt die Nummer des als String übergebenen Monats zurück, wenn }
- { Nicht gefunden, dann 0 }
- FUNCTION MakeMonat(VAR s: STRING40): INTEGER;
-
- { Ermittlet aus dem übergebenen String das Datum und stellt Kalender}
- { entsprechend ein. Im String darf auch ein Monatsname im Klartext }
- { (oder ein Teil davon) enthalten sein. }
- { Gültig wäre z. B. 1. Ap. 91 }
- { Im greg. Kal wird Jahreszahl < 100 als 1980 < j <= 2080 interpret.}
- FUNCTION MakeDatum(altdatum: STRING40): BOOLEAN;
-
- { Füllt die Kollektionen mit Namen und Daten der Feiert. des einge- }
- { stellten Monats }
- FUNCTION Fuelle_FeiertagsListe(FListe: PUnsortedStringCollection): BOOLEAN;
-
- { Füllt Feiertage^ }
- PROCEDURE InitJahr(j: INTEGER);
-
- { Ermittelt aus der übergebenen Tabelle die Nummer des Tages im Jahr}
- { j, auf den der beschriebene Feiertag fällt }
- FUNCTION GetFtDayNumber(Tab: Feiertagstabelle;j: INTEGER): INTEGER; VIRTUAL;
-
- { Trägt die Nummer FTagNum für den Tag tnr in Feiertage^ ein }
- PROCEDURE Trage_ein(tnr: INTEGER; FTagNum: WORD);
-
- { Prüft, ob Feiertag im Jahr j angezeigt werden soll }
- FUNCTION CheckFTJahr(Jmin, JMax, J: INTEGER): BOOLEAN;
-
- { Setzt einige Parameter in Abhängigkeit des Kalendariums }
- PROCEDURE InitSpecials; VIRTUAL;
-
- PRIVATE
-
- Altjahr : INTEGER;
- IsValid : BOOLEAN;
-
- END;
-
- CONST
- { Index-Konstanten für MakeMoonString }
- Vollmond = 4;
- Neumond = 1;
-
- { Konstanten für Fehlermeldungen }
- KeinFehler = 0;
- NichtGefunden = 2;
-
- IMPLEMENTATION
-
- USES App, Views, MsgBox, Memory, Tabellen, KalDos, Drivers;
-
-