![]() |
|
|
|
|
|
#1 |
|
Guru
Join Date: 11th September 2009
Location: Москва
Posts: 2,976
Thanks: 60
Thanked 1,785 Times in 1,099 Posts
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Изменение эмулируемой конфигурации.
Формат файлов конфигурации. -------------------------------------------- Так как имеющихся в комплекте поставки эмулятора .cfg-файлов не достаточно "на все случаи жизни", то прежде чем копировать их под другими именами и затем изменять, или "с чистого листа" создавать новые - полезно в общих чертах уяснить, что именно и зачем там написано. Все файлы конфигурации имеют ( в основном ) следующий формат: Code:
[section] key = value ; comment Символ ';' имеет особый смысл и исключает строку из рассмотрения ( превращая её в комментарий ) только в том случае, когда является первым непробельным символом в строке. Три секции в каждом .cfg-файле ( обычно располагающиеся в начале файла ) имеют специальное назначение. ... Секция [modules] содержит объявления используемых модулей в формате: Code:
имя_модуля = путь_к_файлу_модуля Поиск файла модуля ( если путь к файлу модуля не исключает такой возможности ) вначале осуществляется в каталоге встроенных модулей. В комплекте поставки "эмулятора ДВК" все поставляемые модули встроены в файл pdp11.exe. В версии модульного API, существующей на момент создания данного описания - средства просмотра пользователем каталога встроенных модулей отсутствуют. Чтобы экспортируемые модулем объекты могли быть использованы в эмулируемой конфигурации - модуль должен быть объявлен в секции [modules]. ... Секция [objects] содержит объявления используемых объектов в формате: Code:
имя_объекта = имя_модуля:тип_экспортируемого_модулем_объекта В процессе загрузки файла конфигурации - объекты создаются в том порядке, в котором они объявлены в секции [objects], и если объект создаёт окно средствами модульного API - такие окна располагаются на панеле закладок объекта Config в порядке создания "владеющих" ими объектов ( слева направо ). Все имена объектов, объявленных в секции [objects], должны быть уникальны (иначе эмулятор будет ругаться). ... Секция [links] содержит строки ( несовместимые с форматом MS PrivateProfile для .ini-файлов ), описывающие способы динамического связывания созданных объектов на специальном языке описания связей ( который будет рассмотрен позже ). В секции [links] "поведение" символа ';' отличается от других секций. В любых других секциях символ ';' "работает" ( превращая строку в комментарий ) только в самом начале строки, а в секции [links] - символ ';' означает начало комментария в любой позиции. Это позволяет "отключать" несколько последних элементов в строке описания группового присоединения, без необходимости их полного удаления из строки. ... Все остальные секции .cfg-файлов имеют формат: Code:
[имя_объекта.ini] параметр = значение ; комментарий Если изменить имя какого-либо из объектов, создаваемых в ранее загружавшемся файле конфигурации - в этом файле конфигурации появится новая секция, тогда как "старая и бесхозная" - никуда не денется. Это сделано для того, чтобы при временном "выкомментировании" объектов из конфигурации - секции с их настройками не пропадали. Начальные значения всех параметров в "свежей" секции объекта - соответствуют их значениям по-умолчанию. Только что автоматически созданная "свежая" секция объекта не может содержать значений базовых параметров ( из глобального ini-файла класса ), однако при любом изменении базовых параметров экземпляра объекта в процессе эмуляции - их изменённые значения будут сохранены в секции этого объекта в файле конфигурации. Last edited by Patron; 14th January 2014 at 20:19. |
|
|
|
| The Following User Says Thank You to Patron For This Useful Post: | hobot (15th March 2012) |
|
|
#2 |
|
Guru
Join Date: 11th September 2009
Location: Москва
Posts: 2,976
Thanks: 60
Thanked 1,785 Times in 1,099 Posts
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Изменение эмулируемой конфигурации.
Свойства окон объектов. ----------------------------------- Чтобы главное окно объекта попало в закладки конфига - оно должно быть создано при помощи модульного API. Все такие окна принадлежат к базовому классу Workfield, а автоматически создающие их объекты - к базовому классу WorkfieldOwner. Это обеспечивает универсальное единообразие свойств главных окон объектов модульного API. Для выяснения этих свойств - создадим пустой файл, назовём его test.cfg и загрузим в эмулятор командой меню "Файл -> Открыть": Скрытый текст![]() [свернуть] Открыв затем файл test.cfg в текстовом редакторе - можно обнаружить, что объект Config уже "прописал" туда свою секцию: Code:
[Config.ini] InitialStateOf[Log]=0 SaveChangesFor[Log]=0 ExtendedStartLog=0 ActiveWindowHandle= ActiveConfigID= InitialStateOf[ControlBar]=0 SaveChangesFor[ControlBar]=0 InitialStateOf[StatusBar]=0 SaveChangesFor[StatusBar]=0 Code:
[Config.ini] InitialStateOf[Log]=0 SaveChangesFor[Log]=0 ExtendedStartLog=0 ActiveWindowHandle= ActiveConfigID= InitialStateOf[ControlBar] = 1 SaveChangesFor[ControlBar] = 0 InitialStateOf[StatusBar] = 1 SaveChangesFor[StatusBar] = 0 Скрытый текст![]() [свернуть] Сравнив результаты можно заметить, что выше и ниже окна закладок появились полосы для размещения виджетов ( верхняя называется ControlBar, а нижняя - StatusBar ). Отключим верхнюю полосу, установив InitialStateOf[ControlBar] опять в 0 и добавим в файл test.cfg строки, необходимые для создания консоли: Code:
[modules] Main = Main_module.em [objects] Con = Main:Console [Config.ini] InitialStateOf[Log]=0 SaveChangesFor[Log]=0 ExtendedStartLog=0 ActiveWindowHandle= ActiveConfigID= InitialStateOf[ControlBar] = 0 SaveChangesFor[ControlBar] = 0 InitialStateOf[StatusBar] = 1 SaveChangesFor[StatusBar] = 0 Скрытый текст![]() [свернуть] Открыв ещё раз файл test.cfg в редакторе - можно обнаружить, что там появилась новая секция, размещённая созданным экземпляром консоли: Code:
[Con.ini] TabTitle="" InitialStateOf[ControlBar]=1 SaveChangesFor[ControlBar]=0 InitialStateOf[StatusBar]=1 SaveChangesFor[StatusBar]=0 LeftDumpSeparator="«" RightDumpSeparator="»" InitialStateOf[Dump]=1 SaveChangesFor[Dump]=0 InitialStateOf[Log]=0 SaveChangesFor[Log]=0 Скрытый текст![]() [свернуть] То же справедливо и для окон "свежесозданных" объектов типа Terminal - у них верхняя и нижняя полосы главного окна также по умолчанию включены: Скрытый текстCode:
[modules] Main = Main_module.em Term = Terminal_module.em [objects] Con = Main:Console VTxx = Term:Terminal ![]() [свернуть] ... Все главные окна объектов ( кроме окна корневого конфига ) имеют параметр TabTitle, определяющий название закладки. По умолчанию этот параметр не задан и тогда название закладки главного окна объекта совпадает с именем объекта, указанным при его создании. Однако, если в нашем тестовом файле конфигурации test.cfg изменить параметры TabTitle консоли и терминала на "Консоль", то результат может показаться довольно оригинальным: Скрытый текст![]() [свернуть] Last edited by Patron; 29th December 2012 at 14:01. |
|
|
|
| The Following User Says Thank You to Patron For This Useful Post: | hobot (15th March 2012) |
![]() |
| Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
|
|