ncurses: Ausgabe auch nach Programmende auf der Shell sehen
-
Moin Moin!
Ich moechte in einem Programm farbigen Output einbauen. Das Programm rechnet eine ganze Weile und gibt ziemlich viel Output aus. Diesen moechte ich nach Programmende inspizieren koennen.
Fuer den farbien Output hab ich ncurses ausprobiert. Dabei hab ich mehrere Probleme:
1. der Output ist nicht scrollbar. Zwar kann ich mit scrollok() ncurses dazu zwingen, den Output "runterzuscrollen", aber das Endergebnis in meiner Shell ist nicht mehr scrollbar.
2. Sobald das Programm endet, verschwindet auch der Output des Programms auf nimmerwiedersehen (aehnlich wie's z. B. bei man oder less der Fall ist).
Wie kann ich die Probleme loesen?
-
du brauchst wahrscheinlich nur die ANSI Escape Sequences.
Siehe http://ascii-table.com/ansi-escape-sequences.phpIch mach dann so:
#define COLOR_NORMAL "\033[0m" #define COLOR_RED "\033[0;31m" #define COLOR_GREEN "\033[0;32m" #define COLOR_YELLOW "\033[0;33m" #define COLOR_BLUE "\033[0;34m" #define COLOR_PURPLE "\033[0;35m" #define COLOR_CYAN "\033[0;36m" #define COLOR_GRAY "\033[0;37m" #define COLOR_B_RED "\033[1;31m" #define COLOR_B_GREEN "\033[1;32m" #define COLOR_BROWN "\033[1;33m" #define COLOR_B_BLUE "\033[1;34m" #define COLOR_B_PURPLE "\033[1;35m" #define COLOR_B_CYAN "\033[1;36m" #define COLOR_WHITE "\033[1;37m" ... void foo() { printf(COLOR_RED "Dieser Text ist rot," COLOR_NORMAL " dieser nicht mehr\n"); }
-
Hi!
Ja, diese "Ersatzloesung" verwende ich zur Zeit auch, ich hab allerdings im Netz irgendwo gefunden sie sei nicht portabel. Das Programm soll spaeter auch unter Windows & MacOS eingesetzt werden; Verstehen die OSe ANSI-Codes? (Kanns leider nicht selbst testen)
-
Blue-Tiger schrieb:
Hi!
Ja, diese "Ersatzloesung" verwende ich zur Zeit auch, ich hab allerdings im Netz irgendwo gefunden sie sei nicht portabel.
es ist genau andersrum. ncurses ist nicht portabel, mir ist zumindest kein Projekt bekannt, welches ncurses auf windows portiert hätte.
Escape Sequences sind standarisiert, jedes heutige (mainstream) System kennt sie und implementiert sie. Bei MS-DOS/Windows 9.x musste man dafür die ANSI.SYS in der config.sys laden. Bei NT-Derivate weiß ich nicht.
-
http://en.wikipedia.org/wiki/ANSI_escape_code
Für ncurses gibt es meines Wissens nach keinen Port für Windows.
Alternativ: schreib dir eine Hand voll Funktionen, wie set_color(enum color col) und implementiere diese für Linux/Mac/Windows unterschiedlich. Für Linux/Mac kannst du ja die ANSI Codes benutzen und für Windows schau mal hier im Consolen-Forum nach der Improved Console da solltest du Code zum Ändern der Farbe finden.