view Examples/etc/send @ 4:f864bb4ba9a4 default tip

update tags
author convert-repo
date Fri, 07 Nov 2008 20:36:52 +0000
parents cfb7c6b24319
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