23e823e
diff -up mc-4.6.2/edit/editcmd.c.etcmc mc-4.6.2/edit/editcmd.c
23e823e
--- mc-4.6.2/edit/editcmd.c.etcmc	2009-05-26 18:05:21.000000000 +0200
23e823e
+++ mc-4.6.2/edit/editcmd.c	2009-05-26 18:05:21.000000000 +0200
23e823e
@@ -51,7 +51,7 @@
23e823e
 #include "../src/tty.h"		/* LINES */
23e823e
 #include "../src/widget.h"	/* listbox_new() */
23e823e
 #include "../src/layout.h"	/* clr_scr() */
23e823e
-#include "../src/main.h"	/* mc_home */
23e823e
+#include "../src/main.h"	/* mc_home, mc_home_alt */
23e823e
 #include "../src/help.h"	/* interactive_display() */
23e823e
 #include "../src/key.h"		/* XCTRL */
23e823e
 #include "../src/dialog.h"	/* do_refresh() */
23e823e
@@ -2833,12 +2833,15 @@ edit_block_process_cmd (WEdit *edit, con
23e823e
 	    return;
23e823e
 	}
23e823e
 	if (!(script_src = fopen (o, "r"))) {
23e823e
-	    fclose (script_home);
23e823e
-	    unlink (h);
23e823e
-	    edit_error_dialog ("", get_sys_error (catstrs
23e823e
-						  (_("Error reading script:"),
23e823e
-						   o, (char *) NULL)));
23e823e
-	    return;
23e823e
+	    o = catstrs (mc_home_alt, shell_cmd, (char *) NULL);
23e823e
+	    if (!(script_src = fopen (o, "r"))) {
23e823e
+	        fclose (script_home);
23e823e
+	        unlink (h);
23e823e
+	        edit_error_dialog ("", get_sys_error (catstrs
23e823e
+						      (_("Error reading script:"),
23e823e
+						      o, (char *) NULL)));
23e823e
+	        return;
23e823e
+	    }
23e823e
 	}
23e823e
 	while (fgets (buf, sizeof (buf), script_src))
23e823e
 	    fputs (buf, script_home);
23e823e
diff -up mc-4.6.2/edit/syntax.c.etcmc mc-4.6.2/edit/syntax.c
23e823e
--- mc-4.6.2/edit/syntax.c.etcmc	2009-02-01 20:30:21.000000000 +0100
23e823e
+++ mc-4.6.2/edit/syntax.c	2009-05-26 18:05:21.000000000 +0200
23e823e
@@ -39,7 +39,7 @@
23e823e
 #include "edit.h"
23e823e
 #include "edit-widget.h"
23e823e
 #include "../src/color.h"	/* use_colors */
23e823e
-#include "../src/main.h"	/* mc_home */
23e823e
+#include "../src/main.h"	/* mc_home, mc_home_alt */
23e823e
 #include "../src/wtools.h"	/* message() */
23e823e
 
23e823e
 /* bytes */
23e823e
@@ -682,6 +682,12 @@ static FILE *open_include_file (const ch
23e823e
     g_free (error_file_name);
23e823e
     error_file_name = g_strconcat (mc_home, PATH_SEP_STR "syntax" PATH_SEP_STR,
23e823e
 				   filename, (char *) NULL);
23e823e
+    if (!(f = fopen (error_file_name, "r"))) {
23e823e
+        g_free (error_file_name);
23e823e
+        error_file_name = g_strconcat (mc_home_alt, PATH_SEP_STR "syntax" PATH_SEP_STR,
23e823e
+				       filename, (char *) NULL);
23e823e
+    } else return f;
23e823e
+    
23e823e
     return fopen (error_file_name, "r");
23e823e
 }
23e823e
 
23e823e
diff -up mc-4.6.2/src/charsets.c.etcmc mc-4.6.2/src/charsets.c
23e823e
--- mc-4.6.2/src/charsets.c.etcmc	2009-05-26 18:05:21.000000000 +0200
23e823e
+++ mc-4.6.2/src/charsets.c	2009-05-26 18:05:21.000000000 +0200
23e823e
@@ -47,12 +47,17 @@ load_codepages_list (void)
7f70c24
     char *fname;
7f70c24
     char buf[256];
7f70c24
     extern char *mc_home;
7f70c24
+    extern char *mc_home_alt;
7f70c24
     extern int display_codepage;
7f70c24
     char *default_codepage = NULL;
7f70c24
 
23e823e
     fname = mhl_str_dir_plus_file (mc_home, CHARSETS_INDEX);
7f70c24
     if (!(f = fopen (fname, "r"))) {
7f70c24
-	fprintf (stderr, _("Warning: file %s not found\n"), fname);
7f70c24
+        g_free (fname);
23e823e
+        fname = mhl_str_dir_plus_file (mc_home_alt, CHARSETS_INDEX);
7f70c24
+        if (!(f = fopen (fname, "r"))) {
7f70c24
+	    fprintf (stderr, _("Warning: file %s not found\n"), fname);
7f70c24
+        }
7f70c24
 	g_free (fname);
7f70c24
 	return -1;
7f70c24
     }
23e823e
diff -up mc-4.6.2/src/cmd.c.etcmc mc-4.6.2/src/cmd.c
23e823e
--- mc-4.6.2/src/cmd.c.etcmc	2009-05-26 18:05:21.000000000 +0200
23e823e
+++ mc-4.6.2/src/cmd.c	2009-05-26 18:05:21.000000000 +0200
23e823e
@@ -592,8 +592,13 @@ void ext_cmd (void)
7f70c24
 	check_for_default (extdir, buffer);
7f70c24
 	do_edit (buffer);
7f70c24
 	g_free (buffer);
7f70c24
-    } else if (dir == 1)
7f70c24
+    } else if (dir == 1) {
7f70c24
+    	if (!exist_file(extdir)) {
7f70c24
+	    g_free (extdir);
23e823e
+	    extdir = mhl_str_dir_plus_file (mc_home_alt, MC_LIB_EXT);
7f70c24
+	}
7f70c24
 	do_edit (extdir);
7f70c24
+    }
7f70c24
 
7f70c24
    g_free (extdir);
7f70c24
    flush_extension_file ();
23e823e
@@ -616,6 +621,11 @@ menu_edit_cmd (int where)
7f70c24
     );
7f70c24
 
23e823e
     menufile = mhl_str_dir_plus_file (mc_home, where ? CEDIT_GLOBAL_MENU : MC_GLOBAL_MENU);
7f70c24
+    
7f70c24
+    if (!exist_file(menufile)) {
7f70c24
+    	g_free (menufile);
23e823e
+    	menufile = mhl_str_dir_plus_file (mc_home_alt, where ? CEDIT_GLOBAL_MENU : MC_GLOBAL_MENU);
7f70c24
+    }
7f70c24
 
7f70c24
     switch (dir) {
7f70c24
 	case 0:
23e823e
@@ -630,6 +640,10 @@ menu_edit_cmd (int where)
7f70c24
 	
7f70c24
 	case 2:
23e823e
 	    buffer = mhl_str_dir_plus_file (mc_home, where ? CEDIT_GLOBAL_MENU : MC_GLOBAL_MENU);
7f70c24
+	    if (!exist_file(buffer)) {
7f70c24
+	        g_free (buffer);
23e823e
+	        buffer = mhl_str_dir_plus_file (mc_home_alt, where ? CEDIT_GLOBAL_MENU : MC_GLOBAL_MENU);
7f70c24
+	    }
7f70c24
 	    break;
7f70c24
 
7f70c24
 	default:
23e823e
@@ -688,7 +702,7 @@ edit_syntax_cmd (void)
7f70c24
 			  _(" Which syntax file you want to edit? "), 0, 2,
7f70c24
 			  _("&User"), _("&System Wide"));
7f70c24
     }
23e823e
-    extdir = mhl_str_dir_plus_file (mc_home, "syntax" PATH_SEP_STR "Syntax");
23e823e
+    extdir = mhl_str_dir_plus_file (mc_home_alt, "syntax" PATH_SEP_STR "Syntax");
7f70c24
 
7f70c24
     if (dir == 0) {
23e823e
 	buffer = mhl_str_dir_plus_file (home_dir, SYNTAX_FILE);
23e823e
diff -up mc-4.6.2/src/ext.c.etcmc mc-4.6.2/src/ext.c
23e823e
--- mc-4.6.2/src/ext.c.etcmc	2009-02-01 20:30:21.000000000 +0100
23e823e
+++ mc-4.6.2/src/ext.c	2009-05-26 18:05:21.000000000 +0200
23e823e
@@ -446,6 +446,10 @@ regex_command (const char *filename, con
23e823e
 	    g_free (extension_file);
23e823e
 	  check_stock_mc_ext:
23e823e
 	    extension_file = mhl_str_dir_plus_file (mc_home, MC_LIB_EXT);
23e823e
+	    if (!exist_file (extension_file)) {
23e823e
+	    	g_free (extension_file);
23e823e
+	    	extension_file = mhl_str_dir_plus_file (mc_home_alt, MC_LIB_EXT);
23e823e
+	    }
23e823e
 	    mc_user_ext = 0;
23e823e
 	}
23e823e
 	data = load_file (extension_file);
23e823e
diff -up mc-4.6.2/src/main.c.etcmc mc-4.6.2/src/main.c
23e823e
--- mc-4.6.2/src/main.c.etcmc	2009-05-26 18:05:21.000000000 +0200
23e823e
+++ mc-4.6.2/src/main.c	2009-05-26 18:07:07.000000000 +0200
23e823e
@@ -291,9 +291,12 @@ char *xterm_title_str = NULL;
23e823e
 /* Is the LANG UTF-8 ? */
23e823e
 gboolean is_utf8 = FALSE;
7f70c24
 
7f70c24
-/* mc_home: The home of MC */
7f70c24
+/* mc_home: The home of MC - /etc/mc or defined by MC_DATADIR */
7f70c24
 char *mc_home = NULL;
7f70c24
 
7f70c24
+/* mc_home_alt: Alternative home of MC - deprecated /usr/share/mc */
7f70c24
+char *mc_home_alt = NULL;
7f70c24
+
7f70c24
 char cmd_buf[512];
7f70c24
 
7f70c24
 static void
23e823e
@@ -1858,8 +1861,9 @@ OS_Setup (void)
7f70c24
     if ((mc_libdir = getenv ("MC_DATADIR")) != NULL) {
7f70c24
 	mc_home = g_strdup (mc_libdir);
7f70c24
     } else {
7f70c24
-	mc_home = g_strdup (DATADIR);
7f70c24
+	mc_home = g_strdup (SYSCONFDIR);
7f70c24
     }
7f70c24
+    mc_home_alt = mc_libdir != NULL ? g_strdup (SYSCONFDIR) : g_strdup (DATADIR);
7f70c24
 }
7f70c24
 
7f70c24
 static void
23e823e
@@ -1989,7 +1993,7 @@ process_args (poptContext ctx, int c, co
7f70c24
 	break;
7f70c24
 
7f70c24
     case 'f':
7f70c24
-	printf ("%s\n", mc_home);
7f70c24
+	printf ("%s (%s)\n", mc_home, mc_home_alt);
7f70c24
 	exit (0);
7f70c24
 	break;
7f70c24
 
23e823e
@@ -2339,6 +2343,7 @@ main (int argc, char *argv[])
7f70c24
     }
7f70c24
     g_free (last_wd_string);
7f70c24
 
7f70c24
+    g_free (mc_home_alt);
7f70c24
     g_free (mc_home);
7f70c24
     done_key ();
7f70c24
 #ifdef HAVE_CHARSET
23e823e
diff -up mc-4.6.2/src/main.h.etcmc mc-4.6.2/src/main.h
23e823e
--- mc-4.6.2/src/main.h.etcmc	2009-05-26 18:05:21.000000000 +0200
23e823e
+++ mc-4.6.2/src/main.h	2009-05-26 18:05:21.000000000 +0200
23e823e
@@ -114,7 +114,7 @@ void print_vfs_message(const char *msg, 
23e823e
 
23e823e
 extern const char *prompt;
23e823e
 extern const char *edit_one_file;
23e823e
-extern char *mc_home;
23e823e
+extern char *mc_home, *mc_home_alt;
23e823e
 char *get_mc_lib_dir (void);
23e823e
 
23e823e
 int maybe_cd (int move_up_dir);
23e823e
diff -up mc-4.6.2/src/Makefile.am.etcmc mc-4.6.2/src/Makefile.am
23e823e
--- mc-4.6.2/src/Makefile.am.etcmc	2009-05-26 18:05:21.000000000 +0200
23e823e
+++ mc-4.6.2/src/Makefile.am	2009-05-26 18:05:21.000000000 +0200
23e823e
@@ -8,9 +8,11 @@ bin_PROGRAMS = mc mcmfmt
23e823e
 if CONS_SAVER
23e823e
 pkglibexec_PROGRAMS = cons.saver
23e823e
 AM_CPPFLAGS = -DDATADIR=\""$(pkgdatadir)/"\" -DLOCALEDIR=\""$(localedir)"\" \
23e823e
-	-DSAVERDIR=\""$(pkglibexecdir)"\"
23e823e
+	-DSAVERDIR=\""$(pkglibexecdir)"\" \
23e823e
+	-DSYSCONFDIR=\""$(sysconfdir)/@PACKAGE@/"\"
23e823e
 else
23e823e
-AM_CPPFLAGS = -DDATADIR=\""$(pkgdatadir)/"\" -DLOCALEDIR=\""$(localedir)"\"
23e823e
+AM_CPPFLAGS = -DDATADIR=\""$(pkgdatadir)/"\" -DLOCALEDIR=\""$(localedir)"\" \
23e823e
+	-DSYSCONFDIR=\""$(sysconfdir)/@PACKAGE@/"\"
23e823e
 endif
23e823e
 
23e823e
 noinst_PROGRAMS = man2hlp
23e823e
diff -up mc-4.6.2/src/Makefile.in.etcmc mc-4.6.2/src/Makefile.in
23e823e
--- mc-4.6.2/src/Makefile.in.etcmc	2009-02-01 20:46:26.000000000 +0100
23e823e
+++ mc-4.6.2/src/Makefile.in	2009-05-26 18:09:15.000000000 +0200
23e823e
@@ -294,9 +294,8 @@ top_builddir = @top_builddir@
23e823e
 top_srcdir = @top_srcdir@
23e823e
 AM_CFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
7f70c24
 pkglibexecdir = $(libexecdir)/@PACKAGE@
7f70c24
-@CONS_SAVER_FALSE@AM_CPPFLAGS = -DDATADIR=\""$(pkgdatadir)/"\" -DLOCALEDIR=\""$(localedir)"\"
23e823e
-@CONS_SAVER_TRUE@AM_CPPFLAGS = -DDATADIR=\""$(pkgdatadir)/"\" -DLOCALEDIR=\""$(localedir)"\" \
7f70c24
-@CONS_SAVER_TRUE@	-DSAVERDIR=\""$(pkglibexecdir)"\"
23e823e
+@CONS_SAVER_FALSE@AM_CPPFLAGS = -DDATADIR=\""$(pkgdatadir)/"\" -DLOCALEDIR=\""$(localedir)"\" -DSYSCONFDIR=\""$(sysconfdir)/@PACKAGE@/"\"
23e823e
+@CONS_SAVER_TRUE@AM_CPPFLAGS = -DDATADIR=\""$(pkgdatadir)/"\" -DLOCALEDIR=\""$(localedir)"\" -DSAVERDIR=\""$(pkglibexecdir)"\" -DSYSCONFDIR=\""$(sysconfdir)/@PACKAGE@/"\"
7f70c24
 
7f70c24
 man2hlp_LDADD = $(GLIB_LIBS)
7f70c24
 mcmfmt_SOURCES = mfmt.c
23e823e
diff -up mc-4.6.2/src/setup.c.etcmc mc-4.6.2/src/setup.c
23e823e
--- mc-4.6.2/src/setup.c.etcmc	2009-05-26 18:05:21.000000000 +0200
23e823e
+++ mc-4.6.2/src/setup.c	2009-05-26 18:05:21.000000000 +0200
23e823e
@@ -522,8 +522,15 @@ setup_init (void)
23e823e
 	if (exist_file (inifile)){
23e823e
 	    g_free (profile);
23e823e
 	    profile = inifile;
23e823e
-	} else
23e823e
+	} else {
23e823e
 	    g_free (inifile);
23e823e
+	    inifile = mhl_str_dir_plus_file (mc_home_alt, "mc.ini");
23e823e
+	    if (exist_file (inifile)) {
23e823e
+	        g_free (profile);
23e823e
+	        profile = inifile;
23e823e
+	    } else 
23e823e
+	        g_free (inifile);
23e823e
+	}
23e823e
     }
23e823e
 
23e823e
     profile_name = profile;
23e823e
@@ -542,6 +549,11 @@ load_setup (void)
23e823e
     /* mc.lib is common for all users, but has priority lower than
23e823e
        ~/.mc/ini.  FIXME: it's only used for keys and treestore now */
23e823e
     global_profile_name = mhl_str_dir_plus_file (mc_home, "mc.lib");
23e823e
+    
23e823e
+    if (!exist_file(global_profile_name)) {
23e823e
+    	g_free (global_profile_name);
23e823e
+    	global_profile_name = mhl_str_dir_plus_file (mc_home_alt, "mc.lib");
23e823e
+    }
23e823e
 
23e823e
     /* Load integer boolean options */
23e823e
     for (i = 0; int_options[i].opt_name; i++)
23e823e
diff -up mc-4.6.2/src/user.c.etcmc mc-4.6.2/src/user.c
23e823e
--- mc-4.6.2/src/user.c.etcmc	2009-02-01 20:30:21.000000000 +0100
23e823e
+++ mc-4.6.2/src/user.c	2009-05-26 18:05:21.000000000 +0200
23e823e
@@ -729,6 +729,11 @@ user_menu_cmd (struct WEdit *edit_widget
7f70c24
 	    g_free (menu);
23e823e
 	    menu = mhl_str_dir_plus_file \
7f70c24
                         (mc_home, edit_widget ? CEDIT_GLOBAL_MENU : MC_GLOBAL_MENU);
7f70c24
+	    if (!exist_file (menu)) {
7f70c24
+	        g_free (menu);
23e823e
+	        menu = mhl_str_dir_plus_file \
7f70c24
+                        (mc_home_alt, edit_widget ? CEDIT_GLOBAL_MENU : MC_GLOBAL_MENU);
7f70c24
+	    }
7f70c24
 	}
7f70c24
     }
7f70c24
 
23e823e
diff -up mc-4.6.2/src/util.c.etcmc mc-4.6.2/src/util.c
23e823e
--- mc-4.6.2/src/util.c.etcmc	2009-05-26 18:05:21.000000000 +0200
23e823e
+++ mc-4.6.2/src/util.c	2009-05-26 18:05:21.000000000 +0200
23e823e
@@ -44,7 +44,7 @@
23e823e
 #include "tty.h"
23e823e
 #include "global.h"
23e823e
 #include "profile.h"
23e823e
-#include "main.h"		/* mc_home */
23e823e
+#include "main.h"		/* mc_home, mc_home_alt */
23e823e
 #include "cmd.h"		/* guess_message_value */
23e823e
 #include "mountlist.h"
23e823e
 #include "win.h"		/* xterm_flag */
23e823e
@@ -978,16 +978,25 @@ load_mc_home_file (const char *filename,
23e823e
 
23e823e
     if (!data) {
23e823e
 	g_free (hintfile);
23e823e
-	/* Fall back to the two-letter language code */
23e823e
-	if (lang[0] && lang[1])
23e823e
-	    lang[2] = 0;
23e823e
+	g_free (hintfile_base);
23e823e
+
23e823e
+	hintfile_base = mhl_str_dir_plus_file (mc_home_alt, filename);
23e823e
+
23e823e
 	hintfile = g_strconcat (hintfile_base, ".", lang, (char *) NULL);
23e823e
 	data = load_file (hintfile);
23e823e
-
23e823e
+	
23e823e
 	if (!data) {
23e823e
-	    g_free (hintfile);
23e823e
-	    hintfile = hintfile_base;
23e823e
-	    data = load_file (hintfile_base);
23e823e
+	    /* Fall back to the two-letter language code */
23e823e
+	    if (lang[0] && lang[1])
23e823e
+	        lang[2] = 0;
23e823e
+	    hintfile = g_strconcat (hintfile_base, ".", lang, (char *) NULL);
23e823e
+	    data = load_file (hintfile);
23e823e
+
23e823e
+	    if (!data) {
23e823e
+	        g_free (hintfile);
23e823e
+	        hintfile = hintfile_base;
23e823e
+	        data = load_file (hintfile_base);
7f70c24
+	    }
7f70c24
 	}
23e823e
     }
7f70c24
 
23e823e
diff -up mc-4.6.2/vfs/extfs.c.etcmc mc-4.6.2/vfs/extfs.c
23e823e
--- mc-4.6.2/vfs/extfs.c.etcmc	2009-02-01 20:30:21.000000000 +0100
23e823e
+++ mc-4.6.2/vfs/extfs.c	2009-05-26 18:05:21.000000000 +0200
23e823e
@@ -249,7 +249,7 @@ extfs_open_archive (int fstype, const ch
7f70c24
 	tmp = name_quote (name, 0);
7f70c24
     }
7f70c24
 
23e823e
-    mc_extfsdir = mhl_str_dir_plus_file (mc_home, "extfs" PATH_SEP_STR);
23e823e
+    mc_extfsdir = mhl_str_dir_plus_file (mc_home_alt, "extfs" PATH_SEP_STR);
7f70c24
     cmd =
7f70c24
 	g_strconcat (mc_extfsdir, extfs_prefixes[fstype], " list ",
7f70c24
 		     local_name ? local_name : tmp, (char *) NULL);
23e823e
@@ -624,7 +624,7 @@ extfs_cmd (const char *extfs_cmd, struct
7f70c24
     archive_name = name_quote (extfs_get_archive_name (archive), 0);
7f70c24
     quoted_localname = name_quote (localname, 0);
7f70c24
 
23e823e
-    mc_extfsdir = mhl_str_dir_plus_file (mc_home, "extfs" PATH_SEP_STR);
23e823e
+    mc_extfsdir = mhl_str_dir_plus_file (mc_home_alt, "extfs" PATH_SEP_STR);
7f70c24
     cmd = g_strconcat (mc_extfsdir, extfs_prefixes[archive->fstype],
7f70c24
 		       extfs_cmd, archive_name, " ", quoted_file, " ",
7f70c24
 		       quoted_localname, (char *) NULL);
23e823e
@@ -653,7 +653,7 @@ extfs_run (struct vfs_class *me, const c
7f70c24
     g_free (p);
7f70c24
 
7f70c24
     archive_name = name_quote (extfs_get_archive_name (archive), 0);
23e823e
-    mc_extfsdir = mhl_str_dir_plus_file (mc_home, "extfs" PATH_SEP_STR);
23e823e
+    mc_extfsdir = mhl_str_dir_plus_file (mc_home_alt, "extfs" PATH_SEP_STR);
7f70c24
     cmd = g_strconcat (mc_extfsdir, extfs_prefixes[archive->fstype],
7f70c24
 		       " run ", archive_name, " ", q, (char *) NULL);
7f70c24
     g_free (mc_extfsdir);