Atarium: Jubiläum

Jubiläum

Achteinhalb Jahre oder 100 Ausgaben sind vergangen, seitdem ich zum ersten Mal für die „68000er" das „ATARIum" geschrieben habe. In dieser Zeit stieg der ATARI zum beliebtesten Computer für Hobbyisten auf -und verlor diese Stellung wieder. Obwohl heutzutage ATARI in der ursprünglichen Form gar nicht mehr existiert, gibt es doch noch immer viele Anhänger des Betriebssystems TOS (und der dazu kompatiblen anderen Systeme). Und auch in Zukunft ist das „virtuelle“ Leben gesichert: verschiedenste Emulatoren für Betriebssysteme wie Windows, MacOS oder Unix/X sorgen dafür, daß man auch künftig bewährte Software weiterbenutzen kann.

Schon immer war es eine der Stärken der Entwickler von ATARI-Software, daß sie Bewährtes von anderen Systemen übernommen haben. So kann ein „modern" ausgestatteter TOS-Rechner präemptives Multitasking mit einem leistungsfähigen grafischen Desktop, eine POSIX-Kommandoshell, viele Unix-Utilities, aber auch Textverarbeitungen mit Unicode-Support oder Web-Browser vereinigen. Und gerade in Zeiten, in denen man sich bei einem neuen Software-Projekt doch fragen muß, ob man den Sourcecode später anderswo weiterbenutzen kann, ist es sinnvoll, sich soweit wie möglich anerkannter Standards zu bedienen.

Daher möchte ich diesen Monat auf ein Thema zurückkommen, daß ich schon vor knapp zwei Jahren angeschnitten hatte (siehe [1], damals habe ich für eine der „nächsten" Ausgaben mehr Details versprochen).

Abb. 1: Gemini-Konsolen mit erweiterten Attributen

Es geht um die Nutzung der Unix-Termcap-Bibliothek bei der Benutzung spezieller Steuerzeichen bei verschiedenen Terminal-Emulationen.

Wie die meisten Leser wohl wissen, unterstützt das ATARI-BIOS bei Bildschirmausgaben VT52-kompatible Steuersequenzen (das DEC VT52 war eines der am meisten verbreiteten ASCII-Terminals). Mittels dieser Steuersequenzen können der Cursor positioniert, Zeichen gelöscht oder auch Zeilen eingefügt werden.

Nun ist aber das VT52 nur eines von vielen Terminals. Bevor das X-Window-System seinen Siegeszug durch die Unix-Welt antrat, wurden vorwiegend ASCII-Terminals eingesetzt, und man erwartete, daß interaktive Programme wie zum Beispiel ein Editor auf jedem möglichen Terminaltyp liefen. Die Lösung waren die TERMCAP- und die TERMINFO-Libraries, die für die notwendige Abstraktion vom benutzten Terminal sorgen.

Bevor ich fortfahre, muß ich natürlich noch erklären, wozu man denn eigentlich „portabel“ programmieren soll, wenn doch alle ATARIs die VT52-Sequenzen beherrschen. Nun, viele TOS-Programme können vielleicht irgendwann mal unter Unix oder gar in einem Windows-DOS-Fenster eingesetzt werden. Außerdem kann es schon mal Vorkommen, daß ein TOS-Programm beispielsweise auf einer VT100-Konsole läuft (CoNnect!). Schwerwiegender ist aber noch, daß die VT52-Kommandos nicht gerade leistungsfähig sind und daher einige Programme auch unter TOS sinnvolle Erweiterungen anbieten (zum Beispiel Miniwin und Gemini).

Obwohl TERMINFO das neuere und leistungsfähigere Verfahren ist, möchte ich hier auf TERMCAP ein-gehen, da diese Library erheblich kleiner ist, jedoch für die meisten Anwendungen völlig ausreicht.

Welche Informationen braucht man nun, um TERMCAP einsetzen zu können? Zunächst einmal muß man wissen, welcher Terminaltyp gerade benutzt wird. Dies entnimmt man in der Regel der Environment-Variable TERM. Wenn diese nicht existiert (zum Beispiel bei der Ausführung von Programmen im Autoordner), darf man ruhig vom Wert „vt52“ ausgehen.

Was nun noch fehlt, ist eine Art Datenbank, in der die Fähigkeiten derverschie-denen Terminaltypen beschrieben sind. Diese befindet sich auf einem Unix-System traditionell in ,,/etc/ termcap“ und wird auf dem ATARI in der Regel in „c:\etc\termcap“ gesucht.

Jede Terminal-Beschreibung in der TERMCAP-Da-tei besteht aus einem oder mehreren Namen für das Terminal sowie einer Liste von Attributen und Informationen. Abbildung 2 zeigt einen Eintrag für VT52. Dem kann man beispielsweise entnehmen, daß die Konsole normalerweise 25 * 80 Zeichen groß ist („li“ und „co“) und daß man eine Zeile per ESC löschen kann (Eintrag „dl“, \Esteht für Escape). In Abbildung 3 sehen Sie einen winzigen Ausschnitt der möglichen Schlüsselwörter.

Folgende Schritte sind nötig, um mit TERMCAP zu arbeiten:

(1) Der Name des Terminals muß ermittelt werden (aus der Environment-Variablen TERM).

(2) Die Library lädt die Terminal-Beschreibung für das gewünschte Terminal. Diese wird normalerweise derTERMCAP-Datei entnommen, kann aber auch über die Environment-Variable TERMCAP erfolgen, um den Dateizugriff einzusparen (dies wird von Gemini so unterstützt).

(3) Das Programm benutzt verschiedene Library-Funktionen, um bestimmte Attribute zu erfragen.

Der Beispielcode in Li-sting 1 veranschaulicht, wie einfach es ist, auf diese Art und Weise die Escape-Sequenzen für Fett, Hell, Invers etc. zu ermitteln.

Welche VT52-Erweiterun-gen sind es nun, die ich oben erwähnte? Sowohl Miniwin (das TOS-Fenster für MultiTOS) als auch Gemini unterstützen zwei neue Escapes, um verschiedene Textattribute anzubieten (s. Abb. 1). Damit kann man also nicht nur,, In vers“,sondern auch „Fett“, „Hell“, „Unterstrichen“ oder „Kursiv" benutzen, was viele Bildschirmausgaben übersichtlicher machen kann (aber bitte nicht übertreiben ...). Miniwin unterstützt ferner die Ausgabe in eine Statuszeile.

In Abbildung 2 ist noch eine etwas exotische Anwendung von TERMCAP versteckt. Setzt man seinen Terminaltyp auf „word-plus" und leitet die Ausgaben eines Kommandos in eine Datei um, kann man damit direkt Dokumente mit Fettschrift und ähnlichem erzeugen!

Und schließlich muß ich natürlich noch verraten, wo man nun diese vielgepriesene Library herbekommen kann. Bewährt hat sich die GNU-Termcap-Library, ist sie doch mit ganz geringem Aufwand unter PureC einzubinden. Man findet sie im Internet überall dort, wo es GNU-Software gibt, und in der Maus Münster 2 (0251/ 77262) als „TERMCAP.TAZ".

Julian Reschke

Quellennachweis:
[1] Julian Reschke, „ATARIum", ST-Computer 10/1994

Ein TERMCAP-Eintrag für vt52 und Wordplus


wordplus|wp:md=\E\201:me=\E\200:us=\E\204:ue=\E\200:mh=\E\202 :vt52|Bt|Bt521Bt25|atari st vt52:li#25:co#80:\ :al=\EL:am:bs:cd=\EJ:ce=\EK:cl=\EE:\ :cm=\EY%+ %+:dl=\EM:ms: \ :nd=\EC:pt:se=\Eq:us=\Ep:ue=\Eq:so=\Ep:\ :sr=\EI:up=\EA;do=\EB:\ :vi=\Ef:ve=\Ee:b1=\007:

Abb. 2

1: /* (c) 1996 MAXON Computer */
2: /* Autor: Julian Reschke */
3:
4:  #tinclude <termcap.h>
5:
6:  char tt_bold on[50] = "";
7:  char tt_light_on[50] = "";
B:  char tt_underline_on[50] = "";
9:  char tt_end_all[50] = "";
10: char tt_reverse_on[50] = "";
11:
12: static char tget_buf[1024];
13: int ret;
14: char *terminal = getenv ("TERM");
15: if (!terminal) terminal = "vt52";
16:
17: ret = tgetent (tget_buf, terminal);
18: if (ret == 1)
19: {
20: char *c;
21: c = tt_bold_on;
22: if (itgetstr ("md", &c))
23: tgetstr ("so", &c);
24: c = tt_underline_on;
25: tgetstr ("ub", &c);
26: c * tt_light_on;
27: tgetstr ("mh”, &c);
2B: c = tt_end_all;
29: if (itgetstr ("me", &c))
30: tgetstr ("Be", &c);
31: c = tt_reverse_on;
32: tgetstr ("mr", &c);
33: }

Listing 1: eine Beispielabfrage für Steuersequenzen

Eine Liste der wichtigsten Schlüsselwörter


# al add new blank line # am automatic margins # bl bell # cd clear to end of display # ce clear to end of line # cl clear screen and home cursor # cm Cursor motion # co columns # dl delete line # do down one line # ho home cursor # it initial tab Position # le move left one space # li lines # md turn on bold mode # me turn off all attributes # mb turn on half bright mode # mr turn on reverse Video mode # ms safe to move in standout modes # nd non destructive space (cursor right) # rc restore cursor Position # sc save cursor Position # se end standout mode # so begin standout mode # ta move to next tab stop # ue end underscore mode # up cursor up # us start underscore mode # ve make cursor appear normal (undo vt/vi) # vi make cursor invisible

Abb. 3: eine Liste der wichtigsten Schlüsselwörter


Julian F. Reschke
Links

Copyright-Bestimmungen: siehe Über diese Seite
Classic Computer Magazines
[ Join Now | Ring Hub | Random | << Prev | Next >> ]