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

...
  • По поводу sh - можно портировать вот это http://gitorious.com/0xdroid/system_cor ... master/ash
    Создан для работы с убогой libc - bionic
    Поэтому будет легче перенести на Колибри.
  • XVilka wrote:Вот добавил возможность нормальной сборки под GCC(MinGW)
    Компилируется, но не так, как надо. Даже
    Скомпилированный бинарник
    не запускается (в принципе понятно почему).
    1) в compile.bat после set XCFLAGS= нужно убрать кавычки
    2) i586-mingw32msvc-gcc лучше заменить на просто gcc. Это же касается ld и objcopy.
    3) так как start.asm был изменён (добавлена секция ".aheader"), но необходимо изменить и kolibri.ld (так, чтобы заголовок был в начале файла). Типа такого:

    Code: Select all

    /*OUTPUT_FORMAT("binary")*/
    ENTRY(Start)
    SECTIONS
    {
      .text 0x000000:
       {
       *(.aheader)
       *(.text)
       }
      
      .data : {
        *(.data)
        hEnd = . ;
       }
       
      .bss :
       {
        *(.bss)
       }
       Memory = . ;
    }
    
    Но всё равно в KlbrInWin пока не запускается (ошибка "Not enough memory").
    Компилировал с помощью MinGW-5.1.6 (gcc 3.4.5).
    Под Линуксом такие же проблемы и ещё кой-чего (что именно пока сказать не могу - не было времени разбираться).
  • Ок. Спасибо, учел :)
  • Хотелось бы узнать общего мнения насчет консольных программ для шелла. Должны ли по вашему мнению такие программы иметь доступ к GUI-функциям ядра (например sysfn0, sysfn4, sysfn13) или нет?
    ушёл...
  • Наверное всё-таки такие ограничения вводить не придется, т.к. это слишком усложнит реализацию и скорость выполнения таких программ Shell'ом.
    ушёл...
  • Я думаю не стоит вводить такие ограничения, чтобы была возможность запуска граф программ без всяких дополнительных сложностей из командной строки
  • 2 XVilka
    Имеются в виду консольные программы (специально предназначенные для работы в среде шелла)
    ушёл...
  • думаю, что вводить ограничения на вызов системных функций из консольных приложений (каковых до сих пор нет) нецелесообразно, потому что:
    1) программист должен понимать, что он пишет;
    2) технически, если даже получится реализовать, то это будет коряво и ненадёжно.
  • На мой взгляд для поддержки консольных программ shell должен научиться назначать таким программам буфер для ввода данных и буфер для вывода данных.
    Например:
    1.) программа A передает shell'у указатели для своих буферов.
    2.) программа B передает shell'у указатели для своих буферов.
    3.) shell читает указатели и записывает в них адреса реальных буферов данных по своему усмотрению.
    Например:

    Code: Select all

      shell# ls 
    Shell записывает адрес своего собственного буффера ввода в указатель буфера вывода у ls.

    Code: Select all

      shell# ls > more

    Shell записывает адрес буффера ввода more в указатель буфера вывода у ls.

    и т.д. Правда тут ещё надо будет отдельно реализовывать вывод информации в файл.

    Code: Select all

     shell# ls > log.txt
    Указатели на буферы можно передавать либо через IPC, либо через расшаренную память.
  • Можно передавать название области именованной (расшаренной памяти) при запуске, например как я реализовал в OpenDialog. В области памяти будет содержаться дескриптор со всеми остальными указателями и просто данными.
  • Версия 0.4.3.

    Смесь версий 0.4.1 и 0.4.2. Теперь в архиве все исходные файлы, необходимые для компиляции (раньше использовались объектники с моими обёртками, исходники я с шеллом не выкладывал). Прошу залить исходники на SVN.

    diamond
    В этой версии есть глюк с завершением работы путём закрытия окна. как его пофиксить? можешь написать, а то я не совсем понял, что ты в версии 0.4.2 сделал, чтобы шелл корректно завершался.
    Attachments
    Downloaded 241 times
    shell-0.4.3.zip (5.36 KiB)
    Downloaded 251 times
  • А можно потом в архив к исходникам еще и makefile включать? Оно мне конечно не трудно его написать на основе батнега...
  • к следующей версии постараюсь мейкфайл сделать.

    а пока что версия 0.4.4.

    1) шелл корректно завершается при закрытии окна
    2) исправлено ещё 2 ошибки
    3) добавлены 2 команды:
    sleep - ждать. параметр - время в сотых частях секунды. только целое число.
    ccpuid - вывод в консоль информации (пока скудно) о процессоре. пользы мало, но давно хотел с командой cpuid разобраться (в следующем семестре буду студентам курс читать, включил разбор команды в программу).

    есть много идей. некоторые легко реализуются, некоторые сложнее. если интересно:
    1) добавить переменную (одну!), в которую будет результат в текстовой форме (не то что возвращает ф-ция) записываться. с ней можно будет работать из командной строки.
    2) внедрить простую стековую машину для вычислений с вещественными числами.
    Attachments
    Downloaded 253 times
    shell-0.4.4.zip (4.72 KiB)
    Downloaded 256 times
  • Теперь последняя версия, включая бинарник, лежит на SVN-сервере (ревизия 1647).
    ушёл...
  • Who is online

    Users browsing this forum: No registered users and 5 guests