--- /dev/null
+#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()
+{
+}
+
+