,--------------------------------------------------------------------. | 18.12.1994 | | CLI.TXT | | | | Beschreibung des Command Line Interpreter (CLI) im noDesktop V3.00 | | | | Copyright ½1994 by no|Software GmbH | | | | Autoren: | | Ralph Mertens | | Andreas Fahrig | | Christian Stamm | | Marco Zahnen | | | `--------------------------------------------------------------------' Inhalt ====== 1 ......................................................... Einleitung 2 ........................ Direkte Tastatureingabe / Die Shell des CLI 3 ............................................... Die Command-Language 3.1 ........................................... Aufbau eines Kommandos 3.2 ........................................ Schalterargumente (flags) 3.3 ................................... Umlenkung der Ein- und Ausgabe 3.4 ...................................................... Metazeichen 3.5 ......................................................... Modifier 3.5.1 ............................................. Execution-Modifier 3.5.2 .................................................. Path-Modifier 3.6 ........................................ Ausgabe von Sonderzeichen 3.7 ........................................................ Variablen 3.8 ............................................. Bedingte Anweisungen 3.9 .......................................................... Aliases 3.10 ................................................. History - Liste 4 ........................................... Parsing und Substitution 4.1 ............................................. History-Substitution 4.1.1 ............................................. Zeilensubstitution 4.1.2 ............................................... Wortsubstitution 4.2 ............................................... Alias-Substitution 4.3 .................................... Parsing und Makrosubstitution 4.4 ............................................ Variablensubstitution 4.4 .................................. Verhinderung von Substitutionen 4.6 ....................................... Ausfhrung eines Kommandos 5 ............................................................ Scripte 6 ................................................... Die WCON-Fenster 6.1 ....................................... ™ffnen eines WCON-Fensters 6.2 ...................... Programmunterbrechung in einem WCON-Fenster 6.3 .......................... VT52-Funktionalit„t eines WCON-Fensters 6.4 ...................... Primitive Terminal-Fenster (WAUX und WTALK) 7 .................................................. Interne Kommandos 7.1 ....................................... Graphikmodus und Textmodus 7.2 ...................................... Ausgabe von Fehlermeldungen 8 ..................................................... Fensternummern Anhang A1 ............................. šbersicht ber die internen Variablen A2 .............................. besondere CLI-Anweisungen: return goto if, then, else, elif, endif foreach, end, break, continue while, wend, break, continue 1 Einleitung ============= Der CLI des no|Desktop bildet die zentrale Schnittstelle zwischen der Desktop-Oberfl„che und dem Benutzer. Žhnlich dem 'csh' unter UNIX dient der CLI der šbersetzung von Befehlen oder Programmen und deren Bearbeitung. Der CLI tritt in drei verschiedenen F„llen in Aktion: 1. im Dialog mit dem Benutzer bei der direkten Eingabe ber die Tastatur (im WSH-Fenster) 2. bei der Bearbeitung von Scripten (Dateien, die eine Befehlsliste enthalten [*.NDS]) 3. bei der Bearbeitung von Befehlssequenzen, die in der Definitionsdatei fr Desktop-Ereignisse abgelegt sind. Die Funktionsweise des CLI, Namenskonventionen und Syntax sind dem 'csh' angelehnt. Im Folgenden wird die Benutzerschnittstelle des CLI als die 'shell' (Muschel) bezeichnet. 2 Direkte Tastatureingabe / Die Shell des CLI ============================================== Um zur direkten Eingabe zu gelangen, drckt man gleichzeitig [SHIFT] und [ENTER](auf der Zehnertastatur) oder w„hlt per RECHTS-KLICK im Dropdown- Men des Desktop den Punkt 'no|Desktop-CLI'. Die Shell des CLI dient als 'Medium', um vor allem Programme aufzurufen und Kommandos auszufhren. no|Desktop hat eine Reihe von internen Kommandos, die h„ufig benutzte Aktionen steueren, wie z.B. Kopieren (cp) oder Auflisten (ls) von Dateien. Durch Eingabe von 'help' werden alle verfgbaren internen Kommandos aufgelistet. Als 'externe' Kommandos werden Programme verstanden, die durch den Aufruf ausgefhrt werden. Die Shell arbeitet zeilenorientiert, das heiát, eine Kommandozeile darf ber Tastatureingabe nur eine Zeilenbreite betragen, jedoch maximal 128 Zeichen. Um in der Zeile bequem editieren zu k”nnen, bietet die shell einige Tastaturkombinationen: [BACKSPACE], [CTRL]+H - l”scht das Zeichen links vom Cursor [DELETE] - l”scht das Zeichen unter dem Cursor [CTRL]+W - l”scht ein Wort [CTRL]+U - l”scht die ganze Zeile [CLR/HOME] - l”scht den Bildschirm [CTRL]+B - Sprung zum vorigen Wort (backward skip) [CTRL]+F - Sprung zum n„chsten Wort (forward skip) [CTRL]+[Pfeil rechts] - Sprung zum Ende der Zeile [CTRL]+[Pfeil links] - Sprung zum Anfang der Zeile [Pfeil hoch] - vorige Zeile in der Historieliste [Pfeil runter] - n„chste Zeile in der Historieliste [HELP] - expandiert das 1. Wort auf das interne Kommando, das mit der Buchstabenkombination beginnt - expandiert jedes weitere Wort auf den Dateinamen im aktuellen Verzeichnis, das mit der Buchstaben- kombination beginnt - jedes weiter Drcken von HELP sucht das n„chstm”gliche passende Kommando/Argument [UNDO] - zeigt die fr HELP eingegebene Zeichenkette [INSERT] - wechselt zwischen šberschreibe- und Einfgemodus [RETURN] - beendet die Eingabe und fhrt das Kommando aus [SHIFT]+[ENTER] - schlieát das WSH-Fenster bzw. wechselt in den Graphikmodus Nach der Ausfhrung des Kommandos gibt die shell einen 'prompt' auf dem Bildschirm aus und signalisiert damit die Eingabebereitschaft. Die Zeichenkette, die durch 'prompt' ausgegeben wird, ist auf den aktuellen Benutzerpfad eingestellt: Beispiel: C:\NODESK\USR> _ 3 Die Command-Language ======================= 3.1 Aufbau eines Kommandos --------------------------- Die Kommandos des CLI bestehen aus einer Liste von Zeichenketten oder auch Worten, die durch Leerzeichen voneinander getrennt sind, wobei das erste Wort das eigentliche Kommando darstellt. Die brigen Worte (falls vorhanden) sind Argumente oder Parameter des Kommandos. Das Kommando cat beispiel.txt besteht aus zwei Worten. Das interne Kommando 'cat' erh„lt bei Ausfhrung das Argument 'beispiel.txt'. 'cat' gibt den Inhalt der Datei 'beipiel.txt' ber das Standardausgabe-Medium (ist in der Regel wohl der Bildschirm) aus. Die Ausgabe kann durch die Tastenkombination [CTRL]+C abgebrochen werden. Dateinamen werden intern immer in Groábuchstaben konvertiert. Anders ist dies bei Schalterargumenten (flags, s.u.). Der CLI unterscheidet hier Groá- und Kleinschreibung. Mehrere Kommandos in einer Zeile werden durch ';' voneinander getrennt und werden nacheinander abgearbeitet. Beispiel: ls -l > liste.txt; cat liste.txt; rm liste.txt Zun„chst wird eine ausfhrliche Liste aller Dateinamen im aktuellen Verzeichnis in die Datei 'liste.txt' geschrieben. Anschlieáend wird die Datei auf den Bildschirm ausgegeben und zum Schluž gel”scht. 3.2 Schalterargumente (flags) ------------------------------ Durch optionale Schalterargumente (flags) l„át sich die Ausfhrung eines Kommandos ver„ndern. Ein flag beginnt immer mit einem '-' (Bindestrich), gefolgt von mindestens einem weiteren Zeichen. GROž- UND KLEINSCHREIBUNG WERDEN UNTERSCHIEDEN!!!! Beispiele: (1) ls (2) ls -l (3) ls -R Kommado (1) gibt die Dateinamen im aktuellen Arbeitsverzeichnis aus. Durch Zusatz des flags '-l' [Kommando (2)] werden zum Dateinamen zus„tzliche Informationen wie Dateigr”áe und Erstellungsdatum und -uhrzeit ausgegeben. Durch die Angabe das flags '-R' [Kommando (3)] werden auch alle im aktuellen Verzeichnis enthaltene Unterverzeichnisse durchsucht und deren Inhalt ausgegeben. Die verschiedenen flags k”nnen auch kombiniert werden, wobei die Reihenfolge der flags egal ist: ls -l -R oder ls -lR oder ls -Rl Das interne Kommandos ls hat noch weitere wichtige und interessante flags. Andere Kommandos haben keine oder nur wenige flags, wie z.B. 'echo' mit dem einzigen optionalen flag '-n', das nach Ausgabe einer Zeile das newline unterdrckt. Durch Eingabe von 'help' gefolgt von einem internen Kommando kann man sich die flags fr dieses Kommando anschauen. 3.3 Umlenkung der Ein- und Ausgabe ----------------------------------- Kommandos, die ihre Eingabe normalerweise von der Tastatur lesen und auf den Bildschirm schreiben, k”nnen auch so ausgefhrt werden, daá die Eingabe/Ausgabe ber Dateien abl„uft. Das Kommando 'ls' schreibt die gefundenen Dateinamen normalerweise direkt auf den Bildschirm, Durch Eingabe von ls > liste.txt wird das Ergebnis in die Datei 'liste.txt' geschrieben, nachdem diese Datei neu angelegt wurde. Fr das Kommando selbst ist es unwesentlich, wohin es seine Ausgabe schreibt. Die Standard-Ausgabe ist der Bildschirm, die Umlenkung (redirection) der Standard-Ausgabe in eine Datei (und der Standard-Eingabe, der Tastatur, von einer Datei) erledigt die shell. Die Standard-Ein- und Ausgabe k”nnen in folgender Weise umgelenkt werden: < Dateiname ”ffnet die Datei 'Dateiname' als Standard- Eingabe. 'Dateiname' muá vorhanden sein! > Dateiname erzeugt die Datei 'Dateiname' und verwendet sie als Ausgabedatei. Ist sie bereits vorhanden, wird sie berschrieben. >> Dateiname die Datei 'Dateiname' wird wie bei '>' als Ausgabedatei benutzt. Die Ausgabe wird an das Ende einer vorhandenen Datei geh„ngt. Existiert die Datei nicht, wird sie erzeugt, es sei denn, die Variable 'noclobber' ist gesetzt, dann erscheint eine Fehlermeldung. Anstelle eines Dateinamens kann die Ein-/Ausgabe auch auf einige Standard- ger„te umgelenkt werden: PRT: Druckerschnittstelle PRN: Druckerschnittstelle AUX: serielle Schnittstelle (wie im Kontrollfeld eingestellt) Die Anweisungsfolge cat CLI.TXT > PRN: wrde also den Inhalt der Datei CLI.TXT auf die Druckerschnittstelle ausgeben. Werden Kommandos durch '|' voneinander getrennt, so wird die Ausgabe eines Kommandos mit der Eingabe des n„chsten Kommandos verknpft. Die Anweisungsfolge ls -l | cat -n leitet die Ausgabe von 'ls -l' an das Kommando 'cat -n' weiter, welches das Ergebnis auf dem Bildschirm ausgibt und zus„tzlich nach jeder Zeile eine Leerzeile einfgt. 3.4 Metazeichen ---------------- Es existiert eine Reihe von Zeichen (wie '>' oder '|'), die eine besondere Funktion haben. Diese 'Metazeichen' haben eine semantische (inhaltliche) und syntaktische Bedeutung fr die shell. Allgemein haben fast alle Zeichen, die nicht Buchstaben oder Ziffern sind, eine spezielle Bedeutung. Sollen diese Zeichen in einer Zeichenkette als darstellbares Zeichen ausgegeben werden, so mssen sie bzw. die Zeichenkette 'quotiert' werden, z.B. wrde echo 3 > 2 die Zeichenkette '3' in eine Datei namens '2' schreiben. echo '3 > 2' g„be die Zeichenkette '3 > 2' auf dem Bildschirm aus. Eine Kommandozeile wird normalerweise dort in W”rter aufgeteilt, wo Leerzeichen oder Tabulatoren stehen, mit folgenden Ausnahmen: Die Zeichen '|' ';' '<' '>' '(' ')' fhren ebenfalls zur Aufteilung in einzelne W”rter. Diese Metazeichen k”nnen dadurch Teil von W”rtern werden (d.h ihre Funktion verlieren), daž ihnen ein '`' vorangestellt wird. Zeichenketten, die durch Anfhrungszeichen (' oder ") eingeschlossen sind, werden als Teile von W”rtern interpretiert. Leerzeichen und die oben aufgefhrten Metazeichen trennen innerhalb dieser Anfhrungszeichen dann nicht einzelne W”rter. Beispiele: echo 3 > 2 erzeugt 4 W”rter echo 3 `> 2 erzeugt 4 W”rter ('>' wird nicht interpretiert) echo '3 > 2' erzeugt 2 W”rter 3.5 Modifier ------------- Nach der Variablensubstitution und unmittelbar vor der Ausfhrung des Kommandos wird die Kommandozeile daraufhin geprft, ob am Kommando oder an den Argumenten noch Modifier stehen. Diese werden zuletzt bearbeitet. Es existieren zwei verschiedene Arten von Modifiern: 1. Execution-Modifier 2. Path-Modifier Modifier dienen dazu, die Art der Kommandoausfhrung (Execution) oder Pfadnamen (Path) zu ver„ndern (modifizieren). 3.5.1 Execution-Modifier ------------------------- Diese Modifier betreffen die Ausfhrung eines Kommandos, Execution-Modifier werden mit einem '@' an den Kommandonamen angeh„ngt. Folgende Modifier existieren: Klasse A: @W Die Standard-Ausgabe wird auf das Texteingabefenster geleitet, sofern die Variable noWcon nicht gesetzt ist. Erfolgt eine Ausgabe, wird das Fenster ge”ffnet bzw. zum aktuellen Fenster. Unter Mint wird das Kommando im singletask-Modus gestartet. @W Die Standardausgabe wird auf das Textfenster mit n = 0 bis 3 umgeleitet, sonst wie @W @w wie oben, nur daá ein bereits offenes Text- @w Ausgabefenster nicht zum aktuellen Fenster wird. Unter Mint wird ein 'externes' Kommando im Hintergrund gestartet, no|Desktop wartet nicht auf die Beendigung des Kommandos. @T Die Textausgabe erfolgt nicht im Fenster @t wie @T, nach Beendigung des Kommandos wird auf einen Tastendruck gewartet @G Das Kommando wird im 'Graphikmodus' ausgefhrt. Interne Kommandos, die diese Option bieten, werden im Fensterdialog ausgefhrt. Die Textausgabe erfolgt in ein Textfenster, wenn verfgbar. Klasse B (nur fr externe Kommandos): @x vor Ausfhrung wird no|Desktop ausgelagert, um mehr freien Speicher zu Verfgung zu stellen @X wie @x, es wird der Arbeitspfad auf den Ordner gesetzt, in dem sich das Programm befindet @s, @S no|Desktop wird nicht ausgelagert, sonst wie @x, @X @c, @C no|Desktop entscheidet anhand der Programmgr”že, ob ausgelagert werden soll, sonst wie @x, @X bzw. @s, @S @n, @N no|Desktop wird nicht ausgelagert, es werden keine Fenster geschlossen, sonst wie @x, @X Modifier der Klasse A und der Klasse B k”nnen zusammen angegeben werden, aber jeweils nur einer der Klasse A und einer der Klasse B, wobei die A-Option vor der B-Option stehen muž: test@TX Die Klasse A - Modifier W1-W3 haben nur Sinn in Verbindung mit den Klasse B - Modifiers N bzw n! Wenn Modifier nicht angegeben werden, gelten die entsprechenden Einstellungen der NDQ-Datei! 3.5.2 Path-Modifier -------------------- Durch Modifikationen an Pfadangaben ist es m”glich, nur den ben”tigten Teil aus dem Pfadnamen zu extrahieren. Die Modifier folgen unmittelbar auf ein Argument und werden durch ':' eingeleitet. Eine Modifikationen innerhalb von Zeichenketten, die durch " eingeschlossen sind, findet nicht statt. Steht das ':' im ersten Wort (eigentliches Kommando) oder folgt auf ein ':' ein '\', dann erfolgt keine Modifikation. Stehen mehrere jeweils durch ':' eingeleitete Modifier hintereinander, wird von links nach rechts das Erebnis jeweils erneut modifiziert. Variablen, die Doppelpunkte enthalten (z.B. shareend) mssen bei Variablen-Substitution in " gesetzt werden. Folgende Modifier stehen zur Verfgung: :h Pfadangabe ohne Dateinamen (head) :r Pfad und Dateinamen ohne Dateiextension (root) :e nur Dateiextension (extension) :t nur Dateinamen (tail) :n wie -t, bei Ordnernamen '\' am Ende :d Laufwerksangabe (drive) :l Zeile in Datei n = Zeilennummer :w Wort in Zeile n = Wortnummer :D Dieser Modifier ersetzt den Dateinamen durch deren Erstellungsdatum im Format: :U Alle Kleinbuchstaben in Grožbuchstaben umwandeln :L Alle Grožbuchstaben in Kleinbuchstaben umwandeln :/ Alle '\' in '/' umwandeln Hinweis: Der Modifier >:D< ist besonders sinnvoll, um Abh„ngigkeiten von Dateien zu testen. So l„žt sich mittels dieses Modifiers ein Makefile fr die TURBO-C Kommandozeilenversion entwickeln! Nach der Anwendung des Modifiers ':/' ist es nicht mehr m”glich, einen Pfad mittels der anderen Modifier zu manipulieren; er sollte deshalb bei multipler Verwendung von Modiefiern immer als letzter stehen. Beispiel: set xy = "C:\OTTO\LOLA\FRANZ.TXT" echo $deskfile:h:L:/ --> c:/otto/lola 3.6 Ausgabe von Sonderzeichen ------------------------------ Wird einem beliebigen Zeichen ein '`' vorangestellt, so wird es als normales Zeichen ausgegeben und nicht mehr interpretiert. Auf diese Weise k”nnen z.B. Metazeichen als druckbare Zeichen ausgegeben werden. Die Ausgabe nicht-druckbarer Zeichen ist ebenfalls m”glich. `" -> " Anfhrungszeichen `? -> ? Fragezeichen `\ -> \ Backslash (umgek. Schr„gstrich) `a -> BEL Bell (Systemglocke) `b -> BS Backspace `f -> FF Formfeed (Seitenvorschub) `n -> LF Linefeed (Newline) `r -> CR Carriage return (Wagenrcklauf) `t -> HT Tabulator (horizontal) `v -> VT Tabulator (vertikal) `DDD -> oktal DDD = 1 bis 3 Oktalziffen `xHH -> hexadezimal HH = 1 bis 2 Hexadezimalziffern 3.7 Variablen -------------- Der CLI verwaltet eine Reihe von Variablen. Der Inhalt von Variablen kann mit den Kommandos 'set' angezeigt oder ver„ndert, mit 'unset' die Variable gel”scht werden. Variablennamen drfen maximal 12 Zeichen lang sein, sie mssen mit einem Buchstaben beginnen und drfen ansonsten nur Ziffern und Buchstaben enthalten. Der Inhalt von Variablen wird intern immer als Zeichenkette verwaltet. Einige Kommandos (z.B. eval) interpretieren den Inhalt von Variablen numerisch, eine Variable ohne Inhalt wird in diesem Fall als '0' interpretiert. Enth„lt eine Variable mehrere Worte, so wird bei numerischer interpretation immer nur das erste Wort interpretiert. Einige Variablen werden von no|Desktop bereitgestellt (sogenannte 'interne' Variablen). Interne Variablen haben unterschiedliche Eigenschaften: Solche Variablen, die die Hardwareeigenschaften des System beschreiben, sind nur lesbar und nicht l”sch- oder ver„nderbar. Andere interne Variablen beinhalten sehr wichtige Informationen fr den no|Desktop und werden w„hrend des Ladens der Desktopscripte initialisiert (Eine komplette Liste der internen Variablen und ihrer Bedeutung steht am Ende dieser Datei!). Bei anderen Variablen (externen) interessiert no|Desktop nur, ob diese gesetzt (definiert) sind oder nicht, der Inhalt dieser Variablen ist unwichtig. Der Inhalt von Variablen kann mit den Kommandos 'set' angezeigt oder ver„ndert, mit 'unset' die Variable gel”scht werden. Beispiele: set gibt alle 'sichtbaren' Variablen aus set -i gibt interne und gesetzte Variablen aus set -ia zeigt alle internen Variablen, auch die nicht gesetzen set i setzt die Variable i set i = hallo setzt die Variable i auf den Wert 'hallo' set i = ( a b $i ) setzt i auf die Wortliste 'a b hallo', eine Wortliste muá in runde Klammern gerahmt sein Um das Ergebnis einer Berechnung einer Variablen zuzuweisen, ist folgende Schreibweise notwendig: set @ Beispiele: set i @ 1+2*3 setzt i auf den Wert '7', zuerst wird die Berechnung ausgefhrt, dann das Ergebnis zugewiesen set i @ -wd test.c z„hlt alle W”rter in test.c und weist das Ergebnis der Variablen i zu 3.8 Bedingte Anweisungen ------------------------- Bedingungen sind fr den CLI Berechnungen, deren Ergebnis nur wahr oder falsch sein kann. Eine Bedingung ist erfllt (oder wahr), wenn das Ergebnis ungleich '0' (Null) ist, sonst ist sie nicht erfllt oder falsch. Bei der šberprfung einer Bedingung (z.B. im 'if'-Kommando) wird nur auf die fhrenden Zahlen im Ergebnis geachtet, es werden immer W”rter als Zahlen interpretiert. So k”nnen auch Variableninhalte als Bedingung interpretiert werden. Die Syntax von Bedingungen (Berechnungen) und die Priorit„t der Operatoren entspricht der Schreibweise in 'C'. Innerhalb von Bedingungen drfen keine Kommandos stehen (im Gegensatz zum 'csh' in Unix). Zus„tzlich zu rein algebraischen und logischen Operatoren existieren solche, die Zeichenketten miteinander vergleichen oder Dateiattribute interpretieren. Die Klammerung '(...)' von Ausdrcken ist erlaubt. Sogenannte 'un„re' Operatoren stehen vor einem Ausdruck, 'bin„re' zwischen zwei Ausdrcken. Im Folgenden werden alle verfgbaren Operatoren beschrieben: Schreibweise Beispiel Bescheibung ||, .or. a || b logisches 'OR' .and. a .and. b logisches 'AND' |, .bor. a | b bitweises 'OR' ^, .xor. a ^ b bitweises 'EXOR' .band. a .band. b bitweises 'AND' ==, .eq. a == b Prfung auf numerische Gleichheit !=, .ne. a != b Prfung auf numerische Ungleichheit =~ strA =~ strB Prfung auf Gleichheit in Strings !~ strA !~ strB Prfung auf Ungleichheit in Strings <=, .le. a <= b numerisches kleiner oder gleich >=, .ge. a >= b numerisches gr”áer oder gleich <, .lt. a < b numerisches kleiner >, .gt. a > b numerisches gr”áer <<, .shl. a << b bit-Shift links um b Einheiten >>, .shr. a >> b bit-Shift rechts um b Einheiten +, -, *, / Grundrechenarten %, .mod. a % b Rest der Division a / b (modulo) !, .not. ! a logisches 'NOT' ~, .bnot. ~ a bin„res 'NOT' -r -r a Datei a ist nur lesbar (readonly) -w -w a Datei a ist les- und schreibbar -x -x a Datei a ist ein ausfhrbares Programm -e -e a Datei a ist vorhanden -o -o a Datei a geh”rt Benutzer (z.Zt. dummy) -z -z a die Dateil„nge von a ist '0' -d -d a Datei a ist ein Ordner -wd -wd a Anzahl der W”rter in Datei a -ln -ln a Anzahl der Zeilen in Datei a -p -p x Prozež x existiert -c -c x Cookie x existiert 3.9 Aliases ------------- Die shell verwaltet eine Liste mit aliases, die durch die Kommandos 'alias' und 'unalias' erzeugt, angezeigt oder ver„ndert werden k”nnen. Aliasnamen drfen vorhandene Kommandonamen sein. Mit einem alias kann z.B. fr eine ganze Kommandosequenz eine 'Name' definiert werden (spart Tipparbeit!): 1 alias ll 'ls -l' ersetzt ll durch ls -l 2 ll tmp -> ls -l tmp 3 alias gibt alle aliases als Liste aus 4 unalias ll l”scht das alias 'll' aus der Liste 3.10 History - Liste --------------------- Die shell verwaltet eine History-Liste, in welcher sie zuvor eingegebene Kommandozeilen aufbewahrt. Dies ist ntzlich, um Kommandos zu wiederholen oder kleine Schreibfehler in Kommandos zu korrigieren. Die Anzahl der Eintr„ge wird durch die Variable 'history' bestimmt. Sie kann durch echo $history angezeigt werden und durch set history = n (n = Zahl zwischen 1 und 999) ver„ndert werden. Die letzte Kommandozeile wird immer gespeichert. Es werden normalerweise nur Kommandos, die direkt eingegeben werden in die Liste aufgenommen. Durch Eingabe von history wird die History-Liste ausgegeben, die z.B. so aussehen k”nnte: 9 ls -l 10 cat otto 11 cp liste.txt liste.bak 12 diff liste.txt liste.new Die Kommandos erscheinen mit ihrer Ereignisnummer (Event-Nummer). Diese Nummer kann fr die History-Substitution (siehe unten) verwendet werden. 4 Parsing und Substitution =========================== Nachdem eine Kommandozeile vom CLI gelesen wurde, wird die Zeile, wenn durch ';' oder '|' getrennt, in Einzelkommandos unterteilt. Diese Kommandos werden nun bersetzt, d.h. in eine ausfhrbare Form gebracht. Dabei werden bestimmte Zeichensequenzen ausgetauscht (substituiert), so wird eine Variable z.B. durch ihren Inhalt ersetzt. Im folgenden wird beschrieben, in welcher Reihenfolge der CLI bei der šbersetzung der Kommandozeile in eine ausfhrbare Form vorgeht. 4.1 History-Substitution ------------------------- Es ist m”glich, zuvor ausgefhrte Kommandos und selbst Teile von Kommandos in ein neues Kommando zu integrieren. Dazu bedient man sich der History- Substitution. Sie beginnt immer mit einem '!' und kann mehrfach und an beliebiger Position in der Eingabezeile vorkommen. Steht hinter dem '!' ein Leerzeichen, Tabulator, '=' oder '(' wird keine Substitution durchgefhrt. History-Substitutionen beginnen auch, wenn die Eingabezeile mit einem '^' beginnt. Jede Eingabezeile, die History-Substitutionen enth„lt, wird nach der Substitution auf dem Bildschirm ausgegeben. Die Beispiele in den folgenden Abschnitten beziehen sich auf den folgenden Ausschnitt aus einer history-list: 9 ls -l 10 cat otto 11 cp liste.txt liste.bak 12 diff liste.txt liste.new 4.1.1 Zeilensubstitution ------------------------- Um eine komplette Zeile zu substituieren, stehen folgende M”glichkeiten zur Verfgung: !n Substituiert Eventzeile n !-n Substituiert die Zeile mit der Nummer [aktuelle Eventnummer]-n !! Substituiert die komplette letzte Zeile und ist gleichbedeutend mit einer Wiederholung des letzten Kommandos. !t fr t kann gibt man die Anfangsbuchstaben einer Kommandozeile ein, die history-list wird dann nach einer Kommandozeile mit diesen Anfangsbuchstaben abgesucht, die Suche beginnt beim neuesten Kommando !?t? der Text kann an beliebiger Position mit dem Wildcard '?' versehen werden, es wird dann nach der ersten 'passenden' Kommandozeile gesucht Beispiele: !11 -> cp liste.txt liste.bak !-2 -> cp liste.txt liste.bak !d -> diff liste.txt liste.new !di -> diff liste.txt liste.new !?ot? -> cat otto !! -> diff liste.txt liste.new 4.1.2 Wortsubstitution ----------------------- Um einzelne W”rter aus einer Event-Zeile zu extrahieren, k”nnen wir nach der Zeilenspezifikation ein ':' setzen und dann eine (Zahlen-)Angabe fr das gewnschte Wort. Das erste Wort einer Zeile (der Kommandoname) hat die Nummer 0, das zweite Wort (also das erste Argument) die Nummer 1 usw. Mit folgenden Angaben kann ein Wort aus einer Zeile extrahiert werden: :0 erstes Wort (Kommandoname) :n n-tes Argument :^ erstes Argument :$ letztes Argument :%?...? Wort, welches die Zeichen zwischen den Fragezeichen enth„lt :x-y x-tes bis y-tes Wort :-y entspricht 0-y :* entspricht 1-y :x* entspricht x-$ :x- entspricht x-'vorletztes Argument' Beispiele: mv !12:* -> mv liste.txt liste.new cp !12:%?te.n? !10:$ -> cp liste.new otto rm !11:2 -> rm liste.bak !10:0 !12:2 -> cat liste.new Ist das erste Zeichen einer Kommandozeile ein '^', so wird die Zeichenfolge, die zwischen diesem Zeichen und einem weiteren '^' steht, durch die danach folgende Zeichenfolge in der vorigen Zeile ersetzt. Damit kann man Schreibfehler leicht verbessern. cb otto.1 otto.bak (vorige Zeile) ^cb^cp -> cp otto.1 otto.bak 4.2 Alias-Substitution ----------------------- Das erste Wort jedes Einzelkommandos einer Kommandozeile wird daraufhin untersucht, ob es ein alias ist. Wenn dem so ist, so wird das alias durch den Text, fr den es steht, ersetzt und das Kommando erneut History- substituiert, so, als w„re die eingegebene Zeile die vorige Eingabezeile. Dies hat den Vorteil, daž ein alias History-Substitution enthalten darf und es damit m”glich ist, Argumente des Einzelkommandos zu nehmen und an eine beliebige Stelle im Ersetzungstext zu setzen. Die substituierte Zeile ersetzt das Kommando und die Argumente. Wird keine History-Substitution im aliastext verwendet, so bleiben die Argumente unver„ndert. Wird im aliastext wiederum ein alias verwendet, so wird die alias-Substitution erneut durchgefhrt. Ist das erste Wort der substituierten Zeile dasselbe wie in der alten, so wird eine erneute Substitution verhindert, um eine endlose Ersetzung zu verhindern. Andere 'Endlosschleifen' erzeugen eine Fehlermeldung. Beispiel: alias lookup 'grep !^ test.c' ersetzt lookup durch grep und das 1. Argument der eingegebenen Zeile. Die Zeichenkette steht in '...', um die History-Substitution bei Eingabe zu verhindern. lookup cli.c -> grep cli.c test.c 4.3 Parsing und Makrosubstitution ---------------------------------- Nach der alias-Substitution wird jedes Einzelkommando parsiert, d.h. auf korrekte Schreibweise hin geprft und in eine interne Form gebracht. Gleichzeitig werden Makros substituiert. Makros k”nnen ausschlieálich in der Objektdefinitionsdatei (.NDQ) verwendet werden. Ein Einsatz in der shell oder in Scripten ist nicht m”glich. Mehr zu Objektdefinitionsdateien und Makros -> OBJECTS.TXT. 4.4 Variablensubstitution -------------------------- Nachdem die Kommandozeile parsiert wurde, findet die Variablensubstitution statt. Damit eine Variable substituiert wird, muž ihr ein '$' vorangestellt werden (bis auf zwei Ausnahmen: '~' und '~~') . In Zeichenketten, die in >'< eingeschlossen sind, findet ebenfalls Variablensubstitution statt. Besteht der Inhalt einer Variablen aus mehreren W”rtern, so werden diese als einzelne Argumente substituiert, innerhalb von >"< nur als Sequenz einer Zeichenkette. Es existieren mehrere Varianten der Variablenubstitution: $Variable oder ${Variable} wird ersetzt durch den Wert der Variablen '{}' trennt eindeutig den Variablennamen von einer nachfolgenden Zeichenkette $Variable[Bereich] oder ${Variable[Bereich]} wird benutzt, um nur einzelne W”rter des Variableninhaltes zu substituieren. Enth„lt die Variable nur ein Wort, so wird ein Buchstabenbereich substituiert. Der Bereich hat die Form: x, x-y, x- oder -y, wobei x und y Bereichszahlen sind, eine Variablensubstitution findet hier nicht statt. >*< selektiert alle W”rter, das erste Wort hat die Nummer 1 $#Variable oder ${#Variable} Anzahl der W”rter einer Variablen $0 Scriptname, wenn in einem Script benutzt, sonst Fehlermeldung $zahl oder ${zahl} -> $argv[zahl] $* -> $argv[*] argv enth„lt die Argumente, die einem Script bergeben wurden $?Variable oder ${?Variable} substituiert '1', wenn die Variable gesetzt (vorhanden) ist, sonst '0' $$ substituiert die Schachtelungstiefe von Scripten als Zahl $< forciert die Eingabe einer Zeile ber die Tastatur, diese wird als Wert eingefgt. ~ Benutzerverzeichnis, entspricht $HOME ~~ Verzeichnis von no|Desktop, entspricht $NDHOME Nach der Variablensubstitution und unmittelbar vor der Ausfhrung des Kommandos wird die Kommandozeile daraufhin geprft, ob am Kommando oder an den Argumenten noch Modifier stehen. Diese werden zuletzt bearbeitet. 4.5 Verhinderung von Substitutionen ------------------------------------ Die Einrahmung von Zeichenketten in der Form '...' oder "..." dient dazu, alle bzw. einen Teil der Substitutionen in diesem Bereich zu verhindern. Zeichenketten, die durch >'< eingeschlossen sind, sind vor einer weiteren Interpretation durch den CLI geschtzt - es findet also in diesem Bereich keine Substitution statt. Zeichenketten, die durch >"< eingeschlossen sind, werden nur teilweise substituiert. 4.6 Ausfhrung eines Kommandos ------------------------------- Sind alle Substitutionen erfolgt, wird das Kommando ausgefhrt; sei es ein 'internes', ein 'externes' (also ein Programm) oder ein Script. Nach Ausfhrung des Kommandos wird als Beendigungsstatus eine Zahlenangabe in die Variable 'status' geschrieben und kann z.B. mit echo $status direkt im Anschluá an das letzte Kommando abgefragt werden. Definitionsgem„á wird bei fehlerfreier Ausfhrung eines Kommandos eine '0' zurckgeliefert. Werte ungleich '0' zeigen meist einen Fehler an. 5 Scripte ========== Scripte unter no|Desktop sind Textdateien (*.NDS), die Kommandozeilen enthalten. Zus„tzlich zu der direkten Kommandoeingabe bietet das Schreiben von Scripten die M”glichkeit, komplexe Dateioperationen zu automatisieren. Hierfr stehen in Scripten komfortable Programmiertechniken, wie bedingte Ausfhrung, Sprnge, Sprungmarken und Programmschleifen, zur Verfgung. Mehrere Scripte k”nnen auch ineinander geschachtelt werden. no|Desktop selbst verwendet beim Programmstart Scripte und schreibt beim Auslagern ein tempor„res Script mit allen wichtigen Desktopinformationen. Diese Datei wird nach Rckkehr zum no|Desktop gelesen und anschlieáend gel”scht. Der Aufruf eines Scriptes ist der gleiche, wie der eines Kommandos, bei Namensgleichheit mit anderen Kommandos oder Programmnamen empfiehlt sich der Zusatz der Endung .NDS . Einem Script k”nnen Argumente mitgegeben werden. Vor Aufruf des Scriptes wird eine neue (lokale) Variable 'argv' erzeugt, die eine Liste der bergebenen Argumente enth„lt. Im Script kann z.B. auf das 1. Argument mit $1 oder $argv[1] zugegriffen werden. Die Anzahl der bergebenen Argumente erh„lt man durch $#argv. Werden in einem Script neue Variablen definiert, so existieren diese nur solange, wie die Bearbeitung des Scriptes dauert. Ausnahme bildet der Aufruf eines Scriptes durch source ... Nur in diesem Falle werden alle im Script definierten Variablen global definiert und sind auch nach Beendigung des Scriptes verfgbar. Ein Spezialfall ist folgender Aufruf: source -h In diesem Falle werden alle im Script enthaltenen Zeilen in die Historyliste kopiert, das Script selbst wird aber nicht ausgefhrt. Alle in einem Script definierten Variablen sind bei einem Scriptaufruf in diesem Script ebenfalls verfgbar, allerdings nur lesbar. Die Definition einer Variablen in einer tieferen Script-Ebene mit dem gleichen Namen wie eine Variable in einer h”heren (bergeordneten) Script-Ebene fhrt zur Neudefinition einer lokalen Variablen fr die untergeordnete Ebene. Der Inhalt der Variablen der bergeordneten Script-Ebene kann nicht ver„ndert werden. Nach Beendigung des untergeordneten Scriptes werden die lokal definierten Variablen wieder gel”scht. Die Verschachtelungstiefe der Scriptebenen kann durch echo $$ abgefragt werden. Beginnt eine Zeile innerhalb eines Scriptes mit einem '#', so wird der Rest dieser Zeile vom CLI als Kommentar gewertet und ignoriert. Wird w„hrend der Bearbeitung des Scriptes ein Kommando mit einem Status ungleich '0' beendet (es ist also aller Wahrscheinlichkeit nach ein Fehler aufgetreten), so wird die Bearbeitung des Scriptes abgebrochen und der letzte (Fehler-)Status zurckgeliefert. Der Abbruch eines Scriptes im Fehlerfall kann durch Setzen der internen Variablen 'ignoreerr' verhindert werden: set ignoreerr Das Script wird in diesem Fall nur noch bei fatalen Fehlern abgebrochen. In Scripten sind Kommandos m”glich, die definitionsgem„á mehrere Zeilen umfassen. Im Gegensatz dazu sind im Eingabefenster nur einzeilige Kommandos erlaubt. 6 Die WCON-Fenster =================== no|Desktop bietet die M”glichkeit, die Standardeingabe und -ausgabe (s.o.) auf Fenster umzulenken. Diese Option gilt zun„chst nur fr die Normalversion und das Mint-System, unter Mag!X ist nur das WSH-Fenster (Kommandoeingabe) verfgbar, um dort interne Kommandos auszufhren. Die Anzahl der Textfenster, auf die die Ein- und Ausgabe erfolgen soll, wird im Startskript DESK.NDS im Kommando 'newdesk' definiert, indem jedes einzelne Fenster am Ende des Befehls beschrieben wird: newdesk ..... ..... ..... STD STD,100x200 STD,80x30 STD,80x5 In diesem Beispiel werden 4 Fenster definiert. Es k”nnen maximal 10 WCON-Fenster definiert werden (WCON0 - WCON9). Fr jedes einzelne Fenster muá die Zeichenkette 'STD' (= Standard) eingetragen werden, optional kann die Zeilenl„nge und Zeilenanzahl definiert werden. Sie muá durch ein ',' eingeleitet werden und dann mssen zwei Zahlenangaben, durch 'x' getrennt folgen. Die erste Zahl definiert die Zeilenbreite des Fnsters, die Zweite die Zeilenanzahl. Werden keine Werte angegeben, wird die Zeilenbreite auf 80 Zeichen, die Zeilenanzahl auf 25 Zeilen gesetzt. Diese Angaben bleiben aktiv, solange no|Desktop arbeitet und k”nnen nicht ge„ndert werden. Das erste Fenster (WCON0) ist immer fr die shell reserviert und heiát WSH-Fenster. Die Ausgabe ber ein WCON-Fenster wird ber die interne Variable 'noWcon' gesteuert. Solange sie nicht gesetzt ist, sind die WCON-Fenster aktiv; wird sie gesetzt, so schaltet no|Desktop bei Standardausgabe auf den Textbildschirm um. Ist kein Fenster ber 'newdesk' definiert, so ist 'noWcon' gesetzt und kann nicht ver„ndert werden, die Standardein- und ausgabe erfolgt auf dem Textbildschirm. Einige Programme, die ihre eigene Textausgabe haben, arbeiten nicht mit den WCON-Fenstern zusammen. In diesem Fall sollte ber das Popupmen des Desktops die Ausgabe auf den Textbildschirm eingestellt werden oder beim Programmaufruf der Modifier '@T' bzw. '@t' an den Programmnamen geh„ngt werden. Beispiel: TLDU.TOS@T Die Ausgabe eines Kommandos erfolgt normalerweise immer im WSH-Fenster. Die Ausgabe auf andere WCON-Fenster gelingt mit den Modifizierern '@Wn'. M”chte man ein Textprogramm z.B. im 2. WCON-Fenster (WCON2) laufen lassen, so muá man direkt an den Programmnamen den Modifier '@W2' oder '@w2' h„ngen: Beispiel: LHARC@W2 Im Multitaskingbetrieb (unter MINT, MTOS) ist es auf diese Weise m”glich, ein Programm im Hintergrund zu starten, d.h. no|Desktop wartet nicht auf die Beendigung des Programmes sondern teilt dem Programm nur ein Fenster zu. Die Ausgabe erfolgt dann in regelm„áigen Abst„nden. Beispiel: LHARC@w2 startet das Programm unter MTOS/MINT im Hintergrund im WCON2-Fenster Man sollte sich davor hten, ein Programm, das im Hintergrund gestartet wurde, im WSH-Fenster ausgeben zu lassen, da in diesem Falle eine Kommandoeingabe erst dann wieder m”glich ist, wenn das Programm beendet wurde. 6.1 ™ffnen eines WCON-Fensters ------------------------------- Im Normalfall wird ein WCON-Fenster ge”ffnet, sobald ein Eingabe oder Ausgabe in dieses Fenster stattfindet. Erfolgt eine Eingabe, wird das Fenster zum aktuellen Fenster, d.h. es wird 'getoppt'. Vom WSH-Fenster hat man ber das Kommando 'wcon' die M”glichkeit, ein Fenster explizit zu ”ffnen: wcon -3 ”ffnet das WCON3-Fenster Der erste optionale Parameter bestimmt die Fensternummer. Der aktuelle Inhalt eines Fensters bleibt erhalten. 6.2 Programmunterbrechung in einem WCON-Fenster ------------------------------------------------ Durch Eingabe der Tastenkombination '[CTRL]+C' kann in der Regel jedes externe Programm und interne Kommando abgebrochen werden. Um ein laufendes externes Programm zu unterbrechen klickt man einfach mit einer Maustaste. Der Programmname in der Titelzeile des WCON-Fensters wird durch '<...>' eingerahmt. Nun ist es m”glich, das Fenster zu verschieben, dessen Gr”áe zu ver„ndern und sich den gesamten Inhalt des Fensters anzuschauen. Klickt man mit der Maus auf den linken oberen Fensterknopf (Closerbutton) so wird nach Rckfrage die Ausfhrung des Programms abgebrochen. Ebenso ist an dieser Stelle das Drcken von '[CTRL]-C' m”glich. Zum Fortsetzen des Progammablaufs klickt man mit der Maus auf den Ausgabebereich des Fensters. Eine Programmunterbrechung durch '[CTRL]-S' ist bei WCON-Fenstern NICHT m”glich! 6.3 VT52-Funktionalit„t eines WCON-Fensters -------------------------------------------- Die Ausgabe auf ein WCON-Fenster durchl„uft einen VT52-Emulator. Enh„lt die Ausgabe VT52-Steuerbefehle, so werden diese interpretiert. So ist es z.B. m”glich, Texte, die VT52-Steuerbefehle enthalten, mit allen Textattributen auszugeben. Weiterhin versteht jedes WCON-Fenster einem minimalen VT100- Steuerbefehlssatz, allerdings nur die Befehle, die sich auf die Textattribute und Textfarben beziehen. šber die Tastatur k”nnen die verfgbaren Steuerbefehle auch direkt eingegeben werden. Die Tastenkombination 'ALT-ESC' schaltet in den Steuerbefehlsmodus. Die Eingabe von 'ESC' wird nun als Steuerzeichen interpretiert (hex 0x1B). Unbekannte Steuerbefehle werden ignoriert. Dieser Modus wird durch erneutes Drcken von 'ALT-ESC' wieder verlassen. 6.4 Primitive Terminal-Fenster (WAUX und WTALK) ------------------------------------------------ Durch Setzen der internen Variablen 'wauxwin' wird ein WCON-Fenster zu einem Terminal-Fenster. Jede Eingabe von der seriellen Schnittstelle geht auf das WAUX-Fenster, jede Eingabe im Fenster wird auf die serielle Ausgabe geleitet. set wauxwin setzt das Terminalfenster WAUX auf WCON1 set wauxwin = 3 setzt WAUX auf WCON3 unset wauxwin l”scht die Terminalfunktion waux ”ffnet das WAUX-Fenster Durch Setzen der Variablen 'wtalkwin' wird ein WTALK-Fenster definiert. Jede Eingabe in dieses Fenster erscheint im Fenster und wird auf die serielle Ausgabe geleitet. Bei Kommunikation mit einem entfernten Computer per Tastatur sieht man also das, was man schreibt, auch auf dem Bildschirm. set wtalkwin setzt das Talkfenster WTALK auf WCON1 set wtalkwin = 3 setzt WTALK auf WCON3 unset wtalkwin l”scht die Talkfunktion wtalk ”ffnet das WTALK-Fenster Es ist nicht m”glich, das WTALK-Fenster zu ”ffnen oder die Variable 'wtalkwin' zu setzen, ohne daá ein WAUX-Fenster existiert. Die Variablen 'wauxicrnl' und 'wauxocrnl' definieren die Behandlung der RETURN-Taste (bzw. des Wagenrcklaufs (cr)). Ist 'wauxicrnl' gesetzt, so wird jeder Wagenrcklauf (cr), der ber die serielle Eingabe kommt in einen Zeilenvorschub (nl) und Wagenrcklauf (cr) umgesetzt. Ist 'wauxocrnl' gesetzt, so wird bei Drcken der RETURN-Taste (cr) ein Wagenrcklauf (cr) und Zeilenvorschub (nl) gesendet. Das WAUX-Fenster stellt die primitivste Form eines Terminals dar und dient lediglich dem direkten Ansteuern der seriellen Schnittstelle ber die Tastatur. Die Einstellungen der seriellen Schnittstelle (Baudrate usw.) wird anderen Progammen berlassen. 7 Interne Kommandos ==================== no|Desktop besitzt eine groáe Anzahl von internen Kommandos. Ein Teil dieser Kommandos entspricht den unter anderen Betriebssystemen bekannten Kommandos zum Anzeigen und Manipulieren von Dateien, zur Verwaltung von Variablen u.a. Ein Groáteil der Kommandos dient der Manipulation und Gestaltung von no|Desktop- eigenen Fenstern und anderen Objekten, sowie deren Interaktion. Viele dieser Kommandos werden in der Objektdefinitionsdatei verwendet, um einen individuellen Desktop zu erm”glichen. Jede Aktion auf dem Desktop, jede Bewegung einer Datei in einen Ordner oder woanders hin, jedes Klicken, Doppelklicken, jede Tastatureingabe beruht auf einer sinnvollen Zusammenstellung von internen Kommandos. Einerseits kann man durch Žndern der Objektdefinitionsdatei seinen individuellen Desktop schreiben, andererseits ben”tigt man viele der beschriebenen Kommandos nur dort und wird sie beim normalen Arbeiten kaum verwenden. 7.1 Graphikmodus und Textmodus ------------------------------- Viele der beschriebenen Kommandos liegen in zwei verschiedenen Darstellungsformen vor: Im 'Graphikmodus' erscheint bei Ausfhrung des Kommandos ein benutzergefhrter Dialog und die Paramter werden in den Dialogfenstern festgelegt; im 'Textmodus' erfolgt die Eingabe der Parameter ber die Kommandozeile in der shell. Die Darstellungsform ist davon abh„ngig, ob das WSH-Fenster offen ist, bzw. die shell im Textbildschirm l„uft oder nicht. Im ersten Fall wird die Eingabe (und in der Regel die Ausgabe) im Textfenster oder -bildschirm vorgenommen. Andernfalls wird das Kommando als Dialog ausgefhrt. Zu diesen Kommandos z„hlt z.B. cp Andere Kommandos sind fr den Text- und Graphikmodus durch unterschiedliche Kommandonamen definiert. Das liegt vor allem an den unterschiedlichen Parametern in beiden Modi aber auch an einer teilweise unterschiedlichen Funktionalit„t. Zum Anzeigen von Dateinamen dient im Textmodus das Kommando ls Im Graphikmodus arbeitet man mit dem Kommando wls Žhnlich verh„lt es sich mit den Kommandos 'echo' und 'gecho'. 7.2 Ausgabe von Fehlermeldungen -------------------------------- Tritt bei der Kommandoausfhrung ein Fehler auf, so wird die Fehlermeldung in einem Dialogfenster ausgegeben, sofern kein WSH-Fenster offen ist oder der Textbildschirm aktiv ist. In diesen F„lllen wird die Fehlermeldung ber die Standardausgabe geschrieben. 8 Fensternummern ================= Jedem ge”ffneten Fenster im no|Desktop wird automatisch eine eindeutige Nummer zugeordnet. Diese erscheint im Kopfbalken des Fensters, und zwar mit einem abschlieženden Doppelpunkt (':'). Somit ist es m”glich, z.B. Kopieroperationen von einem Fenster in ein anderes ber die Fensternummern zu steuern. Hat man z.B. in einem Fenster mit der Nummer '1:' einige Dateien selektiert, um sie in den Pfad des Fensters mit der Nummer '3:' zu kopieren, so drckt man Cntrl-K (fr Kopieren) und gibt dann als Zielpfad in der erscheinenden Dialogbox einfach '3:' - also nur die Fensternummer - an. Die Expandierung der Nummern auf die entsprechenden Pfade bernimmt no|Desktop dann von selbst. Anhang ====== A1 šbersicht ber die internen Variablen ----------------------------------------- Im folgenden wird jede interne Variable genauer beschrieben. Jede interne Variable hat zus„tzlich zu ihrem Inhalt noch individuelle Eigenschaften, so werden einige bei Eingabe des 'set'- Kommandos mit angezeigt, andere nicht. Einige werden beim Auslagern von no|Desktop in einer tempor„ren Datei mit abgespeichert und stehen nach Rckkehr wieder zur Verfgung. Viele der internen Variablen werden beim 'Desktop Speichern' in der DESK.NDS gesichert. Die folgenden Abkrzungen beschreiben die individuellen Attribute einer internen Variable: v (visible) wird beim 'set'- Kommando mitangezeigt r (readonly) nur lesbar, nicht l”schbar n (nounset) nicht l”schbar d (d_save) wird beim Sichern des Desktops gespeichert x (x_save) wird beim Auslagern von no|Desktop gespeichert i (index) prim„r indizierte Variable s (state) ist bei Programmstart gesetzt Name |Attribute| Bedeutung -----------+---------+----------------------------------------------- NDHOME | vrns | HOME-Pfad von no|Desktop (entspricht ~~) | | (z.B. 'C:\NODESK') HOME | vrns | HOME-Pfad des Benuters (entspricht '~') | | (z.B. 'G:\USR\ANDI') PATH | vnx | Suchpfade, durch ';' getrennt, die no|Desktop vor | | Starten eines Programms ohne Pfadangabe | | durchsucht TEMPDIR | vx | Ordner, in dem no|Desktop Tempor„rdateien ablegt TEMPFILE | vnxs | Name der Tempor„rdatei, die beim Auslagern | | erzeugt wird SYSDIR | vnxs | Ordner, der no|Desktop-Systemdateien enth„lt | | (z.B. '$NDHOME\NDSYS') deskfile | vnxs | Name des Skriptes, das den Aufbau des Desktops | | enth„lt (z.B. 'CNF\640X480\DESK.NDS' - | | relativ zu $HOME) initfile | vnds | Name des Skriptes, das Bildschirmaufl”sungs- | | abh„ngige Variablendefinitionen, etc. enth„lt | | (z.B. 'CNF\640X480\INIT.NDS' - relativ zu $HOME) globfile | vds | Name des Skriptes fr globale (Bildschirm- | | aufl”sungsunabh„ngige) Variablendefinnitionen, | | aliase, etc. | | (z.B. 'CNF\GLOBALS.NDS' - relativ zu $HOME) etcfile | vds | Name der optionalen Skriptdatei, die am Ende | | des Scriptes $deskfile ausgefhrt wird nddfile | vrns | Name der Objektdefinitionsdatei ndifile | vrns | Name der ICON-Zuordnungsdatei rscfile | v | Name der ICON-Recourcedatei | | wfindcmd | x | enth„lt eine interne Information fr das | | Kommando wfind filekeys | dx | wenn gesetzt, dann wird der Dateicursor in | | Fenstern dargestellt forceslider| dx | wenn gesetzt, dann werden grunds„tzlich alle | | Slider eines Fensters gezeichnet wlsnoalign | dx | wenn gesetzt, dann wird KEIN Raster fr die | | Gr”že eines LS-Fensters verwendet notestdrv | x | wenn gesetzt, dann wird vor Auslagern von | | no|Desktop NICHT berprft, ob noch genug Platz | | zum Sichern der tempor„ren Scriptdatei | | ($TEMPFILE) verfgbar ist checkobts | x | enth„lt die Objekttypen, die beim Laden des | | Desktops auf ihre Existenz berprft werden | | sollen toptxt | x | dieser Text erscheint rechtsbndig in der | | Menleiste (z.B. 'set toptxt = $UNAME', dann | | steht dort immer der aktuelle Benutzername') msgcolor | nxs | die Farbe, in der der Inhalt von 'toptxt' | | dargestellt wird popdelay | ndxs | Wert zum Steuern der Scrollgeschwindigkeit | | von PopUp-Mens | | LINE | ns | in dieser Variable steht der Inhalt einer | | Dialogeingabe, der Inhalt wird erneut parsiert | | (s.o.) | | (z.B. legt das interne Kommando getline hier | | seinen String ab) prompt | vx | Zeichenkette, die am Beginn einer Kommando- | | zeile im shell steht. Folgende Krzel werden | | interpretiert: | | $h Historyeintrag | | $d aktuelles Laufwerk | | $p aktueller Arbeitspfad | | $s Anzeige von '#', wenn die shell von | | einem anderem Programm aufgerufen wurde | | $$ '$' | | $r Wagenrcklauf (cr) status | vrns | enth„lt den Rckgabewert eines Kommandos history | vnx | maximale Eintr„ge der History-Liste ignoreerr | vx | wenn gesetzt, dann wird ein Skipt im normalen | | Fehlerfall nicht abgebrochen noclobber | vx | bei Ausgabeumlenkung '>' in eine Datei, darf | | diese noch nicht existieren, bei '>>' muá | | diese existeren (s.o.) noxArg | xs | keine Parameterbergabe an ein Programm ber | | xArg-Verfahren noARGV | x | keine Parameterbergabe an ein Programm ber | | ARGV-Verfahren chainproc | nxs | Prozentangabe zum Auslagern von no|Desktop chainabs | nxs | Kilobyteangabe zum Auslagern von no|Desktop | | šberschreitet die Gr”áe eines Programms + | | 'chainproc'-Prozent des Programms + | | chainabs-Kilobyte den gr”átm”glichen | | Speicherbereich, so wird unter Normal-TOS | | no|Desktop ausgelagert fastsave | dx | wenn gesetzt, dann wird beim Desktop-Speichern | | eine optimierte, aber nicht mehr lesbare Datei | | erzeugt fastxsave | dxs | wenn gesetzt, dann wird beim Auslagern von | | no|Desktop eine optimierte, aber nicht mehr | | lesbare Datei erzeugt useKobold | dx | das Hilfsprogramm 'KOBOLD' wird benutzt | | (bei cp, mx, rm) koboldPRG | dx | Name und Pfadangabe von 'KOBOLD' | | version | rns | enth„lt die aktuelle Versionsnummer des no|Desktop | | als String (z.B. "3.00") multitask | vr | das no|Desktop-System l„uft unter einem | | preemptiven Multitasking-Betriebssystem CPU | rns | Name des internen Prozessors (z.B. MC68000) TIME | rns | aktuelles Datum und Uhrzeit im Format: | | 'Djjmmtthhmmss' screenw | rns | Breite des Bildschirms in Pixeln screenh | rns | H”he des Bildschirms in Pixeln ncolors | rns | Anzahl der Farbebenen (Planes) des Bildschirms noWcon | dx | wenn gesetzt, dann werden keine WCON-Fenster | | benutzt (s.o.) (nicht setzbar unter | | Multitasking-Betriebssystemen) wshpos | x | Koordinaten des WSH-Fensters wcon1pos | x | Koordinaten des WCON1-Fensters wcon2pos | x | Koordinaten des WCON2-Fensters wcon3pos | x | Koordinaten des WCON3-Fensters wauxicrnl | x | Umwandlung von 'cr' in 'crln' bei serieller Eingabe wauxocrnl | x | Umwandlung von 'cr' in 'crln' bei serieller Ausgabe wauxwin | x | WCON-Fensternummer des Terminalfensters wtalkwin | x | WCON-Fensternummer des Talkfensters wconscroll | dx | Anzahl der Zeilen, die in WCON-Fenstern in einem | | Stck gescrollt werden sollen | | (0 = halbe Fensterh”he) | | deskcolor | ndxs | Farbe des Desktophintergrundes (0-15) deskpatt | ndxs | Muster des Desktophintergrundes (0- 7) wincolor | ndxs | Hintergrundfarbe von Fenstern (0-15) winpatt | ndxs | Hintergrundmuster von Fenstern (0- 7) blitter | dx | wenn gesetzt, ist ein vorhandener Blitter | | angeschaltet (der initiale 'set-Zustand' | | wird bei Programmstart anhand des aktuellen | | Zustands des Blitters ermittelt) cpucache | dx | wenn gesetzt, ist ein vorhandener CPU-Cache | | angeschaltet (ab Prozessoren des Typs MC68030 | | aufw„rts) (der initiale 'set-Zustand' | | wird bei Programmstart anhand des aktuellen | | Zustands des Caches ermittelt) topdelay | ndxs | Zeitwert zum automatischen Fensterwechsel, | | wenn die Maus auf ein anderes Fenster gefhrt | | wird (0 = AUS) kbdelay | ndxs | Wert der Verz”gerung bis die Tastaturwieder- | | holung einsetzt. M”glich sind Werte von | | 0 (AUS) bis 99 kbrepeat | ndxs | Geschwindigkeit der Tastaturwiederholung. | | M”glich sind Werte von 0 (AUS) bis 99 linenums | dxs | wenn gesetzt, dann werden in Textfenstern | | Zeilennummern angezeigt tabsize | ndxs | L„nge eines Tabulator-Zeichens (0 bis 20) fontsize | ndxs | Gr”že des Systemfonts in Textfenstern | | (momentan: 4, 6, 9, 12, 13 oder 26) maxfiles | ndxs | maximale Anzahl von Dateien, die in einem | | LS-Fenster dargestellt werden k”nnen | | (minimal 224) wlsmaxcl | ndxs | Anzahl der Spalten in einem LS-Fenster | | (0 = automatische Berechnung anhand der | | Fenstergr”že) wlslook | ndxs | Art der Darstellung in einem LS-Fenster | | m”gliche Werte: | | "B" Icons | | "N" normaler Text | | "K" kleiner Text wlssort | ndxs | Art der Sortierung in einem LS-Fenster | | m”gliche Werte: | | "A" nach Art | | "N" nach Namen | | "D" nach Datum | | "G" nach Gr”že | | "U" unsortiert, d.h. Reihenfolge | | im Dateisystem wlstxtshow | ndxs | Art der anzuzeigenden Informationen bei | | Textdarstellung in einem LS-Fenster. Diese | | Variable kann einen String aus den folgenden | | Buchstaben enthalten: | | "G" mit Gr”že | | "A" mit Attributen | | "D" mit Datum | | "T" mit Uhrzeit | | Wenn der Inhalt von wlstxtshow "GADT" ist, | | dann werden also Texte mit allen m”glichen | | Dateiinformationen angezeigt. wlsincols | dx | wenn gesetzt, dann wird ein LS-Fenster in | | Spalten aufgebaut wlswithhid | dxs | wenn gesetzt, dann werden auch 'versteckte' | | Dateien in einem LS-Fenster angezeigt wlswithsys | dxs | wenn gesetzt, dann werden auch 'System'- | | Dateien in einem LS-Fenster angezeigt wlsfastdraw| dx | wenn gesetzt, dann wird eine optimierte | | Ausgabefunktion verwendet, um Icons oder | | grožen Text in LS-Fenstern darzustellen | | (ben”tigt aber mehr Speicher pro Fenster!!!) cpdialog | ndxs | Ausgabemodus fr das cp-Kommando | | m”gliche Werte: | | "n" keine Ausgaben | | "c" mit Startdialog | | "v" Ausgaben zeigen, aber kein Dialog | | mit Benutzer | | "i" mit Einzelbest„tigung jeder Datei mvdialog | ndxs | Ausgabemodus fr das mv-Kommando (Werte siehe | | cpdialog) rmdialog | ndxs | Ausgabemodus fr das rm-Kommando (Werte siehe | | cpdialog) touchdialog| ndxs | Ausgabemodus fr das touch-Kommando (Werte | | siehe cpdialog) cpsmallmem | x | wenn gesetzt, dann verwenden die Kommandos | | cp und mv nur einen kleinen Speicherbereich | | (unter Multitasking-Betriebssystemen ohne | | Bedeutung) warnifro | dxs | wenn gesetzt, dann erscheint bei den Kommandos | | mv und rm eine Warnung falls eine Datei das | | 'nur lesbar Flag' gesetzt hat warnifcnfl | dxs | wenn gesetzt, dann erscheint bei den Kommandos | | cp und mv auf jeden Fall eine Warnung falls | | ein Namenskonflikt entsteht (Datei bzw. | | Ordner existiert schon im Ziel) cpsetdate | dx | wenn gesetzt, dann erh„lt eine Datei-Kopie das | | aktuelle Datum cpclearsrc | dx | wenn gesetzt, dann wird das Archiv-Flag der | | Quell-Datei beim Kopieren einer Datei gel”scht cpcleardst | dx | wenn gesetzt, dann wird das Archiv-Flag der | | Ziel-Datei beim Kopieren einer Datei gel”scht cmrwinfcnt | ndxs | Anzahl der Dateien, ab der der Kopierdialog | | im Fenster l„uft cmrwinbcnt | ndxs | Kilobytes, ab der der Kopierdialog im Fenster | | l„uft | | multiuser | vr | das no|Desktop-System l„uft im Multiuserbetrieb UNAME | vrns | Name des Users UID | rns | Benutzernummer im Multiuserbetrieb GID | rns | Gruppennummer im Multiuserbetrieb -------------------------------------------------------------------------------- A2 besondere CLI-Anweisungen ------------------------------ - 'return'-Kommando Definition return [] Verwendung in Skripten Beschreibung bricht die Bearbeitung eines Scripts' ab. der optionale Parameter steht nach Abbruch des Scripts' in der Variablen 'status' - 'goto'-Kommando Definition goto Verwendung in Skripten Beschreibung Steht innerhalb eines Skriptes die unbedingte Sprung- anweisung zu einem Labelnamen, so sucht der CLI das gesamte Skript nach dem Vorkommen von ab und fhrt die Skriptbeabeitung nach dem Label fort. Wird kein Labelname gefunden so wird das Skript in jedem Fall abgebrochen. Der Labelname darf maximal 12 Buchstaben oder Zahlen umfassen, muá mit einem Buchsstaben beginnen und durch einen ':' beendet werden. Es wird Groá- und Kleinschreibung beachtet! Der Labelname muá allein in einer Zeile und auáerhalb aller Schleifenkonstrukte und bedingten Anweisungen stehen. Beispiel testit: . . . if (-e TEST.C) goto testit - 'if'-Kommando Definition if () oder if () then . [else .] [elif (Bedingung) then .] endif Verwendung in Skripten, Objektdefinitionsdatei, (einzeilig in der shell) Beschreibung Durch das 'if'-Kommando wird eine Anweisung nur dann ausgefhrt, wenn die in Klammern stehende Bedingung erfllt ist. Das Kommando liegt in zwei Varianten vor: 1. einer einzeiligen, bei der das bedingte Kommando unmittelbar hinter die Bedingung geschrieben werden muá, und 2. einem mehrzeiligen Konstrukt, welches immer durch 'endif' beendet werden muá. Ist die Bedingung erfllt, werden alle Kommandos der n„chsten Zeilen bis zu einem 'endif', 'else' oder 'elif' ausgefhrt. Ist die Bedingung nicht erfllt, werden die Kommandos, die nach einem optionalen 'else' stehen, ausgefhrt. Das Kommando 'elif' steht fr 'else if' und prft im 'else'-Fall erneut eine Bedingung; dieses Kommando verhindert das Schachteln von 'if'-Konstrukten. Die Kommandos 'if ... then', 'else', 'elif ... then' und 'endif' mssen allein in einer Zeile stehen. Beispiel if (! -e "\TEMP") then mkdir "C:\TEMP" cp test.c \temp elif (! -e "\TEMP\TEST.C") then cp test.c \temp else echo test.c wurde schon kopiert endif - 'foreach'-Kommando Definition foreach Kommando . end Verwendung in Skripten, Objektdefinitionsdatei Beschreibung Das 'foreach'-Kommando weist einer Variablen nacheinander jedes Wort in einer definierten 'Liste' zu. Die Kommandos bis zum Kommando 'end' werden solange ausgefhrt, bis die 'Liste' leer ist. Das Kommando 'end' muá allein in einer Zeile stehen. Die Liste enth„lt W”rter, die durch Leerzeichen voneinander getrennt sind. Die Liste kann durch Klammern eingerahmt werden. Die W”rter k”nnen 'wildcards' enthalten, diese werden zu Beginn des Kommandos expandiert. Mit dem Kommando 'continue' wird zum Beginn der bedingten Kommandos gesprungen und mit dem n„chsten Listeneintrag weitergemacht. Das Kommando 'break' bricht die Bearbeitung der Schleife ab und f„hrt mit dem Kommando unterhalb von 'end' fort. Beispiel foreach i (*.c *.h *.prj *.cfg) lharc a test.lzh $i echo "$i wurde gerade archiviert..." end - 'while'-Kommando Definition while () Kommando . wend Verwendung in Skripten, Objektdefinitionsdatei Beschreibung Solange die Bedingung erfllt ist, werden alle Kommandos zwischen 'while' und 'wend' ausgefhrt. Die Kommandos mssen allein in einer Zeile stehen. Mit 'break' wird die Schleife abgebrochen, mit 'continue' erneut zur 'while'- Bedingung gesprungen. Beispiel set i = 1 while ($i < 10) echo $i". Durchlauf" set i @ $i + 1 wend