IDENTIFICATION DIVISION. PROGRAM-ID. CEPIS-NORMALIZE-CEP. *> --------------------------------------------------------------------- *> Reduce a CEP to its eight digits. *> *> CALL "CEPIS-NORMALIZE-CEP" *> USING CEPIS-CEP-INPUT CEPIS-CEP CEPIS-STATUS *> *> "01001-000", "01001000", " 01001-000 " and "01001.000" all give *> "01001000". Anything that does not leave exactly eight digits sets *> CEPIS-INVALID-CEP and leaves CEPIS-CEP as spaces. *> *> CEPIS-LOOKUP runs this before opening a socket. A seven-digit CEP is *> the caller's bug, and a round trip for the server to say so wastes *> both sides' time. *> --------------------------------------------------------------------- DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-I PIC 9(4). 01 WS-N PIC 9(4). 01 WS-C PIC X. 01 WS-CLEAN PIC X(20). LINKAGE SECTION. COPY "cepis.cpy". PROCEDURE DIVISION USING CEPIS-CEP-INPUT CEPIS-CEP CEPIS-STATUS. MAIN-START. MOVE SPACES TO CEPIS-CEP MOVE SPACES TO WS-CLEAN MOVE 0 TO WS-N MOVE 0 TO CEPIS-STATUS-HTTP MOVE 0 TO CEPIS-STATUS-ATTEMPTS MOVE -1 TO CEPIS-STATUS-RETRY-AFTER-MS MOVE SPACES TO CEPIS-STATUS-MESSAGE PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > 20 MOVE CEPIS-CEP-INPUT(WS-I:1) TO WS-C EVALUATE TRUE WHEN WS-C = SPACE OR WS-C = "-" OR WS-C = "." CONTINUE WHEN WS-C >= "0" AND WS-C <= "9" ADD 1 TO WS-N IF WS-N <= 20 MOVE WS-C TO WS-CLEAN(WS-N:1) END-IF WHEN OTHER PERFORM REJECT GOBACK END-EVALUATE END-PERFORM IF WS-N NOT = 8 PERFORM REJECT GOBACK END-IF MOVE WS-CLEAN(1:8) TO CEPIS-CEP SET CEPIS-OK TO TRUE GOBACK. *> ------------------------------------------------------------------- REJECT. SET CEPIS-INVALID-CEP TO TRUE MOVE SPACES TO CEPIS-STATUS-MESSAGE STRING "CEP must be 8 digits, got '" FUNCTION TRIM(CEPIS-CEP-INPUT) "'" DELIMITED BY SIZE INTO CEPIS-STATUS-MESSAGE END-STRING. END PROGRAM CEPIS-NORMALIZE-CEP.