53 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Modula-2
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Modula-2
		
	
	
	
	
	
DEFINITION MODULE CSP;
 | 
						|
(*
 | 
						|
  Module:	Communicating Sequential Processes
 | 
						|
  From:		"A Modula-2 Implementation of CSP",
 | 
						|
		M. Collado, R. Morales, J.J. Moreno,
 | 
						|
		SIGPlan Notices, Volume 22, Number 6, June 1987.
 | 
						|
  Version:	$Header$
 | 
						|
 | 
						|
   See this article for an explanation of the use of this module.
 | 
						|
*)
 | 
						|
 | 
						|
  FROM SYSTEM IMPORT BYTE;
 | 
						|
 | 
						|
  TYPE Channel;
 | 
						|
 | 
						|
  PROCEDURE COBEGIN;
 | 
						|
  (* Beginning of a COBEGIN .. COEND structure *)
 | 
						|
 | 
						|
  PROCEDURE COEND;
 | 
						|
  (* End of a COBEGIN .. COEND structure *)
 | 
						|
 | 
						|
  PROCEDURE StartProcess(P: PROC);
 | 
						|
  (* Start an anonimous process that executes the procedure P *)
 | 
						|
 | 
						|
  PROCEDURE StopProcess;
 | 
						|
  (* Terminate a Process (itself) *)
 | 
						|
 | 
						|
  PROCEDURE InitChannel(VAR ch: Channel);
 | 
						|
  (* Initialize the channel ch *)
 | 
						|
 | 
						|
  PROCEDURE GetChannel(ch: Channel);
 | 
						|
  (* Assign the channel ch to the process that gets it *)
 | 
						|
 | 
						|
  PROCEDURE Send(data: ARRAY OF BYTE; VAR ch: Channel);
 | 
						|
  (* Send a message with the data to the cvhannel ch *)
 | 
						|
 | 
						|
  PROCEDURE Receive(VAR ch: Channel; VAR dest: ARRAY OF BYTE);
 | 
						|
  (* Receive a message from the channel ch into the dest variable *)
 | 
						|
 | 
						|
  PROCEDURE SELECT(n: CARDINAL);
 | 
						|
  (* Beginning of a SELECT structure with n guards *)
 | 
						|
 | 
						|
  PROCEDURE NEXTGUARD(): CARDINAL;
 | 
						|
  (* Returns an index to the next guard to be evaluated in a SELECT *)
 | 
						|
 | 
						|
  PROCEDURE GUARD(cond: BOOLEAN; ch: Channel;
 | 
						|
		  VAR dest: ARRAY OF BYTE): BOOLEAN;
 | 
						|
  (* Evaluates a guard, including reception management *)
 | 
						|
 | 
						|
  PROCEDURE ENDSELECT(): BOOLEAN;
 | 
						|
  (* End of a SELECT structure *)
 | 
						|
 | 
						|
END CSP.
 |