Das Konsolen-Rad neu erfinden, und etwas lernen ...

10/08/2010 - 16:32 von Robert Hartmann | Report spam
Hallo zusammen,

in den vergangenen Tagen und Wochen habe
ich für DOS (im real Mode und protected Mode)

sowie für Win9x bis WinXP über die Win32-API,

die, mir aus Turbo-Pascal-Zeiten bekannten,
Konsolen-Steuerungs-Funktionen [1] zur Benutzung
mit der Sprache C nach gebaut.

Nun will ich probieren, ob ich es auch unter Linux
hinbekomme.

Die systemnahe Programmierung unter Linux / Unix
scheint mir momentan etwas komplizierter zu sein.

Ich habe inzwischen herausgefunden, dass der Interrupt 80
für Linux Systemprogrammierung wichtig ist, dass er
der "syscall interrupt" für Intel-basierende Unix Systeme ist.

Leider sind die Linux - System Calls auf Ralf Brauns Liste:
http://www.ctyme.com/intr/rb-8144.htm
nicht so gut beschrieben, wie die DOS, DPMI und BIOS Funktionen;
leider kann man auch nicht auf die URL zugreifen,
die dort als Referenz steht
( nàmlich http://home.snafu.de/phpr/lhpsysc0.html )


An die Linux/Unix Implementierung der Funktionen
stelle ich für mich die Forderung:

* Sie sollen nicht abhàngig sein von einem bestimmten
Kommandozeileninterpreter.

* Sie sollen im Terminal, in der Konsole, im VirtualTerminal,
etc funktionieren

* Sie sollen auch dann funktionieren, wenn das Programm, welches
die Funktionen einsetzt, über z.B. einen ssh-Clienten gestartet wird,
der leider keine ANSI-Escape-Sequenzen versteht.


Gibt es eine allgemein gültige Linux/Unix API?
Und wo kann ich eine Dokumentation dazu eine finden?
(Gerne schaue ich auch in richtige Bücher)

Einer Nebenbemerkung aus "Guide to Assembly Language Programming in
Linux" (Sivarama P. Dandamudi) entnehme ich, dass in Linux wie in Unix
die Tastatur und das Display als Stream-Files behandelt werden.



Gruß Robert



[1]
void clrscr();
/* "löscht" den Bildschirm und setzt Cursor nach "links,oben"
ohne das C-Konstrukt system("clear"); zunutzen. */

void gotoXY(int x, int y);
/* Setzt den Cursor auf eine bestimmte Position */

con_coord currentXY();
/* Liefert das Koordinatenpaar der aktuellen Cursor-Position */

con_coord maxXY();
/* Liefert das Koordinatenpaar "rechts,unten" der letzten zulàssigen
Cursor-Position */

int keypressed();
/* Bestimmen ob eine beliebige Tastatur-Taste gedrückt worden ist, ohne
die Eingabe aus dem Puffer zu entfernen. Wartet nicht auf eine Eingabe.
Tastendruck muss nicht mit ENTER bzw. RETURN bestàtigt sein. */

int kbhit();
/* Ruft nur keypressed() auf. */

void kbClearBuffer();
/* Tastatur-/Eingabepuffer löschen. */
 

Lesen sie die antworten

#1 Erich Fruehstueck
10/08/2010 - 17:09 | Warnen spam
Am Tue, 10 Aug 2010 16:32:06 +0200 schrieb Robert Hartmann:

in den vergangenen Tagen und Wochen habe ich fàŒr DOS (im real Mode und
protected Mode) -- teilweise mit Hilfe von Inline-Assembler --

sowie fàŒr Win9x bis WinXP àŒber die Win32-API,

die, mir aus Turbo-Pascal-Zeiten bekannten,
Konsolen-Steuerungs-Funktionen [1] zur Benutzung mit der Sprache C nach
gebaut.




Wie wàr es mit (n)curses?

LG, Erich


EFEU 3.2 is released!
Get the open source from http://efeu.cybertec.at.

Ähnliche fragen