Obsah / Utility / LANG / Datové struktury a makra
Zdrojový kód:
INCLUDE\UTIL\LANG.INC, UTIL\LANG.ASM
Datové
struktury a makra
NAT_NUM EQU 2 ; number of nationality descriptors
NAT_DEF EQU 0 ; index of default nation. descriptor
%define NATTABDEF NatTabEN ; default nationality descriptor
|
Konstanta NAT_NUM definuje počet
interních národnostních tabulek. Konstanta NAT_DEF je index
implicitní národnostní tabulky použité při vytváření
implicitního uživatele. NATTABDEF je ukazatel na implicitní
národnostní tabulku.
; ------------- Language identifier
struc LANG
LANG_SubID: resb 1 ; 0: sub-language identifier
LANG_ID: resb 1 ; 1: language main identifier
endstruc ; size 2 bytes
|
Struktura LANG slouží k identifikaci
jazyku. Jejími položkami jsou LANG_ID, což je hlavní
identifikátor jazyku, a LANG_SubID, což je upřesňující
jazykový identifikátor popisující národnostní variantu
jazyku.
; ------------- Macro - initialized language identifier
; %1 = language main identifier, %2 = sub-language identifier
%macro LANGINI 2
db %2 ; sub-language identifier
db %1 ; language main identifier
%endmacro
|
Makro LANGINI vytvoří inicializovaný
popisovač jazyku. Prvním parametrem makra je hlavní
identifikátor jazyku, druhým parametrem je upřesňující
jazykový identifikátor.
; ------------- Nationality descriptor
; Text strings may be max. 255 characters long.
struc NATIONAL
NAT_ShortName: resb TEXT_size ; 0: short name of national
NAT_LongName: resb TEXT_size ; 4: long name of national
NAT_LangName: resb TEXT_size ; 8: long name of national in language
NAT_Language: resb LANG_size ; 0Ch: language identifier
NAT_CodePage: resw 1 ; 0Eh: default character code page
NAT_Alphabet: resb TEXT_size ; 10h: alphabetic order table
NAT_AlphaHash: resd 1 ; 14h: hash table to get sorting order
NAT_ShortTime: resb TEXT_size ; 18h: short time formatting string
NAT_LongTime: resb TEXT_size ; 1Ch: long time formatting string
NAT_ShortDate: resb TEXT_size ; 20h: short date formatting string
NAT_LongDate: resb TEXT_size ; 24h: long date formatting string
NAT_TimeSep: resb 1 ; 28h: ASCII time separator
NAT_DateSep: resb 1 ; 29h: ASCII date separator
NAT_DecimalSep: resb 1 ; 2Ah: ASCII decimal separator
NAT_ThsndSep: resb 1 ; 2Bh: ASCII thousand separator
NAT_EntrySep: resb 1 ; 2Ch: ASCII data entry separator
resb 3 ; 2Dh: ...padding
NAT_ShortAMPM: resb TEXT_size*2 ; 30h: short AM/PM text
NAT_LongAMPM: resb TEXT_size*2 ; 38h: long AM/PM text
; AM=ante meridiem, PM=post meridiem
NAT_ShortBCECE: resb TEXT_size*2 ; 40h: short BCE/CE text
NAT_LongBCECE: resb TEXT_size*2 ; 48h: long BCE/CE text
; BCE=Before Common Era, CE=Common Era
NAT_ShortWeek: resb TEXT_size*7 ; 50h: 3-char names of days in week
NAT_LongWeek: resb TEXT_size*7 ; 6Ch: long names of days in week
NAT_ShortMonth: resb TEXT_size*12 ; 88h: 3-char names of months
NAT_LongMonth: resb TEXT_size*12 ; 0B8h: long names of months
NAT_LongMonth1: resb TEXT_size*12 ; 0E8h: long names of months, 1st case
endstruc ; size 118h = 280 bytes
|
Struktura NATIONAL popisuje národnostní
informace. NAT_ShortName je krátké označení jazyku (zkratka,
např. "CZ"). NAT_LongName je plný název jazyku v
angličtině (např. "Czech"). NAT_LangName je plný
název jazyku v příslušném jazyku (např. "Česky",
kódování textů TEXT je v UTF-8).
NAT_Language je popisovač identifikátoru jazyku (sestávající
z hlavního a upřesňujícího identifikátoru jazyku).
NAT_CodePage je číslo implicitní kódové stránky.
NAT_Alphabet je třídicí tabulka znaků.
Obsahuje seznam velkých písmen v abecedním pořadí. Z této
tabulky je později (funkcí NationInit) sestavena
hashovací tabulka pořadí třídění znaků, na kterou ukazuje
ukazatel NAT_AlphaHash. Hashovací tabulka je použita funkcí UniCharSort, která s její pomocí sestaví třídicí hodnotu
Unicode znaku pro daný jazyk.
NAT_ShortTime je text pro zformátování
údaje času v krátkém zápisu (např. "H:mm").
NAT_LongTime je text pro zformátování údaje času v dlouhém
zápisu (např. "H:mm:ss"). NAT_ShortDate je text pro
zformátování údaje data v krátkém zápisu (např.
"d/M/yy"). NAT_LongDate je text pro zformátování
údaje data v dlouhém zápisu (např. "d/ MMMM
yyyy").
NAT_TimeSep je ASCII znak oddělovače
času (např. ":"). NAT_DateSep je ASCII znak
oddělovače data (např. "."). NAT_DecimalSep je ASCII
znak desetinné tečky (např. ","). NAT_ThsndSep je
ASCII znak oddělovače řádů čísel (např. " ").
NAT_EntrySep je ASCII znak oddělovače číselných položek
(např. ";"). Všechny oddělovače jsou ASCII znaky v
rozsahu 0 až 127. Nejsou povoleny víceznakové oddělovače
nebo oddělovače používající vyšší kód než 127.
NAT_ShortAMPM je pole textů krátkého
zápisu pro označení dopoledne (první text, např.
"d") a odpoledné (druhý text, např. "o").
NAT_LongAMPM je pole textů dlouhého zápisu pro označení
dopoledne (první text, např. "dop.") a odpoledné
(druhý text, např. "odp."). NAT_ShortBCECE je pole
textů krátkého zápisu označení roku před naším
letopočtem (první text, např. "pnl") a roku našeho
letopočtu (druhý text, např. "nl"). NAT_LongBCECE je
pole textů dlouhého zápisu označení roku před naším
letopočtem (první text, např. "př.n.l.") a roku
našeho letopočtu (druhý text, např. "n.l.").
NAT_ShortWeek je pole textů krátkého
zápisu (3 písmena) dne v týdnu, přičemž prvním textem je
pondělí, druhým úterý atd. (např. "Pon",
"Úte"). NAT_LongWeek je pole textů dlouhého zápisu
dne v týdnu (např. "Pondělí",
"Úterý".). NAT_ShortMonth je pole textů krátkého
zápisu (3 písmena) označení měsíce (např. "Led",
"Úno"). NAT_LongMonth je pole textů dlouhého zápisu
označení měsíce ve tvaru pro použití v datu (např.
"Ledna", "Února"). NAT_LongMonth1 je pole
textů dlouhého zápisu označení měsíce v 1. pádu (např.
"Leden", "Únor").
; ------------- Macro - get default nationality descriptor (%1 = register)
%macro DEFAULT_NAT 1
CURRENT_USER %1 ; get current user
mov %1,[%1+USER_National] ; get user's nationality
%endmacro
|
Makro DEFAULT_NAT slouží k načtení
implicitního ukazatele na národnostní informace aktivního
uživatele. Parametrem makra je jméno registru, ve kterém bude
navrácen ukazatel na popisovač národnostních informací
NATIONAL. Při vyhledání popisovače se využívá makro CURRENT_USER, které navrátí ukazatel na aktuálního
uživatele. Ze struktury aktuálního uživatele je načten
ukazatel na implicitní popisovač národnostních informací.
; ------------- Macro - initialized nationality descriptor
; %1=nation name, %2=language main identifier, %3=sub-language identifier,
; %4=code page, %5=time separator, %6=date separator, %7=decimal separator
; %8=thousand separator, %9=entry separator
%macro NATION 9
dd ShortName %+ %1 ; short name of national
dd LongName %+ %1 ; long name of national
dd LangName %+ %1 ; long name of national in language
LANGINI %2,%3 ; language identifier
dw %4 ; default character code page
dd Alphabet %+ %1 ; alphabetic order table
dd NULL ; hash table to get sorting order
dd ShortTime %+ %1 ; short time formatting string
dd LongTime %+ %1 ; long time formatting string
dd ShortDate %+ %1 ; short date formatting string
dd LongDate %+ %1 ; long date formatting string
db %5 ; time separator
db %6 ; date separator
db %7 ; decimal separator
db %8 ; thousand separator
db %9 ; entry separator
db 0,0,0 ; ...padding
dd ShortAM %+ %1 ; short AM text
dd ShortPM %+ %1 ; short PM text
dd LongAM %+ %1 ; long AM text
dd LongPM %+ %1 ; long PM text
dd ShortBCE %+ %1 ; short BCE text
dd ShortCE %+ %1 ; short CE text
dd LongBCE %+ %1 ; long BCE text
dd LongCE %+ %1 ; long CE text
dd ShortWeek %+ %1 %+ 1 ; 3-char names of days in week
dd ShortWeek %+ %1 %+ 2
dd ShortWeek %+ %1 %+ 3
dd ShortWeek %+ %1 %+ 4
dd ShortWeek %+ %1 %+ 5
dd ShortWeek %+ %1 %+ 6
dd ShortWeek %+ %1 %+ 7
dd LongWeek %+ %1 %+ 1 ; long names of days in week
dd LongWeek %+ %1 %+ 2
dd LongWeek %+ %1 %+ 3
dd LongWeek %+ %1 %+ 4
dd LongWeek %+ %1 %+ 5
dd LongWeek %+ %1 %+ 6
dd LongWeek %+ %1 %+ 7
dd ShortMonth %+ %1 %+ 1 ; 3-char names of months
dd ShortMonth %+ %1 %+ 2
dd ShortMonth %+ %1 %+ 3
dd ShortMonth %+ %1 %+ 4
dd ShortMonth %+ %1 %+ 5
dd ShortMonth %+ %1 %+ 6
dd ShortMonth %+ %1 %+ 7
dd ShortMonth %+ %1 %+ 8
dd ShortMonth %+ %1 %+ 9
dd ShortMonth %+ %1 %+ 10
dd ShortMonth %+ %1 %+ 11
dd ShortMonth %+ %1 %+ 12
dd LongMonth %+ %1 %+ 1 ; long names of months
dd LongMonth %+ %1 %+ 2
dd LongMonth %+ %1 %+ 3
dd LongMonth %+ %1 %+ 4
dd LongMonth %+ %1 %+ 5
dd LongMonth %+ %1 %+ 6
dd LongMonth %+ %1 %+ 7
dd LongMonth %+ %1 %+ 8
dd LongMonth %+ %1 %+ 9
dd LongMonth %+ %1 %+ 10
dd LongMonth %+ %1 %+ 11
dd LongMonth %+ %1 %+ 12
dd LongMonth1 %+ %1 %+ 1 ; long names of months, 1st case
dd LongMonth1 %+ %1 %+ 2
dd LongMonth1 %+ %1 %+ 3
dd LongMonth1 %+ %1 %+ 4
dd LongMonth1 %+ %1 %+ 5
dd LongMonth1 %+ %1 %+ 6
dd LongMonth1 %+ %1 %+ 7
dd LongMonth1 %+ %1 %+ 8
dd LongMonth1 %+ %1 %+ 9
dd LongMonth1 %+ %1 %+ 10
dd LongMonth1 %+ %1 %+ 11
dd LongMonth1 %+ %1 %+ 12
%endmacro
|
Makro NATION vytvoří popisovač
národnostních informací. Makro má 9 parametrů. První
parametr je identifikační jméno (např. "EN",
"CZ"). Pomocí identifikačního jména jsou
sestavována návěští. Např. na prvním řádku vzniknou
návěští ShortNameEN, ShortNameCZ.
Druhým parametrem je hlavní
identifikační číslo jazyku. Třetím parametrem je
upřesňující identifikátor jazyku. Čtvrtým parametrem je
číslo kódové stránky. Pátým parametrem je znak
oddělovače času, šestým znak oddělovače data, sedmým znak
desetinné tečky, osmým znak oddělovače tisíců a devátým
znak oddělovače datových položek.
Obsah / Utility / LANG / Datové struktury a makra