#!/bin/bash # Преобразование файлов из формата MSX в UTF-8 files_path='.' # путь к исходныи и конечным файлам file_ext_msx='.msx' # расширение исходного файла (MSX) file_msx_mask='test' # file_ext_utf='.txt' # расширение конечного файла (UTF-8) file_ext_tmp='.tmp' # расширение временного файла temp_path='/tmp' # путь для временных файлов file_msx_mask=$file_msx_mask$file_ext_msx for file_msx in `find $files_path -type f -name "$file_msx_mask"` do file_utf=${file_msx//$file_ext_msx/$file_ext_utf} file_tmp=$temp_path"/"${file_msx//$file_ext_msx/$file_ext_tmp} file_tmp=${file_tmp/.\//} rm -f $file_utf p=0 od -An -t x1 -v <$file_msx| while read line;do for char in $line;do dec=$(printf "%d" 0x$char) #dec=`echo $((0x$char))` if [ $dec -eq 1 ]; then p=1 elif [[ $p -eq 1 && $dec -lt 128 ]]; then case $char in 40) utf="" ;; # 140 41) utf="e298ba" ;; # 141 Незакрашенное улыбающееся лицо U+263A 42) utf="e298bb" ;; # 142 Закрашенное улыбающееся лицо U+263B 43) utf="e299a5" ;; # 143 Черви закрашенные U+2665 44) utf="e299a6" ;; # 144 Бубны закрашенные U+2666 45) utf="e299a3" ;; # 145 Трефы закрашенные U+2663 46) utf="e299a0" ;; # 146 Пики закрашенные U+2660 47) utf="c2b7" ;; # 147 Точка по центру U+00B7 # 48) utf="" ;; # 148 49) utf="e2978b" ;; # 149 Белый круг U+25CB 4a) utf="e2978f" ;; # 14A Черный круг U+25CF 4b) utf="e29982" ;; # 14B марс U+2642 4c) utf="e29980" ;; # 14C венера U+2640 4d) utf="e299aa" ;; # 14D восьмая нота U+266A 4e) utf="e299ac" ;; # 14E шестнадцатая нота U+266C 4f) utf="e28897" ;; # 14F оператор звездочки U+2217 # 50) utf=" ;; # 150 51) utf="e294b4" ;; # 151 граница лёгкая вверх и горизонтально U+2534 52) utf="e294ac" ;; # 152 граница лёгкая вниз и горизонтально U+252C 53) utf="e294a4" ;; # 153 граница лёгкая вертикальная и налево U+2524 54) utf="e2949c" ;; # 154 граница лёгкая вертикальная и направо U+251C 55) utf="e294bc" ;; # 155 граница лёгкая вертикальная и горизонтальная U+253C 56) utf="e29482" ;; # 156 граница лёгкая вертикальная U+2502 57) utf="e29480" ;; # 157 граница лёгкая горизонтальная U+2500 58) utf="e2948c" ;; # 158 граница лёгкая вниз в направо U+250C 59) utf="e29490" ;; # 159 граница лёгкая вниз и налево U+2510 5a) utf="e29494" ;; # 15A граница лёгкая вверх и направо U+2514 5b) utf="e29498" ;; # 15B граница лёгкая вверх и налево U+2518 5c) utf="e295b3" ;; # 15C граница легкий диагональный крест U+2573 5d) utf="e295b1" ;; # 15D граница легкая диагональ с верхнего правого в нижний левый U+2571 5e) utf="e295b2" ;; # 15E граница легкая диагональ с верхнего левого в нижний правый U+2572 # 5f) utf="" ;; # 15F esac p=0 elif [ $dec -lt 128 ]; then utf="$char" elif [ $dec -ge 128 ]; then case $char in 80) utf="e29681" ;; # 80 Нижняя одна восьмая блока U+2581 81) utf="e2969a" ;; # 81 Квадрант сверху слева и снизу справа U+259A 82) utf="e29687" ;; # 82 Нижние семь восьмых блока U+2587 83) utf="e29694" ;; # 83 Верхняя одна восьмая блока U+2594 84) utf="e28183" ;; # 84 Дефис маркер списка U+2043 # 85) utf="" ;; # 85 86) utf="e2968f" ;; # 86 Левая одна восьмая блока U+258F 87) utf="e2969e" ;; # 87 Квадрант сверху справа и снизу слева U+259E # 88) utf="" ;; # 88 89) utf="e29695" ;; # 89 Правая одна восьмая блока U+2595 8b) utf="e296a8" ;; # 8B Квадрат с верхним правым и нижним левым заполнением U+25A8 8c) utf="e296a7" ;; # 8C Квадрат с верхним левым и нижним правым заполнением U+25A7 8d) utf="e296bc" ;; # 8D Чёрный треугольник с вершиной вниз U+25BC 8e) utf="e296b2" ;; # 8E Чёрный треугольник с вершиной вверх U+25B2 8f) utf="e296b6" ;; # 8F Чёрный треугольник с вершиной направо плей, проигрывать, старт U+25B6 90) utf="e29780" ;; # 90 Черный треугольник с вершиной налево U+25C0 91) utf="e2a797" ;; # 91 Закрашенные песочные часы U+29D7 92) utf="e2a793" ;; # 92 Закрашенная бабочка U+29D3 93) utf="e29698" ;; # 93 Квадрант сверху слева U+2598 94) utf="e29697" ;; # 94 Квадрант снизу справа U+2597 95) utf="e2969D" ;; # 95 Квадрант сверху справа U+259D 96) utf="e29696" ;; # 96 Квадрант снизу слева U+2596 97) utf="e29691" ;; # 97 Легкое затемнение U+2591 98) utf="ce94" ;; # 98 Греческая заглавная буква дельта U+0394 99) utf="e289a0" ;; # 99 Не равный U+2260 9a) utf="cF89" ;; # 9A Греческая строчная буква омега U+03C9 9b) utf="e29688" ;; # 9B Полный блок U+2588 9c) utf="e29684" ;; # 9C Нижняя половина блока U+2584 9d) utf="e2968c" ;; # 9D Левая половина блока U+258C 9e) utf="e29690" ;; # 9E Правая половина блока U+2590 9f) utf="e29680" ;; # 9F Верхняя половина блока U+2580 a0) utf="ceb1" ;; # A0 Греческая строчная буква альфа U+03B1 a1) utf="ceb2" ;; # A1 Греческая строчная буква бета U+03B2 a2) utf="ce93" ;; # A2 Греческая заглавная буква гамма U+0393 a3) utf="cf80" ;; # A3 Греческая строчная буква пи U+03C0 a4) utf="e28891" ;; # A4 N-ичное суммирование U+2211 a5) utf="cf83" ;; # A5 Греческая строчная буква сигма U+03C3 a6) utf="cebc" ;; # A6 Греческая строчная буква мю U+03BC a7) utf="ceb3" ;; # A7 Греческая строчная буква гамма U+03B3 a8) utf="cea6" ;; # A8 Греческая заглавная буква фи U+03A6 a9) utf="e29fa0" ;; # A9 Ромбовидная фигура, разделённая горизонтальной линией U+27E0 aa) utf="cea9" ;; # AA Греческая заглавная буква омега U+03A9 ab) utf="ceb4" ;; # AB Греческая строчная буква дельта U+03B4 ac) utf="e2889e" ;; # AC Знак бесконечности U+221E ad) utf="f09d9c99" ;; # AD Математическая курсивная фи (символ) U+1D719 ae) utf="e28888" ;; # AE Принадлежит множеству U+2208 af) utf="e28b82" ;; # AF N-ичное пересечение U+22C2 b0) utf="e289a1" ;; # B0 Идентичный, тождество (тройное равно) U+2261 b1) utf="c2b1" ;; # B1 Знак плюс-минус U+00B1 b2) utf="e289a5" ;; # B2 Больше чем или равно U+2265 b3) utf="e289a4" ;; # B3 Меньше или равный U+2264 b4) utf="e28ea7" ;; # B4 Левая фигурная скобка, верхний крючок U+23A7 b5) utf="e28ead" ;; # B5 Правая фигурная скобка, нижний крючок U+23AD b6) utf="c3b7" ;; # B6 Знак деления U+00F7 b7) utf="e28988" ;; # B7 Почти равный U+2248 b8) utf="c2b0" ;; # B8 Знак градуса U+00B0 b9) utf="e28899" ;; # B9 Оператор точка маркер списка (скалярное умножение, знак умножения) U+2219 ba) utf="efb9a3" ;; # BA Маленький дефис-минус U+FE63 bb) utf="e2889a" ;; # BB Квадратный корень U+221A bc) utf="e281bf" ;; # BC Надстрочный знак латинская строчная буква n U+207F bd) utf="e28282" ;; # BD Подстрочный индекс два U+2082 be) utf="e2888e" ;; # BE Конец доказательства U+220E bf) utf="c2a4" ;; # BF Знак валюты U+00A4 c0) utf="d18e" ;; # ю U+044E c1) utf="d0b0" ;; # а U+0430 c2) utf="d0b1" ;; # б U+0431 c3) utf="d186" ;; # ц U+0446 c4) utf="d0b4" ;; # д U+0434 c5) utf="d0b5" ;; # е U+0435 c6) utf="d184" ;; # ф U+0444 c7) utf="d0b3" ;; # г U+0433 c8) utf="d185" ;; # х U+0445 c9) utf="d0b8" ;; # и U+0438 ca) utf="d0b9" ;; # й U+0439 cb) utf="d0ba" ;; # к U+043A cc) utf="d0bb" ;; # л U+043B cd) utf="d0bc" ;; # м U+043C ce) utf="d0bd" ;; # н U+043D cf) utf="d0be" ;; # о U+043E d0) utf="d0bf" ;; # п U+043F d1) utf="d18f" ;; # я U+044F d2) utf="d180" ;; # р U+0440 d3) utf="d181" ;; # с U+0441 d4) utf="d182" ;; # т U+0442 d5) utf="d183" ;; # у U+0443 d6) utf="d0B6" ;; # ж U+0436 d7) utf="d0b2" ;; # в U+0432 d8) utf="d18c" ;; # ь U+044C d9) utf="d18b" ;; # ы U+044B da) utf="d0b7" ;; # з U+0437 db) utf="d188" ;; # ш U+0448 dc) utf="d18d" ;; # э U+044D dd) utf="d189" ;; # щ U+0449 de) utf="d187" ;; # ч U+0447 df) utf="d18a" ;; # ъ U+044A e0) utf="d0ae" ;; # Ю U+042E e1) utf="d090" ;; # А U+0410 e2) utf="d091" ;; # Б U+0411 e3) utf="d0a6" ;; # Ц U+0426 e4) utf="d094" ;; # Д U+0414 e5) utf="d095" ;; # Е U+0415 e6) utf="d0a4" ;; # Ф U+0424 e7) utf="d093" ;; # Г U+0413 e8) utf="d0a5" ;; # Х U+0425 e9) utf="d098" ;; # И U+0418 ea) utf="d099" ;; # Й U+0419 eb) utf="d09a" ;; # К U+041A ec) utf="d09b" ;; # Л U+041B ed) utf="d09c" ;; # М U+041C ee) utf="d09d" ;; # Н U+041D ef) utf="d09e" ;; # О U+041E f0) utf="d09f" ;; # П U+041F f1) utf="d0af" ;; # Я U+042F f2) utf="d0a0" ;; # Р U+0420 f3) utf="d0a1" ;; # С U+0421 f4) utf="d0a2" ;; # Т U+0422 f5) utf="d0a3" ;; # У U+0423 f6) utf="d096" ;; # Ж U+0416 f7) utf="d092" ;; # В U+0412 f8) utf="d0ac" ;; # Ь U+042C f9) utf="d0ab" ;; # Ы U+042B fa) utf="d097" ;; # З U+0417 fb) utf="d0a8" ;; # Ш U+0428 fc) utf="d0ad" ;; # Э U+042D fd) utf="d0a9" ;; # Щ U+0429 fe) utf="d0a7" ;; # Ч U+0427 esac fi echo -n "$utf" >>$file_tmp utf="" done done xxd -r -p $file_tmp $file_utf rm -f $file_tmp done exit