Guten Abend,
gibt es eine (einfache) Möglichkeit, aus C-Programmen, die nicht als Root laufen müssen, den Zeichensatz der Textkonsole zu manipulieren?
Ich möchte in einem C-Programm Rahmen zeichnen, und dabei möglichst nicht auf zusätzliche Bibliotheken (ncurses) zu- rückgreifen.
Test: for(i=0;i<256;i++)printf("%d : %c ",i,i);
Dabei habe ich festgestellt, dass die Sonderzeichen, die ich dafür benötige (Linien, Ecken), auf jedem meiner Rechner irgendwo anders liegen, d.H. es gibt keinen eindeutigen ASCII- Code, der überall das selbe Zeichen ausgibt. Auf meinem alten Notebook werden die Linien und Ecken auf diese Weise z.B. gar nicht sichtbar. Dennoch sind Textmodus-Programme wie der Midnight-Commander in der Lage, Rahmen aus Zeichen darzustellen. Klar - mc verwendet die ncurses bzw. slang, aber auch die Ncurses muss ihren Zeichenvorrat ja irgendwo her bekommen. In welche Richtung sollte ich mich weiter informieren?
Viele Grüße, Matthias
Hallo Matthias,
On Thu, Jan 17, 2002 at 06:03:58PM +0100, Matthias Petermann wrote:
Guten Abend,
gibt es eine (einfache) Möglichkeit, aus C-Programmen, die nicht als Root laufen müssen, den Zeichensatz der Textkonsole zu manipulieren?
Spontan faellt mir da die Framebuffer-Konsole ein. Ist aber wohl nicht das, was Du suchst.
Dann gibt es noch diverse ANSI-Steuersequenzen, die den Zeichensatz umschalten koennen (wenn implementiert).
Ich möchte in einem C-Programm Rahmen zeichnen, und dabei möglichst nicht auf zusätzliche Bibliotheken (ncurses) zu- rückgreifen.
Warum willst Du die Arbeit, die andere schon getan haben, nicht nutzen? Das portabel selber zu implementieren, duerfte ziemlich langwierig werden.
Test: for(i=0;i<256;i++)printf("%d : %c ",i,i);
Dabei habe ich festgestellt, dass die Sonderzeichen, die ich dafür benötige (Linien, Ecken), auf jedem meiner Rechner irgendwo anders liegen, d.H. es gibt keinen eindeutigen ASCII- Code, der überall das selbe Zeichen ausgibt. Auf meinem alten
Der ASCII-Code definiert nur den Bereich 0-127, und selbst da gibt es kleinere Abweichungen bei der Darstellung einzelner Zeichen.
Hier meine Vorschlaege fuer grafische Zeichen aus diesem Bereich: -|=+#_
[...] Dennoch sind Textmodus-Programme wie der Midnight-Commander in der Lage, Rahmen aus Zeichen darzustellen. Klar - mc verwendet die ncurses bzw. slang, aber auch die Ncurses muss ihren Zeichenvorrat ja irgendwo her bekommen.
RTFS.
Gruss
Holger
Am Donnerstag, dem 17. Januar 2002 um 18:03:58, schrieb Matthias Petermann:
In welche Richtung sollte ich mich weiter informieren?
man terminfo
Ob du das wirklich anstelle der slang bevorzugst, wage ich zu bezweifeln. Räder muss man heute nicht nochmal erfinden...
Torsten
Hallo Torsten, Holger,
es ist ja nicht so, dass ich die Arbeit von anderen nicht nutzen will. Wenn ich aber z.B. mit einer Disketten-Distribution wie HAL91 (auf einem 386'er PC ohne Festplatte) irgendwelche Schaltaufgaben erledigen will, dann sind mir rund 300 (mit gzip 100) zusätzliche KiloBytes sehr willkommen. Deshalb dachte ich an eine Art Mini- ncurses, nur Standardfunktionen mit Hilfe von ANSI-Sequenzen und eine einigermaßen benutzerfreundliche Tastatursteuerung. Letzteres wird dann wohl mein nächstes Problem werden. Jetzt schau ich mir aber erst mal terminfo an.
Viele Grüße,
Matthias
On Thu, Jan 17, 2002 at 08:22:21PM +0100, Torsten Werner wrote:
Am Donnerstag, dem 17. Januar 2002 um 18:03:58, schrieb Matthias Petermann:
In welche Richtung sollte ich mich weiter informieren?
man terminfo
Ob du das wirklich anstelle der slang bevorzugst, wage ich zu bezweifeln. Räder muss man heute nicht nochmal erfinden...
Torsten
-- Torsten Werner Dresden University of Technology mailto:twerner42Ointercomm.de telephone: +49 (351) 463 36711 http://www.intercomm.de/ telefax: +49 (351) 463 36809
Lug-dd maillist - Lug-ddOschlittermann.de http://mailman.schlittermann.de/mailman/listinfo/lug-dd
Am Donnerstag, dem 17. Januar 2002 um 21:36:44, schrieb Matthias Petermann:
Wenn ich aber z.B. mit einer Disketten-Distribution wie HAL91 (auf einem 386'er PC ohne Festplatte) irgendwelche Schaltaufgaben erledigen will, dann sind mir rund 300 (mit gzip 100) zusätzliche KiloBytes sehr willkommen.
Aehm...
$ du -hs /usr/share/terminfo/ 7.6M /usr/share/terminfo
Viel Spass, beim Suchen nach Alternativen. :)
Torsten
On Thu, Jan 17, 2002 at 10:24:05PM +0100, Torsten Werner wrote:
Aehm...
$ du -hs /usr/share/terminfo/ 7.6M /usr/share/terminfo
Viel Spass, beim Suchen nach Alternativen. :)
Hmm... mir kam gerade der Einfall, einfach eine simple, auf die virtuelle Linux-Konsole zugeschnittene Bibliothek zu schreiben, und zusätzlich einen Wrapper, mit dem die Funktionen mit Hilfe der Ncurses auch auf "richtigen" Systemen nutzbar sind. Und für die Zeichen nehm ich dann eben auch nur Standard-ASCII.
Matthias
Hi Matthias,
On Thu, Jan 17, 2002 at 18:03:58 +0100, Matthias Petermann wrote:
Dabei habe ich festgestellt, dass die Sonderzeichen, die ich dafür benötige (Linien, Ecken), auf jedem meiner Rechner irgendwo anders liegen, d.H. es gibt keinen eindeutigen ASCII- Code, der überall das selbe Zeichen ausgibt. Auf meinem alten
Es gibt Steuerzeichen fuer das Terminal, um zwischen dem "normalen" und dem "grafik"-Zeichensatz umzuschalten.
echo -ne "\e(0" (grafik) echo -ne "\e(U" (normal)
(nachgelesen in console_codes(4))
nicht sichtbar. Dennoch sind Textmodus-Programme wie der Midnight-Commander in der Lage, Rahmen aus Zeichen darzustellen.
Die benutzen genau diese Umschaltung, natuerlich ueber ncurses.
bye, Chris, sich ueber sein nagelneues SyncMaster-Flachdisplay freuend :)
lug-dd@mailman.schlittermann.de