Diskussion:Ncurses: Farben und andere Attribute

Seiteninhalte werden in anderen Sprachen nicht unterstützt.
Aus Wikibooks

Guten Tag, bin neu mit ncurses und habe mir etliche Dokus angesehen und überall steht:

Farben einstellen[Bearbeiten]

int init_color(short color, short r, short g, short b);
  • r, g, b: ... RGB; 0 <= (r, g bzw. b) <= 1000

Nun gab ich die maximal erlaubte int (1000) an. Dies wurde aber nicht erkannt. Nach vielen vergeblichen Versuchen setzte ich die int herab und siehe da: es geht. Dies scheint ein durchgängiger Doku-Bug zu sein. Richtig ist wohl:

  • r, g, b: ... RGB; 0 <= (r, g bzw. b) < 1000

Falls kein Widerspruch kommt, werde ich dies nach dem Wochenende ändern.

-- 77.12.205.195 13:46, 6. Jan. 2011 (CET)[Beantworten]

Bitte prüfe das vorher noch etwas genauer: So wie ich RGB, short und int in vielen anderen Zusammenhängen kennengelernt habe, halte ich es für denkbar, dass der Wertebereich 0 bis 255 lautet. Aber bitte: das ist nur eine Vermutung und kein Beweis dafür, wie es bei ncurses aussieht. -- Jürgen 15:02, 6. Jan. 2011 (CET)[Beantworten]
Lieber Jürgen, wie gesagt, ich bin neu mit ncurses und hab in etlichen Dokus inklusive der man-pages nachgesehen: der int/short-Bereich geht weit über den von bspw. HTML und vielen anderen Zusammenhängen bekannten Bereich hinaus. Tatsachlich wird für Weiß z.B.
short r = 999, g = 999, b = 999; akzeptiert,
short r = 1000, g = 1000, b = 1000; dagegen nicht.Kleinere Werte wie z.B.
short r = 700, g = 700, b = 700; liefern Grautöne.
Das Beste wäre ja, Du könntest es selbst versuchen, da ich mich damit jetzt schon ein paar Tage aufgehalten habe und immer zu dem gleichen Resultat kam: Nach fehlerlosem Kompilieren mit gcc auf x86-Rechner mit mehreren neudefinierten Farben wurden nur die erkannt, bei denen für alle drei Werte der Wertebereich 0 <= short <= 999 eingehalten wurde.
Vielleicht hast Du ja auch die Möglichkeit einen Dritten zu kontaktieren, der bestenfalls schon mit ncurses vertraut ist. Mir ist durchaus bewußt, daß wir es hier mit einem Ding, ähnlich dem "Eisen im Spinat" zu tun hätten, falls es so ist, wie es mir erscheint. Liebe Grüße und alles Gute zum Neuen Jahr -- 77.186.158.31 10:31, 8. Jan. 2011 (CET)[Beantworten]
Guck doch einfach in die Quellen, insbesondere in ncurses/base/lib_color.c. init_color() verwendet ein Makro namens okRGB(), das wie folgt definiert ist: #define okRGB(n) ((n) >= 0 && (n) <= 1000). Also alles paletti. Ab 1001 gibt init_color() erwartungsgemäß ERR zurück, bei 1000 noch nicht.
In der selben Datei findet man auch die Vorbelegung für COLOR_WHITE: (680,680,680). Alles darüber bis (1000,1000,1000) kann(!) zur fetten oder helleren oder blinkenden Darstellung dienen und das ist dann hochgradig terminalabhängig. Und bei z.B. der Linux-Konsole ist bei 999 Schluss, woanders vielleicht erst bei 1000. --84.130.26.199 23:46, 10. Jan. 2011 (CET)[Beantworten]
Also ist das vom Terminal bzw. vom OS abhängig? Es ist jedenfalls so, wie Du schreibst: "bei ... der Linux-Konsole ist bei 999 Schluss". Wenn auch nur einer der Werte 1000 ist, ist bei mir der returnCode ERR (-1). Nun wäre meine Frage, hast Du das ausprobiert: "Ab 1001 gibt init_color() erwartungsgemäß ERR zurück, bei 1000 noch nicht."? Falls ja, mit welchem OS?
Natürlich kann ich auch sehen, z.B. bei der FreeBSD/NetBSD/Linux OS Cross Reference, wie okRGB(n) für init_color() definiert ist:
#define okRGB(n) ((n) >= 0 && (n) <= 1000).
Dies macht mich jetzt richtig ratlos. Beste Grüße -- 77.188.10.22 13:45, 11. Jan. 2011 (CET)[Beantworten]
Es ist terminalabhängig. Schlimmer noch: Es ist abhängig, mit welchen Parametern das Terminal kompiliert wurde. Unter Ubuntu habe ich 4 oder 5 Grafik-Terminals getestet, auch xterm. Keines ließ eine Änderung mittels init_color() überhaupt zu. Nur auf der "Textkonsole" ging es, aber sinnvoll nur bis (999,999,999). Das xterm unter Knoppix dagegen kommt auch mit (1000,1000,1000) klar, ergibt also Leuchtend-Weiß. Ich vermute, init_color() dürfte seltenst eine sinnvolle Anwendung finden, da solche Software hochgradig unportabel wäre. Die 8 Farben + das Attribut A_BOLD, vielleicht noch inverse Darstellung ... auf mehr würd' ich mich nicht verlassen. --Jan 14:17, 11. Jan. 2011 (CET)[Beantworten]
Danke Jan, die Frage ist nun, ob dies in die Doku gehört, oder nicht. Liebe Grüße -- 77.188.10.22 14:30, 11. Jan. 2011 (CET)[Beantworten]
Ich hab mal die Beschreibungen zu den beiden Funktionen voneinander getrennt --Jan 18:29, 11. Jan. 2011 (CET)[Beantworten]
Prima, Jan, meine Frage ist aber nicht beantwortet; ich meine, ob es in Ordnung wäre noch einzufügen:
Bei manchen Terminals allerdings nur
  • r, g, b: ... RGB; 0 <= (r, g bzw. b) <= 999
Immerhin habe ich etliche Stunden gebraucht, das herauszufinden, das könnte damit anderen erspart werden.
Liebe Grüße -- Friz 77.188.10.22 21:25, 11. Jan. 2011 (CET)[Beantworten]
Es gilt ja trotzdem 0 <= (r, g bzw. b) <= 1000. Nur weiß man nicht was es bedeutet für das spezielle Terminal, wenn man 1000 als Wert wählt. Ich zumindest habe keine Ahnung und Erfahrung mit ncurses-Programmierung und Terminal-Interna. Beim nächsten Terminal liegt die Grenze für das "erwartete" Ergebnis vielleicht bei 900. Ich mache dazu zumindest keine Ergänzung. Da fehlt mir schlicht die Kompetenz. --Jan 21:49, 11. Jan. 2011 (CET)[Beantworten]
Habe die Einschränkung eingearbeitet. Gruß -- Friz 77.188.10.22 23:35, 11. Jan. 2011 (CET)[Beantworten]