git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_2_BRANCH@7120 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			317 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			317 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include "wx/wxprec.h"
 | |
| 
 | |
| #ifdef __BORLANDC__
 | |
| #pragma hdrstop
 | |
| #endif
 | |
| 
 | |
| #ifndef WX_PRECOMP
 | |
| #include "wx/wx.h"
 | |
| #endif
 | |
| 
 | |
| #include "wx/resource.h"
 | |
| #include "install.h"
 | |
| #include "instsup.h"
 | |
| 
 | |
| #include <ctype.h>
 | |
| 
 | |
| #if !defined(__EMX__) && !defined(__OS2__) && !defined(WIN32) && !defined(WINNT)
 | |
| #define stricmp strcasecmp
 | |
| #endif
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| extern char installdir[];
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | |
| 
 | |
| typedef struct _wxCommands {
 | |
| 	int id;
 | |
| 	char file[50];
 | |
| } wxCommands;
 | |
| 
 | |
| #define COMMANDMAX 20
 | |
| 
 | |
| wxCommands wxcommands[COMMANDMAX];
 | |
| char finishedscript[256] = "";
 | |
| char percentname[256] = "";
 | |
| 
 | |
| class MyApp: public wxApp
 | |
| {
 | |
| public:
 | |
| 	MyApp();
 | |
| 
 | |
| 	virtual bool OnInit();
 | |
| 
 | |
| 	virtual ~MyApp();
 | |
| };
 | |
| 
 | |
| class MyDialog : public wxDialog
 | |
| {
 | |
| public:
 | |
| 	void handle_button(wxCommandEvent& event);
 | |
| };
 | |
| 
 | |
| class MyThread : public wxThread
 | |
| {
 | |
| public:
 | |
| 	virtual void *Entry();
 | |
| };
 | |
| 
 | |
| void *MyThread::Entry()
 | |
| {
 | |
| 	install_thread(NULL);
 | |
| 	return NULL;
 | |
| }
 | |
| 
 | |
| MyDialog *dialog = NULL;
 | |
| 
 | |
| IMPLEMENT_APP(MyApp)
 | |
| 
 | |
| MyApp::MyApp()
 | |
| {
 | |
| }
 | |
| 
 | |
| wxCondition *InstCond = NULL;
 | |
| 
 | |
| void updatepercent(void)
 | |
| {
 | |
| 	wxGauge *tmp = (wxGauge *)wxFindWindowByName(percentname, dialog);
 | |
| 
 | |
| 	if(tmp)
 | |
| 	{
 | |
| 		unsigned long sliderpos;
 | |
| 		int pixels = 100;
 | |
| 		extern int current_file, files;
 | |
| 
 | |
| 		sliderpos = (unsigned long)(((float)(current_file)/(float)files)*pixels);
 | |
| 		tmp->SetValue(sliderpos);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| int parse_ini(char *filename)
 | |
| {
 | |
| 	FILE *f;
 | |
| 	int b;
 | |
| 
 | |
| 	for(b=0;b<COMMANDMAX;b++)
 | |
| 	{
 | |
| 		wxcommands[b].id = 0;
 | |
| 		wxcommands[b].file[0] = 0;
 | |
| 	}
 | |
| 
 | |
| 	grabfile(filename);
 | |
| 	if((f=fopen(filename, "r")) != NULL)
 | |
| 	{
 | |
| 		int bytesread = 1;
 | |
| 		char raw[256], entry[256], entrydata[256], entrydata2[256];
 | |
| 
 | |
| 		/* figure out why we are not getting an EOF on windows...
 | |
| 		 bytesread is a hack to make sure it doesn't loop forever. */
 | |
| 		while(!feof(f) && bytesread)
 | |
| 		{
 | |
| 			bytesread = getparseline(f, '#', ',', '\"', raw, entry, entrydata, entrydata2);
 | |
| 			if(stricmp(entry, "loadwxr") == 0)
 | |
| 			{
 | |
| 				grabfile(entrydata);
 | |
| 				if(!wxResourceParseFile(entrydata))
 | |
| 				{
 | |
| 					error("Error loading resources!");
 | |
| 					remove(entrydata);
 | |
| 					remove(filename);
 | |
| 					return FALSE;
 | |
| 				}
 | |
| 				remove(entrydata);
 | |
| 
 | |
| 				dialog = new MyDialog;
 | |
| 
 | |
| 				dialog->LoadFromResource(NULL, "dialog1");
 | |
| 				dialog->Show(TRUE);
 | |
| 
 | |
| 				/*MyApp::SetTopWindow(dialog);*/
 | |
| 			}
 | |
| 			else if(stricmp(entry, "closeold") == 0)
 | |
| 			{
 | |
| 				if(dialog)
 | |
| 					dialog->Destroy();
 | |
| 				dialog = NULL;
 | |
| 			}
 | |
| 			else if(stricmp(entry, "getcheck") == 0)
 | |
| 			{
 | |
| 				wxCheckBox *tmp = (wxCheckBox *)wxFindWindowByName(entrydata, dialog);
 | |
| 
 | |
| 				if(tmp)
 | |
| 				{
 | |
| 					if(!tmp->GetValue())
 | |
| 					{
 | |
| 						parse_ini(entrydata2);
 | |
| 						bytesread = 0;
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 			else if(stricmp(entry, "gettext") == 0)
 | |
| 			{
 | |
| 				wxTextCtrl *tmp = (wxTextCtrl *)wxFindWindowByName(entrydata, dialog);
 | |
|                 wxString bleah;
 | |
| 
 | |
| 				if(tmp)
 | |
| 				{
 | |
| 					if((bleah = tmp->GetValue()))
 | |
|                         strcpy(installdir, bleah);
 | |
| 				}
 | |
| 			}
 | |
| 			else if(stricmp(entry, "settext") == 0)
 | |
| 			{
 | |
| 				wxTextCtrl *tmp = (wxTextCtrl *)wxFindWindowByName(entrydata, dialog);
 | |
| 
 | |
| 				if(tmp)
 | |
| 					tmp->SetValue(installdir);
 | |
| 			}
 | |
| 			else if(stricmp(entry, "message") == 0)
 | |
| 				mesg(entrydata);
 | |
| 			else if(stricmp(entry, "disable") == 0)
 | |
| 			{
 | |
| 				wxButton *tmp = (wxButton *)wxFindWindowByName(entrydata, dialog);
 | |
| 				if(tmp)
 | |
| 					tmp->Disable();
 | |
| 			}
 | |
| 			else if(stricmp(entry, "grabfile") == 0)
 | |
| 				grabfile(entrydata);
 | |
| 			else if(stricmp(entry, "remove") == 0)
 | |
| 				remove(entrydata);
 | |
| 			else if(stricmp(entry, "system") == 0)
 | |
| 				wxExecute(entrydata);
 | |
| 			else if(stricmp(entry, "startinst") == 0)
 | |
| 			{
 | |
| 			strcpy(percentname, entrydata);
 | |
| 			strcpy(finishedscript, entrydata2);
 | |
| 
 | |
| 			/* I couldn't get it working with threads, even when
 | |
| 			 using conditions it blocked the message loop making
 | |
| 			 it unreadable, so I am going with wxYield for the
 | |
| 			 moment. */
 | |
| #if 0
 | |
| 			MyThread *thread = new MyThread();
 | |
| 
 | |
| 			if ( thread->Create() != wxTHREAD_NO_ERROR )
 | |
| 			{
 | |
| 				error("Can't create thread!");
 | |
| 			}
 | |
| 			strcpy(finishedscript, entrydata);
 | |
| 
 | |
| 			InstCond = new wxCondition();
 | |
| 
 | |
| 			thread->Run();
 | |
| 
 | |
| 			wxMutex *test = new wxMutex();
 | |
| 
 | |
| 			InstCond->Wait(*test);
 | |
| #endif
 | |
| 			install_thread(NULL);
 | |
|             create_wps_objects();
 | |
| 			parse_ini(finishedscript);
 | |
| 			}
 | |
| 			else if(stricmp(entry, "mleview") == 0)
 | |
| 			{
 | |
| 				FILE *f;
 | |
| 				unsigned long bytes;
 | |
| 				char buffer[1025];
 | |
| 				wxTextCtrl *tmp = (wxTextCtrl *)wxFindWindowByName(entrydata, dialog);
 | |
| 
 | |
| 				if(tmp)
 | |
| 				{
 | |
| 					grabfile(entrydata2);
 | |
| 
 | |
| 					if((f = fopen(entrydata2, "rb"))!= NULL)
 | |
| 					{
 | |
| 						while(!feof(f))
 | |
| 						{
 | |
| 							memset(buffer, 0, 1025);
 | |
| 							bytes = fread(buffer, 1, 1024, f);
 | |
| 							*tmp << buffer;
 | |
| 						}
 | |
| 						fclose(f);
 | |
| 					}
 | |
| 					remove(entrydata2);
 | |
|                     tmp->ShowPosition(0);
 | |
| 				}
 | |
| 
 | |
| 			}
 | |
| 			else if(stricmp(entry, "setbutton") == 0)
 | |
| 			{
 | |
| 				for(b=0;b<COMMANDMAX;b++)
 | |
| 				{
 | |
| 					if(!wxcommands[b].id)
 | |
| 					{
 | |
| 						wxcommands[b].id = atoi(entrydata);
 | |
| 						strcpy(wxcommands[b].file, entrydata2);
 | |
| 						b = COMMANDMAX;
 | |
| 					}
 | |
| 				}
 | |
| 				dialog->Connect( atol(entrydata),  -1, wxEVT_COMMAND_BUTTON_CLICKED,
 | |
| 								 (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction)
 | |
| 								 &MyDialog::handle_button);
 | |
| 
 | |
| 			}
 | |
| 		}
 | |
| 		fclose(f);
 | |
| 		remove(filename);
 | |
| 		return TRUE;
 | |
| 	}
 | |
| 	remove(filename);
 | |
| 	return FALSE;
 | |
| }
 | |
| 
 | |
| void MyDialog::handle_button(wxCommandEvent& event )
 | |
| {
 | |
| 	int b;
 | |
| 
 | |
| 	for(b=0;b<COMMANDMAX;b++)
 | |
| 	{
 | |
| 		if(wxcommands[b].id &&
 | |
| 		   wxcommands[b].id == event.GetId())
 | |
| 		{
 | |
| 			char tempbuf[50];
 | |
| 
 | |
| 			strcpy(tempbuf, wxcommands[b].file);
 | |
| 			if(stricmp(tempbuf, "exit") == 0)
 | |
| 				exit(0);
 | |
| 			grabfile(tempbuf);
 | |
| 			if(!parse_ini(tempbuf))
 | |
| 			{
 | |
| 				error("Error loading script \"%s\"", tempbuf);
 | |
| 				exit(1);
 | |
| 			}
 | |
| 			remove(tempbuf);
 | |
| 			return;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| }
 | |
| 
 | |
| bool MyApp::OnInit(void)
 | |
| {
 | |
| #if 1
 | |
| 	install_init(argv[0]);
 | |
| #else
 | |
| 	install_init("install.exe");
 | |
| #endif
 | |
| 
 | |
| 	if(!parse_ini("page1.ini"))
 | |
| 	{
 | |
| 		error("Could not load startup script!");
 | |
| 		return FALSE;
 | |
| 	}
 | |
| 
 | |
| 	return TRUE;
 | |
| }
 | |
| 
 | |
| MyApp::~MyApp()
 | |
| {
 | |
| }
 | |
| 
 | |
| 
 |