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.
CONTOH SCREEN CPP.14
#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 */
layar->setAttribute(0x9);//huruf
warna light blue
nama = getString(layar,
nama2, 15);
layar->setAttribute(0xC);//huruf
warna light red
layar->setCursorPos(6,
9);
layar->writeString("Password:");
layar->setCursorPos(6,
19);
/* Memasukan password */
sandi =
getPwdString(layar, sandi2, 20);
layar->setAttribute(0x9);//huruf
warna light blue
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;
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);
*(str + i) = KEY_SPACE;
i++;
}
if (key == KEY_RETURN)
{
*(str + i) = NULL;
break;
}
if (i == max) *(str + i) =
NULL;
}
return str;
}
UCHAR *getPwdString(Screen
*scr, UCHAR *pwd, UCHAR max)
{
UCHAR key, i, x, y;
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);
*(pwd + i) = NULL; i--;
}
if ((key >= 32)
&& (key <= 126) && (i < max))
{
scr->getCursorPos(&y,
&x);
scr->writeChar('*');
scr->setCursorPos(y,
++x);
*(pwd + i) = key; i++;
}
if ((key == KEY_TAB)
&& (i < max))
{
scr->getCursorPos(&y,
&x);
scr->writeChar('*');
scr->setCursorPos(y,
++x);
*(pwd + i) = KEY_TAB; i++;
}
if (key == KEY_RETURN)
{
*(pwd + i) = NULL;
break;
}
if (i == max) *(pwd + i) =
NULL;
}
return pwd;
}
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
35
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.


0 komentar:
Posting Komentar