conio.h

Not: Bu, 31.10.2013'te yazılmış bir yazıdır, conio.h hakkında yapmak istediğim bir şeyler vardı o zamanlar ve öncesinde böyle bir yazı yazmanın daha iyi olacağını düşünmüşüm. Artık bu yapmak istediğim şeylerden vazgeçtim ama burada da çöpe atılmayacak kadar bilgi var, o yüzden tekrar bir okuyarak olduğu gibi yayına alıyorum.

conio.h, çoğunlukla MS-DOS derleyicileri tarafından konsol girdi/çıktı işlemleri için sunulan bir başlık dosyasıdır. Ne C Programlama Dili kitabında geçer, ne C standart kütüphanesinin veya ANSI C'nin bir parçasıdır, ne de POSIX'te tanımlanmıştır. Yine de yararlandığımız çeşitli yıllanmış kaynaklarda geçmesiyle karşılaşmaya bugün bile devam ederiz. Ama artık sık kullanılmadığı ve böyle de olması gerektiği için kullanmakta ısrar edersek biraz zorluk çekmemiz olası.

Bu kütüphaneyi mantıklı olarak artık kullanmamak, başkalarına kullandırtmamaktan elbette daha kolay. Bu kütüphaneyi ne olursa olsun kullanması gerektiğine fazlasıyla ikna olmuş kişileri vazgeçirmekse pek de kolay olmasa gerek. Programlamaya yeni başlayanlara verilen bunun yerine başka bir şey kullan tavsiyesi elindeki kaynağa dört elle sarılmış ve conio.h'yi bulmayı ve kullanmayı amaçlayan bu kişileri korkutur biraz. İşte bu yazı da conio.h'yi GNU/Linux'ta kullanmak isteyip de kavuşamayanlar için geliyor. İlk önce conio.h'yi tanımaya biraz daha devam edelim.

conio.h, bir programdan konsol giriş ve çıkışları gerçekleştirmek için birçok yararlı kütüphane işlevi deklare eder. DOS, Windows 3.x, Phar Lap, DOSX, OS/2 ve Win32 işletim sistemlerini hedefleyen çoğu C derleyicisi bu başlığa sahiptir ve ilgili kütüphane fonksiyonlarını öntanımlı C kütüphanesi içinde sunar. UNIX ve GNU/Linux'u hedefleyen çoğu C derleyiciyse bu başlığa sahip değildir ve bu kütüphanede yer alan fonksiyonları sunmaz. Yine de GNU/Linux için yazılmış birkaç tane conio uyarlaması kolayca bulunabilir. Ayrıca MicroVGA gibi bazı gömülü sistemler conio uyumlu kütüphaneler kullanmaktadır.

conio.h tarafından deklare edilen kütüphane fonksiyonları derleyiciden derleyiciye değişiklik gösterir. İlk olarak Lattice C'de gerçekleştirilen conio'da çeşitli fonksiyonlar doğrudan ilk birkaç DOS int 21h fonksiyonuyla eşleştirilmişti. Borland Turbo C ile birlikte sunulan kütüphaneyse DOS uygulama programlama arayüzü yerine doğrudan video hafızasını ve BIOS kesme çağrılarını kullanıyordu. Turbo C'deki kütüphanede ayrıca Turbo Pascal'dan ilham alınmış ek işlevler de bulunmaktaydı.

GNU/Linux, Win32 ve OS/2 gibi DOS dışı işletim sistemlerindeki derleyiciler, conio kütüphanesinin farklı uyarlamalarını sunar. Özellikle DJ Delorie tarafından DJGPP için geliştirilen sürüm geniş kapsamlıdır. Farklı uyarlamalara diğer bir örnek de SyncTERM'in ciolib kütüphanesidir. Günümüzde DOS harici işletim sistemlerinde yerine ncurses kullanılması önerilir.

conio'nun belli başlı üye fonksiyonları aşağıdaki gibidir:
  • cprintf: Değerleri belirtilen biçimle doğrudan ekrana yazdırır.
  • clrscr: Ekranı temizlemek için kullanılır. Bu fonksiyon sonunda imleç ekranın sol üst köşesine konumlanır.
  • gotoxy: İmleci ekranın istenilen yerine taşır.
  • getch: Doğrudan konsoldan önbellek kullanmadan bir karakter okur ve karakteri ekrana basmaz.
  • getche: Doğrudan konsoldan önbellek kullanmadan bir karakter okur ve karakteri ekrana basar.
  • textcolor: Yazı renklerini ayarlamak için kullanılır.
  • textbackground: Yazılacak yazının arka plan rengini belirlemek için kullanılır.
  • kbhit: Klavyede bir tuşa basılıp basılmadığını kontrol etmek için kullanılır.
  • putch: Bir karakteri doğrudan konsola yazar.
  • cputs: Bir karakter dizisini doğrudan konsola yazar.
  • cgets: Bir karakter dizisini doğrudan konsoldan okur.
  • cscanf: Biçimlendirilmiş değerleri doğrudan konsoldan okur.
Artık conio.h'yi eskisine göre daha yakından tanıyoruz. Şimdi conio.h'nin GNU/Linux'ta kullanılmasını sağlayan uyarlamalarına yoğunlaşalım. Görebildiğim kadarıyla bu uyarlamalardan yaklaşık on tane var ve genel olarak ikiye ayırmak mümkün:
  1. Tek başına çalışanlar
  2. ncurses gibi harici bir kütüphane kullananlar
İkinci gruba dahil olan uyarlamaları kendim kullanmayı tercih etmediğim için bu yazının kapsamı dışında tuttum. Kısa bir Google aramasıyla tamamını, olmadı tamamına yakınını bulabilirsiniz. İlk gruba girenlerden de incelemeye değer şu üçü var benim görüşüme göre:
  1. libconio
  2. UConio
  3. stermp
Bu üç uyarlamadan herhangi birinin tam olduğunu söylemek zor. Hepsi bir şeylerin eksikliğini çekiyor. Bu durumu değiştirmek için üçünü libconio üzerinde bir araya getirmek iyi bir fikir gibi geldi ve denemeye karar verdim. Böylece daha az eksik bir conio.h uyarlamasına sahip olabiliriz belki.

Kaynaklar

Yorumlar

Bu blogdaki popüler yayınlar

Mızıka Tabları Nasıl Okunur

Muhtar Kellesi