A coroutine is an Agile Business Suite-generated COBOL coroutine that you can call from an external program.
Passing Parameters
Coroutines expect one word-aligned parameter upon invocation. When calling an AB Suite coroutine using an external program like COBOL, ensure that the size of the element defined as coroutine status parameter or second string parameter is atleast 84 bytes instead of 5 bytes.
Notes:
You might need to change the program to increase the size of the second string parameter to 84 bytes when the coroutines are called directly from COBOL or ALGOL programs. Failing to make this change in size might result in a runtime failure when the external program calls an AB Suite coroutine that itself calls another AB Suite or EAE coroutine.
Calling AB Suite coroutines from EAE or EAE subroutine from AB Suite is supported with any code changes.
Example - Calling a Coroutine from COBOL
The following code is an example of calling a coroutine from COBOL.
IDENTIFICATION DIVISION. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 TASK-NAME USAGE IS TASK. 01 REPORT-NAME PIC X(80). 01 GLB-CORDATA 03 GLB-CORSTATUS PIC X(05). 03 FILLER PIC X(79). 01 GLB-PARAM. 03 S-FUNC PIC X(5). 03 S-NAME PIC X(20). 03 S-STATUS PIC X(5). 03 FILLER PIC X(1970). 01 PASS PIC 9 VALUE 1. LOCAL-STORAGE SECTION. LD LS-GLB-PARAM. 01 FORMAL-GLB-PARAM PIC X(2000). 01 FORMAL-GLB-CORDATA PIC X(84). PROCEDURE DIVISION. DECLARATIVES. PROC-EXTERNAL SECTION. USE EXTERNAL REPORT-NAME AS PROCEDURE WITH LS-GLB-PARAM USING FORMAL-GLB-PARAM FORMAL-GLB-CORDATA . END DECLARATIVES. MAIN SECTION. MAIN-P1. MOVE "(TESTUSER)TEST/LCORTEST ON ASERIES." TO REPORT-NAME MOVE "READ" TO S-FUNC. MOVE "SMITH" TO S-NAME. MOVE SPACES TO GLB-CORSTATUS IF PASS=1 MOVE 9 TO PASS CALL TASK-NAME WITH PROC-EXTERNAL USING GLB-PARAM,GLB-CORDATA ELSE CONTINUE TASK-NAME . MAIN-P2. IF GLB-CORSTATUS=SPACES IF S-STATUS=SPACES DISPLAY "Record Found" ELSE DISPLAY "Record does not exist" ELSE DISPLAY "Coroutine call failed" GLB-CORSTATUS . MAIN-P3. * Following code required to exit Coroutine MOVE "STOP" TO GLB-CORSTATUS CONTINUE TASK-NAME STOP RUN .