user: Please show me the C implementation that matches the assembly code listed below:

```asm
<usage>:
  endbr64
  sub    $0x8,%rsp
  mov    %rdi,%rsi
  lea    D196(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D116(%rip),%rdi
  call   <puts@plt>
  lea    D175(%rip),%rdi
  call   <puts@plt>
  lea    D184(%rip),%rdi
  call   <puts@plt>
  lea    D53(%rip),%rdi
  call   <puts@plt>
  lea    D177(%rip),%rdi
  call   <puts@plt>
  lea    D206(%rip),%rdi
  call   <puts@plt>
  lea    D167(%rip),%rdi
  call   <puts@plt>
  lea    D133(%rip),%rdi
  call   <puts@plt>
  lea    D73(%rip),%rdi
  call   <puts@plt>
  lea    D211(%rip),%rdi
  call   <puts@plt>
  lea    D208(%rip),%rdi
  call   <puts@plt>
  lea    D149(%rip),%rdi
  call   <puts@plt>
  lea    D12(%rip),%rdi
  call   <puts@plt>
  lea    D7(%rip),%rdi
  call   <puts@plt>
  lea    D82(%rip),%rdi
  call   <puts@plt>
  lea    D126(%rip),%rdi
  call   <puts@plt>
  lea    D241(%rip),%rdi
  call   <puts@plt>
  lea    D148(%rip),%rdi
  call   <puts@plt>
  lea    D235(%rip),%rdi
  call   <puts@plt>
  lea    D205(%rip),%rdi
  call   <puts@plt>
  lea    D60(%rip),%rdi
  call   <puts@plt>
  lea    D24(%rip),%rdi
  call   <puts@plt>
  lea    D190(%rip),%rdi
  call   <puts@plt>
  lea    D191(%rip),%rdi
  call   <puts@plt>
  add    $0x8,%rsp
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D196
data_type: string
name: unpack_data
arguments: data_tag: D116
data_type: string
name: unpack_data
arguments: data_tag: D175
data_type: string
name: unpack_data
arguments: data_tag: D184
data_type: string
name: unpack_data
arguments: data_tag: D53
data_type: string
name: unpack_data
arguments: data_tag: D177
data_type: string
name: unpack_data
arguments: data_tag: D206
data_type: string
name: unpack_data
arguments: data_tag: D167
data_type: string
name: unpack_data
arguments: data_tag: D133
data_type: string
name: unpack_data
arguments: data_tag: D73
data_type: string
name: unpack_data
arguments: data_tag: D211
data_type: string
name: unpack_data
arguments: data_tag: D208
data_type: string
name: unpack_data
arguments: data_tag: D149
data_type: string
name: unpack_data
arguments: data_tag: D12
data_type: string
name: unpack_data
arguments: data_tag: D7
data_type: string
name: unpack_data
arguments: data_tag: D82
data_type: string
name: unpack_data
arguments: data_tag: D126
data_type: string
name: unpack_data
arguments: data_tag: D241
data_type: string
name: unpack_data
arguments: data_tag: D148
data_type: string
name: unpack_data
arguments: data_tag: D235
data_type: string
name: unpack_data
arguments: data_tag: D205
data_type: string
name: unpack_data
arguments: data_tag: D60
data_type: string
name: unpack_data
arguments: data_tag: D24
data_type: string
name: unpack_data
arguments: data_tag: D190
data_type: string
name: unpack_data
arguments: data_tag: D191
data_type: string

tool: D196: usage: %s [options] command [args]


tool: D116: -h                 this help

tool: D175: -v                 increase verbosity

tool: D184: -q                 run quietly

tool: D53: -x                 print output in hex

tool: D177: -a                 autodetect mode, only print nonprintable fields as hex

tool: D206: -b                 print binary fields, including null characters

tool: D167: -k                 emit katcp log messages

tool: D133: -s server:port     specify server:port

tool: D73: -t seconds         set timeout

tool: D211: -p position        only print a particular argument number

tool: D208: -l label           set katcp log message module label

tool: D149: -r                 toggle printing of reply messages

tool: D12: -i                 toggle printing of inform messages

tool: D7: -m                 munge replies into log messages (requires -k)

tool: D82: -n                 suppress version information emitted on connect

tool: D126: return codes:

tool: D241: 0     command completed successfully

tool: D148: 1     command failed

tool: D235: 2     other errors

tool: D205: environment variables:

tool: D60:   KATCP_SERVER     default server (overridden by -s option)

tool: D24: notes:

tool: D190:   command and parameters have to be given as separate arguments

tool: D191:   hex and auto mode will convert parameters starting with 0x from hex to binary

assistant: ```c
void usage(char *app) {
  printf("usage: %s [options] command [args]\n", app);
  printf("-h                 this help\n");
  printf("-v                 increase verbosity\n");
  printf("-q                 run quietly\n");
  printf("-x                 print output in hex\n");
  printf("-a                 autodetect mode, only print nonprintable fields as hex\n");
  printf("-b                 print binary fields, including null characters\n");
  printf("-k                 emit katcp log messages\n");
  printf("-s server:port     specify server:port\n");
  printf("-t seconds         set timeout\n");
  printf("-p position        only print a particular argument number\n");
  printf("-l label           set katcp log message module label\n");
  printf("-r                 toggle printing of reply messages\n");
  printf("-i                 toggle printing of inform messages\n");
  printf("-m                 munge replies into log messages (requires -k)\n");
  printf("-n                 suppress version information emitted on connect\n");
  printf("return codes:\n");
  printf("0     command completed successfully\n");
  printf("1     command failed\n");
  printf("2     other errors\n");
  printf("environment variables:\n");
  printf("  KATCP_SERVER     default server (overridden by -s option)\n");
  printf("notes:\n");
  printf("  command and parameters have to be given as separate arguments\n");
  printf("  hex and auto mode will convert parameters starting with 0x from hex to binary\n");
}
```