"Menü" mittels Konsole?

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
starcow
Establishment
Beiträge: 523
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub
Kontaktdaten:

"Menü" mittels Konsole?

Beitrag von starcow »

Ich wusste jetzt nicht, wie ich es als Thread-Titel griffiger hätte auf Punkt bringen können...

"Früher" hatte man doch Programme, die sich irgendwie ausschliesslich dem "Konsolen-Character-Set" bedient haben. Oftmals waren z. B. die Installations- und Konfigurations-Menüs in alten Dos-Spielen so gelöst. Oder IDE's wie Quick-Basic. Ihr erinnert euch...

Gibt es vielleicht eine Möglichkeit, solche Menüs als Konsolen-Programm zu realisieren? Oder ist es sogar so, dass diese Programme tatsächliche nur Konsolen-Programme sind und der Output reiner Konsolen Output ist?

Bisher hatte ich irgendwie keine Möglichkeit gefunden, sowas wie ein "Fortschrittsbalken" in der Konsole zu realiseren. Dazu müsste man ja irgendwie den Bildschirm löschen können.
Wenn man das könnte, hätte man doch eine Art Möglichkeit, plattformunabhängige Programme zu erstellen, die trotzdem eine Art Menü aufweisen. Also Programme, die ganz ohne externe OS-API's auskommen.
Freelancer 3D- und 2D-Grafik
mischaschaub.com
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: "Menü" mittels Konsole?

Beitrag von Schrompf »

Du kannst Steuerzeichen ausgeben, die den Cursor (und damit die Stelle, wo Deine nächste Ausgabe losgeht) bewegen. Auf die Schnelle habe ich nur \r ergoogeln können, das setzt den Cursor an den Anfang der Zeile. Also zum Beispiel für nen Fortschrittsbalken

Code: Alles auswählen

printf( "XX00000000\r");
std::this_thread::wait(400ms);
printf( "XXXX000000\r");
std::this_thread::wait(400ms);
printf( "XXXXX00000\r");
Der printed also den Fortschrittsbalken mit 2X und geht dann gleich zurück an den Anfang der Zeile. 400ms später überschreibt dann die nächste Zeile mit einem X mehr all Deine Zeichen und setzt am Ende wieder den Cursor an den Anfang zurück. Und so weiter.

Gibt auch ein Steuerzeichen für "gehe eine Zeile hoch", und damit kannst Du dann mehrzeilige Sachen updaten, wie z.B. ein Menü

Achja, und es ist evtl. nötig, zu flushen, weil der sonst zeilenweise buffert und Du somit nie was von Deiner Ausgabe siehst. fflush( stdout); fällt mir da auf die Schnelle ein, aber das kannst Du sicher googeln.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: "Menü" mittels Konsole?

Beitrag von xq »

ANSI Escape Sequenz ist hier das richtige Schlüsselwort, um crossplatform vernünftige Kontrolle über die Konsole zu haben. Oder direkt Libraries wie ncurses, welche dir das ganze abnimmt und quasi einen virtuelle Character-Framebuffer anbietet (und auch gleich das ganze UI mit)

Unter Windows kann man auch die Konsole direkt als Character-Framebuffer bearbeiten, hier ist WriteConsole und SetConsoleCursorPosition die richtigen Stichworte
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Benutzeravatar
Jonathan
Establishment
Beiträge: 2353
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: "Menü" mittels Konsole?

Beitrag von Jonathan »

Für Fortschrittsbalken oder Prozentangaben hab ich mit \r immer gute Erfahrungen gemacht, das ist ziemlich simpel zu verwenden.
starcow hat geschrieben: 04.05.2021, 13:58 Wenn man das könnte, hätte man doch eine Art Möglichkeit, plattformunabhängige Programme zu erstellen, die trotzdem eine Art Menü aufweisen. Also Programme, die ganz ohne externe OS-API's auskommen.
Ich frage mich, was eigentlich deine Motivation ist? Wie schon erwähnt, hat man mit Bibliotheken wie ncurses sehr viel einfacher Kontrolle über die Ausgabe und kann damit viel machen. Aber wieso sollte das besser oder plattformunabhängiger sein, als andere Lösungen? Ich meine, der Compiler liefert dir halt für jede Plattform einfach eine Implementierung der Standardbibliothek mit - also eine plattformabhängige Bibliothek, deren Interface aber überall gleich ist. Letztendlich machen andere Bibliotheken wie z.B. Qt also genau das selbe, der einzige Unterschied ist, dass du sie erst noch installieren musst.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Specialist
Establishment
Beiträge: 135
Registriert: 29.08.2003, 14:22
Kontaktdaten:

Re: "Menü" mittels Konsole?

Beitrag von Specialist »

Visual Studio bietet in der stdio.h (meine ich zumindest dass es diese war) die Funktion gotoxy(int x, int y) mit der man den Cursor in der Konsole beliebig versetzen kann. So weit ich weiß ist das aber kein Standard.
Benutzeravatar
starcow
Establishment
Beiträge: 523
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub
Kontaktdaten:

Re: "Menü" mittels Konsole?

Beitrag von starcow »

Interessant, danke! Damit lässt sich bereits etwas mehr machen :-)
Ich nehme an, farbige Textausgabe lässt sich nicht ohne seperate Bibliotheken realiseren.
Jonathan hat geschrieben: 04.05.2021, 16:48 Ich frage mich, was eigentlich deine Motivation ist? Wie schon erwähnt, hat man mit Bibliotheken wie ncurses sehr viel einfacher Kontrolle über die Ausgabe und kann damit viel machen. Aber wieso sollte das besser oder plattformunabhängiger sein, als andere Lösungen? Ich meine, der Compiler liefert dir halt für jede Plattform einfach eine Implementierung der Standardbibliothek mit - also eine plattformabhängige Bibliothek, deren Interface aber überall gleich ist. Letztendlich machen andere Bibliotheken wie z.B. Qt also genau das selbe, der einzige Unterschied ist, dass du sie erst noch installieren musst.
Ich verfolge jetzt nichts Konkretes. Es geht mir blos darum, den Gestaltungsspielraum etwas zu vergrössern. Also mit "Board-Mitteln", ohne externe Bibliotheken für kleinere Programme dazu einbinden zu müssen.

Edit:
Ich verstehe was du meinst Jonathan - da hast du eigentlich auch recht.

Gruss starcow
Freelancer 3D- und 2D-Grafik
mischaschaub.com
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: "Menü" mittels Konsole?

Beitrag von Schrompf »

Doch, Farbe geht auch. Das macht man über so obskure Textfragmente "[m\16x" oder so... müsste ich auch erst googeln.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
starcow
Establishment
Beiträge: 523
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub
Kontaktdaten:

Re: "Menü" mittels Konsole?

Beitrag von starcow »

Tatsächlich! Danke für den Hinweis! (-:
Ascheinend muss man allerdings unter Windows dazu die Konsole irgendwie in einen speziellen Modus setzen. Ich glaube in anderen Betriebssystemen wird das per default unterstützt.
Freelancer 3D- und 2D-Grafik
mischaschaub.com
Antworten