Categorias

Como converter um endereço IP em hexadecimal e vice-versa

Os verbos TCP-IP são passados, no COBOL, via CALL ‘EZASOKET’ USING.

Os endereços IP devem ser informados em hexadecimal, numa FULLWORD, para o progarama EZASOKET.

Este código converte um endereço TCP-IP do formato 999.999.999.999 para uma FULLWORD, e vice-versa.

ID           DIVISION.
       PROGRAM-ID.  SWXTCPIP.
       AUTHOR.      HUMBERTO HENRIQUE CANCELINHA.
      * SUBROTINA   Converte um endereco IP, do formato:
      *             1 - hexadecimal para o formato NNN.NNN.NNN.NNN. ou
      *             2 - do formato NNN.NNN.NNN.NNN para o hexadecimal
      * DATA        02 de maio de 2007
      * OBJETIVO    1 - Recebe um endereco IP em HEXA ou NNN.NNN.NNN.NNN
      *             2 - Converte para o formato oposto ao recebido.
      *             3 - Devolve o IP convertido.
      *
      *-----------------------------------------------------------------
      *            HISTORICO DAS MANUTENCOES
      * ---------- -----------------------------------------------------
      * ANALISTA   DESCRICAO
      *CANCELINHA  Permitir a conversao do formato hexa para o formato
      *            NNN.NNN.NNN.NNN e vice-versa.
      *-----------------------------------------------------------------
       ENVIRONMENT                        DIVISION.
       CONFIGURATION                      SECTION.
       SPECIAL-NAMES.
           DECIMAL-POINT                  IS       COMMA.
       DATA                               DIVISION.
       WORKING-STORAGE                    SECTION.
       01  FILLER.
           03  W-ALFA.
               05  W-ALFA1                PIC  9(03).
               05  FILLER                 PIC  X(01)  VALUE  '.'.
               05  W-ALFA2                PIC  9(03).
               05  FILLER                 PIC  X(01)  VALUE  '.'.
               05  W-ALFA3                PIC  9(03).
               05  FILLER                 PIC  X(01)  VALUE  '.'.
               05  W-ALFA4                PIC  9(03).
           03  W-FULL.
               05  W-F1                   PIC  X(01).
               05  W-F2                   PIC  X(01).
               05  W-F3                   PIC  X(01).
               05  W-F4                   PIC  X(01).
           03  W-BINARY                   PIC  9(04)  COMP.
           03  FILLER                     REDEFINES   W-BINARY.
               05  W-B1                   PIC  X(01).
               05  W-B2                   PIC  X(01).
      *-----------------------------------------------------------------
       LINKAGE                            SECTION.
       01  LK-IP-HEXA                     PIC  X(04).
       01  LK-IP-ALFA                     PIC  X(15).
      *-----------------------------------------------------------------
       PROCEDURE    DIVISION              USING    LK-IP-HEXA
                                                   LK-IP-ALFA.
      *             Para converter de hexadecimal para NNN.NNN.NNN.NNN:
      *             LK-IP-HEXA deve conter o IP em hexadecimal
      *             LK-IP-ALFA deve conter SPACES ou LOW-VALUES
      *             A rotina retorna o IP convertido em LK-IP-ALFA.
      *
      *             Para converter de NNN.NNN.NNN.NNN para hexadecimal:
      *             LK-IP-HEXA deve conter SPACES ou LOW-VALUES
      *             LK-IP-ALFA deve conter o IP NNN.NNN.NNN.NNN.
      *             A rotina retorna o IP convertido em LK-IP-HEXA.
      *-----------------------------------------------------------------

           IF  LK-IP-ALFA                 EQUAL    SPACES
           OR  LK-IP-ALFA                 EQUAL    LOW-VALUES
               MOVE LK-IP-HEXA            TO       W-FULL
               MOVE ZEROS                 TO       W-BINARY
               MOVE W-F1                  TO       W-B2
               MOVE W-BINARY              TO       W-ALFA1
               MOVE W-F2                  TO       W-B2
               MOVE W-BINARY              TO       W-ALFA2
               MOVE W-F3                  TO       W-B2
               MOVE W-BINARY              TO       W-ALFA3
               MOVE W-F4                  TO       W-B2
               MOVE W-BINARY              TO       W-ALFA4
               MOVE W-ALFA                TO       LK-IP-ALFA
               GOBACK.

           MOVE     LK-IP-ALFA            TO       W-ALFA.
           MOVE     SPACES                TO       W-FULL.
           MOVE     W-ALFA1               TO       W-BINARY.
           MOVE     W-B2                  TO       W-F1.
           MOVE     W-ALFA2               TO       W-BINARY.
           MOVE     W-B2                  TO       W-F2.
           MOVE     W-ALFA3               TO       W-BINARY.
           MOVE     W-B2                  TO       W-F3.
           MOVE     W-ALFA4               TO       W-BINARY.
           MOVE     W-B2                  TO       W-F4.
           MOVE     W-FULL                TO       LK-IP-HEXA.

           GOBACK.
      *====================== PROGRAM END ==============================





      *================ MANUAL DE USO DA ROTINA ========================

1 - Definir os campos HEXA e ALFA.
    HEXA he uma FULLWORD para endereco IP em formato HEXADECIMAL.
         01 AX-HEXA-X  PIC X(04).

    ALFA he um campo alfanumerico, com 15 bytes, para endereco IP no
         formato NNN.NNN.NNN.NNN
         01 AX-ALFA-X  PIC X(15).

2 - Para converter de HEXA para NNN.NNN.NNN.NNN:
    . AX-HEXA-X deve conter o endereco IP em hexadecimal
    . AX-ALFA-X deve conter o SPACES ou LOW-VALUES.
    . A rotina devolve o IP convertido em AX-ALFA-X.

    Para converter de NNN.NNN.NNN.NNN para HEXA:
    . AX-HEXA-X deve conter o SPACES ou LOW-VALUES
    . AX-ALFA-X deve conter o endereco IP no formato NNN.NNN.NNN.NNN.
    . A rotina devolve o IP convertido em AX-HEXA-X.

3 - Fazer a chamada com CALL estatico.

    CALL 'SWXTCPIP'  USING  AX-HEXA-X
                            AX-ALFA-X.