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

Popular posts from this blog

Rangkaian Lampu Flip Flop

PERANGKAT JARINGAN KOMPUTER

WEP, WAP, WAP2, MAC, HOTSPOT LOGIN, ADDRESS FILTERING