Board.KolibriOS.org
http://board.kolibrios.org/

Вопрос по пути ;)
http://board.kolibrios.org/viewtopic.php?f=2&t=522
Page 1 of 3

Author:  rabid rabbit [ Wed May 24, 2006 9:40 pm ]
Post subject:  Вопрос по пути ;)

Как можно в Колибри получить путь к файлу запущенного процесса?
Т.е. запустили программу /HD0/1/TEMP/PROGA, и эта программа путём некоторых действий получила строку ASCIIZ "/HD0/1/TEMP/PROGA"

Author:  Serge [ Wed May 24, 2006 10:07 pm ]
Post subject: 

Похоже что никак. Когда запускается новое приложение программе передается имя файла, а путь отсекается :(

Author:  andrew_programmer [ Wed May 24, 2006 10:15 pm ]
Post subject: 

Как-то можно.Марат реализовал эту возможность(это было несколько дистрибутивов назад).
А вот как ей пользоваться - я непонял.

Author:  mike.dld [ Thu May 25, 2006 6:58 am ]
Post subject: 

Serge wrote:
программе передается имя файла, а путь отсекается
Кто это тебе сказал такую глупость? Есть баг, что при запуске программ 19-й функцией (и другими, которые требуют только имя файла для запуска) передаётся только имя файла. В случае же запуска программы 58-й функцией программе передаётся полный путь.

Для того, чтобы получить путь к самому себе, нужно в заголовке в поле I_ICON (следующее за I_PARAM) поместить адрес буфера достаточной длины. Какова "достаточная длина" не знает никто, так что предлагаю принять её равной, допустим, 4096. Многовато, но уж точно не мало. При запуске программы ядро запишет в буфер по этому адресу путь к программе именно в том виде, который тебе нужен, т.е. полный путь + имя файла.

Author:  rabid rabbit [ Thu May 25, 2006 12:03 pm ]
Post subject: 

Да, типа сахар в холодильнике в банке с этикеткой "сметана" ;) Никогда бы не догадался, что поле I_ICON отвечает за путь к выполняемому файлу процесса ;) А нафига тогда I_PARAM нужен?

Author:  mike.dld [ Thu May 25, 2006 4:45 pm ]
Post subject: 

I_ICON задумывался для хранения адреса иконки приложения. Идея в жизнь так и не воплотилась, но название осталось. Называй I_APPPARAM, например, если тебе так больше нравится.
I_PARAM содержит адрес буфера для параметров, переданных приложению при запуске.

Author:  Mario79 [ Thu May 25, 2006 5:30 pm ]
Post subject: 

rabid rabbit
Все как описывает mike.dld, но размер буфера может изменяться от 12*2+2 (например, db '/hd0/1/',0 - возвращается в растянутом виде, где каждое звено между косюшками занимает 11 байт, вместе со всеми пробелами) до очень большого значения.
Надо будет в документацию добавить информацию по этому поводу, чтобы люди не путались.
И еще возврат пути реализован только для заголовка MENUET01
Вот, пожалуй, и все.

Author:  rabid rabbit [ Thu May 25, 2006 6:41 pm ]
Post subject: 

а почему-бы не помещать путь к программе в качестве первого параметра?

Author:  Mario79 [ Thu May 25, 2006 9:42 pm ]
Post subject: 

rabid rabbit
Потому что так уже сложилось "исторически" и уже есть одно серьезное приложение, которое использует данный параметр, это Тинипад который написал mike.dld
И к тому же перестановка слагаемых суммы не меняет, нет видимых причин просто так менять код, никаких неудобств я в таком положении вещей не вижу, но готов выслушать твои выводы, если таковые имеются.

Author:  rabid rabbit [ Thu May 25, 2006 10:33 pm ]
Post subject: 

ну, например MHTPACK (так вроде, который исполняемые файлы упаковывает) принципиально не хочет паковать прогу, у которой I_ICON != 0. Хотя, может он и от проги с I_PARAM !=0 откажется, я не проверял.

Author:  diamond [ Fri May 26, 2006 11:46 am ]
Post subject: 

mtappack не пакует программы, использующие путь, поскольку для поддержки этого при распаковке нужен дополнительный код. Программы, использующие параметры, он упаковывает. Все остальные упаковщики, по-моему, просто игнорируют это поле, что приводит к неправильной работе...
Между прочим, что делать в 70-й функции для (будущей) соответствующей подфункции запуска? Там-то нет ограничений 8.3...

Author:  Serge [ Fri May 26, 2006 1:42 pm ]
Post subject: 

Надо хранит путь и рабочий каталог в памяти ядра. Увеличить размер структур по 0x80000 и записывать их туда.

Author:  diamond [ Fri May 26, 2006 1:43 pm ]
Post subject: 

Но память ядра приложению недоступна!?

Author:  Mario79 [ Fri May 26, 2006 5:24 pm ]
Post subject: 

rabid rabbit
Это проблема приложений, а не проблема ядра. Она вполне решаема переписыванием упаковщиков, а вот сложившиеся вещи в ядре трогать лишний раз не стоит, без крайней необходимости.

diamond
А все также - возвращаешь путь, а в первом байте указываешь ASCII или UNICODE данные.

Serge
Зачем занимать память ядра? Ядру ведь нет дела до того, откуда загружено приложение. Приложение само должно знать и хранить свой путь, так как он требуется именно для приложения.
К тому же опять писать лишние и практически бессмысленные функции. Но это ИМХО.

Author:  Serge [ Fri May 26, 2006 7:43 pm ]
Post subject: 

Quote:
Зачем занимать память ядра? Ядру ведь нет дела до того, откуда загружено приложение. Приложение само должно знать и хранить свой путь, так как он требуется именно для приложения.
К тому же опять писать лишние и практически бессмысленные функции. Но это ИМХО.
Правильно. Давайте хранить все программы и данные в корневом каталоге загрузочного диска :) Похоже, что путь "../data/my_save.dat" вызовет у файловой системы полуобморочное состояние. Рано или поздно все равно придется делать GetCurrentDir/SetCurrentDir или жить с рамдиском без папок, "как завещал великий Вилле" :)
Сам он с этого пути уже свалил.

Page 1 of 3 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/