Board.KolibriOS.org

Official KolibriOS board
It is currently Thu Feb 27, 2020 2:57 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 41 posts ]  Go to page 1 2 3 Next
Author Message
PostPosted: Wed May 24, 2006 9:40 pm 
Offline

Joined: Tue Apr 18, 2006 11:48 pm
Posts: 53
Как можно в Колибри получить путь к файлу запущенного процесса?
Т.е. запустили программу /HD0/1/TEMP/PROGA, и эта программа путём некоторых действий получила строку ASCIIZ "/HD0/1/TEMP/PROGA"


Top
   
 Post subject:
PostPosted: Wed May 24, 2006 10:07 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Похоже что никак. Когда запускается новое приложение программе передается имя файла, а путь отсекается :(


Top
   
 Post subject:
PostPosted: Wed May 24, 2006 10:15 pm 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
Как-то можно.Марат реализовал эту возможность(это было несколько дистрибутивов назад).
А вот как ей пользоваться - я непонял.


Top
   
 Post subject:
PostPosted: Thu May 25, 2006 6:58 am 
Offline
Site Founder
User avatar

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

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

_________________
in code we trust


Top
   
 Post subject:
PostPosted: Thu May 25, 2006 12:03 pm 
Offline

Joined: Tue Apr 18, 2006 11:48 pm
Posts: 53
Да, типа сахар в холодильнике в банке с этикеткой "сметана" ;) Никогда бы не догадался, что поле I_ICON отвечает за путь к выполняемому файлу процесса ;) А нафига тогда I_PARAM нужен?


Top
   
 Post subject:
PostPosted: Thu May 25, 2006 4:45 pm 
Offline
Site Founder
User avatar

Joined: Sun Aug 08, 2004 8:55 am
Posts: 689
I_ICON задумывался для хранения адреса иконки приложения. Идея в жизнь так и не воплотилась, но название осталось. Называй I_APPPARAM, например, если тебе так больше нравится.
I_PARAM содержит адрес буфера для параметров, переданных приложению при запуске.


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


Top
   
 Post subject:
PostPosted: Thu May 25, 2006 6:41 pm 
Offline

Joined: Tue Apr 18, 2006 11:48 pm
Posts: 53
а почему-бы не помещать путь к программе в качестве первого параметра?


Top
   
 Post subject:
PostPosted: Thu May 25, 2006 9:42 pm 
rabid rabbit
Потому что так уже сложилось "исторически" и уже есть одно серьезное приложение, которое использует данный параметр, это Тинипад который написал mike.dld
И к тому же перестановка слагаемых суммы не меняет, нет видимых причин просто так менять код, никаких неудобств я в таком положении вещей не вижу, но готов выслушать твои выводы, если таковые имеются.


Top
   
 Post subject:
PostPosted: Thu May 25, 2006 10:33 pm 
Offline

Joined: Tue Apr 18, 2006 11:48 pm
Posts: 53
ну, например MHTPACK (так вроде, который исполняемые файлы упаковывает) принципиально не хочет паковать прогу, у которой I_ICON != 0. Хотя, может он и от проги с I_PARAM !=0 откажется, я не проверял.


Top
   
 Post subject:
PostPosted: Fri May 26, 2006 11:46 am 
Offline
Kernel Developer
User avatar

Joined: Mon Nov 28, 2005 8:00 pm
Posts: 1601
mtappack не пакует программы, использующие путь, поскольку для поддержки этого при распаковке нужен дополнительный код. Программы, использующие параметры, он упаковывает. Все остальные упаковщики, по-моему, просто игнорируют это поле, что приводит к неправильной работе...
Между прочим, что делать в 70-й функции для (будущей) соответствующей подфункции запуска? Там-то нет ограничений 8.3...


Top
   
 Post subject:
PostPosted: Fri May 26, 2006 1:42 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Надо хранит путь и рабочий каталог в памяти ядра. Увеличить размер структур по 0x80000 и записывать их туда.


Top
   
 Post subject:
PostPosted: Fri May 26, 2006 1:43 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Nov 28, 2005 8:00 pm
Posts: 1601
Но память ядра приложению недоступна!?


Top
   
 Post subject:
PostPosted: Fri May 26, 2006 5:24 pm 
rabid rabbit
Это проблема приложений, а не проблема ядра. Она вполне решаема переписыванием упаковщиков, а вот сложившиеся вещи в ядре трогать лишний раз не стоит, без крайней необходимости.

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

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


Top
   
 Post subject:
PostPosted: Fri May 26, 2006 7:43 pm 
Offline
Kernel Developer

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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 41 posts ]  Go to page 1 2 3 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited