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

```asm
<general_help>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x1,-0xc(%rbp)
  lea    -0xc(%rbp),%rax
  mov    %rax,%rsi
  lea    D84(%rip),%rax
  mov    %rax,%rdi
  call   <add_help_line@plt>
  lea    -0xc(%rbp),%rax
  mov    %rax,%rsi
  lea    D4(%rip),%rax
  mov    %rax,%rdi
  call   <add_help_line@plt>
  mov    -0xc(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0xc(%rbp)
  lea    -0xc(%rbp),%rax
  mov    %rax,%rsi
  lea    D76(%rip),%rax
  mov    %rax,%rdi
  call   <add_help_line@plt>
  mov    -0xc(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0xc(%rbp)
  lea    -0xc(%rbp),%rax
  mov    %rax,%rsi
  lea    D26(%rip),%rax
  mov    %rax,%rdi
  call   <add_help_line@plt>
  lea    -0xc(%rbp),%rax
  mov    %rax,%rsi
  lea    D54(%rip),%rax
  mov    %rax,%rdi
  call   <add_help_line@plt>
  mov    -0xc(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0xc(%rbp)
  lea    -0xc(%rbp),%rax
  mov    %rax,%rsi
  lea    D91(%rip),%rax
  mov    %rax,%rdi
  call   <add_help_line@plt>
  lea    -0xc(%rbp),%rax
  mov    %rax,%rsi
  lea    D21(%rip),%rax
  mov    %rax,%rdi
  call   <add_help_line@plt>
  lea    -0xc(%rbp),%rax
  mov    %rax,%rsi
  lea    D18(%rip),%rax
  mov    %rax,%rdi
  call   <add_help_line@plt>
  lea    -0xc(%rbp),%rax
  mov    %rax,%rsi
  lea    D13(%rip),%rax
  mov    %rax,%rdi
  call   <add_help_line@plt>
  lea    -0xc(%rbp),%rax
  mov    %rax,%rsi
  lea    D3(%rip),%rax
  mov    %rax,%rdi
  call   <add_help_line@plt>
  lea    -0xc(%rbp),%rax
  mov    %rax,%rsi
  lea    D31(%rip),%rax
  mov    %rax,%rdi
  call   <add_help_line@plt>
  lea    -0xc(%rbp),%rax
  mov    %rax,%rsi
  lea    D72(%rip),%rax
  mov    %rax,%rdi
  call   <add_help_line@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L8
  call   <__stack_chk_fail@plt>
L8:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D84
data_type: string
name: extract_symbolic_data
arguments: data_label: D4
data_type: string
name: extract_symbolic_data
arguments: data_label: D76
data_type: string
name: extract_symbolic_data
arguments: data_label: D26
data_type: string
name: extract_symbolic_data
arguments: data_label: D54
data_type: string
name: extract_symbolic_data
arguments: data_label: D91
data_type: string
name: extract_symbolic_data
arguments: data_label: D21
data_type: string
name: extract_symbolic_data
arguments: data_label: D18
data_type: string
name: extract_symbolic_data
arguments: data_label: D13
data_type: string
name: extract_symbolic_data
arguments: data_label: D3
data_type: string
name: extract_symbolic_data
arguments: data_label: D31
data_type: string
name: extract_symbolic_data
arguments: data_label: D72
data_type: string

tool: D84: [0-9] : Switch player view

tool: D4: Z[GHDPB] : Switch zone view

tool: D76: = : Load deck

tool: D26: p : Pass

tool: D54: d : Done

tool: D91: D : Draw

tool: D21: V : Show selected card

tool: D18: M[GDHPB] : Move card to zone

tool: D13: T : Tap selected card

tool: D3: c[0-9] : Transfer card control to player

tool: D31: S[0-9][0-9] : Put into play an x/x token

tool: D72: [+-] : Add/Remove a counter on a card

assistant: ```c
void general_help() {
  int i = 1;
  add_help_line("[0-9] : Switch player view", &i);
  add_help_line("Z[GHDPB] : Switch zone view", &i);
  i++;
  add_help_line("= : Load deck", &i);
  i++;
  add_help_line("p : Pass", &i);
  add_help_line("d : Done", &i);
  i++;
  add_help_line("D : Draw", &i);
  add_help_line("V : Show selected card", &i);
  add_help_line("M[GDHPB] : Move card to zone", &i);
  add_help_line("T : Tap selected card", &i);
  add_help_line("c[0-9] : Transfer card control to player", &i);
  add_help_line("S[0-9][0-9] : Put into play an x/x token", &i);
  add_help_line("[+-] : Add/Remove a counter on a card", &i);
}
```