Chapter 16 Subprograms Subprograms Called and Calling Programs
Chapter 16 - Subprograms • Subprograms – Called and Calling Programs – COPY statement – Calling by BY CONTENT and BY REFERENCE 1
IDENTIFICATION DIVISION. PROGRAM-ID. FITNESS. . . DATA DIVISION. FILE SECTION. FD FITNESS-FILE DATA RECORD IS FITNESS RECORD. 01 FITNESS-RECORD. 05 FULL-NAME PIC X(19). 05 HEIGHT PIC 99. 05 SEX PIC X. 05 AGE PIC 99. . . WORKING-STORAGE SECTION. . . 05 WEIGHT-FROM PIC 9(3). 05 WEIGHT-TO PIC 9(3). . . PROCEDURE DIVISION. Transfers control to first executable. statement in called program. CALL WGTSUB USING FITNESS-RECORD, WEIGHT-FROM, WEIGHT-TO END-CALL. . . 2
IDENTIFICATION DIVISION. PROGRAM-ID. WGTSUB. . . Contains the arguments for the subprogram LINKAGE SECTION. 01 LS-WEIGHT-FROM PIC 9(3). 01 LS-WEIGHT-TO PIC 9(3). 01 FITNESS-RECORD. 05 FULL-NAME PIC X(19). 05 HEIGHT PIC 99. 05 SEX PIC X. 05 AGE PIC 99. . . PROCEDURE DIVISION. USING FITNESS-RECORD, WEIGHT-FROM, WEIGHT-TO. Returns control to calling program. EXIT PROGRAM. (b) Subprogram 3
Figure 16. 2 Called and Calling Programs 4
• COPY statement – Uses a file – Advantages • No need to code extensive data division entries • Make global changes • Standardization and common definition of data elements 5
Figure 16. 3 27 28 C 29 C 30 C 31 C 32 C 33 C 34 C O 1 The COPY Statement COPY TRAINCPY. TRAINING-ARGUMENTS. 05 TRAINING-INPUTS. 10 TRAIN-AGE 10 TRAIN-FITNESS-LEVEL 05 TRAINING-RANGES. 10 TRAIN-OVERALL-RANGE 10 TRAIN-FITNESS-RANGE PIC 99. PIC X(5). 6
• Calling by CONTENT & BY REFERENCE – CONTENT – pass by value, doesn’t allow called program to change values of the passed parameters – REFERENCE – any change is permanent to the parameters. Passing the address of the parameter. Default – Ex. CALL ‘PROGB’ USING FIELD-A BY CONTENT FIELD-B FIELD-C BY REFERENCE FIELD-D. 7
• INITIAL Clause – Resets the program back to it’s original condition. – VALUEs are reset – Important if this is being called. • PROGRAM-ID. Assignment-1 IS INITIAL PROGRAM. 8
Figure 16. 14 The Compile, Link, and Execute Sequence DSPLYSUB FITNESS INPUTSUB TIMESUB WGTCOPY WGTSUB CBL CBL CBL (a) Directory before Compilation Step Step 1: 2: 3: 4: 5: 6: Compile Compile fitness program (FITNESS. CBL) input program (INPUTSUB. CBL) weight goals program (WGTSUB. CBL) training program (TRAINSUB. CBL) format time program (TIMESUB. CBL) final display program(DSPLYSUB. CBL) Step 7: Link the object programs Step 8: Execute the load module (b) The Run Stream (Conceptual View) DSPLYSUB FITNESS INPUTSUB TIMESUB WGTCOPY WGTSUB CBL CBL CBL DSPLYSUB FITNESS INPUTSUB TIMESUB TRAINSUB WGTSUB INT INT INT (c) Directory after Compilation 9
Figure 16. 15 Problems with the Linkage Editor IDENTIFICATION DIVISION. PROGRAM-ID. MAINPROG. . . CALL statement inconsistent PROCEDURE DIVISION. with PROGRAM-ID paragraph. of first subroutine. . CALL ‘SUB 1’ USING PARAMETER-1. CALL ‘SUBRTN 2’ USING PARAMETER-2. (a) Main Program IDENTIFICATION DIVISION. PROGRAM-ID. SUBRTN 1. . . PROCEDURE DIVISION USING PARAMETER-1. . . EXIT PROGRAM. (b) First Subroutine 10
Figure 16. 15 Problems with the Linkage Editor IDENTIFICATION DIVISION. PROGRAM-ID. SUBRTN 2. . . PROCEDURE DIVISION USING PARAMETER-2. . . EXIT PROGRAM. (c) Second Subroutine ERROR - SUB 1 IS AN UNRESOLVED EXTERNAL REFERENCE (d) Error Message 11
Review • Sub program • CALL statement • Passing parameters – CALL USING – BY REFERECE – BY VALUE • COPY • Linking • initialize 12
- Slides: 12