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