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.