Obsah / Utility / CHARSET / Datové struktury a makra
Zdrojový kód: INCLUDE\UTIL\CHARSET.INC, UTIL\CHARSET.ASM
|
Konstanta FONTMAX je maximální köd znaku použitý v definicích fontů a znakových sad. FONTMAP je počet mapovacích stránek Unicode (jedna stránka má 256 znaků). CHINV je označení neplatného znaku v Unicode tabulkách.
|
Struktura CHARSET slouží k popisu jedné znakové sady.
Položka CHSET_CodePage je číslo kódové stránky (viz následující seznam). CHSET_Flags jsou příznaky, používá se pouze příznak CHSET_MBYTE indikující, že ködová stránka je vícebajtová, tj. jeden znak zabírá více než jeden bajt.
CHSET_ToUni je ukazatel na tabulku pro převod znaku na Unicode. Používá se pouze u jednobajtové kódové stánky. Je to pole 128 slov, kde každé slovo představuje Unicode kód znaku pro bajt 80h až 0FFh. Znaky s kódem 00h až 7Fh se nepřevádějí, u všech znakových sad jsou shodné se znaky Unicode.
CHSET_FromUni je ukazatel na tabulku pro převod znaku z ködu Unicode. Používá se pouze u jednobajtové kódové stánky. Tabulka je pole ukazatelů na 256-bajtové podstránky. Při převodu se pomocí vyššího bajtu znaku vyhledá podstránka a z podstránky se pomocí nižšího bajtu znaku načte köd znaku v příslušné znakové sadě.
CHSET_ReadChar je ukazatel na funkci sloužící k načtení znaku z bufferu. Vstupem funkce je v registru EBX ukazatel na popisovač znakové sady CHARSET, v registru ECX počet zbývajících bajtů ve vstupním bufferu, EDX obsahuje kód neplatného znaku a ESI obsahuje ukazatel na vstupní buffer se čteným textem. Výstupem je v registru EAX Unicode kód načteného znaku, registr ESI ukazuje na novou pozici ve vstupním bufferu a registr ECX obsahuje nový počet zbývajících bajtů.
CHSET_WriteChar je ukazatel na funkci sloužící k uložení znaku do bufferu. Vstupem funkce je v registru EAX Unicode kód ukládaného znaku, v registru EBX ukazatel na popisovač znakové sady CHARSET, v registru DL neplatný znak pro případ převodu znaku z Unicode na 1-bajtový kód, v registru EDI ukazatel do zápisového bufferu a v registru EBP počet zbývajících bajtů v zápisovém bufferu. Výstupem je v registru EDI nový zápisový ukazatel a v registru EBP nový počet zbývajících bajtů v zápisovém bufferu. Obsah registru EAX může být funkcí zničen.
CHSET_SizeChar je ukazatel na funkci sloužící ke zjištění velikosti znaku ve výstupním bufferu. Vstupem funkce je v registru EAX Unicode köd znaku, v registru EBX ukaztatel na popisovač znakové sady CHARSET a v registru EDI čítač dat k zápisu. Funkce navrací čítač dat k zápisu v registru EDI zvýšení o odpovídající počet bajtů. Obsah registru EAX může být funkcí zničen.
|
Výše uvedená tabulka obsahuje definice ködů znakových sad.. CHARSETNUM je počet podporovaných znakových sad. Tato konstanta spolu s platností tabulek znakových sad je ověřována v ladicím režimu při vývoji jádra po zapnutí přepínače DEBUG_CODEPAGE.
|
Konstanta UNISUBPAGES definuje počet podstránek sloužících ke konverzi mezi znakovými sadami. Konstanta se určuje empiricky v ladicím režimu při vývoji jádra po zapnutí přepínače DEBUG_CODEPAGE.
|
Macro INCW je pomocné makro sloužící k vytvoření oblasti inkrementovaných WORD hodnot a používá se v definici tabulek znakových sad. Prvním parametrem makra je počáteční hodnota, druhým parametrem je koncová hodnota.
|
Macro REPNULL je pomocné makro sloužící k vytvoření oblasti nulových ukazatelů a používá se v definici tabulek znakových sad. Parametrem makra je počet nulových ukazatelů.
|
Macro REPINV je pomocné makro sloužící k vytvoření oblasti ukazatelů na neplatnou znakovou sadu a používá se v definici tabulek znakových sad. Parametrem makra je počet ukazatelů. Neplatná znaková sada CharSetNone se pro úsporu paměti překrývá s nulovou paměťovou stránkou PageEmpty.
|
Macro CHSINI je pomocné makro sloužící k deklaraci jedné 1-bajtové znakové sady. Parametrem makra je číslo kódové stránky. To je použito k sestavení návěští tabulky pro převod znaku na kód Unicode. Tabulka pro převod z kódu Unicode je generována prgramově, proto je pomocí makra nastaven jen ukazatel na tabulku, který používá inkrementované symbolické jméno CHSINIS. Funkce pro čtení, zápis a velikost znaků se používají pro všechny 1-bajtové znakové sady stejné.
|
Macro CHSINI2 je pomocné makro sloužící k deklaraci jedné vícebajtové znakové sady. Prvním parametrem makra je kódová stránka. Druhým parametrem je funkce pro čtení znaku, třetím parametrem funkce pro zápis znaku a čtvrtým parametrem funkce pro zjištění velikosti znaku. Protože se jedná o vícebajtovou znakovou sadu, nejsou použity tabulky pro převod znaku na/z Unicode.
Obsah / Utility / CHARSET / Datové struktury a makra