aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/cobol.dg/group2/INSPECT_ISO_Example_2.cob
blob: a464101ae16d9788a6c6795eb0a5b54fcc888b62 (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
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
       *> { dg-do run }
       *> { dg-output-file "group2/INSPECT_ISO_Example_2.out" }

        Identification Division.
        Program-Id. Clouseau.
        Data Division.
        Working-Storage Section.
        01 rows   pic 99 value 2.
        01 counts pic 99 value 2.

        01 rowlim pic 99.
        01 ncount pic 99.

        01 inputs.
           05 row occurs  4 times indexed by counter.
              10 star  PIC X.
              10 input PIC X(20).
              10 count PIC 99 occurs 2 times.
              10 output PIC X(20).
        77 len PIC 9(8).
        Procedure Division.
        *> Odd-numbered rows are "read only" and contain the inputs and expected
        *> outputs.
        *> Even-numbered rows are modified by the INSPECT statements and contain
        *> the observed outputs
        Move ' BBB                 0300ZZZ' to row(1).
        Move ' ABA                 0300ZZZ' to row(3).
`
        compute rowlim = 2*rows - 1

        Display '  INPUT                C0 C1 OUTPUT'
        Display '  -------------------- -- -- ----------------'
        Perform Example-1 with test after
            varying counter from 1 by 2 until counter >= rowlim.

        Goback.

        Inspection Section.
        Example-1.
        Move row(counter) to row(counter + 1)

        perform varying ncount from 1 by 1 until ncount > counts
            Move Zero to count(counter + 1 ncount)
            end-perform

        Move function length( function trim(input(counter)) ) to len.
        MOVE INPUT(COUNTER) TO OUTPUT(COUNTER + 1)
        INSPECT INPUT(COUNTER)(1:len) TALLYING
            COUNT(counter + 1 1) FOR CHARACTERS
            COUNT(counter + 1 2) FOR ALL "A";
        INSPECT OUTPUT(COUNTER + 1)(1:len) REPLACING
            CHARACTERS BY "Z"
            ALL "A" BY "X"

        If row(counter) = row(counter + 1) then
            Move '*' to star(counter + 1)
        Else
            Move '!' to star(counter + 1).

        Display star(counter)     ' '
                input(counter)   ' ' with no advancing
        perform varying ncount from 1 by 1 until ncount > counts
            Display count(counter ncount) ' ' with no advancing
            end-perform
        display function trim(output(counter))

        Display  star(1 + counter)    ' '
                input(1 + counter)   ' ' with no advancing
        perform varying ncount from 1 by 1 until ncount > counts
            Display count(1 + counter ncount) ' ' with no advancing
            end-perform
        display function trim(output(1 + counter))
        continue.
        end program Clouseau.