Warum NCurses

NCurses ist eine Library, um auf der Textkonsole Fensterstrukturen, bzw. Eingabemasken zu emulieren. Grafische Oberflächen sind nicht auf allen Systemen verfügbar und Server werden häufig via Telnet oder SSH administriert. Hier steht nur eine Textkonsole zur Verfügung.

Unter Unix-artigen Betriebssystemen, wie auch bei Entwicklern unter Windows, ist die Konsole ein übliches und viel genutztes Werkzeug.

Entsprechend interessant ist es für eigene Werkzeuge oder Konfigurationsprogramme NCurses zu verwenden.

Ein Beispiel für eine NCurses-Oberfläche ist der unter Linux bekannte Midnight-Commander:

Etwas Geschichte

Früher (noch früher, so in den 1970ern) waren Terminals nicht über das Internet vernetzt, denn das Internet gab es noch nicht. Auch war ein Terminal keine Programm auf der graphischen Oberfläche, denn die graphische Oberfläche gab es so auch noch nicht. Ein Terminal war früher das, was man sich heute vorstellt, wenn man sich einen Computer vorstellt: Ein Bildschirm und eine Tastatur. Eine Maus gab es damals auch noch nicht.

Computer waren in dieser Zeit sehr viel teurer als heute und daher steckte die Tastatur nicht wie heute direkt am Computer, sondern am Bildausgabegerät. Dieses Bildausgabegerät war nicht wie heute ein Monitor, der von einem Grafikadapter (Grafikkarte) ein Signal bekam, was er darstellen soll, sondern das war ein eigener kleiner Computer, der einen Bildschirmspeicher besaß und sich dort die Buchstaben merkte, die auf der Bildröhre ausgeben sollte. Dieses Gerät wurde mit dem Computer über eine serielle Leitung verbunden. Es war das Gerät, an dem die Ausgaben des Computers ankamen, der Datenausgang. Zusätzlich war die Tastatur an diesem Gerät angeschlossen und so sendete das Gerät die Eingaben der Tastatur über die serielle Leitung an den Computer. Wie beim Flughafen, wo die Passagiere im Flug-Terminal ankommen und abfliegen, wurden die Eingaben und Ausgaben über das Computer-Terminal vom bzw. an den Benutzer geleitet. Auch im Bankterminal lebt der Begriff weiter.

Computer waren wie gesagt sehr teuer und so arbeitete nicht wie heute an einem Computer eine Person, sondern ein Computer (einer!) hatte viele serielle Anschlüsse an die man jeweils ein Terminal anschließen konnte. So arbeiteten an einem einzigen Computer gerne 4, 8 oder dutzende User.

Eine serielle Verbindung kennt man vielleicht noch von alten Computer-Modems, den diese dienten ursprünglich nur dazu, ein Terminal über eine Telefonleitung mit einem richtigen Computer zu verbinden. Bevor es Modems gab, gab es Akkustikkoppler, hier wurden die Töne, die ein Modem zur Übertragung nutzt mit einem Lautsprecher und einem Mikrophon direkt in den Hörer gepiepst, bzw. über das Mikrophon empfangen. Wie das funktionierte sieht man auf diesem Youtube-Video.

Die Übertragung läuft mit 300 Baud, also 300 Bits pro Sekunde, einer Übertragungsgeschwindigkeit von etwa 35 Byte pro Sekunde bei guter Übertragungsqualität. Übliche Terminals hatten 80 Spalten bei 23 Zeilen, das sind 1840 Byte. Es dauerte also etwa eine Minute den kompletten Inhalt des Bildschirms neu aufzubauen. Ein DSL 1000 Anschluss, der heute nicht mehr zu finden ist, weil er zu langsam ist, läuft mit 1000KiloBaud, also etwa 1'000'000 Baud.

Heutzutage, wo man mit Hilfe des VNC-Protokolls für graphische Oberflächen Megabyteweise Daten verschiebt, nahezu unvorstellbar.

Dienste wie Telnet sind heute weiterhin aktiv im Gebrauch, wenngleich sie über SSH verschlüsselt werden, um einen fernen Computer zu administrieren. Auch die serielle Verbindung lebt in moderneren Techniken wie USB oder SATA weiter.

Entsprechend bemühte man sich, den Inhalt des Bildschirms möglichst wenig zu verändern, um möglichst wenig zu übertragen. Hier kommen die Ansi-Sequenzen ins Spiel, die mit Steuerzeichen z.B. den Cursor positionieren, um dort dann weiterschreiben zu können.

Curses als Hilfe für Entwickler

Curses und später NCurses (New Curses) erstellt Datenstrukturen, die im Computer den Bildschirminhalt eines Terminals zwischenspeichern. Änderungen werden nicht direkt an den Terminal gesendet, sondern erst lokal in die Datenstrukturen eingetragen und erst dann verschickt, wenn alle Änderungen gemacht sind und der Computer nun entscheiden kann, wie er die gemachten Änderungen am Bildschirminhalt möglichst schnell übertragen kann. Diese Frage stellt sich heute nicht mehr.

Zusätzlich bietet NCurses Funktionen, um auf der Konsole einfache Zeichnungen, z.B. Linien oder Umrandungen, zu gestalten.

Da weiterhin viele Server unter unixartigen Systemem betrieben werden (Linux, FreeBSD, MacOS), die keine Resourcen auf eine graphische Oberfläche verschwenden sollen, die sowieso niemand sieht, werden diese Server weiterhin sehr viel über die Konsole administriert. Und hier kommt NCurses weiterhin zum Einsatz. Bekannte Editoren wie vi, joe oder nano funktionieren auf der Konsole. Auch auf einen Dateimanager (MidnightCommander) oder E-Mail-Clients (mutt) muss auf der Konsole niemand verzichten. Sogar eine Auswahl von Webbrowsern (w3m, lynx, links) muss auf der Konsole nicht verzichtet werden. Bildbetrachter, Movieplayer oder 3D-Ego-Shooter - es gibt so ziemlich alles auch in der Konsole, wie auch aufwendige Szene-Demos.