#include #include "fields.h" #include "token.h" typedef struct { IS is; int field; } TrueTokenGen; TokenGen *new_tokengen(char *fn) { TrueTokenGen *tg; tg = (TrueTokenGen *) malloc(sizeof(TrueTokenGen)); tg->is = new_inputstruct(fn); if (tg->is == NULL) return NULL; tg->field = -1; return (TokenGen *) tg; } char *tokengen_get_token(TokenGen *tg) { char *s; TrueTokenGen *ttg; ttg = (TrueTokenGen *) tg; while(ttg->field == -1 || ttg->field >= ttg->is->NF) { if (get_line(ttg->is) < 0) return NULL; if (ttg->is->text1[0] == '#') { ttg->field = -1; } else { ttg->field = 0; } } s = ttg->is->fields[ttg->field]; ttg->field++; return s; } void free_tokengen(TokenGen *tg) { TrueTokenGen *ttg; if (tg == 0) return; ttg = (TrueTokenGen *) tg; jettison_inputstruct(ttg->is); free(ttg); } int tokengen_get_int(TokenGen *tg, char *eofstring, char *nointstring) { char *token = tokengen_get_token(tg); TrueTokenGen *ttg = (TrueTokenGen *)tg; int int_token; if (token == 0) { if (eofstring != 0) fprintf(stderr, "%s\n", eofstring); exit(1); } if (sscanf(token, "%d", &int_token) != 1) { if (nointstring != 0) fprintf(stderr, "Line %d: %s\n", ttg->is->line, nointstring); exit(1); } return int_token; } float tokengen_get_float(TokenGen *tg, char *eofstring, char *nofloatstring) { char *token = tokengen_get_token(tg); TrueTokenGen *ttg = (TrueTokenGen *)tg; float float_token; if (token == 0) { if (eofstring != 0) fprintf(stderr, "%s\n", eofstring); exit(1); } if (sscanf(token, "%f", &float_token) != 1) { if (nofloatstring != 0) fprintf(stderr, "Line %d: %s\n", ttg->is->line, nofloatstring); exit(1); } return float_token; } double tokengen_get_double(TokenGen *tg, char *eofstring, char *nodoublestring) { char *token = tokengen_get_token(tg); TrueTokenGen *ttg = (TrueTokenGen *)tg; double double_token; if (token == 0) { if (eofstring != 0) fprintf(stderr, "%s\n", eofstring); exit(1); } if (sscanf(token, "%lf", &double_token) != 1) { if (nodoublestring != 0) fprintf(stderr, "Line %d: %s\n", ttg->is->line, nodoublestring); exit(1); } return double_token; } int tokengen_get_int2(TokenGen *tg, int *int_token) { char *token = tokengen_get_token(tg); if (token == 0) { return -1; } if (sscanf(token, "%d", int_token) != 1) { return 0; } return 1; } float tokengen_get_float2(TokenGen *tg, float *float_token) { char *token = tokengen_get_token(tg); if (token == 0) { return -1; } if (sscanf(token, "%f", float_token) != 1) { return 0; } return 1; } double tokengen_get_double2(TokenGen *tg, double *double_token) { char *token = tokengen_get_token(tg); if (token == 0) { return -1; } if (sscanf(token, "%lf", double_token) != 1) { return 0; } return 1; }