Algoritma & Pemrograman Lanjutan Extended Character
Algoritma & Pemrograman Lanjutan
Extended Character
Dengan memanfaatkan bahasa pemrograman C++ dan
kompilator Borland C++ 5.02 yang diharapkan mampu menggunakan bahasa
pemrograman C++ yang dapat memanipulasi perangkat keras komputer. Bahasa
pemrograman C++ merupakan bahasa pemrograman yang berorientasi objek, oleh karena
itu pembahasan pada makalah ini tidak hanya menggunakan fungsi-fungsi pustaka
yang dimiliki oleh Borland C++ 5.02 melainkan juga menggunakan struktur bahasa
pemrograman berorientasi objek itu sendiri seperti class dan lain-lain.
Pembahasan tentang teknik-teknik pengaksesan perangkat
keras komputer akan menggunakan beberapa cara, diantaranya adalah dengan
menggunakan fungsi-fungsi pustaka yang tersedia pada Borland C++ 5.02 dan
membuat fungsi-fungsi tersendiri menggunakan teknik inline assembly
memanfaatkan referensi arsitektur komputer Intel x86. Dengan memandang
perangkat keras komputer sebagai suatu objek, maka pemrograman akan diutamakan
pada pembuatan class yang memiliki atribut dan metode suatu objek. Contohnya
adalah objek layar monitor memiliki atribut banyak baris dan kolom, warna, karakter,
jenis tampilan dan memiliki metode mencetak karakter, mengubah posisi kursor, mengubah
jenis tampilan dan lain sebagainya.
1.
Menampilkan Karakter
Pada sub bab ini akan dibahas cara
menampilkan karakter menggunakan interupsi 10 heksadesimal servis 09
heksadesimal secara lebih mendalam. Untuk lebih jelasnya, berikut ini adalah
prosedur untuk menjalankan interupsi 10 heksadesimal servis 09 heksadesimal :
- Register AH berisi nilai 9
heksadesimal.
- Register AL berisi kode ASCII
dari huruf/karakter yang akan dicetak.
- Register BH berisi halaman
layar, halaman pertama nilainya 0.
- Register BL berisi nilai warna
huruf/karakter.
- Register CH dan CL menentukan banyaknya karakter pada AL akan dicetak.
Jika cuma 1 huruf, maka CH = 0 dan CL = 1.
Permasalahan mencetak karakter menggunakan interupsi 10
heksadesimal servis 09 heksadesimal adalah setelah karakter ditampilkan
dilayar, posisi kursor tidak berpindah ke kolom berikutnya. Akibatnya adalah
ketika karakter berikutnya akan ditampilkan maka karakter yang sebelumnya akan
tertimpa dengan karakter yang baru. Solusi untuk mengatasi permasalahan ini
adalah sebelum karakter ditampilkan kita harus mengetahui posisi kursor,
kemudian mencetak karakter tersebut dan mengubah posisi kursor setelah karakter
dicetak. Untuk melakukan hal tersebut maka kita harus tahu cara mengetahui
posisi kursor dan cara memindahkan posisi kursor.
Fungsi
writeChar digunakan untuk
menampilkan karakter, fungsi ini mengirimkan parameter letter dan attr secara
nilai. Parameter letter berisi karakter yang akan ditampilkan sedangkan
parameter attr menentukan atribut karakter (warna karakter dan warna dasar).
Fungsi ini tidak mengubah posisi kursor, oleh karena itu sesudah pemanggilan
fungsi, untuk memindahkan posisi kursor digunakan fungsi setCursorPos. Kemudian fungsi writeString,
fungsi ini menggunakan parameter str dan attr. Parameter str dikirimkan secara
acuan dan berisi rangkaian karakter (string) yang akan dicetak. Sedangkan
parameter attr dikirimkan secara nilai untuk menentukan warna string saat ditampilkan.
Fungsi writeString memanggil fungsi writeChar untuk mencetak rangkaian karakternya
satu per satu.
2.
ASCII
Extended Character Set
ASCII Extended Character
Set (set karakter ASCII perluasan) adalah karakter ASCII dengan kode atau nomor
urut 128 sampai dengan 255 desimal. Umumnya set karakter perluasan ini digunakan
agar tampilan program yang berbasis teks menjadi lebih menarik karena dapat
digunakan untuk menampilkan bingkai, tabel, simbol-simbol khusus dalam aksara
Yunani (seperti alpha, beta, gamma dan seterusnya) dan simbol-simbol khusus
matematika (seperti integral, akar kuadrat dan pangkat dua). Gambar-gambar
berikut ini menampilkan nomor urut serta karakter ASCII reguler dan perluasan.
3.
Membuat
Class untuk Operasi Layar pada Modus Teks
Setelah memahami cara
menggunakan fungsi int86 atau teknik inline assembly untuk melakukan operasi
pada layar monitor, maka kita dapat membuat sebuah class tersendiri untuk
melakukan operasi pada layar monitor. Class yang akan kita buat akan
mengenkapsulasi fungsi-fungsi setMode, getMode, writeChar, writeString,
setCursorPos, getCursorPos dan getCharAttr. Namun, agar class yang dibuat dalam
proses eksekusi program (runtime) bekerja lebih optimal maka semua fungsi
anggota (method) yang pada pembahasan sebelumnya dibuat menggunakan fungsi
standar int86, kali ini akan ditulis ulang menggunakan teknik inline assembly.
Dalam pembuatan class dapat dilakukan
tanpa membuat project terlebih dahulu, jadi cukup dilakukan dengan memilih menu
File kemudian pilih submenu New lalu pilih Text Edit dari IDE Borland C++ 5.02.
Class yang akan dibuat bernama Screen dan simpan kode program berikut ini
dengan nama screen.cpp. Kode program screen.cpp diatas bukanlah suatu program
untuk dikompilasi dan dijalankan, namun sebuah pustaka class (class library) yang
fungsinya hampir sama dengan penggunaan file header (.h). Pada kode program
screen.cpp terdapat beberapa fungsi anggota dari class Screen yang sebelumnya
tidak dibahas, yaitu setAttribute, setActivePage, getActivePage, setVisualPage,
getVisualPage dan cls.
Fungsi anggota setAttribute digunakan untuk menentukan warna huruf dan warna latar
(background color). Fungsi ini mengirimkan parameter bertipe unsigned character
yang menunjukan warna huruf dan latar yang akan ditampilkan. Sedangkan untuk
menentukan halaman halaman aktif digunakan fungsi setActivePage. Apa maksudnya halaman aktif? Halaman aktif adalah
halaman memori video dimana proses operasi pada layar dilakukan, seperti
memindahkan posisi kursor, menampilkan karakter, membersihkan layar dan
sebagainya.
Selain fungsi setActivePage dan getActivePage
untuk menangani nomor halaman layar, class Screen juga memiliki fungsi anggota
untuk mengatur halaman visual. Apa maksudnya halaman visual? Halaman visual
adalah nomor halaman dimana output program ditampilkan dan dapat terlihat oleh
pengguna. Lalu apakah perbedaan antara halaman aktif dengan halaman visual?
Suatu program dapat saja menyembunyikan proses penampilan output dengan cara
menuliskan karakter-karakter pada halaman layar pertama (halaman 0) tetapi
halaman visual yang ditampilkan adalah halaman kedua (halaman 1).
Karakter-karakter 28 yang dituliskan pada halaman 0 tersebut tidak akan
benar-benar muncul dilayar monitor sampai pengguna memrogram untuk memilih
halaman 0 sebagai halaman visual. Jika tidak, maka halaman 1 tetap akan
ditampilkan walaupun halaman 1 kosong. Untuk memilih halaman visual digunakan
fungsi setVisualPage dan untuk
mengetahui nomor halaman yang sedang dijadikan halaman visual digunakan fungsi
getVisualPage.
Berikut adalah program untuk menampilkan karakter dan ASCII Extended Character Set dengan warna dan latar yang berbeda :
#include <dos.h>
#include <stdlib.h>
#include <iostream.h>
#include <conio.h>
#include "screen.cpp"
int main(void)
{
UCHAR i, j;
Screen *layar = new Screen();
char loop, awal, coba;
awal:
clrscr();
layar->setMode(0x03);
layar->setActivePage(0);
layar->setAttribute(0x0d);
//Garis (bingkai) vertikal kiri dan kanan
halaman 1
for (i=7; i<=15; i++)
{
layar->setCursorPos(i,
25);
layar->writeChar(0x04);
layar->setActivePage(0);
layar->setCursorPos(i,
55);
layar->writeChar(0x04);
layar->setActivePage(0);
}
//Garis (bingkai) horizontal atas dan
bawah halaman 1
for (i=26; i<=54; i++)
{
layar->setCursorPos(7,
i);
layar->writeChar(0x04);
layar->setActivePage(0);
layar->setCursorPos(15,
i);
layar->writeChar(0x04);
layar->setActivePage(0);
}
layar->setMode(0x03);
layar->setActivePage(1);
layar->setAttribute(0x0c);
//Garis (bingkai) vertikal kiri dan kanan
halaman 2
for (i=7; i<=15; i++)
{
layar->setCursorPos(i,
25);
layar->writeChar(0x05);
layar->setActivePage(1);
layar->setCursorPos(i,
55);
layar->writeChar(0x05);
layar->setActivePage(1);
}
//Garis (bingkai) horizontal atas dan
bawah halaman 2
for (i=26; i<=54; i++)
{
layar->setCursorPos(7,
i);
layar->writeChar(0x05);
layar->setActivePage(1);
layar->setCursorPos(15,
i);
layar->writeChar(0x05);
layar->setActivePage(1);
}
layar->setMode(0x03);
layar->setActivePage(2);
layar->setAttribute(0x0e);
//Garis (bingkai) vertikal kiri dan kanan
halaman 3
for (i=7; i<=15; i++)
{
layar->setCursorPos(i,
25);
layar->writeChar(0x06);
layar->setActivePage(2);
layar->setCursorPos(i,
55);
layar->writeChar(0x06);
layar->setActivePage(2);
}
//Garis (bingkai) horizontal atas dan
bawah halaman 3
for (i=26; i<=54; i++)
{
layar->setCursorPos(7,
i);
layar->writeChar(0x06);
layar->setActivePage(2);
layar->setCursorPos(15,
i);
layar->writeChar(0x06);
layar->setActivePage(2);
}
layar->setMode(0x03);
layar->setActivePage(3);
layar->setAttribute(0x0b);
//Garis (bingkai) vertikal kiri dan kanan
halaman 4
for (i=7; i<= 15; i++)
{
layar->setCursorPos(i,
25);
layar->writeChar(0x03);
layar->setActivePage(3);
layar->setCursorPos(i,
55);
layar->writeChar(0x03);
layar->setActivePage(3);
}
//Garis (bingkai) horizontal atas dan
bawah halaman 4
for (i=26; i<=54; i++)
{
layar->setCursorPos(7,
i);
layar->writeChar(0x03);
layar->setActivePage(3);
layar->setCursorPos(15,
i);
layar->writeChar(0x03);
layar->setActivePage(3);
}
//text halaman 1
layar->setCursorPos(5, 33);
layar->setAttribute(0x9B);
layar->setActivePage(0);
layar->writeString(" KELOMPOK 4
");
layar->setMode(0x03);
layar->setCursorPos(11, 32);
layar->setAttribute(0x4E);
layar->setActivePage(0);
layar->writeString(" DARMA WIJAYA
");
//text halaman 2
layar->setCursorPos(10, 34);
layar->setAttribute(0x2E);
layar->setActivePage(1);
layar->writeString("SYARIPUDIN");
layar->setCursorPos(12, 32);
layar->setAttribute(0x3F);
layar->setActivePage(1);
layar->writeString("FAISYAL
ADITIA");
//text halaman 3
layar->setCursorPos(10, 34);
layar->setAttribute(0x4A);
layar->setActivePage(2);
layar->writeString("AL
FARISI");
layar->setCursorPos(12, 35);
layar->setAttribute(0x1B);
layar->setActivePage(2);
layar->writeString("TAUFIK");
//text halaman 4
layar->setCursorPos(10, 33);
layar->setAttribute(0x7C);
layar->setActivePage(3);
layar->writeString("ALGORITMA
&");
layar->setCursorPos(12, 32);
layar->setAttribute(0x5F);
layar->setActivePage(3);
layar->writeString("PEMROGRAMAN
II");
for(i=0; i<5; i++)
{
j=i%5;
layar->setVisualPage(j);
delay(2000);
}
clrscr();
coba:
cout<<endl<<endl<<endl<<endl<<cout<<endl<<endl<<endl<<endl;
cout<<"\t\t\t APAKAH INGIN DI
ULANG [Y/N]? ";cin>>loop;
if (loop=='y'||loop=='Y')
goto awal;
else if (loop=='n'||loop=='N');
else
{
cout<<endl;
cout<<"\t\t\t
MAAF, JAWABAN YANG ANDA MASUKAN SALAH "<<endl;
cout<<"\t\t\t
TEKAN ( Y ) UNTUK MENGULANG"<<endl;
cout<<"\t\t\t
TEKAN ( N ) UNTUK KELUAR"<<endl<<endl;
goto
coba;
}
delete layar;
return EXIT_SUCCESS;
}
Output
Demikian contoh program dari saya, tunggu materi-materi lainnya dari Sekelebat Ngampus . Terima kasih ^_^
Comments
Post a Comment