/* T„ss„ tiedostossa olevat funktiot kutsuvat Microsoft-yhteensopivien */ /* hiirien keskeytysfunktioita. */ #include #define VASEN 0 #define OIKEA 1 /* */ /* Aliohjelma alustaa hiiren toimintaa varten. Funktio palauttaa -1:n */ /* mik„li onnistui, muuten nollan. */ /* */ int alustahiiri() { struct REGPACK regs; regs.r_ax=0; intr(51,®s); return regs.r_ax; } /* */ /* Aliohjelma tekee hiirikursorin n„kyv„ksi. */ /* */ void naytahiirikursori() { struct REGPACK regs; regs.r_ax=1; intr(51,®s); } /* */ /* Aliohjelma poistaa hiirikursorin kuvaruudulta. T„t„ funktiota on */ /* kutsuttava aina, kun tulostetaan ruudulle jotakin, muuten tulostus */ /* saattaa seota. HUOM. Jos t„t„ on kutsuttu useammin kuin kerran ilman */ /* ett„ olisi v„lill„ kutsuttu funktiota naytahiirikursori, on sit„ */ /* kutsuttava my”s yht„ monta kertaa, jotta kursori saataisiin n„kyville.*/ /* */ void katkehiirikursori() { struct REGPACK regs; regs.r_ax=2; intr(51,®s); } /* */ /* Aliohjelma lukee hiiren paikan ja nappien tilan. */ /* Palauttaa: */ /* x hiiren x-koordinaatti ruudulla (pikseleiss„) */ /* y hiiren y-koordinaatti ruudulla (pikseleiss„) */ /* nappi1 1, mik„li hiiren vasen nappi on alhaalla, muuten 0 */ /* nappi2 1, mik„li hiiren oikea nappi on alhaalla, muuten 0 */ /* */ void hiirentila(int *x,int *y,int *nappi1,int *nappi2) { struct REGPACK regs; regs.r_ax=3; intr(51,®s); *x=regs.r_cx; *y=regs.r_dx; *nappi1=(regs.r_bx & 1); *nappi2=(regs.r_bx & 2) >> 1; } /* */ /* Aliohjelma siirt„„ hiiren kursorin haluttuun kohtaan kuvaruudulla. */ /* */ void siirrahiirikursori(int x,int y) { struct REGPACK regs; regs.r_ax=4; regs.r_cx=x; regs.r_dx=y; intr(51,®s); } /* */ /* Aliohjelma antaa tietoa hiiren napin painamisesta. */ /* Parametri tutkittava ilmoittaa kumpaa nappia halutaan tutkia: */ /* 0=vasen nappi,1=oikea nappi. */ /* Palauttaa: */ /* nappi1 1, mik„li hiiren vasen nappi on kutsuttaessa alhaalla, */ /* muuten 0 */ /* nappi2 1, mik„li hiiren oikea nappi on kutsuttaessa alhaalla, */ /* muuten 0 */ /* montako ilmoittaa, montako kertaa tutkittavaa nappia on painettu */ /* edellisen kutsun j„lkeen. */ /* x hiiren x-koordinaatti tutkittavan napin edellisen */ /* painalluksen tapahtumahetkell„. */ /* y hiiren y-koordinaatti tutkittavan napin edellisen */ /* painalluksen tapahtumahetkell„. */ /* */ void hiirenpainallukset(int tutkittava,int *nappi1,int *nappi2, int *montako,int *x,int *y) { struct REGPACK regs; regs.r_ax=5; regs.r_bx=tutkittava; intr(51,®s); *x=regs.r_cx; *y=regs.r_dx; *nappi1=(regs.r_ax & 1); *nappi2=(regs.r_ax & 2) >> 1; *montako=regs.r_bx; } /* */ /* Aliohjelma antaa tietoa hiiren napin vapauttamisesta. */ /* Parametri tutkittava ilmoittaa kumpaa nappia halutaan tutkia: */ /* 0=vasen nappi,1=oikea nappi. */ /* Palauttaa: */ /* nappi1 1, mik„li hiiren vasen nappi on kutsuttaessa alhaalla, */ /* muuten 0 */ /* nappi2 1, mik„li hiiren oikea nappi on kutsuttaessa alhaalla, */ /* muuten 0 */ /* montako ilmoittaa, montako kertaa tutkitta nappi on vapautettu */ /* edellisen kutsun j„lkeen. */ /* x hiiren x-koordinaatti tutkittavan napin edellisen */ /* vapautuksen tapahtumahetkell„. */ /* y hiiren y-koordinaatti tutkittavan napin edellisen */ /* vapautuksen tapahtumahetkell„. */ /* */ void hiirenvapautukset(int tutkittava,int *nappi1,int *nappi2, int *montako,int *x,int *y) { struct REGPACK regs; regs.r_ax=6; regs.r_bx=tutkittava; intr(51,®s); *x=regs.r_cx; *y=regs.r_dx; *nappi1=(regs.r_ax & 1); *nappi2=(regs.r_ax & 2) >> 1; *montako=regs.r_bx; } /* */ /* Aliohjelma m„„r„„ suorakaiteen muotoisen alueen, jolla hiirikursori */ /* saa liikkua. Vasen on alueen vasemman laidan x-koordinaatti, yla on */ /* alueen yl„reunan y-koordinaatti, oikea on alueen oikean laidan */ /* x-koordinaatti, ala on alueen alareunan y-koordinaatti. */ /* */ void hiirenalue(int vasen,int yla,int oikea,int ala) { struct REGPACK regs; regs.r_ax=7; regs.r_cx=vasen; regs.r_dx=oikea; intr(51,®s); regs.r_ax=8; regs.r_cx=yla; regs.r_dx=ala; intr(51,®s); } /* */ /* Aliohjelma m„„rittelee grafiikkatilassa toimivan hiirikursorin. */ /* */ void grhiirikursori(unsigned *kursori,int hotspotx,int hotspoty) { struct REGPACK regs; regs.r_ax=9; regs.r_bx=hotspotx; regs.r_cx=hotspoty; regs.r_dx=FP_OFF(kursori); regs.r_es=FP_SEG(kursori); intr(51,®s); } /* */ /* Aliohjelma m„„r„„ alueen, jolla hiirikursori poistetaan ruudulta, */ /* jos se siirret„„n kyseiselle alueelle. Kun hiirikursori liikutetaan */ /* pois t„lt„ alueelta, se ei tule automaattisesti n„kyviin, vaan on */ /* kutsuttava aliohjelmaa naytahiirikursori. */ /* */ void poista_alueeltakursori(int vasen,int yla,int oikea,int ala) { struct REGPACK regs; regs.r_ax=16; regs.r_cx=vasen; regs.r_dx=yla; regs.r_si=oikea; regs.r_di=ala; intr(51,®s); }