diff -Nru links-hacked-030316/default.c links-hacked-030316.new/default.c
--- links-hacked-030316/default.c	Sun Mar 16 14:53:51 2003
+++ links-hacked-030316.new/default.c	Mon Apr  7 12:47:32 2003
@@ -233,44 +233,50 @@
 	struct stat st;
 	unsigned char *home = stracpy(getenv("HOME"));
 	unsigned char *home_links;
+	unsigned char *etc_dir = getenv("HOME_ETC");
 	unsigned char *config_dir = stracpy(getenv("CONFIG_DIR"));
 
 	if (n) *n = 1;
-	if (!home) {
-		int i;
-		home = stracpy(path_to_exe);
-		if (!home) {
-			if (config_dir) mem_free(config_dir);
-			return NULL;
-		}
-		for (i = strlen(home) - 1; i >= 0; i--) if (dir_sep(home[i])) {
-			home[i + 1] = 0;
-			goto br;
-		}
-		home[0] = 0;
-		br:;
-	}
-	while (home[0] && dir_sep(home[strlen(home) - 1])) home[strlen(home) - 1] = 0;
-	if (home[0]) add_to_strn(&home, "/");
-	home_links = stracpy(home);
-	if (config_dir) 	
-	{
-		add_to_strn(&home_links, config_dir);
-		while (home_links[0] && dir_sep(home_links[strlen(home_links) - 1])) home_links[strlen(home_links) - 1] = 0;
-		if (stat(home_links, &st) != -1 && S_ISDIR(st.st_mode)) {
-			add_to_strn(&home_links, "/links");
+	if (etc_dir) {
+		home_links = stracpy(etc_dir);
+		add_to_strn(&home_links, "/.links");
+	} else {
+	  if (!home) {
+		  int i;
+		  home = stracpy(path_to_exe);
+		  if (!home) {
+			  if (config_dir) mem_free(config_dir);
+			  return NULL;
+		  }
+		  for (i = strlen(home) - 1; i >= 0; i--) if (dir_sep(home[i])) {
+			  home[i + 1] = 0;
+			  goto br;
+		  }
+		  home[0] = 0;
+		  br:;
+	  }
+		while (home[0] && dir_sep(home[strlen(home) - 1])) home[strlen(home) - 1] = 0;
+		if (home[0]) add_to_strn(&home, "/");
+		home_links = stracpy(home);
+		if (config_dir) 	
+		{
+			add_to_strn(&home_links, config_dir);
+			while (home_links[0] && dir_sep(home_links[strlen(home_links) - 1])) home_links[strlen(home_links) - 1] = 0;
+			if (stat(home_links, &st) != -1 && S_ISDIR(st.st_mode)) {
+				add_to_strn(&home_links, "/links");
 	    	} else {
-			fprintf(stderr, "CONFIG_DIR set to %s. But directory %s doesn't exist.\n\007", config_dir, home_links);
-			sleep(3);
-			mem_free(home_links);
-			home_links = stracpy(home);
-			add_to_strn(&home_links, ".links");
-		}
-		mem_free(config_dir);
-	} else add_to_strn(&home_links, ".links");
+				fprintf(stderr, "CONFIG_DIR set to %s. But directory %s doesn't exist.\n\007", config_dir, home_links);
+				sleep(3);
+				mem_free(home_links);
+				home_links = stracpy(home);
+				add_to_strn(&home_links, ".links");
+			}	
+			mem_free(config_dir);
+		} else add_to_strn(&home_links, ".links");
+	}
 	if (stat(home_links, &st)) {
 		if (!mkdir(home_links, 0777)) goto home_creat;
-		if (config_dir) goto failed;
+		if (etc_dir || config_dir) goto failed;
 		goto first_failed;
 	}
 	if (S_ISDIR(st.st_mode)) goto home_ok;
