- char * p = new char[MAX_LOCATION];
- char * v = new char[maxPathLen];
- byte * tokens[256];
- int c, numTokens;
- Array<String> paths { };
- p[0] = v[0] = '\0';
- strncpy(p, settingsContainer.moduleLocation, MAX_LOCATION); p[MAX_LOCATION-1] = '\0';
- paths.Add(CopyString(p));
- StripLastDirectory(p, p);
- PathCat(p, subdir);
- paths.Add(CopyString(p));
-#if defined(__WIN32__)
- GetEnvironment("ECERE_SDK_SRC", v, maxPathLen);
- if(v[0])
- {
- strncpy(p, v, MAX_LOCATION); p[MAX_LOCATION-1] = '\0';
- PathCat(p, sdkDirName); PathCat(p, subdir); paths.Add(CopyString(p));
- }
- GetEnvironment("AppData", v, maxPathLen);
- if(v[0])
- {
- strncpy(p, v, MAX_LOCATION); p[MAX_LOCATION-1] = '\0';
- PathCat(p, sdkDirName); PathCat(p, subdir); paths.Add(CopyString(p));
- }
- GetEnvironment("ProgramFiles", v, maxPathLen);
- if(v[0])
- {
- strncpy(p, v, MAX_LOCATION); p[MAX_LOCATION-1] = '\0';
- PathCat(p, sdkDirName); PathCat(p, subdir); paths.Add(CopyString(p));
- }
- GetEnvironment("ProgramFiles(x86)", v, maxPathLen);
- if(v[0])
- {
- strncpy(p, v, MAX_LOCATION); p[MAX_LOCATION-1] = '\0';
- PathCat(p, sdkDirName); PathCat(p, subdir); paths.Add(CopyString(p));
- }
- GetEnvironment("SystemDrive", v, maxPathLen);
- if(v[0])
- {
- strncpy(p, v, MAX_LOCATION); p[MAX_LOCATION-1] = '\0';
- PathCat(p, "Program Files"); PathCat(p, sdkDirName); PathCat(p, subdir); paths.Add(CopyString(p));
- }
-#else
- GetEnvironment("XDG_DATA_DIRS", v, maxPathLen);
- numTokens = TokenizeWith(v, sizeof(tokens) / sizeof(byte *), tokens, ":", false);
- for(c=0; c<numTokens; c++)
- {
- strncpy(p, tokens[c], MAX_LOCATION); p[MAX_LOCATION-1] = '\0';
- PathCat(p, sdkDirName); PathCat(p, subdir); paths.Add(CopyString(p));
- }
-#endif
- for(path : paths)
- {
- strncpy(p, path, MAX_LOCATION); p[MAX_LOCATION-1] = '\0';
- PathCat(p, name);
- if(FileExists(p).isFile)
- {
- ShellOpen(p);
- break;
- }
- }
- delete p;
- delete v;
- paths.Free();
- delete paths;