mirror of
https://github.com/bsnes-emu/bsnes.git
synced 2025-04-02 10:42:14 -04:00
byuu says: Basically just a project rename, with s/bsnes/higan and the new icon from lowkee added in. It won't compile on Windows because I forgot to update the resource.rc file, and a path transform command isn't working on Windows. It was really just meant as a starting point, so that v091 WIPs can flow starting from .00 with the new name (it overshadows bsnes v091, so publicly speaking this "shouldn't exist" and will probably be deleted from Google Code when v092 is ready.)
52 lines
1.5 KiB
C++
Executable file
52 lines
1.5 KiB
C++
Executable file
#ifndef NALL_INVOKE_HPP
|
|
#define NALL_INVOKE_HPP
|
|
|
|
//void invoke(const string &name, const string& args...);
|
|
//if a program is specified, it is executed with the arguments provided
|
|
//if a file is specified, the file is opened using the program associated with said file type
|
|
//if a folder is specified, the folder is opened using the associated file explorer
|
|
//if a URL is specified, the default web browser is opened and pointed at the URL requested
|
|
//path environment variable is always consulted
|
|
//execution is asynchronous (non-blocking); use system() for synchronous execution
|
|
|
|
#include <nall/string.hpp>
|
|
#ifdef _WIN32
|
|
#include <nall/windows/utf8.hpp>
|
|
#endif
|
|
|
|
namespace nall {
|
|
|
|
#ifdef _WIN32
|
|
|
|
template<typename... Args>
|
|
inline void invoke(const string &name, Args&&... args) {
|
|
lstring argl(std::forward<Args>(args)...);
|
|
for(auto &arg : argl) if(arg.position(" ")) arg = {"\"", arg, "\""};
|
|
string arguments = argl.concatenate(" ");
|
|
ShellExecuteW(NULL, NULL, utf16_t(name), utf16_t(arguments), NULL, SW_SHOWNORMAL);
|
|
}
|
|
|
|
#else
|
|
|
|
template<typename... Args>
|
|
inline void invoke(const string &name, Args&&... args) {
|
|
pid_t pid = fork();
|
|
if(pid == 0) {
|
|
const char *argv[1 + sizeof...(args) + 1], **argp = argv;
|
|
lstring argl(std::forward<Args>(args)...);
|
|
*argp++ = (const char*)name;
|
|
for(auto &arg : argl) *argp++ = (const char*)arg;
|
|
*argp++ = nullptr;
|
|
|
|
if(execvp(name, (char* const*)argv) < 0) {
|
|
execlp("xdg-open", "xdg-open", (const char*)name, nullptr);
|
|
}
|
|
exit(0);
|
|
}
|
|
}
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
#endif
|