Minggu, 23 April 2017

Menampilkan Karakter dan Memindahkan Posisi Kursor (Part. 2)

Setelah memahami cara menampilkan karakter dengan warna karakternya, tentu kita akan bertanya bagaimana cara menampilkan string (rangkaian karakter) dengan warna-warna karakternya. Untuk menjawab pertanyaan ini marilah pelajari kode program berikut ini. Simpan project berikut ini dengan nama file contoh07.ide dan kode programnya dengan nama file contoh07.cpp.


contoh07.cpp
1:  #include <conio.h>   
2:  #include <dos.h>   
3:  #include <stdlib.h>   
4:    
5:  #define VIDEO_INT 0x10  
6:  #define UCHAR unsigned char  
7:    
8:  void getCursorPos(UCHAR *y, UCHAR *x);   
9:  void setCursorPos(UCHAR y, UCHAR x);   
10:  void writeChar(UCHAR letter, UCHAR attr);   
11:  void writeString(UCHAR *str, UCHAR attr);   
12:    
13:  int main(void)   
14:  {   
15:       UCHAR baris, kolom;   
16:    
17:       getCursorPos(&baris, &kolom); // Baca posisi kursor   
18:       writeChar('>', 0x1f); // Cetak karakter >   
19:       setCursorPos(baris, ++kolom); // Pindahkan kursor   
20:    
21:       writeString(” Mencetak Tulisan “, 0x4f);   
22:       getCursorPos(&baris, &kolom);   
23:       setCursorPos(baris, ++kolom);   
24:    
25:       writeChar('<', 0x1f); // Cetak karakter <   
26:       setCursorPos(baris, ++kolom); // Pindahkan kursor   
27:       getch();   
28:    
29:       return EXIT_SUCCESS;   
30:  }   
31:    
32:  void getCursorPos(UCHAR *y, UCHAR *x) // Baca posisi   
33:  { // kursor   
34:       UCHAR row, col;   
35:    
36:       asm mov ah, 0x03; // Register AH = 3 heksadesimal   
37:       asm mov bh, 0x00; // Register BH = 0 heksadesimal   
38:       asm int VIDEO_INT; // Lakukan interupsi   
39:       asm mov row, dh; // Salin register DH ke row   
40:       asm mov col, dl; // Salin register DL ke col   
41:    
42:       *y = row; *x = col; // Salin row ke y, col ke x   
43:    
44:       return;   
45:  }   
46:    
47:  void setCursorPos(UCHAR y, UCHAR x) // Memindahkan   
48:  { // Posisi kursor   
49:       asm mov ah, 0x02; // Register AH = 3 heksadesimal   
50:       asm mov bh, 0x00; // Register BH = 0 heksadesimal   
51:       asm mov dh, y; // Register DH = letak baris   
52:       asm mov dl, x; // Register DL = letak kolom   
53:       asm int VIDEO_INT; // Lakukan interupsi   
54:    
55:       return;   
56:  }   
57:    
58:  void writeChar(UCHAR letter, UCHAR attr) // Mencetak  
59:  { // huruf   
60:       asm mov ah, 0x09; // Register AH = 9 heksadesimal   
61:       asm mov al, letter; // Register AL = hurufnya   
62:       asm mov bh, 0x00; // Register BH = 0 heksadesimal   
63:       asm mov bl, attr; // Register BL = warna huruf   
64:       asm mov ch, 0x00; // Register CH dan CL menentukan   
65:       asm mov cl, 0x01; // banyak pencetakan   
66:       asm int VIDEO_INT; // Lakukan interupsi   
67:    
68:       return;  
69:  }   
70:    
71:  void writeString(UCHAR *str, UCHAR attr) // Mencetak   
72:  { // string   
73:       UCHAR x, y;   
74:    
75:       getCursorPos(&y, &x); // Simpan posisi kursor   
76:    
77:       for (; *str != '\0'; str++) // Loop sampai ditemukan   
78:       { // NULL   
79:            if (x > 79)  
80:            { // Jika sudah sampai kolom   
81:                 y++; x = 0; // ke-80, pindah baris dan   
82:            } // pindah ke kolom ke-1   
83:    
84:            setCursorPos(y, x++); // Pindahkan posisi kursor   
85:            writeChar(*str, attr); // Cetak per karakter  
86:       }  
87:    
88:       return;  
89:  }  

Hasil:



Program contoh07.cpp merupakan pengembangan dari program contoh06.cpp. Pada program contoh07.cpp terdapat fungsi writeString, fungsi ini menggunakan parameter str dan attr. Parameter str dikirimkan secara acuan dan berisi rangkaian karakter (string) yang akan dicetak. Sedangkan parameter attr dikirimkan secara nilai untuk menentukan warna string saat ditampilkan. Fungsi writeString memanggil fungsi writeChar untuk mencetak rangkaian karakternya satu per satu.

Tidak ada komentar:

Posting Komentar