Brauche Funktion für C++



  • Hi,

    ich versuche in einem Dos/Windows/Linux programm die Textfarbe und die Texthintergrundfarbe zu ändern, das funzt aber nicht auf allen drei Systemen gleich. 😞 Mir hat man gesagt mit Assembler geht das bestimmt. Nun stimmt das? Wenn ja: hat schonmal jemand sowas gecodet?

    Also sollte so aussehen:

    void setTextColor (int color)
    {
        __asm {
        };
    }
    
    void setBackgroundColor (int color)
    {
        __asm {
        };
    }
    

    denn nur mit C++ geht es leider net 😞 Ich kenn mich mit Assembler auch nicht aus und für 2 Funktionen seh ich nicht ein das auch noch soweit zu lernen, das ich das mit den Farben hinbekomme. Ich erwarte auch nicht das ihr mir sowas codet. Ich wollte nurmal fragen ob jemand sowas schonmal gemacht hat und ob er mir die beiden Funktionen dafür geben könnte.

    Schon mal ein Dickes Danke im voraus
    Gruß



  • nachtrag:

    wenns geht auch sowas wie SetCursorPosition 🙂



  • Das geht auch mit assembler nicht.

    Windows, DOS und Linux sind grundverschieden, was TextFarbe u.ä. angeht.

    Wenn du eine Lösung für alle 3 Systeme haben willst, musst du mit Preprozessordirektiven arbeiten, also mit bedingter Compilierung.
    So in der Art:

    void setTextColor (int color)
    {
    #ifdef _LINUX
      // Linuxmethoden...
    #endif
    #ifdef _WINDOWS
      // Windowsfunktionen...
    #endif
    #ifdef _DOS
      // DOS-Methoden...
    #endif
    }
    


  • du könntest die pixel in ein array stopfen dass so groß ist wie der bildschrim den du zeichnen möchtest und dann das als textur mittels openGL über alles drüber zu zeichnen.
    zugegeben, ist nicht besonders fix, aber bei mir läuft das zuverlässig und opengl sollte überall da sein 🙂

    rapso->greets();



  • Das geht nicht portabel.

    Für MS-DOS bzw. die DOS-Konsole unter Windows verwendest du am Besten Escape Steuersequenzen. Hierzu sollte allerdings der ANSI.SYS Treiber geladen sein.

    Wenn jemand allerdings auf die Idee kommt, die Ausgabe deines Programmes in eine Datei umzuleiten, dann hat dieser jenige auch gleich noch deine Escape Steuersequenzen in seinem Logfile. Nicht gerade optimal, aber man könnte damit leben.

    Unter UNIX und Linux *könntest* du Escape Steuersequenzen verwenden. Allerdings ist es von mehrere Faktoren abhängig, ob dir überhaupt irgendwelche Steuersequenzen zur Verfügung stehen. Darüber hinaus, sind diese Steuersequenzen teilweise bis komplett anders zu denen, die du unter MS-DOS verwendest.

    Von einer Assembler Lösung ist abzuraten, da dies ausschliesslich an der Konsole funktioniert (ich meine jetzt *nicht* eine X11 Konsole wie z.B. xterm) und auch dann sind hierzu sicherlich "root" Rechte notwendig, damit du auf deiner Konsole direkt Interrupts aufrufen kannst.

    Unter UNIX und Linux verwendest du besser die curses bzw. ncurses Bibliotheken. Diese sind für die verschiedensten UNIX Betriebssysteme und für Linux verfügbar, so dass du schon einmal mit deinem ncurses-basierenden Programm einen grossteil an Betriebssystemen abdecken kannst. Lediglich für DOS+Windows musst du dir dann was einfallen lassen (Stichwort: Escape Steuersequenzen).



  • Original erstellt von Descartes:
    **Das geht nicht portabel.

    Für MS-DOS bzw. die DOS-Konsole unter Windows verwendest du am Besten Escape Steuersequenzen. Hierzu sollte allerdings der ANSI.SYS Treiber geladen sein.
    **

    Windows (NT/2k/XP/andere wieß ich nicht genau) hat eine ausführliche API für Konsolenprogramme die man auch gerne benutzen darf.

    Von einer Assembler Lösung ist abzuraten, da dies ausschliesslich an der Konsole funktioniert (ich meine jetzt *nicht* eine X11 Konsole wie z.B. xterm) und auch dann sind hierzu sicherlich "root" Rechte notwendig, damit du auf deiner Konsole direkt Interrupts aufrufen kannst.

    Man kann unter Assembler genauso grafische Anwendungen schreiben. Jedes C/C++-Programm wird am Ende auch nur in Assembler übersetzt. Und bis auf 0x80 (Linux) bzw. 0x2E/0x2F(WinNT/2k/XP) kann man auch als Admin/root keine Interrupts aufrufen. Da ändert auch Assembler nichts dran.

    Unter UNIX und Linux verwendest du besser die curses bzw. ncurses Bibliotheken. Diese sind für die verschiedensten UNIX Betriebssysteme und für Linux verfügbar, so dass du schon einmal mit deinem ncurses-basierenden Programm einen grossteil an Betriebssystemen abdecken kannst. Lediglich für DOS+Windows musst du dir dann was einfallen lassen (Stichwort: Escape Steuersequenzen).

    Warum nicht ncurses auf Windows? Cygwin hat da eine schöne ncurses-Bibliothek dabei. Da smacht das kompatibel schrieben etwas einfacher zumindest 🙂
    Alternative: http://pdcurses.sourceforge.net/ (Public Domain curses), verfügbar auf X11, Win32 und DOS.

    [ Dieser Beitrag wurde am 29.04.2003 um 17:24 Uhr von TriPhoenix editiert. ]


Anmelden zum Antworten