Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations Mike Lewis on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

How best to call libraries - PERFORM, CALL , ...?

Status
Not open for further replies.

philhickling

Programmer
Aug 29, 2002
10
0
0
GB
Over the years I have developed a large number of routines, to do common tasks like format a date, strip out spaces, view a file using Wordpad, format and display an error message, etc. I have all these in a few copy libraries, which I include in every program in my applications, and PERFORM them whenever needed. I suspect this isn't the best way, with over 100 sections, and their working storage in every program, whether used or not. I now want to take them out and put them in one place.

What I do works well, and is easy to maintain - but it doesn't seem a good idea to have code copied into hundreds of programs.

What other ways are there of coding and calling these libraries? What is best, and simplest? One program called with procedure pointers to different sections (which I have never used)? One hundred small programs? There must be a better way!

Example of how I do it:
*
**** INIT
PERFORM S50-AUTOMSG.
PERFORM S50-TIME-DIFF-S.
PERFORM S50-DOC-NAME.
PERFORM S99-OPEN-DOC.
/
**** COPYLIBS
COPY "S50.PRO".
........................................................
/
S50-TIME-DIFF-S SECTION.
*************************
*
....
/
S50-DOC-NAME SECTION.
**********************
*
....
etc.

 
I personally use categorised sub-programs having each different ENTRY statements.

Hope This Helps, PH.
Want to get great answers to your Tek-Tips questions? Have a look at FAQ219-2884 or FAQ181-2886
 
You dont say which compiler vendor or version.

I personally prefer several programs.

In some cases I use programs inside programs, where the main program will issue the call to the sub-programs as needed.

When the compiler/runtime allow it I will also create a single object file with the more common (or even all) the programs.
(this is the case of Microfocus, Acucobol and RM/COBOL).

I do not use the ENTRY statement, as not all compilers support it, and its a pain to identify which program is what.

Regards

Frederico Fonseca
SysSoft Integrated Ltd
 
its a pain to identify which program is what
It's why I use several categorised subprograms, eg, one with all my date related routines, another with all my string routines, ...

Hope This Helps, PH.
Want to get great answers to your Tek-Tips questions? Have a look at FAQ219-2884 or FAQ181-2886
 
Generally, I copy my standard code into the programs. But I often use Conditional Compilation (a COBOL standard feature) to select which specific routines to include. That way there is less "dead code" in the programs.
 
Phil,
The best way, in my opinion, if starting from scratch, would be the modular approach where each routine is a separate callable program. Each routine would be dynamically called as and when it is needed.

Unfortunately, you are not starting from scratch, but are working on a number of programs already built. How many programs have the copybooks in? Is the amending of these programs an issue or are you happy with going into each of them, removing the working storage and copybook and coding each separate necessary call?

Marc
 
I have found it useful to capture legacy code into BAT files with replaceable parameters. That way the programs can be generated as needed.

Here is an Example:
Copy the BAT file and then invoke it from the command line thus:

VSAMIO MYVSAMIO 32 80

(In this example it will produce a callable VSAM I/O module named MYVSAMIO.CBL with a key length of 32 and a data length of 80)

Code:
VSAMIO.BAT
@ECHO OFF
IF "%1"=="" GOTO ERROR
IF "%2"=="" GOTO ERROR
IF "%3"=="" GOTO ERROR
ECHO       ******************************************************************  > %1.CPY
ECHO        01  %1-PARAMETERS.                                                >> %1.CPY
ECHO       ****************************************************************** >> %1.CPY
ECHO       *                                                                  >> %1.CPY
ECHO            05  %1-CALL-FUNCTION  PIC X(02).                              >> %1.CPY
ECHO                78  %1-READ-KEY       VALUE "RK".                         >> %1.CPY
ECHO                78  %1-READ-NEXT      VALUE "RN".                         >> %1.CPY
ECHO                78  %1-READ-PREVIOUS  VALUE "RP".                         >> %1.CPY
ECHO                78  %1-READ-FIRST     VALUE "RF".                         >> %1.CPY
ECHO                78  %1-READ-LAST      VALUE "RL".                         >> %1.CPY
ECHO                78  %1-WRITE-RECORD   VALUE "WR".                         >> %1.CPY
ECHO                78  %1-REWRITE-RECORD VALUE "RR".                         >> %1.CPY
ECHO                78  %1-DELETE-RECORD  VALUE "DR".                         >> %1.CPY
ECHO                78  %1-START-EQUAL    VALUE "SE".                         >> %1.CPY
ECHO                78  %1-START-LT       VALUE "SL".                         >> %1.CPY
ECHO                78  %1-START-GT       VALUE "SG".                         >> %1.CPY
ECHO                78  %1-OPEN-FILE      VALUE "OF".                         >> %1.CPY
ECHO                78  %1-CLOSE-FILE     VALUE "CF".                         >> %1.CPY
ECHO            05  %1-RETURN-CODE    PIC X(02).                              >> %1.CPY
ECHO            05  %1-FILE-ID        PIC X(256).                             >> %1.CPY
ECHO            05  %1-RECORD-WORK.                                           >> %1.CPY
ECHO                10  %1-KEY        PIC X(%2).                              >> %1.CPY
ECHO                10  %1-DATA       PIC X(%3).                              >> %1.CPY
ECHO       *                                                                  >> %1.CPY
ECHO       **** %1-SAMPLES-LINES.                                             >> %1.CPY
ECHO       *                                                                  >> %1.CPY
ECHO       *    MOVE %1-READ-KEY        TO %1-CALL-FUNCTION.                  >> %1.CPY
ECHO       *    MOVE %1-READ-NEXT       TO %1-CALL-FUNCTION.                  >> %1.CPY
ECHO       *    MOVE %1-READ-PREVIOUS   TO %1-CALL-FUNCTION.                  >> %1.CPY
ECHO       *    MOVE %1-READ-FIRST      TO %1-CALL-FUNCTION.                  >> %1.CPY
ECHO       *    MOVE %1-READ-LAST       TO %1-CALL-FUNCTION.                  >> %1.CPY
ECHO       *    MOVE %1-WRITE-RECORD    TO %1-CALL-FUNCTION.                  >> %1.CPY
ECHO       *    MOVE %1-REWRITE-RECORD  TO %1-CALL-FUNCTION.                  >> %1.CPY
ECHO       *    MOVE %1-DELETE-RECORD   TO %1-CALL-FUNCTION.                  >> %1.CPY
ECHO       *    MOVE %1-START-EQUAL     TO %1-CALL-FUNCTION.                  >> %1.CPY
ECHO       *    MOVE %1-START-LT        TO %1-CALL-FUNCTION.                  >> %1.CPY
ECHO       *    MOVE %1-START-GT        TO %1-CALL-FUNCTION.                  >> %1.CPY
ECHO       *    MOVE %1-OPEN-FILE       TO %1-CALL-FUNCTION.                  >> %1.CPY
ECHO       *    MOVE %1-CLOSE-FILE      TO %1-CALL-FUNCTION.                  >> %1.CPY
ECHO       *    MOVE ZERO               TO %1-RETURN-CODE.                    >> %1.CPY
ECHO       *    MOVE "XXXXXXXXXXXXXXX"  TO %1-FILE-ID.                        >> %1.CPY
ECHO       *    MOVE "XXXXXXXXXXXXXXX"  TO %1-RECORD-WORK.                    >> %1.CPY
ECHO       *    PERFORM 9000-CALL-%1.                                         >> %1.CPY
ECHO       *9000-CALL-%1.                                                     >> %1.CPY
ECHO       *    CALL "%1" USING %1-PARAMETERS.                                >> %1.CPY
ECHO       ****************************************************************** >> %1.CPY
ECHO       *                                                                  >> %1.CPY
ECHO       ******************************************************************  > %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO        IDENTIFICATION DIVISION.                                          >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO        PROGRAM-ID.    %1.                                                >> %1.CBL
ECHO        AUTHOR.        CLIVE CUMMINS.                                     >> %1.CBL
ECHO        INSTALLATION.  TUBULARITY.                                        >> %1.CBL
ECHO        DATE-WRITTEN.  JAN  1, 1996.                                      >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO       *-**************************************************************** >> %1.CBL
ECHO       *-                          %1                                     >> %1.CBL
ECHO       *-                                                                 >> %1.CBL
ECHO       *-                     VSAM FILE IO MODULE                       * >> %1.CBL
ECHO       *-**************************************************************** >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO       *    MODIFICATION LOG                                              >> %1.CBL
ECHO       *    CCYYMMDD MODIFICATION                                         >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO        ENVIRONMENT DIVISION.                                             >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO        INPUT-OUTPUT SECTION.                                             >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO        FILE-CONTROL.                                                     >> %1.CBL
ECHO            SELECT %1-FILE ASSIGN %1-FILE-ID                              >> %1.CBL
ECHO                FILE STATUS IS %1-RETURN-CODE                             >> %1.CBL
ECHO                ACCESS IS DYNAMIC                                         >> %1.CBL
ECHO                ORGANIZATION IS INDEXED                                   >> %1.CBL
ECHO                RECORD KEY IS %1-REC-KEY.                                 >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO        DATA DIVISION.                                                    >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO        FILE SECTION.                                                     >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO       ********************************                                   >> %1.CBL
ECHO        FD  %1-FILE.                                                      >> %1.CBL
ECHO       ********************************                                   >> %1.CBL
ECHO        01  %1-RECORD.                                                    >> %1.CBL
ECHO            02  %1-REC-KEY   PIC X(%2).                                   >> %1.CBL
ECHO            02  %1-REC-DATA  PIC X(%3).                                   >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO        WORKING-STORAGE SECTION.                                          >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO        01  PROGRAM-DETAILS.                                              >> %1.CBL
ECHO            05  PROGRAM-RELEASE.                                          >> %1.CBL
ECHO                10  PROGRAM-NAME PIC X(08) VALUE '%1'.                    >> %1.CBL
ECHO                10  PROGRAM-REL  PIC X(08) VALUE '  1.0.00'.              >> %1.CBL
ECHO            05  PROGRAM-COPYRIGHT.                                        >> %1.CBL
ECHO                10  PROGRAM-COPY PIC X(16) VALUE 'COPYRIGHT: 1996'.       >> %1.CBL
ECHO                10  PROGRAM-AUTH PIC X(16) VALUE ' Clive Cummins.'.       >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO        LINKAGE SECTION.                                                  >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO        COPY %1.CPY.                                                      >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO        PROCEDURE DIVISION USING %1-PARAMETERS.                           >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO        1000-CONTROL.                                                     >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO            MOVE %1-KEY  TO %1-REC-KEY.                                   >> %1.CBL
ECHO            MOVE %1-DATA TO %1-REC-DATA.                                  >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO            EVALUATE %1-CALL-FUNCTION                                     >> %1.CBL
ECHO              WHEN EQUAL %1-READ-KEY       PERFORM READ-KEY               >> %1.CBL
ECHO              WHEN EQUAL %1-READ-NEXT      PERFORM READ-NEXT              >> %1.CBL
ECHO              WHEN EQUAL %1-READ-PREVIOUS  PERFORM READ-PREVIOUS          >> %1.CBL
ECHO              WHEN EQUAL %1-READ-FIRST     PERFORM READ-FIRST             >> %1.CBL
ECHO              WHEN EQUAL %1-READ-LAST      PERFORM READ-LAST              >> %1.CBL
ECHO              WHEN EQUAL %1-WRITE-RECORD   PERFORM WRITE-RECORD           >> %1.CBL
ECHO              WHEN EQUAL %1-REWRITE-RECORD PERFORM REWRITE-RECORD         >> %1.CBL
ECHO              WHEN EQUAL %1-DELETE-RECORD  PERFORM DELETE-RECORD          >> %1.CBL
ECHO              WHEN EQUAL %1-START-EQUAL    PERFORM START-EQUAL            >> %1.CBL
ECHO              WHEN EQUAL %1-START-LT       PERFORM START-LT               >> %1.CBL
ECHO              WHEN EQUAL %1-START-GT       PERFORM START-GT               >> %1.CBL
ECHO              WHEN EQUAL %1-OPEN-FILE      PERFORM OPEN-FILE              >> %1.CBL
ECHO              WHEN EQUAL %1-CLOSE-FILE     PERFORM CLOSE-FILE             >> %1.CBL
ECHO            END-EVALUATE.                                                 >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO            MOVE %1-REC-KEY  TO %1-KEY.                                   >> %1.CBL
ECHO            MOVE %1-REC-DATA TO %1-DATA.                                  >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO            GOBACK.                                                       >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO        OPEN-FILE.                                                        >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO            OPEN I-O %1-FILE.                                             >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO        READ-FIRST.                                                       >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO            MOVE LOW-VALUES TO %1-RECORD.                                 >> %1.CBL
ECHO            PERFORM START-GT.                                             >> %1.CBL
ECHO            PERFORM READ-NEXT.                                            >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO        READ-LAST.                                                        >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO            MOVE HIGH-VALUES TO %1-RECORD.                                >> %1.CBL
ECHO            PERFORM START-LT.                                             >> %1.CBL
ECHO            PERFORM READ-NEXT.                                            >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO        READ-PREVIOUS.                                                    >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO            PERFORM START-LT.                                             >> %1.CBL
ECHO            PERFORM READ-NEXT.                                            >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO        READ-NEXT.                                                        >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO            READ %1-FILE NEXT.                                            >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO        READ-KEY.                                                         >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO            READ %1-FILE KEY IS %1-REC-KEY.                               >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO        START-EQUAL.                                                      >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO            START %1-FILE KEY IS EQUAL %1-REC-KEY.                        >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO        START-LT.                                                         >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO            START %1-FILE KEY IS LESS THAN %1-REC-KEY.                    >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO        START-GT.                                                         >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO            START %1-FILE KEY IS GREATER THAN %1-REC-KEY.                 >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO        REWRITE-RECORD.                                                   >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO            REWRITE %1-RECORD.                                            >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO        WRITE-RECORD.                                                     >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO            WRITE %1-RECORD.                                              >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO        DELETE-RECORD.                                                    >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO            DELETE %1-FILE RECORD.                                        >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO        CLOSE-FILE.                                                       >> %1.CBL
ECHO       ****************************************************************** >> %1.CBL
ECHO       *                                                                  >> %1.CBL
ECHO            CLOSE %1-FILE.                                                >> %1.CBL
ECHO       *                                                                  >> %1.CBL

TYPE  %1.CBL
GOTO END
:ERROR
 ECHO         ****************************************
 ECHO         Builds a callable COBOL file handler
 ECHO         for a VSAM file.
 ECHO         ****************************************
 ECHO         Parameter(s)...
 ECHO         1 = ProgID
 ECHO         2 = VSAM Key length
 ECHO         3 = VSAM Data length
:END

Clive
 
This can be doe with "COPY . . .RPLACING" syntax. Simpler, and pure cobol.
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top