Senin, 13 Mei 2013

#include <conio.h>
#include <stdio.h>
#include <dos.h>
#include <stdlib.h>

#define VIDEO_INT 0x10
#define UCHAR unsigned char

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)
{
unsigned short int i, jeda;

setCursorPos(3,10);
writeString("Contoh Progress Bar", 0x0f); // Cetak String
setCursorPos(4,10);
writeString("-------------------", 0x0f); // Cetak String Garis
setCursorPos(5,10);
writeString("Waktu Jeda (maks. 3) : Detik", 0x0f); // Cetak String
setCursorPos(5,34);

scanf("%hu",&jeda);
jeda *= 100;

setCursorPos(8,10);
writeChar(0xda, 0x0f); // Cetak Sudut kiri atas
setCursorPos(8,34);
writeChar(0xbf, 0x0f); // Cetak sudut kanan atas
setCursorPos(10,10);
writeChar(0xc0, 0x0f); // Cetak sudut kiri bawah
setCursorPos(10,34);
writeChar(0xd9, 0x0f); // Cetak sudut kanan bawah
setCursorPos(9,10);
writeChar(0xb3, 0x0f); // Cetak garis tegak kiri
setCursorPos(9,34);
writeChar(0xb3, 0x0f); // Cetak garis tegak kanan

for(i=11; i<=33; i++)
{
setCursorPos(8,i);
writeChar(0xc4, 0x0f); // Cetak Character
setCursorPos(10,i); // Pindahkan kursor
writeChar(0xc4, 0x0f); // Cetak Character
}

for (i = 11; i <= 33; i++)
{
setCursorPos(9, i);
writeChar(0xdb,0x0e);
delay(jeda);
}

setCursorPos(9, 36);
writeString("SELESAI",0x0f);
getch();

return EXIT_SUCCESS;
}

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 sampaikolom
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;
}

#include <conio.h>
#include <stdio.h>
#include <dos.h>
#include <stdlib.h>

#define VIDEO_INT 0x10
#define UCHAR unsigned char

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)
{
unsigned short int i, jeda;

setCursorPos(3,10);
writeString("Contoh Progress Bar", 0x0f); // Cetak String
setCursorPos(4,10);
writeString("-------------------", 0x0f); // Cetak String Garis
setCursorPos(5,10);
writeString("Waktu Jeda (maks. 3) : Detik", 0x0f); // Cetak String
setCursorPos(5,34);

scanf("%hu",&jeda);
jeda *= 100;

setCursorPos(8,10);
writeChar(0xda, 0x0f); // Cetak Sudut kiri atas
setCursorPos(8,34);
writeChar(0xbf, 0x0f); // Cetak sudut kanan atas
setCursorPos(10,10);
writeChar(0xc0, 0x0f); // Cetak sudut kiri bawah
setCursorPos(10,34);
writeChar(0xd9, 0x0f); // Cetak sudut kanan bawah
setCursorPos(9,10);
writeChar(0xb3, 0x0f); // Cetak garis tegak kiri
setCursorPos(9,34);
writeChar(0xb3, 0x0f); // Cetak garis tegak kanan

for(i=11; i<=33; i++)
{
setCursorPos(8,i);
writeChar(0xc4, 0x0f); // Cetak Character
setCursorPos(10,i); // Pindahkan kursor
writeChar(0xc4, 0x0f); // Cetak Character
}

for (i = 11; i <= 33; i++)
{
setCursorPos(9, i);
writeChar(0xdb,0x0e);
delay(jeda);
}

setCursorPos(9, 36);
writeString("SELESAI",0x0f);
getch();

return EXIT_SUCCESS;
}

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 sampaikolom
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;
}