// FcAlmRun.cpp : AvP[Vp̃Gg |Cg̒`
//

#include "stdafx.h"



//------------------------------------------------------------------------------
//	萔`
//------------------------------------------------------------------------------

//	\tgRAS@\A[BIT
#define	FCSRAS_ENABLE_SMART		(0x0001)
#define	FCSRAS_ENABLE_FAN		(0x0002)
#define	FCSRAS_ENABLE_TEMP		(0x0004)
#define	FCSRAS_ENABLE_VOLT		(0x0008)
#define	FCSRAS_ENABLE_POWER		(0x0010)
#define	FCSRAS_ENABLE_PCI		(0x0020)
#define FCSRAS_ENABLE_WDT		(0x0004)


#define	MAX_CHAR	_MAX_PATH						// ő啶
#define	FCSRAS_INIFILE			"FcAlmRun.INI"      // Nt@CۑINIt@C



//------------------------------------------------------------------------------
//	֐`
//------------------------------------------------------------------------------
void FCRunProcess(LPSTR pSection);

//------------------------------------------------------------------------------
//	ϐ`
//------------------------------------------------------------------------------

TCHAR szFcAlmRunIniFile[_MAX_PATH];




int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow )
{
 	// TODO: ̈ʒuɃR[hLqĂB
	INT	intAlarmBit;								// ۑpϐ
	INT	intWaringBit;								// ۑpϐ
	INT	intRasSts1Bit;								// ۑpϐ
	DWORD dwChar;
	TCHAR *pDirExe;
	TCHAR szDirExe[_MAX_PATH];	// st@C̃pX

	
	// st@C̃tpX擾B
	dwChar = GetModuleFileName( NULL, szDirExe , _MAX_PATH);	
	// st@C폜i납猟\܂Łj
	pDirExe  = &szDirExe[dwChar];			
	while (*pDirExe != '\\')
	{
		*pDirExe = NULL;
		pDirExe--;
	}
	// NvZXۑpINIt@C쐬
	sprintf(szFcAlmRunIniFile,"%s%s",szDirExe,FCSRAS_INIFILE);	
	
	
	// ̕16if[^Ƃĕϊ
	sscanf(lpCmdLine,"%x %x %x",&intAlarmBit,&intWaringBit,&intRasSts1Bit);

	// X}[gG[̃`FbN
	if(intAlarmBit & FCSRAS_ENABLE_SMART) {
		FCRunProcess("ALARM_DRIVE");			
	}

	// FANA[̃`FbN
	if(intAlarmBit & FCSRAS_ENABLE_FAN) {
		FCRunProcess("ALARM_FAN");						
	}

	// xA[̃`FbN
	if(intAlarmBit & FCSRAS_ENABLE_TEMP) {
		FCRunProcess("ALARM_TEMP");
	}

	// dA[̃`FbN
	if(intAlarmBit & FCSRAS_ENABLE_VOLT) {
		FCRunProcess("ALARM_VOLT");
	}

	// PCIpeBA[̃`FbN
	if(intAlarmBit & FCSRAS_ENABLE_PCI) {
		FCRunProcess("ALARM_PCI");			
	}

	// EHb`hbO^C}A[̃`FbN
	if(intRasSts1Bit & FCSRAS_ENABLE_WDT) {
		FCRunProcess("ALARM_WDT");									
	}


	// X}[g[jÕ`FbN
	if(intWaringBit & FCSRAS_ENABLE_SMART) {
		FCRunProcess("WARNING_SMART");			
	}

	// FAN[jÕ`FbN
	if(intWaringBit & FCSRAS_ENABLE_FAN) {
		FCRunProcess("WARNING_FAN");						
	}

	// x[jÕ`FbN
	if(intWaringBit & FCSRAS_ENABLE_TEMP) {
		FCRunProcess("WARNING_TEMP");						
	}

	// d[jÕ`FbN
	if(intWaringBit & FCSRAS_ENABLE_VOLT) {
		FCRunProcess("WARNING_VOLT");
	}

	// ʓdԃ[jÕ`FbN
	if(intWaringBit & FCSRAS_ENABLE_POWER) {
		FCRunProcess("WARNING_POWER");									
	}

	return 0;
}




void FCRunProcess
(
	LPSTR pSection
 )
{

	TCHAR szProcessName[MAX_CHAR];
	TCHAR szWorkDir[MAX_CHAR];
	TCHAR szArgs[MAX_CHAR];
	static STARTUPINFO siStartInfo ;
	static PROCESS_INFORMATION piProcInfo ;
	BOOL	bRet;

	// ݒt@Cs擾
	GetPrivateProfileString(						// w肳ꂽZNV當擾
				pSection,							// ZNV
				"PROCESS",							// L[
				NULL,								// ftHg
				szProcessName,						// XgO
				sizeof(szProcessName),				// obt@TCY
				szFcAlmRunIniFile);					// tpX 

	

	// ݒt@CƃtH_擾
	GetPrivateProfileString(						// w肳ꂽZNV當擾
				pSection,							// ZNV
				"WORKFOLDER",						// L[
				NULL,								// ftHg
				szWorkDir,							// XgO
				sizeof(szWorkDir),					// obt@TCY
				szFcAlmRunIniFile);					// tpX 

	

	// ݒt@C擾
	GetPrivateProfileString(						// w肳ꂽZNV當擾
				pSection,							// ZNV
				"ARGS",								// L[
				NULL,								// ftHg
				szArgs,								// XgO
				sizeof(szArgs),						// obt@TCY
				szFcAlmRunIniFile);					// tpX 

	strcat (szProcessName," ");
	strcat (szProcessName, szArgs);

	if (strlen(szWorkDir) == 0) {
		bRet = CreateProcess(NULL,  szProcessName, NULL, NULL, FALSE, 
			      CREATE_NEW_PROCESS_GROUP ,NULL, NULL, &siStartInfo, &piProcInfo);
	} else {
	
		bRet = CreateProcess(NULL,  szProcessName, NULL, NULL, FALSE, 
			      CREATE_NEW_PROCESS_GROUP ,NULL, szWorkDir, &siStartInfo, &piProcInfo);
	}
	// vZX̎s
	if(bRet)
	{
		// svZX̃nhԂB
		CloseHandle(piProcInfo.hThread) ;
		CloseHandle(piProcInfo.hProcess) ;
	}


}