B. 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.
Contoh 09.cpp:
#include
<conio.h>
#include
<dos.h>
#include
<stdio.h>
#include
<stdlib.h>
#define
VIDEO_INT 0x10
#define
UCHAR unsigned char
void
setMode(UCHAR mode);
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;
UCHAR pilih;
setMode(3);
setCursorPos(4,
4); writeChar(213, 0x17);
setCursorPos(4,
74); writeChar(184, 0x17);
setCursorPos(20,
4); writeChar(192, 0x17);
setCursorPos(20,
74); writeChar(217, 0x17);
for (baris =
5; baris < 20; baris++)
{
setCursorPos(baris,
4); writeChar(179, 0x17);
setCursorPos(baris,
74); writeChar(179, 0x17);
}
for (kolom =
5; kolom < 74; kolom++)
{
setCursorPos(4,
kolom); writeChar(205, 0x17);
setCursorPos(20,
kolom); writeChar(196, 0x17);
}
setCursorPos(4,
5); writeChar(181, 0x17);
setCursorPos(4,
6);
writeString("TEKOM
BSI PEMUDA", 0x1e);//warna kuning
setCursorPos(4,
22); writeChar(198, 0x17);
for (baris =
5; baris < 20; baris++)
{
for (kolom =
5; kolom < 74; kolom++)
{
setCursorPos(baris,
kolom);
writeChar(0x20,
0x1e);
}
}
setCursorPos(12,
25);
writeString("Akhiri
program (Y/T)? [ ]", 0x1f); //warna putih
for (;;)
{
setCursorPos(12,
49);
pilih =
getch();
writeChar(pilih,
0x1e);
if ((pilih
== 'Y') || (pilih == 'y'))
break;
}
return
EXIT_SUCCESS;
}
void
setMode(UCHAR mode) // Mengubah mode
{ //
tampilan layar
asm mov ah,
0x00; // Register AH = 0
asm mov al,
mode; // Register AL = mode
asm int
VIDEO_INT // Lakukan interupsi
return;
}
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;
}

0 komentar:
Posting Komentar