IDENTIFICATION DIVISION. PROGRAM-ID. TESTCOMPARE. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. * X-FIELD PIC X(4) explict USAGE DISPLAY * (instead already implicit USAGE DISPLAY) * to demonstrate the general USAGE of "PIC X(n)" - Variables 01 X-FIELD PIC X(4) USAGE DISPLAY VALUE "0001". 01 NUM-FIELD-DISPLAY PIC S9(4) USAGE DISPLAY VALUE 1. 01 NUM-FIELD-COMP PIC S9(4) USAGE COMP VALUE 1. 01 NUM-FIELD-X PIC X(4) VALUE SPACE. PROCEDURE DIVISION. COMPARE-DISPLAY-ALPHANUMERIC. * This is allowed in 1985 and 2002 (NUM-FIELD USAGE DISPLAY !) IF NUM-FIELD-DISPLAY = X-FIELD THEN DISPLAY "COMPARE: NUM-DISPLAY = X SUCCESSFULL" ELSE DISPLAY "COMPARE: NUM-DISPLAY = X FAILED!" END-IF. COMPARE-COMP-ALPHANUMERIC. * - is this allowed in ANSI 1985 ?! * * see § 6.3.1.1 ... * --> the general rule is "MUST HAVE SAME USAGE" ! * for ALL comparisions other then * purely numeric comparisions (= both operands numeric!) * --> "NUM-FIELD-COMP" must have same usage as "X-FIELD" * (= implicit USAGE DISPLAY) --> USAGE DISPLAY) * § 6.3.1.1.2 (1) and (2) confuses a little bit! * * - NOT allowed in ISO 2002 (NUM-FIELD USAGE COMP !) * § 8.8.4.1.1.4 --> is clearly forbidden! * (--> USAGE DISPLAY (or USAGE NATIONAL)) * * Micro Focus and BULL GCOS7 Compiler allows the following! * --> without any warnings (ANSI 1985 Standard-Flagging used!) * (behavior is like in COMPARE-AFTER-MOVE-02 later ...) IF NUM-FIELD-COMP = X-FIELD THEN DISPLAY "COMPARE: NUM-COMP = X SUCCESSFULL" ELSE DISPLAY "COMPARE: NUM-COMP = X FAILED!" END-IF. COMPARE-AFTER-MOVE-01. * Compare after a MOVE TO NUM-FIELD-X * --> purely alphanumeric compare! * MOVE SPACE TO NUM-FIELD-X. MOVE NUM-FIELD-DISPLAY TO NUM-FIELD-X. IF NUM-FIELD-X = X-FIELD THEN DISPLAY "COMPARE: NUM-DISPLAY => NUM-FIELD-X = X SUCCESSFULL" ELSE DISPLAY "COMPARE: NUM-DISPLAY => NUM-FIELD-X = X FAILED!" END-IF. COMPARE-AFTER-MOVE-02. * Compare after a MOVE TO NUM-FIELD-X * --> purely alphanumeric compare! * MOVE SPACE TO NUM-FIELD-X. MOVE NUM-FIELD-COMP TO NUM-FIELD-X. IF NUM-FIELD-X = X-FIELD THEN DISPLAY "COMPARE: NUM-COMP => NUM-FIELD-X = X SUCCESSFULL" ELSE DISPLAY "COMPARE: NUM-COMP => NUM-FIELD-X = X FAILED!" END-IF. STOP RUN.