berikut kode programnya :
#include
<stdlib.h>
#include
"screen.cpp"
#include
"keyboard.cpp"
#define
MOUSE_INT 0x33 /* Nomor interupsi mouse */
#define
MOUSE_LEFT_BUTTON 0x00 /* Pilihan tombol kiri */
#define
MOUSE_RIGHT_BUTTON 0x01 /* Pilihan tombol kanan */
#define
USHORT unsigned short int
UCHAR
detectMouse(UCHAR *btn);
USHORT
getButtonClick(UCHAR btn, USHORT *row,
USHORT
*col, USHORT maxclick);
void
showMouse(void); 69
int
main(void)
{
Screen
*layar = new Screen();
Keyboard
*tombol = new Keyboard(layar);
USHORT
jumlah, baris, kolom;
UCHAR
status, button, str[5];
status =
detectMouse(&button);
layar->setMode(0x03);
layar->setCursorPos(4, 14);
showMouse();
if
(!status)
{
layar->writeString("Mouse
tidak siap! Tekan ENTER ...");
tombol->getString(str,
0);
delete
layar; delete tombol;
exit(EXIT_FAILURE);
}
layar->writeString("Klik
kiri 5 kali untuk berhenti");
tombol->hideCursor();
jumlah =
getButtonClick(MOUSE_LEFT_BUTTON,
&baris,
&kolom, 5);
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;
}
USHORT
getButtonClick(UCHAR btn, USHORT *row,
USHORT
*col, USHORT maxclick)
{
USHORT
click, nclick, x, y;
click =
nclick = x = y = 0;
while
(nclick < maxclick)
return;
}
hasil outputnya :
Fungsi getButtonClick pada program contoh diatas digunakan
untuk mendeteksi penekanan tombol sebanyak beberapa kali. Parameter btn yang
bertipe unsigned character digunakan untuk menentukan tombol mouse (tombol kiri
atau kanan) yang akan dibatasi penekanannya. Parameter col dan row bertipe
unsigned integer yang dikirimkan secara referensi digunakan untuk mengetahui
posisi baris dan kolom pointer mouse ketika tombol mouse terakhir kali ditekan.
Parameter maxclick bertipe unsigned integer digunakan untuk menentukan banyak
penekanan tombol mouse.
cara
mengetahui pelepasan tombol mouse menggunakan interupsi 33 heksadesimal servis
6.
Kode program :
#include
<stdlib.h>
#include
"screen.cpp"
#include
"keyboard.cpp"
#define MOUSE_INT 0x33
/* Interupsi mouse */
#define
MOUSE_LEFT_BUTTON 0x00 /* Pilihan tombol kiri */
#define
MOUSE_RIGHT_BUTTON 0x01 /* Pilihan tombol kanan */
#define USHORT unsigned
short int
UCHAR detectMouse(UCHAR
*btn);
USHORT
getButtonRelease(UCHAR btn, USHORT *row,
USHORT *col, USHORT
maxrel);
void showMouse(void);
int main(void)
{
Screen *layar = new
Screen();
Keyboard *tombol = new
Keyboard(layar);
USHORT jumlah, baris,
kolom;
UCHAR status, button,
str[5];
status =
detectMouse(&button);
layar->setMode(0x03);
layar->setCursorPos(4, 14);
showMouse();
if (!status)
{
layar->writeString("Mouse
tidak siap! Tekan ENTER ...");
tombol->getString(str,
0);
delete layar; delete
tombol;
exit(EXIT_FAILURE);
}
layar->writeString("Lepas
tombol kanan 5x untuk berhenti");
tombol->hideCursor();
jumlah =
getButtonRelease(MOUSE_RIGHT_BUTTON,
&baris, &kolom,
5);
delete tombol; delete
layar;
return EXIT_SUCCESS;
}
return;
}
hasil outputnya adalah :
Fungsi getButtonRelease pada program digunakan untuk
mendeteksi pelepasan tombol sebanyak beberapa kali. Parameter btn yang bertipe
unsigned character digunakan untuk menentukan tombol mouse (tombol kiri atau
kanan) yang akan dibatasi pelepasannya. Parameter col dan row bertipe unsigned
integer yang dikirimkan secara referensi digunakan untuk mengetahui posisi
baris dan kolom pointer mouse ketika tombol mouse terakhir kali dilepas.
Parameter maxclick bertipe unsigned integer digunakan untuk menentukan banyak
pelepasan tombol mouse.
Membuat Class untuk Menggunakan Mouse
Setelah memahami dan mempraktekkan
teknik-teknik mengoperasikan mouse menggunakan teknik inline assembly,
maka pada sub bab ini akan dibuat pustaka class (class library) untuk
mengenkapsulasi fungsi-fungsi operasi mouse yang telah dipraktekkan pada
contoh-contoh program sebelumnya. Pustaka class ini akan disimpan dalam file
kode program mouse.cpp. Pustaka class.cpp akan bertindak seperti file
screen.cpp dan keyboard.cpp yang menyediakan objek untuk operasi mouse.
Perhatikan dan pelajari pustaka class mouse.cpp berikut ini, kemudian
jelaskanlah letak perbedaan fungsi-fungsi anggota pada class Mouse dengan
fungsi-fungsi pada contoh program sebelumnya.
Mouse.cpp:
/*
mouse.cpp
Class library untuk
menggunakan mouse.
Hak Cipta Pebi Yudha K.
Juni 2009
Disusun sebagai contoh
program
Modul Praktikum
Pemrograman C++ Lanjutan
AMIK BSI
*/
#define MOUSE_INT 0x33
/* Interupsi mouse */
#define MOUSE_READY
0xff /* Mouse siap digunakan */
#define MOUSE_NOT_READY
0x00 /* Mouse tidak siap */ 73
#define MOUSE_SUCCESS
0x1f /* Bisa dinonaktifkan */
#define MOUSE_FAILURE
0xff /* Tak bisa dinonaktifkan */
#define
MOUSE_LEFT_CLICK 0x01 /* Klik tombol kiri */
#define MOUSE_RIGHT_CLICK
0x02 /* Klik tombol kanan */
#define
MOUSE_LEFT_BUTTON 0x00 /* Pilih tombol kiri */
#define
MOUSE_RIGHT_BUTTON 0x01 /* Pilih tombol kanan */
#define UCHAR unsigned
char
#define USHORT unsigned
short int
class Mouse
{
private:
UCHAR button; /*
Banyaknya tombol mouse */
UCHAR isReady; /*
Status mouse siap/tidak */
UCHAR clickMode; /*
Klik kiri atau klik kanan */
USHORT x, y; /* Posisi
koordinat mouse */
/* Mengetahui posisi
koordinat pointer mouse */
void getMousePos(void);
public:
Mouse(void); /* Konstruktor
default */
~Mouse(void); /*
Destruktor default */
UCHAR getState(void);
/* Mouse siap/tidak siap */
UCHAR
getNumButton(void); /* Cek jumlah tombol mouse */
UCHAR
disableMouse(void); /* Nonaktifkan driver mouse */
void enableMouse(void);
/* Aktifkan driver mouse */
/* Mendeteksi penekanan
tombol mouse */
USHORT
getButtonClick(UCHAR btn, USHORT maxclick);
/* Mendeteksi pelepasan
tombol mouse */
USHORT
getButtonRelease(UCHAR btn, USHORT maxrel);
/* Mengetahui klik kiri
atau klik kanan setelah */
/* fungsi getMousePos
dijalankan */
UCHAR
getClickMode(void);
USHORT getX(void); /*
Posisi horizontal mouse */
USHORT getY(void); /*
Posisi vertikal mouse */
void hideMouse(void);
/* Menyembunyikan pointer */
void showMouse(void);
/* Menampilkan pointer */
/* Memindahkan pointer
mouse di posisi tertentu */
void setMousePos(USHORT
row, USHORT col);
/* Membatasi posisi
koordinat mouse di layar */
void
setMouseRegion(USHORT y1, USHORT x1,
USHORT y2, USHORT x2);
};
Mouse::Mouse(void)
{
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; /*
Deteksi mouse dan drivernya */
asm mov state, al; /*
Salin nilai AL ke state */
asm mov button, bl; /*
Salin nilai BL ke button */
this->isReady = state;
this->button =
button;
return;
}
Mouse::~Mouse(void)
{
return;
}
UCHAR
Mouse::getState(void)
{
return
this->isReady;
}
UCHAR
Mouse::getNumButton(void)
{
return this->button;
}
UCHAR
Mouse::disableMouse(void)
{
UCHAR state;
asm mov ah, 0x00; /*
Register AH = 0 */
asm mov al, 0x1f; /*
Register AL = 0x1f */
asm int MOUSE_INT; /*
Nonaktifkan driver mouse */
asm mov state, al; /*
Salin register AL ke state */
return state;
}
void
Mouse::enableMouse(void)
{
asm mov ax, 0x0020; /*
AH = 0, AL = 0x20 */
asm int MOUSE_INT; /*
Aktifkan driver mouse */
return;
}
USHORT
Mouse::getButtonClick(UCHAR btn, USHORT maxclick)
{
USHORT click, nclick,
x, y;
click = nclick = x = y
= 0;
while (nclick <
maxclick)
{
asm mov ah, 0x00; /*
Register AH = 0 */
asm mov al, 0x05; /*
Register AL = 5, AX = 5 */
asm mov bh, 0x00; /*
Register BH = 0 */
asm mov bl, btn; /* BL
= tombol yang dipilih */
asm int MOUSE_INT; /*
Deteksi status klik tombol */
asm mov click, bx; /*
Banyaknya penekanan tombol */
asm mov x, cx; /*
Posisi horizontal mouse */
asm mov y, dx; /*
Posisi vertikal mouse */
nclick += click;
}
this->y = y;
this->x = x;
return click;
}
USHORT
Mouse::getButtonRelease(UCHAR btn, USHORT maxrel)
{
USHORT rel, nrel, x, y;
rel = nrel = x = y = 0;
while (nrel <
maxrel)
{
asm mov ah, 0x00; /*
Register AH = 0 */
asm mov al, 0x06; /*
Register AL = 6, AX = 6 */
asm mov bh, 0x00; /*
Register BH = 0 */
asm mov bl, btn; /* BL
= tombol yang dipilih */
asm int MOUSE_INT; /*
Deteksi pelepasan tombol */
asm mov rel, bx; /*
Banyaknya pelepasan tombol */
asm mov x, cx; /*
Posisi horizontal mouse */
asm mov y, dx; /*
Posisi vertikal mouse */
nrel += rel;
}
this->y = y;
this->x = x;
return rel;
}
void
Mouse::getMousePos(void)
{
USHORT x, y;
UCHAR cmode;
asm mov ax, 0x0003; /*
AH = 0, AL = 3, AX = 3 */
asm int MOUSE_INT; /*
Deteksi posisi mouse */
asm mov x, cx; /*
Posisi horizontal mouse */
asm mov y, dx; /*
Posisi vertikal mouse */
asm mov cmode, bl; /*
Tombol yang diklik */
this->y = y;
this->x = x;
this->clickMode =
cmode;
return;
}
UCHAR
Mouse::getClickMode(void)
{
this->getMousePos();
return
this->clickMode;
}
USHORT
Mouse::getX(void)
{
return this->x;
}
USHORT
Mouse::getY(void)
{
return this->y;
}
void
Mouse::hideMouse(void)
{
asm mov ax, 0x0002; /*
AH = 0, AL = 2, AX = 2 */
asm int MOUSE_INT; /*
Sembunyikan pointer mouse */
return;
}
void
Mouse::setMousePos(USHORT row, USHORT col)
{
asm mov ax, 0x0004; /*
AH = 0, AL = 4, AX = 4 */
asm mov cx, col; /*
Posisi horizontal mouse */
asm mov dx, row; /*
Posisi vertikal mouse */
asm int MOUSE_INT; /*
Pindahkan pointer mouse */
return;
}
void
Mouse::setMouseRegion(USHORT y1, USHORT x1,
USHORT y2, USHORT x2)
{
asm mov ax, 0x0007; /*
Register AX = 7 */
asm mov cx, x1; /* CX =
batas horizontal minimal */
asm mov dx, x2; /* DX =
batas horizontal maksimal */
asm int MOUSE_INT; /*
Batasi posisi horizontal mouse */
asm mov ax, 0x0008; /*
Register AX = 8 */
asm mov cx, y1; /* CX =
batas vertikal minimal */
asm mov dx, y2; /* DX =
batas vertikal maksimal */
asm int MOUSE_INT; /*
Batasi posisi vertikal mouse */
return;
}
void
Mouse::showMouse(void)
{
asm mov ax, 0x0001; /*
AH = 0, AL = 1, AX = 1 */ 77
asm int MOUSE_INT; /*
Tampilkan pointer mouse */
return;
}
Setelah membuat pustaka class untuk operasi mouse,
berikut ini akan diberikan contoh cara menggunakan pustaka class mouse.cpp.
Objek yang harus diinstansiasikan dari pustaka class mouse.cpp adalah objek
Mouse. Program berikut ini adalah program untuk mendeteksi pilihan yang
ditampilkan dilayar. Pada layar monitor akan ditampilkan pilihan A, B, dan C.
Jika pengguna mengklik A atau B maka muncul pesan bahwa pengguna telah memilih
A atau B. Tetapi jika pengguna mengklik C maka program akan dihentikan.
Berikut kode program nya :
#include
<stdlib.h>
#include
"screen.cpp"
#include
"keyboard.cpp"
#include
"mouse.cpp"
int main(void)
{
Screen *layar = new
Screen();
Keyboard *tombol = new
Keyboard(layar);
Mouse *tikus = new
Mouse();
UCHAR str[5];
USHORT x, y;
layar->setMode(0x03);
layar->setCursorPos(4, 14);
tombol->hideCursor();
if
(tikus->getClickMode() == MOUSE_LEFT_CLICK)
{
x = tikus->getX() /
8; /* Periksa posisi horizontal */
y = tikus->getY() /
8; /* Periksa posisi vertikal */
}
delete layar; delete
tombol; delete tikus;
return EXIT_SUCCESS;
}
berikut hasil outputnya :
0 komentar:
Posting Komentar