#include <windows.h>
#include <commdlg.h>
#include "dialogs.h"
#include "resource.h"
#include "fromce.h"

//#include "Tlhelp32.h"
extern BOOL CALLBACK RotateDlgProc(	HWND hwndDlg,
									UINT message,
									WPARAM wParam,
									LPARAM lParam);

extern BOOL CALLBACK RestartDlgProc(HWND hwndDlg,
									UINT message,
									WPARAM wParam,
									LPARAM lParam);

extern BOOL CALLBACK SpeakerDlgProc(HWND hwndDlg,
       			                    UINT message,
                			        WPARAM wParam,
                           			LPARAM lParam);

extern BOOL CALLBACK EraseFXDiskDlgProc(HWND hwndDlg,
       			                    UINT message,
                			        WPARAM wParam,
                           			LPARAM lParam);



int WINAPI WinMain(HINSTANCE hInstance, 
				   HINSTANCE hPrevInstance, 
				   LPTSTR lpCmdLine,
				   int nCmdShow)
{
	MSG msg;
	WNDCLASS wndClass;

	HWND hThisWnd = NULL;
	//Check to see if app is running then pop to foreground
	hThisWnd = FindWindow(pszAppName, pszTitle);	

	if (hThisWnd) 
	{
		SetForegroundWindow (hThisWnd);    
		return 0;
	}

	/* Save application instance in ghInst for
	   possible use by other functions, such as
	   the main windows's window procedure.
	 */
	ghInst = hInstance;
    hwndModeless = NULL;

	/* Register the main window class */
	wndClass.style         = 0;
	wndClass.lpfnWndProc   = WndProc;
	wndClass.cbClsExtra    = 0;
	wndClass.cbWndExtra    = 0;
	wndClass.hInstance     = hInstance;
	wndClass.hIcon         = NULL;
	wndClass.hCursor       = NULL;
	wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
	//wndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
	wndClass.lpszMenuName  = NULL;
	wndClass.lpszClassName = pszAppName;

	RegisterClass(&wndClass);

#if _WIN32_WCE < 300

	HICON hIcon = LoadImage(hInstance,
							MAKEINTRESOURCE(IDI_ICON1),
							IMAGE_ICON, 32, 32, LR_DEFAULTCOLOR);
#else
	HANDLE hIcon = LoadImage(hInstance,
							MAKEINTRESOURCE(IDI_ICON1),
							IMAGE_ICON, 32, 32, LR_DEFAULTCOLOR);
#endif



	/* Create the application's main window */

	hwndMain = CreateWindow(pszAppName,
                            pszTitle,
                            WS_VISIBLE|WS_OVERLAPPED,
                            CW_USEDEFAULT,
							CW_USEDEFAULT,
                            CW_USEDEFAULT,
                            CW_USEDEFAULT,
							NULL,
							NULL,
							hInstance,
							NULL);

	hwndExit = CreateWindow(TEXT("BUTTON"),
							TEXT("Exit"),
							WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
							10,10,60,40,
							hwndMain,
							(HMENU)IDC_EXIT,
							hInstance,
							NULL
							);

	hwndColor = CreateWindow(TEXT("BUTTON"),
							TEXT("Color"),
							WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
							10,60,60,40,
							hwndMain,
							(HMENU)IDC_COLOR,
							hInstance,
							NULL);


	hwndModalButton = CreateWindow(	TEXT("BUTTON"),
									TEXT("Ethernet Configuration"),
									WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
									80,10,200,40,
									hwndMain,
									(HMENU)IDC_SMC96,
									hInstance,
									NULL);

    hwndRotate = CreateWindow(  TEXT("BUTTON"),
								TEXT("Rotate Screen"),
								WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
								80,60,200,40,
								hwndMain,
								(HMENU)IDC_ROTATE_BUTTON,
								hInstance,
								NULL );

	hEraseFxDisk = CreateWindow(TEXT("BUTTON"),
							TEXT("Erase FlashFX Disk"),
							WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
							80,110,200,40,
							hwndMain,
							(HMENU)IDC_ERASE_FXDISK,
							hInstance,
							NULL);

	hwndModelessButton = CreateWindow(TEXT("BUTTON"),
									TEXT("Process Viewer"),
									WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
									290,10,110,40,
									hwndMain,
									(HMENU)IDC_MODELESS_BUTTON,
									hInstance,
									NULL );

	hwndRestartButton = CreateWindow(TEXT("BUTTON"),
									TEXT("Restart System"),
									WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
									290,60,110,40,
									hwndMain,
									(HMENU)IDC_RESTART_BUTTON,
									hInstance,
									NULL );

	hwndOpen = CreateWindow(TEXT("BUTTON"),
							TEXT("Open"),
							WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
							410,10,80,40,
							hwndMain,
							(HMENU)IDC_OPEN,
							hInstance,
							NULL);

	hwndSpeaker = CreateWindow(TEXT("BUTTON"),
							TEXT("Speaker"),
							WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
							410,60,80,40,
							hwndMain,
							(HMENU)IDC_SPEAKER,
							hInstance,
							NULL);

	ShowWindow(hwndMain, nCmdShow );
	UpdateWindow(hwndMain);

    while (GetMessage(&msg, NULL, 0, 0) == TRUE)
    {
        if (!hwndModeless || !IsDialogMessage(hwndModeless, &msg))
        {
		  TranslateMessage(&msg);
		  DispatchMessage(&msg); 
        }
    }
	return (msg.wParam);
}

void OnFileOpen(HWND hwnd)
{
    OPENFILENAME ofn;
    DWORD dwSize;
    TCHAR pszName[256];
    dwSize = sizeof(ofn);

    lstrcpy(pszName, TEXT("sample.txt"));
    memset(&ofn, 0, dwSize);
    ofn.hwndOwner = hwnd;
    ofn.lStructSize = dwSize;
    ofn.lpstrFilter = TEXT("Text Files (*.txt)\0*.txt\0");
    ofn.nFilterIndex = 1;
    ofn.lpstrFile = pszName;
    ofn.nMaxFile = 256;
    ofn.lpstrTitle = TEXT("Open a Text File");
    ofn.lpstrInitialDir = TEXT("\\Windows");
    ofn.lpstrDefExt = TEXT("txt");

    GetOpenFileName(&ofn);
}

CHOOSECOLOR cc;
COLORREF cr[16];

void OnColor()
{
//	CHOOSECOLOR cc;
//	COLORREF cr[16];
//	memset(&cc, 0, sizeof(cc));
//	cc.lStructSize = sizeof(cc);

	memset(&cc, 0, sizeof(CHOOSECOLOR));
    cc.lStructSize = sizeof(CHOOSECOLOR);
    cc.lpCustColors = cr;

    ChooseColor(&cc);

}

LRESULT CALLBACK WndProc(HWND hwnd,
						 UINT message,
						 WPARAM wParam,
						 LPARAM lParam)
{
    UINT nID;
	BOOL bRet=FALSE;
	switch(message)
	{
    case WM_COMMAND:
        nID = LOWORD(wParam);
        switch(nID)
        {
        case IDC_SMC96:
			
			bRet = ReadAdsLoadRegistry1();

			if(!bRet)
			{
            	MessageBox(NULL,TEXT("I can't copy adsload.reg from Flash")
								,TEXT("File Read Error"), MB_OK);			
				break;
			}
		
            if (IDOK==DialogBox(ghInst, 
								MAKEINTRESOURCE(IDD_MODAL_SMC),
                				hwnd, (DLGPROC)ModalDlgProc))
            {
				// Change Wide string to string
				WideToCharRegistry();	
				
				// Update temperary File
				bRet = UpdateSmscRegistry();

				// Write back to Flash
				if(bRet)
					bRet = WriteADSLOADRegistry();

				// Delete Temp Files
				DeleteTempRegistryFile();

				if(bRet)
					MessageBox(NULL,TEXT("Successfully Update Adsload.reg file !!!") ,TEXT("SMSC91c9x Configuration"), MB_OK);
            }


            break;
		case IDC_ROTATE_BUTTON:

			bRet = ReadAdsLoadRegistry1();

			if(!bRet)
			{
            	MessageBox(NULL,TEXT("I can't copy adsload.reg from Flash")
								,TEXT("File Read Error"), MB_OK);			
				break;
			}

            bRet = DialogBox(	ghInst, MAKEINTRESOURCE(IDD_MODAL_RATATE),
						hwnd, (DLGPROC)RotateDlgProc);
			if(bRet)
			{
				DialogBox(	ghInst, MAKEINTRESOURCE(IDD_MODAL_RESTART),
						hwnd, (DLGPROC)RestartDlgProc);

			}
			
			break;

		case IDC_ERASE_FXDISK:

            bRet = DialogBox(	ghInst, MAKEINTRESOURCE(IDD_MODAL_ERASE_FXDISK),
						hwnd, (DLGPROC)EraseFXDiskDlgProc);

			if(bRet == IDOK)
			{
				DialogBox(	ghInst, MAKEINTRESOURCE(IDD_MODAL_RESTART),
						hwnd, (DLGPROC)RestartDlgProc);

			}

			break;
	
		case IDC_RESTART_BUTTON:
				DialogBox(	ghInst, 
							MAKEINTRESOURCE(IDD_MODAL_RESTART),
							hwnd, 
							(DLGPROC)RestartDlgProc);
			
			break;

        case IDC_MODELESS_BUTTON:
            hwndModeless = CreateDialog(ghInst,MAKEINTRESOURCE(IDD_MODELESS),
                						hwnd,(DLGPROC)TaskManagerDlgProc);
            /* Call SetWindowPos to make the modeless
               dialog the topmost window.  Include the
               SWP_SHOWWINDOW flag since the default
               dialog box styles do not include
               WS_VISIBLE.  You could remove this
               flag if you add the WS_VISIBLE style
               in the IDD_MODELESS dialog resource.
             */
            SetWindowPos(	hwndModeless,
                			HWND_TOPMOST,
                			0,0,0,0,
                			SWP_SHOWWINDOW|SWP_NOMOVE|SWP_NOSIZE);
            break;
        case IDC_OPEN:
            OnFileOpen(hwnd);
            break;
        case IDC_COLOR:
            OnColor();
            break;
        case IDC_EXIT:
            DestroyWindow(hwnd);
            PostQuitMessage(0);
            break;
		case IDC_SPEAKER:
			DialogBox(	ghInst, 
						MAKEINTRESOURCE(IDD_MODAL_SPEAKER),
						hwnd, 
						(DLGPROC)SpeakerDlgProc);
		
			break;

        default:
            break;
        }      //End of switch(nID) block
        return (0);
	default:
     	return (DefWindowProc(hwnd, message, wParam, lParam));
	}
}

typedef struct _smsc9xconfigW
{
	TCHAR Dhcp[10];
	TCHAR Ip[40];
	TCHAR Gw[40];
	TCHAR Sm[40];
	TCHAR Dns[40];
	TCHAR Wins[40];
}SMSC9XCONFIGW;

SMSC9XCONFIGW Smsc9xW={NULL};

typedef struct _smsc9xconfig
{
	char Dhcp[10];
	char Ip[40];
	char Gw[40];
	char Sm[40];
	char Dns[40];
	char Wins[40];
}SMSC9XCONFIG;

SMSC9XCONFIG Smsc9x={NULL};

BOOL CALLBACK ModalDlgProc(HWND hwndDlg,
                           UINT message,
                           WPARAM wParam,
                           LPARAM lParam)
{
    UINT nID;
    HWND hwndEdit;
	BOOL bRet;

    switch(message)
    {
    case WM_INITDIALOG:

		bRet = ReadSmscRegistry();

        hwndEdit = GetDlgItem(hwndDlg, IDC_NAME_DHCP);
        SetWindowText(hwndEdit, Smsc9xW.Dhcp);

		hwndEdit = GetDlgItem(hwndDlg, IDC_NAME_IP);
        SetWindowText(hwndEdit, Smsc9xW.Ip);

        hwndEdit = GetDlgItem(hwndDlg, IDC_NAME_GW);
        SetWindowText(hwndEdit, Smsc9xW.Gw);

        hwndEdit = GetDlgItem(hwndDlg, IDC_NAME_SM);
        SetWindowText(hwndEdit, Smsc9xW.Sm);

        hwndEdit = GetDlgItem(hwndDlg, IDC_NAME_DNS);
        SetWindowText(hwndEdit, Smsc9xW.Dns);

        hwndEdit = GetDlgItem(hwndDlg, IDC_NAME_WINS);
        SetWindowText(hwndEdit, Smsc9xW.Wins);

        return (FALSE);

    case WM_COMMAND:
        nID = LOWORD(wParam);
        switch(nID)
        {

        case IDOK:

			hwndEdit = GetDlgItem(hwndDlg, IDC_NAME_DHCP);
			GetWindowText(hwndEdit, Smsc9xW.Dhcp,sizeof(Smsc9xW.Dhcp));

			hwndEdit = GetDlgItem(hwndDlg, IDC_NAME_IP);
			GetWindowText(hwndEdit, Smsc9xW.Ip,sizeof(Smsc9xW.Ip));

			hwndEdit = GetDlgItem(hwndDlg, IDC_NAME_GW);
			GetWindowText(hwndEdit, Smsc9xW.Gw,sizeof(Smsc9xW.Gw));

			hwndEdit = GetDlgItem(hwndDlg, IDC_NAME_SM);
			GetWindowText(hwndEdit, Smsc9xW.Sm,sizeof(Smsc9xW.Sm));

			hwndEdit = GetDlgItem(hwndDlg, IDC_NAME_DNS);
			GetWindowText(hwndEdit, Smsc9xW.Dns,sizeof(Smsc9xW.Dns));

			hwndEdit = GetDlgItem(hwndDlg, IDC_NAME_WINS);
			GetWindowText(hwndEdit, Smsc9xW.Wins,sizeof(Smsc9xW.Wins));

        case IDCANCEL:
            EndDialog(hwndDlg, nID);
            break;
        default:
            break;
        }   //End of switch(nID) block
        return (TRUE);
    default:
        return (FALSE);
    }       //End of switch(message) block
}



