user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<file_menu>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movq   $0x0,-0x50(%rbp)
  movq   $0x0,-0x48(%rbp)
  movq   $0x0,-0x40(%rbp)
  movq   $0x0,-0x38(%rbp)
  movq   $0x0,-0x30(%rbp)
  movq   $0x0,-0x28(%rbp)
  movq   $0x0,-0x20(%rbp)
  movq   $0x0,-0x18(%rbp)
  movb   $0x0,-0x52(%rbp)
  lea    D45(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D71(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D2(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D50(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D45(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D54(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0x53(%rbp),%rax
  mov    %rax,%rsi
  lea    D22(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  lea    D44(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L98
L80:
  mov    $0x0,%eax
  call   <getchar@plt>
  mov    %al,-0x51(%rbp)
  cmpb   $0xa,-0x51(%rbp)
  je     L79
  movsbl -0x52(%rbp),%eax
  cltq
  movzbl -0x51(%rbp),%edx
  mov    %dl,-0x50(%rbp,%rax,1)
  movzbl -0x52(%rbp),%eax
  add    $0x1,%eax
  mov    %al,-0x52(%rbp)
  jmp    L98
L79:
  movsbl -0x52(%rbp),%eax
  cltq
  movb   $0x0,-0x50(%rbp,%rax,1)
  jmp    L17
L98:
  cmpb   $0x3f,-0x52(%rbp)
  jle    L80
L17:
  movzbl -0x53(%rbp),%eax
  movsbl %al,%eax
  cmp    $0x1,%eax
  je     L65
  cmp    $0x2,%eax
  je     L99
  jmp    L33
L65:
  lea    -0x50(%rbp),%rax
  mov    %rax,%rdi
  call   <db_create@plt>
  lea    -0x50(%rbp),%rax
  mov    %rax,%rdi
  call   <db_check@plt>
  jmp    L33
L99:
  lea    -0x50(%rbp),%rax
  mov    %rax,%rdi
  call   <db_check@plt>
  mov    $0x0,%eax
  call   <CreateLUT@plt>
  mov    $0x0,%eax
  call   <PrintAll@plt>
  nop
L33:
  nop
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L12
  call   <__stack_chk_fail@plt>
L12:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D45
data_type: string
name: unpack_data
arguments: data_tag: D71
data_type: string
name: unpack_data
arguments: data_tag: D2
data_type: string
name: unpack_data
arguments: data_tag: D50
data_type: string
name: unpack_data
arguments: data_tag: D54
data_type: string
name: unpack_data
arguments: data_tag: D22
data_type: string
name: unpack_data
arguments: data_tag: D44
data_type: string

tool: D45: * * * * * * * * * * * * * * * * * * *


tool: D71: *           File Menu               *


tool: D2: * 1. Create a new database          *


tool: D50: * 2. Open a CSV database            *


tool: D54: Please enter your choice:

tool: D22: %d

tool: D44: Please enter the filename of your database.


assistant: ```c
int file_menu() {
  char filename[64] = {0}, countX = 0, temp, sel;
  printf("* * * * * * * * * * * * * * * * * * *\n");
  printf("*           File Menu               *\n");
  printf("* 1. Create a new database          *\n");
  printf("* 2. Open a CSV database            *\n");
  printf("* * * * * * * * * * * * * * * * * * *\n");
  printf("Please enter your choice:");
  scanf("%d", &sel);
  getchar();
  printf("Please enter the filename of your database.\n");
  while (countX < 64) {
    temp = getchar();
    if (temp != '\n') {
      filename[countX] = temp;
      countX++;
    } else {
      filename[countX] = 0;
      break;
    }
  }
  switch (sel) {
  case 1: {
    db_create(filename);
    db_check(filename);
    break;
  }
  case 2:
    db_check(filename);
    CreateLUT();
    PrintAll();
    break;
  }
}
```