-- SmallExample.mesa
--Last edit: 14 July 1981 1:58 pm PDT (Tuesday)
SmallExample: MONITOR =
BEGIN
speaker: DEVICE[n:CARDINAL] = {
OUT out:Boolean
CONTROL
FOR i IN [1..n] DO out ← TRUE; out ← FALSE ENDLOOP } ;
listener: DEVICE = {
IN in: Boolean
CONTROL
DO WHEN in UP: writestring[ " up "];
WHEN in DOWN: writestring[ " down "];
ENDLOOP };
CIRCUIT {
COMPONENTS s: speaker[10], l:listener
NODES c: Boolean
CONNECTIONS s[out: c], l[in: c] }
END.
SmallExample: MONITOR =
BEGIN
speaker: PROCEDURE[n:CARDINAL, out:BoolConnector.BooleanConnector] =
{FOR i IN [1..n] DO BoolConnector.put[out , TRUE];
BoolConnector.put[out , FALSE]
ENDLOOP};
listener: PROCEDURE[in: BooleanConnector] =
{
DO BoolConnector.GetNew[in, TRUE]; writestring[ " up "];
BoolConnector.GetNew[in, FALSE]; writestring[ " down "];
ENDLOOP
};
c: BoolConnector.BooleanConnector ← BoolConnector.Create[];
s: PROCESS ← FORK speaker[10,c];
l: PROCESS ← FORK listener[c];
[] ← JOIN s;
[] ← JOIN l;
END.
<DEVICE, ParameterList,
<DEVICEBODY, CompList/1, Complist/2, Block, VarList, DataFlow, Block>>
> <PROCEDURE, ParameterList@ModifyTypes[CompList/1]@ModifyTypes[Complist/2], ... Block ...>
otherwise
> PROCEDURE [ParameterList@CompList/1@Complist/2] = Block