Language Alphabets

view of dialog

  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.

Downloads

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 . .

Source Code

  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.

For main program

#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