Grundlagenwissen
In der Zeit der weit verbreiteten Verwendung von Teletype-Schreibmaschinen dienten diese als Ausgabeterminals, die über Kabel mit Zentralrechnern verbunden waren. Benutzer mussten eine Reihe spezifischer Steuerbefehle an das Terminalprogramm senden, um die Ausgabe auf dem Terminalscreen zu steuern. Beispielsweise das Ändern der Cursorposition auf dem Bildschirm, das Löschen des Inhalts eines bestimmten Bildschirmbereichs, das Scrollen des Bildschirms, das Umschalten der Anzeigemodi, das Unterstreichen von Text, das Ändern des Aussehens, der Farbe, der Helligkeit usw. von Zeichen. Diese Steuerungen werden über eine Zeichenfolge namens Escape-Sequenz implementiert. Die Escape-Sequenzen werden so genannt, weil diese aufeinanderfolgenden Bytes mit einem 0x1B
-Zeichen beginnen, dem Escape-Zeichen (dem Zeichen, das durch Drücken der ESC
-Taste eingegeben wird). Selbst heute können wir den Ausgabeeffekt von Teletype-Terminals aus jener Zeit simulieren, indem wir Escape-Sequenzen in Terminalemulationsprogramme eingeben. Wenn Sie einen Text mit farbigem Hintergrund auf dem Terminal (oder Terminalemulationsprogramm) anzeigen möchten, können Sie die folgende Escape-Sequenz in die Eingabeaufforderung Ihres Befehlszeilentools eingeben:
echo "^[[0;31;40mIn Color"
Hierbei sind ^
und [
die sogenannten Escape-Zeichen. (Hinweis: in diesem Fall ist ^[
ein einzelnes Zeichen. Es wird nicht durch sequentielles Eingeben der Zeichen ^
und [
erzeugt. Um dieses Zeichen zu drucken, müssen Sie zunächst Ctrl+V
und dann die ESC
-Taste drücken.) Nach Ausführung des obigen Befehls sollten Sie sehen, dass der Hintergrund von In Color
auf rot geändert wurde. Ab diesem Zeitpunkt wird all der angezeigte Text mit diesem Effekt ausgegeben. Wenn Sie diesen Effekt beenden und zum ursprünglichen Format zurückkehren möchten, können Sie den folgenden Befehl verwenden:
echo "^[[0;37;40m"
Wissen Sie jetzt, wofür diese Zeichen (Escape-Sequenzen) gut sind? (Versuchen Sie, die Parameter zwischen den Semikolons zu ändern und sehen Sie, welche Ergebnisse Sie erhalten.) Vielleicht ist es anders, als Sie sich das vorstellen? Das kann daran liegen, dass die Terminalumgebung unterschiedlich ist, was von den verschiedenen Terminals oder Betriebssystemen abhängt. (Sie können einem monochromen Terminal ja nicht farbige Zeichen anzeigen lassen, oder?) Um solche Kompatibilitätsprobleme zu vermeiden und eine konsistente Ausgabe auf verschiedenen Terminals zu erzielen, erfanden die Designer von UNIX einen Mechanismus namens termcap
. termcap
ist eigentlich eine Datei, die zusammen mit den Escape-Sequenzen herausgegeben wird. In dieser Datei sind alle Escape-Sequenzen aufgeführt, die das aktuelle Terminal korrekt ausführen kann, wodurch sichergestellt wird, dass das Ausführungsergebnis der eingegebenen Escape-Sequenzen den Spezifikationen in dieser Datei entspricht. Allerdings ersetzte in den Jahren nach der Erfindung dieses Mechanismus allmählich ein anderer Mechanismus namens terminfo
termcap
. Seitdem müssen Benutzer bei der Programmierung nicht mehr die komplexen Escape-Sequenz-Spezifikationen in termcap
konsultieren, sondern können einfach auf die terminfo
-Datenbank zugreifen, um die Bildschirmausgabe zu steuern.
Angenommen, alle Anwendungen greifen unter Verwendung von terminfo
auf die terminfo
-Datenbank zu, um die Ausgabe zu steuern (z. B. Steuerzeichen zu senden usw.). Bald würden diese Codeaufrufe das gesamte Programm schwierig zu kontrollieren und zu verwalten machen. Die Entstehung dieser Probleme führte zur Entstehung von CURSES
. Der Name CURSES
stammt von einem Wortspiel mit cursor optimization
(Cursor-Optimierung).
Die CURSES
-Bibliothek bietet Benutzern eine flexible und effiziente API (Anwendungs-Programmierschnittstelle) durch die Kapselung der unterliegenden Steuercodes (Escape-Sequenzen) des Terminals. Dadurch können Benutzer den Cursor steuern, Fenster erstellen, Vordergrund- und Hintergrundfarben ändern und Mausoperationen verarbeiten. Dies ermöglicht es Benutzern, diese lästigen unteren Ebenenmechanismen zu umgehen, wenn sie Anwendungen auf Zeichenterminals schreiben.
NCURSES
ist eine Kopie von CURSES
aus System V Release 4.0 (SVr4)
. Es ist eine frei konfigurierbare Bibliothek, die vollständig mit älteren Versionen von CURSES
kompatibel ist. Kurz gesagt, es ist eine Bibliothek, die es Anwendungen ermöglicht, die Anzeige des Terminalscreens direkt zu steuern. Wenn später von der CURSES
-Bibliothek die Rede ist, wird damit auch die NCURSES
-Bibliothek gemeint.
NCURSES
kapselt nicht nur die unterliegenden Terminalfunktionen, sondern bietet auch einen ziemlich stabilen Arbeitsrahmen, um schöne Schnittstellen zu erstellen. Es umfasst Funktionen zum Erstellen von Fenstern. Und seine Schwesterbibliotheken Menu
, Panel
und Form
sind Erweiterungen der CURSES
-Basisklassenbibliothek. Diese Bibliotheken werden in der Regel zusammen mit CURSES
verteilt. Wir können eine Anwendung erstellen, die mehrere Fenster, Menüs, Panels und Formulare enthält. Die Fenster können unabhängig voneinander verwaltet werden, z. B. gescrollt oder ausgeblendet werden. Menüs ermöglichen es Benutzern, Befehlsoptionen zu erstellen, um Befehle einfach ausführen zu können. Formulare ermöglichen es Benutzern, Fenster für die einfache Dateneingabe und -anzeige zu erstellen. Panels sind Erweiterungen der NCURSES-Fensterverwaltungsfunktionen und können Fenster überlagern oder stapeln.