Ekran Komutlarının Parametrelerle Gönderilmesi
Önceki Parametreler Sonraki
Ekran Komutlarının Parametrelerle Gönderilmesi
Termcap kütüphanesinin tparam ve tgoto işlevleri uçbirim dizge parametreleri için printf işlevinin yaptığına benzer şekilde kullanılabilir. Yeni tparam işlevi bir GNU oluşumudur, daha genel amaçlıdır ancak, Unix termcap'ta yoktur. İmleç hareketleri için bir parametre kodlama işlevi olarak tgoto tercih edilen bir işlevdir.
tparam işlevi herhangi bir sayıdaki parametreye sahip ekran komutlarını kodlayabilir ve bir tampon alanı belirtmenizi mümkün kılar. cm yeteneği dışında tüm yeteneklerin parametreleri için tercih edilen bir işlevdir.
char *tparam
(char  *biçim_dizgesi,
 char  *tampon,
 int    boyut,
 int    parm1,
 ...);
işlev
Burada, biçim_dizgesi'nin bir uçbirim yeteneğinin değeri olacağı varsayılır; tampon ve boyut ise çıktı tamponu içindir. parm1, ... ise biçim dizgesinde kodlanacak tamsayı parametrelerdir. tparam işlevi biçim dizgesi içindeki % dizilerini parametrelerle kodlayarak sonucu tampona kopyalar.
Çıktı tamponunu adresiyle tampon argümanında, bayt cinsinden boyuyla boyut argümanında siz tanımlayabilirsiniz. Eğer ayırdığınız alan yetersiz kalırsa, tparam işlevi malloc'u kullanarak tamponu büyütür. Her iki durumda da tparam tamponun adresi ile döner. Eğer dönüş değeri tampon ile aynıysa sizin ayırdığınız alan kullanılmıştır, değilse, işlev yeni bir tampon ayırmıştır ve onu da çıktılama tamamlanınca siz serbest bırakmalısınız. Eğer işleve boyut ve tampon olarak 0 değeri aktarmışsanız, tampon için gerekli alanı tparam kendisi ayırır.
Parametre gerektirmekten başka geciktirme belirtilmesi zorunlu olan yeteneklerde tparam tarafından üretilen çıktı için tputs kullanmalısınız. Bkz. Geciktirme. Burada buna bir örnek verilmiştir:
{
char *buf;
char buffer[40];

buf = tparam (command, buffer, 40, parm);
tputs (buf, 1, fputchar);
if (buf != buffer)
free (buf);
}
Eğer sıfır değerli bir parametre %. tarzı kodlama ile kodlanırsa, tputs buna memnun olmayacak ve bu bir sürü soruna yol açacaktır. Fakat, şansa bakın ki, %. tarzı kodlama birkaç modası geçmiş uçbirim tarafından sadece cm yeteneğinde kullanılmaktadır. Bu sorunla karşılaşmamak için cm yeteneğini kodlarken tparam işlevini değil tgoto işlevini kullanın.
İmleç hareketlerinde bazı özel durumlar tgoto işlevinin kullanılmasını gerektirmektedir. tgoto kullanmanızı gerektiren sebepler şunlardır:
char *tgoto
(char *cm_dizgesi,
 int   yatay_konum,
 int   düşey_konum);
işlev
İşlevin üç argümanı vardır: uçbirim tanımının cm dizgesi ile imlecin yatay ve düşey konumları. tgoto parametreli dizgeyi bir iç tamponda kendisi hazırlar ve bu tamponun adresi ile döner. İşlevin daha sonraki kullanımlarında tgoto aynı tamponu yeniden kullanacaktır.
%. kodlaması ile kodlanan parametreler boş karakterler, sekmeler ve satırsonu karakterleri üretebilir. Bunlar sorunlara yol açabilir: Boş karakterler tputs'un dizgenin sonuna gelindiğini varsaymasına sebep olabilir. Sekmeler, çekirdeğin veya başka bir uygulamanın bu karakteri boşluklarla genişletmesine sebep olabilir. Satırsonu karakterlerinde ise çekirdek bir satırbaşı karakteri ekleyebilir ya da satırsonunu aşmak için normal olarak satırın sonunu boşluklar ekleyebilir. Bu tür sorunlarla karşılaşmamak için tgoto bu karakterlerden kaçınmada dikkatlidir. Pek iyi de, bunu nasıl yapar: Hedef imleç konumu (sıfır, dokuz ya da on) böyle bir soruna yol açacak gibiyse, tgoto konumu bir arttırır ve böylece imlecin bir dizge eklenerek bir konum geri ya da yukarı hareket etmesine engel olur (sorunu telafi eder).
Geri ya da yukarı taşıma için kullanılacak telafi dizgeleri BC ve UP isimli genel değişkenlerde bulunur. Bunlar büyük harfli isimleriyle aslında birer external C değişkenleridir ve char * türünde bildirilirler. Uygun değerleri siz belirtirsiniz. Bu değerler normalde, uçbirim tanımından tgetstr işlevi kullanılarak le ve up uçbirim yeteneklerinden elde edilir. Ayrıca, bu iki değişken sıfır da olabilir, bu durumda boş karakterler, sekmeler ve satırsonu karakterleri ile ilgili sorunların telafisine çalışılmaz.
BC ve UP değişkenlerinin değerleri sıfır olduğunda tgoto işlevi sadece cm dışında, diğer tüm komutlar için güvenlidir.
Not
tgoto işlevinde yatay ve düşey konum argümanları ters sıradadır. Hatta cm dizgesinde bile düşey konum parametresi yatay konum parametresinden öncedir. Eğer tgoto işlevini AL gibi tek parametre alan bir komut ile kullanıyorsanız, parametreyi düşey_konum argümanı ile işleve aktarmalısınız.
Önceki Üst Ana Başlık Sonraki
Kodlamanın Açıklaması Başlangıç Veritabanının Biçimi
Bir Linux Kitaplığı Sayfası