% SUBJECT: OS-CLI Doku, 27.2.1991 (Version 1.0u)
%
% Zeichensatzwahl:
% \rm : computer modern roman style,
%       normaler Text
% \sf : sans serif style,
%       Environmentvariablen sowie Produktbezeichnungen (z.B. ST)
% \tt : type writer style,
%       Pfade, Dateinamen, Beispiele (eingegeben Befehle, Ausgaben)
% \em : emphasized bzw. italics style,
%       Variablen in Syntaxbeschreibung, sowie allg. hervorheben

\documentstyle[titlepage,german]{article}
\pagestyle{headings}
\parindent0em \parskip2ex plus0.5ex minus0.5ex
\newcommand{\bsl}{$\backslash$}

%\sloppy

% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\begin{document}

% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\title{
     Der Kommandozeileninterpreter\\
     Version 1.0u}
\author{
     Oliver Scholz}
\date{
     Februar 1991}
\maketitle
\newpage

% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\pagenumbering{roman}
\tableofcontents\clearpage
\newpage
\pagenumbering{arabic}

% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\section{In eigener Sache}
Lieber Benutzerin, lieber Benutzer!

Das vorliegende Programm ist {\em SHAREWARE}. Das bedeutet, da\ss\ es
weiterkopiert werden kann und soll! Man kann es allen seinen Freunden
weitergeben und die wieder ihren Freunden u.s.w.
Es d"urfen aber nur {\bf alle} Dateien komplett kopiert werden, d.h.

\begin{tabular}{l|l}
{\tt COMMAND.PRG} &  Ausf"uhrbare Programmdatei\\
{\tt COMMAND.TEX} &  \LaTeX{}-Version dieser Anleitung\\
{\tt COMMAND.TXT} &  ASCII-Version dieser Anleitung\\
{\tt REVISION.TXT} & Entwicklungsgeschichte\\
\end{tabular}

Es darf in den Dateien nichts ver"andert werden! Ausgenommen sind
Layout\-"anderungen beim Ausdruck der Textdateien. Auf Wunsch kann bei
mir auch noch eine englische "Ubersetzung der Textdateien bestellt
werden.

Wer das Programm benutzt sollte mir 30~DM "uberweisen, als Anerkennung
f"ur meine M"uhe. Damit werdet ihr automatisch registrierter Benutzer
und k"onnt euch bei auftretenden Problemen und Fragen schriftlich an mich
wenden. Registrierte Benutzer bekommen jederzeit gegen eine formatierte
3,5" Diskette und einen selbstadressierten, frankierten R"uckumschlag
die neueste Version.

Ohne mein (schriftliches) Einverst"andnis darf das Programm nicht in einen
Public Domain Vetrieb aufgenommen werden. Denn wer f"ur ein Programm schon
10--15 DM plus Porto und Nachnahme bezahlt hat, sieht nicht ein, sich auch
noch f"ur 30 DM registrieren zu lassen.

Dieses Programm ist im Laufe von eineinhalb Jahren 
entstanden und ich habe unz"ahlige Stunden daran gearbeitet.
Darum m"ochte ich darum bitten, mir obigen Betrag auch zu "uberweisen,
wenn ihr mit diesem Programm arbeitet.

Das Programm ist zu 100\% in Assembler geschrieben. Das erkl"art
seine Geschwindigkeit, aber auch seine Kompaktheit. Schlie\ss{}lich sind
"uber 60 Befehle eingebaut, d.h.~es fallen bei diesen Befehlen keine Ladezeiten
an.
Und nicht jeder hat 2 oder 4 Megabytes und will davon "uber 100 KB f"ur eine
riesige, langsame Shell verbraten, nur weil diese in C geschrieben ist und sich
enorme Hashtables anlegt. Der CLI ist unter 32K lang und reserviert sich auch
nicht viel mehr. Nur einige KBytes f"ur die Alias und Environments.

Mein Dank gilt hier Marcus, der diese Anleitung ge\TeX{}t und auch sonst
mit konstruktiver Kritik nicht gespart hat.

Den Assembler, mit dem der CLI geschrieben ist, habe ich auch selbst
entwickelt, und wenn das Sharewarekonzept klappt, mache ich den auch zu
Shareware. Also noch ein Grund, sich registrieren zu lassen.
Helft mit, das Sharewarekonzept zu einem Erfolg zu machen, wie in den USA.

Meine Bankverbindung:

\begin{center}      
 \parbox{5cm}{Postgiroamt 2000 Hamburg\\
              Bankleitzahl 200 100 20\\
              Kontonummer 3457 42-203}
\end{center}

Vergesst bitte nicht, euren Namen, Adresse und das Stichwort CLI mit auf
das "Uberweisungsformular zu schreiben, sonst wei\ss\ ich nicht, woher das
Geld gekommen ist.

Ihr k"onnt das Geld auch in einen Umschlag stecken:

\begin{center}      
 \parbox{5cm}{Oliver Scholz\\
              Garstedter Weg 226\\
              Postfach 61 02 29\\
              2000 Hamburg 61}
\end{center}

Meine Telefonnummer gebe ich am besten gar nicht erst an, weil ich ohnehin
fast nie zuhause bin, und auch nicht morgens um sieben schon von den ersten
Leuten aus dem Bett geholt werden m"ochte. Bitte versteht das.

Fast h"atte ich's vergessen:

{\sc Disclaimer / Haftungsausschluss}:

{\sf
  Das Programm wurde sorgf"altig entwickelt und getestet. Trotzdem sind, wie
  es bei Software "ublich ist, Fehler nicht auszuschlie\ss{}en. Der Autor
  sieht sich daher gezwungen, darauf hinzuweisen, da\ss\ weder Garantie f"ur
  das fehlerfreie Funktionieren dieses Programmes "ubernommen werden kann,
  noch f"ur irgendwelche Sch"aden, die aus Fehlern im Programm oder durch
  Fehlbedienung entstehen, gehaftet wird.
}

Mit dem Starten des Programmes werden diese Bedingungen anerkannt.
So, und jetzt viel Spass mit dem Programm.

Hamburg im Dezember 1990 \hfill {\sl Oliver Scholz}

\newpage

% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\section{Einleitung}
Neben dem {\sf GEM}-Desktop stellt ein Kommandozeileninterpreter (im folgenden
kurz CLI, f"ur {\em command line interpreter}\/ genannt) eine weitere
M"oglichkeit dar, mit dem {\sf ST} zu kommunizieren. Hierbei werden die
Kommandos nicht mit der Maus angew"ahlt, sondern die Befehle mit Namen
eingegeben.

Es werden dabei zwei verschiedene Arten von Befehlen unterschieden: 
Residente und nichtresidente Befehle. Die residenten Befehle sind im CLI 
eingebaut, d.h.~sie stehen nach dem Laden unmittelbar zur Verf"ugung.
Nichtresidente Befehle dagegen befinden sich auf Diskette bzw.~Festplatte und 
werden erst von dort geladen. Der Vorteil dabei ist, da\ss\ Befehle, die der
CLI nicht enth"alt, selbst geschrieben werden k"onnen, und somit der CLI quasi 
erweitert werden kann.
Ein weiterer Vorteil eines CLI ist die M"oglichkeit Batchdateien abzuarbeiten, 
d.h.~festgelegte Kommandofolgen mit einem Befehl abarbeiten zu lassen.

Die Benutzung der, vom {\sf TOS} unterst"utzten, Environmentvariablen ist
beim Arbeiten mit dem Desktop leider nicht m"oglich. Dies ist schade, denn
sie bieten dem Benutzer u.a.~die M"oglichkeit seine pers"onliche
Benutzerumgebung besser zu strukturieren. Ein weiterer Vorteil eines CLI ist
also, da\ss\ eben diese Environmentvariablen problemlos definier- und
ansprechbar sind.

\newpage

% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\section{Das Arbeiten mit dem CLI}
Auch wenn zwischen residenten und nichtresidenten Befehlen unterschieden wird, 
ist dieser Unterschied f"ur den Benutzer kaum merklich. Erst wenn die Diskette 
bzw. Festplatte anl"auft, merkt man, da\ss\ ein Befehl nichtresident ist.
Nach dem Starten meldet sich der CLI mit dem sogenannten Prompt, der z.B.~so
aussehen k"onnte: `\verb"C:>"'.
Wann immer der CLI einen Prompt ausgibt, ist er bereit einen Befehl 
entgegenzunehmen. Dieser Prompt kann aber auch umdefiniert werden. Siehe
dazu Abschnitt \ref{prompt}.

Eine Kommandozeile besteht aus einem Befehl und optionalen Parametern, die 
voneinander durch ein oder mehrere Leerzeichen getrennt sind. Zun"achst testet 
der CLI, ob es sich bei dem Befehl um einen residenten Befehl handelt. Ist das 
der Fall, so wird der Befehl sofort ausgef"uhrt. Handelt es sich jedoch um
einen nicht eingebauten Befehl, so wird auf dem aktuellen Verzeichnis nach
einer Datei gleichen Namens gesucht, und diese geladen.
Wurde keine Extension angegeben, so versucht der CLI zun"achst die Extension 
{\tt .PRG}, dann der Reihe nach {\tt .TOS}, {\tt .TTP}, {\tt .APP} und
schlie\ss{}lich {\tt .BAT}.
Hatte keiner dieser Versuche Erfolg, so wird die Meldung
\begin{verbatim}
Command or File not found!
\end{verbatim}
ausgegeben. Ist die Environmentvariable {\sf PATH} vorhanden, so werden auch die
darin angegebenen Pfade durchsucht, bevor die Meldung ausgegeben wird.
Gro\ss - /Kleinschreibung spielt bei der Befehlseingabe "ubrigens keine Rolle.

% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

\subsubsection{Die HOME--Abk"urzung in Pfaden}
Das Tilde--Zeichen (`$\sim$') in einem Pfad steht f"ur das Homedirectory
des jeweiligen Benutzers. Der CLI ersetzt dieses Zeichen also durch den
Inhalt der Environmentvariablen {\sf HOME}. Zum Beispiel:

\begin{verbatim}
  cp tst.txt ~\txt\
\end{verbatim}

w"are gleichbedeutend mit

\begin{verbatim}
  cp tst.txt $HOME\txt\
\end{verbatim}

oder, wenn {\sf HOME}$=$e:\bsl usr\bsl olav\bsl , auch

\begin{verbatim}
  cp tst.txt e:\usr\olav\txt\
\end{verbatim}


% ~~~~~~~~~~~~~~~
\subsection{Wildcards und Dateinamen unter {\sf TOS}}\label{wildcards}
Wenn im folgenden von {\em wildcards}\/ die Rede ist, so ist damit
die M"oglichkeit gemeint, Dateinamen unvollst"andig zu spezifizieren.
Einzelne Zeichen in Dateinamen k"onnen gegen ein Fragezeichen (`{\tt ?}')
und ganze Zeichenketten durch einen Stern (`\verb"*"') ersetzt werden.
Dabei besteht ein Dateiname aus 8~Zeichen plus 3~optionalen, durch einen
Punkt getrennten Zeichen, auch Extension genannt. Also beispielsweise
{\tt filename.ext}.

Es ist jedoch zu beachten, wie die beiden Wildcard-Zeichen von {\sf TOS}
interpretiert werden. Wird in einem Dateinamen ein Stern verwendet, so
f"ullt {\sf TOS} bis zum Punkt mit Fragezeichen auf, d.h.~alle Zeichen
nach einem Stern bis zum Punkt werden ignoriert!

Besondere Vorsicht bei der Verwendung von Wildcards ist also bei 
L"osch/-operationen geboten. Fatale Folgen k"onnte folgende Anweisung haben:
\begin{verbatim}
  rm *abc.*
\end{verbatim}
{\sf TOS} interpretiert dies als
\begin{verbatim}
  rm *.*
\end{verbatim}
Was das bedeuten kann, ist wohl jedem klar. Also Vorsicht!!!


% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\section{Batchdateien}
Eine Batchdatei dient dazu, eine oft benutzte Befehlsfolge zu automatisieren. 
Soll z.B.~die Befehlsfolge 

\begin{verbatim}
  date
  time
\end{verbatim}

zusammen ausgef"uhrt werden, so 
schreibt man mit einem Editor eine Textdatei, die in der ersten Zeile
{\tt date} und in der zweiten Zeile {\tt time} enth"alt. Nennt man diese 
Datei z.B.~{\tt DATETIME.BAT}, so wird bei Eingabe von
{\tt datetime.bat} \linebreak automatisch die 
Befehlsfolge {\tt date time} ausgef"uhrt. Es ist auch m"oglich, einer 
Batchdatei max.~10 Parameter zu "ubergeben. Die Parameter werden in der 
Kommandozeile durch Leerzeichen voneinander getrennt. Der erste Parameter 
hei\ss{}t \%1, der zweite \%2, u.s.w.~und der zehnte \%0. Taucht in der 
Batchdatei dann \%1 auf, so wird \%1 durch den Parameter in der
Kommandozeile ersetzt. 
Soll das `\%' dargestellt werden, so wird es einfach verdoppelt: \%\%. Lautet 
die Batchdatei {\tt TEST.BAT} etwa: {\tt echo \%1}, so bewirkt die Kommandozeile
{\tt test Hallo}, da\ss\ auf dem Bildschirm `{\tt Hallo}' ausgegeben wird.

Mit Batchdateien lassen sich z.B.~Compiler- /Linkerl"aufe automatisieren:

\begin{verbatim}
  compiler %1.c %1.o
  linker %1.prg=startup,%1.o,lib
\end{verbatim}

Wird diese Batchdatei {\tt C.BAT} genannt, so bewirkt {\tt c test}, da\ss\ die 
Befehlsfolge

\begin{verbatim}
  compiler test.c test.s
  linker test.prg=startup,test.o,lib
\end{verbatim}

abgearbeitet wird. Als besonderer Clou kann der CLI auch selbst eine 
Kommandozeile "ubernehmen. 
Diese kann dann z.B.~der Name einer Batchdatei sein, die nach dem Starten 
des CLI automatisch abgearbeitet wird. Damit ist es vom Desktop aus
z.B.~m"oglich, {\tt COMMAND.PRG} als Anwendung anzumelden, und zwar mit der
Extension {\tt .BAT}. Wird dann {\tt C.BAT} doppelt angeklickt, so startet der
CLI automatisch und arbeitet die entsprechende Batchdatei ab.

Wird keine Kommandozeile angegeben, so sucht der CLI nach einer Batchdatei 
{\tt AUTOEXEC.BAT}, die, sofern vorhanden, ebenfalls automatisch abgearbeitet 
wird. In dieser Datei kann man den CLI nach eigenen W"unschen konfigurieren.

Des weiteren ist es m"oglich, rekursive Batchdateien zu verwenden, d.h.~eine 
Batchdatei kann eine weitere Batchdatei aufrufen, aber maximal f"unf Mal.
Dabei kann auf Parameter "ubergeordneter Batchdateien zugegriffen werden.

% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\section{Ein- /Ausgabe Umleitung}
Die Ausgabe aller eingebauten Befehle erfolgt normalerweise auf den 
Bildschirm, aber es kann manchmal gew"unscht sein, Ausgaben auf den Drucker 
oder in eine Datei auszugeben.

Dazu wird an das Ende der eigentlichen Kommandozeile `\verb">"{\em dateiname\/}'
angef"ugt. 
Damit wird eine Datei {\em dateiname\/} angelegt und die Ausgabe des Befehls in 
diese Datei geschrieben. Als Dateiname sind hier auch {\tt AUX:} und {\tt PRN:} 
zul"assig. Damit kann die Ausgabe auch auf den Drucker bzw.~die serielle 
Schnittstelle umgelenkt werden. Ist die Datei {\em dateiname}\/ schon vorhanden,
so wird sie gel"oscht, und eine neue Datei er"offnet. Soll an eine bestehende 
Datei angeh"angt werden, so wird statt `\verb">"{\em dateiname}' der Befehl 
`\verb">>"{\em dateiname\/}' an die Kommandozeile angeh"angt.

Es ist auch m"oglich die Eingabe von einer Datei vorzunehmen. Dazu wird an die 
Kommandozeile `\verb"<"{\em dateiname}' angeh"angt. Hier ist wieder auch
{\tt AUX:} zugelassen, nicht aber {\tt PRN:}.

Benutzt ein Programm die Fehlerausgabe (stderr), so kann auch diese
umgeleitet werden, und zwar mit `\verb"2>"{\em dateiname}' bzw. `\verb"2>>"{\em dateiname}'.
Hier sind ebenfalls {\tt AUX:}, {\tt PRN:} und {\tt CON:} zul"assig.

Allerdings funktioniert die I/O-Umlenkung nicht bei allen {\sf TOS}-Versionen 
fehlerfrei. Erst ab {\sf TOS} Version 1.4 klappt alles fehlerfrei.

% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\section{Pipes}

Eine Pipe ist ein sehr angenehmes Mittel zur Kommunikation zwischen
verschiedenen Programmen. Oft ist es gew"unscht, die Ausgabe eines Programmes
mit einem anderen Programm weiterzuverarbeiten. Eine Pipe gibt die Ausgabe,
die ein Programm oder Befehl auf den Bildschirm (eigentlich `stdout')
schreiben will, an ein anderes Programm weiter, das diese Ausgabe als
Eingabe akzeptiert. Eine Pipe ist also eine Art gleichzeitige Ausgabe- und
Eingabeumlenkung mit verschiedenen Programmen.
Das Zeichen, das diese Umlenkung vornimmt, ist der senkrechte Strich (`\verb"|"').
Soll z.B.~die Fehlerliste eines C-Compilers auf eine Datei umgelenkt werden,
so kann diese recht lang werden, und meist h"angt ein Gro\ss{}teil der Fehler
vom ersten Fehler ab. So kann man die Ausgabe durch eine Pipe an
HEAD schicken, der nur die ersten paar Fehlermeldungen ausgibt:

\begin{verbatim}
  compiler | head -25
\end{verbatim}

So schreibt der Compiler nur noch die ersten 25 Fehlermeldungen auf den
Bildschirm. Man kann diese Ausgabe nun weiter in eine Datei umlenken:
 
\begin{verbatim}
  compiler | head -25 >errors
\end{verbatim}

Nun enth"alt `errors' die ersten 25 Fehlermeldungen. Sollen die Fehlermeldungen
nur seitenweise ausgegeben werden und der Compiler h"alt nicht an, so kann
die Ausgabe an MORE geschickt werden:

\begin{verbatim}
  compiler | more
\end{verbatim}

Nun erfolgt die Ausgabe seitenweise, als h"atte man:

\begin{verbatim}
  compiler >temp
  more temp
  del temp
\end{verbatim}

eingegeben. Damit diese Umleitung funktioniert mu\ss\ die Ausgabe die in eine
Pipe geschickt werden soll nat"urlich auch umlenkbar sein, d.h.~das Programm
mu\ss\ seine Ausgaben auf `stdout' machen.

Sollen mehrere Befehle in einer Kommandozeile ausgef"uhrt werden, ohne da\ss\
eine Pipe ge"offnet wird, so m"ussen diese jeweils durch Semikolon getrennt
werden.
  
% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\section{Die Befehls Stopuhr}

Wird eine Kommandozeile mit einem {\em Klammeraffen\/} (`\verb"@"') begonnen,
so wird eine interne Stopuhr gestartet und die Zeit zur Ausf"uhrung der Zeile
gestoppt. So kann bequem bestimmt werden, wie lange z.B.~ein
Compiliervorgang dauert.

% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\section{Die History-Funktion}
Der CLI merkt sich immer die letzten 20 Befehlszeilen, und diese k"onnen "uber 
die Cursortasten (auf/ab) wieder abgerufen werden. Das ist sinnvoll, wenn man 
einen zuvor benutzten Befehl noch einmal benutzen m"ochte, ohne ihn neu 
eingeben zu m"ussen.

Diese Befehle k"onnen auch ggf.~editiert werden. Eine weitere M"oglichkeit,
die letzten Befehle zu sehen und 
auszuf"uhren, ist der Befehl HISTORY. Damit werden die letzten Befehle 
ausgegeben und jeweils mit einer Nummer versehen. Mittels Ausrufezeichen 
k"onnen diese Befehle nun angesprochen werden, und zwar auf zwei verschiedene
Arten:
\begin{enumerate}

 \item
 `{\tt !5}', w"urde z.B.~den 5.~Befehl ausf"uhren, der nach Starten des CLIs
 eingegeben wurde, sofern sich dieser Befehl noch im History-Puffer befindet.

 \item
 `{\tt !cc}' w"urde den letzten Befehl, der mit `cc' beginnt und
 sich noch im History-Puffer befindet, ausf"uhren.

\end{enumerate}

% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\section{Editieren der Kommandozeile}
Eingegebene Zeichen werden dort eingef"ugt, wo sich der Cursor befindet. Sind 
noch Zeichen rechts vom Cursor, so werden diese Zeichen nach rechts 
verschoben. Die Befehle, die zum Editieren der Kommandozeile zur Verf"ugung
stehen, zeigt Tabelle \ref{cliedit}. Eine genauere Erl"auterung verlangt
wohl die Dateinamensuche:

Es ist manchmal ganz hilfreich, dem Rechner die Suche nach einem
komplizierten Dateinamen zu "uberlassen. Dazu gibt man eine unvollst"andige
Dateinamenspezifikation an und dr"uckt entweder die Insert-Taste oder
die Tastenkombination Ctrl-U ({\em unknown\/}). Nun durchsucht der CLI
das aktuelle Verzeichnis nach dem ersten Eintrag, der auf die angegebene
Spezifikation pa\ss{}t und gibt ihn auf dem Schirm aus. Ist dies nicht der
gew"unschte Eintrag, so kann man die Suche mit der Tastenkombination
Ctrl-O ({\em other\/}) fortf"uhren. Kann kein weiterer Eintrag mehr
gefunden werden, so bleibt der letzte gefundene Eintrag in der Kommandozeile
stehen.

Da das links vom Cursor stehende Wort als Suchspezifikation benutzt
wird, bewirkt zweimaliges Dr"ucken der Insert-Taste bzw.~Ctrl-U, da\ss\ der
erste gefundene Dateiname mit dem zweiten Dr"ucken als, nun vollst"andige,
Suchspezifikation interpretiert wird. Dadurch wird i.d.R.~bei weiterer
Suche mittels Ctrl-O kein anderer Dateiname mehr gefunden.

Folgendes Beispiel soll diese sinnvollen Befehle verdeutlichen:

Oft m"ochte man eine Datei l"oschen, will aber nicht den gesamten Namen
eingeben. Angenommen, das aktuelle Verzeichnis enth"alt die folgenden Dateien:
\begin{verbatim}
BLAH.TXT
BLAH1.TXT
BLAH2.TXT
\end{verbatim}
Gesetzt den Fall, man m"ochte {\tt BLAH1.TXT} l"oschen. Nun reicht es
beispielsweise aus, wenn man folgende Kommandozeile eingibt (ohne die
{\sf RETURN} Taste zu bet"atigen):
\begin{verbatim}
del bl
\end{verbatim}
Dr"uckt man nun die Insert-Taste (oder Ctrl-U), so w"urde die unvollst"andige
Spezifikation {\tt bl} durch {\tt BLAH.TXT} ersetzt werden.
(In diesem Fall w"are ein Leerzeichen als Spezifikation auch ausreichend
gewesen) F"uhrt man die Suche nun mit Ctrl-O fort, so wird als n"achstes
{\tt BLAH.TXT} durch die gesuchte Datei {\tt BLAH1.TXT} ersetzt und man
kann die erw"unschte Kommandozeile durch Bet"atigung der {\sf RETURN} Taste
an den CLI weitergeben. "Ahnlich l"a\ss{}t sich diese Suche auch bei
anderen Befehlen anwenden. Auf vielfachen Wunsch wird der gefundene Dateiname
ab Version 1.0t in Kleinbuchstaben eingef"ugt.

\begin{table}
\begin{center}
\renewcommand{\arraystretch}{2}
\begin{tabular}{|l|l|}\hline
 Taste         & Wirkung\\ \hline
 Pfeil links   & bewegt den Cursor nach links\\
 Pfeil rechts  & bewegt den Cursor nach rechts\\
 Backspace     & l"oscht das Zeichen links vom Cursor\\
 Delete        & l"oscht das Zeichen unter dem Cursor\\
 Insert        & Starte Dateinamensuche\\
 Clr/Home      & l"oscht die aktuelle Kommandozeile\\
 Ctrl-K        & l"oscht bis zum Ende der Kommandozeile\\
 Ctrl-W        & l"oscht das n"achste Wort\\
 Ctrl-A        & springt an den Anfang der Kommandozeile\\
 Ctrl-E        & springt an das Ende der Kommandozeile\\
 Ctrl-U        & wie Insert ({\em unknown\/})\\
 Ctrl-O        & N"achster Eintrag bei Dateinamensuche ({\em other\/})\\
 Ctrl-D        & wie Delete\\
 Ctrl-X        & wie Clr/Home\\
 Ctrl-B        & wie Pfeil links ({\em backwards\/})\\
 Ctrl-F        & wie Pfeil rechts ({\em forwards\/})\\
 Ctrl-P        & wie Pfeil hoch ({\em previous\/})\\
 Ctrl-N        & wie Pfeil runter ({\em next\/})\\ \hline
\end{tabular}
\renewcommand{\arraystretch}{1}
\end{center} \caption{\label{cliedit} Befehle zum Editieren der Kommandozeile}
\end{table}
\pagebreak

% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\section{Environmentvariablen}
Das Betriebssystem {\sf TOS} erm"oglicht es, sogenannte Environmentvariablen zu 
"ubergeben. In diesen Variablen k"onnen z.B.~Suchpfade oder andere 
Systemeinstellungen gespeichert werden. So kann bei manchen C-Compilern 
festgelegt werden, wo sich die Include-Dateien befinden.
Eine Environmentvariable wird definiert, indem ihr ein neuer Inhalt 
zugewiesen wird. Ist sie schon vorhanden, wird der vorhandene Inhalt gel"oscht 
und durch den neuen Inhalt ersetzt.

Nach dem Starten existiert in der Regel nur eine Variable, n"amlich
{\sf PATH}. Diese Variable legt fest, wo der CLI nichtresidente Befehle
sucht, wenn er sie im aktuellen Verzeichnis nicht findet. Der CLI legt nun
zu dieser vom {\sf TOS} belegten Variable einige weitere Variablen 
an, und zwar {\sf HOME}, {\sf CWD}, {\sf STATUS}, {\sf DATE}, {\sf TIME} und
u.U.~{\sf USERNAME} und {\sf USER}.

In {\sf HOME} wird das Verzeichnis vermerkt, in dem der CLI gestartet wurde.
In {\sf CWD} befindet sich immer das aktuelle Verzeichnis
({\em current working directory}\/), und in {\sf STATUS} wird der Exit-Code
des letzten gestarteten Programmes vermerkt.
{\tt STATUS=\ -33} z.B.~bedeutet, da\ss\ die angegebene Datei nicht 
gefunden wurde. {\sf DATE} und {\sf TIME} enthalten nach Aufruf der
Befehle DATE bzw.~TIME unter Angabe der \mbox{`-s'} Option, das Systemdatum bzw.~die
Systemzeit zum Zeitpunkt des Aufrufes.

{\sf USER} wird von der LOGIN-Funktion angelegt und in Abschnitt \ref{login}
erl"autert.
Es ist nun praktisch, alle ausf"uhrbaren externen Befehle in einen Ordner zu 
kopieren, und dem CLI diesen Pfad mitzuteilen. Befindet sich dieser Ordner 
nun z.B.~im Wurzelverzeichnis von Laufwerk {\tt C:} und hei\ss{}t 
{\tt BIN}, so bewirkt

\begin{verbatim}
  PATH=C:\,C:\BIN\
\end{verbatim}

da\ss\ nichtresidente Befehle zun"achst im aktuellen Verzeichnis, dann im 
Wurzelverzeichnis von {\tt C:} und dann im Ordner {\tt BIN} auf Laufwerk
{\tt C:} gesucht wird. Bei der {\sf PATH} Variable k"onnen auch mehrere Pfade
angegeben werden, diese m"ussen dann durch Kommata getrennt werden.
Variablen k"onnen aber auch in Befehlen verwendet werden. Um den Inhalt einer 
Variablen zu benutzen, wird ihr ein Dollar-Zeichen (`\$') vorangestellt, mit

\begin{verbatim}
  TEMP=$CWD
\end{verbatim}

speichert man das aktuelle Verzeichnis in der Variablen {\sf TEMP} ab.
Zu einem sp"ateren Zeitpunkt kann dann mit 

\begin{verbatim}
  cd $TEMP
\end{verbatim}

wieder in dieses Verzeichnis gelangen. (Eine einfachere M"oglichkeit, sich
ein Directory zu merken, bieten die Befehle PUSHD/POPD).

Weitere M"oglichkeiten bieten auch die Befehle PRINTENV, SETENV und ADDENV.

Das Plus-Zeichen (`$+$') erm"oglicht es, mit diversen Befehlen auf
konkatenierte Environmentvariablen zuzugreifen. Ein Beispiel sollte
erkl"aren, was damit gemeint ist:

\begin{verbatim}
  del $HOME+$MYFILE
\end{verbatim}

l"oscht die Datei, die in {\sf MYFILE} enthalten ist, auf dem Pfad, der in
HOME steht. D.h., die Inhalte der Variablen {\sf HOME} und {\sf MYFILE} werden
aneinandergeh"angt und von der Kommandozeile "ubernommen.

% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\section{Benutzung des CLI durch Programme}
Der CLI unterst"utzt auch die {\sf GEMDOS}-Variable {\sf \_shell\_p} bei
Adresse {\sf \$4F6}, hexadezimal.
Dadurch wird es m"oglich, da\ss\ ein Programm das vom CLI aufgerufen wurde,
dem CLI eine Kommandozeile zur Ausf"uhrung "ubergibt. Ein Beispiel daf"ur
ist der {\sf system()} Befehl einiger C-Compiler. Schreibt man z.B.~ein
MAKE-Programm so mu\ss\ man nicht den RM Befehl abfangen, sondern schickt
ihn einfach mittels {\sf system()} an den CLI, und l"a\ss t ihn dort
ausf"uhren.
\newpage

% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\section{Der CLI und MiNT}

Der CLI erkennt die Anwesenheit von MiNT im Speicher und ber"ucksichtigt das
bei einigen Befehlen; so werden UID und GID beim Login automatisch gesetzt.
Der VER Befehl erkennt die MiNT Version und gibt sie mit aus. DIR akzeptiert
die Pseudolaufwerke {\sf Q:}, {\sf V:} und {\sf X:}. WAIT benutzt den
{\sf S\_Yield()} Systemcall. Als neuer Befehl gibt PS die Proze"stabelle aus.
Schlie"slich wird Multitasking unterst"utzt, indem ein Programm im Hintergrund
gestartet wird, wenn das erste Zeichen einer Zeile das `\&' Zeichen ist.

% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\section{Das ARGV-Schema}

Der CLI unterst"utzt das neue ARGV-Protokoll, um Programmen u.a.~den Zugriff
auf den eigenen Namen zu erm"oglichen ({\sf ARGV[0]}). Leider vertragen sich einige
Programme nicht mit dem neuen Protokoll. Daher kann man es mit einer neuen
Environment Variablen ein- und ausschalten. Ist die Variable {\sf N127} vorhanden, 
so ist das ARGV Protokoll eingeschaltet. Der zugewiesene Wert ist dabei 
gleichg"ultig. Ist sie nicht vorhanden, so wird das Protokoll nicht unterst"utzt.

%
% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

\section{Die Befehle}
Hier sollen nun die einzelnen eingebauten Befehle des CLI vorgestellt und 
erl"autert werden.

% ~~~~~~~~~~~~~~~
\subsection{ADDENV}
Syntax: ADDENV {\em varname} {\em string}

Mit ADDENV kann an eine Environmentvariable etwas angeh"angt werden.
{\em varname\/} ist dabei der Name der Variable, und {\em string}\/ wird
(durch ein Komma getrennt) and den Inhalt der Variable angeh"angt.
Ein Beispiel:

\begin{verbatim}
  addenv PATH $HOME
\end{verbatim}

Nun w"urde auch das {\sf HOME}-Verzeichnis mit in die Suche nach
externen Befehlen einbezogen.

% ~~~~~~~~~~~~~~~
\subsection{ALIAS}
Syntax: ALIAS [\ [-d]\ {\em string1\/} {\em string2\/}
              ]

Mit ALIAS kann man die Zeichenkette {\em string2}\/ der Zeichenkette
{\em string1} zuweisen. D.h.,~ gibt man nach einer ALIAS-Zuweisung, nach
obiger Syntax, in der Kommandozeile {\em string1}\/ ein, so versucht der
CLI {\em string2}\/ auszuf"uhren. So bewirkt z.B.

\begin{verbatim}
  alias d dir
\end{verbatim}

da\ss\ `d' als Befehl erkannt wird und wie der DIR-Befehl wirkt.

Wird die `-d' ({\em delete}\/) Option angegeben, so wird die entsprechende
Zeichenkette aus der Alias-Liste entfernt.

\begin{verbatim}
  alias -d d
\end{verbatim}

macht also die eben gemachte Zuweisung r"uckg"angig.

Wird ALIAS ohne Parameter angegeben, wird die Liste der definierten Befehle 
ausgegeben.


% ~~~~~~~~~~~~~~~
\subsection{BAUD}
Syntax: BAUD {\em baudrate},{\em word\_size},{\em parity},{\em stop\_bits}

Mit dem BAUD-Befehl kann die serielle Schnittstelle des {\sf ST} (RS-232)
konfiguriert werden. Zun"achst wird die Baudrate angegeben, dann die Anzahl
der Datenbits, gefolgt von der Parit"at (n,o,e f"ur: none, odd, even Parit"at)
und schlie\ss{}lich die Anzahl der Stopbits.

Mit: 

\begin{verbatim}
  baud 300,8,n,1
\end{verbatim}

wird also z.B. die Schnittstelle auf 300 Baud, keine Parit"at, 8 Datenbits
und ein Stopbit eingestellt.

% ~~~~~~~~~~~~~~~
\subsection{CD oder CHDIR}
Syntax: CD [{\em pathname\/}]\ oder CHDIR [{\em pathname\/}]

Mit CD ({\em change directory\/}) wird ein neues aktuelles Verzeichnis gew"ahlt. 
Normalerweise wird der angegebene Ordnername an den aktuellen Pfad angeh"angt.
Die Abk"urzung `..' bezieht sich auf das n"achste "ubergeordnete Verzeichnis.
Ist der aktuelle Pfad z.B.~{\tt C:\bsl TEMP\bsl COMP\bsl } und wird das
Kommando `{\tt cd ..}' eingegeben, so wechselt das aktuelle Verzeichnis auf
{\tt C:\bsl TEMP\bsl }.
Es kann aber auch ein kompletter neuer Pfad eingegeben werden, 
z.B.~`{\tt cd e:\bsl }' oder `{\tt cd a:\bsl test\bsl }'.
Wird kein Parameter angegeben, so wechselt CD in das {\sf HOME}-Verzeichnis.

Der CLI bietet hier dem Benutzer die M"oglichkeit, Pfadnamen mittels Wildcards
anzugeben.
Es werden einfach die signifikanten Zeichen eines Pfadnamens, gefolgt vom
Asterisken--Zeichen (`$\ast$') angegeben. Der CLI erg"anzt dann zum 
vollst"andigen Pfadnamen. Angenommen das aktuelle Verzeichnis sei {\tt C:\bsl }
und es gibt ein Unterverzeichnis {\tt \bsl SOURCE\bsl }, in welches man
wechslen m"ochte. Dann w"urde man vielleicht folgenden Befehl verwenden:

\begin{verbatim}
  cd sou*
\end{verbatim}

Damit wird der CLI in das Verzeichnis \verb"C:\SOURCE\TEST\" wechseln.

% ~~~~~~~~~~~~~~~
\subsection{CHMOD}
Syntax: CHMOD [$+\mid-$] [r$\mid$h$\mid$s$\mid$a ] {\em filename}

Mit diesem Befehl k"onnen die Dateiattribute ver"andert werden, "ahnlich wie
LOCK/UNLOCK etc. Jedes einzelne Attribut kann mit einem Befehl gezielt
gesetzt oder gel"oscht werden, z.B.:

\begin{verbatim}
chmod +r-sh test.txt
\end{verbatim}

setzt das {\em read-only\/} Attribut und l"oscht die {\em system\/} und
{\em hidden\/} Attribute, und wirkt so wie

\begin{verbatim}
lock test.txt
hide test.txt
\end{verbatim} 

% ~~~~~~~~~~~~~~~
\subsection{CLICK}
Syntax: CLICK [ON$\mid$OFF]

CLICK OFF schaltet den Tastaturklick ab, CLICK ON schaltet ihn wieder ein.
% ~~~~~~~~~~~~~~~
\subsection{CLS}
Syntax: CLS

Der Befehl CLS ({\em clear screen\/}) l"oscht den Bildschirm. Es werden dazu
die Terminalsequenzen eines {\sf DEC} VT-52 Terminals verwendet
(also: ESC--H--ESC--J).

% ~~~~~~~~~~~~~~~
\subsection{COPY oder CP}
Syntax: \parbox[t]{6cm}{
        COPY \hfill [-ns]\ {\em pathname}\/ 
                     [{\em pathname\/}] \linebreak
        CP   \hfill [-ns]\ {\em pathname}\/ 
                     [{\em pathname\/}]}
        \parbox[t]{2cm}{oder}

Mit dem Befehl COPY, bzw.~CP kann eine Kopie einer Datei in einem an\-deren 
Verzeichnis oder Laufwerk angelegt werden. Hierbei sind Wildcards erlaubt.
Ist im Zielpfad bereits eine Datei gleichen Namens vorhanden, fragt der
CLI nach, ob diese gel"oscht werden soll, oder ob man die Kopieranweisung
abbrechen will. Wird kein Zielpfad angegeben, so ist der aktuelle Pfad
Zielpfad der Operation. Das Dateidatum bleibt hierbei erhalten. Um die Kopie mit
dem aktuellen Systemdatum zu versehen, siehe TOUCH Befehl.
Einige Beispiele:

\begin{description}
 \item[{\tt COPY $\ast$.TXT A:\bsl}] \ \\
    kopiert alle Dateien, die auf {\tt .TXT} enden aus dem aktuellen 
    Verzeichnis auf Laufwerk {\tt A:}
 \item[{\tt COPY $\ast$.TXT C:\bsl $\ast$.DOC}]\ \\
    kopiert alle Dateien, die auf {\tt .TXT} enden auf
    Laufwerk C und benennt sie gleichzeitig in {\tt .DOC} um.
 \item[{\tt COPY HALLO.TXT TEST.DOC}]\ \\
    legt eine Kopie der Datei {\tt HALLO.TXT} an und nennt sie {\tt TEST.DOC.}
\end{description}

Mit der Option `-n' ({\em no query\/}) wird die Nachfrage abgeschaltet, ob
eine im Zielpfad schon vorhandene Datei gleichen Namens "uberschrieben werden
soll oder nicht. Die Option \mbox{`-s'} ({\em silent\/}) bewirkt, da\ss\ der
Kopiervorgang nicht auf dem Schirm mitprotokolliert wird. 

% ~~~~~~~~~~~~~~~
\subsection{CTTY}
Syntax: CTTY {\em device}

Mit dem Befehl CTTY ({\em change TTY\/}) wird dem CLI mitgeteilt, da\ss\
nun alle Ausgaben und Eingaben der internen Befehle "uber die serielle
Schnittstelle ({\em device\/} ist dann {\tt AUX:}) oder "uber dir Konsole
({\em device\/} ist dann {\tt CON:}) abgewickelt werden sollen.
Damit ist der CLI fernbedienbar ({\em remote modus\/}). 
Bei Betrieb "uber die serielle Schnittstelle wird ab Version 1.0t weiterhin
die Ausgabe auf den Bildschirm ausgegeben.
Der Remotebetrieb ist dabei von der Konsole aus abbrechbar.


% ~~~~~~~~~~~~~~~
\subsection{DATE}
Syntax: DATE [-s]

Mit dem DATE Befehl kann das Systemdatum abgefragt und gestellt werden. Nach 
Eingabe von DATE wird das aktuelle Datum ausgegeben. Nun kann ein neues Datum 
eingegeben werden. Wird stattdessen ein ung"ultiges Datum angegeben oder
einfach nur die {\sf RETURN}-Taste bet"atigt, bleibt das Datum unver"andert.
Bei Angabe der \mbox{`-s'} Option ({\em set\/}) wird das aktuelle Datum im Format
\vskip.1cm
\centerline{\em Wochentag\tt , \em Tag\tt .  \em Monat \em Jahr}
 
in die Environmentvariable {\sf DATE} geschrieben.


% ~~~~~~~~~~~~~~~
\subsection{DEL}
Syntax: DEL [-qs]\ \{{\em filename\/}\}

L"oscht die angegebene Datei. Es k"onnen auch Wildcards (`\verb"*"' oder 
`\verb"?"') angegeben werden, aber dabei ist Vorsicht geboten!
Man l"oscht sich nur allzuleicht Daten, die man nicht l"oschen wollte!
So l"oscht 

\begin{verbatim}
  del *.prg
\end{verbatim}

alle Dateien im aktuellen Verzeichnis, die die Extension `{\tt .PRG}'
besitzen. Siehe hierzu auch unbedingt Abschnitt \ref{wildcards}.
Gibt man jeden Namen einzeln an und/oder nutzt die `-q' Option ({\em query},
Nachfrage), geht man auf Nummer sicher.

DEL und seine Equivalente RM und ERA geben eine englische Meldung aus, was
gel"oscht wird. Ist diese englische Meldung in einer Batchabarbeitung 
st"orend, so kann diese auch mit der \mbox{`-s'} Option ({\em silent\/}) unterdr"uckt
werden.

% ~~~~~~~~~~~~~~~
\subsection{DELENV}
Syntax: DELENV {\em varname}

Mit diesem Befehl kann die Environmentvariable {\em varname\/} gel"oscht
werden. Dieser Befehl stellt also das Komplement zu SETENV dar.

% ~~~~~~~~~~~~~~~
\subsection{DIR}
Syntax: DIR [-aepw]\ [{\em pathname\/}]

Der Inhalt des angegebenen Pfades, oder, wenn kein Pfad angegeben ist, der 
Inhalt der aktuellen Directories wird ausgegeben. Normalerweise werden
Dateien, bei denen das {\em hidden\/}- oder {\em system\/}-Attribut gesetzt ist,
nicht mit ausgegeben.

Wird jedoch die `-a' Option ({\em all\/}) angegeben, so werden auch diese Dateien
mit ausgegeben. Mit der `-e' Option ({\em extended\/}) werden auch die Attribute
{\em read-only\/}, {\em system\/} und {\em hidden\/} mit ausgegeben.
Ist das Attribut gesetzt, so erscheint der Buchstabe `r',`h' oder `s' und
wenn das Attribut gel"oscht ist, erscheint ein `-'. Mit der `-p' Option
({\em pause\/}) wird auf einen Tastendruck gewartet, sobald eine volle Seite
ausgegeben wurde. Mit der `-w' Option ({\em wide\/}) werden 6 Dateinamen pro Zeile
ausgegeben, daf"ur aber ohne L"ange, Datum und Uhrzeit.

% ~~~~~~~~~~~~~~~
\subsection{DUMP}
Syntax: DUMP [-s{\em hexoffset\/}]\  {\em filename}

Dieser Befehl gibt einen Hexdump der angegebenen Datei aus. Wird als Option
ein Offset angegeben, so wird die Datei erst ab diesem Offset ausgegeben.
Beispiel:

\begin{verbatim}
  dump -s2E test.txt
\end{verbatim}

% ~~~~~~~~~~~~~~~
\subsection{ECHO}
Syntax: ECHO [ON$\mid$OFF$\mid${\em string\/}]

Die auf diesen Befehl folgende Zeile wird, normalerweise, auf dem Bildschirm
ausgegeben. ECHO wird gerne in Batchdateien verwendet um Meldungen auf
dem Bildschirm auszugeben. Man kann ihn aber auch dazu benutzen, um eine
kleine Textdatei zu erstellen, und das geht so:

Die erste Zeile der Batchdatei wird mit `\verb">"{\em dateiname}' in eine
Datei umgeleitet. Alle weiteren Zeilen werden mit `\verb">>"{\em dateiname}'
an die bestehende Datei angeh"angt.
Dieses Verfahren ist allerdings ziemlich aufwendig und nur dann sinnvoll,
wenn eine kleine Datei schnell erstellt werden soll und kein Texteditor
zur Verf"ugung steht.

Auch Sonderzeichen k"onnen mit ECHO ausgegeben werden. Dazu mu\ss\ anstelle 
des Sonderzeichens `\&{\em hh}' angegeben werden, wobei {\em hh\/} hierbei der
Hexcode des Sonderzeichens ist.

ECHO besitzt noch eine weitere Funktion. Mit ihr kann festgelegt werden, ob
bei der Abarbeitung einer Batch-Datei die einzelnen Befehle ausgegeben werden
oder nicht. Grundeinstellung ist ECHO OFF. Mit ECHO ON schaltet man die
Ausgabe ein. Wird nur ECHO eingegeben, wird der aktuelle ECHO-Status abgefragt.

% ~~~~~~~~~~~~~~~
\subsection{ERA}
Syntax: ERA [-qs]\ \{{\em filename\/}\}

Ist equivalent zu DEL.

% ~~~~~~~~~~~~~~~
\subsection{EXIT}
Syntax: EXIT

Dieser Befehl beendet den CLI und kehrt zum aufrufenden Programm zur"uck, und 
das ist in der Regel das Desktop.

% ~~~~~~~~~~~~~~~
\subsection{FKEY}
Syntax: FKEY [-e]\  F{\em number\/}\ $=$\ {\em text}

Mit diesem Befehl kann einer der 10 Funktionstasten ein maximal 19 Zeichen 
langer Text zugewiesen werden, der bei Bet"atigung der entsprechenden Taste
dann ausgegeben wird. Beispiel:

\begin{verbatim}
  fkey F4=Hallo Welt
\end{verbatim}

Die `-e' Option ({\em execute\/}) erm"oglicht es, "uber Funktionstasten
direkt Programme oder Batches auszuf"uhren. Beispiel:

\begin{verbatim}
  fkey -e F10=gem uniterm
\end{verbatim}


% ~~~~~~~~~~~~~~~
\subsection{FORMAT}
Syntax: FORMAT [A:$\mid$B:]\  [-s$\mid$-d$\mid$-dh] 
               [-v{\em volumename\/}]\  

Es wird eine Diskette in Laufwerk {\tt A:} oder {\tt B:} formatiert.
Die \mbox{`-s'} Option formatiert im Single-Sided (360K) Format und die `-d'
Option im Double-Sided (720K) Format. Bei -dh wird die Diskette auf 1.44MB
(Double sided, high density) formatiert, jedoch nur, wenn der {\sf ST}
"uber ein HD-Laufwerk verf"ugt und entsprechend modifiziert worden ist.
Die \mbox{`-v'} Option erm"oglicht es, der zu formatierenden Diskette den
Namen {\em volumename\/} zu geben. Dies ist aber nachtr"aglich auch noch mit
dem LABEL Befehl m"oglich.

% ~~~~~~~~~~~~~~~
\subsection{FRE}
Syntax: FRE [{\em drive\/}]

Gibt den Namen, den verf"ugbaren sowie den bereits belegten Speicherplatz
des aktuellen Laufwerks aus.
Es ist auch m"oglich eine Laufwerksspezifikation {\em drive\/} anzugeben, z.B.:

\begin{verbatim}
  fre d:
\end{verbatim}

w"urde Namen, verf"ugbaren und belegten Speicherplatz von Laufwerk {\tt D:}
ausgeben.

% ~~~~~~~~~~~~~~~
\subsection{GEM}
Syntax: GEM {\em filename}

Startet ein Programm, welches {\sf GEM}-Routinen benutzt. Es werden also der
Mauszeiger eingeschaltet und der Bildschirm gel"oscht.  {\em filename\/}
sollte hierbei eine ausf"uhrbare Bin"ardatei sein.

% ~~~~~~~~~~~~~~~
\subsection{HEAD}
Syntax: HEAD [-anzahl] [{\em filename\/}]

Gibt die ersten paar Zeilen einer Textdatei aus. Normalerweise werden die
ersten 10 Zeilen ausgegeben. Mit dem Anzahl-Parameter kann jedoch eine
beliebige Zeilenzahl eingestellt werden. Wird kein Dateiname angegeben,
kann HEAD als Filter verwendet werden, d.h.~er bezieht seine Eingabe durch
eine Pipe von einem anderen Programm.

% ~~~~~~~~~~~~~~~
\subsection{HELP}
Syntax: HELP

Mit diesem Befehl wird eine "Ubersicht der CLI-Befehle ausgegeben.
Ein Dr"ucken der {\sf HELP} Taste hat die gleiche Wirkung.

% ~~~~~~~~~~~~~~~
\subsection{HIDE}
Syntax: HIDE [-s] \{{\em filename\/}\}

Bei den angegebenen Dateien werden die {\em hidden\/}- und
{\em system\/}-Attribute gesetzt. 
Damit sind diese Dateien (in {\sf TOS}-Versionen ab Blitter-{\sf TOS})
vom Desktop aus nicht mehr sichtbar. Damit diese Dateien vom DIR Befehl
erkannt werden, mu\ss\ beim DIR Befehl die `-a' Option angegeben werden. 
Die \mbox{`-s'} Option ({\em silent\/}) schaltet die Vollzugsmeldung ab.

% ~~~~~~~~~~~~~~~
\subsection{HISTORY / !}
Syntax: HISTORY / !{\em number\/} / !{\em string}

Gibt die letzten 20 Befehle auf dem Bildschirm aus. Es ist nun m"oglich,
einen der in der History gespeicherten Befehle anzuw"ahlen. Und zwar:

\begin{description}

 \item[Cursortasten]\ \\
   Mit den Cursortasten `Pfeil-hoch' und `Pfeil-runter' werden die
   im history-Puffer gespeicherten Befehle bei jedem Tastendruck in
   der Kommandozeile dargestellt und k"onnen dann editiert oder einfach
   noch einmal ausgef"uhrt werden.

 \item[direkte Wahl]\ \\
   Die direkte Wahl bietet folgende zwei M"oglichkeiten:

   \begin{itemize}
     \item !{\em number\/} w"ahlt den Befehl an, der an der Stelle
       {\em number\/} im history-Puffer steht. Also beispielsweise      
 
       \begin{verbatim}
          C:> history
            1: dir
            2: cp a:\hallo c:\
            3: history
          C:> !1
       \end{verbatim}

       w"urde den Befehl DIR ausf"uhren.

     \item !{\em string\/} w"ahlt den ersten Befehl im history-Puffer an,
       der {\em string\/} als Teilwort enth"ahlt. Um bei obigem Beispiel zu
       bleiben, w"urde {\tt !cp} den Befehl Nummer~2 im history-Puffer
       ausf"uhren, also
       \begin{verbatim}
         cp a:\hallo c:\
       \end{verbatim}

   \end{itemize}

\end{description}


% ~~~~~~~~~~~~~~~
\subsection{HSHAKE}
Syntax: HSHAKE [XON$\mid$RTS$\mid$NONE]

HSHAKE stellt das Protokoll der seriellen Schlittstelle des {\sf ST}'s ein.
Wird kein Parameter oder NONE angegeben, so wird das Handshake abgeschaltet,
bei XON schaltet der CLI den {\sf ST} auf XON/XOFF-Protokoll um, und bei RTS
auf RTS/CTS, was aber leider in "alteren {\sf TOS}-Versionen nicht
funktioniert.

% ~~~~~~~~~~~~~~~
\subsection{IGNORE}
Syntax: IGNORE {\em command}

Mit dem IGNORE-Befehl kann man erzwingen, da\ss\ ein Befehl von
Diskette bzw.~Festplatte geladen wird, auch wenn bereits ein eingebauter
Befehl gleichen Namens vorhanden ist.

\begin{verbatim}
ignore dir
\end{verbatim}

w"urde bewirken, da\ss\ sich der CLI so verh"alt, als w"are der DIR-Befehl
nicht eingebaut. Daraufhin sucht er dann die {\sf PATH}-Variable nach einem
Programm namens {\tt DIR.TTP}, {\tt DIR.PRG} usw.~ab.
Siehe dazu auch Abschnitt \ref{revive}.

% ~~~~~~~~~~~~~~~
\subsection{INVERT}
Syntax: INVERT

Invertiert den Bildschirm, also wei\ss{}e Buchstaben auf schwarzem Grund und 
umgekehrt.

% ~~~~~~~~~~~~~~~
\subsection{LABEL}
Syntax: LABEL {\em volumename}

Dem aktuellen Laufwerk wird der Name {\em volumename} gegeben.

% ~~~~~~~~~~~~~~~
\subsection{LOCK}
Syntax: LOCK [-s] \{{\em filename\/}\}

Bei der angegebenen Datei wird das {\em read-only\/} Attribut gesetzt.
Danach kann diese Datei nur noch gelesen, aber nicht mehr beschrieben werden.
Die \mbox{`-s'} Option ({\em silent\/}) schaltet die Vollzugsmeldung ab.

% ~~~~~~~~~~~~~~~
\subsection{LOGCNT}
Syntax: LOGCNT

Normalerweise bricht der CLI nach 3 Login-Versuchen ab und kehrt zu dem
aufrufenden Programm zur"uck. Der {\sf LOGCNT} (Continuous Login) bewirkt, da\ss\
der Benutzer beliebig viele Versuche hat, sich zu identifizieren. Dadurch
wird auch bei Fehlversuchen nicht zum aufrufenden Programm zur"uckgekehrt.
Der CLI kann damit dazu dienen, den Computer `abzuschlie\ss{}en'; hierzu
wird der CLI z.B.~so installiert, da\ss\ er nach dem Einschalten des Computers
immer ausgef"uhrt wird und in {\tt autoexec.bat} der {\sf LOGCNT}
Befehl, gefolgt von {\sf LOGIN} steht. Aber dann das Passwort nicht vergessen!

% ~~~~~~~~~~~~~~~
\subsection{LOGIN}\label{login}
Syntax: LOGIN

Mit dem LOGIN Befehl ist es m"oglich, mehreren Benutzern eigene
CLI-Um\-gebungen (also Environments) bereitzustellen.

Dabei wird jedem Benutzer Benutzername, Passwort, voller Name und ein
{\sf HOME} Directory zugewiesen. Diese Benutzerdaten werden in einer Datei
{\tt PASSWD} festgelegt. Der CLI sucht diese Datei in dem Directory,
welches in der Environmentvariablen {\sf LOGIN} angegeben ist.
Bevor der Befehl LOGIN eingegeben wird, sollte also diese Variable
entsprechend gesetzt werden.

Nach Eingabe von LOGIN fordert der CLI zur Eingabe des Benutzernamen auf.
Ist der Benutzername in der {\tt PASSWD}-Datei nicht eingetragen, so hat der
Benutzer drei Versuche einen g"ultigen Benutzernamen einzugeben. Ist dies
nicht geschehen, so wird der CLI beendet und zum aufrufenden Programm
zur"uckgekehrt.

Ist der Benutzer eingetragen, so wird nach dem Passwort gefragt. Ist kein
Passwort vorhanden, gen"ugt Bet"atigung der {\sf RETURN}-Taste. Wurde das
g"ultige Passwort eingegeben, so werden die Environmentvariablen {\sf USER}
und {\sf HOME} entsprechend gesetzt, in das entsprechende {\sf HOME}-Directory
gewechselt und dort die Datei {\tt LOGIN.BAT} ausgef"uhrt. Au\ss{}erdem wird
die History gel"oscht. In der Datei {\tt LOGIN.BAT} kann sich so jeder
Benutzer seine eigenen Voreinstellungen sichern.

Aufbau der {\tt PASSWD}-Datei:

\vskip.4cm
\centerline{
  {\em user},{\em password},{\em uid},{\em gid},{\em username},
  {\em home\_directory}[,{\em default-shell}]\/ CR/LF}
\vskip.2cm

Ein neuer Usereintrag k"onnte dann etwa so aussehen:
\nopagebreak

\begin{verbatim}
SuperUser,,0,0,Peter Meier,e:\super\,c:\command.prg
\end{verbatim}

Beim {\em user\/}, also dem Namen unter dem sich ein Benutzer eingelogged
hat und welcher in der Environmentvariablen {\sf USER} gespeichert wird,
wird Gro\ss{}- und Kleinbuchstaben unterschieden, ebenso beim {\em password\/}.
Das Passwort wird verschl"usselt abgespeichert und kann nur mit dem
PASSWD-Befehl ge"andert werden.
{\em uid\/} und {\em gid\/} sind ganze Zahlen und werden vom CLI ignoriert,
m"ussen aber aus Kompatibilit"atsgr"unden vorhanden sein.
{\em username\/} ist der volle Benutzername, der in der Environmentvariablen
{\sf USERNAME} gespeichert wird. Die Environmentvariable {\sf HOME} wird mit 
{\em home\_directory\/} belegt.
Soll nach dem login nicht der CLI gestartet werden, sondern eine andere Shell
oder ein anderes Programm, so kann noch optional {\em default-shell\/} angegeben
werden.
% ~~~~~~~~~~~~~~~
\subsection{LS}
Syntax: LS [-aep]\ [{\em pathname\/}]

Gleiche Funktion wie DIR, nur mit Voreinstellung Option `-w' gesetzt.


% ~~~~~~~~~~~~~~~
\subsection{LTTY}
Syntax: LTTY

Der Befehl LTTY ({\em lock TTY\/}) erm"oglicht eine Verriegelung der
Tastatur. Der Benutzer wird nach einem Passwort gefragt und mu\ss\ dieses
dann zur Sicherheit noch einmal eingeben.
Die Tastatur l"a\ss{}t sich nun nur noch durch Eingabe dieses Passwortes
oder nat"urlich durch einen Reset des Rechners wieder entriegeln.


% ~~~~~~~~~~~~~~~
\subsection{MAN}
Syntax: MAN [{\em level\/}]\/ {\em command}

Es wird die Datei \verb"command.*" aus einem der Verzeichnisse,
welche in der Environmentvariablen {\sf MAN} gespeichert sind, ausgegeben.
Man kann sich so also ein oder mehrere Directories mit Hilfstexten
(ASCII-codiert) anlegen, die jeweils die Endung {\tt .MAN} tragen k"onnen.
Wird dabei die optionale Zahl {\em level\/} angegeben, so sucht der CLI nach
einer Extension, die mit dieser Zahl beginnt. Dabei darf sich {\em level\/}
im Bereich null bis sieben bewegen. So k"onnte die Beschreibung f"ur
den {\sf C}-Befehl {\sf strcpy()} etwa {\tt STRCPY.3C} hei\ss{}en. Dabei steht
die 3 f"ur Level 3 und das `C' f"ur die Programmiersprache {\sf C}.

Man k"onnte also den Utilities und anderen Programmen Level 1, den
Betriebssystemaufrufen den Level 2 und Bibliotheksfunktionen verschiedener
Programmiersprachen den Level 3 zuordnen, wobei der drei noch ein Kennbuchstabe
f"ur die Programmiersprache nachgestellt wird.

Manchmal kann es sinnvoll sein, mehrere Hilfstexte in einer Datei abzulegen,
die aber unter verschiedenen Namen angesprochen werden soll. So k"onnte man
alle Stringbefehle in einer Datei {\tt STRING.3C} ablegen. Nun soll diese Datei
auch unter den Namen {\tt strcpy}, {\tt strcmp}, {\tt strcat} u.s.w.~angesprochen werden.
Dazu wird eine Datei {\tt MAN.IDX} im Hilfstextdirectory angelegt, die pro Zeile
einen Namen einer Datei zuordnet. Dabei beginnt eine Zeile mit dem Namen,
unter dem die Datei angesprochen werden soll. Dann folgen ein oder
mehrere Leerzeichen und schlie\ss{}lich der Dateiname.
Die Datei k"onnte also z.B.~so aussehen:

\begin{verbatim}
strcpy          string
strcmp          string
strcat          string
fopen           gemfile
fcreate         gemfile
\end{verbatim}

Eine solche Indexdatei kann in jedem der in der {\sf MAN} Environmentvariablen
abgelegten Directories angelegt werden. Dabei bezieht sich jeder Dateiname
auf das jeweilige Directory!

Normalerweise wird die Textdatei durch den internen MORE Befehl ausgegeben.
Es kann dazu jedoch auch z.B.~ein Programm benutzt werden. Dazu wird in
der {\sf PAGER} Variablen der Name des Befehls abgelegt, der statt MORE die
Datei ausgeben soll.

% ~~~~~~~~~~~~~~~
\subsection{MFREE}
Syntax: MFREE

Dieser Befehl gibt den aktuell verf"ugbaren Hauptspeicherplatz aus.

% ~~~~~~~~~~~~~~~
\subsection{MKDIR}
Syntax: MKDIR {\em dirname}

Um einen neuen Ordner {\em dirname\/} anzulegen verwendet man der MKDIR Befehl.

\begin{verbatim}
  mkdir TEST
\end{verbatim}

legt einen Ordner mit Namen {\tt TEST} an.

% ~~~~~~~~~~~~~~~
\subsection{MORE}
Syntax: MORE \{{\em filename\/}\}

MORE ist ein Ausgabebefehl, der Dateien seitenweise auf dem Bildschirm 
anzeigt, und ausgibt, wieviel Prozent der Datei schon ausgegeben sind.
Mit der Taste `b' kann zur"uckgebl"attert werden, jede andere Taste
bl"attert vorw"arts. Mit der Taste `n' wird, wenn mehrere Dateien
ausgegeben werden sollen, die aktuelle Ausgabe abgebrochen und
mit der n"achsten Datei fortgefahren. Mit Control-C oder `q' kann jederzeit
die Ausgabe abgebrochen werden.

Wird kein Dateiname angegeben, so liest MORE von `stdin', d.h.~es kann
mit einer Pipe die Ausgabe eines Programmes als Eingabe von MORE
verwendet werden.

% ~~~~~~~~~~~~~~~
\subsection{MOVE oder MV}
Syntax:  \parbox[t]{6.1cm}{
        MOVE \hfill [-ns]\ {\em pathname\/}
                     [{\em pathname\/}] \linebreak
        MV   \hfill [-ns]\ {\em pathname\/}
                     [{\em pathname\/}]}
        \parbox[t]{2cm}{oder}


Bewirkt exakt dasselbe wie COPY, jedoch wird die Quelldatei nach dem 
Kopiervorgang gel"oscht. Die Datei(en) werden also verschoben. Die Option
\mbox{`-s'} ({\em silent\/}) bewirkt, da\ss\ dieser Vorgang nicht auf dem Schirm
mitprotokolliert wird.

% ~~~~~~~~~~~~~~~
\subsection{MS}
Syntax: MS [ON$\mid$OFF]

MS ON aktiviert den Mauszeiger. MS OFF ist das Komplement zu MS ON.

% ~~~~~~~~~~~~~~~
\subsection{PASSWD}
Syntax: PASSWD

Mit diesem Befehl kann man sein Passwort "andern. Die Benutzerf"uhrung ist 
selbsterkl"arend.

% ~~~~~~~~~~~~~~~
\subsection{PATH oder PWD}
Syntax: PATH oder PWD

Mit diesem Befehl wird das aktuelle Verzeichnis ausgegeben.

% ~~~~~~~~~~~~~~~
\subsection{POPD}
Syntax: POPD

Ein Pfad wird vom Pfadstapel geholt und
zum aktuellen Pfad gemacht. Siehe hierzu auch Abschnitt
\ref{pushd}.


% ~~~~~~~~~~~~~~~
\subsection{PRINTENV}
Syntax: PRINTENV

Gibt die Namen aller Environmentvariablen und ihren Inhalt auf dem Bildschirm 
aus.

% ~~~~~~~~~~~~~~~
\subsection{PROMPT}\label{prompt}
Syntax: PROMPT [{\em string\/}]

Nach dem Starten meldet sich der CLI normalerweise mit einem Prompt, der
aus dem aktuellen Verzeichnis, und einem `$>$'-Zeichen aufgebaut ist
({\sf MS-DOS} l"asst gr"ussen). Mit dem PROMPT-Befehl kann nun dieser
Prompt umdefiniert werden. Der angegebene {\em string\/} wird unver"andert
als Prompt ausgegeben, bis auf einige speziellen Zeichenkombinationen,
die in Tabelle \ref{prompts} aufgef"uhrt sind.
\nopagebreak

\begin{table}
\begin{center}
\begin{tabular}{lcl}
         \&n    &:& aktuelles Laufwerk\\
         \&p    &:& aktueller Pfad\\
         \&d    &:& Datum\\
         \&t    &:& Zeit\\
         \&v    &:& Version\\
         \&g    &:& $>$\\
         \&l    &:& $<$\\
         \&q    &:& $=$\\
         \&h    &:& Backspace\\
         \&\_   &:& CR/LF\\
         \&e    &:& Escape\\
         \&\&   &:& Ampersand-zeichen\\
         \&m    &:& Dollar (MONEY)-Zeichen\\
         \&u    &:& $|$\\
	 \&!	&:& aktuelle Zeilennummer\\
\end{tabular}
\end{center} \caption{\label{prompts} Sonderzeichen im Prompt}
\end{table}

Einige dieser Zeichen k"onnten nicht direkt eingegeben werden oder h"atten
f"ur den CLI eine besondere Bedeutung, so w"urde das `$>$' als Umlenkung
erkannt werden. Wenn daher im Prompt das `$>$' erscheinen soll, so wird an
seiner Stelle `{\tt \&g}' im Promptstring eingegeben.
Mit

\begin{verbatim}
  prompt &p&g
\end{verbatim}

wird immer der aktuelle Pfad, gefolgt vom `$>$'-Zeichen als Prompt
ausgegeben.

PROMPT ohne Argument stellt wieder den default Prompt ein, d.h.~so, wie er
nach dem Einschalten war.

% ~~~~~~~~~~~~~~~
\subsection{PUSHD}\label{pushd}
Syntax: PUSHD [{\em pathname\/}]

Bef"ordert den angegebenen Pfad auf den Pfadstapel.
Der Pfadstapel fa\ss{}t max.~16 Pfade. Wird PUSHD ohne
Argument aufgerufen, so wird der aktuelle Pfad abgelegt.

% ~~~~~~~~~~~~~~~
\subsection{RENAME oder REN}
Syntax: RENAME oder REN [-ns]\ {\em pathname\/} {\em filename}

Mit diesem Befehl kann eine oder mehrere Dateien umbenannt werden. Ist schon 
eine Datei gleichen Namens vorhanden, so wird gefragt, ob diese gel"oscht 
werden soll, oder ob die Quelldatei nicht umbenannt werden soll.
Beispiel:

\begin{verbatim}
  rename *.txt *.doc
\end{verbatim}

"andert die Endungen aller {\tt .TXT} Dateien im aktuellen Verzeichnis in 
{\tt .DOC} um.

Mit der Option `-n' ({\em no query\/}) wird die Nachfrage abgeschaltet, ob
eine im Zielpfad schon vorhandene Datei gleichen Namens gel"oscht werden
soll oder nicht.
Die \mbox{`-s'} Option ({\em silent\/}) schaltet die Vollzugsmeldung ab.


% ~~~~~~~~~~~~~~~
\subsection{REVIVE} \label{revive}
Syntax: REVIVE {\em command}

Mit diesem Befehl kann ein Befehl, der mit dem IGNORE-Befehl abgeschaltet
wurde, wieder {\em zum Leben erweckt\/} werden.

% ~~~~~~~~~~~~~~~
\subsection{RM}
Syntax: RM [-qs]\ {\em filename\/} [{\em filename\/}]

Siehe dazu DEL.

% ~~~~~~~~~~~~~~~
\subsection{RMDIR}
Syntax: RMDIR [-r$\mid$-a] {\em pathname}

Mit diesem Befehl kann ein Ordner gel"oscht werden. Dabei mu\ss\ der Ordner
mit komplettem Pfad angegeben werden.
Der Order mu\ss\ im Normalfall leer sein. Ist sich der Benutzer sicher, da\ss\
ein kompletter Ordner gel"oscht werden soll, so kann er unter Angabe der
Option `-r' ({\em recursive\/}) oder `-a' ({\em all\/}) jeden beliebigen
Ordner l"oschen.

% ~~~~~~~~~~~~~~~
\subsection{SETENV}
Syntax: SETENV {\em varname\/} [{\em string\/}]

Mit diesem Befehl kann einer Environmentvariablen ein neuer Inhalt,
{\em string\/}, zugewiesen werden. Name und Inhalt sind dabei entweder durch ein 
Leerzeichen oder ein `$=$'-Zeichen getrennt. Man kann nat"urlich auch ohne
SETENV einer Variablen einen Inhalt zuweisen. 

\begin{verbatim}
  setenv TEMP Hallo
\end{verbatim}

und

\begin{verbatim}
  TEMP=Hallo
\end{verbatim}

sind also vollkommen gleichwertig. Wird SETENV ohne Parameter aufgerufen, so 
werden alle vorhandenen Variablen ausgegeben (genau wie beim PRINTENV-Befehl).

% ~~~~~~~~~~~~~~~
\subsection{SLEEP}
Syntax: SLEEP

Mit diesem Befehl l"asst sich der Bildschirm dunkelschalten. Dies ist sinnvoll,
wenn man die Arbeit mit dem CLI f"ur l"angere Zeit unterbricht, aber den
Rechner bzw. Monitor nicht abschalten m"ochte. Ein zuvor eingegebener SLEEP
Befehl schont dann die Bildr"ohre des Monitors. Der Schirm wird durch
Bet"atigen einer beliebigen Taste wieder eingeschaltet.

% ~~~~~~~~~~~~~~~
\subsection{STEP}
Syntax: STEP {\em step\_rate}

Der STEP-Befehl stellt eine neue Steprate f"ur die beiden
Laufwerke {\tt A:} und {\tt B:} ein. Erlaubte Werte f"ur {\em step\_rate\/}
sind: 2, 3, 6 und 12. Die Angabe erfolgt in Millisekunden.

% ~~~~~~~~~~~~~~~
\subsection{TEE}
Syntax: TEE [-a] {\em filename}

Der Inhalt einer Pipe wird in eine Datei {\em filename} abgezweigt, die
Funktion der Pipe dadurch nicht beeintr"achtigt. Mit der `-a' Option wird
an eine bestehende Datei angeh"angt.

% ~~~~~~~~~~~~~~~
\subsection{TERM}
Syntax: TERM

TERM aktiviert den Terminalmodus. Dieser entspricht dem des von Atari
gelieferten Emulator-ACC's, welches einen einfachen {\sf DEC} VT-52
Terminalemulator zur Kommunikation "uber die serielle Schnittstelle darstellt.
Alle von der Tastatur eingegebenen Zeichen werden also an die serielle 
Schnittstelle gesendet. Ggf.~mu\ss\ die Baudrate mit dem BAUD-Befehl
eingestellt werden. Nach dem Einschalten befindet sich der Rechner
normalerweise im 9600 Baud Modus. Verlassen wird der Terminalmodus mit 
der {\sf HELP} oder {\sf UNDO} Taste. Bei Remotebetrieb ist der {\sf TERM}
Befehl nicht sinnvoll, und ist daher deaktiviert.

% ~~~~~~~~~~~~~~~
\subsection{TIME}
Syntax: TIME [-s]

Der TIME-Befehl dient dazu, die Systemzeit abzufragen oder zu stellen. Nach 
Eingabe des Befehls wird die aktuelle Zeit ausgegeben. Dann kann eine neue
Zeit eingegeben werden. Ist die eingegebene Zeit ung"ultig oder wird einfach
nur die {\sf RETURN}-Taste bet"atigt, so bleibt die urspr"ungliche Zeit
unver"andert. Bei Angabe der \mbox{`-s'} Option ({\em set\/}) wird die aktuelle Zeit
in die Environmentvariable {\sf TIME} geschrieben.

% ~~~~~~~~~~~~~~~
\subsection{TOUCH}
Syntax: TOUCH [-s] \{{\em filename\/}\}

TOUCH aktualisiert das Dateidatum also, das Erstellungsdatum einer Datei.
Die \mbox{`-s'} Option ({\em silent\/}) schaltet die Vollzugsmeldung ab.

% ~~~~~~~~~~~~~~~
\subsection{TYPE}
Syntax: TYPE {\em filename}

Gibt die angegebene Datei aus. Die Ausgabe kann z.B.~in eine Datei
umgelenkt werden (wie bei den meisten anderen Befehlen auch).

% ~~~~~~~~~~~~~~~
\subsection{UNALIAS}
Syntax: UNALIAS {\em name}

Ein Eintrag wird aus der ALIAS-Liste entfernt. Bewirkt dasselbe wie
ALIAS mit der `-d'-Option.

% ~~~~~~~~~~~~~~~
\subsection{UNHIDE}
Syntax: UNHIDE [-s] \{{\em filename\/}\}

Bei den angegebenen Dateien werden die Attribute {\em hidden\/} und {\em system\/}
gel"oscht.
Die \mbox{`-s'} Option ({\em silent\/}) schaltet die Vollzugsmeldung ab.

% ~~~~~~~~~~~~~~~
\subsection{UNLOCK}
Syntax: UNLOCK [-s] \{{\em filename\/}\}

Bei den angegebenen Dateien wird das {\em read-only\/} Attribut gel"oscht.
Die \mbox{`-s'} Option ({\em silent\/}) schaltet die Vollzugsmeldung ab.

% ~~~~~~~~~~~~~~~
\subsection{VERSION oder VER}
Syntax: VERSION oder VER

Gibt die Versionsnummer des CLI und {\sf TOS}-ROMs aus.

% ~~~~~~~~~~~~~~~
\subsection{WAIT}
Syntax: WAIT [-s$\mid$-t {\em time\/}$\mid$-d {\em date\/}]

Dieser Befehl gibt eine englische Meldung aus und wartet auf Bet"atigung
der {\sf RETURN}-Taste.
WAIT wird sinnvollerweise nur in Batchdateien verwendet. Ist die englische
Meldung in einer Batchabarbeitung st"orend, so kann diese auch mit der
\mbox{`-s'} Option ({\em silent\/}) unterdr"uckt werden.
Bei Angabe der \mbox{`-t'} bzw.~\mbox{'-d'} Option wartet der CLI bis zur angegebenen
Uhrzeit bzw.~zum angegebenen Datum. Das Format ist dasselbe wie bei den
Befehlen TIME und DATE.

% ~~~~~~~~~~~~~~~
\subsection{WC}
Syntax: WC [{\em filename\/}]

Mit WC (Word Count) werden die Zeichen, Zeilen und Worte einer Textdatei 
gez"ahlt. Wird kein Dateiname angegeben, bezieht WC seine Eingabe von
`stdin'. Damit kann WC seine Eingabe durch eine Pipe von einem anderen
Programm beziehen.

% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\end{document}

# E O F #


