Rabu, 17 Mei 2017

Menampilkan Karakter dan Memindahkan Posisi Kursor pada C++

Menampilkan Karakter dan Memindahkan Posisi Kursor Pada C++

Program contoh project cpp001.cpp dan dan contoh project cpp002.cpp pada artikel sebelumnya merupakan contoh program untuk menampilkan karakter/huruf pada layar monitor. Pada artikel 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 batas akhir dikurangi 1).
Berikut ini adalah contoh program untuk menampilkan kata "KRISNAAJI" dengan warna dan warna huruf yang berwarna-warni. Simpan project berikut ini dengan nama file contoh project cpp006.ide dan nama file kode program contoh project cpp006.cpp:

*anda bebas menentukan nama penyimpanan sesuka anda
#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 letter, UCHAR attr);
void writeChar(UCHAR letter, UCHAR attr);

int main(void)
{

  UCHAR baris, kolom;

  getCursorPos(&baris, &kolom);
  writeChar('K', 0x1e);
  setCursorPos(baris, ++kolom);
  writeChar('R', 0xf2);
  setCursorPos(baris, ++kolom);
  writeChar('I', 0x43);
  setCursorPos(baris, ++kolom);
  writeChar('S', 0xe4);
  setCursorPos(baris, ++kolom);
  writeChar('N', 0xb5);
  setCursorPos(baris, ++kolom);
  writeChar('A', 0x76);
  setCursorPos(baris, ++kolom);
  writeChar('A', 0x67);
  setCursorPos(baris, ++kolom);
  writeChar('J', 0xd8);
  setCursorPos(baris, ++kolom);
  writeChar('I', 0xc9);
  setCursorPos(baris, ++kolom);
  getch();

  return EXIT_SUCCESS;
}

void getCursorPos(UCHAR *y, UCHAR *x)
{
  UCHAR row, col;

  asm mov ah, 0x03;
  asm mov bh, 0x00;
  asm int VIDEO_INT;
  asm mov row, dh;
  asm mov col, dl;

  *y = row; *x = col;

  return;
}

void setCursorPos(UCHAR y, UCHAR x)
{
  asm mov ah, 0x02;
  asm mov bh, 0x00;
  asm mov dh, y;
  asm mov dl, x;
  asm int VIDEO_INT;

  return;
}

void writeChar(UCHAR letter, UCHAR attr)
{
  asm mov ah, 0x09;
  asm mov al, letter;
  asm mov bh, 0x00;
  asm mov bl, attr;
  asm mov ch, 0x00;
  asm mov cl, 0x01;
  asm int VIDEO_INT;

  return;
}


Berikut ini adalah contoh codingan contoh project cpp006 yang sama seperti di atas:


Berikut ini adalah output atau hasil keluaran yang sudah di running:

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 menampilkan karakter dengan warna karakternya, tentu kita akan bertanya bagaimana cara menampilkan string (rangkaian karakter) dengan warna-warna karakternya. Untuk menjawab pertanyaan ini marilah pelajari kode program berikut ini. Simpan project berikut ini dengan nama file contoh project cpp007.ide dan kode programnya dengan nama file contoh project cpp007.cpp.

*anda bebas menentukan nama penyimpanan sesuka anda
#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);
  writeChar('>', 0x71);
  setcursorpos(baris, ++kolom);
  writeString("Krisna Aji", 0xe5);
  getcursorpos(&baris, &kolom);
  setcursorpos(baris, ++kolom);
  writeChar('<', 0x71);
  setcursorpos(baris,++kolom);
  getch();
  return EXIT_SUCCESS;
}
void getcursorpos(UCHAR *y, UCHAR *x)
{
  UCHAR row, col;
  asm mov ah, 0x03;
  asm mov bh, 0x00;
  asm int VIDEO_INT;
  asm mov row, dh;
  asm mov col, dl;
  *y = row:
  *x = col;
  return;
}
void setcursorpos(UCHAR y, UCHAR x)
{
  asm mov ah, 0x02;
  asm mov bh, 0x00;
  asm mov dh, y;
  asm mov dl, x;
  asm int VIDEO_INT;
  return;
}
void writeChar(UCHAR letter, UCHAR attr)
{
  asm mov ah, 0x09;
  asm mov al, letter;
  asm mov bh, 0x00;
  asm mov bl, attr;
  asm mov ch, 0x00;
  asm mov cl, 0x01;
  asm int VIDEO_INT;
  return;
}
void writeString(UCHAR *str, UCHAR attr)
{
  UCHAR x, y;
  getcursorpos(&y, &x);
  for(; *str !='\0'; str++)
  {
    if(x > 79)
    {
      y++, x = 0;
    }
    setcursorpos(y, x++);
    writeChar(*str, attr);
  }
  return;
}

Berikut ini adalah contoh codingan contoh project cpp007 yang sama seperti di atas:



Berikut ini adalah output atau hasil keluaran yang sudah di running:

Program contoh project cpp007.cpp merupakan pengembangan dari program contoh project cpp006.cpp. Pada program contoh projcet cpp007.cpp 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.

Sekian tutotial dari saya mengenai Menampilkan Karakter dan Memindahkan Posisi Kursor Pada C++. Jika program di atas tidak mau running, coba anda periksa lagi codingan yang anda ketikan sebelumnya karena program Borland C++ ini sangat sensitive, jika salah sedikit dan tidak akan mau running. Jadi, harus teliti ya teman-teman dalam mengetikan program di Borland C++.

Related Posts

Menampilkan Karakter dan Memindahkan Posisi Kursor pada C++
4/ 5
Oleh

Subscribe via email

Like the post above? Please subscribe to the latest posts directly via email.

1 komentar:

Tulis komentar
avatar
6 Januari 2023 pukul 04.41

Apakah ada cara lain selain menggunakan library atau fungsi tersebut untuk menampilkan karakter dan memindahkan posisi kursor pada C++?

Reply