// ToolRunner.cpp: implementation of the CToolRunner class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "VisualJava.h"
#include "ToolRunner.h"
#include "process.h"
#include "WorkSpace.h"
#include <process.h>
#include "JavaLauncherThread.h"
#include "DebugMsgReceiver.h"
#include "ToolManager.h"
#include "registry.h"
static CDebugMsgReceiver m_socListen;
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
/*
typedef int (*JAVA_RUNNER)(int,char**);
static CJavaLauncherThread* m_pLauncherThread = NULL;
UINT ServerThread(LPVOID pParam);
struct argdata
{
char** m_pparg;
int m_argc;
JAVA_RUNNER m_fnPtrRunApp;
argdata(char** pparg,int argc,JAVA_RUNNER fnPtr)
{
m_pparg = pparg;
m_argc = argc;
m_fnPtrRunApp = fnPtr;
}
~argdata()
{
delete []*m_pparg;
delete []m_pparg;
}
void exec()
{
m_fnPtrRunApp(m_argc,m_pparg);
}
};
*/
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
BOOL prepareArgArray(LPCTSTR lszpArg,char** &pparg,int &argc)
{
CString strArg = lszpArg;strArg.TrimLeft();strArg.TrimRight();
CString strLongToken;
CArray<CString,CString> lstrTokens;
if(strArg.IsEmpty())
return FALSE;
int nSpace = strArg.Find(' ');
while(nSpace != -1)
{
CString strToken = strArg.Left(nSpace);strToken.TrimLeft();strToken.TrimRight();
strArg = strArg.Right(strArg.GetLength()-nSpace);
strArg.TrimLeft();strArg.TrimRight();
nSpace = strArg.Find(' ');
strLongToken += strToken+' ';
++argc;
lstrTokens.Add(strToken);
}
++argc;
strArg.TrimLeft();strArg.TrimRight();
strLongToken += strArg;
lstrTokens.Add(strArg);
int nLength = strLongToken.GetLength();
pparg = new char*[argc];
nLength = lstrTokens.GetSize();
for(int nPos = 0; nPos <nLength; nPos++)
{
CString strToken = lstrTokens[nPos];
int nstrLen = strToken.GetLength();
*(pparg+nPos) = new char[nstrLen];
LPTSTR lszpToken = strToken.GetBuffer(nstrLen+1);strToken.ReleaseBuffer();
strcpy(*(pparg+nPos),lszpToken);
}
return TRUE;
}
#include "java.h"
#include <wsipx.h>
UINT JavaLauncher(void* pdata)
{
/*
argdata* pargdata = (argdata*)pdata;
entryPt(pargdata->m_argc,pargdata->m_pparg);
delete pargdata;*/
return TRUE;
}
void AtoH(char *src, char *dest, int destlen);
unsigned char BtoH(char ch);
unsigned char BtoH(char ch);
void AtoH(char *src, char *dest, int destlen)
{
char *srcptr = src;
while(destlen--) {
*dest = BtoH(*srcptr++) << 4; // Put 1st ascii byte in upper nibble.
*dest++ += BtoH(*srcptr++); // Add 2nd ascii byte to above.
}
}
unsigned char BtoH(char ch)
{
if (ch >= '0' && ch <= '9') return (ch - '0');
if (ch >= 'A' && ch <= 'F') return (ch - 'A' + 0xA);
if (ch >= 'a' && ch <= 'f') return (ch - 'a' + 0xA);
return(255);
}
void createAddress(SOCKADDR *pAddress, LPCTSTR szNetwork, LPCTSTR szNode,
LPCTSTR szSocket)
{
SOCKADDR_IPX addr;
::ZeroMemory(&addr,sizeof(SOCKADDR_IPX));
if (szNetwork)
AtoH((char*)szNetwork, (char*)&addr.sa_netnum, 4); // Network order
if (szNode)
AtoH((char*)szNode, (char*)&addr.sa_nodenum, 6); // Network order
if (szSocket)
AtoH((char*)szSocket, (char *)&addr.sa_socket, 2); // Network order
addr.sa_family = AF_IPX; // IPX Family
CopyMemory(pAddress,&addr,sizeof(SOCKADDR_IPX));
}
CToolRunner::CToolRunner()
{
}
CToolRunner::~CToolRunner()
{
}
void CToolRunner::SetSDKDir(CString strPath)
{
m_strSdkDir = strPath;
}
void CToolRunner::LoadToolSettings()
{
CReg reg;
LPCTSTR lszpBase = REGISTRY_ROOT;
if(reg.Create(HKEY_CURRENT_USER,lszpBase,KEY_READ))
{
CReg rgSDK;
if(rgSDK.Create(reg.hKey,"JAVA_SDK",KEY_READ))
{
rgSDK.LoadString("Path",m_strSdkDir);
rgSDK.Close();
}reg.Close();
}
}
void CToolRunner::RunJavac()
{
LPSTR lszpEnv = NULL;
GetEnvironmentVariable("PATH",lszpEnv,sizeof(LPCTSTR));
CString strEnv = lszpEnv;
ASSERT(SetEnvironmentVariable("PATH",m_strSdkDir));
//acquire source file's documents and save compile
CMapStringToString lsrc;
int nConfig =0;
theApp.m_pCurWorkSpace->AcquireDataToRunJavac(&lsrc,nConfig);
for(POSITION nPos = lsrc.GetStartPosition(); nPos != NULL;)
{
CString szpFileName;
CString strArg;
lsrc.GetNextAssoc(nPos,szpFileName,strArg);
OUTPUT_BUILD("Compiling...\r\n"+szpFileName);
Process * p = new Process("javac "+strArg+" "+szpFileName,"",COutPutDlg::m_pwndBuildOutPut);
p->run();
}
SetEnvironmentVariable("PATH",lszpEnv);
}
void CToolRunner::RunJavaw()
{
LPSTR lszpEnv = NULL;
GetEnvironmentVariable("PATH",lszpEnv,sizeof(LPCTSTR));
CString strEnv = lszpEnv;
ASSERT(SetEnvironmentVariable("PATH",m_strSdkDir));
CMapStringToString lCommands ;
theApp.m_pCurWorkSpace->GetActiveProject()->GetToolMgr()->AcquireDataToRunJavaw(&lCommands);
for(POSITION nPos = lCommands.GetStartPosition(); nPos != NULL;)
{
CString strPrompt;
CString szpCommand;
lCommands.GetNextAssoc(nPos,szpCommand,strPrompt);
if(strPrompt.Compare("yes") == 0)
{
//prompt user for argument
}
//Process * p = new Process("java -Xdebug -Xnoagent -Djava.compiler=NONE \
// -Xrunjdwp:transport=dt_socket,address=20248, "+szpCommand,"",COutPutDlg::m_pwndBuildOutPut);
Process * p = new Process("java "+szpCommand,"",COutPutDlg::m_pwndBuildOutPut);
p->run();
}
SetEnvironmentVariable("PATH",lszpEnv);
}