OberonCore https://forum.oberoncore.ru/ |
|
i21sys: Точная работа i21sysCalls.Open https://forum.oberoncore.ru/viewtopic.php?f=90&t=4267 |
Страница 1 из 1 |
Автор: | Oleg N. Cher [ Среда, 20 Февраль, 2013 18:11 ] |
Заголовок сообщения: | i21sys: Точная работа i21sysCalls.Open |
Есть потребность вызывать bat-файлы из ББ-модуля. Но тут выяснилось с помощью такого батника: Код: @CD что текущий каталог запущенного с помощью i21sysCalls.Open bat-файла не всегда один и тот же. Иногда он указывает на корень установленного ББ, иногда на папку с недавно открытым исходником модуля. Вопрос: от чего точно зависит этот путь и как его точно установить?@PAUSE Сами скриптовые файлы планируется поместить в подсистеме вместе с модулями, однако не хочется делать привязку к конкретному пути установки ББ. Сама i21sysCalls.Open работает через системную процедуру Services.DoLater. А, быть может, есть более богатый на дополнительные параметры способ запуска батников из модулей? Спасибо. (р-р кол-ции) карточка: http://oberoncore.ru/bbcc/subs/i21sys/ |
Автор: | Евгений Темиргалеев [ Среда, 20 Февраль, 2013 19:11 ] |
Заголовок сообщения: | Re: Точная работа i21sysCalls.Open |
Путь --- текущий для приложения "BlackBox.exe". При запуске он может совпадать с положением exe. Виндовый диалог "открыть файл" при соотв. настройке может его менять; открываете исходники через File->Open? "как его точно установить?" --- PROCEDURE GetCurrentDirectoryW* (nBufferLength: INTEGER; lpBuffer: PtrWSTR): INTEGER; --- Посмотрите i21sysCalls.Start; omcCmdline работает через неё. Тема i21sysCalls |
Автор: | Oleg N. Cher [ Среда, 20 Февраль, 2013 20:27 ] |
Заголовок сообщения: | Re: Точная работа i21sysCalls.Open |
Евгений Темиргалеев писал(а): Путь --- текущий для приложения "BlackBox.exe". При запуске он может совпадать с положением exe. Виндовый диалог "открыть файл" при соотв. настройке может его менять; открываете исходники через File->Open? Да.Евгений Темиргалеев писал(а): "как его точно установить?" --- PROCEDURE GetCurrentDirectoryW* (nBufferLength: INTEGER; lpBuffer: PtrWSTR): INTEGER; Ну если однозначно завязываться на WinApi, тогда вопросов нет. Я думал, может можно как-то иначе, более в стиле ББ, что ли.Спасибо за ссылки, уже читал, но не вижу как omcCmdline мне поможет. Это ведь просто обёртка вокруг i21sysCalls (c теми же проблемами, т.е. неопределённостью для батника текущего пути). Похоже, придётся делать свой модуль. Можем подойти к проблеме с другой стороны. А в самом батнике можно как-то определить абсолютный или относительный путь к корневой папке ББ, чтобы потом относительно от него открыть нужную подсистему? Навскидку приходит на ум только передать этот путь в батник параметром. Можно ли как-то проще? Можно ли в своём модуле средствами ББ-api (без прямого обращения к WinApi) получить путь к корневой папке ББ? |
Автор: | Евгений Темиргалеев [ Среда, 20 Февраль, 2013 22:47 ] |
Заголовок сообщения: | Re: Точная работа i21sysCalls.Open |
Oleg N. Cher писал(а): Можно ли в своём модуле средствами ББ-api (без прямого обращения к WinApi) получить путь к корневой папке ББ? Само понятие корневой папки ББ привязано к нижележащей системе. Поэтому как-то иначе можно, но только в стиле конкретной реализации ББ. Например:loc: Files.Locator; rootDir: ARRAY 256 OF CHAR; loc := Files.dir.This(""); rootDir := loc(HostFiles.Locator).path$ |
Автор: | Пётр Кушнир [ Четверг, 21 Февраль, 2013 00:12 ] |
Заголовок сообщения: | Re: Точная работа i21sysCalls.Open |
можно получить строку с параметрами запуска приложения, в ней должен быть путь к exe-файлу. см. HostMenus.ReadCommandLine |
Автор: | Александр Ильин [ Четверг, 21 Февраль, 2013 00:28 ] |
Заголовок сообщения: | Re: Точная работа i21sysCalls.Open |
Пётр Кушнир писал(а): можно получить строку с параметрами запуска приложения, в ней должен быть путь к exe-файлу. Там строка получается в конечном итоге из KERNEL32.GetCommandLineA(), что и есть WinApi.
см. HostMenus.ReadCommandLine |
Автор: | Пётр Кушнир [ Четверг, 21 Февраль, 2013 14:29 ] |
Заголовок сообщения: | Re: Точная работа i21sysCalls.Open |
В конечном итоге всё превращается в машинные коды. А бороться с винапи позволяют скрытые реализации. Только абстракции должны быть такие, чтобы не приходилось Евгений Темиргалеев писал(а): loc := Files.dir.This(""); rootDir := loc(HostFiles.Locator).path$ хост-часть использовать напрямую.
|
Автор: | Oleg N. Cher [ Суббота, 23 Февраль, 2013 00:48 ] | ||
Заголовок сообщения: | Re: Точная работа i21sysCalls.Open | ||
Для более полного охвата задач по запуску модулю i21sysCalls не хватает логичной возможности запускать/открывать файлы (находящиеся, например, внутри подсистем ББ, но не только), путь до которых задан с помощью Locator. Фёдор Васильевич, дарю идею. Если хотите, оставьте. Я добавил процедуры: Код: PROCEDURE OpenAt (loc: Files.Locator; fileName: ARRAY OF CHAR); которые открывают/запускают заданный файл из папки, заданной локатором. Она на момент запуска является для приложения текущей. Это придаёт дополнительные возможности по интеграции ББ с документами и исполняемыми файлами/скриптами Windows.PROCEDURE StartAt (loc: Files.Locator; exeName: ARRAY OF CHAR); Если решите оставить, надо будет дополнить документацию. Господа, я тестировал эти процедуры, но покритикуйте код, пожалуйста.
|
Автор: | Oleg N. Cher [ Суббота, 23 Февраль, 2013 20:05 ] |
Заголовок сообщения: | Re: Точная работа i21sysCalls.Open |
Архив i21sys.zip, размещённый постом выше, уже устарел, т.к. было сделано несколько важных изменений в коде. Перезалить архив я не смог, т.к. на данном форуме отключена возможность редактировать сообщения. В то же время не хочется плодить зоопарк архивов. Поэтому ветка пеерезжает сюда, где можно ознакомиться с изменениями и скачать новые файлы (с GitHub). P.S. Похоже, единственным русскоязычным форумом по Оберон-технологиям, на котором можно редактировать сообщения, остаётся ZX.Oberon2.Ru/Forum. |
Автор: | Евгений Темиргалеев [ Воскресенье, 24 Февраль, 2013 16:17 ] |
Заголовок сообщения: | Re: Точная работа i21sysCalls.Open |
Oleg N. Cher писал(а): Архив i21sys.zip, размещённый постом выше, уже устарел, т.к. было сделано несколько важных изменений в коде. Перезалить архив я не смог, т.к. на данном форуме отключена возможность редактировать сообщения. В то же время не хочется плодить зоопарк архивов. Поэтому ветка пеерезжает сюда, где можно ознакомиться с изменениями и скачать новые файлы (с GitHub). Однако, и в новой ветке, архив не размещён ("и скачать новые файлы (с GitHub)"). Что тогда Вы хотели сказать, поминая отключённую возможность редактировать сообщения?
P.S. Похоже, единственным русскоязычным форумом по Оберон-технологиям, на котором можно редактировать сообщения, остаётся ZX.Oberon2.Ru/Forum. |
Автор: | Oleg N. Cher [ Пятница, 12 Июль, 2013 23:06 ] |
Заголовок сообщения: | Re: Точная работа i21sysCalls.Open |
Я исправил очень критичную ошибку в коде, так что нужно обязательно перекачать файл i21sys/Mod/Calls.odc (и перекомпилировать). Евгений Темиргалеев писал(а): Однако, и в новой ветке, архив не размещён ("и скачать новые файлы (с GitHub)"). Что тогда Вы хотели сказать, поминая отключённую возможность редактировать сообщения? Это был такой крик разочарования впервые обнаруженного отключения редактирования, я люблю редактировать сообщения и нахожу такую важную возможность крайне необходимой для технического форума, несмотря на некоторые... гм... недостатки.Не приложил архив вот почему: не хочу распространять на другом форуме неавторский архив с несанкционированными автором изменениями. Не хочу формировать архив в несвойственной автору манере. И не хочу конкурировать с автором подсистемы, наоборот — предлагаю присоединить мои наработки в общий котёл, если есть такое желание. |
Автор: | Евгений Темиргалеев [ Суббота, 13 Июль, 2013 11:44 ] |
Заголовок сообщения: | Re: Точная работа i21sysCalls.Open |
Oleg N. Cher писал(а): Что-то не нашёл места, в котором исправлена ошибка... ни в i21sysCalls (http://oberoncore.ru/bbcc/subs/i21sys/calls) ни в i21sysCalls из базовой сборки (http://www.inr.ac.ru/~info21/software.htm). ?
|
Автор: | Oleg N. Cher [ Вторник, 06 Август, 2013 17:57 ] |
Заголовок сообщения: | Re: i21sys: Точная работа i21sysCalls.Open |
А Вы скачайте с моего репа файл Calls.odc и сравните с оригинальным. Ну а суть исправленной ошибки вот в чём: Код: - success := ( curPath[0] # 0X ); + success := ( a.filePath^[0] # 0X ); Напоминаю, что я не имею доступа и прав обновлять подсистему i21sys, размещённую по указанным Вами ссылкам. Я даже не уверен, что Фёдору Васильевичу понравилась предложенная мною доработка. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |