nomike
Mitglied
Hi!
Vielleicht kennen manche von euch den ICQ Client YSM. (http://ysmv7.sourceforge.net/).
Der funktioniert sowohl im Linux als auch im Windows auf der console und hat ein command-line-interface.
Ich hab mir jetzt mal die tvision library besorgt und versuch mich gerade ein wenig darin einzuarbeiten.
Mein Ziel ist die erschaffung einer GUI für das YSM.
Dazu möchte ich das YSM von meiner GUI aus starten und dann über PIPES mit dem YSM kommunizieren.
Mein Problem ist jetzt folgendes:
Im win32 Benutzt der Programmiere folgende Funktion zur Ausgabe von Text:
Hierbei wird die Funktion im Programm aufgerufen und dann werden die Escape-Sequenzen herausgefiltert und mit VisualC++ Funktionen so umgesetzt, daß auch ohne EscapeSequenzen eine vernünftige Farbdarstellung erfolgt.
Ich habe mal zum Testen versucht einfech mit nem printf escape-sequenzen auszugeben. Diese werden dann aber nur als Steuerzeichen am Bildschirm ausgegeben ==> Visual C oder Windows ist halt zu blöd dafür.
Soweit so gut, aber wenn ich jetzt die Console-Funktionen (WriteConsole,...) benutze, dann wird der Text zwar in die console geschrieben aber nicht auf stdout.
Ich kann also mit meiner PIPE baden gehen.
Wie krieg ich das jetzt so hin, daß ich die Applikation über ne Pipe benutzen kann (testen kann man das ja mit "ysm > test.txt" obs funktioniert) und das Programm trotzdem auf der command line starten kann und der gesamte Ouput samt allen Farben so wie jetzt erscheint?!?
Sollte hierbei jetzt ne lösung rauskommen, werde ich sie dem Autor vorschlagen und hoffen, daß er sie ins nächste release einbaut...
Ich danke euch schon mal im Vorraus für eure Hilfe!
mfg
Nomike aka Michael Postmann
Vielleicht kennen manche von euch den ICQ Client YSM. (http://ysmv7.sourceforge.net/).
Der funktioniert sowohl im Linux als auch im Windows auf der console und hat ein command-line-interface.
Ich hab mir jetzt mal die tvision library besorgt und versuch mich gerade ein wenig darin einzuarbeiten.
Mein Ziel ist die erschaffung einer GUI für das YSM.
Dazu möchte ich das YSM von meiner GUI aus starten und dann über PIPES mit dem YSM kommunizieren.
Mein Problem ist jetzt folgendes:
Im win32 Benutzt der Programmiere folgende Funktion zur Ausgabe von Text:
PHP:
int
PRINTF(int verbose_level, char *fmt,...)
{
static HANDLE handle;
int written;
char ibuf[4096], *p, *q;
va_list argptr;
if ( verbose_level > YSM_SETTING_VERBOSE )
return -1;
if (!handle)
handle = GetStdHandle(STD_OUTPUT_HANDLE);
va_start(argptr, fmt);
vsprintf(ibuf, fmt, argptr);
va_end(argptr);
p = ibuf;
while ((q = strchr(p, 0x1b)) != NULL) {
WriteConsole(handle, p, q-p, &written, 0);
p = q;
while (*p && *p != ';')
p++;
if (*p) {
short color;
p++;
color = atoi(p);
while (*p && *p != 'm')
p++;
if (*p)
p++;
switch (color) {
case 30:
color = 0;
break;
case 31:
color = FOREGROUND_RED | FOREGROUND_INTENSITY;
break;
case 32:
color = FOREGROUND_GREEN;
break;
case 33:
color = FOREGROUND_RED | FOREGROUND_GREEN;
break;
case 34:
color = FOREGROUND_RED | FOREGROUND_GREEN;
break;
case 35:
color = FOREGROUND_RED | FOREGROUND_BLUE;
break;
case 36:
color = FOREGROUND_GREEN | FOREGROUND_BLUE |
FOREGROUND_INTENSITY;
break;
case 37:
default:
color = FOREGROUND_RED | FOREGROUND_GREEN |
FOREGROUND_BLUE | FOREGROUND_INTENSITY;
break;
}
SetConsoleTextAttribute(handle, color);
}
}
if (*p)
WriteConsole(handle, p, strlen(p), &written, 0);
return 0;
}
Hierbei wird die Funktion im Programm aufgerufen und dann werden die Escape-Sequenzen herausgefiltert und mit VisualC++ Funktionen so umgesetzt, daß auch ohne EscapeSequenzen eine vernünftige Farbdarstellung erfolgt.
Ich habe mal zum Testen versucht einfech mit nem printf escape-sequenzen auszugeben. Diese werden dann aber nur als Steuerzeichen am Bildschirm ausgegeben ==> Visual C oder Windows ist halt zu blöd dafür.
Soweit so gut, aber wenn ich jetzt die Console-Funktionen (WriteConsole,...) benutze, dann wird der Text zwar in die console geschrieben aber nicht auf stdout.
Ich kann also mit meiner PIPE baden gehen.
Wie krieg ich das jetzt so hin, daß ich die Applikation über ne Pipe benutzen kann (testen kann man das ja mit "ysm > test.txt" obs funktioniert) und das Programm trotzdem auf der command line starten kann und der gesamte Ouput samt allen Farben so wie jetzt erscheint?!?
Sollte hierbei jetzt ne lösung rauskommen, werde ich sie dem Autor vorschlagen und hoffen, daß er sie ins nächste release einbaut...
Ich danke euch schon mal im Vorraus für eure Hilfe!
mfg
Nomike aka Michael Postmann