186d7f5d3SJohn Marino /////////////////////////////////////////////////////////////////////////////// 286d7f5d3SJohn Marino // 386d7f5d3SJohn Marino /// \file tuklib_progname.c 486d7f5d3SJohn Marino /// \brief Program name to be displayed in messages 586d7f5d3SJohn Marino // 686d7f5d3SJohn Marino // Author: Lasse Collin 786d7f5d3SJohn Marino // 886d7f5d3SJohn Marino // This file has been put into the public domain. 986d7f5d3SJohn Marino // You can do whatever you want with this file. 1086d7f5d3SJohn Marino // 1186d7f5d3SJohn Marino /////////////////////////////////////////////////////////////////////////////// 1286d7f5d3SJohn Marino 1386d7f5d3SJohn Marino #include "tuklib_progname.h" 1486d7f5d3SJohn Marino #include <string.h> 1586d7f5d3SJohn Marino 1686d7f5d3SJohn Marino 1786d7f5d3SJohn Marino #if !HAVE_DECL_PROGRAM_INVOCATION_NAME 1886d7f5d3SJohn Marino char *progname = NULL; 1986d7f5d3SJohn Marino #endif 2086d7f5d3SJohn Marino 2186d7f5d3SJohn Marino 2286d7f5d3SJohn Marino extern void tuklib_progname_init(char ** argv)2386d7f5d3SJohn Marinotuklib_progname_init(char **argv) 2486d7f5d3SJohn Marino { 2586d7f5d3SJohn Marino #ifdef TUKLIB_DOSLIKE 2686d7f5d3SJohn Marino // On these systems, argv[0] always has the full path and .exe 2786d7f5d3SJohn Marino // suffix even if the user just types the plain program name. 2886d7f5d3SJohn Marino // We modify argv[0] to make it nicer to read. 2986d7f5d3SJohn Marino 3086d7f5d3SJohn Marino // Strip the leading path. 3186d7f5d3SJohn Marino char *p = argv[0] + strlen(argv[0]); 3286d7f5d3SJohn Marino while (argv[0] < p && p[-1] != '/' && p[-1] != '\\') 3386d7f5d3SJohn Marino --p; 3486d7f5d3SJohn Marino 3586d7f5d3SJohn Marino argv[0] = p; 3686d7f5d3SJohn Marino 3786d7f5d3SJohn Marino // Strip the .exe suffix. 3886d7f5d3SJohn Marino p = strrchr(p, '.'); 3986d7f5d3SJohn Marino if (p != NULL) 4086d7f5d3SJohn Marino *p = '\0'; 4186d7f5d3SJohn Marino 4286d7f5d3SJohn Marino // Make it lowercase. 4386d7f5d3SJohn Marino for (p = argv[0]; *p != '\0'; ++p) 4486d7f5d3SJohn Marino if (*p >= 'A' && *p <= 'Z') 4586d7f5d3SJohn Marino *p = *p - 'A' + 'a'; 4686d7f5d3SJohn Marino #endif 4786d7f5d3SJohn Marino 4886d7f5d3SJohn Marino progname = argv[0]; 4986d7f5d3SJohn Marino return; 5086d7f5d3SJohn Marino } 51