Очень функциональный шелл
-
Сейчас работаю над микрореализацией curses библиотеки. Покак на си, как закончу (около месяца) - сконвертирую в ассемблер. Думаю тогда имеет смысл добавить ее в console.obj
По поводу sh - можно портировать вот это http://gitorious.com/0xdroid/system_cor ... master/ash
Создан для работы с убогой libc - bionic
Поэтому будет легче перенести на Колибри.
Создан для работы с убогой 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 = . ;
}
Компилировал с помощью MinGW-5.1.6 (gcc 3.4.5).
Под Линуксом такие же проблемы и ещё кой-чего (что именно пока сказать не могу - не было времени разбираться).
Ок. Спасибо, учел
Хотелось бы узнать общего мнения насчет консольных программ для шелла. Должны ли по вашему мнению такие программы иметь доступ к GUI-функциям ядра (например sysfn0, sysfn4, sysfn13) или нет?
ушёл...
Наверное всё-таки такие ограничения вводить не придется, т.к. это слишком усложнит реализацию и скорость выполнения таких программ Shell'ом.
ушёл...
Я думаю не стоит вводить такие ограничения, чтобы была возможность запуска граф программ без всяких дополнительных сложностей из командной строки
2 XVilka
Имеются в виду консольные программы (специально предназначенные для работы в среде шелла)
Имеются в виду консольные программы (специально предназначенные для работы в среде шелла)
ушёл...
думаю, что вводить ограничения на вызов системных функций из консольных приложений (каковых до сих пор нет) нецелесообразно, потому что:
1) программист должен понимать, что он пишет;
2) технически, если даже получится реализовать, то это будет коряво и ненадёжно.
1) программист должен понимать, что он пишет;
2) технически, если даже получится реализовать, то это будет коряво и ненадёжно.
На мой взгляд для поддержки консольных программ shell должен научиться назначать таким программам буфер для ввода данных и буфер для вывода данных.
Например:
1.) программа A передает shell'у указатели для своих буферов.
2.) программа B передает shell'у указатели для своих буферов.
3.) shell читает указатели и записывает в них адреса реальных буферов данных по своему усмотрению.
Например:
Shell записывает адрес своего собственного буффера ввода в указатель буфера вывода у ls.
Shell записывает адрес буффера ввода more в указатель буфера вывода у ls.
и т.д. Правда тут ещё надо будет отдельно реализовывать вывод информации в файл.
Указатели на буферы можно передавать либо через IPC, либо через расшаренную память.
Например:
1.) программа A передает shell'у указатели для своих буферов.
2.) программа B передает shell'у указатели для своих буферов.
3.) shell читает указатели и записывает в них адреса реальных буферов данных по своему усмотрению.
Например:
Code: Select all
shell# ls
Code: Select all
shell# ls > more
Shell записывает адрес буффера ввода more в указатель буфера вывода у ls.
и т.д. Правда тут ещё надо будет отдельно реализовывать вывод информации в файл.
Code: Select all
shell# ls > log.txt
Можно передавать название области именованной (расшаренной памяти) при запуске, например как я реализовал в OpenDialog. В области памяти будет содержаться дескриптор со всеми остальными указателями и просто данными.
Версия 0.4.3.
Смесь версий 0.4.1 и 0.4.2. Теперь в архиве все исходные файлы, необходимые для компиляции (раньше использовались объектники с моими обёртками, исходники я с шеллом не выкладывал). Прошу залить исходники на SVN.
diamond
В этой версии есть глюк с завершением работы путём закрытия окна. как его пофиксить? можешь написать, а то я не совсем понял, что ты в версии 0.4.2 сделал, чтобы шелл корректно завершался.
Смесь версий 0.4.1 и 0.4.2. Теперь в архиве все исходные файлы, необходимые для компиляции (раньше использовались объектники с моими обёртками, исходники я с шеллом не выкладывал). Прошу залить исходники на SVN.
diamond
В этой версии есть глюк с завершением работы путём закрытия окна. как его пофиксить? можешь написать, а то я не совсем понял, что ты в версии 0.4.2 сделал, чтобы шелл корректно завершался.
- Attachments
-
-
shell-0.4.3-src.zip (18.51 KiB)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) внедрить простую стековую машину для вычислений с вещественными числами.
а пока что версия 0.4.4.
1) шелл корректно завершается при закрытии окна
2) исправлено ещё 2 ошибки
3) добавлены 2 команды:
sleep - ждать. параметр - время в сотых частях секунды. только целое число.
ccpuid - вывод в консоль информации (пока скудно) о процессоре. пользы мало, но давно хотел с командой cpuid разобраться (в следующем семестре буду студентам курс читать, включил разбор команды в программу).
есть много идей. некоторые легко реализуются, некоторые сложнее. если интересно:
1) добавить переменную (одну!), в которую будет результат в текстовой форме (не то что возвращает ф-ция) записываться. с ней можно будет работать из командной строки.
2) внедрить простую стековую машину для вычислений с вещественными числами.
- Attachments
-
-
shell-0.4.4-src.zip (19.2 KiB)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