Текущий раздел:

Описания RDS

Описание пользователя

Глава 1. Необходимые сведения об устройстве RDS

§1.9. Основные изменения в версии 2.0

# Описание пользователя

## Глава 1. Необходимые сведения об устройстве RDS

### §1.9. Основные изменения в версии 2.0

Описываются основные отличия RDS версии 2.0 от версий 1.x. Пользователи, не работавшие с версиями 1.x, могут пропустить этот раздел.

Основной целью разработки второй версии RDS было добавление поддержки текстовых строк Unicode и платформы Windows 64. Принципиально новые возможности в новой версии отсутствуют.

Вторая версия не может быть установлена «поверх» версии 1.x – у них разная структура внутренних папок и разный формат служебных файлов. Обе версии могут работать одновременно, но установлены они должны быть в разные папки. Тридцатидвухбитный и шестидесятичетырехбитный варианты второй версии могут быть установлены в одну папку и работать, не мешая друг другу.

Поддержка Unicode

Все конфигурационные текстовые файлы, а также файлы схем, блоков и моделей RDS теперь используют кодировку UTF8 (с BOM или без него). Другие варианты Unicode не поддерживаются (при необходимости можно перекодировать файлы вручную). Для совместимости с версиями 1.x поддерживается загрузка старых файлов схем и моделей в кодировке CP1251 в русских локализованных Windows. В версию 1.x на данный момент добавлена возможность загрузки файлов в UTF8, чтобы в течение переходного периода можно было работать с одной и той же схемой в разных версиях RDS. По мере дальнейшего развития версии 2.x обратная совместимость, очевидно, пропадет.

Внутри RDS как основной формат хранения строк используется UTF8, это важно понимать при создании собственных моделей блоков. Не все компиляторы языка C поддерживают прямое задание строковых констант в такой кодировке, но практически все поддерживают строки с префиксом L (например, L"абвг"), который в Windows означает кодировку UTF16. Поэтому, для облегчения написания моделей блоков, программный интерфейс между главной программой RDS и различными DLL блоков и модулей позволяет принимать и передавать строки как в «родном» для RDS UTF8 (тип char*), так и в «родном» для Windows UTF16 (тип wchar_t*).

Поддержка Windows 64

В отличие от исключительно тридцатидвухбитной версии RDS 1.x, вторая версия существует в двух вариантах: 32-битном и 64-битном. На платформу Win64 переведены все программные модули, за исключением устаревших. 32-битный вариант RDS может работать и в 32-битной, и в 64-битной версии Windows, 64-битный вариант – только в 64-битной.

32-битный и 64-битный варианты второй версии могут быть установлены в одну папку и использовать одни и те же служебные файлы и настройки. Исполняемый файл 32-битного варианта – «Rds.exe», 64-битного – «Rds64.exe», поэтому они не мешают друг другу в одной папке. DLL с моделями блоков у этих двух вариантов тоже разнесены: 32-битные библиотеки находятся в подпапке «Dll\», 64-битные – в «Dll\Win64\».

Оба варианта имеют одинаковые форматы файлов и могут связываться друг с другом по сети, так что они должны быть полностью взаимозаменяемыми. У пользователей не будет необходимости переходить на 64-битную версию, пока в Windows поддерживается API Win32.

Устаревшие функции, удаленные из RDS 2.0

Некоторые функции в RDS 1.x либо практически не использовались, либо в версии 2.0 у них появились альтернативы. На данный момент из RDS и библиотек удалены следующие функции:

- внешнее управление через библиотеку «RdsCtrl.dll» (не использовалось);
- внешнее управление через текстовые файлы команд (не использовалось);
- модули преобразования файлов формата BMP (возможность записи PNG теперь встроена непосредственно в RDS);
- модели для работы с внешним модулем АЦП/ЦАП в «Common.dll» и соответствующие им блоки вкладки панели (не использовались);
- модули автокомпиляции для подключения Microsoft Visual C и Digital Mars (не использовались).

Загрузка старых схем из версии 1.x в версию 2.0

В RDS версии 2.0 осталась возможность загружать схемы, сохраненные в версии 1.x, если в 2.0 присутствуют используемые в этих схемах модели блоков. Формат файлов схем у первой и второй версии отличается. Во-первых, каждый блок в схеме второй версии может ссылаться на два разных файла DLL с моделью: один для Win32, второй – для Win64, а в первой версии файл DLL, очевидно, мог быть только один, для Win32. Это же касается и ссылок на модули автокомпиляции, которые могут отличаться у тридцатидвухразрядной и шестидесятичетырехразрядной версий. Во-вторых, все файлы первой версии записываются в кодировке CP1251 (русская кодовая страница Windows), а все файлы второй – в UTF8.

Проблема с необходимостью для блока двух файлов DLL модели решается следующим образом: при загрузке старой схемы считается, что указанные в ней файлы DLL моделей относятся к Win32. При этом в состав RDS включается таблица соответствия для стандартных блоков, по которой, зная имя и файл модели для Win32, автоматически выбирается имя и файл этой же модели для Win64. Таким образом, если старая схема загружается в новую тридцатидвухразрядную версию RDS, считанное из файла описание модели будет подключаться к блоку «как есть». Если же старая схема загружается в новую шестидесятичетырехразрядную версию, по считанному из файла описанию модели будет найдена и подключена к блоку соответствующая модель Win64.

С модулями автокомпиляции дело обстоит примерно так же. Однако, следует учитывать, что состав модулей автокомпиляции в RDS 1.x и 2.0 отличается. Кроме того, в самой версии 2.0 в тридцатидвухразрядном и шестидесятичетырехразрядном вариантах модули автокомпиляции тоже разные. Но, при этом, в варианты обеих разрядностей включен псевдо-модуль «поиск среди настроенных», который выбирает из имеющихся в RDS модулей тот, который настроен и способен работать, и запускает его. Поскольку практически все существующие сейчас схемы для RDS 1.x, за исключением самых старых, ссылаются именно на такой псевдо-модуль поиска, загрузка этих схем в новую версию должна пройти без проблем: псевдо-модулем будет вызван настоящий модуль автокомпиляции, соответствующий текущей платформе. Старые схемы, в которых явно указан какой-то конкретный модуль (например, Borland C++ 5.5 или OpenWatcom) загрузить в новую версию без изменений не получится. Для их загрузки нужно будет еще в версии 1.x переключить все блоки на псевдо-модуль поиска и снова сохранить схему.

Проблема с разными кодировками файлов решается распознаванием кодировки в момент загрузки файла схемы. Прежде всего, если в начале файла записан трехбайтовый маркер UTF8 (UTF8-BOM), то схема считается принадлежащей ко второй версии (RDS 2.0 всегда сохраняет файлы с этим маркером). Если маркер отсутствует, проверяется текстовый заголовок файла: файлы схем версии 1.x начинаются с текста «EXPSYSTXT», а файлы второй версии – с «EXPSYSUT8». Если по одному из этих признаков выяснилось, что загружается схема, сохраненная версией 1.x, то в процессе загрузки она будет перекодироваться в UTF8 согласно кодовой странице, указанной в настройках RDS.

Отдельную проблему представляет загрузка текстов с математическими символами, используемыми во внешнем виде блоков (знаки интеграла, суммы и т.п.). В версии 1.x для этих знаков использовался шрифт «Symbol» с восьмибитными кодами символов. Версия 2.0 работает с Unicode, и в ней этим же символам соответствуют совершенно другие коды, причем шрифт при этом может быть каким угодно. В шрифте «Symbol» знаку интеграла, например, соответствует код маленькой русской буквы «т» (0xF2). Если при загрузке старой схемы встретится маленькая русская буква «т», необходимо понять, к чему она относится. Если она является частью русского текста в какой-то надписи, ее нужно заменить на соответствующую русскую букву в Unicode (U+0442). Если же это символ интеграла на блоке-интеграторе, то букву нужно заменить на знак интеграла в Unicode (U+222B).

Сейчас эта проблема решается следующим образом. В момент чтения файла схемы символы всегда перекодируются согласно кодовой странице (русская «т» в CP1251 становится русской «т» в UTF8). Но при разборе считанных данных для элементов векторной картинки блока и для текста на прямоугольнике блока (т.е. там, где могут встретиться математические символы и греческие буквы) проверяется, не установлен ли для отображения шрифт «Symbol». Если это так, то неправильная перекодировка исправляется, а шрифт меняется с «Symbol» на установленный в настройках (по умолчанию – «Times New Roman»). Там же, в настройках, эту проверку можно отключить – в этом случае тексты всегда будут перекодироваться согласно кодовой странице и шрифт символов исправляться не будет.

Обратная совместимость (загрузка схем из версии 2.0 в старую версию)

В старые версию RDS начиная с 1.0.618 включена возможность загрузки схем, сохраненных в версии 2.0. Различия в формате файлов этих версий приводят к тем же проблемам, что и при загрузке старых схем в новую версию (см. выше), но решаются они немного по-другому.

Проблема с двойным указанием DLL моделей (Win32 и Win64) в схемах второй версии решается просто: ссылки на шестидесятичетырехразрядные модели загружаются и хранятся во внутренних параметрах блока, но нигде не используются. При сохранении схемы они будут записаны обратно в файл без изменений. Для работы блока используется только ссылка на тридцатидвухразрядную модель, которая у двух версий совпадает. Ссылки на шестидесятичетырехразрядные модули автокомпиляции точно так же загружаются, сохраняются и никак не используются.

Кодировка файла схемы, как и при загрузке старой схемы в RDS 2.0, опознается по начальному маркеру UTF8-BOM и по заголовку файла («EXPSYSUT8» – схема версии 2.0). Если схема относится ко второй версии, то в процессе загрузки она будет перекодироваться из UTF8 в ASCII согласно текущей кодовой странице.

В настройках RDS 1.x на вкладке «Загрузка 2.x» можно разрешить преобразование математических и греческих символов Unicode в коды, совместимые со шрифтом «Symbol». Фактически, это операция, обратная выполняемой при загрузке старых схем в новую версию. Однако, тут все несколько сложнее. Дело в том, что многие специальные символы Unicode просто не могут быть переведены в восьмибитные коды текущей кодовой страницы без потери информации. Поэтому преобразование спецсимволов при загрузке новой схемы в старую версию RDS проводится в два этапа.

Сначала, в момент чтения файла схемы, все математические, греческие и специальные символы, для которых есть коды в шрифте «Symbol», заменяются на специальные четырехбайтовые последовательности: 0x07, 0x40 и два байта шестнадцатеричного представления кода соответствующего символа в шрифте «Symbol». Код-префикс 0x07 выбран из-за того, что он вряд ли встретится в настоящем тексте (это непечатаемый символ ASCII).

Затем, уже при разборе считанной информации, для надписей на блоках проводится проверка: состоит ли считанная надпись только из символов, допустимых для шрифта «Symbol», и описанных выше четырехбайтовых последовательностей. Если это не так, никаких дополнительных действий не производится, поскольку замена шрифта в такой надписи на «Symbol» невозможна. Если же проверка прошла успешно, четырехбайтовые последовательности заменяются на соответствующие им коды, а шрифт надписи – на «Symbol».

Таким образом, например, знак интеграла, выводимый на прямоугольнике блока и введенный в версии 2.0 как символ Unicode, при загрузке схемы в старую версию RDS трансформируется в соответствующий знак шрифта «Symbol». Однако, не все надписи могут быть перекодированы таким образом. Например, надпись «∫x(t)dt» не может быть преобразована, потому что в ней, помимо имеющегося в шрифте «Symbol» знака интеграла, есть еще и латинские буквы, которых в этом шрифте нет. Точно так же не будут правильно загружены в версию 1.x надписи с символами национальных алфавитов. Схема загрузится и будет работать, но надписи будут отображаться неправильно.

Краткий список отличий новой версии RDS от старой

1. Все текстовые файлы теперь записываются в UTF8, для файлов схем оставлена возможность чтения в CP1251, при условии, что Windows API сможет перекодировать их в UTF8 (верно для русских локализованных систем).
2. Изменился формат сетевого пакета, поэтому старые версии RDS (1.x) и новые (2.x) не смогут связываться друг с другом по сети. Вся сеть должна состоять только из 1.x (как cейчас), или только из 2.x.
3. Полностью переделан способ подключения модулей автоматической компиляции и расширения вместе с соответствующим интерфейсом пользователя. Раньше, в версиях 1.x, подключение любых модулей делалось через интерфейс пользователя указанием DLL, функции в ней и названия модуля для вызова из меню. Это давало пользователю полную свободу, но вызывало проблемы при обновлении RDS: новые модули не появлялись в меню автоматически. Во второй версии каждый модуль расширения описывается отдельным текстовым файлом специального формата, в котором указываются все параметры модуля и его название по умолчанию для разных языков. При появлении в составе RDS нового файла описания модуля этот модуль автоматически появится в соответствующем меню. Пользователь может скрывать модули, которые он не хочет видеть в меню, и менять их порядок в меню, но полностью удалить модуль через интерфейс RDS он не сможет. Если пользователь захочет добавить в RDS свой собственный модуль расширения (пока этого никто не пытался делать), он может сам создать файл описания и поместить его в папку настроек RDS.
4. В параметрах блока модель теперь задается двумя парами «DLL–функция»: одна пара для Win32, другая – для Win64. К каждой стандартной DLL с моделями («Common.dll», «L57.dll» и т.д.) прикладывается список соответствия моделей для двух разных платформ. Если в блоке, например, указано только описание модели для Win32 (так будет при загрузке во вторую версию старой схемы, созданной в версии 1.x), то при работе в Win64 по этому списку для блока будет найдена соответствующая модель для Win64. Автокомпилируемые модели при этом остаются в единственном экземпляре, как и в 1.x, но они будут порождать две разных DLL на двух платформах.
5. Полностью удален интерфейс пользователя для добавления и настройки модулей преобразования BMP в другие графические форматы. Возможность работы с форматом PNG есть в новой версии используемой в разработке библиотеки, поэтому необходимость во внешнем модуле преобразования для записи картинки схемы в файл отпала. На данный момент поддерживается только запись BMP и PNG, другие форматы все равно никто не использовал. Чтение PNG (например, в редакторе картинки блока) на данный момент не подерживается.
6. Формат данных в буфере обмена изменился, поэтому переносить блоки и части схемы из версии 1.x в версию 2.x и обратно через буфер теперь нельзя. Поскольку новая версия может загружать схемы, созданные старой, для переноса блоков из старой версии в новую достаточно открыть старую схему в новой версии – блоки можно будет скопировать через буфер обмена. Для переноса блоков из новой версии в старую можно открыть новую схему в старой версии, но по мере развития 2.x эта возможность исчезнет.
7. В окне настроек RDS появилась новая вкладка «Внешний вид», на которую вынесены старые настройки языка интерфейса пользователя, показа заставки при запуске и масштабирования колесом мыши, а также добавлены две новых: возможность изменить шрифт в окнах RDS и во всплывающих подсказках. При тестировании RDS 2.0 в Windows XP и в Linux под Wine обнаружилось, что в окнах неправильно отображаются некоторые символы Unicode. Вероятно, это связано с исторически используемым в интерфейсе пользователя RDS шрифтом «MS Sans Serif». На данный момент шрифт во всех окнах RDS насенен на «Tahoma», что решило проблему, но, при желании, пользователь может указать любой другой шрифт. С той же целью можно поменять и шрифт всплывающих подсказок, для которого можно также задать увеличение и уменьшение размера в процентах относительно исходного.
8. В окне настроек RDS появилась новая вкладка «Загрузка 1.x» для обеспечения загрузки схем, сохраненных в версии 1.x. На ней можно указать кодовую страницу, в которой была сохранена загружаемая старая схема (большинство схем сейчас сохранены в русской кодовой странице 1251), а также шрифт, который нужно использовать для текстов, набранных в старой схеме шрифтом «Symbol» (см. выше).
9. С вкладки «Инструменты интерфейса» окна настроек RDS убрана возможность создания новых вариантов интерфейса. Создание вариантов интерфейса (например, еще не существующих переводов на другие языки) пользователем осталось возможным, но только вручную, а не через настройки – в связи с изменением формата служебных файлов эта процедура слишком усложнилась. Функции перевода пользовательских автокомпилируемых моделей и исправления перевода стандартных моделей и общего интерфейса на существующие языки (пока есть только английский) в настройках остались.
10. В настройках теперь невозможно изменить расположение стандартных папок RDS (папка DLL, документации, настроек и т.п.) Папки теперь будут задаваться в момент установки RDS или, если вместо установки просто вручную распаковывается архив, определяться автоматически. На вкладке «Папки» окна настроек размещение стандартных папок отображается без возможности изменения.
11. Расширения исполняемых файлов, создаваемых стандартными модулями автокомпиляции, изменены с «.dll» в версии 1.x на «.dll32» для Win32 и «.dll64» для Win64 в версии 2. Это позволяет независимо работать с одной и той же схемой на разных платформах.
12. Размер шрифта редактора автокомпилируемой модели по умолчанию увеличен с 10 до 12 пунктов.
13. В параметры автокомпилируемой модели добавлен включенный по умолчанию флаг, заменяющий во всех строках в кавычках символы национальных алфавитов на их коды UTF8 в формате «\xNN» перед передачей исходного текста в компилятор. Использование этого флага позволяет не задумываться о поддержке UTF8 в используемом компиялторе Си и записывать в программе модели строковые аргументы функций как текст в двойных кавычках без каких-либо префиксов.