Оберон-клуб «ВЄДАsoft» https://zx.oberon.org/forum/ |
|
Доработка модуля i21sysCalls https://zx.oberon.org/forum/viewtopic.php?f=34&t=80 |
Страница 1 из 1 |
Автор: | Zorko [ 23 фев 2013, 18:55 ] |
Заголовок сообщения: | Доработка модуля i21sysCalls |
Для более полного охвата задач по запуску модулю i21sysCalls не хватает логичной возможности запускать/открывать файлы (находящиеся, например, внутри подсистем ББ, но не только), путь до которых задан с помощью Locator. Я добавил процедуры: Код: "OBERON"
Решение не отражено в документации i21sys/Docu Суть сделанных мною изменений показывает данный коммит. |
Автор: | Zorko [ 05 мар 2013, 07:31 ] |
Заголовок сообщения: | Доработка модуля i21sysCalls |
Обнаружилось, что иногда HostFiles.Locator.path содержит абсолютный путь, а иногда — относительный (от корня ББ). Воспроизвести это можно так: Код: "OBERON"
1. Абсолютный путь. Запустим любой .odc документ, ассоциированный с ББ. Do выдаст полный путь к нему: d:\Archive\Projects\XDev\ZXDev\Lib\Mod 2. Относительный путь. Откроем из уже запущенного ББ любой документ, например, из подсистемы Dev/Docu, Do выдаст: Dev\Docu В связи с таким хитрым поведением локатора возникает вопрос: поскольку при вызове процедур StartAt/OpenAt мы полагаемся на абсолютный путь в локаторе, не может ли возникнуть ситуации, когда относительный путь приведёт к неудаче при запуске? Может для надёжности проверять, является ли путь относительным, и если да, то прибавлять к нему спереди Files.dir.This("")(HostFiles.Locator).path$ + "\" ? Ах да, а ведь ещё же остаются кавычки "", в которые юзер может взять путь, содержащий пробелы. Как быть? |
Автор: | Zorko [ 03 июл 2013, 19:00 ] |
Заголовок сообщения: | Re: Доработка модуля i21sysCalls |
Исправил очень опасную ошибку, можно сказать, недосмотр в i21sys/Calls/StartAt. Там должен проверяться путь (папка по умолчанию для запускаемого файла), но я перепутал имя и указал неинициализированный массив, и он проверялся с помощью сравнения нулевого элемента curPath[0] на равность символу с кодом 0X. Как оказалось, в Win32 это как-то работало, а в Win64 сразу отказалось, но это и позволило найти ошибку. Далее. Практика показала, что проблем с абсолютными/относительными путями нет никаких, всё прекрасно запускается, просто нужно знать, что в (HostFiles.Locator).path$ может храниться как абсолютный путь (например, если открыть документ с помощью ассоциации с BlackBox), так и относительный (от корневой папки BlackBox, например, если открыть документ с помощью File -> Open), и не удивляться. Работает. |
Страница 1 из 1 | Часовой пояс: UTC + 2 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |