Index: src/clparse.c
===================================================================
--- src/clparse.c	(revision 7821)
+++ src/clparse.c	(working copy)
@@ -54,6 +54,8 @@
 extern char * global_mods[MAX_MODS];
 extern char * campaign_mods[MAX_MODS];
 extern char * multiplay_mods[MAX_MODS];
+extern char * any_mods[MAX_MODS];
+extern char * multiplay_loaded_mods[MAX_MODS];
 extern char iptoconnect[PATH_MAX];
 extern BOOL hostlaunch;
 extern bool CauseCrash;
@@ -357,7 +359,8 @@
 				break;
 			case CLI_MOD_GLOB:
 			{
-				unsigned int i;
+				unsigned int i, len;
+				char * tmpModName;
 
 				// retrieve the file name
 				token = poptGetOptArg(poptCon);
@@ -368,20 +371,88 @@
 					return false;
 				}
 
-				// Find an empty place in the global_mods list
-				for (i = 0; i < 100 && global_mods[i] != NULL; ++i);
-				if (i >= 100 || global_mods[i] != NULL)
+				tmpModName = strdup(token);
+				len = strlen(tmpModName);
+				
+				// The following code uses if...if...if...else if...else if.
+				// That's correct. Don't change it.
+
+				// Extracts modname from modname.gmod.wz, modname.wz, etc.
+				
+				if (len>3 && strncmp(&tmpModName[len-3],".wz",3)==0) // Ends with '.wz'
 				{
+					len -= 3;
+				}
+				if (len>5 && strncmp(&tmpModName[len-5],".gmod",5)==0) // Ends with '.gmod'
+				{
+					len -= 5;
+					tmpModName[len] = 0;
+					for (i = 0; i < MAX_MODS && global_mods[i] != NULL; ++i);
+					if (i >= MAX_MODS || global_mods[i] != NULL)
+					{
+						// Find an empty place in the campaign_mods list
+						debug(LOG_ERROR, "Too many mods registered! Aborting!");
+						poptFreeContext(poptCon);
+						free(tmpModName);
+						return false;
+					}
+					global_mods[i] = strdup(tmpModName);
+					free(tmpModName);
+					break;
+				}
+				else if (len>5 && strncmp(&tmpModName[len-5],".mmod",5)==0) // Ends with '.mmod'
+				{
+					len -= 5;
+					tmpModName[len] = 0;
+					for (i = 0; i < MAX_MODS && multiplay_mods[i] != NULL; ++i);
+					if (i >= MAX_MODS || multiplay_mods[i] != NULL)
+					{
+						// Find an empty place in the multiplay_mods list
+						debug(LOG_ERROR, "Too many mods registered! Aborting!");
+						poptFreeContext(poptCon);
+						free(tmpModName);
+						return false;
+					}
+					multiplay_mods[i] = strdup(tmpModName);
+					free(tmpModName);
+					break;
+				}
+				else if (len>5 && strncmp(&tmpModName[len-5],".cmod",5)) // Ends with '.cmod'
+				{
+					len -= 5;
+					tmpModName[len] = 0;
+					for (i = 0; i < MAX_MODS && campaign_mods[i] != NULL; ++i);
+					if (i >= MAX_MODS || campaign_mods[i] != NULL)
+					{
+						// Find an empty place in the campaign_mods list
+						debug(LOG_ERROR, "Too many mods registered! Aborting!");
+						poptFreeContext(poptCon);
+						free(tmpModName);
+						return false;
+					}
+					campaign_mods[i] = strdup(tmpModName);
+					free(tmpModName);
+					break;
+				}
+				
+				// Find an empty place in the any_mods list
+				for (i = 0; i < MAX_MODS && any_mods[i] != NULL; ++i);
+				if (i >= MAX_MODS || any_mods[i] != NULL)
+				{
 					debug(LOG_ERROR, "Too many mods registered! Aborting!");
 					poptFreeContext(poptCon);
+					free(tmpModName);
 					return false;
 				}
-				global_mods[i] = strdup(token);
+				tmpModName[len] = 0;
+				any_mods[i] = strdup(tmpModName);
+				free(tmpModName);
 				break;
 			}
 			case CLI_MOD_CA:
 			{
-				unsigned int i;
+				unsigned int i, len;
+				char * tmpModName;
 
 				// retrieve the file name
 				token = poptGetOptArg(poptCon);
@@ -392,20 +463,49 @@
 					return false;
 				}
 
+				tmpModName = strdup(token);
+				len = strlen(tmpModName);
+				
+				// The following code uses if...if...else if...else if.
+				// That's correct. Don't change it.
+				// It converts strings such as modname.wz and modname.gmod.wz,
+				// but not modname.gmod.mmod, etc.
+				
+				if (len>3 && strncmp(&tmpModName[len-3],".wz",3)==0) // Ends with '.wz'
+				{
+					len -= 3;
+				}
+				if (len>5 && strncmp(&tmpModName[len-5],".gmod",5)==0) // Ends with '.gmod'
+				{
+					len -= 5; // Force it into a campaign mod
+				}
+				else if (len>5 && strncmp(&tmpModName[len-5],".mmod",5)==0) // Ends with '.mmod'
+				{
+					len -= 5; // Force it into a campaign mod
+				}
+				else if (len>5 && strncmp(&tmpModName[len-5],".cmod",5)==0) // Ends with '.cmod'
+				{
+					len -= 5;
+				}
+				
 				// Find an empty place in the campaign_mods list
-				for (i = 0; i < 100 && campaign_mods[i] != NULL; ++i);
-				if (i >= 100 || campaign_mods[i] != NULL)
+				for (i = 0; i < MAX_MODS && campaign_mods[i] != NULL; ++i);
+				if (i >= MAX_MODS || campaign_mods[i] != NULL)
 				{
 					debug(LOG_ERROR, "Too many mods registered! Aborting!");
 					poptFreeContext(poptCon);
+					free(tmpModName);
 					return false;
 				}
-				campaign_mods[i] = strdup(token);
+				tmpModName[len] = 0;
+				campaign_mods[i] = strdup(tmpModName);
+				free(tmpModName);
 				break;
 			}
 			case CLI_MOD_MP:
 			{
-				unsigned int i;
+				unsigned int i, len;
+				char * tmpModName;
 
 				// retrieve the file name
 				token = poptGetOptArg(poptCon);
@@ -416,14 +516,43 @@
 					return false;
 				}
 
-				for (i = 0; i < 100 && multiplay_mods[i] != NULL; ++i);
-				if (i >= 100 || multiplay_mods[i] != NULL)
+				tmpModName = strdup(token);
+				len = strlen(tmpModName);
+				
+				// The following code uses if...if...else if...else if.
+				// That's correct. Don't change it.
+				// It converts strings such as modname.wz and modname.gmod.wz,
+				// but not modname.gmod.mmod, etc.
+				
+				if (len>3 && strncmp(&tmpModName[len-3],".wz",3)==0) // Ends with '.wz'
 				{
+					len -= 3;
+				}
+				if (len>5 && strncmp(&tmpModName[len-5],".gmod",5)==0) // Ends with '.gmod'
+				{
+					len -= 5; // Force it into a multiplay mod
+				}
+				else if (len>5 && strncmp(&tmpModName[len-5],".mmod",5)==0) // Ends with '.mmod'
+				{
+					len -= 5;
+				}
+				else if (len>5 && strncmp(&tmpModName[len-5],".cmod",5)==0) // Ends with '.cmod'
+				{
+					len -= 5; // Force it into a multiplay mod
+				}
+				
+				// Find an empty place in the multiplay_mods list
+				for (i = 0; i < MAX_MODS && multiplay_mods[i] != NULL; ++i);
+				if (i >= MAX_MODS || multiplay_mods[i] != NULL)
+				{
 					debug(LOG_ERROR, "Too many mods registered! Aborting!");
 					poptFreeContext(poptCon);
+					free(tmpModName);
 					return false;
 				}
-				multiplay_mods[i] = strdup(token);
+				tmpModName[len] = 0;
+				multiplay_mods[i] = strdup(tmpModName);
+				free(tmpModName);
 				break;
 			}
 			case CLI_RESOLUTION:
Index: src/init.c
===================================================================
--- src/init.c	(revision 7821)
+++ src/init.c	(working copy)
@@ -99,6 +99,9 @@
 extern char * global_mods[];
 extern char * campaign_mods[];
 extern char * multiplay_mods[];
+extern char * any_mods[];
+extern char * multiplay_loaded_mods[];
+extern int multiplay_loaded_mods_pos;
 
 // FIXME Totally inappropriate place for this.
 char fileLoadBuffer[FILE_LOAD_BUFFER_SIZE];
@@ -233,6 +236,7 @@
 	static searchPathMode current_mode = mod_clean;
 	wzSearchPath * curSearchPath = searchPathRegistry;
 	char tmpstr[PATH_MAX] = "\0";
+	int i;
 
 	if ( mode != current_mode || force )
 	{
@@ -260,6 +264,7 @@
 					removeSubdirs( curSearchPath->path, "mods/global", global_mods );
 					removeSubdirs( curSearchPath->path, "mods/campaign", campaign_mods );
 					removeSubdirs( curSearchPath->path, "mods/multiplay", multiplay_mods );
+					removeSubdirs( curSearchPath->path, "mods", any_mods );
 
 					// Remove multiplay patches
 					sstrcpy(tmpstr, curSearchPath->path);
@@ -298,9 +303,10 @@
 					// Add global and campaign mods
 					PHYSFS_addToSearchPath( curSearchPath->path, PHYSFS_APPEND );
 
-					addSubdirs( curSearchPath->path, "mods/music", PHYSFS_APPEND, NULL );
-					addSubdirs( curSearchPath->path, "mods/global", PHYSFS_APPEND, global_mods );
-					addSubdirs( curSearchPath->path, "mods/campaign", PHYSFS_APPEND, campaign_mods );
+					addSubdirs( curSearchPath->path, "mods/music", PHYSFS_APPEND, MODLIST_NONE );
+					addSubdirs( curSearchPath->path, "mods/global", PHYSFS_APPEND, MODLIST_GLOB );
+					addSubdirs( curSearchPath->path, "mods/campaign", PHYSFS_APPEND, MODLIST_CAM );
+					addSubdirs( curSearchPath->path, "mods", PHYSFS_APPEND, MODLIST_SEARCH_CAM );
 					if (!PHYSFS_removeFromSearchPath( curSearchPath->path ))
 					{
 						info("* Failed to remove path %s again", curSearchPath->path);
@@ -328,17 +334,35 @@
 			case mod_multiplay:
 				debug(LOG_WZ, "*** Switching to multiplay mods ***");
 
-				while( curSearchPath )
+				if (multiplay_loaded_mods_pos > 0)
 				{
+					for (i=0; i<multiplay_loaded_mods_pos; i++)
+					{
+						free(multiplay_loaded_mods[i]);
+						multiplay_loaded_mods[i] = NULL;
+					}
+				}
+				multiplay_loaded_mods_pos = -1;
+				i = 0;
+				while ( curSearchPath )
+				{
 #ifdef DEBUG
 					debug(LOG_WZ, "Adding [%s] to search path", curSearchPath->path);
 #endif // DEBUG
 					// Add maps and global and multiplay mods
 					PHYSFS_addToSearchPath( curSearchPath->path, PHYSFS_APPEND );
-					addSubdirs( curSearchPath->path, "maps", PHYSFS_APPEND, NULL );
-					addSubdirs( curSearchPath->path, "mods/music", PHYSFS_APPEND, NULL );
-					addSubdirs( curSearchPath->path, "mods/global", PHYSFS_APPEND, global_mods );
-					addSubdirs( curSearchPath->path, "mods/multiplay", PHYSFS_APPEND, multiplay_mods );
+					addSubdirs( curSearchPath->path, "maps", PHYSFS_APPEND, MODLIST_NONE );
+					addSubdirs( curSearchPath->path, "mods/music", PHYSFS_APPEND, MODLIST_NONE );
+
+					multiplay_loaded_mods_pos = i;
+
+					addSubdirs( curSearchPath->path, "mods/global", PHYSFS_APPEND, MODLIST_GLOB );
+					addSubdirs( curSearchPath->path, "mods/multiplay", PHYSFS_APPEND, MODLIST_MP );
+					addSubdirs( curSearchPath->path, "mods", PHYSFS_APPEND, MODLIST_SEARCH_MP );
+
+					i = multiplay_loaded_mods_pos;
+					multiplay_loaded_mods_pos = -1;
+
 					PHYSFS_removeFromSearchPath( curSearchPath->path );
 
 					// Add multiplay patches
@@ -367,6 +391,7 @@
 
 					curSearchPath = curSearchPath->higherPriority;
 				}
+				multiplay_loaded_mods_pos = -1;
 				break;
 			default:
 				debug(LOG_ERROR, "Can't switch to unknown mods %i", mode);
Index: src/main.c
===================================================================
--- src/main.c	(revision 7821)
+++ src/main.c	(working copy)
@@ -108,8 +108,10 @@
 char * global_mods[MAX_MODS] = { NULL };
 char * campaign_mods[MAX_MODS] = { NULL };
 char * multiplay_mods[MAX_MODS] = { NULL };
+char * any_mods[MAX_MODS] = { NULL };
+char * multiplay_loaded_mods[MAX_MODS] = { NULL };
+int multiplay_loaded_mods_pos = -1;
 
-
 // Warzone 2100 . Pumpkin Studios
 
 //flag to indicate when initialisation is complete
@@ -130,19 +132,108 @@
 extern void debug_callback_stderr( void**, const char * );
 extern void debug_callback_win32debug( void**, const char * );
 
-static BOOL inList( char * list[], const char * item )
+static BOOL matchName( char * item, const MODLIST_OPTIONS match_lists )
 {
-	int i = 0;
+	int len;
+	len = strlen(item);
+
+	if ( len>3 && strncmp(&item[len-3],".wz",3)==0 ) // Ends with '.wz'
+	{
+		len -= 3;
+	}
+	if ( (match_lists==MODLIST_ALL_MP) &&
+		 len>5 && strncmp(&item[len-5],".cmod",5)==0) // Ends with '.gmod'
+	{
+		return false;
+	}
+	if ( (match_lists==MODLIST_ALL_CAM) &&
+		 len>5 && strncmp(&item[len-5],".mmod",5)==0) // Ends with '.mmod'
+	{
+		return false;
+	}
+
+	return true;
+}
+
+static BOOL countName(char * item)
+{
+	int len;
+	char * tmpModName;
+
+	if (multiplay_loaded_mods_pos == -1 || multiplay_loaded_mods_pos >= MAX_MODS)
+	{
+		return false;
+	}
+
+	tmpModName = strdup(item);
+	len = strlen(tmpModName);
+
+	// The following code uses if...if...if...else if...else if.
+	// That's correct. Don't change it.
+
+	// Extracts modname from modname.gmod.wz, modname.wz, etc.
+
+	if (len>3 && strncmp(&tmpModName[len-3],".wz",3)==0) // Ends with '.wz'
+	{
+		len -= 3;
+	}
+	if (len>5 && strncmp(&tmpModName[len-5],".gmod",5)==0) // Ends with '.gmod'
+	{
+		len -= 5;
+	}
+	else if (len>5 && strncmp(&tmpModName[len-5],".mmod",5)==0) // Ends with '.mmod'
+	{
+		len -= 5;
+	}
+	else if (len>5 && strncmp(&tmpModName[len-5],".cmod",5)) // Ends with '.cmod'
+	{
+		len -= 5;
+	}
+	tmpModName[len] = 0;
+	multiplay_loaded_mods[multiplay_loaded_mods_pos++] = strdup(tmpModName);
+	free(tmpModName);
+	return true;
+}
+
+static BOOL inModList( char * list[], const char * item, const char match_type )
+{
+	int i = 0, len, listlen;
 #ifdef DEBUG
-	debug( LOG_NEVER, "inList: Current item: [%s]", item );
+	debug( LOG_NEVER, "inModList: Current item: [%s]", item );
 #endif
-	while( list[i] != NULL )
+	while(list[i] != NULL && i<MAX_MODS)
 	{
 #ifdef DEBUG
-		debug( LOG_NEVER, "inList: Checking for match with: [%s]", list[i] );
+		debug( LOG_NEVER, "inModList: Checking for match with: [%s]", list[i] );
 #endif
 		if ( strcmp( list[i], item ) == 0 )
+		{
 			return true;
+		}
+		len = strlen(item);
+		listlen = strlen(list[i]);
+		if ( len>3 && strncmp(&item[len-3],".wz",3)==0 && // Ends with '.wz'
+		     (len -= 3) && strncmp(list[i], item, len)==0 )
+		{
+			return true;
+		}
+		if ( len>5 && strncmp(&item[len-5],".gmod",5)==0 && // Ends with '.gmod'
+		     (len -= 5) && strncmp(list[i], item, len)==0 )
+		{
+			return true;
+		}
+		if ( (match_type=='m' || !match_type) &&
+		     len>5 && strncmp(&item[len-5],".mmod",5)==0 && // Ends with '.mmod'
+		     (len -= 5) && strncmp(list[i], item, len)==0 )
+		{
+			return true;
+		}
+		if ( (match_type=='c' || !match_type) &&
+		     len>5 && strncmp(&item[len-5],".cmod",5)==0 && // Ends with '.cmod'
+		     (len -= 5) && strncmp(list[i], item, len)==0 )
+		{
+			return true;
+		}
 		i++;
 	}
 	return false;
@@ -156,32 +247,81 @@
  * \param appendToPath Whether to append or prepend
  * \param checkList List of directories to check. NULL means any.
  */
-void addSubdirs( const char * basedir, const char * subdir, const BOOL appendToPath, char * checkList[] )
+void addSubdirs( const char * basedir, const char * subdir, const BOOL appendToPath, const MODLIST_OPTIONS match_lists )
 {
-	char tmpstr[PATH_MAX];
+	char tmpstr[PATH_MAX], subdirautoload[PATH_MAX];
 	char ** subdirlist = PHYSFS_enumerateFiles( subdir );
-	char ** i = subdirlist;
-	while( *i != NULL )
-	{
+	char ** i;
 #ifdef DEBUG
-		debug( LOG_NEVER, "addSubdirs: Examining subdir: [%s]", *i );
+	debug( LOG_NEVER, "addSubdirs: Examining subdir: [%s]", *i );
 #endif // DEBUG
-		if( !checkList || inList( checkList, *i ) )
+	for (i = subdirlist; *i != NULL; i++)
+	{
+		// Okay, so, here's what's going on:
+		// For autoload folders and non-mod dirs
+		//   MODLIST_NONE:       Every single mod in the dir is loaded.
+		//   MODLIST_ALL_CAM:    Every mod except .mmod ones are loaded.
+		//   MODLIST_ALL_MP:     Every mod except .cmod ones are loaded.
+		// For mod subdirs:
+		//   MODLIST_GLOB:       A mod is loaded if it is called with --mod
+		//   MODLIST_MP:         A mod is loaded if it is called with --mod or --mod_mp
+		//   MODLIST_CAM:        A mod is loaded if it is called with --mod or --mod_ca
+		// For the root mod dir:
+		//   MODLIST_SEARCH_MP:  A mod is loaded if it is called with --mod_mp, or with --mod
+		//                       and it's not a .cmod
+		//   MODLIST_SEARCH_CAM: A mod is loaded if it is called with --mod_ca, or with --mod
+		//                       and it's not a .mmod
+		// Note: "--mod modname.mmod" is the equivalent of "--mod_mp modname"
+
+		if ((match_lists == MODLIST_ALL_CAM && !matchName(*i, MODLIST_ALL_CAM)) ||
+		    (match_lists == MODLIST_ALL_MP && !matchName(*i, MODLIST_ALL_MP)) )
 		{
-			snprintf(tmpstr, sizeof(tmpstr), "%s%s%s%s", basedir, subdir, PHYSFS_getDirSeparator(), *i);
+			continue;
+		}
+		if ((match_lists == MODLIST_GLOB && !(inModList(global_mods, *i, 0) || inModList(any_mods, *i, 0))) ||
+		    (match_lists == MODLIST_MP && !(inModList(multiplay_mods, *i, 0) || inModList(any_mods, *i, 0))) ||
+		    (match_lists == MODLIST_CAM && !(inModList(campaign_mods, *i, 0) || inModList(any_mods, *i, 0))) )
+		{
+			continue;
+		}
+		if ( (match_lists == MODLIST_SEARCH_MP && !(inModList(any_mods, *i, 'm') || 
+		      inModList(multiplay_mods, *i, 0) || inModList(global_mods, *i, 0))) ||
+		    (match_lists == MODLIST_SEARCH_CAM && !(inModList(any_mods, *i, 'c') || 
+		      inModList(campaign_mods, *i, 0) || inModList(global_mods, *i, 0))) )
+		{
+			continue;
+		}
+		
+		countName(*i);
+		snprintf(tmpstr, sizeof(tmpstr), "%s%s%s%s", basedir, subdir, PHYSFS_getDirSeparator(), *i);
 #ifdef DEBUG
-			debug( LOG_NEVER, "addSubdirs: Adding [%s] to search path", tmpstr );
+		debug( LOG_NEVER, "addSubdirs: Adding [%s] to search path", tmpstr );
 #endif // DEBUG
-			PHYSFS_addToSearchPath( tmpstr, appendToPath );
+		PHYSFS_addToSearchPath( tmpstr, appendToPath );
+	}
+	PHYSFS_freeList(subdirlist);
+	
+	if (match_lists != MODLIST_NONE && match_lists != MODLIST_ALL_CAM && match_lists != MODLIST_ALL_MP)
+	{
+		snprintf(subdirautoload, sizeof(subdirautoload), "%s/autoload", subdir);
+		if (match_lists == MODLIST_SEARCH_MP)
+		{
+			addSubdirs(basedir, subdirautoload, appendToPath, MODLIST_ALL_MP);
 		}
-		i++;
+		else if (match_lists == MODLIST_SEARCH_CAM)
+		{
+			addSubdirs(basedir, subdirautoload, appendToPath, MODLIST_ALL_CAM);
+		}
+		else
+		{
+			addSubdirs(basedir, subdirautoload, appendToPath, MODLIST_NONE);
+		}
 	}
-	PHYSFS_freeList( subdirlist );
 }
 
 void removeSubdirs( const char * basedir, const char * subdir, char * checkList[] )
 {
-	char tmpstr[PATH_MAX];
+	char tmpstr[PATH_MAX], subdirautoload[PATH_MAX];
 	char ** subdirlist = PHYSFS_enumerateFiles( subdir );
 	char ** i = subdirlist;
 	while( *i != NULL )
@@ -189,17 +329,17 @@
 #ifdef DEBUG
 		debug( LOG_NEVER, "removeSubdirs: Examining subdir: [%s]", *i );
 #endif // DEBUG
-		if( !checkList || inList( checkList, *i ) )
-		{
-			snprintf(tmpstr, sizeof(tmpstr), "%s%s%s%s", basedir, subdir, PHYSFS_getDirSeparator(), *i);
-#ifdef DEBUG
-			debug( LOG_NEVER, "removeSubdirs: Removing [%s] from search path", tmpstr );
-#endif // DEBUG
-			PHYSFS_removeFromSearchPath( tmpstr );
-		}
+		snprintf(tmpstr, sizeof(tmpstr), "%s%s%s%s", basedir, subdir, PHYSFS_getDirSeparator(), *i);
+		PHYSFS_removeFromSearchPath( tmpstr );
 		i++;
 	}
 	PHYSFS_freeList( subdirlist );
+	
+	if (checkList)
+	{
+		snprintf(subdirautoload, sizeof(subdirautoload), "%s/autoload", subdir);
+		removeSubdirs(basedir, subdirautoload, NULL);
+	}
 }
 
 void printSearchPath( void )
Index: src/modding.h
===================================================================
--- src/modding.h	(revision 7821)
+++ src/modding.h	(working copy)
@@ -21,7 +21,19 @@
 #ifndef __INCLUDED_SRC_MODDING_H__
 #define __INCLUDED_SRC_MODDING_H__
 
-void addSubdirs( const char * basedir, const char * subdir, const BOOL appendToPath, char * checkList[] );
+typedef enum
+{
+	MODLIST_NONE,       // load all mods
+	MODLIST_CAM,        // load relevant mods in mods/campaign/
+	MODLIST_MP,         // load relevant mods in mods/multiplay/
+	MODLIST_GLOB,       // load relevant mods in mods/global/
+	MODLIST_SEARCH_MP,  // load multiplay mods in mods/
+	MODLIST_SEARCH_CAM, // load campaign mods in mods/
+	MODLIST_ALL_CAM,    // load all global/campaign mods
+	MODLIST_ALL_MP      // load all global/multiplay mods
+} MODLIST_OPTIONS;
+
+void addSubdirs( const char * basedir, const char * subdir, const BOOL appendToPath, const MODLIST_OPTIONS match_lists );
 void removeSubdirs( const char * basedir, const char * subdir, char * checkList[] );
 void printSearchPath( void );
 

