static File programDir_mine; // set this to relocate program's data static File programDir() { ret programDir(getProgramID()); } static File programDir(S snippetID) { bool me = sameSnippetID(snippetID, programID()); if (programDir_mine != null && me) ret programDir_mine; File dir = new File(javaxDataDir(), formatSnippetIDOpt(snippetID)); if (me) { S c = caseID(); if (nempty(c)) dir = newFile(dir, c); } ret dir; } static File programDir(S snippetID, S subPath) { ret new File(programDir(snippetID), subPath); }