Frage



  • hi

    escape ist die 27.. an dieser stelle wäre es auch interessant, in die konsole zu gehen und die conio.h (so sie im compilerinclude vorhanden) zu nutzen, bzw. die dort existierende funktion getch();

    ansonsten so:

    int ein;
    while (true){

    ein=getchar();
    if(ein==27)
    break;
    else
    continue;

    }



  • ich hab das jetzte aber anders geloest

    int c;
    while ((c = getch()) !=27 )
    printf("%i", c);

    gibt jetzt zurzeit immer die asci fuer die entsprechenen zahlen und laesst sich mit esc beenden

    allerdings hab ich jetzt ne ander frage und zwar wie komm ich ueber zeiger in den video ram (unter DOS) im text mode 3

    mfg

    BelborraS



  • und da du jetzt schon ein abtrünniger bist und getch verwendest (was kein c++ standard ist 😉 ) und dazu noch in den video ram und dazu noch unter dos 16 bit willst, würde ich dir raten, die frage im konsolenfaq zu stellen 😉



  • wie kann man denn in der faq fragen stellen?



  • /edit
    falsch gelesen und mich verschrieben 😉

    mein djgpp compiler kann übrigens dieses hier..

    #include <conio.h>
    
    void textmode(int _mode);
    
    Description
    Sets the text mode of the screen. _mode is one of the following: 
    
    LASTMODE 
    The text mode which was in effect before the last call to textmode(). 
    BW40 
    40-column black and white (on a color screen) 
    C40 
    40-color color. 
    BW80 
    80-column black and white (on a color screen) 
    C80 
    80-column color 
    MONO 
    The monochrome monitor 
    C4350 
    80-column, 43- (on EGAs) or 50-row (on VGAs) color 
    See section _set_screen_lines, for a more versatile method of setting text screen dimensions. 
    
    Portability 
    
    not ANSI, not POSIX
    

    was hast du für einen compiler? sowas kann wohl nur noch der borland.. sonst.



  • Thrend verschoben ins Konsolen Forum.



  • ich hab den Borland

    allerdings muss ich bis morjen zeiger und bitmanipulation koennen

    und deswegen wollte ich wissen wie mann mit hilfe von zeigern auf den videoramm

    kommt

    BelborraS



  • Hmm das geht wirklich nur unter 16bit-Programmen (Achtung: Die Win32-Konsole unterstützt dies nicht mehr).

    Also wenn du ein echtes DOS hast kannst du mit int86() Interrupts aufrufen - hier ist der Interrupt 10h beschrieben: http://www.datasource.de/programmierung/tab08_biosint10h.htm

    Ich glaube der ist zuständig für den VideoRAM.

    MfG SideWinder



  • hmmm wir hatten das mal inna schule und da ham wir irgentwie mit zeigern auf den videoram vom text mode 3 welcher inna adresse b8000 + die naechsten 4000 byte sitzen soll.

    mfg

    BelborraS

    P.s. und wie kann ich direkt eine adresse mit einem zeiger ansprechen ....



  • Also wenn du direkt Speicheradressen ansprechen willst, dann brauchst du dazu outp() und inp(). Aber Vorsicht! Du kannst damit auch ganz schönen Mist anstellen. Wie man die Funktionen benutzt kannst du dir mal in der FAQ ansehen unter COM-Ports ansteuern unter DOS (16 Bit). Hat zwar nichts mit dem Bildschirm zu tun, aber vielleicht hilfts ja. Obwohl ich trotzdem davon abraten würde, um es nochmal zu betonen, besonders als Einsteiger.

    Wenn du was mit Zeiger machen willst, dann spiel dich lieber mit Strings (Char-Vektoren) rum (z. B. bestimmte Stringfunktionen nachprogrammieren mithilfe von Zeigern). Wenn du was grafisches machen willst, dann benutz am besten eine Grafikbibliothek (unter Borland evtl. graphics.h oder allgemein vielleicht allegro).



  • also ich hab jetzte noch mal meinen tutor gefragt und wir hatten

    //Datei: fenster1.cpp
    //Demonstration des Ansprechens des DOS-Textbildspeichers
    #include <stdio.h>      //fr getchar
    #include <conio.h>      //fr clrscr
    #include <iostream.h>   //fr _fmemcpy
    
    void main()
    {
     const char ende[4]="ende";
     char z;
    
     long kopie[1000];
    
     void far *lptr;
     lptr = (void far *) ((long) (0xb800)<<16|0x0000);
    
    // lptr = (void far *) ((long) (0xb8000000);
    
     clrscr(); textmode(3);
    
     //Eingeben von Text, Abschluss mit ESC
     do {
      z=getche(); if (z==13) cprintf("\n");
     } while (z!=27);
    
     //Sichern des bisherigen Bildschirminhaltes
     _fmemcpy(kopie,lptr,sizeof(kopie));
     //Einschr„nken des Eingabebereiches auf ein kleines Fenster
     window(3,3,10,10); textbackground(7); textcolor(0); clrscr();
    
     //Eingeben von Text, Abschluss mit ESC
     do {
      z=getche(); if (z==13) cprintf("\n");
     } while (z!=27);
     //Eingabebereich = ganzer Bildschirm
     window(1,1,80,25); textbackground(0); textcolor(15); clrscr();
     //Wiederherestellen des ursprnglichen Bildschirminhaltes
     _fmemcpy(lptr,kopie,sizeof(kopie));
    
     getchar();
    }
    

    mfg

    BelborraS



  • Aha du speicherst also den Bildschirminhalt und gibst ihn danach wieder aus. Das funktioniert sicher unter DOS, aber bei neueren Betriebssystemen wirst du da Schwierigkeiten haben. Die geben dir nämlich nicht so einfach den Zugriff auf irgendwelchen Speicher frei.


Anmelden zum Antworten