OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 15:08

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: i21sys: Точная работа i21sysCalls.Open
СообщениеДобавлено: Среда, 20 Февраль, 2013 18:11 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 519
Откуда: Украина, Днепропетровская обл.
Есть потребность вызывать bat-файлы из ББ-модуля. Но тут выяснилось с помощью такого батника:
Код:
@CD
@PAUSE
что текущий каталог запущенного с помощью i21sysCalls.Open bat-файла не всегда один и тот же. Иногда он указывает на корень установленного ББ, иногда на папку с недавно открытым исходником модуля. Вопрос: от чего точно зависит этот путь и как его точно установить?

Сами скриптовые файлы планируется поместить в подсистеме вместе с модулями, однако не хочется делать привязку к конкретному пути установки ББ.

Сама i21sysCalls.Open работает через системную процедуру Services.DoLater. А, быть может, есть более богатый на дополнительные параметры способ запуска батников из модулей?

Спасибо.

(р-р кол-ции) карточка: http://oberoncore.ru/bbcc/subs/i21sys/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Точная работа i21sysCalls.Open
СообщениеДобавлено: Среда, 20 Февраль, 2013 19:11 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Путь --- текущий для приложения "BlackBox.exe". При запуске он может совпадать с положением exe. Виндовый диалог "открыть файл" при соотв. настройке может его менять; открываете исходники через File->Open?

"как его точно установить?" --- PROCEDURE GetCurrentDirectoryW* (nBufferLength: INTEGER; lpBuffer: PtrWSTR): INTEGER;

---
Посмотрите i21sysCalls.Start; omcCmdline работает через неё.

Тема i21sysCalls


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Точная работа i21sysCalls.Open
СообщениеДобавлено: Среда, 20 Февраль, 2013 20:27 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 519
Откуда: Украина, Днепропетровская обл.
Евгений Темиргалеев писал(а):
Путь --- текущий для приложения "BlackBox.exe". При запуске он может совпадать с положением exe. Виндовый диалог "открыть файл" при соотв. настройке может его менять; открываете исходники через File->Open?
Да.
Евгений Темиргалеев писал(а):
"как его точно установить?" --- PROCEDURE GetCurrentDirectoryW* (nBufferLength: INTEGER; lpBuffer: PtrWSTR): INTEGER;
Ну если однозначно завязываться на WinApi, тогда вопросов нет. Я думал, может можно как-то иначе, более в стиле ББ, что ли.

Спасибо за ссылки, уже читал, но не вижу как omcCmdline мне поможет. Это ведь просто обёртка вокруг i21sysCalls (c теми же проблемами, т.е. неопределённостью для батника текущего пути). Похоже, придётся делать свой модуль.

Можем подойти к проблеме с другой стороны. А в самом батнике можно как-то определить абсолютный или относительный путь к корневой папке ББ, чтобы потом относительно от него открыть нужную подсистему? Навскидку приходит на ум только передать этот путь в батник параметром. Можно ли как-то проще?

Можно ли в своём модуле средствами ББ-api (без прямого обращения к WinApi) получить путь к корневой папке ББ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Точная работа i21sysCalls.Open
СообщениеДобавлено: Среда, 20 Февраль, 2013 22:47 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Oleg N. Cher писал(а):
Можно ли в своём модуле средствами ББ-api (без прямого обращения к WinApi) получить путь к корневой папке ББ?
Само понятие корневой папки ББ привязано к нижележащей системе. Поэтому как-то иначе можно, но только в стиле конкретной реализации ББ. Например:
loc: Files.Locator; rootDir: ARRAY 256 OF CHAR;
loc := Files.dir.This(""); rootDir := loc(HostFiles.Locator).path$


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Точная работа i21sysCalls.Open
СообщениеДобавлено: Четверг, 21 Февраль, 2013 00:12 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
можно получить строку с параметрами запуска приложения, в ней должен быть путь к exe-файлу.
см. HostMenus.ReadCommandLine


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Точная работа i21sysCalls.Open
СообщениеДобавлено: Четверг, 21 Февраль, 2013 00:28 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Пётр Кушнир писал(а):
можно получить строку с параметрами запуска приложения, в ней должен быть путь к exe-файлу.
см. HostMenus.ReadCommandLine
Там строка получается в конечном итоге из KERNEL32.GetCommandLineA(), что и есть WinApi.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Точная работа i21sysCalls.Open
СообщениеДобавлено: Четверг, 21 Февраль, 2013 14:29 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
В конечном итоге всё превращается в машинные коды.
А бороться с винапи позволяют скрытые реализации. Только абстракции должны быть такие, чтобы не приходилось
Евгений Темиргалеев писал(а):
loc := Files.dir.This(""); rootDir := loc(HostFiles.Locator).path$
хост-часть использовать напрямую.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Точная работа i21sysCalls.Open
СообщениеДобавлено: Суббота, 23 Февраль, 2013 00:48 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 519
Откуда: Украина, Днепропетровская обл.
Для более полного охвата задач по запуску модулю i21sysCalls не хватает логичной возможности запускать/открывать файлы (находящиеся, например, внутри подсистем ББ, но не только), путь до которых задан с помощью Locator. Фёдор Васильевич, дарю идею. Если хотите, оставьте.

Я добавил процедуры:
Код:
   PROCEDURE OpenAt (loc: Files.Locator; fileName: ARRAY OF CHAR);
   PROCEDURE StartAt (loc: Files.Locator; exeName: ARRAY OF CHAR);
которые открывают/запускают заданный файл из папки, заданной локатором. Она на момент запуска является для приложения текущей. Это придаёт дополнительные возможности по интеграции ББ с документами и исполняемыми файлами/скриптами Windows.

Если решите оставить, надо будет дополнить документацию.

Господа, я тестировал эти процедуры, но покритикуйте код, пожалуйста.


Вложения:
Комментарий к файлу: Доработанный вариант i21sysCalls
i21sys.zip [16.94 КБ]
Скачиваний: 286
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Точная работа i21sysCalls.Open
СообщениеДобавлено: Суббота, 23 Февраль, 2013 20:05 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 519
Откуда: Украина, Днепропетровская обл.
Архив i21sys.zip, размещённый постом выше, уже устарел, т.к. было сделано несколько важных изменений в коде. Перезалить архив я не смог, т.к. на данном форуме отключена возможность редактировать сообщения. В то же время не хочется плодить зоопарк архивов. Поэтому ветка пеерезжает сюда, где можно ознакомиться с изменениями и скачать новые файлы (с GitHub).

P.S. Похоже, единственным русскоязычным форумом по Оберон-технологиям, на котором можно редактировать сообщения, остаётся ZX.Oberon2.Ru/Forum.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Точная работа i21sysCalls.Open
СообщениеДобавлено: Воскресенье, 24 Февраль, 2013 16:17 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Oleg N. Cher писал(а):
Архив i21sys.zip, размещённый постом выше, уже устарел, т.к. было сделано несколько важных изменений в коде. Перезалить архив я не смог, т.к. на данном форуме отключена возможность редактировать сообщения. В то же время не хочется плодить зоопарк архивов. Поэтому ветка пеерезжает сюда, где можно ознакомиться с изменениями и скачать новые файлы (с GitHub).

P.S. Похоже, единственным русскоязычным форумом по Оберон-технологиям, на котором можно редактировать сообщения, остаётся ZX.Oberon2.Ru/Forum.
Однако, и в новой ветке, архив не размещён ("и скачать новые файлы (с GitHub)"). Что тогда Вы хотели сказать, поминая отключённую возможность редактировать сообщения?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Точная работа i21sysCalls.Open
СообщениеДобавлено: Пятница, 12 Июль, 2013 23:06 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 519
Откуда: Украина, Днепропетровская обл.
Я исправил очень критичную ошибку в коде, так что нужно обязательно перекачать файл i21sys/Mod/Calls.odc (и перекомпилировать).

Евгений Темиргалеев писал(а):
Однако, и в новой ветке, архив не размещён ("и скачать новые файлы (с GitHub)"). Что тогда Вы хотели сказать, поминая отключённую возможность редактировать сообщения?
Это был такой крик разочарования впервые обнаруженного отключения редактирования, я люблю редактировать сообщения и нахожу такую важную возможность крайне необходимой для технического форума, несмотря на некоторые... гм... недостатки.

Не приложил архив вот почему: не хочу распространять на другом форуме неавторский архив с несанкционированными автором изменениями. Не хочу формировать архив в несвойственной автору манере. И не хочу конкурировать с автором подсистемы, наоборот — предлагаю присоединить мои наработки в общий котёл, если есть такое желание.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Точная работа i21sysCalls.Open
СообщениеДобавлено: Суббота, 13 Июль, 2013 11:44 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Oleg N. Cher писал(а):
Что-то не нашёл места, в котором исправлена ошибка... ни в i21sysCalls (http://oberoncore.ru/bbcc/subs/i21sys/calls) ни в i21sysCalls из базовой сборки (http://www.inr.ac.ru/~info21/software.htm). ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: i21sys: Точная работа i21sysCalls.Open
СообщениеДобавлено: Вторник, 06 Август, 2013 17:57 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 519
Откуда: Украина, Днепропетровская обл.
А Вы скачайте с моего репа файл Calls.odc и сравните с оригинальным. Ну а суть исправленной ошибки вот в чём:
Код:
-    success := ( curPath[0] # 0X );
+    success := ( a.filePath^[0] # 0X );

Напоминаю, что я не имею доступа и прав обновлять подсистему i21sys, размещённую по указанным Вами ссылкам. Я даже не уверен, что Фёдору Васильевичу понравилась предложенная мною доработка.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB