/* * NcLooper test des fonctions fichier (???) */ #include #include #include #include #include #include "ffuncs.h" /* --------------------------------------------------------------------- */ int verbosity; /* --------------------------------------------------------------------- */ void affiche_un_sample(SampleRef *sref) { printf("%c %02X [%-20s] %s\n", sref->key, sref->flags, sref->text, sref->path); } /* --------------------------------------------------------------------- */ static int decode_la_ligne(char *line, SampleRef *sref) { char *ptr, *cp; #if DEBUG_LEVEL fprintf(stderr, ">>> %s ( '%s' %p )\n", __func__, line, sref); // dump(line); #endif /* * ON THE WAY TO PARSING HELL */ ptr = strtok(line, "|"); cp = ltrim(rtrim(ptr)); fprintf(stderr, "key [%s]\n", cp); if ( ! isalpha(*cp)) { fprintf(stderr, "invalid key 0x%02x\n", *cp); return -2; } sref->key = toupper(*cp); ptr = strtok(NULL, "|"); if (NULL==ptr) { fprintf(stderr, "line to short\n"); return -3; } cp = ltrim(rtrim(ptr)); fprintf(stderr, "text [%s]\n", cp); if (strlen(cp) > SZ_TEXT) { fprintf(stderr, "text too long\n"); return -4; } strcpy(sref->text, cp); ptr = strtok(NULL, "|"); if (NULL==ptr) { fprintf(stderr, "line to short\n"); return -6; } fprintf(stderr, "path [%s]\n", ltrim(rtrim(ptr))); if (strlen(ptr) > SZ_TEXT) { fprintf(stderr, "path too long\n"); return -5; } strcpy(sref->path, ptr); return 0; } /* --------------------------------------------------------------------- */ #define T_LINE 300 int essai_lecture_liste(char *fname) { FILE *fp; char line[T_LINE+1]; int ln; /* line number */ int foo, bar; SampleRef sample; #if DEBUG_LEVEL fprintf(stderr, ">>> %s ( '%s' )\n", __func__, fname); #endif if (NULL==(fp=fopen(fname, "r"))) { perror(fname); exit(1); } ln = 1; while (NULL != fgets(line, T_LINE, fp)) { // fprintf(stderr, "%3d = %s", ln, line); /* degommer l'eventuel \n */ bar = strlen(line); if (0==bar) { fprintf(stderr,"line %d very short\n", ln); continue; } bar--; /* backspace one char */ if ('\n' == line[bar]) line[bar]='\0'; memset(&sample, 0, sizeof(SampleRef)); foo = decode_la_ligne(line, &sample); fprintf(stderr, "decode la ligne -> %d\n\n", foo); affiche_un_sample(&sample); ln++; } fclose(fp); return -1; } /* --------------------------------------------------------------------- */ void help(int k) { puts("Test des fonctions de gestion des fichiers"); exit(0); } /* --------------------------------------------------------------------- */ int main(int argc, char *argv[]) { int foo; int opt; char *listname = "samples.list"; while ((opt = getopt(argc, argv, "hv")) != -1) { switch(opt) { case 'h': help(0); break; case 'v': verbosity++; break; } } #if DEBUG_LEVEL fprintf(stderr, "argc = %d, optind = %d\n", argc, optind); #endif foo = essai_lecture_liste(listname); fprintf(stderr,"essai lecture '%s' -> %d\n", listname, foo); return 0; } /* --------------------------------------------------------------------- */