Project #09 ( Membuat Bingkai )
#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("Bingkai
dengan ASCII", 0x1f);
setCursorPos(4, 26);
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)? [ ]", 0x1e);
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;
}
Komentar
Posting Komentar