Obsah / Utility / CHARSET / CharTrans
Zdrojový kód: INCLUDE\UTIL\CHARSET.INC, UTIL\CHARSET.ASM
CharTrans - Konverze kódové stránky textu
Funkce CharTrans zkonvertuje text z jedné kódové stránky na jinou.
|
Na vstupu funkce obsahuje registr AX číslo kódové stránky zdrojového textu, registr BX číslo cílové kódové stránky, ECX velikost zdrojového textu (v bajtech), EDX Unicode kód náhradního znaku (který se použije, pokud znak není v cílové kódové stránce podporován), ESI ukazatel na zdrojový text, EDI ukazatel na cílový buffer a EBP velikost cílového bufferu. Funkce vrací v registru EAX velikost dat uložených do cílového bufferu (může být 0 v případě zadání neplatné kódové stránky). Je-li náhradní znak v registru EDX nulový, nahradí se neexistující znak nejbližším podobným znakem z ASCII tabulky. Je-li adresa cílového bufferu v registru EDI nulová, funkce pouze zjistí potřebnou velikost dat v cílovém bufferu.
|
Na začátku funkce se nejdříve vyhledá popisovač zdrojové kódové stránky (ukazatel se později uloží do registru EAX), popisovač cílové kódové stránky (ukazatel se uloží do registru EBX) a zkontroluje se, zda je požadována konverze textu nebo pouze zjištění velikosti cílového bufferu. Při zadání neplatné zdrojové nebo cílové kódové stránky se funkce předčasně ukončí.
|
Je-li ukazatel na cílový buffer platný, bude se provádět konverze textu. V cyklu je postupně načítán znak po znaku dané zdrojové znakové sady pomocí funkce CHSET_ReadChar. Navrácený znak je v kódu Unicode (v registru EAX). Následná funkce CHSET_WriteChar znak uloží do výstupního bufferu v dané cílové znakové sadě. Cyklus se opakuje dokud jsou k dispozici nějaká další zdrojová data (čítač zdrojových dat v registru ECX je postupně snižován funkcí pro čtení znaku).
|
Je-li ukazatel na cílový buffer nulový, bude se zjišťovat velikost cílového textu. V cyklu je postupně načítán znak po znaku dané zdrojové znakové sady pomocí funkce CHSET_ReadChar. Navrácený znak je v kódu Unicode (v registru EAX). Následná funkce CHSET_SizeChar posouvá čítač cílových dat v registru EDI v dané cílové znakové sadě. Cyklus se opakuje dokud jsou k dispozici nějaká další zdrojová data (čítač zdrojových dat v registru ECX je postupně snižován funkcí pro čtení znaku).
|
Při návratu z funkce je do registru EAX načtena z registru EDI nová cílová adresa nebo nový čítač cílových dat. Po návratu ostatních registrů a odečtení původní cílové adresy v registru EDI se obdrží velikost uložených dat do výstupního bufferu resp. velikost cílových dat při zjišťování velikosti.
Obsah / Utility / CHARSET / CharTrans