home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / modula2 / tutorial / programs / corout2.mod < prev    next >
Text File  |  1993-03-14  |  1KB  |  52 lines

  1.                                         (* Chapter 15 - Program 2 *)
  2. MODULE Corout2;
  3.  
  4. FROM InOut IMPORT WriteCard, WriteString, WriteLn;
  5.  
  6. FROM SYSTEM IMPORT WORD, PROCESS, ADR, SIZE,
  7.                    NEWPROCESS, TRANSFER;
  8.  
  9. VAR  main, Process1, Process2 : PROCESS;
  10.      WorkSpace1, WorkSpace2   : ARRAY[1..300] OF WORD;
  11.      Index : CARDINAL;
  12.  
  13. PROCEDURE WriteStuff;
  14. BEGIN
  15.    WriteString('This is loop');
  16.    WriteCard(Index,2);
  17. END WriteStuff;
  18.  
  19. PROCEDURE MainProcess;
  20. BEGIN
  21.    FOR Index := 1 TO 5 DO
  22.       WriteStuff;
  23.       IF Index > 2 THEN
  24.          TRANSFER(Process1,Process2);
  25.          WriteString(' and back to main loop');
  26.       END;
  27.       WriteLn;
  28.    END;
  29.    WriteString('End of the MainProcess loop');
  30.    WriteLn;
  31.    TRANSFER(Process1,main);
  32. END MainProcess;
  33.  
  34. PROCEDURE SubProcess;
  35. BEGIN
  36.    LOOP
  37.       WriteString(' in SubProcess');
  38.       TRANSFER(Process2,Process1);
  39.       WriteString(' back');
  40.    END;
  41. END SubProcess;
  42.  
  43. BEGIN   (* Main Module Body *)
  44.    NEWPROCESS(MainProcess,ADR(WorkSpace1),SIZE(WorkSpace1),
  45.               Process1);
  46.    NEWPROCESS(SubProcess,ADR(WorkSpace2),SIZE(WorkSpace2),
  47.               Process2);
  48.    TRANSFER(main,Process1);
  49.    WriteString('End of the program');
  50.    WriteLn;
  51. END Corout2.
  52.