Tastatur-Interrupts lesen (cpp)



  • Kann man irgendwie die Tastatur-Interrupts (zB. Für Pfeil, Funktionstasten) abrufen???

    Folgendes Programm aus einem C-Buch sollte das machen... (funktioniert nicht!!!)

    #include<dos.h>
    #include<stdio.h>
    /* read the 16-bit scan-code */
    get_key(void) :-1: 
    {
    	union REGS r; :-1: 
    	r.h.ah=0; :-1: 
    	return int86(0x16,&r,&r); :-1: 
    }
    void main(void)
    {
    	union scan{
    		int c;
    		char ch[2];
    	}sc;
    	do
    	{
    		sc.c=get_key();
    		if(sc.ch[0]==0)
    			printf("Special key number %d",sc.ch[1]);
    		else
    		{
    			putchar(sc.ch[0]);
    		}
    	}
    	while(sc.ch[0]!='q');
    }
    


  • sieht mir auch wie sehr altes C aus... also erstmal musst du das für DOS compilieren und auch dort (bzw. in einer eingabeuafforderung) ausführen. dann sollte getkey auch einen rückgabe wert haben... außerdem solltest du AH mit 0x10 füllen, weil das die funktion zum lesen der taste ist... sicherheitshalber (vielleicht liegts am compiler) sollte getkey() nicht int86(...) zurückgeben, sondern nach einem aufruf von int86(...) ax aus deiner register-struktur... ansonsten gehört das hier ins DOS-Programmier-Forum!

    für getkey am besten folgende funktion verwenden:

    int getkey(void)
    {
    	int key;
    
    	_asm mov ah,10h
    	_asm int 16h
    	_asm mov key,ax
    
    	return(key);
    }
    


  • todo schrieb:

    int getkey(void)
    {
    	int key;
    	
    	_asm mov ah,10h
    	_asm int 16h
    	_asm mov key,ax
    
    	return(key);     // error: "Operanten unterschiedlicher Groesse"
    }
    

    "error C2443: Operanden unterschiedlicher Groesse"
    warum kommt diese Fehlermeldung?
    key ist ja eigendlich vom Typ int, ebenso der Rückgabewert von getkey(void);



  • Kompilierst du das wirklich mit einem 16bit-DOS-Compiler? Sieht mir spontan danach aus, als wäre ax nicht sizeof(int) groß.
    Allerdings habe ich von Assembly auch absolut keine Ahnung, mit dem Problem gehst du lieber in das entsprechende Forum 😉



  • Giebt es vielleicht eine andere Möglichkeit Tastatur-Interrupts ohne
    DOS zu kompilieren und auszuführen?


Anmelden zum Antworten