// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/tools/gt_encseq_sample.c
// Function: gt_encseq_sample_output
static int gt_encseq_sample_output(GtEncseq *encseq,
                                   GtEncseqSampleArguments *args,
                                   GtEncseqSampleOutputInfo *output)
{
  GtUword i, j, stop;
  GtEncseqReader *esr;
  const bool is_concat = (strcmp(gt_str_get(args->mode), "concat") == 0);
  const bool is_reverse = GT_ISDIRREVERSE(args->rm);
  int had_err = 0;

  /* extract selected sequences */
  i = gt_bittab_get_first_bitnum(output->sample) + output->offset;
  stop = gt_bittab_get_last_bitnum(output->sample) + output->offset;
  while (i < stop) {
    GtUword startpos, len;

    if (is_reverse) {
      len = gt_encseq_seqlength(encseq,
                                gt_encseq_num_of_sequences(encseq) - 1 - i);
      startpos = gt_encseq_total_length(encseq) - (gt_encseq_seqstartpos(encseq,
                 gt_encseq_num_of_sequences(encseq) - 1 - i) + len);
    } else {
      startpos = gt_encseq_seqstartpos(encseq, i);
      len = gt_encseq_seqlength(encseq, i);
    }
    /* prepare description */
    if (!is_concat) {
      GtUword desclen;
      const char *desc = NULL;
      if (gt_encseq_has_description_support(encseq)) {
        if (is_reverse) {
          desc = gt_encseq_description(encseq, &desclen,
                                       gt_encseq_num_of_sequences(encseq)-1-i);
        } else {
          desc = gt_encseq_description(encseq, &desclen, i);
        }
      } else {
        char buf[BUFSIZ];
        (void) snprintf(buf, BUFSIZ, "sequence "GT_WU"", i);
        desclen = strlen(buf);
        desc = buf;
      }
      gt_assert(desc);
      /* output description */
      gt_xfputc(GT_FASTA_SEPARATOR, stdout);
      gt_xfwrite(desc, 1, desclen, stdout);
      gt_xfputc('\n', stdout);
    }

    if (args->singlechars) {
      for (j = 0; j < len; j++) {
        gt_xfputc(gt_encseq_get_decoded_char(encseq, startpos + j, args->rm),
                  stdout);
      }
    } else {
      esr = gt_encseq_create_reader_with_readmode(encseq, args->rm, startpos);
      for (j = 0; j < len; j++) {
        gt_xfputc(gt_encseq_reader_next_decoded_char(esr), stdout);
      }
      gt_encseq_reader_delete(esr);
    }
    i = gt_bittab_get_next_bitnum(output->sample, i - output->offset)
        + output->offset;

    /* insert separator between sequences */
    if (is_concat && i < stop) {
      gt_xfputc(gt_str_get(args->sepchar)[0], stdout);
    } else {
      gt_xfputc('\n', stdout);
    }
  }
  gt_bittab_delete(output->sample);
  return had_err;
}

// Assembly:
subq $0x2098, %rsp           # imm = 0x2098
movq %rdi, 0x2090(%rsp)
movq %rsi, 0x2088(%rsp)
movq %rdx, 0x2080(%rsp)
movq 0x2088(%rsp), %rax
movq 0x8(%rax), %rdi
callq 0x11dee0
movq %rax, %rdi
leaq 0x4e6368(%rip), %rsi    # 0x51a0b2
callq 0x19980
cmpl $0x0, %eax
sete %al
andb $0x1, %al
movb %al, 0x205f(%rsp)
movq 0x2088(%rsp), %rcx
movb $0x1, %al
cmpl $0x1, 0x30(%rcx)
movb %al, 0x2f(%rsp)
je 0x33d85
movq 0x2088(%rsp), %rax
cmpl $0x3, 0x30(%rax)
sete %al
movb %al, 0x2f(%rsp)
movb 0x2f(%rsp), %al
andb $0x1, %al
movb %al, 0x205e(%rsp)
movl $0x0, 0x2058(%rsp)
movq 0x2080(%rsp), %rax
movq 0x8(%rax), %rdi
callq 0x8aa00
movq 0x2080(%rsp), %rcx
addq (%rcx), %rax
movq %rax, 0x2078(%rsp)
movq 0x2080(%rsp), %rax
movq 0x8(%rax), %rdi
callq 0x8aad0
movq 0x2080(%rsp), %rcx
addq (%rcx), %rax
movq %rax, 0x2068(%rsp)
movq 0x2078(%rsp), %rax
cmpq 0x2068(%rsp), %rax
jae 0x341ee
testb $0x1, 0x205e(%rsp)
je 0x33ea6
movq 0x2090(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x2090(%rsp), %rdi
callq 0xa9d50
movq 0x10(%rsp), %rdi
movq %rax, %rsi
subq $0x1, %rsi
subq 0x2078(%rsp), %rsi
callq 0xb09f0
movq %rax, 0x2048(%rsp)
movq 0x2090(%rsp), %rdi
callq 0xa9d00
movq %rax, 0x20(%rsp)
movq 0x2090(%rsp), %rax
movq %rax, 0x18(%rsp)
movq 0x2090(%rsp), %rdi
callq 0xa9d50
movq 0x18(%rsp), %rdi
movq %rax, %rsi
subq $0x1, %rsi
subq 0x2078(%rsp), %rsi
callq 0xb0530
movq %rax, %rcx
movq 0x20(%rsp), %rax
addq 0x2048(%rsp), %rcx
subq %rcx, %rax
movq %rax, 0x2050(%rsp)
jmp 0x33ee0
movq 0x2090(%rsp), %rdi
movq 0x2078(%rsp), %rsi
callq 0xb0530
movq %rax, 0x2050(%rsp)
movq 0x2090(%rsp), %rdi
movq 0x2078(%rsp), %rsi
callq 0xb09f0
movq %rax, 0x2048(%rsp)
testb $0x1, 0x205f(%rsp)
jne 0x34055
movq $0x0, 0x2038(%rsp)
movq 0x2090(%rsp), %rdi
callq 0xb24d0
testb $0x1, %al
jne 0x33f0d
jmp 0x33f83
testb $0x1, 0x205e(%rsp)
je 0x33f5c
movq 0x2090(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x2090(%rsp), %rdi
callq 0xa9d50
movq 0x8(%rsp), %rdi
movq %rax, %rdx
subq $0x1, %rdx
subq 0x2078(%rsp), %rdx
leaq 0x2040(%rsp), %rsi
callq 0xb1b40
movq %rax, 0x2038(%rsp)
jmp 0x33f81
movq 0x2090(%rsp), %rdi
movq 0x2078(%rsp), %rdx
leaq 0x2040(%rsp), %rsi
callq 0xb1b40
movq %rax, 0x2038(%rsp)
jmp 0x33fc2
leaq 0x30(%rsp), %rdi
movq 0x2078(%rsp), %rcx
movl $0x2000, %esi           # imm = 0x2000
leaq 0x56029e(%rip), %rdx    # 0x59423a
movb $0x0, %al
callq 0x19b90
leaq 0x30(%rsp), %rdi
callq 0x192b0
movq %rax, 0x2040(%rsp)
leaq 0x30(%rsp), %rax
movq %rax, 0x2038(%rsp)
jmp 0x33fc4
cmpq $0x0, 0x2038(%rsp)
jne 0x34007
movq 0x607fca(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x4e2033(%rip), %rsi    # 0x516013
leaq 0x50e5ee(%rip), %rdx    # 0x5425d5
leaq 0x4e90c0(%rip), %rcx    # 0x51d0ae
leaq 0x4e8f00(%rip), %r8     # 0x51cef5
movl $0xcf, %r9d
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x34009
movq 0x607f28(%rip), %rax    # 0x63bf38
movq (%rax), %rsi
movl $0x3e, %edi
callq 0x126b70
movq 0x2038(%rsp), %rdi
movq 0x2040(%rsp), %rdx
movq 0x607f04(%rip), %rax    # 0x63bf38
movq (%rax), %rcx
movl $0x1, %esi
callq 0x126d30
movq 0x607ef0(%rip), %rax    # 0x63bf38
movq (%rax), %rsi
movl $0xa, %edi
callq 0x126b70
movq 0x2088(%rsp), %rax
testb $0x1, (%rax)
je 0x340d5
movq $0x0, 0x2070(%rsp)
movq 0x2070(%rsp), %rax
cmpq 0x2048(%rsp), %rax
jae 0x340d0
movq 0x2090(%rsp), %rdi
movq 0x2050(%rsp), %rsi
addq 0x2070(%rsp), %rsi
movq 0x2088(%rsp), %rax
movl 0x30(%rax), %edx
callq 0xaa4b0
movsbl %al, %edi
movq 0x607e86(%rip), %rax    # 0x63bf38
movq (%rax), %rsi
callq 0x126b70
movq 0x2070(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x2070(%rsp)
jmp 0x3406e
jmp 0x3415d
movq 0x2090(%rsp), %rdi
movq 0x2088(%rsp), %rax
movl 0x30(%rax), %esi
movq 0x2050(%rsp), %rdx
callq 0xac380
movq %rax, 0x2060(%rsp)
movq $0x0, 0x2070(%rsp)
movq 0x2070(%rsp), %rax
cmpq 0x2048(%rsp), %rax
jae 0x34150
movq 0x2060(%rsp), %rdi
callq 0xab500
movsbl %al, %edi
movq 0x607e06(%rip), %rax    # 0x63bf38
movq (%rax), %rsi
callq 0x126b70
movq 0x2070(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x2070(%rsp)
jmp 0x34109
movq 0x2060(%rsp), %rdi
callq 0xac3f0
movq 0x2080(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x2078(%rsp), %rsi
movq 0x2080(%rsp), %rax
subq (%rax), %rsi
callq 0x8ab20
movq 0x2080(%rsp), %rcx
addq (%rcx), %rax
movq %rax, 0x2078(%rsp)
testb $0x1, 0x205f(%rsp)
je 0x341d5
movq 0x2078(%rsp), %rax
cmpq 0x2068(%rsp), %rax
jae 0x341d5
movq 0x2088(%rsp), %rax
movq 0x10(%rax), %rdi
callq 0x11dee0
movsbl (%rax), %edi
movq 0x607d6d(%rip), %rax    # 0x63bf38
movq (%rax), %rsi
callq 0x126b70
jmp 0x341e9
movq 0x607d5c(%rip), %rax    # 0x63bf38
movq (%rax), %rsi
movl $0xa, %edi
callq 0x126b70
jmp 0x33de5
movq 0x2080(%rsp), %rax
movq 0x8(%rax), %rdi
callq 0x8af40
movl 0x2058(%rsp), %eax
addq $0x2098, %rsp           # imm = 0x2098
retq
nop