*COMDECK  QRYWITH4
00001                                                                    QRYWITH
00002 *****  QUERY WITH CONDITION MODULE - QRYWITH  *****               QRYWITH4
00003  QRY-WITH.                                                           LV002
00004      IF QRYTYPE-3 EQUAL TO "6" OR "8"                                CL**2
00005          GO TO QRY-HAVE.                                             CL**2
00006      MOVE "N" TO HIT-SW.                                             CL**2
00007      MOVE QUERY-NAME TO DATA-ENTRY-NAME.                          QRYWITH4
00008      PERFORM READ-FIRST-DATA THRU READ-FIRST-DATA-XIT.            QRYWITH4
00009      IF DATA-RETURN-CODE EQUAL TO "1"                             QRYWITH4
00010          GO TO QRY-HAVE-XIT.                                         CL**2
00011      MOVE ALL "N" TO MATCH-SW.                                    QRYWITH4
00012      MOVE QTBL-SEL1-FLDNO (1) TO SEARCH-FLD (1).                     CL**2
00013      MOVE QTBL-SEL1-FLDNO (2) TO SEARCH-FLD (2).                     CL**2
00014      MOVE QTBL-SEL1-FLDNO (3) TO SEARCH-FLD (3).                     CL**2
00015      IF 1ST-RECORD-SW EQUAL TO "N"                                   CL**2
00016          GO TO CK-CATEGORY.                                          CL**2
00017      MOVE "N" TO 1ST-RECORD-SW.                                      CL**2
00018      MOVE 1 TO MATCH-NO.                                             CL**2
00019 ******************************************************************QRYWITH4
00020 *    SEARCH FIXED FIELDS                                         *QRYWITH4
00021 ******************************************************************QRYWITH4
00022  CK-MATCH.                                                           CL**2
00023      IF MATCH-NO GREATER THAN 3 GO TO CK-CATEGORY.                   CL**2
00024      IF QRY-ENTRY-TYPE (MATCH-NO) EQUAL TO SPACES                    CL**2
00025          GO TO CK-CATEGORY.                                          CL**2
00026      IF QTBL-SEL1-ENTNO (MATCH-NO) EQUAL "KW"                        CL**2
00027          ADD 1 TO MATCH-NO                                           CL**2
00028          GO TO CK-MATCH.                                             CL**2
00029      MOVE QRY-ENTRY-TYPE (MATCH-NO) TO CON-ENTRY-TYPE.               CL**2
00030      MOVE QRY-CATEGORY (MATCH-NO) TO CON-ENTRY-CAT.                  CL**2
00031      PERFORM READ-FIELD-TABLE THRU READ-FIELD-TABLE-XIT.             CL**2
00032      MOVE 01 TO FLD.                                                 CL**2
00033  FIND-FLD-LOOP.                                                      CL**2
00034      IF FLD-ID (FLD) EQUAL TO QRY-FIELD (MATCH-NO)                   CL**2
00035          MOVE FLD-START (FLD) TO QRY-FIELD-START (MATCH-NO)          CL**2
00036          MOVE FLD-LENGTH (FLD) TO QRY-FIELD-LENGTH (MATCH-NO)        CL**2
00037          MOVE FLD-FORMAT (FLD) TO QRY-FIELD-FORMAT (MATCH-NO)        CL**2
00038          MOVE FLD-REV (FLD) TO QRY-FIELD-REV (MATCH-NO)              CL**2
00039          MOVE FLD-STANDARD (FLD) TO QRY-FIELD-STANDARD (MATCH-NO)    CL**2
00040          MOVE CON-KEY TO QRY-FIELD-MAST3-KEY (MATCH-NO)              CL**2
00041          ADD 1 TO MATCH-NO                                           CL**2
00042          GO TO CK-MATCH.                                             CL**2
00043      ADD 1 TO FLD.                                                   CL**2
           IF FLD IS LESS THAN 30 
           THEN 
              GO TO FIND-FLD-LOOP 
           END-IF 
00045      PERFORM READ-NEXT-FIELD THRU READ-NEXT-FIELD-XIT.               CL**2
00046      IF CON-RETURN-CODE EQUAL "3"                                    CL**2
00047          MOVE "CF" TO QTBL-HDR-REQTYPE                               CL**2
00048          GO TO PROGRAM-END-BAD.                                      CL**2
00049      MOVE 01 TO FLD.                                                 CL**2
00050      GO TO FIND-FLD-LOOP.                                            CL**2
00051  CK-CATEGORY.                                                     QRYWITH4
00052 *                                                                    CL**2
00053 *     ****** BYPASS COMMENTS *********                               CL**2
00054 *                                                                    CL**2
00055      IF CAT-COMMENT EQUAL TO "*"                                     CL**2
00056          GO TO NEXT-LINE-LOOP.                                       CL**2
00057      IF CAT-CATEGORY EQUAL TO QRY-CATEGORY (1)                    QRYWITH4
00058          MOVE 1 TO MATCH-NO                                       QRYWITH4
00059          GO TO CK-MULT-LINES.                                        CL**2
00060      IF CAT-CATEGORY EQUAL "020" AND                                 CL**2
00061      QRY-ENTRY-TYPE (1) EQUAL "KW"                                   CL**2
00062          MOVE 1 TO MATCH-NO                                          CL**2
00063          GO TO KW-SEARCH.                                            CL**2
00064  CK-CAT-2.                                                        QRYWITH4
00065      IF CAT-CATEGORY EQUAL TO QRY-CATEGORY (2)                    QRYWITH4
00066          MOVE 2 TO MATCH-NO                                       QRYWITH4
00067          GO TO CK-MULT-LINES.                                        CL**2
00068      IF CAT-CATEGORY EQUAL "020" AND                                 CL**2
00069      QRY-ENTRY-TYPE (2) EQUAL "KW"                                   CL**2
00070          MOVE 2 TO MATCH-NO                                          CL**2
00071          GO TO KW-SEARCH.                                            CL**2
00072  CK-CAT-3.                                                        QRYWITH4
00073      IF CAT-CATEGORY EQUAL TO QRY-CATEGORY (3)                    QRYWITH4
00074          MOVE 3 TO MATCH-NO                                       QRYWITH4
00075          GO TO CK-MULT-LINES.                                        CL**2
00076      IF CAT-CATEGORY EQUAL "020" AND                                 CL**2
00077      QRY-ENTRY-TYPE (3) EQUAL "KW"                                   CL**2
00078          MOVE 3 TO MATCH-NO                                          CL**2
00079          GO TO KW-SEARCH.                                            CL**2
00080 ******************************************************************QRYWITH4
00081 *    GET NEXT LINE FROM ENTRY                                    *QRYWITH4
00082 ******************************************************************QRYWITH4
00083  NEXT-LINE-LOOP.                                                  QRYWITH4
00084      PERFORM READ-NEXT-DATA THRU READ-NEXT-DATA-XIT.              QRYWITH4
00085      IF DATA-RETURN-CODE EQUAL TO "1"                             QRYWITH4
00086          PERFORM QRY-WITH-CHK THRU QRY-WITH-XIT                      CL**2
00087          GO TO QRY-HAVE-XIT.                                         CL**2
00088      GO TO CK-CATEGORY.                                           QRYWITH4
00089 ******************************************************               CL**2
00090 *                                                                    CL**2
00091 *   CK FOR QUERIES ON CATS WITH MULTIPLE LINE TYPES                  CL**2
00092 *      THESE OCCUR IN DATA BASE ENVIRONMENTS                         CL**2
00093 *                                                                    CL**2
00094 ******************************************************               CL**2
00095  CK-MULT-LINES.                                                      CL**2
           IF DATA-HDR-ENT-ID IS EQUAL TO "10"
           THEN 
              GO TO CK-GRP-STR
           END-IF 
           IF DATA-HDR-ENT-ID IS EQUAL TO "13"
           THEN 
              GO TO CK-REC-STR
           END-IF 
           IF DATA-HDR-ENT-ID IS EQUAL TO "22"
           THEN 
              GO TO CK-ARE-LINES
           END-IF 
           IF DATA-HDR-ENT-ID IS EQUAL TO "24"
           THEN 
              GO TO CK-SS-REL 
           END-IF 
           IF DATA-HDR-ENT-ID IS EQUAL TO "26"
           THEN 
              GO TO CK-SC-LINES 
           END-IF 
           GO TO GET-DATA-FIELD.
  
       CK-GRP-STR.
           IF CAT-CATEGORY IS NOT EQUAL TO "300"
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF (( STC-LINE-TYPE IS EQUAL TO "A") AND 
              (QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO 
              STR-GRP-LINE-A))
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF ((STC-LINE-TYPE IS EQUAL TO "D") AND
              (QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO 
              STR-GRP-LINE-D))
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF ((STC-LINE-TYPE IS EQUAL TO "O") AND
              (QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO 
              STR-GRP-LINE-O )) 
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "I" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              STR-GRP-LINE-I
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "K" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              STR-GRP-LINE-K
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "R" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              STR-GRP-LINE-R
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "Q" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              STR-GRP-LINE-Q
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "T" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              STR-GRP-LINE-T
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "2" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              STR-GRP-LINE-2
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           GO TO NO-MATCH.
  
       CK-REC-STR.
           IF CAT-CATEGORY IS NOT EQUAL TO "300"
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "A" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              STR-REC-LINE-A
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "D" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              STR-REC-LINE-D
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "O" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              STR-REC-LINE-O
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "I" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              STR-REC-LINE-I
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "K" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              STR-REC-LINE-K
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "R" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              STR-REC-LINE-R
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "Q" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              STR-REC-LINE-Q
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "T" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              STR-REC-LINE-T
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "2" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              STR-REC-LINE-2
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "B" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              STR-REC-LINE-B
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "C" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              STR-REC-LINE-C
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           GO TO NO-MATCH.
  
       CK-ARE-LINES.
           IF CAT-CATEGORY IS NOT EQUAL TO "400"
           THEN 
              GO TO CK-ARE-KEY
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "P" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              ARE-PRO-LINE-P
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "R" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              ARE-PRO-LINE-R
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           GO TO NO-MATCH.
  
       CK-ARE-KEY.
           IF CAT-CATEGORY IS NOT EQUAL TO "500"
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "K" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              ARE-KEY-LINE-K
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "C" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              ARE-KEY-LINE-C
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "I" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              ARE-KEY-LINE-I
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           GO TO NO-MATCH.
  
       CK-SS-REL. 
           IF CAT-CATEGORY IS NOT EQUAL TO "525"
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "R" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              SS-REL-LINE-R 
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "I" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              SS-REL-LINE-I 
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "Q" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              SS-REL-LINE-Q 
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "2" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              SS-REL-LINE-2 
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "B" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              SS-REL-LINE-B 
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "3" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              SS-REL-LINE-3 
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           GO TO NO-MATCH.
  
       CK-SC-LINES. 
           IF CAT-CATEGORY IS NOT EQUAL TO "450"
           THEN 
              GO TO CK-SC-CON 
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "L" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              SC-MDI-LINE-L 
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "P" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              SC-MDI-LINE-P 
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "T" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              SC-MDI-LINE-T 
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "R" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              SC-MDI-LINE-R 
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "J" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              SC-MDI-LINE-J 
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "Q" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              SC-MDI-LINE-Q 
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           GO TO NO-MATCH.
  
       CK-SC-CON. 
           IF CAT-CATEGORY IS NOT EQUAL TO "550"
           THEN 
              GO TO CK-SC-JOI 
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "N" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              SC-CON-LINE-N 
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "O" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              SC-CON-LINE-O 
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           GO TO NO-MATCH.
  
       CK-SC-JOI. 
           IF CAT-CATEGORY IS NOT EQUAL TO "550"
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "A" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              SC-JOI-LINE-A 
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "B" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              SC-JOI-LINE-B 
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           IF STC-LINE-TYPE IS EQUAL TO "C" AND 
              QRY-FIELD-MAST3-KEY (MATCH-NO) IS EQUAL TO
              SC-JOI-LINE-C 
           THEN 
              GO TO GET-DATA-FIELD
           END-IF 
           GO TO NO-MATCH.
00199  GET-DATA-FIELD.                                                  QRYWITH4
00200 ******************************************************************QRYWITH4
00201 *    HAVE FIELD TABLE ENTRY - EXTRACT FIELD                      *QRYWITH4
00202 ******************************************************************QRYWITH4
00203      MOVE SPACES TO HOLD-VALUE.                                      CL**2
00204      MOVE SPACES TO SEARCH-VALUE-HOLD.                               CL**2
00205      MOVE 01 TO SUB2.                                             QRYWITH4
00206      MOVE QRY-FIELD-START (MATCH-NO) TO SUB1.                        CL**2
00207  EXTRACT-FIELD-LOOP.                                              QRYWITH4
00208      MOVE DETAIL-LINE (SUB1) TO WORK-VALUE (SUB2).                QRYWITH4
00209      ADD 1 TO SUB2.                                               QRYWITH4
00210      IF SUB2 GREATER THAN QRY-FIELD-LENGTH (MATCH-NO)                CL**2
00211          GO TO EXTRACT-XIT.                                       QRYWITH4
00212      ADD 1 TO SUB1.                                               QRYWITH4
00213      GO TO EXTRACT-FIELD-LOOP.                                    QRYWITH4
00214  EXTRACT-XIT.                                                     QRYWITH4
00215      MOVE QTBL-SEL1-FLDVALUE (MATCH-NO) TO SEARCH-VALUE-HOLD.        CL**2
           IF WORK-VALUE (1) EQUAL "-"
             OR WORK-VALUE (1) IS NUMERIC 
               MOVE HOLD-VALUE TO TEMP-VALUE
               PERFORM FIX-NUM THRU FIX-NUM-EXIT
               IF NUM-FLAG EQUAL "T"
                   MOVE TEMP-COMP TO HOLDER-COMP
                   MOVE SEARCH-VALUE-HOLD TO TEMP-VALUE 
                   PERFORM FIX-NUM THRU FIX-NUM-EXIT
                   MOVE TEMP-COMP TO SEARCH-COMP
               END-IF 
           ELSE 
               MOVE "F" TO NUM-FLAG 
           END-IF 
00216  COMPARE-VALUES.                                                     CL**2
00217 *****************************************************                CL**2
00218 *                                                                    CL**2
00219 *    DETERMINE IF FIELD IS TO BE COMPARED OR SCANNED                 CL**2
00220 *                FOR CHARACTER STRING MATCH                          CL**2
00221 *                                                                    CL**2
00222 ******************************************************               CL**2
00223      IF QTBL-SEL1-LOGIND (MATCH-NO)    EQUAL TO "CS"                 CL**2
00224          GO TO CHAR-STRING-SEARCH.                                   CL**2
00225 ******************************************************               CL**2
00226 *                                                                    CL**2
00227 *    PROCESS FIELD COMPARISON QUERIES                                CL**2
00228 *                                                                    CL**2
00229 ******************************************************               CL**2
           IF ( QTBL-SEL1-LOGIND (MATCH-NO) IS EQUAL TO 
               "EQ" OR "=" )
           THEN 
              GO TO MATCH-EQ
           END-IF 
           IF ( QTBL-SEL1-LOGIND (MATCH-NO) IS EQUAL TO 
               "GT" OR ">" )
           THEN 
              GO TO MATCH-GT
           END-IF 
           IF ( QTBL-SEL1-LOGIND (MATCH-NO) IS EQUAL TO 
               "LT" OR "<" )
           THEN 
              GO TO MATCH-LT
           END-IF 
           IF ( QTBL-SEL1-LOGIND (MATCH-NO) IS EQUAL TO 
               "GE" OR ">=" OR "=>" ) 
           THEN 
              GO TO MATCH-EGT 
           END-IF 
           IF ( QTBL-SEL1-LOGIND (MATCH-NO) IS EQUAL TO 
               "LE" OR "<=" OR "=<" ) 
           THEN 
              GO TO MATCH-ELT 
           END-IF 
00240 ******************************************************************QRYWITH4
00241 *    MATCH FOR NOT EQUAL                                         *QRYWITH4
00242 ******************************************************************QRYWITH4
           IF HOLD-VALUE EQUAL TO SPACES
               GO TO NO-MATCH.
           IF NUM-FLAG EQUAL "T"
               IF SEARCH-COMP EQUAL HOLDER-COMP 
                   GO TO NO-MATCH 
               ELSE 
                   GO TO MATCH
               END-IF 
           ELSE 
               IF SEARCH-VALUE-HOLD EQUAL TO HOLD-VALUE 
                   GO TO NO-MATCH 
               ELSE 
                   GO TO MATCH
               END-IF 
           END-IF 
00246  MATCH-EQ.                                                        QRYWITH4
           IF NUM-FLAG EQUAL "T"
               IF SEARCH-COMP EQUAL HOLDER-COMP 
                   GO TO MATCH
               ELSE 
                   GO TO NO-MATCH 
               END-IF 
           ELSE 
               IF SEARCH-VALUE-HOLD EQUAL TO HOLD-VALUE 
                   GO TO MATCH
               ELSE 
                   GO TO NO-MATCH 
               END-IF 
           END-IF 
00250  MATCH-GT.                                                        QRYWITH4
           IF NUM-FLAG EQUAL "T"
               IF HOLDER-COMP GREATER THAN SEARCH-COMP
                   GO TO MATCH
               ELSE 
                   GO TO NO-MATCH 
               END-IF 
           ELSE 
               IF HOLD-VALUE GREATER THAN SEARCH-VALUE-HOLD 
                   GO TO MATCH
               ELSE 
                   GO TO NO-MATCH 
               END-IF 
           END-IF 
00254  MATCH-LT.                                                        QRYWITH4
           IF HOLD-VALUE EQUAL TO SPACES
               GO TO NO-MATCH.
           IF NUM-FLAG EQUAL "T"
               IF HOLDER-COMP LESS THAN SEARCH-COMP 
                   GO TO MATCH
               ELSE 
                   GO TO NO-MATCH 
               END-IF 
           ELSE 
               IF HOLD-VALUE LESS THAN SEARCH-VALUE-HOLD
                   GO TO MATCH
               ELSE 
                   GO TO NO-MATCH 
               END-IF 
           END-IF 
00258  MATCH-EGT.                                                          CL**2
           IF NUM-FLAG EQUAL "T"
               IF HOLDER-COMP EQUAL TO SEARCH-COMP
                   GO TO MATCH
               ELSE 
                   GO TO MATCH-GT 
               END-IF 
           ELSE 
               IF HOLD-VALUE EQUAL TO SEARCH-VALUE-HOLD 
                   GO TO MATCH
               ELSE 
                   GO TO MATCH-GT 
               END-IF 
           END-IF 
00262  MATCH-ELT.                                                          CL**2
           IF NUM-FLAG EQUAL "T"
               IF HOLDER-COMP EQUAL TO SEARCH-COMP
                   GO TO MATCH
               ELSE 
                   GO TO MATCH-LT 
               END-IF 
           ELSE 
               IF HOLD-VALUE EQUAL TO SEARCH-VALUE-HOLD 
                   GO TO MATCH
               ELSE 
                   GO TO MATCH-LT 
               END-IF 
           END-IF 
00266  NO-MATCH.                                                        QRYWITH4
00267      IF QTBL-SEL1-ENTNO (MATCH-NO)  NOT EQUAL TO "KW"                CL**2
00268          GO TO NO-MATCH-2.                                           CL**2
00269      IF KW-SWITCH EQUAL "Y"                                          CL**2
00270          GO TO CHECK-KW2.                                            CL**2
00271      PERFORM RESET-KWCAT THRU RESET-KWCAT-XIT.                       CL**2
00272      MOVE "XX" TO QRY-ENTRY-TYPE (MATCH-NO).                         CL**2
00273  NO-MATCH-2.                                                         CL**2
           IF HAVE-CHG-SW EQUAL "1" 
               MOVE "2" TO HAVE-CHG-SW
               GO TO CHANGE-RETURN-PASS.
           IF HAVE-CHG-SW EQUAL "3" 
               MOVE "4" TO HAVE-CHG-SW
               GO TO CHANGE-RETURN-PASS.
           IF HAVE-CHG-SW EQUAL "5" 
               MOVE "6" TO HAVE-CHG-SW
               GO TO CHANGE-RETURN-PASS.
00274      IF QRYTYPE-3 EQUAL "6" OR "8"                                   CL**2
00275          GO TO QRY-HAVE-XIT.                                         CL**2
00276      IF MATCH-NO EQUAL TO 3  GO TO NEXT-LINE-LOOP.                QRYWITH4
00277      IF MATCH-NO EQUAL TO 2  GO TO CK-CAT-3.                      QRYWITH4
00278      GO TO CK-CAT-2.                                              QRYWITH4
00279  MATCH.                                                           QRYWITH4
00280 ******************************************************************QRYWITH4
00281 *    SEARCH CONDITION MET                                        *QRYWITH4
00282 ******************************************************************QRYWITH4
00283      IF QTBL-SEL1-ENTNO (MATCH-NO)  EQUAL TO "KW"                    CL**2
00284      PERFORM RESET-KWCAT THRU RESET-KWCAT-XIT                        CL**2
00285      MOVE "XX" TO QRY-ENTRY-TYPE (MATCH-NO).                         CL**2
00286      IF QRYTYPE-3 EQUAL "6" OR "8"                                   CL**2
00287          GO TO CHANGE-RETURN-PASS.                                   CL**2
00288      MOVE "Y" TO MATCH-SUB (MATCH-NO).                               CL**2
00289      IF MATCH-NO EQUAL TO 1                                       QRYWITH4
00290          GO TO CK-CAT-2.                                          QRYWITH4
00291      IF MATCH-NO EQUAL TO 2                                       QRYWITH4
00292          GO TO CK-CAT-3.                                          QRYWITH4
00293      GO TO NEXT-LINE-LOOP.                                        QRYWITH4
      ************************************************************* 
      *    FIX-NUM PROCEDURE PREPARES NUMERIC DATA SO THAT ALGEBRAIC
      *    COMPARISONS WILL TAKE PLACE. 
      *    THE FOLLOWING STEPS ARE PERFORMED: 
      *        CHECK FOR MINUS SIGN TO SET START OF SUBSCRIPT 
      *        VALIDATE THAT DATA IS ALL NUMERIC
      *            AND SAVE LOCATION OF PERIOD IF PRESENT 
      *        COUNT THE NUMBER OF PRECEDING ZEROES 
      *        CALCULATE THE NUMBER OF DIGITS TO THE RIGHT AND LEFT 
      *            OF THE PERIOD
      *        MOVE THE TWO PARTS TO THE NUMERIC VARIABLE 
      *        IF MINUS SIGN PRESENT MULTIPLY BY -1 ELSE BY +1
      *            AND STORE IN COMP-2 VARIABLE 
      * 
      *    ASSUMPTIONS
      *        TEMP-VALUE CONTAINS NUMBER 
      *        MINUS SIGN IS IN THE FIRST POSITION
      * 
      *    EXIT CONDITIONS
      *        NUMBER IS STORED IN TEMP-COMP
      * 
      ******************************************************************* 
       FIX-NUM. 
           MOVE ZEROES TO TEMP-NUM. 
           MOVE SPACE TO TEMP-NUM (1 : 1) 
           IF TEMP-DETAIL (1) EQUAL "-" 
               MOVE 2 TO SUB1 
           ELSE 
               MOVE 1 TO SUB1 
           END-IF 
           MOVE QRY-FIELD-LENGTH (MATCH-NO) TO NUM-LENGTH.
           MOVE ZERO TO DEC-SPOT. 
      *        VALIDATE NUMERIC - ONLY ONE PERIOD ALLOWED 
      *        SAVE LOCATION OF PERIOD
           MOVE "F" TO FINIS PERIOD-FLAG. 
           MOVE SPACE TO NUM-FLAG.
           PERFORM VARYING COUNTER FROM SUB1 BY 1 
             UNTIL FINIS EQUAL "T"
               IF COUNTER GREATER THAN NUM-LENGTH 
                 OR TEMP-DETAIL (COUNTER) EQUAL SPACE 
                   MOVE "T" TO FINIS
               ELSE 
                   IF TEMP-DETAIL (COUNTER) IS NOT NUMERIC
                       IF TEMP-DETAIL (COUNTER) EQUAL "." 
                           IF PERIOD-FLAG EQUAL "F" 
                               MOVE "T" TO PERIOD-FLAG
                               MOVE COUNTER TO DEC-SPOT 
                           ELSE 
                               MOVE "F" TO NUM-FLAG 
                               MOVE "T" TO FINIS
                           END-IF 
                       ELSE 
                           MOVE "F" TO NUM-FLAG 
                           MOVE "T" TO FINIS
                       END-IF 
                   END-IF 
               END-IF 
           END-PERFORM
           IF NUM-FLAG EQUAL SPACE
               MOVE "T" TO NUM-FLAG 
               COMPUTE ACTUAL-LENGTH = COUNTER - 2
           ELSE 
               GO TO FIX-NUM-EXIT 
           END-IF 
           MOVE "F" TO FINIS. 
      *        SEE IF ANY LEADING ZEROES
           PERFORM VARYING COUNTER FROM SUB1 BY 1 
             UNTIL FINIS EQUAL "T"
               IF TEMP-DETAIL (COUNTER) GREATER THAN 0
                 OR COUNTER GREATER THAN NUM-LENGTH 
                   MOVE "T" TO FINIS
               END-IF 
           END-PERFORM
           SUBTRACT 1 FROM COUNTER. 
           IF COUNTER GREATER THAN NUM-LENGTH 
               MOVE ZEROES TO TEMP-COMP 
                   GO TO FIX-NUM-EXIT 
           END-IF 
      *        COUNTER POINTS TO FIRST SIGNIFICANT DIGIT
      *        ACTUAL-LENGTH EQUAL TOTAL LENGTH COUNTING DECIMAL
      *        FIND LENGTH OF FRACTIONAL AND WHOLE NUMBERS
      *        DECIDE WHERE TO MOVE 
           IF DEC-SPOT GREATER THAN ZERO
               COMPUTE DEC-PART = ACTUAL-LENGTH - DEC-SPOT
               COMPUTE WHOLE-PART = DEC-SPOT - COUNTER
               ADD 1 TO DEC-SPOT
               MOVE TEMP-VALUE (DEC-SPOT : DEC-PART) TO 
                   TEMP-DEC (7 : DEC-PART)
               COMPUTE START-SPOT = 7 - WHOLE-PART
               MOVE TEMP-VALUE (COUNTER : WHOLE-PART) TO
                   TEMP-DEC (START-SPOT : WHOLE-PART) 
           ELSE 
               COMPUTE WHOLE-PART = ACTUAL-LENGTH - COUNTER + 1 
               COMPUTE START-SPOT = 11 - WHOLE-PART 
               MOVE TEMP-VALUE (COUNTER : WHOLE-PART) TO
                   TEMP-NUM (START-SPOT : WHOLE-PART) 
           END-IF 
      *        IF MINUS SIGN MULTIPLY BY - 1
           IF TEMP-DETAIL (1) EQUAL "-" 
               IF DEC-SPOT GREATER THAN 0 
                   COMPUTE TEMP-COMP ROUNDED = TEMP-DEC * (-1)
               ELSE 
                   COMPUTE TEMP-COMP ROUNDED = TEMP-WHOLE * (-1)
               END-IF 
           ELSE 
               IF DEC-SPOT GREATER THAN 0 
                   COMPUTE TEMP-COMP ROUNDED = TEMP-DEC * 1 
               ELSE 
                   COMPUTE TEMP-COMP ROUNDED = TEMP-WHOLE * 1 
               END-IF 
           END-IF 
        FIX-NUM-EXIT. 
           EXIT.
00294 ***********************************************************          CL**2
00295 *                                                                    CL**2
00296 *    PROCESS CHARACTER STRING SEARCH QUERIES                         CL**2
00297 *                                                                    CL**2
00298 *******************************************************              CL**2
00299  CHAR-STRING-SEARCH.                                                 CL**2
00300      MOVE QRY-FIELD-LENGTH (MATCH-NO) TO INPUT-FLD-LENGTH.           CL**2
00301      MOVE ZERO TO SUB1.                                              CL**2
00302      MOVE 1 TO SUB2.                                                 CL**2
00303 *                                                                    CL**2
00304 *     CALCULATE SEARCH VALUE LENGTH                                  CL**2
00305 *                                                                    CL**2
00306      MOVE 67 TO SVL.                                                 CL**2
00307  TAKE-AWAY-1.                                                        CL**2
00308      IF SEARCH-VALUE-CHRS (SVL) EQUAL TO SPACE                       CL**2
00309          SUBTRACT 1 FROM SVL                                         CL**2
00310          GO TO TAKE-AWAY-1.                                          CL**2
00311 *                                                                    CL**2
00312 *    BEGIN MATCH OF FIELDS                                           CL**2
00313 *            SUB1 POINTS TO I/P  SUB2 POINTS TO LITERAL              CL**2
00314 *                                                                    CL**2
00315  START-MATCH.                                                        CL**2
00316      ADD 1 TO SUB1.                                                  CL**2
00317      IF SUB1 GREATER THAN INPUT-FLD-LENGTH                           CL**2
00318          GO TO NO-MATCH.                                             CL**2
00319      IF WORK-VALUE (SUB1) NOT EQUAL TO SEARCH-VALUE-CHRS (SUB2)      CL**2
00320          GO TO START-MATCH.                                          CL**2
00321 *                                                                    CL**2
00322 *    1ST CHARACTER OF I/P FIELD MATCHES LITERAL                      CL**2
00323 *                                                                    CL**2
00324      MOVE SUB1 TO STORE-SUB.                                         CL**2
00325  MATCH-LOOP.                                                         CL**2
00326      ADD 1 TO SUB1.                                                  CL**2
00327      ADD 1 TO SUB2.                                                  CL**2
00328      IF SUB2 GREATER THAN SVL                                        CL**2
00329          GO TO MATCH.                                                CL**2
00330      IF SUB1 GREATER THAN INPUT-FLD-LENGTH                           CL**2
00331          GO TO NO-MATCH.                                             CL**2
00332      IF WORK-VALUE (SUB1) EQUAL TO SEARCH-VALUE-CHRS (SUB2)          CL**2
00333          GO TO MATCH-LOOP.                                           CL**2
00334 *                                                                    CL**2
00335 *    UNEQUAL CHARACTER SENSED-RESET COMPARE TO START OF STRING       CL**2
00336 *                                                                    CL**2
00337      MOVE 1 TO SUB2.                                                 CL**2
00338      MOVE STORE-SUB TO SUB1.                                         CL**2
00339      GO TO START-MATCH.                                              CL**2
00340 **********************************************************           CL**2
00341 *                                                                    CL**2
00342 *    LOCATE KEYWORDS                                                 CL**2
00343 *    SCANS CLASSIFICATION CAT AND  LOCATES KEYWORDS                  CL**2
00344 *    A COMMA SEPARATES KEYWORD-SPACES ARE IGNORED                    CL**2
00345  KW-SEARCH.                                                          CL**2
00346      MOVE QTBL-SEL1-FLDNO (MATCH-NO) TO KW-SEARCH-HOLD.              CL**2
00347      MOVE ZEROES TO KW-COUNTER.                                      CL**2
00348      MOVE 1 TO KSUB1.                                                CL**2
00349      MOVE "N" TO KW-SWITCH.                                          CL**2
00350  NEW-KW.                                                             CL**2
00351      MOVE SPACES TO SEARCH-VALUE-HOLD.                               CL**2
00352      MOVE SPACES TO HOLD-VALUE.                                      CL**2
00353      MOVE 1 TO KSUB2.                                                CL**2
00354      ADD 1 TO KW-COUNTER.                                            CL**2
00355  SCAN-KW.                                                            CL**2
00356      IF KSUB1 EQUAL 68                                               CL**2
00357          GO TO CHECK-KW.                                             CL**2
00358      IF DETAIL-LINE (KSUB1) EQUAL SPACE                              CL**2
00359          ADD 1 TO KSUB1                                              CL**2
00360          GO TO SCAN-KW.                                              CL**2
00361      IF DETAIL-LINE (KSUB1) EQUAL ","                                CL**2
00362          GO TO CHECK-KW.                                             CL**2
00363 *                                                                    CL**2
00364 *    ISOLATE KW                                                      CL**2
00365 *                                                                    CL**2
00366      MOVE DETAIL-LINE (KSUB1) TO WORK-VALUE (KSUB2).                 CL**2
00367      IF KSUB2 GREATER THAN 50                                        CL**2
00368          GO TO NO-KW-FOUND.                                          CL**2
00369      ADD 1 TO KSUB1.                                                 CL**2
00370      ADD 1 TO KSUB2.                                                 CL**2
00371      GO TO SCAN-KW.                                                  CL**2
00372 *                                                                    CL**2
00373 *    HAVE A KEYWORD                                                  CL**2
00374 *        IF KW-COUNTER-IN EQUAL ZEROES ALL KW ARE TO COMPARED        CL**2
00375 *                                                                    CL**2
00376  CHECK-KW.                                                           CL**2
00377      IF HOLD-VALUE EQUAL SPACES                                      CL**2
00378          GO TO NEXT-KW-LINE.                                         CL**2
00379      IF KW-COUNT-IN EQUAL ZEROES                                     CL**2
00380          SUBTRACT 1 FROM KSUB2                                       CL**2
00381          MOVE KSUB2 TO QRY-FIELD-LENGTH (MATCH-NO)                   CL**2
00382          MOVE "Y" TO KW-SWITCH                                       CL**2
00383          GO TO EXTRACT-XIT.                                          CL**2
00384      IF KW-COUNT-IN EQUAL KW-COUNTER                                 CL**2
00385          SUBTRACT 1 FROM KSUB2                                       CL**2
00386          MOVE KSUB2 TO QRY-FIELD-LENGTH (MATCH-NO)                   CL**2
00387          GO TO EXTRACT-XIT.                                          CL**2
00388  CHECK-KW2.                                                          CL**2
00389      IF KSUB1 EQUAL 68                                               CL**2
00390          GO TO NEXT-KW-LINE.                                         CL**2
00391      ADD 1 TO KSUB1.                                                 CL**2
00392      GO TO NEW-KW.                                                   CL**2
00393  NEXT-KW-LINE.                                                       CL**2
00394      PERFORM READ-NEXT-DATA THRU READ-NEXT-DATA-XIT.                 CL**2
00395      IF DATA-RETURN-CODE NOT EQUAL "0"                               CL**2
00396          GO TO NO-KW-FOUND.                                          CL**2
00397      IF CAT-CATEGORY NOT EQUAL "020"                                 CL**2
00398          GO TO NO-KW-FOUND.                                          CL**2
00399      IF CAT-COMMENT EQUAL "*"                                        CL**2
00400          GO TO NEXT-KW-LINE.                                         CL**2
00401      MOVE 1 TO KSUB1.                                                CL**2
00402      GO TO NEW-KW.                                                   CL**2
00403 *                                                                    CL**2
00404 *    KEYWORD NOT FOUND                                               CL**2
00405 *                                                                    CL**2
00406  NO-KW-FOUND.                                                        CL**2
00407      MOVE "N" TO KW-SWITCH.                                          CL**2
00408      GO TO NO-MATCH.                                                 CL**2
00409 *                                                                    CL**2
00410 *    IF KW SCAN WAS PERFORMED THEN REPOSITIONS TO                    CL**2
00411 *        START OF CLASSIFICATION CAT UNLESS ALL SEARCHES DONE        CL**2
00412 *                                                                    CL**2
00413  RESET-KWCAT.                                                        CL**2
00414      MOVE "N" TO KW-SWITCH.                                          CL**2
00415      PERFORM READ-FIRST-DATA THRU READ-FIRST-DATA-XIT.               CL**2
00416      MOVE "020" TO DATA-ENTRY-CAT.                                   CL**2
00417      PERFORM READ-CATEGORY THRU READ-CATEGORY-XIT.                   CL**2
00418      IF MATCH-NO EQUAL 1 OR 2                                        CL**2
00419          GO TO RESET-KWCAT-XIT.                                      CL**2
00420 *                                                                    CL**2
00421 *    ON THIRD TEST-HAVE FINISHED                                     CL**2
00422 *                                                                    CL**2
00423  READBY-KWCAT.                                                       CL**2
00424      PERFORM READ-NEXT-DATA THRU READ-NEXT-DATA-XIT.                 CL**2
00425      MOVE "Y" TO MATCH-SUB (MATCH-NO).                               CL**2
00426      MOVE "XX" TO QRY-ENTRY-TYPE (MATCH-NO).                         CL**2
00427      IF DATA-RETURN-CODE EQUAL 1                                     CL**2
00428          PERFORM QRY-WITH-CHK THRU QRY-WITH-XIT                      CL**2
00429          GO TO QRY-HAVE-XIT.                                         CL**2
00430      IF CAT-CATEGORY NOT EQUAL "020"                                 CL**2
00431          GO TO CK-CATEGORY.                                          CL**2
00432      GO TO READBY-KWCAT.                                             CL**2
00433  RESET-KWCAT-XIT.                                                    CL**2
00434      EXIT.                                                           CL**2
00435                                                                    QRYWITH
00436  QRY-WITH-CHK.                                                    QRYWITH4
00437 ******************************************************************QRYWITH4
00438 *    SEE IF CONDITION MET                                            CL**2
00439 ******************************************************************QRYWITH4
00440      IF QTBL-SEL1-LOGIND (3) EQUAL TO SPACES                      QRYWITH4
00441          GO TO CHK-2.                                             QRYWITH4
00442      IF QTBL-SEL1-ANDOR (2) EQUAL TO "O"                             CL**2
00443          GO TO CK-OR-2.                                              CL**2
00444      IF QTBL-SEL1-ANDOR (1) EQUAL TO "A"                             CL**2
00445          GO TO ALL-A.                                                CL**2
00446 *    HAVE OR-AND                                                     CL**2
00447      IF MATCH-1 EQUAL TO "Y"  GO TO QRY-HIT.                         CL**2
00448      IF MATCH-2 EQUAL TO "N"  GO TO QRY-WITH-XIT.                    CL**2
00449      IF MATCH-3 EQUAL TO "N"  GO TO QRY-WITH-XIT.                    CL**2
00450      GO TO QRY-HIT.                                                  CL**2
00451  ALL-A.                                                              CL**2
00452 *    HAVE AND-AND                                                    CL**2
00453      IF MATCH-3 EQUAL TO "N"  GO TO QRY-WITH-XIT.                    CL**2
00454      GO TO CHK-2.                                                    CL**2
00455  CK-OR-2.                                                            CL**2
00456      IF MATCH-3 EQUAL TO "Y"  GO TO QRY-HIT.                         CL**2
00457  CHK-2.                                                              CL**2
00458      IF QTBL-SEL1-ANDOR (1) NOT EQUAL TO "A"                         CL**2
00459          GO TO CK-OR-1.                                              CL**2
00460      IF MATCH-1 EQUAL TO "N"  GO TO QRY-WITH-XIT.                    CL**2
00461      IF MATCH-2 EQUAL TO "N"  GO TO QRY-WITH-XIT.                    CL**2
00462      GO TO QRY-HIT.                                                  CL**2
00463  CK-OR-1.                                                            CL**2
00464      IF MATCH-1 EQUAL TO "Y"  GO TO QRY-HIT.                         CL**2
00465      IF MATCH-2 EQUAL TO "Y"  GO TO QRY-HIT.                         CL**2
00466      GO TO QRY-WITH-XIT.                                             CL**2
00467  QRY-HIT.                                                            CL**2
00468 ******************************************************************QRYWITH4
00469 *    HAVE A MATCH                                                *QRYWITH4
00470 ******************************************************************QRYWITH4
00471      MOVE "Y" TO HIT-SW.                                          QRYWITH4
00472  QRY-WITH-XIT.                                                    QRYWITH4
00473      EXIT.                                                        QRYWITH4
00474                                                                    QRYWITH
00475  QRY-HAVE.                                                           CL**2
00476      MOVE "N" TO HIT-SW.                                             CL**2
00477  CK-CHANGE.                                                          CL**2
00478      IF QTBL-SEL1-ENTNO (1) EQUAL "$D"                               CL**2
00479        OR "$R" OR "$T" OR "$B" OR "$L" OR "$C"                       CL**2
             OR "$F"
00480          GO TO HAVE-CHANGE-CLAUSE.                                   CL**2
00481      GO TO HAVE-CAT.                                                 CL**2
00482 ************************************************************         CL**2
00483 *                                                                    CL**2
00484 *    PROCESS CHANGE CLAUSE                                           CL**2
00485 *                                                                    CL**2
00486 **********************************************************           CL**2
00487  HAVE-CHANGE-CLAUSE.                                                 CL**2
00488      IF 1ST-CHGQRY-SW EQUAL "Y"                                      CL**2
00489          MOVE "N" TO 1ST-CHGQRY-SW                                   CL**2
00490          MOVE 1 TO CON-ENTRY-FUNCTION                                CL**2
00491          PERFORM CON-READ THRU CON-READ-XIT                          CL**2
00492          MOVE CTL-DATE-UPD TO 8-BYTE-DATE                            CL**2
               MOVE DATE-BYTES-12 TO CTL-DATE-34
               MOVE DATE-BYTES-45 TO CTL-DATE-56
               MOVE DATE-BYTES-78 TO CTL-DATE-12. 
00496 *                                                                    CL**2
00497 *    RETRIEVE THE ENTRY                                              CL**2
00498 *                                                                    CL**2
00499      MOVE QUERY-NAME TO DATA-ENTRY-NAME.                             CL**2
00500      PERFORM READ-FIRST-DATA THRU READ-FIRST-DATA-XIT.               CL**2
00501      IF DATA-RETURN-CODE EQUAL TO "9"                                CL**2
00502          MOVE "DR" TO QTBL-HDR-REQTYPE                               CL**2
00503          MOVE DATA-ENTRY-NAME TO QTBL-SEL2-TOCNAME                   CL**2
00504          GO TO PROGRAM-END-BAD.                                      CL**2
00505      MOVE SPACES TO HOLD-VALUE.                                      CL**2
00506      MOVE SPACES TO SEARCH-VALUE-HOLD.                               CL**2
00507      MOVE 1 TO MATCH-NO.                                             CL**2
00508      MOVE "N" TO HAVE-CHG-SW.                                        CL**2
00509      MOVE ALL "N" TO MATCH-SW.                                       CL**2
00510 *                                                                    CL**2
00511 *    WHAT TYPE OF CHANGE TEST                                        CL**2
00512 *                                                                    CL**2
00513      IF QTBL-SEL1-ENTNO (1) EQUAL "$C"                               CL**2
00514          GO TO ANY-CHANGE-TEST.                                      CL**2
00515      IF QTBL-SEL1-ENTNO (1) EQUAL "$L"                               CL**2
00516          GO TO LAST-UPDATE-TEST.                                     CL**2
00517      IF QTBL-SEL1-ENTNO (1) EQUAL "$D"                               CL**2
00518          GO TO DATE-CHANGE-TEST.                                     CL**2
00519      IF QTBL-SEL1-ENTNO (1) EQUAL "$R"                               CL**2
00520          GO TO REV-CHANGE-TEST.                                      CL**2
00521      IF QTBL-SEL1-ENTNO (1) EQUAL "$T"                               CL**2
             OR QTBL-SEL1-ENTNO (1) EQUAL "$F"
00522          GO TO TIMES-CHANGE-TEST.                                    CL**2
00523      GO TO ONLY-BY-TEST.                                             CL**2
00524 *                                                                    CL**2
00525 *    TEST FOR ANY CHANGE SINCE ADDED                                 CL**2
00526 *                                                                    CL**2
00527  ANY-CHANGE-TEST.                                                    CL**2
           MOVE ZEROS TO QTBL-SEL1-FLDVALUE (1).
           GO TO TIMES-CHANGE-TEST. 
00531 *                                                                    CL**2
00532 *    CHANGED IN LAST UPDATE                                          CL**2
00533 *                                                                    CL**2
00534  LAST-UPDATE-TEST.                                                   CL**2
00535      MOVE DATA-HDR-DATE-LST TO HOLD-VALUE.                           CL**2
00536      MOVE CTL-DATE-HOLD TO SEARCH-VALUE-HOLD.                        CL**2
00537      GO TO COMPARE-VALUES.                                           CL**2
00538 *                                                                    CL**2
00539 *    DATE OF CHANGE TESTS                                            CL**2
00540 *                                                                    CL**2
00541  DATE-CHANGE-TEST.                                                   CL**2
00542      MOVE QTBL-SEL1-FLDVALUE (1) TO DATE-IN-HOLD.                    CL**2
00543      MOVE DATE-IN-MM TO DATE-OUT-MM.                                 CL**2
00544      MOVE DATE-IN-DD TO DATE-OUT-DD.                                 CL**2
00545      MOVE DATE-IN-YY TO DATE-OUT-YY.                                 CL**2
00546      MOVE DATE-OUT-HOLD TO SEARCH-VALUE-HOLD.                        CL**2
           MOVE DATA-HDR-DATE-LST TO HOLD-VALUE.
           IF QTBL-SEL1-LOGIND (1) EQUAL "LT" 
             AND QTBL-SEL1-LOGIND (2) EQUAL "GT"
               MOVE "1" TO HAVE-CHG-SW
             ELSE 
               MOVE "D" TO HAVE-CHG-SW. 
00553      GO TO COMPARE-VALUES.                                           CL**2
00554 *    PROCESS BETWEEN CLAUSE                                          CL**2
00555  DATE-CHANGE-2.                                                      CL**2
00556      MOVE "N" TO HAVE-CHG-SW.                                        CL**2
00557      MOVE 2 TO MATCH-NO.                                             CL**2
           MOVE DATA-HDR-DATE-LST TO HOLD-VALUE.
00559      MOVE QTBL-SEL1-FLDVALUE (2) TO DATE-IN-HOLD.                    CL**2
00560      MOVE DATE-IN-MM TO DATE-OUT-MM.                                 CL**2
00561      MOVE DATE-IN-DD TO DATE-OUT-DD.                                 CL**2
00562      MOVE DATE-IN-YY TO DATE-OUT-YY.                                 CL**2
00563      MOVE DATE-OUT-HOLD TO SEARCH-VALUE-HOLD.                        CL**2
00564      GO TO COMPARE-VALUES.                                           CL**2
00565 *                                                                    CL**2
00566 *    NUMBER OF TIMES CHANGED TEST                                    CL**2
00567 *                                                                    CL**2
00568  TIMES-CHANGE-TEST.                                                  CL**2
00569      MOVE DATA-HDR-USAGE TO USAGE-WORK.                              CL**2
00570      MOVE USAGE-WORK TO HOLD-VALUE.                                  CL**2
           MOVE QTBL-SEL1-FLDVALUE (1) TO TIMES-HOLD. 
           MOVE TIMES-VALUE TO SEARCH-VALUE-HOLD. 
           IF QTBL-SEL1-LOGIND (1) EQUAL "LT" 
             AND QTBL-SEL1-LOGIND (2) EQUAL "GT"
               MOVE "3" TO HAVE-CHG-SW
             ELSE 
               MOVE "T" TO HAVE-CHG-SW. 
00573      GO TO COMPARE-VALUES.                                           CL**2
00574 *    PROCESS BETWEEN CLAUSE                                          CL**2
00575  TIMES-CHANGE-2.                                                     CL**2
00576      MOVE "N" TO HAVE-CHG-SW.                                        CL**2
00577      MOVE 2 TO MATCH-NO.                                             CL**2
00578      MOVE USAGE-WORK TO HOLD-VALUE.                                  CL**2
           MOVE QTBL-SEL1-FLDVALUE (2) TO TIMES-HOLD. 
           MOVE TIMES-VALUE TO SEARCH-VALUE-HOLD. 
00580      GO TO COMPARE-VALUES.                                           CL**2
00581 *                                                                    CL**2
00582 *    REVISION NUMBER CHANGED ON TEST                                 CL**2
00583 *                                                                    CL**2
00584  REV-CHANGE-TEST.                                                    CL**2
00585      MOVE DATA-HDR-REV-ADD TO REV-WORK.                              CL**2
00586      MOVE REV-WORK TO HOLD-VALUE.                                    CL**2
00587      MOVE QTBL-SEL1-FLDVALUE (1) TO SEARCH-VALUE-HOLD.               CL**2
           IF QTBL-SEL1-LOGIND (1) EQUAL "LT" 
             AND QTBL-SEL1-LOGIND (2) EQUAL "GT"
               MOVE "5" TO HAVE-CHG-SW
             ELSE 
               MOVE "R" TO HAVE-CHG-SW. 
00589      GO TO COMPARE-VALUES.                                           CL**2
00590 *    PROCESS BETWEEN CLAUSE                                          CL**2
00591  REV-CHANGE-2.                                                       CL**2
00592      MOVE "N" TO HAVE-CHG-SW.                                        CL**2
00593      MOVE 2 TO MATCH-NO.                                             CL**2
00594      MOVE REV-WORK TO HOLD-VALUE.                                    CL**2
00595      MOVE QTBL-SEL1-FLDVALUE (2) TO SEARCH-VALUE-HOLD.               CL**2
00596      GO TO COMPARE-VALUES.                                           CL**2
00597 *                                                                    CL**2
00598 *     ONLY BY TEST SPECIFIED                                         CL**2
00599 *                                                                    CL**2
00600  ONLY-BY-TEST.                                                       CL**2
00601      MOVE DATA-HDR-NAME-LST TO HOLD-VALUE.                           CL**2
00602      MOVE QTBL-SEL1-FLDVALUE (1) TO SEARCH-VALUE-HOLD.               CL**2
00603      GO TO COMPARE-VALUES.                                           CL**2
00604 *    MATCHING LOGIC RETRUNS HERE ON PASS CONDITIONS                  CL**2
00605 *                                                                    CL**2
00606  CHANGE-RETURN-PASS.                                                 CL**2
           IF HAVE-CHG-SW EQUAL "1" 
               GO TO CHANGE-BY-TEST.
           IF HAVE-CHG-SW EQUAL "D" OR "2"
00608          GO TO DATE-CHANGE-2.                                        CL**2
           IF HAVE-CHG-SW EQUAL "3" 
               GO TO CHANGE-BY-TEST.
           IF HAVE-CHG-SW EQUAL "T" OR "4"
00610          GO TO TIMES-CHANGE-2.                                       CL**2
           IF HAVE-CHG-SW EQUAL "5" 
               GO TO CHANGE-BY-TEST.
           IF HAVE-CHG-SW EQUAL "R" OR "6"
00612          GO TO REV-CHANGE-2.                                         CL**2
00613      IF HAVE-CHG-SW EQUAL "B"                                        CL**2
00614          GO TO SET-HIT-SW.                                           CL**2
00615 *                                                                    CL**2
00616 *    CHANGED BY TEST (LAST TEST)                                     CL**2
00617 *        BY TEST COMBINED WITH ANOTHER TYPE                          CL**2
00618  CHANGE-BY-TEST.                                                     CL**2
00619      IF QTBL-SEL1-ENTNO (3) NOT EQUAL "$B"                           CL**2
00620          GO TO SET-HIT-SW.                                           CL**2
00621      MOVE 3 TO MATCH-NO.                                             CL**2
00622      MOVE DATA-HDR-NAME-LST TO HOLD-VALUE.                           CL**2
00623      MOVE QTBL-SEL1-FLDVALUE (3) TO SEARCH-VALUE-HOLD.               CL**2
00624      MOVE "EQ" TO QTBL-SEL1-LOGIND (3).                              CL**2
00625      MOVE "B" TO HAVE-CHG-SW.                                        CL**2
00626      GO TO COMPARE-VALUES.                                           CL**2
00627  SET-HIT-SW.                                                         CL**2
00628      MOVE "Y" TO HIT-SW.                                             CL**2
00629      GO TO QRY-HAVE-XIT.                                             CL**2
00630 **********************************************                       CL**2
00631 *    HAVING CATEGORY (MISSING) QUERY                                 CL**2
00632 **********************************************                       CL**2
00633  HAVE-CAT.                                                           CL**2
00634      MOVE ALL "N" TO MATCH-SW.                                       CL**2
00635      MOVE QUERY-NAME TO DATA-ENTRY-NAME.                             CL**2
00636      MOVE 1 TO MATCH-NO.                                             CL**2
00637      PERFORM CK-HAVE THRU CK-HAVE-XIT.                               CL**2
00638      IF QTBL-SEL1-FLDNO (2) NOT EQUAL TO SPACES                      CL**2
00639          MOVE 2 TO MATCH-NO                                          CL**2
00640          PERFORM CK-HAVE THRU CK-HAVE-XIT.                           CL**2
00641      IF QTBL-SEL1-FLDNO (3) NOT EQUAL TO SPACES                      CL**2
00642          MOVE 3 TO MATCH-NO                                          CL**2
00643          PERFORM CK-HAVE THRU CK-HAVE-XIT.                           CL**2
00644      PERFORM QRY-WITH-CHK THRU QRY-WITH-XIT.                         CL**2
00645      GO TO QRY-HAVE-XIT.                                             CL**2
00646  CK-HAVE.                                                            CL**2
00647      MOVE QTBL-SEL1-CATNO (MATCH-NO) TO DATA-ENTRY-CAT.              CL**2
00648                                                                      CL**2
00649      PERFORM READ-CATEGORY THRU READ-CATEGORY-XIT.                   CL**2
00650      IF DATA-RETURN-CODE EQUAL TO "0"                                CL**2
00651          GO TO HAVE-CATEGORY.                                        CL**2
00652 *    CATEGORY NOT ON FILE                                            CL**2
00653      IF QTBL-SEL1-LOGIND (MATCH-NO) EQUAL TO "NE"                    CL**2
00654          MOVE "Y" TO MATCH-SUB (MATCH-NO).                           CL**2
00655      GO TO CK-HAVE-XIT.                                              CL**2
00656  HAVE-CATEGORY.                                                      CL**2
00657 *    CATEGORY IS ON FILE                                             CL**2
00658      IF QTBL-SEL1-LOGIND (MATCH-NO) EQUAL TO "EQ"                    CL**2
00659          MOVE "Y" TO MATCH-SUB (MATCH-NO).                           CL**2
00660  CK-HAVE-XIT.                                                        CL**2
00661      EXIT.                                                           CL**2
00662  QRY-HAVE-XIT.                                                       CL**2
00663      EXIT.                                                           CL**2
