mikrocontroller.net

Forum: PC-Programmierung curses.h --> Problem


Autor: J.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).
gcc -lncurses -o ./test.app ./test.c

Hier mein Beispielcode:
#include <curses.h>

int main (void)
{
   initscr();
   start_color();
   clear();

   init_pair(1,COLOR_RED,COLOR_BLACK);
   init_pair(2,COLOR_BLUE,COLOR_BLACK);
   init_pair(3,COLOR_WHITE,COLOR_BLACK);

   attrset(COLOR_PAIR(1));
   mvaddstr(5,5,"Farbe1");
   attrset(COLOR_PAIR(2));
   mvaddstr(6,6,"Farbe2");
   attrset(COLOR_PAIR(3));
   mvaddstr(8,8,"Farbe3");

  refresh();
  getch();

  return 0;

}


Vielen dank!

Autor: jfdj (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zwischendurch refresh()?

Autor: j.k. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider nicht ;-) Habe unter jedes "mvaddstr();" ein refresh();   hat 
leider auch nicht den gewünschten Effekt hervorgerufen.

Autor: sdgbxycb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also bei mir klappt das Beispiel so wie oben:

Rot
 Blau

  Weiss


Gast

Autor: sdgbxycb (Gast)
Datum:

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

Autor: j.k. (Gast)
Datum:

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

Autor: Rolf Magnus (rmagnus)
Datum:

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

Autor: sdgbxycb (Gast)
Datum:

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

Autor: Hannes Jaeger (pnuebergang)
Datum:

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

Autor: j.k. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also bei mir funktionierts leider auch nicht unter einer anderen Konsole 
:(

Könntet mir vielleicht jemand das Programm so umändern, dass es 
funktioniert?!

Vielen dank

Autor: Sven P. (haku) Benutzerseite
Datum:

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

Autor: roman65536 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jk, kannst du ein "infocmp" von deinem terminal schicken ??
und den set output von der shell, auf der du es probierst ??

fallst installiert auch den strace output.

lg roman

Autor: Johannes Knoeller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
welche "Zeile" des infocmp willst du denn genau wissen?
Eine für mich interessante Zeile lautet wie folgt:
colors#8, cols#80, it#8, lines#24, pairs#64

Autor: Johannes Knoeller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok habe es selber herausgefunden :)

Es klappt!

das "refreh()" hat bei mir im Code gefehlt.

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.