Review of ClibGen
by
Shawn M. Gordon
President
S.M.Gordon & Associates

Introduction

This time around we have a COBOL programmers utility, and as far as I am concerned, you can never have to many tools for making programming easier, especially for COBOL. ClibGen is a utility that build and maintains COBOL copy libraries and include files. ClibGen will also establish Procedure Division programming for various IMAGE database calls, to help enforce coding standards.

I ran ClibGen on my HP 3000 series 925 running MPE/iX 4.0.

Features

ClibGen is a command line interface program, some of the commands have immediate actions, and other commands set options for generating output. So what is it that ClibGen actually do? Well at it’s most basic, you can point it to a dataset, or an entire database, and have it generate all the working storage records layouts for you in either a COPYLIB or as an INCLUDE file. Optionally it can also generate the PROCEDURE DIVISION code that will add, update, retrieve, and delete your database, for the datasets that you generated. There is even an option to generate code to take advantage of SpeedDemon routines from Robelle.

The manual states that ClibGen can work with Image databases, COBOL copy libraries, COBOL INCLUDE files, SpeedWare catalogs, COGNOS data dictionaries, and Self Describing files. However my release only worked with IMAGE, and generated COBOL output. The version that supports all the other file formats should be available by the time you read this review.

So how would a typical session with ClibGen work, see Figure 1 for a sample of how you would start up. The ClibGen command is CG>

------------------------------------------------------

Figure 1



:clibgen.pub.vvl
ClibGen A.00.00  Copyright (c) 1994-1995 VVL Associates, Inc.
Liscensed to: Shawn Gordon  <[>Demo 12/1/95]                       





I TRACE.PUB

Input file is set to TRACE.PUB()                             


FO

Database: TRACE.PUB               


   No. Dataset       Type     Words       B/F     Entries   Capacity  % Full   
    1. INNER-JOB-A      A        13        85           5        809    0.61
    2. RUN-STAT-A       A         3       145         113        251   45.01
    3. OUTER-JOB-M      M       106        16         264        853   30.94
    4. ALIAS-M          M        38        18           1         18    5.55
    5. INNER-JOB-D      D        29        55           5        770    0.64
    6. RUN-STAT-D       D        34        48        3395       6048   56.13
    7. ALIAS-D          D         9        16           2         16   12.50
>

FO (@


Database: TRACE.PUB               

    INNER-JOB-A     ;Automatic 
       Entry:                        Offset Bytes
          INNER-JOB,            U26       1    26  <>        

    Capacity:        809   Entries:           5   Total Bytes:      26

    RUN-STAT-A      ;Automatic 
       Entry:                        Offset Bytes
          RUN-DATE,             X6        1     6  <>        

    Capacity:        251   Entries:         113   Total Bytes:       6

    OUTER-JOB-M     ;Manual    
       Entry:                        Offset Bytes
          OUTER-JOB,            U26       1    26  <>        
          FLAGS,                X6       27     6                          
          JOB-DESC,            3X60      33   180                          

    Capacity:        853   Entries:         264   Total Bytes:     212


    ALIAS-M         ;Manual    
       Entry:                        Offset Bytes
          ALIAS-FLAG,           X2        1     2  <>        
          ALIAS-DESC,           X74       3    74                          

    Capacity:         18   Entries:           1   Total Bytes:      76

    INNER-JOB-D     ;Detail    
       Entry:                        Offset Bytes
          OUTER-JOB,            U26       1    26  <>  
          INNER-JOB,            U26      27    26  <>           
          FLAGS,                X6       53     6                          

    Capacity:        770   Entries:           5   Total Bytes:      58

    RUN-STAT-D      ;Detail    
       Entry:                        Offset Bytes
          OUTER-JOB,            U26       1    26  <>  
          STREAMER,             X26      27    26                          
          RUN-DATE,             X6       53     6  <>           
          RUN-TIME,             X8       59     8                          
          WALL-TIME,            J1       67     2                          


    Capacity:       6048   Entries:        3395   Total Bytes:      68


    ALIAS-D         ;Detail    
       Entry:                        Offset Bytes
          ALIAS-NAME,           X16       1    16                          
          ALIAS-FLAG,           X2       17     2  <<<<;>  

    Capacity:         16   Entries:           2   Total Bytes:      18

----------------------------------------------------

So what we have done here is open the database for input with the I (or INPUT) command, check to see what sets where in it with the QUERY like command FO, then get a detail QUERY like listing by using the FO command with the @ parameter. We could specify a data set name here to get a specific set, but the @ indicates ALL data sets.

It’s important to note that ClibGen is pretty forgiving when it comes to accepting commands from you. As you saw, all the commands can be abbreviated, and if there is an option that is required at processing time that you didn’t supply by setting it on, then ClibGen will prompt for it.

Now we are going to go ahead and take all the default options, which means generate pretty much everthing. See figure two for that dialog;

-----------------------------------------------------------------------------------

Figure 2



CG>LIB TRLIB.SOURCE

Creating COBOL Copylib TRLIB.SOURCE                            

Enter Keyfile Name - TRLIBK

Output File is set to "TRLIB.SOURCE,CLIB".                                     

X

Generating TRACE Database Declarations.                                        
Enter Password (Programmatic Access) - FUGAZI
Generating TRACE database routines.                                            


Enter a COBOL Prefix for OUTER-JOB-M, (up to 5 Chars) - OJM
Generating OUTER-JOB-M dataset Data decalarations.                             
Generating OUTER-JOB-M dataset Read routines.                                  
Generating OUTER-JOB-M dataset Write routines.                                 


Enter a COBOL Prefix for ALIAS-M, (up to 5 Chars) - AM
Generating ALIAS-M dataset Data decalarations.                                 
Generating ALIAS-M dataset Read routines.                                      
Generating ALIAS-M dataset Write routines.                                     


Enter a COBOL Prefix for INNER-JOB-D, (up to 5 Chars) - IJD
Generating INNER-JOB-D dataset Data decalarations.                             
Generating INNER-JOB-D dataset Read routines.                                  
Generating INNER-JOB-D dataset Write routines.                                 


Enter a COBOL Prefix for RUN-STAT-D, (up to 5 Chars) - RSD
Generating RUN-STAT-D dataset Data decalarations.                              
Generating RUN-STAT-D dataset Read routines.                                   
Generating RUN-STAT-D dataset Write routines.                                  


Enter a COBOL Prefix for ALIAS-D, (up to 5 Chars) - AD
Generating ALIAS-D dataset Data decalarations.                                 
Generating ALIAS-D dataset Read routines.                                      
Generating ALIAS-D dataset Write routines.                                     


001220 Lines Created.

--------------------------------------------------------------------------

Now what we did here was specify a copy library to generate with the LIB command, and then entered an X to eXecute the request. ClibGen responds by asking us for the database password, and prefix information for each data set that you are processing.

ClibGen has an enhanced interface to copy libraries over what COBEDIT has. You can use wild cards to find all the copy members that start with a particular string, and you can also look at INCLUDE files. Here again, if you don’t know a parameter, then ClibGen will prompt for it, or list everything. Look at figure 3 to see the modules that were generated by our previous session, as well as the code generated for a particular set.

---------------------------------------------------------------------------

Figure 3


CG>LIST

Enter Copylib Member (KEY) - 

CopyLib TRLIB.SOURCE Text Modules:                                              
                                                                               
         ADDD                                                                   
         ADGT                                                                   
         ADUP                                                                   
         AMDD                                                                   
         AMGT                                                                   
         AMUP                                                                   
         IJDDD                                                                  
         IJDGT                                                                  
         IJDUP                                                                  
         OJMDD                                                                  
         OJMGT                                                                  
         OJMUP                                                                  
         RSDDD                                                                  
         RSDGT                                                                  
         RSDUP                                                                  
         TRACEDD                                                                
         TRACEOP                                                                

CG>LIST TRACEDD


000001                                                                  TRACEDD 
001000******************************************************************TRACEDD 
001100*  Database Declarations for TRACE [CG]                           TRACEDD 
001200******************************************************************TRACEDD 
001300                                                                  TRACEDD 
001400 01 TRACE-BASE.                                                   TRACEDD 
001500    05  FILLER            PIC X(02)  VALUE SPACES.                TRACEDD 
001600    05  TRACE-BASE-NAME   PIC X(26)  VALUE "TRACE;".              TRACEDD 
001700                                                                  TRACEDD 
001800 01 TRACE-PASS            PIC X(08)  VALUE "FUGAZI;".             TRACEDD 
001900                                                                  TRACEDD 
002000 01 TRACE-SECOND-PATH     PIC X(28)  VALUE SPACES.                TRACEDD 
002100                                                                  TRACEDD 


CG>LIST TRACEOP


000001                                                                  TRACEOP 
001000******************************************************************TRACEOP 
001100 OPEN-TRACE.                                                      TRACEOP 
001200******************************************************************TRACEOP 
001300                                                                  TRACEOP 
001400     CALL "DBOPEN" USING TRACE-BASE, TRACE-PASS,                  TRACEOP 
001500           DB-MODE-1, DB-STATUS.                                  TRACEOP 
001600                                                                  TRACEOP 
001700     IF NOT DB-CALL-OK                                            TRACEOP 
001800        MOVE SPACES TO PUNT-MESSAGE                               TRACEOP 
001900        STRING "Unable to OPEN ", TRACE-BASE-NAME                 TRACEOP 
002000                DELIMITED BY SIZE INTO PUNT-MESSAGE               TRACEOP 
002100        PERFORM DB-PUNT                                           TRACEOP 
002200     END-IF.                                                      TRACEOP 
002300                                                                  TRACEOP 
002400******************************************************************TRACEOP 
002500 CLOSE-TRACE.                                                     TRACEOP 
002600******************************************************************TRACEOP 
002700                                                                  TRACEOP 
002800     CALL "DBCLOSE" USING TRACE-BASE, DB-SET-NAME,                TRACEOP 
002900           DB-MODE-1, DB-STATUS.                                  TRACEOP 
003000                                                                  TRACEOP 
003100     IF NOT DB-CALL-OK                                            TRACEOP 
003200        MOVE SPACES TO PUNT-MESSAGE                               TRACEOP 
003300        STRING "Unable to CLOSE ", TRACE-BASE-NAME                TRACEOP 
003400                DELIMITED BY SIZE INTO PUNT-MESSAGE               TRACEOP 
003500        PERFORM DB-PUNT                                           TRACEOP 
003600     END-IF.                                                      TRACEOP 
003700                                                                  TRACEOP 
003800******************************************************************TRACEOP 
003900 UNLOCK-TRACE.                                                    TRACEOP 
004000******************************************************************TRACEOP 
004100                                                                  TRACEOP 
004200     CALL "DBUNLOCK" USING TRACE-BASE, DB-SET-NAME,               TRACEOP 
004300           DB-MODE-1, DB-STATUS.                                  TRACEOP 
004400                                                                  TRACEOP 
004500     IF NOT DB-CALL-OK                                            TRACEOP 
004600        MOVE SPACES TO PUNT-MESSAGE                               TRACEOP 
004700        STRING "Unable to UNLOCK ", TRACE-BASE-NAME               TRACEOP 
004800                DELIMITED BY SIZE INTO PUNT-MESSAGE               TRACEOP 
004900        PERFORM DB-PUNT                                           TRACEOP 
005000     END-IF.                                                      TRACEOP 
005100                                                                  TRACEOP 

CG>LIST RSD@

000001                                                                  RSDDD   
001000******************************************************************RSDDD   
001100*  Dataset Declarations for RUN-STAT-D of TRACE [CG]              RSDDD   
001200******************************************************************RSDDD   
001300                                                                  RSDDD   
001400 01 RSD-SET               PIC X(16) VALUE "RUN-STAT-D;".          RSDDD   
001500                                                                  RSDDD   
001600 01 RSD-ITEM-LIST.                                                RSDDD   
001700    05 FILLER             PIC X(10)   VALUE "OUTER-JOB,".         RSDDD   
001800    05 FILLER             PIC X(09)   VALUE "STREAMER,".          RSDDD   
001900    05 FILLER             PIC X(09)   VALUE "RUN-DATE,".          RSDDD   
002000    05 FILLER             PIC X(09)   VALUE "RUN-TIME,".          RSDDD   
002100    05 FILLER             PIC X(10)   VALUE "WALL-TIME;".         RSDDD   
002200                                                                  RSDDD   
002300 01 RSD-ITEM-LIST-R REDEFINES RSD-ITEM-LIST.                      RSDDD   
002400    05 RSD-SAME-LIST      PIC X(02).                              RSDDD   
002500    05 FILLER             PIC X(45).                              RSDDD   
002600                                                                  RSDDD   
002700 01 RSD-GET-INDICATOR               PIC X(02) VALUE "N".          RSDDD   
002800    88 RSD-RECORD-FOUND                       VALUE "Y".          RSDDD   
002900    88 RSD-NO-MORE-RECORDS                    VALUE "N".          RSDDD   
003000                                                                  RSDDD   
003100 01 RSD-RECORD.                                                   RSDDD   
003200    05 RSD-OUTER-JOB                PIC A(26).                    RSDDD   
003300    05 RSD-STREAMER                 PIC X(26).                    RSDDD   
003400    05 RSD-RUN-DATE                 PIC X(06).                    RSDDD   
003500    05 RSD-RUN-TIME                 PIC X(08).                    RSDDD   
003600    05 RSD-WALL-TIME                PIC S9(04)  COMP.             RSDDD   
003700                                                                  RSDDD   
003800 01 RSD-INIT-DATA                   PIC X(68).                    RSDDD   
003900                                                                  RSDDD   
000001                                                                  RSDGT   
001000******************************************************************RSDGT   
001100 GET-RSD-BY-OUTER-JOB.                                            RSDGT   
001200******************************************************************RSDGT   
001300                                                                  RSDGT   
001400     PERFORM FIND-RSD-BY-OUTER-JOB.                               RSDGT   
001500                                                                  RSDGT   
001600     IF RSD-RECORD-FOUND                                          RSDGT   
001700        PERFORM GET-NEXT-RSD                                      RSDGT   
001800     END-IF.                                                      RSDGT   
001900                                                                  RSDGT   
002000******************************************************************RSDGT   
002100 FIND-RSD-BY-OUTER-JOB.                                           RSDGT   
002200******************************************************************RSDGT   
002300                                                                  RSDGT   
002400     MOVE "OUTER-JOB" TO DB-SEARCH-ITEM.                          RSDGT   
002500     MOVE RSD-OUTER-JOB TO DB-VALUE.                              RSDGT   
002600     PERFORM FIND-RSD.                                            RSDGT   
002700                                                                  RSDGT   
002800******************************************************************RSDGT   
002900 GET-RSD-BY-RUN-DATE.                                             RSDGT   
003000******************************************************************RSDGT   
003100                                                                  RSDGT   
003200     PERFORM FIND-RSD-BY-RUN-DATE.                                RSDGT   
003300                                                                  RSDGT   
003400     IF RSD-RECORD-FOUND                                          RSDGT   
003500        PERFORM GET-NEXT-RSD                                      RSDGT   
003600     END-IF.                                                      RSDGT   
003700                                                                  RSDGT   
003800******************************************************************RSDGT   
003900 FIND-RSD-BY-RUN-DATE.                                            RSDGT   
004000******************************************************************RSDGT   
004100                                                                  RSDGT   
004200     MOVE "RUN-DATE" TO DB-SEARCH-ITEM.                           RSDGT   
004300     MOVE RSD-RUN-DATE TO DB-VALUE.                               RSDGT   
004400     PERFORM FIND-RSD.                                            RSDGT   
004500                                                                  RSDGT   
004600******************************************************************RSDGT   
004700 GET-RSD-SERIALLY.                                                RSDGT   
004800******************************************************************RSDGT   
004900                                                                  RSDGT   
005000     MOVE 2 TO DB-MODE.                                           RSDGT   
005100     PERFORM GET-RSD.                                             RSDGT   
005200                                                                  RSDGT   
005300******************************************************************RSDGT   
005400 GET-RSD-BACKWARDS.                                               RSDGT   
005500******************************************************************RSDGT   
005600                                                                  RSDGT   
005700     MOVE 3 TO DB-MODE.                                           RSDGT   
005800     PERFORM GET-RSD.                                             RSDGT   
005900                                                                  RSDGT   
006000******************************************************************RSDGT   
006100 REWIND-RSD.                                                      RSDGT   
006200******************************************************************RSDGT   
006300                                                                  RSDGT   
006400     CALL "DBCLOSE" USING TRACE-BASE, RSD-SET, DB-MODE-3,         RSDGT   
006500           DB-STATUS.                                             RSDGT   
006600                                                                  RSDGT   
006700     IF NOT DB-CALL-OK                                            RSDGT   
006800        MOVE SPACES TO PUNT-MESSAGE                               RSDGT   
006900        STRING "REWIND FAILED FOR RSD"                            RSDGT   
007000                DELIMITED BY SIZE INTO PUNT-MESSAGE               RSDGT   
007100        PERFORM DB-PUNT                                           RSDGT   
007200     END-IF.                                                      RSDGT   
007300                                                                  RSDGT   
007400******************************************************************RSDGT   
007500 FIND-RSD.                                                        RSDGT   
007600******************************************************************RSDGT   
007700                                                                  RSDGT   
007800     CALL "DBFIND" USING TRACE-BASE, RSD-SET, DB-MODE-1,          RSDGT   
007900           DB-STATUS, DB-SEARCH-ITEM, DB-VALUE.                   RSDGT   
008000                                                                  RSDGT   
008100     IF NOT (DB-CALL-OK OR DB-RECORD-NOT-FOUND)                   RSDGT   
008200        STRING "FIND FAILED FOR RSD ", DB-SEARCH-ITEM             RSDGT   
008300               " KEY=" DB-VALUE DELIMITED BY SIZE                 RSDGT   
008400                INTO PUNT-MESSAGE                                 RSDGT   
008500        PERFORM DB-PUNT                                           RSDGT   
008600     END-IF.                                                      RSDGT   
008700     IF DB-NO-CHAIN-FOUND OR DB-RECORD-NOT-FOUND                  RSDGT   
008800        MOVE "N"  TO RSD-GET-INDICATOR                            RSDGT   
008900     ELSE                                                         RSDGT   
009000        MOVE "Y"  TO RSD-GET-INDICATOR                            RSDGT   
009100     END-IF.                                                      RSDGT   
009200                                                                  RSDGT   
009300******************************************************************RSDGT   
009400 GET-NEXT-RSD.                                                    RSDGT   
009500******************************************************************RSDGT   
009600                                                                  RSDGT   
009700     MOVE 5 TO DB-MODE.                                           RSDGT   
009800     PERFORM GET-RSD.                                             RSDGT   
009900                                                                  RSDGT   
010000******************************************************************RSDGT   
010100 GET-PREV-RSD.                                                    RSDGT   
010200******************************************************************RSDGT   
010300                                                                  RSDGT   
010400     MOVE 6 TO DB-MODE.                                           RSDGT   
010500     PERFORM GET-RSD.                                             RSDGT   
010600                                                                  RSDGT   
010700******************************************************************RSDGT   
010800 GET-RSD.                                                         RSDGT   
010900******************************************************************RSDGT   
011000                                                                  RSDGT   
011100     CALL "DBGET" USING TRACE-BASE, RSD-SET, DB-MODE,             RSDGT   
011200           DB-STATUS, RSD-ITEM-LIST, RSD-RECORD, DB-PARM.         RSDGT   
011300                                                                  RSDGT   
011400     IF NOT (DB-CALL-OK OR DB-END-OF-CHAIN OR DB-END-OF-FILE      RSDGT   
011500          OR DB-BEGINNING-OF-CHAIN OR DB-BEGINNING-OF-FILE)       RSDGT   
011600        MOVE SPACES TO PUNT-MESSAGE                               RSDGT   
011700        STRING "GET FAILED FOR RSD "                              RSDGT   
011800               " KEY=" DB-VALUE DELIMITED BY SIZE                 RSDGT   
011900                INTO PUNT-MESSAGE                                 RSDGT   
012000        PERFORM DB-PUNT                                           RSDGT   
012100     END-IF.                                                      RSDGT   
012200                                                                  RSDGT   
012300     IF DB-CALL-OK                                                RSDGT   
012400        MOVE "Y"  TO RSD-GET-INDICATOR                            RSDGT   
012500        MOVE "*;" TO RSD-SAME-LIST                                RSDGT   
012600     ELSE                                                         RSDGT   
012700        MOVE "N"  TO RSD-GET-INDICATOR                            RSDGT   
012800     END-IF.                                                      RSDGT   
012900                                                                  RSDGT   
013000******************************************************************RSDGT   
013100 SPDEDBINIT-RSD.                                                  RSDGT   
013200******************************************************************RSDGT   
013300                                                                  RSDGT   
013400     MOVE 3 TO DB-MODE.                                           RSDGT   
013500     CALL "SPDEDBINIT" USING TRACE-BASE, RSD-SET, DB-MODE,        RSDGT   
013600           DB-STATUS, SPEED-DB-CONTROL, RSD-ITEM-LIST.            RSDGT   
013700                                                                  RSDGT   
013800     IF NOT DB-CALL-OK                                            RSDGT   
013900        MOVE SPACES TO PUNT-MESSAGE                               RSDGT   
014000        STRING "ERROR INIT FOR RSD-FAST "                         RSDGT   
014100               DELIMITED BY SIZE INTO PUNT-MESSAGE                RSDGT   
014200        CALL "SPDEEXPLAIN" USING DB-STATUS                        RSDGT   
014300        PERFORM PROG-PUNT                                         RSDGT   
014400     END-IF.                                                      RSDGT   
014500                                                                  RSDGT   
014600     IF DB-CALL-OK                                                RSDGT   
014700        MOVE "Y"  TO RSD-GET-INDICATOR                            RSDGT   
014800        MOVE "*;" TO RSD-SAME-LIST                                RSDGT   
014900     ELSE                                                         RSDGT   
015000        MOVE "N"  TO RSD-GET-INDICATOR                            RSDGT   
015100     END-IF.                                                      RSDGT   
015200                                                                  RSDGT   
015300******************************************************************RSDGT   
015400 SPDEDBSHUT-RSD.                                                  RSDGT   
015500******************************************************************RSDGT   
015600                                                                  RSDGT   
015700     MOVE 1 TO DB-MODE.                                           RSDGT   
015800     CALL "SPDEDBSHUT" USING TRACE-BASE, RSD-SET, DB-MODE,        RSDGT   
015900           DB-STATUS, SPEED-DB-CONTROL, RSD-ITEM-LIST.            RSDGT   
016000                                                                  RSDGT   
016100     IF NOT DB-CALL-OK                                            RSDGT   
016200        MOVE SPACES TO PUNT-MESSAGE                               RSDGT   
016300        STRING "ERROR SHUT FOR RSD-FAST "                         RSDGT   
016400               DELIMITED BY SIZE INTO PUNT-MESSAGE                RSDGT   
016500        CALL "SPDEEXPLAIN" USING DB-STATUS                        RSDGT   
016600        PERFORM PROG-PUNT                                         RSDGT   
016700     END-IF.                                                      RSDGT   
016800                                                                  RSDGT   
016900******************************************************************RSDGT   
017000 GET-FAST-RSD.                                                    RSDGT   
017100******************************************************************RSDGT   
017200                                                                  RSDGT   
017300     CALL "SPDEDBSCAN" USING TRACE-BASE, DB-STATUS,               RSDGT   
017400           RSD-RECORD, DB-PARM.                                   RSDGT   
017500                                                                  RSDGT   
017600     IF NOT (DB-CALL-OK OR DB-END-OF-FILE)                        RSDGT   
017700        MOVE SPACES TO PUNT-MESSAGE                               RSDGT   
017800        STRING "GET FAST FAILED FOR RSD "                         RSDGT   
017900               " KEY=" DB-VALUE DELIMITED BY SIZE                 RSDGT   
018000                INTO PUNT-MESSAGE                                 RSDGT   
018100        CALL "SPDEEXPLAIN" USING DB-STATUS                        RSDGT   
018200        PERFORM PROG-PUNT                                         RSDGT   
018300     END-IF.                                                      RSDGT   
018400                                                                  RSDGT   
018500     IF DB-CALL-OK                                                RSDGT   
018600        MOVE "Y"  TO RSD-GET-INDICATOR                            RSDGT   
018700     ELSE                                                         RSDGT   
018800        MOVE "N"  TO RSD-GET-INDICATOR                            RSDGT   
018900     END-IF.                                                      RSDGT   
019000                                                                  RSDGT   
000001                                                                  RSDUP   
001000******************************************************************RSDUP   
001100 PUT-TO-RSD.                                                      RSDUP   
001200******************************************************************RSDUP   
001300                                                                  RSDUP   
001400     CALL "DBPUT" USING TRACE-BASE, RSD-SET, DB-MODE-1,           RSDUP   
001500           DB-STATUS, RSD-ITEM-LIST, RSD-RECORD.                  RSDUP   
001600                                                                  RSDUP   
001700     IF NOT DB-CALL-OK                                            RSDUP   
001800        MOVE SPACES TO PUNT-MESSAGE                               RSDUP   
001900        STRING "PUT FAILED FOR RSD "                              RSDUP   
002000               "OUTER-JOB = " RSD-OUTER-JOB                       RSDUP   
002100                DELIMITED BY SIZE INTO PUNT-MESSAGE               RSDUP   
002200        PERFORM DB-PUNT                                           RSDUP   
002300     END-IF.                                                      RSDUP   
002400                                                                  RSDUP   
002500******************************************************************RSDUP   
002600 UPDATE-RSD.                                                      RSDUP   
002700******************************************************************RSDUP   
002800                                                                  RSDUP   
002900     CALL "DBUPDATE" USING TRACE-BASE, RSD-SET, DB-MODE-1,        RSDUP   
003000           DB-STATUS, RSD-ITEM-LIST, RSD-RECORD.                  RSDUP   
003100                                                                  RSDUP   
003200     IF NOT DB-CALL-OK                                            RSDUP   
003300        MOVE SPACES TO PUNT-MESSAGE                               RSDUP   
003400        STRING "UPDATE FAILED FOR RSD "                           RSDUP   
003500               "OUTER-JOB = " RSD-OUTER-JOB                       RSDUP   
003600                DELIMITED BY SIZE INTO PUNT-MESSAGE               RSDUP   
003700        PERFORM DB-PUNT                                           RSDUP   
003800     END-IF.                                                      RSDUP   
003900                                                                  RSDUP   
004000******************************************************************RSDUP   
004100 DELETE-RSD.                                                      RSDUP   
004200******************************************************************RSDUP   
004300                                                                  RSDUP   
004400     CALL "DBDELETE" USING TRACE-BASE, RSD-SET, DB-MODE-1,        RSDUP   
004500           DB-STATUS.                                             RSDUP   
004600                                                                  RSDUP   
004700     IF NOT DB-CALL-OK                                            RSDUP   
004800        MOVE SPACES TO PUNT-MESSAGE                               RSDUP   
004900        STRING "DELETE FAILED FOR RSD "                           RSDUP   
005000               "OUTER-JOB = " RSD-OUTER-JOB                       RSDUP   
005100                DELIMITED BY SIZE INTO PUNT-MESSAGE               RSDUP   
005200        PERFORM DB-PUNT                                           RSDUP   
005300     END-IF.                                                      RSDUP   
005400                                                                  RSDUP   
005500******************************************************************RSDUP   
005600 LOCK-RSD.                                                        RSDUP   
005700******************************************************************RSDUP   
005800                                                                  RSDUP   
005900     CALL "DBLOCK" USING TRACE-BASE, RSD-SET, DB-MODE-3,          RSDUP   
006000           DB-STATUS.                                             RSDUP   
006100                                                                  RSDUP   
006200     IF NOT DB-CALL-OK                                            RSDUP   
006300        MOVE SPACES TO PUNT-MESSAGE                               RSDUP   
006400        STRING "LOCK FAILED FOR RSD "                             RSDUP   
006500               "OUTER-JOB = " RSD-OUTER-JOB                       RSDUP   
006600                DELIMITED BY SIZE INTO PUNT-MESSAGE               RSDUP   
006700        PERFORM DB-PUNT                                           RSDUP   
006800     END-IF.                                                      RSDUP   
006900                                                                  RSDUP   

-----------------------------------------------------------------------------------


You can quickly review what variables you have set on a global basis with the SHOW command.


CG>SHOW


Settings: 

   Infile = TRACE.PUB(@)                            
   Infileformat = IMAGE                                   
   Outfile = TRLIB.SOURCE                            
   Outfileformat = CLIB                                    
   Outputmode = NEW                                     
   Data = ON                                      
   Read = ON                                      
   Write = ON                                      
   Prefix = AD                                      
   Key =  = prefix+gentype                 
   SList = OFF                                     
   SpeedDemon = ON                                      

You can check individual options by typing the command with no parameters. So typing INPUT would show you what input file was opened, but typing INPUT FILENAME would set the input to the FILENAME specified.

That’s pretty much it, ClibGen has a few other features, but this is the basics of what it does.

Usability (also installation)

Well ClibGen is pretty darn easy to use, and is quick. The installation is even easier than most, just restore the tape with a CREATE option and you are set. All and all a pretty simple process.

Reliability

ClibGen generates good code, doesn’t abort, and is pretty forgiving with your command syntax. It is a very reliable tool as far as I am concerned.

Performance

ClibGen is performing a few interesting tricks. It is reading your data base root file, generating COBOL record layouts, and generating code for various database I/O routines. This happens within about a second, so you would have to say that ClibGen performs quit nicely.

Supportability (including Doc)

The product is pretty darn straight forward to use, and the documentation is a good reference guide, but the tutorial is tucked away in Appendix A, which makes it a bit difficult to find. The support is good, although the lack of an 800 number is a bit of a nuisance, but the product doesn’t really require much in the way of support, there just aren’t that many options, and it’s pretty easy to use.

Summary

This is a cool little program, a nice enhancement would be to print nicely formatted output for the copylib’s, with page numbers and an index. When they add the support for the other file formats, it will greatly expand the available market place. I see this program being very useful for consultants where you are constantly seeing new data bases’, and not necessarily very good copy libraries. Shop’s that aren’t doing any new development, probably won’t get much use out of it, because it is geared as a starting up utility.

One other enhancement I would like to see, would be the ability to set up code templates for the PROCEDURE DIVISION code. This way you could make the output look like how you want to work, and not how someone else decided it should look. We all have our own personal preferences when it comes to coding.

I like ClibGen a lot, but I think it is over priced for what you are getting, but that’s me, some people might think it’s a bargain It’s a new product, so the company will probably start to adjust as they get more feedback from the user community. If you are coding, and building copylib’s, you should check out ClibGen.

At-a-Glance box

ClibGen version A.00.00
VVL Associates Inc.
One Lauren Ln.
New Egypt, NJ 08533
Phone (609) 758-8858
FAX (609) 758-7114
email vince@vvl.com

Call, write, fax, or email to get a copy. The demo requires an HPSUSAN number. Price ranges from $1200-$4000, with support being $300. Includes one 67 page manual.