File: transfer.mi

package info (click to toggle)
mocka 9905-2
  • links: PTS
  • area: non-free
  • in suites: potato, sarge, woody
  • size: 5,436 kB
  • ctags: 160
  • sloc: asm: 23,203; makefile: 124; sh: 102; ansic: 23
file content (97 lines) | stat: -rw-r--r-- 2,423 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
MODULE transfer;
  FROM SYSTEM IMPORT WORD, ADR, ADDRESS, TRANSFER, NEWPROCESS;
  FROM InOut IMPORT WriteString, WriteLn, WriteInt;
VAR main, co1, co2 : ADDRESS;
    Workspace1 : ARRAY [0..1023] OF WORD;
    Workspace2 : ARRAY [0..1023] OF WORD;

VAR i : INTEGER;
%( vax
% Stack_Test   (*special compiler option, needed for coroutines.  *)
%)
PROCEDURE P;
BEGIN
 WriteString ("----------"); WriteInt (i,1); WriteLn; INC (i);
 TRANSFER (co1, co2);

 WriteString ("----------"); WriteInt (i,1); WriteLn; INC (i);
 TRANSFER (co1, co2);

 WriteString ("----------"); WriteInt (i,1); WriteLn; INC (i);
 TRANSFER (co1, co2);
END P;

PROCEDURE Q;
BEGIN
 WriteString ("--------------------"); WriteInt (i,1);     WriteLn; INC(i);
 TRANSFER (co2, main);
 
 WriteString ("--------------------"); WriteInt (i,1);     WriteLn; INC(i);
 TRANSFER (co2, main);

 WriteString ("--------------------"); WriteInt (i,1);     WriteLn; INC(i);
 TRANSFER (co2, main);
END Q;

PROCEDURE R;
BEGIN
 WriteString ("----------"); WriteInt (i,1); WriteLn; INC (i);
 TRANSFER (co1, main);
 
 WriteString ("----------"); WriteInt (i,1); WriteLn; INC (i);
 TRANSFER (co1, main);

 WriteString ("----------"); WriteInt (i,1); WriteLn; INC (i);
 WriteString ("----------");
 WriteString ("This is the correct termination point of the program");
 WriteLn;
 (* Because there is no TRANSFER back to main *)
END R;

BEGIN

 WriteLn; WriteString ("transfer ");
 WriteLn; WriteString ("Testing TRANSFER / NEWPROCESS");
 WriteLn; WriteString ("part 1");

 NEWPROCESS (P, ADR (Workspace1), SIZE (Workspace1), co1);
 NEWPROCESS (Q, ADR (Workspace2), SIZE (Workspace2), co2);
 WriteLn;

 WriteString ("control flow in coroutine "); WriteLn;
 WriteString ("main      P         Q"); WriteLn;
 i := 1;

 WriteInt (i, 1); WriteLn; INC (i);
 TRANSFER (main, co1);

 WriteInt (i, 1); WriteLn; INC (i);
 TRANSFER (main, co1);

 WriteInt (i, 1); WriteLn; INC (i);
 TRANSFER (main, co1);

 WriteInt (i, 1); WriteLn; INC (i);

 WriteLn;
 WriteLn; WriteString ("part 2"); WriteLn;

 NEWPROCESS (R, ADR (Workspace1), SIZE (Workspace1), co1);
 WriteLn;
 WriteString ("main      R"); WriteLn;
 i := 1;

 WriteInt (i, 1); WriteLn; INC (i);
 TRANSFER (main, co1);
 
 WriteInt (i, 1); WriteLn; INC (i);
 TRANSFER (main, co1);
 
 WriteInt (i, 1); WriteLn; INC (i);
 TRANSFER (main, co1);
 
 WriteString ("ERROR:  This is NOT the correct termination point");
 WriteLn;
 
END transfer.