// Returns 0 to indicate read should be output 1 otherwise static int process_aln(const bam_hdr_t *h, bam1_t *b, samview_settings_t* settings) { if (settings->remove_B) bam_remove_B(b); if (settings->min_qlen > 0) { int k, qlen = 0; uint32_t *cigar = bam_get_cigar(b); for (k = 0; k < b->core.n_cigar; ++k) if ((bam_cigar_type(bam_cigar_op(cigar[k]))&1) || bam_cigar_op(cigar[k]) == BAM_CHARD_CLIP) qlen += bam_cigar_oplen(cigar[k]); if (qlen < settings->min_qlen) return 1; } if (b->core.qual < settings->min_mapQ || ((b->core.flag & settings->flag_on) != settings->flag_on) || (b->core.flag & settings->flag_off)) return 1; if (settings->bed && (b->core.tid < 0 || !bed_overlap(settings->bed, h->target_name[b->core.tid], b->core.pos, bam_endpos(b)))) return 1; if (settings->subsam_frac > 0.) { uint32_t k = __ac_Wang_hash(__ac_X31_hash_string(bam_get_qname(b)) ^ settings->subsam_seed); if ((double)(k&0xffffff) / 0x1000000 >= settings->subsam_frac) return 1; } if (settings->rghash) { uint8_t *s = bam_aux_get(b, "RG"); if (s) { khint_t k = kh_get(rg, settings->rghash, (char*)(s + 1)); if (k == kh_end(settings->rghash)) return 1; } } if (settings->library) { const char *p = bam_get_library((bam_hdr_t*)h, b); if (!p || strcmp(p, settings->library) != 0) return 1; } if (settings->remove_aux_len) { size_t i; for (i = 0; i < settings->remove_aux_len; ++i) { uint8_t *s = bam_aux_get(b, settings->remove_aux[i]); if (s) { bam_aux_del(b, s); } } } return 0; }
static int packageSourceFolder(char **source, char *desintation, char *extensions[], int extCount) { FTS *ftsp; FTSENT *p, *chp; int fts_options = FTS_COMFOLLOW | FTS_LOGICAL | FTS_NOCHDIR; int rval = 0; // remove if unused! char line[512]; FILE *pakFile; FILE *file; unsigned int start_offset= 0; unsigned int f_index=0; // file index if (file = fopen(desintation, "r")) { printf("File exists, would you like to overwrite it y/n ? "); int answer; int loop=1; fclose(file); while (loop){ answer = getchar(); switch(answer){ case 'y': loop=0; break; case 'n': printf("Please run Bundle again with the correct output path.\n"); exit(1); case 10: // \n break; default: printf("not sure ? ;) \n (y/n) >"); } } }else { fclose(file); } pakFile = fopen(desintation,"wb+"); printf("\n----------------\n"); // initialize header with nuber of files if ((start_offset=header_init(pakFile, fileCountForHeader)) == -1){ // perror("bundler_header"); fprintf(stderr, "Cannot initialize header...exiting\n"); return 0; } size_t header_size = fileCountForHeader* HEADER_OFFSET_SIZE + sizeof(int); if ((ftsp = fts_open(source, fts_options, NULL)) == NULL) { warn("fts_open"); return -1; } /* Initialize ftsp with as many argv[] parts as possible. */ chp = fts_children(ftsp, 0); if (chp == NULL) { return 0; /* no files to traverse */ } printf("\nCreating the Bundle\n\n"); while ((p = fts_read(ftsp)) != NULL) { int tempFileExists = 0; //used to flag temp file for deletion switch (p->fts_info) { case FTS_D: printf(">dir: %s\n\n", p->fts_path); printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n\n"); printData(pakFile, p->fts_path); break; case FTS_F: if((strstr(p->fts_path, ".DS_Store") != NULL)//ignore DS_Store and exe || (strstr(p->fts_path, ".exe") != NULL)) { printf("Found file to ignore: %s\n", p->fts_path); printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n\n"); } else { printf("\t>file: %s\n", p->fts_path); printData(pakFile, p->fts_path); FILE *tempFile; if(shouldCompressFileType(p->fts_path, extensions, extCount) == 1) { /* compress the fts_path file and write the compressed data one to pak file */ compress_one_file(p->fts_path, "temp.txt"); tempFile = fopen("temp.txt","rb"); tempFileExists = 1; } else { tempFile = fopen(p->fts_path,"rb"); } char byte; fseek(pakFile, 0L, SEEK_END); off_t offset = ftell(pakFile); //get the size of the file fseek(tempFile, 0L, SEEK_END); long size = ftell(tempFile); fseek(tempFile, 0L, SEEK_SET); offset= offset;//-HEADER_OFFSET_SIZE; char *fileName = p->fts_path; char *tempFileName = strdup(fileName); //update header //offset_p off= malloc(HEADER_OFFSET_SIZE); header_offset off; off.hash = __ac_X31_hash_string( filename(fileName) ); off.size= size; off.offset_start= offset; header_write_offset(pakFile, &off, f_index++); // print the file info if(tempFileName) { printf("\t>The offset for %s is %d\n", tempFileName, (unsigned int)offset); printf("\t>The written size of %s is %lu\n", basename(tempFileName), size); printf("\t>%s was added to the bundle\n\n", basename(tempFileName)); printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n\n"); free(tempFileName); } // copy the data from the temp compressed file to the pak file // fseek(pakFile, start_offset, SEEK_SET); //fseek(pakFile, 0L, SEEK_SET); fseek(pakFile, 0L, SEEK_END); int d= 0; while (!feof(tempFile)) { fread(&byte, sizeof(char), 1, tempFile); fwrite(&byte, sizeof(char), 1, pakFile); } fclose(tempFile); // done! //delete the temporary file if(tempFileExists == 1) { if (remove("temp.txt") == -1) perror("Error in deleting temp file"); } break; } default: break; } } fclose(pakFile); fts_close(ftsp); return 0; }