ASCII Extended Character Set (set karakter ASCII perluasan) adalah karakter ASCII dengan kode atau nomor urut 128 sampai dengan 255 desimal. Umumnya set karakter perluasan ini digunakan agar tampilan program yang berbasis teks menjadi lebih menarik karena dapat digunakan untuk menampilkan bingkai, tabel, simbol-simbol khusus dalam aksara Yunani (seperti alpha, beta, gamma dan seterusnya) dan simbol-simbol khusus matematika (seperti integral, akar kuadrat dan pangkat dua). Gambar-gambar berikut ini menampilkan nomor urut serta karakter ASCII reguler dan perluasan.
Berikut ini adalah contoh program yang sangat sederhana untuk membuat sebuah bingkai. Program ini akan menggunakan fungsi writeChar, writeString, setCursorPos yang telah dibuat pada program sebelumnya. Simpan program berikut ini dengan nama file project contoh09.ide dan nama file kode program contoh09.cpp.
contoh09.cpp
1: #include <conio.h>
2: #include <dos.h>
3: #include <stdio.h>
4: #include <stdlib.h>
5:
6: #define VIDEO_INT 0x10
7: #define UCHAR unsigned char
8:
9: void setMode(UCHAR mode);
10: void getCursorPos(UCHAR *y, UCHAR *x);
11: void setCursorPos(UCHAR y, UCHAR x);
12: void writeChar(UCHAR letter, UCHAR attr);
13: void writeString(UCHAR *str, UCHAR attr);
14:
15: int main(void)
16: {
17: UCHAR baris, kolom;
18:
19: UCHAR pilih;
20:
21: setMode(3);
22: setCursorPos(4, 4); writeChar(213, 0x17);
23: setCursorPos(4, 74); writeChar(184, 0x17);
24: setCursorPos(20, 4); writeChar(192, 0x17);
25: setCursorPos(20, 74); writeChar(217, 0x17);
26:
27: for (baris = 5; baris < 20; baris++)
28: {
29: setCursorPos(baris, 4); writeChar(179, 0x17);
30: setCursorPos(baris, 74); writeChar(179, 0x17);
31: }
32:
33: for (kolom = 5; kolom < 74; kolom++)
34: {
35: setCursorPos(4, kolom); writeChar(205, 0x17);
36: setCursorPos(20, kolom); writeChar(196, 0x17);
37: }
38:
39: setCursorPos(4, 5); writeChar(181, 0x17);
40: setCursorPos(4, 6);
41: writeString("Bingkai dengan ASCII", 0x1f);
42: setCursorPos(4, 26); writeChar(198, 0x17);
43:
44: for (baris = 5; baris < 20; baris++)
45: {
46: for (kolom = 5; kolom < 74; kolom++)
47: {
48: setCursorPos(baris, kolom);
49: writeChar(0x20, 0x1e);
50: }
51: }
52:
53: setCursorPos(12, 25);
54: writeString("Akhiri program (Y/T)? [ ]", 0x1e);
55:
56: for (;;)
57: {
58: setCursorPos(12, 49);
59: pilih = getch();
60:
61: writeChar(pilih, 0x1e);
62:
63: if ((pilih == 'Y') || (pilih == 'y'))
64: break;
65: }
66:
67: return EXIT_SUCCESS;
68: }
69:
70: void setMode(UCHAR mode) // Mengubah mode
71: { // tampilan layar
72: asm mov ah, 0x00; // Register AH = 0
73: asm mov al, mode; // Register AL = mode
74: asm int VIDEO_INT // Lakukan interupsi
75:
76: return;
77: }
78:
79: void getCursorPos(UCHAR *y, UCHAR *x) // Baca posisi
80: { // kursor
81: UCHAR row, col;
82:
83: asm mov ah, 0x03; // Register AH = 3 heksadesimal
84: asm mov bh, 0x00; // Register BH = 0 heksadesimal
85: asm int VIDEO_INT; // Lakukan interupsi
86: asm mov row, dh; // Salin register DH ke row
87: asm mov col, dl; // Salin register DL ke col
88:
89: *y = row; *x = col; // Salin row ke y, col ke x
90:
91: return;
92: }
93:
94: void setCursorPos(UCHAR y, UCHAR x) // Memindahkan
95: { // Posisi kursor
96: asm mov ah, 0x02; // Register AH = 3 heksadesimal
97: asm mov bh, 0x00; // Register BH = 0 heksadesimal
98: asm mov dh, y; // Register DH = letak baris
99: asm mov dl, x; // Register DL = letak kolom
100: asm int VIDEO_INT; // Lakukan interupsi
101:
102: return;
103: }
104:
105: void writeChar(UCHAR letter, UCHAR attr) // Mencetak
106: { // huruf
107: asm mov ah, 0x09; // Register AH = 9 heksadesimal
108: asm mov al, letter; // Register AL = hurufnya
109: asm mov bh, 0x00; // Register BH = 0 heksadesimal
110: asm mov bl, attr; // Register BL = warna huruf
111: asm mov ch, 0x00; // Register CH dan CL menentukan
112: asm mov cl, 0x01; // banyak pencetakan
113: asm int VIDEO_INT; // Lakukan interupsi
114:
115: return;
116: }
117:
118: void writeString(UCHAR *str, UCHAR attr) // Mencetak
119: { // string
120: UCHAR x, y;
121:
122: getCursorPos(&y, &x); // Simpan posisi kursor
123:
124: for (; *str != '\0'; str++) // Loop sampai ditemukan
125: { // NULL
126: if (x > 79)
127: { // Jika sudah sampai kolom
128: y++; x = 0; // ke-80, pindah baris dan
129: } // pindah ke kolom ke-1
130:
131: setCursorPos(y, x++); // Pindahkan posisi kursor
132: writeChar(*str, attr); // Cetak per karakter
133: }
134:
135: return;
136: }
Hasil:
Tidak ada komentar:
Posting Komentar