/* error.c Compile with: gcc -g error.c -lm -o error Example run: error beta_reference beta.l5.list Determines the fp, fn counts for a kkno/kunk run with respect to a reference set of landmarks. */ #include #include #include #include #define NUM_REGS 100 #define MIN_DIST 6 #define Usage "%s " void fatal(char *); void fatalf(char *,char *); FILE *ckopen(char *,char *); static char *ckalloc(int); int main(int argc, char *argv[]) { char buffer[200]; int i, len, nfp, nfn; int from, to, From, To; int *Fct, *Regs; FILE *fp, *tfp, *tfnp; if (argc!=3) fatalf(Usage,argv[0]); fp = ckopen(argv[1],"r"); len = 0; fgets(buffer,200,fp); if (buffer[0]!='>') fatal("Wrong file configuration."); sscanf(buffer+1, "%d %d", &From, &To); Fct = (int *)ckalloc((To-From+1)*sizeof(int))-From; Regs = (int *)ckalloc((To-From+1)*sizeof(int))-From; for (i=From; i<=To; Fct[i]=Regs[i]=0, i++); while (fgets(buffer,200,fp)!=NULL) { if (!isdigit(buffer[0])) continue; sscanf(buffer, "%d %d", &from, &to); for (i=from; i<=to; i++) if ((i>=From) && (i<=To)) Fct[i] = 1; len += to-from+1; } fclose(fp); tfp = ckopen(argv[2],"r"); while (fgets(buffer,200,fp)!=NULL) { if (!isdigit(buffer[0])) continue; sscanf(buffer, "%d %d", &from, &to); for (i=from; i<=to; i++) if ((i>=From) && (i<=To)) Regs[i] = 1; } nfn = nfp = 0; for (i=From; i<=To; i++) if (!Fct[i] && Regs[i]) nfp++; else if (Fct[i] && !Regs[i]) nfn++; tfnp = ckopen("DEVIATION","a"); fprintf(tfnp,"%-15s \tfp: %d \tfn: %d \ttotal: %d (%d)\n", argv[2], nfp, nfn, nfp+nfn, len); fclose(tfnp); free(Fct+From); free(Regs+From); return 0; } /* fatal - print message and die */ void fatal(char *msg) { fprintf(stderr, "%s\n", msg); exit(1); } /* fatalf - format message, print it, and die */ void fatalf(char *msg, char *val) { fprintf(stderr, msg, val); putc('\n', stderr); exit(1); } /* ckopen - open file; check for success */ FILE *ckopen(char *name, char *mode) { FILE *fopen(), *fp; if ((fp = fopen(name, mode)) == NULL) fatalf("Cannot open %s.", name); return fp; } /* ckalloc - allocate space; check for success */ char *ckalloc(int amount) { char *malloc(), *p; if ((p = malloc( (unsigned) amount)) == NULL) fatal("Ran out of memory."); return p; }