I noticed the name of this page on browser tab was truncated "Languages". That is misleading to what the progam does, so I've turned the title around."
This version contains glyphs for letters and symbols 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. Each glyph also has the UTF-16 code point, shown in user's choice of decimal or hexidecimal.
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.
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 15 May 2025
Source and compiled code partial copyleft (ↄ), the limitation is you may not claim creation and attempt to copyright it.To Dale's Notebook
| To Programs
|