user: 请将以下的汇编代码转换成C语言代码:

```asm
<isnotfound>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x218,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x208(%rsp)
  xor    %eax,%eax
  test   %rdi,%rdi
  je     L20
  mov    %rdi,%rbx
  mov    $0x0,%ebp
  cmpb   $0x0,(%rdi)
  jne    L65
L12:
  mov    0x208(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L37
  mov    %ebp,%eax
  add    $0x218,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L65:
  mov    %rsp,%rbp
  mov    %rdi,%rdx
  lea    D13(%rip),%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <isfexists@plt>
  mov    $0x1,%ebp
  test   %eax,%eax
  je     L12
  mov    %rsp,%rbp
  mov    %rbx,%rcx
  mov    %rbx,%rdx
  lea    D0(%rip),%rsi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  lea    D3(%rip),%rsi
  mov    %rbp,%rdi
  call   <popen@plt>
  mov    %rax,%r13
  test   %rax,%rax
  je     L7
  mov    $0x0,%ebx
  lea    0x100(%rsp),%rbp
  lea    D7(%rip),%r12
  lea    D1(%rip),%r15
  lea    D40(%rip),%r14
  jmp    L79
L47:
  mov    $0x0,%r8d
  mov    $0x0,%ecx
  mov    %r12,%rdx
  mov    %r15,%rsi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <strreplace@plt>
  test   %eax,%eax
  setg   %al
  movzbl %al,%eax
  add    %eax,%ebx
  mov    $0x0,%r8d
  mov    $0x0,%ecx
  mov    %r12,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <strreplace@plt>
  test   %eax,%eax
  setg   %al
  movzbl %al,%eax
  add    %eax,%ebx
L79:
  mov    %r13,%rdx
  mov    $0xff,%esi
  mov    %rbp,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  jne    L47
  test   %ebx,%ebx
  setg   %bpl
  movzbl %bpl,%ebp
  mov    %r13,%rdi
  call   <pclose@plt>
  jmp    L12
L20:
  mov    $0x0,%ebp
  jmp    L12
L7:
  mov    $0x0,%ebp
  jmp    L12
L37:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_label: D13
type_infered: string
name: parse_data
arguments: data_label: D0
type_infered: string
name: parse_data
arguments: data_label: D3
type_infered: string
name: parse_data
arguments: data_label: D7
type_infered: string
name: parse_data
arguments: data_label: D1
type_infered: string
name: parse_data
arguments: data_label: D40
type_infered: string

tool: D13: %s.err

tool: D0: grep -i "%s" %s.err

tool: D3: r

tool: 

tool: D1: not found

tool: D40: no such

assistant: ```c
int isnotfound(char *filename) {
  int status = 0;
  int isfexists();
  char command[256];
  FILE *grepout = NULL;
  char grepline[256];
  int strreplace();
  int nlines = 0;
  if (((filename) == NULL ? 1 : (*(filename) == '\000' ? 1 : 0)))
    goto end_of_job;
  sprintf(command, "%s.err", filename);
  if (!isfexists(command)) {
    status = 1;
    goto end_of_job;
  }
  sprintf(command, "grep -i \"%s\" %s.err", filename, filename);
  grepout = popen(command, "r");
  if (grepout == NULL)
    goto end_of_job;
  while (fgets(grepline, 255, grepout) != NULL) {
    if (strreplace(grepline, "not found", "", 0, 0) > 0)
      nlines++;
    if (strreplace(grepline, "no such", "", 0, 0) > 0)
      nlines++;
  }
  if (nlines > 0)
    status = 1;
  pclose(grepout);
end_of_job:
  return (status);
}
```