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

```asm
<ascii2dec>:
  endbr64
  push   %r15
  xor    %r15d,%r15d
  push   %r14
  mov    $0x1,%r14d
  push   %r13
  lea    D12(%rip),%r13
  push   %r12
  mov    %edi,%r12d
  push   %rbp
  mov    %rsi,%rbp
  push   %rbx
  xor    %ebx,%ebx
  sub    $0x18,%rsp
  mov    %rdx,0x8(%rsp)
  jmp    L42
  nopl   0x0(%rax)
L114:
  cmp    $0x72,%eax
  cmove  %r14d,%ebx
L42:
  mov    %r13,%rdx
  mov    %rbp,%rsi
  mov    %r12d,%edi
  call   <getopt@plt>
  cmp    $0xffffffff,%eax
  je     L54
  cmp    $0x68,%eax
  jne    L114
  mov    $0x1,%r15d
  jmp    L42
  nop
L54:
  test   %r15d,%r15d
  jne    L58
  test   %ebx,%ebx
  je     L64
  cmp    $0x2,%r12d
  jle    L120
  lea    D32(%rip),%rdi
  call   <printf@plt>
  jmp    L157
  nopl   (%rax)
L64:
  cmp    $0x1,%r12d
  jle    L124
  lea    D22(%rip),%rdi
  call   <printf@plt>
L157:
  mov    $0x1,%r13d
  lea    D19(%rip),%r14
  jmp    L101
  nopl   (%rax)
L18:
  mov    %r14,%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L109
  mov    0x0(%rbp,%r13,8),%rdi
  mov    $0xa,%esi
  call   <convertToAscii@plt>
L109:
  add    $0x1,%r13
  cmp    %r13d,%r12d
  jle    L92
L101:
  mov    0x0(%rbp,%r13,8),%rdi
  test   %ebx,%ebx
  jne    L18
  mov    $0xa,%esi
  call   <convertFromAscii@plt>
  jmp    L109
  nopw   0x0(%rax,%rax,1)
L58:
  mov    0x8(%rsp),%rdi
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    10c0 <showUsage@plt>
  nopl   0x0(%rax,%rax,1)
L120:
  mov    0x8(%rsp),%rdi
  call   <noArgument@plt>
  cmp    $0x2,%r12d
  je     L157
  jmp    L92
  cs nopw 0x0(%rax,%rax,1)
L124:
  mov    0x8(%rsp),%rdi
  call   <noArgument@plt>
L92:
  add    $0x18,%rsp
  lea    D17(%rip),%rdi
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    10d0 <printf@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D12
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D32
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D22
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D19
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D17
type_infered: string

tool: D12: rh

tool: D32: ASCII: 

tool: D22: DEC: 

tool: D19: -r

tool: D17: 


assistant: ```c
void ascii2dec(int argc, char **argv, char *applet) {
  int opt = 0;
  bool reverse = false;
  bool pr_help = false;
  while ((opt = getopt(argc, argv, "rh")) != -1) {
    switch (opt) {
    case 'r':
      reverse = true;
      break;
    case 'h':
      pr_help = true;
      break;
    }
  }
  if (!pr_help) {
    if (reverse) {
      if (argc > 2) {
        printf("ASCII: ");
      } else {
        noArgument(applet);
      }
    } else {
      if (argc > 1) {
        printf("DEC: ");
      } else {
        noArgument(applet);
      }
    }
    for (int i = 1; i < argc; i++) {
      if (reverse) {
        if (strcmp(argv[i], "-r") == 0) {
          continue;
        }
        convertToAscii(argv[i], 10);
      } else {
        convertFromAscii(argv[i], 10);
      }
    }
    printf("\n");
  } else {
    showUsage(applet);
  }
}
```