EEiinn VViissuueelllleerr KKoommmmaannddoo--PPrroozzeessssoorr ffuueerr ddaass UUNNIIXX OOppeerraattiinngg SSyysstteemm _A_B_S_T_R_A_C_T _V_s_h ist ein visueller, interactiver Kommando- prozessor (shell) fuer das UNIX® [1] operating system. _V_s_h ist der Versuch, einen Kommando- prozessor fuer Video-Terminals hoher Bandbreite zu schaffen. Diese Orientierung fuehrte zur Darstel- lung groesserer Informationsmengen als sie von herkoemmlichen Shells zur Verfuegung gestellt wur- den. Ein weiteres Resultat ist die bessere Kon- trolle der Anzeige, da nichts unbemekt wegrollt. Der folgende Dokumentationssatz beschreibt _V_s_h_. Der Erste, "A Visual Command Processor for the UNIX Operating System," beschreibt die Ziele von _V_s_h und wie erfolgreich sie erreicht wurden. Der Zweite, "Vsh Code Organization," beschreibt die Implementation. Der Dritte ist das user manual. Zum Schluss enthaelt der Anhang Kopien der Hil- fetafeln, die dem online-Nutzer zur Verfuegungng stehen. EEiinnlleeiittuunngg.. Ein Programm ist auf die Ergaenzung seiner E/A-Geraete gerichtet. Zum Beispiel, ein Programminterface fuer einen Hochgeschwindigkeitsdrucker. Die Ausgabe sollte lang und detailierbar sein, damit die Druckkosten niedrig sind und fuer Abschnitte keine Extra-Laeufe benoetigt werden. Existierende UNIX Programme haben die entgegengesetzte Ten- denz, da sie ueblicherweise fuer langsame Hardcopy-Terminals waren. Weil das Drucken soviel Zeit brauchte, sind Nachrichten sehr kurz gehalten und Informationen werden oft nur auf Anforderungen angezeigt. Video-Terminals mit hoher Bandbreite ermoeglichen eine andere Orientierung: Man muss sich keine Gedanken machen ueber die Zeit, die zur Ausgabe von Meldungen gebraucht wird. Dafuer ist man oft beschaeftigt mit Information, die man durch Bildschirmrollen verloren hat. OOppeerraattiioonn.. _V_s_h ist ein Versuch, diese alternative Strategie in einen Kommandoprozessor umzusetzen. _V_s_h ist hoch-visuell. Sie bringt automatisch eine grosse Informationsmenge und -2- macht es moeglich, dass die Anzeige nicht ueber den oberen Bildschirmrand rollt. _V_s_h ist organisiert fuer das UNIX file system. Dieses Filesystem hat eine hirarchische Baumstruktur. Jeder Knoten des Baumes ist ein Directory und jedes Blatt ein File. Jeder Knoten und jedes Blatt hat einen Namen. Um auf ein File zu zeigen, muss man eine Zeichenkette erstellen, welche das Filesystem von der Wurzel bin zum ausgewaehlten File enthaelt. Man kann aber auch ausgehend vom aktuellen Direc- tory einen relativen Pfadnamen waehlen. Aktuelles Directory kann jedes zugaengliche Direktory werden. _V_s_h arbeitet mit automatischer Anzeige des aktuellen Directoryinhalts. Jedem Eintrag ist eine Kleinbuchstabe in Form eines Indexmenue's zugeordnet. Um einen Eintrag auszuwaehlen, ist lediglich der entsprechende Buchstabe zu druecken. Nach der Auswahl bestimmt _V_s_h die Eigenschaften des Eintrags und startet eine entsprechende Aktion. Bein- haltet das File ASCII Text, ruft _V_s_h den Editor auf. Ist der Eintrag ein Directory, wird es durch _V_s_h als Arbeitsdi- rectory aufgerufen. _V_s_h erkennt noch viele andere Filearten, die alle im User's Manual beschrieben sind. Directory's mit vielen Eintraegen koennen nicht auf einer Bildschirmseite angezeigt werden. Solche Directory's werden in einzelne Bildschirmseiten aufgeteilt. Diese Seiten werden angewaehlt durch Eingabe der Seitennummer. Um also ein File auszuwaehlen, ist vorher dieentsprechende Seite anzuwaehlen. Man kann aber mehr tun, als Files und Directory's anzuwaehlen. Durch Druecken von Grossbuchstaben und speziellen Zeichen koennen Kommando's ausgewaehlt werden. Es existiert ein Satz Grundkommandos, welcher das Erstellen und Loeschen von Files erlaubt, Compiler aufruft und andere Grundfunktionen ausfuehrt. Man kann ebenso neue Kommando's in Ausdruecken mit den Grundkommando's und in Ausdruecken anderer Kommando's definieren und sich auf diesem Wege eine persoenliche Umgebung schaffen. Solange die _V_s_h kein allzu grosses Programm ist, hat sie eine grosse Zahl von Moeglichkeiten. Der schwierige Teil der Implementierung der _V_s_h bestand darin, diese Teile so zusammenzufassen, dass sie in harmonischer Form miteinan- der existieren koennen. Ich denke, dass uns das geglueckt ist. Die Firmadokumentation dazu, "Vsh Code Organization," zeigt die Details, wie _V_s_h richtig arbeitet. VViissuueellllee TTeecchhnniikk.. Das Kennzeichen der visuellen Software ist die Umfassende Ueberwachung der Ausgabe. Wichtige Information erscheint auf dem Bildschirm, wenn sie gerade gebraucht -3- wird, und rollt nicht unbetrachtet vorbei. Weil man nur einen bestimmten Teil aus den Bildschirm sieht, ist es moeglich, zwischen den Bildschirmseiten leicht zu wechseln. Ich glaube, dass _V_s_h diese Kriterien erfuellt. Die Leichtigkeit der Bildschirmwechsel war ein bedeu- tender Gesichtspunkt bei der Erschaffung von _V_s_h_. Diese Faehigkeit macht _V_s_h zu einem idealen Werkzeug zum Durch- mustern des UNIX file systems, da man leicht zwischen den Direktory's und Files wechseln kann. Diese Bequemlichkeit bezieht sich auch auf Compilerarbeit. Wenn man ein Programm compiliert, werden die Compiler-Fehlermeldungen in einem File gesammelt und angezeigt. Dann waehlt man eine Fehler- meldung vom Display aus und _V_s_h erkennt die Zeile und das File, dass die Meldung erzeugte. Dann wird der Editor aufgerufen, der das File ab der selektierten Zeile editiert. Wenn der Fehler beseitigt ist, kann man zur Fehleranzeige zurueckkehren, um einen anderen Fehler zu bearbeiten. Das ist eine grosse Verbesserung verglichen mit einem kompletten Fehlerdumping auf dem Bildschirm, da man nichts mehr durch Bildschirmrollen uebersieht. Ein visueller Editor namens _V_i [2] findet in Berkeley allgemein Anwendung als Standart Editor. _V_i ist aehnlich _V_s_h_; er plaziert automatisch Information (the file being edited) und basiert auf kurzen, oft Einzeltasten-Kommando's. Natuerlich ist ein Kommandoprozessor kein Editor. Man kann nicht die dramatische Verbesserung von _V_i gegenueber dem Standarteditor erkennen, wenn man nur _V_s_h benuetzt. Ein Teil des Problems ist, dass _V_s_h nicht die volle Macht und Flexibilitaet der Standart UNIX Kommandoprozessoren hat. Es ist klar, dass die Verwendung von Einzeltasten-Kommando's zu Einschraenkungen fuehrte. Eine reichere Kommandosprache wird benoetigt. Historisch gesehen, war _V_s_h nicht der erste visuelle Kommandoprozessor, sondern er wurde inspiriert durch das University of Illinois PLATO [3] system. Mit PLATO ist alles visuell. Diese Orientierung ist zum Teil das Ergebnis von PLATO's computergestuetzten Instruktionshilfe, und zum Teil eine Reflektion der Eigenschaften des PLATO Terminals, dessen Bildschirm nicht Rollen kann. Ziel war es, die besten Moeglichkeiten der PLATO und UNIX Philosophie zu ver- schmelzen. Das Ergebnis dieser Synthese ist _V_s_h_. -4- Ein Hauptproblem bei PLATO ist die fehlende Alternative zum Visuellen, die interaktive Arbeit. Wenn man einen Block editieren will, kann man ihn nicht namentlich spezifizieren. Man muss die Auswahl vom Bildschirm treffen. Das _V_s_h FF Kom- mando erlaubt die namentliche Auswahl eines Files, was das Problem etwas erleichtert. Eine Hauptschwierigkeit besteht darin, dass keine Kommandoscripte fuer _V_s_h geschrieben wer- den koennen. So ein Script ist mit Einzeltasten-Kommando's nicht realisierbar. Es ist klar, dass man einen herkoemm- lichen Kommandoprozessor fuer viele Anwendungen benoetigt. Der Ausweg besteht darin, beide Moeglichkeiten zu benuetzen. In Berkeley ist es ueblich, beide Editoren zu benutzen, vielleicht werden die Nutzer auch zwei Shell's annehmen. WWeeiitteerree AArrbbeeiitt.. Es wuerde interessant sein zu sehen, dass _V_s_h ueber seine gegenwaertigen Restrictionen hinwegkommt und eine uni- versell anwendbare Shell wird. Diese Shell waere das Herzstueck eines visuell orientierten Programmsystems, wie es in Xerox's Interlisp [4] system zur Verfuegung steht. Man kann sich zahllose Anwendungen vorstellen. Man koennte den Bildschirm in Fenster aufteilen und in jedem einen seperaten Prozess laufen lassen. Man waere in der Lage, vorherige Fenster wieder aufzurufen. Diese Umgebung koennte solche Utielities wie Fenster-Editoren unterstuetzen. Die Nutzerkommunikation koennte erleichtert werden. Mitteilun- gen anderer Nutzer wuerden in seperaten Fenstern vom unteren Bildschirmrand aufwaerts angezeigt werden. Man koennte Anderen erlauben, den eigenen Bildschirm zu beschreiben. Viele dieser Fragen sprechen ein System an, das neue Nutzer, System und Terminalschnittstellen hat. Ebenfalls angesprochen sind die Verwendung von mehfachen Fenstern, Kursern, Joistick's und speziellen Tastaturen und intelle- genter Ternimals. Was auch immer seine Nachteile sind, _V_s_h ist ein Schritt in diese Richtung. ZZuussaammmmeennffaassssuunngg.. Der Hauptfehler der _V_s_h besteht darin, dass sie kein kompletter Kommandoprozessor ist, gleichwohl solch ein Kom- mandoprozessor als Teil eines visuell orientierten Programm- systems geschaffen werden koennte. Die Schaffung dieses Systems wird eine Hauptaufgabe sein. Fuer den Anfang soll- ten _V_i und _V_s_h Geschmack machen fuer solch ein System und die Nutzer zu dessen Schaffung inspirieren -5- ZZuumm SShhoowwffiillee--MMeennuuee Eine wichtige Moeglichkeit der _V_s_h ist die Verbindung zwischen _M_a_k_e_(_I_)_, _G_r_e_p_(_I_)_, und dem Editor. Es besteht die Moeglichkeit der direkten Editierung einer Zeile, die durch eine Compiler-Fehlermeldung angezeigt wurde, durch eben diese visuelle Orientierung. Man sollte wenigstens in der Lage sein, diese Fehlermeldungen in einem File zu retten, so dass sie nicht verloren gehen. Dieser Fall ist aber nicht von den UNIX Compiler Autoren vorgesehen. Versucht man, die Fehlermeldungen mit Kommando's wie z.B.: $$ mmaakkee >> eerrrroorrss zu retten, wird man entteuscht werden. Fehlermeldungen sind auf _s_t_d_e_r_r gerichtet und nicht auf _s_t_d_o_u_t_. Das Resultat ist, dass das File _e_r_r_o_r_s alles ausser Fehlermeldungen bein- haltet! Ein besseres Kommando ist $$ mmaakkee >>&& eerrrroorrss , welches nur die Fehlermeldungen sammelt und sonst nichts. Die beste Kommandofolge ist $$ mmaakkee >> eerrrroorrss 22>>&&11 , welche alles an seinem Platz sammelt. Natuerlich fuehrt _V_s_h alle diese Umlenkungen aus. Ich glaube nicht, dass _s_t_d_e_r_r der richtige Platz fuer Compiler -Fehlermeldungen ist. Sie gehoerten in _s_t_d_o_u_t_. Die gleiche Funktion wie der _V_s_h _m_a_k_e_/_s_h_o_w_f_i_l_e_/_e_d_i_t_o_r Komplex kann auch in einer mehr traditionellen UNIX Art und Weise ausgefuehrt werden. Als erstes sollten die Compiler ihre Fehlermeldung auf stdout senden. Das wuerde den Nutzern erlauben, diese Meldungen zu retten,ohne vorher den UNIX guru konsultieren zu muessen. Zweitens sollte ein Kom- mando dem Editor zugefuegt werden, welches Filenamen und Zeilennummer in gleicher Weise wie das _s_h_o_w_f_i_l_e Kommando sucht. Das waere die gleiche Funktion, wie sie von _S_h_o_w_f_i_l_e in _V_s_h_. ausgefuehrt wird. Zum Schluss ein simpler shellscript, der das alles zusammen ausfuehren kann: mmaakkee || tteeee ..mmaakkeerrrroorr;; vvii ..mmaakkeerrrroorr -6- 1 Ritchie and Thompson; "The Unix Time-Sharing System," Bell System Technical Journal, 57:6.2, July-August 1978. 2 Joy, Bill; "An Introduction to Display Editing with Vi," University of California at Berkeley Computer Center, 1978. 3 Sherwood, Bruce; The Tutor Language, University of Illinois at Urbana-Champaign--Computer-Based Education Research Laboratory, 1974. 4 Titelman, Warren; A Visual Lisp Programming System, Talk given at The University of California at Berkeley, 1979.