#include "inc.h"

VOID
HandleAddress(
    LONG    lNumArgs,
    PWCHAR  rgpwszArgs[]
    )
{
    DWORD       dwResult, i;

    PMIB_IPADDRTABLE   pTable;

    
    //
    // Get the address table
    //

    dwResult = AllocateAndGetIpAddrTableFromStack(&pTable,
                                                  TRUE,
                                                  GetProcessHeap(),
                                                  HEAP_NO_SERIALIZE);

    if(dwResult isnot NO_ERROR)
    {
        PWCHAR pwszEntry;

        pwszEntry = MakeString(STR_ADDRTABLE);

        if(pwszEntry)
        {
            DisplayMessage(EMSG_RETRIEVAL_ERROR1,
                           dwResult,
                           pwszEntry);

            FreeString(pwszEntry);
        }
        else
        {
            DisplayMessage(EMSG_RETRIEVAL_ERROR2,
                           dwResult);
        }

        return;
    }

    if(pTable->dwNumEntries is 0)
    {
        PWCHAR  pwszEntryType;

        pwszEntryType = MakeString(TOKEN_ADDRESS);

        if(pwszEntryType)
        {
            DisplayMessage(EMSG_NO_ENTRIES1,
                           pwszEntryType);

            FreeString(pwszEntryType);
        }
        else
        {
            DisplayMessage(EMSG_NO_ENTRIES2);
        }

        HeapFree(GetProcessHeap(),
                 HEAP_NO_SERIALIZE,
                 pTable);

        return;
    }

    DisplayMessage(MSG_ADDRTABLE_HDR);

    for(i = 0; i < pTable->dwNumEntries; i++)
    {
        ADDR_STRING rgwcAddr, rgwcMask;
        PWCHAR      pwszBCast;

        NetworkToUnicode(pTable->table[i].dwAddr,
                         rgwcAddr);

        NetworkToUnicode(pTable->table[i].dwMask,
                         rgwcMask);

        pwszBCast = (pTable->table[i].dwBCastAddr)?L"255.255.255.255":L"0.0.0.0";

        wprintf(L"%-15s\t%-15s\t%-15s\t\t%-4d\t%d\n",
                rgwcAddr,
                rgwcMask,
                pwszBCast,
                pTable->table[i].dwIndex,
                pTable->table[i].dwReasmSize);
    }

    HeapFree(GetProcessHeap(),
             HEAP_NO_SERIALIZE,
             pTable);
}