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