summaryrefslogtreecommitdiffstats
path: root/src/cepis-normalize-cep.cob
diff options
context:
space:
mode:
authorMurilo Ijanc <[email protected]>2026-07-26 12:49:48 -0300
committerMurilo Ijanc <[email protected]>2026-07-26 12:49:48 -0300
commitf979d07d23098b96e758b3feb555cd06d85d9b2d (patch)
tree47298197a17a3d6c438a1f4cc7cb61afd390cf05 /src/cepis-normalize-cep.cob
downloadcobol-f979d07d23098b96e758b3feb555cd06d85d9b2d.tar.gz
Initial importv0.1.0
Diffstat (limited to 'src/cepis-normalize-cep.cob')
-rw-r--r--src/cepis-normalize-cep.cob74
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.