Skip to main content

[archive] Obtaining IP Address

  • September 1, 2007
  • 49 replies
  • 1 view

[Migrated content. Thread originally posted on 31 August 2007]


       PROCEDURE DIVISION.
       MAIN-LOGIC.
    PERFORM SHOW-ADAPTERS.
           STOP    RUN.
       SHOW-ADAPTERS.
           INITIALIZE               KEY-STATUS
                                    AllocSize
                                    AllocPtr
                                    StepPtr.
           SET     IpStructSize     TO SIZE OF IP-ADAPTER-INFO.
           CALL    "IpHlpAPI.DLL@WINAPI".
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           CALL    "M$ALLOC"        USING AllocSize
                   AllocPtr.
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           MOVE    AllocPtr         TO StepPtr.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADAPTER-INFO
                                    BY VALUE StepPtr
                                    BY VALUE IpStructSize
                   PERFORM          DISPLAY-ADAPTER
                   MOVE             NextAdapterPtr to StepPtr
                   END-PERFORM.
           CALL    "M$FREE"         USING AllocPtr.
           CANCEL  "IpHlpAPI.DLL"
           EXIT    PARAGRAPH.
       DISPLAY-ADAPTER.
           EVALUATE                 AdapterType
                   WHEN             001 MOVE "Other" TO
                                             WS-AdapterType
                   WHEN             006 MOVE "Ethernet CSMACD" TO
                                             WS-AdapterType
                   WHEN             020 MOVE "Basic ISDN" TO
                                             WS-AdapterType
                   WHEN             021 MOVE "Primary ISDN" TO
                                             WS-AdapterType
                   WHEN             023 MOVE "PPP" TO
                                             WS-AdapterType
                   WHEN             026 MOVE "Ethernet 3Mb" TO
                                             WS-AdapterType
                   WHEN             048 MOVE "Modem" TO
                                             WS-AdapterType
                   WHEN             062 MOVE "Ethernet 100BaseT" TO
                                             WS-AdapterType
                   WHEN             063 MOVE "ISDN X.25" TO
                                             WS-AdapterType
                   WHEN             069 MOVE "Ethernet 100BaseFX" TO
                                             WS-AdapterType
                   WHEN             075 MOVE "ISDN S/T" TO
                                             WS-AdapterType
                   WHEN             076 MOVE "ISDN U" TO
                                             WS-AdapterType
                   WHEN             117 MOVE "Ethernet Gigabit" TO
                                             WS-AdapterType
                   WHEN             OTHER MOVE "Check list in src" TO
                                             WS-AdapterType
           END-EVALUATE.
           INITIALIZE               WS-Title.
           MOVE    AdapterIndex     TO WS-AdapterIndex.
           EVALUATE                 TRUE
                   WHEN             (AdapterIndex < 10)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(4:1)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 100)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(3:2)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 1000)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(2:3)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             OTHER
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex
                                            DELIMITED BY SIZE INTO
                                            WS-Title
           END-EVALUATE.
           IF      DHCPEnabled      NOT = 0
                   Move             "Yes" TO WS-DHCPEnabled
           ELSE
                   Move             "No " TO WS-DHCPEnabled
                   END-IF.
           IF      HaveWins         NOT = 0
                   Move             "Yes" TO WS-HaveWins
           ELSE
                   Move             "No " TO WS-HaveWins
                   END-IF.
           PERFORM CREATE-MAC-ADDRESS.
           PERFORM GENERATE-IP-ASSOC.
           PERFORM GENERATE-GATEWAY.
           PERFORM GENERATE-DHCPServer
           DISPLAY MESSAGE          BOX
                   "Adapter name"   x"09" AdapterName x"0a"
                   "Description"    x"09" Description x"0a"
                   "AdapterAddress" x"09" WS-AdapterAddress x"0a"
                   "Adapter type"   x"09" WS-AdapterType x"0a"
                   "DHCP Enabled"   x"09" WS-DHCPEnabled x"0a"
                   "Have Wins"      x"09" WS-HaveWins x"0a" x"0a"
                   WS-IpAssocList   x"0a"
                   WS-GatewayList   x"0a"
                   WS-DHCPSrvList
                   ICON             1
                   TITLE            WS-Title.
           EXIT    PARAGRAPH.
       GENERATE-IP-ASSOC.
           INITIALIZE               WS-IpAssocList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF IpAddressList.
           MOVE    1                TO PosCounter.
           STRING  "IP Address, mask and context:" DELIMITED BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-IpAssocList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-IpAssocList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.

49 replies

[Migrated content. Thread originally posted on 31 August 2007]


       PROCEDURE DIVISION.
       MAIN-LOGIC.
    PERFORM SHOW-ADAPTERS.
           STOP    RUN.
       SHOW-ADAPTERS.
           INITIALIZE               KEY-STATUS
                                    AllocSize
                                    AllocPtr
                                    StepPtr.
           SET     IpStructSize     TO SIZE OF IP-ADAPTER-INFO.
           CALL    "IpHlpAPI.DLL@WINAPI".
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           CALL    "M$ALLOC"        USING AllocSize
                   AllocPtr.
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           MOVE    AllocPtr         TO StepPtr.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADAPTER-INFO
                                    BY VALUE StepPtr
                                    BY VALUE IpStructSize
                   PERFORM          DISPLAY-ADAPTER
                   MOVE             NextAdapterPtr to StepPtr
                   END-PERFORM.
           CALL    "M$FREE"         USING AllocPtr.
           CANCEL  "IpHlpAPI.DLL"
           EXIT    PARAGRAPH.
       DISPLAY-ADAPTER.
           EVALUATE                 AdapterType
                   WHEN             001 MOVE "Other" TO
                                             WS-AdapterType
                   WHEN             006 MOVE "Ethernet CSMACD" TO
                                             WS-AdapterType
                   WHEN             020 MOVE "Basic ISDN" TO
                                             WS-AdapterType
                   WHEN             021 MOVE "Primary ISDN" TO
                                             WS-AdapterType
                   WHEN             023 MOVE "PPP" TO
                                             WS-AdapterType
                   WHEN             026 MOVE "Ethernet 3Mb" TO
                                             WS-AdapterType
                   WHEN             048 MOVE "Modem" TO
                                             WS-AdapterType
                   WHEN             062 MOVE "Ethernet 100BaseT" TO
                                             WS-AdapterType
                   WHEN             063 MOVE "ISDN X.25" TO
                                             WS-AdapterType
                   WHEN             069 MOVE "Ethernet 100BaseFX" TO
                                             WS-AdapterType
                   WHEN             075 MOVE "ISDN S/T" TO
                                             WS-AdapterType
                   WHEN             076 MOVE "ISDN U" TO
                                             WS-AdapterType
                   WHEN             117 MOVE "Ethernet Gigabit" TO
                                             WS-AdapterType
                   WHEN             OTHER MOVE "Check list in src" TO
                                             WS-AdapterType
           END-EVALUATE.
           INITIALIZE               WS-Title.
           MOVE    AdapterIndex     TO WS-AdapterIndex.
           EVALUATE                 TRUE
                   WHEN             (AdapterIndex < 10)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(4:1)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 100)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(3:2)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 1000)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(2:3)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             OTHER
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex
                                            DELIMITED BY SIZE INTO
                                            WS-Title
           END-EVALUATE.
           IF      DHCPEnabled      NOT = 0
                   Move             "Yes" TO WS-DHCPEnabled
           ELSE
                   Move             "No " TO WS-DHCPEnabled
                   END-IF.
           IF      HaveWins         NOT = 0
                   Move             "Yes" TO WS-HaveWins
           ELSE
                   Move             "No " TO WS-HaveWins
                   END-IF.
           PERFORM CREATE-MAC-ADDRESS.
           PERFORM GENERATE-IP-ASSOC.
           PERFORM GENERATE-GATEWAY.
           PERFORM GENERATE-DHCPServer
           DISPLAY MESSAGE          BOX
                   "Adapter name"   x"09" AdapterName x"0a"
                   "Description"    x"09" Description x"0a"
                   "AdapterAddress" x"09" WS-AdapterAddress x"0a"
                   "Adapter type"   x"09" WS-AdapterType x"0a"
                   "DHCP Enabled"   x"09" WS-DHCPEnabled x"0a"
                   "Have Wins"      x"09" WS-HaveWins x"0a" x"0a"
                   WS-IpAssocList   x"0a"
                   WS-GatewayList   x"0a"
                   WS-DHCPSrvList
                   ICON             1
                   TITLE            WS-Title.
           EXIT    PARAGRAPH.
       GENERATE-IP-ASSOC.
           INITIALIZE               WS-IpAssocList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF IpAddressList.
           MOVE    1                TO PosCounter.
           STRING  "IP Address, mask and context:" DELIMITED BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-IpAssocList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-IpAssocList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.
I am looking for the best way to get the IP address of a system running the runtime - for both Windows and UNIX/Linux. I know on Windows I could use ipconfig out to a file and read the file. Also, I could probably do something via API. Anyone have working examples of this?

And what about determining this on Linux?

Thanks,
Rob

[Migrated content. Thread originally posted on 31 August 2007]


       PROCEDURE DIVISION.
       MAIN-LOGIC.
    PERFORM SHOW-ADAPTERS.
           STOP    RUN.
       SHOW-ADAPTERS.
           INITIALIZE               KEY-STATUS
                                    AllocSize
                                    AllocPtr
                                    StepPtr.
           SET     IpStructSize     TO SIZE OF IP-ADAPTER-INFO.
           CALL    "IpHlpAPI.DLL@WINAPI".
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           CALL    "M$ALLOC"        USING AllocSize
                   AllocPtr.
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           MOVE    AllocPtr         TO StepPtr.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADAPTER-INFO
                                    BY VALUE StepPtr
                                    BY VALUE IpStructSize
                   PERFORM          DISPLAY-ADAPTER
                   MOVE             NextAdapterPtr to StepPtr
                   END-PERFORM.
           CALL    "M$FREE"         USING AllocPtr.
           CANCEL  "IpHlpAPI.DLL"
           EXIT    PARAGRAPH.
       DISPLAY-ADAPTER.
           EVALUATE                 AdapterType
                   WHEN             001 MOVE "Other" TO
                                             WS-AdapterType
                   WHEN             006 MOVE "Ethernet CSMACD" TO
                                             WS-AdapterType
                   WHEN             020 MOVE "Basic ISDN" TO
                                             WS-AdapterType
                   WHEN             021 MOVE "Primary ISDN" TO
                                             WS-AdapterType
                   WHEN             023 MOVE "PPP" TO
                                             WS-AdapterType
                   WHEN             026 MOVE "Ethernet 3Mb" TO
                                             WS-AdapterType
                   WHEN             048 MOVE "Modem" TO
                                             WS-AdapterType
                   WHEN             062 MOVE "Ethernet 100BaseT" TO
                                             WS-AdapterType
                   WHEN             063 MOVE "ISDN X.25" TO
                                             WS-AdapterType
                   WHEN             069 MOVE "Ethernet 100BaseFX" TO
                                             WS-AdapterType
                   WHEN             075 MOVE "ISDN S/T" TO
                                             WS-AdapterType
                   WHEN             076 MOVE "ISDN U" TO
                                             WS-AdapterType
                   WHEN             117 MOVE "Ethernet Gigabit" TO
                                             WS-AdapterType
                   WHEN             OTHER MOVE "Check list in src" TO
                                             WS-AdapterType
           END-EVALUATE.
           INITIALIZE               WS-Title.
           MOVE    AdapterIndex     TO WS-AdapterIndex.
           EVALUATE                 TRUE
                   WHEN             (AdapterIndex < 10)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(4:1)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 100)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(3:2)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 1000)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(2:3)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             OTHER
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex
                                            DELIMITED BY SIZE INTO
                                            WS-Title
           END-EVALUATE.
           IF      DHCPEnabled      NOT = 0
                   Move             "Yes" TO WS-DHCPEnabled
           ELSE
                   Move             "No " TO WS-DHCPEnabled
                   END-IF.
           IF      HaveWins         NOT = 0
                   Move             "Yes" TO WS-HaveWins
           ELSE
                   Move             "No " TO WS-HaveWins
                   END-IF.
           PERFORM CREATE-MAC-ADDRESS.
           PERFORM GENERATE-IP-ASSOC.
           PERFORM GENERATE-GATEWAY.
           PERFORM GENERATE-DHCPServer
           DISPLAY MESSAGE          BOX
                   "Adapter name"   x"09" AdapterName x"0a"
                   "Description"    x"09" Description x"0a"
                   "AdapterAddress" x"09" WS-AdapterAddress x"0a"
                   "Adapter type"   x"09" WS-AdapterType x"0a"
                   "DHCP Enabled"   x"09" WS-DHCPEnabled x"0a"
                   "Have Wins"      x"09" WS-HaveWins x"0a" x"0a"
                   WS-IpAssocList   x"0a"
                   WS-GatewayList   x"0a"
                   WS-DHCPSrvList
                   ICON             1
                   TITLE            WS-Title.
           EXIT    PARAGRAPH.
       GENERATE-IP-ASSOC.
           INITIALIZE               WS-IpAssocList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF IpAddressList.
           MOVE    1                TO PosCounter.
           STRING  "IP Address, mask and context:" DELIMITED BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-IpAssocList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-IpAssocList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.
I am looking for the best way to get the IP address of a system running the runtime - for both Windows and UNIX/Linux. I know on Windows I could use ipconfig out to a file and read the file. Also, I could probably do something via API. Anyone have working examples of this?

And what about determining this on Linux?

Thanks,
Rob

[Migrated content. Thread originally posted on 31 August 2007]


       PROCEDURE DIVISION.
       MAIN-LOGIC.
    PERFORM SHOW-ADAPTERS.
           STOP    RUN.
       SHOW-ADAPTERS.
           INITIALIZE               KEY-STATUS
                                    AllocSize
                                    AllocPtr
                                    StepPtr.
           SET     IpStructSize     TO SIZE OF IP-ADAPTER-INFO.
           CALL    "IpHlpAPI.DLL@WINAPI".
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           CALL    "M$ALLOC"        USING AllocSize
                   AllocPtr.
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           MOVE    AllocPtr         TO StepPtr.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADAPTER-INFO
                                    BY VALUE StepPtr
                                    BY VALUE IpStructSize
                   PERFORM          DISPLAY-ADAPTER
                   MOVE             NextAdapterPtr to StepPtr
                   END-PERFORM.
           CALL    "M$FREE"         USING AllocPtr.
           CANCEL  "IpHlpAPI.DLL"
           EXIT    PARAGRAPH.
       DISPLAY-ADAPTER.
           EVALUATE                 AdapterType
                   WHEN             001 MOVE "Other" TO
                                             WS-AdapterType
                   WHEN             006 MOVE "Ethernet CSMACD" TO
                                             WS-AdapterType
                   WHEN             020 MOVE "Basic ISDN" TO
                                             WS-AdapterType
                   WHEN             021 MOVE "Primary ISDN" TO
                                             WS-AdapterType
                   WHEN             023 MOVE "PPP" TO
                                             WS-AdapterType
                   WHEN             026 MOVE "Ethernet 3Mb" TO
                                             WS-AdapterType
                   WHEN             048 MOVE "Modem" TO
                                             WS-AdapterType
                   WHEN             062 MOVE "Ethernet 100BaseT" TO
                                             WS-AdapterType
                   WHEN             063 MOVE "ISDN X.25" TO
                                             WS-AdapterType
                   WHEN             069 MOVE "Ethernet 100BaseFX" TO
                                             WS-AdapterType
                   WHEN             075 MOVE "ISDN S/T" TO
                                             WS-AdapterType
                   WHEN             076 MOVE "ISDN U" TO
                                             WS-AdapterType
                   WHEN             117 MOVE "Ethernet Gigabit" TO
                                             WS-AdapterType
                   WHEN             OTHER MOVE "Check list in src" TO
                                             WS-AdapterType
           END-EVALUATE.
           INITIALIZE               WS-Title.
           MOVE    AdapterIndex     TO WS-AdapterIndex.
           EVALUATE                 TRUE
                   WHEN             (AdapterIndex < 10)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(4:1)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 100)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(3:2)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 1000)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(2:3)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             OTHER
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex
                                            DELIMITED BY SIZE INTO
                                            WS-Title
           END-EVALUATE.
           IF      DHCPEnabled      NOT = 0
                   Move             "Yes" TO WS-DHCPEnabled
           ELSE
                   Move             "No " TO WS-DHCPEnabled
                   END-IF.
           IF      HaveWins         NOT = 0
                   Move             "Yes" TO WS-HaveWins
           ELSE
                   Move             "No " TO WS-HaveWins
                   END-IF.
           PERFORM CREATE-MAC-ADDRESS.
           PERFORM GENERATE-IP-ASSOC.
           PERFORM GENERATE-GATEWAY.
           PERFORM GENERATE-DHCPServer
           DISPLAY MESSAGE          BOX
                   "Adapter name"   x"09" AdapterName x"0a"
                   "Description"    x"09" Description x"0a"
                   "AdapterAddress" x"09" WS-AdapterAddress x"0a"
                   "Adapter type"   x"09" WS-AdapterType x"0a"
                   "DHCP Enabled"   x"09" WS-DHCPEnabled x"0a"
                   "Have Wins"      x"09" WS-HaveWins x"0a" x"0a"
                   WS-IpAssocList   x"0a"
                   WS-GatewayList   x"0a"
                   WS-DHCPSrvList
                   ICON             1
                   TITLE            WS-Title.
           EXIT    PARAGRAPH.
       GENERATE-IP-ASSOC.
           INITIALIZE               WS-IpAssocList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF IpAddressList.
           MOVE    1                TO PosCounter.
           STRING  "IP Address, mask and context:" DELIMITED BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-IpAssocList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-IpAssocList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.
/sbin/ifconfig on Linux will give you similar results to ipconfig on Windows.

Ian

[Migrated content. Thread originally posted on 31 August 2007]


       PROCEDURE DIVISION.
       MAIN-LOGIC.
    PERFORM SHOW-ADAPTERS.
           STOP    RUN.
       SHOW-ADAPTERS.
           INITIALIZE               KEY-STATUS
                                    AllocSize
                                    AllocPtr
                                    StepPtr.
           SET     IpStructSize     TO SIZE OF IP-ADAPTER-INFO.
           CALL    "IpHlpAPI.DLL@WINAPI".
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           CALL    "M$ALLOC"        USING AllocSize
                   AllocPtr.
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           MOVE    AllocPtr         TO StepPtr.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADAPTER-INFO
                                    BY VALUE StepPtr
                                    BY VALUE IpStructSize
                   PERFORM          DISPLAY-ADAPTER
                   MOVE             NextAdapterPtr to StepPtr
                   END-PERFORM.
           CALL    "M$FREE"         USING AllocPtr.
           CANCEL  "IpHlpAPI.DLL"
           EXIT    PARAGRAPH.
       DISPLAY-ADAPTER.
           EVALUATE                 AdapterType
                   WHEN             001 MOVE "Other" TO
                                             WS-AdapterType
                   WHEN             006 MOVE "Ethernet CSMACD" TO
                                             WS-AdapterType
                   WHEN             020 MOVE "Basic ISDN" TO
                                             WS-AdapterType
                   WHEN             021 MOVE "Primary ISDN" TO
                                             WS-AdapterType
                   WHEN             023 MOVE "PPP" TO
                                             WS-AdapterType
                   WHEN             026 MOVE "Ethernet 3Mb" TO
                                             WS-AdapterType
                   WHEN             048 MOVE "Modem" TO
                                             WS-AdapterType
                   WHEN             062 MOVE "Ethernet 100BaseT" TO
                                             WS-AdapterType
                   WHEN             063 MOVE "ISDN X.25" TO
                                             WS-AdapterType
                   WHEN             069 MOVE "Ethernet 100BaseFX" TO
                                             WS-AdapterType
                   WHEN             075 MOVE "ISDN S/T" TO
                                             WS-AdapterType
                   WHEN             076 MOVE "ISDN U" TO
                                             WS-AdapterType
                   WHEN             117 MOVE "Ethernet Gigabit" TO
                                             WS-AdapterType
                   WHEN             OTHER MOVE "Check list in src" TO
                                             WS-AdapterType
           END-EVALUATE.
           INITIALIZE               WS-Title.
           MOVE    AdapterIndex     TO WS-AdapterIndex.
           EVALUATE                 TRUE
                   WHEN             (AdapterIndex < 10)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(4:1)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 100)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(3:2)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 1000)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(2:3)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             OTHER
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex
                                            DELIMITED BY SIZE INTO
                                            WS-Title
           END-EVALUATE.
           IF      DHCPEnabled      NOT = 0
                   Move             "Yes" TO WS-DHCPEnabled
           ELSE
                   Move             "No " TO WS-DHCPEnabled
                   END-IF.
           IF      HaveWins         NOT = 0
                   Move             "Yes" TO WS-HaveWins
           ELSE
                   Move             "No " TO WS-HaveWins
                   END-IF.
           PERFORM CREATE-MAC-ADDRESS.
           PERFORM GENERATE-IP-ASSOC.
           PERFORM GENERATE-GATEWAY.
           PERFORM GENERATE-DHCPServer
           DISPLAY MESSAGE          BOX
                   "Adapter name"   x"09" AdapterName x"0a"
                   "Description"    x"09" Description x"0a"
                   "AdapterAddress" x"09" WS-AdapterAddress x"0a"
                   "Adapter type"   x"09" WS-AdapterType x"0a"
                   "DHCP Enabled"   x"09" WS-DHCPEnabled x"0a"
                   "Have Wins"      x"09" WS-HaveWins x"0a" x"0a"
                   WS-IpAssocList   x"0a"
                   WS-GatewayList   x"0a"
                   WS-DHCPSrvList
                   ICON             1
                   TITLE            WS-Title.
           EXIT    PARAGRAPH.
       GENERATE-IP-ASSOC.
           INITIALIZE               WS-IpAssocList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF IpAddressList.
           MOVE    1                TO PosCounter.
           STRING  "IP Address, mask and context:" DELIMITED BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-IpAssocList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-IpAssocList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.
/sbin/ifconfig on Linux will give you similar results to ipconfig on Windows.

Ian

[Migrated content. Thread originally posted on 31 August 2007]


       PROCEDURE DIVISION.
       MAIN-LOGIC.
    PERFORM SHOW-ADAPTERS.
           STOP    RUN.
       SHOW-ADAPTERS.
           INITIALIZE               KEY-STATUS
                                    AllocSize
                                    AllocPtr
                                    StepPtr.
           SET     IpStructSize     TO SIZE OF IP-ADAPTER-INFO.
           CALL    "IpHlpAPI.DLL@WINAPI".
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           CALL    "M$ALLOC"        USING AllocSize
                   AllocPtr.
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           MOVE    AllocPtr         TO StepPtr.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADAPTER-INFO
                                    BY VALUE StepPtr
                                    BY VALUE IpStructSize
                   PERFORM          DISPLAY-ADAPTER
                   MOVE             NextAdapterPtr to StepPtr
                   END-PERFORM.
           CALL    "M$FREE"         USING AllocPtr.
           CANCEL  "IpHlpAPI.DLL"
           EXIT    PARAGRAPH.
       DISPLAY-ADAPTER.
           EVALUATE                 AdapterType
                   WHEN             001 MOVE "Other" TO
                                             WS-AdapterType
                   WHEN             006 MOVE "Ethernet CSMACD" TO
                                             WS-AdapterType
                   WHEN             020 MOVE "Basic ISDN" TO
                                             WS-AdapterType
                   WHEN             021 MOVE "Primary ISDN" TO
                                             WS-AdapterType
                   WHEN             023 MOVE "PPP" TO
                                             WS-AdapterType
                   WHEN             026 MOVE "Ethernet 3Mb" TO
                                             WS-AdapterType
                   WHEN             048 MOVE "Modem" TO
                                             WS-AdapterType
                   WHEN             062 MOVE "Ethernet 100BaseT" TO
                                             WS-AdapterType
                   WHEN             063 MOVE "ISDN X.25" TO
                                             WS-AdapterType
                   WHEN             069 MOVE "Ethernet 100BaseFX" TO
                                             WS-AdapterType
                   WHEN             075 MOVE "ISDN S/T" TO
                                             WS-AdapterType
                   WHEN             076 MOVE "ISDN U" TO
                                             WS-AdapterType
                   WHEN             117 MOVE "Ethernet Gigabit" TO
                                             WS-AdapterType
                   WHEN             OTHER MOVE "Check list in src" TO
                                             WS-AdapterType
           END-EVALUATE.
           INITIALIZE               WS-Title.
           MOVE    AdapterIndex     TO WS-AdapterIndex.
           EVALUATE                 TRUE
                   WHEN             (AdapterIndex < 10)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(4:1)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 100)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(3:2)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 1000)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(2:3)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             OTHER
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex
                                            DELIMITED BY SIZE INTO
                                            WS-Title
           END-EVALUATE.
           IF      DHCPEnabled      NOT = 0
                   Move             "Yes" TO WS-DHCPEnabled
           ELSE
                   Move             "No " TO WS-DHCPEnabled
                   END-IF.
           IF      HaveWins         NOT = 0
                   Move             "Yes" TO WS-HaveWins
           ELSE
                   Move             "No " TO WS-HaveWins
                   END-IF.
           PERFORM CREATE-MAC-ADDRESS.
           PERFORM GENERATE-IP-ASSOC.
           PERFORM GENERATE-GATEWAY.
           PERFORM GENERATE-DHCPServer
           DISPLAY MESSAGE          BOX
                   "Adapter name"   x"09" AdapterName x"0a"
                   "Description"    x"09" Description x"0a"
                   "AdapterAddress" x"09" WS-AdapterAddress x"0a"
                   "Adapter type"   x"09" WS-AdapterType x"0a"
                   "DHCP Enabled"   x"09" WS-DHCPEnabled x"0a"
                   "Have Wins"      x"09" WS-HaveWins x"0a" x"0a"
                   WS-IpAssocList   x"0a"
                   WS-GatewayList   x"0a"
                   WS-DHCPSrvList
                   ICON             1
                   TITLE            WS-Title.
           EXIT    PARAGRAPH.
       GENERATE-IP-ASSOC.
           INITIALIZE               WS-IpAssocList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF IpAddressList.
           MOVE    1                TO PosCounter.
           STRING  "IP Address, mask and context:" DELIMITED BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-IpAssocList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-IpAssocList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.
/sbin/ifconfig on Linux will give you similar results to ipconfig on Windows.

Ian

[Migrated content. Thread originally posted on 31 August 2007]


       PROCEDURE DIVISION.
       MAIN-LOGIC.
    PERFORM SHOW-ADAPTERS.
           STOP    RUN.
       SHOW-ADAPTERS.
           INITIALIZE               KEY-STATUS
                                    AllocSize
                                    AllocPtr
                                    StepPtr.
           SET     IpStructSize     TO SIZE OF IP-ADAPTER-INFO.
           CALL    "IpHlpAPI.DLL@WINAPI".
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           CALL    "M$ALLOC"        USING AllocSize
                   AllocPtr.
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           MOVE    AllocPtr         TO StepPtr.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADAPTER-INFO
                                    BY VALUE StepPtr
                                    BY VALUE IpStructSize
                   PERFORM          DISPLAY-ADAPTER
                   MOVE             NextAdapterPtr to StepPtr
                   END-PERFORM.
           CALL    "M$FREE"         USING AllocPtr.
           CANCEL  "IpHlpAPI.DLL"
           EXIT    PARAGRAPH.
       DISPLAY-ADAPTER.
           EVALUATE                 AdapterType
                   WHEN             001 MOVE "Other" TO
                                             WS-AdapterType
                   WHEN             006 MOVE "Ethernet CSMACD" TO
                                             WS-AdapterType
                   WHEN             020 MOVE "Basic ISDN" TO
                                             WS-AdapterType
                   WHEN             021 MOVE "Primary ISDN" TO
                                             WS-AdapterType
                   WHEN             023 MOVE "PPP" TO
                                             WS-AdapterType
                   WHEN             026 MOVE "Ethernet 3Mb" TO
                                             WS-AdapterType
                   WHEN             048 MOVE "Modem" TO
                                             WS-AdapterType
                   WHEN             062 MOVE "Ethernet 100BaseT" TO
                                             WS-AdapterType
                   WHEN             063 MOVE "ISDN X.25" TO
                                             WS-AdapterType
                   WHEN             069 MOVE "Ethernet 100BaseFX" TO
                                             WS-AdapterType
                   WHEN             075 MOVE "ISDN S/T" TO
                                             WS-AdapterType
                   WHEN             076 MOVE "ISDN U" TO
                                             WS-AdapterType
                   WHEN             117 MOVE "Ethernet Gigabit" TO
                                             WS-AdapterType
                   WHEN             OTHER MOVE "Check list in src" TO
                                             WS-AdapterType
           END-EVALUATE.
           INITIALIZE               WS-Title.
           MOVE    AdapterIndex     TO WS-AdapterIndex.
           EVALUATE                 TRUE
                   WHEN             (AdapterIndex < 10)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(4:1)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 100)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(3:2)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 1000)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(2:3)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             OTHER
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex
                                            DELIMITED BY SIZE INTO
                                            WS-Title
           END-EVALUATE.
           IF      DHCPEnabled      NOT = 0
                   Move             "Yes" TO WS-DHCPEnabled
           ELSE
                   Move             "No " TO WS-DHCPEnabled
                   END-IF.
           IF      HaveWins         NOT = 0
                   Move             "Yes" TO WS-HaveWins
           ELSE
                   Move             "No " TO WS-HaveWins
                   END-IF.
           PERFORM CREATE-MAC-ADDRESS.
           PERFORM GENERATE-IP-ASSOC.
           PERFORM GENERATE-GATEWAY.
           PERFORM GENERATE-DHCPServer
           DISPLAY MESSAGE          BOX
                   "Adapter name"   x"09" AdapterName x"0a"
                   "Description"    x"09" Description x"0a"
                   "AdapterAddress" x"09" WS-AdapterAddress x"0a"
                   "Adapter type"   x"09" WS-AdapterType x"0a"
                   "DHCP Enabled"   x"09" WS-DHCPEnabled x"0a"
                   "Have Wins"      x"09" WS-HaveWins x"0a" x"0a"
                   WS-IpAssocList   x"0a"
                   WS-GatewayList   x"0a"
                   WS-DHCPSrvList
                   ICON             1
                   TITLE            WS-Title.
           EXIT    PARAGRAPH.
       GENERATE-IP-ASSOC.
           INITIALIZE               WS-IpAssocList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF IpAddressList.
           MOVE    1                TO PosCounter.
           STRING  "IP Address, mask and context:" DELIMITED BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-IpAssocList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-IpAssocList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.
I am looking for the best way to get the IP address of a system running the runtime - for both Windows


I am quite confident there is a C library you can load on a unix box to get an ip address, but which, I don't know, and it may even vary, depending on the unix flavour.

But here is some source that gives you the ip and more on windows:

       IDENTIFICATION               DIVISION.
       PROGRAM-ID.                  ViewAdapterInfo.
       ENVIRONMENT                  DIVISION.
       CONFIGURATION                SECTION.
       SPECIAL-NAMES.
       WORKING-STORAGE SECTION.
       77  CNTL-FONT                USAGE HANDLE OF FONT SMALL-FONT.
       77  KEY-STATUS               IS SPECIAL-NAMES
           CRT STATUS               PIC 9(4) VALUE 0.
           88  EXIT-PRESSED         VALUE 27.
       78  MAX_ADAPTER_DESC_LEN     VALUE 132.
       78  MAX_ADAPTER_NAME_LEN     VALUE 260.
       78  MAX_ADAPTER_ADDR_LEN     VALUE 8.
       01  StepPtr                  PIC X(04) COMP-N.
       01  AllocPtr                 PIC X(04) COMP-N.
       01  AllocSize                PIC X(04) COMP-N.
       01  IpStructSize             PIC X(04) COMP-N.
       01  PosCounter               PIC 9(09).
       01  HexStr                   PIC X(04).
       01  AsciiStr                 PIC X(02).
       01  I                        PIC 9(9).
       01  OSize                    PIC X(04) COMP-N.
       01  WS-Vars.
           03 WS-AdapterIndex       PIC ZZZ9.
           03 WS-AdapterType        PIC X(20).
           03 WS-DHCPEnabled        PIC X(03).
           03 WS-HaveWins           PIC X(03).
           03 WS-AdapterAddress     PIC X(25).
           03 WS-Title              PIC X(20).
           03 WS-IpAssocList        PIC X(1024).
           03 WS-GatewayList        PIC X(1024).
           03 WS-DHCPSrvList        PIC X(1024).
       01  IP-ADDR-STRING.
           03 NextAddressPtr        PIC X(4) COMP-N.
           03 IpAddress             PIC X(16).
           03 IpMask                PIC X(16).
           03 IpContext             PIC X(4) COMP-N.
       01  IP-ADAPTER-INFO.
           03 NextAdapterPtr        PIC X(4) COMP-N.
           03 ComboIndex            PIC X(4) COMP-N.
           03 AdapterName           PIC X(MAX_ADAPTER_NAME_LEN).
           03 Description           PIC X(MAX_ADAPTER_DESC_LEN).
           03 AddressLength         PIC X(4) COMP-N.
           03 AdapterAddress        PIC X(MAX_ADAPTER_ADDR_LEN).
           03 AdapterIndex          PIC X(4) COMP-N.
           03 AdapterType           PIC X(4) COMP-N.
           03 DHCPEnabled           PIC X(4) COMP-N.
           03 CurrIpAddrPtr         PIC X(4) COMP-N.
           03 IpAddressList.
              05 NextAdressPtr-I    PIC X(4) COMP-N.
              05 IpAddress-I        PIC X(16).
              05 IpMask-I           PIC X(16).
              05 IpContext-I        PIC X(4) COMP-N.
           03 GatewayList.
              05 NextAdressPtr-G    PIC X(4) COMP-N.
              05 IpAddress-G        PIC X(16).
              05 IpMask-G           PIC X(16).
              05 IpContext-G        PIC X(4) COMP-N.
           03 DHCPServer.
              05 NextAdressPtr-D    PIC X(4) COMP-N.
              05 IpAddress-D        PIC X(16).
              05 IpMask-D           PIC X(16).
              05 IpContext-D        PIC X(4) COMP-N.
           03 HaveWins              PIC X(4) COMP-N.
           03 PrimaryWinsServer.
              05 NextAdressPtr-P    PIC X(4) COMP-N.
              05 IpAddress-P        PIC X(16).
              05 IpMask-P           PIC X(16).
              05 IpContext-P        PIC X(4) COMP-N.
           03 SecondaryWinsServer.
              05 NextAdressPtr-S    PIC X(4) COMP-N.
              05 IpAddress-S        PIC X(16).
              05 IpMask-S           PIC X(16).
              05 IpContext-S        PIC X(4) COMP-N.
           03 LeaseObtain           PIC X(4) COMP-N.
           03 LeaseExpires          PIC X(4) COMP-N.
*To be continued

[Migrated content. Thread originally posted on 31 August 2007]


       PROCEDURE DIVISION.
       MAIN-LOGIC.
    PERFORM SHOW-ADAPTERS.
           STOP    RUN.
       SHOW-ADAPTERS.
           INITIALIZE               KEY-STATUS
                                    AllocSize
                                    AllocPtr
                                    StepPtr.
           SET     IpStructSize     TO SIZE OF IP-ADAPTER-INFO.
           CALL    "IpHlpAPI.DLL@WINAPI".
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           CALL    "M$ALLOC"        USING AllocSize
                   AllocPtr.
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           MOVE    AllocPtr         TO StepPtr.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADAPTER-INFO
                                    BY VALUE StepPtr
                                    BY VALUE IpStructSize
                   PERFORM          DISPLAY-ADAPTER
                   MOVE             NextAdapterPtr to StepPtr
                   END-PERFORM.
           CALL    "M$FREE"         USING AllocPtr.
           CANCEL  "IpHlpAPI.DLL"
           EXIT    PARAGRAPH.
       DISPLAY-ADAPTER.
           EVALUATE                 AdapterType
                   WHEN             001 MOVE "Other" TO
                                             WS-AdapterType
                   WHEN             006 MOVE "Ethernet CSMACD" TO
                                             WS-AdapterType
                   WHEN             020 MOVE "Basic ISDN" TO
                                             WS-AdapterType
                   WHEN             021 MOVE "Primary ISDN" TO
                                             WS-AdapterType
                   WHEN             023 MOVE "PPP" TO
                                             WS-AdapterType
                   WHEN             026 MOVE "Ethernet 3Mb" TO
                                             WS-AdapterType
                   WHEN             048 MOVE "Modem" TO
                                             WS-AdapterType
                   WHEN             062 MOVE "Ethernet 100BaseT" TO
                                             WS-AdapterType
                   WHEN             063 MOVE "ISDN X.25" TO
                                             WS-AdapterType
                   WHEN             069 MOVE "Ethernet 100BaseFX" TO
                                             WS-AdapterType
                   WHEN             075 MOVE "ISDN S/T" TO
                                             WS-AdapterType
                   WHEN             076 MOVE "ISDN U" TO
                                             WS-AdapterType
                   WHEN             117 MOVE "Ethernet Gigabit" TO
                                             WS-AdapterType
                   WHEN             OTHER MOVE "Check list in src" TO
                                             WS-AdapterType
           END-EVALUATE.
           INITIALIZE               WS-Title.
           MOVE    AdapterIndex     TO WS-AdapterIndex.
           EVALUATE                 TRUE
                   WHEN             (AdapterIndex < 10)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(4:1)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 100)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(3:2)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 1000)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(2:3)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             OTHER
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex
                                            DELIMITED BY SIZE INTO
                                            WS-Title
           END-EVALUATE.
           IF      DHCPEnabled      NOT = 0
                   Move             "Yes" TO WS-DHCPEnabled
           ELSE
                   Move             "No " TO WS-DHCPEnabled
                   END-IF.
           IF      HaveWins         NOT = 0
                   Move             "Yes" TO WS-HaveWins
           ELSE
                   Move             "No " TO WS-HaveWins
                   END-IF.
           PERFORM CREATE-MAC-ADDRESS.
           PERFORM GENERATE-IP-ASSOC.
           PERFORM GENERATE-GATEWAY.
           PERFORM GENERATE-DHCPServer
           DISPLAY MESSAGE          BOX
                   "Adapter name"   x"09" AdapterName x"0a"
                   "Description"    x"09" Description x"0a"
                   "AdapterAddress" x"09" WS-AdapterAddress x"0a"
                   "Adapter type"   x"09" WS-AdapterType x"0a"
                   "DHCP Enabled"   x"09" WS-DHCPEnabled x"0a"
                   "Have Wins"      x"09" WS-HaveWins x"0a" x"0a"
                   WS-IpAssocList   x"0a"
                   WS-GatewayList   x"0a"
                   WS-DHCPSrvList
                   ICON             1
                   TITLE            WS-Title.
           EXIT    PARAGRAPH.
       GENERATE-IP-ASSOC.
           INITIALIZE               WS-IpAssocList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF IpAddressList.
           MOVE    1                TO PosCounter.
           STRING  "IP Address, mask and context:" DELIMITED BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-IpAssocList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-IpAssocList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.
I am looking for the best way to get the IP address of a system running the runtime - for both Windows


I am quite confident there is a C library you can load on a unix box to get an ip address, but which, I don't know, and it may even vary, depending on the unix flavour.

But here is some source that gives you the ip and more on windows:

       IDENTIFICATION               DIVISION.
       PROGRAM-ID.                  ViewAdapterInfo.
       ENVIRONMENT                  DIVISION.
       CONFIGURATION                SECTION.
       SPECIAL-NAMES.
       WORKING-STORAGE SECTION.
       77  CNTL-FONT                USAGE HANDLE OF FONT SMALL-FONT.
       77  KEY-STATUS               IS SPECIAL-NAMES
           CRT STATUS               PIC 9(4) VALUE 0.
           88  EXIT-PRESSED         VALUE 27.
       78  MAX_ADAPTER_DESC_LEN     VALUE 132.
       78  MAX_ADAPTER_NAME_LEN     VALUE 260.
       78  MAX_ADAPTER_ADDR_LEN     VALUE 8.
       01  StepPtr                  PIC X(04) COMP-N.
       01  AllocPtr                 PIC X(04) COMP-N.
       01  AllocSize                PIC X(04) COMP-N.
       01  IpStructSize             PIC X(04) COMP-N.
       01  PosCounter               PIC 9(09).
       01  HexStr                   PIC X(04).
       01  AsciiStr                 PIC X(02).
       01  I                        PIC 9(9).
       01  OSize                    PIC X(04) COMP-N.
       01  WS-Vars.
           03 WS-AdapterIndex       PIC ZZZ9.
           03 WS-AdapterType        PIC X(20).
           03 WS-DHCPEnabled        PIC X(03).
           03 WS-HaveWins           PIC X(03).
           03 WS-AdapterAddress     PIC X(25).
           03 WS-Title              PIC X(20).
           03 WS-IpAssocList        PIC X(1024).
           03 WS-GatewayList        PIC X(1024).
           03 WS-DHCPSrvList        PIC X(1024).
       01  IP-ADDR-STRING.
           03 NextAddressPtr        PIC X(4) COMP-N.
           03 IpAddress             PIC X(16).
           03 IpMask                PIC X(16).
           03 IpContext             PIC X(4) COMP-N.
       01  IP-ADAPTER-INFO.
           03 NextAdapterPtr        PIC X(4) COMP-N.
           03 ComboIndex            PIC X(4) COMP-N.
           03 AdapterName           PIC X(MAX_ADAPTER_NAME_LEN).
           03 Description           PIC X(MAX_ADAPTER_DESC_LEN).
           03 AddressLength         PIC X(4) COMP-N.
           03 AdapterAddress        PIC X(MAX_ADAPTER_ADDR_LEN).
           03 AdapterIndex          PIC X(4) COMP-N.
           03 AdapterType           PIC X(4) COMP-N.
           03 DHCPEnabled           PIC X(4) COMP-N.
           03 CurrIpAddrPtr         PIC X(4) COMP-N.
           03 IpAddressList.
              05 NextAdressPtr-I    PIC X(4) COMP-N.
              05 IpAddress-I        PIC X(16).
              05 IpMask-I           PIC X(16).
              05 IpContext-I        PIC X(4) COMP-N.
           03 GatewayList.
              05 NextAdressPtr-G    PIC X(4) COMP-N.
              05 IpAddress-G        PIC X(16).
              05 IpMask-G           PIC X(16).
              05 IpContext-G        PIC X(4) COMP-N.
           03 DHCPServer.
              05 NextAdressPtr-D    PIC X(4) COMP-N.
              05 IpAddress-D        PIC X(16).
              05 IpMask-D           PIC X(16).
              05 IpContext-D        PIC X(4) COMP-N.
           03 HaveWins              PIC X(4) COMP-N.
           03 PrimaryWinsServer.
              05 NextAdressPtr-P    PIC X(4) COMP-N.
              05 IpAddress-P        PIC X(16).
              05 IpMask-P           PIC X(16).
              05 IpContext-P        PIC X(4) COMP-N.
           03 SecondaryWinsServer.
              05 NextAdressPtr-S    PIC X(4) COMP-N.
              05 IpAddress-S        PIC X(16).
              05 IpMask-S           PIC X(16).
              05 IpContext-S        PIC X(4) COMP-N.
           03 LeaseObtain           PIC X(4) COMP-N.
           03 LeaseExpires          PIC X(4) COMP-N.
*To be continued

[Migrated content. Thread originally posted on 31 August 2007]


       PROCEDURE DIVISION.
       MAIN-LOGIC.
    PERFORM SHOW-ADAPTERS.
           STOP    RUN.
       SHOW-ADAPTERS.
           INITIALIZE               KEY-STATUS
                                    AllocSize
                                    AllocPtr
                                    StepPtr.
           SET     IpStructSize     TO SIZE OF IP-ADAPTER-INFO.
           CALL    "IpHlpAPI.DLL@WINAPI".
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           CALL    "M$ALLOC"        USING AllocSize
                   AllocPtr.
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           MOVE    AllocPtr         TO StepPtr.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADAPTER-INFO
                                    BY VALUE StepPtr
                                    BY VALUE IpStructSize
                   PERFORM          DISPLAY-ADAPTER
                   MOVE             NextAdapterPtr to StepPtr
                   END-PERFORM.
           CALL    "M$FREE"         USING AllocPtr.
           CANCEL  "IpHlpAPI.DLL"
           EXIT    PARAGRAPH.
       DISPLAY-ADAPTER.
           EVALUATE                 AdapterType
                   WHEN             001 MOVE "Other" TO
                                             WS-AdapterType
                   WHEN             006 MOVE "Ethernet CSMACD" TO
                                             WS-AdapterType
                   WHEN             020 MOVE "Basic ISDN" TO
                                             WS-AdapterType
                   WHEN             021 MOVE "Primary ISDN" TO
                                             WS-AdapterType
                   WHEN             023 MOVE "PPP" TO
                                             WS-AdapterType
                   WHEN             026 MOVE "Ethernet 3Mb" TO
                                             WS-AdapterType
                   WHEN             048 MOVE "Modem" TO
                                             WS-AdapterType
                   WHEN             062 MOVE "Ethernet 100BaseT" TO
                                             WS-AdapterType
                   WHEN             063 MOVE "ISDN X.25" TO
                                             WS-AdapterType
                   WHEN             069 MOVE "Ethernet 100BaseFX" TO
                                             WS-AdapterType
                   WHEN             075 MOVE "ISDN S/T" TO
                                             WS-AdapterType
                   WHEN             076 MOVE "ISDN U" TO
                                             WS-AdapterType
                   WHEN             117 MOVE "Ethernet Gigabit" TO
                                             WS-AdapterType
                   WHEN             OTHER MOVE "Check list in src" TO
                                             WS-AdapterType
           END-EVALUATE.
           INITIALIZE               WS-Title.
           MOVE    AdapterIndex     TO WS-AdapterIndex.
           EVALUATE                 TRUE
                   WHEN             (AdapterIndex < 10)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(4:1)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 100)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(3:2)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 1000)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(2:3)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             OTHER
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex
                                            DELIMITED BY SIZE INTO
                                            WS-Title
           END-EVALUATE.
           IF      DHCPEnabled      NOT = 0
                   Move             "Yes" TO WS-DHCPEnabled
           ELSE
                   Move             "No " TO WS-DHCPEnabled
                   END-IF.
           IF      HaveWins         NOT = 0
                   Move             "Yes" TO WS-HaveWins
           ELSE
                   Move             "No " TO WS-HaveWins
                   END-IF.
           PERFORM CREATE-MAC-ADDRESS.
           PERFORM GENERATE-IP-ASSOC.
           PERFORM GENERATE-GATEWAY.
           PERFORM GENERATE-DHCPServer
           DISPLAY MESSAGE          BOX
                   "Adapter name"   x"09" AdapterName x"0a"
                   "Description"    x"09" Description x"0a"
                   "AdapterAddress" x"09" WS-AdapterAddress x"0a"
                   "Adapter type"   x"09" WS-AdapterType x"0a"
                   "DHCP Enabled"   x"09" WS-DHCPEnabled x"0a"
                   "Have Wins"      x"09" WS-HaveWins x"0a" x"0a"
                   WS-IpAssocList   x"0a"
                   WS-GatewayList   x"0a"
                   WS-DHCPSrvList
                   ICON             1
                   TITLE            WS-Title.
           EXIT    PARAGRAPH.
       GENERATE-IP-ASSOC.
           INITIALIZE               WS-IpAssocList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF IpAddressList.
           MOVE    1                TO PosCounter.
           STRING  "IP Address, mask and context:" DELIMITED BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-IpAssocList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-IpAssocList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.

       GENERATE-GATEWAY.
           INITIALIZE               WS-GatewayList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF GatewayList.
           MOVE    1                TO PosCounter.
           STRING  "Gateway Address, mask and context:"
                   DELIMITED        BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-GatewayList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-GatewayList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-GatewayList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-GatewayList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.
       GENERATE-DHCPServer.
           INITIALIZE               WS-DHCPSrvList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF DHCPServer.
           MOVE    1                TO PosCounter.
           STRING  "DHCP Server, mask and context:" DELIMITED BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-DHCPSrvList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-DHCPSrvList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-DHCPSrvList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-DHCPSrvList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.
       CREATE-MAC-ADDRESS.
           MOVE    1                TO I PosCounter.
           INITIALIZE               WS-AdapterAddress.
           PERFORM UNTIL            I > AddressLength
                   MOVE             AdapterAddress(I:1) TO AsciiStr
                   CALL             "ASCII2HEX" USING
                                    AsciiStr HexStr
                   ADD              1 TO I
                   STRING           HexStr(1:2) DELIMITED BY SIZE
                                    ":" DELIMITED BY SIZE
                                    INTO WS-AdapterAddress WITH POINTER
                                    PosCounter
                                    END-STRING
                   END-PERFORM.
           IF      PosCounter       > 1
                   SUBTRACT         1 FROM PosCounter
                   MOVE             SPACE TO
                                    WS-AdapterAddress(PosCounter:1)
                   END-IF.
           EXIT    PARAGRAPH.

[Migrated content. Thread originally posted on 31 August 2007]


       PROCEDURE DIVISION.
       MAIN-LOGIC.
    PERFORM SHOW-ADAPTERS.
           STOP    RUN.
       SHOW-ADAPTERS.
           INITIALIZE               KEY-STATUS
                                    AllocSize
                                    AllocPtr
                                    StepPtr.
           SET     IpStructSize     TO SIZE OF IP-ADAPTER-INFO.
           CALL    "IpHlpAPI.DLL@WINAPI".
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           CALL    "M$ALLOC"        USING AllocSize
                   AllocPtr.
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           MOVE    AllocPtr         TO StepPtr.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADAPTER-INFO
                                    BY VALUE StepPtr
                                    BY VALUE IpStructSize
                   PERFORM          DISPLAY-ADAPTER
                   MOVE             NextAdapterPtr to StepPtr
                   END-PERFORM.
           CALL    "M$FREE"         USING AllocPtr.
           CANCEL  "IpHlpAPI.DLL"
           EXIT    PARAGRAPH.
       DISPLAY-ADAPTER.
           EVALUATE                 AdapterType
                   WHEN             001 MOVE "Other" TO
                                             WS-AdapterType
                   WHEN             006 MOVE "Ethernet CSMACD" TO
                                             WS-AdapterType
                   WHEN             020 MOVE "Basic ISDN" TO
                                             WS-AdapterType
                   WHEN             021 MOVE "Primary ISDN" TO
                                             WS-AdapterType
                   WHEN             023 MOVE "PPP" TO
                                             WS-AdapterType
                   WHEN             026 MOVE "Ethernet 3Mb" TO
                                             WS-AdapterType
                   WHEN             048 MOVE "Modem" TO
                                             WS-AdapterType
                   WHEN             062 MOVE "Ethernet 100BaseT" TO
                                             WS-AdapterType
                   WHEN             063 MOVE "ISDN X.25" TO
                                             WS-AdapterType
                   WHEN             069 MOVE "Ethernet 100BaseFX" TO
                                             WS-AdapterType
                   WHEN             075 MOVE "ISDN S/T" TO
                                             WS-AdapterType
                   WHEN             076 MOVE "ISDN U" TO
                                             WS-AdapterType
                   WHEN             117 MOVE "Ethernet Gigabit" TO
                                             WS-AdapterType
                   WHEN             OTHER MOVE "Check list in src" TO
                                             WS-AdapterType
           END-EVALUATE.
           INITIALIZE               WS-Title.
           MOVE    AdapterIndex     TO WS-AdapterIndex.
           EVALUATE                 TRUE
                   WHEN             (AdapterIndex < 10)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(4:1)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 100)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(3:2)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 1000)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(2:3)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             OTHER
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex
                                            DELIMITED BY SIZE INTO
                                            WS-Title
           END-EVALUATE.
           IF      DHCPEnabled      NOT = 0
                   Move             "Yes" TO WS-DHCPEnabled
           ELSE
                   Move             "No " TO WS-DHCPEnabled
                   END-IF.
           IF      HaveWins         NOT = 0
                   Move             "Yes" TO WS-HaveWins
           ELSE
                   Move             "No " TO WS-HaveWins
                   END-IF.
           PERFORM CREATE-MAC-ADDRESS.
           PERFORM GENERATE-IP-ASSOC.
           PERFORM GENERATE-GATEWAY.
           PERFORM GENERATE-DHCPServer
           DISPLAY MESSAGE          BOX
                   "Adapter name"   x"09" AdapterName x"0a"
                   "Description"    x"09" Description x"0a"
                   "AdapterAddress" x"09" WS-AdapterAddress x"0a"
                   "Adapter type"   x"09" WS-AdapterType x"0a"
                   "DHCP Enabled"   x"09" WS-DHCPEnabled x"0a"
                   "Have Wins"      x"09" WS-HaveWins x"0a" x"0a"
                   WS-IpAssocList   x"0a"
                   WS-GatewayList   x"0a"
                   WS-DHCPSrvList
                   ICON             1
                   TITLE            WS-Title.
           EXIT    PARAGRAPH.
       GENERATE-IP-ASSOC.
           INITIALIZE               WS-IpAssocList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF IpAddressList.
           MOVE    1                TO PosCounter.
           STRING  "IP Address, mask and context:" DELIMITED BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-IpAssocList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-IpAssocList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.

       GENERATE-GATEWAY.
           INITIALIZE               WS-GatewayList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF GatewayList.
           MOVE    1                TO PosCounter.
           STRING  "Gateway Address, mask and context:"
                   DELIMITED        BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-GatewayList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-GatewayList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-GatewayList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-GatewayList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.
       GENERATE-DHCPServer.
           INITIALIZE               WS-DHCPSrvList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF DHCPServer.
           MOVE    1                TO PosCounter.
           STRING  "DHCP Server, mask and context:" DELIMITED BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-DHCPSrvList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-DHCPSrvList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-DHCPSrvList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-DHCPSrvList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.
       CREATE-MAC-ADDRESS.
           MOVE    1                TO I PosCounter.
           INITIALIZE               WS-AdapterAddress.
           PERFORM UNTIL            I > AddressLength
                   MOVE             AdapterAddress(I:1) TO AsciiStr
                   CALL             "ASCII2HEX" USING
                                    AsciiStr HexStr
                   ADD              1 TO I
                   STRING           HexStr(1:2) DELIMITED BY SIZE
                                    ":" DELIMITED BY SIZE
                                    INTO WS-AdapterAddress WITH POINTER
                                    PosCounter
                                    END-STRING
                   END-PERFORM.
           IF      PosCounter       > 1
                   SUBTRACT         1 FROM PosCounter
                   MOVE             SPACE TO
                                    WS-AdapterAddress(PosCounter:1)
                   END-IF.
           EXIT    PARAGRAPH.

[Migrated content. Thread originally posted on 31 August 2007]


       PROCEDURE DIVISION.
       MAIN-LOGIC.
    PERFORM SHOW-ADAPTERS.
           STOP    RUN.
       SHOW-ADAPTERS.
           INITIALIZE               KEY-STATUS
                                    AllocSize
                                    AllocPtr
                                    StepPtr.
           SET     IpStructSize     TO SIZE OF IP-ADAPTER-INFO.
           CALL    "IpHlpAPI.DLL@WINAPI".
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           CALL    "M$ALLOC"        USING AllocSize
                   AllocPtr.
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           MOVE    AllocPtr         TO StepPtr.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADAPTER-INFO
                                    BY VALUE StepPtr
                                    BY VALUE IpStructSize
                   PERFORM          DISPLAY-ADAPTER
                   MOVE             NextAdapterPtr to StepPtr
                   END-PERFORM.
           CALL    "M$FREE"         USING AllocPtr.
           CANCEL  "IpHlpAPI.DLL"
           EXIT    PARAGRAPH.
       DISPLAY-ADAPTER.
           EVALUATE                 AdapterType
                   WHEN             001 MOVE "Other" TO
                                             WS-AdapterType
                   WHEN             006 MOVE "Ethernet CSMACD" TO
                                             WS-AdapterType
                   WHEN             020 MOVE "Basic ISDN" TO
                                             WS-AdapterType
                   WHEN             021 MOVE "Primary ISDN" TO
                                             WS-AdapterType
                   WHEN             023 MOVE "PPP" TO
                                             WS-AdapterType
                   WHEN             026 MOVE "Ethernet 3Mb" TO
                                             WS-AdapterType
                   WHEN             048 MOVE "Modem" TO
                                             WS-AdapterType
                   WHEN             062 MOVE "Ethernet 100BaseT" TO
                                             WS-AdapterType
                   WHEN             063 MOVE "ISDN X.25" TO
                                             WS-AdapterType
                   WHEN             069 MOVE "Ethernet 100BaseFX" TO
                                             WS-AdapterType
                   WHEN             075 MOVE "ISDN S/T" TO
                                             WS-AdapterType
                   WHEN             076 MOVE "ISDN U" TO
                                             WS-AdapterType
                   WHEN             117 MOVE "Ethernet Gigabit" TO
                                             WS-AdapterType
                   WHEN             OTHER MOVE "Check list in src" TO
                                             WS-AdapterType
           END-EVALUATE.
           INITIALIZE               WS-Title.
           MOVE    AdapterIndex     TO WS-AdapterIndex.
           EVALUATE                 TRUE
                   WHEN             (AdapterIndex < 10)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(4:1)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 100)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(3:2)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 1000)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(2:3)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             OTHER
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex
                                            DELIMITED BY SIZE INTO
                                            WS-Title
           END-EVALUATE.
           IF      DHCPEnabled      NOT = 0
                   Move             "Yes" TO WS-DHCPEnabled
           ELSE
                   Move             "No " TO WS-DHCPEnabled
                   END-IF.
           IF      HaveWins         NOT = 0
                   Move             "Yes" TO WS-HaveWins
           ELSE
                   Move             "No " TO WS-HaveWins
                   END-IF.
           PERFORM CREATE-MAC-ADDRESS.
           PERFORM GENERATE-IP-ASSOC.
           PERFORM GENERATE-GATEWAY.
           PERFORM GENERATE-DHCPServer
           DISPLAY MESSAGE          BOX
                   "Adapter name"   x"09" AdapterName x"0a"
                   "Description"    x"09" Description x"0a"
                   "AdapterAddress" x"09" WS-AdapterAddress x"0a"
                   "Adapter type"   x"09" WS-AdapterType x"0a"
                   "DHCP Enabled"   x"09" WS-DHCPEnabled x"0a"
                   "Have Wins"      x"09" WS-HaveWins x"0a" x"0a"
                   WS-IpAssocList   x"0a"
                   WS-GatewayList   x"0a"
                   WS-DHCPSrvList
                   ICON             1
                   TITLE            WS-Title.
           EXIT    PARAGRAPH.
       GENERATE-IP-ASSOC.
           INITIALIZE               WS-IpAssocList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF IpAddressList.
           MOVE    1                TO PosCounter.
           STRING  "IP Address, mask and context:" DELIMITED BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-IpAssocList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-IpAssocList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.

      *
      * Adapter types, as defined in Windows API
      *
      *#define IF_TYPE_OTHER                   1   // None of the below
      *#define IF_TYPE_REGULAR_1822            2
      *#define IF_TYPE_HDH_1822                3
      *#define IF_TYPE_DDN_X25                 4
      *#define IF_TYPE_RFC877_X25              5
      *#define IF_TYPE_ETHERNET_CSMACD         6
      *#define IF_TYPE_IS088023_CSMACD         7
      *#define IF_TYPE_ISO88024_TOKENBUS       8
      *#define IF_TYPE_ISO88025_TOKENRING      9
      *#define IF_TYPE_ISO88026_MAN            10
      *#define IF_TYPE_STARLAN                 11
      *#define IF_TYPE_PROTEON_10MBIT          12
      *#define IF_TYPE_PROTEON_80MBIT          13
      *#define IF_TYPE_HYPERCHANNEL            14
      *#define IF_TYPE_FDDI                    15
      *#define IF_TYPE_LAP_B                   16
      *#define IF_TYPE_SDLC                    17
      *#define IF_TYPE_DS1                     18  // DS1-MIB
      *#define IF_TYPE_E1                      19  // Obsolete; see DS1-MIB
      *#define IF_TYPE_BASIC_ISDN              20
      *#define IF_TYPE_PRIMARY_ISDN            21
      *#define IF_TYPE_PROP_POINT2POINT_SERIAL 22  // proprietary serial
      *#define IF_TYPE_PPP                     23
      *#define IF_TYPE_SOFTWARE_LOOPBACK       24
      *#define IF_TYPE_EON                     25  // CLNP over IP
      *#define IF_TYPE_ETHERNET_3MBIT          26
      *#define IF_TYPE_NSIP                    27  // XNS over IP
      *#define IF_TYPE_SLIP                    28  // Generic Slip
      *#define IF_TYPE_ULTRA                   29  // ULTRA Technologies
      *#define IF_TYPE_DS3                     30  // DS3-MIB
      *#define IF_TYPE_SIP                     31  // SMDS, coffee
      *#define IF_TYPE_FRAMERELAY              32  // DTE only
      *#define IF_TYPE_RS232                   33
      *#define IF_TYPE_PARA                    34  // Parallel port
      *#define IF_TYPE_ARCNET                  35
      *#define IF_TYPE_ARCNET_PLUS             36
      *#define IF_TYPE_ATM                     37  // ATM cells
      *#define IF_TYPE_MIO_X25                 38
      *#define IF_TYPE_SONET                   39  // SONET or SDH
      *#define IF_TYPE_X25_PLE                 40
      *#define IF_TYPE_ISO88022_LLC            41
      *#define IF_TYPE_LOCALTALK               42
      *#define IF_TYPE_SMDS_DXI                43
      *#define IF_TYPE_FRAMERELAY_SERVICE      44  // FRNETSERV-MIB
      *#define IF_TYPE_V35                     45
      *#define IF_TYPE_HSSI                    46
      *#define IF_TYPE_HIPPI                   47
      *#define IF_TYPE_MODEM                   48  // Generic Modem
      *#define IF_TYPE_AAL5                    49  // AAL5 over ATM
      *#define IF_TYPE_SONET_PATH              50
      *#define IF_TYPE_SONET_VT                51
      *#define IF_TYPE_SMDS_ICIP               52  // SMDS InterCarrier Interface
      *#define IF_TYPE_PROP_VIRTUAL            53  // Proprietary virtual/internal
      *#define IF_TYPE_PROP_MULTIPLEXOR        54  // Proprietary multiplexing
      *#define IF_TYPE_IEEE80212               55  // 100BaseVG
      *#define IF_TYPE_FIBRECHANNEL            56
      *#define IF_TYPE_HIPPIINTERFACE          57
      *#define IF_TYPE_FRAMERELAY_INTERCONNECT 58  // Obsolete, use 32 or 44
      *#define IF_TYPE_AFLANE_8023             59  // ATM Emulated LAN for 802.3
      *#define IF_TYPE_AFLANE_8025             60  // ATM Emulated LAN for 802.5
      *#define IF_TYPE_CCTEMUL                 61  // ATM Emulated circuit
      *#define IF_TYPE_FASTETHER               62  // Fast Ethernet (100BaseT)
      *#define IF_TYPE_ISDN                    63  // ISDN and X.25
      *#define IF_TYPE_V11                     64  // CCITT V.11/X.21
      *#define IF_TYPE_V36                     65  // CCITT V.36
      *#define IF_TYPE_G703_64K                66  // CCITT G703 at 64Kbps
      *#define IF_TYPE_G703_2MB                67  // Obsolete; see DS1-MIB
      *#define IF_TYPE_QLLC                    68  // SNA QLLC
      *#define IF_TYPE_FASTETHER_FX            69  // Fast Ethernet (100BaseFX)
      *#define IF_TYPE_CHANNEL                 70
      *#define IF_TYPE_IEEE80211               71  // Radio spread spectrum
      *#define IF_TYPE_IBM370PARCHAN           72  // IBM System 360/370 OEMI Channel
      *#define IF_TYPE_ESCON                   73  // IBM Enterprise Systems Connection
      *#define IF_TYPE_DLSW                    74  // Data Link Switching
      *#define IF_TYPE_ISDN_S                  75  // ISDN S/T interface
      *#define IF_TYPE_ISDN_U                  76  // ISDN U interface
      *#define IF_TYPE_LAP_D                   77  // Link Access Protocol D
      *#define IF_TYPE_IPSWITCH                78  // IP Switching Objects
      *#define IF_TYPE_RSRB                    79  // Remote Source Route Bridging
      *#define IF_TYPE_ATM_LOGICAL             80  // ATM Logical Port
      *#define IF_TYPE_DS0                     81  // Digital Signal Level 0
      *#define IF_TYPE_DS0_BUNDLE              82  // Group of ds0s on the same ds1
      *#define IF_TYPE_BSC                     83  // Bisynchronous Protocol
      *#define IF_TYPE_ASYNC                   84  // Asynchronous Protocol
      *#define IF_TYPE_CNR                     85  // Combat Net Radio
      *#define IF_TYPE_ISO88025R_DTR           86  // ISO 802.5r DTR
      *#define IF_TYPE_EPLRS                   87  // Ext Pos Loc Report Sys
      *#define IF_TYPE_ARAP                    88  // Appletalk Remote Access Protocol
      *#define IF_TYPE_PROP_CNLS               89  // Proprietary Connectionless Proto
      *#define IF_TYPE_HOSTPAD                 90  // CCITT-ITU X.29 PAD Protocol
      *#define IF_TYPE_TERMPAD                 91  // CCITT-ITU X.3 PAD Facility
      *#define IF_TYPE_FRAMERELAY_MPI          92  // Multiproto Interconnect over FR
      *#define IF_TYPE_X213                    93  // CCITT-ITU X213
      *#define IF_TYPE_ADSL                    94  // Asymmetric Digital Subscrbr Loop
      *#define IF_TYPE_RADSL                   95  // Rate-Adapt Digital Subscrbr Loop
      *#define IF_TYPE_SDSL                    96  // Symmetric Digital Subscriber Loop
      *#define IF_TYPE_VDSL                    97  // Very H-Speed Digital Subscrb Loop
      *#define IF_TYPE_ISO88025_CRFPRINT       98  // ISO 802.5 CRFP
      *#define IF_TYPE_MYRINET                 99  // Myricom Myrinet
      *#define IF_TYPE_VOICE_EM                100 // Voice recEive and transMit
      *#define IF_TYPE_VOICE_FXO               101 // Voice Foreign Exchange Office
      *#define IF_TYPE_VOICE_FXS               102 // Voice Foreign Exchange Station
      *#define IF_TYPE_VOICE_ENCAP             103 // Voice encapsulation
      *#define IF_TYPE_VOICE_OVERIP            104 // Voice over IP encapsulation
      *#define IF_TYPE_ATM_DXI                 105 // ATM DXI
      *#define IF_TYPE_ATM_FUNI                106 // ATM FUNI
      *#define IF_TYPE_ATM_IMA                 107 // ATM IMA
      *#define IF_TYPE_PPPMULTILINKBUNDLE      108 // PPP Multilink Bundle
      *#define IF_TYPE_IPOVER_CDLC             109 // IBM ipOverCdlc
      *#define IF_TYPE_IPOVER_CLAW             110 // IBM Common Link Access to Workstn
      *#define IF_TYPE_STACKTOSTACK            111 // IBM stackToStack
      *#define IF_TYPE_VIRTUALIPADDRESS        112 // IBM VIPA
      *#define IF_TYPE_MPC                     113 // IBM multi-proto channel support
      *#define IF_TYPE_IPOVER_ATM              114 // IBM ipOverAtm
      *#define IF_TYPE_ISO88025_FIBER          115 // ISO 802.5j Fiber Token Ring
      *#define IF_TYPE_TDLC                    116 // IBM twinaxial data link control
      *#define IF_TYPE_GIGABITETHERNET         117
      *#define IF_TYPE_HDLC                    118
      *#define IF_TYPE_LAP_F                   119
      *#define IF_TYPE_V37                     120
      *#define IF_TYPE_X25_MLP                 121 // Multi-Link Protocol
      *#define IF_TYPE_X25_HUNTGROUP           122 // X.25 Hunt Group
      *#define IF_TYPE_TRANSPHDLC              123
      *#define IF_TYPE_INTERLEAVE              124 // Interleave channel
      *#define IF_TYPE_FAST                    125 // Fast channel
      *#define IF_TYPE_IP                      126 // IP (for APPN HPR in IP networks)
      *#define IF_TYPE_DOCSCABLE_MACLAYER      127 // CATV Mac Layer
      *#define IF_TYPE_DOCSCABLE_DOWNSTREAM    128 // CATV Downstream interface
      *#define IF_TYPE_DOCSCABLE_UPSTREAM      129 // CATV Upstream interface
      *#define IF_TYPE_A12MPPSWITCH            130 // Avalon Parallel Processor
      *#define IF_TYPE_TUNNEL                  131 // Encapsulation interface
      *#define IF_TYPE_COFFEE                  132 // Coffee pot
      *#define IF_TYPE_CES                     133 // Circuit Emulation Service
      *#define IF_TYPE_ATM_SUBINTERFACE        134 // ATM Sub Interface
      *#define IF_TYPE_L2_VLAN                 135 // Layer 2 Virtual LAN using 802.1Q
      *#define IF_TYPE_L3_IPVLAN               136 // Layer 3 Virtual LAN using IP
      *#define IF_TYPE_L3_IPXVLAN              137 // Layer 3 Virtual LAN using IPX
      *#define IF_TYPE_DIGITALPOWERLINE        138 // IP over Power Lines
      *#define IF_TYPE_MEDIAMAILOVERIP         139 // Multimedia Mail over IP
      *#define IF_TYPE_DTM                     140 // Dynamic syncronous Transfer Mode
      *#define IF_TYPE_DCN                     141 // Data Communications Network
      *#define IF_TYPE_IPFORWARD               142 // IP Forwarding Interface
      *#define IF_TYPE_MSDSL                   143 // Multi-rate Symmetric DSL
      *#define IF_TYPE_IEEE1394                144 // IEEE1394 High Perf Serial Bus
      *#define IF_TYPE_RECEIVE_ONLY            145 // TV adapter type

[Migrated content. Thread originally posted on 31 August 2007]


       PROCEDURE DIVISION.
       MAIN-LOGIC.
    PERFORM SHOW-ADAPTERS.
           STOP    RUN.
       SHOW-ADAPTERS.
           INITIALIZE               KEY-STATUS
                                    AllocSize
                                    AllocPtr
                                    StepPtr.
           SET     IpStructSize     TO SIZE OF IP-ADAPTER-INFO.
           CALL    "IpHlpAPI.DLL@WINAPI".
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           CALL    "M$ALLOC"        USING AllocSize
                   AllocPtr.
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           MOVE    AllocPtr         TO StepPtr.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADAPTER-INFO
                                    BY VALUE StepPtr
                                    BY VALUE IpStructSize
                   PERFORM          DISPLAY-ADAPTER
                   MOVE             NextAdapterPtr to StepPtr
                   END-PERFORM.
           CALL    "M$FREE"         USING AllocPtr.
           CANCEL  "IpHlpAPI.DLL"
           EXIT    PARAGRAPH.
       DISPLAY-ADAPTER.
           EVALUATE                 AdapterType
                   WHEN             001 MOVE "Other" TO
                                             WS-AdapterType
                   WHEN             006 MOVE "Ethernet CSMACD" TO
                                             WS-AdapterType
                   WHEN             020 MOVE "Basic ISDN" TO
                                             WS-AdapterType
                   WHEN             021 MOVE "Primary ISDN" TO
                                             WS-AdapterType
                   WHEN             023 MOVE "PPP" TO
                                             WS-AdapterType
                   WHEN             026 MOVE "Ethernet 3Mb" TO
                                             WS-AdapterType
                   WHEN             048 MOVE "Modem" TO
                                             WS-AdapterType
                   WHEN             062 MOVE "Ethernet 100BaseT" TO
                                             WS-AdapterType
                   WHEN             063 MOVE "ISDN X.25" TO
                                             WS-AdapterType
                   WHEN             069 MOVE "Ethernet 100BaseFX" TO
                                             WS-AdapterType
                   WHEN             075 MOVE "ISDN S/T" TO
                                             WS-AdapterType
                   WHEN             076 MOVE "ISDN U" TO
                                             WS-AdapterType
                   WHEN             117 MOVE "Ethernet Gigabit" TO
                                             WS-AdapterType
                   WHEN             OTHER MOVE "Check list in src" TO
                                             WS-AdapterType
           END-EVALUATE.
           INITIALIZE               WS-Title.
           MOVE    AdapterIndex     TO WS-AdapterIndex.
           EVALUATE                 TRUE
                   WHEN             (AdapterIndex < 10)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(4:1)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 100)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(3:2)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 1000)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(2:3)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             OTHER
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex
                                            DELIMITED BY SIZE INTO
                                            WS-Title
           END-EVALUATE.
           IF      DHCPEnabled      NOT = 0
                   Move             "Yes" TO WS-DHCPEnabled
           ELSE
                   Move             "No " TO WS-DHCPEnabled
                   END-IF.
           IF      HaveWins         NOT = 0
                   Move             "Yes" TO WS-HaveWins
           ELSE
                   Move             "No " TO WS-HaveWins
                   END-IF.
           PERFORM CREATE-MAC-ADDRESS.
           PERFORM GENERATE-IP-ASSOC.
           PERFORM GENERATE-GATEWAY.
           PERFORM GENERATE-DHCPServer
           DISPLAY MESSAGE          BOX
                   "Adapter name"   x"09" AdapterName x"0a"
                   "Description"    x"09" Description x"0a"
                   "AdapterAddress" x"09" WS-AdapterAddress x"0a"
                   "Adapter type"   x"09" WS-AdapterType x"0a"
                   "DHCP Enabled"   x"09" WS-DHCPEnabled x"0a"
                   "Have Wins"      x"09" WS-HaveWins x"0a" x"0a"
                   WS-IpAssocList   x"0a"
                   WS-GatewayList   x"0a"
                   WS-DHCPSrvList
                   ICON             1
                   TITLE            WS-Title.
           EXIT    PARAGRAPH.
       GENERATE-IP-ASSOC.
           INITIALIZE               WS-IpAssocList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF IpAddressList.
           MOVE    1                TO PosCounter.
           STRING  "IP Address, mask and context:" DELIMITED BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-IpAssocList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-IpAssocList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.

      *
      * Adapter types, as defined in Windows API
      *
      *#define IF_TYPE_OTHER                   1   // None of the below
      *#define IF_TYPE_REGULAR_1822            2
      *#define IF_TYPE_HDH_1822                3
      *#define IF_TYPE_DDN_X25                 4
      *#define IF_TYPE_RFC877_X25              5
      *#define IF_TYPE_ETHERNET_CSMACD         6
      *#define IF_TYPE_IS088023_CSMACD         7
      *#define IF_TYPE_ISO88024_TOKENBUS       8
      *#define IF_TYPE_ISO88025_TOKENRING      9
      *#define IF_TYPE_ISO88026_MAN            10
      *#define IF_TYPE_STARLAN                 11
      *#define IF_TYPE_PROTEON_10MBIT          12
      *#define IF_TYPE_PROTEON_80MBIT          13
      *#define IF_TYPE_HYPERCHANNEL            14
      *#define IF_TYPE_FDDI                    15
      *#define IF_TYPE_LAP_B                   16
      *#define IF_TYPE_SDLC                    17
      *#define IF_TYPE_DS1                     18  // DS1-MIB
      *#define IF_TYPE_E1                      19  // Obsolete; see DS1-MIB
      *#define IF_TYPE_BASIC_ISDN              20
      *#define IF_TYPE_PRIMARY_ISDN            21
      *#define IF_TYPE_PROP_POINT2POINT_SERIAL 22  // proprietary serial
      *#define IF_TYPE_PPP                     23
      *#define IF_TYPE_SOFTWARE_LOOPBACK       24
      *#define IF_TYPE_EON                     25  // CLNP over IP
      *#define IF_TYPE_ETHERNET_3MBIT          26
      *#define IF_TYPE_NSIP                    27  // XNS over IP
      *#define IF_TYPE_SLIP                    28  // Generic Slip
      *#define IF_TYPE_ULTRA                   29  // ULTRA Technologies
      *#define IF_TYPE_DS3                     30  // DS3-MIB
      *#define IF_TYPE_SIP                     31  // SMDS, coffee
      *#define IF_TYPE_FRAMERELAY              32  // DTE only
      *#define IF_TYPE_RS232                   33
      *#define IF_TYPE_PARA                    34  // Parallel port
      *#define IF_TYPE_ARCNET                  35
      *#define IF_TYPE_ARCNET_PLUS             36
      *#define IF_TYPE_ATM                     37  // ATM cells
      *#define IF_TYPE_MIO_X25                 38
      *#define IF_TYPE_SONET                   39  // SONET or SDH
      *#define IF_TYPE_X25_PLE                 40
      *#define IF_TYPE_ISO88022_LLC            41
      *#define IF_TYPE_LOCALTALK               42
      *#define IF_TYPE_SMDS_DXI                43
      *#define IF_TYPE_FRAMERELAY_SERVICE      44  // FRNETSERV-MIB
      *#define IF_TYPE_V35                     45
      *#define IF_TYPE_HSSI                    46
      *#define IF_TYPE_HIPPI                   47
      *#define IF_TYPE_MODEM                   48  // Generic Modem
      *#define IF_TYPE_AAL5                    49  // AAL5 over ATM
      *#define IF_TYPE_SONET_PATH              50
      *#define IF_TYPE_SONET_VT                51
      *#define IF_TYPE_SMDS_ICIP               52  // SMDS InterCarrier Interface
      *#define IF_TYPE_PROP_VIRTUAL            53  // Proprietary virtual/internal
      *#define IF_TYPE_PROP_MULTIPLEXOR        54  // Proprietary multiplexing
      *#define IF_TYPE_IEEE80212               55  // 100BaseVG
      *#define IF_TYPE_FIBRECHANNEL            56
      *#define IF_TYPE_HIPPIINTERFACE          57
      *#define IF_TYPE_FRAMERELAY_INTERCONNECT 58  // Obsolete, use 32 or 44
      *#define IF_TYPE_AFLANE_8023             59  // ATM Emulated LAN for 802.3
      *#define IF_TYPE_AFLANE_8025             60  // ATM Emulated LAN for 802.5
      *#define IF_TYPE_CCTEMUL                 61  // ATM Emulated circuit
      *#define IF_TYPE_FASTETHER               62  // Fast Ethernet (100BaseT)
      *#define IF_TYPE_ISDN                    63  // ISDN and X.25
      *#define IF_TYPE_V11                     64  // CCITT V.11/X.21
      *#define IF_TYPE_V36                     65  // CCITT V.36
      *#define IF_TYPE_G703_64K                66  // CCITT G703 at 64Kbps
      *#define IF_TYPE_G703_2MB                67  // Obsolete; see DS1-MIB
      *#define IF_TYPE_QLLC                    68  // SNA QLLC
      *#define IF_TYPE_FASTETHER_FX            69  // Fast Ethernet (100BaseFX)
      *#define IF_TYPE_CHANNEL                 70
      *#define IF_TYPE_IEEE80211               71  // Radio spread spectrum
      *#define IF_TYPE_IBM370PARCHAN           72  // IBM System 360/370 OEMI Channel
      *#define IF_TYPE_ESCON                   73  // IBM Enterprise Systems Connection
      *#define IF_TYPE_DLSW                    74  // Data Link Switching
      *#define IF_TYPE_ISDN_S                  75  // ISDN S/T interface
      *#define IF_TYPE_ISDN_U                  76  // ISDN U interface
      *#define IF_TYPE_LAP_D                   77  // Link Access Protocol D
      *#define IF_TYPE_IPSWITCH                78  // IP Switching Objects
      *#define IF_TYPE_RSRB                    79  // Remote Source Route Bridging
      *#define IF_TYPE_ATM_LOGICAL             80  // ATM Logical Port
      *#define IF_TYPE_DS0                     81  // Digital Signal Level 0
      *#define IF_TYPE_DS0_BUNDLE              82  // Group of ds0s on the same ds1
      *#define IF_TYPE_BSC                     83  // Bisynchronous Protocol
      *#define IF_TYPE_ASYNC                   84  // Asynchronous Protocol
      *#define IF_TYPE_CNR                     85  // Combat Net Radio
      *#define IF_TYPE_ISO88025R_DTR           86  // ISO 802.5r DTR
      *#define IF_TYPE_EPLRS                   87  // Ext Pos Loc Report Sys
      *#define IF_TYPE_ARAP                    88  // Appletalk Remote Access Protocol
      *#define IF_TYPE_PROP_CNLS               89  // Proprietary Connectionless Proto
      *#define IF_TYPE_HOSTPAD                 90  // CCITT-ITU X.29 PAD Protocol
      *#define IF_TYPE_TERMPAD                 91  // CCITT-ITU X.3 PAD Facility
      *#define IF_TYPE_FRAMERELAY_MPI          92  // Multiproto Interconnect over FR
      *#define IF_TYPE_X213                    93  // CCITT-ITU X213
      *#define IF_TYPE_ADSL                    94  // Asymmetric Digital Subscrbr Loop
      *#define IF_TYPE_RADSL                   95  // Rate-Adapt Digital Subscrbr Loop
      *#define IF_TYPE_SDSL                    96  // Symmetric Digital Subscriber Loop
      *#define IF_TYPE_VDSL                    97  // Very H-Speed Digital Subscrb Loop
      *#define IF_TYPE_ISO88025_CRFPRINT       98  // ISO 802.5 CRFP
      *#define IF_TYPE_MYRINET                 99  // Myricom Myrinet
      *#define IF_TYPE_VOICE_EM                100 // Voice recEive and transMit
      *#define IF_TYPE_VOICE_FXO               101 // Voice Foreign Exchange Office
      *#define IF_TYPE_VOICE_FXS               102 // Voice Foreign Exchange Station
      *#define IF_TYPE_VOICE_ENCAP             103 // Voice encapsulation
      *#define IF_TYPE_VOICE_OVERIP            104 // Voice over IP encapsulation
      *#define IF_TYPE_ATM_DXI                 105 // ATM DXI
      *#define IF_TYPE_ATM_FUNI                106 // ATM FUNI
      *#define IF_TYPE_ATM_IMA                 107 // ATM IMA
      *#define IF_TYPE_PPPMULTILINKBUNDLE      108 // PPP Multilink Bundle
      *#define IF_TYPE_IPOVER_CDLC             109 // IBM ipOverCdlc
      *#define IF_TYPE_IPOVER_CLAW             110 // IBM Common Link Access to Workstn
      *#define IF_TYPE_STACKTOSTACK            111 // IBM stackToStack
      *#define IF_TYPE_VIRTUALIPADDRESS        112 // IBM VIPA
      *#define IF_TYPE_MPC                     113 // IBM multi-proto channel support
      *#define IF_TYPE_IPOVER_ATM              114 // IBM ipOverAtm
      *#define IF_TYPE_ISO88025_FIBER          115 // ISO 802.5j Fiber Token Ring
      *#define IF_TYPE_TDLC                    116 // IBM twinaxial data link control
      *#define IF_TYPE_GIGABITETHERNET         117
      *#define IF_TYPE_HDLC                    118
      *#define IF_TYPE_LAP_F                   119
      *#define IF_TYPE_V37                     120
      *#define IF_TYPE_X25_MLP                 121 // Multi-Link Protocol
      *#define IF_TYPE_X25_HUNTGROUP           122 // X.25 Hunt Group
      *#define IF_TYPE_TRANSPHDLC              123
      *#define IF_TYPE_INTERLEAVE              124 // Interleave channel
      *#define IF_TYPE_FAST                    125 // Fast channel
      *#define IF_TYPE_IP                      126 // IP (for APPN HPR in IP networks)
      *#define IF_TYPE_DOCSCABLE_MACLAYER      127 // CATV Mac Layer
      *#define IF_TYPE_DOCSCABLE_DOWNSTREAM    128 // CATV Downstream interface
      *#define IF_TYPE_DOCSCABLE_UPSTREAM      129 // CATV Upstream interface
      *#define IF_TYPE_A12MPPSWITCH            130 // Avalon Parallel Processor
      *#define IF_TYPE_TUNNEL                  131 // Encapsulation interface
      *#define IF_TYPE_COFFEE                  132 // Coffee pot
      *#define IF_TYPE_CES                     133 // Circuit Emulation Service
      *#define IF_TYPE_ATM_SUBINTERFACE        134 // ATM Sub Interface
      *#define IF_TYPE_L2_VLAN                 135 // Layer 2 Virtual LAN using 802.1Q
      *#define IF_TYPE_L3_IPVLAN               136 // Layer 3 Virtual LAN using IP
      *#define IF_TYPE_L3_IPXVLAN              137 // Layer 3 Virtual LAN using IPX
      *#define IF_TYPE_DIGITALPOWERLINE        138 // IP over Power Lines
      *#define IF_TYPE_MEDIAMAILOVERIP         139 // Multimedia Mail over IP
      *#define IF_TYPE_DTM                     140 // Dynamic syncronous Transfer Mode
      *#define IF_TYPE_DCN                     141 // Data Communications Network
      *#define IF_TYPE_IPFORWARD               142 // IP Forwarding Interface
      *#define IF_TYPE_MSDSL                   143 // Multi-rate Symmetric DSL
      *#define IF_TYPE_IEEE1394                144 // IEEE1394 High Perf Serial Bus
      *#define IF_TYPE_RECEIVE_ONLY            145 // TV adapter type

[Migrated content. Thread originally posted on 31 August 2007]


       PROCEDURE DIVISION.
       MAIN-LOGIC.
    PERFORM SHOW-ADAPTERS.
           STOP    RUN.
       SHOW-ADAPTERS.
           INITIALIZE               KEY-STATUS
                                    AllocSize
                                    AllocPtr
                                    StepPtr.
           SET     IpStructSize     TO SIZE OF IP-ADAPTER-INFO.
           CALL    "IpHlpAPI.DLL@WINAPI".
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           CALL    "M$ALLOC"        USING AllocSize
                   AllocPtr.
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           MOVE    AllocPtr         TO StepPtr.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADAPTER-INFO
                                    BY VALUE StepPtr
                                    BY VALUE IpStructSize
                   PERFORM          DISPLAY-ADAPTER
                   MOVE             NextAdapterPtr to StepPtr
                   END-PERFORM.
           CALL    "M$FREE"         USING AllocPtr.
           CANCEL  "IpHlpAPI.DLL"
           EXIT    PARAGRAPH.
       DISPLAY-ADAPTER.
           EVALUATE                 AdapterType
                   WHEN             001 MOVE "Other" TO
                                             WS-AdapterType
                   WHEN             006 MOVE "Ethernet CSMACD" TO
                                             WS-AdapterType
                   WHEN             020 MOVE "Basic ISDN" TO
                                             WS-AdapterType
                   WHEN             021 MOVE "Primary ISDN" TO
                                             WS-AdapterType
                   WHEN             023 MOVE "PPP" TO
                                             WS-AdapterType
                   WHEN             026 MOVE "Ethernet 3Mb" TO
                                             WS-AdapterType
                   WHEN             048 MOVE "Modem" TO
                                             WS-AdapterType
                   WHEN             062 MOVE "Ethernet 100BaseT" TO
                                             WS-AdapterType
                   WHEN             063 MOVE "ISDN X.25" TO
                                             WS-AdapterType
                   WHEN             069 MOVE "Ethernet 100BaseFX" TO
                                             WS-AdapterType
                   WHEN             075 MOVE "ISDN S/T" TO
                                             WS-AdapterType
                   WHEN             076 MOVE "ISDN U" TO
                                             WS-AdapterType
                   WHEN             117 MOVE "Ethernet Gigabit" TO
                                             WS-AdapterType
                   WHEN             OTHER MOVE "Check list in src" TO
                                             WS-AdapterType
           END-EVALUATE.
           INITIALIZE               WS-Title.
           MOVE    AdapterIndex     TO WS-AdapterIndex.
           EVALUATE                 TRUE
                   WHEN             (AdapterIndex < 10)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(4:1)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 100)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(3:2)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 1000)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(2:3)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             OTHER
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex
                                            DELIMITED BY SIZE INTO
                                            WS-Title
           END-EVALUATE.
           IF      DHCPEnabled      NOT = 0
                   Move             "Yes" TO WS-DHCPEnabled
           ELSE
                   Move             "No " TO WS-DHCPEnabled
                   END-IF.
           IF      HaveWins         NOT = 0
                   Move             "Yes" TO WS-HaveWins
           ELSE
                   Move             "No " TO WS-HaveWins
                   END-IF.
           PERFORM CREATE-MAC-ADDRESS.
           PERFORM GENERATE-IP-ASSOC.
           PERFORM GENERATE-GATEWAY.
           PERFORM GENERATE-DHCPServer
           DISPLAY MESSAGE          BOX
                   "Adapter name"   x"09" AdapterName x"0a"
                   "Description"    x"09" Description x"0a"
                   "AdapterAddress" x"09" WS-AdapterAddress x"0a"
                   "Adapter type"   x"09" WS-AdapterType x"0a"
                   "DHCP Enabled"   x"09" WS-DHCPEnabled x"0a"
                   "Have Wins"      x"09" WS-HaveWins x"0a" x"0a"
                   WS-IpAssocList   x"0a"
                   WS-GatewayList   x"0a"
                   WS-DHCPSrvList
                   ICON             1
                   TITLE            WS-Title.
           EXIT    PARAGRAPH.
       GENERATE-IP-ASSOC.
           INITIALIZE               WS-IpAssocList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF IpAddressList.
           MOVE    1                TO PosCounter.
           STRING  "IP Address, mask and context:" DELIMITED BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-IpAssocList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-IpAssocList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.

      *
      * Adapter types, as defined in Windows API
      *
      *#define IF_TYPE_OTHER                   1   // None of the below
      *#define IF_TYPE_REGULAR_1822            2
      *#define IF_TYPE_HDH_1822                3
      *#define IF_TYPE_DDN_X25                 4
      *#define IF_TYPE_RFC877_X25              5
      *#define IF_TYPE_ETHERNET_CSMACD         6
      *#define IF_TYPE_IS088023_CSMACD         7
      *#define IF_TYPE_ISO88024_TOKENBUS       8
      *#define IF_TYPE_ISO88025_TOKENRING      9
      *#define IF_TYPE_ISO88026_MAN            10
      *#define IF_TYPE_STARLAN                 11
      *#define IF_TYPE_PROTEON_10MBIT          12
      *#define IF_TYPE_PROTEON_80MBIT          13
      *#define IF_TYPE_HYPERCHANNEL            14
      *#define IF_TYPE_FDDI                    15
      *#define IF_TYPE_LAP_B                   16
      *#define IF_TYPE_SDLC                    17
      *#define IF_TYPE_DS1                     18  // DS1-MIB
      *#define IF_TYPE_E1                      19  // Obsolete; see DS1-MIB
      *#define IF_TYPE_BASIC_ISDN              20
      *#define IF_TYPE_PRIMARY_ISDN            21
      *#define IF_TYPE_PROP_POINT2POINT_SERIAL 22  // proprietary serial
      *#define IF_TYPE_PPP                     23
      *#define IF_TYPE_SOFTWARE_LOOPBACK       24
      *#define IF_TYPE_EON                     25  // CLNP over IP
      *#define IF_TYPE_ETHERNET_3MBIT          26
      *#define IF_TYPE_NSIP                    27  // XNS over IP
      *#define IF_TYPE_SLIP                    28  // Generic Slip
      *#define IF_TYPE_ULTRA                   29  // ULTRA Technologies
      *#define IF_TYPE_DS3                     30  // DS3-MIB
      *#define IF_TYPE_SIP                     31  // SMDS, coffee
      *#define IF_TYPE_FRAMERELAY              32  // DTE only
      *#define IF_TYPE_RS232                   33
      *#define IF_TYPE_PARA                    34  // Parallel port
      *#define IF_TYPE_ARCNET                  35
      *#define IF_TYPE_ARCNET_PLUS             36
      *#define IF_TYPE_ATM                     37  // ATM cells
      *#define IF_TYPE_MIO_X25                 38
      *#define IF_TYPE_SONET                   39  // SONET or SDH
      *#define IF_TYPE_X25_PLE                 40
      *#define IF_TYPE_ISO88022_LLC            41
      *#define IF_TYPE_LOCALTALK               42
      *#define IF_TYPE_SMDS_DXI                43
      *#define IF_TYPE_FRAMERELAY_SERVICE      44  // FRNETSERV-MIB
      *#define IF_TYPE_V35                     45
      *#define IF_TYPE_HSSI                    46
      *#define IF_TYPE_HIPPI                   47
      *#define IF_TYPE_MODEM                   48  // Generic Modem
      *#define IF_TYPE_AAL5                    49  // AAL5 over ATM
      *#define IF_TYPE_SONET_PATH              50
      *#define IF_TYPE_SONET_VT                51
      *#define IF_TYPE_SMDS_ICIP               52  // SMDS InterCarrier Interface
      *#define IF_TYPE_PROP_VIRTUAL            53  // Proprietary virtual/internal
      *#define IF_TYPE_PROP_MULTIPLEXOR        54  // Proprietary multiplexing
      *#define IF_TYPE_IEEE80212               55  // 100BaseVG
      *#define IF_TYPE_FIBRECHANNEL            56
      *#define IF_TYPE_HIPPIINTERFACE          57
      *#define IF_TYPE_FRAMERELAY_INTERCONNECT 58  // Obsolete, use 32 or 44
      *#define IF_TYPE_AFLANE_8023             59  // ATM Emulated LAN for 802.3
      *#define IF_TYPE_AFLANE_8025             60  // ATM Emulated LAN for 802.5
      *#define IF_TYPE_CCTEMUL                 61  // ATM Emulated circuit
      *#define IF_TYPE_FASTETHER               62  // Fast Ethernet (100BaseT)
      *#define IF_TYPE_ISDN                    63  // ISDN and X.25
      *#define IF_TYPE_V11                     64  // CCITT V.11/X.21
      *#define IF_TYPE_V36                     65  // CCITT V.36
      *#define IF_TYPE_G703_64K                66  // CCITT G703 at 64Kbps
      *#define IF_TYPE_G703_2MB                67  // Obsolete; see DS1-MIB
      *#define IF_TYPE_QLLC                    68  // SNA QLLC
      *#define IF_TYPE_FASTETHER_FX            69  // Fast Ethernet (100BaseFX)
      *#define IF_TYPE_CHANNEL                 70
      *#define IF_TYPE_IEEE80211               71  // Radio spread spectrum
      *#define IF_TYPE_IBM370PARCHAN           72  // IBM System 360/370 OEMI Channel
      *#define IF_TYPE_ESCON                   73  // IBM Enterprise Systems Connection
      *#define IF_TYPE_DLSW                    74  // Data Link Switching
      *#define IF_TYPE_ISDN_S                  75  // ISDN S/T interface
      *#define IF_TYPE_ISDN_U                  76  // ISDN U interface
      *#define IF_TYPE_LAP_D                   77  // Link Access Protocol D
      *#define IF_TYPE_IPSWITCH                78  // IP Switching Objects
      *#define IF_TYPE_RSRB                    79  // Remote Source Route Bridging
      *#define IF_TYPE_ATM_LOGICAL             80  // ATM Logical Port
      *#define IF_TYPE_DS0                     81  // Digital Signal Level 0
      *#define IF_TYPE_DS0_BUNDLE              82  // Group of ds0s on the same ds1
      *#define IF_TYPE_BSC                     83  // Bisynchronous Protocol
      *#define IF_TYPE_ASYNC                   84  // Asynchronous Protocol
      *#define IF_TYPE_CNR                     85  // Combat Net Radio
      *#define IF_TYPE_ISO88025R_DTR           86  // ISO 802.5r DTR
      *#define IF_TYPE_EPLRS                   87  // Ext Pos Loc Report Sys
      *#define IF_TYPE_ARAP                    88  // Appletalk Remote Access Protocol
      *#define IF_TYPE_PROP_CNLS               89  // Proprietary Connectionless Proto
      *#define IF_TYPE_HOSTPAD                 90  // CCITT-ITU X.29 PAD Protocol
      *#define IF_TYPE_TERMPAD                 91  // CCITT-ITU X.3 PAD Facility
      *#define IF_TYPE_FRAMERELAY_MPI          92  // Multiproto Interconnect over FR
      *#define IF_TYPE_X213                    93  // CCITT-ITU X213
      *#define IF_TYPE_ADSL                    94  // Asymmetric Digital Subscrbr Loop
      *#define IF_TYPE_RADSL                   95  // Rate-Adapt Digital Subscrbr Loop
      *#define IF_TYPE_SDSL                    96  // Symmetric Digital Subscriber Loop
      *#define IF_TYPE_VDSL                    97  // Very H-Speed Digital Subscrb Loop
      *#define IF_TYPE_ISO88025_CRFPRINT       98  // ISO 802.5 CRFP
      *#define IF_TYPE_MYRINET                 99  // Myricom Myrinet
      *#define IF_TYPE_VOICE_EM                100 // Voice recEive and transMit
      *#define IF_TYPE_VOICE_FXO               101 // Voice Foreign Exchange Office
      *#define IF_TYPE_VOICE_FXS               102 // Voice Foreign Exchange Station
      *#define IF_TYPE_VOICE_ENCAP             103 // Voice encapsulation
      *#define IF_TYPE_VOICE_OVERIP            104 // Voice over IP encapsulation
      *#define IF_TYPE_ATM_DXI                 105 // ATM DXI
      *#define IF_TYPE_ATM_FUNI                106 // ATM FUNI
      *#define IF_TYPE_ATM_IMA                 107 // ATM IMA
      *#define IF_TYPE_PPPMULTILINKBUNDLE      108 // PPP Multilink Bundle
      *#define IF_TYPE_IPOVER_CDLC             109 // IBM ipOverCdlc
      *#define IF_TYPE_IPOVER_CLAW             110 // IBM Common Link Access to Workstn
      *#define IF_TYPE_STACKTOSTACK            111 // IBM stackToStack
      *#define IF_TYPE_VIRTUALIPADDRESS        112 // IBM VIPA
      *#define IF_TYPE_MPC                     113 // IBM multi-proto channel support
      *#define IF_TYPE_IPOVER_ATM              114 // IBM ipOverAtm
      *#define IF_TYPE_ISO88025_FIBER          115 // ISO 802.5j Fiber Token Ring
      *#define IF_TYPE_TDLC                    116 // IBM twinaxial data link control
      *#define IF_TYPE_GIGABITETHERNET         117
      *#define IF_TYPE_HDLC                    118
      *#define IF_TYPE_LAP_F                   119
      *#define IF_TYPE_V37                     120
      *#define IF_TYPE_X25_MLP                 121 // Multi-Link Protocol
      *#define IF_TYPE_X25_HUNTGROUP           122 // X.25 Hunt Group
      *#define IF_TYPE_TRANSPHDLC              123
      *#define IF_TYPE_INTERLEAVE              124 // Interleave channel
      *#define IF_TYPE_FAST                    125 // Fast channel
      *#define IF_TYPE_IP                      126 // IP (for APPN HPR in IP networks)
      *#define IF_TYPE_DOCSCABLE_MACLAYER      127 // CATV Mac Layer
      *#define IF_TYPE_DOCSCABLE_DOWNSTREAM    128 // CATV Downstream interface
      *#define IF_TYPE_DOCSCABLE_UPSTREAM      129 // CATV Upstream interface
      *#define IF_TYPE_A12MPPSWITCH            130 // Avalon Parallel Processor
      *#define IF_TYPE_TUNNEL                  131 // Encapsulation interface
      *#define IF_TYPE_COFFEE                  132 // Coffee pot
      *#define IF_TYPE_CES                     133 // Circuit Emulation Service
      *#define IF_TYPE_ATM_SUBINTERFACE        134 // ATM Sub Interface
      *#define IF_TYPE_L2_VLAN                 135 // Layer 2 Virtual LAN using 802.1Q
      *#define IF_TYPE_L3_IPVLAN               136 // Layer 3 Virtual LAN using IP
      *#define IF_TYPE_L3_IPXVLAN              137 // Layer 3 Virtual LAN using IPX
      *#define IF_TYPE_DIGITALPOWERLINE        138 // IP over Power Lines
      *#define IF_TYPE_MEDIAMAILOVERIP         139 // Multimedia Mail over IP
      *#define IF_TYPE_DTM                     140 // Dynamic syncronous Transfer Mode
      *#define IF_TYPE_DCN                     141 // Data Communications Network
      *#define IF_TYPE_IPFORWARD               142 // IP Forwarding Interface
      *#define IF_TYPE_MSDSL                   143 // Multi-rate Symmetric DSL
      *#define IF_TYPE_IEEE1394                144 // IEEE1394 High Perf Serial Bus
      *#define IF_TYPE_RECEIVE_ONLY            145 // TV adapter type

[Migrated content. Thread originally posted on 31 August 2007]


       PROCEDURE DIVISION.
       MAIN-LOGIC.
    PERFORM SHOW-ADAPTERS.
           STOP    RUN.
       SHOW-ADAPTERS.
           INITIALIZE               KEY-STATUS
                                    AllocSize
                                    AllocPtr
                                    StepPtr.
           SET     IpStructSize     TO SIZE OF IP-ADAPTER-INFO.
           CALL    "IpHlpAPI.DLL@WINAPI".
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           CALL    "M$ALLOC"        USING AllocSize
                   AllocPtr.
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           MOVE    AllocPtr         TO StepPtr.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADAPTER-INFO
                                    BY VALUE StepPtr
                                    BY VALUE IpStructSize
                   PERFORM          DISPLAY-ADAPTER
                   MOVE             NextAdapterPtr to StepPtr
                   END-PERFORM.
           CALL    "M$FREE"         USING AllocPtr.
           CANCEL  "IpHlpAPI.DLL"
           EXIT    PARAGRAPH.
       DISPLAY-ADAPTER.
           EVALUATE                 AdapterType
                   WHEN             001 MOVE "Other" TO
                                             WS-AdapterType
                   WHEN             006 MOVE "Ethernet CSMACD" TO
                                             WS-AdapterType
                   WHEN             020 MOVE "Basic ISDN" TO
                                             WS-AdapterType
                   WHEN             021 MOVE "Primary ISDN" TO
                                             WS-AdapterType
                   WHEN             023 MOVE "PPP" TO
                                             WS-AdapterType
                   WHEN             026 MOVE "Ethernet 3Mb" TO
                                             WS-AdapterType
                   WHEN             048 MOVE "Modem" TO
                                             WS-AdapterType
                   WHEN             062 MOVE "Ethernet 100BaseT" TO
                                             WS-AdapterType
                   WHEN             063 MOVE "ISDN X.25" TO
                                             WS-AdapterType
                   WHEN             069 MOVE "Ethernet 100BaseFX" TO
                                             WS-AdapterType
                   WHEN             075 MOVE "ISDN S/T" TO
                                             WS-AdapterType
                   WHEN             076 MOVE "ISDN U" TO
                                             WS-AdapterType
                   WHEN             117 MOVE "Ethernet Gigabit" TO
                                             WS-AdapterType
                   WHEN             OTHER MOVE "Check list in src" TO
                                             WS-AdapterType
           END-EVALUATE.
           INITIALIZE               WS-Title.
           MOVE    AdapterIndex     TO WS-AdapterIndex.
           EVALUATE                 TRUE
                   WHEN             (AdapterIndex < 10)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(4:1)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 100)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(3:2)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 1000)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(2:3)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             OTHER
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex
                                            DELIMITED BY SIZE INTO
                                            WS-Title
           END-EVALUATE.
           IF      DHCPEnabled      NOT = 0
                   Move             "Yes" TO WS-DHCPEnabled
           ELSE
                   Move             "No " TO WS-DHCPEnabled
                   END-IF.
           IF      HaveWins         NOT = 0
                   Move             "Yes" TO WS-HaveWins
           ELSE
                   Move             "No " TO WS-HaveWins
                   END-IF.
           PERFORM CREATE-MAC-ADDRESS.
           PERFORM GENERATE-IP-ASSOC.
           PERFORM GENERATE-GATEWAY.
           PERFORM GENERATE-DHCPServer
           DISPLAY MESSAGE          BOX
                   "Adapter name"   x"09" AdapterName x"0a"
                   "Description"    x"09" Description x"0a"
                   "AdapterAddress" x"09" WS-AdapterAddress x"0a"
                   "Adapter type"   x"09" WS-AdapterType x"0a"
                   "DHCP Enabled"   x"09" WS-DHCPEnabled x"0a"
                   "Have Wins"      x"09" WS-HaveWins x"0a" x"0a"
                   WS-IpAssocList   x"0a"
                   WS-GatewayList   x"0a"
                   WS-DHCPSrvList
                   ICON             1
                   TITLE            WS-Title.
           EXIT    PARAGRAPH.
       GENERATE-IP-ASSOC.
           INITIALIZE               WS-IpAssocList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF IpAddressList.
           MOVE    1                TO PosCounter.
           STRING  "IP Address, mask and context:" DELIMITED BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-IpAssocList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-IpAssocList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.
Thanks for the help. I've implemented a solution based on these ideas.

Rob

[Migrated content. Thread originally posted on 31 August 2007]


       PROCEDURE DIVISION.
       MAIN-LOGIC.
    PERFORM SHOW-ADAPTERS.
           STOP    RUN.
       SHOW-ADAPTERS.
           INITIALIZE               KEY-STATUS
                                    AllocSize
                                    AllocPtr
                                    StepPtr.
           SET     IpStructSize     TO SIZE OF IP-ADAPTER-INFO.
           CALL    "IpHlpAPI.DLL@WINAPI".
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           CALL    "M$ALLOC"        USING AllocSize
                   AllocPtr.
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           MOVE    AllocPtr         TO StepPtr.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADAPTER-INFO
                                    BY VALUE StepPtr
                                    BY VALUE IpStructSize
                   PERFORM          DISPLAY-ADAPTER
                   MOVE             NextAdapterPtr to StepPtr
                   END-PERFORM.
           CALL    "M$FREE"         USING AllocPtr.
           CANCEL  "IpHlpAPI.DLL"
           EXIT    PARAGRAPH.
       DISPLAY-ADAPTER.
           EVALUATE                 AdapterType
                   WHEN             001 MOVE "Other" TO
                                             WS-AdapterType
                   WHEN             006 MOVE "Ethernet CSMACD" TO
                                             WS-AdapterType
                   WHEN             020 MOVE "Basic ISDN" TO
                                             WS-AdapterType
                   WHEN             021 MOVE "Primary ISDN" TO
                                             WS-AdapterType
                   WHEN             023 MOVE "PPP" TO
                                             WS-AdapterType
                   WHEN             026 MOVE "Ethernet 3Mb" TO
                                             WS-AdapterType
                   WHEN             048 MOVE "Modem" TO
                                             WS-AdapterType
                   WHEN             062 MOVE "Ethernet 100BaseT" TO
                                             WS-AdapterType
                   WHEN             063 MOVE "ISDN X.25" TO
                                             WS-AdapterType
                   WHEN             069 MOVE "Ethernet 100BaseFX" TO
                                             WS-AdapterType
                   WHEN             075 MOVE "ISDN S/T" TO
                                             WS-AdapterType
                   WHEN             076 MOVE "ISDN U" TO
                                             WS-AdapterType
                   WHEN             117 MOVE "Ethernet Gigabit" TO
                                             WS-AdapterType
                   WHEN             OTHER MOVE "Check list in src" TO
                                             WS-AdapterType
           END-EVALUATE.
           INITIALIZE               WS-Title.
           MOVE    AdapterIndex     TO WS-AdapterIndex.
           EVALUATE                 TRUE
                   WHEN             (AdapterIndex < 10)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(4:1)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 100)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(3:2)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 1000)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(2:3)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             OTHER
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex
                                            DELIMITED BY SIZE INTO
                                            WS-Title
           END-EVALUATE.
           IF      DHCPEnabled      NOT = 0
                   Move             "Yes" TO WS-DHCPEnabled
           ELSE
                   Move             "No " TO WS-DHCPEnabled
                   END-IF.
           IF      HaveWins         NOT = 0
                   Move             "Yes" TO WS-HaveWins
           ELSE
                   Move             "No " TO WS-HaveWins
                   END-IF.
           PERFORM CREATE-MAC-ADDRESS.
           PERFORM GENERATE-IP-ASSOC.
           PERFORM GENERATE-GATEWAY.
           PERFORM GENERATE-DHCPServer
           DISPLAY MESSAGE          BOX
                   "Adapter name"   x"09" AdapterName x"0a"
                   "Description"    x"09" Description x"0a"
                   "AdapterAddress" x"09" WS-AdapterAddress x"0a"
                   "Adapter type"   x"09" WS-AdapterType x"0a"
                   "DHCP Enabled"   x"09" WS-DHCPEnabled x"0a"
                   "Have Wins"      x"09" WS-HaveWins x"0a" x"0a"
                   WS-IpAssocList   x"0a"
                   WS-GatewayList   x"0a"
                   WS-DHCPSrvList
                   ICON             1
                   TITLE            WS-Title.
           EXIT    PARAGRAPH.
       GENERATE-IP-ASSOC.
           INITIALIZE               WS-IpAssocList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF IpAddressList.
           MOVE    1                TO PosCounter.
           STRING  "IP Address, mask and context:" DELIMITED BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-IpAssocList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-IpAssocList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.
Thanks for the help. I've implemented a solution based on these ideas.

Rob

[Migrated content. Thread originally posted on 31 August 2007]


       PROCEDURE DIVISION.
       MAIN-LOGIC.
    PERFORM SHOW-ADAPTERS.
           STOP    RUN.
       SHOW-ADAPTERS.
           INITIALIZE               KEY-STATUS
                                    AllocSize
                                    AllocPtr
                                    StepPtr.
           SET     IpStructSize     TO SIZE OF IP-ADAPTER-INFO.
           CALL    "IpHlpAPI.DLL@WINAPI".
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           CALL    "M$ALLOC"        USING AllocSize
                   AllocPtr.
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           MOVE    AllocPtr         TO StepPtr.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADAPTER-INFO
                                    BY VALUE StepPtr
                                    BY VALUE IpStructSize
                   PERFORM          DISPLAY-ADAPTER
                   MOVE             NextAdapterPtr to StepPtr
                   END-PERFORM.
           CALL    "M$FREE"         USING AllocPtr.
           CANCEL  "IpHlpAPI.DLL"
           EXIT    PARAGRAPH.
       DISPLAY-ADAPTER.
           EVALUATE                 AdapterType
                   WHEN             001 MOVE "Other" TO
                                             WS-AdapterType
                   WHEN             006 MOVE "Ethernet CSMACD" TO
                                             WS-AdapterType
                   WHEN             020 MOVE "Basic ISDN" TO
                                             WS-AdapterType
                   WHEN             021 MOVE "Primary ISDN" TO
                                             WS-AdapterType
                   WHEN             023 MOVE "PPP" TO
                                             WS-AdapterType
                   WHEN             026 MOVE "Ethernet 3Mb" TO
                                             WS-AdapterType
                   WHEN             048 MOVE "Modem" TO
                                             WS-AdapterType
                   WHEN             062 MOVE "Ethernet 100BaseT" TO
                                             WS-AdapterType
                   WHEN             063 MOVE "ISDN X.25" TO
                                             WS-AdapterType
                   WHEN             069 MOVE "Ethernet 100BaseFX" TO
                                             WS-AdapterType
                   WHEN             075 MOVE "ISDN S/T" TO
                                             WS-AdapterType
                   WHEN             076 MOVE "ISDN U" TO
                                             WS-AdapterType
                   WHEN             117 MOVE "Ethernet Gigabit" TO
                                             WS-AdapterType
                   WHEN             OTHER MOVE "Check list in src" TO
                                             WS-AdapterType
           END-EVALUATE.
           INITIALIZE               WS-Title.
           MOVE    AdapterIndex     TO WS-AdapterIndex.
           EVALUATE                 TRUE
                   WHEN             (AdapterIndex < 10)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(4:1)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 100)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(3:2)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 1000)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(2:3)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             OTHER
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex
                                            DELIMITED BY SIZE INTO
                                            WS-Title
           END-EVALUATE.
           IF      DHCPEnabled      NOT = 0
                   Move             "Yes" TO WS-DHCPEnabled
           ELSE
                   Move             "No " TO WS-DHCPEnabled
                   END-IF.
           IF      HaveWins         NOT = 0
                   Move             "Yes" TO WS-HaveWins
           ELSE
                   Move             "No " TO WS-HaveWins
                   END-IF.
           PERFORM CREATE-MAC-ADDRESS.
           PERFORM GENERATE-IP-ASSOC.
           PERFORM GENERATE-GATEWAY.
           PERFORM GENERATE-DHCPServer
           DISPLAY MESSAGE          BOX
                   "Adapter name"   x"09" AdapterName x"0a"
                   "Description"    x"09" Description x"0a"
                   "AdapterAddress" x"09" WS-AdapterAddress x"0a"
                   "Adapter type"   x"09" WS-AdapterType x"0a"
                   "DHCP Enabled"   x"09" WS-DHCPEnabled x"0a"
                   "Have Wins"      x"09" WS-HaveWins x"0a" x"0a"
                   WS-IpAssocList   x"0a"
                   WS-GatewayList   x"0a"
                   WS-DHCPSrvList
                   ICON             1
                   TITLE            WS-Title.
           EXIT    PARAGRAPH.
       GENERATE-IP-ASSOC.
           INITIALIZE               WS-IpAssocList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF IpAddressList.
           MOVE    1                TO PosCounter.
           STRING  "IP Address, mask and context:" DELIMITED BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-IpAssocList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-IpAssocList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.
Hi Gisle

We have implemented the solution you have suggested above, and it works fine for several computers, but on some the program just stops when we are executing the call to "IPHLPAPI.DLL".

We have already found the iphlpapi.dll on the computers and we have even tried copying the dll to current directory without any luck

Do you have any idea why ?


Regards

Steen, Datamann

[Migrated content. Thread originally posted on 31 August 2007]


       PROCEDURE DIVISION.
       MAIN-LOGIC.
    PERFORM SHOW-ADAPTERS.
           STOP    RUN.
       SHOW-ADAPTERS.
           INITIALIZE               KEY-STATUS
                                    AllocSize
                                    AllocPtr
                                    StepPtr.
           SET     IpStructSize     TO SIZE OF IP-ADAPTER-INFO.
           CALL    "IpHlpAPI.DLL@WINAPI".
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           CALL    "M$ALLOC"        USING AllocSize
                   AllocPtr.
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           MOVE    AllocPtr         TO StepPtr.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADAPTER-INFO
                                    BY VALUE StepPtr
                                    BY VALUE IpStructSize
                   PERFORM          DISPLAY-ADAPTER
                   MOVE             NextAdapterPtr to StepPtr
                   END-PERFORM.
           CALL    "M$FREE"         USING AllocPtr.
           CANCEL  "IpHlpAPI.DLL"
           EXIT    PARAGRAPH.
       DISPLAY-ADAPTER.
           EVALUATE                 AdapterType
                   WHEN             001 MOVE "Other" TO
                                             WS-AdapterType
                   WHEN             006 MOVE "Ethernet CSMACD" TO
                                             WS-AdapterType
                   WHEN             020 MOVE "Basic ISDN" TO
                                             WS-AdapterType
                   WHEN             021 MOVE "Primary ISDN" TO
                                             WS-AdapterType
                   WHEN             023 MOVE "PPP" TO
                                             WS-AdapterType
                   WHEN             026 MOVE "Ethernet 3Mb" TO
                                             WS-AdapterType
                   WHEN             048 MOVE "Modem" TO
                                             WS-AdapterType
                   WHEN             062 MOVE "Ethernet 100BaseT" TO
                                             WS-AdapterType
                   WHEN             063 MOVE "ISDN X.25" TO
                                             WS-AdapterType
                   WHEN             069 MOVE "Ethernet 100BaseFX" TO
                                             WS-AdapterType
                   WHEN             075 MOVE "ISDN S/T" TO
                                             WS-AdapterType
                   WHEN             076 MOVE "ISDN U" TO
                                             WS-AdapterType
                   WHEN             117 MOVE "Ethernet Gigabit" TO
                                             WS-AdapterType
                   WHEN             OTHER MOVE "Check list in src" TO
                                             WS-AdapterType
           END-EVALUATE.
           INITIALIZE               WS-Title.
           MOVE    AdapterIndex     TO WS-AdapterIndex.
           EVALUATE                 TRUE
                   WHEN             (AdapterIndex < 10)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(4:1)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 100)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(3:2)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 1000)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(2:3)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             OTHER
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex
                                            DELIMITED BY SIZE INTO
                                            WS-Title
           END-EVALUATE.
           IF      DHCPEnabled      NOT = 0
                   Move             "Yes" TO WS-DHCPEnabled
           ELSE
                   Move             "No " TO WS-DHCPEnabled
                   END-IF.
           IF      HaveWins         NOT = 0
                   Move             "Yes" TO WS-HaveWins
           ELSE
                   Move             "No " TO WS-HaveWins
                   END-IF.
           PERFORM CREATE-MAC-ADDRESS.
           PERFORM GENERATE-IP-ASSOC.
           PERFORM GENERATE-GATEWAY.
           PERFORM GENERATE-DHCPServer
           DISPLAY MESSAGE          BOX
                   "Adapter name"   x"09" AdapterName x"0a"
                   "Description"    x"09" Description x"0a"
                   "AdapterAddress" x"09" WS-AdapterAddress x"0a"
                   "Adapter type"   x"09" WS-AdapterType x"0a"
                   "DHCP Enabled"   x"09" WS-DHCPEnabled x"0a"
                   "Have Wins"      x"09" WS-HaveWins x"0a" x"0a"
                   WS-IpAssocList   x"0a"
                   WS-GatewayList   x"0a"
                   WS-DHCPSrvList
                   ICON             1
                   TITLE            WS-Title.
           EXIT    PARAGRAPH.
       GENERATE-IP-ASSOC.
           INITIALIZE               WS-IpAssocList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF IpAddressList.
           MOVE    1                TO PosCounter.
           STRING  "IP Address, mask and context:" DELIMITED BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-IpAssocList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-IpAssocList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.
Hi Gisle

We have implemented the solution you have suggested above, and it works fine for several computers, but on some the program just stops when we are executing the call to "IPHLPAPI.DLL".

We have already found the iphlpapi.dll on the computers and we have even tried copying the dll to current directory without any luck

Do you have any idea why ?


Regards

Steen, Datamann

[Migrated content. Thread originally posted on 31 August 2007]


       PROCEDURE DIVISION.
       MAIN-LOGIC.
    PERFORM SHOW-ADAPTERS.
           STOP    RUN.
       SHOW-ADAPTERS.
           INITIALIZE               KEY-STATUS
                                    AllocSize
                                    AllocPtr
                                    StepPtr.
           SET     IpStructSize     TO SIZE OF IP-ADAPTER-INFO.
           CALL    "IpHlpAPI.DLL@WINAPI".
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           CALL    "M$ALLOC"        USING AllocSize
                   AllocPtr.
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           MOVE    AllocPtr         TO StepPtr.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADAPTER-INFO
                                    BY VALUE StepPtr
                                    BY VALUE IpStructSize
                   PERFORM          DISPLAY-ADAPTER
                   MOVE             NextAdapterPtr to StepPtr
                   END-PERFORM.
           CALL    "M$FREE"         USING AllocPtr.
           CANCEL  "IpHlpAPI.DLL"
           EXIT    PARAGRAPH.
       DISPLAY-ADAPTER.
           EVALUATE                 AdapterType
                   WHEN             001 MOVE "Other" TO
                                             WS-AdapterType
                   WHEN             006 MOVE "Ethernet CSMACD" TO
                                             WS-AdapterType
                   WHEN             020 MOVE "Basic ISDN" TO
                                             WS-AdapterType
                   WHEN             021 MOVE "Primary ISDN" TO
                                             WS-AdapterType
                   WHEN             023 MOVE "PPP" TO
                                             WS-AdapterType
                   WHEN             026 MOVE "Ethernet 3Mb" TO
                                             WS-AdapterType
                   WHEN             048 MOVE "Modem" TO
                                             WS-AdapterType
                   WHEN             062 MOVE "Ethernet 100BaseT" TO
                                             WS-AdapterType
                   WHEN             063 MOVE "ISDN X.25" TO
                                             WS-AdapterType
                   WHEN             069 MOVE "Ethernet 100BaseFX" TO
                                             WS-AdapterType
                   WHEN             075 MOVE "ISDN S/T" TO
                                             WS-AdapterType
                   WHEN             076 MOVE "ISDN U" TO
                                             WS-AdapterType
                   WHEN             117 MOVE "Ethernet Gigabit" TO
                                             WS-AdapterType
                   WHEN             OTHER MOVE "Check list in src" TO
                                             WS-AdapterType
           END-EVALUATE.
           INITIALIZE               WS-Title.
           MOVE    AdapterIndex     TO WS-AdapterIndex.
           EVALUATE                 TRUE
                   WHEN             (AdapterIndex < 10)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(4:1)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 100)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(3:2)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 1000)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(2:3)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             OTHER
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex
                                            DELIMITED BY SIZE INTO
                                            WS-Title
           END-EVALUATE.
           IF      DHCPEnabled      NOT = 0
                   Move             "Yes" TO WS-DHCPEnabled
           ELSE
                   Move             "No " TO WS-DHCPEnabled
                   END-IF.
           IF      HaveWins         NOT = 0
                   Move             "Yes" TO WS-HaveWins
           ELSE
                   Move             "No " TO WS-HaveWins
                   END-IF.
           PERFORM CREATE-MAC-ADDRESS.
           PERFORM GENERATE-IP-ASSOC.
           PERFORM GENERATE-GATEWAY.
           PERFORM GENERATE-DHCPServer
           DISPLAY MESSAGE          BOX
                   "Adapter name"   x"09" AdapterName x"0a"
                   "Description"    x"09" Description x"0a"
                   "AdapterAddress" x"09" WS-AdapterAddress x"0a"
                   "Adapter type"   x"09" WS-AdapterType x"0a"
                   "DHCP Enabled"   x"09" WS-DHCPEnabled x"0a"
                   "Have Wins"      x"09" WS-HaveWins x"0a" x"0a"
                   WS-IpAssocList   x"0a"
                   WS-GatewayList   x"0a"
                   WS-DHCPSrvList
                   ICON             1
                   TITLE            WS-Title.
           EXIT    PARAGRAPH.
       GENERATE-IP-ASSOC.
           INITIALIZE               WS-IpAssocList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF IpAddressList.
           MOVE    1                TO PosCounter.
           STRING  "IP Address, mask and context:" DELIMITED BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-IpAssocList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-IpAssocList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.
This link http://support.microsoft.com/kb/823256, suggests this is an issue with your OS. If it is a Win 9x machine, try update the IE on it. You really should not have to copy this file, if you do, use depends.exe to verify dependency.

[Migrated content. Thread originally posted on 31 August 2007]


       PROCEDURE DIVISION.
       MAIN-LOGIC.
    PERFORM SHOW-ADAPTERS.
           STOP    RUN.
       SHOW-ADAPTERS.
           INITIALIZE               KEY-STATUS
                                    AllocSize
                                    AllocPtr
                                    StepPtr.
           SET     IpStructSize     TO SIZE OF IP-ADAPTER-INFO.
           CALL    "IpHlpAPI.DLL@WINAPI".
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           CALL    "M$ALLOC"        USING AllocSize
                   AllocPtr.
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           MOVE    AllocPtr         TO StepPtr.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADAPTER-INFO
                                    BY VALUE StepPtr
                                    BY VALUE IpStructSize
                   PERFORM          DISPLAY-ADAPTER
                   MOVE             NextAdapterPtr to StepPtr
                   END-PERFORM.
           CALL    "M$FREE"         USING AllocPtr.
           CANCEL  "IpHlpAPI.DLL"
           EXIT    PARAGRAPH.
       DISPLAY-ADAPTER.
           EVALUATE                 AdapterType
                   WHEN             001 MOVE "Other" TO
                                             WS-AdapterType
                   WHEN             006 MOVE "Ethernet CSMACD" TO
                                             WS-AdapterType
                   WHEN             020 MOVE "Basic ISDN" TO
                                             WS-AdapterType
                   WHEN             021 MOVE "Primary ISDN" TO
                                             WS-AdapterType
                   WHEN             023 MOVE "PPP" TO
                                             WS-AdapterType
                   WHEN             026 MOVE "Ethernet 3Mb" TO
                                             WS-AdapterType
                   WHEN             048 MOVE "Modem" TO
                                             WS-AdapterType
                   WHEN             062 MOVE "Ethernet 100BaseT" TO
                                             WS-AdapterType
                   WHEN             063 MOVE "ISDN X.25" TO
                                             WS-AdapterType
                   WHEN             069 MOVE "Ethernet 100BaseFX" TO
                                             WS-AdapterType
                   WHEN             075 MOVE "ISDN S/T" TO
                                             WS-AdapterType
                   WHEN             076 MOVE "ISDN U" TO
                                             WS-AdapterType
                   WHEN             117 MOVE "Ethernet Gigabit" TO
                                             WS-AdapterType
                   WHEN             OTHER MOVE "Check list in src" TO
                                             WS-AdapterType
           END-EVALUATE.
           INITIALIZE               WS-Title.
           MOVE    AdapterIndex     TO WS-AdapterIndex.
           EVALUATE                 TRUE
                   WHEN             (AdapterIndex < 10)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(4:1)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 100)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(3:2)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 1000)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(2:3)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             OTHER
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex
                                            DELIMITED BY SIZE INTO
                                            WS-Title
           END-EVALUATE.
           IF      DHCPEnabled      NOT = 0
                   Move             "Yes" TO WS-DHCPEnabled
           ELSE
                   Move             "No " TO WS-DHCPEnabled
                   END-IF.
           IF      HaveWins         NOT = 0
                   Move             "Yes" TO WS-HaveWins
           ELSE
                   Move             "No " TO WS-HaveWins
                   END-IF.
           PERFORM CREATE-MAC-ADDRESS.
           PERFORM GENERATE-IP-ASSOC.
           PERFORM GENERATE-GATEWAY.
           PERFORM GENERATE-DHCPServer
           DISPLAY MESSAGE          BOX
                   "Adapter name"   x"09" AdapterName x"0a"
                   "Description"    x"09" Description x"0a"
                   "AdapterAddress" x"09" WS-AdapterAddress x"0a"
                   "Adapter type"   x"09" WS-AdapterType x"0a"
                   "DHCP Enabled"   x"09" WS-DHCPEnabled x"0a"
                   "Have Wins"      x"09" WS-HaveWins x"0a" x"0a"
                   WS-IpAssocList   x"0a"
                   WS-GatewayList   x"0a"
                   WS-DHCPSrvList
                   ICON             1
                   TITLE            WS-Title.
           EXIT    PARAGRAPH.
       GENERATE-IP-ASSOC.
           INITIALIZE               WS-IpAssocList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF IpAddressList.
           MOVE    1                TO PosCounter.
           STRING  "IP Address, mask and context:" DELIMITED BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-IpAssocList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-IpAssocList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.
This link http://support.microsoft.com/kb/823256, suggests this is an issue with your OS. If it is a Win 9x machine, try update the IE on it. You really should not have to copy this file, if you do, use depends.exe to verify dependency.

[Migrated content. Thread originally posted on 31 August 2007]


       PROCEDURE DIVISION.
       MAIN-LOGIC.
    PERFORM SHOW-ADAPTERS.
           STOP    RUN.
       SHOW-ADAPTERS.
           INITIALIZE               KEY-STATUS
                                    AllocSize
                                    AllocPtr
                                    StepPtr.
           SET     IpStructSize     TO SIZE OF IP-ADAPTER-INFO.
           CALL    "IpHlpAPI.DLL@WINAPI".
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           CALL    "M$ALLOC"        USING AllocSize
                   AllocPtr.
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           MOVE    AllocPtr         TO StepPtr.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADAPTER-INFO
                                    BY VALUE StepPtr
                                    BY VALUE IpStructSize
                   PERFORM          DISPLAY-ADAPTER
                   MOVE             NextAdapterPtr to StepPtr
                   END-PERFORM.
           CALL    "M$FREE"         USING AllocPtr.
           CANCEL  "IpHlpAPI.DLL"
           EXIT    PARAGRAPH.
       DISPLAY-ADAPTER.
           EVALUATE                 AdapterType
                   WHEN             001 MOVE "Other" TO
                                             WS-AdapterType
                   WHEN             006 MOVE "Ethernet CSMACD" TO
                                             WS-AdapterType
                   WHEN             020 MOVE "Basic ISDN" TO
                                             WS-AdapterType
                   WHEN             021 MOVE "Primary ISDN" TO
                                             WS-AdapterType
                   WHEN             023 MOVE "PPP" TO
                                             WS-AdapterType
                   WHEN             026 MOVE "Ethernet 3Mb" TO
                                             WS-AdapterType
                   WHEN             048 MOVE "Modem" TO
                                             WS-AdapterType
                   WHEN             062 MOVE "Ethernet 100BaseT" TO
                                             WS-AdapterType
                   WHEN             063 MOVE "ISDN X.25" TO
                                             WS-AdapterType
                   WHEN             069 MOVE "Ethernet 100BaseFX" TO
                                             WS-AdapterType
                   WHEN             075 MOVE "ISDN S/T" TO
                                             WS-AdapterType
                   WHEN             076 MOVE "ISDN U" TO
                                             WS-AdapterType
                   WHEN             117 MOVE "Ethernet Gigabit" TO
                                             WS-AdapterType
                   WHEN             OTHER MOVE "Check list in src" TO
                                             WS-AdapterType
           END-EVALUATE.
           INITIALIZE               WS-Title.
           MOVE    AdapterIndex     TO WS-AdapterIndex.
           EVALUATE                 TRUE
                   WHEN             (AdapterIndex < 10)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(4:1)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 100)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(3:2)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 1000)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(2:3)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             OTHER
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex
                                            DELIMITED BY SIZE INTO
                                            WS-Title
           END-EVALUATE.
           IF      DHCPEnabled      NOT = 0
                   Move             "Yes" TO WS-DHCPEnabled
           ELSE
                   Move             "No " TO WS-DHCPEnabled
                   END-IF.
           IF      HaveWins         NOT = 0
                   Move             "Yes" TO WS-HaveWins
           ELSE
                   Move             "No " TO WS-HaveWins
                   END-IF.
           PERFORM CREATE-MAC-ADDRESS.
           PERFORM GENERATE-IP-ASSOC.
           PERFORM GENERATE-GATEWAY.
           PERFORM GENERATE-DHCPServer
           DISPLAY MESSAGE          BOX
                   "Adapter name"   x"09" AdapterName x"0a"
                   "Description"    x"09" Description x"0a"
                   "AdapterAddress" x"09" WS-AdapterAddress x"0a"
                   "Adapter type"   x"09" WS-AdapterType x"0a"
                   "DHCP Enabled"   x"09" WS-DHCPEnabled x"0a"
                   "Have Wins"      x"09" WS-HaveWins x"0a" x"0a"
                   WS-IpAssocList   x"0a"
                   WS-GatewayList   x"0a"
                   WS-DHCPSrvList
                   ICON             1
                   TITLE            WS-Title.
           EXIT    PARAGRAPH.
       GENERATE-IP-ASSOC.
           INITIALIZE               WS-IpAssocList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF IpAddressList.
           MOVE    1                TO PosCounter.
           STRING  "IP Address, mask and context:" DELIMITED BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-IpAssocList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-IpAssocList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.
This link http://support.microsoft.com/kb/823256, suggests this is an issue with your OS. If it is a Win 9x machine, try update the IE on it. You really should not have to copy this file, if you do, use depends.exe to verify dependency.

[Migrated content. Thread originally posted on 31 August 2007]


       PROCEDURE DIVISION.
       MAIN-LOGIC.
    PERFORM SHOW-ADAPTERS.
           STOP    RUN.
       SHOW-ADAPTERS.
           INITIALIZE               KEY-STATUS
                                    AllocSize
                                    AllocPtr
                                    StepPtr.
           SET     IpStructSize     TO SIZE OF IP-ADAPTER-INFO.
           CALL    "IpHlpAPI.DLL@WINAPI".
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           CALL    "M$ALLOC"        USING AllocSize
                   AllocPtr.
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           MOVE    AllocPtr         TO StepPtr.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADAPTER-INFO
                                    BY VALUE StepPtr
                                    BY VALUE IpStructSize
                   PERFORM          DISPLAY-ADAPTER
                   MOVE             NextAdapterPtr to StepPtr
                   END-PERFORM.
           CALL    "M$FREE"         USING AllocPtr.
           CANCEL  "IpHlpAPI.DLL"
           EXIT    PARAGRAPH.
       DISPLAY-ADAPTER.
           EVALUATE                 AdapterType
                   WHEN             001 MOVE "Other" TO
                                             WS-AdapterType
                   WHEN             006 MOVE "Ethernet CSMACD" TO
                                             WS-AdapterType
                   WHEN             020 MOVE "Basic ISDN" TO
                                             WS-AdapterType
                   WHEN             021 MOVE "Primary ISDN" TO
                                             WS-AdapterType
                   WHEN             023 MOVE "PPP" TO
                                             WS-AdapterType
                   WHEN             026 MOVE "Ethernet 3Mb" TO
                                             WS-AdapterType
                   WHEN             048 MOVE "Modem" TO
                                             WS-AdapterType
                   WHEN             062 MOVE "Ethernet 100BaseT" TO
                                             WS-AdapterType
                   WHEN             063 MOVE "ISDN X.25" TO
                                             WS-AdapterType
                   WHEN             069 MOVE "Ethernet 100BaseFX" TO
                                             WS-AdapterType
                   WHEN             075 MOVE "ISDN S/T" TO
                                             WS-AdapterType
                   WHEN             076 MOVE "ISDN U" TO
                                             WS-AdapterType
                   WHEN             117 MOVE "Ethernet Gigabit" TO
                                             WS-AdapterType
                   WHEN             OTHER MOVE "Check list in src" TO
                                             WS-AdapterType
           END-EVALUATE.
           INITIALIZE               WS-Title.
           MOVE    AdapterIndex     TO WS-AdapterIndex.
           EVALUATE                 TRUE
                   WHEN             (AdapterIndex < 10)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(4:1)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 100)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(3:2)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 1000)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(2:3)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             OTHER
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex
                                            DELIMITED BY SIZE INTO
                                            WS-Title
           END-EVALUATE.
           IF      DHCPEnabled      NOT = 0
                   Move             "Yes" TO WS-DHCPEnabled
           ELSE
                   Move             "No " TO WS-DHCPEnabled
                   END-IF.
           IF      HaveWins         NOT = 0
                   Move             "Yes" TO WS-HaveWins
           ELSE
                   Move             "No " TO WS-HaveWins
                   END-IF.
           PERFORM CREATE-MAC-ADDRESS.
           PERFORM GENERATE-IP-ASSOC.
           PERFORM GENERATE-GATEWAY.
           PERFORM GENERATE-DHCPServer
           DISPLAY MESSAGE          BOX
                   "Adapter name"   x"09" AdapterName x"0a"
                   "Description"    x"09" Description x"0a"
                   "AdapterAddress" x"09" WS-AdapterAddress x"0a"
                   "Adapter type"   x"09" WS-AdapterType x"0a"
                   "DHCP Enabled"   x"09" WS-DHCPEnabled x"0a"
                   "Have Wins"      x"09" WS-HaveWins x"0a" x"0a"
                   WS-IpAssocList   x"0a"
                   WS-GatewayList   x"0a"
                   WS-DHCPSrvList
                   ICON             1
                   TITLE            WS-Title.
           EXIT    PARAGRAPH.
       GENERATE-IP-ASSOC.
           INITIALIZE               WS-IpAssocList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF IpAddressList.
           MOVE    1                TO PosCounter.
           STRING  "IP Address, mask and context:" DELIMITED BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-IpAssocList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-IpAssocList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.
I just ran into a situation where a system has more than one IP address and when running this program example, I'm getting the wrong one. Please look at the attached image that shows output from ipconfig. The AcuGT program is returning 0.0.0.0 instead of the other one.

Anyone know how I can avoid this and get the other one that is correct? Anyone know how I can get rid of the other IP address that is obviously bogus?

Thanks,
Rob

[Migrated content. Thread originally posted on 31 August 2007]


       PROCEDURE DIVISION.
       MAIN-LOGIC.
    PERFORM SHOW-ADAPTERS.
           STOP    RUN.
       SHOW-ADAPTERS.
           INITIALIZE               KEY-STATUS
                                    AllocSize
                                    AllocPtr
                                    StepPtr.
           SET     IpStructSize     TO SIZE OF IP-ADAPTER-INFO.
           CALL    "IpHlpAPI.DLL@WINAPI".
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           CALL    "M$ALLOC"        USING AllocSize
                   AllocPtr.
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           MOVE    AllocPtr         TO StepPtr.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADAPTER-INFO
                                    BY VALUE StepPtr
                                    BY VALUE IpStructSize
                   PERFORM          DISPLAY-ADAPTER
                   MOVE             NextAdapterPtr to StepPtr
                   END-PERFORM.
           CALL    "M$FREE"         USING AllocPtr.
           CANCEL  "IpHlpAPI.DLL"
           EXIT    PARAGRAPH.
       DISPLAY-ADAPTER.
           EVALUATE                 AdapterType
                   WHEN             001 MOVE "Other" TO
                                             WS-AdapterType
                   WHEN             006 MOVE "Ethernet CSMACD" TO
                                             WS-AdapterType
                   WHEN             020 MOVE "Basic ISDN" TO
                                             WS-AdapterType
                   WHEN             021 MOVE "Primary ISDN" TO
                                             WS-AdapterType
                   WHEN             023 MOVE "PPP" TO
                                             WS-AdapterType
                   WHEN             026 MOVE "Ethernet 3Mb" TO
                                             WS-AdapterType
                   WHEN             048 MOVE "Modem" TO
                                             WS-AdapterType
                   WHEN             062 MOVE "Ethernet 100BaseT" TO
                                             WS-AdapterType
                   WHEN             063 MOVE "ISDN X.25" TO
                                             WS-AdapterType
                   WHEN             069 MOVE "Ethernet 100BaseFX" TO
                                             WS-AdapterType
                   WHEN             075 MOVE "ISDN S/T" TO
                                             WS-AdapterType
                   WHEN             076 MOVE "ISDN U" TO
                                             WS-AdapterType
                   WHEN             117 MOVE "Ethernet Gigabit" TO
                                             WS-AdapterType
                   WHEN             OTHER MOVE "Check list in src" TO
                                             WS-AdapterType
           END-EVALUATE.
           INITIALIZE               WS-Title.
           MOVE    AdapterIndex     TO WS-AdapterIndex.
           EVALUATE                 TRUE
                   WHEN             (AdapterIndex < 10)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(4:1)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 100)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(3:2)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 1000)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(2:3)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             OTHER
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex
                                            DELIMITED BY SIZE INTO
                                            WS-Title
           END-EVALUATE.
           IF      DHCPEnabled      NOT = 0
                   Move             "Yes" TO WS-DHCPEnabled
           ELSE
                   Move             "No " TO WS-DHCPEnabled
                   END-IF.
           IF      HaveWins         NOT = 0
                   Move             "Yes" TO WS-HaveWins
           ELSE
                   Move             "No " TO WS-HaveWins
                   END-IF.
           PERFORM CREATE-MAC-ADDRESS.
           PERFORM GENERATE-IP-ASSOC.
           PERFORM GENERATE-GATEWAY.
           PERFORM GENERATE-DHCPServer
           DISPLAY MESSAGE          BOX
                   "Adapter name"   x"09" AdapterName x"0a"
                   "Description"    x"09" Description x"0a"
                   "AdapterAddress" x"09" WS-AdapterAddress x"0a"
                   "Adapter type"   x"09" WS-AdapterType x"0a"
                   "DHCP Enabled"   x"09" WS-DHCPEnabled x"0a"
                   "Have Wins"      x"09" WS-HaveWins x"0a" x"0a"
                   WS-IpAssocList   x"0a"
                   WS-GatewayList   x"0a"
                   WS-DHCPSrvList
                   ICON             1
                   TITLE            WS-Title.
           EXIT    PARAGRAPH.
       GENERATE-IP-ASSOC.
           INITIALIZE               WS-IpAssocList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF IpAddressList.
           MOVE    1                TO PosCounter.
           STRING  "IP Address, mask and context:" DELIMITED BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-IpAssocList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-IpAssocList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.
I just ran into a situation where a system has more than one IP address and when running this program example, I'm getting the wrong one. Please look at the attached image that shows output from ipconfig. The AcuGT program is returning 0.0.0.0 instead of the other one.

Anyone know how I can avoid this and get the other one that is correct? Anyone know how I can get rid of the other IP address that is obviously bogus?

Thanks,
Rob

[Migrated content. Thread originally posted on 31 August 2007]


       PROCEDURE DIVISION.
       MAIN-LOGIC.
    PERFORM SHOW-ADAPTERS.
           STOP    RUN.
       SHOW-ADAPTERS.
           INITIALIZE               KEY-STATUS
                                    AllocSize
                                    AllocPtr
                                    StepPtr.
           SET     IpStructSize     TO SIZE OF IP-ADAPTER-INFO.
           CALL    "IpHlpAPI.DLL@WINAPI".
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           CALL    "M$ALLOC"        USING AllocSize
                   AllocPtr.
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           MOVE    AllocPtr         TO StepPtr.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADAPTER-INFO
                                    BY VALUE StepPtr
                                    BY VALUE IpStructSize
                   PERFORM          DISPLAY-ADAPTER
                   MOVE             NextAdapterPtr to StepPtr
                   END-PERFORM.
           CALL    "M$FREE"         USING AllocPtr.
           CANCEL  "IpHlpAPI.DLL"
           EXIT    PARAGRAPH.
       DISPLAY-ADAPTER.
           EVALUATE                 AdapterType
                   WHEN             001 MOVE "Other" TO
                                             WS-AdapterType
                   WHEN             006 MOVE "Ethernet CSMACD" TO
                                             WS-AdapterType
                   WHEN             020 MOVE "Basic ISDN" TO
                                             WS-AdapterType
                   WHEN             021 MOVE "Primary ISDN" TO
                                             WS-AdapterType
                   WHEN             023 MOVE "PPP" TO
                                             WS-AdapterType
                   WHEN             026 MOVE "Ethernet 3Mb" TO
                                             WS-AdapterType
                   WHEN             048 MOVE "Modem" TO
                                             WS-AdapterType
                   WHEN             062 MOVE "Ethernet 100BaseT" TO
                                             WS-AdapterType
                   WHEN             063 MOVE "ISDN X.25" TO
                                             WS-AdapterType
                   WHEN             069 MOVE "Ethernet 100BaseFX" TO
                                             WS-AdapterType
                   WHEN             075 MOVE "ISDN S/T" TO
                                             WS-AdapterType
                   WHEN             076 MOVE "ISDN U" TO
                                             WS-AdapterType
                   WHEN             117 MOVE "Ethernet Gigabit" TO
                                             WS-AdapterType
                   WHEN             OTHER MOVE "Check list in src" TO
                                             WS-AdapterType
           END-EVALUATE.
           INITIALIZE               WS-Title.
           MOVE    AdapterIndex     TO WS-AdapterIndex.
           EVALUATE                 TRUE
                   WHEN             (AdapterIndex < 10)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(4:1)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 100)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(3:2)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 1000)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(2:3)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             OTHER
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex
                                            DELIMITED BY SIZE INTO
                                            WS-Title
           END-EVALUATE.
           IF      DHCPEnabled      NOT = 0
                   Move             "Yes" TO WS-DHCPEnabled
           ELSE
                   Move             "No " TO WS-DHCPEnabled
                   END-IF.
           IF      HaveWins         NOT = 0
                   Move             "Yes" TO WS-HaveWins
           ELSE
                   Move             "No " TO WS-HaveWins
                   END-IF.
           PERFORM CREATE-MAC-ADDRESS.
           PERFORM GENERATE-IP-ASSOC.
           PERFORM GENERATE-GATEWAY.
           PERFORM GENERATE-DHCPServer
           DISPLAY MESSAGE          BOX
                   "Adapter name"   x"09" AdapterName x"0a"
                   "Description"    x"09" Description x"0a"
                   "AdapterAddress" x"09" WS-AdapterAddress x"0a"
                   "Adapter type"   x"09" WS-AdapterType x"0a"
                   "DHCP Enabled"   x"09" WS-DHCPEnabled x"0a"
                   "Have Wins"      x"09" WS-HaveWins x"0a" x"0a"
                   WS-IpAssocList   x"0a"
                   WS-GatewayList   x"0a"
                   WS-DHCPSrvList
                   ICON             1
                   TITLE            WS-Title.
           EXIT    PARAGRAPH.
       GENERATE-IP-ASSOC.
           INITIALIZE               WS-IpAssocList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF IpAddressList.
           MOVE    1                TO PosCounter.
           STRING  "IP Address, mask and context:" DELIMITED BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-IpAssocList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-IpAssocList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.
Are you doing this on the server or from Thin client?


"ifconfig -a | grep inet | head -1 | awk '{ x = $2 } ; END { print x }' >/u/ACF1/myIpAddress" as CMD-LINE

CALL "SYSTEM" USING CMD-LINE

[Migrated content. Thread originally posted on 31 August 2007]


       PROCEDURE DIVISION.
       MAIN-LOGIC.
    PERFORM SHOW-ADAPTERS.
           STOP    RUN.
       SHOW-ADAPTERS.
           INITIALIZE               KEY-STATUS
                                    AllocSize
                                    AllocPtr
                                    StepPtr.
           SET     IpStructSize     TO SIZE OF IP-ADAPTER-INFO.
           CALL    "IpHlpAPI.DLL@WINAPI".
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           CALL    "M$ALLOC"        USING AllocSize
                   AllocPtr.
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           MOVE    AllocPtr         TO StepPtr.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADAPTER-INFO
                                    BY VALUE StepPtr
                                    BY VALUE IpStructSize
                   PERFORM          DISPLAY-ADAPTER
                   MOVE             NextAdapterPtr to StepPtr
                   END-PERFORM.
           CALL    "M$FREE"         USING AllocPtr.
           CANCEL  "IpHlpAPI.DLL"
           EXIT    PARAGRAPH.
       DISPLAY-ADAPTER.
           EVALUATE                 AdapterType
                   WHEN             001 MOVE "Other" TO
                                             WS-AdapterType
                   WHEN             006 MOVE "Ethernet CSMACD" TO
                                             WS-AdapterType
                   WHEN             020 MOVE "Basic ISDN" TO
                                             WS-AdapterType
                   WHEN             021 MOVE "Primary ISDN" TO
                                             WS-AdapterType
                   WHEN             023 MOVE "PPP" TO
                                             WS-AdapterType
                   WHEN             026 MOVE "Ethernet 3Mb" TO
                                             WS-AdapterType
                   WHEN             048 MOVE "Modem" TO
                                             WS-AdapterType
                   WHEN             062 MOVE "Ethernet 100BaseT" TO
                                             WS-AdapterType
                   WHEN             063 MOVE "ISDN X.25" TO
                                             WS-AdapterType
                   WHEN             069 MOVE "Ethernet 100BaseFX" TO
                                             WS-AdapterType
                   WHEN             075 MOVE "ISDN S/T" TO
                                             WS-AdapterType
                   WHEN             076 MOVE "ISDN U" TO
                                             WS-AdapterType
                   WHEN             117 MOVE "Ethernet Gigabit" TO
                                             WS-AdapterType
                   WHEN             OTHER MOVE "Check list in src" TO
                                             WS-AdapterType
           END-EVALUATE.
           INITIALIZE               WS-Title.
           MOVE    AdapterIndex     TO WS-AdapterIndex.
           EVALUATE                 TRUE
                   WHEN             (AdapterIndex < 10)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(4:1)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 100)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(3:2)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 1000)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(2:3)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             OTHER
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex
                                            DELIMITED BY SIZE INTO
                                            WS-Title
           END-EVALUATE.
           IF      DHCPEnabled      NOT = 0
                   Move             "Yes" TO WS-DHCPEnabled
           ELSE
                   Move             "No " TO WS-DHCPEnabled
                   END-IF.
           IF      HaveWins         NOT = 0
                   Move             "Yes" TO WS-HaveWins
           ELSE
                   Move             "No " TO WS-HaveWins
                   END-IF.
           PERFORM CREATE-MAC-ADDRESS.
           PERFORM GENERATE-IP-ASSOC.
           PERFORM GENERATE-GATEWAY.
           PERFORM GENERATE-DHCPServer
           DISPLAY MESSAGE          BOX
                   "Adapter name"   x"09" AdapterName x"0a"
                   "Description"    x"09" Description x"0a"
                   "AdapterAddress" x"09" WS-AdapterAddress x"0a"
                   "Adapter type"   x"09" WS-AdapterType x"0a"
                   "DHCP Enabled"   x"09" WS-DHCPEnabled x"0a"
                   "Have Wins"      x"09" WS-HaveWins x"0a" x"0a"
                   WS-IpAssocList   x"0a"
                   WS-GatewayList   x"0a"
                   WS-DHCPSrvList
                   ICON             1
                   TITLE            WS-Title.
           EXIT    PARAGRAPH.
       GENERATE-IP-ASSOC.
           INITIALIZE               WS-IpAssocList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF IpAddressList.
           MOVE    1                TO PosCounter.
           STRING  "IP Address, mask and context:" DELIMITED BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-IpAssocList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-IpAssocList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.
Are you doing this on the server or from Thin client?


"ifconfig -a | grep inet | head -1 | awk '{ x = $2 } ; END { print x }' >/u/ACF1/myIpAddress" as CMD-LINE

CALL "SYSTEM" USING CMD-LINE

[Migrated content. Thread originally posted on 31 August 2007]


       PROCEDURE DIVISION.
       MAIN-LOGIC.
    PERFORM SHOW-ADAPTERS.
           STOP    RUN.
       SHOW-ADAPTERS.
           INITIALIZE               KEY-STATUS
                                    AllocSize
                                    AllocPtr
                                    StepPtr.
           SET     IpStructSize     TO SIZE OF IP-ADAPTER-INFO.
           CALL    "IpHlpAPI.DLL@WINAPI".
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           CALL    "M$ALLOC"        USING AllocSize
                   AllocPtr.
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           MOVE    AllocPtr         TO StepPtr.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADAPTER-INFO
                                    BY VALUE StepPtr
                                    BY VALUE IpStructSize
                   PERFORM          DISPLAY-ADAPTER
                   MOVE             NextAdapterPtr to StepPtr
                   END-PERFORM.
           CALL    "M$FREE"         USING AllocPtr.
           CANCEL  "IpHlpAPI.DLL"
           EXIT    PARAGRAPH.
       DISPLAY-ADAPTER.
           EVALUATE                 AdapterType
                   WHEN             001 MOVE "Other" TO
                                             WS-AdapterType
                   WHEN             006 MOVE "Ethernet CSMACD" TO
                                             WS-AdapterType
                   WHEN             020 MOVE "Basic ISDN" TO
                                             WS-AdapterType
                   WHEN             021 MOVE "Primary ISDN" TO
                                             WS-AdapterType
                   WHEN             023 MOVE "PPP" TO
                                             WS-AdapterType
                   WHEN             026 MOVE "Ethernet 3Mb" TO
                                             WS-AdapterType
                   WHEN             048 MOVE "Modem" TO
                                             WS-AdapterType
                   WHEN             062 MOVE "Ethernet 100BaseT" TO
                                             WS-AdapterType
                   WHEN             063 MOVE "ISDN X.25" TO
                                             WS-AdapterType
                   WHEN             069 MOVE "Ethernet 100BaseFX" TO
                                             WS-AdapterType
                   WHEN             075 MOVE "ISDN S/T" TO
                                             WS-AdapterType
                   WHEN             076 MOVE "ISDN U" TO
                                             WS-AdapterType
                   WHEN             117 MOVE "Ethernet Gigabit" TO
                                             WS-AdapterType
                   WHEN             OTHER MOVE "Check list in src" TO
                                             WS-AdapterType
           END-EVALUATE.
           INITIALIZE               WS-Title.
           MOVE    AdapterIndex     TO WS-AdapterIndex.
           EVALUATE                 TRUE
                   WHEN             (AdapterIndex < 10)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(4:1)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 100)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(3:2)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 1000)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(2:3)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             OTHER
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex
                                            DELIMITED BY SIZE INTO
                                            WS-Title
           END-EVALUATE.
           IF      DHCPEnabled      NOT = 0
                   Move             "Yes" TO WS-DHCPEnabled
           ELSE
                   Move             "No " TO WS-DHCPEnabled
                   END-IF.
           IF      HaveWins         NOT = 0
                   Move             "Yes" TO WS-HaveWins
           ELSE
                   Move             "No " TO WS-HaveWins
                   END-IF.
           PERFORM CREATE-MAC-ADDRESS.
           PERFORM GENERATE-IP-ASSOC.
           PERFORM GENERATE-GATEWAY.
           PERFORM GENERATE-DHCPServer
           DISPLAY MESSAGE          BOX
                   "Adapter name"   x"09" AdapterName x"0a"
                   "Description"    x"09" Description x"0a"
                   "AdapterAddress" x"09" WS-AdapterAddress x"0a"
                   "Adapter type"   x"09" WS-AdapterType x"0a"
                   "DHCP Enabled"   x"09" WS-DHCPEnabled x"0a"
                   "Have Wins"      x"09" WS-HaveWins x"0a" x"0a"
                   WS-IpAssocList   x"0a"
                   WS-GatewayList   x"0a"
                   WS-DHCPSrvList
                   ICON             1
                   TITLE            WS-Title.
           EXIT    PARAGRAPH.
       GENERATE-IP-ASSOC.
           INITIALIZE               WS-IpAssocList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF IpAddressList.
           MOVE    1                TO PosCounter.
           STRING  "IP Address, mask and context:" DELIMITED BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-IpAssocList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-IpAssocList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.
In this scenario it is a Windows server.

[Migrated content. Thread originally posted on 31 August 2007]


       PROCEDURE DIVISION.
       MAIN-LOGIC.
    PERFORM SHOW-ADAPTERS.
           STOP    RUN.
       SHOW-ADAPTERS.
           INITIALIZE               KEY-STATUS
                                    AllocSize
                                    AllocPtr
                                    StepPtr.
           SET     IpStructSize     TO SIZE OF IP-ADAPTER-INFO.
           CALL    "IpHlpAPI.DLL@WINAPI".
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           CALL    "M$ALLOC"        USING AllocSize
                   AllocPtr.
           CALL    "GetAdaptersInfo" USING
                   BY VALUE         AllocPtr
                   BY REFERENCE     AllocSize.
           MOVE    AllocPtr         TO StepPtr.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADAPTER-INFO
                                    BY VALUE StepPtr
                                    BY VALUE IpStructSize
                   PERFORM          DISPLAY-ADAPTER
                   MOVE             NextAdapterPtr to StepPtr
                   END-PERFORM.
           CALL    "M$FREE"         USING AllocPtr.
           CANCEL  "IpHlpAPI.DLL"
           EXIT    PARAGRAPH.
       DISPLAY-ADAPTER.
           EVALUATE                 AdapterType
                   WHEN             001 MOVE "Other" TO
                                             WS-AdapterType
                   WHEN             006 MOVE "Ethernet CSMACD" TO
                                             WS-AdapterType
                   WHEN             020 MOVE "Basic ISDN" TO
                                             WS-AdapterType
                   WHEN             021 MOVE "Primary ISDN" TO
                                             WS-AdapterType
                   WHEN             023 MOVE "PPP" TO
                                             WS-AdapterType
                   WHEN             026 MOVE "Ethernet 3Mb" TO
                                             WS-AdapterType
                   WHEN             048 MOVE "Modem" TO
                                             WS-AdapterType
                   WHEN             062 MOVE "Ethernet 100BaseT" TO
                                             WS-AdapterType
                   WHEN             063 MOVE "ISDN X.25" TO
                                             WS-AdapterType
                   WHEN             069 MOVE "Ethernet 100BaseFX" TO
                                             WS-AdapterType
                   WHEN             075 MOVE "ISDN S/T" TO
                                             WS-AdapterType
                   WHEN             076 MOVE "ISDN U" TO
                                             WS-AdapterType
                   WHEN             117 MOVE "Ethernet Gigabit" TO
                                             WS-AdapterType
                   WHEN             OTHER MOVE "Check list in src" TO
                                             WS-AdapterType
           END-EVALUATE.
           INITIALIZE               WS-Title.
           MOVE    AdapterIndex     TO WS-AdapterIndex.
           EVALUATE                 TRUE
                   WHEN             (AdapterIndex < 10)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(4:1)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 100)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(3:2)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             (AdapterIndex < 1000)
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex(2:3)
                                            DELIMITED BY SIZE INTO
                                            WS-Title
                   WHEN             OTHER
                                    STRING  "Network Adapter #"
                                            WS-AdapterIndex
                                            DELIMITED BY SIZE INTO
                                            WS-Title
           END-EVALUATE.
           IF      DHCPEnabled      NOT = 0
                   Move             "Yes" TO WS-DHCPEnabled
           ELSE
                   Move             "No " TO WS-DHCPEnabled
                   END-IF.
           IF      HaveWins         NOT = 0
                   Move             "Yes" TO WS-HaveWins
           ELSE
                   Move             "No " TO WS-HaveWins
                   END-IF.
           PERFORM CREATE-MAC-ADDRESS.
           PERFORM GENERATE-IP-ASSOC.
           PERFORM GENERATE-GATEWAY.
           PERFORM GENERATE-DHCPServer
           DISPLAY MESSAGE          BOX
                   "Adapter name"   x"09" AdapterName x"0a"
                   "Description"    x"09" Description x"0a"
                   "AdapterAddress" x"09" WS-AdapterAddress x"0a"
                   "Adapter type"   x"09" WS-AdapterType x"0a"
                   "DHCP Enabled"   x"09" WS-DHCPEnabled x"0a"
                   "Have Wins"      x"09" WS-HaveWins x"0a" x"0a"
                   WS-IpAssocList   x"0a"
                   WS-GatewayList   x"0a"
                   WS-DHCPSrvList
                   ICON             1
                   TITLE            WS-Title.
           EXIT    PARAGRAPH.
       GENERATE-IP-ASSOC.
           INITIALIZE               WS-IpAssocList.
           SET     OSize            TO SIZE OF IP-ADDR-STRING.
           SET     StepPtr          TO ADDRESS OF IpAddressList.
           MOVE    1                TO PosCounter.
           STRING  "IP Address, mask and context:" DELIMITED BY SIZE
                   x"0a"            DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           PERFORM UNTIL            StepPtr = 0
            CALL             "C$MEMCPY" USING
                             BY REFERENCE IP-ADDR-STRING
                                    BY VALUE StepPtr
                                    BY VALUE OSize
     IF               IpAddress = LOW-VALUES
                                    STRING x"09" DELIMITED BY SIZE
                                           "N/A" DELIMITED BY SIZE
                                           x"0a" DELIMITED BY SIZE
                                           INTO WS-IpAssocList
                                           WITH POINTER PosCounter
                                    END-STRING
                                    MOVE NextAddressPtr TO
                                         StepPtr
                      EXIT PERFORM CYCLE
                      END-IF
                   MOVE             IpContext TO WS-AdapterIndex
                   STRING           x"09" DELIMITED BY SIZE
                                    IpAddress DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" DELIMITED BY SIZE
                                    IpMask DELIMITED BY LOW-VALUE
                                    x"0a" DELIMITED BY SIZE
                                    x"09" WS-AdapterIndex DELIMITED BY
                                          SIZE
                                    x"0a" DELIMITED BY SIZE
                                    INTO WS-IpAssocList WITH POINTER
                                          PosCounter
                                    END-STRING
                   MOVE             NextAddressPtr TO StepPtr
                   END-PERFORM.
           STRING  x"0a"            DELIMITED BY SIZE
                   LOW-VALUE        DELIMITED BY SIZE
                   INTO             WS-IpAssocList
                   WITH             POINTER PosCounter.
           EXIT    PARAGRAPH.
In this scenario it is a Windows server.