This application demonstrates mixing of text written in many European alphabets both in graphic and console window. Sample text is written in UTF-8 encoding here in this source file, no codepage switching is necessarry.
Sample text is displayed in message box, using its default font.
Then is the same text displayed in console window which launched the application. Raster console font used as default in older Windows versions does not support glyphs for non-Latin characters, the text will be displayed correctly only if the user selects TrueType font in Properties/Font context menu of console window.
In Windows Vista and newer the current console font can be selected by the program automatically.
In MS Windows XP and older the function SetCurrentConsoleFontEx is not available inkernel32.dll. Import of nonexisting function would make Windows to refuse launch of our application, that is why it tries to import the function indirectly, with LoadLibrary and GetProcAddress.
EUROASM AutoSegment=Yes, Unicode=Yes, CodePage=UTF-8 cpmix32 PROGRAM Format=PE, Width=32, Model=Flat, Subsystem=CON, \ ListLiterals=Yes, ListMap=Yes, ListGlobals=Yes, \ IconFile=, Entry=Start: INCLUDE wins.htm, winscon.htm, winapi.htm ;; Following source Sample text is written in codepage UTF-8 ;; and stored in [.data] segment in UTF-16 (WIDE) encoding. Sample D "Sample text of mixed alphabets:",13,10 D "Éireannach (Eireannach in western European alphabet)",13,10 D "Čapek (Capek in central European alphabet)",13,10 D "Ørsted (Oersted in Nordic alphabet)",13,10 D "Aukštaičių (Aukshtaiciu in Baltic alphabet)",13,10 D "Ὅμηρος (Homer in Greek alphabet)",13,10 D "Yumuşak ğ (Yumushak g in Turkish aplhabet)",13,10 D "Maðkur (Mathkur in Icelandic alphabet)",13,10 D "דגבא (ABGD in Hebrew alphabet)",13,10 D "Достоевский (Dostoevsky in Cyrillic alphabet)",13,10 D " ",13,10 D "If the text is not displayed correctly in console window,",13,10 D "you may need to select TrueType font (Consolas or Lucida Console)",13,10 D "in Properties of the console and run the program again.",0 ;; Statically declare requested console font in [.data] segment. ConsoleFontInfoEx DS CONSOLE_FONT_INFOEX, .cbSize=SIZE# CONSOLE_FONT_INFOEX, \ .FaceName="Lucida Console" Start: NOP ; Machine instruction tells €ASM to switch to [.text] (AutoSegment=Yes). ; Display Sample using graphic message box. WinAPI MessageBox, 0,Sample,="%^PROGRAM",0, Lib=user32.dll ; Try to change default console raster font to TrueType. WinAPI GetModuleHandle, ="kernel32" WinAPI GetProcAddress,EAX,=B"SetCurrentConsoleFontEx" TEST EAX JZ .Skip: ; When WinAPI SetCurrentConsoleFontEx is not available (NT,2K,XP). MOV ESI,EAX ; ESI is now entry point of function SetCurrentConsoleFontEx. WinAPI GetStdHandle,STD_OUTPUT_HANDLE ; Get handle of default console. WinAPI ESI,EAX,1,ConsoleFontInfoEx ; Select TT font for the current console window. .Skip: ; If console font could not be changed programatically, all we can do is ask the user. ; Display Sample using console output. StdOutput Sample, Console=Yes TerminateProgram ENDPROGRAM cpmix32