(*
* Producer/Consumer Test Module
*
* This module tests the WAIT and SEND functions
* found in the Processes module and is adapted
* from code found on page 346 of Advanced Modula-2
* by Herber Schildt available from McGraw-Hill.
*
* Corrected version - David Granz, 14-Mar-87
*
*)
MODULE ProCon;
FROM Terminal IMPORT WriteLn,WriteString;
FROM SYSTEM IMPORT WORD,PROCESS,ADR,NEWPROCESS,TRANSFER;
FROM Processes IMPORT WAIT,SEND,StartProcess,Init,SIGNAL;
CONST
EOL = 36C;
EOT = 32C;
VAR
buf: ARRAY[0..100] OF CHAR;
S: SIGNAL;
PROCEDURE Consumer;
BEGIN
LOOP
WriteString("waiting");
WriteLn;
WAIT(S);
WriteString("consumed:");
WriteString(buf);
WriteLn;
END;
END Consumer;
PROCEDURE Producer;
VAR
count: CARDINAL;
ch: CHAR;
BEGIN
count := 0;
LOOP
READ(ch); (* Clear character buffer *)
IF (ch <> EOL) AND (count < 99) THEN
buf[count] := ch;
INC(count);
ELSE
buf[count] := CHR(0); (* Null terminator *)
SEND(S);
count := 0;
END;
END;
END Producer;
BEGIN
Init(S);
StartProcess(Consumer,1000);
Producer;
END ProCon.
S ............ 1-364-2474 ... 2400 N81N Procomm BBS ........