home *** CD-ROM | disk | FTP | other *** search
- (* This is the corrected version of the sample program illustrating *)
- (* TRANSFER() in the Turbo Modula-2 User's Guide (Page 455). The problem *)
- (* with the original is that coroutine workspace is not allocated due to *)
- (* use of POINTER declarations instead of "real" variables. *)
-
- MODULE TickTock;
- FROM SYSTEM IMPORT
- ADR, NEWPROCESS, TRANSFER, ADDRESS, PROCESS, WORD; (* additional ADR *)
- VAR
- tickProcess, tockProcess, main: PROCESS;
- tickWork, tockWork: ARRAY[0..99] OF WORD; (* pointers no longer used *)
-
- PROCEDURE tick;
- BEGIN
- WRITELN('tick');
- TRANSFER(tickProcess,tockProcess);
- END tick; (* original program had a small error here, also *)
-
- PROCEDURE tock;
- BEGIN
- WRITELN('tock');
- TRANSFER(tockProcess,tickProcess);
- END tock;
-
- BEGIN
- NEWPROCESS(tick,ADR(tickWork),SIZE(tickWork),tickProcess);
- NEWPROCESS(tock,ADR(tockWork),SIZE(tockWork),tockProcess);
- TRANSFER(main,tickProcess);
- END TickTock.
-