1{ Method Calls }
2
3program methcall;
4
5
6uses SysUtils;
7
8type TToggle = class
9    private
10        value : boolean;
11
12    public
13        property Bool : boolean read value write value;
14        procedure Activate;
15end;
16
17type TNthToggle = class
18    constructor Create;
19    private
20        value : boolean;
21        counter : integer;
22        cmax : integer;
23    public
24        property CountMax : integer read cmax write cmax;
25        property Bool : boolean read value write value;
26        procedure Activate;
27end;
28
29constructor TNthToggle.Create;
30begin
31    counter := 0;
32end;
33
34procedure TToggle.Activate;
35begin
36    if value = True Then
37        value := False
38    else
39        value := True;
40end;
41
42procedure TNthToggle.Activate;
43begin
44    counter := counter + 1;
45    if counter >= cmax Then begin
46        if value = True Then
47            value := False
48        Else
49            value := True;
50        counter := 0;
51    end;
52end;
53
54
55var
56    NUM, i : longint;
57    val : boolean;
58    oToggle : TToggle;
59    onToggle : TNthToggle;
60begin
61    if ParamCount = 0 then
62        NUM := 1
63    else
64        NUM := StrToInt(ParamStr(1));
65
66    if NUM < 1 then NUM := 1;
67
68    val := True;
69    oToggle := TToggle.Create;
70    oToggle.Bool := val;
71    For i := 1 to NUM do
72    begin
73        oToggle.Activate;
74        val := oToggle.Bool;
75    end;
76    If val = True Then
77        WriteLn('true')
78    else
79        WriteLn('false');
80
81    val := True;
82    onToggle := TNthToggle.Create;
83    onToggle.Bool := val;
84    onToggle.CountMax := 3;
85    For i := 1 to NUM do
86    begin
87        onToggle.Activate;
88        val := onToggle.Bool;
89    end;
90    If val = True Then
91        WriteLn('true')
92    else
93        WriteLn('false');
94end.
95