#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 showMouse(void);
int main(void)
{
Screen *layar = new Screen();
Keyboard *tuts = new Keyboard(layar);
USHORT baris, kolom;
UCHAR status, button, str[5];
status = detectMouse(&button);
layar->setMode(0x03);
layar->setCursorPos(4, 14);
tuts->hideCursor();
if (!status)
{
layar->writeString("Mouse tidak siap! Tekan ENTER ...");
tuts->getString(str, 0);
delete tuts; delete layar;
exit(EXIT_FAILURE);
}
layar->writeString("Deteksi Koordinat Pointer Mouse");
layar->setCursorPos(6, 14);
layar->writeString("X:");
layar->setCursorPos(7, 14);
layar->writeString("Y:");
layar->setCursorPos(9, 14);
layar->writeString("Klik kanan untuk berhenti");
showMouse();
while (TRUE)
{
/* Periksa koordinat dan penekanan tombol mouse */
getMousePos(&baris, &kolom, &button);
baris /= 8; kolom /= 8; /* kolom dan baris dibagi 8 */
gcvt((double) kolom, 2, str);
layar->setCursorPos(6, 17); layar->writeString(” ”);
layar->setCursorPos(6, 17); layar->writeString(str);
gcvt((double) baris, 2, str);
layar->setCursorPos(7, 17); layar->writeString(” ”);
layar->setCursorPos(7, 17); layar->writeString(str);
if (button == MOUSE_RIGHT_CLICK) break;
}
delete tuts; 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 = 0, AH:AL = AX = 0 */
asm int MOUSE_INT; /* Lakukan interupsi 0x33 */
asm mov x, cx; /* Salin CX ke x, posisi horizontal */
asm mov y, dx; /* Salin DX ke y, posisi vertikal */
asm mov button, bl; /* Status penekanan tombol */
*row = y; *col = x; *btn = button;
return;
}
void showMouse(void)
{
asm mov ah, 0x00;
asm mov al, 0x01;
asm int MOUSE_INT;
return;
}
Gambarnya Sebagai Berikut :
Penjelasannya :
Pada program contoh24.cpp fungsi yang digunakan untuk membatasi koodinat posisi mouse adalah fungsi setMouseRegion. Fungsi setMouseRegion menerima empat parameter bertipe unsigned integer yang dikirimkan secara nilai. Parameter y1 dan y2 digunakan untuk menentukan batas vertikal, sedangkan parameter x1 dan x2 digunakan untuk menentukan batas horizontal.
0 komentar:
Posting Komentar