Смекни!
smekni.com

Программирование и разработка приложений в Maple (стр. 121 из 135)

Вызов процедуры delres(L, N, t) обеспечивает удаление/восстановление средства с именем N, расположенного в Maple-библиотеке, заданной полным путем L к ней, в зависимости от значения третьего фактического t-аргумента, а именно: 0 – удаление, 1 – восстановление). Главное имя библиотечных файлов произвольно и четвертый необязательный аргумент определяет его, однако по умолчанию полагается главное имя "Maple".

Успешное восстановление предполагает выполнение следующего условия: в промежутке между удалением средства и его последующим восстановлением посредством процедуры delres к обрабатываемой библиотеке не должна применяться функция march с опциями 'reindex' и/или 'pack'. Процедура delres имеет два ограничения, а именно она: (1) применима к пользовательским библиотекам только типов {mlib, mlab}, (2) обеспечивает корректное восстановление средств с именами длины 1 и 2 при наличие однократных удалений и любого числа удалений для имен длины большей двух. Успешный вызов delres(L, N, 1) восстановливает доступность к удаленному средству N библиотеки L.

Тогда как процедура verdel(L, R) возвращает список имен процедур, удаленных из библиотеки L, в рамках их последних р - 2 символов, где р – длина имени. При этом, через второй R-аргумент возвращается таблица, чьи входы определяют длины имен удаленных процедур, а ее выходы – количества, соответствующие им. Успешный вызов процедуры предполагает выполнение того же условия, что и для предыдущей delres-процедуры.

Этап 7. Создав Maple-библиотеку описанным выше способом и имея средства ее обновления, вы уже вполне можете использовать ее средства наравне с пакетными для программирования своих приложений и дальнейшего развития этой и других ей подобных библиотек. Однако для придания вашей библиотеке статуса законченного программного продукта весьма желательно снабдить ее собственной справочной базой, описывающей все содержащиеся в библиотеке средства. Вполне разумно взять за прообраз такой базы справочную базу самого пакета, которая представляется нам (за исключением ряда не очень значительных огрехов) вполне прилично организованной.

Прежде всего, нам требуется создать саму справочную базу библиотеки (для нашего конкретного случая – библиотеки "C:\Program Files\Maple 10\UserLib"). Однако здесь ситуация несколько отлична от традиционной, а именно. Справочные страницы по средствам Maple-библиотеки находятся в справочной базе в виде файла "Maple.hdb", расположенного, как правило, в том же каталоге, что и сама библиотека. Каждый такой файл базы данных содержит одну либо несколько cтраниц справки, а также служебную информацию, необходимую для обеспечения работы броузера пакета при работе со справочной базой как пакета, так и пользователя.

Справочная система Maple расположена в GUI, поэтому она не может непосредственно обрабатываться программными средствами пакета. Вместо этого обращение к справочной системе обеспечивается через функциональные запросы INTERFACE_HELP(..)-формата. Например, запрос INTERFACE_HELP('display', topic=helpman) выводит справочную cтраницу по процедуре helpman. В общем случае запрос INTERFACE_HELP имеет следующий формат кодирования:

INTERFACE_HELP(<Операция>, topic = Имя {, text = TEXT("Строка_1", "Строка_2", ...)}

{, library = <Библиотека>});

В качестве первого аргумента допускаются такие операции как display, insert и delete, смысл котрых особого пояснения не требует. Каждая справочная cтраница имеет следующие атрибуты:

topic – имя, под которым сохраняется справочная страница; имена разделов могут быть простыми, например, MkDir либо сложными (многоуровневыми). Для многоуровневого имени уровни разделяются запятыми, например, `type,dir`. Каждая справочная страница должна иметь уникальное имя раздела, которое для броузера является регистро-зависимым; aliases – список альтернативных имен для раздела (справочной страницы); text – содержание справочной cтраницы, сохраненной в формате Maple-документа, должно помещаться в форме TEXT("Строка_1", "Строка_2", ....). В качестве содержимого TEXT может выступать произвольный ASCII-текст. Для помещения в файл "Maple.hdb" в качестве справочной страницы подготовленного mws-файла следует использовать процедуру makehelp;

parent – имя справочной cтраницы, которая будет загружена, когда запрошена порождающая ее страница. Как правило, это делается по умолчанию на основе имени раздела; active – при определении true-значения справочная cтраница загружается в качестве активной вместо стандартной справочной cтраницы.

Для операций обновления справочной базы должна использоваться library-опция, определяющая путь к библиотеке с модифицируемой справочной базой "Maple.hdb"; при этом, база главной Maple-библиотеки защищена от модификации. Если же библиотека с модифицируемой справочной базой отражена в предопределенной libname-переменной, то опцию достаточно закодировать в виде library=libname[k], где к – порядковый номер библиотеки в цепочке библиотек, отраженных в libname-переменной. Детальнее с принципами работы с функцией INTERFACE_HELP можно ознакомиться по вызову ?help,update.

С учетом сказанного, для создания начальной справочной базы для нашей UserLib-библиотеки используем следующий INTERFACE_HELP-вызов:

> INTERFACE_HELP('insert', topic="UserLib", text=TEXT("Help on my means in UserLib. Created 7.01.2007"), library="C:&bsol;Program Files&bsol;Maple 10&bsol;UserLib");

В результате этого вызова в каталоге "C:&bsol;Program Files&bsol;Maple 10&bsol;UserLib" библиотеки создается справочная база "Maple.hdb" с единственной справочной страницей (разделом) под именем UserLib с возвратом NULL-значения. В качестве содержимого такой страницы можно, например, помещать общие сведения по библиотеке. При этом, следует иметь в виду, что допускается использование и кириллицы, однако здесь имеется ряд недостатков, здесь не рассматриваемых. Однако, если ставится цель создания приложения, ориентированного на широкий рынок, то следует использовать латиницу.

Последующее наполнение справочной базы производится по мере создания, отладки и помещения в библиотеку новых объектов (процедуры, модули, таблицы и др.). Создав, отладив и апробировав то или иное программное средство, и посчитав целесообразным поместить его в библиотеку, весьма важно его документировать и в качестве такого документа (инструкции по использованию) и выступает подготовленный по нему Maple-документ и помещаемый в справочную базу. Сделать это можно средствами GUI – создать в качестве текущего документа справку по требуемому средству (рекомендуем взять за основу оформление страниц (разделов) справочной базы самого пакета; именно таким образом оформлена справочная база нашей библиотеки [109]) и выполнить цепочку из двух команд GUI <Help ⇒ Save to Database.…>. В результате открывается диалоговое окно `Save Current Worksheet As Help`, в котором достаточно выполнить следующие операции: (1) в Topic-поле поместить имя средства (страницы/раздела) и (2) в поле `Writable Databases in libname` щелчком мыши выбрать путь к искомой справочной базе (результат выбора отражается в поле Database, расположенном выше) и щелкнуть клавишей мыши по кнопке “Save Current”. Результатом будет помещение текущего документа в справочную базу библиотеки под заданным в Topic-поле именем. Так как наша библиотека отражена в предопределенной libname-переменной пакета, то и созданная для нее справочная база логически сцепляется с аналогичной базой пакета, обеспечивая принятую в пакете технологию работы со справочной информацией. На наш взгляд, стравочная система пакета организована достаточно эффективно и удобна для практического использования при работе с Maple и его приложениями.