1*86d7f5d3SJohn Marino /////////////////////////////////////////////////////////////////////////////// 2*86d7f5d3SJohn Marino // 3*86d7f5d3SJohn Marino /// \file tuklib_progname.c 4*86d7f5d3SJohn Marino /// \brief Program name to be displayed in messages 5*86d7f5d3SJohn Marino // 6*86d7f5d3SJohn Marino // Author: Lasse Collin 7*86d7f5d3SJohn Marino // 8*86d7f5d3SJohn Marino // This file has been put into the public domain. 9*86d7f5d3SJohn Marino // You can do whatever you want with this file. 10*86d7f5d3SJohn Marino // 11*86d7f5d3SJohn Marino /////////////////////////////////////////////////////////////////////////////// 12*86d7f5d3SJohn Marino 13*86d7f5d3SJohn Marino #include "tuklib_progname.h" 14*86d7f5d3SJohn Marino #include <string.h> 15*86d7f5d3SJohn Marino 16*86d7f5d3SJohn Marino 17*86d7f5d3SJohn Marino #if !HAVE_DECL_PROGRAM_INVOCATION_NAME 18*86d7f5d3SJohn Marino char *progname = NULL; 19*86d7f5d3SJohn Marino #endif 20*86d7f5d3SJohn Marino 21*86d7f5d3SJohn Marino 22*86d7f5d3SJohn Marino extern void tuklib_progname_init(char ** argv)23*86d7f5d3SJohn Marinotuklib_progname_init(char **argv) 24*86d7f5d3SJohn Marino { 25*86d7f5d3SJohn Marino #ifdef TUKLIB_DOSLIKE 26*86d7f5d3SJohn Marino // On these systems, argv[0] always has the full path and .exe 27*86d7f5d3SJohn Marino // suffix even if the user just types the plain program name. 28*86d7f5d3SJohn Marino // We modify argv[0] to make it nicer to read. 29*86d7f5d3SJohn Marino 30*86d7f5d3SJohn Marino // Strip the leading path. 31*86d7f5d3SJohn Marino char *p = argv[0] + strlen(argv[0]); 32*86d7f5d3SJohn Marino while (argv[0] < p && p[-1] != '/' && p[-1] != '\\') 33*86d7f5d3SJohn Marino --p; 34*86d7f5d3SJohn Marino 35*86d7f5d3SJohn Marino argv[0] = p; 36*86d7f5d3SJohn Marino 37*86d7f5d3SJohn Marino // Strip the .exe suffix. 38*86d7f5d3SJohn Marino p = strrchr(p, '.'); 39*86d7f5d3SJohn Marino if (p != NULL) 40*86d7f5d3SJohn Marino *p = '\0'; 41*86d7f5d3SJohn Marino 42*86d7f5d3SJohn Marino // Make it lowercase. 43*86d7f5d3SJohn Marino for (p = argv[0]; *p != '\0'; ++p) 44*86d7f5d3SJohn Marino if (*p >= 'A' && *p <= 'Z') 45*86d7f5d3SJohn Marino *p = *p - 'A' + 'a'; 46*86d7f5d3SJohn Marino #endif 47*86d7f5d3SJohn Marino 48*86d7f5d3SJohn Marino progname = argv[0]; 49*86d7f5d3SJohn Marino return; 50*86d7f5d3SJohn Marino } 51