Obsah / Utility / TEXT / Datové struktury a makra
Zdrojový kód: INCLUDE\UTIL\TEXT.INC
Datové struktury a makra
|
Základem textových řetězců je struktura TEXTDATA obsahující jak samostný text, tak i evidenční informace. Jsou to data textového řetězce. Proměnná obsahující ukazatel na data textového řetězce je vlastníkem textu.
Položka TEXT_Ref je referenční čítač představující počet vlastníků dat textového řetězce. Každý nový vlastník zvýší referenční čítač, odebrání vlastníka čítač sníží. Pokud čítač dosáhne nuly, nejsou data textového řetězce vlastněna již žádným vlastníkem a mohou být zrušena.
Položka TEXT_Length je délka textového řetězce v bajtech. TEXT_Text je začátek textu v datech textového řetězce. Text je v kódu UTF.8.
Konstanta CTEXTREF je hodnota referenčního čítače označující konstantní textová data. Tento text je zpravidla uložen v oblasti jen pro čtení a není programem modifikován. Pokud má být změněn obsah textové proměnné s konstantními textovými daty, je nejdříve provedena duplikace dat. Konstanta CTEXTREFHIGH je nejvyšší bajt konstanty CTEXTREF a používá se k rychlému testu, zda se jedná o konstantní textová data.
TEXTBIGPOS je pomocný ukazatel pozice v textu dostatečně velký na to, aby byl vždy větší než možná délka textu.
|
Struktura TEXT je objekt textu. Obsahuje ukazatel na data textového řetězce. Připojením dat textového řetězce k objektu textu se zvýší referenční čítač vlastníků dat textového řetězce, odpojením se referenční čítač sníží.
|
Makro TEXTSTR vytvoří textovou proměnnou. Parametrem makra je ukazatel na textová data TEXTDATA.
|
Struktura LANGTEXT je jazykový text, který kromě textové proměnné obsahuje též identifikátor jazyku, ve kterém je text psaný. Identifikátor jazyku je obsažen v položce LANGTEXT_Lang.
Struktura je používána obvykle jako pole jazykových textů v různých jazycích. Položka LANGTEXT_Num prvního jazykového textu obsahuje celkový počet prvků v poli. Při zobrazení textu uživateli je z pole vybrán text v tom jazyku, který je uživateli nejblíž. Makro LANGTEXTSTR vytvoří položku vícejazyčného textu.
|
Makro CTEXTDATA vytvoří v programu data konstantního textového řetězce. Parametrem makra je text v jednoduchých uvozovkách (v kódu UTF-8). Referenční čítač je nastaven na hodnotu CTEXTREF a tím je zabráněno modifikaci textu.
|
Makro CTEXT vytvoří v programu konstantní text. Parametrem makra je text v jednoduchých uvozovkách (v kódu UTF-8). Textová data jsou v konstantním tvaru. Pokud má dojít k modifikaci textu, původní textová data se odpojí, provede se jejich kopie do datového bufferu a teprve až tato kopie je modifikována.
|
Makro EMPTYTEXT vytvoří v programu prázdný text, tedy textovou proměnnou ukazující na prázdná textová data EmptyTextData.
|
Makro TEXTBUFALLOC slouží k alokaci datového bufferu pro funkce textových řetězců. Na vstupu funkce obsahuje registr EAX požadovanou velikost datového bufferu. Při nedostatku paměti je funkcí navrácen příznak CY, jinak je v registru EAX navrácen ukazatel na nový datový blok.
|
Makro TEXTBUFFREE slouží k uvolění datového bufferu ve funkcích textových řetězců. Na vstupu funkce obsahuje registr EAX ukazatel na datový blok.
|
Makro TEXTBUFRESIZE slouží ke změně velikosti datového bufferu ve funkcích textových řetězců. Na vstupu funkce obsahuje registr EAX požadovanou novou velikost datového bloku. Registr EDX obsahuje ukazatel na datový blok. Při chybě paměti je navrácen příznak CY a datový blok není změněn. Při úspěšné operaci obsahuje registr EDX buď nezměněnou adresu datového bloku nebo ukazatel na nový datový blok s novou velikostí.
Obsah / Utility / TEXT / Datové struktury a makra