home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The CDPD Public Domain Collection for CDTV 3
/
CDPDIII.bin
/
pd
/
utilities
/
monitors
/
scypmon
/
scypmon_deutsch.doc
< prev
next >
Wrap
Text File
|
1992-09-29
|
24KB
|
545 lines
Funktionsbeschreibung des Scypmon V1.6 (Update 30.09.92)
\======================================================/
Release:
--------
(C) by Jörg Bublath 1989-1992
Die Entwicklung dieses Programms hat mich einige Zeit gekostet, und
deshalb hätte ich auch gerne finanziell was davon. Ich persönlich
hasse diese "crippled unregistered versions" und werde dieses Druckmittel
NICHT anwenden um die Sharewaregebühr von (man höre und staune) DM 5,--
einzutreiben, sondern appelliere an die Anständigkeit der Nutzer. Ich
weiss, daß es einen HAUFEN Geld kostet alle Shareware-Programme, die man
besitzt auch wirklich zu bezahlen. Ich würde daher gerne einen Appell an
alle Schreiber von Shareware richten: Ich nenne das das "sharest du mich,
share ich Dich"-Konzept. Das heisst das Autoren anderer Sharewareprogramme
mir ihr Programm unentgeltlich zu Verfügung stellen, sowie ich es dann auch
bei ihnen tue - wer aber selber keine nützlichen Programe schreibt, der ist
hiermit aufgefordert dies zu ändern - oder zu blechen!
Ein eventueller Update-Service wird bei diesem gegenseitigen "sharen"
natürlich nicht erwartet. Von der Shareware-Gebühr ebenfalls verschont
bleiben die, die mit ihren Ideen und Test-Reports im besonderen Maße zur
Verbesserung von Scypmon beigetragen haben.
Die Dokumentation (evtl. der Source) und das Programm an sich dürfen ohne
Erlaubnis des Autors nicht modifiziert werden.
Scypmon darf nur vollständig kopiert werden. Folgende Files müssen im
Paket enthalten sein:
-ScypmonV1.6
-Scypmon_deutsch.doc (Deutsche Anleitung)
-Scypmon_english.doc (Englische Anleitung)
Zusätzlich: dis.library von Tobias Walter
Verwendung in PD-Serien ist nur gestattet, wenn außer Scypmon noch
möglichst viele andere Programme auf der Diskette (min. 80% gefüllt)
sind, und der Preis dieser Disk DM 3,-- nicht übersteigt.
Ich danke besonders:
--------------------
Bernhard Möllemann, für viele Bugreports und ein paar nützliche Codefetzen
Tobias Walter, für genauso viele reports,die dis.library und etwas Code
und allen anderen die mit ihren Anregungen viel geholfen haben!
MrScary, für Hilfe bei der englischen Anleitung.
Allgemeines:
------------
Der Monitor besitzt einen Full-Screen Editor wahlweise mit/ohne Einfügen,
mit einer vom Bildschirm unabhängigen Command-History (Buffer 1K).
Der Cursor wird mit den Cursor-Tasten oder durch Anklicken mit der Maus
bewegt. Wird dabei über den oberen oder unteren Rand hinausgegangen, wird
der Bildschirm in die entsprechende Richtung gescrollt.
In der Titelzeile wird angezeigt, ob man sich im Insert- oder Overwrite-
Modus (Einfügen, bzw. Überschreiben) befindet. Ist beim Scrolling eine
Ausgabezeile des "m", "i" oder "d" - Befehls auf dem Bildschirm, so wird
die nächste logische Zeile angezeigt. Das Drücken der Cursor-Tasten "hoch"
und "runter" mit "Shift" bewirkt ein Blättern der entsprechenden Ausgaben.
Folgende Tasten sind außerdem noch speziell belegt:
HELP (= CTRL-l) : Bildschirm löschen, Cursor in die linke obere Ecke
Shift + HELP (= CTRL-k) : löscht den Rest der Zeile ab Cursor-Position
Shift + DEL : Einfügen eines Leerzeichens
Nummernblock:
Shift + 7 : Cursor Home (obere linke Bildschirmecke)
Shift + 1 : Cursor End (untere linke Bildschirmecke)
Shift + 0 : Umschaltung Insert-Mode/Overwrite-Mode
Shift + . : Del
F1 : Jsr-Dissassemble In
Shift-F1 : Umschalten "m" und "d" in Ganzbilschirmanzeige
F2 : Jsr-Dissassemble Out (wird später erklärt)
Alt + Cursor Hoch : Vorhergehender History-Eintrag
Alt + Cursor Unten : Nachfolgender History-Eintrag
Während längere Ausgaben/Wartezeiten:
SPACE : Ausgabe anhalten, weiter wieder mit SPACE
CTRL-C : Ausgabe abbrechen
Linker Mausknopf : Niederhalten um Ausgabe anzuhalten
Exceptions:
-----------
Alle Exceptions außer #08 (Privilegsverletzung) und den trap #0x - Befehlen
werden vom Monitor abgefangen und mit "exception #xx at xxxxxx" quittiert,
sofern mit "-p" das Patchen der Exception-Vektoren aktiviert ist.
Ausserdem wird eine etwas detailliertre Information über den
abgestuerzten Task ausgegeben (siehe "e" Kommando) und dieser sollte dann
nicht mehr in der Taskliste vorhanden sein.
Sollte der Grund der Exception ein Totalabsturz sein so hilft auch hier
nur ctrl + amiga + amiga !
Aufruf:
-------
Aufgerufen wird der Monitor mit "scypmon [-bpdi] [Batchfile]".
scypmon [!] [-bdp] [-s <pubscreen>] [-f <fontname> <fontsize>] [batchfile]
"-b" bewirkt das der Monitor sich in den Hintergrund startet, d.h. daß
sein Window nicht aktiv geöffnet wird.
"-p" Um Abstuerze auch wirklich abzufangen muss mit dieser Option das
Patchen der Exceptionvektoren aktiviert werden, geschieht das nicht
macht das Betriebsystem mit den Gurus was es will.
"-d" verwendet (wenn vorhanden) die dis.library zum disassemblieren, damit
ist dann auch 68030 (spaeter hoeher?) code disassemblierbar. Der
Assembler bleibt ein nur 68000 Assembler, deshalb werden - auch wegen
der etwas anderen Syntax - die mit dis.library disassemblierten
Befehle manchmal nicht assembliert.
"-s" Mit 2.0+ können Public-Screen verwendet werden. Mit dieser Option
kann Scypmon auf jedem beliebigen Public-Screen geöffnet werden.
"-f" Zum Einsteller anderer Fonts als der Systemfont in den Preferences.
Das Batchfile kann ein mit z.B. "ed" editiertes Textfile sein, daß eine
Befehlsfolge enthält. Dies ist nützlich um bei Programmierung mit absoluten
Programmteilen Graphik- oder Sounddaten in den Speicher zu laden.
z.B.:
{
o 60000 7f000 00
l "graphic.data" 70000
l "sound.data" 60000
l "sinus-tabelle" 7e000
x
}
Dieses File löscht den Bereich von 60000 bis 7f000, lädt anschließend die
3 Programme in den Speicher und verlässt den Monitor danach sofort wieder.
Eine Vorbemerkung zur Speicherverwaltung des Monitors:
Um ein Alloc-Chaos zu verhindern unterstützt er Monitor die Amiga-Dos
AllocMem-Befehle auf eine besondere Weise. Es werden 8 Segmente (0-7)
gespeichert. Diese werden bei doppelter Verwendung oder beim Verlassen
des Monitors wieder freigegeben, somit wird vorgebeugt, daß man wie
z.B. beim C-Mon irgenwann keinen Überblick mehr über seinen Speicher hat,
und einen Reset machen muß um ihn zu säubern.
Menüs
-----
Die Optionen "-p" und "-d" koennen auch noch während der Monitor läuft
über Menüs eingestellt werden.
Die Hilfseite ist nur eine Syntaxzusammenfassung der Befehle und kein
Ersatz für diese Anleitung!
Die Befehle (in alphabethischer Reihenfolge):
---------------------------------------------
Alle Zahlen (auch beim Assemble/Dissassemble) müssen Hexadezimal eingegeben
werden (ein vorangestelltes "$" ist nicht notwendig)!
[ ] : Angaben in Eckigen Klammern müssen nicht angegeben werden.
( ) : Angaben in runden Klammern müssen angegeben werden.
start : Eine Hexzahl, die die Startadresse einer Operation angibt.
stop : Eine Hexzahl, die die Endadresse einer Operation angibt.
ziel : Eine Hexzahl, die die Startadresse eines Ziels angibt.
-> fuer start,stop und ziel können auch Variablen angegeben werden.
name : Ein ASCII-String.
segment: Ein Speichersegment zwischen 0 und 7.
Für Hexadressen können meist auch Variablen (^(a-z)) verwendet werden.
----------------------------------------------------------------------------
[?] (expression) : Calculate
Der Ausdruck wird berechnet und dezimal,hexadezimal,binär und als
4 Zeichen ASCII-String ausgegeben.
Innerhalb des Ausdrucks müssen Hex-Zahlen mit "$",Dez-Zahlen mit "#"
oder ohne Bezeichener, Binärzahlen mit einem "%" und maximal 4 ASCII-
Zeichen mit "<str>" oder '<str>' gekennzeichnet werden. Ausserdem kann
mit "&(Hexadresse)" der Inhalt einer Adresse und mit "^(a-z)" eine
Uservariable und mit folgende Systemvariablen in die Berechnung einbezogen
werden:
^s = Startadresse des letzen Load-Befehls
^e = Endadresse des letzen Load-Befehls
^S0-7 = Startadresse von den Segmenten 0-7
^L0-7 = Laenge von den Segmenten 0-7
Erlaubte Rechenarten sind: "+" , "-" , "*" und "/". Gesetze Klammern
werden berücksichtigt - es gilt Punkt vor Strich. Die Berechnung erfolgt
nur als Integer, evtl ergebene Kommastellen werden abgeschnitten.
Bsp.: ? $1000-(#100+%010)*2
----------------------------------------------------------------------------
^(a-z)=(expression) : Variablen-Zuweisung
Einer der 26 User-Variablen kann ein beliebiger Ausdruck (siehe "?")
zugewiesen werden.
Vorsicht: Die Variablen ^s und ^e werden vom System zur Speicherung der
Start- und Endadresse beim Laden verwendet.
Bsp.: ^a=^a+$20-(1+4)*5
----------------------------------------------------------------------------
<b (BlockNr) (start) [anzahl] [!] : Block Load
>b (BlockNr) (start) [anzahl] : Block Save
Lädt/Speichert ab (BlockNr) (anzahl) Bytes in den Speicher ab (start).
Wird keine Anzahl angegeben werden $200 Bytes = 1 Sektor geladen/gespeichert.
Als Device wird die mit "V" eingestellte Device verwendet.
Vorsicht: Alle Angaben müssen Hexadezimal gemacht werden !
Soll etwas in schon vom Dos belegten Speicher geladen werden, so muß die
Sicherheitsabfrage mit "!" übergangen werden.
Bsp.: <b 1a2 70000
----------------------------------------------------------------------------
<t (tr) (hd) (sc) (start) [anzahl] [!] : Track Load
>t (tr) (hd) (sc) (start) [anzahl] : Track Save
Lädt/Speichert ab track,head,sector in den Speicher ab (start). Es werden
(anzahl) (Default: $1600 Bytes = 1 Seite eines Tracks) Bytes von Diskette
geladen/auf Diskette gespeichert.
Als Device wird die mit "V" eingestellte Device verwendet.
Vorsicht: Alle Angaben müssen Hexadezimal gemacht werden !
"!"-Option wie bei "<b".
Bsp.: <t 0a 01 06 70000
----------------------------------------------------------------------------
a (start) : Assemble
Es wird die angegebene Adresse mit einem "," davor ausgegeben und der Cursor
auf die richtige Tabulator Position gesetzt, damit der Assembler den Befehl
erkennt. Statt diesem Befehl kann auch der "d"-Befehl mit überschreiben
verwendet werden.
Bsp.: a 70000
----------------------------------------------------------------------------
A (segment) (start) (len) : Allocate Absolute
Der Exec-Befehl AllocAbs (-204) wird durchgeführt. Vor dem Allocieren
werden unter diesem Segment belegte Daten freigeben.
Bsp.: A 0 70000 1000
----------------------------------------------------------------------------
A (segment) (len) : Allocate Memory
Bei Nichtangabe einer festen Adresse wird AllocMem (-198) durchgeführt,
sonst wie AllocAbs
Bsp.: A 0 1000
----------------------------------------------------------------------------
b (start) : Boot Checksumm
Berechnet die Checksumme des Bootblocks ($0400 Bytes !) und fügt diese ein.
Bsp.: b 70000
----------------------------------------------------------------------------
B (stop) : Breakpoint
Bei Adresse (stop) wird ein Breakpoint gesetzt danach wird bei dem im
"r"-Befehl eingestellten PC mit der Programmausführung begonnen.
Nach dem Breakpoint wird dieser wieder gelöscht und die Register ausgegeben.
Bsp.: B 70200
----------------------------------------------------------------------------
c (start) (stop) (ziel) : Compare
Der Bereich (start) bis (stop) wird mit (ziel) verglichen und alle
unterschiedlichen Bytes werden ausgegeben.
Bsp.: c 70000 71000 72000
----------------------------------------------------------------------------
C (start) : Calc Block CheckSumm
Berechnet die Checksumme eines Diskblocks und fügt diesen an der
entsprechenden Stelle ein.
Bsp.: C 70000
----------------------------------------------------------------------------
d (start) [stop] : Dissassemble
Der Angegebene Bereich wird dissassembliert. Bei der Ausgabe wird ein ","
vor jede Zeile geschrieben. Dies ist der Anhaltspunkt für die
Scrolling/Blättern-Funktion und für Assemble (es kann durch überschreiben
assembliert werden).
Bsp.: d 70000 70020
----------------------------------------------------------------------------
D [name] : Directory
Wird kein Name angegeben so wird das Directory des aktuellen Pfades, sonst
das unter dem angegebenen Pfad ausgegeben.
Bsp.: D df0:c
----------------------------------------------------------------------------
DC [name] : Directory Change
Der aktuelle Pfad wird geändert.
BSP.:DC df0:c
----------------------------------------------------------------------------
e "(taskname)" : Examine Task
e (taskadresse)
Der Angegebene Task wird gesucht und wird mit Name, Adresse, Priorität,
Signalen und Stackbelegungen (evtl: CLI-Kommando) ausgegeben.
BSP.:e "Scypmon 1.4"
----------------------------------------------------------------------------
f (start) (stop) (w1) [w2...] [!] : Find
Dieser Befehl sucht einen Ausdruck der sich aus Hexnibbles, "*" oder Strings
zusammensetzt. Nibbles die durch den Joker "*" ersetzt sind, werden als egal
angesehen. Folgt am Schluß noch ein "!" so wird ein Not-Find durchgeführt.
(Wird in einem Bereich nach "00 !" gesucht werden alle Stellen ausgegeben
an denen keine 00 steht).
Bsp.: f 70000 80000 01 "hello" 0* 4a3b "xx" 00
----------------------------------------------------------------------------
fd (start) (stop) (w1) [w2...] [!] : Find and Disassemle
Wie der normale Find-Befehl nur werden die gefundenen Stellen (falls sie
sich an geraden Adressen befinden) disassembliert - dann wird auf eine
Taste gewartet. Wird hier 'ESC' gedrückt so wird der Suchvorgang abge-
brochen, ansonsten wird weitergesucht und evtl. die nächste Zeile
disassembliert. Wird hierbei nur nach Befehlen mit bestimmten nachfolgenden
Argumenten gesucht, dann muß die entsprechende Anzahl von Jokern ('*')
vorangestellt werden, um eine sinnvolle Ausgabe zu erhalten.
Bsp.: fd 70000 80000 **** 00dff180
----------------------------------------------------------------------------
fr (start) (stop) (ziel) : Find Relative
Sucht von (start) bis (stop) nach einem Wort, daß Relativ auf (ziel) zeigt.
Dieses kann sich im Bereich von (ziel)-$8000 bis (ziel)+$8000 befinden.
Nützlich um Branches oder xxxx(pc)-Adressierungsarten zu finden. Nützt
nicht bei bxx.s !
Bsp.: fr 70000 72000 71000
----------------------------------------------------------------------------
F (segment) : Free Memory
Das angegeben Segment wird mit FreeMem (-210) oder UnLoadSeg freigegeben.
Bsp.: F 0
----------------------------------------------------------------------------
g (ziel) : Goto
Die Programmausführung wird bei der angegebenen Adresse unter Verwendung der
bei "r" angegebenen Register und Stacks fortgesetzt und kehrt nach einem
"rts" in den Monitor zurück.
Bsp.: g 70000
----------------------------------------------------------------------------
h : Show History
Die Command-History wird aufgelistet.
Bsp.: h
----------------------------------------------------------------------------
i (start) [stop] : ASCII Dump
Der angegebene Bereich wird als ASCII-Dump ausgegeben. Scrolling und
Blättern möglich (als Markierung wird ";" verwendet).
Bsp.: i 70000 70020
----------------------------------------------------------------------------
l ["](name)["] (start) [!] : Load absolute File
Das angegebene File wird an die angegebene Adresse geladen. Mit Hilfe des
"M"-Befehls wird geschaut wieviele Bytes freier Speicher verfügbar sind,
und nur soviele geladen. Soll von DOS belegeter Speicher überladen werden,
dann kann diese Kontrolle mit "!" ausgeschaltet werden.
Start- und Endadresse werden hierbei zur Weiterverwendung (besonders im
Batch-Betrieb) in den Variablen ^s und ^e abgespeichert.
Bsp.: l "program.obj" 70000
----------------------------------------------------------------------------
ld ["](name)["] (segment) : Load Dos-File
Das File wird mit LoadSeg geladen und der belegte Speicher in dem
angegebenen Segment gespeichert. Sollte dieses Segment bereits auf einen
Speicher zeigen, so wird dieser vorher freigegeben.
Bsp.: ld "dir" 0
----------------------------------------------------------------------------
m (start) [stop] : Memory Dump
Der angegebene Bereich wird als Hex-Dump ausgegeben. Jede Zeile wird durch
":" markiert, wodruch überschreiben und Scrolling/Blättern möglich ist.
Bsp.: m 70000 70020
----------------------------------------------------------------------------
M (start) : Show Free Memory
Beginnend ab der angegebenen Adresse wird nachgeschaut wieviel freie
Bytes, die von DOS nicht belegt sind, dort noch verfügbar sind.
Bsp.: M 30000
----------------------------------------------------------------------------
o (start) (stop) (w1) [w2..] : Occupy
Der Bereich (start) bis (stop) wird mit den angegebenen Werten gefüllt.
Bsp.: o 70000 71000 01 23 45
----------------------------------------------------------------------------
O [name] : Set Output Device
Eingabe des Device/Filenamens über die die Ausgabe beim "p"-Befehl läuft.
Wenn kein Name angegeben wird, so wird die aktuelle Output-Device ausgegeben.
(Default: prt:)
Das Outputfile wird beim ersten Verwenden des p-Befehls geöffnet und erst
beim Verlassen des Monitors oder durch Definition eines neuen Ausgabe-Files
wieder geschlossen.
Bsp.: O df0:testfile
----------------------------------------------------------------------------
p (beliebiger Befehl) : Print using Output Device
Bei jedem Befehl, bei dem ein "p" dem eigentlichen Befehl vorangeht, erfolgt
die Ausgabe nicht nur auf dem Bildschirm, sondern auch über die eingestellte
Output-Device (z.B. Drucker)
Bsp.: pd 70000 70200
----------------------------------------------------------------------------
P (start) : Print Text
Dieser Befehl kann dazu verwendet werden einen im Speicher stehenden Text
auf dem Bildschirm auszugeben. Mit Space kann die Ausgabe angehalten und
mit CTRL-C gestoppt werden. Der Text sollte mit $00 abgeschlossen sein.
Bsp.: P 70000
----------------------------------------------------------------------------
r : Register
Ausgabe der Register (werden beim "Goto" Befehl oder bei Trace und
Breakpoints verwendet. Die Register können durch Überschreiben geändert
werden.
Bsp.: r
----------------------------------------------------------------------------
s ["](name)["] (start) (stop) : Save absolute File
Der angegebene Speicherbereich wird abgespeichert.
Bsp.: s "objectcode" 70000 72000
----------------------------------------------------------------------------
S [segment] : Segment List
Das angegebene Segment, bzw. die gesamte Segmentliste wird ausgegeben.
Ist bei der Ausgabe eines Segments dieses der Zeiger auf ein geladenes
Amiga-Dos File, so wird die Segment-Liste des Amiga-Dos Files angezeigt.
Bsp.: S 0
----------------------------------------------------------------------------
t (start) (stop) (ziel) : Transfer
Der Bereich (start) bis (stop) wird nach (ziel) verschoben.
Bsp.: t 70000 71000 71000
----------------------------------------------------------------------------
T [start] : Trace
Bei Adresse (start) oder bei Nichtangabe beim eingestellten PC wird ein
Befehl disassembliert und angezeigt. Durch Druck auf bestimmte Tasten
werden die Trace-Aktionen bestimmt:
return: Den Befehl ausführen und den nächsten anzeigen
x: Trace-Modus verlassen
r: Register anzeigen
n: Es wird ein Breakpoint einen Befehl weiter gesetzt und
die Ausführung erst dort wieder gestoppt. Nützlich für
"dbf"-Schleifen u.Ä., damit man die Schleife nicht x-mal
"durchtracen" muß.
j: Der nächste Befehl wird ausgeführt, danach wird ein Langwort
vom Stack gelesen und an diese Adresse ein Breakpoint gesetzt.
Effekt: Ist der Aktuelle Befehl ein jsr/bsr so wird erst nach
Ausführung der ganzen Unterroutine wieder in den Trace-Mode
zurückgekehrt, ansonsten nach dem nächsten rts. Achtung:
Sollte nur so angewendet werden, wenn man sich sicher sein
kann, daß nichts anderes auf dem Stack liegt als die
Rücksprungadresse, sont gibt's schnell einen Absturz!
g: Die Befehlsausführung wird am aktuellen PC fortgesetzt
und kehrt nach dem nächsten rts in die Monitor zurück.
Bsp.: T 70000
----------------------------------------------------------------------------
V <devicename> : Device
Ändert die Device der Track-Befehle auf die angegebene Device (Default: df0).
Bsp.: V df0
----------------------------------------------------------------------------
w (start) ["](name)["] : Write ASCII
Der angegebene String wird ab (start) als ASCII-Code im Speicher abgelegt.
Bsp.: w 70000 "hello world"
----------------------------------------------------------------------------
x : Exit
Verläßt den Scypmon. Belegter Speicher durch "A" oder "ld" wird wieder
freigegeben.
Bsp.: x
----------------------------------------------------------------------------
Jsr-Disassemble
---------------
Diese Option erleichtert das Auseinandernehmen von (besonders C-)Programmen.
Beim Drücken der F1-Taste wird der Assembler-Ausdruck, der in der aktuellen
Cursorzeile steht, ausgewertet (und zwar der Source-Teil), dann wird die
Adresse der aktuellen Zeile auf einen 16 Einträge fassenden Ringpuffer
abgelegt. Schließlich wird ab der Adresse, die der Ausdruck ergab, neu
disassembliert. Folgende Ausdrücke werden anhand der gespeicherten Register
berechnet: $xxxx,$xxxx(pc),$xx(ax),$xx(ax,dx),$xx(ax,ax).
Sollte es sich bei dem Aufrufenden Befehl nicht um einen jsr,jmp oder branch
Befehl handeln, erfolgt die Ausgabe mit dem "m"-Befehl.
Drueckt man die F1-Taste waehrend man in einer "m"-Zeile steht so wird
die Adresse unter dem Cursor, also die naechsten 8 Digits als Long-Adress,
zum Aufruf eines erneuten "m" verwendet.
Auf allen anderen Zeilen bewirkt F1, das ab Cursor eine Hexadresse
eingelesen und diese mit "m" angezeigt. (Achtung: Mit F2 gehts hierbei
NICHT wieder zurück).
Beim Drücken der F2-Taste wird dieser Vorgang wieder rückgängig gemacht.
Der "Stack" faßt 16 Enträge. Beim 17ten Eintrag wird der 1ste wieder über-
schrieben. Man kann also sooft man will "F1" drücken, aber nur 16-mal "F2".
Sollte man mit der Auswahl ob "m" oder "d"-Anzeige nicht zufrieden sein,
kann mit Shift-F1 umgeschaltet werden.
Verbesserungen seit V1.5:
-------------------------
Window! Sizable! Fonts! Public-Screen! Noch kompatibler! Besseres
Trackloading....
Final Remarks
-------------
Beim Testen wurden zwar keine Fehler mehr festgestellt, aber die eine
oder andere Bug bleibt immer noch drin, deshalb bin ich für Anregungen
und Verbesserungen immer aufgeschlossen.
Also, wenn ein Fehler auftritt, eine Disk inklusive Rückporto und genauer
Fehlerbeschreibung/Anregung an nachstehende Adresse und Sie erhalten
sobald möglich die neuste Version:
Jörg Bublath
Holzheimerstr. 4, E07
W-8390 Passau
Germany
Unter Email bin ich unter
"bublath@kirk.fmi.uni-passau.de" oder
"bublath@eva.fmi.uni-passau.de" oder
"rzbublat@ibm.rz.uni-passau.de" zu erreichen.