Rabu, 29 Juni 2016

Pertemuan 13

A.    Memindahkan Koordinat Pointer Mouse  

Koordinat pointer mouse dapat dipindahkan tanpa harus menggerak-gerakkan mouse secara manual. Untuk memindahkan posisi koordinat pointer mouse dapat digunakan interupsi 33 heksadesimal servis 4. Berikut ini adalah prosedur yang harus dilakukan untuk memindahkan pointer menggunakan interupsi 33 heksadesimal servis 4.
 Register AH harus bernilai 0.
 Register AL harus bernilai 4 heksadesimal.
 Register CX menentukan posisi baris pointer mouse.
 Register DX menentukan posisi kolom pointer mouse.
 Lakukan interupsi 33 heksadesimal.

Berikut ini adalah contoh program untuk mempraktekkan interupsi 33 heksadesimal servis 4. Simpan project contoh23.ide berikut ini pada direktori yang sama dengan file screen.cpp dan keyboard.cpp.

contoh23.cpp:
 #include <stdlib.h>
 #include <time.h> /* Prototype fungsi randomize dan rand */
 #include "screen.cpp"
 #include "keyboard.cpp"

 #define MOUSE_INT 0x33
 #define MOUSE_LEFT_CLICK 0x01

 #define USHORT unsigned short int

 UCHAR detectMouse(UCHAR *btn);
 void getMousePos(USHORT *row, USHORT *col, UCHAR *btn);
 void setMousePos(USHORT row, USHORT col);
 void showMouse(void);

 int main(void)
 {
 Screen *layar = new Screen();
 Keyboard *tombol = new Keyboard(layar);

 USHORT baris, kolom;
 UCHAR status, button, str[5];

 status = detectMouse(&button);

 layar->setMode(0x03);
 layar->setCursorPos(4, 14);
 tombol->hideCursor();

 if (!status)
 {
 layar->writeString("Mouse tidak siap! Tekan ENTER ...");
 tombol->getString(str, 0);

 delete tombol; delete layar;
 exit(EXIT_FAILURE);
 }

 layar->writeString("Klik kiri untuk berhenti.");
 showMouse(); /* Tampilkan pointer mouse */ 64

 randomize(); /* Inisialisasi angka random */

 while (TRUE)
 {
 baris = rand() % 480;
 kolom = rand() % 640;

 setMousePos(baris, kolom);
 getMousePos(&baris, &kolom, &button);

 if (button == MOUSE_LEFT_CLICK) break;
 }

 delete tombol; delete layar;
 return EXIT_SUCCESS;
 }

 UCHAR detectMouse(UCHAR *btn)
 {
 UCHAR state, button;

 asm mov ah, 0x00; /* Register AH = 0 */
 asm mov al, 0x00; /* Register AL = 0, AH:AL = 0:0 */
 asm int MOUSE_INT; /* Laksanakan interupsi 0x33 */
 asm mov state, al; /* Salin nilai AL ke state */
 asm mov button, bl; /* Salin nilai BL ke button */

 *btn = button;
 return state;
 }

 void getMousePos(USHORT *row, USHORT *col, UCHAR *btn)
 {
 USHORT x, y;
 UCHAR button;

 asm mov ah, 0x00; /* Register AH = 0 */
 asm mov al, 0x03; /* Register AL = 3, AH:AL = AX = 3 */
 asm int MOUSE_INT; /* Lakukan interupsi 0x33 */
 asm mov x, cx; /* Salin nilai register CX ke x */
 asm mov y, dx; /* Salin nilai register DX ke y */
 asm mov button, bl; /* Salin nilai reg. DL ke button */

 *row = y; *col = x;
 *btn = button;

 return;
 }

 void setMousePos(USHORT row, USHORT col)
 {
 asm mov ax, 0x0004; /* Register AX = 4 */
 asm mov cx, col; /* Salin nilai col ke register CX */
 asm mov dx, row; /* Salin nilai row ke register DX */
 asm int MOUSE_INT; /* Pindahkan posisi pointer mouse */

 return;

}

 void showMouse(void)
 {
 asm mov ah, 0x00; /* Register AH = 0 */
 asm mov al, 0x01; /* Register AL = 1, AH:AL = AX = 1 */
asm int MOUSE_INT; /* Tampilkan pointer mouse */

 return;
 }




Fungsi setMousePos pada program contoh23.cpp diatas digunakan untuk memindahkan pointer mouse. Fungsi setMousePos menerima parameter row dan col yang bertipe unsigned integer yang dikrimkan secara nilai. Parameter row digunakan untuk menentukan posisi vertikal pointer mouse, sedangkan parameter col digunakan untuk menentukan posisi horizontal mouse. Program contoh23.cpp baru berhenti ketika pengguna menekan tombol kiri mouse.

Tidak ada komentar:

Posting Komentar