Click here to Skip to main content
15,885,084 members
Articles / Desktop Programming / MFC

A Java Language IDE

Rate me:
Please Sign up or sign in to vote.
4.33/5 (26 votes)
13 May 2004CPOL3 min read 80.4K   3.4K   41  
This is a partially implemented IDE for the Java platform.
// 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);
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Web Developer
United States United States
biography? I am not that old yet.

Comments and Discussions