www.mikrocontroller.net

Forum: PC-Programmierung Formatierte Textausgabe in C


Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ?

Autor: Dominik Tewiele (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bildschirm löschen:

system("cls");


Cursor setzen, farbige Texte:

siehe conio.h


Dominik

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"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?

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, die CONIOEX Funktionen laufen echt super !
Irgendwann muss ich doch mal mit echter Windowsprogrammierung anfangen,
aber bis dahin reichen die Funktionen hoffentlich.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> "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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, die ncurses-Frage stellte ich, weil auch ein "gurgeln" (schön!)
nach "ncurses win32" keine wahre Erhellung brachte.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.