// File: /workspace/github_c_makefile_star2_O1/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 $0x48, %rsp
movl %esi, %r12d
movq %rdi, %r15
testq %rdx, %rdx
je 0x38ab1
movq %rdx, %rdi
movq %rdx, %rbx
callq 0x3566a
movq %rbx, %rdx
testb %al, %al
jne 0x38ffb
movq %rdx, 0x18(%rsp)
leal -0x4(%r12), %eax
cmpl $0x2, %eax
ja 0x38ff1
movq 0x18(%r15), %rdi
callq 0x6ecda
xorl %ebp, %ebp
testq %rax, %rax
je 0x38b30
xorl %r14d, %r14d
movq 0x18(%r15), %rdi
movq %r14, %rsi
callq 0x6e9fa
movq (%rax), %rbx
cmpl $0x4, %r12d
jne 0x38af2
cmpb $0x0, 0x4d(%rbx)
jne 0x38b1f
movb 0x4e(%rbx), %al
cmpl $0x6, %r12d
jne 0x38b01
testb %al, %al
jne 0x38b05
jmp 0x38b1f
testb %al, %al
jne 0x38b1f
movq 0x8(%rbx), %rdi
callq 0x3c434
cmpq %rbp, %rax
jbe 0x38b1f
movq 0x8(%rbx), %rdi
callq 0x3c434
movq %rax, %rbp
incq %r14
movq 0x18(%r15), %rdi
callq 0x6ecda
cmpq %rax, %r14
jb 0x38ad7
testq %rbp, %rbp
je 0x38ff6
movq (%r15), %rsi
movq 0x8(%r15), %rdx
leaq 0xa9b85(%rip), %rdi     # 0xe26cc
xorl %eax, %eax
callq 0xb070
movq 0x10(%r15), %rsi
leaq 0xa9b81(%rip), %rdi     # 0xe26da
xorl %eax, %eax
callq 0xb070
movq 0x18(%r15), %rdi
callq 0x6ecda
testq %rax, %rax
je 0x38f69
leaq 0x2(%rbp), %r13
movl $0x4e, %ecx
subq %rbp, %rcx
testq %rcx, %rcx
movl $0x0, %edx
movq %rcx, 0x10(%rsp)
cmovgq %rcx, %rdx
movq %rdx, 0x38(%rsp)
xorl %ebx, %ebx
movq %r15, 0x30(%rsp)
movq %r12, 0x28(%rsp)
movq %rbp, 0x20(%rsp)
movq %r13, (%rsp)
movq 0x18(%r15), %rdi
movq %rbx, %rsi
callq 0x6e9fa
movq (%rax), %rcx
cmpl $0x4, %r12d
jne 0x38bc8
cmpb $0x0, 0x4d(%rcx)
jne 0x38f54
cmpl $0x6, %r12d
sete %al
xorb 0x4e(%rcx), %al
jne 0x38f54
movq %rbx, 0x40(%rsp)
movq 0x8(%rcx), %rdi
movq %rcx, %rbx
callq 0x3c40b
movq %rax, %r13
movq 0x8(%rbx), %rdi
callq 0x3c434
movl %ebp, %edx
subl %eax, %edx
leaq 0xa9adf(%rip), %rdi     # 0xe26df
movq %r13, %rsi
movq (%rsp), %r13
leaq 0xb5f71(%rip), %rcx     # 0xeeb7f
xorl %eax, %eax
callq 0xb070
movq 0x10(%rbx), %rdi
callq 0x3c40b
movq %rax, %rbp
movq %rbx, 0x8(%rsp)
movq 0x10(%rbx), %rdi
callq 0x3c434
cmpq $0x4f, %r13
ja 0x38fec
leaq (%rax,%rbp), %rbx
cmpq 0x38(%rsp), %rax
jle 0x38d1a
movq %rbp, %rax
addq 0x10(%rsp), %rax
xorl %r12d, %r12d
cmpq %rbp, %rax
jb 0x38c6a
movzbl (%rax), %ecx
cmpl $0xa, %ecx
je 0x38c6a
cmpl $0x20, %ecx
je 0x38c6a
decq %rax
jmp 0x38c53
movq %rbp, %r13
subq %rax, %r13
jae 0x38c99
xorl %r14d, %r14d
xorl %r15d, %r15d
movsbl (%rbp,%r14), %edi
callq 0x3dd24
cmpb $0xa, (%rbp,%r14)
je 0x38c9f
decq %r15
incq %r14
cmpq %r15, %r13
jne 0x38c78
subq %r15, %rbp
movq (%rsp), %r13
jmp 0x38cc3
movq (%rsp), %r13
testq %r13, %r13
je 0x38cba
movq %r13, %r14
movl $0x20, %edi
callq 0x3dd24
decq %r14
jne 0x38cab
subq %r15, %rbp
incq %rbp
movb $0x1, %r12b
testb $0x1, %r12b
je 0x38cce
xorl %r12d, %r12d
jmp 0x38d04
movzbl (%rbp), %eax
cmpl $0xa, %eax
je 0x38ce0
cmpl $0x20, %eax
jne 0x38fe7
incq %rbp
movl $0xa, %edi
callq 0x3dd24
testq %r13, %r13
je 0x38d04
movq %r13, %r14
movl $0x20, %edi
callq 0x3dd24
decq %r14
jne 0x38cf5
cmpq %rbx, %rbp
jae 0x38d1a
movq 0x10(%rsp), %rax
addq %rbp, %rax
cmpq %rbx, %rax
jb 0x38c53
cmpq %rbx, %rbp
movq 0x30(%rsp), %r15
movq 0x28(%rsp), %r12
jae 0x38d57
movsbl (%rbp), %edi
callq 0x3dd24
testq %r13, %r13
je 0x38d4f
cmpb $0xa, (%rbp)
jne 0x38d4f
movq %r13, %r14
movl $0x20, %edi
callq 0x3dd24
decq %r14
jne 0x38d40
incq %rbp
cmpq %rbx, %rbp
jb 0x38d29
movl $0xa, %edi
callq 0x3dd24
movq 0x8(%rsp), %rdx
cmpb $0x0, 0x4a(%rdx)
movq 0x20(%rsp), %rbp
movq 0x40(%rsp), %rbx
jne 0x38f54
movl (%rdx), %eax
cmpq $0xc, %rax
ja 0x38f54
leaq 0xa8b23(%rip), %rcx     # 0xe18b0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0xa995c(%rip), %rdi     # 0xe26f9
movl %ebp, %esi
movq %rdx, %r14
leaq 0xb5dd6(%rip), %rdx     # 0xeeb7f
xorl %eax, %eax
callq 0xb070
movq 0x20(%r14), %rdi
testq %rdi, %rdi
je 0x38f48
cmpb $0x0, (%rdi)
jne 0x38f4f
jmp 0x38f48
leaq 0xa9927(%rip), %rdi     # 0xe26f9
movl %ebp, %esi
movq %rdx, %r14
leaq 0xb5da1(%rip), %rdx     # 0xeeb7f
xorl %eax, %eax
callq 0xb070
movl 0x20(%r14), %esi
movl %esi, %eax
negl %eax
jo 0x38f48
leaq 0xc59c0(%rip), %rdi     # 0xfe7ba
jmp 0x38e5c
cmpb $0x0, 0x20(%rdx)
leaq 0xd1904(%rip), %rcx     # 0x10a70b
leaq 0xa8dbe(%rip), %rax     # 0xe1bcc
cmovneq %rax, %rcx
leaq 0xa98ce(%rip), %rdi     # 0xe26e7
movl %ebp, %esi
leaq 0xb5d5d(%rip), %rdx     # 0xeeb7f
xorl %eax, %eax
callq 0xb070
jmp 0x38f54
leaq 0xa98c4(%rip), %rdi     # 0xe26f9
movl %ebp, %esi
movq %rdx, %r14
leaq 0xb5d3e(%rip), %rdx     # 0xeeb7f
xorl %eax, %eax
callq 0xb070
movl 0x20(%r14), %esi
cmpl $-0x1, %esi
je 0x38f48
leaq 0xd33c2(%rip), %rdi     # 0x10c21e
xorl %eax, %eax
callq 0xb070
jmp 0x38f54
leaq 0xa988a(%rip), %rdi     # 0xe26f9
movl %ebp, %esi
movq %rdx, %r14
leaq 0xb5d04(%rip), %rdx     # 0xeeb7f
xorl %eax, %eax
callq 0xb070
movq 0x20(%r14), %rsi
movq %rsi, %rax
negq %rax
jo 0x38f48
leaq 0xa986f(%rip), %rdi     # 0xe2708
jmp 0x38f3f
leaq 0xa9854(%rip), %rdi     # 0xe26f9
movl %ebp, %esi
movq %rdx, %r14
leaq 0xb5cce(%rip), %rdx     # 0xeeb7f
xorl %eax, %eax
callq 0xb070
movsd 0x20(%r14), %xmm0
ucomisd 0xa8a22(%rip), %xmm0    # 0xe18e8
jne 0x38eca
jnp 0x38f48
leaq 0xaa1cc(%rip), %rdi     # 0xe309d
movb $0x1, %al
callq 0xb070
jmp 0x38f54
leaq 0xa9818(%rip), %rdi     # 0xe26f9
movl %ebp, %esi
leaq 0xb5c95(%rip), %rdx     # 0xeeb7f
xorl %eax, %eax
callq 0xb070
movq 0x8(%rsp), %rax
movq 0x20(%rax), %rsi
cmpq $-0x1, %rsi
je 0x38f48
movq 0x28(%rax), %rdx
leaq 0xafafe(%rip), %rdi     # 0xe8a09
xorl %eax, %eax
callq 0xb070
jmp 0x38f54
leaq 0xa97de(%rip), %rdi     # 0xe26f9
movl %ebp, %esi
movq %rdx, %r14
leaq 0xb5c58(%rip), %rdx     # 0xeeb7f
xorl %eax, %eax
callq 0xb070
movq 0x20(%r14), %rsi
cmpq $-0x1, %rsi
je 0x38f48
leaq 0xc8a81(%rip), %rdi     # 0x1019c0
xorl %eax, %eax
callq 0xb070
jmp 0x38f54
leaq 0xa8c89(%rip), %rdi     # 0xe1bd8
callq 0x3dd36
incq %rbx
movq 0x18(%r15), %rdi
callq 0x6ecda
cmpq %rax, %rbx
jb 0x38ba9
movq 0x30(%r15), %rax
testq %rax, %rax
movl $0x0, %ebx
je 0x38f87
movq (%r15), %rdi
movq 0x38(%r15), %rsi
movq 0x18(%rsp), %rdx
callq *%rax
movl %eax, %ebx
testl %ebx, %ebx
jne 0x38fd6
cmpb $0x1, 0x29(%r15)
jne 0x38fb6
movq (%r15), %r14
movq %r14, %rdi
movl $0x20, %esi
callq 0x723d8
addq %rax, %r14
leaq 0xa9761(%rip), %rdi     # 0xe270d
movq %r14, %rsi
xorl %eax, %eax
callq 0xb070
movq 0x48(%r15), %rax
testq %rax, %rax
leaq 0xa8cd3(%rip), %rsi     # 0xe1c97
cmovneq %rax, %rsi
leaq 0xa977a(%rip), %rdi     # 0xe2749
xorl %eax, %eax
callq 0xb070
movl %ebx, %eax
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0xd0d3
callq 0xd09a
callq 0xd061
callq 0xd10c
callq 0xd028