Master Mainframe Technologies - COBOL, JCL, DB2, VSAM, CICS & More
ABEND Codes SQLCODEs File Status Interview Prep Contact
← Back to Subprograms
Subprograms | Intermediate | COBOL

CALL Subprogram

Problem Description

Call a subprogram and pass parameters.

Expected Output

Modular programming with CALL

Hints

CALL passes BY REFERENCE, BY CONTENT, or BY VALUE.

Solution

IDENTIFICATION DIVISION. PROGRAM-ID. MAINPROG. * This is the CALLING program DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-NUM1 PIC 9(5) VALUE 100. 01 WS-NUM2 PIC 9(5) VALUE 50. 01 WS-RESULT PIC 9(6). 01 WS-OPERATION PIC X(1) VALUE "A". PROCEDURE DIVISION. DISPLAY "CALLING CALCULATOR SUBPROGRAM". DISPLAY "NUM1: " WS-NUM1 " NUM2: " WS-NUM2. * Call subprogram with parameters * CALL "CALCPROG" USING WS-NUM1 WS-NUM2 WS-RESULT WS-OPERATION. * For demo, inline calculation: IF WS-OPERATION = "A" ADD WS-NUM1 TO WS-NUM2 GIVING WS-RESULT END-IF. DISPLAY "RESULT: " WS-RESULT. STOP RUN. * * SUBPROGRAM CALCPROG would be: * IDENTIFICATION DIVISION. * PROGRAM-ID. CALCPROG. * DATA DIVISION. * LINKAGE SECTION. * 01 LS-NUM1 PIC 9(5). * 01 LS-NUM2 PIC 9(5). * 01 LS-RESULT PIC 9(6). * 01 LS-OP PIC X(1). * PROCEDURE DIVISION USING LS-NUM1 LS-NUM2 LS-RESULT LS-OP. * EVALUATE LS-OP * WHEN "A" ADD LS-NUM1 TO LS-NUM2 GIVING LS-RESULT * WHEN "S" SUBTRACT LS-NUM2 FROM LS-NUM1 GIVING LS-RESULT * WHEN "M" MULTIPLY LS-NUM1 BY LS-NUM2 GIVING LS-RESULT * WHEN "D" DIVIDE LS-NUM1 BY LS-NUM2 GIVING LS-RESULT * END-EVALUATE. * GOBACK.

Explanation:

CALL passes params via USING. Subprogram uses LINKAGE SECTION and GOBACK.