Massive moved some dirs from $(srcdir)/src into $(srcdir)/lib
[midnight-commander.git] / lib / skin / ini-file.c
blob1a2b3fb51c377ea42d34d4db24731a075368bc8a
1 /*
2 Skins engine.
3 Reading and parse ini-files
5 Copyright (C) 2009 The Free Software Foundation, Inc.
7 Written by:
8 Slava Zanko <slavazanko@gmail.com>, 2009.
10 This file is part of the Midnight Commander.
12 The Midnight Commander is free software; you can redistribute it
13 and/or modify it under the terms of the GNU General Public License as
14 published by the Free Software Foundation; either version 2 of the
15 License, or (at your option) any later version.
17 The Midnight Commander is distributed in the hope that it will be
18 useful, but WITHOUT ANY WARRANTY; without even the implied warranty
19 of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 General Public License for more details.
22 You should have received a copy of the GNU General Public License
23 along with this program; if not, write to the Free Software
24 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
25 MA 02110-1301, USA.
28 #include <config.h>
29 #include <string.h>
31 #include "../src/global.h"
32 #include "../src/main.h"
33 #include "../src/fileloc.h"
34 #include "../../src/util.h"
35 #include "skin.h"
36 #include "internal.h"
38 /*** global variables ****************************************************************************/
40 /*** file scope macro definitions ****************************************************************/
42 /*** file scope type declarations ****************************************************************/
44 /*** file scope variables ************************************************************************/
46 /*** file scope functions ************************************************************************/
47 /* --------------------------------------------------------------------------------------------- */
49 static gboolean
50 mc_skin_ini_file_load_search_in_dir (mc_skin_t * mc_skin, const gchar * base_dir)
52 char *file_name, *file_name2;
54 file_name = g_build_filename (base_dir, MC_SKINS_SUBDIR, mc_skin->name, NULL);
55 if (exist_file (file_name)) {
56 mc_skin->config = mc_config_init (file_name);
57 g_free (file_name);
58 return (mc_skin->config != NULL);
60 g_free (file_name);
62 file_name2 = g_strdup_printf ("%s.ini", mc_skin->name);
63 file_name = g_build_filename (base_dir, MC_SKINS_SUBDIR, file_name2, NULL);
64 g_free (file_name2);
66 if (exist_file (file_name)) {
67 mc_skin->config = mc_config_init (file_name);
68 g_free (file_name);
69 return (mc_skin->config != NULL);
71 g_free (file_name);
72 return FALSE;
75 /* --------------------------------------------------------------------------------------------- */
76 /*** public functions ****************************************************************************/
77 /* --------------------------------------------------------------------------------------------- */
79 gboolean
80 mc_skin_ini_file_load (mc_skin_t * mc_skin)
82 char *file_name, *user_home_dir;
84 file_name = g_path_get_basename (mc_skin->name);
86 if (strcmp (file_name, mc_skin->name) != 0) {
87 g_free (file_name);
88 if (!g_path_is_absolute (mc_skin->name))
89 return FALSE;
90 mc_skin->config = mc_config_init (mc_skin->name);
91 return (mc_skin->config != NULL);
93 g_free (file_name);
95 /* ~/.mc/skins/ */
96 user_home_dir = concat_dir_and_file (home_dir, MC_USERCONF_DIR);
97 if (mc_skin_ini_file_load_search_in_dir (mc_skin, user_home_dir)) {
98 g_free (user_home_dir);
99 return TRUE;
101 g_free (user_home_dir);
103 /* /etc/mc/skins/ */
104 if (mc_skin_ini_file_load_search_in_dir (mc_skin, mc_home))
105 return TRUE;
107 /* /usr/share/mc/skins/ */
108 return mc_skin_ini_file_load_search_in_dir (mc_skin, mc_home_alt);
111 /* --------------------------------------------------------------------------------------------- */
113 gboolean
114 mc_skin_ini_file_parse (mc_skin_t * mc_skin)
116 mc_skin->description =
117 mc_config_get_string (mc_skin->config, "skin", "description", "- no description -");
118 if (!mc_skin_color_parse_ini_file (mc_skin))
119 return FALSE;
121 mc_skin_lines_parse_ini_file (mc_skin);
123 return TRUE;
126 /* --------------------------------------------------------------------------------------------- */
128 void
129 mc_skin_set_hardcoded_skin (mc_skin_t * mc_skin)
131 mc_skin->config = mc_config_init (NULL);
133 mc_config_set_string (mc_skin->config, "skin", "description", "hardcoded skin");
135 mc_skin_hardcoded_ugly_lines (mc_skin);
136 mc_skin_hardcoded_blackwhite_colors (mc_skin);
139 /* --------------------------------------------------------------------------------------------- */