seanhalle@0: /* seanhalle@0: * Author: SeanHalle@yahoo.com seanhalle@0: * seanhalle@0: * Created on June 15, 2009, 10:12 AM seanhalle@0: */ seanhalle@0: seanhalle@0: #include seanhalle@0: #include seanhalle@0: #include seanhalle@0: seanhalle@0: #include "../Matrix_Mult.h" seanhalle@0: seanhalle@0: ParamStruc * makeParamFromStrs( char * type, char *value ); seanhalle@0: seanhalle@0: #define _GNU_SOURCE seanhalle@0: seanhalle@0: /*Copied from gnu's win32 lib seanhalle@0: */ seanhalle@0: ssize_t seanhalle@0: getline( char **lineptr, size_t *n, FILE *stream ) seanhalle@0: { seanhalle@0: if ( lineptr == NULL || n == NULL) return -1; seanhalle@0: if (*lineptr == NULL || *n == 0) seanhalle@0: { *n = 500; //max length of line in a config file seanhalle@0: *lineptr = (char *) malloc( *n ); seanhalle@0: if (*lineptr == NULL) return -1; seanhalle@0: } seanhalle@0: if( fgets( *lineptr, *n, stream ) ) seanhalle@0: return *n; seanhalle@0: else seanhalle@0: return -1; seanhalle@0: } seanhalle@0: seanhalle@0: void seanhalle@0: readParamFileIntoBag( char *paramFileName, ParamBag * bag ) seanhalle@0: { seanhalle@0: size_t lineSz = 0; seanhalle@0: FILE* paramFile; seanhalle@0: char* line = NULL; seanhalle@0: seanhalle@0: char* paramType;// = malloc( 12 ); //"double" is the longest type seanhalle@0: char* paramName;// = malloc( 500 ); //max of 500 chars in name seanhalle@0: char* paramValue;// = malloc( 500 ); //max of 500 chars in value seanhalle@0: seanhalle@0: lineSz = 500; //max length of line in a config file seanhalle@0: line = (char *) malloc( lineSz ); seanhalle@0: if( line == NULL ) seanhalle@0: { printf( "\nIn readParamFileIntoBag: no mem for line\n" ); seanhalle@0: return; seanhalle@0: } seanhalle@0: seanhalle@0: seanhalle@0: paramFile = fopen( paramFileName, "r" ); seanhalle@0: if( paramFile == NULL ) {printf("\ncouldn't open file\n"); exit(0);} seanhalle@0: fseek( paramFile, 0, SEEK_SET ); seanhalle@0: while( !feof( paramFile ) ) seanhalle@0: { while( getline( &line, &lineSz, paramFile ) != -1 ) seanhalle@0: { seanhalle@0: char *lineEnd = line + strlen(line) +1; seanhalle@0: char *searchPos = line; seanhalle@0: seanhalle@0: if( *line == '\n') continue; //blank line seanhalle@0: if( *line == '/' ) continue; //comment line seanhalle@0: seanhalle@0: //read the param type seanhalle@0: paramType = line; //start of string seanhalle@0: int foundIt = 0; seanhalle@0: for( ; searchPos < lineEnd && !foundIt; searchPos++) seanhalle@0: { if( *searchPos == ',' ) seanhalle@0: { foundIt = 1; seanhalle@0: *searchPos = 0; //mark end of string seanhalle@0: } seanhalle@0: } seanhalle@0: //get rid of leading spaces seanhalle@0: for( ; searchPos < lineEnd; searchPos++) seanhalle@0: { if( *searchPos != ' ' ) break; seanhalle@0: } seanhalle@0: //read the param name seanhalle@0: paramName = searchPos; seanhalle@0: foundIt = 0; seanhalle@0: for( ; searchPos < lineEnd && !foundIt; searchPos++) seanhalle@0: { if( *searchPos == ',' ) seanhalle@0: { foundIt = 1; seanhalle@0: *searchPos = 0; //mark end seanhalle@0: } seanhalle@0: } seanhalle@0: //get rid of leading spaces seanhalle@0: for( ; searchPos < lineEnd; searchPos++) seanhalle@0: { if( *searchPos != ' ' ) break; seanhalle@0: } seanhalle@0: //read the param value seanhalle@0: paramValue = searchPos; seanhalle@0: foundIt = 0; seanhalle@0: for( ; searchPos < lineEnd && !foundIt; searchPos++) seanhalle@0: { if( *searchPos == '\n' ) seanhalle@0: { foundIt = 1; seanhalle@0: *searchPos = 0; //mark end seanhalle@0: } seanhalle@0: } seanhalle@0: if( foundIt ) seanhalle@0: { printf("Found: %s, %s, %s\n", paramType, paramName, paramValue ); seanhalle@0: ParamStruc * seanhalle@0: paramStruc = makeParamFromStrs( paramType, paramValue ); seanhalle@0: addParamToBag( paramName, paramStruc, bag ); seanhalle@0: } seanhalle@0: } seanhalle@0: } seanhalle@0: free( line ); seanhalle@0: } seanhalle@0: