Bu kısmın başlarında
durumsal kodlama kullanılan karakter kümelerinden bahsedilmişti. Bunların metnin içindeki kodlanmış değerleri öncekilere bir şekilde bağımlıdır.
Dönüşüm işlevleri bir metni birden fazla adımda dönüştürebildiklerinden bu bilgiyi işlevlerin bir çağrısından diğerine aktarmamız gerekir.
mbstate_t türünde bir değişken bir dönüşüm işlevi çağrısından diğerine aktarılması gerekli olan öteleme durumu hakkında tüm bilgiyi içerir.
mbstate_t türü
wchar.h başlık dosyasında tanımlanmıştır ve ISO C90 standardının 1. düzeltmesinde bulunur.
mbstate_t türünde nesneleri kullanırken yazılımcı bu nesneleri tanımlamalı (normalde yığıt üzerinde yerel değişkenler olarak) ve dönüşüm işlevine göstericisi ile aktarmalıdır. O anki çokbaytlı karakter durumsal ise dönüşüm işlevi bu yolla nesneyi güncelleyebilir.
Durum nesnesini belirli bir duruma koyacak bir ilklendirici ya da bu işleme özel bir işlev yoktur. Kurallar gereğince nesne daima ilk kullanımdan önce ilk durumu göstermeli ve bu aşağıdaki gibi bir kodla değişkeni tamamen temizleyerek yapılmalıdır:
{
mbstate_t durum;
memset (&durum, '\0', sizeof (durum));
/* bundan sonra durum kullanılabilir. */
…
}
Çıktıyı üretecek dönüşüm işlevlerini kullanırken çoğunlukla o anki durumun ilk durum olup olmadığına bakılması gerekir. Örneğin, dizilimin bir noktasında durumu ilk duruma ayarlayacak önceleme dizilimlerinin kullanılıp kullanılmayacağına karar vermek için bu gereklidir. İletişim protokolleri genellikle bunu gerektirir.
int mbsinit | (const mbstate_t *ps) |
işlev
mbsinit işlevi göstericisi ps olan nesnenin ilk durumda olup olmadığını saptamakta kullanılır. ps bir boş göstericiyse ya da nesne ilk durumdaysa dönen değer sıfırdan farklı olur. Aksi takdirde sıfır döner.
mbsinit işlevi wchar.h başlık dosyasında tanımlanmıştır ve ISO C90 standardının 1. düzeltmesinde bulunur.
mbsinit işlevi kullanılan bir kod çoğunlukla aşağıdakine benzer:
{
mbstate_t durum;
memset (&durum, '\0', sizeof (durum));
/* Burada durum kullanılır. */
…
if (! mbsinit (&durum))
{
/* ilk duruma döndürecek kod. */
const wchar_t bos[] = L"";
const wchar_t *kaynak = bos;
wcsrtombs (cikistamponu, &kaynak, ciktampuzun, &durum);
}
…
}
İlk duruma geri dönmeyi sağlayacak olan önceleme dizilimini çıktılayacak kod ilginçtir.
wcsrtombs işlevi gerekli çıktılama kodunu (bkz.
Dizge Dönüşümleri) saptamakta kullanılabilir.
| Not |
---|
Geniş karakterli kodlama durumsal olmadığından GNU sistemlerinde çokbaytlı metni geniş karakterli metne dönüştürmek için bu ek eylemin uygulanması gerekli değildir. Ancak bir durumsal kodlama kullanarak wchar_t yapılmasının yasaklanmasına hiçbir standartta değinilmemiştir. |