*> Calling program:
program-id. startup.
working-storage section.
01 start-point usage procedure-pointer.
procedure division.
set start-point to entry "menu"
call "controller" using start-point
display "End of run"
stop run.
entry "illegal"
*> Recursive calls invalid without local-storage section.
stop run.
end program startup.
*> Called program:
program-id. controller.
working-storage section.
01 next-option pic x.
linkage section.
01 current-proc usage procedure-pointer.
procedure division using current-proc.
perform until current-proc = NULL
call current-proc returning next-option
*> Note program-id must be called before any entry point
evaluate next-option
when "a" set current-proc to entry "sub1"
when other set current-proc to NULL
end-evaluate
end-perform.
exit program.
end program controller.
program-id. menu.
working-storage section.
01 exit-option pic x.
procedure division.
display "In menu"
move "a" to exit-option
exit program returning exit-option.
*> Note that the maximum size of returned value is 4 bytes
entry "sub1"
display "In sub1"
exit program returning 1.