|
22 | 22 | #include "ui/utils.h"
|
23 | 23 |
|
24 | 24 | #define RX_BUFFER_SIZE 1024
|
| 25 | +#if defined(_Win32) |
| 26 | +static char appName[OS_PATHNAME_SIZE + 1]; |
| 27 | +#endif |
25 | 28 |
|
26 | 29 | Fl_Color get_color(int argb) {
|
27 | 30 | // Fl_Color => 0xrrggbbii
|
@@ -240,16 +243,38 @@ void vsncat(char *buffer, size_t size, ...) {
|
240 | 243 | va_end(args);
|
241 | 244 | }
|
242 | 245 |
|
| 246 | +void setAppName(const char *path) { |
| 247 | +#if defined(_Win32) |
| 248 | + appName[0] = '\0'; |
| 249 | + if (path[0] == '/' || |
| 250 | + (path[1] == ':' && ((path[2] == '\\') || path[2] == '/'))) { |
| 251 | + // full path or C:/ |
| 252 | + strlcpy(appName, path, sizeof(appName)); |
| 253 | + } else { |
| 254 | + // relative path |
| 255 | + char cwd[OS_PATHNAME_SIZE + 1]; |
| 256 | + cwd[0] = '\0'; |
| 257 | + getcwd(cwd, sizeof(cwd) - 1); |
| 258 | + strlcpy(appName, cwd, sizeof(appName)); |
| 259 | + strlcat(appName, "/", sizeof(appName)); |
| 260 | + strlcat(appName, path, sizeof(appName)); |
| 261 | + } |
| 262 | + const auto file = "sbasici.exe"; |
| 263 | + char *exe = strstr(appName, file); |
| 264 | + if (exe) { |
| 265 | + strcpy(exe, "sbasicg.exe"); |
| 266 | + } |
| 267 | +#endif |
| 268 | +} |
243 | 269 |
|
244 | 270 | #if defined(_Win32)
|
245 | 271 | void launchExec(const char *file) {
|
246 | 272 | STARTUPINFO info = {sizeof(info)};
|
247 | 273 | PROCESS_INFORMATION processInfo;
|
248 | 274 | char cmd[1024];
|
249 |
| - auto app = "./sbasicg.exe"; |
250 |
| - sprintf(cmd, "%s -x %s", app, file); |
251 |
| - if (!CreateProcess(app, cmd, NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo)) { |
252 |
| - appLog("failed to start %d %s %s\n", GetLastError(), app, cmd); |
| 275 | + sprintf(cmd, " -x %s", file); |
| 276 | + if (!CreateProcess(appName, cmd, NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo)) { |
| 277 | + appLog("failed to start %d %s %s\n", GetLastError(), appName, cmd); |
253 | 278 | }
|
254 | 279 | }
|
255 | 280 | #else
|
|
0 commit comments