Unterbrechung eines Programmes



  • merker schrieb:

    Eventuell hilft ein neuer (alter) Maustreiber :
    http://ftp2.ua.freebsd.org/pub/msdos/drivers/mouse/hgxmou10.zip

    Ja hab ich schon ausprobiert, aber der funktioniert bei mir nicht.

    Daher möchte ich gerne wissen wie das mit den Interrupts funktioniert.





  • ok offensichtlich funktoniert hgx mouse doch bei mir allerdings kann ich die maus nur in einem gewissen bereich bewegen!

    bitte probiert es einmal aus!

    Hier noch Dateien die man benötigt(einfach ins gleiche verzeichnis kopieren wie die main.cpp und mouse.h)
    HGXMOUSE DOWNLOAD

    SVGA256.BGI

    //main.cpp
    #include <conio.h>
    #include <dos.h>
    #include <graphics.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    #include "mouse.h"
    
    void InitializeGraphMode(void);
    huge svgamode(void);
    int hgxInit(void);
    
    void main()
    {
       InitializeGraphMode();
    
       system("HGXMOUSE.EXE");
    
       hgxInit();
    
       InitMouse();
    
       HideM();
    
     	setfillstyle(SOLID_FILL, LIGHTGRAY);
     	bar(0,0,getmaxx(),getmaxy());
       ShowM();
       getch();
    
    }
    
    void InitializeGraphMode(void)
    {
      	int GraphDriver = DETECT;
      	int GraphMode;
      	int ErrorCode;
    
       installuserdriver("svga256", svgamode );
    
      	initgraph( &GraphDriver, &GraphMode, "" );
      	ErrorCode = graphresult();
    
      	if( ErrorCode != grOk )
       {
        	printf(" Graphik System Fehler: %s\n", grapherrormsg( ErrorCode ) );     
          getch();
      		exit( 1 );                                                   
    	}
    
    }
    
    huge svgamode(void)
    {
    	return 4;
    }
    
    int hgxInit(void)
    {
    	  union REGS regs;
    
    	  regs.x.ax = 0x4500;
    	  regs.x.si = getmaxx()+1;	// X resolution
    	  regs.x.di = getmaxy()+1;	// Y resolution
    	  regs.h.bl = 0;	// MODE_P8
    	  regs.x.dx = getmaxx()+ 1;	// Bytes per line
    	  int86(0x33, &regs, &regs);
    	  return ((regs.h.al == 0x45) ? 1 : 0);
    }
    
    //mouse.h
    #define NO_BUTTON    0
    #define BUTTON_LEFT  1
    #define BUTTON_RIGHT 2
    #define BUTTON_BOTH  3
    
    void GrenzenX(int x1,int x2);
    void GrenzenY(int y1,int y2);
    void InitM(void);
    void HideM(void);
    void ShowM(void);
    int GetMx(void);
    int GetMy(void);
    int MHit(void);
    void InitHand(void);
    
    REGS re;
    struct REGPACK reg;
    int MMode;
    
    void GrenzenX(int x1,int x2)
    {
    	re.x.ax=7;
      	re.x.cx=x1;
      	re.x.dx=x2;
      	int86(0x33,&re,&re);
    }
    
    void GrenzenY(int y1,int y2)
    { 	re.x.ax=8;
      	re.x.cx=y1;
      	re.x.dx=y2;
      	int86(0x33,&re,&re);
    }
    
    void InitMouse(void)
    {
    	reg.r_ax=0;
       intr(0x33,&reg);
    
      	reg.r_ax=1;
      	intr(0x33,&reg);
    }
    
    void HideM(void)
    {
    	reg.r_ax=2;
      	intr(0x33,&reg);
    }
    
    void ShowM(void)
    {
    	reg.r_ax=1;
      	intr(0x33,&reg);
    }
    int GetMx(void)
    {
    	reg.r_ax=3;
      	intr(0x33,&reg);
      	return(reg.r_cx);
    }
    
    int GetMy(void)
    { 	reg.r_ax=3;
      	intr(0x33,&reg);
      	return(reg.r_dx);
    }
    
    int MHit(void)
    {
    	reg.r_ax=3;
      	intr(0x33,&reg);
      	return(reg.r_bx);
    }
    


  • Habs zwar nicht ausprobiert, aber Du solltest nach "InitMouse ()" den Bereich noch einstellen :

    ... 
     InitMouse ();
    
     GrenzenX  (1,639); // horz : 640
     GrenzenY  (1,479); // vert : 480   ...oder wie auch immer :-)
    ...
    


  • merker schrieb:

    Habs zwar nicht ausprobiert, aber Du solltest nach "InitMouse ()" den Bereich noch einstellen :

    ... 
     InitMouse ();
    
     GrenzenX  (1,639); // horz : 640
     GrenzenY  (1,479); // vert : 480   ...oder wie auch immer :-)
    ...
    

    nö funktioniert nicht!



  • Was liefert "MOUSTEST.EXE" ?



  • moustest.exe ist nur zum testen der maus bei einer auswählbaren treiber und auflösung und daher unwichtig für mich


Anmelden zum Antworten