A. 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.
contoh13.cpp:
#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 */ 35
#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->setCursorPos(5, 9);
layar->writeString("Ketikan sebuah string:");
layar->setCursorPos(5, 32);
str2 = getString(layar, str1, 25);
layar->setCursorPos(6, 9);
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.
B. Memasukan String Berupa Kata
Sandi
Pada aplikasi-aplikasi tertentu
yang membutuhkan autentikasi seperti nama pengguna dan kata sandi, biasanya
saat memasukan kata sandi akan ditampilkan karakter asteriks (*) sebagai
ganti karakter yang diketikan. Hal ini dimaksudkan agar orang lain yang tidak
berhak tidak bisa mencuri lihat kata sandi atau password yang sedang dimasukan.
Untuk membuat input password
seperti yang telah dijelaskan diatas, kita dapat memodifikasi fungsi getString
pada program contoh13.cpp. Project contoh14.ide berikut ini adalah contoh
penerapan ide untuk memasukan password. Project ini akan menggunakan pustaka
class screen.cpp, jadi simpanlah kode program contoh14.cpp pada direktori yang sama
dengan file screen.cpp.
contoh14
#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);
UCHAR *getPwdString(Screen *scr, UCHAR *pwd, UCHAR max);
int main(void)
{
Screen *layar = new Screen();
UCHAR *nama, nama2[16];
UCHAR *sandi, sandi2[21];
UCHAR kar = '*';
layar->setMode(0x03);
layar->setCursorPos(5, 9);
layar->writeString("Username:");
layar->setCursorPos(5, 19);
/* Memasukan username */
nama = getString(layar, nama2, 15);
layar->setCursorPos(6, 9);
layar->writeString("Password:");
layar->setCursorPos(6, 19);
/* Memasukan password */
sandi = getPwdString(layar, sandi2, 20);
layar->setCursorPos(8, 9);
layar->writeString("Selamat datang");
layar->setCursorPos(8, 24);
layar->writeString(nama);
layar->setCursorPos(9, 9);
layar->writeString("Password Anda adalah");
layar->setCursorPos(9, 30);
layar->writeString(sandi);
/* getKey */
asm mov ah, 0x00;
asm int KEY_INT;
delete layar; return EXIT_SUCCESS;
}
UCHAR *getString(Screen *scr, UCHAR *str, UCHAR max)
{
UCHAR key, i, x, y; 38
key = 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);
Fungsi getPwdString pada program contoh14.cpp diatas
adalah fungsi yang digunakan untuk memasukan string password. Perhatikanlah
pada baris 129 dan 138! Pada baris 129 ketika ada karakter alphanumerik dan
simbol yang diketikan maka yang akan ditampilkan adalah sebuah asteriks,
demikian juga ketika tombol tab yang ditekan. Perbedaan lain antara fungsi
getString dan getPwdString adalah karakter tab akan tetap disimpan sebagai tab
(ASCII 9) bukan sebagai spasi.


Tidak ada komentar:
Posting Komentar