//--------------------------------------------------------------------------- #include #pragma hdrstop #include "SplashPage.h" #include #include #include "sword.h" #include using namespace sword; USEFORM("mainfrm.cpp", Form1); USEFORM("AboutBoxfrm.cpp", AboutBox); USEFORM("bookmarkfrm.cpp", bookmarkForm); USEFORM("newbmfilefrm.cpp", NewBMfrm); USEFORM("optionfrm.cpp", Optionsfrm); USEFORM("searchfrm.cpp", searchForm); USEFORM("ModInstForm.cpp", ModInstFrm); USEFORM("vrslstfrm.cpp", VerseListForm); USEFORM("editentryfrm.cpp", EditEntryForm); USEFORM("versesel.cpp", VerseSelFrm); USEFORM("RangeMaintFrm.cpp", RangeMaintForm); USEFORM("ModVisFrm.cpp", ModVisForm); USEFORM("DevOfTheDay.cpp", DevOfTheDay2); USEFORM("SplashPage.cpp", SplashPg); USEFORM("FontSel.cpp", FontSelFrm); USEFORM("StudyProfessor.cpp", Form3); USEFORM("rtfhintfrm.cpp", RTFHintForm); USEFORM("PreviewForm.cpp", PreviewForm); USEFORM("PrintFrm.cpp", PrintForm); USEFORM("entryprvfrm.cpp", entryPreviewForm); //--------------------------------------------------------------------------- AnsiString startVerse = ""; WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { LONG result; try { HKEY hkey; HWND otherInst; ThMLPlain filter; // see if there's a previous instance running AnsiString titleString = Application->Title; Application->Title = ""; otherInst = ::FindWindow(NULL, "The SWORD Project"); Application->Title = titleString; // if so, and we have an argument, send the argument to the other instance if (*lpCmdLine) { int len = (strlen(lpCmdLine) + 1) * 5; char *buf = new char [len + 1]; strcpy(buf, lpCmdLine); // filter.ProcessText(buf, len); while (true) { char *change = strstr(buf, "%20"); if (change) { change[0] = ' '; change[1] = ' '; change[2] = ' '; } else { change = strstr(buf, "%3A"); if (change) { change[0] = ' '; change[1] = ':'; change[2] = ' '; } else break; } } if (otherInst != NULL) { result = RegCreateKeyEx(HKEY_CLASSES_ROOT, "sword\\OpenVerse", NULL, "", NULL, KEY_READ | KEY_WRITE, NULL, &hkey, NULL); result = RegSetValueEx(hkey, NULL, 0, REG_SZ, buf, strlen(buf) + 1); result = RegCloseKey(hkey); PostMessage(otherInst, WM_VERSE, NULL, NULL); delete [] buf; return 0; } startVerse = buf; // TODO 5: if we have a cmdline argument, figure we have to change directories. BAD, FIX. result = Application->ExeName.Length(); char * dir = new char[result + 1]; strcpy (dir, Application->ExeName.c_str()); for (;result > 0 && dir[result] != '\\'; result--) { dir[result] = 0; } chdir(dir); delete [] dir; delete [] buf; } // adjust the registry for our private protocol using the current path result = RegCreateKeyEx(HKEY_CLASSES_ROOT, "sword", NULL, "", NULL, KEY_READ | KEY_WRITE, NULL, &hkey, NULL); result = RegSetValueEx(hkey, NULL, 0, REG_SZ, "URL:SWORD Protocol", strlen("URL:SWORD Protocol") + 1); result = RegSetValueEx(hkey, "URL Protocol", 0, REG_SZ, "", 1); result = RegCloseKey(hkey); result = RegCreateKeyEx(HKEY_CLASSES_ROOT, "sword\\DefaultIcon", NULL, "", NULL, KEY_READ | KEY_WRITE, NULL, &hkey, NULL); result = RegSetValueEx(hkey, NULL, 0, REG_SZ, Application->ExeName.c_str(), Application->ExeName.Length() + 1); result = RegCloseKey(hkey); AnsiString opencommand = Application->ExeName + " \"%1\""; result = RegCreateKeyEx(HKEY_CLASSES_ROOT, "sword\\shell\\open\\command", NULL, "", NULL, KEY_READ | KEY_WRITE, NULL, &hkey, NULL); result = RegSetValueEx(hkey, NULL, 0, REG_SZ, opencommand.c_str(), opencommand.Length() + 1); result = RegCloseKey(hkey); /* // don't override Logos' setting if it exists result = RegOpenKeyEx(HKEY_CLASSES_ROOT, "libronixdls", 0, KEY_READ | KEY_WRITE, &hkey); if (!result) { char* libStr = new char[32]; unsigned long libSize = 32; result = RegQueryValueEx(hkey, NULL, NULL, NULL, libStr, &libSize); if (!result) { if (strstr(libStr, "SWORD")) { result = 1; } } } if (result) { result = RegCreateKeyEx(HKEY_CLASSES_ROOT, "libronixdls", NULL, "", NULL, KEY_READ | KEY_WRITE, NULL, &hkey, NULL); result = RegSetValueEx(hkey, NULL, 0, REG_SZ, "URL:SWORD Protocol", strlen("URL:SWORD Protocol") + 1); result = RegSetValueEx(hkey, "URL Protocol", 0, REG_SZ, "", 1); result = RegCloseKey(hkey); result = RegCreateKeyEx(HKEY_CLASSES_ROOT, "libronixdls\\DefaultIcon", NULL, "", NULL, KEY_READ | KEY_WRITE, NULL, &hkey, NULL); result = RegSetValueEx(hkey, NULL, 0, REG_SZ, Application->ExeName.c_str(), Application->ExeName.Length() + 1); result = RegCloseKey(hkey); AnsiString opencommand = Application->ExeName + " \"%1\""; result = RegCreateKeyEx(HKEY_CLASSES_ROOT, "libronixdls\\shell\\open\\command", NULL, "", NULL, KEY_READ | KEY_WRITE, NULL, &hkey, NULL); result = RegSetValueEx(hkey, NULL, 0, REG_SZ, opencommand.c_str(), opencommand.Length() + 1); result = RegCloseKey(hkey); } */ } catch (Exception &exception) { Application->ShowException(&exception); } try { Application->Initialize(); Application->Title = "The SWORD Project"; SplashPg = new TSplashPg(static_cast(NULL)); SplashPg->Show(); Application->ProcessMessages(); Application->CreateForm(__classid(TForm1), &Form1); Application->CreateForm(__classid(TAboutBox), &AboutBox); Application->CreateForm(__classid(TbookmarkForm), &bookmarkForm); Application->CreateForm(__classid(TNewBMfrm), &NewBMfrm); Application->CreateForm(__classid(TOptionsfrm), &Optionsfrm); Application->CreateForm(__classid(TsearchForm), &searchForm); Application->CreateForm(__classid(TModInstFrm), &ModInstFrm); Application->CreateForm(__classid(TVerseListForm), &VerseListForm); Application->CreateForm(__classid(TEditEntryForm), &EditEntryForm); Application->CreateForm(__classid(TVerseSelFrm), &VerseSelFrm); Application->CreateForm(__classid(TRangeMaintForm), &RangeMaintForm); Application->CreateForm(__classid(TModVisForm), &ModVisForm); Application->CreateForm(__classid(TDevOfTheDay2), &DevOfTheDay2); Application->CreateForm(__classid(TForm3), &Form3); Application->CreateForm(__classid(TRTFHintForm), &RTFHintForm); Application->CreateForm(__classid(TPreviewForm), &PreviewForm); Application->CreateForm(__classid(TPrintForm), &PrintForm); Application->CreateForm(__classid(TentryPreviewForm), &entryPreviewForm); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } return 0; } //---------------------------------------------------------------------------