Contoh 8. Membaca Karakter pada Posisi Kursor

Pada sub bab sebelumnya sudah dipelajari bagaimana cara menampilkan karakter dan string pada posisi kursor tertentu di layar. Pada sub bab ini akan dipelajari cara mengetahui nilai karakter dan warna karakter yang sudah tercetak dilayar. Seperti telah kita ketahui sebelumnya bahwa layar monitor pada mode teks normal terdiri dari suatu baris dan kolom. Dengan mengarahkan kursor pada baris dan kolom tertentu, dapat kita ketahui karakter/huruf yang tercetak dan warna dari karakter/huruf tersebut.
Nomor interupsi yang digunakan untuk mengetahui karakter dan warna karakter pada posisi tertentu adalah interupsi 10 heksadesimal servis 8 heksadesimal. Berikut ini adalah prosedur untuk menjalankan interupsi tersebut:
: Register AH harus bernilai 8 heksadesimal.
: Register BH berisi nomor halaman tampilan, halaman pertama nilainya 0.

Setelah interupsi dijalankan maka register AH akan berisi nilai warna dari karakter dan register AL akan berisi karakter/huruf yang ditampilkan. Berikut ini adalah contoh sederhana untuk membaca karakter pada posisi tertentu dilayar. Untuk menyederhanakan kode program, contoh berikut akan menggunakan fungsi standar gotoxy, textcolor, textbackground, cprintf dan int86. Simpan contoh program berikut ini dengan nama project contoh08.ide dan file kode program contoh08.cpp.

#include <conio.h>
#include <dos.h>
#include <stdio.h>
#include <stdlib.h>

#define VIDEO_INT 0x10 // Nomor interupsi video
#define UCHAR unsigned char         // Tipe data UCHAR

UCHAR getCharAttr(UCHAR *attr);

int main(void)
{
UCHAR huruf, warna;

   clrscr(); // Bersihkan layar
   gotoxy(10, 5); textcolor(14);                 // Warna karakter
   textbackground(4); // Warna dasar karakter
   cprintf(" Dimas Bagaskara ");         // Cetak string
   gotoxy(13, 5); // Pindah posisi kursor

   huruf = getCharAttr(&warna); // Baca nilai karakter

   gotoxy(1, 7);
   printf("Karakter pada baris 5 kolom 13: %c\n", huruf);
   printf("Warna\\attribut dari karakter : %#x\n", warna);
   getch();

   return EXIT_SUCCESS;
}

UCHAR getCharAttr(UCHAR *attr) // Fungsi untuk membaca
{ // karakter dan atributnya
union REGS in, out; // pada posisi kursor

   in.h.ah = 0x08; // AH = 8 heksadesimal
   in.h.bh = 0x00; // BH = 0, halaman layar
   int86(VIDEO_INT, &in, &out); // Lakukan interupsi

   *attr = out.h.ah; // Salin nilai AH di attr

   return out.h.al; // Kembalikan nilai AL
}


Comments

Popular posts from this blog

Contoh 6. Menampilkan Karakter dan Memindahkan Posisi Kursor

Contoh 2. Memanggil Interupsi BIOS dan DOS Menggunakan Teknik Inline Assembly