user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<usage>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    %rsi,-0x10(%rbp)
  mov    %rdx,-0x18(%rbp)
  mov    -0x8(%rbp),%rdx
  mov    -0x10(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <version@plt>
  cmpq   $0x0,-0x8(%rbp)
  jne    L6
  mov    -0x18(%rbp),%rdx
  mov    -0x10(%rbp),%rax
  lea    D29(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  jmp    L26
L6:
  mov    -0x8(%rbp),%rax
  lea    D20(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L17
  mov    -0x18(%rbp),%rdx
  mov    -0x10(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <print_usage@plt>
  jmp    L26
L17:
  mov    -0x8(%rbp),%rax
  lea    D14(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L66
  mov    -0x18(%rbp),%rdx
  mov    -0x10(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <update_usage@plt>
  jmp    L26
L66:
  mov    -0x8(%rbp),%rax
  lea    D12(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L26
  mov    -0x18(%rbp),%rdx
  mov    -0x10(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <search_usage@plt>
L26:
  nop
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D29
type_infered: string
name: unpack_data
arguments: data_tag: D20
type_infered: string
name: unpack_data
arguments: data_tag: D14
type_infered: string
name: unpack_data
arguments: data_tag: D12
type_infered: string

tool: D29: Usage: %s [OPTS] [COMMAND [COMMANDOPTS]]

Options:
  -v,--verbose            Increase verbosity
  -s,--silent             Decrease verbosity
  -h,--help     COMMAND   Print this help or the command specific
  --version               Print the version

  -c,--config      FILE   Use the specified config
  -d,--db          FILE   Use the specified database
  -b,--verbose-db         Write the database in verbose format (debugging only)
  -B,--binary-db          Write the database in binary format (default)
  -r,--libraryroot FILE   User FILE as the database root

  -e,--exclude     GLOB   Add GLOB to the exclusion list
  -f,--format      FMT    Format the output with FMT
  -x,--fix-fs             Stay within one filesystem
  -X,--no-fix-fs          Allow indexing across filesystems

Commands (default: update)
  print                   Print the database
  update                  Update the database
  search                  Search the database


tool: D20: print

tool: D14: update

tool: D12: search

assistant: ```c
void usage(char *cmd, FILE *out, char *arg0) {
  version(out, cmd);
  if (cmd == NULL) {
    fprintf(out,
            "Usage: %s [OPTS] [COMMAND [COMMANDOPTS]]\n"
            "\n"
            "Options:\n"
            "  -v,--verbose            Increase verbosity\n"
            "  -s,--silent             Decrease verbosity\n"
            "  -h,--help     COMMAND   Print this help or the command specific\n"
            "  --version               Print the version\n"
            "\n"
            "  -c,--config      FILE   Use the specified config\n"
            "  -d,--db          FILE   Use the specified database\n"
            "  -b,--verbose-db         Write the database in verbose format (debugging only)\n"
            "  -B,--binary-db          Write the database in binary format (default)\n"
            "  -r,--libraryroot FILE   User FILE as the database root\n\n"
            "  -e,--exclude     GLOB   Add GLOB to the exclusion list\n"
            "  -f,--format      FMT    Format the output with FMT\n"
            "  -x,--fix-fs             Stay within one filesystem\n"
            "  -X,--no-fix-fs          Allow indexing across filesystems\n"
            "\n"
            "Commands (default: update)\n"
            "  print                   Print the database\n"
            "  update                  Update the database\n"
            "  search                  Search the database\n",
            arg0);
  } else if (strcmp(cmd, "print") == 0) {
    print_usage(out, arg0);
  } else if (strcmp(cmd, "update") == 0) {
    update_usage(out, arg0);
  } else if (strcmp(cmd, "search") == 0) {
    search_usage(out, arg0);
  }
}
```