Allgemeine Beschreibung zur Auswahl von Dateien und zur Verwendung von Optionen und Zeitangaben
18xx/PC V2.22g - Dirk Clemens - 2004-05-07
page up top page
down bottom
 Homepage 
 Start 
 Neuigkeiten 
 Download 
 Hauptseiten 
 Überblick 
 18xx Spiele 
 kleine 1x8 
 18xx/PC 
 Geschichte 
 Links 
 Index 
 Programme 
 Überblick 
 18xx.exe 
 18config.exe 
 18export.exe 
 18string.exe 
 18check.exe 
 18list.exe 
 Varianten 
 18xx 
 1825 
 1826 
 1828 
 1829 
 1830 
 1835 
 1837 
 1839 
 1841 
 1842 
 1844 
 1847 
 1849 
 1851 
 1853 
 1856 
 1862 
 1869 
 1870 
 1895 
 1898 
 2038 


Inhaltsverzeichnis


page up top page
up top
down bottom

1.   Einführung

Diese Datei ist eine allgemeine Beschreibung, wie Dateilisten, Optionen und weitere Parameter meinen Programmen im allgemeinen übergeben werden.

Dateien haben neben ihrem Inhalt ein paar weitere Merkmale:

Über alle diese Merkmale können Dateien ausgewählt werden. Die Auswahl geschieht dabei u.a. durch Optionen, die bei allen Programmen gleich sind. Da die Programmparameter zusammen nur 127 Zeichen lang sein dürfen, können diese Parameter auch in einer Textdatei abgespeichert und der Dateiname dem Programm übergeben werden. Diesen Mechanismus nennt man 'Antwortdateien' oder 'response files'.



page up top page
up top
down bottom

2.   Dateinamen und Pfade

2.1   Aufbau eines Dateinamens

Als erstes wird der Aufbau eines vollständigen Dateinamens beschrieben. Ein vollständiger Dateiname besteht aus vier Elementen:

Laufwerk:\Verzeichnis\Name.Typ

Die Laufwerksbeschreibung besteht aus einem Buchstaben und dem Doppelpunkt. Zur Verzeichnisbeschreibung gehört alles nach der Laufwerksangabe bis zum letzten Vorkommen von '\' einschließlich dieses Zeichens. Ist das erste Zeichen der Verzeichnisangabe auch ein '\', dann handelt es sich um eine absolute Pfadangabe, anderenfalls um eine relative Pfadangabe. Laufwerk und Verzeichnis geben die logische Position der Datei an und Name und Typ legen den eigentlichen Dateinamen fest. Die letzteren beiden sind durch einen Punkt voneinander getrennt.



page up top page
up top
down bottom

2.2   Verknüpfungen von Dateinamen

In der Regel gibt man nicht die vollständigen Dateinamen an, sondern nur einzelne Teile hieraus an, wie z.B. Name und Typ. Diese werden intern dann zu einem vollständigen Dateinamen zusammengesetzt, indem sie mit irgendwelchen Voreinstellungen verknüpft werden.

Wird Dateiname B mit Dateiname A verknüpft, dann werden alle in B nicht definierten Elemente (Laufwerk, Verzeichnis, Name, Typ) aus A entnommen, falls dort vorhanden. Hat B nur eine relative Verzeichnisangabe, so wird die Verzeichnisangabe aus A als Basis verwendet.

Die folgende Tabelle erläutert die Verknüpfung von Dateinamen. Der Dateiname (B) wird jeweils mit der Voreinstellung (A) verknüpft.

Beispiele
 Voreinstellung (A)   Dateiname (B)   resultierender Dateiname 
 c:\lib\source\xyz.h   abc   c:/lib/source/abc.h 
 c:\lib\source\xyz.h   abc.x   c:/lib/source/abc.x 
 c:\lib\source\xyz.h   .x   c:/lib/source/xyz.x 
 c:\lib\source\xyz.h   ..\   c:/lib/xyz.h 
 c:\lib\source\xyz.h   test\abc.x   c:/lib/source/test/abc.x 
 c:\lib\source\xyz.h   \test\abc.c   c:/test/abc.c 
 c:\lib\source\xyz.h   ..\test\abc.c   c:/lib/test/abc.c 
 c:\lib\source\xyz.h   d:   d:/lib/source/xyz.h 
 111\222\333\   test   111/222/333/test 
 111\222\333\   test\   111/222/333/test/ 
 111\222\333\   ..\test\   111/222/test/ 
 111\222\333\   ..\..\test\   111/test/ 
 111\222\333\   \test\   /test/ 



page up top page
up top
down bottom

2.3   Normierung eines Dateinamens

Die Dateinamen müssen vor ihrer Verarbeitung noch normiert werden. Mit dieser Normierung werden gleichzeitig noch Abkürzungen für das aktuelle Verzeichnis, für das Verzeichnis der temporären Dateien, für das Verzeichnis des aufgerufenen Programmes und für den vollständigen Dateinamen des aufgerufenen Programmes erkannt. Außerdem können Umgebungsvariablen verwendet werden. Dazu werden die Dateinamen werden nach den folgenden Regeln analysiert und normiert, wobei die Regeln auch mehrfach angewendet werden:




page up top page
up top
down bottom

2.4   Verwendung von Platzhaltern

Bei einigen Programmen können Suchmasken mit Platzhaltern verwendet werden. Ein Beispiel wäre die Verwendung von Platzhaltern in Dateinamen, um eine ganze Gruppe von Dateien zu selektieren. Aus allen möglichen Eingaben werden dann nur diejenigen verwendet, die zur jeweiligen Suchmaske passen. Ein Platzhalter paßt dabei eine gewissen Anzahl und eine gewisse Klasse von Zeichen. Als Platzhalter existieren die folgenden Möglichkeiten:




page up top page
up top
down bottom

2.4.1   Platzhalter in Dateinamen

Einige Programme unterstützen auch Platzhalter in Datei- und Verzeichnisnamen. Durch Platzhalter können Gruppen von Dateien ausgewählt werden, die zu dem vorgegebenen Muster passen. Die im vorherigen Abschnitt beschriebenen Möglichkeiten von Platzhaltern sind sowohl in den Dateinamen als auch in den Verzeichnisnamen möglich. Hinzu kommen für die Verzeichnisse die folgenden Möglichkeiten:

Für die Laufwerksbezeichnung sind als Platzhalter nur '[]', '*', '+' oder '?' erlaubt. Die letzten drei Platzhalter haben alle die gleiche Bedeutung. Innerhalb der eckigen Klammern sind nur Buchstaben und das Minuszeichen zulässig.

Es muß beachtet werden, daß jeder Dateiname einen Punkt '.' enthält. Die Datei 'ANA' heißt genaugenommen 'ANA.'. Im folgenden ein paar Beispiele zur Verwendung der verschiedenen Platzhalter.

Beispiele
 Platzhalter   Beschreibung 
 *   oder   *.*  Alle Dateien des aktuellen Verzeichnisses. Die beiden Formen zeigen nur bei Verknüpfungen einen Unterschied.
 *.  Alle Dateien des aktuellen Verzeichnisses, die keine Typbezeichnung haben.
 *.+  Alle Dateien des aktuellen Verzeichnisses, die eine Typbezeichnung haben.
 +.+  Alle Dateien des aktuellen Verzeichnisses, die jeweils mindestens ein Zeichen im Namen und in der Erweiterung haben.
 *.[hc]  Alle Dateien des aktuellen Verzeichnisses, die mit '.c' oder '.h' enden.
 *#*  Alle Dateien des aktuellen Verzeichnisses, die mindestens eine Ziffer im Namen oder der Typangabe enthalten.
 [-*0-9]  Alle Dateien des aktuellen Verzeichnisses, die keine Ziffer enthalten.
 a*b\*  Alle Dateien, die sich in einem Unterverzeichnis befinden, dessen Name mit 'a' beginnt und mit 'b' endet.
 \&\file*#.[hc]  Alle Dateien aus allen Verzeichnissen oder Unterverzeichnissen, dessen Namen mit 'file' beginnen und mit einer oder mehrerer Ziffern enden und die Endung '.c' oder '.h' haben.
 \lib\&\[x-z]*\*  Alle Dateien unter '\LIB', die sich in einem Verzeichnis befinden, das mit 'x', 'y' oder 'z' beginnt.
 &2:\*.c  Alle '.c' Dateien, die sich in mindestens einem Unterverzeichnisse der Ebene zwei befinden.
 \&\inc*\&\*.h[*p]  Alle Dateien, die sich in einem Verzeichnis befinden, das mit 'inc' beginnt, oder sich in dessen Unterverzeichnis befinden, und mit '.h', '.hp' oder '.hpp' enden.
 {inc!def}*\*.h{!pp}  Alle Dateien, die mit '.h' oder '.hpp' enden und sich in einem Unterverzeichnis der Ebene 1 des aktuellen Verzeichnisses befinden, das mit 'inc' oder 'def' beginnt.
 \&\{abc*!*{xx!yy}}  Alle Dateien, die mit 'abc' beginnen oder mit 'xx' oder 'yy' enden.
 \&\*  Alle Dateien des Laufwerks.
 \&&\*  Alle Dateien des Laufwerks, die sich nicht im Hauptverzeichnis befinden.
 *:\&\*  Alle Dateien aller Laufwerke.
 [c-ek]:\&\*  Alle Dateien der Laufwerke 'C:', 'D:', 'E:' und 'K:'.



page up top page
up top
down bottom

3.   Listen von Dateinamen

Viele Programme erlauben eine beliebige Anzahl von Dateinamen. Dabei werden die Parameter in Listen von Dateinamen aufgeteilt, wobei die einzelnen Dateinamen auch Platzhalter enthalten können.

Die Trennung zweier Listen erfolgt durch eine Option, durch ein Komma oder durch ein Semikolon. Die Dateinamen einer solchen Liste werden immer mit dem vorherigen Dateinamen verknüpft. Der erste Dateiname wird dabei meißtens mit '~*.*', also alle Dateien des aktuellen Verzeichnisses, verknüpft. Somit werden durch 'SUB\\F*.C .H' alle Dateien des Unterverzeichnisses 'SUB\\' angesprochen, die mit einem 'F' beginnen und die Endung '.C' oder '.H' haben.



page up top page
up top
down bottom

4.   Dateiattribute

Zu jeder Datei existiert ein Byte als Dateiattribut mit acht Bits:
Attribute der Dateien
 Bit   Dez   Hex   Beschreibung 
 Bit-0   1   0x01   Readonly; Schutz vor überbeschreiben/löschen 
 Bit-1   2   0x02   Hidden; die Datei ist teilweise nicht sichtbar 
 Bit-2   4   0x04   System; die Datei ist eine Systemdatei 
 Bit-3   8   0x08   Volume label; keine Datei, Platten-/Diskettenname 
 Bit-4   16   0x10   Directory; die Datei ist ein Verzeichnis 
 Bit-5   32   0x20   Archive; die Datei ist nicht archiviert worden 
 Bit-6   64   0x40   unbenutzt 
 Bit-7   128   0x80   unbenutzt 

Manche Programme, wie z.B 'XDIR' mittels der Option '-A', können Dateien anhand von Attributen auswählen. Alle Dateien, auch Verzeichnisse, haben ein Attribut. Dieses Attribut ist in einem Byte abgespeichert und enthält somit insgesamt 8 Bits. Die Bedeutung der acht Bits ist durch die obige Tabelle erklärt.

Es werden nur Dateien gesucht, die die passenden Dateiattribute haben. Das übergebene Attribut ist 16 Bits lang und wird in zweimal acht Bits, also in zwei Bytes, aufgeteilt. Die Bits, die im niederwertigen Byte nicht gesetzt sind, dürfen im Dateiattribut auch nicht gesetzt sein. Die Bits, die im höherwertigen Byte gesetzt sind, müssen im Dateiattribut gesetzt sein.

Wird z.B. als Attributwort der Wert 0x2003 (höherwertiges Byte: Bit 5; niederwertiges Byte: Bits 0 und 1) verwendet, dann werden Dateien gefunden, die das Archiv-Bit gesetzt haben und von den anderen Bits höchstens das Readonly- und das Hidden-Bit gesetzt haben, aber kein anderes.



page up top page
up top
down bottom

5.   Datumsangaben

Datumseingaben erfolgen in Form einer absoluten Zeitangabe, einer relativen Zeitangabe oder einer Kombination aus beiden. Der Aufbau ist also wie folgt, wobei eckige Klammern optionale Teile und die senkrechten Striche Alternativen markieren. Innnerhalb einer Zeichenkette zur Datumseingabe sollten keine Leerzeichen vorkommen; sie dienen hier nur zur Übersichtlichkeit.
Syntax der Datumsangaben
 1. Zeitangabe    [AbsoluteZeit] [RelativeZeit] 
 2. Gerundete-Zeit    'M'Zahl | 'S'Zahl 
 3. Absolute-Zeit   :== [Datum] [,Zeit] 
 4. Relative-Zeit    -[Tage] [,Zeit] 
 5. Datum    dd | yyy | yyyy | dmmyy | ddmmyy | dmmyyyy | ddmmyyyy | dd.mm.yyyy | dd/mm/yyy 
 6. Zeit    hh | hmm | hhmm | hmmss | hhmmss | hh.mm.ss | hh/mm/ss 
 7. Tage   :== Zahl 

Erklärungen:

  1. Eine Zeitangabe besteht entweder aus einer gerundeten Zeitangabe, aus einer absoluten Zeitangabe, aus einer relativen Zeitangabe, aus einer Kombination aus absoluter und gerundeter Zeitangabe oder aus Nichts. Fehlt die absolute Zeitangabe, dann wird das aktuelle Datum und die aktuelle Zeit verwendet.

  2. Die Gerundete Zeitangabe ist die absolute Zeit, die auf Stunden (H), Minuten (M) oder Sekunden (S) abgerundet wird. Die folgende Zahl aus dem Bereich 1 bis 30 gibt die Vielfachen an, die erlaubt sind.

  3. Die absolute Zeitangabe setzt sich aus einem Datumsfeld und einem Zeitfeld, welches durch ein Komma eingeleitet wird, zusammen. Fehlt das Datumsfeld, so wird heute verwendet. Fehlt das Zeitfeld, so wird 0:00:00 Uhr verwendet.

  4. Die relative Zeitangabe setzt sich aus einem Vorzeichen, einer Tagesdifferenz und einem Zeitfeld, welches durch ein Komma eingeleitet wird, zusammen. Fehlt die Tagesdifferenz oder das Zeitfeld, so wird Null verwendet. Diese relative Angabe wird zur absoluten Angabe addiert oder subtrahiert.

  5. Ein Datum setzt sich aus einer 1 bis 8 ziffrigen Zahl zusammen. Je nach Anzahl der Ziffern wird der Tag (d), der Monat (m) und das Jahr (y) definiert. Sollte die Angabe für Tag oder Monat fehlen, dann wird jeweils '01' verwendet. Bei Jahresabgaben ohne Jahundertangabe werden die Jahre 1980 bis 2079 verwendet. Die Felder können auch durch '.' oder '/' voneinander getrennt sein.

  6. Eine Zeit setzt sich aus einer 1 bis 6 ziffrigen Zahl zusammen. Je nach Anzahl der Ziffern wird die Stunde (h), die Minute (m) und die Sekunde (s) definiert. Sollte die Angabe für Minute oder Sekunde fehlen, dann wird jeweils '00' verwendet. Die Felder können auch durch '.' oder '/' voneinander getrennt sein.

  7. Die Tagesdifferenz ist eine einfache Zahl.

Beispiele von Datumsangaben
 Angabe   Beschreinbung 
 (ohne Angabe)   Heute, jetzige Zeit 
 3   3. Tag des aktuellen Monats 
 13   13. Tag des aktuellen Monats 
 283   1. Februar 1983 00:00:00 
 1283   1. Januar 1283 00:00:00 
 51283   5. Dezember 1983 00:00:00 
 251283   25. Dezember 1983 00:00:00 
 ,   Heute 00:00:00 
 ,1   Heute 01:00:00 
 ,12   Heute 12:00:00 
 ,123   Heute 01:23:00 
 ,1234   Heute 12:34:00 
 ,12345   Heute 01:23:45 
 ,123456   Heute 12:34:56 
 020492,132601   2. April 1992 13:26:01 
 +3   Heute +3 Tage, jetzige Zeit 
 -3   Heute -3 Tage, jetzige Zeit 
 +,3   Heute/Jetzt +3 Stunden 
 -,003   Heute/Jetzt -3 Minuten 
 +3,4   Heute/Jetzt + 3 Tage + 4 Stunden 
 220492,132601-2,2504   22. April 1992 13:26:01 -2 Tage -25 Stunden -4 Minuten
==> 19. April 1992 12:22:01 
 91+321,1234   1.1.1991 +321 Tage +12 Stunden +34 Minuten
==> 18. November 1991 12:34:00 



page up top page
up top
down bottom

6.   Suchlisten

Soll eine Datei eingelesen werden, so wird die angegebe Datei gemäß einer Suchliste in verschiedenen Verzeichnissen gesucht. Ein Suchliste ist dabei eine Liste von 1-N Elementen, die voneinander mittels Semikolon (';') oder Komma (',') getrennt sind.

Besteht ein einzelnes Element nur aus einem Minuszeichen ('-'), dann wird dieses Element ignoriert. Beginnt ein Element mit dem AT-Symbol ('@'), dann wird der folgende Text als Referenz auf eine weitere Umgebungsvariable angesehen, deren Inhalt anstelle der Referenz eingefügt wird und die wiederum Referenzen enthalten darf.

Anderenfalls (weder '-' noch '@...') handelt es sich bei dem Element um einen Verweis auf ein Verzeichnis, in denen die Datei gesucht werden soll. Dabei sind alle bei der Pfadangabe erlaubten Platzhalter erlaubt.

Eine leeres Element steht für das aktuelle Verzeichnis. Ist das letzte Zeichen einer Pfadangabe ein '+' (mit oder ohne folgendem '\\'), dann werden das angegebene und alle übergeordneten Verzeichnisse durchsucht.

Beispiel: 'ab;;~~,&1-2\\;v+;xy' Es werden nacheinander die folgenden Verzeichnisse durchsucht:

Um endlose Rekursionen zu Vermeiden, werden Referenzen auf andere Umgebungsvariablen nur bis zu einer Tiefe von 10 ausgewertet.



page up top page
up top
down bottom

7.   Aufbau von Optionen

Die meißten Programme erwarten neben den eigentlichen Parametern Optionen, die den Ablauf des Programmes beeinflussen. Optionen unterscheiden sich von den normalen Parametern durch das einleitende Zeichen. Sie werden durch '+', '-' oder '/' eingeleitet und von einem Buchstaben, einer Ziffer oder einem Sonderzeichen gefolgt, z.B. '-a +B /3 -#'.

Die meisten Optionen können wahlweise durch eines der drei genannten Zeichen eingeleitet werden. Nur wo explizit zwei oder drei verschiedene Bedeutungen in Abhängigkeit des Steuerzeichen definiert sind, muß das korrekte verwendet werden. Genauso wird bei den Optionen nicht zwischen Groß- und Kleinschreibung unterschieden, es sei denn, daß zwei verschiedene Optionen definiert sind.

Optionen erwarten teilweise einen Parameter. Dieser wird ohne Trennzeichen (auch kein Leerzeichen) oder nach einem der Trennzeichen '=', ':' oder ':=' an die Option angebunden, z.B. '-x123' oder '-x:=123'. Es gibt diesbezüglich fünf verschiedene Optionen:

Zwischen Optionen braucht kein Leerzeichen zu stehen ('/i12/v' oder '-i12+v') und Optionen können auch zusammengefaßt werden ('-i12v'). Hinter Optionen mit Textparameter können sich keine weiteren Optionen befinden.

In den Optionserklärungen werden für die verschiedenen Parameterarten verschiedene Kennzeichen verwendet:

'&' für Zeichen,
'#' für Ganzzahlen,
'~' für Fließkommazahlen,
'$' für Zeichenketten.

Es existieren drei verschiedene Typen von Optionen: positionsunabhängige Optionen, positionsabhängige Optionen und rückwirkende Optionen.




page up top page
up top
down bottom

7.1   Optionen zur Dateiauswahl

Die folgenden Optionen werden von vielen meiner Programme zur Dateiauswahl einheitlich verwendet. Die Parameter werden dabei in Listen von Dateinamen aufgeteilt. Die Trennung zweier Listen erfolgt durch eine Option, durch ein Komma oder durch ein Semikolon. Die Dateinamen einer Liste werden wie im Abschnitt Verknüpfungen von Dateinamen beschrieben miteinander verknüpft.