curses.h --> Problem

Gast #1606599
Lesenswert?

Hallo Leute!

Ich werde bald bekloppt mit dieser curses.h. Die Frage richtet sich an 
alle Linuxer unter euch, die schon mal mit dieser Bibliothek was zutun 
hatten.

Und zwar habe ich folgendes vor:

die Schriftfarbe der Strings "Farbe1", "Farbe2" und "Farbe3" sollen 
jeweils unterschiedlich im gleichen Fenster sein.

Das heißt die Farbe des Strings "Farbe1" soll in diesem Beispiel rot 
sein. usw.

Was mache ich falsch? Es erscheint immer nur die letze Farbe....

PS: Zum Übersetzen des Codes muss der Schalter -lncurses beim gcc 
eingeschaltet werden. Auch die Reihenfolge der Schalter ist entscheidend 
(bescheurt).
1
gcc -lncurses -o ./test.app ./test.c

Hier mein Beispielcode:
1
#include <curses.h>
2

3
int main (void)
4
{
5
   initscr();
6
   start_color();
7
   clear();
8

9
   init_pair(1,COLOR_RED,COLOR_BLACK);
10
   init_pair(2,COLOR_BLUE,COLOR_BLACK);
11
   init_pair(3,COLOR_WHITE,COLOR_BLACK);
12

13
   attrset(COLOR_PAIR(1));
14
   mvaddstr(5,5,"Farbe1");
15
   attrset(COLOR_PAIR(2));
16
   mvaddstr(6,6,"Farbe2");
17
   attrset(COLOR_PAIR(3));
18
   mvaddstr(8,8,"Farbe3");
19

20
  refresh();
21
  getch();
22

23
  return 0;
24

25
}


Vielen dank!
Gast #1606919
Lesenswert?

>PS: Zum Übersetzen des Codes muss der Schalter -lncurses beim gcc
>eingeschaltet werden. Auch die Reihenfolge der Schalter ist entscheidend
>(bescheurt).

>gcc -lncurses -o ./test.app ./test.c

Was ist daran unlogisch?

Gast
Gast #1606938
Lesenswert?

dass es mein Compiler nicht übersetzt, wenn ich zuerst den Schalter "-o" 
und DANACH den Schalter "-lncurses" schalte.

Finde es nich besonders logisch, hier eine Reihenfolge beachten zu 
müssen...

Zum eigentlichen Problem: Werde es mal in einer Systemkonsole 
(Strg-Alt-1) versuchen und nicht in einer Konsole unter KDE.


Gruß
#1606951
Lesenswert?

j.k. schrieb:
> dass es mein Compiler nicht übersetzt, wenn ich zuerst den Schalter "-o"
> und DANACH den Schalter "-lncurses" schalte.

Dann muß irgendwas mit deiner Installation kaputt sein. Bei mir 
funktioniert das wie erwartet.

> Zum eigentlichen Problem: Werde es mal in einer Systemkonsole
> (Strg-Alt-1) versuchen und nicht in einer Konsole unter KDE.

Ich habe es gerade in der Konsole von KDE versucht, und da funktioniert 
es.
Gast #1606955
Lesenswert?

Du weisst aber, was -o bedeutet?

gcc [-c|-S|-E] [-std=standard] [-g] [-pg] [-Olevel] [-Wwarn...] 
[-pedantic] [-Idir...] [-Ldir...] [-Dmacro[=defn]...] [-Umacro] 
[-foption...] [-mmachine-option...] [-o outfile] infile...

Da -o das Outfile aendert ist es nur logisch, dass direkt nach dem 
Schalter der Dateiname kommen muss.

Auch in einer kde-Konsole funktioniert es bei mir.

Gast
#1606996
Lesenswert?

An dem Curses-Programm fehlt ja so ziemlich alles.

Regel Nr 1 bei Curses: Mindestens einen SIGINT Signal-Handler 
installieren, der bei Programmabbruch noch schnell den alten 
Terminal-Status wiederherstellt.

Dann fehlt schon in normalen Ablauf ein endwin(). Ein has_colors()-Test 
fehlt. Die üblichen cbreak()-, noechon()- und nonl()-Aufrufe fehlen. Es 
fehlen jeweils attroff()-Aufrufe.

Und mal richtig zusammenlinken ist auch eine gute Idee. Bibiotheken 
(-l...) kommen nach den Objekt-Dateien (.o) und C-Dateien (*.c).
Gast #1608784
Lesenswert?

Könnte vielleicht mal jemand, bei dem es nicht funktioniert, sich 
äußern, welches Terminal überhaupt benutzt wird? Es gibt sicherlich auch 
Terminals, die nur ganze Zeilen in einer Farbe einfärben können.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren