%      Production system KORE/IE (version 12.48)
%
%          (C)1992 Institute for New Generation Computer Technology
%                          (Read COPYRIGHT for detailed information)
%
%      1992.7 Check and refine every programs 
%                             for IFS (ICOT Free Software) release.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%% TRACER %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% DO_RHS
do_rhs(5,Rule,Rule_Base,VL,Time_Tags,TIME_TAGS) :-
	clause(
		rhs(Rule,Rule_Base,VL,Time_Tags,TIME_TAGS),
		BODY),
	do_rhs_body(BODY),
	!.
do_rhs(_,R,RB,VL,Tts,TTS) :-
	rhs(R,RB,VL,Tts,TTS),
	!.

%%%%% do_rhs_body
do_rhs_body((H,T)) :-
	!,
	do_rhs_body(H),
	!,
	do_rhs_body(T).
do_rhs_body(make(FN,FF,L,I)) :-
	structure(F,FN,_,_,_,_),
	MAKE =.. [make,FN|L],
	!,
	do_rhs_body_element(make(FN,FF,L,I),MAKE),
	!.
do_rhs_body(modify(FN,FF,A,V,RR,I)) :-
	structure(F,FN,_,_,[_|ANL],_),
	do_rhs_body_modify(RR,ANL,DISP),
	MODIFY =.. [modify,FN|DISP],
	!,
	do_rhs_body_element(modify(FN,FF,A,V,RR,I),MODIFY),
	!.
do_rhs_body(remove(FN,FF,A,V)) :-
	structure(F,FN,_,_,_,_),
	REMOVE =.. [remove,F,V],
	!,
	do_rhs_body_element(remove(FN,FF,A,V),REMOVE),
	!.
do_rhs_body((!)) :-
	!.
do_rhs_body(H) :-
	!,
	do_rhs_body_element(H,H),
	!.

%%%%% do_rhs_body_element
do_rhs_body_element(H,D) :-
	write('CALL: '),
	write(D),
	nl,
	call(H).
do_rhs_body_element(H,D) :-
	nl,
	write(''),
	write('** ERROR: Fail: '),
	write(D),
	nl,
	write(' ... Try again, Fail, or ignore? (t/f/(CR)) '),
	get0(ANSWER),
	!,
	do_rhs_body_element_check(ANSWER,H,D),
	!.

%%%%% do_rhs_body_element_check
do_rhs_body_element_check(102,_,D) :-
	get0(_),
	write('FAIL: '),
	write(D),
	nl,
	!,fail.
do_rhs_body_element_check(116,H,D) :-
	get0(_),
	write('Retry : '),
	!,
	do_rhs_body_element(H,D),
	!.
do_rhs_body_element_check(10,_,_) :-
	!.
do_rhs_body_element_check(_,H,D) :-
	get0(_),
	write('?? '),
	get0(A),
	!,
	do_rhs_body_element_check(A,H,D).

%%%%% do_rhs_body_modify
do_rhs_body_modify(['$$nil'|T],[_|R],DISP) :-
	!,
	do_rhs_body_modify(T,R,DISP).
do_rhs_body_modify([H|T],[A|R],[A = H|DISP]) :-
	!,
	do_rhs_body_modify(T,R,DISP).
do_rhs_body_modify([],_,[]) :-
	!.
