Index: libcfa/src/parseconfig.cfa
===================================================================
--- libcfa/src/parseconfig.cfa	(revision d5cfc7e09773908daa8a68543ef7c5eaf3b263fa)
+++ libcfa/src/parseconfig.cfa	(revision e7e5b811ef45d1cebd919c82189b1a90f5730c4d)
@@ -66,5 +66,90 @@
 	close( in );
 	// *** WE MUST ALLOW SOME SORT OF VALIDATION FUNCTIONALITY TOO!!! ***
+
+	int entries_so_far = 0;
+	for ( i; kv_pairs.size ) {
+	  if ( entries_so_far == num_entries ) break;
+
+		char * src_key, * src_value;
+		[ src_key, src_value ] = kv_pairs.data[i];
+
+		for ( j; num_entries ) {
+		  if ( strcmp( src_key, entries[j].key ) != 0 ) continue;
+		  	if ( entries[j].parse( src_value, entries[j].variable ) ) {
+				++entries_so_far;
+				break;
+			}
+
+			serr | "Value " | src_value | " for key " | dest_key | " could not be parsed";
+		}
+	}
 } // processConfigFile
+
+
+//-----------------------------------------------------------------------------
+// Typed argument parsing
+
+bool parse( const char * arg, const char * & value ) {
+	value = arg;
+	return true;
+}
+
+bool parse( const char * arg, int & value ) {
+	char * end;
+	int r = strtoll( arg, &end, 10 );
+  if ( *end != '\0' ) return false;
+
+	value = r;
+	return true;
+}
+
+bool parse( const char * arg, unsigned & value ) {
+	char * end;
+	unsigned long long int r = strtoull( arg, &end, 10 );
+  if ( *end != '\0' ) return false;
+  if ( r > (unsigned)MAX ) return false;
+
+	value = r;
+	return true;
+}
+
+bool parse( const char * arg, unsigned long & value ) {
+	char * end;
+	unsigned long long int r = strtoull( arg, &end, 10 );
+  if ( *end != '\0' ) return false;
+  if ( r > (unsigned long)MAX ) return false;
+
+	value = r;
+	return true;
+}
+
+bool parse( const char * arg, unsigned long long & value ) {
+	char * end;
+	unsigned long long int r = strtoull( arg, &end, 10 );
+  if ( *end != '\0' ) return false;
+  if ( r > (unsigned long long)MAX ) return false;
+
+	value = r;
+	return true;
+}
+
+bool parse( const char * arg, float & value ) {
+	char * end;
+	float r = strtof( arg, &end );
+  if ( *end != '\0' ) return false;
+
+	value = r;
+	return true;
+}
+
+bool parse( const char * arg, double & value ) {
+	char * end;
+	double r = strtod( arg, &end );
+  if ( *end != '\0' ) return false;
+
+	value = r;
+	return true;
+}
+
 
 // Local Variables: //
