IDENTIFICATION DIVISION. PROGRAM-ID. REMTABLIB. AUTHOR. BOB RIBOKAS. INSTALLATION. TERADYNE, INC. DATE-WRITTEN. 26-JUNE-1984. DATE-COMPILED. TODAY. *REMARKS. REMOTE TABLE LIBRARY GENERATOR. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. VAX-11. OBJECT-COMPUTER. VAX-11. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT TABLE-DEFINITIONS ASSIGN TO "REMOTE$TABLES:" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS TABLE-FILE-STATUS. SELECT LIBRARY-FILE ASSIGN TO "SYS$DISK:" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL. SELECT LIBRARY-UPDATES ASSIGN TO "SYS$DISK:" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL. DATA DIVISION. FILE SECTION. FD TABLE-DEFINITIONS LABEL RECORDS ARE STANDARD VALUE OF ID IS "REMTAB.DEF" DATA RECORD IS TABLE-DEF-RECORD. 01 TABLE-DEF-RECORD. 02 TABLE-DEFINITION-CODE PIC X(1). 88 TABLE-DEF VALUE "*". 02 TABLE-REST PIC X(79). FD LIBRARY-FILE LABEL RECORDS ARE STANDARD VALUE OF ID IS LIBRARY-FILE-ID RECORD IS VARYING IN SIZE FROM 1 TO 80 CHARACTERS DEPENDING ON LIB-SIZE DATA RECORD IS LIBRARY-RECORD. 01 LIBRARY-RECORD PIC X(80). FD LIBRARY-UPDATES LABEL RECORDS ARE STANDARD VALUE OF ID IS "LIBUPD.COM" DATA RECORD IS UPD-RECORD. 01 UPD-RECORD PIC X(40). WORKING-STORAGE SECTION. 01 LIBRARY-FILE-ID. 02 LIBRARY-FILE-NAME PIC X(9). 02 FILLER PIC X(4), VALUE ".TXT". 01 LIB-SIZE PIC 9(2), COMP. 01 TABLE-FILE-STATUS PIC X(2). 88 TABLE-FILE-NOT-FOUND VALUE "97". 01 TABLE-FILE-RETRY-FLAG PIC 9(1), COMP. 88 TABLE-FILE-OK VALUE 0. 88 TABLE-FILE-RETRY VALUE 1. 01 END-OF-FILE-FLAG PIC 9(1), COMP. 88 VALID-READ VALUE 0. 88 END-OF-FILE VALUE 1. 01 TABLE-INDEX PIC 9(3), COMP. 01 ELEMENT-INDEX PIC 9(3), COMP. 01 TABLE-MAX PIC 9(3), COMP. 01 ELEMENT-MAX PIC 9(3), COMP. 01 START-POS PIC 9(3), COMP. 01 HOLD-AREA. 02 HOLD-NAME PIC X(30). 02 HOLD-TYPE PIC X(1). 02 HOLD-LENGTH PIC 9(2). 02 HOLD-OTHER PIC X(3). 02 HOLD-DECIMAL PIC 9(2). 02 HOLD-KEY PIC X(3). 88 KEY-ELEMENT VALUE "KEY". 01 TABLE-DEF-TABLE VALUE SPACES. 02 TABLE-DEF-ENTRY OCCURS 200 TIMES INDEXED BY TABLE-DEF-IDX. 03 TABLE-DEF-NAME PIC X(40). 03 TABLE-DEF-CODE PIC X(5). 03 TABLE-DEF-KEYS PIC 9(1). 03 TABLE-DEF-ELEMENT-IDX PIC 9(3). 01 ELEMENT-DEF-TABLE VALUE SPACES. 02 ELEMENT-DEF-ENTRY OCCURS 500 TIMES INDEXED BY ELEMENT-DEF-IDX. 03 ELEMENT-DEF-NAME PIC X(30). 03 ELEMENT-DEF-TYPE PIC X(1). 88 ELEMENT-DEF-CHARACTER VALUE "C". 88 ELEMENT-DEF-NUMERIC VALUE "N". 03 ELEMENT-DEF-START PIC 9(3). 03 ELEMENT-DEF-LENGTH PIC 9(2). 03 ELEMENT-DEF-DECIMAL PIC 9(2). 03 ELEMENT-DEF-TABLE-IDX PIC 9(3). 01 AST-LINE PIC X(80) VALUE ALL "*". 01 BET-LINE. 02 FILLER PIC X(2) VALUE "**". 02 FILLER PIC X(76) VALUE SPACES. 02 FILLER PIC X(2) VALUE "**". 01 NAM-LINE. 02 FILLER PIC X(8) VALUE "** ". 02 NAM-TOK OCCURS 32 TIMES PIC X(2). 02 FILLER PIC X(8) VALUE " **". 01 DEF-NAME-HOLD. 02 DEF-TOK-HOLD OCCURS 32 TIMES PIC X(1). 01 I PIC 9(3), COMP. 01 ENTRY-SIZE PIC 9(3). 01 FRONT-LENGTH PIC 9(3). 01 COBOL-DATA-TYPE PIC X(1). 01 PTR PIC 9(3), COMP. 01 NUMBER-OUT PIC ZZ9. 01 NUMBER-OUT-RED REDEFINES NUMBER-OUT. 02 NOR-1 PIC X(1). 02 NOR-2 PIC X(1). 02 NOR-3 PIC X(1). 01 BUILD-LINE. 02 FRONT-PART PIC X(40). 02 BACK-PART PIC X(40). 01 INPUT-LINE PIC X(10). 88 INPUT-NULL VALUE SPACES. 88 INPUT-HELP VALUE "H", "HELP". 88 INPUT-LIST VALUE "L", "LIST". 88 INPUT-END VALUE "E", "END". 88 INPUT-ALL VALUE "A", "ALL". 01 INPUT-SELECTIONS VALUE SPACES. 02 INPUT-SEL OCCURS 200 TIMES INDEXED BY INPUT-IDX PIC X(5). 01 ALL-FLAG PIC 9(1), COMP, VALUE 0. 88 DO-ALL VALUE 1. 88 DONT-DO-ALL VALUE 0. PROCEDURE DIVISION. DECLARATIVES. TABLE-DEFINTION-ERROR SECTION. USE AFTER STANDARD ERROR PROCEDURE ON TABLE-DEFINITIONS. TABLE-DEFINITION-DECODE. IF TABLE-FILE-NOT-FOUND SET TABLE-FILE-RETRY TO TRUE. END DECLARATIVES. 000-REMTABLIB SECTION. 001-INIT. DISPLAY " ". DISPLAY "[REMTABLIB] Remote Table Library Generator". DISPLAY " ". PERFORM 100-LOAD-DEFINITIONS. MOVE TABLE-INDEX TO TABLE-MAX. MOVE ELEMENT-INDEX TO ELEMENT-MAX. MOVE ZERO TO ELEMENT-DEF-TABLE-IDX (ELEMENT-MAX + 1). PERFORM 010-GET-SELECTIONS. PERFORM 200-GENERATE-LIBRARIES. STOP RUN. 010-GET-SELECTIONS. PERFORM 015-GET-SEL VARYING I FROM 1 BY 1 UNTIL I > 200 OR INPUT-END. 015-GET-SEL. DISPLAY "Table name: " WITH NO ADVANCING. ACCEPT INPUT-LINE. IF INPUT-NULL GO TO 015-GET-SEL. IF INPUT-HELP DISPLAY " " DISPLAY "Enter the name of a table to generate library" DISPLAY " entries for" DISPLAY "Type ALL for all tables" DISPLAY "Type LIST for a list for table names" DISPLAY "Type END when done with selections" DISPLAY "Type HELP for this" DISPLAY " " GO TO 015-GET-SEL. IF INPUT-LIST DISPLAY " " PERFORM 020-LIST-TABLES VARYING TABLE-INDEX FROM 1 BY 1 UNTIL TABLE-INDEX > TABLE-MAX DISPLAY " " GO TO 015-GET-SEL. IF INPUT-ALL SET DO-ALL TO TRUE MOVE "END" TO INPUT-LINE ELSE IF NOT INPUT-END SET TABLE-DEF-IDX TO 1 SEARCH TABLE-DEF-ENTRY AT END DISPLAY "?Invalid Table Name" GO TO 015-GET-SEL WHEN TABLE-DEF-IDX > TABLE-MAX DISPLAY "?Invalid Table Name" GO TO 015-GET-SEL WHEN TABLE-DEF-CODE (TABLE-DEF-IDX) = INPUT-LINE MOVE INPUT-LINE TO INPUT-SEL (I). 020-LIST-TABLES. DISPLAY TABLE-DEF-CODE (TABLE-INDEX) " - " TABLE-DEF-NAME (TABLE-INDEX). 100-LOAD-DEFINITIONS. SET TABLE-FILE-OK TO TRUE. OPEN INPUT TABLE-DEFINITIONS. IF TABLE-FILE-RETRY DISPLAY "?Could not OPEN Table Definition File... Aborting..." STOP RUN. MOVE ZERO TO TABLE-INDEX, ELEMENT-INDEX. SET VALID-READ TO TRUE. PERFORM 105-READ-DEF. IF VALID-READ PERFORM 110-PROCESS-DEFINITIONS UNTIL END-OF-FILE. CLOSE TABLE-DEFINITIONS. 105-READ-DEF. MOVE SPACES TO TABLE-DEF-RECORD. READ TABLE-DEFINITIONS AT END SET END-OF-FILE TO TRUE. INSPECT TABLE-DEF-RECORD REPLACING ALL " " BY " ". 110-PROCESS-DEFINITIONS. IF TABLE-DEF PERFORM 120-DEFINE-TABLE ELSE IF TABLE-DEF-RECORD NOT = SPACES AND TABLE-INDEX > ZERO PERFORM 130-DEFINE-ELEMENT. PERFORM 105-READ-DEF. 120-DEFINE-TABLE. ADD 1 TO TABLE-INDEX. UNSTRING TABLE-REST DELIMITED BY "," INTO TABLE-DEF-NAME (TABLE-INDEX), TABLE-DEF-CODE (TABLE-INDEX). MOVE ZERO TO TABLE-DEF-KEYS (TABLE-INDEX). COMPUTE TABLE-DEF-ELEMENT-IDX (TABLE-INDEX) = ELEMENT-INDEX + 1. MOVE 1 TO START-POS. 130-DEFINE-ELEMENT. ADD 1 TO ELEMENT-INDEX. MOVE SPACES TO HOLD-AREA. UNSTRING TABLE-DEF-RECORD DELIMITED BY "," OR ALL SPACES INTO HOLD-NAME, HOLD-TYPE, HOLD-LENGTH, HOLD-OTHER, HOLD-KEY. IF HOLD-OTHER = "KEY" MOVE "0" TO HOLD-OTHER MOVE "KEY" TO HOLD-KEY. IF HOLD-OTHER = SPACES MOVE "0" TO HOLD-OTHER. UNSTRING HOLD-OTHER DELIMITED BY ALL SPACES INTO HOLD-DECIMAL. MOVE START-POS TO ELEMENT-DEF-START (ELEMENT-INDEX). MOVE HOLD-NAME TO ELEMENT-DEF-NAME (ELEMENT-INDEX). MOVE HOLD-TYPE TO ELEMENT-DEF-TYPE (ELEMENT-INDEX). MOVE HOLD-LENGTH TO ELEMENT-DEF-LENGTH (ELEMENT-INDEX). MOVE HOLD-DECIMAL TO ELEMENT-DEF-DECIMAL (ELEMENT-INDEX). MOVE TABLE-INDEX TO ELEMENT-DEF-TABLE-IDX (ELEMENT-INDEX). IF KEY-ELEMENT ADD 1 TO TABLE-DEF-KEYS (TABLE-INDEX). ADD HOLD-LENGTH TO START-POS. 200-GENERATE-LIBRARIES SECTION. 201-INIT. OPEN OUTPUT LIBRARY-UPDATES. PERFORM 210-GENERATE-LIBRARY VARYING TABLE-INDEX FROM 1 BY 1 UNTIL TABLE-INDEX > TABLE-MAX. CLOSE LIBRARY-UPDATES. GO TO 299-EXIT. 210-GENERATE-LIBRARY. IF DO-ALL PERFORM 220-GENERATE-LIBS ELSE SET INPUT-IDX TO 1 SEARCH INPUT-SEL AT END CONTINUE WHEN INPUT-SEL (INPUT-IDX) = TABLE-DEF-CODE (TABLE-INDEX) PERFORM 220-GENERATE-LIBS. 220-GENERATE-LIBS. MOVE SPACES TO LIBRARY-FILE-NAME. STRING TABLE-DEF-CODE (TABLE-INDEX) DELIMITED BY SPACES "TAB" DELIMITED BY SIZE INTO LIBRARY-FILE-NAME. DISPLAY "[Generating " LIBRARY-FILE-ID "]". OPEN OUTPUT LIBRARY-FILE. MOVE SPACES TO UPD-RECORD. STRING "$ LIBRARY/TEXT/REPLACE 'P1' " DELIMITED BY SIZE LIBRARY-FILE-NAME DELIMITED BY SPACES INTO UPD-RECORD. WRITE UPD-RECORD. MOVE AST-LINE TO LIBRARY-RECORD. PERFORM 230-WRITE-LIB. MOVE BET-LINE TO LIBRARY-RECORD. PERFORM 230-WRITE-LIB. MOVE TABLE-DEF-NAME (TABLE-INDEX) TO DEF-NAME-HOLD. PERFORM 310-MOVE-DEF-NAME VARYING I FROM 1 BY 1 UNTIL I > 32. MOVE NAM-LINE TO LIBRARY-RECORD. PERFORM 230-WRITE-LIB. MOVE BET-LINE TO LIBRARY-RECORD. PERFORM 230-WRITE-LIB. MOVE AST-LINE TO LIBRARY-RECORD. PERFORM 230-WRITE-LIB. MOVE TABLE-DEF-ELEMENT-IDX (TABLE-INDEX) TO I. MOVE ZERO TO ENTRY-SIZE. PERFORM 320-GET-ENTRY-SIZE UNTIL ELEMENT-DEF-TABLE-IDX (I) NOT = TABLE-INDEX. MOVE ENTRY-SIZE TO NUMBER-OUT. PERFORM 330-FIX-NUMBER-OUT. MOVE SPACES TO BUILD-LINE. MOVE BUILD-LINE TO LIBRARY-RECORD. PERFORM 230-WRITE-LIB. STRING "01 " DELIMITED BY SIZE TABLE-DEF-CODE (TABLE-INDEX) DELIMITED BY SPACES "-ENTRY-SIZE" DELIMITED BY SIZE INTO FRONT-PART. STRING "PICTURE 9(3), COMP, GLOBAL, VALUE " DELIMITED BY SIZE NUMBER-OUT-RED DELIMITED BY SPACES "." DELIMITED BY SIZE INTO BACK-PART. MOVE BUILD-LINE TO LIBRARY-RECORD. PERFORM 230-WRITE-LIB. MOVE SPACES TO BUILD-LINE. MOVE BUILD-LINE TO LIBRARY-RECORD. PERFORM 230-WRITE-LIB. STRING "01 " DELIMITED BY SIZE TABLE-DEF-CODE (TABLE-INDEX) DELIMITED BY SPACES "-MAX-ENTRY" DELIMITED BY SIZE INTO FRONT-PART. MOVE "PICTURE 9(3), COMP, GLOBAL, VALUE 100." TO BACK-PART. MOVE BUILD-LINE TO LIBRARY-RECORD. PERFORM 230-WRITE-LIB. MOVE SPACES TO BUILD-LINE. MOVE BUILD-LINE TO LIBRARY-RECORD. PERFORM 230-WRITE-LIB. STRING "01 " DELIMITED BY SIZE TABLE-DEF-CODE (TABLE-INDEX) DELIMITED BY SPACES "-TABLE, GLOBAL." DELIMITED BY SIZE INTO BUILD-LINE. MOVE BUILD-LINE TO LIBRARY-RECORD. PERFORM 230-WRITE-LIB. MOVE SPACES TO BUILD-LINE. MOVE BUILD-LINE TO LIBRARY-RECORD. PERFORM 230-WRITE-LIB. STRING " 02 " DELIMITED BY SIZE TABLE-DEF-CODE (TABLE-INDEX) DELIMITED BY SPACES "-ENTRY" DELIMITED BY SIZE INTO FRONT-PART. MOVE "OCCURS 100 TIMES" TO BACK-PART. MOVE BUILD-LINE TO LIBRARY-RECORD. PERFORM 230-WRITE-LIB. MOVE SPACES TO BUILD-LINE. STRING "INDEXED BY " DELIMITED BY SIZE TABLE-DEF-CODE (TABLE-INDEX) DELIMITED BY SPACES "-IDX." DELIMITED BY SIZE INTO BACK-PART. MOVE BUILD-LINE TO LIBRARY-RECORD. PERFORM 230-WRITE-LIB. MOVE TABLE-DEF-ELEMENT-IDX (TABLE-INDEX) TO I. MOVE SPACES TO BUILD-LINE. MOVE BUILD-LINE TO LIBRARY-RECORD. PERFORM 230-WRITE-LIB. PERFORM 400-GENERATE-ELEMENTS UNTIL ELEMENT-DEF-TABLE-IDX (I) NOT = TABLE-INDEX. MOVE SPACES TO BUILD-LINE. MOVE BUILD-LINE TO LIBRARY-RECORD. PERFORM 230-WRITE-LIB. STRING "01 " DELIMITED BY SIZE TABLE-DEF-CODE (TABLE-INDEX) DELIMITED BY SPACES "-COUNT" DELIMITED BY SIZE INTO FRONT-PART. MOVE "PICTURE S9(3), COMP, GLOBAL." TO BACK-PART. MOVE BUILD-LINE TO LIBRARY-RECORD. PERFORM 230-WRITE-LIB. MOVE SPACES TO BUILD-LINE. MOVE BUILD-LINE TO LIBRARY-RECORD. PERFORM 230-WRITE-LIB. STRING " 88 " DELIMITED BY SIZE TABLE-DEF-CODE (TABLE-INDEX) DELIMITED BY SPACES "-LOAD-FAILED" DELIMITED BY SIZE INTO FRONT-PART. MOVE "VALUE -1." TO BACK-PART. MOVE BUILD-LINE TO LIBRARY-RECORD. PERFORM 230-WRITE-LIB. CLOSE LIBRARY-FILE. MOVE SPACES TO LIBRARY-FILE-NAME. STRING TABLE-DEF-CODE (TABLE-INDEX) DELIMITED BY SPACES "LOD" DELIMITED BY SIZE INTO LIBRARY-FILE-NAME. DISPLAY "[Generating " LIBRARY-FILE-ID "]". OPEN OUTPUT LIBRARY-FILE. MOVE SPACES TO UPD-RECORD. STRING "$ LIBRARY/TEXT/REPLACE 'P1' " DELIMITED BY SIZE LIBRARY-FILE-NAME DELIMITED BY SPACES INTO UPD-RECORD. WRITE UPD-RECORD. MOVE SPACES TO BUILD-LINE. MOVE BUILD-LINE TO LIBRARY-RECORD. PERFORM 230-WRITE-LIB. STRING ' BY DESCRIPTOR "' DELIMITED BY SIZE TABLE-DEF-CODE (TABLE-INDEX) DELIMITED BY SIZE '", BY REFERENCE ' DELIMITED BY SIZE TABLE-DEF-CODE (TABLE-INDEX) DELIMITED BY SPACES '-TABLE, ' DELIMITED BY SIZE INTO BUILD-LINE. MOVE BUILD-LINE TO LIBRARY-RECORD. PERFORM 230-WRITE-LIB. MOVE SPACES TO BUILD-LINE. STRING ' ' DELIMITED BY SIZE TABLE-DEF-CODE (TABLE-INDEX) DELIMITED BY SPACES '-ENTRY-SIZE, ' DELIMITED BY SIZE TABLE-DEF-CODE (TABLE-INDEX) DELIMITED BY SPACES '-MAX-ENTRY, ' DELIMITED BY SIZE TABLE-DEF-CODE (TABLE-INDEX) DELIMITED BY SPACES '-COUNT' DELIMITED BY SIZE INTO BUILD-LINE. MOVE BUILD-LINE TO LIBRARY-RECORD. PERFORM 230-WRITE-LIB. CLOSE LIBRARY-FILE. 230-WRITE-LIB. PERFORM VARYING LIB-SIZE FROM 80 BY -1 UNTIL LIB-SIZE = 1 OR LIBRARY-RECORD (LIB-SIZE : 1) NOT = SPACE CONTINUE END-PERFORM. WRITE LIBRARY-RECORD AFTER 1. 299-EXIT. EXIT. 300-MISCELLANEOUS-SUBROUTINES SECTION. 310-MOVE-DEF-NAME. MOVE DEF-TOK-HOLD (I) TO NAM-TOK (I). 320-GET-ENTRY-SIZE. ADD ELEMENT-DEF-LENGTH (I) TO ENTRY-SIZE. ADD 1 TO I. 330-FIX-NUMBER-OUT. PERFORM 335-FIX-DIGIT UNTIL NOR-1 NOT = SPACE. 335-FIX-DIGIT. MOVE NOR-2 TO NOR-1 MOVE NOR-3 TO NOR-2 MOVE SPACE TO NOR-3. 400-GENERATE-ELEMENTS SECTION. 401-INIT. MOVE SPACES TO BUILD-LINE. STRING " 03 " DELIMITED BY SIZE ELEMENT-DEF-NAME (I) DELIMITED BY SPACES INTO FRONT-PART. INSPECT FRONT-PART REPLACING ALL "_" BY "-". IF ELEMENT-DEF-CHARACTER (I) MOVE "X" TO COBOL-DATA-TYPE ELSE MOVE "9" TO COBOL-DATA-TYPE. COMPUTE FRONT-LENGTH = ELEMENT-DEF-LENGTH (I) - ELEMENT-DEF-DECIMAL (I). MOVE FRONT-LENGTH TO NUMBER-OUT. PERFORM 330-FIX-NUMBER-OUT. MOVE 1 TO PTR. STRING "PICTURE " DELIMITED BY SIZE COBOL-DATA-TYPE DELIMITED BY SIZE "(" DELIMITED BY SIZE NUMBER-OUT-RED DELIMITED BY SPACES ")" DELIMITED BY SIZE INTO BACK-PART WITH POINTER PTR. IF ELEMENT-DEF-DECIMAL (I) > ZERO MOVE ELEMENT-DEF-DECIMAL (I) TO NUMBER-OUT PERFORM 330-FIX-NUMBER-OUT STRING "V" DELIMITED BY SIZE COBOL-DATA-TYPE DELIMITED BY SIZE "(" DELIMITED BY SIZE NUMBER-OUT-RED DELIMITED BY SPACES ")" DELIMITED BY SIZE INTO BACK-PART WITH POINTER PTR. STRING "." DELIMITED BY SIZE INTO BACK-PART WITH POINTER PTR. MOVE BUILD-LINE TO LIBRARY-RECORD. PERFORM 230-WRITE-LIB. ADD 1 TO I.