| 1234567891011121314151617181920212223242526272829303132333435 |
- MODULE TCoroutine;
- // PIM coroutines from SYSTEM: NEWPROCESS / TRANSFER.
- // Two coroutines ping-pong; after 5 transfers Pong hands control
- // back to the main process, which checks the counter and exits 42.
- FROM SYSTEM IMPORT ADDRESS, PROCESS, NEWPROCESS, TRANSFER, ADR;
- CONST Stack = 65536;
- VAR ping, pong, exits : PROCESS;
- VAR ws1, ws2 : ARRAY [0..65535] OF CHAR;
- VAR count : CARDINAL;
- VAR ExitCode : INTEGER;
- PROCEDURE Ping;
- BEGIN
- LOOP
- TRANSFER(ping, pong)
- END
- END Ping;
- PROCEDURE Pong;
- BEGIN
- LOOP
- INC(count);
- IF count >= 5 THEN TRANSFER(pong, exits) END;
- TRANSFER(pong, ping)
- END
- END Pong;
- BEGIN
- NEWPROCESS(Ping, ADR(ws1), Stack, ping);
- NEWPROCESS(Pong, ADR(ws2), Stack, pong);
- TRANSFER(exits, ping);
- IF count = 5 THEN ExitCode := 42 ELSE ExitCode := 1 END
- END TCoroutine.
|