Beispiel #1
0
ssize_t
qes_seqfile_write (struct qes_seqfile *seqfile, struct qes_seq *seq)
{
#define sf_putc_check(c) ret = QES_ZFPUTC(seqfile->qf->fp, c);                  \
    if (ret != c) {return -2;}                                              \
    else res_len += 1;                                                      \
    ret = 0
#define sf_puts_check(s) ret = QES_ZFPUTS(seqfile->qf->fp, s);                  \
    if (ret < 0) {return -2;}                                               \
    else res_len += ret;                                                    \
    ret = 0

    int ret = 0;
    ssize_t res_len = 0;

    if (!qes_seqfile_ok(seqfile) || !qes_seq_ok(seq)) {
        return -2;
    }
    switch (seqfile->format) {
        case FASTA_FMT:
            sf_putc_check(FASTA_DELIM);
            sf_puts_check(seq->name.str);
            if (qes_seq_has_comment(seq)) {
                sf_putc_check(' ');
                sf_puts_check(seq->comment.str);
            }
            sf_putc_check('\n');
            sf_puts_check(seq->seq.str);
            sf_putc_check('\n');
            break;
        case FASTQ_FMT:
            sf_putc_check(FASTQ_DELIM);
            sf_puts_check(seq->name.str);
            if (qes_seq_has_comment(seq)) {
                sf_putc_check(' ');
                sf_puts_check(seq->comment.str);
            }
            sf_putc_check('\n');
            sf_puts_check(seq->seq.str);
            sf_putc_check('\n');
            if (qes_seq_has_qual(seq)) {
                sf_putc_check('+');
                sf_putc_check('\n');
                sf_puts_check(seq->qual.str);
                sf_putc_check('\n');

            }
            break;
        case UNKNOWN_FMT:
        default:
            return -2;
            break;
    }
    return res_len;
#undef sf_putc_check
#undef sf_puts_check
}
Beispiel #2
0
/*******************************************************************************
*                                    MAIN                                     *
*******************************************************************************/
int
trunc_main(int argc, char *argv[])
{
    int c = 0;
    size_t truncat = 0;
    float truncprop = 0.;
    const char *filename = NULL;

    /* Parse CLI options */
    while ((c = getopt(argc, argv, trunc_optstr)) >= 0) {
        switch (c) {
        case 'p':
            truncprop = atof(optarg);
            break;
        case 'l':
            truncat = atoi(optarg);
            break;
        case 'h':
            trunc_usage(stdout);
            return EXIT_SUCCESS;
            break;
        case '?':
            trunc_usage(stderr);
            return EXIT_FAILURE;
            break;
        }
    }
    if (optind >= argc || (truncat == 0 && truncprop == 0.0)) {
        trunc_usage(stderr);
        return EXIT_FAILURE;
    }
    filename = argv[optind];

    struct qes_seq *seq = qes_seq_create();
    struct qes_seqfile *sf = qes_seqfile_create(filename, "r");
    ssize_t res;
    while ((res = qes_seqfile_read(sf, seq)) > 0) {
        if (truncprop != 0.0) {
            truncat = truncprop * seq->seq.len;
        }
        qes_seq_truncate(seq, truncat);
        qes_seq_print(seq, stdout, !qes_seq_has_qual(seq), 0);
        
    }

    qes_seqfile_destroy(sf);
    qes_seq_destroy(seq);
    return EXIT_SUCCESS;
}