Minggu, 30 April 2017

ASCII Extended Character Set

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