user: Translate the below assembly code into C programming language:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %edi,-0x4(%rbp)
  mov    %rsi,-0x10(%rbp)
  cmpl   $0x2,-0x4(%rbp)
  je     L102
  cmpl   $0x1,-0x4(%rbp)
  jne    L70
L102:
  lea    D29(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0x0,%edi
  call   <exit@plt>
  jmp    L22
L70:
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  lea    D75(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L61
  mov    -0x10(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <gs@plt>
  mov    $0x0,%eax
  call   <s2b@plt>
  mov    -0x10(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <pb@plt>
  jmp    L22
L61:
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  lea    D2(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L51
  mov    -0x10(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <lb@plt>
  mov    $0x0,%eax
  call   <b2i@plt>
  mov    $0x0,%eax
  call   <id@plt>
  jmp    L22
L51:
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  lea    D39(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L59
  mov    -0x10(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <gs@plt>
  mov    $0x0,%eax
  call   <s2b@plt>
  lea    D52(%rip),%rax
  mov    %rax,%rdi
  call   <pb@plt>
  lea    D52(%rip),%rax
  mov    %rax,%rdi
  call   <lb@plt>
  mov    $0x0,%eax
  call   <b2i@plt>
  mov    $0x0,%eax
  call   <id@plt>
  jmp    L22
L59:
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  lea    D8(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L12
  mov    -0x10(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <lb@plt>
  mov    $0x0,%eax
  call   <b2i@plt>
  mov    $0x0,%eax
  call   <debug@plt>
  jmp    L22
L12:
  lea    D63(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
L22:
  mov    $0x0,%eax
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D29
data_type: string
name: parse_data
arguments: data_tag: D75
data_type: string
name: parse_data
arguments: data_tag: D2
data_type: string
name: parse_data
arguments: data_tag: D39
data_type: string
name: parse_data
arguments: data_tag: D52
data_type: string
name: parse_data
arguments: data_tag: D8
data_type: string
name: parse_data
arguments: data_tag: D63
data_type: string

tool: D29: Too few arguments

tool: D75: -c

tool: D2: -e

tool: D39: -i

tool: D52: temp.byte

tool: D8: --debug

tool: D63: Wrong arguments.

assistant: ```c
int main(int argc, char *argv[]) {
  FILE *prog_file;
  int i, c;
  if (!(argc - 2) || !(argc - 1)) {
    puts("Too few arguments");
    exit(0);
  } else if (!strcmp(argv[1], "-c")) {
    gs(argv[2]);
    s2b();
    pb(argv[3]);
  } else if (!strcmp(argv[1], "-e")) {
    lb(argv[2]);
    b2i();
    id();
  } else if (!strcmp(argv[1], "-i")) {
    gs(argv[2]);
    s2b();
    pb("temp.byte");
    lb("temp.byte");
    b2i();
    id();
  } else if (!strcmp(argv[1], "--debug")) {
    lb(argv[2]);
    b2i();
    debug();
  } else {
    puts("Wrong arguments.");
  }
}
```