This is Info file ./de/gcal.info, produced by Makeinfo version 1.67
from the input file ./de/gcal.texi.

INFO-DIR-SECTION GNU Pakete
START-INFO-DIR-ENTRY
* Gcal: (gcal).                         Das GNU Kalenderprogramm.
* tcal: (gcal)Aufruf von tcal.          Gcal mit morgigem Datum aufrufen.
* txt2gcal: (gcal)Aufruf von txt2gcal.  Textdatei zu Ressourcendatei wandeln.
* gcal2txt: (gcal)Aufruf von gcal2txt.  Ressourcendatei zu Textdatei wandeln.
END-INFO-DIR-ENTRY

Diese Datei beschreibt Gcal, ein Programm um Kalender auszugeben.  Gcal
gibt Monatskalender und Jahreskalender, ewige Feiertagslisten sowie
Terminlisten auf viele verschiedene Arten und Weisen aus.  Es
ber"ucksichtigt diejenigen Daten korrekt, welche "ubergangen wurden,
als der derzeitig g"ultige Gregorianische Kalender den vormals g"ultigen
Julianischen Kalender abl"oste.

Copyright (C) 1994, 1995, 1996, 1997 Thomas Esken

Das ist die zweite Ausgabe der Gcal Dokumentation.

Hiermit wird die Erlaubnis erteilt, wortgetreue Kopien dieses Handbuchs
zu erstellen und zu vertreiben, sofern alle gemachten Kopien mit dem
Copyrightvermerk und diesem Genehmigungsvermerk ausgestattet sind und
vorgenannte Vermerke erhalten bleiben.

Hiermit wird die Erlaubnis erteilt, ver"anderte Kopien dieses Handbuchs
wie unter den Bedingungen f"ur wortgetreue Kopien zu erstellen und zu
vertreiben, sofern die ausgef"uhrten Arbeiten in Ableitung und
Gesamtheit innerhalb der Bestimmungen eines Genehmigungsvermerks liegen
und zudem mit diesem ausgestattet sind, welcher mit diesem hier
identisch ist.

Hiermit wird die Erlaubnis erteilt, wie unter den vorgenannten
Bedingungen f"ur ver"anderte Versionen "Ubersetzungen dieses Handbuchs
in eine andere Sprache zu erstellen und zu vertreiben, mit der
Ausnahme, dass dieser Genehmigungsvermerk in einer "Ubersetzung
angegeben sein darf, welche von der Free Software Foundation gebilligt
wird.

Jedwede Vorschl"age, Verbesserungen, Erweiterungen, Fehlerberichte,
Geld- und Sachspenden, Programmierauftr"age usw. sind stets willkommen.
Bitte senden Sie diese direkt an meine eMail Adresse.  Wenn Sie dieses
Werkzeug m"ogen, so w"urde ich mich sehr "uber eine Postkarte von Ihnen
freuen!

------------------------oOO      \\\_''/      OOo---------------------------
Thomas Esken               O     (/o-o\)     O  eMail: esken@uni-muenster.de
Im Hagenfeld 84                 ((  ^  ))       Phone: +49 251 232585
D-48147 Muenster; Germany    \____) ~ (____/    MotD : 2old2live, 2young2die


File: gcal.info,  Node: Ressourcendateibeispiele,  Prev: Ressourcendatei,  Up: Termine

Ressourcendateibeispiele
========================

Um einen konkreten Eindruck von den Einsatzm"oglichkeiten aller die
Termine betreffenden Eigenschaften von Gcal zu erhalten, folgen nun
einige Beispiele problembezogener Ressourcendateien.

Zun"achst ein ganz allgemeines Beispiel:

     ; Das ist ein allgemeines Beispiel einer Ressourcendatei.
     ;
     19940715 Uhrzeit: %t --> Zahnarzttermin um 10:00 Uhr
     00000921 Mein %b1962 Geburtstag%i1962#2062
     0000093 Die~Gregorianische Reformation\~war vor %y1582 Jahren
     0000Sep03 Die~Gregorianische Reformation\~war vor %y1582 Jahren
     0 Jeder Tag in jedem Monat in jedem Jahr
     0000 Jeder Tag in jedem Monat in jedem Jahr
     00000000 Jeder Tag in jedem Monat in jedem Jahr
     199400fre        Immer Freitags 1994
     000007mo3 Jeder dritte Montag im Juli~jeden Jahres kleiner 1980%i#1979
     0000@e-10 Ostersonntag-10 Tage in jedem Jahr
     0@e-10 Ostersonntag-10 Tage in jedem Jahr
     00000000@e+10 Ostersonntag+10 Tage in jedem Jahr
     a=1127
     0@a+20 20 Tage nach dem Datum der Datumvariablen `a'
     a=*W10FR
     0@a-1 Der Donnerstag der 10'ten ISO-Woche in jedem Jahr
     0@a   Der Freitag der 10'ten ISO-Woche in jedem Jahr
     0@a1  Der Samstag der 10'ten ISO-Woche in jedem Jahr
     1995*d10    Der 10'te absolute Tag in 1995
     1995*d99die Der letzte Dienstag in 1995
     0*w99so Der Sonntag der letzten ISO-Woche in jedem Jahr
     ;
     ; Der folgende Eintrag wird von ALLEN
     ;   Terminzeitraum-Modifizierern verarbeitet.
     ;
     1994*d1sun#SON.7 Jeder Sonntag in 1994
     ;
     ; Buss- und Bettag ist der Mittwoch vor dem Sonntag,
     ;   der vor dem 1'ten Adventssonntag liegt.
     ;
     a=1225
     a=a-5so
     0@a-4 Buss- und Bettag
     ; oder
     0@a-1mit Buss- und Bettag

Und hier eine Ressourcendatei mit dem Dateinamen `demo3.rc', mit der
alle Freitage bestimmt werden k"onnen, die auf den 13'ten Tag eines
Monats fallen:

     $a=Freitag der 13'te%i0000
     $b=#0000
     $c=fr2
     $d=fr3
     00000113 $a01$c$b01$c
     00000113 $a01$d$b01$d
     00000213 $a02$c$b02$c
     00000213 $a02$d$b02$d
     00000313 $a03$c$b03$c
     00000313 $a03$d$b03$d
     00000413 $a04$c$b04$c
     00000413 $a04$d$b04$d
     00000513 $a05$c$b05$c
     00000513 $a05$d$b05$d
     00000613 $a06$c$b06$c
     00000613 $a06$d$b06$d
     00000713 $a07$c$b07$c
     00000713 $a07$d$b07$d
     00000813 $a08$c$b08$c
     00000813 $a08$d$b08$d
     00000913 $a09$c$b09$c
     00000913 $a09$d$b09$d
     00001013 $a10$c$b10$c
     00001013 $a10$d$b10$d
     00001113 $a11$c$b11$c
     00001113 $a11$d$b11$d
     00001213 $a12$c$b12$c
     00001213 $a12$d$b12$d

F"ur die Jahre 1996...2002 ist das Ergebnis wie folgt:

     $ gcal -H no -u -x -f ./demo3.rc 1996+2002
     -|
     -| Fr,  13 Sep 1996: Freitag der 13'te
     -| Fr,  13 Dez 1996: Freitag der 13'te
     -|
     -| Fr,  13 Jun 1997: Freitag der 13'te
     -|
     -| Fr,  13 Feb 1998: Freitag der 13'te
     -| Fr,  13 Mae 1998: Freitag der 13'te
     -| Fr,  13 Nov 1998: Freitag der 13'te
     -|
     -| Fr,  13 Aug 1999: Freitag der 13'te
     -|
     -| Fr,  13 Okt 2000: Freitag der 13'te
     -|
     -| Fr,  13 Apr 2001: Freitag der 13'te
     -| Fr,  13 Jul 2001: Freitag der 13'te
     -|
     -| Fr,  13 Sep 2002: Freitag der 13'te
     -| Fr,  13 Dez 2002: Freitag der 13'te

Oder eine etwas k"urzere Version der Ressourcendatei `demo3.rc' mit dem
Dateinamen `demo4.rc', mit der ebenfalls alle Freitage bestimmt werden
k"onnen, die auf den 13'ten Tag eines Monats fallen, und zwar unter
Ausnutzung der Tatsache, dass ein Freitag als 13'ter Tag des Monats nur
dann auftreten kann, wenn der erste Tag des Monats ein Sonntag ist:

     $a=Freitag der 13'te ist am %n+12%i0000
     $b=#0000
     $c=so1
     00000101 $a01$c$b01$c
     00000201 $a02$c$b02$c
     00000301 $a03$c$b03$c
     00000401 $a04$c$b04$c
     00000501 $a05$c$b05$c
     00000601 $a06$c$b06$c
     00000701 $a07$c$b07$c
     00000801 $a08$c$b08$c
     00000901 $a09$c$b09$c
     00001001 $a10$c$b10$c
     00001101 $a11$c$b11$c
     00001201 $a12$c$b12$c

F"ur die Jahre 1996...2002 ist das Ergebnis wie folgt:

     $ gcal -H no -u -x -f ./demo4.rc 1996+2002
     -|
     -| So,   1 Sep 1996: Freitag der 13'te ist am 13-Sep-1996
     -| So,   1 Dez 1996: Freitag der 13'te ist am 13-Dez-1996
     -|
     -| So,   1 Jun 1997: Freitag der 13'te ist am 13-Jun-1997
     -|
     -| So,   1 Feb 1998: Freitag der 13'te ist am 13-Feb-1998
     -| So,   1 Mae 1998: Freitag der 13'te ist am 13-Mae-1998
     -| So,   1 Nov 1998: Freitag der 13'te ist am 13-Nov-1998
     -|
     -| So,   1 Aug 1999: Freitag der 13'te ist am 13-Aug-1999
     -|
     -| So,   1 Okt 2000: Freitag der 13'te ist am 13-Okt-2000
     -|
     -| So,   1 Apr 2001: Freitag der 13'te ist am 13-Apr-2001
     -| So,   1 Jul 2001: Freitag der 13'te ist am 13-Jul-2001
     -|
     -| So,   1 Sep 2002: Freitag der 13'te ist am 13-Sep-2002
     -| So,   1 Dez 2002: Freitag der 13'te ist am 13-Dez-2002

Nat"urlich kann vorstehender Aufwand zur Ermittlung aller Freitage, die
auf den 13'ten eines Monats fallen, auch textlich recht drastisch
reduziert werden, indem einfach nur

     0*d1fre#99fre.7 Freitag der 13'te%i00000013#00000013

in der Ressourcendatei `demo3.rc' benutzt wird, beziehungsweise

     0*d1son#99son.7 Freitag der 13'te ist am %n+12%i00000001#00000001

in der `demo4.rc' Ressourcendatei benutzt wird.

Allerdings muss hier klar gesagt werden, dass vorstehende *Einzeiler*
zwar den Kodieraufwand in einer Ressourcendatei erheblich reduzieren --
von 28 bzw. 15 Zeilen auf jeweils 1 Zeile --, aber der Pr"ufaufwand
dieser *Einzeiler* allerdings zum Teil erheblich h"oher ist, was sich
dann an einer l"angeren Programmlaufzeit bemerkbar macht.  Beide
*Einzeiler* verursachen intern circa 52 Produktionen bzw. effektive
Termineintr"age ihrer selbst je Jahr, welches von Gcal abgepr"uft wird,
wobei die `demo3.rc' und `demo4.rc' Ressourcendateien nur zu 24 bzw.
12 effektiven Termineintr"agen auslaufen.

Und hier eine Ressourcendatei mit dem Dateinamen `demo5.rc', mit der
alle Werktage eines beliebigen Monats bestimmt werden k"onnen:

     $a=%VWerktag
     $c=%i#0000$b99
     a=$bmo1
     0@a#+4 $a
     a=$bdi1
     0@a#+3 $a
     a=$bmi1
     0@a#+2 $a
     a=$bdo1
     0@a#+1 $a
     a=$bfr1
     0@a $a
     a=$bmo2
     0@a#+4 $a
     a=$bmo3
     0@a#+4 $a
     a=$bmo4
     0@a#+4 $a$c
     a=$bmo9
     0@a#+4 $a$c

Beziehungsweise eine etwas k"urzere Version der Ressourcendatei
`demo5.rc':

     $a=%VWerktag
     $c=%i#0000$b99
     0000$bmo1:5 $a
     0000$bdi1:4 $a
     0000$bmi1:3 $a
     0000$bdo1:2 $a
     0000$bfr1:1 $a
     0000$bmo2:5 $a
     0000$bmo3:5 $a
     0000$bmo4:5 $a$c
     0000$bmo9:5 $a$c

Und es existiert eine Ressourcendatei mit dem Namen `include.rc', die
nur zur Einf"ugung einer beliebigen Ressourcendateien gedacht ist:

     #include "$f"

Dann ist das Ergebnis f"ur den Monat August 1996 wie folgt:

     $ gcal -H no -u -x -r '$b=08:$f=demo5.rc' -f ./include.rc Aug 1996
     -|
     -| Do,   1 Aug 1996: Werktag
     -| Fr,   2 Aug 1996: Werktag
     -| Mo,   5 Aug 1996: Werktag
     -| Di,   6 Aug 1996: Werktag
     -| Mi,   7 Aug 1996: Werktag
     -| Do,   8 Aug 1996: Werktag
     -| Fr,   9 Aug 1996: Werktag
     -| Mo,  12 Aug 1996: Werktag
     -| Di,  13 Aug 1996: Werktag
     -| Mi,  14 Aug 1996: Werktag
     -| Do,  15 Aug 1996: Werktag
     -| Fr,  16 Aug 1996: Werktag
     -| Mo,  19 Aug 1996: Werktag
     -| Di,  20 Aug 1996: Werktag
     -| Mi,  21 Aug 1996: Werktag
     -| Do,  22 Aug 1996: Werktag
     -| Fr,  23 Aug 1996: Werktag
     -| Mo,  26 Aug 1996: Werktag
     -| Di,  27 Aug 1996: Werktag
     -| Mi,  28 Aug 1996: Werktag
     -| Do,  29 Aug 1996: Werktag
     -| Fr,  30 Aug 1996: Werktag

So kann auch hier vorstehender Aufwand zur Ermittlung aller Werktage
eines beliebigen Monats textlich recht drastisch reduziert werden,
indem einfach nur

     00000001#0099 %V%rWerktag

in der Ressourcendatei `demo5.rc' benutzt wird.

Und abschliessend eine Ressourcendatei mit dem Namen `swzeit.rc', die
Termine f"ur den Zeitraum zwei Tage vor bis zwei Tage nach Umstellung
auf Sommerzeit/Winterzeit (ab 1980) f"ur die Bundesrepublik Deutschland
bewirkt:

     ;
     ; `swzeit.rc'; Sommerzeit/Winterzeit BRD
     ;
     $a=zeitumstellung am Sonntag
     ;
     a=03so9
     0@a-2#+2 Sommer$a~+1 Std. (02.00 --> 03.00 Uhr)%i1980
     ;
     a=09so9
     0@a-2#+2 Winter$a~-1 Std. (03.00 --> 02.00 Uhr)%i1980#1995
     ;
     a=10so9
     0@a-2#+2 Winter$a~-1 Std. (03.00 --> 02.00 Uhr)%i1996


File: gcal.info,  Node: Heutiger Kalender,  Next: Gcal Hilfsprogramme,  Prev: Termine,  Up: Top

Entstehungsgeschichte des Gregorianischen Kalenders
***************************************************

Der heutzutage benutzte Kalender wurde -- basierend auf Verfahren, die
von den Babyloniern und "Agyptern entwickelt wurden -- zuerst von den
R"omern in zahlreichen ungenauen Variationen formuliert, die alle zum
Ziel hatten, den Mond- und Sonnenlauf in Einklang zu bringen.  So kam
es, dass in der Zeit des Julius C"asar der Monat Januar in den Herbst
fiel.  Auf C"asars Befehl hin wurde von Sosigenes eine Kalenderreform
durchgef"uhrt.  Dieser addierte 90 Tage zu dem Jahr 46 vor Christus, um
den bis dahin aufgelaufenen jahreszeitlichen Versatz zu korrigieren.
Zudem modifizierte er die Monatsl"angen "ahnlich der Form, wie wir sie
heute noch benutzen.  Weiterhin wurde das Schaltjahr von ihm
eingef"uhrt, indem alle vier Jahre ein weiterer Tag im Monat Februar
hinzuaddiert wurde.  Die Schaltjahrregelung sah zun"achst so aus, dass
alle vier Jahre nach dem 23'ten Tag im Februar ein Schalttag eingelegt
wurde, der 24'te Februar wurde zu einem "Doppeltag", fand also zweimal
statt.  Die Benutzung eines Schaltjahres war eine echte Verbesserung
der Kalenderrechnung, aber noch nicht in vollem Umfang exakt.

In den folgenden Jahren wurde die Schaltregel aber falsch angewendet,
und so korrigierte Kaiser Augustus im Jahre 8 vor Christus die Fehler.
Dabei kam es zu einem kuriosen Nachspiel.  Da Augustus mit grosser
Eifersucht auf alles reagierte, was zuvor Julius C"asar getan bzw.
angestrengt hatte, ertrug er auch nicht dessen Ehrung im Kalender, den
heutigen Monat *Juli*.  Er benannte kurzerhand einen anderen Monat nach
sich selbst, und so entstand der Monatsname *August*.  Weiterhin
duldete Augustus nicht, dass sein Geburtsmonat August im Sinne der
regelm"assigen Abfolge von Monaten mit 30 und 31 Tagen k"urzer war als
der Monat C"asars.  Konsequenterweise bekam der August ebenfalls 31
Tage.  Daf"ur musste der Februar noch weiter, auf 28 bzw. 29 Tage,
schrumpfen, so dass nun der 29'te Februar zum Schalttag wurde.

Dieser Kalender ist als der "Julianische Kalender" in die
Geschichtsschreibung eingegangen und hat ein reines Sonnenjahr zur
Grundlage.  Die Soll-L"ange eines Sonnenjahres (bzw. sogenannten
tropischen Jahres) betr"agt 365 Tage, 5 Stunden, 48 Minuten und 46
Sekunden.  Ein 366-Tage Jahr, welches alle vier Jahre stattfindet,
setzt nun aber die Durchschnittsl"ange von einem Julianischen Jahr auf
365 Tage und 6 Stunden, also auf 365,25 Tage.  Das bedeutet somit, dass
sich alle vier Jahre ein Fehler von 44 Minuten und 56 Sekunden in diese
Kalenderrechnung einschleicht.  Die Jahre werden aufgrund dieser
Z"ahlweise etwas zu lang, und zwar um gut 11 Minuten.

So kam es, dass der Fr"uhlingsanfang im 16'ten Jahrhundert auf den
11'ten M"arz fiel -- anstatt auf den 21'ten M"arz --, und zwar durch
einen bis dahin akkumulierten Fehler von zehn Tagen.  Auch das
Osterfest r"uckte stets mehr und mehr vom gewohnten Fr"uhlingstermin ab
und musste immer fr"uher gefeiert werden.  Papst Gregor XIII ordnete
eine weitere Kalenderreform an, um diesen Fehler zu kompensieren.  So
wurde der Fr"uhlingsanfang auf den 21'ten M"arz festgelegt und
Donnerstag, der 4'te Oktober, wurde gefolgt von Freitag, dem 15'ten
Oktober, indem einfach zehn Tage im Kalender "ubersprungen wurden.
Zudem wurde alle 400 Jahre ein Schaltjahrhundert eingef"uhrt und
weiterhin bestimmt, dass die Jahrhundertwenden keine Schaltjahre mehr
sind, mit der Ausnahme, dass Jahrhundertwenden, die durch 400
ganzzahlig teilbar sind, dennoch Schaltjahre bleiben sollten.  Diese
Regelung verminderte den Fehler in der Kalenderrechnung um weitere 72
Stunden (3 Tage) alle 400 Jahre.  Der aktuelle "Uberschuss betr"agt
akkumuliert 74 Stunden, 53 Minuten und 20 Sekunden.  Der Fehler von 2
Stunden, 53 Minuten und 20 Sekunden pro Zeitraum von 400 Jahren
bel"auft sich auf einen Tag in 3323 Jahren.  Damit hat das
Gregorianische Jahr eine Durchschnittsl"ange von 365,2425 Tagen.

Dieser "Gregorianische Kalender" setzte sich aber nur sehr langsam
durch.  Katholisch regierte L"ander "ubernahmen den Gregorianischen
Kalender sofort oder innerhalb weniger Jahre.  Die meisten
protestantisch regierten L"ander auf dem europ"aischen Kontinent
"ubernahmen den neuen Gregorianischen Kalender um 1700.  England und
die amerikanischen Kolonien wechselten zu dem Kalender im Jahre 1752
durch Parlamentsbeschluss.  Orthodox christianisierte L"ander
"ubernahmen den Gregorianischen Kalender sp"ater.  Russland war das
letzte europ"aische Land, dass diesen Kalender "ubernahm, und zwar nach
der Kommunistischen Revolution, welche am 25'ten Oktober 1917
(Gregorianisch) stattfand.  Daraus resultierte, dass die UDSSR den Tag
der Oktoberrevolution nach dem alten Julianischen Kalender am 7'ten
November feierte.

Als bisher letzter Staat stellte die Volksrepublik China im Jahre 1949
seine Zeitrechnung auf den Gregorianischen Kalender um.  Heute ist die
weltweit einheitliche Zeitrechnung schon bereits wieder Geschichte
geworden.  So ist der Iran im Jahre 1979 nach Absetzung des
Schah-Regierung wieder zum traditionellen mohammedanischen Mondkalender
zur"uckgekehrt.  Es gibt auch einige Bem"uhungen, unseren gegenw"artig
g"ultigen Gregorianischen Kalender zu verbessern.  Die Nachteile
bestehen darin, dass ein bestimmter Kalendertag nicht immer auf den
gleichen Wochentag f"allt.  Zudem sind die Monate ungleich lang und die
an das Osterfest gebundenen Feiertage verschieben sich innerhalb des
Kalenders von Jahr zu Jahr.  Ein recht ausgereifter Vorschlag wurde von
den Vereinten Nationen vorgetragen.  Seine internationale Einf"uhrung
scheiterte jedoch am Widerstand einiger L"ander, aber auch der Kirchen.


File: gcal.info,  Node: Gcal Hilfsprogramme,  Next: Internationalisierung,  Prev: Heutiger Kalender,  Up: Top

Gcal Hilfsprogramme
*******************

* Menu:

* Aufruf von tcal::      Wie starte ich das `tcal' Programm?
* Aufruf von txt2gcal::  Wie starte ich das `txt2gcal' Programm?
* Aufruf von gcal2txt::  Wie starte ich das `gcal2txt' Programm?

Drei kleine Hilfsprogramme sind im Gcal 2.40 Paket enthalten.  Das
`tcal' Programm startet das Gcal Programm mit dem Datum des morgigen
Tages.  Das `txt2gcal' Programm erzeugt eine wortgetreue Gcal
Ressourcendatei aus einer Textdatei, und im Gegensatz dazu erstellt das
`gcal2txt' Programm eine wortgetreue Textdatei aus einer Gcal
Ressourcendatei.


File: gcal.info,  Node: Aufruf von tcal,  Next: Aufruf von txt2gcal,  Prev: Gcal Hilfsprogramme,  Up: Gcal Hilfsprogramme

Aufruf von `tcal'
=================

`tcal' ist ein Programm, welches `gcal' mit dem Datum des morgigen
Tages aufruft (1).  Seine Argumente sind wie folgt:

     tcal [--help | --version] | [--shift=[+|-]ZAHL] [ARGUMENT...]

Alle gegebenen ARGUMENTE werden unver"andert an das Gcal Programm
"ubergeben.  Soll das Gcal Programm mit einem anderen Datum als dem
Datum des morgigen Tages aufgerufen werden, so kann dieses gew"unschte
Datum mittels der `--shift=[+|-]ZAHL' Option vorgew"ahlt werden, wobei
`[+|-]ZAHL' die Distanz an Tagen ist, die das gew"unschte Datum vom
aktuellen Systemdatum (==heute) entfernt ist (funktioniert nur f"ur
Gregorianische Jahre).  Die `--shift' Option muss vor allen anderen
ARGUMENTEN, die an das Gcal Programm "ubergeben werden, angegeben sein.

Falls eine `GCALPROG' Umgebungsvariable (*note GCALPROG:
Umgebungsvariablen.) definiert und mit dem Dateinamen des ausf"uhrbaren
Gcal Programms gesetzt ist, so benutzt `tcal' diesen Dateinamen, um
Gcal aufzurufen.  Andernfalls benutzt `tcal' den beim
Kompilationsvorgang eingebrannten Dateinamen `gcal', um das Gcal
Progamm aufzurufen.  Ein Programmendestatus 0 bedeutet, dass die
Verarbeitung erfolgreich war, ein anderer Endestatus verweist auf einen
Fehler w"ahrend der Verarbeitung.

Das Programm akzeptiert die folgenden Optionen:

`--help'
     Ausgabe eines Hilfetextes, der alle verf"ugbaren Optionen
     aufzeigt; sodann erfolgreiche Beendigung des Programms.

`--version'
     Ausgabe der Versionsnummer; sodann erfolgreiche Beendigung des
     Programms.

`--shift=[+|-]ZAHL'
     Legt den um `[+|-]ZAHL' vorgegebenen Versatz an Tagen bezogen auf
     das aktuelle Datum fest.

  ---------- Footnotes ----------

  (1)  Das entspricht der `--shift=1' Option.


File: gcal.info,  Node: Aufruf von txt2gcal,  Next: Aufruf von gcal2txt,  Prev: Aufruf von tcal,  Up: Gcal Hilfsprogramme

Aufruf von `txt2gcal'
=====================

`txt2gcal' ist ein Programm, welches aus einer Textdatei eine
wortgetreue Gcal Ressourcendatei erzeugt.  Seine Argumente sind wie
folgt:

     txt2gcal [--help | --version] | [TEXTDATEI | -] [DATUMTEIL]

Wird keine TEXTDATEI oder aber `-' als Argument angegeben, so liest und
verarbeitet das Programm alle Eingaben, die vom
*Standardeingabe-Ger"atekanal* kommen.  Wird kein DATUMTEIL als
Argument angegeben, so wird von `txt2gcal' eine `0' f"ur den Datumteil
erzeugt.  Alle Ergebnisse werden stets auf dem
*Standardausgabe-Ger"atekanal* ausgegeben.  Ein Programmendestatus 0
bedeutet, dass die Verarbeitung erfolgreich war, ein anderer Endestatus
verweist auf einen Fehler w"ahrend der Verarbeitung.

Das Programm akzeptiert die folgenden Optionen:

`--help'
     Ausgabe eines Hilfetextes, der alle verf"ugbaren Optionen
     aufzeigt; sodann erfolgreiche Beendigung des Programms.

`--version'
     Ausgabe der Versionsnummer; sodann erfolgreiche Beendigung des
     Programms.

Nun zu einem Beispiel, welches den Einsatz von `txt2gcal' n"aher
erl"autern soll.  Angenommen es existiert eine Textdatei mit dem Namen
`demo' und folgendem Inhalt:

             Hallo Freunde,
     
     Ich bin der Demo-Text, der lustige Zeichen und Zeichensequenzen
     enthaelt wie ~~ \~ % %% $a $1 %%%\
     %\ %s %%foo %bar \%baz \\~ \~\ und so weiter...
     Ich bin gespannt darauf, wie ich von `txt2gcal' umgesetzt werde.

und `txt2gcal' verarbeitet diese Datei, wobei die Ausgabe in die Datei
`demo.rc' umgelenkt wird:

     $ txt2gcal demo 0*d1#999 > demo.rc
     => 0*d1#999 \        Hallo Freunde,~\
     => ~\
     => Ich bin der Demo-Text, der lustige Zeichen und Zeichensequenzen~\
     => enthaelt wie \~\~ \\~ % %% \$a $1 %%%\ ~\
     => %\ \%s %\%foo \%bar \\%baz \\\~ \\~\ und so weiter...~\
     => Ich bin gespannt darauf, wie ich von `txt2gcal' umgesetzt werde.

dann hat `txt2gcal' nun die neue Gcal Ressourcendatei `demo.rc' aus der
Textdatei `demo' erzeugt.

Abschliessend erfolgt die Betrachtung, wie Gcal diese neue
Ressourcendatei interpretiert:

     $ gcal %19960101 -H no -Ax -f ./demo.rc
     -|
     -| Mo,   1 Jan 1996:
     -|         Hallo Freunde,
     -|
     -| Ich bin der Demo-Text, der lustige Zeichen und Zeichensequenzen
     -| enthaelt wie ~~ \~ % %% $a $1 %%%\
     -| %\ %s %%foo %bar \%baz \\~ \~\ und so weiter...
     -| Ich bin gespannt darauf, wie ich von `txt2gcal' umgesetzt werde.


File: gcal.info,  Node: Aufruf von gcal2txt,  Prev: Aufruf von txt2gcal,  Up: Gcal Hilfsprogramme

Aufruf von `gcal2txt'
=====================

`gcal2txt' ist ein Programm, welches aus einer Gcal Ressourcendatei
eine wortgetreue Textdatei erzeugt.  Seine Argumente sind wie folgt:

     gcal2txt [--help | --version] | [RESSOURCENDATEI | -]

Wird keine RESSOURCENDATEI oder aber `-' als Argument angegeben, so
liest und verarbeitet das Programm alle Eingaben, die vom
*Standardeingabe-Ger"atekanal* kommen.  Alle Ergebnisse werden stets
auf dem *Standardausgabe-Ger"atekanal* ausgegeben.  Ein
Programmendestatus 0 bedeutet, dass die Verarbeitung erfolgreich war,
ein anderer Endestatus verweist auf einen Fehler w"ahrend der
Verarbeitung.

Sinn und Zweck von `gcal2txt' ist, all das, was von `txt2gcal' in die
Ausgabe eingebracht wurde, wieder r"uckg"angig zu machen!

Das Programm akzeptiert die folgenden Optionen:

`--help'
     Ausgabe eines Hilfetextes, der alle verf"ugbaren Optionen
     aufzeigt; sodann erfolgreiche Beendigung des Programms.

`--version'
     Ausgabe der Versionsnummer; sodann erfolgreiche Beendigung des
     Programms.

Und nun ebenfalls zu einem Beispiel, welches den Einsatz von `gcal2txt'
n"aher erl"autern soll.  Dazu wird die Ressourcendatei mit dem Namen
`demo.rc' benutzt, welche im vorherigen Abschnitt mittels `txt2gcal'
aus einer Textdatei erzeugt wurde (*note Aufruf von `txt2gcal': Aufruf
von txt2gcal.), und die ja wie folgt aussieht:

     $ cat demo.rc
     -| 0*d1#999 \        Hallo Freunde,~\
     -| ~\
     -| Ich bin der Demo-Text, der lustige Zeichen und Zeichensequenzen~\
     -| enthaelt wie \~\~ \\~ % %% \$a $1 %%%\ ~\
     -| %\ \%s %\%foo \%bar \\%baz \\\~ \\~\ und so weiter...~\
     -| Ich bin gespannt darauf, wie ich von `txt2gcal' umgesetzt werde.

Nun zur Betrachtung, wie diese Ressourcendatei von `gcal2txt'
verarbeitet wird:

     $ gcal2txt demo.rc
     -|         Hallo Freunde,
     -|
     -| Ich bin der Demo-Text, der lustige Zeichen und Zeichensequenzen
     -| enthaelt wie ~~ \~ % %% $a $1 %%%\
     -| %\ %s %%foo %bar \%baz \\~ \~\ und so weiter...
     -| Ich bin gespannt darauf, wie ich von `txt2gcal' umgesetzt werde.


File: gcal.info,  Node: Internationalisierung,  Next: Metasymbole,  Prev: Gcal Hilfsprogramme,  Up: Top

Gesichtspunkte zur Internationalisierung
****************************************

Gcal besitzt ab Version 2.00 die F"ahigkeit, Meldungstexte nicht mehr
nur allein in englischer Landessprache auszugeben, sondern auch in
beliebigen anderen Landessprachen, da Bestandteile des GNU `gettext'
Pakets in die Software integriert worden sind.  *Note Introduction:
(gettext)Top, f"ur weitere Details.

Gcal ist intern so eingestellt, dass es die englische Landessprache zur
Ausgabe aller Meldungstexte verwendet, sofern keine andere Landessprache
verwendet werden soll.  Werden Meldungstexte in einer anderen
Landessprache gew"unscht, so werden diese von Gcal aus einem
sogenannten *message catalog* zur Laufzeit eingelesen.  Die folgenden
Landessprachen werden von Gcal 2.40 unterst"utzt:

*Landessprache*          *Sprachkode*                                     
Englisch                 `en'                                             
Deutsch                  `de'                                             
Franz"osisch             `fr'                                             
Niederl"andisch          `nl'                                             
Schwedisch               `sv'                                             

Um eine andere Landessprache anstelle der englischen Landessprache
vorzuw"ahlen, so braucht nur in einer der Umgebungsvariablen (1):

1.  `LANGUAGE'                                                            
2.  `LC_ALL'                                                              
3.  `LC_MESSAGES'                                                         
4.  `LANG'                                                                

ein entsprechender Sprachkode eintragen zu werden.

Endanwender benutzen normalerweise nur die `LANG' Umgebungsvariable um
Gcal mitzuteilen, welche Landessprache zur Laufzeit verwendet werden
soll.  Angenommen Benutzer m"ochten Gcal mit Meldungstexten in
deutscher Landessprache betreiben, so k"onnen diese die shell dazu
veranlassen, die Umgebungsvariable `LANG' mit dem Inhalt `de' zu
besetzen, und zwar durch `setenv LANG de' (bei Benutzung der `csh'
shell) oder durch `export LANG; LANG=de' (bei Benutzung der `sh' shell).
Selbstverst"andlich kann dieser Befehl auch in der `.login' bzw.
`.profile' Datei beim Endanwender enthalten sein.  *Note The User's
View: (gettext)Users, f"ur weitere Details.

Wie zuvor dargestellt reicht bereits der simple Eintrag von `de' in der
Umgebungsvariablen `LANG' aus, um die Ausgabe deutscher Meldungstexte zu
veranlassen.  `de' ist der aus zwei Buchstaben bestehende Sprachkode
f"ur Deutsch, der in der ISO-639:1988 definiert ist, und im weiteren
Verlauf als "einfache Sprachkode-Information" bezeichnet wird.  Andere
Sprachkodes k"onnen dieser ISO-Norm entnommen werden (2).

Da Gcal als Kalenderprogramm auch den Eigenheiten der verwendeten
Landessprache hinsichtlich der Anordnung von Tag, Monat und Jahr (und
weiterem) in einem dargestellten Datum, dem Zeitraum der
Gregorianischen Reform und der Darstellungsweise von Kalenderbl"attern,
nachkommen muss, sind diese Kriterien ebenfalls an den Sprachkode
gebunden (3).

So bewirkt ein `en' Sprachkode folgende interne Grundeinstellungen
vorgenannter Kriterien:

   * US amerikanisches Datumformat

   * Gregorianische Reformation war 1752

   * Starttag der Woche ist Sonntag

   * Kalenderblattdarstellung

             September 1994
          So Mo Di Mi Do Fr Sa
                       1  2  3
           4  5  6  7  8  9 10
          11 12 13 14 15 16 17
          18 19 20 21 22 23 24
          25 26 27 28 29 30

Und ein `de' Sprachkode (4) bewirkt folgende interne Grundeinstellungen:

   * Deutsches Datumformat

   * Gregorianische Reformation war 1582

   * Starttag der Woche ist Montag

   * Kalenderblattdarstellung

          September 1994
          
          Montag           5 12 19 26
          Dienstag         6 13 20 27
          Mittwoch         7 14 21 28
          Donnerstag    1  8 15 22 29
          Freitag       2  9 16 23 30
          Samstag       3 10 17 24
          Sonntag       4 11 18 25

Alle diese internen Grundeinstellungen sind durch die Angabe der
Optionen `--date-format', `--gregorian-reform', `--starting-day' und
`--type' ver"anderbar.

Falls kein Sprachkode vorgefunden wird, so nimmt Gcal die interne
Grundeinstellung des `en' Sprachkodes an (5).

Falls ein Sprachkode angegeben ist, f"ur den kein *message catalog*
installiert wurde, so nimmt Gcal die internen Grundeinstellungen des
`de' Sprachkodes an, gibt aber die Meldungstexte in der englischen
Landessprache aus.  Dieses Verhalten erscheint mir im Augenblick als
die zweckm"assigste L"osung in einem solchen Fall.  Da die englische
Landessprache weltweit st"arker verbreitet ist als die deutsche oder
andere Landessprachen, macht es in einem solchen Fall durchaus Sinn,
die Meldungstexte in der englischen Landessprache auszugeben.
Allerdings sind die sonstigen Kriterien, die an die englische
Landessprache gebunden sind, so speziell f"ur Benutzer anderer
Landessprachen, dass es aber durchaus Sinn macht, diese Kriterien an die
internen Grundeinstellungen des `de' Sprachkodes anzulehnen, da in den
meisten europ"aischen L"andern (die ich hier zum Massstab mache) im
wesentlichen die internen Grundeinstellungen des `de' Sprachkodes
verwendet werden.

Nun werden sich britische Endanwender sicherlich fragen, ob auch ihr
Datumformat als interne Grundeinstellung benutzt werden kann (6).  Die
Antwort lautet schlicht und ergreifend `ja', allerdings muss dieser
Benutzerkreis anstelle einer einfachen Sprachkode-Information eine
"erweiterte Sprachkode-Information" in der Umgebungsvariable `LANG'
angeben.

Die "ubliche Schablone einer erweiterten Sprachkode-Information ist wie
folgt aufgebaut:

   * Nach XPG Syntax (X/Open Portability Guide):

          LANDESSPRACHE[_TERRITORIUM][.ZEICHENSATZ][@MODIFIZIERER]

   * Nach CEN Syntax (Comit'e Europ'en de Normalisation):

          LANDESSPRACHE[_TERRITORIUM][+PUBLIKUM][+SPEZIAL][,SPONSOR][_"UBERARBEITUNG]

Beide Syntaxen enthalten die Bestandteile LANDESSPRACHE und
TERRITORIUM, welche von Gcal zur Auswahl der Landessprache und der
sonstigen Kriterien verwendet werden.  Der Bestandteil LANDESSPRACHE
entspricht der einfachen Sprachkode-Information, und der Bestandteil
TERRITORIUM ist ein aus zwei Buchstaben bestehender Territoriumskode,
wie er in der ISO-3166 definiert ist, z.B. `GB' f"ur Grossbritannien
oder `US' f"ur die USA.  F"ur weitere Einzelheiten hierzu sei auf die
einschl"agige Fachliteratur verwiesen.  Brititsche Endanwender brauchen
nur die shell dazu veranlassen, die Umgebungsvariable `LANG' mit dem
Inhalt `en_GB' zu besetzen, sodann k"onnen diese das britische
Datumformat als interne Grundeinstellung benutzen.

  ---------- Footnotes ----------

  (1)  Hier in absteigender Priorit"at ihrer Ber"ucksichtigung
aufgestellt.

  (2)  Wie zum Beispiel `fr' f"ur Franz"osisch, `es' f"ur Spanisch...

  (3)  Genaugenommen an eine erweiterte Sprachkode-Information.

  (4)  Oder andere Sprachkodes, f"ur welche in Zukunft ein *message
catalog* erstellt und mit ausgeliefert wird.

  (5)  Besser gesagt der erweiterten Sprachkode-Information `en_US'.

  (6)  Alle anderen internen Grundeinstellungen der einfachen `en'
Sprachkode-Information entsprechen ja sonst bereits ihren Kriterien.


File: gcal.info,  Node: Metasymbole,  Next: Regulaere Ausdruecke,  Prev: Internationalisierung,  Up: Top

Metasymbole
***********

Folgende *metasprachliche* Konventionen werden bei der Darstellung von
Optionen, Kommandos, Argumenten und Schablonen innerhalb dieses
Dokuments verwendet:

`N'
     Nichtoptionales Argument, N muss eine zul"assige Zahl sein.

`e|t|DVAR'
     Nichtoptionales Argument, welches ein einzelnes alphabetisches
     Zeichen sein muss.

`$TVAR'
     Nichtoptionales Argument, welches ein einzelnes alphabetisches
     Zeichen sein muss, das von einem `$' Zeichen angef"uhrt wird.

`[TEXT]'
     Optionales Argument, TEXT ist eine zul"assige
     Zeichenkettenkonstante.

`[AB]'
     Optionale Argumente, deren Anzahl und Anordnung beliebig ist, z.B.:

          NICHTS, A, B, AB, BA ...

`{AB}'
     Nichtoptionale Argumente, deren Anordnung beliebig ist und von
     denen mindestens eins bis hin zu einer beliebigen Anzahl angegeben
     werden kann, z.B.:

          A, B, AB, BA ...

`[A|B]'
     Optionale Argumente, entweder A oder B, aber nicht beide.

`A|B'
     Nichtoptionale Argumente, entweder A oder B, aber nicht beide.

`[A[B]]'
     Optionale Argumentliste, entweder A oder AB, aber nicht B.

`[A|B[C]]'
     Optionale Argumentliste, entweder A oder B oder AC oder BC, aber
     nicht C.

`[A|BC]'
     Optionale Argumentliste, entweder AC oder BC, aber nicht A oder B
     oder C.

`[A]|[B]'
     Optionale Argumentlisten, entweder Liste A oder Liste B, aber
     nicht beide.

`[...]'
     Zus"atzliche Argumente d"urfen angegeben werden und sind optional.


File: gcal.info,  Node: Regulaere Ausdruecke,  Next: Regexps (kurz),  Prev: Metasymbole,  Up: Top

Regul"are Ausdr"ucke
********************

* Menu:

* Benutzung von Regexp::  Wie regul"are Ausdr"ucke benutzt werden k"onnen.
* Regexp Operatoren::     Was sind regul"ar-Ausdruck Operatoren?

Dieser Anhang ist aus den `gawk-3.0.0' und `regex-0.12' Handb"uchern
abgeleitet.

Ein "regul"arer Ausdruck", oder "regexp", ist ein Weg zur Beschreibung
einer Klasse von Zeichenketten, oder "strings".  Der einfachste
regul"are Ausdruck ist eine Folge von Buchstaben, Zahlen, oder beidem.
Solch ein regexp passt auf jedwede Zeichenkette, die eine solche Folge
enth"alt.  Deswegen stimmt der regexp `foo' mit jeder Zeichenkette
"uberein, die `foo' enth"alt.  Andere Arten von regul"aren Ausdr"ucken
erlauben eine weitaus kompliziertere Angabe von string-Klassen.

Gcal benutzt genau eine der folgenden regul"ar-Ausdruck
Programmbibliotheken bzw. Methoden, welche zur Konfigurationszeit, oder
genaugenommen, Kompilationszeit der Software ausgew"ahlt wird; und die
hier in absteigender Priorit"at hinsichtlich ihrer Auswahl angegeben
sind:

*Nr.**Funktion*                                             *Symbol*       
1.   GNU `re_compile_pattern()' und `regex.h'               `GNU-REGEX'    
2.   POSIX `regcomp()' und `regex.h'                        `POSIX-REGEX'  
3.   BSD `re_comp()'                                        `BSD-REGEX'    
4.   System V `regcmp()'                                    `SysV-REGEX'   
5.   Henry Spencer V8 `regcomp()' und `regexp.h'            `V8-REGEX'     
6.   Mustererkennung wird unterst"utzt, aber ohne           `NO-REGEX'     
     Metazeichen                                                           

Benutzen Sie `gcal --version' um festzustellen, welche Art von
regul"ar-Ausdruck Programmbibliothek bzw. Methode in Ihr Gcal Programm
eingebrannt ist!


File: gcal.info,  Node: Benutzung von Regexp,  Next: Regexp Operatoren,  Prev: Regulaere Ausdruecke,  Up: Regulaere Ausdruecke

Benutzung von regul"aren Ausdr"ucken
====================================

Ein regul"arer Ausdruck kann als Suchmuster benutzt werden, wenn bei
Aufruf von Gcal die `--filter-text=SUCHMUSTER' Option angegeben wird.

*Note `--filter-text=SUCHMUSTER': Termin Optionen, f"ur weitere Details.

Der regul"are Ausdruck wird mit dem gesamten, vollst"andig expandierten
Text jedes *g"ultigen* Termins verglichen, und der Termin wird nur dann
ausgegeben, falls das Suchmuster mit dem Text (1) "ubereinstimmt.

  ---------- Footnotes ----------

  (1)  F"ur einen erfolgreichen Vergleich wird normalerweise nur eine
"Ubereinstimmung mit einem Teil des Textes ben"otigt.


File: gcal.info,  Node: Regexp Operatoren,  Prev: Benutzung von Regexp,  Up: Regulaere Ausdruecke

Regul"ar-Ausdruck Operatoren
============================

Regul"are Ausdr"ucke k"onnen mit den folgenden Zeichen kombiniert
werden, welche als "regul"ar-Ausdruck Operatoren" oder "Metazeichen"
bezeichnet werden, um die Leistungsf"ahigkeit und Vielseitigkeit von
regul"aren Ausdr"ucken zu erh"ohen.

Hier ist eine Tabelle dieser Metazeichen.  Alle Zeichen, die nicht in
dieser Tabelle aufgef"uhrt sind, stehen f"ur sich selbst.

`\'
     Wird benutzt um die Spezialbedeutung eines Zeichens w"ahrend des
     Vergleichs zu unterdr"ucken.  Zum Beispiel:

          \$

     passt auf das Zeichen `$'.

`^'
     Passt auf den Anfang einer Zeichenkette.  Zum Beispiel:

          ^@chapter

     passt auf `@chapter' zu Anfang einer Zeichenkette, und kann dazu
     benutzt werden, um Kapitelanf"ange in Texinfo Quellentextdateien zu
     identifizieren.  Das `^' Zeichen wird als ein "Anker" bezeichnet,
     da es das Suchmuster dergestalt verankert, dass es nur zu
     "Ubereinstimmungen kommen kann, die zu Anfang einer Zeichenkette
     auftreten.

`$'
     "Ahnlich wie `^', passt aber nur auf das Ende einer Zeichenkette.
     Zum Beispiel:

          p$

     passt auf einen string, der mit `p' endet.  Das `$' Metazeichen
     ist auch ein Anker.

`.'
     Der Punkt passt auf jedes Einzelzeichen.  Zum Beispiel:

          .P

     f"uhrt zu "Ubereinstimmungen jedes Einzelzeichens, welches von
     einem `P' in einer Zeichenkette gefolgt wird.  Mittels Verkettung
     kann beispielsweise ein regul"arer Ausdruck wie `U.A' erzeugt
     werden, welcher auf jede 3-Zeichen Folge passt, die mit `U'
     beginnt und mit einem `A' endet.

`[...]'
     Wird als "Zeichenliste" bezeichnet.  Diese passt auf jedes
     *Einzelzeichen*, welches in den eckigen Klammern angegeben wird.
     Zum Beispiel:

          [MVX]

     passt auf jedes einzelne `M', `V' oder `X' Zeichen in einem string.

     Bereiche von Zeichen werden unter Benutzung eines Bindestrichs
     zwischen den Start- und Endezeichen vereinbart, und das ganze wird
     von eckigen Klammern umschlossen.  Zum Beispiel:

          [0-9]

     passt auf jede Ziffer.  Mehrfache Bereiche sind erlaubt.  Zum
     Beispiel ist die Liste `[A-Za-z0-9]' ein "ublicher Weg, um den
     Gedanken "aller alphanumerischen Zeichen" auszudr"ucken.

     Um eines der `\', `[', `]', `-' oder `^' Zeichen in eine
     Zeichenliste einzuf"ugen, ist es notwendig, diese mit einem
     anf"uhrenden `\' Zeichen auszustatten.  Zum Beispiel:

          [d\]]

     passt entweder auf `d' oder `]'.

     "Zeichenklassen" sind ein neues Merkmal, die im POSIX Standard
     eingef"uhrt sind.  Eine Zeichenklasse ist eine spezielle
     Bezeichnung, um Zeichenlisten, die mit speziellen Eigenschaften
     ausgestattet sind, zu beschreiben, wohingegen sich aber die
     aktuellen Zeichen selbst von Land zu Land und/oder Zeichensatz zu
     Zeichensatz ver"andern.  Zum Beispiel unterscheidet sich der
     Begriff, was unter einem alphabetischen Zeichen zu verstehen ist,
     in den USA und in Frankreich.

     Eine Zeichenklasse ist in einem regexp nur *innerhalb* der Klammern
     einer Zeichenliste g"ultig.  Zeichenklassen bestehen aus `[:' --
     einem Schl"usselwort, dass die Klasse bezeichnet -- und `:]'.  Es
     folgen nun die Zeichenklassen, welche durch den POSIX Standard
     definiert werden:

    `[:alnum:]'
          Alphanumerische Zeichen.

    `[:alpha:]'
          Alphabetische Zeichen.

    `[:blank:]'
          Leerzeichen und Tabulatorzeichen.

    `[:cntrl:]'
          Steuerzeichen.

    `[:digit:]'
          Numerische Zeichen.

    `[:graph:]'
          Zeichen, die druckbar und zugleich sichtbar sind (1).

    `[:lower:]'
          Kleinbuchstaben.

    `[:print:]'
          Druckbare Zeichen (2).

    `[:punct:]'
          Interpunktionszeichen (3).

    `[:space:]'
          Leerzeichen (4).

    `[:upper:]'
          Grossbuchstaben.

    `[:xdigit:]'
          Hexadezimalziffern.

     Zum Beispiel musste vor Einf"uhrung des POSIX Standards
     `[A-Za-z0-9]' geschrieben werden, um eine "Ubereinstimmung mit
     allen alphanumerischen Zeichen zu erhalten.  Falls der verwendete
     Zeichensatz nun aber andere alphabetische Zeichen enth"alt, so
     w"urde vorstehendes Suchmuster keine "Ubereinstimmung mit diesen
     erbringen.  Mit den POSIX Zeichenklassen kann nun aber
     `[[:alnum]]' geschrieben werden, mit dem Resultat, dass *alle*
     alphabetischen und numerischen Zeichen des verwendeten
     Zeichensatzes "Ubereinstimmungen erbringen w"urden.

     Zwei zus"atzliche Spezialfolgen k"onnen in Zeichenlisten
     auftreten.  Diese lassen sich auf nicht-ASCII Zeichens"atze
     anwenden, welche einzelne Symbole haben k"onnen (auch
     "vergleichende Elemente" (5) genannt), die mit mehr als einem
     Zeichen dargestellt werden, ebensogut wie zahlreiche Zeichen, die
     gleichwertig f"ur Vergleichs- oder Sortierungszwecke benutzt werden
     k"onnen.  (Zum Beispiel sind im Franz"osischen das einfache `e' und
     ein *grave* akzentuiertes ``e' identisch.)

    Vergleichende Symbole
          Ein "vergleichendes Symbol" (6) ist ein Multi-Zeichen
          vergleichendes Element, das mit `[.' und `.]' umschlossen
          wird.  Wenn beispielsweise `ch' ein vergleichendes Element
          ist, so ist `[[.ch.]]' ein regexp, der auf dieses
          vergleichende Element passt, wohingegen `[ch]' ein regexp
          ist, der entweder auf `c' oder auf `h' passt.

    Gleichwertigkeitsklassen in regexps
          Eine "Gleichwertigkeitsklasse" (7) ist eine Liste von
          gleichwertigen Zeichen, die mit `[=' und `=]' umschlossen
          sind.  Deswegen ist `[[=e`e=]]' ein regexp, der entweder auf
          `e' oder ``e' passt.

     Diese Besonderheiten sind ein sehr wertvolles Hilfsmittel in nicht
     englischsprachig ausgerichteten Umgebungen.

     *Vorsicht:*

     Die Bibliotheksfunktionen, die von `gcal' f"ur die
     regul"ar-Ausdruck Vergleiche benutzt werden, erkennen derzeit nur
     POSIX Zeichenklassen (m"oglicherweise); sie erkennen weder
     vergleichende Elemente noch Gleichwertigkeitsklassen.

`[^ ...]'
     Bezeichnet eine "negierte Zeichenliste" bzw. "komplement"are
     Zeichenliste".  Das erste Zeichen nach der `[' Klammer *muss* das
     `^' Zeichen sein.  Diese Zeichenliste passt auf jedes Zeichen, das
     *nicht* innerhalb der eckigen Klammern aufgef"uhrt ist.  Zum
     Beispiel:

          [^0-9]

     passt auf jedes Zeichen, das keine Ziffer ist.

`|'
     Das ist der "Auswahl-Operator", und dieser wird benutzt, um
     Alternativen zu vereinbaren.  Zum Beispiel:

          ^P|[0-9]

     passt auf jeden string, der entweder mit `^P' oder mit `[0-9]'
     "ubereinstimmt.  Das bedeutet, dass "Ubereinstimmungen mit jeder
     Zeichenkette bestehen, die mit `P' beginnt oder eine Ziffer
     enth"alt.

     Die Alternative gilt f"ur den gr"osstm"oglichen regul"ar-Ausdruck
     auf der jeweiligen Seite.  Mit anderen Worten, `|' hat den
     geringsten Vorrang aller regul"ar-Ausdruck Operatoren.

`(...)'
     Runde Klammern werden in regul"aren Ausdr"ucken genauso zum
     Gruppieren verwendet, wie in der Arithmetik.  Diese k"onnen
     benutzt werden, um regul"are Ausdr"ucke zu verketten, die den `|'
     Auswahl-Operator enthalten.
     Zum Beispiel passt `@(samp|code)\{[^}]+\}' beiderseits auf
     `@code{foo}' und auf `@samp{bar}'.  (Das sind Texinfo
     Steueranweisungen zur Textformatierung.)

`*'
     Dieses Symbol bedeutet, dass der vorangehende regul"are Ausdruck
     so oft wiederholt wird, wie es notwendig ist, um eine
     "Ubereinstimmung zu finden.  Zum Beispiel:

          ph*

     verwendet das `*' Symbol zum vorangehenden `h', und pr"uft auf
     "Ubereinstimmungen, die sich aus einem `p', welches von einer
     beliebigen Anzahl von `h''s gefolgt wird, ergeben.  `ph*' passt
     auch auf ein einzelnes `p', falls keine `h''s vorhanden sind.

     Das `*' Metazeichen wiederholt den *geringstm"oglichen*
     vorangehenden Ausdruck.  (Benutzen Sie die runden Klammern, falls
     ein gr"osserer Ausdruck wiederholt werden soll.)  Es werden so
     viele Wiederholungen wie m"oglich gefunden.  Zum Beispiel:

          gcal --filter-text='\(c[ad][ad]*r x\)' -f beispiel.rc -y

     gibt jeden Termin aus `beispiel.rc' aus, der einen Termintext der
     Form `(car x)', `(cdr x)', `(cadr x)', usw. enth"alt.  Beachten
     Sie das Entwerten der runden Klammern durch Voranstellen eines `\'
     Zeichens an diese.

`+'
     Dieses Symbol ist "ahnlich wie `*', nur muss der vorangehende
     Ausdruck letztlich einmal gepasst haben.  Das bedeutet, dass:

          ul+m

     zwar auf `ulm' und `ullm' passen w"urde, aber nicht auf `um',
     wohingegen `ul*m' auf alle drei vorstehenden Zeichenketten passen
     w"urde.  Hier ist eine einfachere Art, wie das letzte `*' Beispiel
     geschrieben werden kann:

          gcal --filter-text='\(c[ad]+r x\)' -f beispiel.rc -y

`?'
     Dieses Symbol ist "ahnlich wie `*', aber der vorangehende Ausdruck
     kann entweder einmal gepasst haben, oder nicht in G"anze.  Zum
     Beispiel:

          fe?d

     passt nur auf `fed' und `fd', und nichts anderes.

`{N}'
`{N,}'
`{N,M}'
     Eine oder zwei Zahlen innerhalb geschweifter Klammern bezeichnen
     einen "Intervall-Ausdruck", der im POSIX Standard verf"ugbar ist.
     Falls eine Zahl in den Klammern vorhanden ist, so wird der
     vorangehende regexp N-fach wiederholt.  Wenn zwei Zahlen --
     separiert durch ein Komma -- in den Klammern vorhanden sind, so
     wird der vorangehende regexp N bis M-fach wiederholt.  Nun, falls
     eine Zahl -- gefolgt von einem Komma -- in den Klammern vorhanden
     ist, dann wird der vorangehende regexp letztlich N-fach wiederholt.

    `ul{3}m'
          passt auf `ulllm', aber nicht auf `ulm' oder `ullllm'.

    `ul{3,5}m'
          passt nur auf `ulllm' oder `ullllm' oder `ulllllm'.

    `ul{2,}m'
          passt auf `ullm' oder `ulllm' und so weiter.

GNU Software, die mit regul"aren Ausdr"ucken umgeht, unterst"utzt
zus"atzlich weitere regul"ar-Ausdruck Operatoren.  Diese Operatoren
sind hier beschrieben.

Die meisten der zus"atzlichen Operatoren sind geschaffen worden, damit
"Ubereinstimmungen in W"ortern festgestellt werden k"onnen.  F"ur unsere
Zwecke ist ein "Wort" eine Folge von einem oder mehreren Buchstaben,
Zahlen oder Unterstrichzeichen (`_').

`\w'
     Dieser Operator passt auf jedes Zeichen, welches ein Wort
     konstituiert, d.h. jeder Buchstabe, Zahl oder Unterstrich.  Denken
     Sie es sich als eine Abk"urzung f"ur `[A-Za-z0-9_]' oder
     `[[:alnum:]_]'.

`\W'
     Dieser Operator passt auf jedes Zeichen, welches kein Wort
     konstituiert.  Denken Sie es sich als eine Abk"urzung f"ur
     `[^A-Za-z0-9_]' oder `[^[:alnum:]_]'.

`\<'
     Dieser Operator passt auf jeden leeren string zu Anfang eines
     Wortes.  Beispielsweise passt `\<kennen' auf `kennen', aber nicht
     auf `erkennen'.

`\>'
     Dieser Operator passt auf jede leere Zeichenkette zu Ende eines
     Wortes.  Zum Beispiel passt `er\>' auf `er', aber nicht auf
     `erkennen'.

`\b'
     Dieser Operator passt auf einen leeren string, der entweder zu
     Anfang oder zu Ende eines Wortes auftritt.  Zum Beispiel passt
     `\bFalle?\b' entweder auf das einzelne Wort `Fall' oder auf das
     einzelne Wort `Falle'.

`\B'
     Dieser Operator passt auf eine leere Zeichenkette, die innerhalb
     eines Wortes auftritt.  Mit anderen Worten, `\B' passt auf einen
     leeren string, der zwischen zwei Zeichen auftritt, die ein Wort
     konstituieren.  Beispielsweise passt `\Brechnet\B' auf
     `berechnete', aber es passt nicht auf `so rechnet man'.  `\B' ist
     im Grunde genommen das genaue Gegenteil von `\b'.

Es gibt noch zwei weitere Operatoren, die auf einen Puffer anwendbar
sind.  Im Emacs ist ein "Puffer" nat"urlich ein Emacs Puffer.  In
anderen Programmen betrachten die regul"ar-Ausdruck
Bibliotheksfunktionen, die von `gcal' benutzt werden, die gesamte
Zeichenkette, welche auf "Ubereinstimmungen hin untersucht werden soll,
als den Puffer (8).

F"ur `gcal' erbringen diese Operatoren keine neuen F"ahigkeiten, da die
`^' und `$' Operatoren benutzt werden k"onnen, um "Ubereinstimmungen zu
Anfang und zu Ende von Zeichenketten festzustellen.  Sie sind nur
zwecks Kompatibilit"at zu anderer GNU Software bereitgestellt.

`\`'
     Dieser Operator passt auf eine leere Zeichenkette zu Anfang eines
     Puffers.

`\''
     Dieser Operator passt auf eine leere Zeichenkette zu Ende eines
     Puffers.

Die `*', `+' und `?' Operatoren und die geschweiften Klammern `{' und
`}' haben den h"ochsten Vorrang in regul"aren Ausdr"ucken, gefolgt von
der Verkettung, und abschliessend dem `|' Operator.  Wie in der
Arithmetik "ublich, so kann auch hier mittels Klammerung (runde
Klammern) die Gruppierung der Operatoren ver"andert werden.

Die Gross-/ Kleinschreibung ist normalerweise von Bedeutung in
regul"aren Ausdr"ucken, und zwar beiderseits beim Aufsp"uren von
gew"ohnlichen Zeichen (d.h. Nicht-Metazeichen), und innerhalb
Zeichenklassen.  Deswegen passt ein `w' in einem regul"aren Ausdruck
nur auf einen `w' Kleinbuchstaben, und nicht etwa auf einen `W'
Grossbuchstaben.

Der einfachste Weg, um ein Gross-/ Kleinschreibungsunabh"angiges Zeichen
aufzusp"uren, ist die Benutzung einer Zeichenliste: `[Ww]'.  Wie auch
immer, so kann es doch sehr l"astig sein, falls soetwas des "ofteren
gebraucht wird; und ungl"ucklicherweise kann der regul"are Ausdruck
dadurch schwer lesbar werden.

  ---------- Footnotes ----------

  (1)  Ein Leerzeichen ist zwar druckbar, aber nicht sichtbar, w"ahrend
ein `a' Zeichen beides ist.

  (2)  Zeichen, die nicht Steuerzeichen sind.

  (3)  Zeichen, die weder Buchstabe, Zahl, Steuerzeichen noch
Leerzeichen sind.

  (4)  Solche wie das Leerzeichen, Tabulatorzeichen und
Seitenvorschubzeichen, um ein paar zu nennen.

  (5)  Im Englischen mit *collating elements* bezeichnet.

  (6)  Im Englischen mit *collating symbol* bezeichnet.

  (7)  Im Englischen mit *equivalence class* bezeichnet.

  (8)  Das ist der *Textteil* einer Gcal Ressourcendateizeile.

