Очень функциональный шелл

...
  • что то не пойму если будет как обычная dll то как будет чередоваться ввод/вывод
    предлагаю линковать как coff но где то договрится чтоб было выделена память на указатели функций работы с консолью, при подгрузке чтоб shell записывал в эту область настоящие адреса
  • раз кого-то заинтересовала моя идея, то раскрываю карты.

    предполагаю сделать так:
    консольное приложение - coff с 2 экспортируемыми (стандартно, как и в других либах КолибриОС) функциями. назовём их условно init и main. ф-ция init вызывается при первом обращении к консольному приложению. ей передаётся массив указателей на ф-ции ввода/вывода. порядок функций будет стандартизирован и будет дополняться при возможном развитии программы. init сохраняет указатели. если init возвращает значение, соответсвующее нормальному завершению, вызывается ф-ция main. стандартная main со стандартными параметрами (int argc, char* argv[]).

    ну вот и всё. теоретически просто, но есть нюансы... кроме того у меня сейчас на работе полный завал. :( времени нет совсем. а с 1 июля иду в отпуск и отправляюсь на моря. так что приступить к работе смогу не раньше 15 июля. в версии 0.5 планируются существенные улучшения касательно кода (к сожалению, на счёт пользовательского интерфейса не знаю). в код внёс столько изменений, что он сейчас не работает. :(

    карты раскрыты. код пока выкладывать не хочу. ничего не обещаю, кроме того, что с 15 июля попробую довести код до ума.
  • Добавил корректное завершение работы при закрытии окна консоли, работает только начиная с последней на данный момент версией библиотеки (лежит на svn, включена в ночную сборку). Перекомпилировал в VS2008 с LTCG, ещё пошаманил с оптимизацией по размеру, результаты прилагаю.
    Attachments
    Downloaded 283 times
    shell.kex (3.84 KiB)
    Downloaded 294 times
    Ушёл к умным, знающим и культурным людям.
  • diamond
    огромнейшее спасибо! буду разбираться с исправлениями.

    all
    работу на программой не прекращаю. почти полностью переписываю её. изменения (в плане кода, но не функциональности) серьёзные, но пока программа не работает.
  • Нашёл ошибку в работе команды ls.
    Немного поправил файл cmd_ls.c из архива 0.4.2 (сборка от diamond'а).
    Скомпилировать и проверить не могу из-за отсутствия на компе MSVC.
    Attachments
    cmd_ls.zip (599 Bytes)
    Downloaded 247 times
  • Готов помочь с развитием шелла - для меня написание консольных приложений более привычно, к тому же большой опыт патчения busybox, c которого и предлагаю использовать идеи.
    С чего мне начать?
    1. Где взять последние исходники?
    2. Что надо в первую очередь сделать?
    3. Как быть с системой контроля версий?

    P.S. Рад приступить к воплощению прямо сейчас - жду ответа.
  • XVilka, последние исходники скорее всего на SVN, хотя, я думаю, их можно найти и в составе архива с исходными кодами ночной сборки системы. Точных ссылок не помню, но они есть на форуме и на wiki.
    Насколько я понимаю, в проекте никто никого не принуждает, и люди делают то, что хотят, в своё удовольствие. Любая помощь, так или иначе, полезна. С контролем версий должен помочь, по логике, 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[]) и подправить корректное завершение шелла при закрытии консоли (как сделать последнее - понятия не имею, не было времени разбираться).
    если нужно, могу отправить все свои наработки по шеллу в ЛС.
  • Да, лучше в ЛС - сегодня вечером поковыряюсь
  • Albom wrote:Но лучше развивать версию 0.4.1, так как она "заточена" под GCC.
    Мои изменения должны нормально компилироваться и под gcc, ничего непосредственно под vc я не "затачивал".
    Ушёл к умным, знающим и культурным людям.
  • в принципе да. только нужно использовать мои обёртки системных вызовов (там ассемблер с синтаксисом AT&T, а не Intel, как в 0.4.1).
  • Да, я уже переписал то что было в архиве на синтаксис интел совместимый с gcc.
    Только не нашел string.c

    И проблема при линкове такого рода:

    undefined reference to 'ecx'
    undefined reference to 'edx'
    ну и в таком духе

    Но в целом это уже мелочи - более менее разобрался в структуре, сечас пытаюсь реализовать архиватор и shasum.
    точнее заставить работать то что уже написал.

    А можно мне идеи по развитию узнать? Или какие-то куски бета-кода?
  • XVilka
    Посмотри вот эти исходники:
    download/file.php?id=1429
    Насчёт идей - читай эту ветку и ветку "что я хочу увидеть завтра..."
  • Вот добавил возможность нормальной сборки под GCC(MinGW) для последних в этой ветке сырцов,
    апплеты выделил в отдельный каталог, библиотеки stdlib, kolibri, string - тоже в отдельный каталог для простоты.
    Пофиксил некоторые баги в доступе к памяти (приведение типов), перевел ассемблер в интел-нотацию понимаемую gcc(mingw)
    компилятор msvcc тоже вроде работает.

    Пока не включил реализацию sha256sum и архиватора LZMA(XZ формат), доведу до ума, выложу. Думаю через день два, будет готово.
    В принципе криптолибу можно выделить отдельно, если надо.

    Скомпилированный бинарник тоже там.
    [Обновил скрипт сборки из под Windows]
    Attachments
    shell.tar.gz (18.32 KiB)
    Проба
    Downloaded 247 times
  • Who is online

    Users browsing this forum: No registered users and 11 guests