ncurses metin tabanlı konsollar için pencereler oluşturma ve kullanmaya, renklendirmeye, klavye ve fare tuşlarını kullanmaya imkan veren bir kütüphanedir.
Çoğu sistem yöneticisi komut satırında işlem yapacak şekilde betik dilleri yardımı ile bir çok uygulama geliştirmiştir. Php`nin ncurses kütüphanesi ile konsolda ara yüz kullanarak uygulama geliştirebilirsiniz. Diğer betik dillerine benzer ve ihtiyaca uygun bir çok fonksiyonu bulunmaktadır. Peki “bize getirisi ne olur?” diye düşünürsek.
- Ekranın her yerini isteğinize göre kullanmak.
- Pencereler oluşturmak ve onları yönetmek.
- 8 farklı renk kullanmak.
- Klavye ve fareyi kullanmak
Ncurses ile terminalde pencere oluştururken terminalin boyutundan bağımsız dinamik pencereler kullanabilirsiniz. Buna daha ilerde değineceğim.
Ncurses uygulamalarına dair bir ekran görüntüsü.

Şimdi ncurses fonksiyonlarına giriş yapalım.
Php de bir ncurses uygulaması ncurses_init(); fonksiyonu ile başlayıp ncurses_end(); fonksiyonu ile biter.
ncurses_init(); //ncurses başlat
ncurses_end(); //ncurses bitir
Şimdi örneğimize bakalım.
|
PHP- Kodu: |
|
|
|
|
#!/usr/local/bin/php <?php //ncurses_ornek1.php ncurses_init(); ncurses_addstr('Merhaba Ncurses :)'); ncurses_getch(); ncurses_end(); ?>
|
|
|
|
|
ncurses_addstr(); Fonksiyonu örnekte de görüldüğü gibi. İçine aldığı string i ekranda gösterir.
ncurses_getch(); Fonksiyonu ise bir tuşa basılana kadar bekler. Bunun yerine sleep(5); yazabilirsiniz bu sayede 5 saniye sonra kendiliğinden son bulacaktır.
Görüldüğü gibi php yi bir betik dili olarak kullandık. Bundan dolayı ncurses_ornek1.php dosyasının başına #!/usr/local/bin/php yani php nin yolunu tanıttık. Bu dosyayı kaydettikten sonra komut satırında ./ncurses_ornek1.php yazarsanız amacınıza ulaşmış olacaksınız.
Şimdi diğer bir örneğimize bakalım.
|
PHP- Kodu: |
|
|
|
|
#!/usr/local/bin/php<?php//ncurses_ornek2.phpncurses_init(); ncurses_border(0,0, 0,0, 0,0, 0,0); $ufake=ncurses_newwin(10,30,7,25); ncurses_wborder($ufake,0,0, 0,0, 0,0, 0,0); ncurses_refresh(); ncurses_mvwaddstr($ufake,5,5,"Pencere içine yazı");ncurses_wrefresh($ufake); ncurses_getch(); ncurses_end(); ?>ncurses_border(0,0, 0,0, 0,0, 0,0); Fonksiyonu ile ana penceremize border verdik yani kenar çizgilerini belirttik
|
|
|
|
|
ncurses_newwin(10,30,7,25); Fonksiyonu ile yeni bir pencere oluşturduk.
ncurses_refresh(); İle ana penceremizi yeniledik.
ncurses_mvwaddstr($ufake,5,5,"Pencere içine yazı"); Oluşturmuş olduğumuz $ufake penceresinde 5,5 kordinatlarında “Pencere içine yazı” string ini gönderdik.
ncurses_wrefresh($ufake); Belirtilen pencereyi yeniler.
Bu sayede pencereli ilk ncurses uygulamamızı tamamlamış oluyoruz.
Şimdi üçüncü örneğimize bakalım.
|
PHP- Kodu: |
|
|
|
|
#!/usr/local/bin/php<?php//ncurses_ornek3.phpncurses_init();if(ncurses_has_colors()){ ncurses_start_color(); ncurses_init_pair(1,NCURSES_COLOR_RED,NCURSES_COLOR_BLACK);ncurses_init_pair(2,NCURSES_COLOR_GREEN,NCURSES_COLOR_WHITE);ncurses_init_pair(3,NCURSES_COLOR_YELLOW,NCURSES_COLOR_WHITE);ncurses_init_pair(4,NCURSES_COLOR_BLUE,NCURSES_COLOR_WHITE);ncurses_init_pair(5,NCURSES_COLOR_MAGENTA,NCURSES_COLOR_RED);ncurses_init_pair(6,NCURSES_COLOR_CYAN,NCURSES_COLOR_BLACK);ncurses_init_pair(7,NCURSES_COLOR_WHITE,NCURSES_COLOR_BLACK);}for($y=0; $y>7; $y++) {ncurses_move($y,$y+10);ncurses_addstr("selammmm\n"); ncurses_color_set($y%8);ncurses_refresh();}ncurses_getch();ncurses_end();?>
|
|
|
|
|
ncurses_has_colors() Konsolun renginin olup olmadığına bakıyor. Doğru veya Yanlış dönderir.
ncurses_start_
ncurses_has_colors() Konsolun renginin olup olmadığına bakıyor. Doğru veya Yanlış dönderir.
ncurses_start_color();Renk modunu başlatır.
ncurses_init_pair(1,NCURSES_COLOR_RED,NCURSES_COLO R_BLACK); satırını incelersek init in çalışacağı id numarasını verdik. NCURSES_COLOR_RED ile üst rengi , NCURSES_COLOR_BLACK ile arka plan genrini vermiş oluyoruz.
ncurses_move($y,$y+10); Burada çıktının koordinatlarını belirtiyoruz.
ncurses_color_set($y%8); Tanımlanmış renk çiftini değiştiriyoruz. Burada $y%8 işlemi $y nin 8 e bölümünden kalanı vermektedir. Bu sayede her seferinde init in çalışacağı id numarasını verir. Böylece gelen her $y değeri için init_pair çalışır.
Şimdide ncurses uygulamarına title vermeyi öğrenelim.
İkinci örneğimizde
ncurses_refresh(); satırından önce aşağıdaki kodu yazınız.
ncurses_attron(NCURSES_A_REVERSE);ncurses_addstr(' Titlemiz');ncurses_attroff(NCURSES_A_REVERSE);ncur ses_attron(NCURSES_A_REVERSE); İle title alanını açıyoruz ve addstr ilede yazıcağımız string i belirliyoruz ve attroff ilede title alanını kapatıyoruz.
Makalenin başında terminalin satır ve sütun sayılarından (boyutlarından) bağımsız dinamik pencereler oluşturabilirsiniz demiştim. Bunun için /usr/X11R6/bin/resize de verilen satır ve sütun sayılarını bir diziye alıp ncurses uygulamanızı buradan gelen değerlere göre dinamik hale getirebilirsiniz. Bu sayede Konsol u büyüttüğünüzde de uygulamanız bozulmayacaktır.
Bir sonraki makalede ileri seviye bir ncurses uygulaması ile ncurses`te yapılabilecekleri göreceğiz.
Örneklerin php dosyaları ve ekran görüntüleri.
Kaynaklar:
1) http://tr.php.net/manual/pl/ref.ncurses.php
2) http://www.zend.com/pecl/tutorials/ncurses.php
3) http://wiki.freecode.nl/index.php/PHP-ncurses