DOS Maus Problem
-
Ich habe mir das FAQ durchgelesen und habe die FUnktionen in mein Prog integriert aber jetzt meldet der Compiler (BCB4.0) das er die struct REGS nicht kennt. HAb ich was Falsch gemacht?
int mouseInit () { union REGS regs; regs.x.ax = 0x00; int86(0x33,®s,®s); if(regs.x.ax != 0) return -1; else return regs.x.bx; }
COORD getCursorPos () { union REGS regs; regs.x.ax = 0x03; int86(0x33,®s,®s); COORD pos; pos.x = regs.x.cx; pos.y = regs.x.dx; return pos; }
[cpp]
struct COORD{
int x;
int y;
};
-
fogende Fehler:
[C++ Fehler] (206): E2315 'x' ist kein Element von 'REGS', weil der Typ nicht definiert ist..
[C++ Fehler] (207): E2268 Aufruf der undefinierten Funktion 'int86'.
[C++ Fehler] (209): E2315 'x' ist kein Element von 'REGS', weil der Typ nicht definiert ist..
[C++ Fehler] Minesweeper.cpp(219): E2450 Undefinierte Struktur 'REGS'.
[C++ Fehler] Minesweeper.cpp(219): E2449 Größe von 'regs' unbekannt oder Null.Das wiederholt sich n paar mal
-
Ich kenn deinen BCB v4.0 zwar nicht, schätze aber, daß er dir es nicht so einfach macht und einen Typ 'REGS' bereitstellt, der die Register abbildet. Und auch int86 unterstützt er offensichtlich nicht.
int mouseInit() { int resAX = 0; int resBX = 0; asm { xor AX, AX int 0x33 mov [resAX], AX mov [resBX], BX } return ( resAX != 0 ? -1 : resBX ); } COORD getCursorPos() { COORD pos; asm { mov AX, 0x03 int 0x33 mov [pos.x], CX mov [pos.y], DX } return pos: }
sollt's tun. Vorsicht, Code nicht getested! Um auf deine Variablen schreiben zu können, könnte es sein, daß du eine andere Methode als "[VarName]" verwenden musst (siehe Hilfe zum Compiler).
HIH
Greetz Swordfish
-
jetzt hab ich aber nochmal eine selten blöde frage: Wie merke ich ob und welche Maustaste gedrückt wurde???
-
Hat mein Source etwa ohne Modifikation funktioniert? *mir_auf_die_Schulter_klopf* *g*
Welchen Maustreiber verwendest Du denn? Es gibt meines Wissens welche von Microsoft, Logitech, ...
Sind ja nicht viele und alle aus den schönen alten DOS-Zeiten, desshalb belegen so ziemlich alle die gleichen Interrupts bzw. Funktionen. Welcher Interrupt u. Funktionsnummer es jedoch genau ist erfährst du jedoch entweder über die Doku des Treibers, über Google, oder eventuell in Ralf Brown's Interrupt List.
-
Fast ohne modifikation. (Strichpunkt bei return Anweisung vergessen)
THx für die Antwort
-
Ich verwende den Standart Maus Treiber und hab auch in der doku gefunden welche Interrupts ich ausfürhren muss Nur mein Problem ist das ich noch nie was mit Interrupts zu tun hatte und keine Ahnung habe wie ich überprüfe ob ein Inerrupt erfolgt ist.
-
ich schrieb:
int mouseInit() { // int resAX = 0; // int resBX = 0; int result = 0; asm { xor AX, AX int 0x33 // mov [resAX], AX // mov [resBX], BX is quatsch mov [result], AX } // return ( resAX != 0 ? -1 : resBX ); return result == -1 ? 0 : -1; // wirft jetzt -1 bei Fehler } // COORD getCursorPos() is auch Quark. int getCursorPos( COORD *pos ); { int x = 0, y = 0, flags = 0; asm { mov AX, 0x03 int 0x33 mov [x], CX mov [y], DX mov [flags], BX } pos->x = x; pos->y = y; return flags: // gibt nun 1 für linke, 2 für rechte und 3 für beide Maustasten zurück }
HIH
Greetz Swordfish