Short: Russian language driver v45 Author: Michael_Malyshev@mail.ru Uploader: Michael_Malyshev mail ru Type: util/sys Version: 45.2+ (02.04.2015) Architecture: m68k-amigaos >= 3.0.0 ---------------------------------------------------------------------------- sys:locale/languages/russian.language v45.2 sys:locale/countries/russia.country v45.2 ---------------------------------------------------------------------------- This is an updated language driver for Russian language in Amiga-1251 codeset for use on Classic 68k AmigaOS 3.x systems IMPORTANT! This is a CRITICAL UPDATE to AmigaOS 3.9 files, please update! Old v44.x files do not work or give bogus results with gcc complied code. eg. MUI 3.9+, newer MCC classes (BetterString, TextEditor...) HISTORY: ======== v45.2+ (02.04.2015) International compliance - changed the country currency from RUR to RUB according to latest ISO 4217 specification and recommendations from Central Bank v45.2 (14.03.2015) Upcoming 70th anniversary of WWII edition - added some workarounds for compilers and bad code that feeds signed chars to locale. (Signed negative char values are converted back to unsigned, so it should make some software that failed before with Russian chars (in fact any chars above ASCII 127) finally work). But it is still highly recommended to fix the software and send char queries to locale in proper 0-255 range. - added some sample example code on how to use some of locale functions - added preliminary UTF support, please note the following: The following functions will report TRUE for chars above 0x000000ff This is usually true since most of them are usually native chars. IsAlNum() IsAlpha() IsGraph() IsPrint() The following functions will report FALSE for chars above 0x000000ff This is not always correct, but without a big table of chars it's the best choice at the moment, can be expanded if and when required. IsLower() IsUpper() IsPunct() The following functions are managed by system locale library and will usually report TRUE for chars above 0x000000ff, this is usually wrong and will require a major overhaul but currently as far a I know these functions are not used anywhere, besides, it might be better to use codesets.library for these and for proper UTF support if required. IsCntrl() IsSpace() IsDigit() IsXDigit() v45.1 (09.05.2014) Victory Edition - based on original code base of v44.x drivers by Oleg Sergeev - fixed functions to work with gcc code (guaranteed return 0 (FALSE) or 255 (TRUE)) IsAlNum() IsAlpha() IsGraph() IsLower() IsUpper() IsPrint() IsPunct() - function GetCodeSet() now returns 2104 (Amiga-1251 regged IANA MIBenum) - proper language id = rus - SC_COLLATE2 conversion now uses standard GOST 7.79 (ISO 9) Table B and should be able to make backward conversion - now uses RUR for local currency (ISO Standard) - updated character definition table - other minor fixes ---------------------------------------------------------------------------- NOTES: ====== Special additional features of StrCnv(), just add new defines to your code #define SC_NATIVE -1 /* compare 1:1 (case sensitive) */ #define SC_TO_KOI8 -2 /* convert to KOI8 / compare to KOI8 */ #define SC_FROM_KOI8 -3 /* convert from KOI8 / compare to KOI8 */ #define SC_TO_ISO -4 /* convert to ISO / compare to ISO */ #define SC_FROM_ISO -5 /* convert from ISO / compare to ISO */ #define SC_TO_866 -6 /* convert to 866 / compare to 866 */ #define SC_FROM_866 -7 /* convert from 866 / compare to 866 */ #define SC_FROM_LATIN -8 /* convert from latin / compare to latin */ SC_COLLATE2 converts/transliterates Cyrillic to Latin multichar text using GOST 7.79 (ISO 9) Table B as approved standard for Russia since 22.06.2000 SC_FROM_LATIN converts Latin translit text back to Cyrillic Amiga-1251. Backward conversion is not 100% guaranteed, but should work 1:1, if the original text is standard and had not been tweaked to brake the algorithm. All functions that need to return a BOOL (0 or 255) will now always return a perfect 0 (FALSE) or 255 (TRUE) value, hopefully ;-) under all gcc/vbcc/sas compiled code and conditions, so no bogus numbers anymore. ---------------------------------------------------------------------------- ПРИМЕЧАНИЯ: =========== Это КРИТИЧЕСКОЕ обновление для драйвера русского языка для 68k AmigaOS 3.х Исправлен ряд существенных проблем с работой системы и программ собранных компилятором gcc. Если у Вас были проблемы с MUI и странное поведение при выделения текста (даже гуру), то теперь все должно работать как часы. Это касается MUI 3.9+ и многих обновлённых MCC классов. Вероятно теперь заработают и другие глючные программы, использующие функции locale.library. ВАЖНО! Для установки нужно скопировать файлы в соответствующие места и обязательно в настройках системы Prefs/Locale сбросить и выбрать языки заново. Это необходимо для установки определённых переменных в системе, которые берутся из установленных драйверов и не меняются при замене драйверов! Функция транслитерации использует принятый в России с 22.06.2000 стандарт ГОСТ 7.79 (ISO 9) по Таблице Б (введена в действие в 2002 году). ГОСТ 7.79-2000 — адаптация ИСО 9, принятая в России и некоторых странах СНГ ИСО 9:1995 — действующий стандарт, принятый Международной организацией по стандартизации. Таблица Б / Система Б — используются лишь сочетания базовых латинских букв при транслитерации кириллицы (часть букв может заменяться на 2 или 3 буквы) Для буквы Ц возможно два варианта транслитерации - латинской буквой С, либо сочетанием CZ. Стандарт рекомендует употреблять С перед буквами I, Е, Y, J, а в остальных случаях — CZ. Текущая версия драйвера использует CZ во всех случаях, но понимает C и CZ как Ц при обратном преобразование. Для стандартных текстов транслитерация должна быть реверсивной 1:1, но алгоритм имеет определённые ограничения и его можно сломать. К примеру последовательность из букв "ЬЪЬЪЬ" при обратном преобразование не даст исходный вариант. Еще алгоритм попытается угадать, когда ставить заглавную букву Ъ или Ь, и когда строчную, отслеживая предыдущие буквы в тексте. В теории ЗАГЛАВНЫЙ текст будет преобразован корректно, если Ъ или Ь не является одиночной или первой буквой в слове. В прочем таких ситуаций не должно быть, если их не создать искусственно. Простые тестовые программы для тестирования прилагаются. Для анализа данных рекомендуется перенаправить вывод в файл >RAM:output.txt Все результаты должны быть 0 или 1, если цифра другая, то у Вас проблемы. В архиве добавлено две дополнительные версии драйвера russian.language_rusmix В этой версии короткие наименования месяцев и дней недели заменены на английские, в остальном функционал идентичный. Может быть полезным, если Вы используете старые программы не учитывающие локализацию (особенно актуально для некоторых сетевых программ типа FTP, которым может сносить крышу или тупят программы при подключению к серверу под управлением AmigaOS, который пытается общаться на русском ;-). russian.language_ruseng В этой версии все текстовые строки соответствуют английским как и в оригинальном english.language, но доступны все дополнительные функции для поддержки Amiga-1251. Для тех, кто не любит локализованные программы, но хочет полноценной поддержки русского языка в системе. Для установки переименовать в russian.language Для программистов, если надо определить версию драйвера, можно проверить описание в $VER: или language id = rusmix и ruseng соответственно Пока language id вроде никто не использовал, но если вдруг потребуется, то в этих специальных версиях, его можно заменить на rus в HEX редакторе, для полной совместимости со стандартом. В прочем начиная с v50 добавлено много дополнительных полей и на новых системах можно использовать их. Можно конечно было использовать название типа russian_mix.language, но классическая система в этом случае будет искать каталоги в директории Locale:russian_mix/ , что не совсем удобно. В v50 это работает немного иначе. Используется международный разделитель целой и дробной части чисел (.) Остаётся открытым вопрос по определению свойств каждого символа, в данной версии установлены атрибуты аналогичные английскому языку для первой половины таблицы. Символы с 9 по 13 в системе по умолчанию определены как печатаемые, но правильно ли это? И аналогично для символов 128-159 (x80-x9F), сейчас они определены как печатаемые и как пунктуация (если использовать расширенную таблицу Amiga­1251X, то там есть псевдографика, или если использовать шрифты в 866 кодировке, к примеру в терминальной программе, там тоже символы) хотя под системой этот диапазон должен быть определён только как контрольные символы. Ждем Вашего мнения! PS: Если Вы хотите написать мне e-mail пожалуйста укажите тему письма AMIGA PPS: Извиняюсь за задержку с релизом на AmiNET, был очень занят параллельными интересными проектами. - cut - THIS SOFTWARE IS FREEWARE ! YOU ARE NOT ALLOWED TO SELL IT, PERMISSION IS GRANTED TO DISTRIBUTE THIS BY ANY MEANS AS LONG AS ALL THE RULES ARE KEPT. THERE IS NO LIABILITY TO THIS SOFTWARE-PACKAGE, IN REFERENCE TO THE ASSERTED LAWS. THE COPYRIGHT OWNERS, AND/OR A THIRD PARTY, PLACE THIS SOFTWARE PACKAGE AT YOUR DISPOSAL "AS IS" (EXCEPT WHERE THIS IS FIXED ANYWHERE ELSE IN A WRITTEN WAY) WITHOUT ANY GUARANTEE IN ANY FORM (INDIRECT OR DIRECT FORM). THE FULL RISK OF QUALITY AND FUNCTIONALITY OF THIS SOFTWARE IS AT YOUR OWN. IF THIS SOFTWARE HAS A BUG, YOU HAVE TO PAY ALL COSTS OF THE NECESSARY SERVICE-WORKS AND REPAIRS FOR YOURSELF. UNDER NO CIRCUMSTANCES, THE COPYRIGHT OWNERS OR A THIRD PARTY DISTRIBUTING THIS PROGRAM PACKAGE, AS ALLOWED, JUST BEFORE, CAN NOT BE HELD RESPONSIBLE FOR ANY DAMAGE CAUSED IN ANY USUAL, SPECIAL, OR ACCIDENTAL WAY OR BY THE SOFTWARE PACKAGE (SURROUNDING BUT NOT RESTRICTED ARE THE LOSS OF DATA OR NOT CORRECTLY DISPLAYED DATA OR LOSSES CAUSED BY YOU OR A THIRD PARTY OR BY A FAULTY WORK OF THIS SOFTWARE PACKAGE WITH OTHER PROGRAMS), ALSO IF THE OWNER OR A THIRD PARTY HAS BEEN POINTED AT SUCH POSSIBILITIES OF DAMAGE.