ID SiNewTexture(const char *filename) { struct Texture *tex = NULL; tex = ScnNewTexture(scene); if (tex == NULL) { set_errno(SI_ERR_FAILNEW); return SI_BADID; } if (TexLoadFile(tex, filename)) { set_errno(SI_ERR_FAILLOAD); return SI_FAIL; } set_errno(SI_ERR_NONE); return encode_id(Type_Texture, GET_LAST_ADDED_ID(Texture)); }
bool Go(void) { #ifndef NO_GUI ChooseInputFile(); ChooseOutputFile(); #endif if (InputFile.empty() || OutputFile.empty() || stopRunning) return false; #ifndef NO_GUI if (isInteractive) { wxChar buf[300]; wxString str = wxFileNameFromPath(InputFile); wxSnprintf(buf, sizeof(buf), _T("Tex2RTF [%s]"), (const wxChar*) str); frame->SetTitle(buf); } wxStartTimer(); #endif // Find extension-less filename wxStrcpy(FileRoot, OutputFile.c_str()); StripExtension(FileRoot); if (truncateFilenames && convertMode == TEX_HTML) { // Truncate to five characters. This ensures that // we can generate DOS filenames such as thing999. But 1000 files // may not be enough, of course... wxChar* sName = wxFileNameFromPath( FileRoot); // this Julian's method is non-destructive reference if(sName) if(wxStrlen( sName) > 5) sName[5] = '\0'; // that should do! } wxSnprintf(ContentsName, 300, _T("%s.con"), FileRoot); wxSnprintf(TmpContentsName, 300, _T("%s.cn1"), FileRoot); wxSnprintf(TmpFrameContentsName, 300, _T("%s.frc"), FileRoot); wxSnprintf(WinHelpContentsFileName, 300, _T("%s.cnt"), FileRoot); wxSnprintf(RefFileName, 300, _T("%s.ref"), FileRoot); TexPathList.EnsureFileAccessible(InputFile); if (!bulletFile) { wxString s = TexPathList.FindValidPath(_T("bullet.bmp")); if (!s.empty()) { wxString str = wxFileNameFromPath(s); bulletFile = copystring(str); } } if (wxFileExists(RefFileName)) ReadTexReferences(RefFileName); bool success = false; if (!InputFile.empty() && !OutputFile.empty()) { if (!wxFileExists(InputFile)) { OnError(_T("Cannot open input file!")); TexCleanUp(); return false; } #if !defined(NO_GUI) && wxUSE_STATUSBAR if (isInteractive) { wxString buf; buf.Printf(_T("Working, pass %d...Click CLOSE to abort"), passNumber); frame->SetStatusText((wxChar *)buf.c_str()); } #endif OkToClose = false; OnInform(_T("Reading LaTeX file...")); TexLoadFile(InputFile); if (stopRunning) { OkToClose = true; return false; } switch (convertMode) { case TEX_RTF: { success = RTFGo(); break; } case TEX_XLP: { success = XLPGo(); break; } case TEX_HTML: { success = HTMLGo(); break; } } } if (stopRunning) { OnInform(_T("*** Aborted by user.")); success = false; stopRunning = false; OkToClose = true; } if (success) { WriteTexReferences(RefFileName); TexCleanUp(); startedSections = false; wxString buf; #ifndef NO_GUI long tim = wxGetElapsedTime(); buf.Printf(_T("Finished PASS #%d in %ld seconds.\n"), passNumber, (long)(tim/1000.0)); OnInform((wxChar *)buf.c_str()); if (errorCount) { buf.Printf(_T("Errors encountered during this pass: %lu\n"), errorCount); OnInform((wxChar *)buf.c_str()); } #if wxUSE_STATUSBAR if (isInteractive) { buf.Printf(_T("Done, %d %s."), passNumber, (passNumber > 1) ? _T("passes") : _T("pass")); frame->SetStatusText((wxChar *)buf.c_str()); } #endif // wxUSE_STATUSBAR #else buf.Printf(_T("Done, %d %s."), passNumber, (passNumber > 1) ? _T("passes") : _T("pass")); OnInform((wxChar *)buf.c_str()); if (errorCount) { buf.Printf(_T("Errors encountered during this pass: %lu\n"), errorCount); OnInform((wxChar *)buf.c_str()); } #endif passNumber ++; errorCount = 0; OkToClose = true; return true; } TexCleanUp(); startedSections = false; #if !defined(NO_GUI) && wxUSE_STATUSBAR frame->SetStatusText(_T("Aborted by user.")); #endif // GUI OnInform(_T("Sorry, unsuccessful.")); OkToClose = true; return false; }