The example code that follows illustrates how file status checking is performed: first the first byte (status key 1) is interrogated; then, if more information is required, the second byte (status key 2) is interrogated.
select recseq
assign to "recseq.dat"
file status is ws-file-status
organization is record sequential.
...
file section.
fd recseq
record contains 80 characters.
01 recseq-fd-record pic x(80).
...
working-storage section.
01 ws-file-status.
05 status-key-1 pic x.
05 status-key-2 pic x.
05 binary-status redefines status-key-2 pic 99 comp-x.
...
procedure division.
...
perform check-status.
...
check-status.
evaluate status-key-1
when "0" next sentence
when "1" display "end of file reached"
perform check-eof-status
when "2" display "invalid key"
perform check-inv-key-status
when "3" display "permanent error"
perform check-perm-err-status
when "4" display "logic error"
when "9" display "run-time-system error"
perform check-mf-error-message
end-evaluate.
...
check-eof-status.
if status-key-2 = "0"
display "no next logical record"
end-if.
...
check-inv-key-status.
evaluate status-key-2
when "2" display "attempt to write dup key"
when "3" display "no record found"
end-evaluate.
...
check-perm-err-status.
if status-key-2 = "5"
display "file not found"
end-if.
...
check-mf-error-message.
evaluate binary-status
when 002 display "file not open"
when 007 display "disk space exhausted"
when 013 display "file not found"
when 024 display "disk error "
when 065 display "file locked "
when 068 display "record locked "
when 039 display "record inconsistent"
when 146 display "no current record "
when 180 display "file malformed "
when 208 display "network error "
when 213 display "too many locks "
when other display "not error status "
display binary-status
end-evaluate.