⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 toolrunner.cpp

📁 用bcg库编写的java IDE 源码
💻 CPP
字号:
// 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);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -