Contoh 7.
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 contoh07.ide dan kode programnya dengan nama file
contoh07.cpp.
#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('(', 0x2f); // Cetak karakter Tutup Kurung (
setCursorPos(baris, ++kolom); // Pindahkan kursor
writeString(" DIMAS BAGASKARA ", 0x4f); //Warna Dasar Merah
getCursorPos(&baris, &kolom);
setCursorPos(baris, ++kolom);
writeChar(')', 0x2f); // Cetak karakter Buka Kurung )
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;
}
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 contoh07.ide dan kode programnya dengan nama file
contoh07.cpp.
#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('(', 0x2f); // Cetak karakter Tutup Kurung (
setCursorPos(baris, ++kolom); // Pindahkan kursor
writeString(" DIMAS BAGASKARA ", 0x4f); //Warna Dasar Merah
getCursorPos(&baris, &kolom);
setCursorPos(baris, ++kolom);
writeChar(')', 0x2f); // Cetak karakter Buka Kurung )
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;
}
Comments
Post a Comment