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