Kann es sein, dass es in C (z.B. bei einer Win32 Konsolenanwendung) nicht möglich ist, den Textcursor an eine bestimmte Stelle zu setzen, oder den Bilschirm zu löschen ?
Bildschirm löschen: system("cls"); Cursor setzen, farbige Texte: siehe conio.h Dominik
C selbst definiert derartige Funktionen überhaupt nicht. Unter DOS wurden von einigen Compilerherstellern nichtportable Funktionen à la gotoxy() etc. mitgeliefert, die aber eben nicht portierbar waren und unter Win32 nicht existieren. Ein anderer Ansatz war die Verwendung von ANSI.SYS und die Ausgabe steinzeitlicher Terminalsteuercodes; auch das ist ein unter Win32 nicht verwendbarer Ansatz. Wenn gezielt Win32-Konsolanwendungen entwickelt werden sollen, können die dafür vorgesehenen Console-API-Funktionen verwendet werden. Vor einiger Zeit gab es hier schon mal eine Diskussion zum Thema: http://www.mikrocontroller.net/forum/read-8-218292.html#218292 darin hat René König einen netten Wrapper um die Microsoft'schen Konsolfunktionen gepostet http://www.tbkoenig.de/files/conioex/CONIOEX.ZIP Hier ein Auszug aus der beigelegten Readme.txt: Zur Zeit sind folgende Funktionen implementiert: void clrscr(void); // Bildschirm löschen void clreol(void); // Zeile von der aktuellen CursorPosition an löschen void gotoxy(int x, int y); // Cursor an die Koordinaten (x, y) bewegen int wherex(void;) // X-Koordinate des Cursors ermitteln int wherey(void); // Y-Koordinate des Cursors ermitteln void insline(void); // Zeile einfügen void delline(void); // Zeile entfernen void textcolor(int color); // Textfarbe setzen void textbackground(int clr); // Hintergrundfarbe des Textes setzen void textattr(int attr); // Text/Hintergrundfarbe in einem Rutsch setzen void highvideo(void); // Hohe Intensität für folgende Ausgaben setzen void lowvideo(void); // Niedrige Intensität für folgende Ausgaben setzen void _setcursortype(int cur); // Cursorform festlegen
> Ein anderer Ansatz war die Verwendung von ANSI.SYS und die Ausgabe > steinzeitlicher Terminalsteuercodes; auch das ist ein unter Win32 > nicht verwendbarer Ansatz. Wieso "steinzeitlich"? Die wurden halt nur unter Dos nie verwendet, weil man da blödsinnigerweise erst explizit einen Treiber laden mußte. Auf den meisten anderen Betriebssystemen sind die Escape-Sequenzen praktisch Standard. Sie werden allerdings normalerweise nicht direkt verwendet, sondern über Libraries. > Wenn gezielt Win32-Konsolanwendungen entwickelt werden sollen, > können die dafür vorgesehenen Console-API-Funktionen verwendet > werden. Und wenn sie portabel sein sollen, nimmt man ncurses.
"auf den meisten anderen BS" heißt wohl: Unter *nix. Was da auch kein wirkliches Wunder ist, da dieses OS sehr, sehr alt ist und durchaus noch mit echten seriellen Terminals gearbeitet wurde, als das Escape-Sequenzen-Konzept entwickelt wurde. Wenn man das richtig nutzt, muss man termcap auswerten, da ja nicht jedes Terminal ANSI- oder VT100-Kompatibel ist. Es gab ja noch zig andere Terminals, die alle ihre eigenen "Sprachen" verwendeten, VT52, TVI950, irgendwelche Tektronix-Terminals, Cybernex, 'ne echte Teletype ... Ich finde das steinzeitlich. Gibt es von ncurses eine native win32-Portierung, die kein cygwin erfordert?
Danke, die CONIOEX Funktionen laufen echt super ! Irgendwann muss ich doch mal mit echter Windowsprogrammierung anfangen, aber bis dahin reichen die Funktionen hoffentlich.
> "auf den meisten anderen BS" heißt wohl: Unter *nix. Naja, fast jedes außer Windows ist ja heute in irgendeiner Form von *nix abgeleitet, egal ob Linux, Solaris, FreeBSD, MacOS, QNX, ... > Was da auch kein wirkliches Wunder ist, da dieses OS sehr, sehr > alt ist und durchaus noch mit echten seriellen Terminals > gearbeitet wurde, als das Escape-Sequenzen-Konzept entwickelt > wurde. Und das kann man auch heute noch. Und eine Verbindung über Telnet/ssh funktioniert wohl auch nicht viel anders. > Wenn man das richtig nutzt, muss man termcap auswerten, da ja > nicht jedes Terminal ANSI- oder VT100-Kompatibel ist. Es gab ja > noch zig andere Terminals, die alle ihre eigenen "Sprachen" > verwendeten, VT52, TVI950, irgendwelche Tektronix-Terminals, > Cybernex, 'ne echte Teletype Allerdings. Das ist das schöne an ncurses. Das kümmert sich automatisch drum und unterstützt alle nur erdenklichen Terminal-Typen. > Ich finde das steinzeitlich. Ich finde, daß es eine praktische Lösung ist, die man nicht wegwerfen muß, nur weil sie schon lange existiert. Ist natürlich nicht optmial, daß es so viele verschiedene Varianten gibt. > Gibt es von ncurses eine native win32-Portierung, die kein cygwin > erfordert? Gute Frage. Gurgeln nach "ncurses windows" bringt nicht viel, weil man dann immer nur erfährt, daß man in ncurses auch Fenster im Textmodus machen kann.
Ja, die ncurses-Frage stellte ich, weil auch ein "gurgeln" (schön!) nach "ncurses win32" keine wahre Erhellung brachte.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.