@node Die Utilities von RSys
@chapter Die Utilities von RSys
@cindex Die Utilities von RSys


In diesem Kapitel werden nun alle Utilities von @file{@sc{RSys}}
beschrieben.  Alle Utilities können per HotKey aufgerufen werden.  In
späteren Versionen von @file{@sc{RSys}} werden sie als eigenständige Tasks
laufen, sodaß auch mehrere Utilities gleichzeitig laufen können.

@menu
* CRC-Check - Berechnung von Checksummen::
* Crypt File - Verschluesseln von Dateien::
* List Hunks - Hunk-Struktur ermitteln::
* Find File - Suche nach Dateien::
* Format Disk - Format-Schnittstelle::
* Save Windows - IFF-Dateien von Windows::
* Check Libraries - Testen der ROM-Libraries::
* Search - Die Suchfunktion von RSys::
@end menu

@c --------------------------------------
@node CRC-Check - Berechnung von Checksummen
@section CRC-Check - Berechnung von Checksummen
@cindex CRC-Check - Berechnung von Checksummen

   Mit dieser kleinen Utility kann die @code{CRC-Checksumme} von
beliebigen Dateien berechnet werden. Entsprechend der Größe der Datei,
dessen CRC berechnet werden soll, muß die @code{CRC-16}- oder die
@code{CRC-32}-Methode gewählt werden.

   Ich habe mehrere Programme, die CRC-Summen berechnen, zum Vergleich mit
meinen Routinen gestartet.  Alle Programme gaben für ein und dieselbe
Datei andere Werte aus, als meine Routine.  Ich suche den Fehler heute
noch.  Wenn sich also eine hilfreiche Seele finden sollte, die den Fehler
findet, dieser ist eine Tüte Gummibärchen sicher @code{:-)}

   Das erscheinende Window enthält mehrere Steuerelemente, die jetzt im
einzelnen besprochen werden.

@ifinfo
@menu
* Das File-Gadget::
* Das Type-Gadget::
* Das Select-Gadget::
* Das CRC-Gadget::
* Das Compute-Gadget::
@end menu
@end ifinfo

@c --------------------------------------
@ifinfo
@node Das File-Gadget
@unnumberedsubsec Das File-Gadget
@end ifinfo
@cindex Das File-Gadget

@deffn Text-Gadget {File} {}
In diesem Text-Gadget wird der Dateiname der ausgewählten Datei, deren
@code{CRC}-Summe berechnet werden soll, angezeigt.
@end deffn

@c --------------------------------------
@ifinfo
@node Das Type-Gadget
@unnumberedsubsec Das Type-Gadget
@end ifinfo
@cindex Das Type-Gadget

@deffn Cycle-Gadget {Type} {}
Mit diesem Gadget kann die zu verwendete Berechnungsart (@code{CRC-16}
oder @code{CRC-32}) gewählt werden.
@end deffn

@c --------------------------------------
@ifinfo
@node Das Select-Gadget
@unnumberedsubsec Das Select-Gadget
@end ifinfo
@cindex Das Select-Gadget

@deffn Gadget {Select} {}
Nach dem Anklicken dieses Gadgets erscheint ein FileRequester, der zu
einer Eingabe einer Datei auffordert. Wird eine existierende Datei
angewählt, wird sofort das @code{File}-Gadget aktualisiert.
@end deffn

@c --------------------------------------
@ifinfo
@node Das CRC-Gadget
@unnumberedsubsec Das CRC-Gadget
@end ifinfo
@cindex Das CRC-Gadget

@deffn Text-Gadget {CRC} {}
In diesem Gadget wird die berechnete Checksumme in Hexadezimalschreibweise
dargestellt.
@end deffn

@c --------------------------------------
@ifinfo
@node Das Compute-Gadget
@unnumberedsubsec Das Compute-Gadget
@end ifinfo
@cindex Das Compute-Gadget

@deffn Gadget {Compute} {}
Das Gadget startet die Berechnung der @code{CRC}-Checksumme.
@end deffn


@c --------------------------------------
@node Crypt File - Verschluesseln von Dateien
@section Crypt File - Verschluesseln von Dateien
@cindex Crypt File - Verschluesseln von Dateien

   Bei  der Verschlüsselung der Daten werden zwei Methoden verwendet.  Die
@code{ROT 13}-Methode   ist   ein  einfaches  Verschlüsselungsverfahren,  das  die
Buchstaben  eines  Textes  einfach  um  13  Zeichen  nach vorn oder zurück
gezählte Buchstaben macht.  Dazu ein Beispiel:  aus der Zeile

@example
            "Das ist ein Satz, der 1 mal kodiert werden soll!"

34 68 97 115 32 105 115 116 32 101 105 110 32 83 97 116 122 44 32 100 101
114 32 49 32 109 97 108 32 107 111 100 105 101 114 116 32 119 101 114 100
101 110 32 115 111 108 108 33 34
@end example

macht das @code{ROT 13}-Verfahren
@findex ROT 13-Verfahren

@example
            "Qnf vfg rva Fngm, qre 1 zny xbqvreg jreqra fbyy!"

34 81 110 102 32 118 102 103 32 114 118 97 32 70 110 103 109 44 32 113 114
101 32 49 32 122 110 121 32 120 98 113 118 114 101 103 32 106 114 101 113
114 97 32 102 98 121 121 33 34
@end example

   Darunter habe ich mal die entsprechenden ASCII-Kodierungen geschrieben.
Es ist deutlich zu erkennen, daß nur Buchstaben kodiert (verschoben)
werden.  Interpunktionen und Zahlen werden nicht berücksichtigt.

@findex zellularen Automaten
   Das zweite Verfahren basiert auf einen zellularen Automaten ähnlich dem
der  Spielsimulation @file{Life}.  Dabei wird ein Ring von Zellen angelegt, der
dann  durch  ein  vorgegebenes  Paßwort mit Nummern aufgefüllt wird.  Mit
diesen Nummern schließlich, wird eine Datei kodiert.  Diese Methode stammt
von  der  Verschlüsselungsmethode,  die  in Olaf "Olsen" Barthels
@file{term} zur
Kodierung des Telefonbuches verwendet wird.

@cindex Paßwort
   @code{Anm.:}   Das  Paßwort  ist  überaus  @emph{WICHTIG}!   Es  sollte  erstens  nie
vergessen  und zweitens ein echtes Paßwort verwendet werden.  Das
Paßwort-Gadget  sollte  also  nie leer sein, da sonst die Methode zufällige
Verschlüsselungen  erzeugt  und  diese Datei nie wieder restauriert werden
kann!

   Im weiteren werden die Bedienungselemente des @code{Crypt}-Windows vorgestellt.

@ifinfo
@menu
* Das Source-Gadget und Select::
* Das Dest-Gadget und Select::
* Das Passwd-Gadget::
* Das Crypt-ROT13-Gadget::
* Das Encrypt-Gadget::
* Das Decrypt-Gadget::
@end menu
@end ifinfo

@c --------------------------------------
@ifinfo
@node Das Source-Gadget und Select
@unnumberedsubsec Das Source-Gadget und Select
@end ifinfo
@cindex Das Source-Gadget und Select

@deffn Gadget {Source/Select} {}
Mit diesem Gadget kann mit einem FileRequester die Datei ausgewählt
werden, die verschlüsselt werden soll. Der Dateiname kann direkt
eingegeben werden oder über @code{Select} per FileRequester.
@end deffn

@c --------------------------------------
@ifinfo
@node Das Dest-Gadget und Select
@unnumberedsubsec Das Dest-Gadget und Select
@end ifinfo
@cindex Das Dest-Gadget und Select

@deffn String-Gadget {Dest/Select} {}
Mit diesem Gadget kann mit einem FileRequester die Datei ausgewählt
werden, in der die verschlüsselten Daten abgespeichert werden sollen.  Der
Dateiname kann direkt eingegeben werden oder über @code{Select} per
FileRequester.
@end deffn

@c --------------------------------------
@ifinfo
@node Das Passwd-Gadget
@unnumberedsubsec Das Passwd-Gadget
@end ifinfo
@cindex Das Passwd-Gadget

@deffn String-Gadget {Passwd} {}
Dieses String-Gadget enthält das Paßwort zum Verschlüsseln der Datei nach
dem Verfahren mit dem @code{zellularen Automaten}. Das Paßwort ist
zwingend erforderlich, jedoch wird die Korrektheit nicht überprüft. Wird
also keins angegeben, so ist das eine
@strong{Einbahnstraßen-Verschlüsselung}! Die Datei kann nie wieder
restauriert werden!
Dieses Gadget ist abgeschaltet, falls die @code{ROT13}-Methode verwendet
wird.
@end deffn

@c --------------------------------------
@ifinfo
@node Das Crypt-ROT13-Gadget
@unnumberedsubsec Das Crypt-ROT13-Gadget
@end ifinfo
@cindex Das Crypt-ROT13-Gadget

@deffn Cycle-Gadget {Crypt-ROT13} {}
Hiermit kann die Methode gewählt werden, mit der die Daten verschlüsselt
werden sollen.
@end deffn

@c --------------------------------------
@ifinfo
@node Das Encrypt-Gadget
@unnumberedsubsec Das Encrypt-Gadget
@end ifinfo
@cindex Das Encrypt-Gadget

@deffn Gadget {Encrypt} {}
Mit diesem Gadget wird die Verschlüsselung der Daten gestartet.
@end deffn

@c --------------------------------------
@ifinfo
@node Das Decrypt-Gadget
@unnumberedsubsec Das Decrypt-Gadget
@end ifinfo
@cindex Das Decrypt-Gadget

@deffn Gadget {Decrypt} {}
Mit diesem Gadget wird die Entschlüsselung der Daten gestartet.
@end deffn


@c --------------------------------------
@node List Hunks - Hunk-Struktur ermitteln
@section List Hunks - Hunk-Struktur ermitteln
@cindex List Hunks - Hunk-Struktur ermitteln

Es kommt immer mal vor, daß man sich für den Aufbau von Dateien
beschäftigt. Ein wichtige Dateiart ist hierbei die ladbare oder
ausführbare Datei. Diese Dateien können vom System in den Arbeitsspeicher
geladen und direkt ausgeführt werden.

Damit dieses korrekt vom System durchgeführt werden kann, müssen die
Dateien (Executables) einen bestimmten Aufbau besitzen, die sogenannte
@code{Hunk-Struktur}. Eine Beschreibung dieser Hunk-Struktur würde an
dieser Stelle zu weit führen. Hierbei sei auf weiterführende Literatur
verwiesen, die diese Struktur in allen Einzelheiten erläutert.

Mit dieser Utility kann die Hunk-Struktur jeder ladbaren Datei ermittelt
und angezeigt werden. Zu diesen Dateien gehören beispielsweise Libraries,
Executables, Font-Dateien und Objekt-Bibliotheken. Desweiteren können auch
Fehler in der Hunk-Struktur angezeigt werden. Bei einem eventuell
aufgetretenen Fehler wird noch fünfmal versucht, einen korrekten
Hunk-Eintrag zu finden, danach wird abgebrochen. Die Anzeige der Struktur
kann jederzeit mit einem Klick auf das @code{CloseGadget} abgebrochen werden.

Nun zu der Beschreibung der einzelnen Gadgets.

@ifinfo
@menu
* Das ListView::
* Das Load-Gadget::
* Das Save-List-Gadget::
@end menu
@end ifinfo

@c --------------------------------------
@ifinfo
@node Das ListView
@unnumberedsubsec Das ListView
@end ifinfo
@cindex Das ListView

@deffn ListView {ListView} {}
In diesem ListView wird die Hunk-Struktur in übersichtlicher Form
dargestellt. In der ersten Zeile stehen der Name der Datei und die Größe.
Dannach kommt hierarchisch angeordnet der Aufbau der Datei. Hier als
Beispiel das Hunk-Listing des Programms @file{@sc{RSys}} selbst.

@example
   File name : cprogs2:RSysDir/RSys
   File size : 140156

   hunk_header (o: $0,#0 t: $3F3,#1011)
     Count hunks : #3
     First hunk  : #0
     Last hunk   : #2
       Hunk #0, Length $1DE8C, #122508
       Hunk #1, Length $4D58, #19800
       Hunk #2, Length $4, #4

     hunk_code (o: $20,#32 t: $3E9,#1001)
       Size: $1DE8C, #122508 (MEMF_FAST)

       hunk_reloc32 (o: $1DEB4,#122548 t: $3EC,#1004)
        #17  offsets in Hunk #0
        #2   offsets in Hunk #1
     hunk_end (o: $1DF18,#122648 t: $3F2,#1010)

     hunk_data (o: $1DF1C,#122652 t: $3EA,#1002)
       Size: $365C, #13916 (MEMF_FAST)

       hunk_reloc32 (o: $21580,#136576 t: $3EC,#1004)
        #17  offsets in Hunk #1
        #868 offsets in Hunk #0
     hunk_end (o: $2236C,#140140 t: $3F2,#1010)

     hunk_bss (o: $22370,#140144 t: $3EB,#1003)
       Size: $4, #4 (MEMF_FAST)
     hunk_end (o: $22378,#140152 t: $3F2,#1010)
@end example
@end deffn

@c --------------------------------------
@ifinfo
@node Das Load-Gadget
@unnumberedsubsec Das Load-Gadget
@end ifinfo
@cindex Das Load-Gadget

@deffn Gadget {Load} {}
Es erscheint ein FileRequester, mit dem die ladbare Datei ausgewählt
werden kann. Danach wird die Struktur analysiert und als Liste angezeigt.
@end deffn

@c --------------------------------------
@ifinfo
@node Das Save-List-Gadget
@unnumberedsubsec Das Save-List-Gadget
@end ifinfo
@cindex Das Save-List-Gadget

@deffn Gadget {Save List} {}
Mit einem FileRequester kann eine Datei ausgewählt werden, in der die
Liste abgespeichert werden soll. Ist der @code{Text-Formatter} aktiviert,
erscheint nach einer postiven Auswahl das @code{Text-Formatter}-Window.
@end deffn


@c --------------------------------------
@node Find File - Suche nach Dateien
@section Find File - Suche nach Dateien
@cindex Find File - Suche nach Dateien

Es gibt viele Programme, die das komfortable Suchen nach Dateien in
Filesystemen unterstützen. Allerdings sind einige Programme mit Sonder- und
Spezialfunktionen überladen, sodaß man schon eine Menge Hintergrundwissen
einbringen muß, um die Programm überhaupt korrekt bedienen zu können. Dem
habe ich hoffentlich Abhilfe schaffen können. Einfach, klein und fein
macht diese Utility genau das, was sie soll: Dateien suchen.

   Diese  Utility  arbeitet  intensiv  mit  der  Funktion  @dfn{ExAll()} und den
Funktionen @dfn{MatchPattern()/MatchPatternNoCase()} der DOS-Library.
Dabei werden zuächst alle Dateien bestimmt und währenddessen untersucht,
ob es sich jeweils um ein Verzeichnis oder eine Datei handelt.  Trifft
dann auch das Suchmuster zu, wird es in das ListView eingetragen.

Hier eine Beschreibung der Bedienungselemente.

@ifinfo
@menu
* Das Devices-ListView::
* Das Selected Devices-ListView::
* Das Case-No case-Gadget::
* Sel all und Sel none::
* Das Start-Stop Gadget::
* Das Save found list-Gadget::
* Das Pattern-Gadget::
* Das Dateityp-Gadget::
* Das Found files-dirs-Gadget::
@end menu
@end ifinfo

@c --------------------------------------
@ifinfo
@node Das Devices-ListView
@unnumberedsubsec Das Devices-ListView
@end ifinfo
@cindex Das Devices-ListView

@deffn ListView {Devices} {}
   In  diesem ListView stehen alle angemeldeten Devices und Assigns.  Wenn
ein  Eintrag angeklickt wird, erscheint der Eintrag in dem danebenliegenden
ListView.
@end deffn

@c --------------------------------------
@ifinfo
@node Das Selected Devices-ListView
@unnumberedsubsec Das Selected Devices-ListView
@end ifinfo
@cindex Das Selected Devices-ListView

@deffn ListView {Selected Devices} {}
   Damit  werden  alle die Verzeichnisse angewählt auf denen Dateien gesucht
werden sollen.  Jeder Eintrag, der in den beiden ListViews angeklickt wird,
erscheint  automatisch  in  dem  anderen  ListView.  Bei einem Eintrag mit
einem   @file{-}  davor  handelt  es  sich  um  ein  Assign.   Ich  habe  diese
Kennzeichnung  deshalb so gewählt, weil ich dann entsprechend die Einträge
sortieren kann.  Erst die @emph{echten}, dann die @emph{logischen} Devices.
@end deffn

@c --------------------------------------
@ifinfo
@node Das Case-No case-Gadget
@unnumberedsubsec Das Case-No case-Gadget
@end ifinfo
@cindex Das Case-No case-Gadget

@deffn Cycle-Gadget {Case/No case} {}
   Hier kann gewählt werden, ob die Dateien @emph{case sensitive} (Groß-
und Kleinschreibung wird berücksichtigt) oder @emph{case insensitive}
(Groß- und Kleinschreibung werden nicht unterschieden) gesucht werden.
Lautet z.B.  das Suchmuster @file{Test.exe}, so wird mit @code{No case
sense} sowohl die Datei @file{Test.exe}, als auch die Datei
@file{TeSt.ExE} gefunden.
@end deffn

@c --------------------------------------
@ifinfo
@node Sel all und Sel none
@unnumberedsubsec Sel all und Sel none
@end ifinfo
@cindex Sel all und Sel none

@deffn Gadget {Sel all/Sel none} {}
   Damit  können  alle Einträge vom linken ListView in das rechte gebracht
werden  (@code{Sel  all}:   alle Verzeichnisse werden durchsucht) und umgekehrt
(@code{Sel none}:  Kein Verzeichnis soll durchsucht werden).
@end deffn

@c --------------------------------------
@ifinfo
@node Das Start-Stop Gadget
@unnumberedsubsec Das Start-Stop Gadget
@end ifinfo
@cindex Das Start-Stop Gadget

@deffn Gadget {Start/Stop} {}
   Wurden Verzeichnisse ausgewählt und im Pattern-Gadget ein Suchmuster
eingegeben, so ist dieses Gadget anwählbar und startet die Suche in den
Verzeichnissen des @code{Selected Devices}-ListViews.  Wird das Gadget
während eine Suche angeklickt, wird nach einer Sicherheitabfrage der
Suchvorgang abgebrochen.
@end deffn

@c --------------------------------------
@ifinfo
@node Das Save found list-Gadget
@unnumberedsubsec Das Save found list-Gadget
@end ifinfo
@cindex Das Save found list-Gadget

@deffn Gadget {Save found list} {}
   Nach der Anwahl erscheint ein Filerequester, in dem die Namen der
gefundenen Dateien in eine auszuwählende Datei abgespeichert werden können.
Ist der @code{Text-Formatter} aktiviert,
erscheint nach einer postiven Auswahl das @code{Text-Formatter}-Window.
@end deffn

@c --------------------------------------
@ifinfo
@node Das Pattern-Gadget
@unnumberedsubsec Das Pattern-Gadget
@end ifinfo
@cindex Das Pattern-Gadget

@deffn String-Gadget {Pattern} {}
   Hier kann ein Suchmuster (Dateiname oder Pattern) eingegeben werden.
Hierbei gelten die üblichen Wildcards und Suchmuster des AmigaOS.
@end deffn

@c --------------------------------------
@ifinfo
@node Das Dateityp-Gadget
@unnumberedsubsec Das Dateityp-Gadget
@end ifinfo
@cindex Das Dateityp-Gadget

@deffn Cycle-Gadget {Dirs + Files/Files/Directories} {}
   Hier  kann  gewählt  werden,  was für ein Typ von Datei gefunden werden
soll.
@end deffn

@c --------------------------------------
@ifinfo
@node Das Found files-dirs-Gadget
@unnumberedsubsec Das Found files-dirs-Gadget
@end ifinfo
@cindex Das Found files-dirs-Gadget

@deffn ListView {Found files/dirs} {}
   In  diesem  ListView erscheinen alle gefunden Einträge mit vollständiger
Pfadbezeichnung.   Diese  Liste  kann  nach  dem Anklicken des @code{Save found
list}-Gadgets in eine Datei abgespeichert werden.
@end deffn



@c --------------------------------------
@node Format Disk - Format-Schnittstelle
@section Format Disk - Format-Schnittstelle
@cindex Format Disk - Format-Schnittstelle

Mit @code{Format Disk} wird eine kleine Schnittstelle zum
@file{Format}-Befehl des AmigaDOS angeboten.  Die einzelnen Gadgets werden
im folgenden näher beschrieben.

@ifinfo
@menu
* Das Format-Gadget und Select::
* Das Devs-ListView::
* Das Disk label-Gadget::
* Das Icons-No Icons-Gadget::
* Das OFS-FFS-Gadget::
* Das No international-International-Gadget::
* Das Befehls-Gadget::
* Das Format-Gadget::
* Das Quick-Gadget::
@end menu
@end ifinfo

@c --------------------------------------
@ifinfo
@node Das Format-Gadget und Select
@unnumberedsubsec Das Format-Gadget und Select
@end ifinfo
@cindex Das Format-Gadget und Select

@deffn String-Gadget {Format-Gadget/Select} {}
   In diesem Gadget steht der vollständige Pfadprogrammname des zu
verwendenden @file{Format}-Befehls.  Dieser lautet üblicherweise
@example
   @file{SYS:System/Format}.
@end example
Mit  dem  nebenstehenden  @code{Select}-Gadget  kann  das
@file{Format}-Programm mit einem Filerequester ausgewählt werden.
@end deffn

@c --------------------------------------
@ifinfo
@node Das Devs-ListView
@unnumberedsubsec Das Devs-ListView
@end ifinfo
@cindex Das Devs-ListView

@deffn ListView {Devices} {}
   In  diesem ListView erscheinen alle formatierbaren Devices alphabetisch
geordnet.   Das  ausgewählte  Device  wird  dann im zugehörigen Textgadget
darunter angezeigt.
@end deffn

@c --------------------------------------
@ifinfo
@node Das Disk label-Gadget
@unnumberedsubsec Das Disk label-Gadget
@end ifinfo
@cindex Das Disk label-Gadget

@deffn Gadget {Disk label} {}
   Hier  wird  der Name des Mediums (voreingestellt und systemkonform
@file{Empty}) eingetragen.
@end deffn

@c --------------------------------------
@ifinfo
@node Das Icons-No Icons-Gadget
@unnumberedsubsec Das Icons-No Icons-Gadget
@end ifinfo
@cindex Das Icons-No Icons-Gadget

@deffn Cycle-Gadget {Icons/No Icons} {}
Mit dieser Einstellung wird festgelegt, ob der @file{TrashCan} samt Icon
nach der Formatierung auf die frische Diskette kopiert werden soll.
@end deffn

@c --------------------------------------
@ifinfo
@node Das OFS-FFS-Gadget
@unnumberedsubsec Das OFS-FFS-Gadget
@end ifinfo
@cindex Das OFS-FFS-Gadget

@deffn Cycle-Gadget {OFS/FFS} {}
Damit wird festgelegt, ob die Diskette mit dem neuen FastFileSystem des
AmigaOS 2.0 formatiert werden soll, oder im alten Datenformat.
@end deffn

@c --------------------------------------
@ifinfo
@node Das No international-International-Gadget
@unnumberedsubsec Das No international-International-Gadget
@end ifinfo
@cindex Das No international-International-Gadget

@deffn Cycle-Gadget {No international/International} {}
Hiermit wird das Handling der länderspezifischen Sonderzeichen in Dateinamen
festgelegt.
@end deffn

@c --------------------------------------
@ifinfo
@node Das Befehls-Gadget
@unnumberedsubsec Das Befehls-Gadget
@end ifinfo
@cindex Das Befehls-Gadget

@deffn String-Gadget {Befehls-Gadget} {}
   In  diesem  Stringgadget  ohne Namen steht der vollständige Befehl, der
nach Festlegung aller Kriterien als eigenständiger Prozeß ausgeführt wird.
@end deffn

@c --------------------------------------
@ifinfo
@node Das Format-Gadget
@unnumberedsubsec Das Format-Gadget
@end ifinfo
@cindex Das Format-Gadget

@deffn Gadget {Format} {}
Damit wird der @file{Format}-Befehl in einem Shell-Window aufgerufen.
@end deffn

@c --------------------------------------
@ifinfo
@node Das Quick-Gadget
@unnumberedsubsec Das Quick-Gadget
@end ifinfo
@cindex Das Quick-Gadget

@deffn Gadget {Quick} {}
Damit wird der @file{Format}-Befehl in einem Shell-Window aufgerufen.
Zuvor wird die Option @code{QUICK} an den Befehl drangehängt. Diese Option
startet die Formatierung des Directory-Bereiches der Diskette, also nicht
der ganzen Diskette.
@end deffn



@c --------------------------------------
@node Save Windows - IFF-Dateien von Windows
@section Save Windows - IFF-Dateien von Windows
@cindex Save Windows - IFF-Dateien von Windows

   Hierbei kam auch eine Routine zum Einsatz, die ich von Olsens
@file{term} geratzt habe.  Leider funktioniert Olsens Routine nicht mit
allen Fenstern, was an der Verwendung der Funktion @dfn{ClipBlit()} liegt, die
zwar die ausgewählte BitMap eines Windows berücksichtigt, aber die
überlappenden Bereiche anderer Fenster mit Datenmüll füllt.  Außerdem
verwendet Olsen die BitMap des zu einem Fenster gehörenden
Screen-RastPorts anstelle des Window-RastPorts.

   Dieses  Problem  der  Überlappung  habe  ich  durch  die Verwendung der
Routinen  @dfn{BltBitMap()}  und  @dfn{WindowToFront()}  behoben.   Damit  wird das zu
speichernde  Fenster  nach vorne geholt, weswegen auch keine Überlappungen
mit  anderen  Fenstern auftreten.  Dieses Verfahren funktioniert natürlich
nicht mit Backdrop-Fenstern.

   Es  muß  aber eine Möglichkeit geben, @emph{nur} den Fensterinhalt abspeichern
zu  können.   Immerhin kann es die @code{DumpRastPort}-Routine des
@file{printer.device}
auch.   Wer  also  sachdienliche  Hinweise  zu diesem Thema hat, möge sich
bitte mit mir in Verbindung setzen.

@ifinfo
@menu
* Das Windows-ListView::
* Das IFF File-Gadget::
* Das Rescan windows-Gadget::
@end menu
@end ifinfo

@c --------------------------------------
@ifinfo
@node Das Windows-ListView
@unnumberedsubsec Das Windows-ListView
@end ifinfo
@cindex Das Windows-ListView

@deffn Gadget {Windows} {}
   In  diesem  ListView  erscheinen alle geöffneten Windows, die im System
bekannt  sind.  Dabei werden auch die aufgeführt, die auf anderen Screens
als dem WorkBench Screen geöffnet wurden.
@end deffn

@c --------------------------------------
@ifinfo
@node Das IFF File-Gadget
@unnumberedsubsec Das IFF File-Gadget
@end ifinfo
@cindex Das IFF File-Gadget

@deffn Gadget {IFF File} {}
   Wurde ein Fenster angewählt, wird dieses Gadget aktiviert.  Nach dem
Anklicken erscheint ein Filerequester mit der Aufforderung, eine Datei
auszuwählen, in der das angewählte Window als IFF-Datei abgespeichert
werden soll.
@end deffn

@c --------------------------------------
@ifinfo
@node Das Rescan windows-Gadget
@unnumberedsubsec Das Rescan windows-Gadget
@end ifinfo
@cindex Das Rescan windows-Gadget

@deffn Gadget {Rescan windows} {}
   Damit kann die Window-Liste aktualisiert werden.  Dies geschieht nach dem
Abspeichern eines Windows automatisch.
@end deffn



@c --------------------------------------
@node Check Libraries - Testen der ROM-Libraries
@section Check Libraries - Testen der ROM-Libraries
@cindex Check Libraries - Testen der ROM-Libraries

Alle  im  ROM  angelegten Libraries werden gecheckt, ob sie von anderen
Programmen gepatcht wurden.  Sehr nützlich, um eventuell installierte Viren
aufzuspüren.

Dazu wird eine externe Datei verwendet, die in einem bestimmten Format
vorliegt. In dieser stehen alle Libraries und Library-Offsets drin, deren
Einträge im System überprüft werden sollen. Mit einem mitgelieferten
@file{AREXX}-Programm kann diese Datei einfach aus den @code{FD}-Files
erzeugt werden.


@c --------------------------------------
@node Search - Die Suchfunktion von RSys
@section Search - Die Suchfunktion von RSys
@cindex Search - Die Suchfunktion von RSys

Mit dieser komfortablen Suchfunktion hat der Benutzer die Möglichkeit, in
der Liste des Hauptfensters nach einem String suchen zu lassen. Die
Suchmethode ist einfach implementiert worden, d.h. es wird die Liste von
Anfang an (oder vom letzten gefundenen Eintrag aus) durchsucht und dabei
getestet, ob sich der eingegebene String als Teilstring im Listeneintrag
befindet.

War der Test erfolgreich, wird der gefundene Eintrag zum
obersten Eintrag im ListView gemacht. Der String ist hierbei
"case-sensitiv" einzugeben, Groß- und Kleinschreibung ist also zu
berücksichtigen! Die Taste @kbd{ESC} beendet die Eingabe und betrachtet
die Eingabe als abgebrochen, ebenso wie das @code{Cancel}- und das
Closegadget.

Nach der Anwahl des entsprechenden Menüpunktes erscheint ein kleines
Fenster mit drei Gadgets:

@ifinfo
@menu
* Das String-Gadget::
* Das Search-Gadget::
* Das Cancel-Gadget::
@end menu
@end ifinfo

@c --------------------------------------
@ifinfo
@node Das String-Gadget
@unnumberedsubsec Das String-Gadget
@end ifinfo
@cindex Das String-Gadget

@deffn Gadget {String-Gadget} {}
In diesem Gadget kann der Suchstring eingegeben werden. Groß- und
Kleinschreibung muß berücksichtigt werden. Die Länge des Strings ist
maximal 40 Zeichen lang. Nach dem Öffnen des Eingabefensters ist dieses
Gadget automatisch aktiv.
@end deffn

@c --------------------------------------
@ifinfo
@node Das Search-Gadget
@unnumberedsubsec Das Search-Gadget
@end ifinfo
@cindex Das Search-Gadget

@deffn Gadget {Search-Gadget} {Taste @kbd{S}}
Ist die Eingabe abgeschlossen, wird nach dem Gadget-Klick der String
intern übernommen und eine Vorwärtssuche gestartet.
@end deffn

@c --------------------------------------
@ifinfo
@node Das Cancel-Gadget
@unnumberedsubsec Das Cancel-Gadget
@end ifinfo
@cindex Das Cancel-Gadget

@deffn Gadget {Cancel-Gadget} {}
Die Eingabe wird abgebrochen. Der eventuell eingegebene String wird
@strong{NICHT} intern übernommen.
@end deffn

