MainframeMaster

COBOL Tutorial

COBOL MODULE Clause - Quick Reference

Progress0 of 0 lessons

Overview

The MODULE clause is used in COBOL to define program modules that can be compiled separately and linked together to create larger applications. It enables modular programming, code reuse, and better organization of complex COBOL applications.

Purpose and Usage

  • Modular programming - Create separate, reusable program components
  • Code reuse - Share common functionality across programs
  • Separate compilation - Compile modules independently
  • Library creation - Build libraries of reusable modules
  • Team development - Enable parallel development of modules

Modular Programming Concept

Module 1: Data validation functions
Module 2: File I/O operations
Module 3: Business logic
Main Program: Links all modules
Result: Complete application

Modules are separate components that are linked together to form applications.

Syntax and Usage

The MODULE clause is defined in the IDENTIFICATION DIVISION to specify that a program is a module rather than a complete, standalone program.

Basic Syntax

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
* Basic MODULE clause syntax IDENTIFICATION DIVISION. MODULE-ID. module-name. * Examples IDENTIFICATION DIVISION. MODULE-ID. DATA-VALIDATION-MODULE. IDENTIFICATION DIVISION. MODULE-ID. FILE-IO-MODULE. IDENTIFICATION DIVISION. MODULE-ID. BUSINESS-LOGIC-MODULE. * Complete example IDENTIFICATION DIVISION. MODULE-ID. UTILITY-MODULE. AUTHOR. "Development Team". DATE-WRITTEN. "2024-01-15". DATE-COMPILED. "2024-01-15". SECURITY. "Confidential".

The MODULE clause replaces PROGRAM-ID for modular components.

Complete Example

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
* Complete module example IDENTIFICATION DIVISION. MODULE-ID. VALIDATION-MODULE. AUTHOR. "Development Team". DATE-WRITTEN. "2024-01-15". ENVIRONMENT DIVISION. CONFIGURATION SECTION. DATA DIVISION. WORKING-STORAGE SECTION. 01 VALIDATION-RULES. 05 MIN-LENGTH PIC 9(2) VALUE 3. 05 MAX-LENGTH PIC 9(2) VALUE 50. 05 ALLOWED-CHARS PIC X(62) VALUE "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789". LINKAGE SECTION. 01 VALIDATION-PARAMETERS. 05 INPUT-DATA PIC X(50). 05 VALIDATION-RESULT PIC X(1). 05 ERROR-MESSAGE PIC X(100). PROCEDURE DIVISION USING VALIDATION-PARAMETERS. MAIN-LOGIC. * Validate input data PERFORM VALIDATE-INPUT GOBACK. VALIDATE-INPUT. * Check data length IF LENGTH OF INPUT-DATA < MIN-LENGTH MOVE "N" TO VALIDATION-RESULT MOVE "Data too short" TO ERROR-MESSAGE ELSE IF LENGTH OF INPUT-DATA > MAX-LENGTH MOVE "N" TO VALIDATION-RESULT MOVE "Data too long" TO ERROR-MESSAGE ELSE MOVE "Y" TO VALIDATION-RESULT MOVE SPACES TO ERROR-MESSAGE END-IF.

This example shows a complete validation module with parameters.

Module Linking Example

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
* Main program that uses modules IDENTIFICATION DIVISION. PROGRAM-ID. MAIN-APPLICATION. ENVIRONMENT DIVISION. CONFIGURATION SECTION. DATA DIVISION. WORKING-STORAGE SECTION. 01 USER-INPUT PIC X(50). 01 VALIDATION-RESULT PIC X(1). 01 ERROR-MESSAGE PIC X(100). 01 PROCESSED-DATA PIC X(50). PROCEDURE DIVISION. MAIN-LOGIC. * Get user input DISPLAY "Enter data: " ACCEPT USER-INPUT * Call validation module CALL "VALIDATION-MODULE" USING USER-INPUT, VALIDATION-RESULT, ERROR-MESSAGE * Check validation result IF VALIDATION-RESULT = "Y" * Call processing module CALL "PROCESSING-MODULE" USING USER-INPUT, PROCESSED-DATA DISPLAY "Processed: " PROCESSED-DATA ELSE DISPLAY "Error: " ERROR-MESSAGE END-IF STOP RUN.

Main programs use CALL statements to invoke modules.

Common Use Cases

The MODULE clause is essential in various scenarios where modular programming and code reuse are needed for better application organization.

Utility Libraries

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
* Utility library module IDENTIFICATION DIVISION. MODULE-ID. UTILITY-LIBRARY. DATA DIVISION. WORKING-STORAGE SECTION. 01 UTILITY-CONSTANTS. 05 PI-VALUE PIC 9V999999 VALUE 3.141593. 05 E-VALUE PIC 9V999999 VALUE 2.718282. 05 MAX-INTEGER PIC 9(10) VALUE 2147483647. LINKAGE SECTION. 01 UTILITY-PARAMETERS. 05 FUNCTION-CODE PIC X(10). 05 INPUT-VALUE PIC 9(10)V99. 05 OUTPUT-VALUE PIC 9(10)V99. 05 RETURN-CODE PIC 9(2). PROCEDURE DIVISION USING UTILITY-PARAMETERS. MAIN-LOGIC. EVALUATE FUNCTION-CODE WHEN "SQUARE" PERFORM CALCULATE-SQUARE WHEN "SQRT" PERFORM CALCULATE-SQRT WHEN "LOG" PERFORM CALCULATE-LOG WHEN OTHER MOVE 99 TO RETURN-CODE END-EVALUATE GOBACK. CALCULATE-SQUARE. COMPUTE OUTPUT-VALUE = INPUT-VALUE ** 2 MOVE 0 TO RETURN-CODE. CALCULATE-SQRT. * Square root calculation logic MOVE 0 TO RETURN-CODE. CALCULATE-LOG. * Logarithm calculation logic MOVE 0 TO RETURN-CODE.

Utility libraries provide common mathematical and processing functions.

Data Access Modules

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
* Data access module IDENTIFICATION DIVISION. MODULE-ID. DATA-ACCESS-MODULE. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT CUSTOMER-FILE ASSIGN TO "CUSTOMER.DAT" ORGANIZATION IS INDEXED ACCESS MODE IS RANDOM RECORD KEY IS CUSTOMER-ID. DATA DIVISION. FILE SECTION. FD CUSTOMER-FILE. 01 CUSTOMER-RECORD. 05 CUSTOMER-ID PIC 9(6). 05 CUSTOMER-NAME PIC X(30). 05 CUSTOMER-EMAIL PIC X(50). LINKAGE SECTION. 01 ACCESS-PARAMETERS. 05 OPERATION-CODE PIC X(10). 05 CUSTOMER-KEY PIC 9(6). 05 CUSTOMER-DATA PIC X(86). 05 RETURN-CODE PIC 9(2). PROCEDURE DIVISION USING ACCESS-PARAMETERS. MAIN-LOGIC. EVALUATE OPERATION-CODE WHEN "READ" PERFORM READ-CUSTOMER WHEN "WRITE" PERFORM WRITE-CUSTOMER WHEN "UPDATE" PERFORM UPDATE-CUSTOMER WHEN "DELETE" PERFORM DELETE-CUSTOMER WHEN OTHER MOVE 99 TO RETURN-CODE END-EVALUATE GOBACK. READ-CUSTOMER. MOVE CUSTOMER-KEY TO CUSTOMER-ID READ CUSTOMER-FILE INVALID KEY MOVE 10 TO RETURN-CODE NOT INVALID KEY MOVE CUSTOMER-RECORD TO CUSTOMER-DATA MOVE 0 TO RETURN-CODE END-READ.

Data access modules encapsulate file operations and data access logic.

Business Logic Modules

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
* Business logic module IDENTIFICATION DIVISION. MODULE-ID. BUSINESS-LOGIC-MODULE. DATA DIVISION. WORKING-STORAGE SECTION. 01 BUSINESS-RULES. 05 MIN-BALANCE PIC 9(8)V99 VALUE 100.00. 05 INTEREST-RATE PIC 9V9999 VALUE 0.0525. 05 TRANSACTION-LIMIT PIC 9(8)V99 VALUE 10000.00. LINKAGE SECTION. 01 BUSINESS-PARAMETERS. 05 TRANSACTION-TYPE PIC X(10). 05 ACCOUNT-BALANCE PIC 9(8)V99. 05 TRANSACTION-AMOUNT PIC 9(8)V99. 05 APPROVAL-STATUS PIC X(1). 05 ERROR-CODE PIC 9(2). PROCEDURE DIVISION USING BUSINESS-PARAMETERS. MAIN-LOGIC. EVALUATE TRANSACTION-TYPE WHEN "WITHDRAWAL" PERFORM PROCESS-WITHDRAWAL WHEN "DEPOSIT" PERFORM PROCESS-DEPOSIT WHEN "TRANSFER" PERFORM PROCESS-TRANSFER WHEN OTHER MOVE 99 TO ERROR-CODE END-EVALUATE GOBACK. PROCESS-WITHDRAWAL. IF TRANSACTION-AMOUNT > TRANSACTION-LIMIT MOVE "N" TO APPROVAL-STATUS MOVE 20 TO ERROR-CODE ELSE IF ACCOUNT-BALANCE - TRANSACTION-AMOUNT < MIN-BALANCE MOVE "N" TO APPROVAL-STATUS MOVE 21 TO ERROR-CODE ELSE MOVE "Y" TO APPROVAL-STATUS MOVE 0 TO ERROR-CODE END-IF.

Business logic modules implement domain-specific rules and processing.

Best Practices and Tips

Following these best practices ensures effective use of the MODULE clause in COBOL applications.

MODULE Clause Best Practices

  • Use descriptive names - Name modules clearly to indicate their purpose
  • Single responsibility - Each module should have a single, well-defined purpose
  • Clear interfaces - Define clear parameter interfaces for modules
  • Documentation - Document module purpose, parameters, and usage
  • Error handling - Include proper error handling and return codes
  • Version control - Use version control for module management

Module Organization Patterns

PatternDescriptionExample
FunctionalGroup by functionVALIDATION-MODULE, CALCULATION-MODULE
Data AccessGroup by data entityCUSTOMER-MODULE, ORDER-MODULE
UtilityCommon utilitiesDATE-UTILS, STRING-UTILS
Business LogicDomain-specific logicBANKING-LOGIC, INVENTORY-LOGIC
InterfaceExternal system interfacesAPI-INTERFACE, LEGACY-INTERFACE

Performance Considerations

  • Module loading - Modules are loaded when called
  • Memory usage - Each module consumes memory
  • Call overhead - Module calls have some overhead
  • Linking time - Linking modules takes time
  • Compilation - Only changed modules need recompilation
  • Testing - Test modules individually and together

When to Use MODULE Clause

Use CaseMODULE SuitabilityReasoning
Large applicationsExcellentBetter organization and maintenance
Code reuseExcellentShare functionality across programs
Team developmentExcellentParallel development of components
Simple programsPoorUnnecessary complexity
Quick prototypesPoorSlower development cycle

MODULE Clause Quick Reference

UsageSyntaxExample
Basic moduleIDENTIFICATION DIVISION. MODULE-ID. name.MODULE-ID. UTILITY-MODULE.
Module with parametersPROCEDURE DIVISION USING params.PROCEDURE DIVISION USING PARAM-LIST.
Module callCALL "module-name" USING paramsCALL "VALIDATION-MODULE" USING DATA
Module returnGOBACKGOBACK
Module documentationAUTHOR, DATE-WRITTEN, etc.AUTHOR. "Team Name".

Test Your Knowledge

1. What is the primary purpose of the MODULE clause in COBOL?

  • To define data structures
  • To define program modules for modular programming
  • To control file operations
  • To perform arithmetic calculations

2. In which COBOL division is the MODULE clause typically defined?

  • IDENTIFICATION DIVISION
  • ENVIRONMENT DIVISION
  • DATA DIVISION
  • PROCEDURE DIVISION

3. How is the MODULE clause used in COBOL programs?

  • To define data fields
  • To create modular, reusable program components
  • To control program flow
  • To manage memory allocation

4. Which of the following is a common use case for the MODULE clause?

  • File I/O operations
  • Creating reusable program libraries
  • Data validation
  • Mathematical calculations

5. How do you link modules defined with the MODULE clause?

  • Using CALL statement
  • Using the linker to combine compiled modules
  • Using PERFORM statement
  • Using GO TO statement

Frequently Asked Questions