Memasukan
String Menggunakan Keyboard
Setelah memahami cara
memasukan satu karakter melalui keyboard, maka pada sub
bab ini akan dipelajari
cara memasukan string menggunakan keyboard. Fungsi getKey dan
getSpecialKey langsung
mengembalikan nilai dari tombol yang ditekan tanpa menunggu
penekanan tombol ENTER dan
tidak menggeser posisi kursor ke sebelah kanan. Pada fungsi
untuk memasukan rangkaian
karakter berikut ini akan digunakan pustaka class screen.cpp
untuk mengetahui letak
kursor, memindahkan posisi kursor dan mencetak karakter.
Beberapa hal lain yang
harus diperhatikan pada fungsi untuk memasukan string
adalah sebagai berikut:
1. Tombol-tombol khusus
seperti Esc, F1 s.d F12, Fn, CTRL, ALT, Page Up, Page Down,
tombol tanda panah, Home,
End, Ins, Del dan Break tidak dapat ditampilkan dan tidak
dapat digunakan.
2. Tombol backspace akan
menghapus satu karakter disebelah kiri, jika karakter pertama
sudah terhapus maka tombol
tidak berfungsi.
3. Karakter yang bisa
dimasukan adalah karakter alphanumerik, simbol-simbol dan spasi.
Karakter tab akan dianggap
sebagai spasi.
4. Jumlah karakter yang
dapat dimasukan harus dibatasi. Tombol ENTER tidak akan
disimpan dan digunakan
sebagai tanda bahwa string telah selesai dimasukan.
5. String pada bahasa pemrograman
C/C++ adalah rangkaian karakter dalam bentuk
ASCIIZ (ASCII plus Zero
atau null terminated string).
Setelah memahami ide dasar
memasukan rangkaian karakter, project contoh13.ide
berikut ini akan
memberikan contoh bagaimana menerapkan ide tersebut menggunakan teknik
inline assembly. Project
ini akan menggunakan pustaka class screen.cpp, jadi simpanlah kode
program contoh13.cpp pada direktori yang sama
dengan screen.cpp.
CONTOH SCREEN CPP.13
#include <stdlib.h>
#include "screen.cpp"
#define KEY_INT 0x16
/* Nomor interupsi keyboard */
#define KEY_BACKSPACE 0x08
/* Tombol Backspace */
#define KEY_RETURN 0x0d
/* Tombol Enter */
#define KEY_TAB 0x09
/* Tombol Tab */
#define KEY_SPACE 0x20
/* Tombol spasi */
#define NULL 0x00 /* ASCII 0 */
#define TRUE 1
UCHAR *getString(Screen *scr, UCHAR
*str, UCHAR max);
int main(void)
{
Screen *layar = new Screen();
UCHAR str1[30];
UCHAR *str2;
layar->setMode(0x03);
layar->setAttribute(0x7C);//huruf
warna merah latar putih
layar->setCursorPos(5, 9);
layar->writeString("Ketikan
sebuah string:");
layar->setCursorPos(5, 32);
str2 = getString(layar, str1, 25);
layar->setCursorPos(6, 9);
layar->setAttribute(0x9);//huruf
warna biru
layar->writeString("String
yang Anda ketikan adalah");
layar->setCursorPos(6, 41);
layar->writeString(str1);
/* getKey */
asm mov ah, 0x00;
asm int KEY_INT;
delete layar; return EXIT_SUCCESS;
}
UCHAR *getString(Screen *scr, UCHAR
*str, UCHAR max)
{
UCHAR key = 0;
UCHAR i, x, y;
i = 0;
while (TRUE)
{
asm mov ah, 0x00;
asm int KEY_INT;
asm mov key, al;
if ((key == KEY_BACKSPACE) &&
(i > 0))
{
scr->getCursorPos(&y, &x);
scr->setCursorPos(y, --x);
scr->writeChar(KEY_SPACE);
*(str + i) = NULL; i--;
}
if ((key >= 32) && (key
<= 126) && (i < max))
{
scr->getCursorPos(&y, &x);
scr->writeChar(key);
scr->setCursorPos(y, ++x);
*(str + i) = key; i++;
}
if ((key == KEY_TAB) && (i
< max))
{
scr->getCursorPos(&y, &x);
scr->writeChar(KEY_SPACE);
scr->setCursorPos(y, ++x);
*(str + i) = KEY_SPACE; i++;
}
if (key == KEY_RETURN)
{
*(str + i) = NULL;
break;
}
if (i == max) *(str + i) = NULL;
}
return str;
}
Pada program contoh13.cpp, fungsi yang
digunakan untuk memasukan string adalah
fungsi getString. Fungsi
getString menerima tiga parameter, yaitu scr dengan tipe data Screen
yang dikirimkan secara
referensi, str dengan tipe data unsigned character yang dikirimkan
secara referensi dan
parameter max dengan tipe data unsigned character yang dikirimkan
secara nilai. Parameter
scr digunakan untuk mengetahui posisi kursor dan memindahkan posisi
kursor pada mode layar
yang digunakan serta menampilkan karakter yang diketikan melalui
keyboard. Parameter str
adalah pointer karakter yang digunakan untuk menunjukan alamat
memori dimana
karakter-karakter yang dimasukan melalui keyboard disimpan dalam memori.
Sedangkan parameter max
digunakan untuk menentukan banyaknya karakter yang bisa
dimasukan.


0 komentar:
Posting Komentar