@database fiasco.guide
@index index
@$VER: Fiasco_Deutsch_guide 2.45 (13.8.95)
@node main "Fiasco.guide"

 @{i}@{b}Fiasco  @{ub}RELEASE 1.0 @{ui}

 von Nils Bandener


 @{" Einführung " LINK introduction }
 @{" Voraussetzungen " LINK require }
 @{" Installation " LINK install }
 @{" Features " link features }

 @{" Quick-Start " LINK quickstart }

 @{" Erstellen einer Datenbank " LINK MaskCreation }
 @{" Suchen in einer Datenbank " LINK Search }
 @{" Relationen " LINK Relations }

 @{" GUI " LINK gui }
 @{" Feldtypen " LINK FieldTypes }
 @{" Liste " LINK List }
 @{" ARexx " LINK ARexx }

 @{" Beispiel-Projekte " link Examples}
 @{" Anpassung an andere Sprachen " link Locale} 

 @{" Index " LINK Index }
   
 @{" Rechtliches " link Disclaimer}
 @{" Giftware " link Giftware}
 @{" meine Adresse" link Author}
 
 @{" Bugs " LINK bugs }
 @{" Was es noch zu tun gibt" link todo }
 @{" Copyright, Disclaimer usw." LINK disclaimer }
 
@endnode

@node introduction "Einführung"
@smartwrap

    Fiasco ist ein neuer Kandidat unter der Masse von Datenbanken für den 
Amiga. Ursprünglich wollte ich nur ein kleines Programm schreiben, das einem
ein paar Vokabeln abhört, die man vorher eingegeben hat. Später kam dann noch
die Möglichkeit hinzu, mehr als nur zwei Felder, also Frage und Antwort, zu
erstellen. Ab einem gewissen Entwicklungsstadium war dieses Programm einer
Datenbank schon so nahe, daß es nur ein paar Änderungen bedurfte, um daraus
schon eine Datenbank zu machen. Seitdem (Januar 95) entwickele ich an diesem
Meisterstück der Programmierkunst. ;-)


    In den Grundlagen unterscheidet sich Fiasco kaum von anderen Datenbanken.
Zwar unterstützt Fiasco keine hierarchischen Datenbankstrukturen (wie z.B.
AmigaBase), hat dafür aber einen kleinen Teil für Relationen (Ich habe bisher
nur von relationalen Datenbanken gelesen, so kann ich nicht 100%ig
garantieren, daß ich das Prinzip richtig implementiert habe. Auf jeden Fall
macht Fiasco sowas ähnliches :-). Außerdem kann Fiasco über ARexx gesteuert
werden. So können außerdem Programme einzelnen Feldern zugeordnet werden.


    Die Maske von Fiasco wird nicht durch eine Grafikdatei definiert, sondern
mit internen Grafiken erstellt. So können Fiasco-Masken mit jedem
nicht-proportionalen Font benutzt werden. Die Feldtypen, die in einer @{"Maske" link Mask}
benutzt werden können, sind breit gesät. Am besten gefällt mir der
Datatypes-Feldtyp, mit dem man Grafiken, Animationen, Texte usw. direkt in
die Maske einbauen kann.


    Neben der Maske kann man die Daten in der @{"Liste" link List} anzeigen. Diese ist wie
die Maske frei konfigurierbar. Die Daten können in der Liste leider noch nicht 
verändert werden. 


    Das @{"Suchsystem" link Search} von Fiasco unterstützt unscharfe Suche und Platzhalter.
Unscharfe Suche bedeutet, daß nicht nach Gleichheit, sondern nach Ähnlichkeit
getestet wird. Die Toleranzschwelle, ab der Fiasco einen Eintrag als ähnlich
ansieht, kann frei eingestellt werden. Die Platzhalter ähneln den AmigaDOS-
Pattern-Matching-Symbolen; zur Zeit werden #? (eine unbestimmte Zahl 
unbekannter Zeichen) und ? (ein unbekanntes Zeichen) unterstützt.


   Außerdem stehen Sortier-, Filter-, und Zählfunktionen zur Verfügung, die
allesamt mit dem Suchsystem verwandt sind und so - kennt man einmal das
Suchsystem - keine größeren Probleme darstellen sollten.

@endnode
@node require "Voraussetzungen"
@smartwrap

    Um Fiasco starten zu können braucht man mindestens einen Amiga mit 
mindestens 1 MB RAM (512 KB könnte auch gehen, würde aber bald knapp werden)
und mindestens OS 2.04 (37.175). Ab OS 2.1 (38.x) wird die Locale.library
unterstützt. Der @{"Datatypes-Feldtyp" link FT_DT} ist erst ab Amiga
OS 3.0 (39.x) verfügbar. Die Hilfs-Funktion benötigt die amigaguide.library
version 34 oder höher. Ab Amiga OS 3.0 ist diese im Lieferumfang inbegriffen,
falls man noch 2.0 oder 2.1 hat, kann man sie z.B. auf der Fish-Disk 9?? 
finden. (Aber da Sie ja inzwischen dieses Dokument lesen, kann ich wohl 
davon ausgehen, daß sie AmigaGuide bereits haben.) Obwohl Fiasco grundsätzlich 
auf allen Prozessoren läuft, kann bei bestimmten Situationen ein simpler 
68000er leicht in die Knie gezwungen werden (besonders bei der Benutzung von 
mehreren @{"GZZ-Fenstern" link gzz })

@endnode
@node install "Installation"

    Klicken Sie einfach zweimal auf das Installer Icon Ihrer Lieblingssprache
im Verzeichnis "Install". Sie werden dann instruiert, was sie zu tun haben.

    Falls Sie den Commodore Installer nicht besitzen, brauchen sie das
"Fiasco" Verzeichnis nur irgendwo hin kopieren. Falls Sie wollen, können Sie
die Catalogs nach locale:catalogs kopieren, was aber nicht notwendig ist.
Weiterhin können Sie die unbenutzten Sprachen in "Documentation" und
"Examples" löschen und die verbleibenden Dateien in die übergeordneten
Verzeichnisse schieben. Die Dateien in "Development" und "Install" werden für
den normalen Gebrauch nicht benötigt.

@endnode    
@node gzz "Der GZZ-Modus"
@smartwrap

    Ist dieser Modus unter Settings/Window Mode aktiviert, werden alle
Projekt-Fenster im sogenannten "Gimme-Zero-Zero"-Modus geöffnet. Bei
solchen Fenstern wird eine separate Layer für die Fenster-Balken er-
zeugt. Dies verhindert, daß Gadtools mit seinen Grafiken die Fenster-
Balken zerstört. Der Nachteil ist, daß dieser Modus sehr Resourcen-
Intensiv ist und so die kleineren Modelle leicht in die Knie zwingen
kann.     
@endnode
@node Features

   Das kann Fiasco:

o  Mehrere Projekte können gleichzeitig im Speicher gehalten werden.
   Die Anzahl ist nur durch den freien Systemspeicher begrenzt.

o  Masken verhalten sich genau so wie andere GUIs

o  Masken, Listen und Requester sind voll Fontsensitiv. 

o  Wahre Feldtypen-Vielfalt. Neben String, Integer und Float gibt es noch
   Cycle, Boolean, Slider, Datum, Zeit, Extern und Datatypes.

o  Unterstützung von @{"Datatypes-Feldern" link FT_DT}. Somit können auch
   Bilder, Texte usw. direkt in die Maske integriert werden.

o  ARexx-Port, mit dem das Programm gesteuert oder erweitert werden kann.
   Der ARexx-Port wird auch benutzt, um einzelnen Feldern Programme zu-
   zuordnen.

o  Frei konfigurierbares "User-Menu", von dem CLI-Programme und ARexx-
   Scripts gestartet werden können.

o  Die Suchfunktion erlaubt sowohl Suchmuster als auch "unscharfe Suche"

o  Sehr flexibles Listen-Fenster, in dem Einträge versteckt und in der
   Position und Größe verändert werden können.

o  Einfaches Relation-Handling

@endnode
@node Giftware
@smartwrap

    Fiasco ist Giftware, das bedeutet, daß jeder Benutzer von Fiasco mir eine
kleine Anerkennung für den Programmieraufwand zukommen lassen sollte. Dies
kann Geld, irgendein kleines Geschenk (CD-Roms, Bücher, etc.) oder auch nur 
eine Postkarte sein (Oder auch nichts, wenn man meint, sein Geld für
Besseres gebrauchen zu können).


@{i}Hier ist nochmal meine Adresse: @{ui}

Nils Bandener

Dekanatsgasse 4

34369 Hofgeismar

@endnode
@node Disclaimer

@{b}Nutzungsbedigungen@{ub}

    Das Programm "Fiasco" und zugehörige Daten werden "wie sie sind"
zur Verfügung gestellt. Der Autor übernimmt keinerlei Gewährleistung für 
Fehlerfreiheit, Genauigkeit, Verläßlichkeit oder Freiheit von sonstigen 
Mängeln der oben genannten Programme und Daten, weder ausdrücklich, noch 
stillschweigend. In keinem Falle kann ich für irgendwelche Schäden, die von 
diesem Programm verursacht wurden verantwortlich gemacht werden.

    "Fiasco" ist @{i}nicht @{ui}Public Domain, ich behalte mir jegliche
Urheberrechte vor. (Fiasco Copyright © 1995 Nils Bandener)

    "Fiasco" darf frei verbreitet werden, solange folgende Bedingungen er-
füllt sind:

- Das Programm-Paket muß komplett sein. Fiasco besteht in der Release 1.0
  aus den Dateien, die @{"hier" link Filelist} aufgeslistet sind.

- Fiasco darf ohne @{i}schriftliche @{ui}Genehmigung des Autors nicht
  für kommerzielle Zwecke verkauft werden.
  Dies schließt den Vertrieb von Fiasco zu überhöhten Preisen ein.
  Es dürfen lediglich Kosten für Medien und Kopieren erhoben werden.  
  Der Vertrieb auf CD-Roms ist gestattet, solange der Preis nicht den Preis
  der "Fresh Fish"-CD-Rom von Fred Fish nicht übersteigt.

@endnode
@node Filelist

     Fiasco_1.0 (dir)
          Development (dir)
            fiasco.cd                        fiasco.cd.info
            fiasco.ct                        fiasco.ct.info
            Fiasco_NewStrings                Fiasco_NewStrings.info
          Databases (dir)
               English (dir)
                    PD-Disks (dir)
                      Disks.fdb                        Disks.fdb.info
                      myrequestfile                    ReadFish.rexx
                      ReadFish.rexx.info               
                    FamilyTree (dir)
                      families.fdb                     families.fdb.info
                      persons.fdb                      persons.fdb.info
                    Addresses (dir)
                      Addresses.fdb                    Addresses.fdb.info
                      Countries.fdb                    Countries.fdb.info
                    Videos (dir)
                      CalcLen.rexx                     Films.fdb
                      Films.fdb.info                   Tapes.fdb
                      Tapes.fdb.info                   
                    DatatypesDemo (dir)
                      AmigaWorld.ilbm                  AmigaWorld.ilbm.info
                      DatatypesDemo.fdb                DatatypesDemo.fdb.info
                      Hallelujah.8svx                  
                 Addresses.info                   DatatypesDemo.info
                 FamilyTree.info                  PD-Disks.info
                 Videos.info                      
               Deutsch (dir)
                    PD-Disks (dir)
                      Disks.fdb                        Disks.fdb.info
                      myrequestfile                    ReadFish.rexx
                      ReadFish.rexx.info               
                    FamilyTree (dir)
                      families.fdb                     families.fdb.info
                      persons.fdb                      persons.fdb.info
                    Addresses (dir)
                      Addresses.fdb                    Addresses.fdb.info
                      Countries.fdb                    Countries.fdb.info
                    Videos (dir)
                      CalcLen.rexx                     Films.fdb
                      Films.fdb.info                   Tapes.fdb
                      Tapes.fdb.info                   
                    DatatypesDemo (dir)
                      AmigaWorld.ilbm                  AmigaWorld.ilbm.info
                      DatatypesDemo.fdb                DatatypesDemo.fdb.info
                      Hallelujah.8svx                  
                 Addresses.info                   DatatypesDemo.info
                 FamilyTree.info                  PD-Disks.info
                 Videos.info                      
            Deutsch.info                     English.info
          Catalogs (dir)
               Deutsch (dir)
                 fiasco.catalog                   
          Documentation (dir)
               Deutsch (dir)
                 fiasco.guide                     fiasco.guide.info
               English (dir)
                 fiasco.guide                     fiasco.guide.info
            Deutsch.info                     English.info
          Install (dir)
            Deutsch.info                     English.info
            Install                          
       Databases.info                   Development.info
       Documentation.info               Fiasco
       Fiasco.info                      Install.info

@endnode
@node quickstart "Quick Start"

@{b}@{i}
Dies sind die wichtigsten Dinge, die man wissen muß, um mit Fiasco
zu arbeiten:
@{ub}@{ui}
 
 o Das Programm startet man am besten über das Programm- oder ein Projekt-
   Icon.

 o Es gibt zwei Arbeits-Modi in Fiasco, einen, in dem man die Records
   verändern kann, und einen anderen, in dem man die Maske verändern kann.
   Man steuert sie über @{"Kontrolle/RecordModus" link MnRecordMode} bzw. @{"Kontrolle/MaskenModus" link MnMaskMode}.

 o Das @{"Service-Fenster" link ServiceWin} erleichtert das Arbeiten mit Fiasco, wenn man sich 
   noch nicht mit Shortcuts u.ä. auskennt. Mann öffnet es über 
   @{"Kontrolle/ServiceFenster" link ServiceWin}. ACHTUNG: Die Funktionen der Gadgets variieren in den
   Modi.

 o Die @{"Liste" link List}, die man über @{"Kontrolle/ListFenster" link List}erreicht, kann verändert
   werden, indem man in die Titeln der Liste klickt. Klickt man einen
   Titel einmal an, so wird er aktiviert. Über das Menu "List" kann man
   nun diverse Sachen mit der Spalte machen. Wenn man am rechten Rand 
   eines Titels klickt, und die Maustaste gedrückt hält, kann man die
   Breite einer Spalte variieren. Falls man in den restlichen Raum des
   Titels klickt, und die Maustaste gedrückt hält, kann man die Position
   der Spalte verändern.

 o Bestimmte Einstellungen zum Projekt, z.B. zum Masken-Layout kann man
   über den Menupunkt @{"Projekt/Optionen" link MnOptions} einstellen.

 o Bei sonstigen Problemen kann man einfach das Menu anwählen und bevor
   man die rechte Maustaste losläßt, die Help-Taste drücken.


@endnode
@node MaskCreation "Erstellen einer Datenbank"  
@smartwrap

    Eine Datenbank besteht aus zwei Komponenten: Einmal die Daten an sich, die
in Records aufgeteilt werden. Die Art der Daten wird im zweiten Teil
definiert, der Maske. Eine Maske besteht aus einer beliebigen Anzahl von
Feldern, die durch ihre Typen bestimmen, welche Art von Daten sie speichern
sollen. 


    Um eine Maske zu erstellen muß man zuerst in den Masken-Modus, indem man
den Menupunkt @{"Kontrolle/Masken-Modus" link MnMaskMode} aktiviert. Nun
erscheint in der Maske ein Cursor, mit dem man die Position des Feldes
festlegen kann, das man erstellen will. Den Typ des Feldes, das erzeugt
werden soll, kann man über das Menu Felder/Typ festlegen. Die verschiedenen
Feldtypen werden im Kapitel @{"Feldtypen" link FieldTypes} erklärt.
Weiterhin läßt der aktuelle Feldtyp sich noch über das @{"Service-Fenster" link ServiceWin}
und per Tastaturshortcuts einstellen (siehe @{"Menu" link AllMenus})


    Nach diesen Einstellungen kann man mit dem Menupunkt @{"Feld Hinzufügen..." link MnAddField}
ein neues Feld erstellen. Zuerst öffnet sich der @{"Feldrequester" link RqEditField}. Die einzelnen
Gadgets im Feldrequester sind vom Feldtyp abhängig und bei den jeweiligen
@{"Typdokumentationen" link FieldTypes} erklärt. Es reicht übrigens nicht, nur Ok 
anzuklicken. Bestimmte Attribute, wie z.B. die Id müssen vom Benutzer immer
neu angegeben werden. Sollten alle Attribute gültig sein, schließt sich der
Requester und das jeweilige Feld erscheint in der Maske. 


    Nachträglich können im Nachhinein alle Attribute des Feldes bis auf den
Feldtypen an sich geändert werden. Die Position läßt sich einfach mit der
Maus verändern. Wenn man ein Feld auswählt und die Maustaste gedrückt hält 
erscheint einmal ein gefülltes Rechteck, das mit der Maus mitgeht und ein
anderes, das die genaue neue Position zeigt. Läßt man die linke Maustaste
los, wird das Feld an der neuen Stelle abgelegt, soweit keine anderen
Felder im Weg sind. 


    Der Feldrequester läßt sich auch wieder aufrufen, indem man entweder
auf ein Feld doppelt klickt, oder ein Feld aktiviert und den Menupunkt
@{"Felder/Feld ändern..." link MnEditField} anwählt. Hier lassen sich
wiederum alle Parameter frei verändern. Der Id-Wert sollte jedoch nur mit
Vorsicht verändert werden, da andere Fiasco-Projekte oder ARexx-Scripts
unter Umständen noch die alten Werte eingestellt haben und die Felder nicht
mehr finden. Falls man die maximale Zeichenanzahl von String, Extern oder
Datatypes-Feldern verkleinert, wird zuerst geprüft, ob Daten eventuell
verloren gehen würden und eine Warnung ausgegeben. 


    Über den Menupunkt @{"Felder/Feld entfernen" link MnRemoveField} lassen sich Felder 
wieder entfernen. @{fg highlight}Vorsicht:@{fg text} Falls die Option @{"Sicherheits-Requester" link MnSecurityRequester}
nicht aktiviert ist, werden alle in diesem Feld gespeicherten Daten sofort
aus dem RAM gelöscht. Beim nächsten Abspeichern werden auch die auf der
Diskette verbliebenen Daten dieses Feldes vernichtet.


    Im @{"Options-Requester" link RqOptions} lassen sich weitere Parameter
für das aktuelle Projekt, wie @{"Maskendehnung" link Stretch}, Name des Autors 
usw. angeben.


    Der Menupunkt @{"Felder/Relationen ändern" link MnEditRelations} arbeitet ähnlich
wie @{"Feld ändern" link MnEditField}. Hier kann man jedoch Parameter für
@{"Relationen" link Relations} einstellen.


    Ist die Maske vollständig kann man wieder in den Record-Modus
zurückgehen (@{"Kontrolle/Record-Modus" link MnRecordMode}) und die
eigentlichen Daten erstellen. Mit dem Menupunkt @{"Records/Hinzufügen" link MnAddRecord}
kann man neue Records erstellen, in denen am Anfang nur die Startwerte enthalten
sind. Die Felder lassen sich nun wie normale Gadgets für die Dateneingabe
benutzen.  
    
@endnode

@node Search "Suchen in einer Datenbank"
@smartwrap

    Die GUI-Schnittstelle zur Standard-Suchfunktion von Fiasco bildet der
@{"Such-Requester" link RqFind}, den man über den Menupunkt @{"Vergl./Suchen" link MnFind } erreicht.
Hier kann man auswählen, auf welches Feld die Suche bezogen sein soll, ein
Suchmuster angeben und Parameter zur unscharfen Suche angeben. 
Das Suchmuster kann einem gewöhnlichen Eintrag entsprechen. Bei den String-, 
Integer-, Float-, Date- und Timefeldtypen entspricht dies genau dem Inhalt des 
eigentlichen Felds. Falls sich die Suche auf ein Boolean-Feld bezieht, so kann 
man entweder "TRUE" oder "1" eingeben, falls man nach einem aktiven Feld suchen
will, oder "FALSE" oder "0", falls man nach einem inaktiven Feld suchen will.
Cycle-Felder lassen als Eingabe entweder eine Auswahlmöglichkeit als 
Klartext zu, oder die Nummer einer Auswahlmöglichkeit (von 0 aufwärts).
Slider-Felder lassen wiederum nur eine Zahl an sich zu. Extern- und Data-
typesfelder können nur über den Filenamen gesucht werden. Eine Suche, die
sich auf den Inhalt der Dateien bezieht, ist über die eingebaute Suchfunktion
nicht möglich.


    Mit den Gadgets am unteren Rand kann man die Suche starten. Wenn ein
passender Eintrag gefunden wird, wird der entsprechende Record automatisch
aktiviert. Die Suche läßt sich hinterher ohne Umweg über den Suchrequester
mit den Menupunkten @{"Vergl./weitersuchen" link MnFindNext} und @{"Vergl./rückwärts suchen" link MnFindPrevious} 
fortsetzen.


@{"Suchmuster" link Patterns}

@{"unscharfe Suche" link BlurredSearch}

@{"Suchen mit ARexx" link ARexxSearch}

@{"Zählen" link Count}

@{"Ersetzen" link Replace}

@{"Filter" link Filter}

@endnode
@node Patterns "Suchmuster"
@smartwrap

    Neben Eingaben im Klartext sind auch bei bestimmten Feldtypen Suchmuster
zulässig. Der Stringfeldtyp erlaubt die Benutzung von AmigaDOS-ähnlichen 
Mustern. ? steht für ein unbekanntes Zeichen. "?iasco" würde also nach
Aiasco, Biasco, Ciasco, 1iasco, @iasco, usw. suchen. "????" würde nach
Einträgen suchen, die 4 Buchstaben lang sind. #? steht für null oder mehr
unbekannte Zeichen. A#? könnte also "Amiga", "Afrika", "A", "ABCD" be-
deuten. ?#? sucht nach allen Einträgen, die nicht leer sind. Es ist nur
ein "#?" in einem Suchmuster erlaubt. Wie auch unter AmigaDOS können auch
diese Muster "escaped" werden, wenn man nach Einträgen suchen will, die
genau den Mustern entsprechen. Um dies zu tun, muß man den jeweiligen Zeichen 
ein ' (ALT-Ä) voranstellen.


    Integer- und Sliderfelder unterstützen auch zusätzliche Muster. 
Folgende sind möglich: > x, < x, >= x, <= x, != x. "x" steht hier für eine
beliebige ganze Zahl. ">" sucht nur nach Zahlen größer als x, ">=" nur 
nach Zahlen größer oder gleich x, "<" nur nach Zahlen kleiner als x und 
"<=" nur nach Zahlen kleiner oder gleich x. "!=" sucht nur nach Zahlen, 
die ungleich x sind. Ein Muster wie "==", also "gleich" gibt es nicht, da
dies durch den Wert ohne jedes Muster dargestellt wird.


    Die von einem Feldtyp unterstützten Muster sind auch nochmal
bei den Dokumentationen der jeweiligen @{"Feldtypen" link FieldTypes} aufgeführt.


    Außerdem ist eine @{"Zusammenfassung aller Suchmuster" link Patterns} verfügbar.
@endnode
@node BlurredSearch "Unscharfe Suche"
@smartwrap

    Die unscharfe Suche bietet die Möglichkeit, nach Strings zu suchen, 
wobei nicht nur nach gleichen Einträgen gesucht wird, sondern nach ähnlichen
Einträgen. Wie tolerant die Funktion dabei ist, kann man unter "faktor" 
einstellen. 0 entspricht der niedrigsten Toleranz, dies gleicht der 
normalen Suche, ist jedoch etwas langsamer. 100 bedeutet, daß alle 
Einträge als "ähnlich" angesehen werden. (Besser: "sollte bedeuten", aber
die Funktion ist bei 100 dennoch @{u}sehr@{uu} tolerant)


    Die @{"Zähl-Funktion" link Count} eignet sich hervorragend, um mit der Unscharfen Suche
etwas zu experimentieren.

@endnode
@node ARexxSearch "Suchen mit ARexx"
@smartwrap

    Auch mit @{"ARexx" link ARexx} können Suchen durchgeführt werden. Das Kommando
@{"F_SetSearchPat" link F_SetSearchPat} setzt das Suchmuster (im Requester unter Pattern). Mit
@{"F_SetSearchField" link F_SetSearchField} kann man das Feld, auf das sich die Suche bezieht fest-
legen (im Requester unter Field). Nun kann man mit @{"F_FindNext" link F_FindNext} bzw. @{"F_FindPrev" link F_FindPrev}
nach übereinstimmungen suchen. Im Gegensatz zu der GUI-Suchfunktion wird
nun jedoch nicht der jeweilige Record aktiviert, sondern die Nummer des
Records in der Variablen RESULT zurückgegeben. Mit der kann man nun machen,
was man will, z.B. mit dem Kommando @{"F_GotoRec" link F_GotoRec} den Record aktivieren.


    Die Einstellungen, die über die Kommandos F_SetSearchPat und F_SetSearchField
gemacht wurden, werden übrigens hinterher auch bei der GUI-Suche weiterbenutzt.


    Über ARexx kann man so auch eine Suchfunktion erstellen, die auch
mehrere Felder unterstützt.

@endnode
@node Count "Zählen"
@smartwrap

    Über den Menupunkt @{"Vergl./Zählen" link MnCount} öffnet man einen dem Suchrequester sehr
ähnlichen Requester, der sich genaugenommen nur durch Titel, Größe und
die Gadgets am unteren Rand unterscheidet. Hier kann man wiederum 
Suchmuster, Bezugsfeld und die Toleranz für die unscharfe Suche angeben.
Falls man dann "Ok" wählt, werden die Übereinstimmungen gezählt und das
Ergebnis angezeigt. Natürlich werden auch hier Muster und Toleranz mit
einbezogen und beeinflussen so das Ergebnis. So kann man sich auch mal
das Verhalten des @{"Toleranz-Faktors" link BlurredSearch} genauer betrachten.

@endnode
@node Replace "Ersetzen"
@smartwrap

    @{"Compare/Replace..." link MnReplace} erlaubt es, bestimmte Werte durch
einen anderen zu ersetzen. Auch hier sind Suchmuster möglich, es wird jedoch
immer nur ein Wert eingesetzt. Das Gadget mit dem Titel "Replacement" nimmt
den Wert auf, der neu eingesetzt werden soll. Falls das Gadget "Confirm"
aktiviert ist, wird ihnen immer der jeweilige Record gezeigt und Sie werden
gefragt, ob sie wirklich den alten Wert ersetzen wollen.


    @{i}Achtung: @{ui}Mit einem falschen Muster (z.B. #?) kann man schnell
viele Einträge löschen bzw. unbrauchbar machen!
@endnode
@node Filter "Filter"
@smartwrap

    @{"Compare/Filter" link MnEditFilter} öffnet auch den Such-Requester, in dem
man auch wieder die altbekannten Parameter angeben kann bzw. muß.
Bestätigt man diesen Request mit "Ok", so ist die Datenbank scheinbar 
geschrumpft. Sie würden sicherlich bald herausfinden, daß nun nur noch
die Records angezeigt werden, die den Suchparametern entsprechen. 
Die Funktionen @{"Records/Nächster" link MnNext}, @{"Records/Voriger" link MnPrevious} oder deren Äquivalente verhalten
sich nun die "Weitersuchen" bzw. "Rückwärts suchen".


    Der Filter wird gleich nach dem Bestätigen des Requesters erstellt. Das
bedeutet, daß neu hinzugefügte Records auch angezeigt werden, auch wenn sie
nicht mit dem Filter übereinstimmen. Um dies zu erreichen muß man einfach den
Requester noch mal aufrufen und bestätigen. 


    Über den Menupunkt @{"Vergleichen/Filter An?" link MnUseFilter} läßt sich
der Filter zeitweise aktivieren und deaktivieren.
@endnode
    
@node AllPatterns "Alle Suchmuster"
@{b}
    Muster  Unterstützte Feldtypen      Funktion
@{ub}
--kein Muster--   Alle Typen            Exakte Übereinstimmung

    #?      @{"String" link FT_Str}, @{"Extern" link FT_Ext}, @{"Datatypes" link FT_DT}   Eine unbekannte Zeichenkette undefi-
                                        nierter Länge. Kann nur einmal in
                                        einem Text vorkommen.

    ?       @{"String" link FT_Str}, @{"Extern" link FT_Ext}, @{"Datatypes" link FT_DT}   Ein unbekanntes Zeichen. 

    > x     @{"Integer" link FT_Int}, @{"Slider" link FT_Sld}             Eine Zahl, die größer als x ist.

    < x     @{"Integer" link FT_Int}, @{"Slider" link FT_Sld}             Eine Zahl, die kleiner als x ist.

    >= x    @{"Integer" link FT_Int}, @{"Slider" link FT_Sld}             Eine Zahl, die größer oder gleich x ist.

    <= x    @{"Integer" link FT_Int}, @{"Slider" link FT_Sld}             Eine Zahl, die kleiner oder gleich x ist.

    !=      @{"Integer" link FT_int}, @{"Slider" link FT_Sld}             Eine Zahl, die ungleich x ist.
                                       

    Genauere Beschreibungen zu den Mustern finden sich bei den Dokumentationen
der einzelnen @{"Feldtypen" link FieldTypes} und bei der allgemeinen Beschrei-
bung der @{"Suchfunktionen" link Search}

@endnode
@node Relations "Relationen"
@smartwrap

    Gleich vorweg: Ich habe noch nie mit einer anderen Datenbank gearbeitet,
die Relationen unterstützt. So weiß ich nicht genau, ob meine Implementation
genau mit der ursprünglichen Idee übereinstimmt. Hauptsache ist jedoch: 
Sie funktioniert!


    Relationen sind Felder, deren Inhalt nicht in der Datei des Projektes, 
aus dem die Relationen stammen, sondern in einer weiteren Projekt-Datei zu
finden sind. Um zu wissen, aus welchem Record die Daten entnommen werden sollen,
müssen beide Projekte ein Feld mit einem eindeutigen Identfikations-Inhalt 
haben, das als Schlüssel (Key) bezeichnet wird.


    Um nun in Fiasco Relationen nutzen zu können, muß man zuerst in ein Pro-
jekt erzeugen, das die Quelle für ein anderes Projekt darstellt, das dann
daraus die Daten liest. Dieses Projekt wird später "dort" genannt. In diesem 
Quell-Projekt müssen dann mindestens zwei Felder erstellt werden, eins für 
die eigentlichen Daten, das andere für den Schlüssel. Das Feld für den
Schlüssel sollte vom Typ Integer sein, da dies am schnellsten ist und von 
Fiasco automatisch mit Schlüsseln versorgt werden kann. Für besondere Fälle 
erlaubt Fiasco jedoch auch, jeden anderen Feldtypen zu verwenden. 


    Um die Option zu aktivieren, die dem Schlüssel-Feld automatisch einen
eindeutigen Schlüssel zuweist, muß man im @{"Feld-Requester" link RqEditField} das Gadget 
"Eindeutiger Schlüssel" aktivieren. Bitte beachten Sie, daß der Schlüssel nur
beim Erstellen eines Records erzeugt wird! Falls schon Records existierten,
bevor diese Option aktiviert wurde, behalten diese ihren alten, und 
möglicherweise nicht eindeutigen Inhalt. Außerdem kann man später den Inhalt
dieses Feldes beliebig verändern, ohne daß irgendeine Überprüfung vorgenommen 
wird. 


    Der Typ des zweiten Feldes ist relativ egal. Man sollte sich nur bei den
Datentypen String, Extern und Datatypes das Attribut "Maximale Zeichen" gut
merken, da dieses im Feld des zweiten Projektes genau übereinstimmen muß.
 

    Es wäre sinnvoll, wenn dieses Projekt bereits einige Records mit etwas 
Inhalt enthalten würde, damit nach dem Aktivieren der Relation sofort ein
Effekt sichtbar wird.


    Dieses Projekt muß jetzt abgespeichert werden.


    Das zweite Projekt muß wiederum aus zwei Feldern bestehen, die in Typ und
bei den Typen String, Extern und Datatypes im Attribut "Maximale Zeichen"
übereinstimmen. Das Feld für den Schlüssel sollte jedoch nicht wieder
"Eindeutiger Schlüssel" aktiviert haben, da dies keinen größeren Sinn machen
würde. 


    Bevor nun die Relation aktiviert werden kann, sollte man das Projekt im
selben Verzeichnis wie das erste Abspeichern, damit im Relations-Requester
keine absoluten, sondern relative - oder in diesem Fall keine Pfade - benutzt
werden können. 


    Um nun die Relation erstellen zu können, muß das Feld, das @{i}nicht @{ui}
den Schlüssel beinhalten soll, aktivieren und dazu den @{"Relations-Requester" link RqRel}
aufrufen (mit @{"Felder/Relationen Ändern" link MnEditRelations}. Hier sollte man zuerst den Schlüssel 
"hier" im Listview oben links auswählen. Danach muß die Relations-Datei mit 
dem Filerequester-Gadget in der Mitte ausgewählt werden. Der Requester sollte 
sich bereits im richtigen Verzeichnis befinden. Nachdem die Datei ausgewählt 
wurde, werden in den unteren beiden Listviews die möglichen Schlüssel und 
eigentlichen Felder "dort" angezeigt. Hier sollte man auch die richtigen Felder 
auswählen und anschließend "Ok" anwählen. Hat man alles richtig gemacht werden 
jetzt die Relationen zu den bereits bestehenden Records geladen. 


    Das wars!


    Es gibt übrigens noch eine @{"Relationen-Checkliste" link RelChecklist},
die diese Schritte kurz zusammenfaßt.
@endnode
@node RelChecklist "Relations-Checkliste"

 o Schlüsselfeld "dort" erstellen. Eventuell "Eindeutiger Schlüssel" 
   aktivieren.
 o Eingentliches Feld "dort" erstellen. Bei String, Extern, Datatypes
   "Maximale Zeichen" merken!
 o Projekt speichern.

 o Schlüsselfeld "hier" erstellen. Typ muß mit Schlüsselfeld "dort"
   übereinstimmen. 
 o Eingentliches Feld "hier" erstellen. Typ und "Maximale Zeichen" müssen
   übereinstimmen!    
 o Projekt speichern.

 o Relations-Requester für Eigentliches Feld "hier" aufrufen.
 
 o Schlüssel "hier" auswählen
 
 o Relations-Datei auswählen

 o Schlüssel und eigentl. Feld dort auswählen. Falls nicht die richtigen
   Felder angezeigt werden, Typ und bei String, Extern od. Datatypes
   "Maximale Zeichen" überprüfen.

 o "Ok" anwählen
 
@endnode
@node FieldTypes "Feldtypen"

    Felder sind die eigentlichen Speicher für Daten. Dazu reichen eigentlich 
die Grundtypen "String" und "Zahl". Alle anderen Typen sind mehr oder weniger
Modifikationen dieser Grundtypen, die die Arbeit mit der Datenbank erleichtern. 

Fiasco unterstützt zur Zeit folgende Feldtypen:

    @{" String " LINK FT_Str }           
    @{" Integer " LINK FT_Int }          
    @{" Float " LINK FT_Float }             
    @{" Boolean " LINK FT_Bool }          
    @{" Cycle " LINK FT_Cyc }            
    @{" Slider " LINK FT_Sld }           
    @{" Date " LINK FT_Date }             
    @{" Time " LINK FT_Time }             
    @{" Extern " LINK FT_Ext }           
    @{" Datatypes " LINK FT_DT }
    @{" Text " LINK FT_Txt }

@endnode
@node StdAttrs "Standard-Attribute"

Diese Attribute werden normalerweise von einem Feldtyp unterstützt:
 
- @{b}Id@{ub}
  Hier kann man einen Identitäts-String angeben, mit dem man die Felder
  z.B. in ARexx-Scripts erkennen kann. Dieser String sollte nur einmal
  in einem Projekt vorkommen, überprüfungen daraufhin werden jedoch (noch)
  nicht ausgeführt. Sollte über eine nicht "einmalige" Id mit einem ARexx-
  Script versucht werden ein Feld anzusprechen, ist das Verhalten des 
  Programms nicht definiert.

- @{b}Breite  (Width)@{ub}
  bestimmt die Breite in Zeichen, mit der das Feld in der Maske erscheint.

- @{b}Startwert  (Init Cont)@{ub}
  Hier kann man einen Wert angeben, der beim Neuerstellen eines Records
  in dieses Feld kopiert wird.

- @{b}Alten Wert benutzten  (Use old value)@{ub}
  Wenn man einen Record neu erstellt wird der Wert des alten Records
  übernommen. Wenn "Use old value" aktiv ist, wird Init Cont ignoriert.
  Dies ist insbesondere beim Eingeben vieler ähnlicher Datensätze 
  nützlich.
 
- @{b}Script@{ub}
  Hier läßt sich ein ARexx-Script angeben, das aktiviert wird, wenn ein 
  neuer Record erstellt wird, bzw. der Inhalt des jeweiligen Feldes 
  geändert wird. Abhängig vom Inhalt des Scripts können Init Cont und
  Use old value von ihrem eigentlichen Sinn abweichen. Auf das Script wird
  relativ von dem Verzeichnis zugegriffen, in dem das Projekt liegt.

Durch @{"Dehnungswerte" link Stretch} ungleich 0 können die Dimensions-Attribute verzerrt
werden.

@endnode
@node FT_Str "Der String-Feldtyp"

In einem String-Feld lassen sich Zeichenketten begrenzter Länge eingeben.
@{b}
Neben den @{"Standard-Attributen" link StdAttrs } werden folgende Attribute unterstützt:
@{ub}  
- Maximale Zeichen  (Max Chars)
  bestimmt die maximale Anzahl von Zeichen, die in das Feld eingegeben werden
  dürfen. Dieses Attribut wirkt sich direkt auf die Größe der Datei aus.
@{b}
Suchäquivalent:
@{ub}
  entspricht dem Feldinhalt.
@{b}
Unterstützte Suchmuster:
@{ub}
-  ? = Ein unbekanntes Zeichen.
- #? = Null oder mehr unbekannte Zeichen.

@endnode
@node FT_Int "Der Integer-Feldtyp"

In einem Integer-Feld lassen sich Ganzzahlen im Bereich von -2.147.483.348 bis
2.147.483.347 eingeben.
@{b}
Neben den @{"Standard-Attributen" link StdAttrs } werden folgende Attribute unterstützt:
@{ub}
- Maximale Zeichen  (Max Chars)
  bestimmt die maximale Anzahl von Zeichen, die in das Feld eingegeben werden
  dürfen.

- Eindeutiger Schlüssel  (Gimme unique Key)
  legt in diesem Feld bei Neuerstellung eines Records eine -für diese Datenbank-
  einmalige Identifikations-Nummer ab. Wenn dieses Attribut aktiv ist, werden
  "Init Cont" und "use old value" ignoriert.
@{b}
Suchäquivalent:
@{ub}
  entspricht dem Feldinhalt
@{b}
Unterstützte Suchmuster:
@{ub}
  >  - größer als
  <  - kleiner als
  >= - größer oder gleich
  <= - kleiner oder gleich
  != - ungleich

@endnode
@node FT_Float "Der Float-Feldtyp"

In ein Float-Feld können reelle Zahlen eingegeben werden.
@{b}
Neben den @{"Standard-Attributen" link StdAttrs } werden folgende Attribute unterstützt:
@{ub}
- Präzision (Precision)
  Anzahl der darzustellenden Nachkommastellen.

@{b}
Suchäquivalent:
@{ub}
  entspricht dem Feldinhalt

Bemerkung: Die Genauigkeit von Float läßt noch zu wünschen übrig. Es empfiehlt
sich, statt Float @{"String" link FT_Str} zu benutzen. ARexx kann damit
genausogut rechnen, wenn korrekte Zahlen angegeben werden.
@endnode
@node FT_Bool "Der Boolean-Feldtyp"

Ein Boolean-Feldtyp nimmt Wahrheitswerte auf, d.h. entweder Ja oder Nein.
Ein Boolean-Feld erscheint im Maskenmodus als ein "Checkbox-Gadget".
@{b}
Von den @{"Standard-Attributen" link StdAttrs } werden folgende Attribute nicht unterstützt:
@{ub}
- Höhe    (ist immer 1)
- Breite  (ist immer 3)

@{b}
Suchäquivalent:
@{ub}
  TRUE oder 1  - Gesetzter Haken
  FALSE oder 0 - Kein Haken

Unter Amiga OS 2.0 kann das Aussehen dieses Feldes leicht kaputt wirken, da 
die Grafiken noch nicht skalierbar sind. Unter Amiga OS 3.0 oder höher werden 
die Grafiken korrekt an die Größe der Schrift angepaßt.

@endnode
@node FT_Cyc "Der Cycle-Feldtyp"

Der Cycle-Feldtyp bietet mehrere Auswahlmöglichkeiten aus einer selbst
definierten Liste. Der Größte Vorteil beim Cycle-Feldtyp ist die Speicher-
ersparnis. Es werden maximal 65536 Auswahlmöglichkeiten unterstützt. (Ich
hoffe, daß das reicht ;-)
Ein Cycle-Feld erscheint in der Maske als ein "Cycle-Gadget" (wie der Name 
schon sagt).
@{b}
Neben den @{"Standard-Attributen" link StdAttrs } werden folgende Attribute unterstützt:
@{ub}
- Labels
  Eine Liste aller Auswahlmöglichkeiten. Ein Eintrag ist Pflicht, ab zweien 
  wird das Cycle-Feld sinnvoll.
@{b}

"Init Cont" ist in dem Fall eines Cycle-Felds eine Nummer, die sich auf die 
Auswahlmöglichkeiten bezieht. 0 entspricht dabei dem ersten Eintrag, 1 dem 
zweiten, und so weiter.

@{b}
Suchäquivalent:
@{ub}
  entweder die Nummer des Eintrags a la "Init Cont",
  oder der Eintrag im Klartext (nicht vertippen!)

@endnode
@node FT_Sld "Der Slider-Feldtyp"

Ein Slider-Feld ist eine Abwandlung des Integer-Typs. Mit ihm können 
Ganzzahlen grafisch dargestellt und verändert werden. Der Bereich der Zahlen
ist auf -32.768 bis 32.767 begrenzt, kann jedoch durch mehrere Attribute
beeinflußt werden.
@{b}
Neben den @{"Standard-Attributen" link StdAttrs } werden folgende Attribute unterstützt:
@{ub}
- Min. Wert  (Min. Value)
  gibt den niedrigsten Wert der dargestellt wird an. Dieser Wert entspricht der
  Stellung des "Knobs" am linken bzw. am oberen Rand des Feldes.

- Max. Wert  (Max. Value)
  gibt den höchsten Wert der dargestellt wird an. Dieser Wert entspricht der
  Stellung des "Knobs" am rechten bzw. am unteren Rand des Feldes.

- Format
  ist ein Formatstring im Stil der Programmiersprache C. Er baut sich wie
  folgt auf:

  %[-][0][ZahlenFeld][.Maximum][l]Format

  ·  -: Die Zahl wird im ZahlenFeld nach links ausgerichtet, normalerweise wird sie
        nach rechts ausgerichtet.
  ·  0: Das ZahlenFeld wird mit dem Zeichen '0' ausgefüllt. Bsp.: 1 -> 001
  ·  ZahlenFeld: Die minimale Feldbreite 
  ·  Maximum: nur für Strings, spielt hier keine Rolle.
  ·  l: Zeigt an, daß die Zahl 32-bit breit ist, muß hier immer angegeben werden.
  ·  Format:
     %b - BCPL-String, spielt hier keine Rolle.
     %s - C-String, spielt hier keine Rolle.
     %c - Char, das ASCII-Zeichen für die Zahl wird ausgeben.
     %d - Die Zahl wird ausgegeben.
     %u - Die Zahl wird vorzeichenlos ausgegeben.
     %x - Die Zahl wird im Hexadezimal-Format ausgegeben.

  Die Formatierung erfolgt mit der Exec-Funktion RawDoFmt().

- MaxFormatLänge  (MaxFormatLen)
  gibt die maximale Länge der Format-Ausgabe an, dieser Bereich wird bei der
  Breite angerechnet, d.h. je größer MaxFormatLen, desto kleiner das
  eigentliche Feld.

@{b}
Suchäquivalent:
@{ub}
  Die eigentliche Zahl

@{b}
Unterstützte Suchmuster:
@{ub}
  >  - größer als
  <  - kleiner als
  >= - größer oder gleich
  <= - kleiner oder gleich
  != - ungleich
@endnode
@node FT_Date "Der Datums-Feldtyp"

In ein Datums-Feld kann ein Datum eingegeben werden.
@{b}
Neben den @{"Standard-Attributen" link StdAttrs } werden folgende Attribute unterstützt:
@{ub}
- Benutze aktuelles Datum (use current Date)
  Beim Neuerstellen eines Records wird das aktuelle Datum in dieses Feld
  eingefügt. 

@{b}
Suchäquivalent:
@{ub}
  entspricht dem Feldinhalt

Das Datum wird z.Zt. nur im deutschen Format (TT.MM.YYYY) gelesen und geschrieben.
Es wird keine Überprüfung der Werte vorgenommen, so sind z.Zt. Werte wie
65.20.3687 möglich.
@endnode
@node FT_Time "Der Time-Feldtyp"

In ein Zeit-Feld kann eine Uhrzeit eingegeben werden.
@{b}
Neben den @{"Standard-Attributen" link StdAttrs } werden folgende Attribute unterstützt:
@{ub}
- Benutze aktuelle Zeit  (use current Time)
  Beim neuerstellen eines Records wird die aktuelle Zeit in dieses Feld
  eingefügt. 

@{b}
Suchäquivalent:
@{ub}
  entspricht dem Feldinhalt

Die Zeit wird z.Zt. nur mit Sekunden ausgegeben (HH:MM:SS). AM und PM wird 
nicht unterstützt. Außerdem wird keine Wertüberprüfung vorgenommen, so sind 
z.Zt. Werte wie 55:66:99 möglich.
 
@endnode
@node FT_Ext "Der Extern-Feldtyp"

Ein Extern-Feld nimmt einen Dateinamen auf, der auf Wunsch an ein benutzerde-
finierbares Programm als Argument weitergeleitet wird. So kann man weitere
Daten zu einem Record definieren und abrufen.
@{b}
Neben den @{"Standard-Attributen" link StdAttrs } werden folgende Attribute unterstützt:
@{ub}
- Kommando  (Command)
  ist der Name eines Programms, mit dem die Daten verarbeitet werden können.
  Die Zeichenfolge "%s" wird bei Aufruf durch den Inhalt des Feldes ersetzt.
  Läßt man "%s" weg, so wird kein Argument übergeben.
  (z.B. "C:ED %s")

- Stack
  Gibt die Größe des Stacks für das Kommando an.

- Maximale Zeichen  (Max Chars)
  bestimmt die maximale Länge des Dateinamens. Dieses Attribut wirkt sich direkt
  auf die Dateigröße aus.

@{b}
Suchäquivalent:
@{ub}
  Entspricht dem Dateinamen; Inhaltsbezogene Suche ist nicht möglich

Die Programme werden mit dem AmigaDOS-Funktion System() aufgerufen. Für 
Aus- oder Eingabeoperationen wird ein Consolen-Fenster geöffnet.
@endnode
@node FT_DT "Der Datatypes-Feldtyp"

Ein Datatypes-Feld ist Extern-Feldern ähnlich. Der Unterschied ist, daß die
Datatypes-Library benutzt wird (und somit kann man dieses Feld erst ab OS 3.0
benutzen) und daß die Daten direkt in der Maske angezeigt werden. Durch die
Datatypes-Library ist dieses Feld auch universell einsetzbar und frei erwei-
terbar.
@{b}
Neben den @{"Standard-Attributen" link StdAttrs } werden folgende Attribute unterstützt:
@{ub}
- Maximale Zeichen (Max Chars)
  bestimmt die maximale Länge des Dateinamens. Dieses Attribut wirkt sich direkt
  auf die Dateigröße aus.
  
- Scroll-Leisten (Scrollbars)
  Sollen Scroller zur Verfügung gestellt werden, mit denen der Inhalt
  des Feldes verschoben werden kann? Ohne Scroller kann immer nur die
  linke obere Ecke der Daten betrachtet werden. (Dies ist nicht ganz wahr. 
  Manche Datentypen unterstützen das verschieben ihres Inhaltes, wenn man
  in den Bereich der Anzeige klickt und dabei in die Maus in die Richtung des
  verborgenes Inhalts zieht. Ein Beispiel ist der Bild Datentyp)
@{b}
Suchäquivalent:
@{ub}
  Entspricht dem Dateinamen; Inhaltsbezogene Suche ist nicht möglich

Der AmigaGuide- und der Animations-Datentyp scheinen mit relativ kleinen Feldern
nicht zurechtzukommen. Weil die Daten bei jedem Wechsel des Records neu geladen
werden müssen, kann sich dieser Vorgang verlangsamen.
@endnode
@node FT_Txt "Der Text-Feldtyp"

Der Text-Feldtyp ist eigentlich gar kein echtes Feld, er dient lediglich
zur Beschriftung der Maske. 
@{b}
Es werden folgende Attribute unterstützt:
@{ub}
- Text
  ist der Text, der in die Maske geschrieben wird.

- Pen
  gibt die Farbe an, in der der Text geschrieben werden soll.
  Es sind möglich: Normal (normalerweise Schwarz), Highlight (normalerweise
  Weiß). Die Farben lassen sich über den Palette-Preferences-Editor be-
  einflussen.

- Bold
  Ist dieses Attribut aktiv, wird der Text Fett geschrieben

- Italics
  Läßt den Text kursiv schreiben

- Underlined
  Läßt den Text unterstreichen.

@{b}
Es werden keine @{"Standard-Attribute" link StdAttrs } unterstützt.
@{ub}
@{b}
Suchäquivalent:
@{ub}
  Nach einem Text-Feld kann aufgrund fehlenden Inhalts nicht gesucht
  werden.

@endnode

@node gui "Grafische Benutzer Oberfläche (GUI)"

    Das einzige, womit Fiasco sich normalerweise nach dem Start präsentiert, 
ist ein leeres Fenster. Durch Pull-Down-Menus kann man nun dem Programm 
seine Wünsche mitteilen. Für diejenigen, die Menus nicht so mögen, können
über den Menupunkt @{"Kontrolle/ServiceFenster" link MnServiceWindow} ein weiteres Fenster öffnen, mit dem
sich die meisten Aktionen auch ohne Menu ausführen lassen. Die dritte Möglich-
keit, mit Fiasco zu kommunizieren, sind Tastatur-Shortcuts.

@{"Menus und Shortcuts" link AllMenus }
@{"Service-Window" link ServiceWin }
@{"Requester" link Requester}
    
    Mit der Maus direkt läßt sich im Masken-Modus der Cursor positionieren,
und Felder verschieben. Mit einem Doppelklick auf ein Feld wird der 
@{"Feld-Requester" link RqEditField} geöffnet, mit dem sich die Feld-Attribute verändern lassen. 
Dies entspricht dem Menupunkt @{"Feld/Ändern..." link MnEditField}.

    Fiasco unterstützt Menuhelp. Das bedeutet, daß wenn man über einem
Menuitem die Help-Taste drückt, eine Beschreibung der Funktion in einem
separatem AmigaGuide-Fenster angezeigt wird. Dazu muß man jedoch die
amigaguide.library besitzen und den Guide unter dem Namen Fiasco.guide in dem
Verzeichnis liegen haben, in dem Fiasco selbst liegt (Progdir:).
 
    Die Requester, die Fiasco benutzt, haben alle eine grundlegende Struktur. 
Am unteren Rand befinden sich die Gadgets, mit denen man den Requester
bestätigt. Meistens sind dies "Ok", was die Einstellungen im Requester
ausführt und "Cancel", was die Einstellungen im Requester nicht gültig macht.
"Ok" kann mit der Return-Taste abgekürzt werden und "Cancel" kann mit "Esc"
abgekürzt werden. Das Closegadget oben links tut das selbe wie "Cancel" oder
"Esc". 
@endnode
@node ServiceWin "Service Window"

    Das Service Window läßt sich über den Menupunkt @{"Kontrolle/ServiceFenster" link MnServiceWindow}
öffnen bzw. schließen. Es sieht ungefähr so aus:

                 
  @{" Add " link SAdd}  @{" Del " link SDel }  
                 
  @{"|<" link SFirst } @{" <" link SPrev} @{"> " link SNext} @{">|" link SLast}  

  @{"<Dateiname> " link SProj}   
                 
  @{"  <Status>  " link SStat}   
                 
  @{" <Feldtyp>  " link SFieldType}   


@endnode
@node SAdd "Neu (Add)"

    Falls das aktuelle Projekt sich im Record-Modus befindet, wird ein
neuer Record erstellt. Ist der Modus der Masken-Modus, wird ein neues
Feld des eingestellten Feld-Typs an der aktuellen Cursorposition erstellt.

Äquivalent zu dem Menupunkt:
@{"Records/Hinzufügen" link MnAddRecord }
bzw.
@{"Felder/Feld hinzufügen..." link MnAddField }
@endnode
@node SDel "Löschen (Delete)"

    Falls das aktuelle Projekt im Record-Modus ist, wird der aktuelle Record
gelöscht. Ist der Masken-Modus aktiv, wird das aktive Feld gelöscht (falls keins
aktiv ist, wird auch keins gelöscht). Achtung: Das Löschen geschieht normaler-
weise ohne Sicherheitsabfrage!

Äquivalent zu dem Menupunkt:
@{"Records/Löschen" link MnRemoveRecord }
bzw.
@{"Felder/Feld Entfernen" link MnRemoveField }
@endnode
@node SFirst "  |<"

    Falls das aktuelle Projekt im Record-Modus ist, wird der Record Nr.1 
aktiviert.

Äquivalent zu dem Menupunkt:
@{"Records/Erster" link MnFirstRecord }
@endnode
@node SPrev "  <"

    Falls das aktuelle Projekt im Record-Modus ist, wird der dem aktiven
Record vorausgehende Record aktiviert.

Äquivalent zu dem Menupunkt:
@{"Records/Voriger" link MnPrevious}
@endnode
@node SNext "  >"

    Falls das aktuelle Projekt im Record-Modus ist, wird der dem aktiven
Record folgende Record aktiviert.

Äquivalent zu dem Menupunkt:
@{"Records/Nächster" link MnNext }
@endnode
@node SLast "  >|"

    Falls das aktuelle Projekt im Record-Modus ist, wird der letzte Record
aktiviert.

Äquivalent zu dem Menupunkt:
@{"Records/Letzter" link MnLastRecord}
@endnode
@node SProj "Aktives Projekt"

    Hier wird der Name des aktuellen Projektes angezeigt. 
Achtung: Sollten sich zwei Projekte nur im Pfad, nicht im Namen voneinander
unterscheiden, wird beidesmal dasselbe angezeigt.

    Ein anderes Projekt aktiviert man, indem man das jeweilige Fenster
aktiviert.

@endnode
@node SStat "Status"

    Hier werden Statusinformationen zum aktiven Projekt angezeigt.

Im Record-Modus ist dies:
<Nummer des aktiven Records>/<Anzahl der Records>
Die Zahlen können variieren, falls ein @{"Filter" link Filter} aktiv ist.

Im Mask-Modus wird folgendes angezeigt:
X: <X-Position des Cursors>, Y: <Y-Position des Cursors>

@endnode
@node SFieldType "Feldtyp"

    Hier stellt man ein, was für ein Feldtyp beim nächsten Erzeugen eines Feldes
erzeugt wird. Äquivalent mit "Felder/Feldtyp".

@endnode

@node Mask "Maske"
@smartwrap

    Die Maske ist die Darstellungsform, mit der Fiasco am meisten arbeitet.
In einer Maske kann im Gegensatz zur @{"Liste" link List} nur ein Record 
gleichzeitig angezeigt werden. Dafür ist diese Anzeige übersichtlicher und
geordneter (falls man es richtig gemacht hat ;-), weshalb diese Darstellungs-
form auch manchmal als "Formular" bezeichnet wird. 


    Die Maske setzt sich aus sogenannten Feldern zusammen, die verschiedene 
Typen und somit verschiedene Erscheinungsformen haben. Eine komplette Beschrei-
bung aller Feldtypen finden Sie @{"hier" link FieldTypes}!


    Bei normalen Amiga-Programmen würde man die "Felder" als Gadgets bezeichnen 
und de facto sind sie sogar welche. Fiasco benutzt für die Maske intensiv 
Gadgets der gadtools.library, weshalb man sich schnell an die Fiasco-Masken 
gewöhnen können sollte.


    Fiasco-Masken passen sich automatisch an einen beliebigen Zeichensatz an,
einzige Vorraussetzung ist, daß er nicht proportional ist (z.B. topaz, courier).


    Um eine Maske in Fiasco zu gestalten, muß man über den Menupunkt @{"MaskenModus" link MnMaskMode}
in den Mask-Modus überwechseln. Nun kann man mit der Maus existierende Felder
verschieben oder über das "Felder"-Menu verschiedene andere Manipulationen
ausführen. Mehr dazu @{"hier" link MaskCreation}!

@endnode

@node List
@smartwrap

    Über den Menupunkt @{"Kontrolle/ListWindow" link MnListWindow} kann man ein Fenster mit einer
Listendarstellung des aktuellen Projektes öffnen. In der Liste wird ein Record
durch eine Zeile repräsentiert. Die Felder des Records sind durch Spalten
gekennzeichnet. Die erste Zeile der Liste beinhaltet die Ids der jeweiligen
Felder. Falls das Fenster nicht groß genug ist, um die gesamte Liste anzu-
zeigen, kann man die Scroll-Balken im rechten und unteren Fensterrand benutzen,
um sich durch die Liste hindurchzuarbeiten. Die Zeile des aktuellen Records
wird durch eine @{"Unterlegung" link FillPens} deutlich gemacht. 


    Sie können auch mit der Liste Records auswählen. Sie müssen lediglich
den jeweiligen Record anklicken und schon wird er aktiviert. Änderungen im
Record können Sie jedoch nur in der Maske vornehmen.


    Falls ein @{"Filter" link Filter} aktiv ist, werden nur noch die Einträge
angezeigt, die mit dem Filter-Muster übereinstimmen.


    Normalerweise werden für das Layout der Liste Position und Dimensionen
der jeweiligen Masken-Felder für die Liste umgesetzt. Sie haben jedoch auch
die Möglichkeit, hier einzugreifen. Die Breite der Spalten können Sie ver-
ändern, in dem Sie in der Titel-Zeile, in der die Ids angezeigt werden, an der 
rechten Kante die linke Maustaste zu drücken. Nun erscheint eine Linie an der
Mausposition, die Sie nun mit der Maus nach links oder rechts ziehen können.
Dort, wo Sie sie fallen lassen, d.h. die linke Maustaste loslassen, befindet
sich künftig der rechte Rand des Feldes. Falls Felder hiervon überschnitten
würden, werden Sie verschoben. 


    Die Position einer Spalten kann man auch verändern. Dazu klickt man über
der Mitte des Spalten-Kopfes und hält die Maustaste gedrückt. Nun kann man
die Spalte in der Liste an eine beliebige Stelle verschieben. Läßt man die
Maustaste wieder los, so wird die Spalte bestmöglich zwischen den benach-
barten Feldern plaziert.


    Will man Spalten ganz verschwinden lassen, so macht man das, indem man
mit der linken Maustaste den Kopf einer Spalte aktiviert. Nun kann man über
den Menupunkt @{"Liste/Spalte verbergen" link MnHideColumn} diese Spalte aus der Liste 
verschwinden lassen. Will man sie wieder haben, muß man @{"Liste/Spalte anzeigen" link MnShowColumn}
auswählen. Daraufhin erscheint ein Requester mit allen Spalten, die über 
"Hide column" entfernt wurden. Wenn man die gewünschte ausgewählt hat, wird
sie möglichst nahe an der alten Position wieder eingefügt.


    Der Menupunkt @{"Liste/Liste neu berechnen" link MnRecalcList} bewirkt, daß der
Aufbau der Liste völlig neu berechnet wird. Man kann ihn mit dem Menupunkt 
"Inhalt aufräumen" der Workbench vergleichen. Verborgene Spalten werden
jedoch nicht sichtbar gemacht.

@endnode

@node Records "Records"
@smartwrap

    Records stellen in einer Datenbank - um den Kartei-Vergleich wieder mal
heranzuziehen - die Karteikarten einer Kartei dar. Ein Record ist also eine
Sammlung verschiedener Aspekte zu einem Oberbegriff; z.B. zu einer Person
Name, Adresse usw. In der @{"Maske" link Mask} wird immer nur ein Record
auf einmal angezeigt, In der @{"Liste" link List} werden Records als Zeilen
dargestellt.
@endnode

@node FillPens "Unterlegung"
@smartwrap

    Wenn Sie AmigaOS 3.0 oder höher benutzen, können Sie diese Farben mit dem
Palette-Preferences-Editor manipulieren. Den "FILLPEN", der für die Unter-
legung benutzt wird, können sie über den Eintrag "Titelbalken aktiver 
Fenster" (der Name ist leicht irreführend ;-) ändern und den "FILLTEXTPEN",
der für den darüber liegenden Text benutzt wird, über "Titeltexte aktiver
Fenster".

    Wenn Sie noch AmigaOS 2.x benutzen sollten, wird normalerweise als 
"FILLPEN" für die Unterlegung Farbe 3 (also Blau) und für "FILLTEXTPEN"
Farbe 1 (also Schwarz) benutzt. Es gibt jedoch einige Publicscreen-
Utilities in der PD (z.B. PSM), die es auch unter 2.x erlauben, die Pens
auf eigenen Publicscreens zu manipulieren.

    Der Text-Feldtyp nutzt übrigens noch einen zusätzlichen Pen, den
"HILIGHTTEXTPEN". Dieser wird benutzt wenn man im @{"Feld-Requester" link RqEditField} 
"Hilight" aktiviert.
@endnode
@node Stretch "Maskendehnung"
@smartwrap

    Normalerweise sitzen die Felder in einer Fiasco-Maske sich dicht auf
der Pelle. Dies ist a) nicht schön anzusehen, b) haben eigentliche alle
anderen "normalen" GUIs ein paar Pixel zwischen den Gadgets Platz. Man könnte 
zwar jeweils eine Zeile zwischen den Feldern frei lassen, dies würde jedoch 
bald zu Platzproblemen führen. Deswegen gibt Fiasco die Möglichkeit, zwischen
den einzelnen Zeilen und Spalten pixelweise Raum zu lassen. 


    Diese Werte können im @{"Options-Requester" link RqOptions} in den Gadgets Stretch X / Y
angegeben werden.


    Ein Problem bei dieser Methode die Maske zu "dehnen" ist, daß auch die
Felder größer werden als in den @{"Feld-Requestern" link RqEditField} angegeben wurde. Dies fällt
insbesondere in der horizontalen Richtung auf, da die meisten Fiasco-Felder
sich nur in diese Richtung ausdehnen. Bei String-Feldern ist es so z.B. 
möglich, daß der Text, der in eingegeben werden kann nur bis z.T. das Feld
füllen kann, da Max Chars geringer als der wahre Width-Wert ist. Das größte
Problem ergibt sich bei Text-Feldern, die normalerweise nur so breit sind,
wie der Text es erfordert. Nun sind sie aber breiter und der Text muß
zentriert werden.


    Um diese Probleme zu vermeiden, empfehle ich, daß als X-Wert Null
angegeben wird und in dieser Richtung weiterhin einzelne Spalten als 
Trennung benutzt werden. In Y-Richtung liefert der 4 die besten Ergebnisse. 
@endnode
@node RecordMode "Record-Modus"
@smartwrap

    In diesem Modus kann man Records hinzufügen, löschen und deren Inhalt
verändern. Dieser Modus kann über den Menupunkt @{"Kontrolle/Record-Modus" link MnRecordMode}
aktiviert werden. Das Gegenteil des Record-Modus ist der @{"Masken-Modus" link MaskMode}.
@endnode
@node MaskMode "Masken-Modus"
@smartwrap

    In diesem Modus hat man die Möglichkeit, die Maske zu verändern, d.h.
Felder neu zu erstellen, zu löschen und zu verschieben. Außerdem können hier
Relationen erstellt und verändert werden. Dieser Modus kann über den
Menupunkt @{"Kontrolle/Masken-Modus" link MnMaskMode} aktiviert werden. Das
Gegenteil des Masken-Modus ist der @{"Record-Modus" link RecordMode}.

@endnode
@node AllMenus "Menus"

  Fiasco bietet diese Pull-Down-Menus:
  (von links nach rechts; Menupunkte, die mit einem '/' markiert sind,
  lassen sich aktivieren bzw. deaktivieren)

@{b}
  Deutscher Name  Engl.             Tastaturshortcut
@{ub}
  Projekt       (Project)
  @{"Neu           (New)             " link MnNew} @{i}@{b}A @{ui}@{ub}N
  @{"Leeren        (Erase)           " link MnErase} @{i}@{b}A @{ui}@{ub}Z
  @{"Öffnen...     (Open...)         " link MnOpen} @{i}@{b}A @{ui}@{ub}O
  @{"Optionen...   (Options...)      " link MnOptions} @{i}@{b}A @{ui}@{ub}$
  @{"Statistik...  (Statistic...)    " link MnStatistic}
  @{"Relationen neuladen (Reload Rel)" link MnReloadRels} @{i}@{b}A @{ui}@{ub}!
  @{"Speichern     (Save)            " link MnSave} @{i}@{b}A @{ui}@{ub}S
  @{"Speichern als.(Save as...)      " link MnSaveAs} @{i}@{b}A @{ui}@{ub}A
  @{"Über Fiasco...(About...)        " link MnAbout} @{i}@{b}A @{ui}@{ub}?
  @{"               Quit             " link MnQuit} @{i}@{b}A @{ui}@{ub}Q

  Records       (Records)
  @{"Hinzufügen    (Add Record)      " link MnAddRecord} @{i}@{b}A @{ui}@{ub}+
  @{"Duplizieren   (Duplicate Record)" link MnDuplicateRecord} @{i}@{b}A @{ui}@{ub}2
  @{"Löschen       (Remove Record)   " link MnRemoveRecord} @{i}@{b}A @{ui}@{ub}-
  @{"Voriger       (Previous)        " link MnPrevious} Cursor Up
  @{"Nächster      (Next)            " link MnNext} Cursor Down
  @{"Erster        (First Record)    " link MnFirstRecord} Ctrl Cursor Up
  @{"Letzter       (Last Record)     " link MnLastRecord} Ctrl Cursor Down
  @{"Gehe zu...    (Goto...)         " link MnGoto} @{i}@{b}A @{ui}@{ub}G
  
  Felder        (Fields)
  @{"Typ           (Field Type)     »" link MnFieldType}
         String     Ctrl S
         Integer    Ctrl I
         Float      Ctrl F
         Boolean    Ctrl B
         Cycle      Ctrl C
         Slider     Ctrl S
         Date       Ctrl A
         Time       Ctrl M
         Extern     Ctrl E
         Datatypes  Ctrl D
         Text       Ctrl T
  @{"Hinzufügen... (Add Field...)    " link MnAddField} Enter
  @{"Ändern...     (Edit Field...)   " link MnEditField} Enter
  @{"Relationen Ändern.(Edit Relatio)" link MnEditRelations} @{i}@{b}A @{ui}@{ub}&
  @{"Entfernen     (Remove Field)    " link MnRemoveField} Del

  Liste         (List)
  @{"Spalte verber.(Hide column)     " link MnHideColumn} @{i}@{b}A @{ui}@{ub}[
  @{"Spalte sichtb.(Show column...)  " link MnShowColumn} @{i}@{b}A @{ui}@{ub}]
  @{"Alle Spalten s.(Show all colums)" link MnShowAllCols}
  @{"Liste neu ber.(Recalc List)     " link MnRecalcList} @{i}@{b}A @{ui}@{ub}%

  Vergleichen   (Compare)
  @{"Suchen...     (Find...)         " link MnFind} @{i}@{b}A @{ui}@{ub}F
  @{"Weitersuchen  (Find next)       " link MnFindNext} @{i}@{b}A @{ui}@{ub}>
  @{"rückwärts suc.(Find previous)   " link MnFindPrevious} @{i}@{b}A @{ui}@{ub}<
  @{"Ersetzen...   (Replace...)      " link MnReplace} @{i}@{b}A @{ui}@{ub}R
  @{"Zählen...     (Count...)        " link MnCount} @{i}@{b}A @{ui}@{ub}#
  @{"Sortieren...  (Sort...)         " link MnSort} @{i}@{b}A @{ui}@{ub}=
  @{"Filter Ändern.(Edit Filter...)  " link MnEditFilter} @{i}@{b}A @{ui}@{ub}~
  @{"/ Filter An?  (Use Filter?)     " link MnUseFilter} @{i}@{b}A @{ui}@{ub}`
    
  Kontrolle     (Control)
  @{"/ Record-Modus (Edit Records)   " link MnRecordMode} @{i}@{b}A @{ui}@{ub}D
  @{"/ Masken-Modus (Edit Mask)      " link MnMaskMode} @{i}@{b}A @{ui}@{ub}M
  @{"/ ServiceFenst (ServiceWindow)  " link MnServiceWindow} @{i}@{b}A @{ui}@{ub}W
  @{"/ ListenFenst  (ListWindow)     " link MnListWindow} @{i}@{b}A @{ui}@{ub}L
  @{"/ ARexx-Debug  (ARexx-Debug)    " link MnARexxDebug} @{i}@{b}A @{ui}@{ub}B

  Einstellungen (Settings)
  @{"/ Icons Erzeu.(Create Icons?)   " link MnCreateIcons}
  @{"/ Backups Erz.(Create Backups?) " link MnCreateBackup}
  @{"/ Relat. schr.(Write Rels?)     " link MnWriteRelations}
  @{"/ Relat. akt.?(Update Rels?)    " link MnUpdateRelations}
  @{"/ GZZ-Fenster?(GZZ- Windows?)   " link MnGZZWindows}
  @{"/ Sicherh.Req.(Security-Reqs?)  " link MnSecurityRequester}
  @{"/ Auto-Öf.Ser.(AutoOpen SerWin) " link MnAutoOpenServiceWin}
  @{"/ SerW. dynam.(Dynamic SerWin?) " link MnDynamicServiceWin}
  @{"Schrift ausw..(Choose Font...)  " link MnChooseFont}
  @{"Einst. speich.(Save Settings)   " link MnSaveSettings}
  @{"Einst. sp.als (Save Settings as)" link MnSaveSettingsAs}
  @{"Einst. laden  (Load Settings...)" link MnLoadSettings}

  Benutzer      (User)
  @{"Ändern...     (Edit...)         " link MnEditUM} @{i}@{b}A @{ui}@{ub}U

 

@endnode

@node MnNew "Projekt/Neu (Project/New)"

Shortcut:   @{B}@{I}A @{UB}@{UI} N

Erzeugt ein neues Projekt mit dazugehörigem Masken-Fenster. Es enthält dann
weder Records noch Felder. Nun können sie entweder eine neue Datenbank
erstellen, oder mit @{"Open..." link MnOpen} eine bereits existierende
laden.

Querverweise:
@{"Open..." link MnOpen}
@endnode
@node MnErase "Projekt/Leeren (Project/Erase)"

Shortcut:   @{B}@{I}A @{UB}@{UI} Z

Löscht jegliche Daten aus dem aktuellen Projekt, das Projekt wird hinterher
in einem Zustand wie nach dem Programmstart oder @{"Projekt/Neu" link MnNew} sein.
Falls die Daten des Projektes seit dem letzten Abspeichern verändert wurden,
wird ein vorher ein Sicherheitsrequester angezeigt.

@endnode
@node MnOpen "Projekt/Öffnen (Project/Open...)"

Shortcut:   @{B}@{I}A @{UB}@{UI} O
    
Öffnet einen ASL-Requester, mit dem man ein Fiasco-Projekt zum Laden
auswählen kann. Die Daten werden im aktiven Fenster angezeigt. Ein
eventuell bereits in diesem Fenster geladenes Projekt wird aus dem
Speicher entfernt. Um versehentlichen Datenverlust zu vermeiden, werden
Sie gefragt, ob sie wirklich laden wollen, falls das Projekt seit dem 
letzten Speichern verändert wurde. 
    
@endnode
@node MnOptions "Projekt/Optionen... (Project/Options...)"

Shortcut:   @{B}@{I}A @{UB}@{UI} $

Über diesen Menupunkt können Sie den @{"Options-Requester" link RqOptions} öffnen, in dem sie
projektspezifische Optionen einstellen können. Dies sind:
  - @{"Maskendehnung" link Stretch}
  - Name des Autors sowie Anmerkungen
  - Dateiname des Projektes

Der letzte Punkt ermöglicht es, ohne @{"Save As..." link MnSaveAs} aufrufen
zu müssen, den Namen des Projektes zu ändern.
@endnode
@node MnStatistic "Projekt/Statistik... (Project/Statistic...)"

kein Shortcut

Gibt ein paar Informationen zum aktuellen Projekt aus. Beispiel:
@{i}
Ein Record benötigt ca. 100 Byte RAM. 
200 Records dieses Records belegen ca. 19 KByte RAM.
Der Speicher reicht für ca. 2300 weitere Records.
@{ui}
Der Speicherplatzbedarf für ein Projekt mit Feldern an sich wird nicht
mitgerechnet. 
@endnode
@node MnReloadRels "Projekt/Relationen neuladen (Project/Reload Rels)"

Shortcut:    @{b}@{i}A @{ub}@{ui} !

Hier kann man Fiasco instruieren, alle Relationen im aktuellen Projekt
neu zu laden, wie es bereits beim Laden des Projektes geschehen ist.
Dies ist insbesondere für diejenigen nützlich, die den Menupunkt
@{"Settings/Update Relations?" link MnUpdateRelations} deaktiviert haben,
einige Schlüsselworte neu eingegeben bzw. verändert haben und nun
die Ergebnisse sehen wollen.
@endnode
    
@node MnSave "Projekt/Speichern (Project/Save)"

Shortcut:   @{B}@{I}A @{UB}@{UI} S

Mit Save werden die Daten des aktuellen Projektes unter dem selben
Namen gespeichert, mit dem es auch geladen wurde. Falls Sie das
Projekt unter einem anderen Namen speichern möchten, wählen sie
@{"Speichern Als" LINK MnSaveAs }, oder @{"Projekt/Optionen" link MnOptions} um den Namen
zu ändern.

@endnode

@node MnSaveAs "Projekt/Speichern als... (Project/Save As...)"

Shortcut:   @{B}@{I}A @{UB}@{UI} A

Hier können Sie das aktuelle Projekt unter einem anderen Namen als
dem Namen, unter dem Sie es geladen haben, speichern. Der Name wird
mit einem Requester der ASL-Library erfragt und nach dem Speichern
beibehalten.
@endnode

@node MnAbout "Projekt/Über Fiasco... (Project/About...)"

Shortcut:   @{B}@{I}A @{UB}@{UI} ?

Hiermit wird ein kleiner Requester angezeigt, der Auskunft
über Version, Copyright und ein paar Systeminterna gibt.
@endnode

@node MnQuit "Projekt/Beenden (Project/Quit)"

Shortcut:   @{B}@{I}A @{UB}@{UI} Q

Dieser Menupunkt @{I}schließt @{UI}das aktive Projekt. Falls es in der Zwischen-
zeit verändert und noch nicht gespeichert wurde, werden Sie über einen
Requester gefragt, ob sie wirklich dieses Projekt schließen möchten.
Falls dies das letzte Projekt war, das Fiasco offen hatte, wird Fiasco beendet. 
@endnode

@node MnAddRecord "Records/Hinzufügen (Records/Add Record)"

Shortcut:   @{B}@{I}A @{UB}@{UI} +

Fügt der Record-Liste des aktuellen Projektes einen neuen Record hinzu.
Die einzelnen Felder enthalten nun entweder nichts, oder falls dies im
@{"Masken-Modus" link MaskMode} so eingestellt wurde, einen Startwert.
Falls das Listen-Fenster offen ist, erscheint dort auch ein entsprechender
Eintrag.

Falls ein @{"Filter" link Filter} aktiv ist, wird der Record automatisch für gültig erklärt,
egal was in den einzelnen Feldern steht. Damit neuerstellte Records korrekt
in den Filter miteinbezogen werden, sollte man @{"Vergleichen/Filter Ändern..." link MnEditFilter}
anwählen und einfach "Ok" anklicken.

Dieser Menupunkt ist nur im @{"Record-Modus" LINK RecordMode} anwählbar.

Querverweise:
@{"Records/Löschen" link MnRemoveRecord}

@endnode
@node MnDuplicateRecord "Records/Duplizieren (Records/Duplicate Record)"

Shortcut:   @{b}@{i}A @{ub}@{ui} 2

Kopiert den aktuellen Record auf Haar genau in einen neuen Record. Jegliche
Vorgaben wie "Init Cont", "Use current Time" o.ä. werden ignoriert.
Selbst ein Feld, das das Attribut "Eindeutiger Schlüssel" gesetzt hat, enthält
denselben Wert wie der alte Record, wodurch die Schlüssel nicht mehr 
eindeutig sind.

@endnode
@node MnRemoveRecord "Records/Entfernen (Records/Remove Record)"

Shortcut:   @{B}@{I}A @{UB}@{UI} -

Löscht den aktiven Record und die darin befindlichen Daten. Falls sich noch
@{"Relationen" link Relations} in anderen Dateien auf diesen Record beziehen, sind diese ab sofort
nicht definiert.
Dieser Menupunkt ist nur im @{"Record-Modus" LINK RecordMode} anwählbar.
Falls der Menupunkt @{"Settings/Security-Requester?" link MnSecurityRequester} aktiv ist, erscheint
zuvor noch eine Sicherheitsabfrage, ob dieser Record wirklich gelöscht werden
soll.

Querverweise:
@{"Records/Hinzufügen" link MnAddRecord}
@endnode
@node MnPrevious "Records/Voriger (Records/Previous)"

Shortcut:   Cursor up

Aktiviert den dem aktuellen Record @{I}vorgehenden @{UI}Record. Falls der aktuelle
Record der erste in der Liste ist, wird die Anzeige "gebeebt".
Bitte beachten sie, daß beim Einsatz von @{"Filtern" link Filter} der nächste vorhergehende
Record, der @{I}nicht ausgefiltert @{UI}wird, aktiviert wird.

Der Tastatur-Shortcut wurde in Hinblick auf die Darstellung in der Liste
gewählt, in der der vorgehende Record über dem aktuellen liegt.

Dieser Menupunkt ist nur im @{"Record-Modus" link RecordMode} anwählbar.

Querverweise:
    @{"Next" link MnNext}
    @{"First" link MnFirstRecord}
    @{"Last" link MnLastRecord}
    @{"Goto" link MnGoto}
    @{"Find previous" link MnFindPrevious}

@endnode
@node MnNext "Records/Nächster (Records/Next)"

Shortcut:   Cursor down

Aktiviert den Record nach dem @{I}aktuellen @{UI}Record. Falls der aktuelle
Record der letzte in der Liste ist, wird die Anzeige "gebeebt".
Bitte beachten sie, daß beim Einsatz von @{"Filtern" link Search} der nächste
Record, der @{I}nicht ausgefiltert @{UI}wird, aktiviert wird.

Der Tastatur-Shortcut wurde in Hinblick auf die Darstellung in der Liste
gewählt, in der der nächste Record unter dem aktuellen liegt.

Dieser Menupunkt ist nur im @{"Record-Modus" link RecordMode} anwählbar.

Querverweise:
    @{"Previous" link MnPrevious}
    @{"First" link MnFirstRecord}
    @{"Last" link MnLastRecord}
    @{"Goto" link MnGoto}
    @{"Find next" link MnFindNext}

@endnode
@node MnFirstRecord "Records/Erster (Records/First Record)"

Shortcut:   Ctrl Cursor up

Aktiviert den @{I}ersten @{UI}Record des aktuellen Projektes.
Bitte beachten Sie, daß durch einen @{"Filter" link Search} dieses Verhalten verändert wird.
In so einem Fall wird der erste Eintrag aktiviert, der die Kriterien des
Filters @{I}erfüllt.@{UI}

Dieser Menupunkt ist nur im @{"Record-Modus" link RecordMode} anwählbar.

Querverweise:
    @{"Next" link MnNext}
    @{"Previous" link MnPrevious}
    @{"Last" link MnLastRecord}
    @{"Goto" link MnGoto}
@endnode
@node MnLastRecord "Records/Letzter (Records/Last Record)"

Shortcut:   Control Cursor down

Aktiviert den @{I}letzten @{UI}Record des aktuellen Projektes.
Bitte beachten Sie, daß durch einen @{"Filter" link Search} dieses Verhalten verändert wird.
In so einem Fall wird der letztmögliche Eintrag aktiviert, der die Kriterien 
des Filters @{I}erfüllt.@{UI}

Dieser Menupunkt ist nur im @{"Record-Modus" link RecordMode} anwählbar.

Querverweise:
    @{"Next" link MnNext}
    @{"Previous" link MnPrevious}
    @{"First" link MnFIrstRecord}
    @{"Goto" link MnGoto}
@endnode
@node MnGoto "Records/Gehe zu... (Records/Goto...)"

Shortcut:   @{B}@{I}A @{UB}@{UI} G

Öffnet den @{"Goto-Requester" link RqGoto} mit dem man über die @{I}Nummer @{UI}eines Records
diesen erreichen kann.
Bitte beachten Sie, daß die Nummern sich durch Einfügen oder Löschen von 
Records oder durch @{"Filter" link Filter} die Nummern @{I}verändern @{UI}können.

Dieser Menupunkt ist nur im @{"Record-Modus" link RecordMode} anwählbar.

Querverweise:
    @{"Next" link MnNext}
    @{"Previous" link MnPrevious}
    @{"First" link MnFirstRecord}
    @{"Last" link MnLastRecord}

@endnode

@node MnFieldType "Feldtyp"

    Wählen Sie in diesem Untermenu den aktuellen Feldtypen aus. Dieser wird
beim Erstellen von Feldern benutzt. Das Gadget am unteren Rand des 
@{"Service Fensters" link ServiceWin} hat die selbe Funktion.

    Diese Feldtypen sind verfügbar (mit Shortcut):

    @{"String    " link FT_Str    } Ctrl S
    @{"Integer   " link FT_Int    } Ctrl I
    @{"Float     " link FT_Float  } Ctrl F
    @{"Boolean   " link FT_Bool   } Ctrl B
    @{"Cycle     " link FT_Cyc    } Ctrl C
    @{"Slider    " link FT_Sld    } Ctrl S
    @{"Date      " link FT_Date   } Ctrl A
    @{"Time      " link FT_Time   } Ctrl M
    @{"Extern    " link FT_Ext    } Ctrl E
    @{"Datatypes " link FT_DT     } Ctrl D
    @{"Text      " link FT_Txt    } Ctrl T 
@endnode
@node MnAddField "Felder/Feld Hinzufügen... (Fields/Add Field...)"

Shortcut:   Return

Öffnet den @{"Feld-Requester" LINK RqEditField} für den aktiven Feld-Typ und fügt das so
erstellte Feld an der Cursorposition ein.
Dieser Menupunkt ist nur im @{"Masken-Modus" LINK MaskMode} anwählbar.
Falls sich an der Cursorposition schon ein Feld befindet, läßt sich kein Feld
erzeugen. 

Bitte beachten sie, daß Return auch Shortcut für @{"Feld Ändern" link MnEditField}  ist.
Enter hat die Funktion "Feld Hinzufügen", wenn kein Feld aktiv ist, ansonsten
wird "Feld Ändern" aufgerufen.

Querverweise:
    @{"Edit Field..." link MnEditField}
    @{"Edit Relations..." link MnEditRelations}
    @{"Remove Gadget" link MnRemoveField}
@endnode

@node MnRemoveField "Felder/Feld Entfernen (Fields/Remove Field)"

Shortcut:   Del

Entfernt das aktive Feld aus der @{"Maske" link Mask} und somit auch alle damit
verbundenen Daten. Falls sich noch irgendwelche Relationen auf dieses Feld 
verlassen, werden sich diese erst beim nächsten Zugriff beschweren.
Dieser Menupunkt ist nur im @{"Masken-Modus" LINK MaskMode} anwählbar.

Querverweise:
    @{"Edit Field..." link MnEditField}
    @{"Edit Relations..." link MnEditRelations}
    @{"Add Field" link MnAddField}
@endnode

@node MnEditField "Felder/Feld Ändern... (Fields/Edit Field...)"

Shortcut:   Return

Öffnet den @{"Feld-Requester" link RqEditField} für das aktive Feld, in dem man
diverse Daten für das Feld verändern kann. Würden bestimmte Veränderungen
Datenverlust zur Folge haben, werden Sie zuvor darauf hingewiesen und haben
die Möglichkeit den Vorgang abzubrechen.
Bitte beachten Sie, daß Feldtypen auf diesem Weg @{B}nicht@{UB} verändert werden
können.
Mit einem Doppelklick auf ein Feld läßt sich derselbe Zweck erzielen.

Bitte beachten sie, daß Return auch Shortcut für @{"Feld Hinzufügen" link MnAddField}  ist.
Enter hat die Funktion "Feld Hinzufügen", wenn kein Feld aktiv ist, ansonsten
wird "Feld Ändern" aufgerufen.

Dieser Menupunkt ist nur im @{"Masken-Modus" link MaskMode} anwählbar.

Querverweise:
    @{"Add Field" link MnAddField}
    @{"Edit Relations" link MnEditRelations}
@endnode
@node MnEditRelations "Felder/Relationen ändern... (Fields/Edit Relations...)"

Shortcut:   @{B}@{I}A @{UB}@{UI} &

Über diesen Punkt können sie die @{"Relationen" link Relations} für das aktive Feld
im @{"Relations-Requester" link RqRel} einstellen. "Edit Relations" ist nur 
anwählbar, wenn das Projekt im @{"Masken-Modus" LINK MaskMode} ist.

@endnode
@node MnHideColumn "Liste/Spalte verbergen (List/Hide column)"

Shortcut:   @{B}@{I}A @{UB}@{UI} [

Über diesen Menupunkt kann man eine Spalte aus dem Listenfenster entfernen.
Es wird die aktuelle Spalte, die über den Listenkopf ausgewählt werden kann,
entfernt. Die Spalten rechts davon rücken danach auf.
Die Spalte kann über @{"Spalte sichtbar machen" link MnShowColumn} wieder in
die Liste eingefügt werden.

Dieser Menupunkt kann sowohl im Record- als auch im Masken-Modus aufgerufen
werden. 

@endnode
@node MnShowColumn "Liste/Spalte sichtbar machen... (List/Show column...)"

Shortcut:  @{B}@{I}A @{UB}@{UI} ]

Dieser Menupunkt ermöglicht es, die Spalten, die mit @{"Spalte verbergen" link MnHideColumn}
aus der Liste entfernt wurden, wieder in die Liste einzufügen. Es wird
versucht, die Spalte so nahe wie möglich an der alten Position wieder
einzufügen. 

Dieser Menupunkt kann sowohl im Record- als auch im Masken-Modus aufgerufen
werden. 

@endnode
@node MnShowAllCols "Liste/Alle Spalten sichtbar (List/Show all columns)"

kein Shortcut

Fügt alle Spalten, die über @{"Spalte verbergen" link MnHideColumn} aus der Liste 
entfernt wurden, in einem Schritt wieder ein. 

Dieser Menupunkt kann sowohl im Record- als auch im Masken-Modus aufgerufen
werden. 
@endnode
@node MnRecalcList "Liste/Liste neu berechnen (List/Recalc List)"

Shortcut:   @{B}@{I}A @{UB}@{UI} %

Dieser Menupunkt berechnet alle Positionen und Dimensionen der Spalten in der
Liste neu. Verborgene Spalten werden jedoch nicht wieder angezeigt.

Dieser Menupunkt kann mit dem Menupunkt "Inhalt aufräumen" ("Clean up") der
Workbench verglichen werden.

@endnode
@node MnFind "Vergleichen/Suchen... (Compare/Find...)"

Shortcut:   @{B}@{I}A @{UB}@{UI} F

Öffnet den @{"Such-Requester" LINK RqFind}, in dem man Suchkriterien bestimmen kann.

Dieser Menupunkt ist nur anwählbar, wenn sich das aktuelle Projekt im 
@{"Record-Modus" link RecordMode} befindet und mindestens einen Record 
enthält.

Querverweise:
    @{"Such-Requester" LINK RqFind}
    @{"Find next" LINK MnFindNext}
    @{"Find previous" LINK MnFindPrevious}
@endnode

@node MnFindNext "Vergleichen/Weitersuchen (Compare/Find next)"

Shortcut:   @{B}@{I}A @{UB}@{UI} >

Aktiviert den @{I}nächsten @{UI}Eintrag, der mit den Suchkriterien übereinstimmt,
die mit dem @{"Such-Requester" LINK RqFind} spezifiziert worden sind. Falls kein Eintrag
mehr gefunden wird, erscheint ein Requester mit dem Text "Pattern not found!".

Dieser Menupunkt ist nur anwählbar, wenn sich das aktuelle Projekt im 
@{"Record-Modus" link RecordMode} befindet und mindestens einen Record 
enthält.

Querverweise:
    @{"Such-Requester" LINK RqFind}
    @{"Find..." LINK MnFind}
    @{"Find previous" LINK MnFindPrevious}
@endnode

@node MnFindPrevious "Vergleichen/rückwärts Suchen (Compare/Find previous)"

Shortcut:   @{B}@{I}A @{UB}@{UI} <

Aktiviert den @{I}vorherigen @{UI}Eintrag, der mit den Suchkriterien übereinstimmt,
die mit dem @{"Search-Requester" LINK RqFind} spezifiziert worden sind. Falls kein Eintrag
mehr gefunden wird, erscheint ein Requester mit dem Text "Pattern not found!".

Dieser Menupunkt ist nur anwählbar, wenn sich das aktuelle Projekt im 
@{"Record-Modus" link RecordMode} befindet und mindestens einen Record 
enthält.

Querverweise:
    @{"Search-Requester" LINK RqFind}
    @{"Find..." LINK MnFind}
    @{"Find next" LINK MnFindNext}
@endnode
@node MnReplace "Vergleichen/Ersetzen... (Compare/Replace...)"

Shortcut:   @{B}@{I}A @{UB}@{UI} R

Öffnet den @{"Ersetzen-Requester" link RqReplace}, mit dem Parameter für das
Ersetzen von Daten angegeben werden können.

Dieser Menupunkt ist nur anwählbar, wenn sich das aktuelle Projekt im 
@{"Record-Modus" link RecordMode} befindet und mindestens einen Record 
enthält.
@endnode
@node MnCount "Vergleichen/Zählen... (Compare/Count...)"

Shortcut:   @{B}@{I}A @{UB}@{UI} #

Öffnet den @{"Count-Requester" link RqCount},
mit dem Sie die Anzahl des Vorliegendes Musters in dem Projekt zählen können.

Dieser Menupunkt ist nur anwählbar, wenn sich das aktuelle Projekt im 
@{"Record-Modus" link RecordMode} befindet und mindestens einen Record 
enthält.

Querverweise:
    @{"Find..." link MnFind}
@endnode
@node MnSort "Vergleichen/Sortieren... (Compare/Sort...)"

Shortcut:   @{B}@{I}A @{UB}@{UI} =

Öffnet den @{"Sortier-Requester" link RqSort}, in dem Sie diverse Sortier-
kriterien angeben und den Sortiervorgang starten können.

Dieser Menupunkt ist nur anwählbar, wenn sich das aktuelle Projekt im 
@{"Record-Modus" link RecordMode} befindet und mindestens einen Record 
enthält.
@endnode
@node MnEditFilter "Vergleichen/Filter Ändern... (Compare/Edit Filter...)"

Shortcut:   @{B}@{I}A @{UB}@{UI} ~

Öffnet den @{"Filter-Requester" link RqFilter}, mit dem man einen @{"Filter" link Filter}  erstellen
kann. 

Dieser Menupunkt ist nur anwählbar, wenn sich das aktuelle Projekt im 
@{"Record-Modus" link RecordMode} befindet und mindestens einen Record 
enthält.
@endnode
@node MnUseFilter "Vergleichen/Filter An? (Compare/Use Filter?)"

Shortcut:   @{B}@{I}A @{UB}@{UI} ` (Graue Taste oben links)

Über diesen Menupunkt kann man den aktuellen @{"Filter" link Filter} ein und ausschalten.
Falls noch kein Filter erstellt worden ist, wird der @{"Filter-Requester" link RqFilter}  geöffnet.

Dieser Menupunkt ist nur anwählbar, wenn sich das aktuelle Projekt im 
@{"Record-Modus" link RecordMode} befindet und mindestens einen Record 
enthält.
@endnode
@node MnRecordMode "Kontrolle/Record-Modus (Control/Record Mode)"

Shortcut:   @{B}@{I}A @{UB}@{UI} D

Hiermit können Sie das aktuelle Projekt in den @{"Record-Modus" LINK RecordMode} versetzen,
in dem sie Records und deren Inhalt verändern können. Wenn dieser Modus @{I}aktiv @{UI}
ist, wird ein Haken vor den Menupunkt gesetzt.
Das Gegenstück zu diesem Punkt ist @{"Masken-Modus" LINK MnMaskMode }.

Querverweise:
    @{"Record-Modus" LINK RecordMode}
    @{"Masken-Modus" link MaskMode}
@endnode

@node MnMaskMode "Kontrolle/Masken-Modus (Control/Mask Mode)"

Shortcut:   @{B}@{I}A @{UB}@{UI} M

Hiermit können Sie das aktuelle Projekt in den @{"Masken-Modus" LINK MaskMode} versetzen,
in dem sie die @{"Maske" LINK Mask} verändern können. Wenn dieser Modus @{I}aktiv @{UI}ist,
wird ein Haken vor den Menupunkt gesetzt.
Das Gegenstück zu diesem Punkt ist @{"Record-Modus" LINK MnRecordMode }.

Querverweise:
    @{"Masken-Modus" LINK MaskMode}
@endnode
@node MnServiceWindow "ServiceFenster (ServiceWindow)"

Shortcut:   @{B}@{I}A @{UB}@{UI} W

Mit diesem Menupunkt können sie das @{"Service-Fenster" link ServiceWin} öffnen und 
schließen. Das Service-Fenster erleichtert die wichtigsten Record- und
Maskenoperationen und zeigt Statusmeldungen an.
Das Fenster kann auch über das Close-Gadget geschlossen werden.

Das Service-Fenster ist global für alle Projekte zuständig.
@endnode
@node MnListWindow "ListenFenster (ListWindow)"

Shortcut:   @{B}@{I}A @{UB}@{UI} L

Mit diesem Menupunkt können sie das @{"Listen-Fenster" link List} öffnen und 
schließen.
Das Fenster kann auch über das Close-Gadget geschlossen werden.

Jedes Projekt kann seine eigene Liste haben.
@endnode
@node MnARexxDebug "ARexx-Debug"

Shortcut:   @{B}@{I}A @{UB}@{UI} B

Hier kann man den speziellen Debug-Modus für die @{"ARexx-Schnittstelle" link ARexx} von Fiasco
aktivieren. Wenn Fiasco-Kommandos Fehler erzeugen, werden zusätzlich
Requester angezeigt, die das Problem näher bezeichen. 
@endnode
@node MnCreateIcons "Einstellungen/Icons Erzeugen? (Settings/Create Icons?)"

Hier wird festgelegt, ob beim Speichern von Fiasco-Projekten Icons erzeugt
werden, oder nicht
@endnode
@node MnCreateBackup "Einstellungen/Backups Erzeugen? (Settings/Create Backups?)"

Hier wird festgelegt, ob beim Speichern von Fiasco-Projekten von den alten
Dateien Backups unter <Dateiname>.bak abgelegt werden sollen.
@endnode
@node MnWriteRelations "Einstellungen/Relationen schreiben? (Settings/Write Relations?)"

Hier kann man einstellen, ob beim Speichern von Projekten auch Relationen in
die entsprechenden Dateien, aus denen sie auch gelesen wurden, abgespeichert
werden. Ansonsten sind Änderungen, die in solchen Feldern gemacht wurden,
verloren. Dieser Menupunkt sollte nur aktiv sein, wenn auch 
@{"Relationen aktualisieren?" link MnUpdateRelations} aktiv ist, oder die Relationen vor
dem Speichern mit @{"Projekt/Relationen neuladen" link MnReloadRels} aktualisiert
wurden, ansonsten könnten im Projekt, in dem die Relationen im Klartext
stehen, manche Einträge durch Leerstrings oder Falsche Einträge ersetzt werden.

@endnode
@node MnUpdateRelations "Einstellungen/Relationen aktualisieren? (Settings/Update Rels?)"

Hier kann man steuern, ob bei Eingabe eines neuen Schlüsselwortes in ein
Relations-Feld die Daten sofort erneuert werden sollen. Dazu sind
Diskettenzugriffe nötig, die für Menschen, die keine Festplatte haben, leicht
nervig werden können. Falls man diesen Menupunkt deaktiviert, sollte man auch
@{"Relationen schreiben?" link MnWriteRelations} deaktivieren, damit keine falschen Daten
in ein anderes Projekt geschrieben werden. Um die Änderungen so zu
betrachten, kann man die Relationen in einem Abwasch über
@{"Projekt/Relationen neuladen" link MnReloadRels} aktualisieren.
@endnode
@node MnGZZWindows "GZZ-Fenster? (GZZ Windows?)"

Hier kann man kontrollieren, ob Maskenfenster im GZZ-Modus geöffnet werden
sollen. Dies verhindert, daß Intuition die Grafiken seiner Gadgets in die
Fensterränder abdriften läßt. Auf kleineren Maschinen kann jedoch die
Performance bald in die Knie gezwungen werden.
@endnode
@node MnSecurityRequester "Eintellungen/Sicherheits-Requester? (Settings/Security-Reqs?)"

Hier kann man einstellen, ob vor dem Löschen von Feldern oder Records noch
eine Bestätigung benötigt wird, um Datenverlust zu vermeiden. 

@endnode
@node MnAutoOpenServiceWin "Einstellungen/Auto-Öffnen ServiceWin? (Settings/Auto-Open ServiceWin?)"

Hier kann man kontrollieren, ob beim Programmstart das @{"Service-Fenster" link ServiceWin}
automatisch geöffnet werden soll.
@endnode
@node MnDynamicServiceWin "Einstellungen/ServiceWin dynamisch? (Settings/Dynamic ServiceWin?)"

Hier kann man kontrollieren, ob beim Öffnen des @{"Service-Fensters" link ServiceWin} 
eine freie Stelle gesucht werden soll, oder ob feste Koordinaten benutzt
werden sollen.

@endnode
@node MnChooseFont "Einstellungen/Schrift auswählen... (Settings/Choose Font...)"

Öffnet einen Font-Requester, mit dem man die Schrift auswählen kann, die 
für Masken- und Listendarstellung verwendet wird.
    
@endnode
@node MnSaveSettings "Einstellungen/Einstellungen speichern (Settings/Save Settings)"

Speichert die Einstellungen unter "env:fiasco.prefs" und "envarc:fiasco.prefs".
Sie sind somit auch nach einem Reboot aktiv.

@endnode
@node MnSaveSettingsAs "Einstellungen/Einstellungen speichern als... (Settings/Save Settings as...)"

Öffnet einen ASL-Requester, in dem man eine Datei auswählen kann, in der die
Einstellungen gespeichert werden sollen.
@endnode
@node MnLoadSettings "Einstellungen/Einstellungen laden... (Settings/Load Settings...)"

Öffnet einen ASL-Requester, in dem man eine Datei auswählen kann, aus der die
Einstellungen geladen werden sollen. Sie werden danach benutzt. Um sie
dauerhaft benutzen zu können, sollte man sie mit @{"Einstellungen speichern" link MnSaveSettings}
in envarc: und env: sichern.
@endnode
@node MnEditUM "Benutzer/Ändern... (User/Edit...)"

Shortcut:   @{i}@{b}A @{ui}@{ub}U

Öffnet den @{"UserMenu-Requester" link RqEditUserMenu}, in dem man das Usermenu
verändern kann.

@endnode 
@node Requester "Alle Requester"

  @{"Edit Field     " link RqEditField  }  Felder
  @{"Find           " link RqFind       }  Suchen
  @{"Replace        " link RqReplace    }  Ersetzen
  @{"Count          " link RqCount      }  Zählen
  @{"Sort           " link RqSort       }  Sortieren
  @{"Filter         " link RqFilter     }  Filtern
  @{"Usermenu       " link RqEditUserMenu}  Definieren des User-Menus
  @{"Options        " link RqOptions    }  Projektspezifische Optionen
  @{"Goto           " link RqGoto       }  Gehe zu Record Nr. x
  @{"Edit Relation  " link RqRel        }  Relationen
  @{"Show column    " link RqShowColumn }  Eine Spalte ins Tageslicht holen
@endnode
@node RqEditField "Der Feldrequester"

    Der Feld-Requester erlaubt das Manipulieren der Attribute jedes Feldes.
Da jeder Feldtyp andere Attribute hat, unterscheidet sich auch der Feld-
Requester von Feldtyp zu Feldtyp. Die Gadgets, die im Feld-Requester 
dargestellt werden entsprechen genau den Feld-Attributen, die bei den
@{"Felddokumentationen" link FieldTypes} definiert sind. 

    Man wird mit dem Feldrequester konfrontiert, wenn man @{"Fields/Add Field" link MnAddField},
@{"Fields/Edit Field" link MnEditField} oder auf einem Feld doppelklickt.

    Wenn man den Requester mit @{b}Ok@{ub} bestätigt, werden alle Werte auf
Gültigkeit überprüft. Falls ein Wert nicht benutzt werden kann, wird man mit
einem Requester darauf aufmerksam gemacht. 

   @{i}Hier eine kleine Zusammenfassung aller Bedingungen:@{ui}
   - Falls man eine Id angeben kann, muß man sie angeben (und zwar eindeutig)
   - Falls es MaxChars gibt, muß der Wert >= 1 sein.
   - Width muß größer als zwei sein.

    Wenn Dimensionswerte aufgrund weiterer Felder, die im Weg sind, nicht 
benutzt werden können, erscheint ein anderer Requester, der einem die 
Möglichkeiten "Shift", "Squeeze" und "Cancel" anbietet. Cancel tut gar
nichts, außer zum Feld-Requester zurückzukehren. "Squeeze" verkleinert das
Feld soweit, daß es paßt. "Shift" verschiebt das Feld so weit, daß es
genug Platz hat. "Shift" kann nicht immer angewandt werden.

    Falls man ein bereits bestehendes Feld verändert, daß die Daten in
String-Form speichert und MaxChars unterstützt (also @{"String" link FT_Str}, @{"Datatypes" link FT_DT} 
und @{"Extern" link FT_Ext}) und MaxChars so weit verkleinert hat, daß bestehende
Einträge nicht mehr hinein passen würden, werden Sie gefragt, ob sie diese 
wirklich auf die neue Länge verkleinern möchten.
@endnode
@node RqFind "Der Suchrequester"

  @{b}@{u}F@{uu}eld  (@{u}F@{uu}ield) @{ub}
    Hier können Sie das Feld wählen, in dem gesucht werden soll. In dem
    Listview werden die Ids der Felder angezeigt, Textfelder werden nicht
    angezeigt. Es kann immer nur ein Feld ausgewählt werden.

  @{b}@{u}M@{uu}uster  (@{u}P@{uu}attern)@{ub}
    In dieses String-Gadget können sie ein Suchmuster eingeben. Entweder
    ein einfacher Wert, oder ein Wert mit @{"Mustern" link Patterns}.
    Bitte beachten Sie, daß dieser Wert später auch in den Count und
    Replace-Requestern benutzt wird.

  @{b}@{u}u@{uu}nscharf  (@{u}b@{uu}lurred)@{ub}
    Falls sie eine @{"unscharfe Suche" link BlurredSearch} durchführen wollen,
    muß dieses Gadget aktiviert sein.

  @{b}fa@{u}k@{uu}tor  (fa@{u}c@{uu}tor)@{ub}
    Hier können Sie die Toleranz der unscharfen Suchfunktion einstellen.
    0 entspricht, daß die Funktion nur exakt übereinstimmende Einträge 
    akzeptiert, 100 entspricht fast allen Einträgen.

  @{b}Nächstes  (Next)@{ub} (Return)
    Bestätigt den Requester und sucht nach dem nächsten Eintrag, der mit
    den oben angegebenen Bestimmungen übereinstimmt.

  @{b}@{u}E@{uu}rstes  (@{u}F@{uu}irst)@{ub}
    Bestätigt den Requester und sucht nach dem ersten Eintrag.

  @{b}@{u}V@{uu}origes  (Previous)@{ub}
    Bestätigt den Requester und sucht rückwärts nach dem nächsten Eintrag.

  @{b}Abbrechen  (Cancel)@{ub} (Esc)
    Schließt den Requester ohne weitere Aktion.

@endnode
@node RqReplace "Der Ersetzen-Requester"

    Falls Sie sich bereits mit dem @{"Find-Requester" link RqFind} auskennen,
sollten Sie sich hier @{i}sehr@{ui} schnell zurechtfinden.

  @{b}@{u}F@{uu}eld  (@{u}F@{uu}ield)@{ub}
    Hier können Sie das Feld wählen, in dem gesucht werden soll. In dem
    Listview werden die Ids der Felder angezeigt, Textfelder werden nicht
    angezeigt. Es kann immer nur ein Feld ausgewählt werden.

  @{b}@{u}M@{uu}uster  (@{u}P@{uu}attern)@{ub}
    In dieses String-Gadget können sie ein Suchmuster eingeben. Entweder
    ein einfacher Wert, oder ein Wert mit @{"Mustern" link Patterns}.
    Bitte beachten Sie, da dieser Wert später auch im Suchrequester
    benutzt wird, und umgekehrt.

  @{b}@{u}E@{uu}rsatz  (@{u}R@{uu}eplacement)@{ub}
    Hier können Sie den Wert eingeben, der in die Einträge eingesetzt
    werden soll, die vorher mit @{b}Pattern@{ub} übereinstimmten.
    Hier sind keine Muster möglich.

  @{b}@{u}b@{uu}estätigen  (C@{u}o@{uu}nfirm@){ub}
    Wenn Sie wünschen, daß Sie jedesmal gefragt werden, ob ein Eintrag
    wirklich ersetzt werden soll, sollten sie dieses Gadget aktivieren.

  @{b}@{u}u@{uu}unscharf  (@{u}b@{uu}lurred)@{ub}
    Falls sie eine @{"unscharfe Suche" link Search} durchführen wollen,
    muß dieses Gadget aktiviert sein.

  @{b}@{u}F@{uu}aktor  (fa@{u}c@{uu}tor)@{ub}
    Hier können Sie die Toleranz der unscharfen Suchfunktion einstellen.
    0 entspricht, daß die Funktion keinerlei Einträge akzeptiert, 100
    entspricht fast allen Einträgen.

@endnode
@node RqCount "Der Zähl-Requester"

    Dieser Requester erlaubt es Ihnen, die Records zu zählen, die einem 
bestimmten Suchkriterium entsprechen. Mehr zum Zählen im @{"Suchabschnitt" link Search}.

    Der Requester ist über den Menupunkt @{"Vergleichen/Zählen" link MnCount} erreichbar.

    Falls Sie sich bereits mit dem @{"Find-Requester" link RqFind} auskennen,
sollten Sie sich hier @{i}sehr@{ui} schnell zurechtfinden.

  @{b}@{u}F@{uu}eld  (@{u}F@{uu}ield)@{ub}
    Hier können Sie das Feld wählen, in dem gesucht werden soll. In dem
    Listview werden die Ids der Felder angezeigt, Textfelder werden nicht
    angezeigt. Es kann immer nur ein Feld ausgewählt werden.

  @{b}@{u}M@{uu}uster  (@{u}P@{uu}attern)@{ub}
    In dieses String-Gadget können sie ein Suchmuster eingeben. Entweder
    ein einfacher Wert, oder ein Wert mit @{"Mustern" link Patterns}.
    Bitte beachten Sie, daß dieser Wert auch später im Suchrequester
    benutzt wird und umgekehrt.

  @{b}@{u}u@{uu}nscharf  (@{u}b@{uu}lurred)@{ub}
    Falls sie eine @{"unscharfe Suche" link Search} durchführen wollen,
    muß dieses Gadget aktiviert sein.

  @{b}@{u}F@{uu}aktor  (fa@{u}c@{uu}tor)@{ub}
    Hier können Sie die Toleranz der unscharfen Suchfunktion einstellen.
    0 entspricht, daß die Funktion keinerlei Einträge akzeptiert, 100
    entspricht fast allen Einträgen.

  @{b}Ok@{ub} (Return)
    bestätigt den Requester und zählt, wie oft das Suchmuster gefunden
    wird. Dies wird zum Schluß angezeigt.

  @{b}Abbrechen  (Cancel)@{ub} (Escape)
    schließt den Requester ohne jede weitere Aktion.
    
@endnode
@node RqSort "Der Sortier-Requester"

    Im Sortier-Requester kann man ein Fiasco-Projekt alphabetisch bzw.
numerisch sortieren. Er ist über den Menupunkt @{"Compare/Sort..." link MnSort} 
erreichbar.

  @{b}Sortieren @{u}n@{uu}ach  (Sort @{u}b@{uu}y)@{ub}
    Hier wird die Liste aller Felder angezeigt. Aus diesen sollte man ein
    Feld auswählen, nach dem die Suche orientiert wird.

  @{b}Ok@{ub} (Return)
    bestätigt den Requester und beginnt den Sortiervorgang. Der vorher
    aktuelle Record wird beibehalten, die Nummer des Records wird sich
    jedoch höchstwahrscheinlich ändern.

  @{b}Abbrechen  (Cancel)@{ub} (Escape)
    schließt den Requester ohne irgendetwas anderes noch zu tun.

@endnode
@node RqFilter "Der Filter-Requester"

    Filter bieten die Möglichkeit, eine Übersicht über eine bestimmte Gruppe
von Records zu schaffen. Ein Filter erzeugt den Eindruck, als ob ein Projekt
nur aus Records bestände, die mit einem bestimmten Suchkriterium überein-
stimmen. Filter werden nicht während des normalen Programmablaufs ausge-
wertet, sondern immer nur aufeinmal erstellt. Dies bedeutet, daß Records,
die während ein Filter aktiv ist hinzugefügt werden, auch angezeigt werden,
wenn das Suchkriterium nicht übereinstimmt. Das selbe gilt für veränderte
Records.

    Der Filter-Requester ist über den Menupunkt @{"Vergleichen/Filter Ändern" link MnEditFilter}
erreichbar.

    Falls Sie sich bereits mit dem @{"Find-Requester" link RqFind} auskennen,
sollten Sie sich hier @{i}sehr@{ui} schnell zurechtfinden.

  @{b}@{u}F@{uu}eld  (@{u}F@{uu}ield)@{ub}
    Hier können Sie das Feld wählen, in dem gesucht werden soll. In dem
    Listview werden die Ids der Felder angezeigt, Textfelder werden nicht
    angezeigt. Es kann immer nur ein Feld ausgewählt werden.

  @{b}@{u}M@{uu}uster  (@{u}P@{uu}attern)@{ub}
    In dieses String-Gadget können sie ein Suchmuster eingeben. Entweder
    ein einfacher Wert, oder ein Wert mit @{"Mustern" link Patterns}.

  @{b}@{u}u@{uu}nscharf  (@{u}b@{uu}lurred)@{ub}
    Falls der Filter @{"unscharf" link Search} sein soll,
    muß dieses Gadget aktiviert sein.

  @{b}fa@{u}k@{uu}tor  (fa@{u}c@{uu}tor)@{ub}
    Hier können Sie die Toleranz der unscharfen Suchfunktion einstellen.
    0 entspricht, daß die Funktion keinerlei Einträge akzeptiert, 100
    entspricht fast allen Einträgen.

  @{b}Ok@{ub} (Return)
    bestätigt den Requester und erzeugt den Filter. Später scheint das
    Projekt nur noch aus Records zu bestehen, die den Bedingungen ent-
    sprechen.
   
  @{b}Abbrechen  (Cancel)@{ub} (Escape)
    schließt den Requester ohne jede weitere Aktion.
 
@endnode
@node RqEditUserMenu "Der Usermenu-Requester"

    Fiasco bietet die Möglichkeit, eigene Menupunkte zu definieren und mit
speziellen Funktionen zu belegen. Dabei ist die Wahl zwischen Name und
Kommando, das das Item ausführen soll, frei wählbar. Die in diesem Requester
definierten Menupunkte sind neben dem "normalen" Weg mit der Maus über die 
F-Tasten erreichbar. F1 bis F10 entsprechen den ersten zehn Menupunkten.
Shift+F1 bis F10 entsprechen dann den Menupunkten 11 bis 20. Falls irgend-
jemand mehr als 20 Menupunkte definieren sollte, muß sich dann damit abfinden,
die verbleibenden Menupunkte mit der Maus aufrufen zu müssen.

    Weiterhin lassen sich nicht mehr als 63 Menupunkte definieren. Tut man
es doch, wird ein Requester erscheinen, der darauf hinweist, daß die Anzahl der 
Menupunkte auf 63 zurückgeschraubt wurde.

    Die Menupunkte lassen sich über @{"Settings/Save Settings" link MnSaveSettings} dauerhaft
sichern.

  @{b}Items@{ub}
    Hier wird eine Liste aller bereits bestehenden Menu-Items dargestellt.
    Mit dem "+"-Button kann man weitere hinzufügen, mit dem "-"-Button das
    aktuelle entfernen und mit den "<"/">"-Buttons kann man die Position
    des aktuellen Items in der Liste verändern. 

  @{b}@{u}T@{uu}yp  (@{u}T@{uu}ype)@{ub}
    Hier kann man einstellen, ob das aktuelle Item ein Programm oder ein 
    ARexx-Script ausführen soll.

  @{b}@{u}K@{uu}ommando  (@{u}C@{uu}ommand)@{ub}
    Hier kann man das Programm bzw. ARexx-Script eingeben, das ausgeführt
    werden soll.

@endnode
@node RqOptions "Der Options-Requester"

    Der Options-Requester dient dazu, einige Einstellungen speziell
für das aktuelle Projekt zu machen. Er ist über den Menupunkt 
@{"Project/Options..." link MnOptions} oder dem ARexx-Befehlt
@{"F_OptionsReq" link F_OptionsReq} erreichbar. 

  @{b}@{u}N@{uu}ame@{ub}
    Über dieses Gadget kann man den Datei-Namen des Projektes verändern.
    Unter diesem Namen wird das Projekt in Zukunft gespeichert werden,
    alle Verzeichnis-Relativen Operationen werden ab dann dieses
    Verzeichnis als aktuelles Verzeichnis haben.

  @{b}@{u}A@{uu}tor  (@{u}A@{uu}thor)@{ub}
    Hier kann sich der Ersteller des Projektes verewigen. Der Name wird sich
    dann am Anfang der Projekt-Datei finden. Ansonsten wird der Inhalt ig-
    noriert.

  @{b}@{u}B@{uu}emerkungen  (Anno@{u}t@{uu}ations)@{ub}
    Noch ein Gadget zur freien Benutzung. Hier kann man irgendwelche Notitzen,
    z.B. einen Versions-String (mit "$VER:" am Anfang) eintragen. Dieser 
    String wird noch vor dem Autor abgelegt. Und wiederum wird der Inhalt
    sonst ignoriert.

  @{b}Dehnung  (strech)  @{u}X@{uu}    @{u}Y@{uu}@{ub}
    Hier kann man einen Wert angeben, der zur Breite bzw. der Höhe des Cursors 
    hinzuaddiert wird. Dies bewirkt eine Dehnung der Make in X-Richtung bzw.
    Y-Richtung. Mehr zu diesen Dehnungs-Werten @{"hier" link Stretch}

@endnode
@node RqGoto "Goto-Requester"

    Der Goto-Requester ist einer der übersichtlichsten Requester in 
Fiasco überhaupt. Er ist über den Menupunkt @{"Records/Goto..." link MnGoto} 
erreichbar und bietet die Möglichkeit, über die Record-Nummer diesen Record
zu aktivieren.

    Bitte beachten Sie, daß @{"Filter" link Filter} die Record Nummern 
beeinflussen.  

  @{b}@{u}G@{uu}ehe zu  (@{u}g@{uu}o to)@{ub}
    Nimmt die Nummer des Records auf.

  @{b}Ok@{ub} (Return)
    Bestätigt den Requester und springt zum Record mit der Nummer.

  @{b}Abbrechen  (Cancel)@{ub} (Esc)
    Ist mit gerade entfallen... %-)

@endnode
@node RqRel "Der Relations-Requester"

    Dies ist die Schaltzentrale für die @{"Relationen" link Relations} in Fiasco. 

Dieser Requester ist über @{"Fields/Edit Relations..." link MnEditRelations} erreichbar.

  @{b}Schlüssel @{u}h@{uu}ier@{ub}
    In diesem Listview muß man den Schlüssel in dem aktuellen Projekt
    auswählen. 

  @{b}eigentl. Feld hier@{ub}
    Hier wird die Id des Feldes, dessen Relationen gerade bearbeitet werden,
    angezeigt.
 
  @{b}@{u}R@{uu}elations-Datei@{ub}
    Hier muß man die Projekt-Datei relativ zum Verzeichnis des aktuellen 
    Projektes angeben, in der die passenden Informationen stehen.

  @{b}Schlüssel @{u}d@{uu}ort@{ub}
    Hier muß man das Feld in dem Projekt, das unter "Relations-Datei"
    angegeben wurde, auswählen, das den eindeutigen Schlüssel beinhaltet.
    Da die Typen der beiden Schlüssel übereinstimmen müssen, werden hier nur 
    die Felder angezeigt, die zu dem Schlüssel unter "Schlüssel hier" passen. 

  @{b}@{u}e@{uu}igentl. Feld dort@{ub}
    Hier muß man das Feld in dem Projekt, das unter "Relations-Datei"
    angegeben wurde, auswählen, das den Partner zu "eigentl. Feld hier"
    darstellt. Aus diesem Feld werden dann die Daten, die in "eigentl. Feld
    hier" eingetragen werden, bezogen. Auch hier werden nur die Felder
    angezeigt, die zu "eigentl. Feld hier" passen.

  @{b}Ok@{ub} (Return)
    Bestätigt den Requester und versucht die Relationen zu laden. Falls dabei
    ein Fehler auftritt, wird der Requester mit einer entsprechenden Mitteilung
    wieder aktiviert, ansonsten wird das Haupt-Fenster aktiviert.

  @{b}Cancel@{ub} (Esc)
    Schließt den Requester ohne weitere Aktion.

@endnode
@node RqShowColumn "Spalte anzeigen-Requester"

    Mit diesem Requester, der über @{"List/Show column..." link MnShowColumn} erreichbar
ist, kann man Listen-Spalten, die vorher mit @{"List/Hide coulumn" link MnHideColumn} verborgen
wurden, wieder sichtbar machen. Die Spalten werden dann ihrem alten Platz möglichst
nahe in die Liste eingefügt.

  @{b}@{u}F@{uu}eld  (@{u}F@{uu}ield)@{ub}
    Hier werden alle verborgenen Spalten angezeigt, aus denen man eine 
    auswählen sollte.

  @{b}Ok@{ub} (Return)
    Bestätigt den Requester und berechnet die Liste neu, so daß die Spalte
    wieder zu sehen ist.

  @{b}Abbrechen  (Cancel)@{ub} (Esc)
    Schließ den Requester ohne noch was zu tun.

@endnode

@node ARexx 

    ARexx ist eine Macro-Sprache mit der Fähigkeit, Programme untereinander
kommunizieren zu lassen. ARexx wurde von William S. Hawes entwickelt und
befindet sich im Lieferumfang von Amiga OS 2.0 oder höher.

    Der ARexx-Port von Fiasco kann entweder aus einem Script unabhängig vom 
Programm angesprochen werden, oder Fiasco ruft selber Scripts auf. Dies 
geschieht Beispielsweise, wenn bei einem Feld ein @{"Script" link StdAttrs}  angegeben wurde und
der Inhalt dieses Feldes geändert wurde. Dieses Script hat dann die Möglich-
keit auf die Änderung zu reagieren und bestimmte Werte anzupassen.

    Damit ein ARexx-Script mit Fiasco in Verbindung treten kann, muß ARexx
am Anfang instruiert werden, nach Fiascos ARexx-Port zu suchen. Dies
geschieht mit "Address Fiasco"  

    Fast alle Operationen, die über die GUI von Fiasco ausgeführt werden 
können, können auch mit ARexx-Scripts erledigt werden. Außerdem kann Fiasco
mit ARexx fast beliebig an Funktionen erweitert werden. Viele ARexx Kommandos
tun genau das selbe wie die Menupunkte. Das heißt, daß sie unter Umständen
einen Requester öffnen. Es ist aber meistens möglich, dies zu umgehen. Dies
wird später einmal behoben werden. Weiterhin gibt es Befehle, die immer
einen Requester öffnen. Dies mag zwar für Scripts auch manchmal nützlich
sein, ist jedoch primär implementiert wurden, um Fiasco eine Art zweites
Menu wie Iconleisten zu geben. Ich habe bereits mit ToolManager-Docks 
experimentiert, doch für schnelles Umherblättern in einer Datenbank reagiert 
das ganze noch zu träge. 

@{"Allgemeines zu ARexx mit Fiasco" link ARexxGen }
@{"Index aller ARexx Kommandos" link ARexxCmds }
@{"Index aller GUI-Äquivalenten Kommandos" link GuiCmds}
@{"Index aller GUI-Unabhängigen Kommandos" link NonGuiCmds}
@endnode
@node ARexxGen "Allgemeines zu ARexx mit Fiasco"
    
    Ein Fiasco-Kommando gibt normalerweise in der Variable RC 0 zurück, wenn alles 
glatt gelaufen ist. Falls ein Kommando nicht die Gegebenheiten, die es benötigt,
vorfindet, wird RC auf 5 gesetzt. Fehler wie falsche Parameter werden mit RC = 10 
belohnt, fatalere Fehler kriegen sogar RC = 20. Parameterfehler werden übrigens 
nur bei zu wenigen Parametern erzeugt, überzählige werden ignoriert. Parameter 
werden normalerweise durch Leerzeichen begrenzt, es sei denn, sie sind in 
Anführungszeichen (", nicht ') eingeschlossen. Bei bestimmten Kommandos wird die 
gesamte Eingabezeile als ein Parameter behandelt. Dies wird in den einzelnen 
Kommando-Dokumentationen festgelegt. Wenn ein Kommando einen Wert zurückliefert 
steht dieser normalerweise in der Variablen Result. Um RESULT zu benutzen,
muß man die Zeile "OPTIONS RESULTS" am Anfang eines ARexx scripts einfügen.

    Die Fehlersuche in ARexx-Scripts ist etwas problematisch. Scripts, die
durch das User-Menu oder durch Felder aktiviert wurde, können keine Ausgaben
machen, so werden jegliche Fehlermeldungen verschluckt. Zum Testen von ARexx-
Scripts empfiehlt es sich daher, sie vorher von der Shell aus zu testen
(mit rx <Scriptname>; Fiasco muß natürlich dabei mit den passenden Daten
bereitstehen). Um mehr über die Gründe zu erfahren, warum ein an Fiasco
gerichtetes Kommando fehlerhaft arbeitete, kann man im Kontrolle-Menu den
Menupunkt "ARexx-Debug" aktivieren. Dies bewirkt, daß jedesmal, wenn Fiasco
einen Fehlercode zurückgeben würde, ein Requester erscheint, in dem das
Problem beschrieben wird. Hier hat man auch die Möglichkeit, dem Script
vorzugaukeln, das Kommando wäre erfolgreich (Ignore Error-Gadget). Will
man, daß der Fehlercode normal weitgegeben wird, sollte man "Continue"
anwählen.

    Die Dokumentation zu den Kommandos ist im Stil an die Amiga OS-Autodocs
angelehnt. Synopsis legt eine Aufrufschablone fest, die anderen Punkte sind
eigentlich selbsterklärend.

@{"Index aller ARexx Kommandos" link ARexxCmds }
@{"Index aller GUI-Äquivalenten Kommandos" link GuiCmds} Was für ein externes Menu verwendet werden kann.
@{"Index aller GUI-Unabhängigen Kommandos" link NonGuiCmds} Was keine Requester erzeugt

@endnode
@node ARexxCmds "Index der ARexx Kommandos"

    @{"F_AboutReq"         link F_AboutReq          }
    @{"F_AddFieldReq"      link F_AddFieldReq  }
    @{"F_AddRecord"        link F_AddRecord          }
    @{"F_ClearProject"     link F_ClearProject      }
    @{"F_CloseServiceWin"  link F_CloseServiceWin      }
    @{"F_CloseList"        link F_CloseList         }
    @{"F_CountRecs"        link F_CountRecs      }
    @{"F_CountReq"         link F_CountReq      }
    @{"F_DupRec"           link F_DupRec         }
    @{"F_FilterReq"        link F_FilterReq     }
    @{"F_FindFirst"        link F_FindFirst }
    @{"F_FindNext"         link F_FindNext        }
    @{"F_FindPrev"         link F_FindPrev    }
    @{"F_FindReq"          link F_FindReq     }
    @{"F_GetFieldCont"     link F_GetFieldCont      }
    @{"F_GetProjName"      link F_GetProjName    }
    @{"F_GetProjFullName"  link F_GetProjFullName }
    @{"F_GetRecNum"        link F_GetRecNum      }
    @{"F_GotoFirstRec"     link F_GotoFirstRec         }
    @{"F_GotoLastRec"      link F_GotoLastRec           }
    @{"F_GotoNextRec"      link F_GotoNextRec          }
    @{"F_GotoPrevRec"      link F_GotoPrevRec          }
    @{"F_GotoRec"          link F_GotoRec         }
    @{"F_GotoRecReq"       link F_GotoRecReq       }
    @{"F_IsVirgin"         link F_IsVirgin          }
    @{"F_Locate"           link F_Locate      }
    @{"F_MakeVirgin"       link F_MakeVirgin        }
    @{"F_NewProject"       link F_NewProject        }
    @{"F_OpenServiceWin"   link F_OpenServiceWin   }
    @{"F_OpenList"         link F_OpenList          }
    @{"F_OpenProject"      link F_OpenProject       }
    @{"F_OpenProjectReq"   link F_OpenProjectReq     }
    @{"F_OptionsReq"       link F_OptionsReq       }
    @{"F_Quit"             link F_Quit      }
    @{"F_RemRecord"        link F_RemRecord          }
    @{"F_SaveProject"      link F_SaveProject       }
    @{"F_SaveProjectReq"   link F_SaveProjectReq     }
    @{"F_SaveSettings"     link F_SaveSettings      }
    @{"F_SetDefFontReq"    link F_SetDefFontReq    }
    @{"F_SetFieldCont"     link F_SetFieldCont      }
    @{"F_SetMode"          link F_SetMode           }
    @{"F_SetSearchPat"     link F_SetSearchPat     }
    @{"F_SetSearchField"   link F_SetSearchField   }
    @{"F_SortReq"          link F_SortReq       }
    @{"F_SelectProj"       link F_SelectProj     }
    @{"F_UserCommand"      link F_UserCommand            }

@endnode
@node GuiCmds "Index der GUI-Abhängigen ARexx-Kommandos"
    @{"F_AboutReq"         link F_AboutReq          }
    @{"F_AddFieldReq"      link F_AddFieldReq  }
    @{"F_AddRecord"        link F_AddRecord          }
    @{"F_ClearProject"     link F_ClearProject      }
    @{"F_CloseServiceWin"  link F_CloseServiceWin      }
    @{"F_CloseList"        link F_CloseList         }
    @{"F_CountReq"         link F_CountReq      }
    @{"F_DupRec"           link F_DupRec         }
    @{"F_FilterReq"        link F_FilterReq     }
    @{"F_FindNext"         link F_FindNext        }  *
    @{"F_FindPrev"         link F_FindPrev    }  *
    @{"F_FindReq"          link F_FindReq     }
    @{"F_GotoFirstRec"     link F_GotoFirstRec         }
    @{"F_GotoLastRec"      link F_GotoLastRec           }
    @{"F_GotoNextRec"      link F_GotoNextRec          }
    @{"F_GotoPrevRec"      link F_GotoPrevRec          }
    @{"F_GotoRec"          link F_GotoRec         }
    @{"F_GotoRecReq"       link F_GotoRecReq       }
    @{"F_NewProject"       link F_NewProject        }
    @{"F_OpenServiceWin"   link F_OpenServiceWin       }
    @{"F_OpenList"         link F_OpenList          }
    @{"F_OpenProjectReq"   link F_OpenProjectReq     }
    @{"F_OptionsReq"       link F_OptionsReq       }
    @{"F_Quit"             link F_Quit      }
    @{"F_RemRecord"        link F_RemRecord          }
    @{"F_SaveProject"      link F_SaveProject       }
    @{"F_SaveProjectReq"   link F_SaveProjectReq     }
    @{"F_SaveSettings"     link F_SaveSettings      }
    @{"F_SetDefFontReq"    link F_SetDefFontReq    }
    @{"F_SetMode"          link F_SetMode           }  *
    @{"F_SortReq"          link F_SortReq       }
    @{"F_UserCommand"      link F_UserCommand  }  *

* -- Diese Kommandos entsprechen nicht genau den GUI-Funktionen.
     Mit ein paar Programmzeilen mehr können diese jedoch nachgebildet
     werden. 
@endnode
@node NonGuiCmds "Index der GUI-Unabhängigen ARexx-Kommandos"
    @{"F_AddRecord"        link F_AddRecord          }
    @{"F_ClearProject"     link F_ClearProject      } *
    @{"F_CloseServiceWin"  link F_CloseServiceWin      }
    @{"F_CloseList"        link F_CloseList         }
    @{"F_CountRecs"        link F_CountRecs      }
    @{"F_DupRec"           link F_DupRec         }
    @{"F_FindFirst"        link F_FindFirst }
    @{"F_FindNext"         link F_FindNext        }
    @{"F_FindPrev"         link F_FindPrev    }
    @{"F_GetFieldCont"     link F_GetFieldCont      }
    @{"F_GetProjName"      link F_GetProjName    }
    @{"F_GetProjFullName"  link F_GetProjFullName }
    @{"F_GetRecNum"        link F_GetRecNum      }
    @{"F_GotoFirstRec"     link F_GotoFirstRec         }
    @{"F_GotoLastRec"      link F_GotoLastRec           }
    @{"F_GotoNextRec"      link F_GotoNextRec          }
    @{"F_GotoPrevRec"      link F_GotoPrevRec          }
    @{"F_GotoRec"          link F_GotoRec         }
    @{"F_IsVirgin"         link F_IsVirgin          }
    @{"F_Locate"           link F_Locate      }
    @{"F_MakeVirgin"       link F_MakeVirgin        }
    @{"F_NewProject"       link F_NewProject        }
    @{"F_OpenServiceWin"   link F_OpenServiceWin    }
    @{"F_OpenList"         link F_OpenList          }
    @{"F_OpenProject"      link F_OpenProject       }
    @{"F_Quit"             link F_Quit      } *
    @{"F_RemRecord"        link F_RemRecord          } *
    @{"F_SaveProject"      link F_SaveProject       }
    @{"F_SaveSettings"     link F_SaveSettings      }
    @{"F_SetFieldCont"     link F_SetFieldCont      }
    @{"F_SetMode"          link F_SetMode           }
    @{"F_SetSearchPat"     link F_SetSearchPat     }
    @{"F_SetSearchField"   link F_SetSearchField   }
    @{"F_SelectProj"       link F_SelectProj     }
    @{"F_UserCommand"      link F_UserCommand            } *

* -- Diese Kommandos können unter Umständen einen Requester öffnen.
     Bitte schauen Sie in die jeweilige Dokumentation, wie man dies
     verhindern kann.
@endnode
@node F_OpenServiceWin

    @{b}NAME@{ub}
        F_OpenServiceWin -- Öffne das Service-Fenster

    @{b}SYNOPSIS@{ub}
        F_OpenServiceWin

    @{b}FUNKTION@{ub}
        Öffnet das @{"Service-Fenster" link ServiceWin}, falls es noch nicht offen ist.

    @{b}ARGUMENTE@{ub}
        keine

    @{b}RESULTATE@{ub}
        keine

    @{b}SIEHE AUCH@{ub}
        @{"F_CloseServiceWin" LINK F_CloseServiceWin }

@endnode
@node F_CloseServiceWin

    @{b}NAME@{ub}
        F_CloseServiceWin -- schließe das Service-Fenster

    @{b}SYNOPSIS@{ub}
        F_CloseServiceWin

    @{b}FUNKTION@{ub}
        Schließt das Service-Window. Falls es zum Zeitpunkt des Aufrufes
        nicht offen ist, tut F_CloseServiceWin gar nichts.

    @{b}ARGUMENTE@{ub}
        keine

    @{b}RESULTATE@{ub}
        keine

    @{b}SIEHE AUCH@{ub}
        @{"F_OpenServiceWin" LINK F_OpenServiceWin}

@endnode
@node F_NewProject

    @{b}NAME@{ub}
        F_NewProject -- Öffne ein neues Projekt-Fenster

    @{b}SYNOPSIS@{ub}
        F_NewProject

    @{b}FUNKTION@{ub}
        Öffnet ein neues Projekt, d.h. ein neues Fenster und aktiviert
        dieses. Anschließend können neue Felder erstellt werden oder
        eine Datenbank geladen werden.
        Macht exakt dasselbe wie @{"Project/New..." link MnNew}

    @{b}ARGUMENTE@{ub}
        keine

    @{b}RESULTATE@{ub}
        keine

    @{b}BUGS@{ub}
        Sollte Fehlerfall signalisieren.

    @{b}SIEHE AUCH@{ub}

@endnode
@node F_OpenProjectReq

    @{b}NAME@{ub}
        F_OpenProjectReq -- Öffne den OpenProject-Requester

    @{b}SYNOPSIS@{ub}
        F_OpenProjectReq

    @{b}FUNKTION@{ub}
        Öffnet einen File-Requester, mit dem der Benutzer eine
        Fiasco-Datenbank zum Laden auswählen kann. Falls das
        alte Projekt zwischenzeitlich geändert wurde, wird ein
        Sicherheitsrequester erzeugt, der fragt, ob man das
        alte Projekt wirklich aus dem Speicher werfen will.
        Entspricht dem Menupunkt @{"Projekt/Öffnen..." link MnOpen}

    @{b}ARGUMENTE@{ub}
        keine

    @{b}RESULTATE@{ub}
        keine

    @{b}SIEHE AUCH@{ub}
        @{"F_OpenProject" link F_OpenProject}
        @{"Projekt/Öffnen" link MnOpen}

@endnode
@node F_OpenProject

    @{b}NAME@{ub}
        F_OpenProject -- Lade ein Projekt

    @{b}SYNOPSIS@{ub}
        F_OpenProject <Name>
        rc = Erfolg

    @{b}FUNKTION@{ub}
        Versucht ein Fiasco-Projekt von Diskette ins aktuelle
        Fenster zu laden. Die aktuellen Daten werden ohne 
        Sicherheitsabfrage gelöscht.

    @{b}ARGUMENTE@{ub}
        Name - Dateiname des Projektes

    @{b}RESULTATE@{ub}
        rc = 0, wenn alles glatt ging
           = 10, wenn Argument fehlt oder Datei nicht geladen werden kann

    @{b}SIEHE AUCH@{ub}
        @{"F_OpenProjectReq" link F_OpenProjectReq}

@endnode
@node F_SaveProject

    @{b}NAME@{ub}
        F_SaveProject -- Speichert das aktuelle Projekt

    @{b}SYNOPSIS@{ub}
        F_SaveProject

    @{b}FUNKTION@{ub}
        Speichert das aktuelle Projekt unter dem aktuellen Namen auf
        Disk.
        Entspricht dem Menupunkt @{"Projekt/Speichern..." link MnSave}

    @{b}ARGUMENTE@{ub}
        keine

    @{b}RESULTATE@{ub}
        keine

    @{b}BUGS@{ub}
        Informiert das Programm nicht über Fehlerzustände

    @{b}SIEHE AUCH@{ub}
        @{"F_SaveProjectReq" LINK F_SaveProjectReq}

@endnode
@node F_SaveProjectReq

    @{b}NAME@{ub}
        F_SaveProjectReq -- öffne Requester und speichere unter diesem Namen
 
    @{b}SYNOPSIS@{ub}
        F_SaveProjectReq

    @{b}FUNKTION@{ub}
        Öffnet einen FileRequester, mit dem der Benutzer einen Namen an-
        geben kann, unter dem das aktuelle Projekt anschließend gespei-
        chert wird.
        Entspricht dem Menupunkt @{"Projekt/Speichern Als..." link MnSaveAs}

    @{b}ARGUMENTE@{ub}
        keine

    @{b}RESULTATE@{ub}
        keine

    @{b}BEMERKUNGEN@{ub}
        Da der Benutzer im Requester auch "Abbrechen" anwählen kann, ist es
        möglich, daß das Projekt nicht gespeichert wird.

    @{b}SIEHE AUCH@{ub}
        @{"F_SaveProject" LINK F_SaveProject}

@endnode
@node F_AboutReq

    @{b}NAME@{ub}
        F_AboutReq -- öffnet den About-Requester

    @{b}SYNOPSIS@{ub}
        F_AboutReq

    @{b}FUNKTION@{ub}
        Öffnet einen Intuition-EasyRequester, der einige Informationen
        über das Programm anzeigt.
        Entspricht dem Menupunkt @{"Projekt/Über..." link MnAbout}

    @{b}ARGUMENTE@{ub}
        keine

    @{b}RESULTATE@{ub}
        keine

    @{b}SIEHE AUCH@{ub}

@endnode
@node F_OptionsReq

    @{b}NAME@{ub}
        F_OptionsReq -- Öffne den Options-Requester für das Projekt

    @{b}SYNOPSIS@{ub}
        F_OptionsReq

    @{b}FUNKTION@{ub}
        Öffnet den @{"Options-Requester" link RqOptions}, mit dem der Benutzer bestimmte
        Projektspezifische Einstellungen bestimmen kann.
        Entspricht dem Menupunkt @{"Projekt/Optionen..." link MnOptions}

    @{b}ARGUMENTE@{ub}
        keine

    @{b}RESULTATE@{ub}
        keine

    @{b}SIEHE AUCH@{ub}

@endnode
@node F_SetDefFontReq

    @{b}NAME@{ub}
        F_SetDefFontReq -- Öffne den Fontrequester

    @{b}SYNOPSIS@{ub}
        F_SetDefFontReq

    @{b}FUNKTION@{ub}
        Öffnet den Fontrequester, mit dem der Benutzer die Standard-Schrift
        für die Maske auswählen kann.
        Macht genau das selbe wie "Einstellungen/Font auswählen..."
        
    @{b}ARGUMENTE@{ub}

    @{b}RESULTATE@{ub}

    @{b}SIEHE AUCH@{ub}

@endnode
@node F_FindFirst

    @{b}NAME@{ub}
        F_FindFirst -- Suche nach dem eingestellten Muster

    @{b}SYNOPSIS@{ub}
        F_FindFirst
        Result = Number_of_Record

    @{b}FUNKTION@{ub}
        Sucht vorwärts nach der ersten Übereinstimmung mit dem mit @{"F_SetSearchPat" link F_SetSearchPat}
        eingestellten Suchmuster. Wenn rc = 0 ist, enthält result die Nummer
        des gefundenen Records. Diesen kann man dann mit @{"F_GotoRec" LINK F_GotoRec } dann
        aktivieren. Falls keine Übereinstimmung gefunden wurde, oder noch kein
        Suchmuster angegeben wurde, ist rc = 5.

    @{b}ARGUMENTE@{ub}
        keine

    @{b}RESULTATE@{ub}
        Wenn rc = 0, result = Nummer der Übereinstimmung.
        Wenn rc = 5, nichts mehr gefunden.

    @{b}BEISPIEL@{ub}
        /* Find-Example.rexx */
        options results
        address Fiasco

        count = 0

        F_SetSearchField "TestFeld" /* irgendein Feldname
                                     * (Sollte hier String sein) */
        F_SetSearchPat "?#?"        /* Suche nach allen Records,
                                     * die mindestens ein Zeichen
                                     * beinhalten */
        F_FindFirst                 /* Suche nach dem ersten Record */

        do while rc = 0             /* Suche solange, bis nichts mehr 
                                     * gefunden wird */
           F_GotoRec Result         /* Aktiviere den gefundenen Record */

           count = count + 1

           F_FindNext               /* Weitersuchen */

        end

        /* Alle Records durchlaufen */
        
    @{b}SIEHE AUCH@{ub}

@endnode
@node F_FindNext

    @{b}NAME@{ub}
        F_FindNext -- Suche nach dem eingestellten Muster

    @{b}SYNOPSIS@{ub}
        F_FindNext
        Result = Number_of_next_Record

    @{b}FUNKTION@{ub}
        Sucht vorwärts nach der nächsten Übereinstimmung mit dem mit 
        @{"F_SetSearchPat" link F_SetSearchPat} eingestellten Suchmuster. Wenn rc = 0 ist,
        enthält result die Nummer des gefundenen Records. Diesen kann man dann mit 
        @{"F_GotoRec" LINK F_GotoRec } dann aktivieren. Falls keine Übereinstimmung 
        gefunden wurde, oder noch kein Suchmuster angegeben wurde, ist rc = 5.

    @{b}BEMERKUNG@{ub}
        Der aktuelle Record wird bei der Suche mit F_FindNext und F_FindPrev nicht
        mit einbezogen. Will man also ein Programm schreiben, in dem das ganze Projekt
        durchsucht wird, muß man zuerst @{"F_FindFirst" link F_FindFirst} und dann
        F_FindNext benutzen.

    @{b}ARGUMENTE@{ub}
        keine

    @{b}RESULTATE@{ub}
        Wenn rc = 0, result = Recordnummer der Übereinstimmung.
        Wenn rc = 5, nichts mehr gefunden.

    @{b}BEISPIEL@{ub}
        siehe @{"F_FindFirst" link F_FindFirst}

    @{b}SIEHE AUCH@{ub}

@endnode
@node F_FindPrev

    @{b}NAME@{ub}
        F_FindPrev -- Suche nach dem eingestellten Muster rückwärts

    @{b}SYNOPSIS@{ub}
        F_FindPrev
        Result = Number_of_prev_Record

    @{b}FUNKTION@{ub}
        Sucht rückwärts nach der nächsten Übereinstimmung mit dem mit 
        @{"F_SetSearchPat" link F_SetSearchPat} eingestellten Suchmuster. Wenn rc = 0  ist, 
        enthält result die Nummer des gefundenen Records. Diesen kann man dann 
        mit @{"F_GotoRec" LINK F_GotoRec } dann aktivieren. Falls keine Übereinstimmung gefunden
        wurde, oder noch kein Suchmuster angegeben wurde, ist rc = 5.

    @{b}ARGUMENTE@{ub}
        keine

    @{b}RESULTATE@{ub}
        Wenn rc = 0, result = Recordnummer der Übereinstimmung.
        Wenn rc = 5, nichts mehr gefunden.

    @{b}BEMERKUNG@{ub}
        Innerhalb von ARexx-Script ist F_FindPrev relativ unpraktisch.
        Bessere Ergebnisse lassen sich mit Kombinationen von @{"F_FindFirst" link F_FindFirst}
        und @{"F_FindNext" link F_FindNext} erzielen.

    @{b}SIEHE AUCH@{ub}

@endnode
@node F_FindReq

    @{b}NAME@{ub}
        F_FindReq -- Öffne den Such-Requester

    @{b}SYNOPSIS@{ub}
        F_FindReq

    @{b}FUNKTION@{ub}
        Öffnet den @{"Such-Requester" link RqFind}, entspricht exakt dem Menupunkt 
        @{"Vergleichen/Suchen..." link MnFind}
        Dieses Kommando kann nur im @{"Record-Modus" link RecordMode} aufgerufen werden.

    @{b}ARGUMENTE@{ub}
        keine

    @{b}RESULTATE@{ub}
        keine

    @{b}SIEHE AUCH@{ub}

@endnode
@node F_SetSearchPat

    @{b}NAME@{ub}
        F_SetSearchPat -- Setze das Suchmuster

    @{b}SYNOPSIS@{ub}
        F_SetSearchPat <Suchmuster>
        rc = Success

    @{b}FUNKTION@{ub}
        Setzt das Suchmuster für das aktive Projekt. Anschließend kann,
        falls mit @{"F_SetSearchField" link F_SetSearchField} auch ein Suchfeld eingestellt wurde,
        mit @{"F_FindFirst" link F_FindFirst} und @{"F_FindNext" link F_FindNext} nach dem Muster gesucht werden.

    @{b}ARGUMENTE@{ub}
        Suchmuster - Ein String, nach dem gesucht werden soll.

    @{b}RESULTATE@{ub}
        0, wenn alles glattgegangen ist.
        10, falls das Argument fehlt.
        20 bei einem internen Systemfehler (wie Speichermangel, etc.)

    @{b}SIEHE AUCH@{ub}

@endnode
@node F_SetSearchField

    @{b}NAME@{ub}
        F_SetSearchField -- Setze das Suchfeld

    @{b}SYNOPSIS@{ub}
        F_SetSearchField <FeldId>
        rc = Success

    @{b}FUNKTION@{ub}
        Setzt das aktuelle Bezugsfeld für die Suche auf das Feld, das
        als Argument angegeben wurde.

    @{b}ARGUMENTE@{ub}
        FeldId - Die Id des Feldes, in dem gesucht werden soll.

    @{b}RESULTATE@{ub}
        Gibt 10 zurück wenn das Argument fehlt, oder die Id unbekannt ist,
        ansonsten 0.

    @{b}SIEHE AUCH@{ub}
        @{"F_SetSearchPat" link F_SetSearchPat}

@endnode
@node F_AddFieldReq

    @{b}NAME@{ub}
        F_AddFieldReq -- Öffne den Add-Field-Requester

    @{b}SYNOPSIS@{ub}
        F_AddFieldReq

    @{b}FUNKTION@{ub}
        Öffnet den @{"Feld-Requester" link RqEditField} für den eingestellten Feldtypen.
        Dieses Kommando macht exakt das selbe wie @{"Felder/Hinzufügen..." link MnAddField}
        Es kann nur im @{"Masken-Modus" link MaskMode} aufgerufen werden.

    @{b}ARGUMENTE@{ub}

    @{b}RESULTATE@{ub}

    @{b}SIEHE AUCH@{ub}

@endnode
@node F_GotoPrevRec

    @{b}NAME@{ub}
        F_GotoPrevRec -- aktiviere den vorherigen Record.

    @{b}SYNOPSIS@{ub}
        F_GotoPrevRec

    @{b}FUNKTION@{ub}
        Aktiviert den dem aktuellen Record vorhergehenden Record. Falls
        der aktuelle der erste Record ist oder keine Records existieren,
        passiert nichts.

        Äquivalent mit dem Menupunkt @{"Records/Voriger" link MnPrevious}.
        Kann nur im Record-Modus aufgerufen werden.

    @{b}ARGUMENTE@{ub}
        keine

    @{b}RESULTATE@{ub}
        keine

    @{b}SIEHE AUCH@{ub}

@endnode
@node F_GotoNextRec

    @{b}NAME@{ub}
        F_GotoNextRec -- aktivieren den nächsten Record

    @{b}SYNOPSIS@{ub}
        F_GotoNextRec

    @{b}FUNKTION@{ub}
        Aktiviert den Record, der dem aktuellen folgt. Falls der
        aktuelle der Letzte ist oder keine Records existieren, passiert
        nichts.

        Äquivalent mit dem Menupunkt @{"Records/Nächster" link MnNext}.
        Kann nur im Record-Modus aufgerufen werden.

    @{b}ARGUMENTE@{ub}
        keine

    @{b}RESULTATE@{ub}
        keine

    @{b}SIEHE AUCH@{ub}

@endnode
@node F_GotoFirstRec

    @{b}NAME@{ub}
        F_GotoFirstRec -- aktiviere den ersten Record

    @{b}SYNOPSIS@{ub}
        F_GotoFirstRec

    @{b}FUNKTION@{ub}
        Aktiviert den ersten Record. Falls keine Records existieren, passiert
        nichts.

        Äquivalent mit dem Menupunkt @{"Records/Erster" link MnFirstRecord}.
        Kann nur im Record-Modus aufgerufen werden.

    @{b}ARGUMENTE@{ub}
        keine

    @{b}RESULTATE@{ub}
        keine

    @{b}SIEHE AUCH@{ub}

@endnode
@node F_GotoLastRec

    @{b}NAME@{ub}
        F_GotoLastRec -- aktiviere den letzten Record

    @{b}SYNOPSIS@{ub}
        F_GotoLastRec

    @{b}FUNKTION@{ub}
        Aktiviert den letzten Record im aktuellen Projekt

        Äquivalent mit dem Menupunkt @{"Records/Letzter" link MnLastRecord}.
        Kann nur im Record-Modus aufgerufen werden.

    @{b}ARGUMENTE@{ub}

    @{b}RESULTATE@{ub}

    @{b}SIEHE AUCH@{ub}

@endnode
@node F_Quit

    @{b}NAME@{ub}
        F_Quit -- schließe das aktuelle Projekt

    @{b}SYNOPSIS@{ub}
        F_Quit

    @{b}FUNKTION@{ub}
        Schließt das aktuelle Projekt. Dieser Aufruf entspricht dem
        Menupunkt @{"Project/Beenden" link MnQuit}, wenn das Projekt also nach dem letzten
        Speichern nochmal verändert wurde, wird ein Requester geöffnet,
        der fragt, ob das Projekt wirklich geschlossen werden soll.
        Die Funktion muß also nicht unbedingt ihren Zweck erfüllen.

        Um dies zu verhindern, kann man mit dem Kommando @{"F_MakeVirgin" link F_MakeVirgin}
        dem Programm vorgaukeln, daß das Projekt nicht verändert wurde.

    @{b}ARGUMENTE@{ub}
        keine

    @{b}RESULTATE@{ub}
        keine

    @{b}BEMERKUNG@{ub}
        Wenn das aktuelle Projekt geschlossen wird, wird ein anderes 
        aktiviert oder, falls sonst keins mehr offen war, das Programm
        beendet. Ein ARexx-Script sollte sich nicht auf die Reihenfolge
        verlassen, in der die Projekte aktiviert werden.

    @{b}SIEHE AUCH@{ub}

@endnode
@node F_GotoRec

    @{b}NAME@{ub}
        F_GotoRec -- aktiviere einen bestimmten Record.

    @{b}SYNOPSIS@{ub}
        F_GotoRec <RecordNummer>

    @{b}FUNKTION@{ub}
        Aktiviere den Record, dessen Nummer als Argument übergeben wurde.
        Falls die Nummer falsch war, tue gar nichts.

    @{b}ARGUMENTE@{ub}
        RecordNummer - Die Nummer des Records. Bitte beachten Sie, daß
        sich durch Sortiervorgänge und Hinzufügen oder Entfernen
        von Records und Filtern die Nummern der Records verändern können.

    @{b}RESULTATE@{ub}

    @{b}SIEHE AUCH@{ub}

@endnode
@node F_GotoRecReq

    @{b}NAME@{ub}
        F_GotoRecReq -- Öffne den "Goto-Requester"

    @{b}SYNOPSIS@{ub}
        F_GotoRecReq

    @{b}FUNKTION@{ub}
        Dieses Kommando fordert den Benutzer auf, die Nummer eines Records
        anzugeben, der daraufhin aktiviert wird.

        Äquivalent mit dem Menupunkt @{"Records/Gehe zu..." link MnGoto}.
        Kann nur im Record-Modus aufgerufen werden.

    @{b}ARGUMENTE@{ub}
        keine
 
    @{b}RESULTATE@{ub}
        keine

    @{b}SIEHE AUCH@{ub}
       @{"F_GotoRec" link F_GotoRec}
       Menu @{"Records/Gehe zu..." link MnGoto}

@endnode
@node F_SetFieldCont

    @{b}NAME@{ub}
        F_SetFieldCont -- Ändere den Inhalt eines bestimmten Feldes

    @{b}SYNOPSIS@{ub}
        F_SetFieldCont <FeldId> <Inhalt>
        rc = Success

    @{b}FUNKTION@{ub}
        Setzt den Inhalt des Feldes mit der angegebenen Id im aktuellen
        Record auf das Argument Inhalt. 

        Kann nur im Record-Modus aufgerufen werden.

    @{b}ARGUMENTE@{ub}
        FeldId - Identifikationsname des Feldes
        Inhalt - Neuer Inhalt für das Feld. Dieses Argument nimmt die
            gesamte restliche Kommandozeile ein, inclusive Leerzeichen.
            Anführungszeichen sind also nicht nötig. Die Interpretation
            dieses Arguments hängt von Feldtypen ab:
            String  - wird direkt übernommen
            Integer - Zahlen werden direkt übernommen, anderes ergibt 0
            Float   - entspricht Integer
            Boolean - 1 oder TRUE = gesetzt, 0 oder FALSE = nicht gesetzt
            Slider  - Zahl wird übernommen, zu große bzw. zu kleine werden
                      angepaßt.
            Cycle   - Zahl oder Name des Eintrags wird übernommen

    @{b}RESULTATE@{ub}
        rc = 0  - kein Fehler
        rc = 5  - Kein Record aktiv, d.h. Datenbank ist leer
        rc = 10 - Fehlendes Argument @{i}oder @{ui}FeldId ist falsch

    @{b}BUGS@{ub}

    @{b}SIEHE AUCH@{ub}

@endnode
@node F_GetFieldCont

    @{b}NAME@{ub}
        F_GetFieldCont -- Lese den Inhalt eines bestimmten Feldes

    @{b}SYNOPSIS@{ub}
        F_GetFieldCont <FeldId>
        rc = Success
        result = Inhalt

    @{b}FUNKTION@{ub}
        Liest den Inhalt des Feldes mit der angegebenen Id im aktuellen
        Record aus und liefert ihn in result zurück.

        Kann nur im Record-Modus aufgerufen werden.

    @{b}ARGUMENTE@{ub}
        FeldId - Id des Feldes

    @{b}RESULTATE@{ub}
        rc = 0  - alles Ok, result enthält den Inhalt
        rc = 5  - kein Record aktiv, d.h. Projekt ist leer
        rc = 10 - Argument fehlt @{i}oder @{ui}Id ist nicht gültig

        result  - enthält den aktuellen Inhalt des Feldes, falls rc = 0 ist.
            Das Format des Inhaltes:
            String  - der Text selbst.
            Integer - die Zahl selbst.
            Float   - z.Zt. nicht unterstützt
            Boolean - 1 = gesetzt, 0 = nicht gesetzt
            Slider  - den Wert des Sliders
            Cycle   - die Nummer des Eintrages.

    @{b}SIEHE AUCH@{ub}

@endnode
@node F_AddRecord

    @{b}NAME@{ub}
        F_AddRecord -- Füge einen neuen Record hinzu.

    @{b}SYNOPSIS@{ub}
        F_AddRecord
    
    @{b}FUNKTION@{ub}
        Fügt einen neuen Record nach dem aktuellen ein. Dieser Record
        wird dann auch automatisch der aktuelle.
        Diese Funktion kann nur im Record-Modus aufgerufen werden.

    @{b}ARGUMENTE@{ub}
        keine

    @{b}RESULTATE@{ub}
        keine

    @{b}SIEHE AUCH@{ub}
        @{"F_RemRecord" link F_RemRecord}
        @{"Records/Hinzufügen" link MnAddRecord}

@endnode
@node F_RemRecord

    @{b}NAME@{ub}
        F_RemRecord -- Entferne den aktuellen Record

    @{b}SYNOPSIS@{ub}
        F_RemRecord 

    @{b}FUNKTION@{ub}
        Entfernt den aktuellen Record und aktiviert den nächsten. 
        Diese Funktion kann nur im Record-Modus aufgerufen werden.

    @{b}ARGUMENTE@{ub}
        keine

    @{b}RESULTATE@{ub}
        keine

    @{b}SIEHE AUCH@{ub}
        @{"F_AddRecord" link F_AddRecord}
        @{"Records/Löschen" link MnRemoveRecord}
@endnode
@node F_SetMode

    @{b}NAME@{ub}
        F_SetMode -- Wähle den Bearbeitungs-Modus

    @{b}SYNOPSIS@{ub}
        F_SetMode <Modus>
        rc = Success

    @{b}FUNKTION@{ub}
        Aktiviert den angegebenen Modus für das aktuelle Projekt.
        
    @{b}ARGUMENTE@{ub}
        Modus - "Mask" aktiviert den Masken-Modus
                "Records" aktiviert den Record-Modus

    @{b}RESULTATE@{ub}
        rc = 0  - kein Fehler
           = 5  - das Projekt war bereits im gewünschten Modus
           = 10 - Fehlendes oder falsches Argument

    @{b}SIEHE AUCH@{ub}

@endnode
@node F_Locate

    @{b}NAME@{ub}
        F_Locate -- Locate the Cursor

    @{b}SYNOPSIS@{ub}
        F_Locate <X> <Y>
        
    @{b}FUNKTION@{ub}
        Setzt den Cursor an die angegebene Position. An dieser wird
        die nächste Masken-Operation stattfinden.
        Diese Funktion kann nur im Masken-Modus aufgerufen werden.

    @{b}ARGUMENTE@{ub}
        X - X-Coordinate
        Y - Y-Coordinate

    @{b}RESULTATE@{ub}

    @{b}BUGS@{ub}
        Ist z.Zt. nicht besonders nützlich, da noch keine direkten Kommandos
        zum Verändern der Maske zur Verfügung stehen.

    @{b}SIEHE AUCH@{ub}

@endnode

@node F_CountRecs

    @{b}NAME@{ub}
        F_CountRecs -- zähle die Records

    @{b}SYNOPSIS@{ub}
        F_CountRecs
        result = <Anzahl_der_Records>

    @{b}FUNKTION@{ub}
        Zählt die Records, aus denen das aktuelle Projekt besteht.
        Kann nur im Record-Modus aufgerufen werden.

    @{b}ARGUMENTE@{ub}
        keine

    @{b}RESULTATE@{ub}
        Anzahl_der_Records - Die momentane Anzahl der Records im aktuellen
           Projekt, kann 0 sein. Bitte beachten Sie, daß Filter diesen Wert
           beeinflussen.

    @{b}SIEHE AUCH@{ub}

@endnode
@node F_SortReq

    @{b}NAME@{ub}
        F_SortReq -- Öffne den Sort-Requester

    @{b}SYNOPSIS@{ub}
        F_SortReq

    @{b}FUNKTION@{ub}
        Öffnet den Sort-Requester, in dem der Benutzer die Möglichkeit
        hat, das Projekt nach bestimmten Kriterien zu sortieren.
        Dieses Kommando macht genau das selbe wie der Menupunkt
        "Compare/Sort..."
        Es kann nur im Record-Modus aufgerufen werden.

    @{b}ARGUMENTE@{ub}

    @{b}RESULTATE@{ub}

    @{b}SIEHE AUCH@{ub}
       "Compare/Sort..."

@endnode
@node F_CountReq

    @{b}NAME@{ub}
        F_CountReq -- Öffne den Count-Requester

    @{b}SYNOPSIS@{ub}
        F_CountReq

    @{b}FUNKTION@{ub}
        Öffnet den Count-Requester, in dem der Benutzer die Anzahl
        der Übereinstimmungen des aktuellen Projektes mit einem Suchmuster
        bestimmen kann.
        Dieses Kommando macht genau dasselbe wie "Compare/Count..." 
        Dieses Kommando kann nur im Record-Modus aufgerufen werden.

    @{b}ARGUMENTE@{ub}

    @{b}RESULTATE@{ub}

    @{b}SIEHE AUCH@{ub}
       "Compare/Count..."

@endnode
@node F_OpenList

    @{b}NAME@{ub}
        F_OpenList -- Öffne das Listen-Fenster

    @{b}SYNOPSIS@{ub}
        F_OpenList

    @{b}FUNKTION@{ub}
        Öffnet das Listen-Fenster, in dem der Benutzer einen Überblick über
        die Records des Projektes bekommt. Falls das Listen-Fenster
        bereits offen sein sollte, passiert gar nichts.
        Dieses Kommando entspricht dem Aktivieren des Menupunktes
        "Control/List"

    @{b}ARGUMENTE@{ub}

    @{b}RESULTATE@{ub}

    @{b}SIEHE AUCH@{ub}
       "Control/List"

@endnode
@node F_CloseList

    @{b}NAME@{ub}
        F_CloseList -- schließe das List-Fenster

    @{b}SYNOPSIS@{ub}
        F_CloseList

    @{b}FUNKTION@{ub}
        Schließt das Listen-Fenster. Falls das Fenster nicht offen sein
        sollte, passiert gar nichts. 
        Diese Kommando entspricht dem Deaktivieren des Menupunktes
        "Control/List"

    @{b}ARGUMENTE@{ub}

    @{b}RESULTATE@{ub}

    @{b}SIEHE AUCH@{ub}
       "Control/List"

@endnode
@node F_FilterReq

    @{b}NAME@{ub}
        F_FilterReq -- Öffne den Filter-Requester

    @{b}SYNOPSIS@{ub}
        F_FilterReq

    @{b}FUNKTION@{ub}
        Öffnet den Filter-Requester, in dem der Benutzer Parameter für
        einen Filter angeben kann.
        Dieses Kommando entspricht dem Menupunkt "Compare/Filter..."
        Es kann nur im Record-Modus aufgerufen werden.

    @{b}ARGUMENTE@{ub}

    @{b}RESULTATE@{ub}

    @{b}SIEHE AUCH@{ub}
       "Compare/Filter..."

@endnode
@node F_DupRec

    @{b}NAME@{ub}
        F_DupRec -- Klone den aktuellen Record

    @{b}SYNOPSIS@{ub}
        F_DupRec

    @{b}FUNKTION@{ub}
        Dieses Kommando dupliziert exakt den aktuellen Record. Sämtliche
        Parameter wie unique Key, Init Cont, current Time usw. werden
        ignoriert. Diese Funktion tut exakt das selbe wie der Menupunkt
        "Records/Dup Record". Falls kein Record aktiv sein sollte,
        passiert nichts. F_DupRec kann nur im Record-Modus aufgerufen
        werden.

    @{b}ARGUMENTE@{ub}

    @{b}RESULTATE@{ub}

    @{b}SIEHE AUCH@{ub}
        "Records/DupRecord"

@endnode
@node F_GetRecNum

    @{b}NAME@{ub}
        F_GetRecNum -- Lese die Nummer des aktuellen Records aus.

    @{b}SYNOPSIS@{ub}
        F_GetRecNum
        Result = nummer_des_Records

    @{b}FUNKTION@{ub}
        Gibt die Nummer des aktuellen Records in Result zurück. 
        Kann z.B. benutzt werden, um einen Anfangszustand zwischenzuspeichern
        und am Schluß mit @{"F_GotoRec" link F_GotoRec} wiederherzustellen.

    @{b}ARGUMENTE@{ub}
        keine

    @{b}RESULTATE@{ub}
        Result = Nummer des Records. Bitte beachten Sie, daß Filter u.ä.
                 Record Nummern beeinflussen können.

    @{b}SIEHE AUCH@{ub}

@endnode
@node F_SaveSettings

    @{b}NAME@{ub}
        F_SaveSettings -- Sichere die aktuellen Programm-Einstellungen

    @{b}SYNOPSIS@{ub}
        F_SaveSettings

    @{b}FUNKTION@{ub}
        Sichert die aktuellen Programm-Einstellungen (in den Menus Settings
        und User). Wenn Fiasco später neu gestartet wird, werden diese 
        Einstellungen sofort gültig.
        Dieses Kommando entspricht dem Menupunkt "Settings/Save Settings"

    @{b}ARGUMENTE@{ub}
        keine

    @{b}RESULTATE@{ub}
        keine

    @{b}SIEHE AUCH@{ub}
        "Settings/Save Settings"
@endnode
@node F_ClearProject

    @{b}NAME@{ub}
        F_ClearProject -- leere das aktive Project

    @{b}SYNOPSIS@{ub}
        F_ClearProject

    @{b}FUNKTION@{ub}
        Löscht alle Daten im aktuellen Projekt, so daß es sich hinterher
        in einem Zustand wie gerade über "Project/New" neu geöffnete
        Projekte befindet.
        Dieses Kommando entspricht dem Menupunkt "Project/Erase", so
        ist es also auch möglich, daß ein Requester erzeugt wird, in
        dem gefragt wird, ob das Projekt vorher noch gespeichert werden
        soll. Um dies zu umgehen, sollte man vorher mit @{"F_MakeVirgin" link F_MakeVirgin }
        Fiasco sagen, daß das Changed-Flag zurückgesetzt wird, nachdem
        man eventuell mit @{"F_IsVirgin" link F_IsVirgin} die jungfräulichkeit des Projekts
        überprüft hat.

    @{b}ARGUMENTE@{ub}
        nichts

    @{b}RESULTATE@{ub}
        nichts

    @{b}SIEHE AUCH@{ub}
        "Project/Erase"
        @{"F_IsVirgin" link F_IsVirgin}
        @{"F_MakeVirgin" link F_MakeVirgin}  
@endnode
@node F_GetProjName

    @{b}NAME@{ub}
        F_GetProjName -- lese den Dateinamen des aktuellen Projektes

    @{b}SYNOPSIS@{ub}
        F_GetProjName
        Result = <Dateiname>

    @{b}FUNKTION@{ub}
        Gibt den Dateinamen ohne Pfad des aktuellen Projektes zurück.
        Dieser Wert kann für @{"F_SelectProj" link F_SelectProj} benutzt werden.

    @{b}ARGUMENTE@{ub}
        keine

    @{b}RESULTATE@{ub}
        Result - Name der Datei des aktuellen Projektes ohne Pfad
                 Es muß nicht unbedingt eine Datei mit diesem Namen
                 existieren, z.B. wenn er über Options nachträglich
                 geändert wurde.

    @{b}SIEHE AUCH@{ub}
        @{"F_GetProjFullName" link F_GetProjFullName}

@endnode
@node F_GetProjFullName

    @{b}NAME@{ub}
        F_GetProjFullName -- Lese den Dateinamen des aktuellen Projekts

    @{b}SYNOPSIS@{ub}
        F_GetProjFullName
        Result = <Name>

    @{b}FUNKTION@{ub}
        Gibt den Dateinamen des aktuellen Projektes incl. Pfad zurück.

    @{b}BEMERKUNG@{ub}
        Der Pfad ist relativ zum aktuellen Verzeichnis von Fiasco.
        
    @{b}ARGUMENTE@{ub}

    @{b}RESULTATE@{ub}
        Name - Name des Projektes incl. Pfad.

    @{b}SIEHE AUCH@{ub}
        @{"F_GetProjName" link F_GetProjName}  
@endnode
@node F_SelectProj

    @{b}NAME@{ub}
        F_SelectProj -- aktiviere ein bereits geladenes Projekt

    @{b}SYNOPSIS@{ub}
        F_SelectProj <DateiName>
        rc = <Success>

    @{b}FUNKTION@{ub}
        Aktiviert ein Projekt, das sich bereits im Speicher befindet.
        Zur Identifikation dient der Dateiname, ohne Pfad!!
        Dies kann der Name, der durch @{"F_GetProjName" link F_GetProjName }
        gewonnen wurde sein. Alle nachfolgenden Kommandos beziehen sich dann
        auf das aktuelle Projekt

    @{b}ARGUMENTE@{ub}
        DateiName - Name des Projektes, ohne Pfad!.

    @{b}RESULTATE@{ub}
        Success = 5, falls das Projekt bereits aktiv ist
                = 10, falls das Projekt nicht gefunden werden konnte, oder das
                      Argument fehlt.

    @{b}SIEHE AUCH@{ub}
        @{"F_GetProjName" link F_GetProjName}

@endnode

@node F_UserCommand

    @{b}NAME@{ub}
        F_UserCommand -- Ruft ein Benutzer-Definiertes Kommando auf.

    @{b}SYNOPSIS@{ub}
        F_UserCommand <Kommando-Nummer>

    @{b}FUNKTION@{ub}
        Ruft ein Kommando auf, das durch den Benutzer im "User"-Menu
        definiert wurde. 

    @{b}ARGUMENTE@{ub}
        Kommando-Nummer - Nummer des Kommandos: 0 = erstes Menu-Item, 1 =
                          zweites, usw. Falls eine Kommando-Nummer nicht
                          existiert, wird sie ignoriert.

    @{b}RESULTATE@{ub}
        keine

    @{b}BEMERKUNG@{ub}
        Dieses Kommando sollte nur für das Implementieren einer Icon Leiste
        oder Ähnlichem benutzt werden. Benutzen sie es nicht in normalen Scripts,
        da Sie nicht wissen können, was hinter dem Kommando steckt.

    @{b}SIEHE AUCH@{ub}

@endnode
@node F_IsVirgin

    @{b}NAME@{ub}
        F_IsVirgin -- Ist das Projekt unverändert?

    @{b}SYNOPSIS@{ub}
        F_IsVirgin
        rc = <IsVirgin>

    @{b}FUNKTION@{ub}
        Testet, ob das aktuelle Projekt unverändert ist, d.h. ein
        Sicherheits-Requester bei Quit, Erase, Load o.ä. erscheinen
        würde.
        
    @{b}ARGUMENTE@{ub}
        keine

    @{b}RESULTATE@{ub}
        rc = 0 - Unverändert
        rc = 5 - Verändert

    @{b}SIEHE AUCH@{ub}
        @{"F_MakeVirgin" link F_MakeVirgin}

@endnode
@node F_MakeVirgin

    @{b}NAME@{ub}
        F_MakeVirgin -- Gebe vor, daß ein Projekt unverändert ist.

    @{b}SYNOPSIS@{ub}
        F_MakeVirgin

    @{b}FUNKTION@{ub}
        "Macht" das aktuelle Projekt unverändert. Dies bewirkt, daß bei
        bestimmten Operationen (Erase, Load, Quit,...) kein Sicherheits-
        Requester geöffnet wird. Intern wird die Variable Changed auf FALSE
        gesetzt.

    @{b}ARGUMENTE@{ub}
        keine

    @{b}RESULTATE@{ub}
        Ein Projekt, das glaubt, daß es seit dem letzten Speichern nicht
        mehr verändert wurde
 
    @{b}SIEHE AUCH@{ub}
        @{"F_IsVirgin" link F_IsVirgin}

@endnode
@node F_

    @{b}NAME@{ub}

    @{b}SYNOPSIS@{ub}

    @{b}FUNKTION@{ub}

    @{b}ARGUMENTE@{ub}

    @{b}RESULTATE@{ub}

    @{b}SIEHE AUCH@{ub}

@endnode
@node examples "Beispiel-Projekte"

    Im Verzeichnis Databases liegen mehrere Fiasco-Projekte, die z.T. auch so
für eigene Zwecke weiterverwendet werden können. Hier folgen die
Beschreibungen dieser Projekte:

@{"Addresses     " link DBAddresses} Adress-Verzeichnis
@{"DatatypesDemo " link DBDatatypesDemo} Demonstration des Datatypes-Feldtyps (ab OS 3.0)
@{"FamilyTree    " link DBFamilyTree} Stammbaum
@{"Videos        " link DBVideos} Videokasetten-Verwaltung

@endnode
@node DBAddresses "Adress-Verzeichnis"

     Das Adress-Projekt kann als Adressbuch benutzt werden, in dem Name,
Adresse, Anrede usw. eingestellt werden kann. Das Feld "Country" wird über
eine Relation mit der Datei "countrie.fdb" und dem Länderkürzel "SCountry"
als Schlüssel kontrolliert. So braucht man nur noch das Länderkürzel
einzugeben und schon wird das richtige Land herausgesucht.

    Die Felder für Telefon, Fax und Postleitzahl sind String-Felder, da hier
auch Sonderzeichen wie "/" oder eine "0" am Anfang beachtet werden müssen.

    Eine weitere Idee wäre, den Namen der Stadt nach der Postleitzahl über
eine Relation zu laden.  
@endnode
@node DBDatatypesDemo "Datatypes Demo"

    Dieses Projekt ist eine einfache Demostration des @{"Datatypes-Feldtyps" link FT_DT}
der die datatypes.library benötigt und so erst ab OS 3.0 verfügbar ist. 
In der Maske gibt es drei Felder, in denen alle Daten angezeigt werden können, 
für die die entsprechenden Datatypes-Treiber vorhanden sind (AmigaGuide und Anim 
scheinen mit Fiasco manchmal Probleme zu haben). Zwei Felder haben Scrollbalken 
unten und rechts, damit man die angezeigte Datei frei bewegen kann. Im 
Stringgadget unter der Anzeige befindet sich der Name der Datei. Da die Daten 
in einer externen Datei liegen und bei jedem Record-Wechsel nachgeladen werden 
müssen, kann es dabei zu leichten Verzögerungen kommen.
@endnode
@node DBFamilyTree "Stammbaum"

    Der Stammbaum besteht aus den Projekten "persons.fdb" und "families.fdb".
In "persons.fdb" müssen alle Personen, die im Stammbaum vorkommen sollen,
aufgeführt werden. Hier können auch Geschlecht, Beruf, Geburtsdatum, usw.
eingetragen werden. 

    Diese Daten werden dann von "families.fdb" über Relationen benutzt, um
Namen von Ehepartnern, Kindern zu holen. Weiterhin sind hier noch
Datums- und String-Felder für Heirat und Scheidung. Durch die intensive
Nutzung von Relationen gibt es in diesem Projekt nur noch 10 "echte" Felder,
die auf Disk abgelegt werden. Die restlichen 12 werden aus "persons" geladen. 

@endnode
@node DBVideos "Videos"

    In der Video-Datenbank können Homevideos komfortabel verwaltet werden.
Die Datenbank besteht aus zwei Projekten: "filme.fdb" und "tapes.fdb".
In "Filme" werden Daten zu einzelnen Filmen gespeichert, u.a. Genre, Regie,
Darsteller und Jahr. Über das Feld "Kasette" wird jeder Film einer Kasette
zugeordnet, die in "tapes" zu finden ist. Hier sind Marke und Länge der
Kasette definiert. Über ein ARexx-Script wird dann die restliche freie Zeit 
jeder Kasette berechnet. 

    Dies funktioniert z.Zt. übrigens nur, wenn beide Projekte gleichzeitig
geladen sind!

@endnode
@node Locale "Anpassung an Sprachen"

    Ab Amiga OS 2.1 ist es dank der "locale.library" möglich, Programme an
beliebige Sprachen anzupassen. Aufgrund meiner eher bescheidenen
Sprachkenntnisse gibt es für Fiasco zur Zeit nur Sprachen-Kataloge für
Deutsch und Englisch (eingebaut). 

    Falls jemand Fiasco an eine andere Sprache anpassen möchte, liegen bei
Fiasco die Dateien fiasco.cd und fiasco.ct bei (in Development), die für das 
Erzeugen für Locale-Kataloge nötig sind. Ich gehe mal davon aus, daß die 
Übersetzer wissen, wie solche Dateien aufgebaut werden. Mehr Informationen
zu Fiasco und den Catalogs stehen am Anfang von fiasco.cd. 

    Obwohl es kein Muß ist, würde ich mich freuen, wenn die Autoren von
Locale-Katalogen @{"mir" link Author} diese und die Quelldateien zukommen 
lassen würden. Ihre Kataloge werden dann der nächsten Distribution von 
Fiasco beiliegen.

    Ebenso kann jeder der will die Anleitungen und die Beispiele an seine
Sprache anpassen.
@endnode

@node Author "Wie man mich erreichen kann"

    Geschenke, Ideen, Bug-Reports usw. bitte an:

    Nils Bandener
    Dekanatsgasse 4
    D-34369 Hofgeismar
    Germany

    email habe ich (noch) nicht.

@endnode
@node Bugs

    Falls Sie irgendwelche Bugs oder Fehlfunktionen in Fiasco entdecken, 
wenden Sie sich bitte an @{"mich" link author}. Bitte beschreiben Sie
den Fehler detailliert, d.h. geben Sie an, wie sich der Fehler aus-
drückt, und geben Sie eventuell im Hintergrund laufende Programme und
die Computer-Konfiguration an.

  @{b}@{i}Von Fiasco sind z.Zt. folgende Fehler bekannt: @{ub}@{ui}

- Unter Kick 37.x flackert der Fensterrahmen des List-Fensters in 
  höchst merkwürdiger weise, wenn Menuoperationen ausgeführt wurden,
  und das Fenster aktiv war.

- ARexx scheint Probleme mit Dateinamen zu haben, die Leerzeichen
  enthalten. Der Name wird dann immer nur bis zum Leerzeichen inter-
  pretiert. Da Fiasco vorher den Dateinamen zum vollen Pfad expandiert,
  wirkt sich dies auch auf den vollen Pfad aus.

- Scheint manchmal (nicht immer!) etwas Speicher nicht freizugeben


@endnode 
@node ToDo

    Natürlich ist an Fiasco noch lange nicht alles perfekt. Hier ist eine
Liste aller Dinge, die ich noch irgendwann ändern oder hinzufügen will.
Wenn Sie auch Ideen haben, wie man Fiasco noch verbessern können, schreiben
sie @{"mir" link Author}!

- Schwächere Speicher-Fragmentation. Zur Zeit wird noch für jedes Feld 
  in jedem Record ein eigenes Stückchen Speicher angefordert. Die
  Benutzung von Pools oder ähnlichem wird auch eine Beschleunigung des 
  Ladens und des Löschens von Projektes aus dem Speicher mit sich
  bringen.

- Besseres Scrolling im Masken-Fenster. Durch die Benutzung von Gadgets 
  der GadTools-Library müssen alle Gadgets neu erstellt werden, wenn sie
  bewegt werden müssen. Ich plane, die benutzen GadTools-Gadgets in Zu-
  kunft zu emulieren, wobei der Benutzer möglichst wenig merken sollte.
  (Tools wie CycleToMenu würden dabei jedoch nicht mehr funktionieren)
  Außerdem könnte ich mir dieses sch**ß GZZ-Fenster sparen.

- Bessere Implementation von Relationen.

- Neue Suchfunktion, in der die Maske selbst zum Eingeben von Suchmustern
  benutzt werden kann. Dies würde die Benutzung mehrerer Suchmuster 
  ermöglichen. Bin mir noch nicht sicher, ob ich dann die jetzige Such-
  funktion beibehalten oder entfernen soll.

- Sortieren sollte sich auf mehrere Felder beziehen und sollte schneller
  werden.

- Neue ARexx-Kommandos: ReadRecord und WriteRecord. Sollten alle 
  Feldinhalte eines Records durch ARexx-Variablen mit der Feld-Id als
  Inhalt lesen bzw. schreiben können.

- Neue Suchmuster. Weiß irgendjemand, ob die Dos-Patternmatching-Funktionen
  offiziell mehr als 30 Zeichen erlauben?

- "Virtuelle" Felder, deren Inhalt nicht gespeichert wird, sondern während
  der Laufzeit berechnet wird.
 
- Verbergen von Feldern in der Maske, wie es schon in der Liste möglich ist.

- Eine Abwandlung von Cycle-Feldern in Zusammenhang mit Relationen, wobei
  die einzelnen Labels eines Cycle-Gadget für die möglichen Werte stehen.
  Die Schlüssel würden dann unsichtbar werden.

- Reports

- Mehrzeilige Stringfelder

- Eine Option, die es erlaubt, nicht alle Records ins Ram laden zu müssen.

- Eine Möglichkeit, die es erlaubt, einen Feldtypen in einen anderen umzuwandeln

- Umgekehrte Logik beim Suchen/Zählen/Sortieren

- AppWindows für Datatypes und Extern-Felder

- "Packen" von Projekten, indem nach unbenutzten Feldern gesucht wird, und benutzte
  auf die benutzte Länge verkleinert werden.

- Überprüfen, ob ein ähnlicher Record bereits vorhanden ist (automatisch)

- Nach Extrema suchen (search -> höchster Eintrag, count -> meisten Einträge)

@endnode
@node Index

    @{" !=                     " link AllPatterns}  Suchen
    @{" #?                     " link AllPatterns}  Suchen
    @{" '                      " link AllPatterns}  Suchen
    @{" <                      " link SPrev     }  Service-Fenster
    @{" <                      " link AllPatterns}  Suchen
    @{" <=                     " link AllPatterns}  Suchen
    @{" >                      " link SNext     }  Service-Fenster
    @{" >                      " link AllPatterns}  Suchen
    @{" >=                     " link AllPatterns}  Suchen
    @{" >|                     " link SLast     }  Service-Fenster
    @{" ?                      " link AllPatterns}  Suchen
    @{" |<                     " link SFirst    }  Service-Fenster
    @{" Add                    " link SAdd      }  Service-Fenster
    @{" Address Fiasco         " link ARexx     }  ARexx und Fiasco
    @{" Ähnlichkeit            " link BlurredSearch}  Unscharfe Suche
    @{" Aktives Projekt        " link SProj     }  Service-Fenster
    @{" ARexx                  " link ARexx     }  
    @{" Aufräumen der Liste    " link List      }  
    @{" Bold                   " link FT_Txt    }  Feld-Attribut (Text)
    @{" Boolean                " link FT_Bool   }  Feldtyp
    @{" Breite von Spalten     " link List      }  Liste
    @{" Catalogs               " link locale    }  Fiasco an Sprachen anpassen
    @{" Command                " link FT_Ext    }  Feld-Attribut (Extern)
    @{" Confirm                " link Replace   }  Replace
    @{" Count                  " link RqCount   }  Requester
    @{" Count                  " link Count     }  Suchen
    @{" Cycle                  " link FT_Cyc    }  Feldtyp
    @{" Datatypes              " link FT_DT     }  Feldtyp
    @{" Date                   " link FT_Date   }  Feldtyp
    @{" Debugging              " link ARexxGen  }  von ARexx-Scripts
    @{" Delete                 " link SDel      }  Service-Fenster
    @{" Edit User Menu         " link RqEditUserMenu}  Requester
    @{" Erstellen eines Feldes " link MaskCreation}
    @{" Esc-Taste              " link gui       }  GUI
    @{" Extern                 " link FT_Ext    }  Feldtyp
    @{" F-Tasten               " link RqEditUserMenu}  User-Menu
    @{" FALSE                  " link Search    }  Suchen
    @{" Feld                   " link Mask      }  Maske
    @{" Feldtyp                " link SFieldType}  Service-Fenster
    @{" fiasco.cd              " link locale    }  Fiasco an Sprachen anpassen
    @{" fiasco.ct              " link locale    }  Fiasco an Sprachen anpassen
    @{" Filter                 " link RqFilter  }  Requester
    @{" Filter                 " link Filter    }  Suchen
    @{" Find                   " link RqFind    }  Requester
    @{" Float                  " link FT_Float  }  Feldtyp
    @{" Format                 " link FT_Sld    }  Feld-Attribut (Slider)
    @{" gimme unique Key       " link FT_Int    }  Feld-Attribut (Integer)
    @{" GUI                    " link gui       }  Graphic User Interface
    @{" Height                 " link StdAttrs  }  Feld-Attribut
    @{" Highlight              " link FT_Txt    }  Feld-Attribut (Text)
    @{" Hilfe                  " link gui       }  GUI
    @{" Id                     " link StdAttrs  }  Feld-Attribut
    @{" Init Cont              " link StdAttrs  }  Feld-Attribut
    @{" Integer                " link FT_Int    }  Feldtyp
    @{" Italics                " link FT_Txt    }  Feld-Attribut (Text)
    @{" Items                  " link FT_Cyc    }  Feld-Attribut (Cycle)
    @{" Kommandos              " link ARexxCmds }  die Fiasco über ARexx unterstützt
    @{" locale.library         " link locale    }  Fiasco an Sprachen anpassen
    @{" Macros                 " link ARexx     }  ARexx und Fiasco
    @{" Maske                  " link Mask      }
    @{" Maskendehnung          " link Stretch    }  Projekt-Option
    @{" max chars              " link FT_Str    }  Feld-Attribut (String)
    @{" max chars              " link FT_Int    }  Feld-Attribut (Integer)
    @{" max chars              " link FT_Ext    }  Feld-Attribut (Extern)
    @{" max chars              " link FT_DT     }  Feld-Attribut (Datatypes)
    @{" max format len         " link FT_Sld    }  Feld-Attribut (Slider)
    @{" max value              " link FT_Sld    }  Feld-Attribut (Slider)
    @{" min value              " link FT_Sld    }  Feld-Attribut (Slider)
    @{" Name des Projektes     " link MnOptions }  Ändern
    @{" Normal                 " link FT_Txt    }  Feld-Attribut (Text)
    @{" Online-Hilfe           " link gui       }  GUI
    @{" Options                " link RqOptions }  Requester
    @{" Parameter              " link ARexxGen  }  ARexx und Fiasco
    @{" Pen                    " link FT_Txt    }  Feld-Attribut (Text)
    @{" Postion von Spalten    " link List      }  Liste
    @{" RawDoFmt()             " link FT_Sld    }  Level-Format
    @{" RC                     " link ARexxGen  }  ARexx und Fiasco
    @{" Recalc List            " link List      }  Liste
    @{" Relation               " link Relations }
    @{" Replace                " link Replace   }  Suchen
    @{" Replace                " link RqReplace }  Requester
    @{" RESULT                 " link ARexxGen  }  ARexx und Fiasco
    @{" Return-Taste           " link Gui       }  Requester
    @{" Script                 " link StdAttrs  }  Feld-Attribut
    @{" Scripts                " link ARexx     }  ARexx und Fiasco
    @{" Scrollbars             " link FT_DT     }  Feld-Attribut (Datatypes)
    @{" ServiceWindow          " link ServiceWin}  
    @{" Shift                  " link RqEditField}  Feld-Requester
    @{" Slider                 " link FT_Sld    }  Feldtyp
    @{" Sort                   " link RqSort    }  Requester
    @{" Spalten                " link List      }  im List-Fenster
    @{" Spaltenkopf            " link List      }  im List-Fenster
    @{" Sprachenanpassung      " link locale    }  von Fiasco
    @{" Squeeze                " link RqEditField}  Feld-Requester
    @{" Stack                  " link FT_Ext    }  Feld-Attribut (Extern)
    @{" Status                 " link SStat     }  Service-Fenster
    @{" Stretching             " link Stretch    }  Projekt-Option
    @{" String                 " link FT_Str    }  Feldtyp
    @{" Suchen                 " link Search    }
    @{" Suchen mit ARexx       " link ARexxSearch}
    @{" Suchmuster             " link Patterns  }  Suchen
    @{" Text                   " link FT_Txt    }  Feldtyp
    @{" Text                   " link FT_Txt    }  Feld-Attribut (Text)
    @{" Time                   " link FT_Time   }  Feldtyp
    @{" Toleranz               " link BlurredSearch}  Unscharfe Suche
    @{" TRUE                   " link Search    }  Suchen
    @{" Underlined             " link FT_Txt    }  Feld-Attribut (Text)
    @{" unscharf               " link BlurredSearch}  Suchen
    @{" Unterlegung            " link FillPens  }  GUI
    @{" use old value          " link StdAttrs  }  Feld-Attribut
    @{" User                   " link RqEditUserMenu}  Menu
    @{" Verbergen von Spalten  " link List      }  Liste
    @{" Width                  " link StdAttrs  }  Feld-Attribut
    @{" Zählen                 " link Count     }  Suchen
    @{" Zeilen                 " link List      }  im List-Fenster
    @{" Ziehen von Feldern     " link MaskCreation}  Datenbankerstellung
@endnode
