Unterbrechung eines Programmes



  • proggingmania schrieb:

    Das hört sich stark nach Threads an !

    🙂 weil :

    Glock17L schrieb:

    Mein Compiler: Borland C++ 5.02 @ DOS

    (Falsches Forum -> MS-DOS)

    Glock17L schrieb:

    Für was ich das Ganze brauche?
    Also ich habe Probleme mit dem Maustreiber für BGI. Der funktioniert nur richtig mit den normalen BGI Treiber ...

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



  • merker schrieb:

    proggingmania schrieb:

    Das hört sich stark nach Threads an !

    🙂 weil :

    Weil dein Problem darauf hinausläuft, daß du zwei Sachen parallel zueinander erledigen willst - die Arbeit des Hauptprogramms und die ständige Überprüfung if(FunktionB()) FunktionA(); - so eine Konstellation schreit geradezu nach Multi-Threading.



  • Glock17L schrieb:

    Also ich habe Probleme mit dem Maustreiber für BGI.

    das hört sich sehr nach DOS an.
    unter DOS könnteste ja den maus-interrupt benutzen, dann hast du ja, was du willst: jedesmal wenn einer die maus bewegt, wird eine funktion aufgerufen...
    🙂



  • ... oder den Timer-Interrupt. Dann wird die Funktion "ständig" ausgeführt.
    🙂



  • 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