user: 请从给定的汇编指令推导出C源代码:

```asm
<line_parser_old>:
  endbr64
  cmpb   $0x0,(%rdi)
  je     L239
  mov    $0x1,%eax
L280:
  mov    %eax,%esi
  add    $0x1,%rax
  cmpb   $0x0,-0x1(%rdi,%rax,1)
  jne    L280
L72:
  mov    $0x0,%eax
  movabs $0x800000000002400,%rcx
  jmp    L295
L239:
  mov    $0x0,%esi
  jmp    L72
L408:
  bt     %rdx,%rcx
  jae    L378
  movb   $0x20,(%rdi,%rax,1)
L378:
  add    $0x1,%rax
  cmp    %eax,%esi
  jle    L18
L295:
  movzbl (%rdi,%rax,1),%edx
  cmp    $0x3b,%dl
  ja     L378
  jmp    L408
L18:
  mov    $0x0,%eax
  jmp    L54
L58:
  movb   $0x20,(%rdx)
  add    $0x1,%eax
  cmp    %esi,%eax
  je     L398
  movslq %eax,%rdx
  add    %rdi,%rdx
L201:
  mov    %rdx,%rcx
  cmpb   $0x27,(%rdx)
  je     L80
  cmp    %esi,%eax
  jge    L80
  movb   $0x20,(%rcx)
  add    $0x1,%eax
  add    $0x1,%rdx
  cmp    %esi,%eax
  jne    L201
  movslq %esi,%rsi
  movb   $0x20,(%rdi,%rsi,1)
L398:
  cmpb   $0x0,(%rdi)
  je     L28
  mov    $0x1,%eax
L47:
  mov    %eax,%esi
  add    $0x1,%rax
  cmpb   $0x0,-0x1(%rdi,%rax,1)
  jne    L47
L404:
  mov    $0x0,%ecx
  mov    $0x0,%edx
  jmp    L338
L80:
  movslq %eax,%rdx
  movb   $0x20,(%rdi,%rdx,1)
  cmp    %esi,%eax
  jne    L258
  jmp    L398
L256:
  sub    $0x2a,%ecx
  cmp    $0x5,%cl
  ja     L258
  movzbl 0x1(%rdi,%r8,1),%ecx
  sub    $0x30,%ecx
  cmp    $0x9,%cl
  jbe    L85
L258:
  add    $0x1,%eax
  cmp    %esi,%eax
  jge    L398
L54:
  movslq %eax,%r8
  lea    (%rdi,%r8,1),%rdx
  movzbl (%rdx),%ecx
  cmp    $0x27,%cl
  je     L58
  lea    -0x30(%rcx),%r9d
  cmp    $0x9,%r9b
  ja     L256
  movzbl -0x1(%rdi,%r8,1),%ecx
  and    $0xffffffdf,%ecx
  sub    $0x41,%ecx
  cmp    $0x19,%cl
  jbe    L258
L85:
  mov    %rdx,%r9
  movzbl (%rdx),%ecx
  lea    -0x30(%rcx),%r8d
  cmp    $0x9,%r8b
  setbe  %r8b
  sub    $0x2c,%ecx
  cmp    $0x2,%cl
  setbe  %cl
  or     %cl,%r8b
  je     L258
  cmp    %esi,%eax
  jge    L258
  movb   $0x20,(%r9)
  add    $0x1,%eax
  add    $0x1,%rdx
  cmp    %esi,%eax
  jne    L85
  mov    %esi,%eax
  jmp    L258
L28:
  mov    $0x0,%esi
  jmp    L404
L403:
  test   %edx,%edx
  jle    L324
  movslq %ecx,%r8
  movb   $0x20,(%rdi,%r8,1)
  add    $0x1,%ecx
  cmpb   $0x20,(%rax)
  jne    L53
  cmp    %esi,%edx
  jge    L53
L5:
  lea    0x1(%rdx),%eax
  cltq
L197:
  mov    %eax,%edx
  cmpb   $0x20,(%rdi,%rax,1)
  sete   %r9b
  cmp    %eax,%esi
  setg   %r8b
  add    $0x1,%rax
  test   %r8b,%r9b
  jne    L197
  jmp    L53
L65:
  movslq %ecx,%rax
  lea    -0x2(%rdi,%rax,1),%rdx
  cmpb   $0x20,(%rdx)
  je     L228
L88:
  cmp    %esi,%ecx
  jge    L82
  add    %rdi,%rax
L128:
  add    $0x1,%ecx
  cmp    %esi,%ecx
  jne    L128
  movb   $0x0,(%rax)
L82:
  mov    %rdi,%rax
  ret
L228:
  movb   $0x0,(%rdx)
  jmp    L88
L324:
  cmpb   $0x20,(%rax)
  jne    L407
  cmp    %esi,%edx
  jl     L5
L407:
  movslq %edx,%rax
  movzbl (%rdi,%rax,1),%eax
L214:
  movslq %ecx,%r8
  mov    %al,(%rdi,%r8,1)
L66:
  add    $0x1,%ecx
  add    $0x1,%edx
  cmp    %esi,%edx
  jge    L65
L338:
  movslq %edx,%rax
  add    %rdi,%rax
  cmpb   $0x20,(%rax)
  je     L403
L53:
  movslq %edx,%rax
  movzbl (%rdi,%rax,1),%eax
  lea    -0x41(%rax),%r8d
  cmp    $0x19,%r8b
  ja     L214
  movslq %ecx,%r8
  add    $0x20,%eax
  mov    %al,(%rdi,%r8,1)
  jmp    L66
```

assistant: ```c
char *line_parser_old(char *file_line) {
  int size;
  int count;
  int pos;
  size = 0;
  while (*(file_line + size) != 0) {
    size++;
  }
  count = 0;
  do {
    if ((*(file_line + count) == 13) || (*(file_line + count) == 10) || (*(file_line + count) == ';')) {
      *(file_line + count) = ' ';
    }
    count++;
  } while (count < size);
  count = 0;
  do {
    {
      if (*(file_line + count) == '\'') {
        *(file_line + count) = ' ';
        count++;
        if (count == size) {
          break;
        }
        while (*(file_line + count) != '\'' && count < size) {
          *(file_line + count) = ' ';
          count++;
          if (count == size) {
            break;
          }
        }
        *(file_line + count) = ' ';
        if (count == size) {
          break;
        }
      } else {
        if (((*(file_line + count) >= '0') && (*(file_line + count) <= '9') && !((*(file_line + count - 1) >= 'a' && *(file_line + count - 1) <= 'z') || (*(file_line + count - 1) >= 'A' && *(file_line + count - 1) <= 'Z'))) || ((*(file_line + count) == '-' || *(file_line + count) == '+' || *(file_line + count) == '*' || *(file_line + count) == '/' || *(file_line + count) == '.' || *(file_line + count) == ',') && (*(file_line + count + 1) >= '0') && (*(file_line + count + 1) <= '9'))) {
          while ((((*(file_line + count) >= '0') && (*(file_line + count) <= '9')) || ((*(file_line + count) == '-' || *(file_line + count) == '.' || *(file_line + count) == ','))) && (count < size)) {
            *(file_line + count) = ' ';
            count++;
            if (count == size) {
              break;
            }
          }
        }
      }
    }
    count++;
  } while (count < size);
  size = 0;
  while (*(file_line + size) != 0) {
    size++;
  }
  pos = 0;
  count = 0;
  do {
    if (*(file_line + count) == ' ') {
      if (count > 0) {
        *(file_line + pos) = *(file_line + count);
        pos++;
      }
      while (*(file_line + count) == ' ' && count < size) {
        count++;
      }
    }
    if ((*(file_line + count) >= 'A') && (*(file_line + count) <= 'Z')) {
      *(file_line + pos) = *(file_line + count) + 32;
    } else {
      *(file_line + pos) = *(file_line + count);
    }
    pos++;
    count++;
  } while (count < size);
  if (*(file_line + pos - 2) == ' ') {
    *(file_line + pos - 2) = '\0';
  }
  for (count = pos; count < size; count++) {
    *(file_line + pos) = '\0';
  }
  return (file_line);
}
```