1*3b35e7eeSXin LI // SPDX-License-Identifier: 0BSD 2*3b35e7eeSXin LI 381ad8388SMartin Matuska /////////////////////////////////////////////////////////////////////////////// 481ad8388SMartin Matuska // 581ad8388SMartin Matuska /// \file tuklib_progname.c 681ad8388SMartin Matuska /// \brief Program name to be displayed in messages 781ad8388SMartin Matuska // 881ad8388SMartin Matuska // Author: Lasse Collin 981ad8388SMartin Matuska // 1081ad8388SMartin Matuska /////////////////////////////////////////////////////////////////////////////// 1181ad8388SMartin Matuska 1281ad8388SMartin Matuska #include "tuklib_progname.h" 1381ad8388SMartin Matuska #include <string.h> 1481ad8388SMartin Matuska 1581ad8388SMartin Matuska 16047153b4SXin LI #ifndef HAVE_PROGRAM_INVOCATION_NAME 1781ad8388SMartin Matuska char *progname = NULL; 1881ad8388SMartin Matuska #endif 1981ad8388SMartin Matuska 2081ad8388SMartin Matuska 2181ad8388SMartin Matuska extern void 2281ad8388SMartin Matuska tuklib_progname_init(char **argv) 2381ad8388SMartin Matuska { 2481ad8388SMartin Matuska #ifdef TUKLIB_DOSLIKE 2581ad8388SMartin Matuska // On these systems, argv[0] always has the full path and .exe 2681ad8388SMartin Matuska // suffix even if the user just types the plain program name. 2781ad8388SMartin Matuska // We modify argv[0] to make it nicer to read. 2881ad8388SMartin Matuska 2981ad8388SMartin Matuska // Strip the leading path. 3081ad8388SMartin Matuska char *p = argv[0] + strlen(argv[0]); 3181ad8388SMartin Matuska while (argv[0] < p && p[-1] != '/' && p[-1] != '\\') 3281ad8388SMartin Matuska --p; 3381ad8388SMartin Matuska 3481ad8388SMartin Matuska argv[0] = p; 3581ad8388SMartin Matuska 3681ad8388SMartin Matuska // Strip the .exe suffix. 3781ad8388SMartin Matuska p = strrchr(p, '.'); 3881ad8388SMartin Matuska if (p != NULL) 3981ad8388SMartin Matuska *p = '\0'; 4081ad8388SMartin Matuska 4181ad8388SMartin Matuska // Make it lowercase. 4281ad8388SMartin Matuska for (p = argv[0]; *p != '\0'; ++p) 4381ad8388SMartin Matuska if (*p >= 'A' && *p <= 'Z') 4481ad8388SMartin Matuska *p = *p - 'A' + 'a'; 4581ad8388SMartin Matuska #endif 4681ad8388SMartin Matuska 4781ad8388SMartin Matuska progname = argv[0]; 4881ad8388SMartin Matuska return; 4981ad8388SMartin Matuska } 50