'MacroName:Cyrillic2Latin
'MacroDescription:Automatically transliterate a field with Cyrillic characters into Latin characters
'Macro created by: Joel Hahn, Niles Public Library District
'Last modified: 30 October 2013

Declare Function GetActiveWindow Lib "user32" () As Long
Declare Function OpenClipboard Lib "user32" Alias "OpenClipboard" (ByVal hwnd As Long) As Long
Declare Function GetClipboardData Lib "user32" Alias "GetClipboardData" (ByVal wFormat As Long) As Long
Declare Function CloseClipboard Lib "user32" Alias "CloseClipboard" () As Long
Declare Function GlobalLock Lib "kernel32" Alias "GlobalLock" (ByVal hMem As Long) As Long
Declare Function GlobalUnlock Lib "kernel32" Alias "GlobalUnlock" (ByVal hMem As Long) As Long
Declare Function lstrlen Lib "kernel32" Alias "lstrlenW" (ByVal lpString As Long) As Long
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pTo As Any, uFrom As Any, ByVal lSize As Long)

Option Explicit

Declare Function GetClip() As String
Declare Function PointerToStringA(lpStringA As Long) As String

Declare Function TransRussian (sHexcode As String) As String
Declare Function TransBelarusian (sHexcode As String) As String
Declare Function TransBulgarian (sHexcode As String) As String
Declare Function TransMacedonian (sHexcode As String) As String
Declare Function TransRusyn (sHexcode As String) As String
Declare Function TransSlavic (sHexcode As String) As String
Declare Function TransSerbian (sHexcode As String) As String
Declare Function TransUkranian (sHexcode As String) As String
Declare Function TransNonSlavic (sHexcode As String) As String

Sub Main
   Dim CharacterSet As Integer
   Dim response As Integer
   Dim bool As Integer
   Dim CurRow As Integer
   Dim retval As String
   Dim NewField As String
   Dim place As Integer
   Dim place2 As Integer
   Dim UCode As String
   Dim TransChar As String

'Set the default transliteration table selection
CharacterSet = 0 'Russian
' 0 = Russian
' 1 = Belarusian
' 2 = Bulgarian
' 3 = Church Slavic
' 4 = Serbian
' 5 = Ukranian
' 6 = Non-Slavic Cyrillic languages
' 7 = Rusyn
' 8 = Macedonian

   Dim CS As Object
   On Error Resume Next
   Set CS  = GetObject(,"Connex.Client")
   On Error GoTo 0
   If CS  Is Nothing Then
      Set CS  = CreateObject("Connex.Client")
   End If
   
   Select Case CS.ItemType
     Case -1, 5 To 13, 15 To 16, 21 To 25
       MsgBox "Not viewing a MARC record. Exiting..."
       Exit Sub
   End Select

   Dim CharSets(8) As String
   CharSets(0) = "Russian"
   CharSets(1) = "Belarusian"
   CharSets(2) = "Bulgarian"
   CharSets(3) = "Church Slavic"
   CharSets(4) = "Serbian"
   CharSets(5) = "Ukranian"
   CharSets(6) = "Non-Slavic Cyrillic"
   CharSets(7) = "Rusyn"
   CharSets(8) = "Macedonian"

   Begin Dialog newdlg 183, 50, "Transliteration Options"
      OkButton  35, 27, 50, 14
      CancelButton  95, 27, 50, 14
      Text  3, 3, 177, 10, "Please select the LC Cyrillic transliteration table to use:"
      DropListBox  42, 11, 78, 98, CharSets(), .Langs
   End Dialog
   Dim CharSelect As newdlg
   CharSelect.Langs = CharacterSet
   response = Dialog(CharSelect)
   If response = 0 Then
     Exit Sub
   End If
   CharacterSet = CharSelect.Langs   
   
   CurRow = CS.CursorRow
   CS.CopyField

   retval = GetClip()

   NewField = Left(retval, 5)
   retval = Mid(retval, 6)

   If InStr(retval, "|4") = 0 Then
     MsgBox "There are no Cyrillic characters in the selected field. Exiting..."
     Exit Sub
   End If

   Do While InStr(retval, "|")
     place = InStr(retval, "|")
     If place > 1 Then 
       NewField = NewField & Left(retval, place - 1)
     End If
     place2 = InStr(place + 1, retval, "|")
     UCode = Mid(retval, place + 1, place2 - place - 1)
     retval = Mid(retval, place2 + 1)
     If UCode = "1C2" Then
       TransChar = Chr(223)
     Else
       Select Case CharacterSet
         Case 0
           TransChar = TransRussian(UCode)
         Case 1
           TransChar = TransBelarusian(UCode)
         Case 2
           TransChar = TransBulgarian(UCode)
         Case 3
           TransChar = TransSlavic(UCode)
         Case 4
           TransChar = TransSerbian(UCode)
         Case 5
           TransChar = TransUkranian(UCode)
         Case 6
           TransChar = TransNonSlavic(UCode)
         Case 7
           TransChar = TransRusyn(UCode)
         Case 8
           TransChar = TransMacedonian(UCode)
         Case Else
           TransChar = "*"
       End Select
     End If

     If (CharacterSet = 0 Or CharacterSet = 3) And TransChar = Chr(183) And (Left(retval, 1) Like "[A-Za-z|]") = FALSE Then
       TransChar = ""
     ElseIf CharacterSet = 2 And (TransChar = "U" & Chr(230) Or TransChar = "u" & Chr(230)) And (Left(retval, 1) Like "[A-Za-z|]") = FALSE Then
       TransChar = Chr(183)
     ElseIf CharacterSet = 3 And (Right(NewField, 2) = "V" & Chr(231) Or Right(NewField, 2) = "v"  & Chr(231)) Then
       If UCode = "300" Or UCode = "301" Or UCode = "309" Then
         If Mid(NewField, Len(NewField) - 1, 1) = "V" Then
           Mid(NewField, Len(NewField) - 1, 1) = "Y"
         Else
           Mid(NewField, Len(NewField) - 1, 1) = "y"
         End If
       End If
     ElseIf CharacterSet = 7 And (LCase(TransChar) = "o" And Left(retval, 5) = "|302|") Then
       TransChar = TransChar & Chr(227)
       retval = Mid(retval, 6)
     End If
     
     NewField = NewField & TransChar
   Loop
   If retval <> "" Then NewField = NewField & retval

   bool = CS.AddFieldLine(CurRow+1, NewField)
   CS.CursorRow = CS.CursorRow -1
   CS.SendKeys "%ekl", -1
   
   'MsgBox NewField

End Sub

'################################################################################

Function GetClip() As String
   Dim CF_DSPTEXT As Integer
   Dim CF_OEMTEXT As Integer
   Dim CF_TEXT As Integer
   Dim CF_UNICODETEXT As Integer
   Dim hwnd As Long
   Dim bool As Long
   Dim retval As String

   CF_DSPTEXT = &H81
   CF_OEMTEXT = 7
   CF_TEXT = 1
   CF_UNICODETEXT = 13

   hwnd = GetActiveWindow()
   bool = OpenClipboard(hwnd)
   Dim hData as Long
   Dim lpData as Long
   
   hData = GetClipboardData(CF_UNICODETEXT)
         'If hData Then
            lpData = GlobalLock(hData)
               retval = PointerToStringA(lpData)
            Call GlobalUnlock(hData)
        ' End If
   bool = CloseClipboard()
   GetClip = retval
End Function

'################################################################################

Function PointerToStringA(lpStringA As Long) As String
   Dim Buffer() As Integer
   Dim nLen As Long
   Dim i As Long
   Dim psa As String
   
   'If lpStringA Then
      nLen = lstrlen(lpStringA)
      If nLen Then
         ReDim Buffer(0 To (nLen - 1) * 2) As Integer
         CopyMemory Buffer(0), ByVal lpStringA, nLen * 2
         for i = 0 to (nLen-1) * 2
           if Buffer(i) < 128 and Buffer(i) > 0 Then
             psa = psa & Chr(Buffer(i))
           Elseif Buffer(i) > 128 Then
             psa = psa & "|" & Hex(Buffer(i)) & "|" 'Chr(Buffer(i))
           End If
           'If len(psa) > 80 Then psa = psa & Chr(10)
         Next
         PointerToStringA = psa 'StrConv(Buffer, vbUnicode)
      End If
   'End If
End Function

'################################################################################

Function TransRussian (sHexcode As String) As String
  Select Case sHexcode
    Case "410"
      TransRussian = "A"
    Case "411"
      TransRussian = "B"
    Case "412"
      TransRussian = "V"
    Case "413"
      TransRussian = "G"
    Case "414"
      TransRussian = "D"
    Case "415"
      TransRussian = "E"
    Case "416"
      TransRussian = "Zh"
    Case "417"
      TransRussian = "Z"
    Case "418"
      TransRussian = "I"
    Case "406"
      TransRussian = "I" & Chr(229)
    Case "419"
      TransRussian = "I" & Chr(230)
    Case "41A"
      TransRussian = "K"
    Case "41B"
      TransRussian = "L"
    Case "41C"
      TransRussian = "M"
    Case "41D"
      TransRussian = "N"
    Case "41E"
      TransRussian = "O"
    Case "41F"
      TransRussian = "P"
    Case "420"
      TransRussian = "R"
    Case "421"
      TransRussian = "S"
    Case "422"
      TransRussian = "T"
    Case "423"
      TransRussian = "U"
    Case "424"
      TransRussian = "F"
    Case "425"
      TransRussian = "Kh"
    Case "426"
      TransRussian = "T" & Chr(235) & "S" & Chr(236)
    Case "427"
      TransRussian = "Ch"
    Case "428"
      TransRussian = "Sh"
    Case "429"
      TransRussian = "Shch"
    Case "42A"
      TransRussian = Chr(183)
    Case "42B"
      TransRussian = "Y"
    Case "42C"
      TransRussian = Chr(167)
    Case "42D"
      TransRussian = "E" & Chr(231)
    Case "42E"
      TransRussian = "I" & Chr(235) & "U" & Chr(236)
    Case "42F"
      TransRussian = "I" & Chr(235) & "A" & Chr(236)
    Case "401"
      TransRussian = "E" & Chr(232)
    Case "462"
      TransRussian = "I" & Chr(235) & "E" & Chr(236)
    'Case "466"
    '  TransRussian = "E" & Chr(241)
    Case "472"
      TransRussian = "F" & Chr(231)
    Case "474"
      TransRussian = "Y" & Chr(231)
    Case "430"
      TransRussian = "a"
    Case "431"
      TransRussian = "b"
    Case "432"
      TransRussian = "v"
    Case "433"
      TransRussian = "g"
    Case "434"
      TransRussian = "d"
    Case "435"
      TransRussian = "e"
    Case "436"
      TransRussian = "zh"
    Case "437"
      TransRussian = "z"
    Case "438"
      TransRussian = "i"
    Case "456"
      TransRussian = "i" & Chr(229)
    Case "439"
      TransRussian = "i" & Chr(230)
    Case "43A"
      TransRussian = "k"
    Case "43B"
      TransRussian = "l"
    Case "43C"
      TransRussian = "m"
    Case "43D"
      TransRussian = "n"
    Case "43E"
      TransRussian = "o"
    Case "43F"
      TransRussian = "p"
    Case "440"
      TransRussian = "r"
    Case "441"
      TransRussian = "s"
    Case "442"
      TransRussian = "t"
    Case "443"
      TransRussian = "u"
    Case "444"
      TransRussian = "f"
    Case "445"
      TransRussian = "kh"
    Case "446"
      TransRussian = "t" & Chr(235) & "s" & Chr(236)
    Case "447"
      TransRussian = "ch"
    Case "448"
      TransRussian = "sh"
    Case "449"
      TransRussian = "shch"
    Case "44A"
      TransRussian = Chr(183)
    Case "44B"
      TransRussian = "y"
    Case "44C"
      TransRussian = Chr(167)
    Case "44D"
      TransRussian = "e" & Chr(231)
    Case "44E"
      TransRussian = "i" & Chr(235) & "u" & Chr(236)
    Case "44F"
      TransRussian = "i" & Chr(235) & "a" & Chr(236)
    Case "451"
      TransRussian = "e" & Chr(232)
    Case "463"
      TransRussian = "i" & Chr(235) & "e" & Chr(236)
    'Case "467"
    '  TransRussian = "e" & Chr(241)
    Case "473"
      TransRussian = "f" & Chr(231)
    Case "475"
      TransRussian = "y" & Chr(231)
    Case Else
      TransRussian = Chr(252)
  End Select
End Function

'################################################################################

Function TransBelarusian (sHexcode As String) As String
  Select Case sHexcode
    Case "410"
      TransBelarusian = "A"
    Case "411"
      TransBelarusian = "B"
    Case "412"
      TransBelarusian = "V"
    Case "413"
      TransBelarusian = "H"
    Case "403"
      TransBelarusian = "G"
    Case "414"
      TransBelarusian = "D"
    Case "415"
      TransBelarusian = "E"
    Case "401"
      TransBelarusian = "I" & Chr(235) & "O" & Chr(236)
    Case "416"
      TransBelarusian = "Z" & Chr(235) & "H" & Chr(236)
    Case "417"
      TransBelarusian = "Z"
    Case "406"
      TransBelarusian = "I"
    Case "407"
      TransBelarusian = "I" & Chr(232)
    Case "418"
      TransBelarusian = "I" & Chr(229)
    Case "419"
      TransBelarusian = "I" & Chr(230)
    Case "41A"
      TransBelarusian = "K"
    Case "41B"
      TransBelarusian = "L"
    Case "41C"
      TransBelarusian = "M"
    Case "41D"
      TransBelarusian = "N"
    Case "41E"
      TransBelarusian = "O"
    Case "41F"
      TransBelarusian = "P"
    Case "420"
      TransBelarusian = "R"
    Case "421"
      TransBelarusian = "S"
    Case "422"
      TransBelarusian = "T"
    Case "423"
      TransBelarusian = "U"
    Case "40E"
      TransBelarusian = "U" & Chr(230)
    Case "424"
      TransBelarusian = "F"
    Case "425"
      TransBelarusian = "Kh"
    Case "426"
      TransBelarusian = "Ts"
    Case "427"
      TransBelarusian = "Ch"
    Case "428"
      TransBelarusian = "Sh"
    Case "429"
      TransBelarusian = "Shch"
    Case "42A"
      TransBelarusian = Chr(183)
    Case "42B"
      TransBelarusian = "Y"
    Case "42C"
      TransBelarusian = Chr(167)
    Case "42D"
      TransBelarusian = "E" & Chr(231)
    Case "42E"
      TransBelarusian = "I" & Chr(235) & "U" & Chr(236)
    Case "42F"
      TransBelarusian = "I" & Chr(235) & "A" & Chr(236)
    'Case "462"
    '  TransBelarusian = "I" & Chr(235) & "E" & Chr(236)
    'Case "472"
    '  TransBelarusian = "F" & Chr(231)
    'Case "474"
    '  TransBelarusian = "Y" & Chr(231)
    Case "48C"
      TransBelarusian = "E" & Chr(233)
    Case "430"
      TransBelarusian = "a"
    Case "431"
      TransBelarusian = "b"
    Case "432"
      TransBelarusian = "v"
    Case "433"
      TransBelarusian = "h"
    Case "453"
      TransBelarusian = "g"
    Case "434"
      TransBelarusian = "d"
    Case "435"
      TransBelarusian = "e"
    Case "451"
      TransBelarusian = "i" & Chr(235) & "o" & Chr(236)
    Case "436"
      TransBelarusian = "z" & Chr(235) & "h" & Chr(236)
    Case "437"
      TransBelarusian = "z"
    Case "456"
      TransBelarusian = "i"
    Case "457"
      TransBelarusian = "i" & Chr(232)
    Case "438"
      TransBelarusian = "i" & Chr(229)
    Case "439"
      TransBelarusian = "i" & Chr(230)
    Case "43A"
      TransBelarusian = "k"
    Case "43B"
      TransBelarusian = "l"
    Case "43C"
      TransBelarusian = "m"
    Case "43D"
      TransBelarusian = "n"
    Case "43E"
      TransBelarusian = "o"
    Case "43F"
      TransBelarusian = "p"
    Case "440"
      TransBelarusian = "r"
    Case "441"
      TransBelarusian = "s"
    Case "442"
      TransBelarusian = "t"
    Case "443"
      TransBelarusian = "u"
    Case "45E"
      TransBelarusian = "u" & Chr(230)
    Case "444"
      TransBelarusian = "f"
    Case "445"
      TransBelarusian = "kh"
    Case "446"
      TransBelarusian = "ts"
    Case "447"
      TransBelarusian = "ch"
    Case "448"
      TransBelarusian = "sh"
    Case "449"
      TransBelarusian = "shch"
    Case "44A"
      TransBelarusian = Chr(183)
    Case "44B"
      TransBelarusian = "y"
    Case "44C"
      TransBelarusian = Chr(167)
    Case "44D"
      TransBelarusian = "e" & Chr(231)
    Case "44E"
      TransBelarusian = "i" & Chr(235) & "u" & Chr(236)
    Case "44F"
      TransBelarusian = "i" & Chr(235) & "a" & Chr(236)
    'Case "463"
    '  TransBelarusian = "i" & Chr(235) & "e" & Chr(235)
    'Case "473"
    '  TransBelarusian = "f" & Chr(231)
    'Case "475"
    '  TransBelarusian = "y" & Chr(231)
    Case "48D"
      TransBelarusian = "e" & Chr(233)
    Case Else
      TransBelarusian = Chr(252)
  End Select
End Function

'################################################################################

Function TransBulgarian (sHexcode As String) As String
  Select Case sHexcode
    Case "410"
      TransBulgarian = "A"
    Case "411"
      TransBulgarian = "B"
    Case "412"
      TransBulgarian = "V"
    Case "413"
      TransBulgarian = "G"
    Case "414"
      TransBulgarian = "D"
    Case "415"
      TransBulgarian = "E"
    Case "416"
      TransBulgarian = "Zh"
    Case "417"
      TransBulgarian = "Z"
    Case "418"
      TransBulgarian = "I"
    Case "419"
      TransBulgarian = "I" & Chr(230)
    Case "41A"
      TransBulgarian = "K"
    Case "41B"
      TransBulgarian = "L"
    Case "41C"
      TransBulgarian = "M"
    Case "41D"
      TransBulgarian = "N"
    Case "41E"
      TransBulgarian = "O"
    Case "41F"
      TransBulgarian = "P"
    Case "420"
      TransBulgarian = "R"
    Case "421"
      TransBulgarian = "S"
    Case "422"
      TransBulgarian = "T"
    Case "423"
      TransBulgarian = "U"
    Case "424"
      TransBulgarian = "F"
    Case "425"
      TransBulgarian = "Kh"
    Case "426"
      TransBulgarian = "T" & Chr(235) & "S" & Chr(236)
    Case "427"
      TransBulgarian = "Ch"
    Case "428"
      TransBulgarian = "Sh"
    Case "429"
      TransBulgarian = "Sht"
    Case "42A"
      TransBulgarian = "U" & Chr(230)
    Case "42C"
      TransBulgarian = Chr(167)
    Case "462"
      TransBulgarian = "I" & Chr(235) & "E" & Chr(236)
    Case "42E"
      TransBulgarian = "I" & Chr(235) & "U" & Chr(236)
    Case "42F"
      TransBulgarian = "I" & Chr(235) & "A" & Chr(236)
    Case "46A"
      TransBulgarian = "U" & Chr(239)
    Case "430"
      TransBulgarian = "a"
    Case "431"
      TransBulgarian = "b"
    Case "432"
      TransBulgarian = "v"
    Case "433"
      TransBulgarian = "g"
    Case "434"
      TransBulgarian = "d"
    Case "435"
      TransBulgarian = "e"
    Case "436"
      TransBulgarian = "zh"
    Case "437"
      TransBulgarian = "z"
    Case "438"
      TransBulgarian = "i"
    Case "439"
      TransBulgarian = "i" & Chr(230)
    Case "43A"
      TransBulgarian = "k"
    Case "43B"
      TransBulgarian = "l"
    Case "43C"
      TransBulgarian = "m"
    Case "43D"
      TransBulgarian = "n"
    Case "43E"
      TransBulgarian = "o"
    Case "43F"
      TransBulgarian = "p"
    Case "440"
      TransBulgarian = "r"
    Case "441"
      TransBulgarian = "s"
    Case "442"
      TransBulgarian = "t"
    Case "443"
      TransBulgarian = "u"
    Case "444"
      TransBulgarian = "f"
    Case "445"
      TransBulgarian = "kh"
    Case "446"
      TransBulgarian = "t" & Chr(235) & "s" & Chr(236)
    Case "447"
      TransBulgarian = "ch"
    Case "448"
      TransBulgarian = "sh"
    Case "449"
      TransBulgarian = "sht"
    Case "44A"
      TransBulgarian = "u" & Chr(230)
    Case "44C"
      TransBulgarian = Chr(167)
    Case "463"
      TransBulgarian = "i" & Chr(235) & "e" & Chr(235)
    Case "44E"
      TransBulgarian = "i" & Chr(235) & "u" & Chr(236)
    Case "44F"
      TransBulgarian = "i" & Chr(235) & "a" & Chr(236)
    Case "46B"
      TransBulgarian = "u" & Chr(239)
    Case Else
      TransBulgarian = Chr(252)
  End Select
End Function

'################################################################################

Function TransMacedonian (sHexcode As String) As String
  Select Case sHexcode
    Case "410"
      TransMacedonian = "A"
    Case "411"
      TransMacedonian = "B"
    Case "412"
      TransMacedonian = "V"
    Case "413"
      TransMacedonian = "G"
    Case "403"
      TransMacedonian = "G" & Chr(226)
    Case "414"
      TransMacedonian = "D"
    'Case "402"
    '  TransMacedonian = Chr(163)
    Case "415"
      TransMacedonian = "E"
    Case "416"
      TransMacedonian = "Z" & Chr(233)
    Case "417"
      TransMacedonian = "Z"
    Case "405"
      TransMacedonian = "Dz"
    Case "418"
      TransMacedonian = "I"
    'Case "419"
    '  TransMacedonian = "I" & Chr(230)
    Case "408"
      TransMacedonian = "J"
    Case "41A"
      TransMacedonian = "K"
    Case "40C"
      TransMacedonian = "K" & Chr(226)
    Case "41B"
      TransMacedonian = "L"
    Case "409"
      TransMacedonian = "Lj"
    Case "41C"
      TransMacedonian = "M"
    Case "41D"
      TransMacedonian = "N"
    Case "40A"
      TransMacedonian = "Nj"
    Case "41E"
      TransMacedonian = "O"
    Case "41F"
      TransMacedonian = "P"
    Case "420"
      TransMacedonian = "R"
    Case "421"
      TransMacedonian = "S"
    Case "422"
      TransMacedonian = "T"
    Case "40B"
      TransMacedonian = "C" & Chr(226)
    Case "423"
      TransMacedonian = "U"
    Case "424"
      TransMacedonian = "F"
    Case "425"
      TransMacedonian = "H"
    Case "426"
      TransMacedonian = "C"
    'Case "427"
    '  TransMacedonian = "C" & Chr(233)
    Case "40F"
      TransMacedonian = "Dz" & Chr(233)
    Case "428"
      TransMacedonian = "S" & Chr(233)
    'Case "429"
    '  TransMacedonian = "Shch"
    'Case "42A"
    '  TransMacedonian = Chr(183)
    'Case "42B"
    '  TransMacedonian = "Y"
    'Case "42C"
    '  TransMacedonian = Chr(167)
    'Case "42D"
    '  TransMacedonian = "E" & Chr(231)
    'Case "42E"
    '  TransMacedonian = "I" & Chr(235) & "U" & Chr(236)
    'Case "42F"
    '  TransMacedonian = "I" & Chr(235) & "A" & Chr(236)
    'Case "401"
    '  TransMacedonian = "E" & Chr(232)
    'Case "406"
    '  TransMacedonian = "I" & Chr(229)
    'Case "462"
    '  TransMacedonian = "I" & Chr(235) & "E" & Chr(236)
    'Case "472"
    '  TransMacedonian = "F" & Chr(231)
    'Case "474"
    '  TransMacedonian = "Y" & Chr(231)
    Case "430"
      TransMacedonian = "a"
    Case "431"
      TransMacedonian = "b"
    Case "432"
      TransMacedonian = "v"
    Case "433"
      TransMacedonian = "g"
    Case "453"
      TransMacedonian = "g" & Chr(226)
    Case "434"
      TransMacedonian = "d"
    'Case "452"
    '  TransMacedonian = Chr(179)
    Case "435"
      TransMacedonian = "e"
    Case "436"
      TransMacedonian = "z" & Chr(233)
    Case "437"
      TransMacedonian = "z"
    Case "455"
      TransMacedonian = "dz"
    Case "438"
      TransMacedonian = "i"
    'Case "439"
    '  TransMacedonian = "i" & Chr(230)
    Case "458"
      TransMacedonian = "j"
    Case "43A"
      TransMacedonian = "k"
    Case "45C"
      TransMacedonian = "k" & Chr(226)
    Case "43B"
      TransMacedonian = "l"
    Case "459"
      TransMacedonian = "lj"
    Case "43C"
      TransMacedonian = "m"
    Case "43D"
      TransMacedonian = "n"
    Case "45A"
      TransMacedonian = "nj"
    Case "43E"
      TransMacedonian = "o"
    Case "43F"
      TransMacedonian = "p"
    Case "440"
      TransMacedonian = "r"
    Case "441"
      TransMacedonian = "s"
    Case "442"
      TransMacedonian = "t"
    Case "45B"
      TransMacedonian = "c" & Chr(226)
    Case "443"
      TransMacedonian = "u"
    Case "444"
      TransMacedonian = "f"
    Case "445"
      TransMacedonian = "h"
    Case "446"
      TransMacedonian = "c"
    'Case "447"
    '  TransMacedonian = "c" & Chr(233)
    Case "45F"
      TransMacedonian = "dz" & Chr(233)
    Case "448"
      TransMacedonian = "s" & Chr(233)
    'Case "449"
    '  TransMacedonian = "shch"
    'Case "44A"
    '  TransMacedonian = Chr(183)
    'Case "44B"
    '  TransMacedonian = "y"
    'Case "44C"
    '  TransMacedonian = Chr(167)
    'Case "44D"
    '  TransMacedonian = "e" & Chr(231)
    'Case "44E"
    '  TransMacedonian = "i" & Chr(235) & "u" & Chr(236)
    'Case "44F"
    '  TransMacedonian = "i" & Chr(235) & "a" & Chr(236)
    'Case "451"
    '  TransMacedonian = "e" & Chr(232)
    'Case "456"
    '  TransMacedonian = "i" & Chr(229)
    'Case "463"
    '  TransMacedonian = "i" & Chr(235) & "e" & Chr(235)
    'Case "473"
    '  TransMacedonian = "f" & Chr(231)
    'Case "475"
    '  TransMacedonian = "y" & Chr(231)
    Case Else
      TransMacedonian = Chr(252)
  End Select
End Function

'################################################################################

Function TransRusyn (sHexcode As String) As String
  Select Case sHexcode
    Case "410"
      TransRusyn = "A"
    Case "411"
      TransRusyn = "B"
    Case "412"
      TransRusyn = "V"
    Case "413"
      TransRusyn = "H"
    Case "490"
      TransRusyn = "G"
    Case "414"
      TransRusyn = "D"
    Case "415"
      TransRusyn = "E"
    Case "404"
      TransRusyn = "I" & Chr(235) & "E" & Chr(236)
    Case "401"
      TransRusyn = "E" & Chr(232)
    Case "416"
      TransRusyn = "Z" & Chr(235) & "H" & Chr(236)
    Case "417"
      TransRusyn = "Z"
    Case "418"
      TransRusyn = "Y"
    Case "406"
      TransRusyn = "I"
    Case "407"
      TransRusyn = "I" & Chr(232)
    Case "419"
      TransRusyn = "I" & Chr(230)
    Case "41A"
      TransRusyn = "K"
    Case "41B"
      TransRusyn = "L"
    Case "41C"
      TransRusyn = "M"
    Case "41D"
      TransRusyn = "N"
    Case "41E"
      TransRusyn = "O"
    Case "41F"
      TransRusyn = "P"
    Case "420"
      TransRusyn = "R"
    Case "421"
      TransRusyn = "S"
    Case "422"
      TransRusyn = "T"
    Case "423"
      TransRusyn = "U"
    Case "424"
      TransRusyn = "F"
    Case "425"
      TransRusyn = "K" & Chr(235) & "H" & Chr(236)
    Case "426"
      TransRusyn = "T" & Chr(235) & "S" & Chr(236)
    Case "427"
      TransRusyn = "Ch"
    Case "428"
      TransRusyn = "Sh"
    Case "429"
      TransRusyn = "Shch"
    Case "42A"
      TransRusyn = Chr(183)
    Case "42B"
      TransRusyn = "Y" & Chr(233)
    Case "42C"
      TransRusyn = Chr(167)
    Case "42D"
      TransRusyn = "E" & Chr(231)
    Case "42E"
      TransRusyn = "I" & Chr(235) & "U" & Chr(236)
    Case "42F"
      TransRusyn = "I" & Chr(235) & "A" & Chr(236)
    'Case "401"
    '  TransRusyn = "E" & Chr(232)
    'Case "406"
    '  TransRusyn = "I" & Chr(229)
    'Case "462"
    '  TransRusyn = "I" & Chr(235) & "E" & Chr(236)
    'Case "472"
    '  TransRusyn = "F" & Chr(231)
    'Case "474"
    '  TransRusyn = "Y" & Chr(231)
    Case "48C"
      TransRusyn = "I" & Chr(227)
    Case "430"
      TransRusyn = "a"
    Case "431"
      TransRusyn = "b"
    Case "432"
      TransRusyn = "v"
    Case "433"
      TransRusyn = "h"
    Case "491"
      TransRusyn = "g"
    Case "434"
      TransRusyn = "d"
    Case "435"
      TransRusyn = "e"
    Case "454"
      TransRusyn = "i" & Chr(235) & "e" & Chr(236)
    Case "451"
      TransRusyn = "e" & Chr(232)
    Case "436"
      TransRusyn = "z" & Chr(235) & "h" & Chr(236)
    Case "437"
      TransRusyn = "z"
    Case "438"
      TransRusyn = "y"
    Case "456"
      TransRusyn = "i"
    Case "457"
      TransRusyn = "i" & Chr(232)
    Case "439"
      TransRusyn = "i" & Chr(230)
    Case "43A"
      TransRusyn = "k"
    Case "43B"
      TransRusyn = "l"
    Case "43C"
      TransRusyn = "m"
    Case "43D"
      TransRusyn = "n"
    Case "43E"
      TransRusyn = "o"
    Case "43F"
      TransRusyn = "p"
    Case "440"
      TransRusyn = "r"
    Case "441"
      TransRusyn = "s"
    Case "442"
      TransRusyn = "t"
    Case "443"
      TransRusyn = "u"
    Case "444"
      TransRusyn = "f"
    Case "445"
      TransRusyn = "k" & Chr(235) & "h" & Chr(236)
    Case "446"
      TransRusyn = "t" & Chr(235) & "s" & Chr(236)
    Case "447"
      TransRusyn = "ch"
    Case "448"
      TransRusyn = "sh"
    Case "449"
      TransRusyn = "shch"
    Case "44A"
      TransRusyn = Chr(183)
    Case "44B"
      TransRusyn = "y" & Chr(233)
    Case "44C"
      TransRusyn = Chr(167)
    Case "44D"
      TransRusyn = "e" & Chr(231)
    Case "44E"
      TransRusyn = "i" & Chr(235) & "u" & Chr(236)
    Case "44F"
      TransRusyn = "i" & Chr(235) & "a" & Chr(236)
    'Case "451"
    '  TransRusyn = "e" & Chr(232)
    'Case "456"
    '  TransRusyn = "i" & Chr(229)
    'Case "463"
    '  TransRusyn = "i" & Chr(235) & "e" & Chr(235)
    'Case "473"
    '  TransRusyn = "f" & Chr(231)
    'Case "475"
    '  TransRusyn = "y" & Chr(231)
    Case "48D"
      TransRusyn = "i" & Chr(227)
    Case Else
      TransRusyn = Chr(252)
  End Select
End Function

'################################################################################

Function TransSlavic (sHexcode As String) As String
  Select Case sHexcode
    Case "410"
      TransSlavic = "A"
    Case "411"
      TransSlavic = "B"
    Case "412"
      TransSlavic = "V"
    Case "413"
      TransSlavic = "G"
    Case "414"
      TransSlavic = "D"
    'Case "415"
    '  TransSlavic = "E"
    'Case "401"
    '  TransSlavic = "E" & Chr(232)
    Case "404"
      TransSlavic = "E"
    'Case ???
    ' E+macron ("E" & Chr(229)) character not provided for in Unicode
    Case "464"
      TransSlavic = "I" & Chr(235) & "E" & Chr(236)
    Case "416"
      TransSlavic = "Zh"
    Case "405"
      TransSlavic = "Z" & Chr(231)
    Case "417"
      TransSlavic = "Z"
    Case "418"
      TransSlavic = "I"
    Case "406"
      TransSlavic = "I" & Chr(229)
    Case "419"
      TransSlavic = "I" & Chr(230)
    Case "41A"
      TransSlavic = "K"
    Case "41B"
      TransSlavic = "L"
    Case "41C"
      TransSlavic = "M"
    Case "41D"
      TransSlavic = "N"
    Case "41E"
      TransSlavic = "O"
    Case "41F"
      TransSlavic = "P"
    Case "420"
      TransSlavic = "R"
    Case "421"
      TransSlavic = "S"
    Case "422"
      TransSlavic = "T"
    'Case "423"
    '  TransSlavic = "U"
    Case "478"
      TransSlavic = "U"
    'Case ???
    '  U+macron ("U" & Chr(229)) character not provided for in Unicode
    Case "424"
      TransSlavic = "F"
    Case "425"
      TransSlavic = "Kh"
    Case "47E"
      TransSlavic = "O" & Chr(229) & Chr(235) & "T" & Chr(236)
    Case "460"
      TransSlavic = "O" & Chr(229)
    Case "426"
      TransSlavic = "T" & Chr(235) & "S" & Chr(236)
    Case "427"
      TransSlavic = "Ch"
    Case "428"
      TransSlavic = "Sh"
    Case "429"
      TransSlavic = "Sht"
    Case "42A"
      TransSlavic = Chr(183)
    Case "42B"
      TransSlavic = "Y" & Chr(229)
    'Case ???
    ' Y character not provided for in Unicode
    Case "42C"
      TransSlavic = Chr(167)
    Case "462"
      TransSlavic = "E" & Chr(233)
    'Case "42D"
    '  TransSlavic = "E" & Chr(231)
    Case "42E"
      TransSlavic = "I" & Chr(235) & "U" & Chr(236)
    'Case "42F"
    '  TransSlavic = "I" & Chr(235) & "A" & Chr(236)
    'Case ???
    ' IA-ligature ("I" & Chr(235) & "A" & Chr(236)) character not provided for in Unicode
    Case "466"
      TransSlavic = "E" & Chr(241)
    Case "46E"
      TransSlavic = "K" & Chr(235) & "S" & Chr(236)
    Case "470"
      TransSlavic = "P" & Chr(235) & "S" & Chr(236)
    Case "472"
      TransSlavic = "F" & Chr(231)
    Case "476"
      TransSlavic = "Y" & Chr(231)  '&H476 is not yet a valid MARC character
    Case "474"
      TransSlavic = "V" & Chr(231)
    Case "46A"
      TransSlavic = "O" & Chr(241)
    Case "468"
      TransSlavic = "I" & Chr(235) & "E" & Chr(241) & Chr(236)
    Case "46C"
      TransSlavic = "I" & Chr(235) & "O" & Chr(241) & Chr(236)
    Case "40B"
      TransSlavic = "G" & Chr(226)
    Case "430"
      TransSlavic = "a"
    Case "431"
      TransSlavic = "b"
    Case "432"
      TransSlavic = "v"
    Case "433"
      TransSlavic = "g"
    Case "434"
      TransSlavic = "d"
    Case "454"
      TransSlavic = "e"
    'Case ???
    ' e+macron ("e" & Chr(229)) character not provided for in Unicode
    'Case "435"
    '  TransSlavic = "e"
    'Case "451"
    '  TransSlavic = "e" & Chr(232)
    Case "465"
      TransSlavic = "i" & Chr(235) & "e" & Chr(236)
    Case "436"
      TransSlavic = "zh"
    Case "455"
      TransSlavic = "z" & Chr(231)
    Case "437"
      TransSlavic = "z"
    Case "438"
      TransSlavic = "i"
    Case "456"
      TransSlavic = "i" & Chr(229)
    Case "439"
      TransSlavic = "i" & Chr(230)
    Case "43A"
      TransSlavic = "k"
    Case "43B"
      TransSlavic = "l"
    Case "43C"
      TransSlavic = "m"
    Case "43D"
      TransSlavic = "n"
    Case "43E"
      TransSlavic = "o"
    Case "43F"
      TransSlavic = "p"
    Case "440"
      TransSlavic = "r"
    Case "441"
      TransSlavic = "s"
    Case "442"
      TransSlavic = "t"
    Case "443"
      TransSlavic = "v" & Chr(231)
    Case "479"
      TransSlavic = "u"
    'Case ???
    '  u+macron ("u" & Chr(229)) character not provided for in Unicode
    Case "444"
      TransSlavic = "f"
    Case "445"
      TransSlavic = "kh"
    Case "47F"
      TransSlavic = "o" & Chr(229) & Chr(235) & "t" & Chr(236)
    Case "461"
      TransSlavic = "o" & Chr(229)
    Case "446"
      TransSlavic = "t" & Chr(235) & "s" & Chr(236)
    Case "447"
      TransSlavic = "ch"
    Case "448"
      TransSlavic = "sh"
    Case "449"
      TransSlavic = "sht"
    Case "44A"
      TransSlavic = Chr(183)
    Case "44B"
      TransSlavic = "y" & Chr(229)
    'Case ???
    '  y character not provided for in Unicode
    Case "44C"
      TransSlavic = Chr(167)
    Case "463"
      TransSlavic = "e" & Chr(233)
    'Case "44D"
    '  TransSlavic = "e" & Chr(231)
    Case "44E"
      TransSlavic = "i" & Chr(235) & "u" & Chr(236)
    'Case "44F"
    '  TransSlavic = "i" & Chr(235) & "a" & Chr(236)
    'Case ???
    ' ia-ligature ("i" & Chr(235) & "a" & Chr(236)) character not provided for in Unicode
    Case "467"
      TransSlavic = "e" & Chr(241)
    Case "46F"
      TransSlavic = "k" & Chr(235) & "s" & Chr(236)
    Case "471"
      TransSlavic = "p" & Chr(235) & "s" & Chr(236)
    Case "473"
      TransSlavic = "f" & Chr(231)
    Case "477"
      TransSlavic = "y" & Chr(231)  '&H477 is not yet a valid MARC character
    Case "475"
      TransSlavic = "v" & Chr(231)
    Case "46B"
      TransSlavic = "o" & Chr(241)
    Case "469"
      TransSlavic = "i" & Chr(235) & "e" & Chr(241) & Chr(236)
    Case "46D"
      TransSlavic = "i" & Chr(235) & "o" & Chr(241) & Chr(236)
    Case "45B"
      TransSlavic = "g" & Chr(226)
    Case Else
      TransSlavic = Chr(252)
  End Select
End Function

'################################################################################

Function TransSerbian (sHexcode As String) As String
  Select Case sHexcode
    Case "410"
      TransSerbian = "A"
    Case "411"
      TransSerbian = "B"
    Case "412"
      TransSerbian = "V"
    Case "413"
      TransSerbian = "G"
    Case "403"
      TransSerbian = "G" & Chr(226)
    Case "414"
      TransSerbian = "D"
    Case "402"
      TransSerbian = Chr(163)
    Case "415"
      TransSerbian = "E"
    Case "416"
      TransSerbian = "Z" & Chr(233)
    Case "417"
      TransSerbian = "Z"
    'Case "405"
    '  TransSerbian = "Dz"
    Case "418"
      TransSerbian = "I"
    'Case "419"
    '  TransSerbian = "I" & Chr(230)
    Case "408"
      TransSerbian = "J"
    Case "41A"
      TransSerbian = "K"
    'Case "40C"
    '  TransSerbian = "K" & Chr(226)
    Case "41B"
      TransSerbian = "L"
    Case "409"
      TransSerbian = "Lj"
    Case "41C"
      TransSerbian = "M"
    Case "41D"
      TransSerbian = "N"
    Case "40A"
      TransSerbian = "Nj"
    Case "41E"
      TransSerbian = "O"
    Case "41F"
      TransSerbian = "P"
    Case "420"
      TransSerbian = "R"
    Case "421"
      TransSerbian = "S"
    Case "422"
      TransSerbian = "T"
    Case "40B"
      TransSerbian = "C" & Chr(226)
    Case "423"
      TransSerbian = "U"
    Case "424"
      TransSerbian = "F"
    Case "425"
      TransSerbian = "H"
    Case "426"
      TransSerbian = "C"
    Case "427"
      TransSerbian = "C" & Chr(233)
    Case "40F"
      TransSerbian = "Dz" & Chr(233)
    Case "428"
      TransSerbian = "S" & Chr(233)
    'Case "429"
    '  TransSerbian = "Shch"
    'Case "42A"
    '  TransSerbian = Chr(183)
    'Case "42B"
    '  TransSerbian = "Y"
    'Case "42C"
    '  TransSerbian = Chr(167)
    'Case "42D"
    '  TransSerbian = "E" & Chr(231)
    'Case "42E"
    '  TransSerbian = "I" & Chr(235) & "U" & Chr(236)
    'Case "42F"
    '  TransSerbian = "I" & Chr(235) & "A" & Chr(236)
    'Case "401"
    '  TransSerbian = "E" & Chr(232)
    'Case "406"
    '  TransSerbian = "I" & Chr(229)
    'Case "462"
    '  TransSerbian = "I" & Chr(235) & "E" & Chr(236)
    'Case "472"
    '  TransSerbian = "F" & Chr(231)
    'Case "474"
    '  TransSerbian = "Y" & Chr(231)
    Case "430"
      TransSerbian = "a"
    Case "431"
      TransSerbian = "b"
    Case "432"
      TransSerbian = "v"
    Case "433"
      TransSerbian = "g"
    Case "453"
      TransSerbian = "g" & Chr(226)
    Case "434"
      TransSerbian = "d"
    Case "452"
      TransSerbian = Chr(179)
    Case "435"
      TransSerbian = "e"
    Case "436"
      TransSerbian = "z" & Chr(233)
    Case "437"
      TransSerbian = "z"
    'Case "455"
    '  TransSerbian = "dz"
    Case "438"
      TransSerbian = "i"
    'Case "439"
    '  TransSerbian = "i" & Chr(230)
    Case "458"
      TransSerbian = "j"
    Case "43A"
      TransSerbian = "k"
    'Case "45C"
    '  TransSerbian = "k" & Chr(226)
    Case "43B"
      TransSerbian = "l"
    Case "459"
      TransSerbian = "lj"
    Case "43C"
      TransSerbian = "m"
    Case "43D"
      TransSerbian = "n"
    Case "45A"
      TransSerbian = "nj"
    Case "43E"
      TransSerbian = "o"
    Case "43F"
      TransSerbian = "p"
    Case "440"
      TransSerbian = "r"
    Case "441"
      TransSerbian = "s"
    Case "442"
      TransSerbian = "t"
    Case "45B"
      TransSerbian = "c" & Chr(226)
    Case "443"
      TransSerbian = "u"
    Case "444"
      TransSerbian = "f"
    Case "445"
      TransSerbian = "h"
    Case "446"
      TransSerbian = "c"
    Case "447"
      TransSerbian = "c" & Chr(233)
    Case "45F"
      TransSerbian = "dz" & Chr(233)
    Case "448"
      TransSerbian = "s" & Chr(233)
    'Case "449"
    '  TransSerbian = "shch"
    'Case "44A"
    '  TransSerbian = Chr(183)
    'Case "44B"
    '  TransSerbian = "y"
    'Case "44C"
    '  TransSerbian = Chr(167)
    'Case "44D"
    '  TransSerbian = "e" & Chr(231)
    'Case "44E"
    '  TransSerbian = "i" & Chr(235) & "u" & Chr(236)
    'Case "44F"
    '  TransSerbian = "i" & Chr(235) & "a" & Chr(236)
    'Case "451"
    '  TransSerbian = "e" & Chr(232)
    'Case "456"
    '  TransSerbian = "i" & Chr(229)
    'Case "463"
    '  TransSerbian = "i" & Chr(235) & "e" & Chr(235)
    'Case "473"
    '  TransSerbian = "f" & Chr(231)
    'Case "475"
    '  TransSerbian = "y" & Chr(231)
    Case Else
      TransSerbian = Chr(252)
  End Select
End Function

'################################################################################

Function TransUkranian (sHexcode As String) As String
  Select Case sHexcode
    Case "410"
      TransUkranian = "A"
    Case "411"
      TransUkranian = "B"
    Case "412"
      TransUkranian = "V"
    Case "413"
      TransUkranian = "H"
    Case "490"
      TransUkranian = "G"
    Case "414"
      TransUkranian = "D"
    Case "415"
      TransUkranian = "E"
    Case "404"
      TransUkranian = "I" & Chr(235) & "E" & Chr(236)
    Case "416"
      TransUkranian = "Z" & Chr(235) & "H" & Chr(236)
    Case "417"
      TransUkranian = "Z"
    Case "418"
      TransUkranian = "Y"
    Case "406"
      TransUkranian = "I"
    Case "407"
      TransUkranian = "I" & Chr(232)
    Case "419"
      TransUkranian = "I" & Chr(230)
    Case "41A"
      TransUkranian = "K"
    Case "41B"
      TransUkranian = "L"
    Case "41C"
      TransUkranian = "M"
    Case "41D"
      TransUkranian = "N"
    Case "41E"
      TransUkranian = "O"
    Case "41F"
      TransUkranian = "P"
    Case "420"
      TransUkranian = "R"
    Case "421"
      TransUkranian = "S"
    Case "422"
      TransUkranian = "T"
    Case "423"
      TransUkranian = "U"
    Case "424"
      TransUkranian = "F"
    Case "425"
      TransUkranian = "Kh"
    Case "426"
      TransUkranian = "T" & Chr(235) & "S" & Chr(236)
    Case "427"
      TransUkranian = "Ch"
    Case "428"
      TransUkranian = "Sh"
    Case "429"
      TransUkranian = "Shch"
    'Case "42A"
    '  TransUkranian = Chr(183)
    'Case "42B"
    '  TransUkranian = "Y"
    Case "42C"
      TransUkranian = Chr(167)
    'Case "42D"
    '  TransUkranian = "E" & Chr(231)
    Case "42E"
      TransUkranian = "I" & Chr(235) & "U" & Chr(236)
    Case "42F"
      TransUkranian = "I" & Chr(235) & "A" & Chr(236)
    'Case "401"
    '  TransUkranian = "E" & Chr(232)
    'Case "406"
    '  TransUkranian = "I" & Chr(229)
    'Case "462"
    '  TransUkranian = "I" & Chr(235) & "E" & Chr(236)
    'Case "472"
    '  TransUkranian = "F" & Chr(231)
    'Case "474"
    '  TransUkranian = "Y" & Chr(231)
    Case "430"
      TransUkranian = "a"
    Case "431"
      TransUkranian = "b"
    Case "432"
      TransUkranian = "v"
    Case "433"
      TransUkranian = "h"
    Case "491"
      TransUkranian = "g"
    Case "434"
      TransUkranian = "d"
    Case "435"
      TransUkranian = "e"
    Case "454"
      TransUkranian = "i" & Chr(235) & "e" & Chr(236)
    Case "436"
      TransUkranian = "z" & Chr(235) & "h" & Chr(236)
    Case "437"
      TransUkranian = "z"
    Case "438"
      TransUkranian = "y"
    Case "456"
      TransUkranian = "i"
    Case "457"
      TransUkranian = "i" & Chr(232)
    Case "439"
      TransUkranian = "i" & Chr(230)
    Case "43A"
      TransUkranian = "k"
    Case "43B"
      TransUkranian = "l"
    Case "43C"
      TransUkranian = "m"
    Case "43D"
      TransUkranian = "n"
    Case "43E"
      TransUkranian = "o"
    Case "43F"
      TransUkranian = "p"
    Case "440"
      TransUkranian = "r"
    Case "441"
      TransUkranian = "s"
    Case "442"
      TransUkranian = "t"
    Case "443"
      TransUkranian = "u"
    Case "444"
      TransUkranian = "f"
    Case "445"
      TransUkranian = "kh"
    Case "446"
      TransUkranian = "t" & Chr(235) & "s" & Chr(236)
    Case "447"
      TransUkranian = "ch"
    Case "448"
      TransUkranian = "sh"
    Case "449"
      TransUkranian = "shch"
    'Case "44A"
    '  TransUkranian = Chr(183)
    'Case "44B"
    '  TransUkranian = "y"
    Case "44C"
      TransUkranian = Chr(167)
    'Case "44D"
    '  TransUkranian = "e" & Chr(231)
    Case "44E"
      TransUkranian = "i" & Chr(235) & "u" & Chr(236)
    Case "44F"
      TransUkranian = "i" & Chr(235) & "a" & Chr(236)
    'Case "451"
    '  TransUkranian = "e" & Chr(232)
    'Case "456"
    '  TransUkranian = "i" & Chr(229)
    'Case "463"
    '  TransUkranian = "i" & Chr(235) & "e" & Chr(235)
    'Case "473"
    '  TransUkranian = "f" & Chr(231)
    'Case "475"
    '  TransUkranian = "y" & Chr(231)
    Case Else
      TransUkranian = Chr(252)
  End Select
End Function

'################################################################################

Function TransNonSlavic (sHexcode As String) As String
  Select Case sHexcode
    Case "410"
      TransNonSlavic = "A"
    Case "411"
      TransNonSlavic = "B"
    Case "412"
      TransNonSlavic = "V"
    Case "413"
      TransNonSlavic = "G"
    Case "414"
      TransNonSlavic = "D"
    Case "415"
      TransNonSlavic = "E"
    Case "416"
      TransNonSlavic = "Zh"
    Case "417"
      TransNonSlavic = "Z"
    Case "418"
      TransNonSlavic = "I"
    'Case "406"
    '  TransNonSlavic = "I" & Chr(229)
    Case "419"
      TransNonSlavic = "I" & Chr(230)
    Case "41A"
      TransNonSlavic = "K"
    Case "41B"
      TransNonSlavic = "L"
    Case "41C"
      TransNonSlavic = "M"
    Case "41D"
      TransNonSlavic = "N"
    Case "41E"
      TransNonSlavic = "O"
    Case "41F"
      TransNonSlavic = "P"
    Case "420"
      TransNonSlavic = "R"
    Case "421"
      TransNonSlavic = "S"
    Case "422"
      TransNonSlavic = "T"
    Case "423"
      TransNonSlavic = "U"
    Case "424"
      TransNonSlavic = "F"
    Case "425"
      TransNonSlavic = "Kh"
    Case "426"
      TransNonSlavic = "T" & Chr(235) & "S" & Chr(236)
    Case "427"
      TransNonSlavic = "Ch"
    Case "428"
      TransNonSlavic = "Sh"
    Case "429"
      TransNonSlavic = "Shch"
    Case "42A"
      TransNonSlavic = Chr(183)
    Case "42B"
      TransNonSlavic = "Y"
    Case "42C"
      TransNonSlavic = Chr(167)
    Case "42D"
      TransNonSlavic = "E" & Chr(231)
    Case "42E"
      TransNonSlavic = "I" & Chr(235) & "U" & Chr(236)
    Case "42F"
      TransNonSlavic = "I" & Chr(235) & "A" & Chr(236)
    Case "401"
      TransNonSlavic = "E" & Chr(232)
    Case "462"
      TransNonSlavic = "I" & Chr(235) & "E" & Chr(236)
    Case "472"
      TransNonSlavic = "F" & Chr(231)
    Case "474"
      TransNonSlavic = "Y" & Chr(231)
    Case "430"
      TransNonSlavic = "a"
    Case "431"
      TransNonSlavic = "b"
    Case "432"
      TransNonSlavic = "v"
    Case "433"
      TransNonSlavic = "g"
    Case "434"
      TransNonSlavic = "d"
    Case "435"
      TransNonSlavic = "e"
    Case "436"
      TransNonSlavic = "zh"
    Case "437"
      TransNonSlavic = "z"
    Case "438"
      TransNonSlavic = "i"
    'Case "456"
    '  TransNonSlavic = "i" & Chr(229)
    Case "439"
      TransNonSlavic = "i" & Chr(230)
    Case "43A"
      TransNonSlavic = "k"
    Case "43B"
      TransNonSlavic = "l"
    Case "43C"
      TransNonSlavic = "m"
    Case "43D"
      TransNonSlavic = "n"
    Case "43E"
      TransNonSlavic = "o"
    Case "43F"
      TransNonSlavic = "p"
    Case "440"
      TransNonSlavic = "r"
    Case "441"
      TransNonSlavic = "s"
    Case "442"
      TransNonSlavic = "t"
    Case "443"
      TransNonSlavic = "u"
    Case "444"
      TransNonSlavic = "f"
    Case "445"
      TransNonSlavic = "kh"
    Case "446"
      TransNonSlavic = "t" & Chr(235) & "s" & Chr(236)
    Case "447"
      TransNonSlavic = "ch"
    Case "448"
      TransNonSlavic = "sh"
    Case "449"
      TransNonSlavic = "shch"
    Case "44A"
      TransNonSlavic = Chr(183)
    Case "44B"
      TransNonSlavic = "y"
    Case "44C"
      TransNonSlavic = Chr(167)
    Case "44D"
      TransNonSlavic = "e" & Chr(231)
    Case "44E"
      TransNonSlavic = "i" & Chr(235) & "u" & Chr(236)
    Case "44F"
      TransNonSlavic = "i" & Chr(235) & "a" & Chr(236)
    Case "451"
      TransNonSlavic = "e" & Chr(232)
    Case "463"
      TransNonSlavic = "i" & Chr(235) & "e" & Chr(235)
    Case "473"
      TransNonSlavic = "f" & Chr(231)
    Case "475"
      TransNonSlavic = "y" & Chr(231)
    Case Else
      TransNonSlavic = Chr(252)
  End Select
End Function

'################################################################################