このディレクトリの索引
#  
#  シェル経由の他言語インターフェイス shs/3 です。
#  

shs(Command,_コマンドへの入力ならび,_コマンドからの出力ならび) :-
        popen(Command,Outstream,Instream),
        コマンドへの入力(Outstream,_コマンドへの入力ならび),
        close(Outstream),
        コマンドからの出力の収集(Instream,_コマンドからの出力ならび),
        close(Instream).

popen(Command,Outstream,Instream) :-
        open(pipe(Command),write,Outstream),
        open(pipe(Outstream),read,Instream).

コマンドへの入力(Outstream,_コマンドへの入力ならび) :-
        tell(Outstream),
        forall(member(_入力行,_コマンドへの入力ならび),writef('%t\n',[_入力行])),
        told.

コマンドからの出力の収集(Instream,[]) :-
        at_end_of_stream(Instream),!.
コマンドからの出力の収集(Instream,[_行|R]) :-
        get_line(Instream,_行),
        コマンドからの出力の収集(Instream,R).

get_line(Stream,X) :-
        get_char(Stream,C),
        get_line_1(Stream,C,Chars),
        atom_chars(X,Chars).

get_line_1(Stream,C,[C]) :-
        at_end_of_stream(Stream),!.
get_line_1(Stream,'\n',[]) :- !.
get_line_1(Stream,C,[C|R]) :-
        get_char(Stream,C2),
        get_line_1(Stream,C2,R).