Index: srcs/skin.c
===================================================================
--- srcs/skin.c	(revisione 83)
+++ srcs/skin.c	(copia locale)
@@ -561,7 +561,7 @@
     if (Skins.skin_current->background_picture != NULL)
     {
         char filename[FILENAME_LEN];
-        sprintf(filename, "%s/%s", g_Env.Paths.EmulatorDirectory, Skins.skin_current->background_picture);
+        sprintf(filename, "%s/%s", g_Env.Paths.DataDirectory, Skins.skin_current->background_picture);
         Skins.background_picture = load_bitmap(filename, NULL);
         if (Skins.background_picture == NULL)
         {
Index: srcs/config.c
===================================================================
--- srcs/config.c	(revisione 83)
+++ srcs/config.c	(copia locale)
@@ -446,10 +446,15 @@
     char *     line;
     int        line_cnt;
 
+#ifdef UNIX
+    if (!file_exists (g_Env.Paths.ConfigurationDirectory, 0xFF, NULL)) {
+        meka_mkdir(g_Env.Paths.ConfigurationDirectory); }
+    sprintf (value, g_Env.Paths.ConfigurationFile);
+#else
     StrCpyPathRemoved(value, g_Env.Paths.ConfigurationFile);
-#ifndef UNIX
     strupr(value);
 #endif
+
     ConsolePrintf (Msg_Get(MSG_Config_Loading), value);
 
     // Open and read file
Index: srcs/Makefile
===================================================================
--- srcs/Makefile	(revisione 83)
+++ srcs/Makefile	(copia locale)
@@ -73,7 +73,16 @@
 #---[ UNIX/GCC ]---------------------------------------
 ifeq ($(SYSTEM), unix)
 #--- Executable name
+PRODUCT = mekanix
+ifneq ($(LOCALBUILD), yes)
+EXE     = meka
+PREFIX  = /usr/local
+BINDIR  = bin
+DATADIR = share/$(PRODUCT)
+DOCSDIR = share/doc/$(PRODUCT)
+else
 EXE     = ../meka
+endif
 #--- Output directory
 OD      = obj
 #--- Compilation
@@ -83,11 +92,15 @@
 ASM     = nasm
 OTYPE   = elf
 #--- Tools
+CP      = cp
 RM      = rm
 MV      = mv
-MKDIR   = mkdir
+MKDIR   = mkdir -p
 #--- Definitions
-DEF_OS  = -DUNIX -DX86_ASM -DASM_SYMBOLS_REQUIRE_UNDERSCORE
+ifneq ($(LOCALBUILD), yes)
+DEF_OPT = -DDATA_DIR="\"$(PREFIX)/$(DATADIR)\"" -DDOCS_DIR="\"$(PREFIX)/$(DOCSDIR)\"" -DCONFDIR
+endif
+DEF_OS  = -DUNIX -DX86_ASM -DASM_SYMBOLS_REQUIRE_UNDERSCORE $(DEF_OPT)
 INC_OS  = -Ilibs -I../include		                               # This may require an update
 X86_ASM = yes
 #--- Libraries
@@ -428,6 +441,7 @@
 help :
 	@echo "Rules:"
 	@echo "  exe             - Build executable"
+	@echo "  install         - Install files on UNIX distribution"
 	@echo "  dist            - Build all distributions"
 	@echo "  dist_src        - Build sources distribution"
 	@echo "  dist_bin_dos    - Build binary DOS distribution"
@@ -515,22 +529,32 @@
 # Not sure if this still work
 ifeq ($(SYSTEM), unix)
 dist_bin_unix :
-	@echo Creating Dist/mekanix.tgz
+	make install DESTDIR=./Dist/$(PRODUCT) LOCALBUILD=yes
+	@echo Creating ./Dist/$(PRODUCT).tar.gz
 	@echo Compressing
-	-upx -9 meka
+	-upx -9 ./Dist/$(PRODUCT)/meka
 	@echo Packaging
-	-mkdir ./Dist/
-	-mkdir ./Dist/mekanix/
-	cp meka meka.blt meka.cfg meka.dat meka.inp meka.msg meka.nam meka.pat meka.thm icons.zip ./mekanix/
-	cp meka.txt mekanix.txt changes.txt compat.txt debugger.txt multi.txt tech.txt ./mekanix/
-	cp -R Themes ./mekanix/
-	tar cvzf Dist/mekanix.tgz ./mekanix
-	rm -fR ./mekanix/
+	cd ./Dist && tar cvzf $(PRODUCT).tar.gz $(PRODUCT)
+	$(RM) -fR ./Dist/$(PRODUCT)
 	@echo Done!
-	@echo -- Check MEKA.BLT ! --
-	@echo -- Check MEKA.INP ! Joypad auto, on --
+	@echo -- Check meka.blt ! --
+	@echo -- Check meka.inp ! Joypad auto, on --
 endif
 
+# Install unix
+ifeq ($(SYSTEM), unix)
+install : exe
+	$(MKDIR) $(DESTDIR)/$(PREFIX)/$(BINDIR)
+	$(MKDIR) $(DESTDIR)/$(PREFIX)/$(DATADIR)
+	$(MKDIR) $(DESTDIR)/$(PREFIX)/$(DOCSDIR)
+	$(MKDIR) $(DESTDIR)/$(PREFIX)/$(DATADIR)/themes
+	$(CP) $(EXE) $(DESTDIR)/$(PREFIX)/$(BINDIR)/
+	chmod +x $(DESTDIR)/$(PREFIX)/$(BINDIR)/meka
+	$(CP) ../*.{blt,dat,inp,msg,nam,pat,thm,zip} $(DESTDIR)/$(PREFIX)/$(DATADIR)/
+	$(CP) ../Themes/*.{txt,png} $(DESTDIR)/$(PREFIX)/$(DATADIR)/themes/
+	$(CP) ../*.txt $(DESTDIR)/$(PREFIX)/$(DOCSDIR)
+endif
+
 # Cleaning rules -------------------------------------
 clean :		clean_backup
 	$(RM) -f buildupd.exe
Index: srcs/file.c
===================================================================
--- srcs/file.c	(revisione 83)
+++ srcs/file.c	(copia locale)
@@ -111,62 +111,79 @@
     // ConsolePrintf ("g_Env.Paths.EmulatorDirectory = %s\n", g_Env.Paths.EmulatorDirectory);
     // ConsolePrintf ("argv[0] = %s\n", g_Env.argv[0]);
 
+
+    // Set configuration directory
+#ifdef CONFDIR
+    sprintf (g_Env.Paths.ConfigurationDirectory, "%s/.config/mekanix", getenv ("HOME"));
+#else
+    sprintf (g_Env.Paths.ConfigurationDirectory, g_Env.Paths.EmulatorDirectory);
+#endif
+
+    // Set data directory
+#ifdef DATA_DIR
+    sprintf (g_Env.Paths.DataDirectory, DATA_DIR);
+#else
+    sprintf (g_Env.Paths.DataDirectory, g_Env.Paths.EmulatorDirectory);
+#endif
+
+    // Set documentation directory
+#ifdef DOCS_DIR
+     sprintf (g_Env.Paths.DocumentationDirectory, DOCS_DIR);
+#else
+     sprintf (g_Env.Paths.DocumentationDirectory, g_Env.Paths.EmulatorDirectory);
+#endif
+
+    // Fix paths
 #ifdef UNIX
-    {   // ????
-        int len;
-        char temp[FILENAME_LEN];
-        strcpy (temp, g_Env.Paths.EmulatorDirectory);
-        realpath (temp, g_Env.Paths.EmulatorDirectory);
-        len = strlen (g_Env.Paths.EmulatorDirectory);
-        g_Env.Paths.EmulatorDirectory [len] = '/';
-        g_Env.Paths.EmulatorDirectory [len + 1] = EOSTR;
-    }
+    Get_NixRealPath (g_Env.Paths.EmulatorDirectory);
+    Get_NixRealPath (g_Env.Paths.DataDirectory);
+    Get_NixRealPath (g_Env.Paths.ConfigurationDirectory);
+    Get_NixRealPath (g_Env.Paths.DocumentationDirectory);
 #else
     strlwr (g_Env.Paths.EmulatorDirectory);
+    strlwr (g_Env.Paths.DataDirectory);
+    strlwr (g_Env.Paths.ConfigurationDirectory);
+    strlwr (g_Env.Paths.DocumentationDirectory);
 #endif
 
     // Datafiles
-    sprintf (g_Env.Paths.DataFile,      "%s/meka.dat",    g_Env.Paths.EmulatorDirectory);
-    sprintf (g_Env.Paths.DataBaseFile,  "%s/meka.nam",    g_Env.Paths.EmulatorDirectory);
-    sprintf (g_Env.Paths.SkinFile,      "%s/meka.thm",    g_Env.Paths.EmulatorDirectory);
+    sprintf (g_Env.Paths.DataFile,      "%s/meka.dat",    g_Env.Paths.DataDirectory);
+    sprintf (g_Env.Paths.DataBaseFile,  "%s/meka.nam",    g_Env.Paths.DataDirectory);
+    sprintf (g_Env.Paths.SkinFile,      "%s/meka.thm",    g_Env.Paths.DataDirectory);
 
-    sprintf (Patches.filename,			"%s/meka.pat",    g_Env.Paths.EmulatorDirectory);
-    sprintf (VLFN_DataBase.filename,    "%s/meka.fdb",    g_Env.Paths.EmulatorDirectory);
-    sprintf (Blitters.filename,			"%s/meka.blt",    g_Env.Paths.EmulatorDirectory);
+    sprintf (Patches.filename,			"%s/meka.pat",    g_Env.Paths.DataDirectory);
+    sprintf (VLFN_DataBase.filename,    "%s/meka.fdb",    g_Env.Paths.ConfigurationDirectory);
+    sprintf (Blitters.filename,			"%s/meka.blt",    g_Env.Paths.DataDirectory);
     //sprintf (registered.filename [0], "%s/meka.reg",    g_Env.Paths.EmulatorDirectory);
     //sprintf (registered.filename [1], "%s/meka.key",    g_Env.Paths.EmulatorDirectory);
-    sprintf (Desktop.filename,			"%s/meka.dsk",    g_Env.Paths.EmulatorDirectory);
-    sprintf (Inputs.FileName,			"%s/meka.inp",    g_Env.Paths.EmulatorDirectory);
-    sprintf (Messages.FileName,			"%s/meka.msg",    g_Env.Paths.EmulatorDirectory);
+    sprintf (Desktop.filename,			"%s/meka.dsk",    g_Env.Paths.DataDirectory);
+    sprintf (Inputs.FileName,			"%s/meka.inp",    g_Env.Paths.DataDirectory);
+    sprintf (Messages.FileName,			"%s/meka.msg",    g_Env.Paths.DataDirectory);
 
     // Documentations
-    sprintf (g_Env.Paths.DocumentationMain,       "%s/meka.txt",      g_Env.Paths.EmulatorDirectory);
+    sprintf (g_Env.Paths.DocumentationMain,       "%s/meka.txt",      g_Env.Paths.DocumentationDirectory);
 #ifdef WIN32
-    sprintf (g_Env.Paths.DocumentationMainW,      "%s/mekaw.txt",     g_Env.Paths.EmulatorDirectory);
+    sprintf (g_Env.Paths.DocumentationMainW,      "%s/mekaw.txt",     g_Env.Paths.DocumentationDirectory);
 #elif UNIX
-    sprintf (g_Env.Paths.DocumentationMainU,      "%s/mekanix.txt",   g_Env.Paths.EmulatorDirectory);
+    sprintf (g_Env.Paths.DocumentationMainU,      "%s/mekanix.txt",   g_Env.Paths.DocumentationDirectory);
 #endif
-    sprintf (g_Env.Paths.DocumentationCompat,     "%s/compat.txt",    g_Env.Paths.EmulatorDirectory);
-    sprintf (g_Env.Paths.DocumentationMulti,      "%s/multi.txt",     g_Env.Paths.EmulatorDirectory);
-    sprintf (g_Env.Paths.DocumentationChanges,    "%s/changes.txt",   g_Env.Paths.EmulatorDirectory);
-    sprintf (g_Env.Paths.DocumentationDebugger,   "%s/debugger.txt",  g_Env.Paths.EmulatorDirectory);
+    sprintf (g_Env.Paths.DocumentationCompat,     "%s/compat.txt",    g_Env.Paths.DocumentationDirectory);
+    sprintf (g_Env.Paths.DocumentationMulti,      "%s/multi.txt",     g_Env.Paths.DocumentationDirectory);
+    sprintf (g_Env.Paths.DocumentationChanges,    "%s/changes.txt",   g_Env.Paths.DocumentationDirectory);
+    sprintf (g_Env.Paths.DocumentationDebugger,   "%s/debugger.txt",  g_Env.Paths.DocumentationDirectory);
 
     // Configuration file
 #ifdef WIN32
-    sprintf (g_Env.Paths.ConfigurationFile,       "%s/mekaw.cfg",     g_Env.Paths.EmulatorDirectory);
+    sprintf (g_Env.Paths.ConfigurationFile,       "%s/mekaw.cfg",     g_Env.Paths.ConfigurationDirectory);
 #else
-    sprintf (g_Env.Paths.ConfigurationFile,       "%s/meka.cfg",      g_Env.Paths.EmulatorDirectory);
+    sprintf (g_Env.Paths.ConfigurationFile,       "%s/meka.cfg",      g_Env.Paths.ConfigurationDirectory);
 #endif
 
     // Directories
-#ifdef DOS
-    sprintf (g_Env.Paths.ScreenshotDirectory,     "%s/Shots",         g_Env.Paths.EmulatorDirectory);
-#else
-    sprintf (g_Env.Paths.ScreenshotDirectory,     "%s/Screenshots",   g_Env.Paths.EmulatorDirectory);
-#endif
-    sprintf (g_Env.Paths.SavegameDirectory,       "%s/Saves",         g_Env.Paths.EmulatorDirectory);
-    sprintf (g_Env.Paths.MusicDirectory,          "%s/Music",         g_Env.Paths.EmulatorDirectory);
-    sprintf (g_Env.Paths.DebugDirectory,          "%s/Debug",         g_Env.Paths.EmulatorDirectory);
+    sprintf (g_Env.Paths.ScreenshotDirectory,     "%s/Shots",         g_Env.Paths.ConfigurationDirectory);
+    sprintf (g_Env.Paths.SavegameDirectory,       "%s/Saves",         g_Env.Paths.ConfigurationDirectory);
+    sprintf (g_Env.Paths.MusicDirectory,          "%s/Music",         g_Env.Paths.ConfigurationDirectory);
+    sprintf (g_Env.Paths.DebugDirectory,          "%s/Debug",         g_Env.Paths.ConfigurationDirectory);
 
     // ROM
     strcpy (g_Env.Paths.MediaImageFile,  "");
@@ -651,4 +668,17 @@
         BIOS_Unload ();
 }
 
+#ifdef UNIX
+void Get_NixRealPath (char * path) {
+        int len;
+        char temp[FILENAME_LEN];
+        strcpy (temp, path);
+        realpath (temp, path);
+        len = strlen (path);
+        path [len] = EOSTR;
+//         path [len] = '/';
+//         path [len + 1] = EOSTR;
+}
+#endif
+
 //-----------------------------------------------------------------------------
Index: srcs/meka.h
===================================================================
--- srcs/meka.h	(revisione 83)
+++ srcs/meka.h	(copia locale)
@@ -209,8 +209,11 @@
     char    EmulatorDirectory       [FILENAME_LEN];
     char    StartingDirectory       [FILENAME_LEN];
     char    ConfigurationFile       [FILENAME_LEN];
+    char    ConfigurationDirectory  [FILENAME_LEN];
+    char    DataDirectory           [FILENAME_LEN];
     char    DataBaseFile            [FILENAME_LEN];
     char    DataFile                [FILENAME_LEN];
+    char    DocumentationDirectory  [FILENAME_LEN];
     char    SkinFile                [FILENAME_LEN];
     char    ScreenshotDirectory     [FILENAME_LEN];
     char    SavegameDirectory       [FILENAME_LEN];
Index: srcs/file.h
===================================================================
--- srcs/file.h	(revisione 83)
+++ srcs/file.h	(copia locale)
@@ -20,6 +20,9 @@
 
 void            Filenames_Init          (void);     // Initialize filenames used by emulator (path to config files, etc.)
 void            Filenames_Init_ROM      (void);     // Initialize filenames for current ROM
+#ifdef UNIX
+void            Get_NixRealPath (char * path);
+#endif
 
 //-----------------------------------------------------------------------------
 
