COBOL: Use of EXTERNAL mode in file OPEN

By Abhishek

Using the EXTERNAL clause for files allows separately compiled programs within the run unit to have access to common files. The advantages of using EXTERNAL files are

  1. The main program can reference the record area of the file, even though the main program does not contain any I-O statements.
  2. Each subprogram can control a single I-O function, such as OPEN, or READ.
  3. Each program has access to the file.
The following examples explains it all. The first program TEMP1 opens and writes to the file. It then calls another program called TEMP2 which also writes a record to the same file and returns back to TEMP1. TEMP1 then closes the file.

000100***************************************************************** 00010000
000200*               IDENTIFICATION DIVISION                           00020000
000300***************************************************************** 00030000
000400                                                                  00040000
000500 IDENTIFICATION DIVISION.                                         00050000
000600                                                                  00060000
000700 PROGRAM-ID.                TEMP1.                                00070000
000800 AUTHOR.                    ABHISHEK CHAUDHARY.                   00080000
000900 INSTALLATION.              ASC CORPORATE HEADQUARTERS.           00090000
001000 DATE-WRITTEN.              10 JULY 1997.                         00100000
001100 DATE-COMPILED.             12 JULY 1997.                         00110000
001137 ENVIRONMENT DIVISION.                                            00113700
001138 INPUT-OUTPUT SECTION.                                            00113800
001139 FILE-CONTROL.                                                    00113900
001140                                                                  00114000
001150     SELECT TEMP-FILE ASSIGN TO TEMP                              00115001
001160            STATUS IS WS-FILE-STATUS.                             00116000
001170                                                                  00117000
001520 DATA DIVISION.                                                   00152000
001530****************                                                  00153000
001540 FILE SECTION.                                                    00154000
002300 FD TEMP-FILE IS EXTERNAL                                         00230004
002400      RECORDING MODE IS F                                         00240000
002500      LABEL RECORDS ARE OMITTED                                   00250000
002600      RECORD CONTAINS 80 CHARACTERS                               00260000
002700      BLOCK CONTAINS 0 RECORDS.                                   00270000
002800                                                                  00280000
002900 01   TEMP-FILE-RECORD        PIC X(80).                          00290001
003000                                                                  00300000
003500 WORKING-STORAGE SECTION.                                         00350000
003600**************************                                        00360000
003700                                                                  00370000
004590 01 WS-STATUS.                                                    00459000
004600    05 WS-FILE-STATUS             PIC X(2).                       00460000
004720                                                                  00472000
004730 01 WS-DISPLAY                    PIC X(80) VALUE SPACES.         00473000
004740 01 WS-TEMP2                      PIC X(08) VALUE 'TEMP2'.        00474000
004750                                                                  00475000
 007400 PROCEDURE DIVISION.                                              00740000
007401********************                                              00740100
012418                                                                  01241800
012419     DISPLAY 'NOW IN TEMP1.'                                      01241902
012420     OPEN OUTPUT TEMP-FILE                                        01242004
012421     IF WS-FILE-STATUS NOT = '00'                                 01242103
012430       DISPLAY 'ERRTEMP1: TEMP-FILE NOT OPEN. '                   01243001
012440               'FILE STATUS: ' WS-FILE-STATUS                     01244000
012450       STOP RUN                                                   01245000
012460     END-IF                                                       01246000
012490                                                                  01249000
012500     MOVE 'NOW IN PROGRAM TEMP1.'     TO WS-DISPLAY               01250001
012600     MOVE WS-DISPLAY                  TO TEMP-FILE-RECORD         01260001
014420     WRITE TEMP-FILE-RECORD                                       01442001
014421     IF WS-FILE-STATUS NOT = '00'                                 01442103
014422       DISPLAY 'ERRTEMP1: ERROR WRITING TO TEMP-FILE. '           01442201
014423               'FILE STATUS: ' WS-FILE-STATUS                     01442300
014424       STOP RUN                                                   01442400
014425     END-IF                                                       01442500
014426                                                                  01442600
014500     DISPLAY 'ABOUT TO CALL TEMP2'                                01450000
014510     CALL WS-TEMP2                                                01451000
014520     CANCEL WS-TEMP2                                              01452000
014521     DISPLAY 'RETURNED FROM TEMP2'                                01452100
014522                                                                  01452204
014523     CLOSE TEMP-FILE                                              01452304
014524     IF WS-FILE-STATUS NOT = '00'                                 01452404
014525       DISPLAY 'ERRTEMP1: TEMP-FILE NOT CLOSED. '                 01452504
014526               'FILE STATUS: ' WS-FILE-STATUS                     01452604
014527       STOP RUN                                                   01452704
014528     END-IF                                                       01452804
014529                                                                  01452904
014530     STOP RUN                                                     01453000
014600     .                                                            01460000
014700                                                                  01470000
 
Go To Top

 000100***************************************************************** 00010000
000200*               IDENTIFICATION DIVISION                           00020000
000300***************************************************************** 00030000
000400                                                                  00040000
000500 IDENTIFICATION DIVISION.                                         00050000
000600                                                                  00060000
000700 PROGRAM-ID.                TEMP2.                                00070000
000800 AUTHOR.                    ABHISHEK CHAUDHARY.                   00080000
000900 INSTALLATION.              ASC CORPORATE HEADQUARTERS.           00090000
001000 DATE-WRITTEN.              10 JULY 1997.                         00100000
001100 DATE-COMPILED.             12 JULY 1997.                         00110000
001110 ENVIRONMENT DIVISION.                                            00111000
001120 INPUT-OUTPUT SECTION.                                            00112000
001130 FILE-CONTROL.                                                    00113000
001140                                                                  00114000
001150     SELECT TEMP-FILE ASSIGN TO TEMP                              00115000
001160            STATUS IS WS-FILE-STATUS.                             00116000
001170                                                                  00117000
001180 DATA DIVISION.                                                   00118000
001190****************                                                  00119000
001200 FILE SECTION.                                                    00120000
001300 FD TEMP-FILE IS EXTERNAL                                         00130003
001400      RECORDING MODE IS F                                         00140000
001500      LABEL RECORDS ARE OMITTED                                   00150000
001600      RECORD CONTAINS 80 CHARACTERS                               00160000
001700      BLOCK CONTAINS 0 RECORDS.                                   00170000
001800                                                                  00180000
001900 01   TEMP-FILE-RECORD        PIC X(80).                          00190000
002000                                                                  00200000
002100 WORKING-STORAGE SECTION.                                         00210000
002200**************************                                        00220000
002300                                                                  00230000
002400 01 WS-STATUS.                                                    00240000
002500    05 WS-FILE-STATUS             PIC X(2).                       00250000
002600                                                                  00260000
002700 01 WS-DISPLAY                    PIC X(80) VALUE SPACES.         00270000
002900                                                                  00290000
002910 LINKAGE SECTION.                                                 00291001
003000                                                                  00300000
003100 PROCEDURE DIVISION.                                              00310000
003200********************                                              00320000
003300                                                                  00330000
003310     DISPLAY 'NOW IN TEMP2'                                       00331001
004100     MOVE 'NOW IN PROGRAM TEMP2.'     TO WS-DISPLAY               00410000
004200     MOVE WS-DISPLAY                  TO TEMP-FILE-RECORD         00420000
004300     WRITE TEMP-FILE-RECORD                                       00430000
004400     IF WS-FILE-STATUS NOT = '00'                                 00440002
004500       DISPLAY 'ERRTEMP2: ERROR WRITING TO TEMP-FILE. '           00450000
004600               'FILE STATUS: ' WS-FILE-STATUS                     00460000
004700       GOBACK                                                     00470000
004800     END-IF                                                       00480000
004801                                                                  00480104
004810     MOVE 'GOING BACK TO  TEMP1.'     TO WS-DISPLAY               00481004
004820     MOVE WS-DISPLAY                  TO TEMP-FILE-RECORD         00482004
004830     WRITE TEMP-FILE-RECORD                                       00483004
004840     IF WS-FILE-STATUS NOT = '00'                                 00484004
004850       DISPLAY 'ERRTEMP2: ERROR WRITING TO TEMP-FILE. '           00485004
004860               'FILE STATUS: ' WS-FILE-STATUS                     00486004
004870       GOBACK                                                     00487004
004880     END-IF                                                       00488004
004900     GOBACK                                                       00490003
006200     .                                                            00620000
006300                                                                  00630000
 
 

Go To Top


Send me an email