user: Converte this assembly snippet into its equivalent C code:

```asm
<atoboolean>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x18(%rbp)
  movl   $0x0,-0x4(%rbp)
  mov    -0x18(%rbp),%rax
  lea    D26(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L111
  mov    -0x18(%rbp),%rax
  lea    D21(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L111
  mov    -0x18(%rbp),%rax
  lea    D96(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L111
  mov    -0x18(%rbp),%rax
  lea    D9(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L111
  mov    -0x18(%rbp),%rax
  lea    D51(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L70
L111:
  movl   $0x0,-0x4(%rbp)
  jmp    L105
L70:
  mov    -0x18(%rbp),%rax
  lea    D95(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L83
  mov    -0x18(%rbp),%rax
  lea    D41(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L83
  mov    -0x18(%rbp),%rax
  lea    D80(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L83
  mov    -0x18(%rbp),%rax
  lea    D88(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L83
  mov    -0x18(%rbp),%rax
  lea    D17(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L68
L83:
  movl   $0x1,-0x4(%rbp)
  jmp    L105
L68:
  mov    -0x18(%rbp),%rax
  mov    %rax,%rsi
  lea    D99(%rip),%rax
  mov    %rax,%rdi
  call   <Sys_Printf@plt>
L105:
  mov    -0x4(%rbp),%eax
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D26
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D21
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D96
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D9
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D51
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D95
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D41
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D80
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D88
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D17
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D99
type_infered: string

tool: D26: false

tool: D21: low

tool: D96: no

tool: D9: off

tool: D51: 0

tool: D95: true

tool: D41: high

tool: D80: yes

tool: D88: on

tool: D17: 1

tool: D99: Invalid value `%s'


assistant: ```c
int atoboolean(const char *var) {
  int value = 0;
  if (!strcasecmp(var, "false") || !strcasecmp(var, "low") || !strcasecmp(var, "no") || !strcasecmp(var, "off") || !strcmp(var, "0"))
    value = 0;
  else if (!strcasecmp(var, "true") || !strcasecmp(var, "high") || !strcasecmp(var, "yes") || !strcasecmp(var, "on") || !strcmp(var, "1"))
    value = 1;
  else
    Sys_Printf("Invalid value `%s'\n", var);
  return value;
}
```