home *** CD-ROM | disk | FTP | other *** search
/ Dream 51 / Amiga_Dream_51.iso / Atari / Desktops / nodsk302.lzh / DOKU / CLI.TXT next >
Text File  |  1995-01-19  |  69KB  |  1,462 lines

  1. ,--------------------------------------------------------------------.
  2. |                                                      18.12.1994    |
  3. | CLI.TXT                                                            |
  4. |                                                                    |
  5. | Beschreibung des Command Line Interpreter (CLI) im noDesktop V3.00 |
  6. |                                                                    |
  7. | Copyright ╜1994 by no|Software GmbH                                |
  8. |                                                                    |
  9. | Autoren:                                                           |
  10. |    Ralph Mertens                                                   |
  11. |    Andreas Fahrig                                                  |
  12. |    Christian Stamm                                                 |
  13. |    Marco Zahnen                                                    |
  14. |                                                                    |
  15. `--------------------------------------------------------------------'
  16.  
  17.  
  18. Inhalt
  19. ======
  20. 1 ......................................................... Einleitung
  21. 2 ........................ Direkte Tastatureingabe / Die Shell des CLI
  22. 3 ............................................... Die Command-Language
  23. 3.1 ........................................... Aufbau eines Kommandos
  24. 3.2 ........................................ Schalterargumente (flags)
  25. 3.3 ................................... Umlenkung der Ein- und Ausgabe
  26. 3.4 ...................................................... Metazeichen
  27. 3.5 ......................................................... Modifier
  28. 3.5.1 ............................................. Execution-Modifier
  29. 3.5.2 .................................................. Path-Modifier
  30. 3.6 ........................................ Ausgabe von Sonderzeichen
  31. 3.7 ........................................................ Variablen
  32. 3.8 ............................................. Bedingte Anweisungen
  33. 3.9 .......................................................... Aliases
  34. 3.10 ................................................. History - Liste
  35. 4 ........................................... Parsing und Substitution
  36. 4.1 ............................................. History-Substitution
  37. 4.1.1 ............................................. Zeilensubstitution
  38. 4.1.2 ............................................... Wortsubstitution
  39. 4.2 ............................................... Alias-Substitution
  40. 4.3 .................................... Parsing und Makrosubstitution
  41. 4.4 ............................................ Variablensubstitution
  42. 4.4 .................................. Verhinderung von Substitutionen
  43. 4.6 ....................................... Ausführung eines Kommandos
  44. 5 ............................................................ Scripte
  45. 6 ................................................... Die WCON-Fenster
  46. 6.1 ....................................... Öffnen eines WCON-Fensters
  47. 6.2 ...................... Programmunterbrechung in einem WCON-Fenster
  48. 6.3 .......................... VT52-Funktionalität eines WCON-Fensters
  49. 6.4 ...................... Primitive Terminal-Fenster (WAUX und WTALK)
  50. 7 .................................................. Interne Kommandos
  51. 7.1 ....................................... Graphikmodus und Textmodus
  52. 7.2 ...................................... Ausgabe von Fehlermeldungen
  53. 8 ..................................................... Fensternummern
  54.  
  55. Anhang
  56. A1 ............................. Übersicht über die internen Variablen
  57. A2 .............................. besondere CLI-Anweisungen:
  58.                                         return
  59.                                         goto
  60.                                         if, then, else, elif, endif
  61.                                         foreach, end, break, continue
  62.                                         while, wend, break, continue
  63.  
  64.  
  65.  
  66.  
  67. 1  Einleitung
  68. =============
  69.  
  70. Der CLI des no|Desktop bildet die zentrale Schnittstelle zwischen der
  71. Desktop-Oberfläche und dem Benutzer. Ähnlich dem 'csh' unter UNIX dient
  72. der CLI der Übersetzung von Befehlen oder Programmen und deren
  73. Bearbeitung.
  74.  
  75. Der CLI tritt in drei verschiedenen Fällen in Aktion:
  76. 1. im Dialog mit dem Benutzer bei der direkten Eingabe über die Tastatur
  77.    (im WSH-Fenster)
  78. 2. bei der Bearbeitung von Scripten (Dateien, die eine Befehlsliste
  79.    enthalten [*.NDS])
  80. 3. bei der Bearbeitung von Befehlssequenzen, die in der Definitionsdatei
  81.    für Desktop-Ereignisse abgelegt sind.
  82.  
  83. Die Funktionsweise des CLI, Namenskonventionen und Syntax sind dem 'csh'
  84. angelehnt. Im Folgenden wird die Benutzerschnittstelle des CLI als die
  85. 'shell' (Muschel) bezeichnet.
  86.  
  87.  
  88. 2  Direkte Tastatureingabe / Die Shell des CLI
  89. ==============================================
  90.  
  91. Um zur direkten Eingabe zu gelangen, drückt man gleichzeitig [SHIFT] und
  92. [ENTER](auf der Zehnertastatur) oder wählt per RECHTS-KLICK im Dropdown-
  93. Menü des Desktop den Punkt 'no|Desktop-CLI'.
  94. Die Shell des CLI dient als 'Medium', um vor allem Programme aufzurufen
  95. und Kommandos auszuführen.
  96. no|Desktop hat eine Reihe von internen Kommandos, die häufig benutzte Aktionen
  97. steueren, wie z.B. Kopieren (cp) oder Auflisten (ls) von Dateien. Durch
  98. Eingabe von 'help' werden alle verfügbaren internen Kommandos aufgelistet.
  99. Als 'externe' Kommandos werden Programme verstanden, die durch den Aufruf
  100. ausgeführt werden.
  101. Die Shell arbeitet zeilenorientiert, das heißt, eine Kommandozeile darf über
  102. Tastatureingabe nur eine Zeilenbreite betragen, jedoch maximal 128 Zeichen.
  103. Um in der Zeile bequem editieren zu können, bietet die shell einige
  104. Tastaturkombinationen:
  105.  
  106. [BACKSPACE], [CTRL]+H - löscht das Zeichen links vom Cursor
  107. [DELETE]              - löscht das Zeichen unter dem Cursor
  108. [CTRL]+W              - löscht ein Wort
  109. [CTRL]+U              - löscht die ganze Zeile
  110. [CLR/HOME]            - löscht den Bildschirm
  111. [CTRL]+B              - Sprung zum vorigen Wort (backward skip)
  112. [CTRL]+F              - Sprung zum nächsten Wort (forward skip)
  113. [CTRL]+[Pfeil rechts] - Sprung zum Ende der Zeile
  114. [CTRL]+[Pfeil links]  - Sprung zum Anfang der Zeile
  115. [Pfeil hoch]          - vorige Zeile in der Historieliste
  116. [Pfeil runter]        - nächste Zeile in der Historieliste
  117. [HELP]                - expandiert das 1. Wort auf das interne Kommando,
  118.                         das mit der Buchstabenkombination beginnt
  119.                       - expandiert jedes weitere Wort auf den Dateinamen
  120.                         im aktuellen Verzeichnis, das mit der Buchstaben-
  121.                         kombination beginnt
  122.                       - jedes weiter Drücken von HELP sucht das
  123.                         nächstmögliche passende Kommando/Argument
  124. [UNDO]                - zeigt die für HELP eingegebene Zeichenkette
  125. [INSERT]              - wechselt zwischen Überschreibe- und Einfügemodus
  126. [RETURN]              - beendet die Eingabe und führt das Kommando aus
  127. [SHIFT]+[ENTER]       - schließt das WSH-Fenster bzw. wechselt in den
  128.                         Graphikmodus
  129.  
  130. Nach der Ausführung des Kommandos gibt die shell einen 'prompt' auf dem
  131. Bildschirm aus und signalisiert damit die Eingabebereitschaft. Die
  132. Zeichenkette, die durch 'prompt' ausgegeben wird, ist auf den aktuellen
  133. Benutzerpfad eingestellt:
  134.  
  135. Beispiel:  C:\NODESK\USR> _
  136.  
  137.  
  138. 3  Die Command-Language
  139. =======================
  140.  
  141. 3.1  Aufbau eines Kommandos
  142. ---------------------------
  143.  
  144. Die Kommandos des CLI bestehen aus einer Liste von Zeichenketten oder
  145. auch Worten, die durch Leerzeichen voneinander getrennt sind, wobei das
  146. erste Wort das eigentliche Kommando darstellt. Die übrigen Worte (falls
  147. vorhanden) sind Argumente oder Parameter des Kommandos.
  148. Das Kommando
  149.  
  150.       cat beispiel.txt
  151.  
  152. besteht aus zwei Worten. Das interne Kommando 'cat' erhält bei Ausführung
  153. das Argument 'beispiel.txt'. 'cat' gibt den Inhalt der Datei 'beipiel.txt'
  154. über das Standardausgabe-Medium (ist in der Regel wohl der Bildschirm) aus.
  155. Die Ausgabe kann durch die Tastenkombination [CTRL]+C abgebrochen werden.
  156. Dateinamen werden intern immer in Großbuchstaben konvertiert. Anders ist
  157. dies bei Schalterargumenten (flags, s.u.). Der CLI unterscheidet hier
  158. Groß- und Kleinschreibung.
  159. Mehrere Kommandos in einer Zeile werden durch ';' voneinander getrennt und
  160. werden nacheinander abgearbeitet.
  161.  
  162. Beispiel:  ls -l  >  liste.txt; cat liste.txt; rm liste.txt
  163.  
  164. Zunächst wird eine ausführliche Liste aller Dateinamen im aktuellen
  165. Verzeichnis in die Datei 'liste.txt' geschrieben. Anschließend wird die
  166. Datei auf den Bildschirm ausgegeben und zum Schlu₧ gelöscht.
  167.  
  168.  
  169. 3.2  Schalterargumente (flags)
  170. ------------------------------
  171.  
  172. Durch optionale Schalterargumente (flags) läßt sich die Ausführung eines
  173. Kommandos verändern. Ein flag beginnt immer mit einem '-' (Bindestrich),
  174. gefolgt von mindestens einem weiteren Zeichen. GRO₧- UND KLEINSCHREIBUNG
  175. WERDEN UNTERSCHIEDEN!!!!
  176.  
  177. Beispiele:  (1)  ls
  178.             (2)  ls -l
  179.             (3)  ls -R
  180.  
  181. Kommado (1) gibt die Dateinamen im aktuellen Arbeitsverzeichnis aus. Durch
  182. Zusatz des flags '-l' [Kommando (2)] werden zum Dateinamen zusätzliche
  183. Informationen wie Dateigröße und Erstellungsdatum und -uhrzeit ausgegeben.
  184. Durch die Angabe das flags '-R' [Kommando (3)] werden auch alle im
  185. aktuellen Verzeichnis enthaltene Unterverzeichnisse durchsucht und deren
  186. Inhalt ausgegeben.
  187. Die verschiedenen flags können auch kombiniert werden, wobei die
  188. Reihenfolge der flags egal ist:
  189.  
  190.         ls -l -R
  191. oder    ls -lR
  192. oder    ls -Rl
  193.  
  194. Das interne Kommandos ls hat noch weitere wichtige und interessante flags.
  195. Andere Kommandos haben keine oder nur wenige flags, wie z.B. 'echo' mit dem
  196. einzigen optionalen flag '-n', das nach Ausgabe einer Zeile das newline
  197. unterdrückt.
  198. Durch Eingabe von 'help' gefolgt von einem internen Kommando kann man sich
  199. die flags für dieses Kommando anschauen.
  200.  
  201.  
  202. 3.3  Umlenkung der Ein- und Ausgabe
  203. -----------------------------------
  204.  
  205. Kommandos, die ihre Eingabe normalerweise von der Tastatur lesen und auf
  206. den Bildschirm schreiben, können auch so ausgeführt werden, daß die
  207. Eingabe/Ausgabe über Dateien abläuft.
  208. Das Kommando 'ls' schreibt die gefundenen Dateinamen normalerweise direkt
  209. auf den Bildschirm, Durch Eingabe von
  210.  
  211.     ls > liste.txt
  212.  
  213. wird das Ergebnis in die Datei 'liste.txt' geschrieben, nachdem diese Datei
  214. neu angelegt wurde. Für das Kommando selbst ist es unwesentlich, wohin es
  215. seine Ausgabe schreibt. Die Standard-Ausgabe ist der Bildschirm, die
  216. Umlenkung (redirection) der Standard-Ausgabe in eine Datei (und der
  217. Standard-Eingabe, der Tastatur, von einer Datei) erledigt die shell.
  218. Die Standard-Ein- und Ausgabe können in folgender Weise umgelenkt werden:
  219.  
  220.     < Dateiname     öffnet die Datei 'Dateiname' als Standard-
  221.                     Eingabe. 'Dateiname' muß vorhanden sein!
  222.     > Dateiname     erzeugt die Datei 'Dateiname' und verwendet
  223.                     sie als Ausgabedatei. Ist sie bereits
  224.                     vorhanden, wird sie überschrieben.
  225.     >> Dateiname    die Datei 'Dateiname' wird wie bei '>' als
  226.                     Ausgabedatei benutzt. Die Ausgabe wird an
  227.                     das Ende einer vorhandenen Datei gehängt.
  228.                     Existiert die Datei nicht, wird sie erzeugt,
  229.                     es sei denn, die Variable 'noclobber' ist
  230.                     gesetzt, dann erscheint eine Fehlermeldung.
  231.  
  232. Anstelle eines Dateinamens kann die Ein-/Ausgabe auch auf einige Standard-
  233. geräte umgelenkt werden:
  234.  
  235.     PRT:            Druckerschnittstelle
  236.     PRN:            Druckerschnittstelle
  237.     AUX:            serielle Schnittstelle (wie im Kontrollfeld eingestellt)
  238.  
  239. Die Anweisungsfolge
  240.  
  241.     cat CLI.TXT > PRN:
  242.  
  243. würde also den Inhalt der Datei CLI.TXT auf die Druckerschnittstelle
  244. ausgeben.
  245.  
  246. Werden Kommandos durch '|' voneinander getrennt, so wird die Ausgabe eines
  247. Kommandos mit der Eingabe des nächsten Kommandos verknüpft.
  248. Die Anweisungsfolge
  249.  
  250.      ls -l | cat -n
  251.  
  252. leitet die Ausgabe von 'ls -l' an das Kommando 'cat -n' weiter, welches
  253. das Ergebnis auf dem Bildschirm ausgibt und zusätzlich nach jeder Zeile
  254. eine Leerzeile einfügt.
  255.  
  256.  
  257. 3.4  Metazeichen
  258. ----------------
  259.  
  260. Es existiert eine Reihe von Zeichen (wie '>' oder '|'), die eine besondere
  261. Funktion haben. Diese 'Metazeichen' haben eine semantische (inhaltliche)
  262. und syntaktische Bedeutung für die shell. Allgemein haben fast alle
  263. Zeichen, die nicht Buchstaben oder Ziffern sind, eine spezielle Bedeutung.
  264. Sollen diese Zeichen in einer Zeichenkette als darstellbares Zeichen
  265. ausgegeben werden, so müssen sie bzw. die Zeichenkette 'quotiert' werden,
  266. z.B. würde
  267.  
  268.       echo 3 > 2
  269.  
  270. die Zeichenkette '3' in eine Datei namens '2' schreiben.
  271.  
  272.       echo '3 > 2'
  273.  
  274. gäbe die Zeichenkette '3 > 2' auf dem Bildschirm aus.
  275.  
  276. Eine Kommandozeile wird normalerweise dort in Wörter aufgeteilt, wo
  277. Leerzeichen oder Tabulatoren stehen, mit folgenden Ausnahmen:
  278. Die Zeichen  '|'  ';'  '<'  '>'  '('  ')'  führen ebenfalls zur Aufteilung
  279. in einzelne Wörter. Diese Metazeichen können dadurch Teil von Wörtern
  280. werden (d.h ihre Funktion verlieren), da₧ ihnen ein '`' vorangestellt wird.
  281. Zeichenketten, die durch Anführungszeichen (' oder ") eingeschlossen sind,
  282. werden als Teile von Wörtern interpretiert. Leerzeichen und die oben
  283. aufgeführten Metazeichen trennen innerhalb dieser Anführungszeichen dann
  284. nicht einzelne Wörter.
  285.  
  286. Beispiele:  echo 3 > 2    erzeugt 4 Wörter
  287.             echo 3 `> 2   erzeugt 4 Wörter ('>' wird nicht interpretiert)
  288.             echo '3 > 2'  erzeugt 2 Wörter
  289.  
  290.  
  291. 3.5  Modifier
  292. -------------
  293.  
  294. Nach der Variablensubstitution und unmittelbar vor der Ausführung des
  295. Kommandos wird die Kommandozeile daraufhin geprüft, ob am Kommando
  296. oder an den Argumenten noch Modifier stehen. Diese werden zuletzt
  297. bearbeitet.
  298. Es existieren zwei verschiedene Arten von Modifiern:
  299.  
  300. 1. Execution-Modifier
  301. 2. Path-Modifier
  302.  
  303. Modifier dienen dazu, die Art der Kommandoausführung (Execution) oder
  304. Pfadnamen (Path) zu verändern (modifizieren).
  305.  
  306.  
  307. 3.5.1  Execution-Modifier
  308. -------------------------
  309.  
  310. Diese Modifier betreffen die Ausführung eines Kommandos, Execution-Modifier
  311. werden mit einem '@' an den Kommandonamen angehängt.
  312. Folgende Modifier existieren:
  313.  
  314. Klasse A:
  315.  
  316.     @W     Die Standard-Ausgabe wird auf das Texteingabefenster
  317.            geleitet, sofern die Variable noWcon nicht gesetzt ist.
  318.            Erfolgt eine Ausgabe, wird das Fenster geöffnet bzw.
  319.            zum aktuellen Fenster. Unter Mint wird das Kommando im
  320.            singletask-Modus gestartet.
  321.     @W<n>  Die Standardausgabe wird auf das Textfenster mit
  322.            n = 0 bis 3 umgeleitet, sonst wie @W
  323.     @w     wie oben, nur daß ein bereits offenes Text-
  324.     @w<n>  Ausgabefenster nicht zum aktuellen Fenster wird.
  325.            Unter Mint wird ein 'externes' Kommando im Hintergrund
  326.            gestartet, no|Desktop wartet nicht auf die Beendigung des
  327.            Kommandos.
  328.     @T     Die Textausgabe erfolgt nicht im Fenster
  329.     @t     wie @T, nach Beendigung des Kommandos wird auf einen
  330.            Tastendruck gewartet
  331.     @G     Das Kommando wird im 'Graphikmodus' ausgeführt.
  332.            Interne Kommandos, die diese Option bieten,  werden im
  333.            Fensterdialog ausgeführt. Die Textausgabe erfolgt in
  334.            ein Textfenster, wenn verfügbar.
  335.  
  336. Klasse B (nur für externe Kommandos):
  337.  
  338.     @x     vor Ausführung wird no|Desktop ausgelagert, um mehr freien
  339.            Speicher zu Verfügung zu stellen
  340.     @X     wie @x, es wird der Arbeitspfad auf den Ordner gesetzt,
  341.            in dem sich das Programm befindet
  342.     @s, @S no|Desktop wird nicht ausgelagert, sonst wie @x, @X
  343.     @c, @C no|Desktop entscheidet anhand der Programmgrö₧e, ob ausgelagert
  344.            werden soll, sonst wie @x, @X bzw. @s, @S
  345.     @n, @N no|Desktop wird nicht ausgelagert, es werden keine Fenster
  346.            geschlossen, sonst wie @x, @X
  347.  
  348. Modifier der Klasse A und der Klasse B können zusammen angegeben werden,
  349. aber jeweils nur einer der Klasse A und einer der Klasse B, wobei die
  350. A-Option vor der B-Option stehen mu₧:
  351.  
  352.     test@TX
  353.  
  354. Die Klasse A - Modifier W1-W3 haben nur Sinn in Verbindung mit den Klasse
  355. B - Modifiers N bzw n! Wenn Modifier nicht angegeben werden, gelten die
  356. entsprechenden Einstellungen der NDQ-Datei!
  357.  
  358.  
  359. 3.5.2  Path-Modifier
  360. --------------------
  361.  
  362. Durch Modifikationen an Pfadangaben ist es möglich, nur den benötigten Teil
  363. aus dem Pfadnamen zu extrahieren. Die Modifier folgen unmittelbar auf ein
  364. Argument und werden durch ':' eingeleitet. Eine Modifikationen innerhalb
  365. von Zeichenketten, die durch " eingeschlossen sind, findet nicht statt.
  366. Steht das ':' im ersten Wort (eigentliches Kommando) oder folgt auf ein ':'
  367. ein '\', dann erfolgt keine Modifikation. Stehen mehrere jeweils durch ':'
  368. eingeleitete Modifier hintereinander, wird von links nach rechts das
  369. Erebnis jeweils erneut modifiziert. Variablen, die Doppelpunkte enthalten
  370. (z.B. shareend) müssen bei Variablen-Substitution in " gesetzt werden.
  371. Folgende Modifier stehen zur Verfügung:
  372.  
  373.     :h       Pfadangabe ohne Dateinamen (head)
  374.     :r       Pfad und Dateinamen ohne Dateiextension (root)
  375.     :e       nur Dateiextension (extension)
  376.     :t       nur Dateinamen (tail)
  377.     :n       wie -t, bei Ordnernamen '\' am Ende
  378.     :d       Laufwerksangabe (drive)
  379.     :l<n>    Zeile in Datei n = Zeilennummer
  380.     :w<n>    Wort in Zeile  n = Wortnummer
  381.     :D       Dieser Modifier ersetzt den Dateinamen durch
  382.              deren Erstellungsdatum im Format:<Djjmmddhhmmss>
  383.     :U       Alle Kleinbuchstaben in Gro₧buchstaben umwandeln
  384.     :L       Alle Gro₧buchstaben in Kleinbuchstaben umwandeln
  385.     :/       Alle '\' in '/' umwandeln
  386.  
  387. Hinweis:
  388. Der Modifier >:D< ist besonders sinnvoll, um Abhängigkeiten von Dateien zu
  389. testen. So lä₧t sich mittels dieses Modifiers ein Makefile für die TURBO-C
  390. Kommandozeilenversion entwickeln!
  391. Nach der Anwendung des Modifiers ':/' ist es nicht mehr möglich, einen Pfad
  392. mittels der anderen Modifier zu manipulieren; er sollte deshalb bei multipler
  393. Verwendung von Modiefiern immer als letzter stehen. Beispiel:
  394.    set xy = "C:\OTTO\LOLA\FRANZ.TXT"
  395.    echo $deskfile:h:L:/                  --> c:/otto/lola
  396.  
  397.  
  398. 3.6  Ausgabe von Sonderzeichen
  399. ------------------------------
  400.  
  401. Wird einem beliebigen Zeichen ein '`' vorangestellt, so wird es als
  402. normales Zeichen ausgegeben und nicht mehr interpretiert. Auf diese Weise
  403. können z.B. Metazeichen als druckbare Zeichen ausgegeben werden. Die
  404. Ausgabe nicht-druckbarer Zeichen ist ebenfalls möglich.
  405.  
  406.  
  407.     `"     ->   "          Anführungszeichen
  408.     `?     ->   ?          Fragezeichen
  409.     `\     ->   \          Backslash (umgek. Schrägstrich)
  410.     `a     ->   BEL        Bell (Systemglocke)
  411.     `b     ->   BS         Backspace
  412.     `f     ->   FF         Formfeed (Seitenvorschub)
  413.     `n     ->   LF         Linefeed (Newline)
  414.     `r     ->   CR         Carriage return (Wagenrücklauf)
  415.     `t     ->   HT         Tabulator (horizontal)
  416.     `v     ->   VT         Tabulator (vertikal)
  417.     `DDD   -> oktal        DDD = 1 bis 3 Oktalziffen
  418.     `xHH   -> hexadezimal  HH = 1 bis 2 Hexadezimalziffern
  419.  
  420.  
  421. 3.7  Variablen
  422. --------------
  423.  
  424. Der CLI verwaltet eine Reihe von Variablen. Der Inhalt von Variablen kann
  425. mit den Kommandos 'set' angezeigt oder verändert, mit 'unset' die Variable
  426. gelöscht werden. Variablennamen dürfen maximal 12 Zeichen lang sein, sie
  427. müssen mit einem Buchstaben beginnen und dürfen ansonsten nur Ziffern und
  428. Buchstaben enthalten. Der Inhalt von Variablen wird intern immer als
  429. Zeichenkette verwaltet. Einige Kommandos (z.B. eval) interpretieren den
  430. Inhalt von Variablen numerisch, eine Variable ohne Inhalt wird in diesem
  431. Fall als '0' interpretiert. Enthält eine Variable mehrere Worte, so wird
  432. bei numerischer interpretation immer nur das erste Wort interpretiert.
  433. Einige Variablen werden von no|Desktop bereitgestellt (sogenannte 'interne'
  434. Variablen). Interne Variablen haben unterschiedliche Eigenschaften:
  435. Solche Variablen, die die Hardwareeigenschaften des System beschreiben,
  436. sind nur lesbar und nicht lösch- oder veränderbar. Andere interne
  437. Variablen beinhalten sehr wichtige Informationen für den no|Desktop und werden
  438. während des Ladens der Desktopscripte initialisiert (Eine komplette
  439. Liste der internen Variablen und ihrer Bedeutung steht am Ende dieser
  440. Datei!).
  441. Bei anderen Variablen (externen) interessiert no|Desktop nur, ob diese gesetzt
  442. (definiert) sind oder nicht, der Inhalt dieser Variablen ist unwichtig.
  443. Der Inhalt von Variablen kann mit den Kommandos 'set' angezeigt oder
  444. verändert, mit 'unset' die Variable gelöscht werden.
  445. Beispiele:
  446.  
  447.     set                 gibt alle 'sichtbaren' Variablen aus
  448.     set -i              gibt interne und gesetzte Variablen aus
  449.     set -ia             zeigt alle internen Variablen, auch die
  450.                         nicht gesetzen
  451.  
  452.     set i               setzt die Variable i
  453.     set i = hallo       setzt die Variable i auf den Wert 'hallo'
  454.     set i = ( a b $i )  setzt i auf die Wortliste 'a b hallo', eine
  455.                         Wortliste muß in runde Klammern gerahmt sein
  456.  
  457. Um das Ergebnis einer Berechnung einer Variablen zuzuweisen, ist folgende
  458. Schreibweise notwendig:
  459.  
  460.     set <Variablenname> @ <Berechnung>
  461.  
  462. Beispiele:
  463.  
  464.     set i @ 1+2*3       setzt i auf den Wert '7', zuerst wird die
  465.                         Berechnung ausgeführt, dann das Ergebnis
  466.                         zugewiesen
  467.  
  468.     set i @ -wd test.c  zählt alle Wörter in test.c und weist das
  469.                         Ergebnis der Variablen i zu
  470.  
  471.  
  472. 3.8  Bedingte Anweisungen
  473. -------------------------
  474.  
  475. Bedingungen sind für den CLI Berechnungen, deren Ergebnis nur wahr oder
  476. falsch sein kann. Eine Bedingung ist erfüllt (oder wahr), wenn das Ergebnis
  477. ungleich '0' (Null) ist, sonst ist sie nicht erfüllt oder falsch. Bei der
  478. Überprüfung einer Bedingung (z.B. im 'if'-Kommando) wird nur auf die
  479. führenden Zahlen im Ergebnis geachtet, es werden immer Wörter als Zahlen
  480. interpretiert. So können auch Variableninhalte als Bedingung interpretiert
  481. werden. Die Syntax von Bedingungen (Berechnungen) und die Priorität der
  482. Operatoren entspricht der Schreibweise in 'C'. Innerhalb von Bedingungen
  483. dürfen keine Kommandos stehen (im Gegensatz zum 'csh' in Unix). Zusätzlich
  484. zu rein algebraischen und logischen Operatoren existieren solche, die
  485. Zeichenketten miteinander vergleichen oder Dateiattribute interpretieren.
  486. Die Klammerung '(...)' von Ausdrücken ist erlaubt. Sogenannte 'unäre'
  487. Operatoren stehen vor einem Ausdruck, 'binäre' zwischen zwei Ausdrücken.
  488. Im Folgenden werden alle verfügbaren Operatoren beschrieben:
  489.  
  490.   Schreibweise  Beispiel   Bescheibung
  491.  
  492.   ||, .or.      a || b        logisches 'OR'
  493.   .and.         a .and. b     logisches 'AND'
  494.   |, .bor.      a | b         bitweises 'OR'
  495.   ^, .xor.      a ^ b         bitweises 'EXOR'
  496.   .band.        a .band. b    bitweises 'AND'
  497.   ==, .eq.      a == b        Prüfung auf numerische Gleichheit
  498.   !=, .ne.      a != b        Prüfung auf numerische Ungleichheit
  499.   =~            strA =~ strB  Prüfung auf Gleichheit in Strings
  500.   !~            strA !~ strB  Prüfung auf Ungleichheit in Strings
  501.   <=, .le.      a <= b        numerisches kleiner oder gleich
  502.   >=, .ge.      a >= b        numerisches größer oder gleich
  503.   <, .lt.       a < b         numerisches kleiner
  504.   >, .gt.       a > b         numerisches größer
  505.   <<, .shl.     a << b        bit-Shift links um b Einheiten
  506.   >>, .shr.     a >> b        bit-Shift rechts um b Einheiten
  507.   +, -, *, /                  Grundrechenarten
  508.   %, .mod.      a % b         Rest der Division a / b (modulo)
  509.   !, .not.      ! a           logisches 'NOT'
  510.   ~, .bnot.     ~ a           binäres 'NOT'
  511.   -r           -r a           Datei a ist nur lesbar (readonly)
  512.   -w           -w a           Datei a ist les- und schreibbar
  513.   -x           -x a           Datei a ist ein ausführbares Programm
  514.   -e           -e a           Datei a ist vorhanden
  515.   -o           -o a           Datei a gehört Benutzer (z.Zt. dummy)
  516.   -z           -z a           die Dateilänge von a ist '0'
  517.   -d           -d a           Datei a ist ein Ordner
  518.   -wd          -wd a          Anzahl der Wörter in Datei a
  519.   -ln          -ln a          Anzahl der Zeilen in Datei a
  520.   -p           -p x           Proze₧ x existiert
  521.   -c           -c x           Cookie x existiert
  522.  
  523.  
  524. 3.9  Aliases
  525. -------------
  526.  
  527. Die shell verwaltet eine Liste mit aliases, die durch die Kommandos 'alias'
  528. und 'unalias' erzeugt, angezeigt oder verändert werden können. Aliasnamen
  529. dürfen vorhandene Kommandonamen sein. Mit einem alias kann z.B. für eine
  530. ganze Kommandosequenz eine 'Name' definiert werden (spart Tipparbeit!):
  531.  
  532.       1  alias ll 'ls -l' ersetzt ll durch ls -l
  533.       2  ll tmp           -> ls -l tmp
  534.  
  535.       3  alias            gibt alle aliases als Liste aus
  536.       4  unalias ll       löscht das alias 'll' aus der Liste
  537.  
  538.  
  539. 3.10  History - Liste
  540. ---------------------
  541.  
  542. Die shell verwaltet eine History-Liste, in welcher sie zuvor eingegebene
  543. Kommandozeilen aufbewahrt. Dies ist nützlich, um Kommandos zu wiederholen
  544. oder kleine Schreibfehler in Kommandos zu korrigieren. Die Anzahl der
  545. Einträge wird durch die Variable 'history' bestimmt. Sie kann durch
  546.  
  547.       echo $history
  548.  
  549. angezeigt werden und durch
  550.  
  551.       set history = n  (n = Zahl zwischen 1 und 999)
  552.  
  553. verändert werden. Die letzte Kommandozeile wird immer gespeichert. Es
  554. werden normalerweise nur Kommandos, die direkt eingegeben werden in die
  555. Liste aufgenommen.
  556.  
  557. Durch Eingabe von
  558.  
  559.       history
  560.  
  561. wird die History-Liste ausgegeben, die z.B. so aussehen könnte:
  562.  
  563.       9  ls -l
  564.       10 cat otto
  565.       11 cp liste.txt liste.bak
  566.       12 diff liste.txt liste.new
  567.  
  568. Die Kommandos erscheinen mit ihrer Ereignisnummer (Event-Nummer). Diese
  569. Nummer kann für die History-Substitution (siehe unten) verwendet werden.
  570.  
  571.  
  572. 4  Parsing und Substitution
  573. ===========================
  574.  
  575. Nachdem eine Kommandozeile vom CLI gelesen wurde, wird die Zeile, wenn
  576. durch ';' oder '|' getrennt, in Einzelkommandos unterteilt. Diese Kommandos
  577. werden nun übersetzt, d.h. in eine ausführbare Form gebracht. Dabei werden
  578. bestimmte Zeichensequenzen ausgetauscht (substituiert), so wird eine
  579. Variable z.B. durch ihren Inhalt ersetzt.
  580. Im folgenden wird beschrieben, in welcher Reihenfolge der CLI bei der
  581. Übersetzung der Kommandozeile in eine ausführbare Form vorgeht.
  582.  
  583.  
  584. 4.1  History-Substitution
  585. -------------------------
  586.  
  587. Es ist möglich, zuvor ausgeführte Kommandos und selbst Teile von Kommandos
  588. in ein neues Kommando zu integrieren. Dazu bedient man sich der History-
  589. Substitution. Sie beginnt immer mit einem '!' und kann mehrfach und an
  590. beliebiger Position in der Eingabezeile vorkommen. Steht hinter dem '!' ein
  591. Leerzeichen, Tabulator, '=' oder '(' wird keine Substitution durchgeführt.
  592. History-Substitutionen beginnen auch, wenn die Eingabezeile mit einem '^'
  593. beginnt. Jede Eingabezeile, die History-Substitutionen enthält, wird nach
  594. der Substitution auf dem Bildschirm ausgegeben.
  595.  
  596. Die Beispiele in den folgenden Abschnitten beziehen sich auf den folgenden
  597. Ausschnitt aus einer history-list:
  598.  
  599.       9  ls -l
  600.       10 cat otto
  601.       11 cp liste.txt liste.bak
  602.       12 diff liste.txt liste.new
  603.  
  604.  
  605. 4.1.1  Zeilensubstitution
  606. -------------------------
  607.  
  608. Um eine komplette Zeile zu substituieren, stehen folgende Möglichkeiten zur
  609. Verfügung:
  610.  
  611.       !n      Substituiert Eventzeile n
  612.       !-n     Substituiert die Zeile mit der Nummer 
  613.               [aktuelle Eventnummer]-n
  614.       !!      Substituiert die komplette letzte Zeile und ist
  615.               gleichbedeutend mit einer Wiederholung des
  616.               letzten Kommandos.
  617.       !t      für t kann gibt man die Anfangsbuchstaben einer
  618.               Kommandozeile ein, die history-list wird dann
  619.               nach einer Kommandozeile mit diesen
  620.               Anfangsbuchstaben abgesucht, die Suche beginnt
  621.               beim neuesten Kommando
  622.       !?t?    der Text kann an beliebiger Position mit dem
  623.               Wildcard '?' versehen werden, es wird dann
  624.               nach der ersten 'passenden' Kommandozeile
  625.               gesucht
  626.  
  627. Beispiele:
  628.       !11      -> cp liste.txt liste.bak
  629.       !-2      -> cp liste.txt liste.bak
  630.  
  631.       !d       -> diff liste.txt liste.new
  632.       !di      -> diff liste.txt liste.new
  633.  
  634.       !?ot?    -> cat otto
  635.  
  636.       !!       -> diff liste.txt liste.new
  637.  
  638.  
  639. 4.1.2  Wortsubstitution
  640. -----------------------
  641.  
  642. Um einzelne Wörter aus einer Event-Zeile zu extrahieren, können wir nach
  643. der Zeilenspezifikation ein ':' setzen und dann eine (Zahlen-)Angabe für
  644. das gewünschte Wort. Das erste Wort einer Zeile (der Kommandoname) hat die
  645. Nummer 0, das zweite Wort (also das erste Argument) die Nummer 1 usw.
  646. Mit folgenden Angaben kann ein Wort aus einer Zeile extrahiert werden:
  647.  
  648.       :0        erstes Wort (Kommandoname)
  649.       :n        n-tes Argument
  650.       :^        erstes Argument
  651.       :$        letztes Argument
  652.       :%?...?   Wort, welches die Zeichen zwischen den
  653.                 Fragezeichen enthält
  654.       :x-y      x-tes bis y-tes Wort
  655.       :-y       entspricht 0-y
  656.       :*        entspricht 1-y
  657.       :x*       entspricht x-$
  658.       :x-       entspricht x-'vorletztes Argument'
  659.  
  660. Beispiele:
  661.       mv !12:*             -> mv liste.txt liste.new
  662.       cp !12:%?te.n? !10:$ -> cp liste.new otto
  663.       rm !11:2             -> rm liste.bak
  664.       !10:0 !12:2          -> cat liste.new
  665.  
  666. Ist das erste Zeichen einer Kommandozeile ein '^', so wird die
  667. Zeichenfolge, die zwischen diesem Zeichen und einem weiteren '^' steht,
  668. durch die danach folgende Zeichenfolge in der vorigen Zeile ersetzt. Damit
  669. kann man Schreibfehler leicht verbessern.
  670.  
  671.       cb otto.1 otto.bak    (vorige Zeile)
  672.  
  673.       ^cb^cp        -> cp otto.1 otto.bak
  674.  
  675.  
  676. 4.2  Alias-Substitution
  677. -----------------------
  678.  
  679. Das erste Wort jedes Einzelkommandos einer Kommandozeile wird daraufhin
  680. untersucht, ob es ein alias ist. Wenn dem so ist, so wird das alias durch
  681. den Text, für den es steht, ersetzt und das Kommando erneut History-
  682. substituiert, so, als wäre die eingegebene Zeile die vorige Eingabezeile.
  683. Dies hat den Vorteil, da₧ ein alias History-Substitution enthalten darf
  684. und es damit möglich ist, Argumente des Einzelkommandos zu nehmen und an
  685. eine beliebige Stelle im Ersetzungstext zu setzen. Die substituierte Zeile
  686. ersetzt das Kommando und die Argumente. Wird keine History-Substitution im
  687. aliastext verwendet, so bleiben die Argumente unverändert. Wird im
  688. aliastext wiederum ein alias verwendet, so wird die alias-Substitution
  689. erneut durchgeführt. Ist das erste Wort der substituierten Zeile dasselbe
  690. wie in der alten, so wird eine erneute Substitution verhindert, um eine
  691. endlose Ersetzung zu verhindern. Andere 'Endlosschleifen' erzeugen eine
  692. Fehlermeldung.
  693.  
  694. Beispiel:  alias lookup 'grep !^ test.c'
  695.  
  696.            ersetzt lookup durch grep und das 1. Argument der
  697.            eingegebenen Zeile. Die Zeichenkette steht in '...',
  698.            um die History-Substitution bei Eingabe zu verhindern.
  699.  
  700.            lookup cli.c      -> grep cli.c test.c
  701.  
  702.  
  703. 4.3  Parsing und Makrosubstitution
  704. ----------------------------------
  705.  
  706. Nach der alias-Substitution wird jedes Einzelkommando parsiert, d.h. auf
  707. korrekte Schreibweise hin geprüft und in eine interne Form gebracht.
  708. Gleichzeitig werden Makros substituiert. Makros können ausschließlich in
  709. der Objektdefinitionsdatei (.NDQ) verwendet werden. Ein Einsatz in der
  710. shell oder in Scripten ist nicht möglich. Mehr zu Objektdefinitionsdateien
  711. und Makros -> OBJECTS.TXT.
  712.  
  713.  
  714. 4.4  Variablensubstitution
  715. --------------------------
  716.  
  717. Nachdem die Kommandozeile parsiert wurde, findet die Variablensubstitution
  718. statt. Damit eine Variable substituiert wird, mu₧ ihr ein '$' vorangestellt
  719. werden (bis auf zwei Ausnahmen: '~' und '~~') . In Zeichenketten, die in
  720. >'< eingeschlossen sind, findet ebenfalls Variablensubstitution statt.
  721. Besteht der Inhalt einer Variablen aus mehreren Wörtern, so werden diese
  722. als einzelne Argumente substituiert, innerhalb von >"< nur als Sequenz
  723. einer Zeichenkette.
  724. Es existieren mehrere Varianten der Variablenubstitution:
  725.  
  726.       $Variable
  727. oder  ${Variable}          wird ersetzt durch den Wert der Variablen
  728.                            '{}' trennt eindeutig den Variablennamen
  729.                            von  einer nachfolgenden Zeichenkette
  730.  
  731.       $Variable[Bereich]
  732. oder  ${Variable[Bereich]} wird benutzt, um nur einzelne Wörter des
  733.                            Variableninhaltes zu substituieren. Enthält
  734.                            die Variable nur ein Wort, so wird ein
  735.                            Buchstabenbereich substituiert.  Der Bereich
  736.                            hat die Form:  x, x-y, x- oder -y,
  737.                            wobei x und y Bereichszahlen sind, eine
  738.                            Variablensubstitution findet hier nicht
  739.                            statt. >*< selektiert alle Wörter, das
  740.                            erste Wort hat die Nummer 1
  741.  
  742.       $#Variable
  743. oder  ${#Variable}         Anzahl der Wörter einer Variablen
  744.  
  745.       $0                   Scriptname, wenn in einem Script benutzt,
  746.                            sonst Fehlermeldung
  747.  
  748.       $zahl
  749. oder  ${zahl}              -> $argv[zahl]
  750.       $*                   -> $argv[*]
  751.                            argv enthält die Argumente, die einem
  752.                            Script übergeben wurden
  753.  
  754.       $?Variable
  755. oder  ${?Variable}         substituiert '1', wenn die Variable
  756.                            gesetzt (vorhanden) ist, sonst '0'
  757.  
  758.       $$                   substituiert die Schachtelungstiefe von
  759.                            Scripten als Zahl
  760.  
  761.       $<                   forciert die Eingabe einer Zeile über die
  762.                            Tastatur, diese wird als Wert eingefügt.
  763.  
  764.       ~                    Benutzerverzeichnis, entspricht $HOME
  765.  
  766.       ~~                   Verzeichnis von no|Desktop, entspricht $NDHOME
  767.  
  768.  
  769. Nach der Variablensubstitution und unmittelbar vor der Ausführung des
  770. Kommandos wird die Kommandozeile daraufhin geprüft, ob am Kommando oder an
  771. den Argumenten noch Modifier stehen. Diese werden zuletzt bearbeitet.
  772.  
  773.  
  774. 4.5  Verhinderung von Substitutionen
  775. ------------------------------------
  776.  
  777. Die Einrahmung von Zeichenketten in der Form '...' oder "..." dient dazu,
  778. alle bzw. einen Teil der Substitutionen in diesem Bereich zu verhindern.
  779. Zeichenketten, die durch >'< eingeschlossen sind, sind vor einer weiteren
  780. Interpretation durch den CLI geschützt - es findet also in diesem Bereich
  781. keine Substitution statt. Zeichenketten, die durch >"< eingeschlossen sind,
  782. werden nur teilweise substituiert.
  783.  
  784.  
  785. 4.6  Ausführung eines Kommandos
  786. -------------------------------
  787.  
  788. Sind alle Substitutionen erfolgt, wird das Kommando ausgeführt; sei es ein
  789. 'internes', ein 'externes' (also ein Programm) oder ein Script. Nach
  790. Ausführung des Kommandos wird als Beendigungsstatus eine Zahlenangabe in
  791. die Variable 'status' geschrieben und kann z.B. mit
  792.  
  793.       echo $status
  794.  
  795. direkt im Anschluß an das letzte Kommando abgefragt werden.
  796. Definitionsgemäß wird bei fehlerfreier Ausführung eines Kommandos eine '0'
  797. zurückgeliefert. Werte ungleich '0' zeigen meist einen Fehler an.
  798.  
  799.  
  800.  
  801. 5  Scripte
  802. ==========
  803.  
  804. Scripte unter no|Desktop sind Textdateien (*.NDS), die Kommandozeilen
  805. enthalten. Zusätzlich zu der direkten Kommandoeingabe bietet das Schreiben
  806. von Scripten die Möglichkeit, komplexe Dateioperationen zu automatisieren.
  807. Hierfür stehen in Scripten komfortable Programmiertechniken, wie bedingte
  808. Ausführung, Sprünge, Sprungmarken und Programmschleifen, zur Verfügung.
  809. Mehrere Scripte können auch ineinander geschachtelt werden.
  810. no|Desktop selbst verwendet beim Programmstart Scripte und schreibt beim
  811. Auslagern ein temporäres Script mit allen wichtigen Desktopinformationen.
  812. Diese Datei wird nach Rückkehr zum no|Desktop gelesen und anschließend
  813. gelöscht. Der Aufruf eines Scriptes ist der gleiche, wie der eines
  814. Kommandos, bei Namensgleichheit mit anderen Kommandos oder Programmnamen
  815. empfiehlt sich der Zusatz der Endung .NDS .
  816. Einem Script können Argumente mitgegeben werden. Vor Aufruf des Scriptes
  817. wird eine neue (lokale) Variable 'argv' erzeugt, die eine Liste der
  818. übergebenen Argumente enthält. Im Script kann z.B. auf das 1. Argument mit
  819. $1 oder $argv[1] zugegriffen werden. Die Anzahl der übergebenen Argumente
  820. erhält man durch $#argv.
  821. Werden in einem Script neue Variablen definiert, so existieren diese nur
  822. solange, wie die Bearbeitung des Scriptes dauert. Ausnahme bildet der Aufruf
  823. eines Scriptes durch
  824.  
  825.       source <Scriptname> ...
  826.  
  827. Nur in diesem Falle werden alle im Script definierten Variablen global
  828. definiert und sind auch nach Beendigung des Scriptes verfügbar. Ein
  829. Spezialfall ist folgender Aufruf:
  830.  
  831.       source -h <Scriptname>
  832.  
  833. In diesem Falle werden alle im Script enthaltenen Zeilen in die
  834. Historyliste kopiert, das Script selbst wird aber nicht ausgeführt.
  835.  
  836. Alle in einem Script definierten Variablen sind bei einem Scriptaufruf in
  837. diesem Script ebenfalls verfügbar, allerdings nur lesbar. Die Definition
  838. einer Variablen in einer tieferen Script-Ebene mit dem gleichen Namen wie
  839. eine Variable in einer höheren (übergeordneten) Script-Ebene führt zur
  840. Neudefinition einer lokalen Variablen für die untergeordnete Ebene. Der
  841. Inhalt der Variablen der übergeordneten Script-Ebene kann nicht verändert
  842. werden. Nach Beendigung des untergeordneten Scriptes werden die lokal
  843. definierten Variablen wieder gelöscht. Die Verschachtelungstiefe der
  844. Scriptebenen kann durch
  845.  
  846.       echo  $$
  847.  
  848. abgefragt werden.
  849. Beginnt eine Zeile innerhalb eines Scriptes mit einem '#', so wird der Rest
  850. dieser Zeile vom CLI als Kommentar gewertet und ignoriert.
  851. Wird während der Bearbeitung des Scriptes ein Kommando mit einem Status
  852. ungleich '0' beendet (es ist also aller Wahrscheinlichkeit nach ein Fehler
  853. aufgetreten), so wird die Bearbeitung des Scriptes abgebrochen und der letzte
  854. (Fehler-)Status zurückgeliefert. Der Abbruch eines Scriptes im Fehlerfall
  855. kann durch Setzen der internen Variablen 'ignoreerr' verhindert werden:
  856.  
  857.       set ignoreerr
  858.  
  859. Das Script wird in diesem Fall nur noch bei fatalen Fehlern abgebrochen.
  860.  
  861. In Scripten sind Kommandos möglich, die definitionsgemäß mehrere Zeilen
  862. umfassen. Im Gegensatz dazu sind im Eingabefenster nur einzeilige Kommandos
  863. erlaubt.
  864.  
  865.  
  866. 6  Die WCON-Fenster
  867. ===================
  868.  
  869. no|Desktop bietet die Möglichkeit, die Standardeingabe und -ausgabe (s.o.) auf
  870. Fenster umzulenken. Diese Option gilt zunächst nur für die Normalversion
  871. und das Mint-System, unter Mag!X ist nur das WSH-Fenster (Kommandoeingabe)
  872. verfügbar, um dort interne Kommandos auszuführen.
  873. Die Anzahl der Textfenster, auf die die Ein- und Ausgabe erfolgen soll,
  874. wird im Startskript DESK.NDS im Kommando 'newdesk' definiert, indem jedes
  875. einzelne Fenster am Ende des Befehls beschrieben wird:
  876.  
  877.   newdesk  ..... ..... ..... STD STD,100x200 STD,80x30 STD,80x5
  878.  
  879. In diesem Beispiel werden 4 Fenster definiert. Es können maximal 10
  880. WCON-Fenster definiert werden (WCON0 - WCON9). Für jedes einzelne Fenster
  881. muß die Zeichenkette 'STD' (= Standard) eingetragen werden, optional kann
  882. die Zeilenlänge und Zeilenanzahl definiert werden. Sie muß durch ein ','
  883. eingeleitet werden und dann müssen zwei Zahlenangaben, durch 'x' getrennt
  884. folgen. Die erste Zahl definiert die Zeilenbreite des Fnsters, die Zweite
  885. die Zeilenanzahl. Werden keine Werte angegeben, wird die Zeilenbreite auf
  886. 80 Zeichen, die Zeilenanzahl auf 25 Zeilen gesetzt. Diese Angaben bleiben
  887. aktiv, solange no|Desktop arbeitet und können nicht geändert werden.
  888.  
  889. Das erste Fenster (WCON0) ist immer für die shell reserviert und heißt
  890. WSH-Fenster.
  891.  
  892. Die Ausgabe über ein WCON-Fenster wird über die interne Variable 'noWcon'
  893. gesteuert. Solange sie nicht gesetzt ist, sind die WCON-Fenster aktiv; wird
  894. sie gesetzt, so schaltet no|Desktop bei Standardausgabe auf den Textbildschirm
  895. um. Ist kein Fenster über 'newdesk' definiert, so ist 'noWcon' gesetzt und
  896. kann nicht verändert werden, die Standardein- und ausgabe erfolgt auf dem
  897. Textbildschirm. Einige Programme, die ihre eigene Textausgabe haben,
  898. arbeiten nicht mit den WCON-Fenstern zusammen. In diesem Fall sollte über
  899. das Popupmenü des Desktops die Ausgabe auf den Textbildschirm eingestellt
  900. werden oder beim Programmaufruf der Modifier '@T' bzw. '@t' an den
  901. Programmnamen gehängt werden.
  902.  
  903. Beispiel:  TLDU.TOS@T
  904.  
  905. Die Ausgabe eines Kommandos erfolgt normalerweise immer im WSH-Fenster. Die
  906. Ausgabe auf andere WCON-Fenster gelingt mit den Modifizierern '@Wn'. Möchte
  907. man ein Textprogramm z.B. im 2. WCON-Fenster (WCON2) laufen lassen, so muß
  908. man direkt an den Programmnamen den Modifier '@W2' oder '@w2' hängen:
  909.  
  910. Beispiel:  LHARC@W2
  911.  
  912. Im Multitaskingbetrieb (unter MINT, MTOS) ist es auf diese Weise möglich,
  913. ein Programm im Hintergrund zu starten, d.h. no|Desktop wartet nicht auf die
  914. Beendigung des Programmes sondern teilt dem Programm nur ein Fenster zu.
  915. Die Ausgabe erfolgt dann in regelmäßigen Abständen.
  916.  
  917. Beispiel:  LHARC@w2 startet das Programm unter MTOS/MINT im Hintergrund
  918.                     im WCON2-Fenster
  919.  
  920. Man sollte sich davor hüten, ein Programm, das im Hintergrund gestartet
  921. wurde, im WSH-Fenster ausgeben zu lassen, da in diesem Falle eine
  922. Kommandoeingabe erst dann wieder möglich ist, wenn das Programm beendet
  923. wurde.
  924.  
  925.  
  926. 6.1  Öffnen eines WCON-Fensters
  927. -------------------------------
  928.  
  929. Im Normalfall wird ein WCON-Fenster geöffnet, sobald ein Eingabe oder
  930. Ausgabe in dieses Fenster stattfindet. Erfolgt eine Eingabe, wird das
  931. Fenster zum aktuellen Fenster, d.h. es wird 'getoppt'. Vom WSH-Fenster hat
  932. man über das Kommando 'wcon' die Möglichkeit, ein Fenster explizit zu
  933. öffnen:
  934.  
  935.     wcon -3  öffnet das WCON3-Fenster
  936.  
  937. Der erste optionale Parameter bestimmt die Fensternummer. Der aktuelle
  938. Inhalt eines Fensters bleibt erhalten.
  939.  
  940.  
  941. 6.2  Programmunterbrechung in einem WCON-Fenster
  942. ------------------------------------------------
  943.  
  944. Durch Eingabe der Tastenkombination '[CTRL]+C' kann in der Regel jedes
  945. externe Programm und interne Kommando abgebrochen werden. Um ein laufendes
  946. externes Programm zu unterbrechen klickt man einfach mit einer Maustaste.
  947. Der Programmname in der Titelzeile des WCON-Fensters wird durch '<...>'
  948. eingerahmt. Nun ist es möglich, das Fenster zu verschieben, dessen Größe zu
  949. verändern und sich den gesamten Inhalt des Fensters anzuschauen. Klickt man
  950. mit der Maus auf den linken oberen Fensterknopf (Closerbutton) so wird nach
  951. Rückfrage die Ausführung des Programms abgebrochen. Ebenso ist an dieser
  952. Stelle das Drücken von '[CTRL]-C' möglich. Zum Fortsetzen des
  953. Progammablaufs klickt man mit der Maus auf den Ausgabebereich des Fensters.
  954. Eine Programmunterbrechung durch '[CTRL]-S' ist bei WCON-Fenstern NICHT
  955. möglich!
  956.  
  957.  
  958. 6.3  VT52-Funktionalität eines WCON-Fensters
  959. --------------------------------------------
  960.  
  961. Die Ausgabe auf ein WCON-Fenster durchläuft einen VT52-Emulator. Enhält die
  962. Ausgabe VT52-Steuerbefehle, so werden diese interpretiert. So ist es z.B.
  963. möglich, Texte, die VT52-Steuerbefehle enthalten, mit allen Textattributen
  964. auszugeben. Weiterhin versteht jedes WCON-Fenster einem minimalen VT100-
  965. Steuerbefehlssatz, allerdings nur die Befehle, die sich auf die
  966. Textattribute und Textfarben beziehen.
  967.  
  968. Über die Tastatur können die verfügbaren Steuerbefehle auch direkt
  969. eingegeben werden. Die Tastenkombination 'ALT-ESC' schaltet in den
  970. Steuerbefehlsmodus. Die Eingabe von 'ESC' wird nun als Steuerzeichen
  971. interpretiert (hex 0x1B). Unbekannte Steuerbefehle werden ignoriert. Dieser
  972. Modus wird durch erneutes Drücken von 'ALT-ESC' wieder verlassen.
  973.  
  974.  
  975. 6.4  Primitive Terminal-Fenster (WAUX und WTALK)
  976. ------------------------------------------------
  977.  
  978. Durch Setzen der internen Variablen 'wauxwin' wird ein WCON-Fenster zu
  979. einem Terminal-Fenster. Jede Eingabe von der seriellen Schnittstelle geht
  980. auf das WAUX-Fenster, jede Eingabe im Fenster wird auf die serielle Ausgabe
  981. geleitet.
  982.  
  983.     set wauxwin       setzt das Terminalfenster WAUX auf WCON1
  984.     set wauxwin = 3   setzt WAUX auf WCON3
  985.     unset wauxwin     löscht die Terminalfunktion
  986.     waux              öffnet das WAUX-Fenster
  987.  
  988. Durch Setzen der Variablen 'wtalkwin' wird ein WTALK-Fenster definiert.
  989. Jede Eingabe in dieses Fenster erscheint im Fenster und wird auf die
  990. serielle Ausgabe geleitet. Bei Kommunikation mit einem entfernten Computer
  991. per Tastatur sieht man also das, was man schreibt, auch auf dem Bildschirm.
  992.  
  993.  
  994.     set wtalkwin      setzt das Talkfenster WTALK auf WCON1
  995.     set wtalkwin = 3  setzt WTALK auf WCON3
  996.     unset wtalkwin    löscht die Talkfunktion
  997.     wtalk             öffnet das WTALK-Fenster
  998.  
  999. Es ist nicht möglich, das WTALK-Fenster zu öffnen oder die Variable
  1000. 'wtalkwin' zu setzen, ohne daß ein WAUX-Fenster existiert.
  1001.  
  1002. Die Variablen 'wauxicrnl' und 'wauxocrnl' definieren die Behandlung der
  1003. RETURN-Taste (bzw. des Wagenrücklaufs (cr)). Ist 'wauxicrnl' gesetzt, so
  1004. wird jeder Wagenrücklauf (cr), der über die serielle Eingabe kommt in einen
  1005. Zeilenvorschub (nl) und Wagenrücklauf (cr) umgesetzt. Ist 'wauxocrnl'
  1006. gesetzt, so wird bei Drücken der RETURN-Taste (cr) ein Wagenrücklauf (cr)
  1007. und Zeilenvorschub (nl) gesendet.
  1008.  
  1009. Das WAUX-Fenster stellt die primitivste Form eines Terminals dar und dient
  1010. lediglich dem direkten Ansteuern der seriellen Schnittstelle über die
  1011. Tastatur. Die Einstellungen der seriellen Schnittstelle (Baudrate usw.)
  1012. wird anderen Progammen überlassen.
  1013.  
  1014.  
  1015. 7  Interne Kommandos
  1016. ====================
  1017.  
  1018. no|Desktop besitzt eine große Anzahl von internen Kommandos. Ein Teil dieser
  1019. Kommandos entspricht den unter anderen Betriebssystemen bekannten Kommandos
  1020. zum Anzeigen und Manipulieren von Dateien, zur Verwaltung von Variablen
  1021. u.a. Ein Großteil der Kommandos dient der Manipulation und Gestaltung von
  1022. no|Desktop- eigenen Fenstern und anderen Objekten, sowie deren Interaktion.
  1023. Viele dieser Kommandos werden in der Objektdefinitionsdatei verwendet, um
  1024. einen individuellen Desktop zu ermöglichen. Jede Aktion auf dem Desktop,
  1025. jede Bewegung einer Datei in einen Ordner oder woanders hin, jedes Klicken,
  1026. Doppelklicken, jede Tastatureingabe beruht auf einer sinnvollen
  1027. Zusammenstellung von internen Kommandos. Einerseits kann man durch Ändern
  1028. der Objektdefinitionsdatei seinen individuellen Desktop schreiben,
  1029. andererseits benötigt man viele der beschriebenen Kommandos nur dort und
  1030. wird sie beim normalen Arbeiten kaum verwenden.
  1031.  
  1032.  
  1033. 7.1  Graphikmodus und Textmodus
  1034. -------------------------------
  1035.  
  1036. Viele der beschriebenen Kommandos liegen in zwei verschiedenen
  1037. Darstellungsformen vor: Im 'Graphikmodus' erscheint bei Ausführung des
  1038. Kommandos ein benutzergeführter Dialog und die Paramter werden in den
  1039. Dialogfenstern festgelegt; im 'Textmodus' erfolgt die Eingabe der Parameter
  1040. über die Kommandozeile in der shell. Die Darstellungsform ist davon
  1041. abhängig, ob das WSH-Fenster offen ist, bzw. die shell im Textbildschirm
  1042. läuft oder nicht. Im ersten Fall wird die Eingabe (und in der Regel die
  1043. Ausgabe) im Textfenster oder -bildschirm vorgenommen. Andernfalls wird das
  1044. Kommando als Dialog ausgeführt.
  1045. Zu diesen Kommandos zählt z.B.
  1046.  
  1047.     cp
  1048.  
  1049. Andere Kommandos sind für den Text- und Graphikmodus durch unterschiedliche
  1050. Kommandonamen definiert. Das liegt vor allem an den unterschiedlichen
  1051. Parametern in beiden Modi aber auch an einer teilweise unterschiedlichen
  1052. Funktionalität. Zum Anzeigen von Dateinamen dient im Textmodus das Kommando
  1053.  
  1054.     ls
  1055.  
  1056. Im Graphikmodus arbeitet man mit dem Kommando
  1057.  
  1058.     wls
  1059.  
  1060. Ähnlich verhält es sich mit den Kommandos 'echo' und 'gecho'.
  1061.  
  1062.  
  1063. 7.2  Ausgabe von Fehlermeldungen
  1064. --------------------------------
  1065.  
  1066. Tritt bei der Kommandoausführung ein Fehler auf, so wird die Fehlermeldung
  1067. in einem Dialogfenster ausgegeben, sofern kein WSH-Fenster offen ist oder
  1068. der Textbildschirm aktiv ist. In diesen Fälllen wird die Fehlermeldung über
  1069. die Standardausgabe geschrieben.
  1070.  
  1071.  
  1072. 8  Fensternummern
  1073. =================
  1074.  
  1075. Jedem geöffneten Fenster im no|Desktop wird automatisch eine eindeutige Nummer
  1076. zugeordnet. Diese erscheint im Kopfbalken des Fensters, und zwar
  1077. mit einem abschlie₧enden Doppelpunkt (':'). Somit ist es möglich, z.B.
  1078. Kopieroperationen von einem Fenster in ein anderes über die Fensternummern
  1079. zu steuern. Hat man z.B. in einem Fenster mit der Nummer '1:' einige
  1080. Dateien selektiert, um sie in den Pfad des Fensters mit der Nummer '3:' zu
  1081. kopieren, so drückt man Cntrl-K (für Kopieren) und gibt dann als Zielpfad
  1082. in der erscheinenden Dialogbox einfach '3:' - also nur die Fensternummer -
  1083. an. Die Expandierung der Nummern auf die entsprechenden Pfade übernimmt
  1084. no|Desktop dann von selbst.
  1085.  
  1086.  
  1087. Anhang
  1088. ======
  1089.  
  1090. A1  Übersicht über die internen Variablen
  1091. -----------------------------------------
  1092.  
  1093. Im folgenden wird jede interne Variable genauer beschrieben.
  1094. Jede interne Variable hat zusätzlich zu ihrem Inhalt noch
  1095. individuelle Eigenschaften, so werden einige bei Eingabe des 'set'-
  1096. Kommandos mit angezeigt, andere nicht. Einige werden beim Auslagern
  1097. von no|Desktop in einer temporären Datei mit abgespeichert und stehen
  1098. nach Rückkehr wieder zur Verfügung. Viele der internen Variablen
  1099. werden beim 'Desktop Speichern' in der DESK.NDS gesichert.
  1100.  
  1101. Die folgenden Abkürzungen beschreiben die individuellen Attribute
  1102. einer internen Variable:
  1103.  
  1104.     v   (visible)   wird beim 'set'- Kommando mitangezeigt
  1105.     r   (readonly)  nur lesbar, nicht löschbar
  1106.     n   (nounset)   nicht löschbar
  1107.     d   (d_save)    wird beim Sichern des Desktops gespeichert
  1108.     x   (x_save)    wird beim Auslagern von no|Desktop gespeichert
  1109.     i   (index)     primär indizierte Variable
  1110.     s   (state)     ist bei Programmstart gesetzt
  1111.  
  1112.  
  1113. Name       |Attribute| Bedeutung
  1114. -----------+---------+-----------------------------------------------
  1115. NDHOME     | vrns    | HOME-Pfad von no|Desktop (entspricht ~~)
  1116.            |         | (z.B. 'C:\NODESK')
  1117. HOME       | vrns    | HOME-Pfad des Benuters (entspricht '~')
  1118.            |         | (z.B. 'G:\USR\ANDI')
  1119. PATH       | vnx     | Suchpfade, durch ';' getrennt, die no|Desktop vor
  1120.            |         | Starten eines Programms ohne Pfadangabe
  1121.            |         | durchsucht
  1122. TEMPDIR    | vx      | Ordner, in dem no|Desktop Temporärdateien ablegt
  1123. TEMPFILE   | vnxs    | Name der Temporärdatei, die beim Auslagern
  1124.            |         | erzeugt wird
  1125. SYSDIR     | vnxs    | Ordner, der no|Desktop-Systemdateien enthält
  1126.            |         | (z.B. '$NDHOME\NDSYS')
  1127. deskfile   | vnxs    | Name des Skriptes, das den Aufbau des Desktops
  1128.            |         | enthält (z.B. 'CNF\640X480\DESK.NDS' -
  1129.            |         | relativ zu $HOME)
  1130. initfile   | vnds    | Name des Skriptes, das Bildschirmauflösungs-
  1131.            |         | abhängige Variablendefinitionen, etc. enthält
  1132.            |         | (z.B. 'CNF\640X480\INIT.NDS' - relativ zu $HOME)
  1133. globfile   | vds     | Name des Skriptes für globale (Bildschirm-
  1134.            |         | auflösungsunabhängige) Variablendefinnitionen,
  1135.            |         | aliase, etc.
  1136.            |         | (z.B. 'CNF\GLOBALS.NDS' - relativ zu $HOME)
  1137. etcfile    | vds     | Name der optionalen Skriptdatei, die am Ende
  1138.            |         | des Scriptes $deskfile ausgeführt wird
  1139. nddfile    | vrns    | Name der Objektdefinitionsdatei
  1140. ndifile    | vrns    | Name der ICON-Zuordnungsdatei
  1141. rscfile    | v       | Name der ICON-Recourcedatei
  1142.            |         |
  1143. wfindcmd   | x       | enthält eine interne Information für das
  1144.            |         | Kommando wfind
  1145. filekeys   | dx      | wenn gesetzt, dann wird der Dateicursor in
  1146.            |         | Fenstern dargestellt
  1147. forceslider| dx      | wenn gesetzt, dann werden grundsätzlich alle
  1148.            |         | Slider eines Fensters gezeichnet 
  1149. wlsnoalign | dx      | wenn gesetzt, dann wird KEIN Raster für die
  1150.            |         | Grö₧e eines LS-Fensters verwendet
  1151. notestdrv  | x       | wenn gesetzt, dann wird vor Auslagern von
  1152.            |         | no|Desktop NICHT überprüft, ob noch genug Platz
  1153.            |         | zum Sichern der temporären Scriptdatei
  1154.            |         | ($TEMPFILE) verfügbar ist
  1155. checkobts  | x       | enthält die Objekttypen, die beim Laden des
  1156.            |         | Desktops auf ihre Existenz überprüft werden
  1157.            |         | sollen
  1158. toptxt     | x       | dieser Text erscheint rechtsbündig in der
  1159.            |         | Menüleiste (z.B. 'set toptxt = $UNAME', dann
  1160.            |         | steht dort immer der aktuelle Benutzername')
  1161. msgcolor   | nxs     | die Farbe, in der der Inhalt von 'toptxt'
  1162.            |         | dargestellt wird
  1163. popdelay   | ndxs    | Wert zum Steuern der Scrollgeschwindigkeit
  1164.            |         | von PopUp-Menüs
  1165.            |         |
  1166. LINE       | ns      | in dieser Variable steht der Inhalt einer
  1167.            |         | Dialogeingabe, der Inhalt wird erneut parsiert
  1168.            |         | (s.o.)
  1169.            |         | (z.B. legt das interne Kommando getline hier
  1170.            |         | seinen String ab)
  1171. prompt     | vx      | Zeichenkette, die am Beginn einer Kommando-
  1172.            |         | zeile im shell steht. Folgende Kürzel werden
  1173.            |         | interpretiert:
  1174.            |         |   $h  Historyeintrag
  1175.            |         |   $d  aktuelles Laufwerk
  1176.            |         |   $p  aktueller Arbeitspfad
  1177.            |         |   $s  Anzeige von '#', wenn die shell von
  1178.            |         |       einem anderem Programm aufgerufen wurde
  1179.            |         |   $$  '$'
  1180.            |         |   $r  Wagenrücklauf (cr)
  1181. status     | vrns    | enthält den Rückgabewert eines Kommandos
  1182. history    | vnx     | maximale Einträge der History-Liste
  1183. ignoreerr  | vx      | wenn gesetzt, dann wird ein Skipt im normalen
  1184.            |         | Fehlerfall nicht abgebrochen
  1185. noclobber  | vx      | bei Ausgabeumlenkung '>' in eine Datei, darf
  1186.            |         | diese noch nicht existieren, bei '>>' muß
  1187.            |         | diese existeren (s.o.)
  1188. noxArg     | xs      | keine Parameterübergabe an ein Programm über
  1189.            |         | xArg-Verfahren
  1190. noARGV     | x       | keine Parameterübergabe an ein Programm über
  1191.            |         | ARGV-Verfahren
  1192. chainproc  | nxs     | Prozentangabe zum Auslagern von no|Desktop
  1193. chainabs   | nxs     | Kilobyteangabe zum Auslagern von no|Desktop
  1194.            |         | Überschreitet die Größe eines Programms +
  1195.            |         | 'chainproc'-Prozent des Programms +
  1196.            |         | chainabs-Kilobyte den größtmöglichen
  1197.            |         | Speicherbereich, so wird unter Normal-TOS
  1198.            |         | no|Desktop ausgelagert
  1199. fastsave   | dx      | wenn gesetzt, dann wird beim Desktop-Speichern
  1200.            |         | eine optimierte, aber nicht mehr lesbare Datei
  1201.            |         | erzeugt
  1202. fastxsave  | dxs     | wenn gesetzt, dann wird beim Auslagern von
  1203.            |         | no|Desktop eine optimierte, aber nicht mehr
  1204.            |         | lesbare Datei erzeugt
  1205. useKobold  | dx      | das Hilfsprogramm 'KOBOLD' wird benutzt
  1206.            |         | (bei cp, mx, rm)
  1207. koboldPRG  | dx      | Name und Pfadangabe von 'KOBOLD'
  1208.            |         |
  1209. version    | rns     | enthält die aktuelle Versionsnummer des no|Desktop
  1210.            |         | als String (z.B. "3.00")
  1211. multitask  | vr      | das no|Desktop-System läuft unter einem
  1212.            |         | preemptiven Multitasking-Betriebssystem
  1213. CPU        | rns     | Name des internen Prozessors (z.B. MC68000)
  1214. TIME       | rns     | aktuelles Datum und Uhrzeit im Format:
  1215.            |         | 'Djjmmtthhmmss'
  1216. screenw    | rns     | Breite des Bildschirms in Pixeln
  1217. screenh    | rns     | Höhe des Bildschirms in Pixeln
  1218. ncolors    | rns     | Anzahl der Farbebenen (Planes) des Bildschirms
  1219. noWcon     | dx      | wenn gesetzt, dann werden keine WCON-Fenster
  1220.            |         | benutzt (s.o.) (nicht setzbar unter
  1221.            |         | Multitasking-Betriebssystemen)
  1222. wshpos     | x       | Koordinaten des WSH-Fensters
  1223. wcon1pos   | x       | Koordinaten des WCON1-Fensters
  1224. wcon2pos   | x       | Koordinaten des WCON2-Fensters
  1225. wcon3pos   | x       | Koordinaten des WCON3-Fensters
  1226. wauxicrnl  | x       | Umwandlung von 'cr' in 'crln' bei serieller Eingabe
  1227. wauxocrnl  | x       | Umwandlung von 'cr' in 'crln' bei serieller Ausgabe
  1228. wauxwin    | x       | WCON-Fensternummer des Terminalfensters
  1229. wtalkwin   | x       | WCON-Fensternummer des Talkfensters
  1230. wconscroll | dx      | Anzahl der Zeilen, die in WCON-Fenstern in einem
  1231.            |         | Stück gescrollt werden sollen
  1232.            |         | (0 = halbe Fensterhöhe)
  1233.            |         |
  1234. deskcolor  | ndxs    | Farbe des Desktophintergrundes  (0-15)
  1235. deskpatt   | ndxs    | Muster des Desktophintergrundes (0- 7)
  1236. wincolor   | ndxs    | Hintergrundfarbe von Fenstern   (0-15)
  1237. winpatt    | ndxs    | Hintergrundmuster von Fenstern  (0- 7)
  1238. blitter    | dx      | wenn gesetzt, ist ein vorhandener Blitter
  1239.            |         | angeschaltet (der initiale 'set-Zustand'
  1240.            |         | wird bei Programmstart anhand des aktuellen
  1241.            |         | Zustands des Blitters ermittelt)
  1242. cpucache   | dx      | wenn gesetzt, ist ein vorhandener CPU-Cache
  1243.            |         | angeschaltet (ab Prozessoren des Typs MC68030
  1244.            |         | aufwärts) (der initiale 'set-Zustand'
  1245.            |         | wird bei Programmstart anhand des aktuellen
  1246.            |         | Zustands des Caches ermittelt)
  1247. topdelay   | ndxs    | Zeitwert zum automatischen Fensterwechsel,
  1248.            |         | wenn die Maus auf ein anderes Fenster geführt
  1249.            |         | wird (0 = AUS)
  1250. kbdelay    | ndxs    | Wert der Verzögerung bis die Tastaturwieder-
  1251.            |         | holung einsetzt. Möglich sind Werte von
  1252.            |         | 0 (AUS) bis 99
  1253. kbrepeat   | ndxs    | Geschwindigkeit der Tastaturwiederholung.
  1254.            |         | Möglich sind Werte von 0 (AUS) bis 99
  1255. linenums   | dxs     | wenn gesetzt, dann werden in Textfenstern
  1256.            |         | Zeilennummern angezeigt
  1257. tabsize    | ndxs    | Länge eines Tabulator-Zeichens (0 bis 20)
  1258. fontsize   | ndxs    | Grö₧e des Systemfonts in Textfenstern
  1259.            |         | (momentan: 4, 6, 9, 12, 13 oder 26)
  1260. maxfiles   | ndxs    | maximale Anzahl von Dateien, die in einem
  1261.            |         | LS-Fenster dargestellt werden können
  1262.            |         | (minimal 224)
  1263. wlsmaxcl   | ndxs    | Anzahl der Spalten in einem LS-Fenster
  1264.            |         | (0 = automatische Berechnung anhand der
  1265.            |         | Fenstergrö₧e)
  1266. wlslook    | ndxs    | Art der Darstellung in einem LS-Fenster
  1267.            |         | mögliche Werte:
  1268.            |         |   "B"       Icons
  1269.            |         |   "N"       normaler Text
  1270.            |         |   "K"       kleiner Text
  1271. wlssort    | ndxs    | Art der Sortierung in einem LS-Fenster
  1272.            |         | mögliche Werte:
  1273.            |         |   "A"       nach Art
  1274.            |         |   "N"       nach Namen
  1275.            |         |   "D"       nach Datum
  1276.            |         |   "G"       nach Grö₧e
  1277.            |         |   "U"       unsortiert, d.h. Reihenfolge
  1278.            |         |             im Dateisystem 
  1279. wlstxtshow | ndxs    | Art der anzuzeigenden Informationen bei
  1280.            |         | Textdarstellung in einem LS-Fenster. Diese
  1281.            |         | Variable kann einen String aus den folgenden
  1282.            |         | Buchstaben enthalten:
  1283.            |         |   "G"       mit Grö₧e
  1284.            |         |   "A"       mit Attributen
  1285.            |         |   "D"       mit Datum
  1286.            |         |   "T"       mit Uhrzeit
  1287.            |         | Wenn der Inhalt von wlstxtshow "GADT" ist,
  1288.            |         | dann werden also Texte mit allen möglichen
  1289.            |         | Dateiinformationen angezeigt.
  1290. wlsincols  | dx      | wenn gesetzt, dann wird ein LS-Fenster in
  1291.            |         | Spalten aufgebaut
  1292. wlswithhid | dxs     | wenn gesetzt, dann werden auch 'versteckte'
  1293.            |         | Dateien in einem LS-Fenster angezeigt
  1294. wlswithsys | dxs     | wenn gesetzt, dann werden auch 'System'-
  1295.            |         | Dateien in einem LS-Fenster angezeigt
  1296. wlsfastdraw| dx      | wenn gesetzt, dann wird eine optimierte
  1297.            |         | Ausgabefunktion verwendet, um Icons oder
  1298.            |         | gro₧en Text in LS-Fenstern darzustellen
  1299.            |         | (benötigt aber mehr Speicher pro Fenster!!!)
  1300. cpdialog   | ndxs    | Ausgabemodus für das cp-Kommando
  1301.            |         | mögliche Werte:
  1302.            |         |   "n"       keine Ausgaben
  1303.            |         |   "c"       mit Startdialog
  1304.            |         |   "v"       Ausgaben zeigen, aber kein Dialog
  1305.            |         |             mit Benutzer
  1306.            |         |   "i"       mit Einzelbestätigung jeder Datei
  1307. mvdialog   | ndxs    | Ausgabemodus für das mv-Kommando (Werte siehe
  1308.            |         | cpdialog)
  1309. rmdialog   | ndxs    | Ausgabemodus für das rm-Kommando (Werte siehe
  1310.            |         | cpdialog)  
  1311. touchdialog| ndxs    | Ausgabemodus für das touch-Kommando (Werte
  1312.            |         | siehe cpdialog)
  1313. cpsmallmem | x       | wenn gesetzt, dann verwenden die Kommandos
  1314.            |         | cp und mv nur einen kleinen Speicherbereich
  1315.            |         | (unter Multitasking-Betriebssystemen ohne
  1316.            |         | Bedeutung)
  1317. warnifro   | dxs     | wenn gesetzt, dann erscheint bei den Kommandos
  1318.            |         | mv und rm eine Warnung falls eine Datei das
  1319.            |         | 'nur lesbar Flag' gesetzt hat
  1320. warnifcnfl | dxs     | wenn gesetzt, dann erscheint bei den Kommandos
  1321.            |         | cp und mv auf jeden Fall eine Warnung falls
  1322.            |         | ein Namenskonflikt entsteht (Datei bzw.
  1323.            |         | Ordner existiert schon im Ziel)
  1324. cpsetdate  | dx      | wenn gesetzt, dann erhält eine Datei-Kopie das
  1325.            |         | aktuelle Datum
  1326. cpclearsrc | dx      | wenn gesetzt, dann wird das Archiv-Flag der
  1327.            |         | Quell-Datei beim Kopieren einer Datei gelöscht
  1328. cpcleardst | dx      | wenn gesetzt, dann wird das Archiv-Flag der
  1329.            |         | Ziel-Datei beim Kopieren einer Datei gelöscht
  1330. cmrwinfcnt | ndxs    | Anzahl der Dateien, ab der der Kopierdialog
  1331.            |         | im Fenster läuft
  1332. cmrwinbcnt | ndxs    | Kilobytes, ab der der Kopierdialog im Fenster
  1333.            |         | läuft
  1334.            |         |
  1335. multiuser  | vr      | das no|Desktop-System läuft im Multiuserbetrieb
  1336. UNAME      | vrns    | Name des Users
  1337. UID        | rns     | Benutzernummer im Multiuserbetrieb
  1338. GID        | rns     | Gruppennummer im Multiuserbetrieb
  1339. --------------------------------------------------------------------------------
  1340.  
  1341.  
  1342. A2  besondere CLI-Anweisungen
  1343. ------------------------------
  1344. - 'return'-Kommando
  1345.   Definition      return [<Value>]
  1346.   Verwendung in   Skripten
  1347.   Beschreibung    bricht die Bearbeitung eines Scripts' ab.
  1348.                   der optionale Parameter <value> steht nach Abbruch des
  1349.                   Scripts' in der Variablen 'status'
  1350.  
  1351.  
  1352. - 'goto'-Kommando
  1353.   Definition      goto <Labelname>
  1354.   Verwendung in   Skripten
  1355.   Beschreibung    Steht innerhalb eines Skriptes die unbedingte Sprung-
  1356.                   anweisung zu einem Labelnamen, so sucht der CLI das gesamte
  1357.                   Skript nach dem Vorkommen von <Labelname> ab und führt
  1358.                   die Skriptbeabeitung nach dem Label fort. Wird kein
  1359.                   Labelname gefunden so wird das Skript in jedem Fall
  1360.                   abgebrochen.
  1361.                   Der Labelname darf maximal 12 Buchstaben oder Zahlen
  1362.                   umfassen, muß mit einem Buchsstaben beginnen und durch
  1363.                   einen ':' beendet werden. Es wird Groß- und Kleinschreibung
  1364.                   beachtet! Der Labelname muß allein in einer Zeile und
  1365.                   außerhalb aller Schleifenkonstrukte und bedingten
  1366.                   Anweisungen stehen.
  1367.  
  1368.   Beispiel        testit:
  1369.                   .
  1370.                   .
  1371.                   .
  1372.                   if (-e TEST.C) goto testit
  1373.  
  1374.  
  1375. - 'if'-Kommando
  1376.   Definition      if (<Bedingung>) <Kommando>
  1377.                   oder
  1378.                   if (<Bedingung>) then
  1379.                       <Kommando>
  1380.                       .
  1381.                   [else
  1382.                       <Kommando>
  1383.                       .]
  1384.                   [elif (Bedingung) then
  1385.                       <Kommando>
  1386.                       .]
  1387.                   endif
  1388.   Verwendung in   Skripten, Objektdefinitionsdatei, (einzeilig in der shell)
  1389.   Beschreibung    Durch das 'if'-Kommando wird eine Anweisung nur dann
  1390.                   ausgeführt, wenn die in Klammern stehende Bedingung
  1391.                   erfüllt ist.
  1392.                   Das Kommando liegt in zwei Varianten vor:
  1393.                   1.  einer einzeiligen, bei der das bedingte Kommando
  1394.                       unmittelbar hinter die Bedingung geschrieben werden
  1395.                       muß, und
  1396.                   2.  einem mehrzeiligen Konstrukt, welches immer durch
  1397.                       'endif' beendet werden muß.
  1398.                   Ist die Bedingung erfüllt, werden alle Kommandos der
  1399.                   nächsten Zeilen bis zu einem 'endif', 'else' oder 'elif'
  1400.                   ausgeführt. Ist die Bedingung nicht erfüllt, werden die
  1401.                   Kommandos, die nach einem optionalen 'else' stehen,
  1402.                   ausgeführt. Das Kommando 'elif' steht für 'else if' und
  1403.                   prüft im 'else'-Fall erneut eine Bedingung; dieses
  1404.                   Kommando verhindert das Schachteln von 'if'-Konstrukten.
  1405.                   Die Kommandos 'if ... then', 'else', 'elif ... then' und
  1406.                   'endif' müssen allein in einer Zeile stehen.
  1407.  
  1408.   Beispiel        if (! -e "\TEMP") then
  1409.                       mkdir "C:\TEMP"
  1410.                       cp test.c \temp
  1411.                   elif (! -e "\TEMP\TEST.C") then
  1412.                       cp test.c \temp
  1413.                   else
  1414.                       echo test.c wurde schon kopiert
  1415.                   endif
  1416.  
  1417.  
  1418. - 'foreach'-Kommando
  1419.   Definition      foreach <Variablenname> <Liste>
  1420.                       Kommando
  1421.                       .
  1422.                   end
  1423.   Verwendung in   Skripten, Objektdefinitionsdatei
  1424.   Beschreibung    Das 'foreach'-Kommando weist einer Variablen nacheinander
  1425.                   jedes Wort in einer definierten 'Liste' zu. Die Kommandos
  1426.                   bis zum Kommando 'end' werden solange ausgeführt, bis die
  1427.                   'Liste' leer ist. Das Kommando 'end' muß allein in einer
  1428.                   Zeile stehen.
  1429.                   Die Liste enthält Wörter, die durch Leerzeichen voneinander
  1430.                   getrennt sind. Die Liste kann durch Klammern eingerahmt
  1431.                   werden. Die Wörter können 'wildcards' enthalten, diese
  1432.                   werden zu Beginn des Kommandos expandiert.
  1433.                   Mit dem Kommando 'continue' wird zum Beginn der bedingten
  1434.                   Kommandos gesprungen und mit dem nächsten Listeneintrag
  1435.                   weitergemacht. Das Kommando 'break' bricht die Bearbeitung
  1436.                   der Schleife ab und fährt mit dem Kommando unterhalb von
  1437.                   'end' fort.
  1438.  
  1439.   Beispiel        foreach i (*.c *.h *.prj *.cfg)
  1440.                       lharc a test.lzh $i
  1441.                       echo "$i wurde gerade archiviert..."
  1442.                   end
  1443.  
  1444.  
  1445. - 'while'-Kommando
  1446.   Definition      while (<Bedingung>)
  1447.                       Kommando
  1448.                       .
  1449.                   wend
  1450.   Verwendung in   Skripten, Objektdefinitionsdatei
  1451.   Beschreibung    Solange die Bedingung erfüllt ist, werden alle Kommandos
  1452.                   zwischen 'while' und 'wend' ausgeführt. Die Kommandos
  1453.                   müssen allein in einer Zeile stehen. Mit 'break' wird die
  1454.                   Schleife abgebrochen, mit 'continue' erneut zur 'while'-
  1455.                   Bedingung gesprungen.
  1456.  
  1457.   Beispiel        set i = 1
  1458.                   while ($i < 10)
  1459.                       echo $i". Durchlauf"
  1460.                       set i @ $i + 1
  1461.                   wend
  1462.