Obsah / Utility / CHARSET / CharFromUnicode
Zdrojový kód: INCLUDE\UTIL\CHARSET.INC, UTIL\CHARSET.ASM
CharFromUnicode - Konverze znaku z kódu Unicode
Funkce CharFromUnicode zkonvertuje znak z kódu Unicode do 1-bajtového kódu.
|
Na vstupu funkce obsahuje registr EAX Unicode kód konvertovaného znaku, registr DL znak, který se použije v případě neplatného znaku, a registr EBX ukazatel na znakovou sadu CHARSET. Je povolena pouze 1-bajtová znaková sada (není funkcí kontrolováno). Na výstupu funkce obsahuje registr EAX 1-bajtový kód zkonvertovaného znaku. Pokud není znak v příslušné znakové sadě podporován, navrátí funkce příznak chyby CY a registr EAX je naplněn neplatným znakem z registru DL.
|
Má-li znak kód v rozsahu 0 až 7Fh, navrátí se beze změny, protože znaky v tomto rozsahu jsou shodné u všech znakových sad.
|
Má-li znak vyšší hodnotu než maximální podporovaný znak FONTMAX, funkce se ukončí s chybou.
|
K vyhledání odpvídajícího 1-bajtového kódu znaku se použije hashovaná převodní tabulka CHSET_FromUni z popisovače CHARSET. Vyšší bajt kódu znaku se použije jako index, s jehož pomocí se obdrží ukazatel na konverzní stránku. Je-li ukazatel na konverzní stránku nulový, je znak neplatný a funkce se ukončí s chybou.
|
Nižší bajt znaku se použije jako index v konverzní stránce, s jehož pomocí se načte kód odpovídajícího 1-bajtového znaku. Je-li kód znaku nulový, funkce se navrátí s chybou.
|
Není-li pro danou znakovou sadu k dispozici odpovídající znak, navrátí se funkce s chybou. Obsahuje-li registr DL nenulovou hodnotu, navrátí se při chybě jeho obsah jako náhradní chybový znak. Je-li obsah registru DL nulový, použije se automatický náhradní znak. Za automatický náhradní znak se použije ASCII alternativa znaku, čímž se znak nahradí nejpodobnějším znakem z ASCII tabulky.
Obsah / Utility / CHARSET / CharFromUnicode