標準出力
src/servers/process/main.cppで定義されている
int ExecuteProcessに引数dword stdout_idを追加した。
プロセス生成関数を呼ぶもの(SHELLなど)が生成されるプロセスの標準出力先を指定するというモデル。
つまり
- CUIシェルが普通に起動したプロセスの標準出力先はCUIシェル
- GUIシェルが普通に起動したプロセスの標準出力先はGUIシェル
- CUI/GUIシェル上で HOGE > HOGE.LOGとされたら出力先はHOGE.LOGというファイル
となるようにしたい。
int ExecuteProcessを呼ぶものはこれから生成しようとしているプロセスの標準出力先を知っていて当然ということでこのような形にしている。
なお親という概念はとりあえず考えないものとする。
いろいろ実装していくうちにちょっと迷う部分ができてきた。
Tino GUIのGUIシェルの実態は、Shellサーバーなのである。
どういうことかというと、GUIシェル本体はほとんど表示のみを行い、キー入力・プロセス生成処理などはShellサーバーが
裏で行っているのである。
この作りはよく考えられていると思う。Shellとしての仕事のほとんどをサーバーに任せるのは正解だと思う。
迷う部分というのは、ShellサーバーがExecuteProcessするときにShellサーバー自身は自分がGUI/CUIシェルとして
動いているのか知らないそうな事である。(全ソースを呼んだわけではないので自信がないが)
Shellサーバーは文字の出力先は気にせずprintf を行うだけで、それがProcessサーバのgrabsで振り分けられているようだ。
現在標準出力先をGRABしているのがアクティブなシェルということになりそう。
なので自分がやりたいモデルとTino GUIとの親和性を考えると、int ExecuteProcessの引数stdout_idはShellから渡すものだが
現時点ではGUIシェルのつくりを考慮して、渡されたものをsrc/servers/process/main.cppでstdout_id = grabs[grabs.size() - 1]として上書きした方がよさそうだ。
ただこんなことをやると後から見返したときに分からなくなるのでとりあえずここは何もせず放っておこうかとも思ったりする。
さてどうしよう・・・。