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