Üye Kayıt Üye Giriş

Klavyeden Karakter Alan Fonksiyonlar


Klavyeden Karakter Alan Fonksiyonlar

 

Klavyeden tuş alma ile ilgili fonksiyonlar şunlardır; bu fonksiyonlar <curses.h> içerisindedir:
int getch(void);
int wgetch(WINDOW *win);
int mvgetch(int x, int y);
int mvwgetch(WINDOW *win, int x, int y);
int ungetch(int ch);
int has_key(int ch);


Bu fonksiyonlar default olarak enter tuşuna gereksinim duymazlar. Eğer nocbreak
fonksiyonu çağrılır ise yeniden cbreak fonksiyonu çağrılana kadar enter tuşuna gereksinim
duyulur. Bu fonksiyonlar default olarak basılan tuşu görüntülemektedir. Eğer echo
fonksiyonu çağrılır ise bir daha noecho fonksiyonu çağrılana kadar bu durum ortadan
kaldırılır.
/*cursesecho.c*/
#include <stdio.h>
#include <stdlib.h>
#include <curses.h>
int main(void)
{
WINDOW *win;
if ((win = initscr()) == NULL) {
fprintf(stderr, “Can not initialize curses..\n”);
exit(1);
}
cbreak();
noecho();
move(10, 10);
getch();
echo();
wmove(win, 0, 0);
getch();
endwin();
return 0;
}


Bu fonksiyonları geri dönüş değerleri özel tuşlar için bazı sembolik sabitler ile ifade
edilebilmektedir. Örneğin; KEY_F0 ya da KEY_HOME, KEY_ENTER gibi.basılan tuş
normal bir tuş ise; düşük anlamlı byte’inda ASCII kodu bulunmaktadır.
/*cursesKEY.c*/
#include <stdio.h>
#include <stdlib.h>
#include <curses.h>
int main(void)
{
WINDOW *win;
if ((win = initscr()) == NULL) {
fprintf(stderr, “Can not initialize curses..\n”);
exit(1);
}
move(10, 10);
ch = getch();
if (ch == KEY_F(1))
printw(“F1 key press..\n”);
else if (ch == KEY_F(2))
printw(“F2 key press..\n”);
else if (ch == KEY_HOME)
printw(“Home key press..\n”);
else
putchar(ch);
refresh(); // Önemli bir fonksiyon
endwin();
return 0;
}


Görüntünün Tazelenmesi ve refresh Fonksiyonu
Curses modelinde ekrana yazma yapan fonksiyonlar doğrudan görüntüyü ekranda
oluşturmazlar. Görüntü önce bellekte bir tamponda oluşturulur, refresh fonksiyonu çağrılınca
ekrana aktarılır. wrefresh fonksiyonu ise sadece bir pencereye özgü bu işi yapmaktadır.
Klavyeden giriş alan fonksiyonlar da kendi içerisinde refresh yapmaktadır.
Formatlı Yazdırma İşlemleri
printw printf fonksiyonunun curses versiyonudur.
printw cursor’ın bulunduğu yere yazar.
wprintw belli bir pencere için bu işlemi yapar.
mvprintw cursor’ı taşıyarak yazma işlemini yapar.
mvwprintw fonksiyonu özel bir pencere için cursor’ı taşıyarak yazma işlemi yapar.


Özellikli Yazdırma İşlemleri
Normal olarak yazdırma işleminde renk ya da özellik kullanılmaz. Ancak programcı isterse
yazdırma işlemini özellikli ya da renkli yapabilir. Genel olarak attron fonksiyonuyla bir
özellik set edilir ve o özellik attroff ile reset edilene kadar geçerli olur. attron ve attroff
fonksiyonlarının wattron ve wattroff biçimleri de vardır. Örneğin
attron(A_BOLD);
printw(“bold”);
attroff(A_BOLD);
printw(“not bold”);
refresh();
Renksiz özellikler şunlardır:
A_NORMAL
A_UNDERLINE
A_REVERSE
A_BLINK
A_BOLD
attron ve attroff belirli bir özelliği ekleyip çıkartmak için kullanılır. Özelliği tümden
değiştirmek için attrset yapmak gerekir.


Renkli Yazım
Bilindiği gibi bir terminal renkli olmak zorunda değildir ve eski terminallerin çoğu renksizdir.
Bu nedenle programcı önce has_colors fonksiyonu ile renk testi yapmalıdır. Örneğin;
if (has_colors() == FALSE) {
endwin();
exit(1);
}

Monitörün renkli olduğu tespit edildikten sonra start_color fonksiyonuyla temel
başlangıç işlemleri yapılmalıdır. Bundan sonra init_pair fonksiyonuyla şekil zemin
renkleri set edilir. Sonra da attron gibi fonksiyonlarla COLOR_PAIR makrosu kullanılarak
renkli yazım moduna geçilir.
int init_pair(short pair, short f, short b);
Fonksiyonun birinci parametresi rengin sayısal değeri, ikinci ve üçüncü parametreleri
sırasıyla şekil ve zemin renkleridir. Örneğin;
init_pair(1, COLOR_RED, COLOR_BLACK);
attron(COLOR_PAIR(1));


Formatsız Yazdırma Yapan Fonksiyonlar

Formatsız yazdırma yapan fonksiyonlar add ile isimlendirilmişlerse ekleme yaparlar, ins ile
isimlendirilmişlerse insert ederek yazarlar. Örneğin addch tek bir karakteri ezerek yazar.
Burada karakterin yanı sıra özellikler ile or’lama yapılabilir.
int addch(chtype ch);
Örneğin;
addch(ch | A_BOLD);
Şu versiyonları da vardır:
waddch
mvaddch
mvwaddch
Tek karakter yazan fonksiyonların insert versiyonları şunlardır:
insch
winsch
mvinsch
mvwinsch


Çerçeve Çizmek

Programcı box fonksiyonu ile çerçeve çizebilir. Ancak bu fonksiyonu kullanmak yerine ayrı
çerçeve fonksiyonları da yazılabilir.
int box(WINDOW *win, chtype verch, chtype horch);
box fonksiyonu yalnızca bir pencerenin çerçevesini çizer. Normal çerçeveler için border
fonksiyonu kullanılabilir.
Yeni bir pencere newwin fonksiyonu ile, bir pencere içerisinde başka bir pencere subwin
fonksiyonuyla açılır. scanf fonksiyonuna benzer scanw fonksiyonu vardır. Ayrıca curses
bulunan sistemlerde menu, form ve panel kütüphaneleri de bulunmaktadır. Form kütüphanesi
ekrandan string alan fonksiyonları barındırır. menu kütüphanesi menü açmaya yarar. Bunların
dışında ncurses fare kullanımını da desteklemektedir. getch fonksiyonu aynı zamanda fareye
basılıp basılmadığını da tespit edebilir. Eğer getch fonksiyonunun geri dönüş değeri
KEY_MOUSE ise tuşa basılmıştır, programcı da getmouse fonksiyonu ile farenin
pozisyonunu alabilir.

Bilgisayar Dershanesi Ders Sahibi;
Bilgisayar Dershanesi

Yorumlar

Yorum Yapabilmek İçin Üye Girişi Yapmanız Gerekmektedir.

ETİKETLER