İnceleme

Yukarıdaki program ekrana "Meraha Dünya !!!" yazıp sonlanır. Bu program curses kipinin nasıl ilklendirileceğini, nasıl ekran değişikliği yapılacağını ve curses kipini nasıl sonlandırılacağını göstermektedir. Şimdi satır satır inceleyelim.

initscr() hakkında

initscr() uçbirimi curses kipinde ilklendirir. Bazı gerçekleştirmelerinde ekranı temizleyip boş bir ekran göstermektedir. Ekran üzerinde curses kullanarak bir değişiklik yapılacağında bu işlev ilk olarak çağrılmalıdır. Bu işlev curses sistemini ilklendirip şu anki pencere için (stdscr olarak isimlendirilen) ve bazı veri yapıları için bellekten yer ayırır. Bazı istisnai durumlarda bu işlev curses kütüphane veri yapıları için bellekten yer ayırırken yetersiz bellek yüzünden sekteye uğrayabilir.

Bu yapıldıktan sonra kendi curses ayarlarımınızı özelleştirmek için değişik ilklendirmeler yapabiliriz. Bu ayrıntılar daha sonra anlatılacaktır.

Gizemli refresh()

Sonraki satır "Merhaba Dünya !!!" dizgeını ekrana yazar. Bu işlev, veriyi stdscr olarak isimlendirilen pencerenin o anki (y,x) koordinatlarına yazması dışında bildiğiniz printf işlevine her yönüyle benzemektedir. Şu anki koordinatlarımız

0,0
olduğundan, dizge pencerenin sol tarafından itibaren yazılır.

Bu da bizi şu sihirli bildiğiniz refresh()'e getirmektedir. printw'yi çağırdığımızda veri, hayali ve henüz ekranda güncellenmemiş bir pencereye yazılır. printw'nin görevi bazı bayrakları ve veri yapılarını güncelleyerek stdscr'ye karşılık gelen ön bellek alanına veriyi yazmaktır. Bunu ekranda göstermek için, refresh()'i çağırarak curses sistemine içeriği ekrana boşaltmasını söylemeliyiz.

Bunun arkadasındaki felsefe programcının hayali ekran veya penreler üzerinde birden fazla güncelleme yapması ve bu güncelemelerden sonra ekranını tazelemesidir. refresh() pencereyi kontrol eder ve kontrol edilen kısmı günceller. Bu da performans ve büyük bir esneklik sağlamaktadır. Fakat bazen yeni başlayanlar için sinir bozudur. Yeni başlayanların yaptığı en temel hatalardan biri printw() sınıfı işlevleri kullanarak güncelleme yaptıktan sonra refresh()'i çağırmayı unutmalarıdır. Ben bile bazen eklemeyi unutuyorum :-)

endwin() hakkında

Ve son olarak curses kipini sonlandırmayı unutmayın. Aksi halde uçbiriminiz program sonlandıktan sonra garip davranabilir. endwin(), curses alt sistemi tarafından alınan bellek bölgesini onun veri yapılarını geri verir ve uçbirimi normal çalışma kipine döndürür. Bu işlev curses kipiyle çalışmanız bittikten sonra çağrılmalıdır.