  Ŀ
  Ŀ
                                                                          
            Mouse Kullanm ve QBASIC 4.x iin Mouse Ktphanesi          
                                                                          
  ٳ
                                                     Recep Tezkol           
  


 

   Assembly alt programlar da kullanan bu mouse ktphanesi, yazdnz
    programlarda kullanabileceiniz ekilde yazlmaya allmtr.



   AIKLAMALAR 



  FUNCTION RESETMOUSE%()
  

  DECLARE FUNCTION RESETMOUSE% ()

  mouse% = RESETMOUSE%
  IF mouse% > 0 THEN
     PRINT mouse%; " TUSLU MOUSE INSTALL EDiLMiS"
   ELSE
     PRINT "MOUSE INSTALL EDiLMEMiS"
  END IF


  ResetMouse% fonksiyonu, bir mouse srcs install edilip edilmediini,
  edilmise ka tulu olduunu ve mouse'u kullanma hazrlamaya yarar.

  Programnz iinde bir 'SHELL' komutu veya herhangi bir ekilde
  interrupt 21h'n 4B00h fonksiyonunu  kullanacak iseniz, bu komutu takiben
  RESETMOUSE% fonksiyonunu  kullanmanz gerekir.


  SUB SHOWMOUSE
  

  DECLARE SUB SHOWMOUSE

     SHOWMOUSE


  ShowMouse subrutini, mouse imlecinin ekranda grntlenmesini salar.


  SUB HIDEMOUSE
  

  DECLARE SUB HIDEMOUSE

     HIDEMOUSE


  ShowMouse subrutini, mouse imlecinin ekranda grntlenmesini iptal
  eder ama o anki mouse imlecini ekrandan silmez. Bu rutin, ekran
  ilemlerinden nce kullanlp, daha sonra ShowMouse ile mouse imlecinin
  aktif hale getirirsek her ekran ileminde imleci kaybetme gibi kt bir
  etkiyi ortadan kaldrrz.


  SUB GETTUSXY
  

  DECLARE SUB GETTUSXY (tus%, x%, y%)

   DO
    GETTUSXY B%, x%, y%
    IF B% = 1 THEN
       HIDEMOUSE
       PRINT "SOL TUSA BASILDI"
       SHOWMOUSE
       END IF
   LOOP


  GetTusXY rutini, mouse imlecinin pozisyonunu ve o an baslan tuu verir.
  TUS% deikeni ile aldmz baslan tu bilgisi mouse'nun tu saysna
  gre 2 veya 3 bit'liktir.

  1. bit sol tuu, 2.bit sa tuu, 3. bit ortadaki tuun
  durumunu rapor eder.

                          4    2   1
                        Ŀ
                        OrtaSaSol
                        
  Bu duruma gre TUS% deikeni
  Sol tua baslnca............ 1,
  Sa tua baslnca............ 2,
  Sol ve Sa tua baslnca..... 3,
  Orta tua baslnca........... 4,
  Sol ve Orta tua baslnca.... 5,
  Sa ve Orta tua baslnca.... 6,
  Sol,Sa ve Orta tua baslnca 7  olur.

  Mouse imlecinin yatay pozisyonu Y% deikeninde (0-632),dey pozisyonu
  X% deikeninde (0-192) dner. Bunu kullanm kolayl iin text ekranlara
  uyarlarsak

    x% = x% / 8 + 1'X%= (1-25)
    y% = y% / 8 + 1'Y%= (1-80)

  olacaktr.


  SUB GETPRESSXY
  

  DECLARE SUB GETPRESSXY (tus%, BASILAN%, x%, y%)

     B% = 0 'Sol tu

   DO
    GETTUSXY B%, Bas%, x%, y%
    IF Bas% = 1 THEN
       HIDEMOUSE
       PRINT "SOL TUSA BASILDI X:"; x%; " Y:"; y%
       SHOWMOUSE
    END IF
   LOOP


  Bu rutin ile nceden bildirilen bir tuun baslmas durumunda BASILAN%
  deikeniyle 1  ve X% ile Y% 'de mouse imlecinin o anki pozisyonunu
  dndrr.

  Baslmas beklenen tu iin;

    Sol tus 0,
    Sa tus 1,

  orta tu 2 deeri verilir.


  SUB GETRELEASEXY
  

  DECLARE SUB GETRELEASEXY (tus%, BIRAKILAN%, x%, y%)

    B% = 0 'Sol tu

    DO
     GETTUSXY B%, BIRAK%, x%, y%
     IF BIRAK% = 1 THEN
        HIDEMOUSE
        PRINT "SOL TUS BIRAKILDI X:"; x%; " Y:"; y%
        SHOWMOUSE
     END IF
    LOOP


  Bu rutin ile nceden bildirilen bir tuun braklmas durumunda BIRAKILAN%
  deikeniyle 1  ve X% ile Y% 'de mouse imlecinin o anki pozisyonunu
  dndrr.

  Braklmas beklenen tu iin;

    Sol tus 0,
    Sa tus 1,

  orta tu 2 deeri verilir.


  SUB SETPOSXY
  

  DECLARE SUB SETPOSXY (x%, y%)

  mlecin verilen pozisyona konumlanmasn salar.
  X% ve Y% 'nin normalde deerleri (0-192) ve (0-632) dir.
  Text ekrana uyarlamak iin aadaki ilemler yaplmaldr.

     X%=(1-25) ise
     x% = (x% - 1) * 8'> X%= (0-192)

     Y%=(1-80) ise
     y% = (y% - 1) * 8'> Y%= (0-632)


  SUB SETDUSEYSINIR
  

  DECLARE SUB SETDUSEYSINIR (YMIN%, YMAX%)

   SETDUSEYSINIR (5-1)* 8,(20-1) * 8

  Mouse imlecinin ekrandaki dusey hareketini verilen pozisyonlarda snrlar.


  SUB SETYATAYSINIR
  

  DECLARE SUB SETYATAYSINIR (XMIN%, XMAX%)

  SETDUSEYSINIR (5-1)* 8,(75-1) * 8

  Mouse imlecinin ekrandaki yatay hareketini verilen pozisyonlarda snrlar.


  SUB SETMOUSPEED
  

  DECLARE SUB SETMOUSPEED (DUSHIZ%, YATHIZ%)

  Mouse imlecinin ekrandaki yatay ve dsey hareketinin hzn belirler.


  SUB SETGRPMASK
  

  DECLARE SUB SETGRPMASK (TEPE%, SOL%, MASKOFS%, MASKSEG%)
  DECLARE FUNCTION Bin2Int! (x$)
  DIM mask(16, 1) AS INTEGER
      mask( 0, 0) = Bin2Int("0011111111111111")
      mask( 1, 0) = Bin2Int("0001111111111111")
      mask( 2, 0) = Bin2Int("0000111111111111")
      mask( 3, 0) = Bin2Int("0000001111111111")
      mask( 4, 0) = Bin2Int("0000011111111111")
      mask( 5, 0) = Bin2Int("0010011111111111")
      mask( 6, 0) = Bin2Int("0011001111111111")
      mask( 7, 0) = Bin2Int("1111111111111111")
      mask( 8, 0) = Bin2Int("1000011110000111")
      mask( 9, 0) = Bin2Int("1011011101111011")
      mask(10, 0) = Bin2Int("1011011101111111")
      mask(11, 0) = Bin2Int("1000011110000111")
      mask(12, 0) = Bin2Int("1011111111111011")
      mask(13, 0) = Bin2Int("1011111101111101")
      mask(14, 0) = Bin2Int("1011111110000011")
      mask(15, 0) = Bin2Int("1111111111111111")
      mask( 0, 1) = Bin2Int("1100000000000000")
      mask( 1, 1) = Bin2Int("1110000000000000")
      mask( 2, 1) = Bin2Int("1111000000000000")
      mask( 3, 1) = Bin2Int("1111110000000000")
      mask( 4, 1) = Bin2Int("1111100000000000")
      mask( 5, 1) = Bin2Int("1101100000000000")
      mask( 6, 1) = Bin2Int("1100110000000000")
      mask( 7, 1) = Bin2Int("0000000000000000")
      mask( 8, 1) = Bin2Int("0111100001111000")
      mask( 9, 1) = Bin2Int("0100100010000100")
      mask(10, 1) = Bin2Int("0100100010000000")
      mask(11, 1) = Bin2Int("0111100001111000")
      mask(12, 1) = Bin2Int("0100000000000100")
      mask(13, 1) = Bin2Int("0100000010000010")
      mask(14, 1) = Bin2Int("0100000001111100")
      mask(15, 1) = Bin2Int("0000000000000000")

  SCREEN 12
  TEPE% = 2
  SOL% = 3
  MASKOFS% = VARPTR(mask(0, 0))
  MASKSEG% = VARSEG(mask(0, 0))
  IF RESETMOUSE% = 1 THEN END
   SETGRPMASK TEPE%, SOL%, MASKOFS%, MASKSEG%
   SHOWMOUSE
  end


  FUNCTION Bin2Int (x$)
        x$ = RTRIM$(LTRIM$(x$))
        i% = LEN(x$)
         WHILE i% > 1
            IF MID$(x$, i%, 1) = "1" THEN tot& = tot& + (2 ^ ex&)
            ex& = ex& + 1: i% = i% - 1: WEND
        Bin2Int = tot&
  END FUNCTION


  Grafik ekranda mouse'un eklini yeniden tanmlanmasn salar.


  SUB SETTEXTMASK
  

  DECLARE SUB SETTEXTMASK (TIP%, D1%, D2%)

  SETTEXTMASK 0,&h6600,&h66ff


  Mouse cursorunu deitirmeye yarar.

  Cursor tipi, TIP% deikenine konan deerle belirlenir:

     TIP%=0 Software
     TIP%=1 Hardware

  TIP%=0 ise,
  cursor'n bulunduu noktadaki karakter ve nitelik bilgisi (bildiiniz gibi
  text ekran belleinde ilk bayt karakterin ascii kodu ikinci bayt o karaktere
  ait renk bilgisi bulunur.Nitelik bilgisi ile karaktere ait attrib'i
  kastedilmitir.)

  D2%'nin ierii ile AND'lenir ve D1%'nin ierii ile XOR 'lanr.

  TIP%=1 ise,
  D2% cursor'n ilk satrn,D1% son satrn ierecek ekilde verilirse
  Cursor istenilen bykle getirilir.


                                --------*--------