int main(int argc, char *argv[]) { int i; Prog_Name = Strdup("DBrm",""); if (argc <= 1) fprintf(stderr,"Usage: %s %s\n",Prog_Name,Usage); for (i = 1; i < argc; i++) if (List_DB_Files(argv[i],HANDLER) < 0) fprintf(stderr,"%s: Could not list database %s\n",Prog_Name,argv[i]); exit (0); }
char *openModel(char *Alas, char *Adb, char *Bdb, int first, int last, int nolink, int nolap, int elim, int max_comp, int max_expn) { static char buffer[2*MAX_NAME+100]; static DAZZ_DB _db1; static DAZZ_DB _db2; FILE *dbfile; if (FIRSTCALL) { FIRSTCALL = 0; Prog_Name = Strdup("DaViewer",""); } if ( ! UNDEFINED) { Close_DB(MODEL.db1); if (MODEL.db1 != MODEL.db2) Close_DB(MODEL.db2); fclose(MODEL.input); free(MODEL.local); free(MODEL.pile+MODEL.first); free(MODEL.tbuf); } UNDEFINED = 1; { int i, nfiles, nblocks, cutoff, all, oindx; int64 size; int la_first, la_last; int db_first, db_last; FILE *input; input = fopen(Alas,"r"); if (input == NULL) { if (rindex(Alas,'/') != NULL) Alas = rindex(Alas,'/')+1; EPRINTF(EPLACE,"%s: Cannot open file %s\n",Prog_Name,Alas); return (Ebuffer); } if (scanLAS(input,&la_first,&la_last)) { if (rindex(Alas,'/') != NULL) Alas = rindex(Alas,'/')+1; EPRINTF(EPLACE,"%s: LAS file %s has no overlaps !\n",Prog_Name,Alas); fclose(input); return (Ebuffer); } fclose(input); dbfile = Fopen(Adb,"r"); if (dbfile == NULL) return (Ebuffer); if (fscanf(dbfile,DB_NFILE,&nfiles) != 1) goto junk; for (i = 0; i < nfiles; i++) if (fgets(buffer,2*MAX_NAME+100,dbfile) == NULL) goto junk; if (fscanf(dbfile,DB_NBLOCK,&nblocks) != 1) { if (feof(dbfile)) { EPRINTF(EPLACE,"%s: Database has not been split!",Prog_Name); goto error; } goto junk; } if (fscanf(dbfile,DB_PARAMS,&size,&cutoff,&all) != 3) goto junk; for (i = 0; i <= nblocks; i++) { if (fscanf(dbfile,DB_BDATA,&oindx,&db_last) != 2) goto junk; if (la_first >= db_last) db_first = db_last; if (la_last < db_last) break; } fclose(dbfile); if (first >= 0) { if (first >= db_last) { EPRINTF(EPLACE,"First requested read %d is > last read in las block %d\n", first+1,db_last); return (Ebuffer); } else if (first > db_first) db_first = first; } if (last >= 0) { if (last <= db_first) { EPRINTF(EPLACE,"Last requested read %d is < first read in las block %d\n", last,db_first+1); return (Ebuffer); } else if (last < db_last) db_last = last; } MODEL.first = db_first; MODEL.last = db_last; } MODEL.db1 = &_db1; if (Open_DB(Adb,MODEL.db1) < 0) return (Ebuffer); if (Bdb == NULL) MODEL.db2 = MODEL.db1; else { MODEL.db2 = &_db2; if (Open_DB(Bdb,MODEL.db2) < 0) { Close_DB(MODEL.db1); return (Ebuffer); } Trim_DB(MODEL.db2); } Trim_DB(MODEL.db1); if (List_DB_Files(Adb,OPEN_MASKS)) return (Ebuffer); { int i, n; DAZZ_READ *read = MODEL.db2->reads; n = MODEL.db2->nreads; for (i = 0; i < n; i++) read[i].flags &= (DB_CSS | DB_BEST); } { int kind; if (Check_Track(MODEL.db1,"prof",&kind) > -2) { MODEL.prf = Load_Track(MODEL.db1,"prof"); if (MODEL.prf == NULL) { Close_DB(MODEL.db1); if (MODEL.db2 != MODEL.db1) Close_DB(MODEL.db2); return (Ebuffer); } } else MODEL.prf = NULL; if (Check_Track(MODEL.db1,"qual",&kind) > -2) { MODEL.qvs = Load_Track(MODEL.db1,"qual"); if (MODEL.qvs == NULL) { Close_DB(MODEL.db1); if (MODEL.db2 != MODEL.db1) Close_DB(MODEL.db2); return (Ebuffer); } } else MODEL.qvs = NULL; } MODEL.input = fopen(Alas,"r"); if (buildModel(nolink,nolap,elim,max_comp,max_expn)) { fclose(MODEL.input); Close_DB(MODEL.db1); if (MODEL.db2 != MODEL.db1) Close_DB(MODEL.db2); return (Ebuffer); } { DAZZ_TRACK *t, *u, *v; int j; int64 *anno; u = NULL; for (t = MODEL.db1->tracks; t != NULL; t = v) { v = t->next; t->next = u; u = t; } MODEL.db1->tracks = u; for (t = MODEL.db1->tracks; t != MODEL.qvs && t != MODEL.prf; t = t->next) { anno = (int64 *) (t->anno); for (j = 0; j <= MODEL.db1->nreads; j++) anno[j] >>= 2; } } UNDEFINED = 0; return (NULL); junk: if (rindex(Adb,'/') != NULL) Adb = rindex(Adb,'/')+1; EPRINTF(EPLACE,"%s: Stub file %s is junk!\n",Prog_Name,Adb); error: fclose(dbfile); return (Ebuffer); }