Calling a Coroutine from an External Program

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
.