--- branches/pd-extended/0.41/pd/src/s_path.c 2009/04/09 01:04:16 10990 +++ branches/pd-extended/0.41/pd/src/s_path.c 2009/04/09 01:29:24 10991 @@ -229,8 +229,29 @@ void sys_setextrapath(const char *p) { + char pathbuf[FILENAME_MAX]; namelist_free(pd_extrapath); - pd_extrapath = namelist_append(0, p, 0); + /* add standard place for users to install stuff first */ +#ifdef __gnu_linux__ + sys_expandpath("~/pd-externals", pathbuf); + pd_extrapath = namelist_append(0, pathbuf, 0); + pd_extrapath = namelist_append(pd_extrapath, "/usr/local/lib/pd-externals", 0); +#endif + +#ifdef __APPLE__ + sys_expandpath("~/Library/Pd", pathbuf); + pd_extrapath = namelist_append(0, pathbuf, 0); + pd_extrapath = namelist_append(pd_extrapath, "/Library/Pd", 0); +#endif + +#ifdef _WIN32 + sys_expandpath("%ProgramFiles%/Common Files/Pd", pathbuf); + pd_extrapath = namelist_append(0, pathbuf, 0); + sys_expandpath("%UserProfile%/Application Data/Pd", pathbuf); + pd_extrapath = namelist_append(pd_extrapath, pathbuf, 0); +#endif + /* add built-in "extra" path last so its checked last */ + pd_extrapath = namelist_append(pd_extrapath, p, 0); } #ifdef MSW @@ -357,11 +378,12 @@ dirresult, nameresult, size, bin)) >= 0) return (fd); - /* next look in "extra" */ - if (sys_usestdpath && - (fd = sys_trytoopenone(pd_extrapath->nl_string, name, ext, - dirresult, nameresult, size, bin)) >= 0) - return (fd); + /* next look in built-in paths like "extra" */ + if (sys_usestdpath) + for (nl = pd_extrapath; nl; nl = nl->nl_next) + if ((fd = sys_trytoopenone(nl->nl_string, name, ext, + dirresult, nameresult, size, bin)) >= 0) + return (fd); *dirresult = 0; *nameresult = dirresult;