\documentstyle[11pt,german,titlepage]{article}

\addtolength{\topmargin}{-1cm}
\addtolength{\textheight}{2cm}
\addtolength{\textwidth}{5mm}
\parindent 0pt 
\parskip 2ex plus 0.5ex minus 1ex

\pagestyle{headings}
\frenchspacing
\title{{\Huge\bf S Y S M O N}\\
        \vspace{3em}Der {\sc Atari-St} System Monitor\\
        \vspace{3em}\Large Shareware Version 1.02
      }
\author{Karsten Isakovi\'c}
\begin{document}
\maketitle
\tableofcontents
\frenchspacing

\newpage
\section{Installation}
\subsection{Unterst"utzte Hardware}
\label{Sec.Hardware}
Der {\sc SysMon} l"auft in Schwarz/Wei"s und Farbe, benutzt aber eigene Routinen
zur Ausgabe auf einer 2.Bildschirmseite. 

{\sc SysMon} l"auft nicht nur in den Standard\-auf\-l"osungen. Die
{\sc Matrix} Schwarz\-wei"s- und Farb- Gro"s\-bild\-schirme und die 
{\sc Maxxon-Mge} Grafikkarte werden in soweit
unter\-st"utzt, da"s alle Ausgaben auf dem als Zweitmonitor
installierten SM124 stattfinden und so ein komfortables Debugging
m"og\-lich ist.

Die verschiedenen {\sc OverScan}\footnote{Der Gro"sbildschirm des kleinen
Mannes, eine Hardware Erweiterung, die bei geringen Bauteile
Kosten 50--80 \% mehr
Bildschirmpunkte liefert. } Erweiterungen werden erkannt und unterst"utzt.

Au"ser der Ausgabe auf dem Monitor ist auch das Remote Debugging mit 
Aus- und Eingabe "uber die Modem-,Printer- oder Midi- Schnittstelle
m"oglich. 

Siehe Abschnitt \ref{Sec.Special} .

\subsection{Unterst"utzte TOS-Versionen}
\label{Sec.Software}
Der {\sc SysMon} arbeitet mit allen {\sc Tos} Versionen.
Bei Versionen, die nicht in Tabelle \ref{Tab.Versions}
aufgef"uhrt sind, mu"s {\sc SysMon} erst die undokumentierten System-
Variablen herausfinden. Siehe Abschnitt \ref{Sec.NewTos} .
{\small
\begin{table} [htb]
\centering
\begin{tabular}{|l|l|l|l|}
 \hline 
   Art & Version  &  Datum   & Bemerkung\\ \hline
   ROM &  030     & 23.05.89 & {\sc Tt-Tos} \\
   ROM &  1.6     & 29.07.89 & {\sc Ste-Tos} \\
   ROM &  1.4     & 06.04.89 & \\
   ROM &  1.4     & 22.02.89 & \\
   RAM &  1.4     & 06.04.89 & reloziertes {\sc Rom-Tos} \\
   RAM &  1.4     & 18.05.88 & {\sc Beta-Tos}\\
   RAM &  1.4     & 22.02.88 & \\
   ROM &  1.2     & 22.04.87 & {\sc BlitterTos} \\
   RAM &  1.2     & 22.04.87 & {\sc Kaos-Tos} \\
   ROM &  1.0     & 06.02.86 & \\
   RAM &  1.0     & 06.02.86 & \\
   RAM &  1.0     & 20.11.85 & \\
   RAM &  1.0     & 29.05.85 & {\sc Mushroom-Tos}\\
 \hline
\end{tabular}
\caption{Getestete TOS-Versionen}
\label{Tab.Versions}
\end{table}}

\subsection{Starten von SysMon}
\label{Sec.Starten}
{\sc SysMon} kann entweder aus dem {\sc Auto}-Ordner oder vom Desktop gestartet
werden.
Das Programm belegt ca 140 K an Programm Code und ca 75 K Daten. 
Aufgerufen wird {\sc SysMon} durch die Tastenkombination RechtsShift-Help.
Verlassen wird {\sc SysMon} durch Dr"ucken der {\sc Space}-Taste oder durch den
Men"u\-punkt {\sc Quit}.

H"alt man w"ahrend des Programmstarts die Alternate-Taste gedr"uckt, so
bricht die Installation ab. Das Laden der {\sc Sys\_Mon.Inf} Datei 
kann durch Gedr"uckt\-halten der Control-Taste unterbunden werden. 

\section{Allgemeine Bedienung}
\label{Sec.Bedienung}

\subsection{Die Men"uleiste}
\label{Sec.Menu}
Der Zustand des {\sc SysMon} wird durch Gro"s- / Kleinschrift der
Men"u\-punkte angezeigt. Der Aufbau der Men"uzeile ist wie folgt :
\begin{itemize}
\item Der Men"u\-punkt SysMon wird gro"s geschrieben, wenn das Tracen "uberhaupt
angeschaltet ist. Wird er klein geschrieben, werden alle anderen
Einstellungen ignoriert.
\item Die Men"u\-punkte {\sc Aes}, {\sc Vdi}, {\sc Gemdos},
 {\sc Bios}, {\sc Xbios} und {\sc LineA} stellen die
m"oglichen Gruppen der Betriebssystem Aufrufe dar. Nur wenn ein Men"u\-punkt
gro"s geschrieben ist, k"onnen die zu dieser Gruppen geh"orenden Funktionen
getraced werden.
\item Die Nummer und der Kommentar des aktiven Setups werden ausgegeben.
     Siehe Abschnitt \ref{Sec.Configuration}.
\item Der Modus von {\sc SysMon} wird ausgegeben. Siehe Abschnitt \ref{Sec.Modi}.
\end{itemize}

Unter dem Men"u\-punkt {\sc SysMon} werden alle zus"atzlichen M"oglichkeiten des
{\sc SysMon} angeboten. Eine "Ubersicht ist in Kapitel \ref{Sec.Uebersicht} 
zu finden.

Innerhalb der Men"u\-punkte {\sc Aes} bis {\sc LineA}
gibt es jeweils eine
Liste der Unterfunktionen, wobei die Ausgabe jeder Funktion gem"a"s Tabelle 
\ref{Tab.UseList} an/bzw ausgeschaltet werden kann. Nur wenn die Funktion mit
einem Haltepunkt oder dem Trace Symbol versehen ist, werden die
Funktionsaufrufe ausgegeben.

\subsection{Die Tastaturkommandos }
\label{Sec.Tasten}
{\sc SysMon} wird komplett mit der Tastatur bedient, die einzelnen Men"u\-punkte
werden durch Dr"ucken des Anfangsbuchstabens oder durch Wandern mit den
Cursortasten angew"ahlt.

Die Oberfl"ache von {\sc SysMon} ist mit einem einfach Fenstersystem
ausgestattet. Innerhalb eines Fensters wird die aktuelle Zeile durch einen
invertierten Balken dargestellt. Die Cursorposition wird f"ur jedes Fenster
getrennt verwaltet,
so da"s der Cursor beim erneuten Aufrufs an der Stelle steht, wo er beim
Verlassen des Fensters stand. Der Cursor kann mit den Cursortasten rauf
und runter bewegt werden. Zusammen mit der Shifttaste kann auch seitenweise
gewandert werden.
{\small
\begin{table} [htb]
\centering
\begin{tabular}{|l|l|l|}
 \hline 
   Zustanz &  Taste                     & Bedeutung \\ \hline
           & $\Leftarrow \Rightarrow$ & Wechseln des Men"u\-punktes \\
           & $\Uparrow   \Downarrow $ & Rauf bzw Runter \\
   Shift   & $\Uparrow   \Downarrow $ & Seitenweise Rauf / Runter \\
   Control & $\Uparrow   \Downarrow $ & Ausw"ahlen eines Blockes \\
           & Home                     & Anfang \\
   Shift   & Home                     & Ende \\
 \hline
\end{tabular}
\caption{Bewegungs Kommandos}
\label{Tab.Listen}
\end{table}}
In Funktionslisten kann man mit den Tasten der Tabelle \ref{Tab.UseList}
den Zustand der jeweiligen Funktion "andern. Es ist aber auch m"oglich
zusammen mit der Cursortaste die Controltaste gedr"uckt zu halten und
dadurch einen Block aus zu w"ahlen, dessen Zustand dann auf einmal
beeinflu"st werden kann.
{\small
\begin{table} [htb]
\centering
\begin{tabular}{|l|l|l|}
 \hline 
   Taste  & Darstellung  & Bedeutung   \\ \hline
   Delete & Leerzeichen  & Ignorieren  \\
   Insert & Pluszeichen  & Anzeigen    \\
   Tilde  & Kreiszeichen & Haltepunkt  \\ 
 \hline
\end{tabular}
\caption{SysMon Kommandos }
\label{Tab.UseList}
\end{table}}
In manchen Fenstern kann man die Darstellungsart der Informationen
beeinflussen, bzw. Informationen ausblenden. Die Umschaltung
der einzelnen Optionen erfolgt "uber Tasten, die oben rechts im 
Fensterrand angezeigt werden. Eine Option ist eingeschaltet, wenn
der Kennbuchstabe gro"s geschrieben wird. In der Tabelle \ref{Tab.Option}
sind weitere Kommandos im Zusammenhang mit Optionen aufgef"uhrt.
{\small
\begin{table} [htb]
\centering
\begin{tabular}{|l|l|l|}
 \hline 
   Zustanz &  Taste                     & Bedeutung \\ \hline
   Control & $\Uparrow \Downarrow $ & Zum n"achsten Block springen \\
           & Delete                 & Alle Optionen l"oschen  \\
           & Insert                 & Alle Optionen setzen    \\
 \hline
\end{tabular}
\caption{Option Kommandos}
\label{Tab.Option}
\end{table}}
Jedes Fenster von {\sc SysMon} kann mit der {\sc Undo}-Taste
wieder geschlo"sen werden.
{\small
\begin{table} [htb]
\centering
\begin{tabular}{|l|l|}
 \hline 
   Taste      & Umschaltung von \\ \hline
   {\sc Esc}  & Tracer global \\ 
   {\sc Tab}  & Tracer mode \\
   F1--F10    & Setup \\ \hline
   $\diamond$A  & {\sc Aes}    \\
   $\diamond$V  & {\sc Vdi}    \\
   $\diamond$G  & {\sc Gemdos} \\
   $\diamond$B  & {\sc Bios}   \\
   $\diamond$X  & {\sc Xbios}  \\
   $\diamond$L  & {\sc LineA} \\ \hline
   $\diamond$R  & Return address \\
   $\diamond$C  & Caller name\\
   $\diamond$N  & Number of function\\ 
   $\diamond$O  & Output stack pointer\\
   $\diamond$F  & Flag supervisor mode \\
   $\diamond$E  & Extra output \\ 
   $\diamond$W  & WatchBypass \\ \hline
   $\diamond$P  & {\sc Pd}-changes \\
   $\diamond$T  & Trap-changes \\ \hline
   Undo         & Fenster schlie"sen \\
   Help         & Hilfe Fenster \\
   $\diamond$Z  & Zap (Bildschirm l"oschen) \\ \hline
\end{tabular}
\caption{Globale Tastenkombinationen}
\label{Tab.Tasten}
\end{table}}
Die erweiterten Steuerkommandos der Tabelle \ref{Tab.Tasten} gelten
innerhalb aller Fenster und Men"us. Diese Kommandos sind so aufgebaut,
 da"s sie aus dem
gleichzeitigen Dr"ucken der Controltaste und dem Anfangsbuchstaben
der auszul"osenden Funktion bestehen. 
\begin{description}
\item[ESC] schaltet global den {\sc SysMon} an oder aus.
\item[TAB] "andert den Modus des {\sc SysMon}.
\item[F1--F10] wechselt das aktuelle Setup.
\item[$\diamond$A--$\diamond$L] schaltet das Tracen der jeweiligen
 Funktionsgruppe um.
\item[$\diamond$R--$\diamond$W] bestimmt das Aussehen der Ausgabezeilen.
\item[$\diamond$P \& $\diamond$T] schalten die Erweiterten Ausgaben um.
\item[$\diamond$Z] l"oscht den {\sc SysMon} Bildschirm.
\item[ * auf dem 10er Block ] schreibt den Inhalt des Fensters in das
Protokollfile, falls ein solches ge"offnet ist.
\end{description}
Der {\sc SysMon} wird durch Dr"ucken der {\sc Space}-Taste wieder 
verlassen.

\subsection{Ausblenden von Funktionen}
\label{Sec.Ausblenden}
Das Ausblenden von Funktionsaufrufen ist in 4 Ebenen m"oglich.
\begin{itemize}
\item Die oberste Ebene ist das Ein- bzw. Ausschalten des {\sc SysMon} mit
  der {\sc Esc}-Taste.
\item Die n"achste Ebene ist die Auswahl der Programme, die getraced werden
  sollen. Das zugeh"orige Fenster findet man im {\sc SysMon}-Men"u unter dem
  Men"u\-punkt {\sc Programms}. Siehe Abschnitt \ref{Sec.Programms}.
\item Die vorletzte Ebene ist die Auswahl der Funktionsgruppen, die 
  getraced werden sollen, mit den globalen Tasten $\diamond$A--$\diamond$L.
\item Die letzte Ebene ist die Auswahl der Funktionen, die ausgegeben werden
  sollen. 
\end{itemize}

\subsection{Die Modi des SysMon}
\label{Sec.Modi}
{\sc SysMon} bietet 4 verschiedene Modi des Tracens an. 
\begin{description}
\item[RUN] In Modus werden alle Funktionen getraced und ausgegeben ohne
  Anzuhalten.
\item[STEP] In diesem Modus wird nach jedem Funktionsaufruf angehalten und
  man landet im {\sc Step}-Men"u. Siehe Abschnitt \ref{Sec.Step} .
\item[WAIT] In diesem Modus werden keine Ausgaben gemacht. Erst wenn eine
  Funktion die mit einem Haltepunkt versehen ist, aufgerufen und 
  zur"uckgekehrt ist, landet man im {\sc SysMon}-Men"u. 
\item[HALT] In diesem Modus landet man sofort hinter dem n"achsten
  Funktionsaufruf im {\sc SysMon}-Men"u. Dabei ist es ist egal, ob die Funktion
  mit einem Haltepunkt versehen ist oder nur normal getraced wird.
\end{description}

\subsection{Das STEP-Men"u}
\label{Sec.Step}
Beim Tracen im {\sc Step}-Modus h"alt {\sc SysMon} nach jeder ausgegebenen
Funktion an und wartet auf eine Eingabe. Dieses {\sc Step}-Men"u wird
durch Ausgabe des aktuellen Modus angezeigt.
\begin{description}
\item[M - Men"u] betritt das {\sc SysMon} Men"u. Wird dieses wieder durch 
  {\sc Space} verlassen, landet man wieder im {\sc Step}-Men"u. 
\item[0--9] w"ahlt, genauso wie die 10 Funktionstasten, das aktuelle Setup
  aus. Die Tasten 0--9 sind notwendig, da die Funktionstasten nicht "uber
  alle Eingabedevices eingegeben werden k"onnen.
\item Es gelten alle in der Tabelle \ref{Tab.Tasten} 
  aufgef"uhrten Controltasten Kombinationen.
\item Jede andere Taste verl"a"st das {\sc Step}-Men"u wieder.
\end{description}
Um das stepweise Tracen nicht zu einer ewigen Tastendr"uckerei
ausarten zu lassen kann man im {\sc Display} Men"u unter {\sc Step}-Filter
einen Wert angeben, der bestimmt, wieviele Zeilen ausgegeben werden sollen,
 ohne das {\sc Step}-Men"u wieder zu betreten.

\subsection{Umschalten des Bildschirms}
\label{Sec.Bildschirm}
{\sc SysMon} legt f"ur seine Ausgaben eine 2. Bildschirmseite an. Diese wird
beim Betreten des {\sc SysMon}-Men"us automatisch angezeigt. Diese 2. Seite
kann auch jederzeit beim Tracen durch Dr"ucken der rechten Shifttaste
angezeigt werden.
Wenn der Tracer ausgeschaltet ist, ist auch die rechte Shifttaste
nicht aktiv.

M"ochte man haupts"achlich die Ausgaben des {\sc SysMon} sehen, 
kann man durch gleichzeitiges Dr"ucken der rechten Shifttaste und
der Capslock Taste den aktuellen Bildschirm umschalten. Nun wird der
Orginal-Bildschirm beim Dr"ucken der rechten Shifttaste dargestellt.

Bei einem Farbmonitor wird auf dem {\sc SysMon}-Bildschirm immer die mittlere
Aufl"osung benutzt. Au"serdem wird die Farbpalette angepa"st. 

Unter {\sc AutoSwitch-OverScan}\footnote{Neuste Hardware von {\sc OverScan}, die ein
automatisches Umschalten der Aufl"osung erlaubt.}\ wird immer derjenige
Modus benutzt, der beim Starten von {\sc SysMon} vorlag.

Bei einem Farbmonitor mit {\sc OverScan} wird also durch Dr"ucken der
Shifttaste unter Umst"anden der AutoSwitch Zustand, die Aufl"osung 
und auch die Farbpalette umgeschaltet.

Bei manchen Anwendungen kann es sein, da"s die Ausgaben zu schnell "uber
den Bildschirm laufen,so da"s man diese nicht mehr lesen kann. Deshalb kann
man im {\sc SysMon}-Men"u unter dem Men"u\-punkt {\sc Display} die Pausenfunktion
anschalten. Ist die Pausenfunktion angew"ahlt, werden die Ausgaben --- und
damit auch der Rechner --- beim Druck auf die rechte Shifttaste angehalten,
und man kann die Ausgaben in Ruhe lesen.

\subsection{Setups}
\label{Sec.Setup}
{\sc SysMon} bietet 10 verschiedene Setups an, zwischen denen durch Druck
auf die Funktionstasten F1--F10 umgeschaltet werden kann. Da fast alle
Einstellung in {\sc SysMon} vom Setup abh"angig sind, hat man es
nach dem Umschalten mit einem komplett anderen {\sc SysMon} zu tun.
Dadurch ist es m"oglich sich f"ur jeden Anwendungsfall ein neues
Setup anzulegen, auf das man sp"ater bei Bedarf zur"uckgreifen kann.

Im einzelnen werden beim Wechseln des Setups folgende Werte umgeschaltet :
\begin{itemize}
\item Der Zustand der einzelnen Programme.
\item Der Zustand der einzelnen Funktionsgruppen.
\item Der Zustand der einzelnen Funktionen.
\item Der Tracemodus.
\end{itemize}

\section{Das SysMon Men"u}
\label{Sec.SysMenu}
\subsection{"Ubersicht}
\label{Sec.Uebersicht}
Der Men"u\-punkt {\sc SysMon} bietet eine weitere Liste von Untermenus an. Diese
k"onnen entweder durch Dr"ucken des Anfangsbuchstabens oder mit den
Cursortasten und Dr"ucken der Returntaste angew"ahlt werden.
\begin{description}
\item[C - Configuration]  "Ubersicht "uber alle 10 Setups.
\item[P - Programms] Liste der geladenen Programme.
\item[M - Memory] Liste der Speicherbereiche.
\item[T - Traps] Liste der Systemvektoren.
\item[O - OS Vars] Liste der Systemvariablen.
\item[D - Display] Einstellungen, die die Ein / Ausgabe betreffen.
\item[F - proFile] Kommandos im Zusammenhang mit dem Profiling.
\item[U - Used Traps] Anzeige der {\sc SysTable} Tabellen.
\item[N - Notepad] Eingabem"oglichkeit f"ur Kommentare.
\item[R - ReRead] Neueinlesen der {\sc Sys\_Mon.Inf} Datei. 
\item[W - Write]  Schreiben der {\sc Sys\_Mon.Inf} Datei.
\item[Q - Quit] Beenden von {\sc SysMon}.
\end{description}

\subsection{C - Configuration}
\label{Sec.Configuration}
Das {\sc Configuration}-Men"u ist eine "Ubersicht "uber alle 10 Setups.
Die Umschaltung der einzelnen Felder erfolgt mit den globalen
Tasten, die der Tabelle \ref{Tab.Tasten} zu entnehmen sind.

Jede Zeile des Fensters hat folgenden Aufbau :
\begin{itemize}
\item Zuerst kommt der Name des Setups, der editiert werden kann.
  Um Zeichen zu l"oschen ist nur die Backspacetaste zugelassen.
\item Beim Tracermodus wird entweder Run, Step ,Wait oder Halt ausgegeben.
\item Der Zustand der einzelnen Betriebssystemfunktionen wird durch 
  die Anfangsbuchstaben verdeutlicht, bei AGX wird folglich {\sc Aes},
  {\sc Gemdos} und {\sc Xbios} getraced.
\item Das Format jeder Ausgabe w"ahrend des Tracens wird durch die
  Anfangsbuchstaben der Optionen ausgegeben. Hierbei steht R f"ur 
  ReturnAddr, C f"ur Caller, N f"ur Number, 
  O f"ur OutputStack, F f"ur FlagSuper, E f"ur Extra und W f"ur
  WatchBypass.
\item Der Zustand der "Uberwachungsfunktionen f"ur {\sc Pd}-Wechsel und Trap-Diebst"ahle
  werden mit den Buchstaben P und T ausgegeben.
\end{itemize}
Das aktuelle Setup kann mit den Cursortasten oder durch die
Funktionstasten gewechselt werden. Fast alle Einstellungen in {\sc SysMon} sind
abh"angig vom Setup . Siehe Abschnitt \ref{Sec.Setup}.

\subsection{P - Programms}
\label{Sec.Programms}
Dies ist eine Liste der geladenen Programme. F"ur jedes Programm kann mit
den Tasten aus Tabelle \ref{Tab.UseList} bestimmt werden, ob es getraced werden soll.

Die Ausgabezeilen des Fensters sind folgenderma"sen aufgebaut :
\begin{itemize}
\item Zuerst wird der Speicherbereich des Programms ausgegeben.
\item Bei den Programmnamen gelten folgende Konventionen
  \begin{itemize}
  \item Der Programmname wird gro"s geschrieben, wenn {\sc SysMon} der genaue 
        Name bekannt ist.
  \item Die Namen in gemischter Gro"s/Kleinschreibung werden
        von {\sc SysMon} vergeben, wenn das Programm eine {\sc Xbra}-Kennung benutzt. 
  \item Die Namen Acc\_\_A, Auto\_A, Prg\_\_A usw. werden vergeben, wenn {\sc SysMon}
        nur den Typ des Programms erkennt.
  \end{itemize}
  Ein Name in gemischter Schreibweise kann editiert werden. Die 
  Editierm"oglichkeit eines Names ist auch an der Klammerung in 
  $\gg$\ldots$\ll$ zu erkennen. Es k"onnen nur Gro"sbuchstaben
  eingegeben werden. Um Zeichen zu l"oschen ist nur die Backspace-Taste
  zugelassen. Ein leerer Name ist unzul"a"sig und wird daher durch 
  Fragezeichen ersetzt.
\item  Der Trace Zustand des Progamms wird mit den "ublichen Symbolen
       aus Tabelle \ref{Tab.UseList} angezeigt.
\item  Beim Programm, auf das der {\sc ActPd} Vektor zeigt, wird ein
       R-Symbol ausgegeben. 
\item  Die {\sc Appl-Id} wird ausgegeben. Bei Stuffer und "ahnlichen
       MultiAccessories oder bei mehreren verschachtelt geladenen Programmen
       werden manche {\sc Id}s mehrfach ausgegeben.
\item  Die benutzen {\sc Vdi}-Handles werden ausgegeben. 
       Diese Angabe ist nur m"oglich, wenn {\sc SysMon} die Traps
       besitzt. Der {\sc Vdi}-Handle 1 wird gesondert behandelt, da er
       vom {\sc Gem} und von Programmen gleichzeitig benutzt werden kann. 
\item  Die Art des Programms wird ausgegeben. 
  \begin{description}
  \item[TOS]  wird nur f"ur die beiden Betriebssystem-Teile {\sc Tos}
              und {\sc Gem} benutzt.
  \item[Auto] wird ausgegeben, wenn das Programm im Auto Ordner gestartet
              wurde. Diese Programme sind resident geladen.
  \item[Acc]  wird f"ur Accessories verwendet.
  \item[Prg]  wird bei normal geladenen Programmen benutzt.
  \item[Res]  wird bei resident geladenen Programmen benutzt.
  \item[LPrg] wird bei Programmen benutzt, deren Codebereich einem anderen
              Prozess geh"ort.
  \item[Cart] wird bei Programmen benutzt, die in einer Cartrige gefunden
              wurden. 
  \end{description}
\end{itemize}

\subsection{M - Memory}
\label{Sec.Memory}
Es wird eine sortierte Liste der Speicherbereiche ausgegeben, in der auch
die residenten Bl"ocke enthalten sind. Die Liste ist dabei so sortiert,
da"s das Ende des Hauptspeichers oben und der Anfang unten ausgegeben
wird.

Jede Ausgabezeile ist nach folgendem Format aufgebaut :
\begin{itemize}
\item Der Adresse des Memory Descriptors wird ausgegeben.
\item Die Startadresse, Endadresse und die L"ange des Blockes wird
      ausgegeben. 
\item Der Owner des Blockes wird ausgegeben. Bei freien Bl"ocken wird
      stattdessen 'free' , bei residenten Bl"ocken 'res' ausgegeben.
      Es wird zus"atzlich die HideMem-Konvention erkannt, d.h. wenn alle
      4 Bytes des Longwords {\sc Ascii}-Buchstaben sind, werden
      diese ausgegeben.
\item Wenn m"oglich, wird ein Programmname zugeordnet.
\item Es werden folgende Arten unterschieden :
  \begin{itemize}
  \item Programm Code
  \item Environments
  \item Resourcen
  \item {\sc Aes}-Bl"ocke
  \item {\sc Vdi}-Bl"ocke
  \item Basepages
  \item LineF-Handler
  \item geladene VDI-Fonts
  \end{itemize}
  Alles Andere wird als Data bezeichnet. Da jeweils nur 
  wenige Bytes zur Identifikation herangezogen werden, kann die
  Einsch"atzung auch daneben gehen.
\end{itemize}

In diesem Fenster sind folgende Optionen m"oglich :
\begin{description}
\item[L,\$] Schaltet die L"angenangabe zwischen Hex. und Dez. um.
\item[O]    Schaltet die Angabe des Owners zwischen Hex. und Name des
            Besitzers um.
\end{description}

\subsection{T - Traps}
\label{Sec.Traps}
Es wird die Liste der Systemvektoren ausgegeben, wobei {\sc Xbra}-Listen
weiterverfolgt werden und die jeweiligen Sprungziele mit dem dazugeh"origem
Programmnamen versehen sind.

Es werden alle Traps und Vektoren des {\sc St} ausgegeben, auch diejenigen, die
nicht vom Betriebssystem benutzt werden.

Da die Liste sehr lang werden kann, kann man die Anzeige bestimmter
Informationen auf Tastendruck aus-, bzw einblenden.
\begin{description}
\item[H - Hardware] Anzeige der Hardware Vektoren umschalten.
\item[U - Unused Exceptions] Anzeige der beim unbenutzen Vektoren umschalten.
\item[I - Interrupt] Anzeige der Interrupt Vektoren umschalten.
\item[T - Trap] Anzeige der Trap Vektoren umschalten.
\item[M - MFP] Anzeige der MFP Vektoren umschalten.
\item[E - ETV] Anzeige der Etv Vektoren umschalten.
\item[S - Special] Anzeige der Special Vektoren umschalten.
\item[V - VBL] Anzeige der VBL Vektoren umschalten.
\item[X - Xcon] Anzeige der Xcon Device Vektoren umschalten.
\item[K - Kbd] Anzeige der Kbdvbase Vektoren umschalten.
\item[L - LineA] Anzeige der LineA Funktions Vektoren umschalten.
\item[R - ROM] Beeinflu"st alle Spr"unge, die in das Betriebssystem zeigen.
\item[N - NotValid] Schaltet die Anzeige aller Vektoren mit ung"ultiger
 Zieladresse um.
\end{description}

\subsection{O - OS Vars}
\label{Sec.OS Vars}
Es werden verschiedene Variablen und Strukturen des Betriebsystems
ausgegeben. Die einzelnen Bl"ocke k"onnen "uber die
Option Kommandos umgeschaltet werden.
\begin{description}
\item[S - Systemvariables] Es werden alle Systemvariablen von
     \$400 bis \$5A0 aus\-ge\-geben.
\item[N - Negativ LineA] Es werden alle Negativen LineA Variablen
     ausgegeben.
\item[L - LineA] Es werden alle LineA variablen ausgegeben.
\item[V - VDI] Es werden die Daten jeder VDI-Workstation ausgegeben.
\item[C - Cookies] Es werden alle Cookies des CookieJars ausgegeben.
\item[P - Programms] F"ur jedes Programm wird entweder der
     Pro\-gram-Header, die Base\-page oder der Cart\-ridge-Header aus\-ge\-geben.
\item[F - Fonts] Es werden die Daten jedes geladenen Fonts ausgegeben.
\item[H - Header] Es wird der Header des Betriebssystems ausgegeben.
\end{description}
Die Vektoren , die schon unter dem Men"u\-punkt {\sc Traps} ausgegeben werden
konnten, werden der Vollst"andigkeit halber wiederholt. Es findet 
kein Verfolgen von {\sc Xbra}-Ketten statt.

\subsection{D - Display}
\label{Sec.Display}
Das {\sc Display}-Men"u enth"alt alle Einstellungen, die die Ein- / Ausgabe 
betreffen. Die Umschaltungen der Ein- / Ausgabe sind erst nach
Verlassen des {\sc SysMon} Bildschirms g"ultig. Die einzelen Punkte k"onnen
durch Dr"ucken des Anfangsbuchstabens oder durch Wandern mit den
Cursortasten und der Returntaste angew"ahlt werden.
\begin{description}
\item[I - Input] schaltet die Eingabe zwischen Tastatur, RS-232,
  Parallelport und Midiport um.
\item[O - Output] schaltet die Ausgabe zwischen 2. Bildschirmseite, RS-232,
  Parallelport und Midiport um. 
\item[F - FileOutput] schaltet das Protokollfile an / aus. Ist ein
  "Offnen oder Schliessen zur Zeit nicht m"oglich, wird eine
  Warnung ausgegeben. Siehe Abschnitt \ref{Sec.Proto}.
\item[N - Name] wechselt in den Editiermodus f"ur den Namen des
  Protokollfiles.
  G"ultige Eingaben sind Buchstaben, Zahlen, Punkt, Doppelpunkt, Unterstrich
  und der Backslash. Andere Eingaben beenden die Namenseingabe.
\item[J - JumpScroll] gibt an, wieviele Zeilen im {\sc Run}-Modus auf einmal
  gescrollt werden sollen. Bei einem Wert von 10 wird der Bildschirm um 10
  Zeilen nach oben gescrollt und 10 Zeilen ohne Scrollen ausgegeben.
  Da die Scrollroutine jetzt nur alle 10 Zeilen aufgerufen werden mu"s, ist die
  Ausgabegeschwindigkeit wesentlich erh"oht.
\item[S - STEP-Filter] gibt an, wieviele Zeilen im {\sc Step}-Modus ohne Nachfrage
  ausgef"uhrt werden sollen.
\item[P - PauseOnShift] schaltet die Pausenoption um. Wenn Pause angew"ahlt
  ist, wird bei jedem Dr"ucken der rechten Shifttaste und dem damit 
  verbundenen Anzeigen des {\sc SysMon}-Bildschirms gewartet, bis die Shifttaste 
  wieder losgelassen wird. Auf diese Weise kann man sehr schnell
  scrollende Ausgaben zeitweilig anhalten.
\end{description}

\subsection{F - proFile}
\label{Sec.proFile}
In diesem Fenster kann das Profiling ein/aus geschaltet werden. 
Profiling bedeutet, da"s die Anzahl der Aufrufe mitgez"ahlt wird.
Die Anzahl der Aufrufe  wird in den Funkionslisten mit ausgegeben. 
Es werden nur Funktionsaufrufe gez"ahlt, die auch getraced werden. 
Durch Profiling erh"alt man einen "Uberblick "uber die am h"aufigsten
verwendeten Aufrufe.

\begin{description}
\item[P - Profile] schaltet das Profiling an/aus. Die Daten werden
  hierbei nicht gel"oscht, so da"s eine Z"ahlpause m"oglich ist.
\item[D - Dump] schreibt die beim Profiling gewonnenen Daten in das
  Protokollfile. Sollte kein Protokollfile ge�ffnet sein, so wird es
  ge"offnet und nach dem Schreiben wieder geschlossen. Es werden nur die
  Daten der angew"ahlten Traps und da auch nur die Daten der angew"ahlten
  Funkionen im Protokollfile gespeichert.
\item[C - Clear] L"oscht alle Profiling-Daten.
\end{description}

{\small
( Das {\sc Profiling}-Men"u wird noch in ein anderes Men"u integriert, da
  es zu klein f"ur ein eigenst"andiges Men"u ist. ) }

\subsection{U - UsedTraps}
\label{Sec.UsedTraps}
Diese Funktion liefert eine "Ubersicht "uber die von {\sc SysMon} benutzten
Traps und Bypasse. 

Das Format jeder Zeile ist :
\begin{itemize}
\item Links wird der Vorg"anger aufgef"uhrt, also ein Trap oder
  ein Programm, da"s daraufhin den {\sc SysTable} anspringt.
\item In der Mitte wird die Adresse des {\sc SysTable} Sprungziels ausgegeben.
\item Rechts wird der Nachfolger ausgegeben, der dann vom {\sc SysTable}
  angesprungen wird.
\item Ganz Rechts gibt es noch ein Buchstabenk"urzel, da"s den Vektor
  kennzeichnet. A/V steht f"ur {\sc AesVdi}, G f"ur {\sc Gemdos} usw.
\end{itemize}

Es gibt 2 Darstellungsarten der Bypass Tabelle, die durch die Taste {\bf M}
umgeschaltet werden k"onnen.

\begin{itemize}
\item Die aktiven Traps und Bypasse werden getrennt ausgegeben. Dabei 
  werden die Bypasse in der Reihenfolge aufgef"uhrt, in der sie auch
  angesprungen werden.
\item Die Traps und Bypasse eines Vektors werden vermischt ausgegeben,
 so da"s die Reihenfolge von der Trap Adresse bis zum letzten Bypass der
 Ansprungreihenfolge entsprechen.
\end{itemize}

In einer weiteren Liste werden diejenigen Funktionen angezeigt, die noch
nicht aus den Traps zur"uckgekehrt sind. Siehe Abschnitte
\ref{Sec.Traps} und \ref{Sec.SysTable}

\subsection{N - Notepad}
\label{Sec.Note}
Das Notepad Fenster bietet eine M"oglichkeit, um Kommentare einzugeben.
Dieser kann dann in das Protokollfile eingef"ugt werden, um so
zus"atzliche Informationen und Bemerkungen gleich bei der Erstellung des 
Protokollfiles eingeben zu k"onnen.

Die aktuelle Eingabezeile wird durch $\gg$\ldots$\ll$ geklammert.
Als Eingaben sind alle {\sc Ascii} Zeichen zul"assig,
Sonderfunktionen haben nur folgende Tasten :
\begin{description}
\item[CLR] l"oscht das ganze Fenster.
\item[BS] l"oscht den letzten Buchstaben. Zusammen mit einer Shifttaste
   wird eine ganze Zeile gel"oscht.
\item[CR] bewegt den Cursor eine Zeile nach unten. 
\end{description}

Bei einem Dump in ein Protokollfile werden nur diejenigen Zeilen
ausgegeben, in denen auch etwas eingegeben wurde. M"ochte man 
eine Leerzeile im Kommentar, mu"s man zumindest ein Leerzeichen in die
Zeile einf"ugen.

\subsection{W - Write}
\label{Sec.Write}
Diese Funktion speichert die aktuelle Einstellung in eine Datei
{\sc Sys\_Mon.Inf} . Diese Datei wird bei Programmstart von {\sc SysMon} automatisch 
eingelesen und alle Einstellungen vorgenommen. 
Wenn ein Schreiben des Files gerade nicht m"oglich ist, wird
eine Warnung ausgegeben.

Es werden alle Einstellungen aus allen 10 Setups gespeichert. 
Eine Besonderheit beim Speichern ist nur das Speichern des Zustandes der
einzelnen Programme.
Da beim n"achsten Starten nicht unbedingt dieselben Programme gestartet
werden, wird f"ur jede Gruppe von Programmen ({\sc Tos}, Auto, Acc, Res,
Prg, LPrg, Cart, Unknown) ein Modus bestimmt.
  \begin{itemize}
  \item Wenn kein Programm der Gruppe angew"ahlt ist, wird {\it nicht Tracen}
        f"ur diese Gruppe gespeichert.
  \item Wird mindestens ein Programm der Gruppe getraced, wird {\it Tracen}
        f"ur diese Gruppe gespeichert.
  \item Ist mindestens ein Programm der Gruppe mit einem Haltpunkt versehen,
        wird f"ur diese Gruppe ein Haltepunkt gespeichert.
  \item Ist kein Programm der Gruppe vorhanden, wird {\it Tracen} f"ur diese
        Gruppe gespeichert.
  \end{itemize}


\subsection{R - ReRead}
\label{Sec.ReRead}
Liest die {\sc Sys\_Mon.Inf} Datei nochmals ein. Wenn ein Lesen des Files
gerade nicht m"oglich ist oder die Datei nicht existiert wird eine
Warnung ausgegeben.

Nach dem Einlesen werden alle Einstellungen aus der Datei "ubernommen.

\subsection{Q - Quit}
\label{Sec.Quit}
Dieser Men"u\-punkt beendet {\sc SysMon} nach einer R"uckfrage.

Danach wird ausgegeben, ob ein {\sc SysTable} resident im Speicher
verbleiben mu"s.
Generell gibt es 4 Arten von {\sc Quit} :
\begin{itemize}
\item Wenn Bypasse vorhanden waren, darf der {\sc SysTable} sp"ater nicht
  freigegeben werden, da unter Umst"anden noch Funktionen "uber diese
  Umleitungen springen.
\item Sind keine Bypasse vorhanden, aber Funktionen noch nicht
  zu\-r"uck\-ge\-kehrt, kann der {\sc SysTable} nach R"uckkehr der letzten
  Funktion freigegeben werden.
\item Wird {\sc Quit} w"ahrend eines {\sc Bios}-Aufrufes ausgel"ost, kann 
  {\sc SysMon} seinen Speicher erst bei dem n"achsten {\sc Gemdos}-Aufruf freigeben.
  Dieses ist dasselbe {\sc Gemdos}-Problem, wie es auch beim Protokollfile
  (Siehe Abschnitt \ref{Sec.Proto}) entsteht.
\item Ansonsten kann der gesamte Speicher sofort freigegeben werden oder 
  man wird durch ein akustisches Signal von der Freigabe informiert.
\end{itemize}

Beim Starten von {\sc SysMon} wird ein vorhandener {\sc SysTable} komplett
mitbenutzt, daher wird beim n"achsten Verlassen der Speicher 
komplett freigeben. Es existiert maximal ein aktiver {\sc SysTable} im
Speicher, der sich dann selbst entfernt, wenn es m"oglich ist.
Siehe Abschnitte \ref{Sec.Traps} und \ref{Sec.SysTable} .

\section{Der Aufbau der Ausgabezeilen}
\label{Sec.Ausgaben}
\subsection{Aufbau der Tracerzeilen}
\label{Sec.Zeile}
Der Aufbau der Tracerzeile kann mit den globalen Tasten ReturnAddr, 
Caller, Number ,OutputStack und FlagSuper beeinflusst werden.
Eine "Ubersicht "uber die Einstellungen bietet das {\sc Configuration}-Men"u.

Der Anfang jeder ausgegeben Zeile hat je nach angew"ahlten 
Flags folgendes Format :
\begin{itemize}
\item Findet beim Tracen von {\sc Aes}-Funktionen ein Taskwechsel statt,
  wird ein  \verb|>| ausgegeben.
\item Ist ReturnAddr angew"ahlt,  wird am Anfang jeder Zeile die
  R"ucksprungadresse der Funktion ausgegeben.
\item Ist Caller angew"ahlt, wird der Name des aufrufenden Programms
  ausgegeben.
\item Ist Number angew"ahlt,  wird der Nummer der aufgerufenen Funktion
  zusammen mit einem Kennbuchstaben ausgegeben. Dieser Kennbuchstaben sind
  die Anfangsbuchstaben der jeweiligen Funktionsgruppe, also z.B. A f"ur {\sc Aes}.
  Der Kennbuchstabe O wird f"ur Aufrufe des {\sc Gem}-Traps benutzt, die weder eine
  {\sc Aes}- noch {\sc Vdi}- Kennung benutzten. Dies z.B. beim vq\_gdos Aufruf,
  der zur"uckliefert ob {\sc Gdos} installiert ist, der Fall.
\item Ist OutputStack angew"ahlt, wird der aktuelle Stackpointer
  ausgegeben.
\item Ist FlagSuper angew"ahlt, wird vor jedem Aufruf der aus dem 
  Supervisor Modus stattfand ein kleiner Punkt ausgegeben.
\end{itemize}

Hinter diesem Header wird nun der Funktionsname ausgegeben. Treten dabei
Verschachtelungen von Aufrufen auf,  werden die Funktionsnamen 
einger"uckt. Dies ist der Fall, wenn man auch die Aufrufe von {\sc Gem} 
oder {\sc Tos}
anzeigen l"a"st, da z.B. die {\sc Gemdos} Funktionen {\it Fread, Fopen} usw. auf
die {\sc Xbios} Funktion {\it Rwabs} aufsetzen oder die {\sc Vdi} Funktionen
{\it v\_opnwk} und {\it v\_opnvwk} die {\sc Gemdos} Funktion {\it Malloc}
benutzen. Au"serdem wird bei Verschachtelungen der Header wiederholt sobald 
die aufrufende Funktion zur"uckkehrt, damit
man die zu den Ausgabe-Parametern geh"orige Funktion erkennen
kann.

Nun werden die Eingabe-Parameter ausgegeben, wobei Werte, die im Profibuch 
als Konstanten definiert werden, im Klartext ausgegeben werden. Hat die 
Funktion mehrere Eingabe Parameter, werden vor den Werten kurze
Texte ausgegeben, damit man die einzelnen Werte besser identifizieren
kann. Die Reihenfolge der Parameter entspricht dabei m"oglichst der 
Reihenfolge beim Funktions-Aufruf. Benutzt die Funktion allerdings
{\it Call by Reference} Variablen, die erst nach Ausf"uhrung der Funktion
gesetzt sind, wird deren Wert erst bei den Ausgabe-Parametern
ausgegeben.

Um die Ausgabe Parameter optisch von den Eingabe-Parameten abzuheben,
wird erstmal ein \verb|->| ausgegeben. Hat eine Funktion keine
Ausgabe-Parameter, wird trotzdem ein \verb|->| ausgegeben,
damit man sieht, da"s die Funktion zur"uckgekehrt ist.

Ist durch die globale Taste $\diamond$W das Flag WatchBypass angew"ahlt,
wird der \verb|->| gegen ein \verb|-[ProgrammName]->| ersetzt,
falls {\sc SysMon} feststellt,
da"s die Funktion von einem anderen Programm abgefangen wurde.
Ein \verb|-{ProgrammName}-| bedeutet, da"s sich ein Programm hinter einen
Aufruf geh"angt hat. (Siehe Abschnitt \ref{Sec.Watch})

Mit der globalen Taste $\diamond$E (ExtraOutput) kann die Ausgabe von zus"atzlichen Informationen
umgeschaltet werden. Dies sind Werte die nicht direkt auf dem Stack 
liegen, aber im Zusammenhang mit der Funktion stehen. Das ist z.B 
die Ausgabe des Filenamens bei {\sc Gemdos} Funktionen, die nur einen Filehandle
benutzen oder die Ausgabe des Inhaltes der {\sc Dta} bei den
 {\sc Gemdos} Funktionen {\it Fsfirst} und {\it Fsnext}.
Mit der Extra-Taste 
wird auch die Ausgabe des Inhaltes von "ubergebenen Strukturen
umgeschaltet. Siehe dazu Abschnitt \ref{Sec.Besonderheiten} .

Der R"uck\-gabe\-wert einer Funktion wird jeweils am Ende ausgegeben.
Bei den {\sc Gemdos}-, {\sc Bios}- und {\sc Xbios}-Funktionen werden alle 
System-Fehlermeldungen im Klartext ausgegeben.

Werden mehr Werte ausgeben, als in einer Tracerzeile Platz finden,
wird die Ausgabe der Werte in der folgenden Zeile fortgesetzt.

\subsection{Ausgabe Beispiele}
\label{Sec.Beispiele}

Das erste Beispiel zeigt eine Verschachtelung. Der R"uckgabewert des
{\it Fsfirst} Aufrufs ist durch die Wiederholung des Headers
deutlich zu erkennen.
{\small
\begin{verbatim}
 $FC38B0 GEM G_78 Fsfirst 'C:\C_TEX\*.*' { Dir }
 $FC4F0E TOS B_4   Rwabs  READ Buf $7BC4 Cnt 1 Rec 38 Dev 2 -> Ok
 $FC38B0 GEM G_78 Fsfirst -> Ok <.>
 $FC38B0 GEM G_79 Fsnext  -> Ok <..>
 $FC38B0 GEM G_79 Fsnext  -> NoMoreFiles
\end{verbatim}}

Der Aufbau der Tracerzeile ist hierbei mit ReturnAddr f"ur die
R"ucksprungadresse, Caller f"ur den Namen des
aufrufenden Programmes und Number f"ur die Funktionsnummer 
angegeben worden. Die erweiterten Ausgaben waren nicht angew"ahlt,
ansonsten w"urde bei den gefundenen Files auch deren L"ange, Datum usw.
ausgegeben.

Folgendes Beispiel zeigt, welche Aufrufe durch das "Offnen der
Bildschirm Workstation beim Booten des Rechners ausgel"ost werden.
Durch die Anwahl von FlagSuper wird bei jedem Aufruf, der aus dem
Supervisor Modus stattfindet ein \verb|*| ausgegeben.
{\small
\begin{verbatim}
 GEM *v_opnwk    H 0 3,1,1,1,1,1,1,1,1,1,2 
 TOS  *Getrez    -> High 
 TOS  *Setpalet  PAL $FCB39E -> 
 TOS  *Setexc    Vec 256($0400) New $FCB3C6  -> Old $FC92C6 
 TOS  *Initmouse Mouse On,Relative PARAM $FD0F62 { topmode 0
                 buttons 0 x_scale 1  y_scale 1  } Vec $FD09FA -> 
 GEM *v_opnwk    -> H 1 (639,399) 
\end{verbatim}}

Alle Aufrufe des Desktops finden im Supervisor Modus statt. 
Die Verschachtelung der Aufrufe ist durch die Einr"uckung kenntlich gemacht,
auch  \verb|->| direkt hinter einem Funktionsnamen zeigt an, 
da"s dieser Aufruf gerade zur"uckgekehrt ist und die Eingangsparameter
schon vorher ausgegeben wurden. W"urde in diese Beispiel das {\sc Tos}
nicht getraced, weil es bei {\sc Programms} nicht angew"ahlt ist, w"urden
die Ausgabe Parameter des {\it v\_opnwk} Aufrufs in derselben Zeile
ausgegeben.

Das n"achste Beispiel zeigt einige Taskwechsel zwischen {\sc Control.Acc}
und {\sc TurboSt.Acc}.
{\small
\begin{verbatim}
 TURBST16  appl_init      
 CONTROL   appl_init      
>TURBST16  appl_init      -> 3  
 TURBST16  menu_regis.    '  Turbo ST' 3  
>CONTROL   appl_init      -> 2  
 CONTROL   graf_handle    
>TURBST16  menu_regis.    -> 0  
 TURBST16  evnt_mesag     $0427A4 
>CONTROL   graf_handle    -> (8  ,16 ) (19 ,19 ) Ret 1 
 CONTROL   menu_regis.    '  Kontrollfeld' 2  -> 1  
\end{verbatim}}

Der \verb|>| gibt jeweils an, da"s ein anderer Proze"s aus dem Trap
herauskam als hineinging. Auch die Ausgabe des \verb|->| tr"agt zur
"Ubersicht bei, da sofort erkenntlich ist, welches die Eingangs- und
welches die Ausgangs- Funktion war.
{\small
\begin{verbatim}
 CONTROL  Setprt   { Matrix,Mono,Atari(1280),Draft,Centronics,
                   Endless } -> { Matrix,Mono,Atari(1280),Draft,
                   Centronics,Endless }
 CONTROL  Rsconf   Speed 4  Flow 0  Ucr/Rsr (-1 ,-1 ) Tsr/Scr 
                   (-1 ,-1 ) -> Register $000000 
\end{verbatim}}

Wenn nicht alle Parameter in eine Zeile passen,  findet ein 
Zeilenumbruch statt. Zusammengeh"orige Parameter , wie Bitsets und
Strukturen werden durch \verb|{ ... }| geklammert.

Der {\it evnt\_multi} Aufruf hat die komplizierteste und l"angste
Parameterliste aller Betriebssystemfunktionen.
{\small
\begin{verbatim}
 CONTROL  evnt_multi  KYBD BUT { 1,1,1 } MSG TIMER  { 30000,0 }
                      Buf $040E00 -> (201,101) B$00 K$00 Key 
                      $0000 But $00 Event = MU_MESAG 
                      { WM_CLOSED H 4 } 
\end{verbatim}}
 
Trotzdem sind die einzelnen Werte gut zu unterscheiden, die Reihenfolge
der Ausgaben entspricht der Reihenfolge der Parameter des Aufrufs.
Es wurde auf Tastatur, Mausklick der linken Maustaste,
Mitteilungen oder auf das Ablaufen einer Zeitspanne gewartet. Erhalten wurde
daraufhin der aktuelle Zustand des Systems, mit der Mausposition, dem
Zustand der Mauskn"opfe und der Tastatur. Als Ausgabe-Ereignis wurde eine
Fenstermitteilung angegeben. Wie man sieht, ist selbst diese komplizierte
Parameterliste in {\sc SysMon} gut zu lesen.
{\small
\begin{verbatim}
 GEMINI  Fopen  'C:\GEMINI\MUPFEL.MUP' ReadOnly  -> $000007 /7
 GEMINI  Fseek  H 7 <MUPFEL.MUP> Off 0 FromEnd   -> $000490 /1168
 GEMINI  Fseek  H 7 <MUPFEL.MUP> Off 0 Relative  -> $000490 /1168
 GEMINI  Fseek  H 7 <MUPFEL.MUP> Off 0 FromStart -> Ok
 GEMINI  Fread  H 7 <MUPFEL.MUP> Cnt $000400 Buf $079A48
                    -> $000400 /1024
 GEMINI  Fread  H 7 <MUPFEL.MUP> Cnt $000400 Buf $079A48
                    -> $000090 /144
 GEMINI  Fclose H 7 <MUPFEL.MUP> -> Ok
\end{verbatim}}

Die Augabe des Filenamens, bei Funktionen, die nur mit einem 
Filehandle arbeiten, z"ahlt zu den erweiteten Ausgaben von {\sc SysMon}.
Diese Ausgaben werden durch \verb|< ... >| geklammert.

Weitere Beispiele f"ur erweiterte Ausgaben :
{\small
\begin{verbatim}
 GEMINI menu_ienab. $0843FA 18 <  Open           ^O> disable -> 1  
 GEMINI menu_ienab. $0843FA 19 <  Get Info...    ^I> disable -> 1  
 GEMINI menu_ienab. $0843FA 44 <  Application... ^A> disable -> 1  
 GEMINI menu_ienab. $0843FA 27 <  Erase Disk...  ^E> disable -> 1  
 GEMINI evnt_multi  KYBD BUT { 2,1,1 } MSG Buf $075594 ->
                    (136,454) B$01 K$01 Key $0019 But $01
                    Event = MU_BUTT 
 GEMINI wind_find   (136,454) -> 0  
 GEMINI objc_find   $078260 (0  ,8  ) (136,454) -> Nr 10 
                    < G_ICON 'ZOO' > (10 ,136) Ret 10
\end{verbatim}}

Bei allen Funktionen mit Objekten kann deren Typ und auch der zu\-geh"o\-rige
String ausgegeben werden. So erf"ahrt man z.B. beim {\it menu\_ienable}
Aufruf, das nur mit Objektnummern arbeitet, welcher Men"u\-punkt gemeint
ist. Der String eines Men"u\-punktes wird auch ausgegeben, wenn ein Programm
eine {\sc Mn\_Selected} Mitteilung bekommt.
Nach dem Mausknopf Ereignis testet {\sc Gemini}, ob auf den Desktop
geklickt wurde und findet dann mit {\it objc\_find} die Nr des
angeklickten Objektes heraus. {\sc SysMon} gibt als zus"atzliche Information
den String des, im Beispiel angeklickten, Icons aus.

\subsection{Das Protokollfile }
\label{Sec.Proto}
Alle Ausgaben des {\sc SysMon} k"onnen auch in einem File mitprotokolliert
werden. Das An- und Abschalten des Protokollfiles und die Festlegung
des Namens wird im {\sc Display}-Men"u vorgenommen.

Bei einem MediaChange werden alle offenen Dateien eines Laufwerks
automatisch geschlossen. M"ochte man den Aufbau eines Desktopfensters
mitprotokollieren, mu"s das Protokollfile auf einem anderen 
Laufwerk angelegt werden, da ein Druck auf die {\sc Esc}-Taste zum Neuaufbau
eines Desktopfenster einen MediaChange ausl"ost und die 
Protokolldatei geschlossen w"urde.

Die {\sc Bios}-Aufrufe des {\sc Gemdos} werden alle "uber denselben Stack
abgewickelt, es ist nicht m"oglich, w"ahrend eines solchen
{\sc Bios}-Aufrufs einen {\sc Gemdos}-Aufruf zu machen, da dieser wieder
{\sc Bios}-Aufrufe zur Folge h"atte, was den Stack "uberschreiben w"urde.
Aus diesem Grunde wird in einem solchen Fall beim "Offnen oder
Schlie"sen des Protokollfiles eine Warnung ausgegeben und die 
Funktion nicht ausgef"uhrt.

Das Mitprotokollieren dieser Aufrufe ist nur m"oglich, weil {\sc SysMon}
die Ausgaben in solch einem Fall in einen Puffer schreibt und den 
Puffer leert, sobald es wieder m"oglich ist. 
Die Gr"o"se des Puffers l"a"st sich durch eine Patchvariable
ver"andern. (Siehe Abschnitt \ref{Sec.Patch}) Findet ein Puffer-
"Uberlauf statt, wird dieses im Protokollfile vermerkt.

Besonderheiten im Zusammenhang mit dem Protokollfile
\begin{itemize}
\item Alle Fenster von {\sc SysMon} lassen sich mit der Taste * des Zehnerblocks
    in das Protokollfile schreiben. Auf diese Art und Weise kann man z.B.
    den Ist-Zustand des Systems festhalten. 
\item Auch die Funktions Listen lassen sich im File ablegen, um 
    festzuhalten, welche Funktionen im folgenden Protokoll nicht 
    auftauchen k"onnen, da sie nicht angew"ahlt sind.
\item Wenn kein Fenster ge"offnet ist und nur die Men"uleiste sichtbar ist,
    wird durch die Dumptaste der globale Zustand des {\sc SysMon} im 
    Protokollfile abgelegt.
\item Das Notepad bietet die M"og\-lich\-keit, Kommentare w"ahrend des 
    laufenden Fileprotokolls in das Protokollfile einf"ugen zu
    k"onnen.
\item Wurde das Setup gespeichert, w�hrend ein Protokollfile ge"offnet war,
    wird dieses beim n"achsten Starten von {\sc SysMon} nicht wieder
    ge"offnet, da man sonst ein schon bestehendes Protokollfile
    "uberschreiben w"urde.
\end{itemize}

\section{Besonderheiten}
\label{Sec.Besonderheiten}
\subsection{ Aes }
  Die benutzerdefinierten Messages von {\sc Gemini}, {\sc Clipbrd},
  {\sc Cad-3d}, {\sc Degas}, {\sc CyberSmash}, {\sc TdiModula}
  und auch das neue {\sc Xacc}-Protokoll werden erkannt und richtig
  ausgegeben.
  Zu den erweiterten Ausgaben z"ahlt die Ausgabe des Objekttyps und
  des Strings eines Objektes bei den Objekt- und auch den Men"u-
  Funktionen.

\subsection{Vdi}
  Auch die erweiterten {\sc Vdi}-Metafile Escapes und der
  Inhalt der {\sc Mdfb}-Struktur wird ausgegeben.
  Die {\it vex\_timer}, {\it vex\_button}, {\it vex\_mouse} Funktionen
  d"urfen nicht stepweise
  getraced werden. Beim Steppen werden sie "ubersprungen.

  Die Funktionen {\it vq\_gdos} und {\it vq\_driver} sind eigentlich
  keine {\sc Vdi}-Funk\-tio\-nen, weil sie eine andere Stack-Konvention f"ur
  den Aufruf benutzen. Die Ausgabe dieser Funktionen kann durch die
  Funktion {\it Unknown} in der {\sc Vdi}-Funktionsliste beeinflu"st werden.

\subsection{Gemdos}
  Alle Netzwerk-Funktionen werden erkannt und mit den richtigen
  Parametern ausgegeben. 
  Als erweiterten Ausgaben k"onnen die {\sc Dta} bei {\it Fsfirst},
  {\it Fsnext}, die Filenamen bei allen Operationen mit Filehandles,
  die vorherige Blockgr"o"se bei {\it Mfree} und {\it Mshrink}
  und die Ausgabe der Strukturen {\sc DiskInfo} und {\sc DosInfo}
  angezeigt werden.

  Unter {\sc Color-OverScan} ist es notwendig, bei den Funktionen
  {\it Pterm0},  {\it Pterm} oder {\it Ptermres} kurz auf den
  {\sc Gem} Bildschirm umzuschalten, wenn gerade der {\sc SysMon}
  Bildschirm dargestellt wurde.
  
\subsection{Bios}
  Die Funktionen {\it Setexc} und {\it Ticcal} d"urfen nicht
  stepweise getraced
  werden und werden deshalb beim Steppen "ubersprungen.
  Die {\sc Bpb} Struktur kann "uber die erweiterten Ausgaben angezeigt
  werden.

\subsection{Xbios}
  Die neuen Funktion {\it Floprate} wird unterst"utzt, und auch die
  erweiterten {\sc Xbios}-Funktionen des {\sc OverScan} werden erkannt.
  Die Strukturen {\sc Param}, {\sc Iorec}, {\sc KeyTable},
  {\sc KbdVecs} und {\sc PbDef} k"onnen
  "uber die erweiteten Ausgaben anzeigt werden.

  Wenn die Funktionen {\it Physbase}, {\it Getrez}, {\it Setscreen}
  aufgerufen werden und
  gerade der {\sc SysMon} Bildschirm dargestellt wird, ist es notwendig
  kurzzeitig auf den {\sc Gem} Bildschirm umzuschalten.
  
\subsection{LineA}
  Alle zu der jeweiligen Funktion geh"origen {\sc LineA} Variablen
  werden ausgegeben.
  Die Strukuren {\sc Mform}, {\sc Sdb} und {\sc BitBlt} k"onnen
  "uber die erweiteten Ausgaben angezeigt werden.

\section{Die Traps}
\subsection{SysMon Traps}
\label{Sec.SysTraps}
Im ausgeschalteten Zustand h"angt {\sc SysMon} im Keyboard-, {\sc Vbl}- und 
{\sc Gemdos}-Vektor. Im eingeschalteten Zustand h"angt sich {\sc SysMon}
auch in den {\sc AesVdi}, {\sc Bios}, {\sc Xbios} und {\sc LineA} Vektor
ein. Die Traps beobachten sich
gegenseitig, so da"s bei einer Ver"anderung sofort eine Umleitung (Bypass)
angelegt werden kann.

{\sc SysMon} versucht immer, der Erste in einem Trap 
zu sein, da sonst Aufrufe von anderen Trap-Programmen abgefangen
werden k"onnten. Ein Aush"angen von {\sc SysMon} ist nur schwer
vorstellbar. Es m"u"sten alle Traps gleichzeitig umgeh"angt werden,
damit sich {\sc SysMon} nicht wieder davor h"angt.

Der {\sc Gemdos}-Trap wird auch im ausgeschalteten Zustand "uberwacht, um das
Starten und Verlassen von Programmen mitzubekommen.

Durch einen Trick wird erreicht, da"s alle Aufrufe scheinbar aus 
dem eigentlichen Aufrufer erfolgten und so Programme die weiter hinten
im Trap h"angen nichts von der Umleitung durch {\sc SysMon} erfahren.
Dies ist f"ur das Funktionieren einiger Programme notwendig.

\subsection{Der SysTable}
\label{Sec.SysTable}

Der {\sc SysTable} ist ein eigenst"andiger Programmteil von {\sc SysMon}.
Er liegt ganz vorne im {\sc SysMon} Programm und besteht aus der Bypass-
(Umleitungs) Tabelle, den Funktion-Stacks und einigen Funktionen, die
zur Verwaltung der Funktions-Stacks geh"oren.

Wird {\sc SysMon} verlassen, 
bleibt dieser Programmteil im Speicher zur"uck, wenn entweder Bypasse
angelegt wurden oder Funktionen noch nicht zur"uckgkehrt sind.
Der {\sc SysTable} sorgt dann daf"ur, da"s die Funktionen korrekt aus dem
{\sc SysMon} ausgeh"angt werden und er beendet sich automatisch, sobald er
nicht mehr ben"otigt wird.

Wird {\sc SysMon} gestartet, findet {\sc SysMon} diesem {\sc SysTable} und benutzt ihn
vollst"andig. Alle Aktionen im Zusammenhang mit den Traps, dem
Umlenken der Funktionen und das Beenden von {\sc SysMon} werden "uber den
alten {\sc SysTable} abgewickelt. Auf diese Weise braucht bei wiederholtem
{\sc SysMon}-Start keine neue Byass-Tabelle oder ein Funktion-Stack angelegt
werden und {\sc SysMon} kann immer komplett aus dem Speicher entfernt werden.

Wird ein Trap von einem Programm umgeh"angt, legt {\sc SysMon} in der
Bypass-Tabelle eine Umleitung an und h"angt sich wieder vorne in den Trap.
Wird ein Trap von einem Programm wieder auf seinen alten Wert gesetzt,
wird die Umleitung freigegeben.
Die Bypass-Tabelle wird nicht von {\sc SysTable} "uberwacht. {\sc SysMon} untersucht
eine alte Tabelle aber beim Starten und gibt die nicht mehr ben"otigten
Umleitungen wieder frei.

Die Funktion-Stacks sind notwendig, da es beim {\sc St} mehrere Prozesse
gleichzeitig gibt, die alle Betriebssystemfunktionen aufrufen und daher
getrennt verwaltet werden m"ussen. {\sc SysMon} gibt au"serdem nicht nur
die Eingangsparameter einer Funktion aus. Dies bedeutet, da"s {\sc SysMon} auch
hinter dem Aufruf wieder dran kommen mu"s. Die Aufrufe des Systems sind
aber nicht alle sofort beendet. Ein einleuchtendes Beispiel ist der
{\it Pexec} Aufruf. {\sc SysMon} wartet nicht bis der Pexec beendet ist und
arbeitet erst dann weiter,sondern der Aufruf wird auf einem Stack abgelegt,
die Eingangsparameter ausgegeben und dann k"onnen sofort weitere Aufrufe
erfolgen. Sp"ater, wenn der {\it Pexec} Aufruf zur"uckkehrt, werden
dessen Ausgabenparameter ausgegeben und der Platz auf dem Stack 
freigegeben.
Alle {\sc Aes}-Funktionen sind ein weiteres Beispiel. In diesem Fall k"onnte
sogar ein anderer Proze"s aus dem {\sc Gem}-Trap zur"uckkehren, 
als hinein ging.

{\sc SysMon} verwaltet alle Traps "uber solche Stacks, deswegen werden auch
die Aufrufe aus Interrupts oder der {\sc Vbl} angezeigt. Sogar mit 
Verschachtelungen durch verschiedene Prozesse kommt {\sc SysMon} zurecht.
Folgendes extreme Beispiel ist z.B mit einem alten {\sc TempleMon}
zu beobachten :

Ein {\sc Gem}-Programm macht einen {\it evnt\_multi} Aufruf. Dieser l"ost 
wiederum einen {\it vrq\_string} des {\sc Gem}-Prozess aus, der
wiederum mit {\it Bconstat} des {\sc Tos}-Prozess den Status der
Tastatur beobachtet.
Wird nun eine Taste gedr"uckt, bemerkt man, da"s der {\sc TempleMon},
der ja
im Keyboard-Vektor h"angt einen {\it Iorec} Aufruf absetzt und dann
l"ost sich die Verschachtelung wieder auf \ldots

Der {\sc SysTable} verwaltet diese Stacks eigenst"andig, so da"s {\sc SysMon}
jederzeit beendet werden kann. 

Der aktuelle Zustand des {\sc SysTable} kann im {\sc SysMon}-Men"u unter dem Men"u\-punkt 
{\sc UsedTraps} ausgegeben werden.

\subsection{Erweiterte Bypass Funktion}
\label{Sec.Watch}
Wenn im {\sc Configuration}-Men"u das Flag WatchBypass angeschaltet ist,
findet eine gesonderte "Uberwachung der Bypasse statt, anhand dessen
{\sc SysMon} entscheiden kann, von welchem Programm ein Aufruf
beantwortet
wurde. Diese Frage ist im Zusammenhang mit Programmen, die bestimmte 
Aufrufe abfangen, von gr"o"ster Wichtigkeit. Zu diesen Programmen
geh"oren z.B. {\sc Gdos.Prg}, {\sc Shell.Acc},
{\sc TurboSt.Acc}, {\sc Over\-scan.Prg}, {\sc Stuf\-fer.Acc} und auch alle
{\sc St-Netz\-werke}.

Die WatchBypass Funktion von {\sc SysMon} kann nur funktionieren,
wenn {\sc SysMon} vor den anderen Programmen gestartet wird, da es sich
normalerweise nur vor anderen Programme installiert.

Ist aber das WatchBypass-Flag zusammen mit er aktuellen Einstellung
im {\sc Sys\_Mon.Inf} File gespeichert worden, wird beim Starten
von {\sc SysMon} eine Sonderfunktion aufgerufen, die versucht,
hinter jedem Programm einen Bypass zu installieren. Dies funktioniert
nur bei Programmen mit {\sc Xbra}-Kennung, da ansonsten der
R"ucksprung von einem Programm nicht modifiziert werden kann.

Die eingef"ugten Bypasse bilden jeweils eine Zwischenstation, in der 
die ankommenden Aufrufe analysiert werden.

\begin{itemize}
\item Anhand des zuletzt angesprungenen Bypasses kann {\sc SysMon}
      entscheiden, welches Programm einen Aufruf beantwortet hat.
\item Wurde die R"ucksprungadresse ver"andert, so kann {\sc SysMon} ausgeben,
      welches Programm sich hiner einen Aufruf geh"angt hat.
\item Wurde die Funktionsnummer ver\-"an\-dert oder ein Aufruf nicht
      "uber einen {\sc Trap} sondern nur "uber den Stack abgewickelt, so werden
      diese Aufrufe ausgegeben.
\end{itemize}

Wenn das Tracen nicht angeschaltet ist, sind die Bypass Funktionen
nicht eingebunden und es geht keine Rechnenzeit verloren.

\subsection{PD-Wechsel und Trap-"Uberwachung}
\label{Sec.PD.Traps}
Ein Wechseln des aktuellen Prozesses und Ver"anderungen der {\sc SysMon}-Traps
k"onnen angezeigt werden. Diese "Uberwachung findet auch
dann statt, wenn der Tracer gar nicht angeschaltet ist. Umgeschaltet wird
die Anzeige mit den globalen Tasten $\diamond$P f"ur {\sc Pd}-Change und 
$\diamond$T "fur Trap-Change.

\section{Beispiel Sitzungen}
\label{Sec.Sessions}
\subsection{Stepweises Booten des Rechners}
(Noch nicht geschrieben\ldots) Es werden die notwendigen Einstellungen
und Vorkehrungen beschrieben, die f"ur das stepweise Booten des Rechners
notwendig sind. Als Programme sollten in diesem Beispiel 
{\sc Tos14\-Fix}, {\sc Templ\-Mon}, {\sc Amc\-Gdos}, {\sc Control} und {\sc Turbo\-St}
 verwendet werden.
Es wird erl"autert, da"s es eigentlich der Harddisktreiber ist, der alle
Auto Ordner Programme nachl"adt und dann das {\sc Gem} startet. Auch sollte das
Beispiel das "Offnen der {\sc Gem}-Bildschirm Workstation und das {\sc Aes} 
Taskswitching beschreiben. Anhand von {\sc TurboSt} soll ein Programm aufgezeigt
werden, da"s sich auch in den Traps installiert.

\subsection{Tracen einzelner Aes-Aufrufe}
(Noch nicht geschieben\ldots) In einem Beispiel soll aufgezeigt werden,
welche {\sc Vdi}-Aufrufe durch einen {\it form\_alert} Aufruf
ausgel"ost werden.

\subsection{Tracen eines ACC Protokolls}
Diese Sitzung zeigt ein einfaches {\sc Acc}-Protokoll zwischen der
{\sc Gemini}-Shell und dem {\sc ClipBrd.Acc}. Das {\sc ClipBrd.Acc} sollte in
{\sc Gemini} als Default-Applikation f"ur alle Dateien installiert 
sein.

{\sc SysMon} sollte mit folgenden Einstellungen versehen werden :

Im {\sc Configuation}-Fenster, wird das Setup mit einem Namen versehen,
mit der {\sc Tab}-Taste der {\sc Halt}-Modus und
mit den Control Tasten $\diamond$A, $\diamond$V und $\diamond$G die
Funktionsgruppen  {\sc Aes}, {\sc Vdi} und {\sc Gemdos} angew"ahlt.
Die Anzeige der Trap- und {\sc Pd}- Wechsel und wird mit $\diamond$T und  
$\diamond$P angeschaltet.

Im {\sc Programms}-Fenster werden {\sc Clipbrd} und {\sc Gemini} mit der 
Insert Taste zum Tracen ausgew"ahlt. Es w"urde auch reichen, mindestens
ein {\sc Acc} und ein {\sc Prg} angew"ahlt sind. Alle anderen Programme der
der Arten TOS, Auto und Res werden mit der Delete Taste ausgeschaltet.

Im {\sc SysMon}-Men"u wird nun der Tracer wird durch Dr"ucken der {\sc Esc} Taste
eingeschaltet. Dieser Zustand wird nun mit Write Setup festgehalten.

Nach dem Neubooten des Rechners stoppt {\sc SysMon} beim ersten Aufruf
des {\sc Clipbrd} oder eines anderen {\sc Acc}s. Diese schaltet man 
aus, damit deren Ausgaben nicht mehr st"oren. 
Nun kann man entweder im {\sc Step} oder {\sc Run} Modus fortfahren.
Oder aber man fertigt ein Fileprotokoll an.
{\small
\begin{verbatim}
 CLIPBRD Mshrink     $03EEC8 < Size $015E10/89616 > NewSize 
                     89616 -> Ok
 CLIPBRD appl_init     
 CLIPBRD appl_init   -> 3  
 CLIPBRD graf_handle -> (8  ,16 ) (19 ,19 ) Ret 1 
 CLIPBRD wind_get    H 0 WORK  -> (0  ,19 ) (640,381) 
 CLIPBRD Dgetdrv     -> Drive C
 CLIPBRD Dgetpath    Buf $054BCC Drv 0 (active) -> '' 
 CLIPBRD shel_read   -> 'CLIPBRD.ACC'    '' 
 CLIPBRD menu_regis. '  GEM-Klemmbrett' 3 -> 1  
 CLIPBRD scrp_read   $04F3BE -> ''
 CLIPBRD Dsetdrv     $0002 C -> Drives ABCDEF
 CLIPBRD scrp_write  'C:\CLIPBRD\' -> 1  
 ...
 CLIPBRD evnt_multi  KYBD BUT { 2,1,1 } MSG Buf $054CA0 
\end{verbatim}}

Das {\sc Clipbrd} benutzt die Funktion {\it scrap\_read} um festzstellen,
ob schon ein Pfad gesetzt ist. Wenn nicht, wird er mit {\it scrap\_write}
gesetzt. Danach wird mit {\it Fsfirst} getestet, ob das {\sc Clipbrd}
-Direktory schon existiert, wenn nein wird es angelegt.
{\small
\begin{verbatim}
 ...
 GEMINI  scrp_read   $0903F8 -> 'C:\CLIPBRD\'
 ...
\end{verbatim}}

Die {\sc Gemini}-Shell benutzt auch die Funktionen {\it scrp\_read}
und {\it scrp\_write} um das {\sc ClipBrd}-Direktory festzulegen. 
{\small
\begin{verbatim}
 GEMINI  evnt_multi  KYBD BUT { 2,1,1 } MSG Buf $090418 -> 
                     (132,120) B$01 K$01 Key $0000 But $02 Event
                     = MU_BUTT 
 GEMINI  wind_find   (132,120) -> 2  
 GEMINI  objc_find   $0A2500 (0  ,8  ) (132,120) -> Nr 8  < G_ICON
                     'SOWTW.TXT' > (8  ,132) Ret 8 
 GEMINI  objc_offset $0A2500 8  < G_ICON 'SOWTW.TXT' > ->
                     (1  ,82 ) Ret 1 
 ...
 GEMINI  appl_find   'CLIPBRD ' -> 3  
 GEMINI  wind_update BEG_UPDATE -> 1  
 ...
 GEMINI  graf_growb. (82 ,104) (78 ,40 ) (0  ,19 ) (640,381) -> 1
 GEMINI  appl_write  ID 3 Cnt 16 $090194 { GEMINI : 'E:\SOWTW.TXT'
                     } -> 1
 GEMINI  wind_update END_UPDATE -> 1  
\end{verbatim}}

Wird nun ein Doppelklick auf eine
Datei ausgef"uhrt, die als zugeh"orige Applikation das {\sc ClipBrd} hat,
sucht {\sc Gemini} mit {\it appl\_find}, ob das {\sc ClipBrd} geladen ist. 
Nun schickt es dem {\sc Acc} mit {\it appl\_write} eine {\sc Gemini}-Mitteilung.
{\small
\begin{verbatim}
>CLIPBRD evnt_multi  -> (132,120) B$00 K$01 Key $0013 But $00
                     Event =  MU_MESAG { GEMINI : 'E:\SOWTW.TXT' }
 CLIPBRD graf_mkstat -> (134,119) But $00 Key $0001 
 CLIPBRD wind_update BEG_UPDATE -> 1  
 ... 
 CLIPBRD Fopen       'E:\SOWTW.TXT' ReadOnly  -> $000007 /7
 CLIPBRD Fseek       H 7 <SOWTW.TXT> Off 0    FromEnd   ->
                     $00076E / 1902
 CLIPBRD Malloc      $00076E -> $0A3746 
 CLIPBRD Fseek       H 7 <SOWTW.TXT> Off 0    FromStart -> Ok
 CLIPBRD Fread       H 7 <SOWTW.TXT> Cnt $00076E Buf $0A3746 ->
                     $00076E / 1902
 CLIPBRD Fclose      H 7 <SOWTW.TXT> -> Ok
 ...
 CLIPBRD wind_create { NAME CLOSE FULL MOVE INFO SIZE UPAR DNAR
                     VSLIDE LFAR RTAR HSLIDE } (0  ,19 ) (640,381)
                     -> 3  
 ...
 CLIPBRD wind_open   H 3 (7  ,91 ) (580,216) -> 1  
 CLIPBRD appl_write  ID 0 Cnt 16 $054BC8 { SCRP_OK } -> 1  
 ...
 CLIPBRD wind_update END_UPDATE -> 1  
\end{verbatim}}

Diese {\sc Gemini}-Mitteilung wird wird {\sc ClipBrd} verstanden, obwohl
in der {\sc ClipBrd} Dokumentation nur die {\sc Scrp\_xxxx}-Mitteilungen
erw"ahnt werden. Insbesondere wird das Hauptfenster vom {\sc ClipBrd}
ge"offnet, wenn der Dateiname leer ist, was auch nicht in der
Dokumentation zu finden ist.

Das {\sc ClipBrd} nimmt die Mitteilung an, "offnet ein Fenster und stellt
die Datei
dar. Als Antwort wird noch eine {\sc Scrp\_Ok} Meldung vom {\sc ClipBrd} an 
{\sc Gemini} verschickt.

\subsection{Tracen eines Programmes}
Diese Beispiel Sitzung soll zeigen, wie das Multi-Accessory 
{\sc Stuffer.Acc} die restlichen Accessories nachl"adt und verwaltet.

Im {\sc Configuration}-Fenster wird das Setup 3 mit folgenden Einstellungen
versehen : {\sc Aes} {\sc Vdi} , {\sc Gemdos},
 {\sc Bios} usw an, {\sc Step}-Mode , TrapChanges 
an. Mit {\sc Esc} werden die Traps geholt und nun noch unter {\sc Programms}
{\sc Stuffer.Acc} angew"ahlt.
Diese Einstellung abspeichern und den Rechner neu booten.

Nach dem "ublichen {\it appl\_init} und {\it menu\_register}
wartet {\sc Stuffer} erst einmal, da"s der Desktop fertig aufgebaut ist.
Dies geschieht durch mehrfachem Aufruf von 
{\it wind\_update({\sc Beg/End})}.
Dann wird die Ausgabebox gezeichnet und der
Pfad auf das {\sc Stuffer} Direktory gesetzt. Mit {\it Fsfirst} und
{\it Fsnext} werden alle *.{\sc Acc}s herausgefunden und dann h"angt
sich {\sc Stuffer} in den {\sc Gem}- und {\sc Bios}-Trap ein.
{\small
\begin{verbatim}
 STUFFER Malloc    $FFFFFF -> $098E50 
 STUFFER Kbshift   Mode -1 ->  NoState
 STUFFER Cconws    'ADDRESS.ACC' -> Cnt 26 
 STUFFER Pexec     Load 'C:\STUFFER\ADDRESS.ACC' '' -> $05F1B4 
 STUFFER Mshrink   $05F1B4 < Size $098E4C/626252 > NewSize 54204 
                   -> Ok
 ADDRESS appl_init
>ADDRESS appl_init -> 2  
\end{verbatim}}

Der Name eines zu ladenden {\sc Prg}s wird nicht direkt in der Dialogbox
ausgegeben sondern mit {\it Cconws} auf den Bildschirm
geschrieben, dies ist auch der Grund, warum es auf einen Gro"sbildschirm
oder unter {\sc OverScan} zu Fehlern bei der Positionierung des Strings kommt.

Mit {\it Pexec(Load)} wird nun ein {\sc Acc} nachgeladen und mit
{\it Mshrink} der Speicher
aus die tats"achliche L"ange verkleinert. Daraufhin wird das {\sc Acc}
von Stuffer direkt gestartet. Da f"ur {\sc Gem} noch dasselbe {\sc Acc}
l"auft wird bei {\it appl\_init} dieselbe {\sc Id} zur"uck\-geliefert.
{\small
\begin{verbatim}
 ADDRESS menu_regis. '  STreet finder' 2  -[STUFFER]-> 1  
 ADDRESS evnt_multi  MSG Buf $06C264 
 STUFFER  Cconws     '\escH\escY->' -> Cnt 79 
 STUFFER  Cconws     '            ' -> Cnt 26 
 STUFFER  Cconws     '            ' -> Cnt 26 
 STUFFER  Cconws     '\escH\escY->' -> Cnt 79 
 STUFFER  Malloc     $FFFFFF -> $08B95C 
 STUFFER  Kbshift    Mode -1 ->  NoState
 STUFFER  Cconws     'CALNDR.ACC' -> Cnt 26 
 STUFFER  Pexec      Load 'C:\STUFFER\CLOCK.ACC' '' -> $06C6A8 
 STUFFER  Mshrink    $06C6A8 < Size $08B958/571736 > NewSize 9880 
                     -> Ok
 CLOCK   appl_init      
>CLOCK   appl_init   -> 2  
\end{verbatim} }

{\sc Stuffer} f"angt den {\it menu\_register} Aufruf ab und merkt sich
den Text.
Bei einem Aufruf aus der {\it Event}-Gruppe ist Stuffer wieder dran
und wiederholt das Laden von {\sc Acc}s solange bis
entweder alle {\sc Acc}s geladen sind, der Speicher nicht mehr ausreicht
oder aber die rechte Shifttaste gedr"uckt ist.

Wird nun das {\sc Stuffer}-Men"u\-punkt angeklickt, zeichnet {\sc Stuffer} seine
eigene {\sc DialogBox} und wartet bis ein Men"u\-punkt
 ausgew"ahlt wurde.
{\small
\begin{verbatim}
 STUFFER  wind_update END_UPDATE -> 1  
 STUFFER  v_clsvwk    H 5  -> 
 STUFFER  Super       $000000 -> $008660 
 CLOCK   evnt_multi  -[STUFFER]-> (41 ,89 ) B$00 K$00 Key $0000 
                      But $00 Event = MU_MESAG { AC_OPEN 4 } 
 CLOCK   wind_update BEG_UPDATE -> 1  
 ...
 CLOCK   wind_update END_UPDATE -> 1  
 CLOCK   evnt_multi  KYBD MSG TIMER  { 1000,0 } Buf $075A8E 
 STUFFER evnt_multi  KYBD MSG TIMER  { 1000,0 } Buf $03D400 -> 
                      (57 ,110) B $00 K$00 Key $00FD But $58
                     Event = MU_MESAG { WM_REDRAW H 4 (99 ,31 )
                     (80 ,119) } 
 STUFFER  Super       $000000 -> $008660 
 ADDRESS evnt_multi  -[STUFFER]-> (57 ,110) B$00 K$00 Key $00FD
                     But $58 Event = MU_MESAG { WM_REDRAW H 4
                     (99 ,31 ) (80 ,119) } 
 ADDRESS wind_update BEG_UPDATE -> 1  
 ...
 ADDRESS wind_update END_UPDATE -> 1  
 ADDRESS evnt_multi  KYBD MSG TIMER  { 10000,0 } Buf $06E938 
 STUFFER evnt_multi  KYBD MSG TIMER  { 1000,0 } Buf $03D400 -> 
                     (57 ,110) B $00 K$00 Key $0000 But $00
                     Event = MU_MESAG { WM_REDRAW H 5 (99 ,31 )
                     (92 ,59 ) } 
 ...
 CLOCK   evnt_multi  -[STUFFER]-> (57 ,110) B$00 K$00 Key $0000
                     But $00 Event = MU_MESAG { WM_REDRAW H 5 
                      (99 ,31 ) (92 ,59 ) } 
 CLOCK   wind_update BEG_UPDATE -> 1  
 ...
\end{verbatim} }

Die einzelnen {\sc Acc}s laufen dann jeweils bis zu einem {\sc Event}-Aufruf,
dann findet ein Taskswitching durch {\sc Stuffer} statt. {\sc Stuffer} 
kombiniert dabei die jeweiligen {\sc Event}-Aufrufe und leitet {\sc Timer} und
{\sc Kbd} Events an alle {\sc Acc}s weiter die einen {\sc Timer}/{\sc Kbd} Event wollten. 
Hat man in der {\sc Stuffer}-Liste ein {\sc Acc}, das sehr kurze {\sc Timer}
Aufrufe macht, bekommen alle {\sc Acc}s die {\sc Timer}-Aufrufe gemacht haben
dieselbe, wom"oglich viel zu schnelle {\sc Timer}-Message. 
Da sich {\sc Stuffer} zus"atzlich merkt, welches Window zu welchem {\sc Acc}
geh"ort braucht er die {\sc Window}-Messages nur einmal an den jeweils
richtigen Empf"anger weiterleiten.

F"ur {\sc Gem} sieht alles so aus,als w"urde es nur ein {\sc Acc} geben, 
da alle nachgeladenen {\sc Acc}s dieselbe {\sc Id} besitzen.
{\sc Stuffer} ist f"ur {\sc Gem} auch der Besitzer aller untergeordneter Fenster.
Im Endeffekt untersetzt {\sc Stuffer} nur das {\sc Gem}-Taskswitching um
eine weitere Stufe.

\subsection{Fehler im Betriebssystem entdecken}
(Noch nicht geschrieben\ldots) Es werden einige bisher unbekannten Fehler
und Verhaltensweisen des Betriebssystem aufgezeigt.

So wird beschrieben, da"s der Desktop nach dem Ende eines jeden Programmes
versucht Speicher freizugeben, der ihm garnicht geh"ort und deshalb immer
einen {\it BadBlockAddress}-Fehler vom {\sc Tos} gemeldet bekommt.

Der Fehler im Zusammenhang mit den {\sc Vdi} Workstations wird auch 
beschrieben. Dieser Fehler tritt auf, wenn eine Workstation , die intern
in einer Liste verwaltet werden, geschlo"sen wird, die nicht am Ende sondern
in der Mitte dieser Liste liegt. Alle danach ge"offneten Workstations 
bekommen denselben Handle und arbeiten auf denselben Parametern. Der Fehler
ist sehr leicht mit dem {\sc Control.Acc} zu produzieren. 

Au"serdem kann noch die Frage gekl"art werden, zu welchem Zeitpunkt ein
{\sc Acc} die {\sc Ac\_Close} Meldung geschickt bekommt, wenn man
ein {\sc Tos} Programm startet. Die Meldung wird erst verschickt,
wenn das Programm beendet wird und der Desktop dabei ist, sich neu 
aufzubauen.

Eine weitere Merkw"urdigkeit im Zusammenhang mit dem Desktop ist
das \verb|'\\X'| File, das {\sc Gem} immer bei jedem MediaChange
zu "Offnen versucht, aber nicht findet. Warscheinlich wird dadurch das
Bios gezwungen, die Direktories bis zum Ende zu Durchsuchen.

\section{Erweiterte Informationen}
\subsection{Patchvariablen}
\label{Sec.Patch}
Wie schon beim TempleMon und auch beim {\sc OverScan}, besitzt auch
{\sc SysMon} eine Reihe von Patchvariablen, die man mit einem Diskettenmonitor
ver"andern kann. Am Anfang des {\sc Sys\_Mon.Prg} Files findet sich der
String SysMon\_Var. Dieser markiert den Beginn der Patchvariablen,
die der Tabelle \ref{Tab.Patch} zu entnehmen sind.
{\small
\begin{table} [htb]
\centering
\begin{tabular}{|l|l|l|l|l|}
 \hline 
   L"ange & Wert  & Art         &            & Bedeutung \\ \hline
    Byte  & 98    & Scancode    & {\sc Help} & Aufruf von {\sc SysMon} \\
    Byte  & 1     & Shiftstatus & re.Shift   & Aufruf von {\sc SysMon} \\
    Byte  & 8     & Shiftstatus & Alternate  & Abbruch der Installation \\
    Byte  & 4     & Shiftstatus & Control    & {\sc Sys\_Mon.Inf} nicht laden \\
    Byte  & 0     & Flag        & weiss      & Men"ufarbe \\
    Byte  & 1     & Flag        & schwarz    & Hintergrundefarbe \\
    Long  & 10000 &             &            & L"ange des File Puffers \\
    Byte  & 102   & Scancode    & Block *    & Fensterdump \\
 \hline
\end{tabular}
\caption{Patchvariablen}
\label{Tab.Patch}
\end{table}}
W"ahlt man z.B. den Abbruch Shiftstatus zu 0, wird {\sc SysMon} nur
installiert, wenn beim Starten mindestens eine der Sondertasten
gedr"uckt gehalten wurde.

\subsection{Unbekannte Tos-Versionen}
\label{Sec.NewTos}
{\sc SysMon} ist von einigen undokumentierten Systemvariablen ab\-h"angig.
F"ur die bisherigen {\sc Tos} Versionen sind deren Adressen schon in
{\sc SysMon} enthalten. Wird {\sc SysMon} auf einem Rechner mit unbekanntem
{\sc Tos} gestartet, so stellt {\sc SysMon} dies fest und versucht nun
die Systemvariablen heraus zu finden.

\begin{description}
\item [ActPD]   Der Zeiger auf den aktuellen Proze"s.
\item [MBP]     Die Basisadresse der Speicherlisten.
\item [AesBase] Die Basisadresse der ersten 3 {\sc Aes}-Bl"ocke.
\item [AesList] Die Zeigerliste auf die restlichen {\sc Aes}-Bl"ocke.
\item [VdiList] Der Zeiger auf die erste {\sc Vdi}-Workstation.
\end{description}

In {\sc SysMon} sind Routinen integriert, die diese Adressen aus
einem laufenden {\sc Tos} heraus suchen k"onnen. Damit die {\sc Aes} und
{\sc Vdi} Adressen sicher erkannt werden k"onnen, m"ussen mindesten's drei
{\sc Acc}s geladen sein und mindesten's 3 {\sc Vdi}-Workstations 
ge"offnet sein.
Dies kann man einfach erreichen, indem man das -- zusammen mit dem neuen 
{\sc Tos} ausgelieferte -- {\sc Control.Acc} 3 mal unter anderem Namen auf
die {\sc Boot} Diskette kopiert und nach dem Booten alle Kontrollfelder
gleichzeitig "offnet. Nun kann man {\sc SysMon} erneut starten.

Nachdem {\sc SysMon} die Adressen gefunden hat, werden diese direkt in das
{\sc Sys\_Mon.Prg} gepatcht, so da"s die Installation des neuen {\sc Tos}
nur einmal geschehen mu"s.

\subsection{Spezielle Anpassungen}
\label{Sec.Special}
\subsubsection{Farbbildschirme}
 Bei Farbbildschirmen arbeitet {\sc SysMon} grund\-s"atz\-lich in
 der mittleren Auf\-l"osung, beim Wechseln der dargestellten
 Bildschirmseite wird die vorherige Auf\-l"osung wieder eingestellt.

\subsubsection{Gro"sbildschirme}
 Bei Gro"s\-bild\-schirmen wird zur Ausgabe der zu\-s"atz\-lich 
 angeschlossene SM124 benutzt. Bei den {\sc Matrix}-Treibern wird
 eine neue {\sc Vdi}-Basisadresse benutzt, die {\sc SysMon} nicht
 zug"anglich ist. Aus diesem Grunde k"onnen bei {\sc Programms} oder
 {\sc Os-Vars} keine Angaben "uber die ge\-"off\-neten 
 {\sc Vdi}-Workstations gemacht werden. Einige Funktionen der Treiber
 scheinen auch noch Fehler zu haben, z.B. wird bei {\it vsl\_type(1)}
 der Linientyp Null zur"uck\-ge\-geben, den es laut 
 {\sc Gem}-Beschreibungen nicht gibt.

\subsubsection{OverScan}
 Unter {\sc OverScan} und AutoSwitch-{\sc OverScan} wird die beim
 Starten von {\sc SysMon} vorliegende Auf\-l"osung benutzt. Wird 
 {\sc SysMon} nach {\sc OverScan} gestartet, so werden die 
 zu\-s"atz\-lichen Ausgabezeilen ausgenutzt.

\subsubsection{STE}
 Beim {\sc STE} gibt es zu\-s"atz\-liche Shifterregister, die es z.B.
 erlauben den Bildschirm byteweise zu positionieren. Diese Register
 werden beim Umschalten des aktuellen Bildschirms gesichert und 
 beim Zu\-r"uck\-schalten wieder hergestellt.

\subsubsection{TT}
 Die Anpassung an die zu\-s"atz\-lichen Video-Hardware-Register des 
 {\sc TT} ist noch nicht erfolgt, da noch keine Unterlagen dar"uber
 vorhanden sind. {\sc SysMon} l"auft aber in allen normalen Modi des
 {\sc TT}, ein Wechseln der Auf\-l"osung w"ahrend des Tracens wird
 aus oben genannten Gr"unden noch nicht unterst"uzt.

\subsubsection{68000--68030}
 F"ur die verschiedenen Prozessoren werden die jeweils die Trap-Handler
 angepa"st.

\subsection{Interna}
\label{Sec.Interna}
\begin{itemize}
\item Der Vorgang zum Erkennen der vor {\sc SysMon} geladenen Programme
      l"auft folgenderma"sen ab :

      Der Speicher wird vom Ende der Betriebssystem-Variablen bis
      zum MemTop nach Basepages,Programmheaders usw.
      durchsucht. Dabei findet ein Abgeich mit der {\sc Mal} und {\sc Mfl}
      statt und es wird die Liste der residenten Bereiche angelegt.
      Ausserdem wird die Liste der {\sc Aes}-Bl"ocke nach {\sc Acc}s durchgegangen.
      Neuerdings existiert auch eine extra Routine zum Erkennen von
      Harddisktreibern.

      Wenn es sich nicht um eine Basepage oder einen Programmheader
      handelt, so testet {\sc SysMon}, ob einer der Systemvektoren in
      den Bereich zeigt. Ist dies der Fall, wird auch ein Programm
      dazu angelegt. Bei Speicher\-bl"ocken, die in der {\sc Mal}
      eingetragen sind, ist der Start und das Ende des Programms bekannt.
      Ist das Programm aber resident geladen, so ist nur das Ende
      (Der Anfang des n"achsten Blocks) bekannt. Der Anfang liegt 
      irgendwo vor der Einsprungadresse des Vektors. {\sc SysMon} nimmt
      in diesem Fall das Ende des vorherigen Programms als Start des
      neuen Programms an. Wenn das vorherige Programm einen residenten
      Datenbereich angelegt hat, so z"ahlt dieser dadurch zu dem neuen
      Programm.
\item Die Ausgabe- und Scroll-Routinen werden je nach Auf\-l"osung
      beim Starten des Programm in den Code hineinkompiliert. In Mid-Res
      wird nur eine der 2 Planes benutzt und die Farben jeweils neu
      gesetzt.
\item Damit {\sc SysMon} die Ein- und Ausgabe Parameter einer Funktion
      ausgeben kann und damit alles auch "uber einen alten {\sc SysTable}
      abgewickelt werden kann, ist der Weg eines einzelnen Funktions-
      Aufrufs sehr verschlungen.
      \begin{itemize}
      \item Zuerst wird vom Trap zum BypassTable gesprungen.
      \item Von dort weiter zur Routine, die bewertet, ob dieser Aufruf ausgegeben
         werden soll.
      \item Wenn die Funktion nicht getraced werden soll, geht sie 
         ihren Weg "uber den BypassTable weiter den Trap hinauf, um
         dort ausgef"uhrt und ohne St"orungen zum Aufrufer zur"uckzukehren.
      \item Ansonsten werden die Eingangs Parameter ausgegeben.
      \item Die alte R"ucksprungadresse, die Art des Aufrufs usw. werden
         auf dem FunktionStack abgelegt und eine neue R"ucksprungadresse
         vorgeben.
      \item Nun wandert die Funktion weiter die Traps hinauf ins 
         Betriebssystem um dort ausgef"uhrt zu werden.
      \item Wenn andere Programme im Trap h"angen, die von {\sc SysMon} mit einem
         Bypass versehen wurden, wird dieser Bypass von den Programmen
         angesprungen. Der Bypass springt dann sofort weiter zur n"achsten
         Station. Da z.B. der {\sc Vdi} Trap beim Booten laufend 
         umgeh"angt wird, kann es sein, da"s die Funktion noch  3--5 mal
         "uber einen  {\sc SysMon} Bypass springt, bevor sie im Betriebssystem
         ankommt.
      \item Irgendwann kehrt die Funktion zur"uck, zwischenzeitlich 
         k"onnen aber auch andere Aufrufe stattfinden oder auch Aufrufe
         zur"uckkehren. Die Funktion landet jedenfalls wieder im 
         {\sc SysTable}.
      \item Der {\sc SysTable} "ubernimmt das Entfernen der Funktion aus dem
         Funktionen Stack. 
      \item Wenn {\sc SysMon} noch vorhanden ist, wird nun die Routine f"ur
         die Ausgabeparameter angesprungen.
      \item Wenn es gew"unscht wird, kann das {\sc SysMon}-\-Men"u
         betreten werden.
      \item Dann erst kehrt die Funktion zum Aufrufer zur"uck.
      \end{itemize}
      {\sc SysMon} ver"andert bei seiner T"atigkeit keine Register, auch das CCR
      wird nicht ver"andert.
      
      Durch einen Trick scheint es dem Betriebssystem oder den im Trap
      folgenden Programmen sogar so zu sein, da"s die Aufrufe aus dem
      aufrufenden Programm kommen und wieder dorthin zur"uckkehren.
\item Der SourceCode von {\sc SysMon} hat mittlerweile einen Umfang von
      15000 Zeilen bei 380 K Bytes erreicht. 
\end{itemize}

\subsection{Bugs / Features}
\label{Sec.Bugs}
 Manchmal werden geladene Programme nicht erkannt. Dies ist 
      insbesondere beim {\sc LoadTime}-Linking einiger 
      Pro\-grammier\-um\-gebungen nicht zu vermeiden. {\sc SysMon} bemerkt
      zwar den Wechsel des {\sc PD}s --- dadurch wird im {\sc Programms}-Men"u
      das richtige Programm als aktuelles angezeigt --- aber die Aufrufe
      kommen ( adressm"a"sig ) aus der Laufzeitbibliothek, die nicht im
      Codebereich des neuen Programms liegt, sondern in der jeweiligen 
      Shell. Beim Tracen wird so der Name der Shell ausgegeben, obwohl
      die Aufrufe von einem anderen Programm kommen.


\subsection{Erweiterungen}
\label{Sec.Future}
\begin{itemize}
\item Die Anpassung an das {\sc MicroRtx} von Beckemeyer Development ist
  schon im Programm integriert, da die Anpasung noch nicht voll\-st"an\-dig 
  ist, ist das Men"u nicht f"ur den Normalbenutzer nicht erreichbar.
\item Wenn {\sc SysMon} alle Traps besitzt, sinkt die {\sc Vdi}-Performance um ca
  20 \%. Dieses liegt daran, da"s eine "Uberwachung der {\sc Vdi}-Handles und
  {\sc Aes}-{\sc Id}s stattfindet, auch wenn {\sc Vdi} und {\sc Aes} nicht getraced werden.
  Die Routinen sind noch in C und noch nicht optimiert. 
\item Geplant ist eine spezielle {\sc OverScan} Anpassung, 
  die die zus"atzlichen Bildschirmzeilen am unteren Bildrand als Ausgabebereich
  f"ur {\sc SysMon} benutzt.
\item Die ganze Anpassung an den Farbmodus sollte so ver\-"andert werden,
  da"s {\sc SysMon} mit den Orginal-Farben arbeiten kann. Im Augenblick sind
  viele Umschaltungen notwendig, weil {\sc SysMon} im Color-Modus mit Palette
  1 und 3 arbeitet, da so dieselbe Ausgaberoutine wie im Monochrom-Modus
  verwendet werden kann.
\end{itemize}

\section{Shareware Bedingungen}
\label{Sec.Share}

Unter der Voraussetzung, da"s die Dateien 

\begin{quote}
   {\sc ReadMe}, {\sc Sys\_Mon.Prg}, {\sc Features}, {\sc Changes}, \\
   {\sc Sys\_Mon.TeX}, {\sc Sys\_Mon.Doc}, {\sc Sys\_Mon.Txt}
\end{quote}

unver"andert kopiert werden, darf {\sc SysMon} f�r private Anwender frei
kopiert und benutzt werden. Kommerzielle Nutzung in jeder Form (dies
schliesst auch den Vertrieb "uber Public-Domain-Disketten oder 
"ahnliches ein) ist {\sc Nicht Gestattet}.

Wem {\sc SysMon} gef"allt, darf es benutzen und weitergeben, auch "uber
Mailbox-Systeme. Dazu sollten alle Dateien auf dieser Diskette in 
einem Archiv ({\sc Arc}, {\sc Lh-Arc} oder {\sc Zoo} ) zusammengefasst werden.

Die neuste {\sc SysMon} Version ist auch durch Zusendung einer 3.5`` 
Diskette und eines frankierten und adressierten R"uckumschlages an
meine unten angegebene Adresse erh"altlich.

Die Entwicklung von {\sc SysMon} hat bisher 1,5 Jahre in Anspruch 
genommen, aus diesem Grunde sehe ich mich nicht in der Lage, SysMon
kostenlos (als PD oder Freeware ) zu vertreiben.

Da {\sc SysMon} ein sehr komplexes Produkt ist, dessen Benutzung schon
einiges an Wissen vorraussetzt, habe ich mich f�r das Konzept der
Shareware entschieden, wonach {\sc SysMon} frei kopiert und ausprobiet werden
darf, jedoch bei regel\-m"a"siger Benutzung ein Share\-ware-Betrag von
DM 50,- f"allig wird. 

Wird {\sc SysMon} im professionellen Umfeld eingesetzt, so ist ein
er\-h"oh\-ter Share\-ware-Betrag von 100 DM f"allig. F"ur diese 100 DM
erh"alt die\,/\,der 
jeweilige Firma\,/\,Soft\-ware\-ent\-wickler einen automatischen Update Service
f"ur die n"ach\-sten 5 Versionen und eine Rechnung\,/\,Quittung, damit sie 
{\sc SysMon} von der Steuer absetzen k"onnen.

Meine Bankverbindung lautet :
\begin{quote}
  Karsten Isakovi\'c \\
  Sparkasse der Stadt Berlin \\
  Kto: 0950128864 \\
  Blz: 10050000 
\end{quote}

Bitte notieren Sie bei Bank\-"uber\-weisungen im Kommentarfeld Ihren Namen
und Ihre Adresse, ansonsten kann ich keinen Kontakt zu Ihnen aufnehmen!
\begin{quote}
 Ich "uber\-nehme keine Haftung f"ur irgendwelche direkten oder indirekten 
 Sch"a\-den -- einschliesslich aber nicht be\-schr"ankt auf materielle oder
 finanzielle -- "uber\-nehmen, die durch die Benutzung von {\sc SysMon} oder die
 Untauglichkeit von {\sc SysMon} f�r einen bestimmten Zweck entstehen.
\end{quote}

\section{Kontaktadressen}
\label{Sec.Kontakt}
Da in {\sc SysMon} sicherlich noch ein paar Fehler stecken, was Aufgrund
der extrem vielen Systemfunktionen und Systemstrukturen sehr warscheinlich
ist, bin ich f"ur Hinweise immer dankbar, selbst wenn es sich dabei um ein
vergessenes Leerzeichen bei der Ausgabe der Parameterliste einer Funktion
handelt. Solch ''Winzigkeiten'' sind f"ur mich kaum zu "Uber\-pr"ufen, da
manche Funktionen nur sehr selten und von wenigen Programmen benutzt werden.

Man kann mich auf folgende Art und Weise erreichen :
\subsection{"Uber die gelbe Post}

 Karsten Isakovi\'c \\
 WilmersdorferStr. 82 \\
 1000 Berlin 12 

\subsection{"Uber Mailboxen}

Ich bin in folgenden Mailboxen zu erreichen :
\begin{itemize}
\item Im Maus-Netz mit Karsten Isakovic \verb|@|B 
\item Im Zerberus-Netz mit Karsten\_Isakovic!InfiNet!Mircon
\item Im StarNet-Netz als {\sc Sten} in der \verb|>PGS<| Pegasus
\item Maus   Berlin  030/3956092
\item Parrot Berlin  030/724467 als {\sc Sten}
\end{itemize}

\end{document}

