Есть у меня пара идеи касательно Shell:
1) Переписать интерпретатор в библиотеку. Это позволит использовать его в других приложениях (например в job), не создавая файла, т.е. прямо в коде.
Пример реализации обмена информации между шелом и программой:
Есть структура:
Code:
struct ShellSession
CurrentDir dd ?
InputBuffer dd ?
OutputBuffer dd ?
ends
В CurrentDir находится ссылка на строку с текущей папкой, в InputBuffer ссылка на строку с вводом, а в OutputBuffer ссылка на буфер, в которой будет результат команды.
К примеру
Code:
command1:
db "mkdir test", 0
command2:
db "echo Hello", 0
output:
rb 1024
ShellSession term
; ...
mov [term.OutputBuffer], output
mov [term.InputBuffer], command1
invoke shell.do, term
mov [term.InputBuffer], command2
invoke shell.do, term
; в output находится "Hello", 0
2) Новая команда: waitall. Она будет ждать, пока закроются все открытые приложения из текущей сессии. То есть строка "Уведомление закрыто" будет выведена только после того, как приложение закроется:
Code:
echo Открываю уведомление
notify Hello
waitall
echo Уведомление закрыто
Вот и все идеи.