1987-07-09 15:15:22 +00:00
|
|
|
DEFINITION MODULE CSP;
|
1988-02-19 15:54:01 +00:00
|
|
|
(*
|
|
|
|
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$
|
1987-07-09 15:15:22 +00:00
|
|
|
|
|
|
|
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.
|