67 lines
2.7 KiB
COBOL
67 lines
2.7 KiB
COBOL
identification division.
|
|
program-id. box-compass.
|
|
data division.
|
|
working-storage section.
|
|
01 point pic 99.
|
|
01 degrees usage float-short.
|
|
01 degrees-rounded pic 999v99.
|
|
01 show-degrees pic zz9.99.
|
|
01 box pic z9.
|
|
01 fudge pic 9.
|
|
01 compass pic x(4).
|
|
01 compass-point pic x(18).
|
|
01 shortform pic x.
|
|
01 short-names.
|
|
05 short-name pic x(4) occurs 33 times.
|
|
01 overlay.
|
|
05 value "N " & "NbE " & "N-NE" & "NEbN" & "NE " &
|
|
"NEbE" & "E-NE" & "EbN " & "E " & "EbS " &
|
|
"E-SE" & "SEbE" & "SE " & "SEbS" & "S-SE" &
|
|
"SbE " & "S " & "SbW " & "S-SW" & "SWbS" &
|
|
"SW " & "SWbW" & "W-SW" & "WbS " & "W " &
|
|
"WbN " & "W-NW" & "NWbW" & "NW " & "NWbN" &
|
|
"N-NW" & "NbW " & "N ".
|
|
|
|
procedure division.
|
|
display "Index Compass point Degree"
|
|
|
|
move overlay to short-names.
|
|
perform varying point from 0 by 1 until point > 32
|
|
compute box = function mod(point 32) + 1
|
|
compute degrees = point * 11.25
|
|
compute fudge = function mod(point 3)
|
|
evaluate fudge
|
|
when equal 1
|
|
add 5.62 to degrees
|
|
when equal 2
|
|
subtract 5.62 from degrees
|
|
end-evaluate
|
|
|
|
compute degrees-rounded rounded = degrees
|
|
move degrees-rounded to show-degrees
|
|
inspect show-degrees replacing trailing '00' by '0 '
|
|
inspect show-degrees replacing trailing '50' by '5 '
|
|
|
|
move short-name(point + 1) to compass
|
|
move spaces to compass-point
|
|
display space box space space space with no advancing
|
|
perform varying tally from 1 by 1 until tally > 4
|
|
move compass(tally:1) to shortform
|
|
move function concatenate(function trim(compass-point),
|
|
function substitute(shortform,
|
|
"N", "North",
|
|
"E", "East",
|
|
"S", "South",
|
|
"W", "West",
|
|
"b", " byZ",
|
|
"-", "-"))
|
|
to compass-point
|
|
end-perform
|
|
move function substitute(compass-point, "Z", " ")
|
|
to compass-point
|
|
move function lower-case(compass-point) to compass-point
|
|
move function upper-case(compass-point(1:1))
|
|
to compass-point(1:1)
|
|
display compass-point space show-degrees
|
|
end-perform
|
|
goback.
|