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.
1: #include <conio.h>
2: #include <dos.h>
3: #include <stdlib.h>
4:
5: #define VIDEO_INT 0x10
6: #define UCHAR unsigned char
7:
8: void getCursorPos(UCHAR *y, UCHAR *x);
9: void setCursorPos(UCHAR y, UCHAR x);
10: void writeChar(UCHAR letter, UCHAR attr);
11: void writeString(UCHAR *str, UCHAR attr);
12:
13: int main(void)
14: {
15: UCHAR baris, kolom;
16:
17: getCursorPos(&baris, &kolom); // Baca posisi kursor
18: writeChar('>', 0x1f); // Cetak karakter >
19: setCursorPos(baris, ++kolom); // Pindahkan kursor
20:
21: writeString(” Mencetak Tulisan “, 0x4f);
22: getCursorPos(&baris, &kolom);
23: setCursorPos(baris, ++kolom);
24:
25: writeChar('<', 0x1f); // Cetak karakter <
26: setCursorPos(baris, ++kolom); // Pindahkan kursor
27: getch();
28:
29: return EXIT_SUCCESS;
30: }
31:
32: void getCursorPos(UCHAR *y, UCHAR *x) // Baca posisi
33: { // kursor
34: UCHAR row, col;
35:
36: asm mov ah, 0x03; // Register AH = 3 heksadesimal
37: asm mov bh, 0x00; // Register BH = 0 heksadesimal
38: asm int VIDEO_INT; // Lakukan interupsi
39: asm mov row, dh; // Salin register DH ke row
40: asm mov col, dl; // Salin register DL ke col
41:
42: *y = row; *x = col; // Salin row ke y, col ke x
43:
44: return;
45: }
46:
47: void setCursorPos(UCHAR y, UCHAR x) // Memindahkan
48: { // Posisi kursor
49: asm mov ah, 0x02; // Register AH = 3 heksadesimal
50: asm mov bh, 0x00; // Register BH = 0 heksadesimal
51: asm mov dh, y; // Register DH = letak baris
52: asm mov dl, x; // Register DL = letak kolom
53: asm int VIDEO_INT; // Lakukan interupsi
54:
55: return;
56: }
57:
58: void writeChar(UCHAR letter, UCHAR attr) // Mencetak
59: { // huruf
60: asm mov ah, 0x09; // Register AH = 9 heksadesimal
61: asm mov al, letter; // Register AL = hurufnya
62: asm mov bh, 0x00; // Register BH = 0 heksadesimal
63: asm mov bl, attr; // Register BL = warna huruf
64: asm mov ch, 0x00; // Register CH dan CL menentukan
65: asm mov cl, 0x01; // banyak pencetakan
66: asm int VIDEO_INT; // Lakukan interupsi
67:
68: return;
69: }
70:
71: void writeString(UCHAR *str, UCHAR attr) // Mencetak
72: { // string
73: UCHAR x, y;
74:
75: getCursorPos(&y, &x); // Simpan posisi kursor
76:
77: for (; *str != '\0'; str++) // Loop sampai ditemukan
78: { // NULL
79: if (x > 79)
80: { // Jika sudah sampai kolom
81: y++; x = 0; // ke-80, pindah baris dan
82: } // pindah ke kolom ke-1
83:
84: setCursorPos(y, x++); // Pindahkan posisi kursor
85: writeChar(*str, attr); // Cetak per karakter
86: }
87:
88: return;
89: }
Hasil:
Program contoh07.cpp merupakan pengembangan dari program contoh06.cpp. Pada program contoh07.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.
Tidak ada komentar:
Posting Komentar