Generelle Frage: Header finden und einbinden



  • Hallo Community,

    als Anfänger möchte unter Linux ein C++ Programm für die Konsole schreiben.

    Generell habe ich die Frage, wie man für ganz verschiedenen Aufgaben
    geeignete Header findet.

    Hier nur als ein Beispiel möchte ich in der Konsole einen einfachen Rahmen ziehen.
    Dies wird doch sicherlich in vielen Anwendungen benötigt und ich könnte mir
    vorstellen, das es hier in C++ auch schon eine Unterstützung gibt.

    Wenn ich also etwas geeignetes finden will, sehe ich - neben der Befragung von Suchmaschinen - unter https://en.cppreference.com/w/cpp/header nach.
    In meinem Fall finde ich nichts.

    Welche Möglichkeiten gibt es, solche Header oder Module etc. zu finden?

    Danke!

    Gruß

    Piet



  • Hi.

    Bis du hier im richtigen Unterforum? Möchtest du C++ oder C++/CLI mit .NET programmieren?

    Aber zu deiner Frage:
    Was genau heißt "Rahmen zeichen"? Meinst mit ASCII Zeichen eine Box zeichnen oder tatsächlich eine Linie von Punkt A nach Punkt B ziehen?



  • Das ist das falsche Unterforum. Es geht bei Deiner Frage um ein UNIX/Linux spezifisches Problem, und das wird nicht in C++ gelöst, sondern man muss UNIX/Linux spezifische Eigenheiten nutzen.

    Historisch gewachsen gibt es einen ganzen Zoo an Terminal Typen, so dass es nicht ganz unwichtig ist für was für ein Terminal man die Software schreiben will. Da die Frage von Dir aktuell ist, nehme ich mal an das es für ein modernes xterm-256color Terminal oder Kompatibles ist. D.h. es wird eine Software auf der Benutzeroberfläche genutzt und kein physikalisches Terminal als separates Gerät was man an den seriellen Port des Computers anschließt (das wäre ein klassisches Terminal). Früher hat man gerne ein VT100 kompatibles Terminal verwendet. Es wird bei UNIX/Linux im Terminal eine Variable TERM gesetzt, die das Terminal definiert. Dadurch kann man das Verhalten eines modernen Softwareterminals z.B. auf die Fähigkeiten eines VT100 reduzieren.

    Ok, nachdem der Punkt geklärt ist für welches Terminal Du schreiben willst (xterm-256color) zu den wichtigen Dingen. Das Terminal unterstützt Farbausgabe (wie der Name schon nahelegt 256 Farben). Die Vordergrund- und Hintergrundfarben setzt man mit speziellen Escapecodes. Etliche andere Funktionen des Terminals kann man auch über Escapecodes steuern. Bevor Du aber anfängst alles von Hand zu machen es gibt unter UNIX/Linux eine Library mit der man vieles einfacher ansteuern kann ncurses. Das ist eine Weiterentwicklung der deutlich älteren curses Bibliothek. Ja, dieses Library ist hilfreich aber so wirklich toll ist sie nicht, man muss auch weiterhin vieles von Hand machen. Ich würde Dir empfehlen mit als erstes das NCURSES Programming HOWTO durchzulesen, und dann weitere Schritte zu unternehmen. Es ist noch darauf hinzuweisen, dass es eine Multibyte Character Version gibt ncursesw, die erlaubt es Unicode zu verwenden. Andernfalls müsstest Du Dein Programm auf irgend eine alte DOS Codepage o.ä. umstellen Alternativ muss man den Alternate Character Set des Terminals nutzen, was 2021 nicht mehr sinnvoll ist. Ferner sind die Box Drawing Zeichen des Alternate Character Seits recht begrenzt, und die neuen Unicode Zeichen erlauben in Anlehnung an die alten DOS Codepages deutlich mehr ASCII-Grafik als die alten Terminals.

    Die Rahmen kann man mit Hilfe von Unicode Box Drawing umsetzen. Daher der Hinweis auf ncursesw.



  • @DocShoe

    Danke für den Hinweis, ja falsches Unterforum.
    Obwohl die Basisfrage "Wie finde ich, welche Header passen", hier wohl auch gilt.

    Ja. ich möchte einfach einen Rahmen zeichnen mit ASCII und mache das jetzt mit
    einer for-Schleife mit cout << "-".

    "oder tatsächlich eine Linie von Punkt A nach Punkt B ziehen?" wäre mehr 'richtige' Grafikprogammierung?

    Gruß

    Piet



  • @john-0
    Hallo und danke, verstanden!

    Ich möchte aber zuerst 'nur' auf den C++ Standard schauen.

    Aber mir ist noch unklar, wie man geeignete Header findet.
    Anderes Beispiel:
    Ich möchte nach einigen Sekunden den Bildschirm löschen

    und mache das mit

            sleep(7);
            clscr ();
    

    wobei clscr()

    // Func Clear Screen
        void clscr() {
        cout << "\033[2J\033[1;1H";
        }
    

    ist .

    Für die Zeit habe ich den Header

    #include <ctime> 
    

    Beides war mühselig zu finden.
    Geht das Finden solcher Codes nicht einfacher?
    Ich kenne nur die Referenz ein bisschen.

    Danke!

    Gruß

    Piet



  • @Piet sagte in Generelle Frage: Header finden und einbinden:

    Ich möchte aber zuerst 'nur' auf den C++ Standard schauen.

    C++ kennt keinen Bildschirm.

    @Piet sagte in Generelle Frage: Header finden und einbinden:

    Für die Zeit habe ich den Header
    #include <ctime>

    Laut https://en.cppreference.com/w/cpp/header/ctime gibt es da auch kein sleep().

    sleep() ist eine Posix-Funktion.



  • @Piet sagte in Generelle Frage: Header finden und einbinden:

    @john-0
    Aber mir ist noch unklar, wie man geeignete Header findet.

    In dem man geeignete Literatur liest? Man kann natürlich auch die ISO Norm durchlesen. Die Drafts kann man kostenlos im Internet bekommen. Die offizielle Norm ist mittlerweile leider nicht mehr vergünstigt zu bekommen, man muss den vollen Preis zahlen – ohne nachzusehen müssten das über €200,- sein.

    Anderes Beispiel:
    Ich möchte nach einigen Sekunden den Bildschirm löschen

    Dafür gibt es die ncurses Library, die ist UNIX spezifisch so wie die Escape-Szequenz, die Dur hier nutzt.



  • Hallo,

    vielen Dank für Eure Antworten.
    Das mit Posix ist interessant, das hatte ich so gar nicht auf dem Schirm.

    Ich habe nun einen

    "Working Draft, Standard for Programming
    Language C ++"

    und schaue mir curses/ncurses.h an.
    Wenn ich das dann richtig verstehe, ist das genau was ich suche.
    Dies sind ja bei mir vorhanden.

    Nochmals vielen Dank!

    Gruß

    Piet


  • Mod

    Das ISO-Standarddokument ist nicht wirklich zum Lernen der Sprache. Das ist eher zum Fachsimpeln und Diskutieren exotischer Sonderfälle. Wenn du einfach nur eine Übersicht über die Sprache willst, die für Programmierer geschrieben ist, dann nimm eine Referenz, zum Beispiel cppreference.com oder www.cplusplus.com.



  • Die letzten Tage habe ich mich selbst darum bemüht ncursesw in einem Demo Programm zum Laufen zu bekommen. Leider ist die Doku für die wide Version nicht sonderlich gut. Es ist zwar jede Funktion sauber dokumentiert, aber es findet sich im Netz kaum etwas was korrekt beschreibt wie man die wide Version programmiert. Daher muss man sich die passenden Funktionen mühsam zusammensuchen. Falls es da Fragen gibt …


Anmelden zum Antworten