diff --git a/src/help.c b/src/help.c index c94bb37a..4b758ea6 100644 --- a/src/help.c +++ b/src/help.c @@ -361,38 +361,7 @@ static void Window_help_follow_link(const char * line) buffer[i++] = *link++; buffer[i] = '\0'; GFX2_Log(GFX2_DEBUG, "WWW link found : \"%s\"\n", buffer); -#if defined(WIN32) - /*HINSTANCE hInst = */ShellExecuteA(NULL, "open", buffer, NULL, NULL, SW_SHOWNORMAL); -#elif defined(__macosx__) - { - OSStatus ret; - CFURLRef url = CFURLCreateWithBytes ( - NULL, // allocator - (UInt8*)buffer, // URLBytes - i, // length - kCFStringEncodingASCII, // encoding - NULL // baseURL - ); - ret = LSOpenCFURLRef(url,0); - if (ret != noErr) - GFX2_Log(GFX2_ERROR, "LSOpenCFURLRef() returned %d\n", ret); - CFRelease(url); - } -#elif defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) - { - int ret; - char command[80]; // use the xdg-open command to open the url in the default browser - snprintf(command, sizeof(command), "xdg-open \"%s\"", buffer); - ret = system(command); - if (ret < 0) - GFX2_Log(GFX2_ERROR, "system('%s') FAILED\n", command); - else if (ret == 127) - GFX2_Log(GFX2_ERROR, "system() FAILED to execute shell\n"); - } -#else - // TODO : HAIKU, MINT, etc. - GFX2_Log(GFX2_WARNING, "URL open not supported yet on this system.\n"); -#endif + GFX2_OpenURL(buffer, i); } /// diff --git a/src/osdep.c b/src/osdep.c index 7983caed..ca5e8109 100644 --- a/src/osdep.c +++ b/src/osdep.c @@ -49,6 +49,43 @@ dword GFX2_GetTicks(void) #endif } +void GFX2_OpenURL(const char * buffer, unsigned int len) +{ +#if defined(WIN32) + (void)len; + /*HINSTANCE hInst = */ShellExecuteA(NULL, "open", buffer, NULL, NULL, SW_SHOWNORMAL); +#elif defined(__macosx__) + OSStatus ret; + + CFURLRef url = CFURLCreateWithBytes ( + NULL, // allocator + (UInt8*)buffer, // URLBytes + len, // length + kCFStringEncodingASCII, // encoding + NULL // baseURL + ); + ret = LSOpenCFURLRef(url,0); + if (ret != noErr) + GFX2_Log(GFX2_ERROR, "LSOpenCFURLRef() returned %d\n", ret); + CFRelease(url); +#elif defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) + int ret; + char command[256]; // use the xdg-open command to open the url in the default browser + (void)len; + + snprintf(command, sizeof(command), "xdg-open \"%s\"", buffer); + ret = system(command); + if (ret < 0) + GFX2_Log(GFX2_ERROR, "system('%s') FAILED\n", command); + else if (ret == 127) + GFX2_Log(GFX2_ERROR, "system() FAILED to execute shell\n"); +#else + // TODO : HAIKU, MINT, etc. + (void)len; (void)buffer; + GFX2_Log(GFX2_WARNING, "URL open not supported yet on this system.\n"); +#endif +} + #if defined(__macosx__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__SWITCH__) #if defined(__OpenBSD__) #include diff --git a/src/osdep.h b/src/osdep.h index a7de705a..7dbda127 100644 --- a/src/osdep.h +++ b/src/osdep.h @@ -33,6 +33,13 @@ /// Return a number of milliseconds dword GFX2_GetTicks(void); +/** + * Open an URL in the system default browser + * @param url URL (ascii) + * @param len URL length in bytes + */ +void GFX2_OpenURL(const char * url, unsigned int len); + #if defined (__MINT__) void Atari_Memory_free(unsigned long *stRam, unsigned long *ttRam); #else