Rabu, 03 Mei 2017

CONTOH SCREEN CPP.13

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

Template by:

Free Blog Templates