The following is a COBOL85 library named TASKM/COBOL85/LIBRARY:
000100$ RESET LIST SET ERRORLIST LINEINFO 000200 IDENTIFICATION DIVISION. 000300 PROGRAM-ID. EXPLICIT-LIBRARY LIBRARY. 000400 ENVIRONMENT DIVISION. 000500 INPUT-OUTPUT SECTION. 000600 FILE-CONTROL. 000700 SELECT FL-1 ASSIGN TO DISK. 000800 DATA DIVISION. 000900 FILE SECTION. 001000 FD FL-1 GLOBAL. 001100 01 FL-1-REC PIC X(80) GLOBAL. 001200 WORKING-STORAGE SECTION. 001300 PROGRAM-LIBRARY SECTION. 001400 LB EXPLICIT-LIBRARY EXPORT 001500 ATTRIBUTE SHARING IS SHAREDBYRUNUNIT. 001600 ENTRY PROCEDURE USERCODE. 001700 ENTRY PROCEDURE WRITER. 001800 PROCEDURE DIVISION. 001900 P-1. 002000 OPEN OUTPUT FL-1. 002100 CALL “DISPLAYER”. 002200 CALL SYSTEM FREEZE TEMPORARY. 002300 CLOSE FL-1 SAVE. 002400 EXIT PROGRAM. 002500 IDENTIFICATION DIVISION. 002600 PROGRAM-ID. WRITER. 002700 DATA DIVISION. 002800 PROCEDURE DIVISION. 002900 P-1. 003000 MOVE “DATA WRITTEN FROM LIBRARY” TO FL-1-REC. 003100 WRITE FL-1-REC. 003200 EXIT PROGRAM. 003300 END PROGRAM WRITER. 003400 IDENTIFICATION DIVISION. 003500 PROGRAM-ID. DISPLAYER. 003600 PROCEDURE DIVISION. 003700 P-1. 003800 DISPLAY “THE EXPLICIT LIBRARY HAS BEEN ENTERED.” 003900 EXIT PROGRAM. 004000 END PROGRAM DISPLAYER. 004100 IDENTIFICATION DIVISION. 004200 PROGRAM-ID. USERCODE. 004300 DATA DIVISION. 004400 WORKING-STORAGE SECTION. 004500 01 REC-1. 004600 02 BUFFER PIC X(20). 004700 02 USERNAME PIC X(20). 004800 02 DIRECTORIES PIC 9(4) COMP. 004900 01 MAX-DIRECTORIES PIC 9(4) COMP VALUE 17 GLOBAL. 005000 LINKAGE SECTION. 005100 01 STR PIC X(80). 005200 01 USER-CODE PIC X(20). 005300 PROCEDURE DIVISION USING STR USER-CODE. 005400 P-1. 005500 UNSTRING STR DELIMITED BY “/” OR “(“ OR “)” 005600 INTO BUFFER USERNAME TALLYING IN DIRECTORIES. 005700 MOVE USERNAME TO USER-CODE. 005800 IF DIRECTORIES IS GREATER THAN MAX-DIRECTORIES 005900 CALL “ERROR-MESSAGE” USING DIRECTORIES. 006000 EXIT PROGRAM. 006100 IDENTIFICATION DIVISION. 006200 PROGRAM-ID. ERROR-MESSAGE. 006300 DATA DIVISION. 006400 WORKING-STORAGE SECTION. 006500 77 EXTRA-DIRECTORIES PIC 9(4) COMP. 006600 LINKAGE SECTION. 006700 77 TOTAL-DIRECTORIES PIC 9(4) COMP. 006800 PROCEDURE DIVISION USING TOTAL-DIRECTORIES. 006900 P-1. 007000 SUBTRACT MAX-DIRECTORIES FROM TOTAL-DIRECTORIES 007100 GIVING EXTRA-DIRECTORIES. 007200 DISPLAY “THERE WERE “ EXTRA-DIRECTORIES 007300 “EXTRA DIRECTORIES”. 007400 EXIT PROGRAM. 007500 END PROGRAM ERROR-MESSAGE. 007600 END PROGRAM USERCODE. 007700 END PROGRAM EXPLICIT-LIBRARY.
The program TASKM/COBOL85/LIBRARY illustrates several library features that distinguish COBOL85 libraries from libraries in earlier COBOL implementations. These features include:
-
An explicit FREEZE statement at line 2200, which includes the freeze duration option of TEMPORARY.
-
The PROGRAM-LIBRARY SECTION, which includes an explicit export declaration at lines 1400-1700. The declaration specifies a sharing option of SHAREDBYRUNUNIT and lists USERCODE and WRITER as the names of nested programs to be exported.
-
Three nested programs, including the two specified in the export declaration: USERCODE, at lines 4100-7600; and WRITER, at lines 2500-3300.
-
Local variables. The exported nested program USERCODE includes declarations of the data items REC-1 at line 4500 and MAX-DIRECTORIES at 4900. Note that these local variables are reinitialized each time the USERCODE nested program is invoked. You can cause the values of these variables to be preserved by adding an IS INITIAL clause to the PROGRAM-ID paragraph at line 4200.
The following is another COBOL85 library called TASKM/COBOL85/PROCEDURE:
000100$RESET LIST SET ERRORLIST LINEINFO 000200$SHARING = SHAREDBYRUNUNIT 000300$LIBRARYPROG 000400 IDENTIFICATION DIVISION. 000500 PROGRAM-ID. IMPLICIT-LIBRARY. 000600 ENVIRONMENT DIVISION. 000700 DATA DIVISION. 000800 WORKING-STORAGE SECTION. 000900 77 SWAP PIC X(10). 001000 LINKAGE SECTION. 001100 01 A-REC. 001200 02 FLD-1 PIC X(10). 001300 02 FLD-2 PIC X(10). 001400 PROCEDURE DIVISION USING A-REC. 001500 P-1. 001600 MOVE FLD-1 TO SWAP. 001700 MOVE FLD-2 TO FLD-1. 001800 MOVE SWAP TO FLD-2. 001900 EXIT PROGRAM.
The library TASKM/COBOL85/PROCEDURE is designed to function much as a COBOL74 library. There is no explicit export declaration or freeze statement, and the entire PROCEDURE DIVISION is exported. However, unlike COBOL74, COBOL85 requires the LIBRARYPROG compiler option to be set in order to indicate that the program will function as a library.
The following is a COBOL85 client program called TASKM/COBOL85/PROGRAM. This program calls the two COBOL85 libraries described previously:
000100$ RESET LIST SET ERRORLIST LINEINFO 000200 IDENTIFICATION DIVISION. 000300 PROGRAM-ID. DRIVER. 000400 ENVIRONMENT DIVISION. 000900 DATA DIVISION. 001500 WORKING-STORAGE SECTION. 001600 01 THE-TITLE PIC X(80). 001700 01 USERCODES. 001800 02 USERCODE-1 PIC X(20). 001900 02 USERCODE-2 PIC X(20). 002000 LOCAL-STORAGE SECTION. 002100 LD PARAM-1. 002200 01 P-REC-1. 002300 02 A-FLD-1 PIC X(10). 002400 02 A-FLD-2 PIC X(10). 002500 LD PARAM-2. 002600 01 P-REC-2 PIC X(80). 002700 01 P-REC-3 PIC X(20). 003100 PROGRAM-LIBRARY SECTION. 003200 LB LIB-ONE IMPORT 003300 ATTRIBUTE FUNCTIONNAME IS “THELIBRARY” 003400 LIBACCESS IS BYTITLE. 003500 ENTRY PROCEDURE WRITER. 003600 ENTRY PROCEDURE USERCODE WITH PARAM-2 003700 USING P-REC-2 P-REC-3. 003800 LB LIB-TWO IMPORT 003900 ATTRIBUTE TITLE IS “OBJECT/TASKM/COBOL85/PROCEDURE”. 004000 ENTRY PROCEDURE PROCEDUREDIVISION WITH PARAM-1 004100 USING P-REC-1. 004500 PROCEDURE DIVISION. 004600 P-1. 004700 CHANGE ATTRIBUTE TITLE OF LIB-ONE 004800 TO “OBJECT/TASKM/COBOL85/LIBRARY”. 005000 CALL WRITER. 005100 CALL WRITER OF LIB-ONE. 005200 MOVE ATTRIBUTE TITLE OF LIB-TWO TO THE-TITLE. 005300 CALL USERCODE 005400 USING THE-TITLE USERCODE-1. 005500 MOVE ATTRIBUTE TITLE OF LIB-ONE TO THE-TITLE. 005600 CALL “USERCODE IN OBJECT/TASKM/COBOL85/LIBRARY” 005700 USING THE-TITLE USERCODE-2. 005800 CALL PROCEDUREDIVISION OF LIB-TWO 005900 USING USERCODES. 006000 CALL “OBJECT/TASKM/COBOL85/PROCEDURE” 006100 USING USERCODES. 006200 DISPLAY USERCODES. 006300 STOP RUN.
The program TASKM/COBOL85/PROGRAM illustrates the explicit library declarations and import declarations provided by COBOL85. Thus, the PROGRAM-LIBRARY SECTION at lines 3100-4400 includes declarations of the libraries LIB-ONE and LIB-TWO. These library declarations include library attribute assignments as well as import declarations for WRITER, USERCODE, and PROCEDUREDIVISION.
TASKM/COBOL85/PROGRAM includes examples of the following types of CALL statements:
-
A CALL statement that invokes an explicitly declared import object. The statements at lines 5000 and 5300-5400 are examples that invoke import objects declared in the PROGRAM-LIBRARY SECTION.
-
A CALL statement that invokes an explicitly declared import object in an explicitly specified library. The statements at lines 5100 and 5800 refer to the LIB-ONE and LIB-TWO declarations in the PROGRAM-LIBRARY SECTION.
-
A CALL statement that uses a string literal to specify the library object code file title. The statement at line 6000 invokes the library TASKM/COBOL85/PROCEDURE. The CALL statement does not need to specify the name of a particular import object, as the library in question exports only the PROCEDUREDIVISION.
-
A CALL statement that uses a string literal to specify both the library object code file title and the import object name. The statement at line 5600 invokes the object USERCODE in the library OBJECT/TASKM/COBOL85/LIBRARY.

