home *** CD-ROM | disk | FTP | other *** search
- (*
- * 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