Tvůrce webu je i pro tebe! Postav třeba web. Bez grafika. Bez kodéra. Hned.
wz

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