The CALL-CONVENTION clause specifies the calling convention used when invoking external programs or system functions. It defines how parameters are passed and how the program interface works during external calls.
CALL-CONVENTION defines the protocol for program communication.
The CALL-CONVENTION clause follows specific syntax patterns within the SPECIAL-NAMES paragraph and can use various convention values.
123456789101112131415161718192021* Basic CALL-CONVENTION syntax ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. CALL-CONVENTION IS convention-name. * With specific convention SPECIAL-NAMES. CALL-CONVENTION IS STANDARD. * Multiple conventions SPECIAL-NAMES. CALL-CONVENTION IS STANDARD CALL-CONVENTION IS EXTERNAL. * Complete example ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. CALL-CONVENTION IS STANDARD CLASS VALID-STATUS IS "00" THRU "99".
CALL-CONVENTION is specified in the SPECIAL-NAMES paragraph.
Convention | Usage | Characteristics |
---|---|---|
STANDARD | Default COBOL calls | Parameters by reference |
EXTERNAL | External program calls | System-specific interface |
CUSTOM | User-defined conventions | Flexible parameter passing |
FASTCALL | Performance optimization | Optimized for speed |
STDCALL | Standard C calls | C-compatible interface |
12345678910111213* By reference (default for STANDARD) CALL "SUBPROGRAM" USING PARAM1 PARAM2 * By value (some external conventions) CALL "EXTERNAL-PROG" USING BY VALUE PARAM1 * By content (copy value) CALL "SUBPROGRAM" USING BY CONTENT PARAM1 * Mixed passing CALL "MIXED-PROG" USING BY REFERENCE PARAM1 BY VALUE PARAM2 BY CONTENT PARAM3
Different conventions support different parameter passing methods.
These examples demonstrate how to use the CALL-CONVENTION clause effectively in different program calling scenarios.
12345678910111213141516171819202122232425262728293031323334353637383940414243IDENTIFICATION DIVISION. PROGRAM-ID. MAIN-PROGRAM. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. CALL-CONVENTION IS STANDARD. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-PARAM1 PIC X(20) VALUE "Hello World". 01 WS-PARAM2 PIC 9(5) VALUE 12345. 01 WS-RESULT PIC X(50). PROCEDURE DIVISION. MAIN-PROCESS. * Call subprogram with standard convention CALL "SUBPROGRAM" USING WS-PARAM1 WS-PARAM2 RETURNING WS-RESULT DISPLAY "Result: " WS-RESULT STOP RUN. * Called subprogram IDENTIFICATION DIVISION. PROGRAM-ID. SUBPROGRAM. DATA DIVISION. LINKAGE SECTION. 01 LK-PARAM1 PIC X(20). 01 LK-PARAM2 PIC 9(5). 01 LK-RESULT PIC X(50). PROCEDURE DIVISION USING LK-PARAM1 LK-PARAM2 RETURNING LK-RESULT. * Process parameters STRING LK-PARAM1 DELIMITED BY SPACE " - Value: " DELIMITED BY SIZE LK-PARAM2 DELIMITED BY SIZE INTO LK-RESULT EXIT PROGRAM.
Standard COBOL program call using the default calling convention.
123456789101112131415161718192021222324252627282930313233343536IDENTIFICATION DIVISION. PROGRAM-ID. EXTERNAL-CALL-EXAMPLE. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. CALL-CONVENTION IS EXTERNAL. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-SYSTEM-FUNCTION PIC X(20) VALUE "GETSYSTEMTIME". 01 WS-TIME-BUFFER PIC X(50). 01 WS-RETURN-CODE PIC 9(4). PROCEDURE DIVISION. MAIN-PROCESS. * Call external system function CALL WS-SYSTEM-FUNCTION USING WS-TIME-BUFFER RETURNING WS-RETURN-CODE IF WS-RETURN-CODE = 0 DISPLAY "System time: " WS-TIME-BUFFER ELSE DISPLAY "Error getting system time" END-IF STOP RUN. * Example of calling C library function PROCEDURE DIVISION. CALL-C-FUNCTION. * Call C library function (example) CALL "strlen" USING BY VALUE WS-TIME-BUFFER RETURNING WS-RETURN-CODE DISPLAY "String length: " WS-RETURN-CODE.
External system function call using EXTERNAL calling convention.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859IDENTIFICATION DIVISION. PROGRAM-ID. CUSTOM-CONVENTION-EXAMPLE. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. CALL-CONVENTION IS CUSTOM. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-CUSTOM-PARAM1 PIC X(30). 01 WS-CUSTOM-PARAM2 PIC 9(8). 01 WS-CUSTOM-RESULT PIC X(100). 01 WS-CALL-STATUS PIC X(1). PROCEDURE DIVISION. MAIN-PROCESS. MOVE "Custom parameter data" TO WS-CUSTOM-PARAM1 MOVE 98765432 TO WS-CUSTOM-PARAM2 * Call with custom convention CALL "CUSTOM-SUBPROGRAM" USING BY REFERENCE WS-CUSTOM-PARAM1 BY VALUE WS-CUSTOM-PARAM2 BY REFERENCE WS-CUSTOM-RESULT BY REFERENCE WS-CALL-STATUS IF WS-CALL-STATUS = "S" DISPLAY "Success: " WS-CUSTOM-RESULT ELSE DISPLAY "Error in custom call" END-IF STOP RUN. * Custom subprogram with specific interface IDENTIFICATION DIVISION. PROGRAM-ID. CUSTOM-SUBPROGRAM. DATA DIVISION. LINKAGE SECTION. 01 LK-PARAM1 PIC X(30). 01 LK-PARAM2 PIC 9(8). 01 LK-RESULT PIC X(100). 01 LK-STATUS PIC X(1). PROCEDURE DIVISION USING LK-PARAM1 LK-PARAM2 LK-RESULT LK-STATUS. * Custom processing logic STRING "Processed: " DELIMITED BY SIZE LK-PARAM1 DELIMITED BY SPACE " (ID: " DELIMITED BY SIZE LK-PARAM2 DELIMITED BY SIZE ")" DELIMITED BY SIZE INTO LK-RESULT MOVE "S" TO LK-STATUS EXIT PROGRAM.
Custom calling convention with mixed parameter passing methods.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950IDENTIFICATION DIVISION. PROGRAM-ID. FASTCALL-EXAMPLE. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. CALL-CONVENTION IS FASTCALL. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-ARRAY-DATA PIC X(1000). 01 WS-SEARCH-KEY PIC X(20). 01 WS-FOUND-POSITION PIC 9(4). 01 WS-CALL-COUNT PIC 9(6) VALUE 0. PROCEDURE DIVISION. MAIN-PROCESS. * Initialize data MOVE "Sample data for searching" TO WS-ARRAY-DATA MOVE "search" TO WS-SEARCH-KEY * Perform multiple fast calls PERFORM VARYING WS-CALL-COUNT FROM 1 BY 1 UNTIL WS-CALL-COUNT > 1000 CALL "FAST-SEARCH" USING BY REFERENCE WS-ARRAY-DATA BY REFERENCE WS-SEARCH-KEY RETURNING WS-FOUND-POSITION END-PERFORM DISPLAY "Fast search completed" STOP RUN. * Optimized search subprogram IDENTIFICATION DIVISION. PROGRAM-ID. FAST-SEARCH. DATA DIVISION. LINKAGE SECTION. 01 LK-ARRAY-DATA PIC X(1000). 01 LK-SEARCH-KEY PIC X(20). 01 LK-FOUND-POSITION PIC 9(4). PROCEDURE DIVISION USING LK-ARRAY-DATA LK-SEARCH-KEY RETURNING LK-FOUND-POSITION. * Fast search algorithm MOVE 1 TO LK-FOUND-POSITION EXIT PROGRAM.
Performance-optimized calls using FASTCALL convention for high-frequency operations.
Understanding best practices ensures proper program linkage and system integration.
Pitfall | Problem | Solution |
---|---|---|
Mismatched conventions | Parameter passing errors | Use compatible conventions |
Incorrect parameter types | Data corruption | Match parameter definitions |
Missing error handling | Program crashes | Check return codes |
Performance issues | Slow execution | Choose appropriate conventions |
Platform dependencies | Portability issues | Use standard conventions |
123456789101112131415* Windows calling conventions SPECIAL-NAMES. CALL-CONVENTION IS STDCALL. * Standard Windows API calls * Unix/Linux calling conventions SPECIAL-NAMES. CALL-CONVENTION IS EXTERNAL. * System calls and libraries * Mainframe calling conventions SPECIAL-NAMES. CALL-CONVENTION IS STANDARD. * Traditional COBOL calls * Cross-platform compatibility SPECIAL-NAMES. CALL-CONVENTION IS CUSTOM. * Platform-independent interface
Different platforms may require different calling conventions.
Convention | Syntax | Usage |
---|---|---|
STANDARD | CALL-CONVENTION IS STANDARD | Default COBOL program calls |
EXTERNAL | CALL-CONVENTION IS EXTERNAL | External program/system calls |
CUSTOM | CALL-CONVENTION IS CUSTOM | User-defined conventions |
FASTCALL | CALL-CONVENTION IS FASTCALL | Performance optimization |
STDCALL | CALL-CONVENTION IS STDCALL | Standard C-compatible calls |
1. What is the primary purpose of the CALL-CONVENTION clause in COBOL?
2. In which division is the CALL-CONVENTION clause typically used?
3. What does CALL-CONVENTION affect in program calls?
4. Which of the following is a common CALL-CONVENTION value?
5. When is CALL-CONVENTION most important?
Understanding the CALL statement for program invocation.
SPECIAL-NAMES paragraph structure and usage.
Program linkage and modular programming techniques.
Parameter passing mechanisms in COBOL.
Environment division structure and components.