Limited supportBMC provides limited support for this version of the product. As a result, BMC no longer accepts comments in this space. If you encounter problems with the product version or the space, contact BMC Support.BMC recommends upgrading to the latest version of the product. To see documentation for that version, see LOADPLUS for DB2 13.1.

Sample COBOL II and LE COBOL user exit


This topic illustrates a sample user exit written in COBOL.

Following is a sample COBOL II and LE COBOL user exit:

      *-----------------------------------------------------------------
      * ALL COBOL MODULES MUST BE COMPILED WITH DATA(31) AND DYNAM TO
      * EXECUTE PROPERLY!!!!!!!!
      *-----------------------------------------------------------------
       IDENTIFICATION  DIVISION.
      *-----------------------------------------------------------------
       PROGRAM-ID.     AMUEDSN2.
       AUTHOR.         BMC SOFTWARE
       DATE-WRITTEN.   AUGUST 1995.
       DATE-COMPILED.
      *-----------------------------------------------------------------
      * AMUEDSN2 IS A SAMPLE DB2 COBOL II USER EXIT.
      *
      * THIS IS A SAMPLE LOADPLUS USER EXIT.   THIS EXIT WOULD BE USED
      * IN ORDER TO DEFINE USER VARIABLES FOR BUILDING DATASET NAMES
      * FOR DYNAMIC WORKFILE ALLOCATION WITH THE DSNPAT KEYWORD.
      *
      * AMUEDSN2 IS CALLED ONLY ONCE PER EXECUTION OF AMUUMAIN
      * THE MODULE IS CALLED AT THE BEGINNING OF EITHER THE PRELOAD
      * PHASE OR THE COMBINED PHASE.
      *
      * THIS EXIT WILL ONLY BE INVOKED WHEN IT IS THE VALUE SET FOR
      * DSNUEXIT PARM IN AMU$OPTS DURING INSTALLATION OR IN THE
      * DSNUEXIT PARAMETER OF THE LOAD COMMAND.  THE LOAD COMMAND
      * OPTION WILL OVERRIDE THE PARM IN THE AMU$OPTS MACRO.
      *
      * PLEASE REVIEW ADDITIONAL DOCUMENTION IN THE REFERENCE MANUAL
      *-----------------------------------------------------------------

       ENVIRONMENT     DIVISION.
       INPUT-OUTPUT    SECTION.
       FILE-Control.
       DATA            DIVISION.
       FILE            SECTION.
       EJECT
      *-----------------------------------------------------------------
       WORKING-STORAGE SECTION.
      *-----------------------------------------------------------------

       01  FILLER                 PIC X(16) VALUE 'WORKING STORAGE '.

      *-----------------------------------------------------------------
      *    MISCELLANEOUS LITERALS, TABLE SUBSCRIPTS, NUMERIC VALUES
      *    FOR JULIAN-DATE OR JULIAN/CENTURY-DATE CONVERSION, ETC.
      *-----------------------------------------------------------------

       01  MISCELLANEOUS.
           05  SAVE-DATA          PIC X(8)          VALUE SPACES.
           05  DAYS-SUBX          PIC S9(3) COMP    VALUE ZERO.
           05  SUBX               PIC S9(3) COMP    VALUE ZERO.
           05  ONE                PIC S9(1) COMP-3  VALUE +1.
           05  TWO                PIC S9(1) COMP-3  VALUE +2.
           05  FOUR               PIC S9(1) COMP-3  VALUE +4.
           05  MAX-LENGTH         PIC S9(3) COMP-3  VALUE +16.
           05  NINETEEN           PIC S9(3) COMP-3  VALUE +19.
           05  TWENTY             PIC S9(3) COMP-3  VALUE +20.
           05  NINETY-FIVE        PIC S9(3) COMP-3  VALUE +95.
           05  ONE-HUNDRED        PIC S9(3) COMP-3  VALUE +100.
           05  FOUR-HUNDRED       PIC S9(3) COMP-3  VALUE +400.
           05  JULIAN-DATE-DESC   PIC X(9)          VALUE '_JDATE'.
           05  JULIAN-CDATE-DESC  PIC X(9)          VALUE '_JCDATE'.
           05  UTILITY-PREFIX     PIC X(9)          VALUE '_UTILPFX'.
           05  UTILITY-SUFFIX     PIC X(9)          VALUE '_UTILSFX'.
           05  UTILID-PREFIX      PIC X(8)          VALUE SPACES.
           05  UTILID-SUFFIX      PIC X(8)          VALUE SPACES.
           05  UTILID-POINTER     PIC S9(3)         VALUE ZERO.
           05  UTILID-COUNTER     PIC S9(3)         VALUE ZERO.
           05  UTILID-TALLY       PIC S9(3)         VALUE ZERO.

       01  DATE-WORK-AREA.
           05  CONVERTED-DATE.
               10  DATE-PREFIX            PIC X(1)     VALUE 'D'.
               10  JULIAN-CDATE           PIC 9(7)     VALUE ZERO.
               10  FILLER REDEFINES JULIAN-CDATE.
                   15  JULIAN-CC          PIC 9(2).
                   15  JULIAN-DATE        PIC 9(5).
                   15  FILLER REDEFINES JULIAN-DATE.
                       20  JULIAN-YY      PIC 9(2).
                       20  JULIAN-DAYS    PIC 9(3).
           05  WORK-YEAR                  PIC S9(3) COMP-3 VALUE ZERO.
           05  YEAR-ANSWER                PIC S9(3) COMP-3 VALUE ZERO.
           05  YEAR-REMAINDER             PIC S9(9) COMP-3 VALUE ZERO.
           05  FILLER REDEFINES YEAR-REMAINDER.
               10  YEAR-X                 PIC X(5).

      *-----------------------------------------------------------------
      *    THE FOLLOWING TWO TABLES ARE USED TO CALCULATE THE JULIAN
      *    DAY DEPENDING ON WHETHER THE YEAR IS A LEAP OR NOT.
      *-----------------------------------------------------------------

       01  NO-LEAP-MONTHS.
           05  JANUARY             PIC S9(3)  COMP-3  VALUE 00.
           05  FEBUARY             PIC S9(3)  COMP-3  VALUE 31.
           05  MARCH               PIC S9(3)  COMP-3  VALUE 59.
           05  APRIL               PIC S9(3)  COMP-3  VALUE 90.
           05  MAY                 PIC S9(3)  COMP-3  VALUE 120.
           05  JUNE                PIC S9(3)  COMP-3  VALUE 151.
           05  JULY                PIC S9(3)  COMP-3  VALUE 181.
           05  AUGUST              PIC S9(3)  COMP-3  VALUE 212.
           05  SEPTEMBER           PIC S9(3)  COMP-3  VALUE 243.
           05  OCTOBER             PIC S9(3)  COMP-3  VALUE 273.
           05  NOVEMBER            PIC S9(3)  COMP-3  VALUE 304.
           05  DECEMBER            PIC S9(3)  COMP-3  VALUE 334.
       01  FILLER REDEFINES NO-LEAP-MONTHS.
           05  MONTH-DAYS          PIC S9(3)  COMP-3  OCCURS 12 TIMES.

       01  LEAP-MONTHS.
           05  LEAP-JANUARY        PIC S9(3)  COMP-3  VALUE 00.
           05  LEAP-FEBRUARY       PIC S9(3)  COMP-3  VALUE 31.
           05  LEAP-MARCH          PIC S9(3)  COMP-3  VALUE 60.
           05  LEAP-APRIL          PIC S9(3)  COMP-3  VALUE 91.
           05  LEAP-MAY            PIC S9(3)  COMP-3  VALUE 121.
           05  LEAP-JUNE           PIC S9(3)  COMP-3  VALUE 152.
           05  LEAP-JULY           PIC S9(3)  COMP-3  VALUE 182.
           05  LEAP-AUGUST         PIC S9(3)  COMP-3  VALUE 213.
           05  LEAP-SEPTEMBER      PIC S9(3)  COMP-3  VALUE 244.
           05  LEAP-OCTOBER        PIC S9(3)  COMP-3  VALUE 274.
           05  LEAP-NOVEMBER       PIC S9(3)  COMP-3  VALUE 305.
           05  LEAP-DECEMBER       PIC S9(3)  COMP-3  VALUE 335.
       01  FILLER REDEFINES LEAP-MONTHS.
           05  LEAP-MONTH-DAYS     PIC S9(3)  COMP-3  OCCURS 12 TIMES.

     *-----------------------------------------------------------------
       LINKAGE SECTION.
      *-----------------------------------------------------------------
      *    THE TABLE CAN NOT OCCUR MORE THAN 100 TIME OR A STORAGE
      *    OVERLAY WILL OCCUR.
      *-----------------------------------------------------------------
       01  LOAD-EXIT-PARMS.
           05  FIXED-PARM-VALUES.
               10  EXIT-JOBNAME              PIC X(8).
               10  EXIT-STEPNAME             PIC X(8).
               10  EXIT-DBNAME               PIC X(8).
               10  EXIT-TSNAME               PIC X(8).
               10  EXIT-RESUME               PIC X(1).
               10  EXIT-REPLACE              PIC X(1).
               10  EXIT-FILLER1              PIC X(2).
               10  EXIT-USERID               PIC X(8).
               10  EXIT-DB2-SSID             PIC X(4).
               10  EXIT-DATE.
                   15  EXIT-MM               PIC 9(2).
                   15  EXIT-DD               PIC 9(2).
                   15  EXIT-YY               PIC 9(2).
               10  EXIT-TIME                 PIC X(6).
               10  EXIT-UTILID-PARM          PIC X(16).
               10  FILLER REDEFINES EXIT-UTILID-PARM.
                   15  EXIT-PREFIX           PIC X(8).
                   15  EXIT-SUFFIX           PIC X(8).
               10  EXIT-DATE8.
                   15  EXIT-DATE8-MM         PIC 9(2).
                   15  EXIT-DATE8-DD         PIC 9(2).
                   15  EXIT-DATE8-YEAR       PIC 9(4).
                   15  FILLER REDEFINES EXIT-DATE8-YEAR.
                       20  EXIT-DATE8-CC     PIC 9(2).
                       20  EXIT-DATE8-YY     PIC 9(2).
               10  EXIT-GRPNM                PIC X(4).
               10  EXIT-VCAT                 PIC X(8).
               10  EXIT-DATEJ.
                   15  EXIT-DATEJ-YEAR       PIC 9(4).
                   15  FILLER REDEFINES EXIT-DATEJ-YEAR.
                       20  EXIT-DATEJ-CC     PIC 9(2).
                       20  EXIT-DATEJ-CC     PIC 9(2).
                   15  EXIT-DATEJ-DDD        PIC 9(3).
               10  EXIT-FILLER2              PIC X(13).

           05  WORK-AREA-ADDRESSES.
               10  WORK-AREA-1               PIC 9(4).
               10  WORK-AREA-2               PIC 9(4).
               10  WORK-AREA-3               PIC 9(4).
               10  WORK-AREA-4               PIC 9(4).
               10  WORK-AREA-5               PIC 9(4).
               10  WORK-AREA-6               PIC 9(4).
               10  WORK-AREA-7               PIC 9(4).
               10  WORK-AREA-8               PIC 9(4).

           05  USER-DEFINED-VARILABLE-TABLE OCCURS 100 TIMES.
               10  VARIABLE-NAME             PIC X(9).
               10  VARIABLE-VALUE            PIC X(8).
               10  FILLER REDEFINES VARIABLE-VALUE.
                   15  VARIABLE-PREFIX       PIC X(1).
                   15  VARIABLE-JUL-DATE     PIC X(7).

      *-----------------------------------------------------------------
       PROCEDURE DIVISION USING LOAD-EXIT-PARMS.
      *-----------------------------------------------------------------

       0000-MAIN.
           MOVE ZERO TO RETURN-CODE.
           PERFORM 1000-PROCESS-DATE.
           GOBACK.

      *-----------------------------------------------------------------
      *    THE DATE IS PASSED IN A MMDDYYYY FORMAT AND CONVERTED TO
      *    A JULIAN-DATE(WITH NO CENTURY) FORMAT OR A JULIAN-DATE
      *    (WITH THE CENTURY) FORMAT.
      *-----------------------------------------------------------------

       1000-PROCESS-DATE.
           MOVE EXIT-DATE8-DD   TO JULIAN-DAYS.
           MOVE EXIT-DATE8-MM   TO DAYS-SUBX.
           MOVE EXIT-DATE8-CC   TO JULIAN-CC.
           MOVE EXIT-DATE8-YY   TO JULIAN-YY.
           MOVE EXIT-DATE8-YEAR TO WORK-YEAR.

           DIVIDE WORK-YEAR BY FOUR
                     GIVING YEAR-ANSWER
                     REMAINDER YEAR-REMAINDER.

           IF YEAR-REMAINDER > ZERO
               THEN
                   PERFORM 1100-NO-LEAP-YEAR
               ELSE
                   DIVIDE WORK-YEAR BY ONE-HUNDRED
                            GIVING YEAR-ANSWER
                            REMAINDER YEAR-REMAINDER
                   IF YEAR-REMAINDER > ZERO
                       THEN
                           PERFORM 1200-LEAP-YEAR
                       ELSE
                           DIVIDE WORK-YEAR BY FOUR-HUNDRED
                                     GIVING YEAR-ANSWER
                                     REMAINDER YEAR-REMAINDER
                           IF YEAR-REMAINDER > ZERO
                               THEN
                                   PERFORM 1100-NO-LEAP-YEAR
                               ELSE
                                   ADD LEAP-MONTH-DAYS(DAYS-SUBX)
                                                    TO JULIAN-DAYS
                                   PERFORM 1200-LEAP-YEAR
                           END-IF
                   END-IF
           END-IF.

       1000-PROCESS-DATE-EXIT.
           EXIT.

       1100-NO-LEAP-YEAR.
           ADD MONTH-DAYS(DAYS-SUBX) TO JULIAN-DAYS.
           PERFORM 1300-CENTURY.

       1100-NO-LEAP-YEAR-EXIT.
           EXIT.

       1200-LEAP-YEAR.
           ADD LEAP-MONTH-DAYS(DAYS-SUBX) TO JULIAN-DAYS.
           PERFORM 1300-CENTURY.

       1200-LEAP-YEAR-EXIT.
           EXIT.

       1300-CENTURY.
           PERFORM 1400-EDIT-UTILID.

       1300-CENTURY-EXIT.
           EXIT.

      *-----------------------------------------------------------------
      *    THE FULL 16 BYTES OF THE UTILITY ID PARM IS CHECKED FOR
      *    A DELIMITER.  IF ONE IS FOUND AFTER THE FIRST 8 BYTES, IT
      *    IS INCLUDED IN THE SUFFIX.  IF A DELIMITER IS FOUND IN THE
      *    FIRST 8 BYTES, ONLY THOSE CHARACTERS/NUMBERS UP TO THE
      *    DELIMITER, WILL BE MOVED INTO THE PREFIX FIELD.
      *-----------------------------------------------------------------
      *    THE DELIMITER CHARACTER IMMEDIATELY FOLLOWING THE FORWARD
      *    SLASH ('/') IS A BROKEN VERTICAL BAR, HEX 6A, AND IS NOT
      *    DISPLAYABLE IN BOOKMANAGER
      *-----------------------------------------------------------------

       1400-EDIT-UTILID.
           MOVE ONE TO UTILID-POINTER, UTILID-TALLY.
           UNSTRING EXIT-UTILID-PARM
                    DELIMITED BY ' ' OR '.' OR '+' OR '|' OR ';'
                       OR '-' OR '/' OR '' OR ',' OR '_' OR ':'
                       OR '=' OR '/'
                   INTO UTILID-PREFIX
                        COUNT IN UTILID-COUNTER
                        WITH POINTER UTILID-POINTER.
           IF UTILID-COUNTER = MAX-LENGTH
               THEN
                   MOVE EXIT-SUFFIX TO UTILID-SUFFIX
               ELSE
                   MOVE UTILID-COUNTER TO UTILID-POINTER
                   ADD TWO TO UTILID-POINTER
                   UNSTRING EXIT-UTILID-PARM
                       INTO UTILID-SUFFIX
                       WITH POINTER UTILID-POINTER
           END-IF.
           PERFORM 1500-UTILID-PARMS.

       1400-EDIT-UTILID-EXIT.
           EXIT.

       1500-UTILID-PARMS.
           MOVE ONE TO SUBX.
           MOVE UTILITY-PREFIX TO VARIABLE-NAME(SUBX).
           MOVE UTILID-PREFIX TO VARIABLE-VALUE(SUBX).

           ADD ONE TO SUBX.
           MOVE UTILITY-SUFFIX TO VARIABLE-NAME(SUBX).
           MOVE UTILID-SUFFIX TO VARIABLE-VALUE(SUBX).

           ADD ONE TO SUBX.
           MOVE JULIAN-DATE-DESC TO VARIABLE-NAME(SUBX).
           MOVE DATE-PREFIX TO VARIABLE-PREFIX(SUBX).
           MOVE JULIAN-DATE TO VARIABLE-JUL-DATE(SUBX).

           ADD ONE TO SUBX.
           MOVE JULIAN-CDATE-DESC TO VARIABLE-NAME(SUBX).
           MOVE CONVERTED-DATE TO VARIABLE-VALUE(SUBX).

       1500-UTILID-PARMS-EXIT.
           EXIT.


 

Tip: For faster searching, add an asterisk to the end of your partial query. Example: cert*