-
Notifications
You must be signed in to change notification settings - Fork 0
/
04-prettymatrix.cob
75 lines (68 loc) · 2.68 KB
/
04-prettymatrix.cob
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
IDENTIFICATION DIVISION.
PROGRAM-ID. Pretty_Matrix.
****************************
DATA DIVISION.
LOCAL-STORAGE SECTION.
01 left-offset PIC 99 USAGE BINARY VALUE 5.
01 top-offset PIC 99 USAGE BINARY VALUE 5.
01 i PIC 999 USAGE BINARY VALUE 1.
01 j PIC 999 USAGE BINARY VALUE 1.
01 display-entry PIC -ZZZ9.99.
01 dummy PIC X.
LINKAGE SECTION.
COPY "matrix.cpy".
****************************
PROCEDURE DIVISION USING n-rows, n-cols, matrix.
* Check if it makes sense to print on terminal
IF n-cols > 20 OR n-rows > 20 THEN
DISPLAY "[-] Matrix dimensions too large to print."
EXIT PROGRAM
END-IF.
* Print row 0
DISPLAY "+---"
AT LINE top-offset
AT COLUMN left-offset.
DISPLAY "---+"
AT LINE top-offset
AT COLUMN left-offset - 1 + 8*n-cols.
* Print matrix, row by row
PERFORM TEST AFTER VARYING i FROM 1 BY 1 UNTIL i = n-rows
DISPLAY "|"
AT LINE 2*i - 1 + top-offset
AT COLUMN left-offset
DISPLAY "|"
AT LINE 2*i + top-offset
AT COLUMN left-offset
* Print matrix row i, column by column
PERFORM TEST AFTER VARYING j FROM 1 BY 1 UNTIL j = n-cols
MOVE matrix-entry(i,j) TO display-entry
DISPLAY display-entry
AT LINE 2*i + top-offset
AT COLUMN left-offset + 1 + 8*(j - 1)
WITH SIZE 8
END-PERFORM
DISPLAY "|"
AT LINE 2*i - 1 + top-offset
AT COLUMN left-offset + 2 + 8*n-cols
DISPLAY "|"
AT LINE 2*i + top-offset
AT COLUMN left-offset + 2 + 8*n-cols
END-PERFORM.
* Print two final rows
DISPLAY "|"
AT LINE 2*n-rows + top-offset + 1
AT COLUMN left-offset.
DISPLAY "|"
AT LINE 2*n-rows + top-offset + 1
AT COLUMN left-offset + 2 + 8*n-cols.
DISPLAY "+---"
AT LINE 2*n-rows + top-offset + 2
AT COLUMN left-offset.
DISPLAY "---+"
AT LINE 2*n-rows + top-offset + 2
AT COLUMN left-offset - 1 + 8*n-cols.
* Press Enter to end (sub)program
ACCEPT dummy
AT LINE 2*n-rows + top-offset + 4
AT COLUMN 1.
END PROGRAM Pretty_Matrix.