Obsah / Utility / CHARSET / Inicializace tabulek znakových sad
Zdrojový kód: INCLUDE\UTIL\CHARSET.INC, UTIL\CHARSET.ASM
Inicializace tabulek znakových sad
Funkce pro inicializaci tabulek znakových sad je volána během startu systému.
|
Pro zmenšení velikosti souboru jádra systému je převodní tabulka stránky ISO 88951-1 generována programově, protože obsahuje inkrementované hodnoty od kódu 0A0h po 0FFh.
|
Dále následuje vygenerování tabulek pro převod znaků z kódu Unicode. Do registru EBX je připraven ukazatel na první znakovou sadu. Jedná-li se o vícebajtovou znakovou sadu, obsluha se přeskočí, protože konverzní tabulky se používají pouze u 1-bajtových znakových sad. Do registru ESI je připraven ukazatel na tabulku pro převod na Unicode kód, do registru DL kód prvního generovaného znaku (80h, znaky menší než 80h se nekonvertují).
|
Na začátku cyklu generování jedné tabulky se načte Unicode kód každého znaku (přitom v registru DL je odpovídající 1-bajtový kód znaku). Vyšší bajt kódu se použije jako index podstránky. Z ukazatele CHSET_FromUni se pomocí tohoto indexu zjistí, zda je podstránka již alokována. Víme přitom, že seznamy podstránek jsou již vynulovány, protože leží v oblasti neinicializovaných dat systému, která je nulována při jeho startu. Pokud nebyla podstránka dosud alokována, alokuje se pomocí ukazatele CharSetFromNext z pole CharSetFromSub. Dostatečná velikost pole je zajištěna konstantou UNISUBPAGES.
|
Nižší bajt kódu znaku je načten do registru EDI a s jeho pomocí je do podtabulky uložen odpovídající 1-bajtový kód znaku. Dále se zvýší kód znaku v registru DL a pokračuje se generováním kódu pro další znak. Jsou-li pro příslušnou kódovou stránku vygenerovány všechny znaky, pokračuje se další znakovou sadou.
Obsah / Utility / CHARSET / Inicializace tabulek znakových sad