18.02.2013 Views

NCURSES ile Yazılım Geli¸stirme NASIL

NCURSES ile Yazılım Geli¸stirme NASIL

NCURSES ile Yazılım Geli¸stirme NASIL

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

2.2.2. Gizemli refresh()<br />

<strong>NCURSES</strong> <strong>ile</strong> Yazılım Geli¸stirme <strong>NASIL</strong><br />

Sonraki satır "Merhaba Dünya !!!" dizgeını ekrana yazar. Bu i¸slev, veriyi stdscr olarak isimlendir<strong>ile</strong>n pencerenin<br />

o anki (y,x) koordinatlarına yazması dı¸sında bildi˘giniz printf i¸slevine her yönüyle benzemektedir. ¸Su anki<br />

koordinatlarımız 0,0 oldu˘gundan, dizge pencerenin sol tarafından itibaren yazılır.<br />

Bu da bizi ¸su sihirli bildi˘giniz refresh()’e getirmektedir. printw’yi ça˘gırdı˘gımızda veri, hayali ve henüz<br />

ekranda güncellenmemi¸s bir pencereye yazılır. printw’nin görevi bazı bayrakları ve veri yapılarını güncelleyerek<br />

stdscr’ye kar¸sılık gelen ön bellek alanına veriyi yazmaktır. Bunu ekranda göstermek için, refresh()’i<br />

ça˘gırarak curses sistemine içeri˘gi ekrana bo¸saltmasını söylemeliyiz.<br />

Bunun arkadasındaki felsefe programcının hayali ekran veya penreler üzerinde birden fazla güncelleme yapması<br />

ve bu güncelemelerden sonra ekranını tazelemesidir. refresh() pencereyi kontrol eder ve kontrol ed<strong>ile</strong>n kısmı<br />

günceller. Bu da performans ve büyük bir esneklik sa˘glamaktadır. Fakat bazen yeni ba¸slayanlar için sinir bozudur.<br />

Yeni ba¸slayanların yaptı˘gı en temel hatalardan biri printw() sınıfı i¸slevleri kullanarak güncelleme yaptıktan<br />

sonra refresh()’i ça˘gırmayı unutmalarıdır. Ben b<strong>ile</strong> bazen eklemeyi unutuyorum :–)<br />

2.2.3. endwin() hakkında<br />

Ve son olarak curses kipini sonlandırmayı unutmayın. Aksi halde uçbiriminiz program sonlandıktan sonra garip<br />

davranabilir. endwin(), curses alt sistemi tarafından alınan bellek bölgesini onun veri yapılarını geri verir ve<br />

uçbirimi normal çalı¸sma kipine döndürür. Bu i¸slev curses kipiyle çalı¸smanız bittikten sonra ça˘grılmalıdır.<br />

3. Kanlı Ayrıntılar<br />

Basit bir curses programının nasıl yazılaca˘gını ¸su ana kadar gördük artık ayrıntılara inelim. Ekranda gördüklerinizi<br />

özele¸stirmeniz için pekçok i¸slev ve tam olarak kullanab<strong>ile</strong>ce˘giniz pekçok özellik vardır.<br />

˙I¸ste ba¸slıyoruz...<br />

4. ˙Ilklendirme<br />

Artık curses sisteminin ilklendirilmesi için initscr() i¸slevinin ça˘grılması gerekti˘gini biliyoruz. Bu ilklendirmeden<br />

sonra curses oturumuzu özelle¸stirmemizi sa˘glayan i¸slevler vardır. Curses sisteminden uçbirimi ham kipe<br />

ayarlamasını veya renkendirmeyi ilklendirmesini veya fareyi etkin kılmasını v.b. isteyebiliriz. initscr()’den<br />

hemen sonra ça˘grılan i¸slevler hakkında biraz konu¸salım:<br />

4.1. raw() ve cbreak()<br />

Normal durumda uçbirim sürücüsü satırsonu veya satırba¸sı karakteri <strong>ile</strong> kar¸sıla¸sana kadar kullanıcın yazdı˘gı<br />

karakterleri ön belle˘gine alır. Fakat bazı programlar kullanıcı yazar yazmaz karakterlerin eri¸s<strong>ile</strong>bilir olmasını ister.<br />

Yukarıdaki iki i¸slev satır önbelle˘gini etkisizle¸stirir. Bu iki i¸slev arasındaki fark duraklatma (CTRL–Z), kesme ve<br />

çıkı¸s (CTRL–C) için kullanılan kontrol karakterlerinin programa gönderilme ¸seklidir. raw() kipinde bu karakterler<br />

herhangi bir sinyal üretilmeden programa gönderilir. cbreak() kipinde ise bu karakterler herhangi bir di˘ger<br />

karakter gibi uçbirim sürücüsü tarafından algılanır. Kullanıcının neler yaptı˘gı üzerinde daha fazla hakimiyet<br />

sa˘gladı˘gıdan ki¸sisel olarak raw()’ı tercih ediyorum.<br />

4.2. echo() ve noecho()<br />

Bu i¸slevler kullanıcı tarafından yazılan karakterlerin uçbirim penceresine yansıtılmasını kontrol eder. noecho()<br />

bu yansıtmayı etkisizle¸stirir. Bunu yapmanızın sebebi yazılanı ekrana yansıtmada daha fazla kontrol sa˘glanması<br />

veya getch() v.b. i¸slevler <strong>ile</strong> kullanıcıdan girdi alınırken gereksiz karakter gösterimlerinin önüne geçmektir.<br />

http://belgeler.org Linux Kitaplı˘gı 13 / 90

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!