

\section{Cache (\/{\tt m2cache}) und \/{\tt m2amiga.library}}

\label{m2cache}

Die {\tt m2amiga.library} enth"alt Prozeduren, die von allen 
Werkzeugen von \mtwoamiga\ ben"otigt werden.
Nebenbei dient sie als Cache f"ur alle Dateien.
{\tt m2cache} erlaubt dem Anwender das Verhalten
der {\tt m2amiga.library} zu
beeinflussen. Normalerweise muss {\tt m2cache}
nicht benutzt werden,
allenfalls zu Beginn, um die Gr"osse des Caches einzustellen.
Die Gr"osse kann beliebig eingestellt werden. Man kann vorgeben, wieviel
Speicher {\em maximal\/} benutzt werden darf
oder wieviel Speicher {\em mindestens\/}
freigehalten werden soll.

Bei einem "Uberlauf werden die am l"angsten nicht benutzten Dateien
aus dem Cache entfernt.

Der Cache bietet bei Symboldateien nicht die schnellstm"ogliche
L"osung zum Einlesen, da die Dateien zur Verarbeitung entpackt
werden m"ussen.%
\footnote{Dies im Gegensatz zum Programm {\tt m2pool}, das
in der Version 4.0 vorhanden war. Diese L"osung hat sich
allerdings im allgemeinen Gebrauch als zu instabil erwiesen.
Ausserdem handelte es sich {\em nicht\/} um einen Cache,
was den Austausch geladener Moduln verunm"oglichte.}
Insgesamt ist das System aber sehr
schnell, weil die Suche in den Projekten entf"allt und auch
Objektdateien im Speicher gehalten werden. Ausserdem k"onnen die im
Cache gelagerten Dateien beliebig oft gleichzeitig benutzt werden.

Es wird immer nur eine {\tt ob\cmsltt x}-Datei
(pro CPU) eines Moduls im Cache
gehalten. Der Cache merkt sich auch, welche Typen von Objekt-Dateien
nicht existieren und versucht dann gar nicht erst, sie zu finden.

Wird vom Compiler eine neue Datei erzeugt, wird
die alte nat"urlich automatisch aus dem Cache gel"oscht.

Im Cache werden niemals voll erweiterte Pfadnamen gespeichert, sondern nur
Namen, die sich aus den Pfadangaben der "`{\tt path}"'-Dateien
ergeben. Deshalb
sollte unbedingt jedes Modul nur einmal vorkommen. F"ur den Fall, dass
ein Modul mehrfach existiert, k"onnen bei einem Wechsel des Projektes mit
\begin{quote}\tt
m2cache -f
\end{quote}
alle lokalen Objekte, d.h.\ solche des Projekts,
aus dem Cache gel"oscht werden.

Momentan werden nur Symbol-, Referenz- und Objekt-Dateien permanent
gehalten. Der Compiler l"adt die Quelltexte zur Beschleunigung zwar auch
in den Cache, gibt sie aber unmittelbar wieder frei. Bei Texten kann
leider nicht sichergestellt werden, dass eine Ver"anderung vom Cache bemerkt
wird.

\subsection{Aufruf und Bedienung}

\begin{quote}\tt
m2cache \{+-qlfdmros n{\cmsltt Gr"osse\/} ?\ * {\cmsltt ModulName\/}\}
\end{quote}

Bedeutung der Optionen:
\begin{ttscript}{xxxxxxxxx}
\item[?] Zeigt die Version und die Syntax an.
\item[l] (list) Die Option "`{\tt +l}"' oder "`{\tt -l}"' erwirkt
  die Ausgabe des Cache-Inhalts auf den Bildschirm.
\item[q] (quiet) Die Option "`{\tt -q}"' unterdr"uckt alle Meldungen
  mit ausschliesslich beschreibendem Charakter.
\item[f] (flush) Diese Option dient dem L"oschen der im Cache
  vorhandenen Objekte. Mit "`{\tt -f}"' werden alle {\em lokalen\/}
  Objekte gel"oscht; lokal sind diejenigen Objekte des aktuellen
  Projekts. Die Option "`{\tt +f}"' l"oscht
  {\em alle\/} Objekte aus dem Cache.
\item[n{\cmsltt Gr"osse\/}]
  Hiermit kann die Cache-Gr"osse bestimmt werden. Der Wert
  {\cmsltt Gr"osse\/} muss eine (positive) ganze Zahl sein.
  Je nach einleitendem Zeichen ("`{\tt +}"' oder "`{\tt -}"')
  wird dabei der {\em maximal belegte\/} oder der {\em minimal
  freibehaltene\/} Speicher bezeichnet:
  \begin{quote}\tt
  m2cache +n{\cmsltt Gr"osse}
  \end{quote}
  Der Cache h"alt maximal {\cmsltt Gr"osse\/} Byte im Speicher.
  \begin{quote}\tt
  m2cache -n{\cmsltt Gr"osse}
  \end{quote}
  Der Cache h"alt mindestens {\cmsltt Gr"osse\/} Byte des Speichers
  frei. Die Angabe des mindestens verf"ugbar zu haltenden Speichers
  ist im allgemeinen die sicherere Methode; die Vorgabe ist,
  300\,000 Byte {\em freizuhalten}.
\item[d{\rm ,}m{\rm ,}r{\rm ,}o{\rm ,}s]
  Die nachfolgende Aktion betreffen die Dateien der Typen
  {\tt def}, {\tt mod}, {\tt ref}, {\tt ob\cmsltt ?} und {\tt sym}.
  Diese Optionen haben nur Einfluss auf die nachfolgenden
  Argumente {\tt *} und {\cmsltt ModulName}. Die Einleitung
  "`{\tt +}"'  aktiviert den Typ, "`{\tt -}"' deaktiviert ihn. Die
  Voreinstellung ist {\tt -dmr +os}.
\item[*]
  Das Argument {\tt *} {\em l"oscht\/} alle Objekte
  der aktivierten Dateitypen

\item[{\cmsltt ModulName}]
  Wird {\cmsltt ModulName\/} als Argument "ubergeben,
  werden alle aktivierten Dateitypen des Moduls {\cmsltt ModulName\/}
  gel"oscht. Der Name muss eine Zeichenkette ohne
  Pfad und Erweiterung sein, Gross-
  und Kleinschreibung werden {\em nicht\/} unterschieden.
\end{ttscript}


\subsection{R\protect"uckgabewerte}

\begin{ttscript}{rcImportantNotFound}
\item[rcIllOpt]
  Eine ung"ultige Option oder "`{\tt ?}"' wurde "ubergeben.
 \item[rcMainNotFound]
   Das gew"unschte Modul wurde nicht gefunden.
 \end{ttscript}

Die Verwendung der R"uckgabewerte finden Sie unter 
\ref{RetVal}.

