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:	$Id$
 | |
| 
 | |
|    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.
 |