Очень функциональный шелл
-
"..воплощать свою идею по поводу специального формата консольных приложений - в виде библиотек coff." а что, классная идея)И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
что то не пойму если будет как обычная dll то как будет чередоваться ввод/вывод
предлагаю линковать как coff но где то договрится чтоб было выделена память на указатели функций работы с консолью, при подгрузке чтоб shell записывал в эту область настоящие адреса
предлагаю линковать как coff но где то договрится чтоб было выделена память на указатели функций работы с консолью, при подгрузке чтоб shell записывал в эту область настоящие адреса
раз кого-то заинтересовала моя идея, то раскрываю карты.
предполагаю сделать так:
консольное приложение - coff с 2 экспортируемыми (стандартно, как и в других либах КолибриОС) функциями. назовём их условно init и main. ф-ция init вызывается при первом обращении к консольному приложению. ей передаётся массив указателей на ф-ции ввода/вывода. порядок функций будет стандартизирован и будет дополняться при возможном развитии программы. init сохраняет указатели. если init возвращает значение, соответсвующее нормальному завершению, вызывается ф-ция main. стандартная main со стандартными параметрами (int argc, char* argv[]).
ну вот и всё. теоретически просто, но есть нюансы... кроме того у меня сейчас на работе полный завал. времени нет совсем. а с 1 июля иду в отпуск и отправляюсь на моря. так что приступить к работе смогу не раньше 15 июля. в версии 0.5 планируются существенные улучшения касательно кода (к сожалению, на счёт пользовательского интерфейса не знаю). в код внёс столько изменений, что он сейчас не работает.
карты раскрыты. код пока выкладывать не хочу. ничего не обещаю, кроме того, что с 15 июля попробую довести код до ума.
предполагаю сделать так:
консольное приложение - coff с 2 экспортируемыми (стандартно, как и в других либах КолибриОС) функциями. назовём их условно init и main. ф-ция init вызывается при первом обращении к консольному приложению. ей передаётся массив указателей на ф-ции ввода/вывода. порядок функций будет стандартизирован и будет дополняться при возможном развитии программы. init сохраняет указатели. если init возвращает значение, соответсвующее нормальному завершению, вызывается ф-ция main. стандартная main со стандартными параметрами (int argc, char* argv[]).
ну вот и всё. теоретически просто, но есть нюансы... кроме того у меня сейчас на работе полный завал. времени нет совсем. а с 1 июля иду в отпуск и отправляюсь на моря. так что приступить к работе смогу не раньше 15 июля. в версии 0.5 планируются существенные улучшения касательно кода (к сожалению, на счёт пользовательского интерфейса не знаю). в код внёс столько изменений, что он сейчас не работает.
карты раскрыты. код пока выкладывать не хочу. ничего не обещаю, кроме того, что с 15 июля попробую довести код до ума.
Добавил корректное завершение работы при закрытии окна консоли, работает только начиная с последней на данный момент версией библиотеки (лежит на svn, включена в ночную сборку). Перекомпилировал в VS2008 с LTCG, ещё пошаманил с оптимизацией по размеру, результаты прилагаю.
- Attachments
-
-
shell-0.4.2-src.zip (19.59 KiB)Downloaded 284 times
-
shell.kex (3.84 KiB)Downloaded 297 times
-
Ушёл к умным, знающим и культурным людям.
diamond
огромнейшее спасибо! буду разбираться с исправлениями.
all
работу на программой не прекращаю. почти полностью переписываю её. изменения (в плане кода, но не функциональности) серьёзные, но пока программа не работает.
огромнейшее спасибо! буду разбираться с исправлениями.
all
работу на программой не прекращаю. почти полностью переписываю её. изменения (в плане кода, но не функциональности) серьёзные, но пока программа не работает.
Нашёл ошибку в работе команды ls.
Немного поправил файл cmd_ls.c из архива 0.4.2 (сборка от diamond'а).
Скомпилировать и проверить не могу из-за отсутствия на компе MSVC.
Немного поправил файл cmd_ls.c из архива 0.4.2 (сборка от diamond'а).
Скомпилировать и проверить не могу из-за отсутствия на компе MSVC.
- Attachments
-
-
cmd_ls.zip (599 Bytes)Downloaded 248 times
-
Готов помочь с развитием шелла - для меня написание консольных приложений более привычно, к тому же большой опыт патчения busybox, c которого и предлагаю использовать идеи.
С чего мне начать?
1. Где взять последние исходники?
2. Что надо в первую очередь сделать?
3. Как быть с системой контроля версий?
P.S. Рад приступить к воплощению прямо сейчас - жду ответа.
С чего мне начать?
1. Где взять последние исходники?
2. Что надо в первую очередь сделать?
3. Как быть с системой контроля версий?
P.S. Рад приступить к воплощению прямо сейчас - жду ответа.
XVilka, последние исходники скорее всего на SVN, хотя, я думаю, их можно найти и в составе архива с исходными кодами ночной сборки системы. Точных ссылок не помню, но они есть на форуме и на wiki.
Насколько я понимаю, в проекте никто никого не принуждает, и люди делают то, что хотят, в своё удовольствие. Любая помощь, так или иначе, полезна. С контролем версий должен помочь, по логике, SVN
Насколько я понимаю, в проекте никто никого не принуждает, и люди делают то, что хотят, в своё удовольствие. Любая помощь, так или иначе, полезна. С контролем версий должен помочь, по логике, SVN
1) самые последние исходники в этой ветке.
diamond (Пт авг 28, 2009 12:09 am) - версия 0.4.2
Albom (Сб янв 30, 2010 9:33 pm) - исправленный вариант команды ls.
Но лучше развивать версию 0.4.1, так как она "заточена" под GCC.
2) если основываться на версии 0.4.1, то нужно сделать то, что сделал diamond - изменить вызов команд (лучше сразу написать парсер, преобразующий строку в стандартные параметры int argc, char* argv[]) и подправить корректное завершение шелла при закрытии консоли (как сделать последнее - понятия не имею, не было времени разбираться).
если нужно, могу отправить все свои наработки по шеллу в ЛС.
diamond (Пт авг 28, 2009 12:09 am) - версия 0.4.2
Albom (Сб янв 30, 2010 9:33 pm) - исправленный вариант команды ls.
Но лучше развивать версию 0.4.1, так как она "заточена" под GCC.
2) если основываться на версии 0.4.1, то нужно сделать то, что сделал diamond - изменить вызов команд (лучше сразу написать парсер, преобразующий строку в стандартные параметры int argc, char* argv[]) и подправить корректное завершение шелла при закрытии консоли (как сделать последнее - понятия не имею, не было времени разбираться).
если нужно, могу отправить все свои наработки по шеллу в ЛС.
Да, лучше в ЛС - сегодня вечером поковыряюсь
Мои изменения должны нормально компилироваться и под gcc, ничего непосредственно под vc я не "затачивал".Albom wrote:Но лучше развивать версию 0.4.1, так как она "заточена" под GCC.
Ушёл к умным, знающим и культурным людям.
в принципе да. только нужно использовать мои обёртки системных вызовов (там ассемблер с синтаксисом AT&T, а не Intel, как в 0.4.1).
Да, я уже переписал то что было в архиве на синтаксис интел совместимый с gcc.
Только не нашел string.c
И проблема при линкове такого рода:
undefined reference to 'ecx'
undefined reference to 'edx'
ну и в таком духе
Но в целом это уже мелочи - более менее разобрался в структуре, сечас пытаюсь реализовать архиватор и shasum.
точнее заставить работать то что уже написал.
А можно мне идеи по развитию узнать? Или какие-то куски бета-кода?
Только не нашел string.c
И проблема при линкове такого рода:
undefined reference to 'ecx'
undefined reference to 'edx'
ну и в таком духе
Но в целом это уже мелочи - более менее разобрался в структуре, сечас пытаюсь реализовать архиватор и shasum.
точнее заставить работать то что уже написал.
А можно мне идеи по развитию узнать? Или какие-то куски бета-кода?
XVilka
Посмотри вот эти исходники:
download/file.php?id=1429
Насчёт идей - читай эту ветку и ветку "что я хочу увидеть завтра..."
Посмотри вот эти исходники:
download/file.php?id=1429
Насчёт идей - читай эту ветку и ветку "что я хочу увидеть завтра..."
Вот добавил возможность нормальной сборки под GCC(MinGW) для последних в этой ветке сырцов,
апплеты выделил в отдельный каталог, библиотеки stdlib, kolibri, string - тоже в отдельный каталог для простоты.
Пофиксил некоторые баги в доступе к памяти (приведение типов), перевел ассемблер в интел-нотацию понимаемую gcc(mingw)
компилятор msvcc тоже вроде работает.
Пока не включил реализацию sha256sum и архиватора LZMA(XZ формат), доведу до ума, выложу. Думаю через день два, будет готово.
В принципе криптолибу можно выделить отдельно, если надо.
Скомпилированный бинарник тоже там.
[Обновил скрипт сборки из под Windows]
апплеты выделил в отдельный каталог, библиотеки stdlib, kolibri, string - тоже в отдельный каталог для простоты.
Пофиксил некоторые баги в доступе к памяти (приведение типов), перевел ассемблер в интел-нотацию понимаемую gcc(mingw)
компилятор msvcc тоже вроде работает.
Пока не включил реализацию sha256sum и архиватора LZMA(XZ формат), доведу до ума, выложу. Думаю через день два, будет готово.
В принципе криптолибу можно выделить отдельно, если надо.
Скомпилированный бинарник тоже там.
[Обновил скрипт сборки из под Windows]
- Attachments
-
-
shell.tar.gz (18.32 KiB)
- Проба
Downloaded 248 times
-
Who is online
Users browsing this forum: No registered users and 1 guest