Curses-Bibliothek
Die Bibliothek curses stellt eine Reihe von Funktionen bereit, mit denen Sie die Anzeige eines Terminals unabhängig vom Terminaltyp bearbeiten können. Die Curses-Bibliothek unterstützt Farben. Mehrbytezeichen werden jedoch nicht unterstützt. Alle Verweise auf Zeichen in der Curses-Dokumentation beziehen sich auf Einzelbytezeichen.
In dieser Dokumentation wird die Curses-Bibliothek als Cursesbezeichnet.
Die Basis der Curses-Programmierung ist die Fensterdatenstruktur. Mit dieser Struktur können Sie Daten in der Anzeige eines Terminals bearbeiten. Sie können Curses anweisen, die gesamte Terminalanzeige als ein großes Fenster zu behandeln, oder Sie können mehrere Fenster in der Anzeige erstellen. Die Fenster können unterschiedlich groß sein und sich überlappen. Eine typische Curses-Anwendung enthält ein einzelnes großes Fenster und ein Unterfenster.
Jedes Fenster in der Anzeige eines Terminals hat eine eigene Fensterdatenstruktur. Diese Struktur enthält Statusinformationen zum Fenster, wie z. B. Größe und Position des Fensters in der Anzeige. Curses verwendet die Fensterdatenstruktur, um die relevanten Informationen abzurufen, die zur Ausführung Ihrer Anweisungen erforderlich sind.
Terminologie
Bei der Programmierung mit Curses sollten Sie mit den folgenden Begriffen vertraut sein:
| Laufzeit | Definition |
|---|---|
| aktuelles Zeichen | Das Zeichen, auf dem sich der logische Cursor momentan befindet |
| aktuelle Zeile | Die Zeile, in der sich der logische Cursor momentan befindet |
| curscr | Ein virtuelles Standardfenster, das von Curses bereitgestellt wird Die curscr (aktuelle Anzeige) ist eine interne Darstellung dessen, was derzeit auf der externen Anzeige des Terminals erscheint. Ändern Sie die curscr nicht. |
| display | Eine physische Anzeige, die mit einer Workstation verbunden ist |
| logischer Cursor | Die Cursorposition innerhalb jedes Fensters. Die Fensterdatenstruktur verfolgt die Position des logischen Cursors. |
| Pad | Ein Block ist ein Fenster, das nicht durch die Größe der Anzeige beschränkt ist |
| physischer Cursor | Der Cursor, der in einer Anzeige erscheint. Die Workstation verwendet diesen Cursor zum Schreiben in die Anzeige. Pro Anzeige gibt es nur einen physischen Cursor. |
| screen | Das Fenster, das die gesamte Anzeige ausfüllt. Die Anzeige ist synonym mit stdscr. |
| stdscr | Ein virtuelles Standardfenster (Standardanzeige), das von Curses bereitgestellt wird und die gesamte Anzeige darstellt. |
| window | Ein Zeiger auf eine C-Datenstruktur und die grafische Darstellung dieser Datenstruktur in der Anzeige. Ein Fenster kann als zweidimensionales Array betrachtet werden, das darstellt, wie die gesamte oder ein Teil der Anzeige zu einem beliebigen Zeitpunkt aussieht. |
Namenskonventionen
Eine einzelne Curses-Subroutine kann mehrere Versionen haben. Curses Subroutinen mit mehreren Versionen folgen unterschiedlichen Namenskonventionen, die die separaten Versionen identifizieren. Diese Konventionen fügen einer Standardcurses-Subroutine ein Präfix hinzu und geben an, welche Argumente die Subroutine benötigt oder welche Aktionen ausgeführt werden, wenn die Subroutine aufgerufen wird. Die verschiedenen Versionen von Curses-Subroutinennamen verwenden die folgenden Präfixe:
| Präfix | Beschreibung |
|---|---|
| w | Gibt eine Subroutine an, die ein Fensterargument erfordert. |
| p | Gibt eine Subroutine an, die ein Auffüllargument erfordert. |
| mv | Gibt eine Subroutine an, die zuerst eine Verschiebung zu den vom Programm bereitgestellten Koordinaten ausführt. |
Wenn eine Curses-Subroutine mehrere Versionen hat und keines der oben genannten Präfixe enthält, wird das Standardfenster stdscr (Standardanzeige) verwendet. Die meisten Subroutinen, die stdscr verwenden, sind Makros, die mithilfe von #define -Anweisungen in der Datei /usr/include/curses.h erstellt werden. Der Vorprozessor ersetzt diese Anweisungen bei der Kompilierung. Daher werden diese Makros nicht im kompilierten Assembler-Code, in einem Trace, in einem Debugprogramm oder im Quellcode angezeigt.
Wenn eine Curses-Subroutine nur eine einzige Version hat, verwendet sie nicht unbedingt stdscr. Die Subroutine printw gibt beispielsweise eine Zeichenkette in stdscr aus. Die Subroutine wprintw gibt eine Zeichenfolge in einem bestimmten Fenster aus, indem das Argument window angegeben wird. Die Subroutine mvprintw verschiebt die angegebenen Koordinaten nach stdscr und führt dann dieselbe Funktion wie die Subroutine printw aus. Ebenso verschiebt die Subroutine mvwprintw die angegebenen Koordinaten in das angegebene Fenster und führt dann dieselbe Funktion wie die Subroutine wprintw aus.
Struktur eines Curses-Pprogram
Im Allgemeinen hat ein Curses-Programm den folgenden Fortschritt:
- Start-Curses.
- Auf Farbunterstützung prüfen (optional).
- Startfarbe (optional)
- Erstellen Sie mindestens ein Fenster.
- Fenster bearbeiten.
- Löschen Sie ein oder mehrere Fenster.
- Stoppercurses.
Einige Schritte sind optional, sodass Ihr Programm nicht genau diesem Fortschritt folgen muss.
Rückgabewerte
Mit wenigen Ausnahmen geben alle Curses-Unterroutinen entweder den ganzzahligen Wert ERR oder den ganzzahligen Wert OK zurück. Subroutinen, die dieser Konvention nicht folgen, werden entsprechend vermerkt. Subroutinen, die Zeiger zurückgeben, geben immer einen Nullzeiger oder Fehler zurück.