#include "pch.h"
#pragma hdrstop

#include "resource.h"
extern "C" 
    {
#include "ipaddr.h"
};

#include "ipctrl.h"

///////////////////////////////////////////////////////////////////////
//
// IP Address control helpers

IPControl::IPControl()
{
    m_hIPaddr = 0;
}

IPControl::~IPControl()
{
}

BOOL IPControl::Create(HWND hParent, UINT nID)
{
    ASSERT(IsWindow(hParent));

    if (hParent)    
        m_hIPaddr   = GetDlgItem(hParent, nID);

    return m_hIPaddr != NULL;   
}

LRESULT IPControl::SendMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    ASSERT(IsWindow(m_hIPaddr));

    return ::SendMessage(m_hIPaddr, uMsg, wParam, lParam);
}

BOOL IPControl::IsBlank()
{
    return SendMessage(IP_ISBLANK, 0, 0);
}

void IPControl::SetAddress(DWORD ardwAddress[4])
{
    SendMessage(IP_SETADDRESS, 0,
            MAKEIPADDRESS(ardwAddress[0], ardwAddress[1], ardwAddress[2],
            ardwAddress[3]));
}

void IPControl::SetAddress(DWORD a1, DWORD a2, DWORD a3, DWORD a4)
{
    SendMessage(IP_SETADDRESS, 0, MAKEIPADDRESS(a1,a2,a3,a4));
}

void IPControl::SetAddress(NLS_STR & nlsAddress)
{
    SendMessage(WM_SETTEXT, 0, (LPARAM)nlsAddress.QueryPch());
}

void IPControl::SetAddress(LPCTSTR lpszString)
{
    ASSERT(lpszString != NULL);
    SendMessage(WM_SETTEXT, 0, (LPARAM)lpszString);
}

void IPControl::GetAddress(DWORD *a1, DWORD *a2, DWORD *a3, DWORD *a4)
{
    DWORD dwAddress;

    ASSERT(a1 && a2 && a3 && a4);

    if (SendMessage(IP_GETADDRESS,0,(LPARAM)&dwAddress)== 0)
    {
        *a1 = 0;
        *a2 = 0;
        *a3 = 0;
        *a4 = 0;
    }
    else
    {
        *a1 = FIRST_IPADDRESS( dwAddress );
        *a2 = SECOND_IPADDRESS( dwAddress );
        *a3 = THIRD_IPADDRESS( dwAddress );
        *a4 = FOURTH_IPADDRESS( dwAddress );
    }
}

void IPControl::GetAddress(DWORD ardwAddress[4])
{
    DWORD dwAddress;

    if (SendMessage(IP_GETADDRESS, 0, (LPARAM)&dwAddress ) == 0)
    {
        ardwAddress[0] = 0;
        ardwAddress[1] = 0;
        ardwAddress[2] = 0;
        ardwAddress[3] = 0;
    }
    else
    {
        ardwAddress[0] = FIRST_IPADDRESS( dwAddress );
        ardwAddress[1] = SECOND_IPADDRESS( dwAddress );
        ardwAddress[2] = THIRD_IPADDRESS( dwAddress );
        ardwAddress[3] = FOURTH_IPADDRESS( dwAddress );
    }
}

void IPControl::GetAddress(NLS_STR *pnlsAddress)
{
    CHAR pszIPAddress[1000];

    if (SendMessage(WM_GETTEXT, 1000, (LPARAM)&pszIPAddress ) == 0)
    {
        *pnlsAddress = ZERO_ADDRESS;
    }
    else
    {
        *pnlsAddress = (TCHAR*)pszIPAddress;
    }
}

int IPControl::GetAddress(String& address)
{
    int c;

    address.ReleaseBuffer((c = SendMessage(WM_GETTEXT, 256, (LPARAM)address.GetBuffer(256))));

    return c;
}

void IPControl::SetFocusField(DWORD dwField)
{
    SendMessage(IP_SETFOCUS, dwField, 0);
}

void IPControl::ClearAddress()
{
    SendMessage(IP_CLEARADDRESS, 0, 0);
}

void IPControl::SetFieldRange(DWORD dwField, DWORD dwMin, DWORD dwMax)
{
    SendMessage(IP_SETRANGE, dwField, MAKERANGE(dwMin,dwMax));
}