//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <tchar.h>
#include "FrmUtilMainF.h"
#include "ITSDbF.h"
//---------------------------------------------------------------------------
USEFORM("MAIN\FrmUtilMainF.cpp", FrmUtilMain);
//---------------------------------------------------------------------------
WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
    DateSeparator = '-';
    TimeSeparator = ':';
    ShortDateFormat ="yyyy-MM-dd";
    ShortTimeFormat = "hh:nn:ss";
    LongTimeFormat  = "hh:nn:ss";


    int nRes;
    String sAppDir = ExtractFilePath(Application->ExeName);
    ChDir(sAppDir);

    HANDLE hMutex;
	try
	{
        String sLockFile = ChangeFileExt(ExtractFileName(Application->ExeName), ".lock");
        String sProgMutexNm = "HANTE_" + sLockFile;
        if ((hMutex=OpenMutex(MUTEX_ALL_ACCESS, false, sProgMutexNm.c_str()))==NULL)
            hMutex = CreateMutex(NULL, true, sProgMutexNm.c_str());
        else
        {
            ShowMessage("통합운영단말 유틸리티 프로그램이 실행중입니다. \n 작업관리자의 프로세스 목록에서 \n프로그램을 종료후 실행해 주십시오");
            return 0;
        }
    }
    catch (Exception &exception)
    {
        Application->ShowException(&exception);
        return 0;
    }

    /*
    *  시스템 운영환경을 ini 파일에서 읽어 온다.
    */
    LoadDefaultConfigInfo("ITS_OP");

	if (!ITSDb_Initialize())
	{
        Application->MessageBox(L"Database 자원을 시스템으로부터 얻지 못했습니다.\r\n\r\n프로그램을 종료합니다.",
                                L"프로그램 시작 오류!!!",
                                MB_OK|MB_ICONERROR);
        return 0;
	}
    ITSDb_SetInfo(g_AppCfg.itsdb.sProvider, g_AppCfg.itsdb.sServerName, g_AppCfg.itsdb.sUserName, g_AppCfg.itsdb.sPassword);

    try
    {
         Application->Initialize();
         Application->MainFormOnTaskBar = true;
         Application->Title = "용인시 통합운영단말 유틸리티 프로그램";
         Application->CreateForm(__classid(TFrmUtilMain), &FrmUtilMain);
         Application->Run();
    }
    catch (Exception &exception)
    {
         Application->ShowException(&exception);
    }
    catch (...)
    {
         try
         {
             throw Exception("");
         }
         catch (Exception &exception)
         {
             Application->ShowException(&exception);
         }
    }

prog_exit:
    try
    {
        ITSDb_Finalize();

        ReleaseMutex(hMutex);
        CloseHandle(hMutex);
        hMutex = NULL;
        //ITSLog_Log("Program end...");
    }
    catch(...)
    {
    }
    return 0;
}
//---------------------------------------------------------------------------

