3 (* From: MODULA-2, An Introduction, by Daniel Thalmann, Springer-Verlag,
8 FROM InOut IMPORT ReadString, WriteString, WriteLn;
9 FROM Processes IMPORT SIGNAL, StartProcess, SEND, WAIT, Awaited, Init;
13 IMPORT SIGNAL, SEND, WAIT, Awaited, Init;
15 EXPORT Deposit, Remove;
19 VAR n, in, out: CARDINAL;
20 NonFull, NonEmpty: SIGNAL;
21 Buffer: ARRAY [0..N-1] OF INTEGER;
23 PROCEDURE Deposit(integer: INTEGER);
25 IF n=N THEN WAIT(NonFull) END;
27 Buffer[in] := integer;
29 IF Awaited(NonEmpty) THEN SEND(NonEmpty) END;
32 PROCEDURE Remove(VAR integer: INTEGER);
34 IF n=0 THEN WAIT(NonEmpty) END;
36 integer := Buffer[out];
38 IF Awaited(NonFull) THEN SEND(NonFull) END;
52 TYPE StringType = ARRAY[0..Max-1] OF CHAR;
54 VAR EndOfTransfer: SIGNAL;
60 WriteString("Enter a string: ");
65 Deposit(ORD(String[i]));
66 UNTIL String[i] = eos;
71 VAR i, OrdOfChar: INTEGER;
78 String[i] := CHR(CARDINAL(OrdOfChar));
79 UNTIL String[i] = eos;
81 WriteString("After transfer: ");
88 StartProcess(Store, 2000);
89 StartProcess(Fetch, 2000);