user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<main>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0xf8,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0xe8(%rsp)
  xor    %eax,%eax
  movl   $0x0,0xc(%rsp)
  cmp    $0x3,%edi
  jne    L13
  mov    %rsi,%rbx
  lea    0x10(%rsp),%rbp
  mov    0x8(%rsi),%rsi
  lea    0x80(%rsp),%r13
  mov    %rbp,%rdi
  call   <strcpy@plt>
  mov    0x10(%rbx),%rsi
  mov    %r13,%rdi
  call   <strcpy@plt>
L41:
  lea    D6(%rip),%rsi
  mov    %rbp,%rdi
  call   <fopen@plt>
  mov    %rax,%r12
  test   %rax,%rax
  je     L2
L87:
  lea    D60(%rip),%rsi
  mov    %r13,%rdi
  call   <fopen@plt>
  mov    %rax,%rbp
  test   %rax,%rax
  je     L46
L77:
  mov    0xc(%rsp),%edx
  test   %edx,%edx
  jne    L5
  lea    0xc(%rsp),%rbx
L14:
  mov    %rbx,%rsi
  mov    %r12,%rdi
  call   <read_a_paragraph@plt>
  mov    %rbp,%rsi
  mov    %rax,%rdi
  call   <write_a_paragraph@plt>
  mov    0xc(%rsp),%eax
  test   %eax,%eax
  je     L14
L5:
  mov    %r12,%rdi
  call   <fclose@plt>
  mov    %rbp,%rdi
  call   <fclose@plt>
  mov    0xe8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L47
  add    $0xf8,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L13:
  lea    D0(%rip),%rdi
  lea    0x10(%rsp),%rbp
  call   <printf@plt>
  lea    D8(%rip),%rsi
  xor    %eax,%eax
  lea    D5(%rip),%rdi
  call   <printf@plt>
  mov    $0x1,%edi
  lea    0x80(%rsp),%r13
  call   <exit@plt>
  jmp    L41
L46:
  mov    %r13,%rsi
  lea    D62(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x2,%edi
  call   <exit@plt>
  jmp    L77
L2:
  mov    %rbp,%rsi
  lea    D62(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x2,%edi
  call   <exit@plt>
  jmp    L87
L47:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: label: D6
data_type: string
name: parse_data
arguments: label: D60
data_type: string
name: parse_data
arguments: label: D0
data_type: string
name: parse_data
arguments: label: D8
data_type: string
name: parse_data
arguments: label: D5
data_type: string
name: parse_data
arguments: label: D62
data_type: string

tool: D6: rt

tool: D60: wt

tool: D0: 

usage: para in-file out-file 

tool: D8: Para Version 1 - January 1999

tool: D5: 
%s


tool: D62: 
ERROR Could not open file %s

assistant: ```c
int main(int argc, char *argv[]) {
  char in_file_name[100], out_file_name[100], title[100];
  FILE *in_file, *out_file;
  int double_space = 0, file_done = 0, i, line_counter = 0, lines = 66, page_counter = 1, print_date = 0, print_page = 0, print_title = 0;
  struct word_list_struct *word_list, *temp;
  if (argc != 3) {
    printf("\n\nusage: para in-file out-file ");
    printf("\n%s\n", "Para Version 1 - January 1999");
    exit(1);
  }
  if (argc == 3) {
    strcpy(in_file_name, argv[1]);
    strcpy(out_file_name, argv[2]);
  }
  if ((in_file = fopen(in_file_name, "rt")) == NULL) {
    printf("\nERROR Could not open file %s", in_file_name);
    exit(2);
  }
  if ((out_file = fopen(out_file_name, "wt")) == NULL) {
    printf("\nERROR Could not open file %s", out_file_name);
    exit(2);
  }
  while (file_done == 0) {
    word_list = read_a_paragraph(in_file, &file_done);
    write_a_paragraph(word_list, out_file);
  }
  fclose(in_file);
  fclose(out_file);
}
```