int WDL_CursesEditor::init(const char *fn, const char *init_if_empty) { m_filename.Set(fn); FILE *fh=fopenUTF8(fn,"rt"); if (!fh) { if (init_if_empty) { fh=fopenUTF8(fn,"w+t"); if (fh) { fwrite(init_if_empty,1,strlen(init_if_empty),fh); fseek(fh,0,SEEK_SET); } } if (!fh) { saveUndoState(); m_clean_undopos=m_undoStack_pos; return 1; } } while(!feof(fh)) { char line[4096]; line[0]=0; fgets(line,sizeof(line),fh); if (!line[0]) break; int l=strlen(line); while(l>0 && (line[l-1]=='\r' || line[l-1]=='\n')) { line[l-1]=0; l--; } WDL_FastString *str=new WDL_FastString; char *p=line,*np; while ((np=strstr(p,"\t"))) // this should be optional, perhaps { *np=0; str->Append(p); { int x; for(x=0;x<m_indent_size;x++) str->Append(" "); } p=np+1; } if (p) str->Append(p); m_text.Add(str); } fclose(fh); saveUndoState(); m_clean_undopos=m_undoStack_pos; return 0; }
void ActionsList(COMMAND_T*) { // Output sws_actions.csv char cBuf[512]; strncpy(cBuf, get_ini_file(), 256); char* pC = strrchr(cBuf, PATH_SLASH_CHAR); if (pC) { strcpy(pC+1, "sws_actions.csv"); FILE* f = fopenUTF8(cBuf, "w"); fputs("Action,File,CmdID,CmdStr\n", f); if (f) { for (int i = 0; i < g_commands.GetSize(); i++) { if (COMMAND_T* cmd = g_commands.Enumerate(i, NULL, NULL)) { WDL_String* pFn = g_cmdFiles.Get(cmd->accel.accel.cmd, NULL); sprintf(cBuf, "\"%s\",%s,%d,_%s\n", cmd->accel.desc, pFn ? pFn->Get() : "", cmd->accel.accel.cmd, cmd->id); fputs(cBuf, f); } } fclose(f); } } }
void OpenProjectsFromList(COMMAND_T*) { char cPath[256]; GetProjectPath(cPath, 256); char* filename = BrowseForFiles(__LOCALIZE("Select project list","sws_mbox"), cPath, NULL, false, "Reaper Project List (*.RPL)\0*.RPL\0All Files\0*.*\0"); if (filename) { FILE* f = fopenUTF8(filename, "r"); if (f) { // Save "prompt on new project" variable int iNewProjOpts; int sztmp; int* pNewProjOpts = (int*)get_config_var("newprojdo", &sztmp); iNewProjOpts = *pNewProjOpts; *pNewProjOpts = 0; int i = 0; int iProjects = -1; while (EnumProjects(++iProjects, NULL, 0)); // Count projects char cName[10]; EnumProjects(-1, cName, 10); if (iProjects != 1 || cName[0] != 0 || GetNumTracks() != 0) { if (MessageBox(g_hwndParent, __LOCALIZE("Close active tabs first?","sws_mbox"), __LOCALIZE("SWS Project List Open","sws_mbox"), MB_YESNO) == IDYES) Main_OnCommand(40886, 0); else i = 1; } while(fgets(cPath, 256, f)) { char* pC; while((pC = strchr(cPath, '\r'))) *pC = 0; // Strip newlines no matter the format while((pC = strchr(cPath, '\n'))) *pC = 0; if (cPath[0]) { if (i++) Main_OnCommand(41929, 0); // New project tab (ignore default template) Main_openProject(cPath); } } fclose(f); *pNewProjOpts = iNewProjOpts; } else MessageBox(g_hwndParent, __LOCALIZE("Unable to open file.","sws_mbox"), __LOCALIZE("SWS Project List Open","sws_mbox"), MB_OK); free(filename); } }
int WDL_CursesEditor::updateFile() { FILE *fp=fopenUTF8(m_filename.Get(),"wt"); if (!fp) return 1; int x; for (x = 0; x < m_text.GetSize(); x ++) { if (m_text.Get(x)) fprintf(fp,"%s\n",m_text.Get(x)->Get()); } fclose(fp); sync(); m_clean_undopos = m_undoStack_pos; return 0; }
// **************************************************************************** // **** Project list ********************************************************* // **************************************************************************** void SaveProjectList(COMMAND_T*) { int i = 0; bool bValid = false; char filename[256] = { 0, }; while (EnumProjects(i++, filename, 256)) if (filename[0]) bValid = true; if (!bValid) { MessageBox(g_hwndParent, __LOCALIZE("No saved projects are open. Please save your projects first.","sws_mbox"), __LOCALIZE("SWS Project List Save","sws_mbox"), MB_OK); return; } char cPath[256]; GetProjectPath(cPath, 256); if (BrowseForSaveFile(__LOCALIZE("Select project list","sws_mbox"), cPath, NULL, "Reaper Project List (*.RPL)\0*.RPL\0All Files\0*.*\0", filename, 256)) { FILE* f = fopenUTF8(filename, "w"); if (f) { i = 0; while (EnumProjects(i++, filename, 256)) { if (filename[0]) { strncat(filename, "\r\n", 256); fwrite(filename, strlen(filename), 1, f); } } fclose(f); } else MessageBox(g_hwndParent, __LOCALIZE("Unable to write to file.","sws_mbox"), __LOCALIZE("SWS Project List Save","sws_mbox"), MB_OK); } }
void MultiTab_Editor::OpenFileInTab(const char *fnp) { // try to find file to open WDL_FastString s; FILE *fp=NULL; { const char *ptr = fnp; while (!fp && *ptr) { // first try same path as loading effect if (m_filename.Get()[0]) { s.Set(m_filename.Get()); const char *sp=s.Get()+s.GetLength(); while (sp>=s.Get() && *sp != '\\' && *sp != '/') sp--; s.SetLen(sp + 1 - s.Get()); if (s.GetLength()) { s.Append(ptr); fp=fopenUTF8(s.Get(),"rb"); } } // scan past any / or \\, and try again if (!fp) { while (*ptr && *ptr != '\\' && *ptr != '/') ptr++; if (*ptr) ptr++; } } } if (!fp) { s.Set(""); fp = tryToFindOrCreateFile(fnp,&s); } if (!fp && s.Get()[0]) { m_newfn.Set(s.Get()); if (COLS > 25) { int allowed = COLS-25; if (s.GetLength()>allowed) { s.DeleteSub(0,s.GetLength() - allowed + 3); s.Insert("...",0); } s.Insert("Create new file '",0); s.Append("' (Y/n)? "); } else s.Set("Create new file (Y/n)? "); m_state=UI_STATE_SAVE_AS_NEW; attrset(m_color_message); bkgdset(m_color_message); mvaddstr(LINES-1,0,s.Get()); clrtoeol(); attrset(0); bkgdset(0); } else if (fp) { fclose(fp); int x; for (x=0;x<GetTabCount();x++) { MultiTab_Editor *e = GetTab(x); if (e && !stricmp(e->GetFileName(),s.Get())) { SwitchTab(x,false); return; } } AddTab(s.Get()); } }