Terminalgröße betriebssystemunabhängig ermitteln



  • Hallo zusammen,

    ich möchte mir gerade ein Terminalprogramm bauen, welches auf allen Plattformen laufen sollte. Das man den Quellcode auf der jeweiligen Plattform neu kompilieren muss ist mir klar 😉

    Nun stehe ich vor der "Herausforderung" die Größe (Höhe und Beite in Zeichen) des Terminals zu ermitteln.
    Das möchte ich gerne, um das Terminal ein bisschen zu designen: Hintergrundfarben, etc..

    Wie kann man sowas machen ohne ein Framework zu benutzen (möchte es lernen).

    TIA



  • Hi!
    Am einfachsten ist es, wenn du die Bibliotheken der entsprechenden Betriebssysteme benutzt und deren Funktionen mit bedingter Kompilierung einbindest.

    // Es wird ein Linuxprogramm ...
    #define LINUX 
    
    #ifdef LINUX
    SetForegroundColor (int color)
    {
    // Linuxfunktionen
    }
    #endif
    
    #ifdef WINDOWS
    SetForegroundColor (int color)
    {
    // Windowsfunktionen
    }
    #endif
    
    #ifdef ETC_OS
    SetForegroundColor (int color)
    {
    //
    }
    #endif
    
    int main()
    {
    // Betriebssystemunabhängiger Aufruf durch bedingte Kompilierung.
    SetForegroundColor (255);
    ...
    


  • Hi Big Brother,

    Big Brother schrieb:

    Hi!
    Am einfachsten ist es, wenn du die Bibliotheken der entsprechenden Betriebssysteme benutzt und deren Funktionen mit bedingter Kompilierung einbindest.

    Danke für deinen Tipp, hatte mir auch schon sowas in der Art gedacht (mit make).
    Aber wie ermittel ich die Terminalgröße?



  • Für Windows findest du z.B. die Funktion GetConsoleScreenBufferInfo, eine Funktion der Console Functions.
    Dort ist die Terminalgröße in den Membern der Struktur
    CONSOLE_SCREEN_BUFFER_INFO gespeichert.
    Weiteres kannst du hier nachlesen:
    http://msdn.microsoft.com/en-us/library/ms682073(VS.85).aspx

    Für Linux gibt es die curses/ncurses Bibliothek, die Größe entnimmst du den Variablen LINES und COLS.
    http://en.wikipedia.org/wiki/Curses_(programming_library)

    Ebenfalls für Linux gibts die PDCurses, da sind es die Variablen PDC_COLS und PDC_LINES. PDCurses hat auch Funktionalitäten für Windows, DOS, OS/2 etc.
    http://pdcurses.sourceforge.net/

    Oder wie wärs mit dem Terminator?
    Ein cross platform terminal emulator, sieht ganz interessant aus:
    http://mpathirage.com/terminator-cross-platform-gpl-terminal-emulator-with-multiple-window-support/
    Davon könntest du dir den Code saugen und deinen Wünschen anpassen.


Anmelden zum Antworten