view Examples/etc/send @ 0:cfb7c6b24319

Initial revision
author kono
date Thu, 30 Aug 2007 14:57:44 +0900
parents
children
line wrap: on
line source

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                %
% example of handshake                           %
%                                                %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% try  tokio hand. I don't know how to stop it

$define (loop(X) :- H) $clause (H :- X && H).

hand :-	Hear=0,Call=0,
	send(Call,Hear,Data),		% all always
	receive(Call,Hear,Data),
	#(write((Call,Hear,Data))).

% sender and receiver

send(Call,Hear,Data) :- 
	#send_sync(Call,Hear),send_data(Call,Hear,Data,0).

    send_sync(Call,Hear) :- Hear=0, Call=0, @Call = 1.
    send_sync(Call,Hear) :- Hear=0, Call=1.
    send_sync(Call,Hear) :- Hear=1, Call=1, @Call = 0.
    send_sync(Call,Hear) :- Hear=1, Call=0.

    send_data(Call,Hear,Data,I) :-
	halt(Call=1)
	&	#(Data=I), halt(Call=0)
	&	J <-- I+1, @send_data(Call,Hear,Data, J).

receive(Call,Hear,Data) :-
	#receive_sync(Call,Hear),receive_data(Call,Hear,Data).

    receive_sync(Call,Hear) :- Call=1, Hear=0, @Hear = 1.
    receive_sync(Call,Hear) :- Call=1, Hear=1.
    receive_sync(Call,Hear) :- Call=0, Hear=1, @Hear = 0.
    receive_sync(Call,Hear) :- Call=0, Hear=0.

    receive_data(Call,Hear,Data) :-
	halt(Hear=1)
	&	write(accept(Data)),halt(Hear=0)
	&	@receive_data(Call,Hear,Data).

% end of examples