Friday, May 19, 2017

Menampilkan Karakter dan Memindahkan Posisi Kursor Pada C++

hayy guys buat kalian yang ingin mengetahui bagaimana cara menampilkan karakter dan memindahkan posisi pada C++ simak ulasan berikut ini :

coding, C++, Pemograman, I LOVE YOU CODING

Menampilkan Karakter dan Memindahkan Posisi Kursor Pada C++

      Pada ulasan kali  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 (warna asal adalah 7).
>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.

      Untuk mengetahui posisi kursor dapat menggunakan interupsi 10 heksadesimal servis 03 heksadesimal. 
Berikut ini adalah prosedur untuk menjalakan interupsi 10 heksadesimal servis 03 heksadesimal:


>Register AH harus bernilai 3 heksadesimal.
>Register BH berisi nomor halaman tampilan, halaman pertama nilainya 0.


    Setelah interupsi dilakukan maka register DH berisi nomor baris dan register DL berisi nomor kolom. Sedangkan untuk memindahkan posisi kursor adalah dengan menggunakan interupsi 10 heksadesimal servis 02 heksadesimal. 
Berikut ini adalah prosedurnya:


>Register AH harus bernilai 2 heksadesimal.
>Register BH berisi nomor halaman tampilan, halaman pertama nilainya 0.
>Register DH berisi nomor baris (dimulai dari 0 sampai 24).
>Register DL berisi nomor kolom (dimulai dari 0 sampai btas akhir dikurangi 1).

Berikut ini adalah contoh program untuk menampilkan huruf A dan Z :
#include <conio.h>
#include <dos.h>
#include <stdlib.h>

#define VIDEO_INT 0x10
#define UCHAR unsigned char

void getCursorPos(UCHAR *y, UCHAR *x);
void setCursorPos(UCHAR y, UCHAR x);
void writeChar(UCHAR letter, UCHAR attr);

int main(void)
{
UCHAR baris, kolom;

getCursorPos(&baris, &kolom); // Baca posisi kursur
writeChar('A', 0x1f); // Cetak huruf A
setCursorPos(baris, ++kolom); // Pindahkan kursor
writeChar('Z', 0x6f); // Cetak huruf Z
setCursorPos(baris, ++kolom); // Pindahkan kursor
getch();

 return EXIT_SUCCESS;
}

void getCursorPos(UCHAR *y, UCHAR *x) // Baca posisi
{ // kursor
UCHAR row, col;

asm mov ah, 0x03; // Register AH = 3 heksadesimal
asm mov bh, 0x00; // Register BH = 0 heksadesimal
asm int VIDEO_INT; // Lakukan interupsi
asm mov row, dh; // Salin register DH ke row
asm mov col, dl; // Salin register DL ke col

*y = row; *x = col; // Salin row ke y, col ke x

return;
}

void setCursorPos(UCHAR y, UCHAR x) // Memindahkan
{ // Posisi kursor
asm mov ah, 0x02; // Register AH = 3 heksadesimal
asm mov bh, 0x00; // Register BH = 0 heksadesimal
asm mov dh, y; // Register DH = letak baris
asm mov dl, x; // Register DL = letak kolom
asm int VIDEO_INT; // Lakukan interupsi

return;
}

void writeChar(UCHAR letter, UCHAR attr) // Mencetak
{ // huruf
asm mov ah, 0x09; // Register AH = 9 heksadesimal
asm mov al, letter; // Register AL = hurufnya
asm mov bh, 0x00; // Register BH = 0 heksadesimal
asm mov bl, attr; // Register BL = warna huruf
asm mov ch, 0x00; // Register CH dan CL menentukan
asm mov cl, 0x01; // banyak pencetakan
asm int VIDEO_INT; // Lakukan interupsi

return;
 }
Berikut foto codingan di atas :
coding, C++, Pemograman

Dan berikut ini adalah hasil runing codingan contoh di atas :
Coding, C++, Runing, Pemograman


      Program diatas terdiri dari empat fungsi, yaitu fungsi main, getCursorPos, setCursorPos dan writeChar. Fungsi getCursorPos berguna untuk mengetahui posisi kursor, fungsi ini mengirimkan parameter y dan x secara acuan. Setelah pemanggilan fungsi, parameter x menyimpan posisi kolom kursor sedangkan parameter y menyimpan posisi baris kursor. Fungsi setCursorPos digunakan untuk memindahkan posisi kursor, fungsi ini mengirimkan parameter y dan x secara nilai. Parameter y digunakan untuk menentukan posisi baris sedangkan parameter x untuk menentukan posisi kolom kursor. Fungsi getCursorPos hampir mirip dengan fungsi wherex dan wherey milik Borland C++ atau Turbo Pascal, sedangkan fungsi setCursorPos hampir mirip dengan fungsi gotoxy.

      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.

      Setelah memahami cara di atas, di bawah ini kita akan membahas bagaimana cara menampilkan string (rangkaian karakter) dengan warna-warna karakternya. berikut mari kita simak !

      Program di bawah ini merupakan pengembangan dari program sebelumnya. Pada program di bawah ini terdapat 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.
#include <conio.h>
#include <dos.h>
#include <stdlib.h>

#define VIDEO_INT 0x10
#define UCHAR unsigned char

void getCursorPos(UCHAR *y, UCHAR *x);
void setCursorPos(UCHAR y, UCHAR x);
void writeChar(UCHAR letter, UCHAR attr);
void writeString(UCHAR *str, UCHAR attr);

int main(void)
{
UCHAR baris, kolom;

getCursorPos(&baris, &kolom); // Baca posisi kursor
writeChar('>', 0x1f); // Cetak karakter >
setCursorPos(baris, ++kolom); // Pindahkan kursor

writeString(” ahmad zakaria “, 0x4f);
getCursorPos(&baris, &kolom);
setCursorPos(baris, ++kolom);

writeChar('<', 0x1f); // Cetak karakter <
setCursorPos(baris, ++kolom); // Pindahkan kursor
getch();

return EXIT_SUCCESS;
}

void getCursorPos(UCHAR *y, UCHAR *x) // Baca posisi
{ // kursor
UCHAR row, col;

asm mov ah, 0x03; // Register AH = 3 heksadesimal
asm mov bh, 0x00; // Register BH = 0 heksadesimal
asm int VIDEO_INT; // Lakukan interupsi
asm mov row, dh; // Salin register DH ke row
asm mov col, dl; // Salin register DL ke col

*y = row; *x = col; // Salin row ke y, col ke x

return;
}

void setCursorPos(UCHAR y, UCHAR x) // Memindahkan
{ // Posisi kursor
asm mov ah, 0x02; // Register AH = 3 heksadesimal
asm mov bh, 0x00; // Register BH = 0 heksadesimal
asm mov dh, y; // Register DH = letak baris
asm mov dl, x; // Register DL = letak kolom
asm int VIDEO_INT; // Lakukan interupsi

return;
}

 void writeChar(UCHAR letter, UCHAR attr) // Mencetak
{ // huruf
asm mov ah, 0x09; // Register AH = 9 heksadesimal
asm mov al, letter; // Register AL = hurufnya
asm mov bh, 0x00; // Register BH = 0 heksadesimal
asm mov bl, attr; // Register BL = warna huruf
asm mov ch, 0x00; // Register CH dan CL menentukan
asm mov cl, 0x01; // banyak pencetakan
asm int VIDEO_INT; // Lakukan interupsi

return;
}

void writeString(UCHAR *str, UCHAR attr) // Mencetak
{ // string
UCHAR x, y;

getCursorPos(&y, &x); // Simpan posisi kursor

for (; *str != '\0'; str++) // Loop sampai ditemukan
{ // NULL
if (x > 79)
{ // Jika sudah sampai kolom
y++; x = 0; // ke-80, pindah baris dan
} // pindah ke kolom ke-1

setCursorPos(y, x++); // Pindahkan posisi kursor
writeChar(*str, attr); // Cetak per karakter
}

return;


 Berikut ini hasil foto codingan contoh di atas ;
coding, C++, pemograman

Dan berikut ini adalah hasil runing codingan contoh di atas :
coding, C++, runing, Pemograman

    Begitulah kiranya Menampilkan Karakter dan Memindahkan Posisi Kursor. Apa bila ada kekurangan saya mohon maaf .Wassalmualaikum Wr.Wb

Komentar spam dilarang
EmoticonEmoticon