From: Dirk Zabel Date: Thu, 12 Jan 1995 06:58:16 +0100 To: djgpp AT sun DOT soe DOT clarkson DOT edu Subject: _go32_dpmi_simulate_int crashes Hi, I am trying to use the mouse in some text-mode program. As a first exercise, I have written a trivial program, which shows the mouse cursor, let me play around with the mouse keysm, hides the mouse again and finishes. Unfortuanetely every third time or so (not deterministic) the program crashes ON EXIT. Maybe someone has an idea what i'm doing wrong? My system runs on DOS 3.3 whith EMM386 (VCPI but no DPMI) and 4dos V4 as COMMAND.COM replacement. I'm still using DJGPP 1.11m5. As far as I know, I should use _go32_dpmi_simulate_int and not any older interrupt-functions if I want the program to run under DJGPP 2.x as well. Thanks for an help! -- Dirk dirk AT cs DOT tu-berlin DOT de ---------------- snip snap -------------------------------- #include #include #include #define ESC 27 #define MOUSE_LEFT 1 #define MOUSE_RIGHT 2 #define MOUSE_MIDDLE 4 /* * Mausetreiber initialisieren. * Liefert -1 wenn kein Maustreiber vorhanden, sonst Anzahl Maustasten. */ int init_mouse(void) { _go32_dpmi_registers regs; regs.x.ax = 0; _go32_dpmi_simulate_int(0x33, ®s); if (regs.x.ax == 0) return -1; else return regs.x.bx; } /* * Mauscursor einschalten */ void show_mouse(void) { _go32_dpmi_registers regs; regs.x.ax = 1; _go32_dpmi_simulate_int(0x33, ®s); } /* * Mauscursor ausschalten */ void hide_mouse(void) { _go32_dpmi_registers regs; regs.x.ax = 2; _go32_dpmi_simulate_int(0x33, ®s); } /* * Mauscursor ausschalten */ void request_mousestat(int * xp, int * yp, int * keyp) { _go32_dpmi_registers regs; regs.x.ax = 3; _go32_dpmi_simulate_int(0x33, ®s); *xp = regs.x.cx; *yp = regs.x.dx; *keyp=regs.x.bx; } int main(int argc, char ** argv) { int mousekeys; int running; int keys, x, y; mousekeys = init_mouse(); if (mousekeys == -1) printf("keine Maus gefunden\n"); else { printf("Maus gefunden, %d Tasten\n", mousekeys); show_mouse(); running=1; while (running) { if (kbhit() && getkey()==ESC) running=0; else { request_mousestat(&x, &y, &keys); if (keys & (MOUSE_LEFT | MOUSE_MIDDLE | MOUSE_RIGHT)) { printf("x=%d, y=%d, "); if (keys & MOUSE_LEFT) printf("LEFT "); if (keys & MOUSE_MIDDLE) printf("MIDDLE "); if (keys & MOUSE_RIGHT) printf("RIGHT"); printf("\n"); } ; } } hide_mouse(); } } ------------------------- snip snap ---------------------------------