Index: AE/Installer/trunk/source/dirent.h
===================================================================
--- AE/Installer/trunk/source/dirent.h	(revision 290)
+++ AE/Installer/trunk/source/dirent.h	(revision 290)
@@ -0,0 +1,121 @@
+/*
+ * DIRENT.H (formerly DIRLIB.H)
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ */
+#ifndef _DIRENT_H_
+#define _DIRENT_H_
+
+#include <stdio.h>
+#include <io.h>
+
+#ifndef RC_INVOKED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct dirent
+{
+	long		d_ino;		/* Always zero. */
+	unsigned short	d_reclen;	/* Always zero. */
+	unsigned short	d_namlen;	/* Length of name in d_name. */
+	char		d_name[FILENAME_MAX]; /* File name. */
+};
+
+/*
+ * This is an internal data structure. Good programmers will not use it
+ * except as an argument to one of the functions below.
+ * dd_stat field is now int (was short in older versions).
+ */
+typedef struct
+{
+	/* disk transfer area for this dir */
+	struct _finddata_t	dd_dta;
+
+	/* dirent struct to return from dir (NOTE: this makes this thread
+	 * safe as long as only one thread uses a particular DIR struct at
+	 * a time) */
+	struct dirent		dd_dir;
+
+	/* _findnext handle */
+	long			dd_handle;
+
+	/*
+         * Status of search:
+	 *   0 = not started yet (next entry to read is first entry)
+	 *  -1 = off the end
+	 *   positive = 0 based index of next entry
+	 */
+	int			dd_stat;
+
+	/* given path for dir with search pattern (struct is extended) */
+	char			dd_name[1];
+} DIR;
+
+DIR* __cdecl opendir (const char*);
+struct dirent* __cdecl readdir (DIR*);
+int __cdecl closedir (DIR*);
+void __cdecl rewinddir (DIR*);
+long __cdecl telldir (DIR*);
+void __cdecl seekdir (DIR*, long);
+
+
+/* wide char versions */
+
+struct _wdirent
+{
+	long		d_ino;		/* Always zero. */
+	unsigned short	d_reclen;	/* Always zero. */
+	unsigned short	d_namlen;	/* Length of name in d_name. */
+	wchar_t		d_name[FILENAME_MAX]; /* File name. */
+};
+
+/*
+ * This is an internal data structure. Good programmers will not use it
+ * except as an argument to one of the functions below.
+ */
+typedef struct
+{
+	/* disk transfer area for this dir */
+	struct _wfinddata_t	dd_dta;
+
+	/* dirent struct to return from dir (NOTE: this makes this thread
+	 * safe as long as only one thread uses a particular DIR struct at
+	 * a time) */
+	struct _wdirent		dd_dir;
+
+	/* _findnext handle */
+	long			dd_handle;
+
+	/*
+         * Status of search:
+	 *   0 = not started yet (next entry to read is first entry)
+	 *  -1 = off the end
+	 *   positive = 0 based index of next entry
+	 */
+	int			dd_stat;
+
+	/* given path for dir with search pattern (struct is extended) */
+	wchar_t			dd_name[1];
+} _WDIR;
+
+
+
+_WDIR* __cdecl _wopendir (const wchar_t*);
+struct _wdirent*  __cdecl _wreaddir (_WDIR*);
+int __cdecl _wclosedir (_WDIR*);
+void __cdecl _wrewinddir (_WDIR*);
+long __cdecl _wtelldir (_WDIR*);
+void __cdecl _wseekdir (_WDIR*, long);
+
+
+#ifdef	__cplusplus
+}
+#endif
+
+#endif	/* Not RC_INVOKED */
+
+#endif	/* Not _DIRENT_H_ */
Index: AE/Installer/trunk/source/methods.h
===================================================================
--- AE/Installer/trunk/source/methods.h	(revision 288)
+++ AE/Installer/trunk/source/methods.h	(revision 290)
@@ -1,5 +1,16 @@
 #include <string>
+#include <vector>
+
+
+using namespace std;
+
+struct ModPackage {
+	bool isInstalled; //replace with function 
+	string *name;
+};
+
 int mainMenu();
-using namespace std;
+vector<ModPackage> getPackages();
+ModPackage fileToModPackage(FILE&);
 
 void installPackages();
@@ -9,6 +20,2 @@
 bool getDirectoryContents(char , char &);
 
-struct ModPackage {
-	bool isInstalled; //replace with function 
-	string *name;
-};
Index: AE/Installer/trunk/source/subs.cpp
===================================================================
--- AE/Installer/trunk/source/subs.cpp	(revision 288)
+++ AE/Installer/trunk/source/subs.cpp	(revision 290)
@@ -10,4 +10,10 @@
 #include <vector>
 
+#include <errno.h>
+#include "Include\dirent.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+
 using namespace std;
 bool FALSE = 0;
@@ -19,5 +25,6 @@
 
 	//	SetConsoleTitle("AE Installer"); windows junk, convert to SDL
-//	system("color 0A"); 
+	//	system("color 0A"); 
+	
 	cout << "\nWelcome to the AE installer!\n";
 
@@ -25,6 +32,56 @@
 	
 	return mainMenu();
+}
+ 
+vector<ModPackage> getPackages(void) {
+	vector<ModPackage> packages;
+	packages.reserve(256); //thats 63 or 64 pointers to packages...i think. :P Reserving this improves performance when we add new pointers
+	
+	#ifdef WIN32
+		string path = "K:\\Oni\\edition\\install\\packages"; //only for my build. :P
+	#else
+		string path = "K:\\Oni\\edition\\install\\packages"; //change this, 'scen.
+	#endif
+
+	string filename = "\0";
+	string MODINFO_CFG = "\\Mod_Info.cfg";
+	DIR *pdir;
+	struct dirent *pent;
+
+	pdir = opendir( path.c_str() ); //"." refers to the current dir
+	if (!pdir){
+		printf ("opendir() failure; terminating");
+		exit(1);
+	}
+	errno=0;
+	while ((pent=readdir(pdir))){
+		
+		
+		filename = path + '\\' + pent->d_name + MODINFO_CFG;
+		
+		//cout << filename << "\n";
+
+		if (FILE * file = fopen( filename.c_str(), "r"))
+		{
+			//do stuff like adding to vector :P
+			
+			cout << pent->d_name << "\n";
+			
+			//would prefer to push a pointer to a package, but this will do for now
+			//packages.push_back(modelfileToModPackage(file *))
+			fclose(file);
+		}
+
+	}
 
 	
+	if (errno){
+		printf ("readdir() failure; terminating");
+	exit(1);
+	}
+	closedir(pdir);
+	
+	
+	return packages;
 }
 
@@ -69,4 +126,6 @@
 	iter = packages.begin();
 	
+	getPackages();
+
 	if (packages.empty()) {
 		cout << "Error: You have no packages!\n";
