Menü in Konsolenanwendung



  • @elise: Gibt es bei deinem Link den ganzen Standard kostenlos?



  • ist nur ein entwurf... der reicht mir persönlich aus, aber ist nicht genau absolut der richtige. 😉



  • beispiel wie es geht:

    // D E F I N I T I O N E N ///////////////////////////////////////////////// 
    unsigned short *videomem;     // Pointer zum Video-Speicher 
    unsigned int pos;         // position, wird benutzt wie X Position 
    unsigned int off;         // offset, wird benutzt wie Y Position 
    
    // P R O T O T Y P E N ///////////////////////////////////////////////////// 
    void clear (void); 
    void write (char*); 
    void put (char); 
    
    // F U N K T I O N E N ///////////////////////////////////////////////////// 
    void clear (void) 
    { 
        for(unsigned int i = 0; i < (80*25); i++) 
        { 
            videomem[i] = (unsigned char) ' ' | 0x0700; 
        } 
        pos=0; 
        off=0; 
    } 
    
    void write(char *cp) 
    { 
        char *str = cp, *ch; 
    
        for (ch = str; *ch; ch++) 
        { 
            put(*ch); 
        } 
    
            // wird später ersetzt durch das hier 
    //    while((*cp) != 0) put(*(cp++)); 
    } 
    
    void put(char c) 
    { 
        if (pos >= 80) 
        { 
            pos=0 ; 
            off += 80 ; 
        } 
    
        if (off >= (80*25)) 
        { 
                // Später wird der Screen 1 runter gesetzt, doch 
                // jetzt reicht noch die clear funktion 
            clear(); 
        } 
    
        videomem[off + pos] = (unsigned char) c | 0x0700; 
        pos++; 
    } 
    
    // K E R N E L ///////////////////////////////////////////////////////////// 
    int main (void) 
    { 
            // Initialisiere den Videospeicher und setze Textpositionen 
        pos=0; off=0; 
        videomem = (unsigned short*) 0xb8000; 
    
        write ("Hallo! Ihr da!"); 
        write ("Ich bin hier!"); 
    
        return 0; 
    }
    

    Gefunden im Assemblerforum! Farben setzen ist auch sehr easy und es ist standard!



  • ist dort nicht ein fehler ??
    denn es leuft nicht koreckt.



  • so, und nun entgültig:

    für sowas brauchst du dann zusätzlich assemblercode 😉

    und der ist nun leider NICHT betriebssystemunabhängig.. also NICHT standard...

    sorry.. aber hier folgt folgendes:

    Compiling
    Writing a Kernel in C++
    
    Video.cpp and Kernel.cpp need to be compiled with a C++ compiler, remembering 
    
    to disable the above mentioned C++ features. The output from your C++ compiler 
    
    should be the object files Video.o and Kernel.o. Loader.asm also needs to be 
    
    assembled with an assembler. The output from your assembler should be the 
    
    object file Loader.o.
    
    An example of how to compile using DJGPP gxx and NASM.
    
    gxx -c Video.cpp -ffreestanding -nostdlib -fno-builtin -fno-rtti -fno-exceptions 
    gxx -c Kernel.cpp -ffreestanding -nostdlib -fno-builtin -fno-rtti -fno-exceptions
    nasm -f aout Loader.asm -o Loader.o 
    Linking
    
    Now we must link our object files into a flat binary which we shall call Kernel.bin.
    
    I recommend using a linker script, we will be making use of the linker script 
    
    in part 2. Here is an example of a linker script for LD.
    
    /* Link.ld */
    OUTPUT_FORMAT("binary")
    ENTRY(start)
    SECTIONS
    {
        .text 0x100000 :
        {
            code = .; _code = .; __code = .;
            *(.text)
            . = ALIGN(4096);
        }
    
        .data :
        {
            data = .; _data = .; __data = .;
            *(.data)
            . = ALIGN(4096);
        }
    
        .bss :
        {
            bss = .; _bss = .; __bss = .;
            *(.bss)
            . = ALIGN(4096);
        }
    
        end = .; _end = .; __end = .;
    } 
    
    Now we can use the linker script with LD,
    
    ld -T Link.ld -o Kernel.bin Loader.o Kernel.o Video.o
    

    du willst also ein os machen? welches betriebssystem? *g*

    http://www.invalidsoftware.net/os/?the_id=11

    das hat nun nix mit unserem thema zu tun.



  • Nun, ich habe mich falsch ausgedrückt, mit dem Standard alleine lässt sich selbstverständlich auch nicht das Menü machen, dass ich beschrieben habe.

    Ansonsten kommt eine Konsole durch den Compiler hinzu, die verwendet werden kann, aber nicht mehr zum Standard zählt.

    Man fasst zum Standard - natürlich fälschlicherweise - oftmals die Konsole auch mit hinzu.
    Da man davon ausgeht, dass die Konsole bei jedem Compiler mitgeliefert ist, nimmt man das als (falschen) Standard an, was jeder Compiler dabeihat und wirklich 100% portabel ist... denn es wird wohl kaum einen C++ Compiler geben, der ohne Konsole arbeitet, was sollen die Anwendungen denn dann sein(von Linux- Windows- etc. Fenster mal abgesehen)?

    Inwiefern der Code sonst richtig ist, weiß ich nicht, ich weiß nur, dass das nichts mehr mit dem Standard zu tun hat.

    MfG MAV



  • du bist dumm Mis2com! Such dir ein Hirn



  • na ja, iSak, damit hast du dich dann selber geschnitten.. aua 😉



  • @iSAK
    Ich habe dir schon mal gesagt (und auch begründet), dass dein gepostetes Programm kein Standard-C++ ist, du scheinst aber lernresistent zu sein.
    Das ist zwar schade, scheinbar aber nicht zu ändern.
    Wie auch immer:
    ich bitte dich darum, dein gequäke zumindest in diesem Forum zu unterlassen.
    Es ist nämlich überhaupt nicht im Sinne des Fragestellers, wenn hier ständig eine Diskussion über eine Sache stattfindet, die a) nicht viel mit dem Original-Thema zu tun hat und die b) völlig sinnlos ist, da die Fakten keine Diskussion zu lassen.



  • Zurück zum Thema:

    Einfache Menüs lassen sich auch auf der Konsole bauen (sofern die Zielplattform eine Textkonsole als Standardausgabe anbietet).

    Sobald Farben, Bildschirm löschen oder gar einfache Grafikfunktionen dazu kommen steht man auf dem Schlauch, bzw. kann es nicht mit Standard-Code realisieren.

    Beim basteln solch eines Menüs helfen cin und cout, sowie bei Tabellenkonstruktionen auch setw und ähnliches. Meist sehen die Menüs auf der Konsolen eher noch scheußlicher aus wenn irgendwelche plattformabhängigen Libs an der Darstellung beteiligt sind.


Anmelden zum Antworten