Очень функциональный шелл
-
New SVN revision #2323 by Albom in /programs/system/shell: Shell: cd command fixed
Сделал поддержку консольных приложений через именованную область. Т.е. это обычное приложение для КОС, которое может быть написано на любом языке программирования.
Сейчас отлаживаю работу связи "приложение-шелл", потом допишу пример и напишу доки.
Пока что будут доступны функции putc, puts, getc, gets, exit. Если нужны ещё какие-нибудь функции или есть идеи, пишите.
Сейчас отлаживаю работу связи "приложение-шелл", потом допишу пример и напишу доки.
Пока что будут доступны функции putc, puts, getc, gets, exit. Если нужны ещё какие-нибудь функции или есть идеи, пишите.
Ну, вот, собственно, и к pipes приближаемся.
Думаю, можно будет определять, запущен тот же Lua из shelll, или нет, и в зависимости от этого передавать данные через именованную память или же создавать свое окно console.
Думаю, можно будет определять, запущен тот же Lua из shelll, или нет, и в зависимости от этого передавать данные через именованную память или же создавать свое окно console.
Shell 0.5 // 23.03.2012 // Albom
=======================================
* Добавлена поддержка консольных приложений, которые общаются с шеллом через именованную область
Консольное приложение может быть написано на любом языке программирования - это обыкновенная программа для КолибриОС.
1) Консольное приложение после своего запуска В ПЕРВУЮ ОЧЕРЕДЬ должно создать именованную область с именем pid-SHELL, где pid - идентификатор процесса с заглавными нулями,
например: 42 -> 0042 (т.е. сейчас ограничение до 9999).
+ нужно сделать, чтобы программа корректно завершалась, если запущена не из шелла (СЕЙЧАС НЕ РЕАЛИЗОВАНО!!!)
2) Первый байт области - команда (т.е. максимум 255 команд), далее - данные (могут отсутствовать).
Список команд для версии 0.5:
SC_OK 0 ничего не делать
SC_EXIT 1 выход
SC_PUTC 2 вывести на экран символ
SC_PUTS 3 вывести на экран строку
SC_GETC 4 считать с клавиатуры символ
SC_GETS 5 считать с клавиатуры строку
SC_CLS 6 очистить экран
3) Программа должна САМА заботиться о рациональном использовании процессорного времени.
4) Программа должна САМА заботиться о закрытии именованной области.
=======================================
* Добавлена поддержка консольных приложений, которые общаются с шеллом через именованную область
Консольное приложение может быть написано на любом языке программирования - это обыкновенная программа для КолибриОС.
1) Консольное приложение после своего запуска В ПЕРВУЮ ОЧЕРЕДЬ должно создать именованную область с именем pid-SHELL, где pid - идентификатор процесса с заглавными нулями,
например: 42 -> 0042 (т.е. сейчас ограничение до 9999).
+ нужно сделать, чтобы программа корректно завершалась, если запущена не из шелла (СЕЙЧАС НЕ РЕАЛИЗОВАНО!!!)
2) Первый байт области - команда (т.е. максимум 255 команд), далее - данные (могут отсутствовать).
Список команд для версии 0.5:
SC_OK 0 ничего не делать
SC_EXIT 1 выход
SC_PUTC 2 вывести на экран символ
SC_PUTS 3 вывести на экран строку
SC_GETC 4 считать с клавиатуры символ
SC_GETS 5 считать с клавиатуры строку
SC_CLS 6 очистить экран
3) Программа должна САМА заботиться о рациональном использовании процессорного времени.
4) Программа должна САМА заботиться о закрытии именованной области.
А может надежней написать процедуру в proc_lib, для работы с именованной памятью? Как я это сделал для OpenDialog.
Написать вполне реально. Возможно, так и сделаю в ближайшее время.
Кстати, ничего, что количество функций в proc_lib существенно увеличится? Вообще, не хочу раздувать API шелла, для этого и выбрал размер команды 1 байт, но функций 20-30, думаю, со временем будет реализовано.
Кстати, ничего, что количество функций в proc_lib существенно увеличится? Вообще, не хочу раздувать API шелла, для этого и выбрал размер команды 1 байт, но функций 20-30, думаю, со временем будет реализовано.
Там функций в либе - кот наплакал, вот открой box_lib - вот это уже не мало, но не настолько и много.
Единственное ограничение - библиотека асмовская, так что и другие функции придется исключительно на ассемблере делать.
Единственное ограничение - библиотека асмовская, так что и другие функции придется исключительно на ассемблере делать.
Albom пожалуйста, пока не поздно, смени десятичные цифры на шеснадцатеричные.
Аргументация очевидная, надеюсь.
Аргументация очевидная, надеюсь.
Nable
Не очевидная. Какая разница - 6 или - 0x06? Тем более, что всё равно будут использоваться имена констант.
Кстати, номера системных функций тоже десятичные.
+ Начал переписывать консольную программу на ассемблер. Это первый шаг к добавлению функций в proc_lib.
+ Придумал, как сделать проверку на то, запущена программа из шелла или нет.
Не очевидная. Какая разница - 6 или - 0x06? Тем более, что всё равно будут использоваться имена констант.
Кстати, номера системных функций тоже десятичные.
+ Начал переписывать консольную программу на ассемблер. Это первый шаг к добавлению функций в proc_lib.
+ Придумал, как сделать проверку на то, запущена программа из шелла или нет.
Скорее всего Nable подумал, что данные передаются в текстовом виде.
> Консольное приложение после своего запуска В ПЕРВУЮ ОЧЕРЕДЬ должно создать именованную область с именем pid-SHELL, где pid - идентификатор процесса с заглавными нулями,
> С именем,
> с заглавными нулями
т.е. текстом там будет написано. Что именно я не так подумал?
> С именем,
> с заглавными нулями
т.е. текстом там будет написано. Что именно я не так подумал?
Все ты правильно подумал, но не учел что скилл телепатии слабо прокачан у остальных и требуется более подробное разжевывание твоего замечания - к чему именно оно относилось.
Думал что в console.obj не обрабатываются escape-последовательности, в частности установка цветов, однако был неправ - все там присутствует. Однако команда echo -e "\e[0;31;40mTest" или echo "^[[0;31;40mTest" не выводит слово Test красным цветом
Причем во втором случае используются нажатие клафиш <Ctrl-V><Esc> или <Ctrl-[>
Судя по коду console.obj - он считает Escape последовательностями все, что начинается с символа 27, он же 0x1B (и имеет правильный формат, есстественно)
Причем во втором случае используются нажатие клафиш <Ctrl-V><Esc> или <Ctrl-[>
Судя по коду console.obj - он считает Escape последовательностями все, что начинается с символа 27, он же 0x1B (и имеет правильный формат, есстественно)
Esc-последовательности выводятся. Просто фильтруется их ввод с клавиатуры. Если запускать скрипты - всё ОК.
- Attachments
-
-
.shell.zip (171 Bytes)Downloaded 219 times
-
esc.png (3.62 KiB)Viewed 4924 times
-
Возможно ли вывести такое? http://www.frexx.de/xterm-256-notes/dat ... table16.sh
Или хотя бы его аналог на SHS
Или хотя бы его аналог на SHS
Who is online
Users browsing this forum: No registered users and 3 guests