This version contains alphabets for the languages Deutsch (German), English, Español (Spanish), Français (French), Italiano (Italian), Русƹкий (Russian), Svenska (Swedish) and Türkçe (Turkish); punctuation, superscript/subscript, currency symbols, Roman numerals and box drawing.
The currency symbols and box drawing sections turned out to be large projects by themselves, so I made them popup dialogs in DLLs called from Language Alphabets. (The compiled program is 71Kbytes, the box drawing DLL compiled to 72Kbytes and currency symbols DLL a wopping 92Kbytes.) By using explicit loading the DLLs are completely optional. The program will run without the DLLs, unlike with implicit loading. If either is selected and the DLL(s) is/are not present a message box will inform, and something else may be selected.
Get the first zip file if you just want use it. To compile it yourself, get
the second and third zip files for source code and icons.
Compiled program download
contains LanguageAlphabetsW.exe, CurrencyPopup.dll and BoxDrawPopup.dll .
Source code download contains
LanguageAlphabetsWin2.bas
Optional icons download contains . .
The code is shown for those just wanting to read it, or for copy/paste if virus scanner blocks downloading of ZIP files containing dot BAS files.
This version compiles "as is" in PowerBASIC For Windows version 10. The largest difficulty modifying for earlier versions of PowerBASIC is moving data in ASMDATA blocks to DATA blocks inside procedures (FUNCTION or SUB) and pointers to indexes for READ$.
Viewable code for the popups at Currency Popup and Box Drawing Popup. Moved because they made this page too long.
#dim all #compile exe "LanguageAlphabetsW.exe" %unicode = 1 '$DecKeyFmt = "* ####0 " 'no DEC$ in PBWin9, this is mask for FORMAT$ global gLetterLines(), gLttrValLines() as wstring 'gLangNameLines(), global gLangCode as wstring * 2 global gDecimalSel, gDeskUntX, gDeskUntY as long global pgLangCode as dword ptr global ghFixedFont as dword global gDeskUntX, gDeskUntY as long #resource icon, 101, "KeyBd.ico" '------------------------------------------------------------------------------- declare sub CrncySymbolsDlg (byval ghParent as dword, _ byval ParentPosX as long, _ byval ParentPosY as long, _ byval ParentSzX as long, _ byval ParentSzY as long) '=============================================================================== sub ReadLettersAndVals(byval hParent as dword) local pData, hCrncyDLL, pCrncySymbl as dword local TmpLetter, TmpVal as wstring local LetterCnt, LetterNum, LineNum, LineCnt, Clmn as long local DlgPosX, DlgPosY, DlgSzX, DlgSzY as long 'pointer to data block for language . . . . . . . . . . . . . . . . . . . . . select case as const$$ gLangCode case "de"$$ 'German pData = codeptr(DE) case "el"$$ 'Greek (modern) pData = codeptr(EL) case "en"$$ 'English pData = codeptr(EN) case "es"$$ 'Spanish pData = codeptr(ES) case "fr"$$ 'French pData = codeptr(FR) case "it"$$ 'Italian pData = codeptr(IT) case "ru"$$ 'Russian pData = codeptr(RU) case "sv"$$ 'Swedish pData = codeptr(SV) case "tr"$$ 'Turkish pData = codeptr(TR) case "x1"$$ 'Punctuation pData = codeptr(X1) case "x2"$$ 'Super/Sub Script numbers pData = codeptr(X2) case "x3" import addr "CrncySymDlg", "CurrencyPopup.dll" to pCrncySymbl, hCrncyDLL 'CurSymbols(hParent, ghFixedFont) if hCrncyDLL = 0 then msgbox "Problem opening currency symbol DLL.", _ %mb_ok or %mb_iconerror or %mb_taskmodal, "DLL Error" exit sub elseif pCrncySymbl = 0 then msgbox "Problem finding currency symbol dialog SUB in DLL.", _ %mb_ok or %mb_iconerror or %mb_taskmodal, "DLL Error" exit sub else dialog get loc hParent to DlgPosX, DlgPosY dialog get size hParent to DlgSzX, DlgSzY call dword pCrncySymbl using CrncySymbolsDlg(hParent, DlgPosX, DlgPosY, _ DlgSzX, DlgSzY) import close hCrncyDLL end if exit sub case "x5" pData = codeptr(X5) case "x9"$$ 'Box Drawing import addr "DrawCharDlg", ".\BoxDrawPopup.dll" to pCrncySymbl, hCrncyDLL if hCrncyDLL = 0 then msgbox "Problem opening box drawing DLL.", _ %mb_ok or %mb_iconerror or %mb_taskmodal, "DLL Error" exit sub elseif pCrncySymbl = 0 then msgbox "Problem finding box drawing dialog SUB in DLL.", _ %mb_ok or %mb_iconerror or %mb_taskmodal, "DLL Error" exit sub else dialog get loc hParent to DlgPosX, DlgPosY dialog get size hParent to DlgSzX, DlgSzY call dword pCrncySymbl using CrncySymbolsDlg(hParent, DlgPosX, DlgPosY, _ DlgSzX, DlgSzY) import close hCrncyDLL end if exit sub case else #if %def(%pb_cc32) con.color 12, -1, 5 : print "Error"; print " The language code you entered, " + $$dq + gLangCode + $$dq; print ", is not supported." con.color 12, -1, 5 : print "Error"; print con.color 12, -1, 5 : print "Error"; print " Or, there was an entry error." #else msgbox "The language code you entered, " + $$dq + gLangCode + $$dq + _ ", is not supported." + $$crlf + _ "Or, there was an entry error.", _ %mb_ok or %mb_iconerror or %mb_taskmodal, "Language Error" #endif exit sub end select LetterCnt = (peek(long, pData)) '- 1 ' LineCnt = LngDivCeil( LetterCnt, 8) '. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . reset gLetterLines() reset gLttrValLines() dim gLetterLines(LineCnt * 2 ) dim gLttrValLines(LineCnt * 2) LineNum = 1 pData += 4 'pointer to first letter 'read letters and put value "under" them for LetterNum = 0 to LetterCnt - 1 TmpLetter = peek$$(pData, 1) Clmn = LetterNum mod 8 if Clmn = 0 then gLetterLines(LineNum) += string$$( 5, $$spc) + TmpLetter if gDecimalSel then TmpVal = dec$(asc(TmpLetter),-5, 0, 0) gLttrValLines(LineNum) += string$$(2, $$spc) + TmpVal else 'is hex TmpVal = hex$(asc(TmpLetter), 4) gLttrValLines(LineNum) += string$$(3, $$spc) + TmpVal end if else '1, 2, 3, 4, 5, 6 and 7 gLetterLines(LineNum) += string$$( 8, $$spc) + TmpLetter if gDecimalSel then TmpVal = dec$(asc(TmpLetter),-5, 0, 0) gLttrValLines(LineNum) += string$$(4, $$spc) + TmpVal else 'is hex TmpVal = hex$(asc(TmpLetter), 4) gLttrValLines(LineNum) += string$$(5, $$spc) + TmpVal end if end if if clmn = 7 then incr LineNum pData += 2 next incr LineNum ' for LetterNum = LetterCnt - 2 to (LetterCnt * 2) - 3 for LetterNum = 0 to LetterCnt - 1 TmpLetter = peek$$(pData, 1) Clmn = LetterNum mod 8 if Clmn = 0 then gLetterLines(LineNum) += string$$( 5, $$spc) + TmpLetter if gDecimalSel then TmpVal = dec$(asc(TmpLetter),-5, 0, 0) gLttrValLines(LineNum) += string$$(2, $$spc) + TmpVal else 'is hex TmpVal = hex$(asc(TmpLetter), 4) gLttrValLines(LineNum) += string$$(3, $$spc) + TmpVal end if else '1, 2, 3, 4, 5, 6 and 7 gLetterLines(LineNum) += string$$( 8, $$spc) + TmpLetter if gDecimalSel then TmpVal = dec$(asc(TmpLetter),-5, 0, 0) gLttrValLines(LineNum) += string$$(4, $$spc) + TmpVal else 'is hex TmpVal = hex$(asc(TmpLetter), 4) gLttrValLines(LineNum) += string$$(5, $$spc) + TmpVal end if end if if clmn = 7 then incr LineNum pData += 2 next end sub ' '. . . . . . . . . . . . . . . . . . . . . . . . . . . 'In BASIC code this would take 2 divides (a "\" and a "MOD"), and a CEIL, plus 'some "glue" code to do as integer. 'This way uses 1 divide, and the CEIL becomes part of the "glue" code. 'In this program the negative value tests are not needed, but lets you copy 'the FASTPROC "as is" to use elsewhere. (no need to understand assembly if 'you don't want to.) fastproc LngDivCeil(byval Dividend as long, byval Divisor as long) as long ! push eax ! push edx ! xor edx, edx 'clear, upper 32 bits of dividend not used ! mov eax, Dividend ' ! bt eax, 31 'bit 31 "1" for negative dividend ! jnc DvdndNotNeg 'if dividend negative set edx to ! not edx 'all "1"s for 2's complement ! DvdndNotNeg: ! idiv Divisor 'the divide ! cmp edx, 0 'test for remainder (fraction if we were doing floating) ! jz NoRemainder ! bt eax, 31 'do not increament for negative with remainder ! jc NoRemainder 'if positive quotient and nonzero remainder, then ! inc eax 'increament quotient ! NoRemainder: ! mov Divisor, eax 'register to memory for fastproc return ! pop edx ! pop eax end fastproc = Divisor ' List of ISO 639-1 codes (to ID languages) '=============================================================================== %ID_LangLstLbl = 1000 %ID_LangLstCmboBx = 1001 %ID_ValOptFrm = 1002 %ID_DecimalOptBtn = 1003 %ID_HexOptBtn = 1004 %ID_AlphbtTxtBx = 1005 '------------------------------------------------------------------------------- sub DispNamesAndVals(byval hMainDlg as dword) local DispStr as wstring local LineNum as long for LineNum = 1 to ubound(gLetterLines()) DispStr += gLetterLines(LineNum) + $$crlf + _ gLttrValLines(LineNum) + $$crlf + _ string$$(2, $$spc) + string$$(69,"-") + $$crlf next control set text hMainDlg, %ID_AlphbtTxtBx, DispStr end sub '------------------------------------------------------------------------------- sub DoLangNames(byval hMainDlg as dword) local pData as dword local LangName as wstring local LangCnt, LangNameLen, LineNum as long pData = codeptr(LANG_LST) LangCnt = peek(long, pData) pData += 4 for LineNum = 1 to LangCnt LangNameLen = peek(word, pData) pData += 2 LangName = peek$$(pData, LangNameLen) pData += (LangNameLen * 2) combobox add hMainDlg, %ID_LangLstCmboBx, LangName next end sub '------------------------------------------------------------------------------- callback function MainDlgCB() as long local TmpStr as wstring static hCrncyPop as dword select case as long cb.msg case %wm_initdialog DoLangNames cb.hndl case %wm_command select case as long cb.ctl case %ID_DecimalOptBtn if cb.ctlmsg = %bn_clicked or cb.ctlmsg = %bn_hilite then gDecimalSel = -1 'cb.ctl is lo word of w, cb.ctlmsg is hi word of w dialog post cb.hndl, %wm_command, _ mak(dword, lo(word, %ID_LangLstCmboBx), _ lo(word, %cbn_selendok)), 0 end if '- - - - - - - - - case %ID_HexOptBtn if cb.ctlmsg = %bn_clicked then gDecimalSel = 0 dialog post cb.hndl, %wm_command, _ mak(dword, lo(word, %ID_LangLstCmboBx), _ lo(word, %cbn_selendok)), 0 end if '- - - - - - - - - case %ID_LangLstCmboBx if cb.ctlmsg = %cbn_selendok then control get text cb.hndl, %ID_LangLstCmboBx to TmpStr gLangCode = right$(TmpStr, 2) @pgLangCode = @pgLangCode or &h00200020??? ReadLettersAndVals cb.hndl DispNamesAndVals(cb.hndl) end if end select ' case %UM_CrncyPop ' if cb.wparam = (%USC_Handle and &hFFFF0000) then ' hCrncyPop = cb.lparam ' end if end select end function '------------------------------------------------------------------------------- function MainDlg() as long local hMainDlg as dword local DeskPxlX, DeskPxlY as long dialog default font "Microsoft Sans Serif", 12, 0, 1 font new "Consolas", 12,0 , 1, 0, 0 to ghFixedFont dialog new 0, "Alphabets Of (Some) Languages In Unicode", , , 341, 173, _ %ds_3dlook or %ds_modalframe or %ds_nofailcreate or %ds_setfont or _ %ws_caption or %ws_clipsiblings or %ws_dlgframe or %ws_minimizebox or _ %ws_popup or %ws_sysmenu, _ %ws_ex_left or %ws_ex_ltrreading or %ws_ex_rightscrollbar to hMainDlg desktop get client to DeskPxlX, DeskPxlY dialog pixels hMainDlg, DeskPxlX, DeskPxlY to units gDeskUntX, gDeskUntY #if %pb_revision = &h1004 swap gDeskUntX, gDeskUntY #endif dialog set loc hMainDlg, gDeskUntX - 344, gDeskUntY - 185 dialog set icon hMainDlg, "#101" dialog set color hMainDlg, -1, &h00B0B0B0& control add label, hMainDlg, %ID_LangLstLbl, "Language Select", 5, 1, 70, 11 control set color hMainDlg, %ID_LangLstLbl, -1, &h00B0B0B0& control add combobox, hMainDlg, %ID_LangLstCmboBx, , 3, 11, 152, 60, _ %cbs_disablenoscroll or %cbs_dropdownlist or %ws_tabstop or %ws_vscroll, _ %ws_ex_clientedge or %ws_ex_left control add frame, hMainDlg, %ID_ValOptFrm, "Unicode Letter Value Options", _ 158, 1, 180, 24 control set color hMainDlg, %ID_ValOptFrm, -1, &h00B0B0B0& control add option, hMainDlg, %ID_DecimalOptBtn, "Values In Decimal", _ 161, 10, 85, 12, %bs_vcenter or %ws_group or %ws_tabstop, %ws_ex_left control set color hMainDlg, %ID_DecimalOptBtn, -1, &h00B0B0B0& control add option, hMainDlg, %ID_HexOptBtn, "Values In Hexadecimal", _ 249, 10, 85, 12 control set color hMainDlg, %ID_HexOptBtn, -1, &h00B0B0B0& control set option hMainDlg, %ID_HexOptBtn, %ID_DecimalOptBtn, %ID_HexOptBtn control add textbox, hMainDlg, %ID_AlphbtTxtBx, "", 3, 28, 335, 142, _ %es_left or %es_multiline or %es_readonly or %ws_border or %ws_tabstop or _ %ws_vscroll or %ws_group, %ws_ex_clientedge or %ws_ex_left control set font hMainDlg, %ID_AlphbtTxtBx, ghFixedFont control set color hMainDlg, %ID_AlphbtTxtBx, -1, &h00E0E0E0& ' dialog show modal hMainDlg call MainDlgCB font end ghFixedFont end function '=============================================================================== '= Main function (starts dialog/callback for GUI, or Console control loop)====== function pbmain () as long pgLangCode = varptr(gLangCode) #if %def(%pb_cc32) local CmdVal as long CmdVal = 3 ConsoleControlLoop(CmdVal) #else MainDlg #endif end function '= Data area =================================================================== ' .................... .................... .................... ' x x x x x x x x '*.....##**.....##**.....##**.....##**.....##**.....##**.....##**.....## '**....##***....##***....##***....##***....##***....##***....##***....## '- Alphbet Data - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - asmdata LANG_LST dd 14& 'count of included languages dw 12??, "Deutsch - de" dw 28??, chr$$( &h0395??, &h03BB??, &h03BB??, &h03B7??, &h03BD??, &h03B9??) dw chr$$( &h03BA??, &h03AC??), " (modern Greek) - el" dw 12??, "English - en" dw 12??, "Español - es" dw 13??, "Français - fr" ' français dw 13??, "Italiano - it" dw 12??, chr$$(&h420, &h443, &h441, &h441, &h43A, &h438, &h439) + " - ru" dw 12??, "Svenska - sv" dw 11??, "Türkçe - tr" dw 16??, "Punctuation - x1" dw 20??, "Super/Sub Sript - x2" dw 13??, "Currency - x3" dw 19??, "Roman numerals - x5" dw 16??, "Box Drawing - x9" end asmdata asmdata DE 'German dd 30& 'number of letters 'upper case dw "A"$$, "B"$$, "C"$$, "D"$$, "E"$$, "F"$$, "G"$$, "H"$$, "I"$$, "J"$$ dw "K"$$, "L"$$, "M"$$, "N"$$, "O"$$, "P"$$, "Q"$$, "R"$$, "S"$$, "T"$$ dw "U"$$, "V"$$, "W"$$, "X"$$, "Y"$$, "Z"$$ dw chr$$(196), chr$$(214), chr$$(220), chr$$(7838) 'lower case dw "a"$$, "b"$$, "c"$$, "d"$$, "e"$$, "f"$$, "g"$$, "h"$$, "i"$$, "j"$$ dw "k"$$, "l"$$, "m"$$, "n"$$, "o"$$, "p"$$, "q"$$, "r"$$, "s"$$, "t"$$ dw "u"$$, "v"$$, "w"$$, "x"$$, "y"$$, "z"$$ dw chr$$(228), chr$$(246), chr$$(252), chr$$(223) end asmdata asmdata EL 'Modern Greek '(Greek has one upper character with two lower case versions of that 'character. The second lower case character is only used as last letter of a 'word. Therefore, one empty position in upper case.) dd 25& 'number of letters 'upper case dw chr$$(&h0391??, &h0392??, &h0393??, &h0394??, &h0395??, &h0396??) dw chr$$(&h0397??, &h0398??, &h0399??, &h039A??) dw chr$$(&h039B??, &h039C??, &h039D??, &h039E??, &h039F??, &h03A0??) dw chr$$(&h03A1??, &h03A3??), $$spc, chr$$(&h03A4??) dw chr$$(&h03A5??, &h03A6??, &h03A7??, &h03A8??, &h03A9??) 'lower case dw chr$$(&h03B1??, &h03B2??, &h03B3??, &h03B4??, &h03B5??, &h03B6??) dw chr$$(&h03B7??, &h03B8??, &h03B9??, &h03BA??) dw chr$$(&h03BB??, &h03BC??, &h03BD??, &h03BE??, &h03BF??, &h03C0??) dw chr$$(&h03C1??, &h03C3??, &h03C2??, &h03C4??) dw chr$$(&h03C5??, &h03C6??, &h03C7??, &h03C8??, &h03C9??) end asmdata asmdata EN 'English dd 26& 'number of letters 'upper case dw "A"$$, "B"$$, "C"$$, "D"$$, "E"$$, "F"$$, "G"$$, "H"$$, "I"$$, "J"$$ dw "K"$$, "L"$$, "M"$$, "N"$$, "O"$$, "P"$$, "Q"$$, "R"$$, "S"$$, "T"$$ dw "U"$$, "V"$$, "W"$$, "X"$$, "Y"$$, "Z"$$ 'lower case dw "a"$$, "b"$$, "c"$$, "d"$$, "e"$$, "f"$$, "g"$$, "h"$$, "i"$$, "j"$$ dw "k"$$, "l"$$, "m"$$, "n"$$, "o"$$, "p"$$, "q"$$, "r"$$, "s"$$, "t"$$ dw "u"$$, "v"$$, "w"$$, "x"$$, "y"$$, "z"$$ end asmdata asmdata ES 'Spanish dd 33& 'number of letters 'upper case ' A A' B C D E E' F dw "A"$$, chr$$(&hC1??), "B"$$, "C"$$, "D"$$, "E"$$, chr$$(&hC9??), "F"$$ ' G H I I' J K L M N dw "G"$$, "H"$$, "I"$$, chr$$(&hCD??), "J"$$, "K"$$, "L"$$, "M"$$, "N"$$ ' N~ O O' P Q R S T dw chr$$(&hD1??), "O"$$, chr$$(&hD3??), "P"$$, "Q"$$, "R"$$, "S"$$, "T"$$ ' U U' U.. V W X Y Z dw "U"$$, chr$$(&hDA??), chr$$(&hDC??), "V"$$, "W"$$, "X"$$, "Y"$$, "Z"$$ 'upside down ? dw chr$$(&hBF??) 'lower case ' a a' b c d e e' f dw "a"$$, chr$$(&hE1??), "b"$$, "c"$$, "d"$$, "e"$$, chr$$(&hE9??), "f"$$ ' g h i i' j k l m n dw "g"$$, "h"$$, "i"$$, chr$$(&hED??), "j"$$, "k"$$, "l"$$, "m"$$, "n"$$ ' n~ o o' p q r s t dw chr$$(&hF1??), "o"$$, chr$$(&hF3??), "p"$$, "q"$$, "r"$$, "s"$$, "t"$$ ' u u' u.. v w x y z dw "u"$$, chr$$(&hFA??), chr$$(&hFC??), "v"$$, "w"$$, "x"$$, "y"$$, "z"$$ 'upside down ! dw chr$$(&hA1??) end asmdata asmdata FR dd 41& 'number of letters 'upper case dw "A"$$, chr$$(&hC0??, &hC2??, &hC6??), "B"$$, "C"$$, chr$$(&hC7??), "D"$$ dw "E"$$, chr$$(&hC9??) '10 dw chr$$(&hC8??, &hCA??, &hCB??), "G"$$, "H"$$, "I"$$, chr$$(&hCE??, &hCF??) dw "J"$$, "K"$$ '20 dw "L"$$, "M"$$, "N"$$, "O"$$, chr$$(&hD4??, &h0152??), "P"$$, "Q"$$, "R"$$ dw "S"$$ '30 dw "T"$$, "U"$$, chr$$(&hD9??, &hDB??, &hDC??), "V"$$, "W"$$, "X"$$, "Y"$$ dw chr$$(&h0178??) '40 dw "Z"$$ '41 'lower case dw "a"$$, chr$$(&hE0??, &hE2??, &hE6??), "b"$$, "c"$$, chr$$(&hE7??), "d"$$ dw "e"$$, chr$$(&hE9??) dw chr$$(&hE8??, &hEA??, &hEB??), "g"$$, "h"$$, "i"$$, chr$$(&hEE??, &hEF??) dw "j"$$, "k"$$ dw "l"$$, "m"$$, "n"$$, "o"$$, chr$$(&hF4??, &h0153??), "p"$$, "q"$$, "r"$$ dw "s"$$ dw "t"$$, "u"$$, chr$$(&hF9??, &hFB??, &hFC??), "v"$$, "w"$$, "x"$$, "y"$$ dw chr$$(&hFF??) dw "z"$$ end asmdata asmdata IT 'Italian dd 31& 'letter count 'upper case dw chr$$(&h0041??, &h00C0??, &h0042??, &h0043??, &h0044??, &h0045??) dw chr$$(&h00C8??, &h00C9??, &h0046??, &h0047??) dw chr$$(&h0048??, &h0049??, &h00CC??, &h00CD??, &h00CE??, &h004C??) dw chr$$(&h004D??, &h004E??, &h004F??, &h00D2??) dw chr$$(&h00D3??, &h0050??, &h0051??, &h0052??, &h0053??, &h0054??) dw chr$$(&h0055??, &h00D9??, &h00DA??, &h0056??) dw chr$$(&h005A??) 'lower case dw chr$$(&h0061??, &h00E0??, &h0062??, &h0063??, &h0064??, &h0065??) dw chr$$(&h00E8??, &h00E9??, &h0066??, &h0067??) dw chr$$(&h0068??, &h0069??, &h00EC??, &h00ED??, &h00EE??, &h006C??) dw chr$$(&h006D??, &h006E??, &h006F??, &h00F2??) dw chr$$(&h00F3??, &h0070??, &h0071??, &h0072??, &h0073??, &h0074??) dw chr$$(&h0075??, &h00F9??, &h00FA??, &h0076??) dw chr$$(&h007A??) end asmdata asmdata RU 'Russian dd 33& 'letter count 'upper case dw chr$$(&h0410??, &h0411??, &h0412??, &h0413??, &h0414??, &h0415??) dw chr$$(&h0401??, &h0416??, &h0417??, &h0418??) dw chr$$(&h0419??, &h041A??, &h041B??, &h041C??, &h041D??, &h041E??) dw chr$$(&h041F??, &h0420??, &h0421??, &h0422??) dw chr$$(&h0423??, &h0424??, &h0425??, &h0426??, &h0427??, &h0428??) dw chr$$(&h0429??, &h042A??, &h042B??, &h042C??) dw chr$$(&h042D??, &h042E??, &h042F??) 'lower case dw chr$$(&h0430??, &h0431??, &h0432??, &h0433??, &h0434??, &h0435??) dw chr$$(&h0451??, &h0436??, &h0437??, &h0438??) dw chr$$(&h0419??, &h043A??, &h043B??, &h043C??, &h043D??, &h043E??) dw chr$$(&h043F??, &h0440??, &h0441??, &h0442??) dw chr$$(&h0443??, &h0444??, &h0445??, &h0446??, &h0447??, &h0448??) dw chr$$(&h0449??, &h044A??, &h044B??, &h044C??) dw chr$$(&h044D??, &h044E??, &h044F??) end asmdata asmdata SV 'Swedish dd 29& 'number of letters 'upper case dw "A"$$, "B"$$, "C"$$, "D"$$, "E"$$, "F"$$, "G"$$, "H"$$, "I"$$, "J"$$ dw "K"$$, "L"$$, "M"$$, "N"$$, "O"$$, "P"$$, "Q"$$, "R"$$, "S"$$, "T"$$ dw "U"$$, "V"$$, "W"$$, "X"$$, "Y"$$, "Z"$$, chr$$(197), chr$$(196) dw chr$$(214) 'lower case dw "a"$$, "b"$$, "c"$$, "d"$$, "e"$$, "f"$$, "g"$$, "h"$$, "i"$$, "j"$$ dw "k"$$, "l"$$, "m"$$, "n"$$, "o"$$, "p"$$, "q"$$, "r"$$, "s"$$, "t"$$ dw "u"$$, "v"$$, "w"$$, "x"$$, "y"$$, "z"$$, chr$$(229), chr$$(228) dw chr$$(246) end asmdata asmdata TR 'Turkish dd 29& 'number of letters 'upper case dw "A"$$, "B"$$, "C"$$, chr$$(199), "D"$$, "E"$$, "F"$$, "G"$$, chr$$(286) dw "H"$$ dw chr$$(73), chr$$(304), "J"$$, "K"$$, "L"$$, "M"$$, "N"$$, "O"$$ dw chr$$(214), "P"$$ dw "R"$$, "S"$$, chr$$(350), "T"$$, "U"$$, chr$$(220), "V"$$, "Y"$$, "Z"$$ 'lower case dw "a"$$, "b"$$, "c"$$, chr$$(231), "d"$$, "e"$$, "f"$$, "g"$$, chr$$(287) dw "h"$$ dw chr$$(305), chr$$(105), "j"$$, "k"$$, "l"$$, "m"$$, "n"$$, "o"$$ dw chr$$(246), "p"$$ dw "r"$$, "s"$$, chr$$(351), "t"$$, "u"$$, chr$$(252), "v"$$, "y"$$, "z"$$ end asmdata '------------------------------------------------------------------------------- asmdata X1 'Punctuation dd 30& 'number of characters 'treat as upper case for display code ' spc ! " # % & ' ( dw chr$$(&h0020, &h0021, &h0022, &h0023, &h0025, &h0026, &h0027, &h0028) ' ) * + , - . / : dw chr$$(&h0029, &h002A, &h002B, &h002C, &h002D, &h002E, &h002F, &h003A) ' ; < = > ? @ [ \ dw chr$$(&h003B, &h003C, &h003D, &h003E, &h003F, &h0040, &h005B, &h005C) ' ] ^ _ ` { | dw chr$$(&h005D, &h005E, &h005F, &h0060, &h007B, &h007C) 'treat as lower case for display code ' } ~ nbsp ¡ ¦ § ¨ © dw chr$$(&h007D, &h007E, &h00A0, &h00A1, &h00A6, &h00A7, &h00A8, &h00A9) ' ª « ¬ s hypn, ® ¯ ° ± dw chr$$(&h00AA, &h00AB, &h00AC, &h00AD, &h00AE, &h00AF, &h00B0, &h00B1) ' ´ µ ¶ · ¸ º » ¿ dw chr$$(&h00B4, &h00B5, &h00B6, &h00B7, &h00B8, &h00BA, &h00BB, &h00BF) ' × ÷ bullet dagger d daggr dbl ! dw chr$$(&h00D7, &h00F7, &h2022, &h2020, &h2021, &h203C) end asmdata '#endif #if 0 '------------------------------------------------------------------------------- asmdata X2 'Superscript and subscript numbers dd 15& 'Superscripts ' sup 0 sup 1 sup 2 sup 3 sup 4 sup 5 sup 6 sup 7 dw chr$$(&h2070, &h00B9, &h00B2, &h00B3, &h2074, &h2075, &h2076, &h2077) ' sup 8 sup 9 sup + sup - sup = sup ( sup ) dw chr$$(&h2078, &h2079, &h207A, &h207B, &h207C, &h207D, &h207E) 'Subscripts ' sub 0 sub 1 sub 2 sub 3 sub 4 sub 5 sub 6 sub 7 dw chr$$(&h2080, &h2081, &h2082, &h2083, &h2084, &h2085, &h2086, &h2087) ' sub 8 sub 9 sub + sub - sub = sub ( sub ) dw chr$$(&h2088, &h2089, &h208A, &h208B, &h208C, &h208D, &h208E) end asmdata '------------------------------------------------------------------------------- 'X3 for Currency symbols uses a separate "popup" dialog. 'X4 and X6 to X8 are reserved. '------------------------------------------------------------------------------- asmdata X5 'Roman numerals dd 16& 'Upper case ' I II III IV V VI VII VIII dw chr$$(&h2160, &h2161, &h2162, &h2163, &h2164, &h2165, &h2166, &h2167) ' IX X XI XII L C D M dw chr$$(&h2168, &h2169, &h216A, &h216B, &h216C, &h216D, &h216E, &h216F) 'lower case ' i ii iii iv v vi vii viii dw chr$$(&h2170, &h2171, &h2172, &h2173, &h2174, &h2175, &h2176, &h2177) ' ix x xi xii l c d m dw chr$$(&h2178, &h2179, &h217A, &h217B, &h217C, &h217D, &h217E, &h217F) end asmdata asmdata X9 'Box Drawing dd 64& 'number of letters 'treat as upper case for display code dw chr$$(&h2500,&h2501,&h2502,&h2503,&h2504,&h2505,&h2506,&h2507,&h2508,&h2509) dw chr$$(&h250A,&h250B,&h250C,&h250D,&h250E,&h250F,&h2510,&h2511,&h2512,&h2513) dw chr$$(&h2514,&h2515,&h2516,&h2517,&h2518,&h2519,&h251A,&h251B,&h251C,&h251D) dw chr$$(&h251E,&h251F,&h2520,&h2521,&h2522,&h2523,&h2524,&h2525,&h2526,&h2527) dw chr$$(&h2528,&h2529,&h252A,&h252B,&h252C,&h252D,&h252E,&h252F,&h2530,&h2531) dw chr$$(&h2532,&h2533,&h2534,&h2535,&h2536,&h2537,&h2538,&h2539,&h253A,&h253B) dw chr$$(&h253C,&h253D,&h253E,&h253F) 'treat as lower case for display code dw chr$$(&h2540,&h2541,&h2542,&h2543,&h2544,&h2545,&h2546,&h2547,&h2548,&h2549) dw chr$$(&h254A,&h254B,&h254C,&h254D,&h254E,&h254F,&h2550,&h2551,&h2552,&h2553) dw chr$$(&h2554,&h2555,&h2556,&h2557,&h2558,&h2559,&h255A,&h255B,&h255C,&h255D) dw chr$$(&h255E,&h255F,&h2560,&h2561,&h2562,&h2563,&h2564,&h2565,&h2566,&h2567) dw chr$$(&h2568,&h2569,&h256A,&h256B,&h256C,&h256D,&h256E,&h256F,&h2570,&h2571) dw chr$$(&h2572,&h2573,&h2574,&h2575,&h2576,&h2577,&h2578,&h2579,&h257A,&h257B) dw chr$$(&h257C,&h257D,&h257E,&h257F,&h2580,&h2581,&h2532,&h2533,&h2534,&h2535) dw chr$$(&h2536,&h2537,&h2538,&h2539) end asmdata ' '
Created on 25 Aug 2021; last edit 19 Oct 2021