diff options
| author | Murilo Ijanc <[email protected]> | 2026-07-26 12:49:48 -0300 |
|---|---|---|
| committer | Murilo Ijanc <[email protected]> | 2026-07-26 12:49:48 -0300 |
| commit | f979d07d23098b96e758b3feb555cd06d85d9b2d (patch) | |
| tree | 47298197a17a3d6c438a1f4cc7cb61afd390cf05 /src/cepis-normalize-cep.cob | |
| download | cobol-f979d07d23098b96e758b3feb555cd06d85d9b2d.tar.gz | |
Initial importv0.1.0
Diffstat (limited to 'src/cepis-normalize-cep.cob')
| -rw-r--r-- | src/cepis-normalize-cep.cob | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/src/cepis-normalize-cep.cob b/src/cepis-normalize-cep.cob new file mode 100644 index 0000000..41615ad --- /dev/null +++ b/src/cepis-normalize-cep.cob @@ -0,0 +1,74 @@ +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. |