aboutsummaryrefslogtreecommitdiff
path: root/tests/ii/calls/program.cps
blob: 9a79ad696508e13c762c20d24112afb18363d5f4 (plain)
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

TYPE Pair
    DECLARE X : INTEGER
    DECLARE Y : INTEGER
ENDTYPE
TYPE PairPtr = ^Pair
PROCEDURE IgnoreCopy(P : Pair)
    P.X <- 999
ENDPROCEDURE
PROCEDURE Shift(BYREF X : INTEGER, Y : INTEGER)
    X <- X + 1
    Y <- Y - 1
ENDPROCEDURE
FUNCTION Triangle(N : INTEGER) RETURNS INTEGER
    IF N = 0 THEN
        RETURN 0
    ENDIF
    RETURN N + Triangle(N - 1)
ENDFUNCTION
DECLARE Count : INTEGER
DECLARE Index : INTEGER
DECLARE N : INTEGER
DECLARE Value : Pair
DECLARE Saved : Pair
DECLARE P : PairPtr
INPUT Count
FOR Index <- 1 TO Count
    INPUT N
    DECLARE X : INTEGER
    DECLARE Y : INTEGER
    INPUT X
    INPUT Y
    Value.X <- X
    Value.Y <- Y
    Saved <- Value
    CALL IgnoreCopy(Value)
    P <- ^Value
    P^.X <- P^.X + P^.Y
    CALL Shift(X, Y)
    OUTPUT Value.X, ":", Saved.X, ":", X, ":", Y, ":", Triangle(N)
NEXT Index