/************************************************************************************************************ * Function name : get_next_assignment * * * * INPUT : char *filename * * unsigned int *exponent * * int *bit_min * * int *bit_max * * char *assignment_key[100]; * OUTPUT : * * * * 0 - OK * * 1 - get_next_assignment : cannot open file * * 2 - get_next_assignment : no valid assignment found * ************************************************************************************************************/ enum ASSIGNMENT_ERRORS get_next_assignment(char *filename, unsigned int *exponent, unsigned int *bit_min, unsigned int *bit_max, LINE_BUFFER *key, int verbosity) { FILE *f_in; enum PARSE_WARNINGS value; struct ASSIGNMENT assignment; char *tail; LINE_BUFFER line; unsigned int linecount=0; // first, make sure we have an up-to-date worktodo file process_add_file(filename); f_in = fopen_and_lock(filename, "r"); if(f_in == NULL) { printf("Can't open workfile %s\n", filename); return CANT_OPEN_FILE; // nothing to open... } for(;;) { linecount++; value = parse_worktodo_line(f_in,&assignment,&line,&tail); if ((BLANK_LINE == value) || (NONBLANK_LINE == value)) continue; if (NO_WARNING == value) { if (valid_assignment(assignment.exponent,assignment.bit_min, assignment.bit_max, verbosity)) break; value = INVALID_DATA; } if (END_OF_FILE == value) break; if(verbosity >= 1) { printf("WARNING: ignoring line %u in \"%s\"! Reason: ", linecount, filename); switch(value) { case LONG_LINE: printf("line is too long\n"); break; case NO_FACTOR_EQUAL: printf("doesn't begin with Factor=\n");break; case INVALID_FORMAT: printf("invalid format\n");break; case INVALID_DATA: printf("invalid data\n");break; default: printf("unknown error on >%s<",line); break; } } } unlock_and_fclose(f_in); if (NO_WARNING == value) { *exponent = assignment.exponent; *bit_min = assignment.bit_min; *bit_max = assignment.bit_max; if (key!=NULL)strcpy(*key,assignment.assignment_key); return OK; } else return VALID_ASSIGNMENT_NOT_FOUND; }
/************************************************************************************************************ * Function name : get_next_assignment * * * * INPUT : char *filename * * int *exponent * * int* fft_length * * char *hex_key[132]; * * OUTPUT : * * * * 0 - OK * * 1 - get_next_assignment : cannot open file * * 2 - get_next_assignment : no valid assignment found * ************************************************************************************************************/ enum ASSIGNMENT_ERRORS get_next_assignment(char *filename, int *exponent, int* fft_length, int* tf_depth, int* ll_saved, LINE_BUFFER *key, int* b1, int* b2) { struct ASSIGNMENT assignment; FILE *f_in; enum PARSE_WARNINGS value; char *tail; LINE_BUFFER line; unsigned int linecount = 0; #ifdef EBUG printf("Starting GNA. Called with *fft = %d.\n", *fft_length); #endif assignment.fft_length = 0; f_in = _fopen(filename, "r"); if (NULL == f_in) { // printf("Can't open workfile %s in %s\n", filename, getcwd(line,sizeof(LINE_BUFFER)) ); fprintf(stderr, "Can't open workfile %s\n\n", filename); return CANT_OPEN_FILE; // nothing to open... } do { linecount++; value = parse_worktodo_line(f_in, &assignment, &line, &tail); if ((BLANK_LINE == value) || (NONBLANK_LINE == value)) continue; if (NO_WARNING == value) { if (valid_assignment(assignment.exponent, assignment.fft_length)) break; value = INVALID_DATA; } if (END_OF_FILE == value) break; fprintf(stderr, "Warning: ignoring line %u: \"%s\" in \"%s\". Reason: ", linecount, line, filename); switch (value) { case LONG_LINE: fprintf(stderr, "line is too long.\n"); break; case NO_TEST_EQUAL: fprintf(stderr, "doesn't begin with Test= or DoubleCheck=.\n"); break; case INVALID_FORMAT: fprintf(stderr, "invalid format.\n"); break; case INVALID_DATA: fprintf(stderr, "invalid data.\n"); break; default: fprintf(stderr, "unknown error.\n"); break; } // if (LONG_LINE != value) // return 2; } while (1); fclose(f_in); if (NO_WARNING == value) { *exponent = assignment.exponent; if (assignment.fft_length > 0) *fft_length = assignment.fft_length; *tf_depth = assignment.tf_depth; if (assignment.type == PFACTOR) *ll_saved = assignment.ll_saved; if (assignment.type == PMINUS1) { *b1 = assignment.b1; *b2 = assignment.b2; } #ifdef EBUG printf("Struct fft is %d, *fft_length is %d\n", assignment.fft_length, *fft_length); #endif if (key != NULL) strcopy(*key, assignment.hex_key, MAX_LINE_LENGTH + 1); return OK; } else fprintf(stderr, "No valid assignment found.\n\n"); return VALID_ASSIGNMENT_NOT_FOUND; }