Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
17.09.2001, 22:50
dp
Administrator


hi

ich hab auch mal ein paar fragen =)
wie kann man unter linux farben in einer console anwendung bringen? ich habe mal ls --color > test gemacht und mir dann test angesehen, dort steht sowas in der art drinne:

[[^01m

aber das funzt nicht wenn ich das einfach in printf baue :\

frage 2 ist mehr eine prinzip frage
ich bastel z.z. an einem irc bot rum und mich würde mal interessieren wie man sowas am besten verarbeitet. dort kommen dann so sachen an wie

:hallo!ichbincool@p9D8374893.dip.t-dialin.net PRIVMSG #thewall.de :hi ich bin cool\n

und natürlich auch mal ganz andere, mit unterschiedlicher länge .. deshalb würde es mich mal interessieren wie man das in dem fall macht. ich mach das bisher so in der richtung:

char zeile[1024]; /* enthält die obige zeile */
char hostmask[128]; /* hier kommt das rein: hallo!ichbincool@p9D8374893.dip.t-dialin.net */
char *zeiger_auf_hostmask;

zeiger_auf_hostmask = (char *)strchr(zeile, ' ');
strncpy(hostmask, (zeile + 1), (zeiger_auf_hostmask - zeile));

so sinngemäß etwa ..

aber das ist sehr unflexibel und gefällt mir einfach nich :\ (und ob pointer voneinander abziehen so gut ist?)

bin für jegliche antworten dankbar =)

--

zum Seitenanfang zum Seitenende Profil || Suche
001
18.09.2001, 15:09
Prefect



Zu 1), da gibt's natürlich so Standards die man vielleicht irgendwo lesen kann (ANSI terminals oder sowas?). Ansonsten schaut man halt im Kernel nach ;)

2) Das würde ich vertokenisieren, so dass du im Endeffekt ein Array ähnlich wie argc/argv hast. Das sieht dann etwa so aus (der ursprüngliche String ist in char *command:

Quellcode:
        int argc;
        char *argv[MAX_IRCARGS+1];

        argc = 0;
        do {
                if (argc > MAX_IRCARGS) {
                        debug(20, "WARNING: IRC Command has too many arguments. Dropped.");
                        return;
                }

                /* IRC-Trailers */
                if (argc && *command == ':') {
                        command++;
                        argv[argc++] = command;
                        break;
                }
               argv[argc++] = command;

                while(*command && *command != ' ') command++;
                if (!*command) break;
                *command++ = 0;
        } while(1);
        argv[argc] = 0;

Natürlich ist das auch nicht das Ende der Weisheit, immerhin ist es auf eine Obergrenze beschränkt was die Anzahl der Parameter angeht. Im IRC-Fall ist das nicht so schlimm, da ja das Protokoll die Anzahl der Einzelabschnitte einschränkt. Wenn du aber wirkliche Flexibilität brauchst, dann solltest du das argv auf dem Heap anlegen, und wenn argc zu groß wird den Speicherbereich mit realloc() vergrößern.
Übrigens ist der Tokenizer da oben natürlich auf IRC ausgelegt, d.h. er erkennt mit : eingeleitete EOL-Parameter automatisch.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
002
18.09.2001, 19:34
TheTinySteini



zu 1.)
Du kannst dazu die ncurses nehmen (mit -ncurses kompilieren und ncurses.h #includen)
Quellcode:
init_pair(1, COLOR_RED, COLOR_BLACK);
attrset(COLOR_PAIR(1));
mvprintw(LINES-1, COLS / 2 - 20, "%s", szOutput);
attrset(COLOR_PAIR(0));

... irgendwie so muss das dann gehen. Gibt's aber auch ne umfangreiche manpage zu.
Eine Vorwarnung noch: die ncurses gelten sicher bei einigen Leuten als "Klickibunti"-Zeug (du weißt wie ich das meine), also sei gewarnt =)

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
003
18.09.2001, 22:38
dp
Administrator


ok erstmal danke prefect ( auf den cent source hätte ich auch selber kommen können *dong* =). das nächste also think before you post *g*

klickibunti, naja, das ist schon blöd aber ich finde z.b. ls mit color wesentlich besser als ohne - und wenn mans nicht übertreibt (bitchx) dann isses doch ok denke ich ?)

ach ja, natürlich auch danke an ttt =)

--


Dieser Beitrag wurde am 18.09.2001 um 22:39 von Darth Paul bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
004
18.09.2001, 22:50
Megge



bissel offtopic, aber wieso wird TheTinySteini ttt gennant ?
wennschon tts ?!?

--

zum Seitenanfang zum Seitenende Profil || Suche
005
18.09.2001, 22:53
Hanfling



@megge keine ahnung vieleicht weil ttt besser klingt und schneller zu schreiben ist oder er hat sich mal vertippt :D

so letzter post für heute von mir gn8

--

Nun ist deine Zeit gekommen sprach der Tod, stolperte und brach sich das Genick. :o

zum Seitenanfang zum Seitenende Profil || Suche
006
18.09.2001, 23:10
TheTinySteini



@DarthPaul: Natürlich isses ok... aber du weißt ja, es gibt immer wieder Puristen, denen ist schwarz-weiß immer noch am liebsten =)
So schlimm wie MFC wird's schon nicht sein ;-)

@Megge: Das kommt von funner, der hat mir ne E-Mail-Adresse ttt@thewall.de eingerichtet, weil TheTinySteini bisschen lang ist. Naja, warum er ttt und nicht tts genommen hat, wird ein Rätsel bleiben, aber er ist bei weitem nicht der einzige, der das so macht - auch welche, die mich zum ersten mal abkürzen, nehmen oft ttt. Nebenbei is mir das auch ganz recht, so kann ich mich auch mal TripleT oder t³ nennen =)

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche