PROGRAM-STATUS is a special register in COBOL that contains the execution status or return code of a program. It is automatically set by the system when a program completes execution and can be checked by calling programs to determine if the called program executed successfully.
PROGRAM-STATUS is a special register that can be referenced directly:
1234567891011121314151617181920212223242526* Checking PROGRAM-STATUS after program call CALL "subprogram-name" USING parameters. IF PROGRAM-STATUS = 0 DISPLAY "Program executed successfully" PERFORM success-processing ELSE DISPLAY "Program failed with status: " PROGRAM-STATUS PERFORM error-handling END-IF. * Multiple status checks CALL "data-processor" USING input-data. EVALUATE PROGRAM-STATUS WHEN 0 DISPLAY "Success" PERFORM normal-processing WHEN 8 DISPLAY "Abnormal termination" PERFORM cleanup-processing WHEN 12 DISPLAY "Program not found" PERFORM error-recovery WHEN OTHER DISPLAY "Unexpected status: " PROGRAM-STATUS PERFORM general-error-handling END-EVALUATE.
PROGRAM-STATUS can be checked using conditional statements.
123456789101112131415161718192021* Setting return code in called program PROCEDURE DIVISION. MAIN-PROCESS. * Program logic here IF processing-successful STOP RUN 0 ELSE STOP RUN 8 END-IF. * Alternative method PROCEDURE DIVISION. MAIN-PROCESS. * Program logic here IF critical-error MOVE 16 TO return-code STOP RUN return-code END-IF. * Normal completion STOP RUN 0.
Here are some practical uses of PROGRAM-STATUS in COBOL:
123456789101112131415161718192021222324252627282930* Main program calling subprograms PROCEDURE DIVISION. MAIN-PROCESS. * Call data validation program CALL "validate-data" USING input-records. IF PROGRAM-STATUS NOT = 0 DISPLAY "Data validation failed" PERFORM error-exit END-IF. * Call data processing program CALL "process-data" USING input-records. IF PROGRAM-STATUS NOT = 0 DISPLAY "Data processing failed" PERFORM error-exit END-IF. * Call report generation program CALL "generate-report" USING processed-data. IF PROGRAM-STATUS NOT = 0 DISPLAY "Report generation failed" PERFORM error-exit END-IF. DISPLAY "All processing completed successfully" STOP RUN 0. ERROR-EXIT. DISPLAY "Program terminated due to error" STOP RUN 8.
Checking PROGRAM-STATUS after each program call.
1234567891011121314151617181920212223242526272829* Comprehensive error handling PROCEDURE DIVISION. CALL-UTILITY-PROGRAMS. * Call file utility CALL "file-utility" USING file-parameters. EVALUATE PROGRAM-STATUS WHEN 0 DISPLAY "File operation successful" WHEN 4 DISPLAY "File not found - using default" PERFORM use-default-file WHEN 8 DISPLAY "File access error" PERFORM file-error-recovery WHEN 12 DISPLAY "Utility program not found" PERFORM alternative-processing WHEN OTHER DISPLAY "Unexpected error: " PROGRAM-STATUS PERFORM general-error-handling END-EVALUATE. * Continue with next operation CALL "data-processor" USING data-parameters. IF PROGRAM-STATUS = 0 PERFORM continue-processing ELSE PERFORM handle-processing-error END-IF.
Detailed error handling based on PROGRAM-STATUS values.
1. What is PROGRAM-STATUS in COBOL?
2. What does PROGRAM-STATUS contain?
3. When is PROGRAM-STATUS typically used?
4. What is a common return code for successful execution?
5. How do you check PROGRAM-STATUS in a calling program?