// File: /workspace/github_c_makefile_star2_O3/genometools[P]genometools/src/core/option.c
// Function: show_help
static int show_help(GtOptionParser *op, GtOptionType optiontype, GtError *err)
{
  GtUword i, max_option_length = 0;
  GtOption *option;
  int had_err = 0;
  gt_error_check(err);
  gt_assert(optiontype == OPTION_HELP || optiontype == OPTION_HELPPLUS ||
            optiontype == OPTION_HELPDEV);

  /* determine maximum option length */
  for (i = 0; i < gt_array_size(op->options); i++) {
    option = *(GtOption**) gt_array_get(op->options, i);
    /* skip option if necessary */
    if ((optiontype == OPTION_HELP && option->is_extended_option) ||
        (optiontype == OPTION_HELPDEV && !option->is_development_option) ||
        (!(optiontype == OPTION_HELPDEV) && option->is_development_option)) {
      continue;
    }
    if (gt_str_length(option->option_str) > max_option_length)
      max_option_length = gt_str_length(option->option_str);
  }
  gt_assert(max_option_length);

  printf("Usage: %s %s\n", op->progname, op->synopsis);
  printf("%s\n\n", op->one_liner);
  for (i = 0; i < gt_array_size(op->options); i++) {
    option = *(GtOption**) gt_array_get(op->options, i);
    /* skip option if necessary */
    if ((optiontype == OPTION_HELP && option->is_extended_option) ||
        (optiontype == OPTION_HELPDEV && !option->is_development_option) ||
        (!(optiontype == OPTION_HELPDEV) && option->is_development_option)) {
      continue;
    }
    printf("-%s%*s ", gt_str_get(option->option_str),
           (int) (max_option_length - gt_str_length(option->option_str)), "");
    show_description(max_option_length + 2, gt_str_get(option->description),
                     gt_str_length(option->description));

    /* show default value for some types of options */
    if (!option->hide_default) {
      if (option->option_type == OPTION_BOOL) {
        printf("%*s  default: %s\n", (int) max_option_length, "",
               option->default_value.b ? "yes" : "no");
      }
      else if (option->option_type == OPTION_CHOICE) {
        printf("%*s  default: ", (int) max_option_length, "");
        if (!option->default_value.s || !strlen(option->default_value.s))
          gt_xputs("undefined");
        else
          gt_xputs(option->default_value.s);
      }

      else if (option->option_type == OPTION_DOUBLE) {
        printf("%*s  default: ", (int) max_option_length, "");
        if (option->default_value.d == GT_UNDEF_DOUBLE)
          gt_xputs("undefined");
        else
          printf("%.2f\n", option->default_value.d);
      }
      else if (option->option_type == OPTION_INT) {
        printf("%*s  default: ", (int) max_option_length, "");
        if (option->default_value.i == GT_UNDEF_INT)
          gt_xputs("undefined");
        else
          printf("%d\n", option->default_value.i);
      }
      else if (option->option_type == OPTION_UINT) {
        printf("%*s  default: ", (int) max_option_length, "");
        if (option->default_value.ui == GT_UNDEF_UINT)
          gt_xputs("undefined");
        else
          printf("%u\n", option->default_value.ui);
      }
      else if (option->option_type == OPTION_LONG) {
        printf("%*s  default: ", (int) max_option_length, "");
        if (option->default_value.ul == GT_UNDEF_WORD)
          gt_xputs("undefined");
        else
          printf(""GT_WD"\n", option->default_value.l);
      }
      else if (option->option_type == OPTION_ULONG) {
        printf("%*s  default: ", (int) max_option_length, "");
        if (option->default_value.ul == GT_UNDEF_UWORD)
          gt_xputs("undefined");
        else
          printf(""GT_WU"\n", option->default_value.ul);
      }
      else if (option->option_type == OPTION_RANGE) {
        printf("%*s  default: ", (int) max_option_length, "");
        if (option->default_value.r.start == GT_UNDEF_UWORD)
          gt_xputs("undefined");
        else {
          printf(""GT_WU" "GT_WU"\n", option->default_value.r.start,
                 option->default_value.r.end);
        }
      }
      else if (option->option_type == OPTION_FILENAME ||
               option->option_type == OPTION_STRING) {
        printf("%*s  default: ", (int) max_option_length, "");
        if (!option->default_value.s || !strlen(option->default_value.s))
          gt_xputs("undefined");
        else
          gt_xputs(option->default_value.s);
      }
    }
  }
  if (op->comment_func)
    had_err = op->comment_func(op->progname, op->comment_func_data, err);
  if (!had_err) {
    if (op->refer_to_manual) {
      printf("\nFor detailed information, please refer to the manual of%s.",
             op->progname + gt_cstr_length_up_to_char(op->progname, ' '));
    }
    printf("\nReport bugs to %s.\n",
           op->mail_address ? op->mail_address : GT_MAIL_ADDRESS);
  }
  return had_err;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x38, %rsp
movq %rdx, %rbx
movl %esi, %r15d
movq %rdi, %r12
testq %rdx, %rdx
je 0x3828e
movq %rbx, %rdi
callq 0x34fea
testb %al, %al
jne 0x387b7
leal -0x4(%r15), %eax
cmpl $0x2, %eax
ja 0x387b2
movq %rbx, 0x10(%rsp)
movq 0x18(%r12), %rdi
callq 0x6f310
testq %rax, %rax
je 0x387ad
xorl %r13d, %r13d
xorl %r14d, %r14d
movq 0x18(%r12), %rdi
movq %r14, %rsi
callq 0x6f037
movq (%rax), %rbx
cmpl $0x4, %r15d
jne 0x382d7
cmpb $0x0, 0x4d(%rbx)
je 0x382e5
jmp 0x38305
cmpl $0x6, %r15d
jne 0x382e5
cmpb $0x0, 0x4e(%rbx)
jne 0x382eb
jmp 0x38305
cmpb $0x0, 0x4e(%rbx)
jne 0x38305
movq 0x8(%rbx), %rdi
callq 0x3bb86
cmpq %r13, %rax
jbe 0x38305
movq 0x8(%rbx), %rdi
callq 0x3bb86
movq %rax, %r13
incq %r14
movq 0x18(%r12), %rdi
callq 0x6f310
cmpq %rax, %r14
jb 0x382b9
movq %r13, (%rsp)
testq %r13, %r13
je 0x387ad
movq (%r12), %rsi
movq 0x8(%r12), %rdx
leaq 0xaa398(%rip), %rdi     # 0xe26cc
xorl %eax, %eax
callq 0xb070
movq 0x10(%r12), %rsi
leaq 0xaa393(%rip), %rdi     # 0xe26da
xorl %eax, %eax
callq 0xb070
movq 0x18(%r12), %rdi
callq 0x6f310
testq %rax, %rax
je 0x38722
movq (%rsp), %rax
leaq 0x2(%rax), %rbp
movl $0x4e, %ecx
subq %rax, %rcx
testq %rcx, %rcx
movl $0x0, %edx
movq %rcx, 0x8(%rsp)
cmovgq %rcx, %rdx
movq %rdx, 0x28(%rsp)
xorl %r14d, %r14d
movq %r12, 0x20(%rsp)
movq %r15, 0x18(%rsp)
movq 0x18(%r12), %rdi
movq %r14, %rsi
callq 0x6f037
movq (%rax), %rbx
cmpl $0x4, %r15d
jne 0x383b5
cmpb $0x0, 0x4d(%rbx)
je 0x383c6
jmp 0x3870c
cmpl $0x6, %r15d
jne 0x383c6
cmpb $0x0, 0x4e(%rbx)
jne 0x383d0
jmp 0x3870c
cmpb $0x0, 0x4e(%rbx)
jne 0x3870c
movq 0x8(%rbx), %rdi
callq 0x3bb5d
movq %rax, %r13
movq 0x8(%rbx), %rdi
callq 0x3bb86
movq (%rsp), %rcx
movl %ecx, %edx
subl %eax, %edx
leaq 0xaa2eb(%rip), %rdi     # 0xe26df
movq %r13, %rsi
leaq 0xb6739(%rip), %rcx     # 0xeeb37
xorl %eax, %eax
callq 0xb070
movq 0x10(%rbx), %rdi
callq 0x3bb5d
movq %rax, %r15
movq %rbx, 0x30(%rsp)
movq 0x10(%rbx), %rdi
callq 0x3bb86
cmpq $0x4f, %rbp
ja 0x387a8
leaq (%r15,%rax), %rbx
cmpq 0x28(%rsp), %rax
jle 0x38514
movq %r15, %r12
addq 0x8(%rsp), %r12
cmpq %r15, %r12
jb 0x38459
movzbl (%r12), %eax
cmpl $0xa, %eax
je 0x38459
cmpl $0x20, %eax
je 0x38459
decq %r12
jmp 0x38440
cmpq %r12, %r15
jae 0x38483
movq %r12, %r13
subq %r15, %r13
incq %r15
movsbl -0x1(%r15), %edi
callq 0x3d3b0
cmpb $0xa, -0x1(%r15)
je 0x384bb
incq %r15
decq %r13
jne 0x38467
movq %r12, %r15
movzbl (%r15), %eax
cmpl $0xa, %eax
je 0x38495
cmpl $0x20, %eax
jne 0x387a3
incq %r15
movl $0xa, %edi
callq 0x3d3b0
testq %rbp, %rbp
je 0x384d2
movq %rbp, %r12
movl $0x20, %edi
callq 0x3d3b0
decq %r12
jne 0x384aa
jmp 0x384d2
testq %rbp, %rbp
je 0x384d2
movq %rbp, %r12
movl $0x20, %edi
callq 0x3d3b0
decq %r12
jne 0x384c3
cmpq %rbx, %r15
jae 0x38514
movq 0x8(%rsp), %rax
leaq (%r15,%rax), %r12
cmpq %rbx, %r12
jb 0x38440
jmp 0x38514
movsbl (%r15), %edi
callq 0x3d3b0
testq %rbp, %rbp
je 0x38511
cmpb $0xa, (%r15)
jne 0x38511
movq %rbp, %r12
movl $0x20, %edi
callq 0x3d3b0
decq %r12
jne 0x38502
incq %r15
cmpq %rbx, %r15
jb 0x384eb
movl $0xa, %edi
callq 0x3d3b0
movq 0x30(%rsp), %rbx
cmpb $0x0, 0x4a(%rbx)
movq 0x20(%rsp), %r12
movq 0x18(%rsp), %r15
jne 0x3870c
movl (%rbx), %eax
cmpq $0xc, %rax
ja 0x3870c
leaq 0xa9361(%rip), %rcx     # 0xe18b0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0xaa19a(%rip), %rdi     # 0xe26f9
movq (%rsp), %rsi
leaq 0xb65cd(%rip), %rdx     # 0xeeb37
xorl %eax, %eax
callq 0xb070
movq 0x20(%rbx), %rdi
testq %rdi, %rdi
je 0x38700
cmpb $0x0, (%rdi)
jne 0x38707
jmp 0x38700
leaq 0xaa166(%rip), %rdi     # 0xe26f9
movq (%rsp), %rsi
leaq 0xb6599(%rip), %rdx     # 0xeeb37
xorl %eax, %eax
callq 0xb070
movl 0x20(%rbx), %esi
movl %esi, %eax
negl %eax
jo 0x38700
leaq 0xc61a1(%rip), %rdi     # 0xfe75a
jmp 0x3861b
cmpb $0x0, 0x20(%rbx)
leaq 0xd1f65(%rip), %rcx     # 0x10a52b
leaq 0xa95ff(%rip), %rax     # 0xe1bcc
cmovneq %rax, %rcx
leaq 0xaa10f(%rip), %rdi     # 0xe26e7
movq (%rsp), %rsi
leaq 0xb6554(%rip), %rdx     # 0xeeb37
xorl %eax, %eax
callq 0xb070
jmp 0x3870c
leaq 0xaa103(%rip), %rdi     # 0xe26f9
movq (%rsp), %rsi
leaq 0xb6536(%rip), %rdx     # 0xeeb37
xorl %eax, %eax
callq 0xb070
movl 0x20(%rbx), %esi
cmpl $-0x1, %esi
je 0x38700
leaq 0xd3a23(%rip), %rdi     # 0x10c03e
xorl %eax, %eax
callq 0xb070
jmp 0x3870c
leaq 0xaa0cb(%rip), %rdi     # 0xe26f9
movq (%rsp), %rsi
leaq 0xb64fe(%rip), %rdx     # 0xeeb37
xorl %eax, %eax
callq 0xb070
movq 0x20(%rbx), %rsi
movq %rsi, %rax
negq %rax
jo 0x38700
leaq 0xaa0b1(%rip), %rdi     # 0xe2708
jmp 0x386f7
leaq 0xaa096(%rip), %rdi     # 0xe26f9
movq (%rsp), %rsi
leaq 0xb64c9(%rip), %rdx     # 0xeeb37
xorl %eax, %eax
callq 0xb070
movsd 0x20(%rbx), %xmm0
ucomisd 0xa9266(%rip), %xmm0    # 0xe18e8
jne 0x38686
jnp 0x38700
leaq 0xaa9f0(%rip), %rdi     # 0xe307d
movb $0x1, %al
callq 0xb070
jmp 0x3870c
leaq 0xaa05c(%rip), %rdi     # 0xe26f9
movq (%rsp), %rsi
leaq 0xb648f(%rip), %rdx     # 0xeeb37
xorl %eax, %eax
callq 0xb070
movq 0x20(%rbx), %rsi
cmpq $-0x1, %rsi
je 0x38700
movq 0x28(%rbx), %rdx
leaq 0xb02f3(%rip), %rdi     # 0xe89b7
xorl %eax, %eax
callq 0xb070
jmp 0x3870c
leaq 0xaa025(%rip), %rdi     # 0xe26f9
movq (%rsp), %rsi
leaq 0xb6458(%rip), %rdx     # 0xeeb37
xorl %eax, %eax
callq 0xb070
movq 0x20(%rbx), %rsi
cmpq $-0x1, %rsi
je 0x38700
leaq 0xc923d(%rip), %rdi     # 0x101934
xorl %eax, %eax
callq 0xb070
jmp 0x3870c
leaq 0xa94d1(%rip), %rdi     # 0xe1bd8
callq 0x3d3c2
incq %r14
movq 0x18(%r12), %rdi
callq 0x6f310
cmpq %rax, %r14
jb 0x38394
movq 0x30(%r12), %rax
testq %rax, %rax
je 0x38742
movq (%r12), %rdi
movq 0x38(%r12), %rsi
movq 0x10(%rsp), %rdx
callq *%rax
movl %eax, %ebp
testl %eax, %eax
jne 0x38792
cmpb $0x1, 0x29(%r12)
jne 0x3876f
movq (%r12), %r14
movq %r14, %rdi
movl $0x20, %esi
callq 0x729bc
addq %rax, %r14
leaq 0xa9fa8(%rip), %rdi     # 0xe270d
movq %r14, %rsi
xorl %eax, %eax
callq 0xb070
movq 0x48(%r12), %rax
testq %rax, %rax
leaq 0xa9519(%rip), %rsi     # 0xe1c97
cmovneq %rax, %rsi
leaq 0xa9fc0(%rip), %rdi     # 0xe2749
xorl %ebp, %ebp
xorl %eax, %eax
callq 0xb070
movl %ebp, %eax
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0xd0d3
callq 0xd09a
callq 0xd10c
callq 0xd061
callq 0xd028