| ||||||||||
| MINERVA superseeded IF/Prolog.
Please see
http://www.ifcomputer.co.jp/MINERVA
for details.
We discontinued to sell IF/Prolog Dec 31. 2003. For current customers, we continue to provide professional support for IF/Prolog until Dec 31, 2008. xtAddInput(+InputName, +FileDescriptor, +InputCondition, +InputPredicate, +ClientData) xtRemoveInput(InputName) intrinsicsのXtAdd/RemoveInput()と同様の働きをします。 xtAddInput/5は、InputConditionによって指定されたイベントがFileDescriptor上に生じた時に呼び出されるべきInputPredicate/2を登録します。 FileDescriptorは、stdin, stdout, stderrの他、任意のストリームを指定することができます。 InputConditionは、xtInputReadMAsk, xtInputWriteMask, xtInputExceptMaskのうちのいずれかでなければなりません。 InputPredicateは、2つの引数をもつ述語でなければなりません。これは以下のように、適切なイベントがディスパッチされた時に呼び出されます。 InputPredicate(InputName, ClientData) xtInputReadMaskに設定した条件で入力イベントがコ−ルバック述語を呼び出した時には、コ−ルバック述語はそのイベントの原因を取り除くために、必ずファイル記述子から読み込まなければなりません。そうしなければ、無限ル−プをひきおこします。get/1を使用した場合には、別の問題が生じます。オペレ−ティングシステムによるバッファリングのために、ファイル記述子からの入力を読み込んでも、アプリケ−ションがその行の残りを読み込むために必要なコ−ルバックの呼び出しがなされなくなってしまいます。これを避けるために、get_until/3を使って1行ずつ読み込むようにしなければなりません。 InputPredicateは失敗してはならず、失敗した場合には例外"input_predicate_failed"が起こります。 [user]. | write_input(InputName, ClientData) :- write('input callback '), write(InputName), write(' with client_data '), write(ClientData), write(' reads '), get_until(10, Last, Line), write(Line), nl, (( Line = last, write(removed), nl, xtRemoveInput(InputName), !) ; true). |EOF yes ?- xtAddInput(input1, stdin, xtInputReadMask, write_input, xxx ). yes ?- xtMainloop. test1 input callback input1 with client_data xxx reads test1 test2 input callback input1 with client_data xxx reads test2 last input callback input1 with client_data xxx reads last removed
yes ?- _ <xtAddInput/5> atom_expected InputCondition、FileDescriptorがアトムでない input_name_already_used InputNameで指定した入力がすでに存在している illegal_input_predicate InputPredicate/2が存在していない <xtRemoveInput/1> illegal_input この名前の入力は登録されていない | ||||||||||
|
| Back> |
|