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

```asm
<linescan>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <eatwhite@plt>
  mov    -0x18(%rbp),%rdx
  mov    %rax,(%rdx)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  cmp    $0x5b,%eax
  je     L69
  cmp    $0x5b,%eax
  jg     L166
  cmp    $0x3d,%eax
  je     L74
  cmp    $0x3d,%eax
  jg     L166
  cmp    $0x3b,%eax
  je     L107
  cmp    $0x3b,%eax
  jg     L166
  cmp    $0xa,%eax
  je     L179
  cmp    $0x23,%eax
  je     L107
  jmp    L166
L179:
  movl   $0x0,-0x4(%rbp)
  jmp    L161
L107:
  movl   $0x4,-0x4(%rbp)
  jmp    L161
L74:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,(%rax)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <eatwhite@plt>
  mov    -0x18(%rbp),%rdx
  mov    %rax,(%rdx)
  mov    -0x18(%rbp),%rsi
  mov    -0x20(%rbp),%rax
  lea    D34(%rip),%rdx
  mov    %rdx,%rcx
  mov    $0x100,%edx
  mov    %rax,%rdi
  call   <copyuntil@plt>
  movl   $0x3,-0x4(%rbp)
  jmp    L161
L69:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,(%rax)
  mov    -0x18(%rbp),%rsi
  mov    -0x20(%rbp),%rax
  lea    D18(%rip),%rdx
  mov    %rdx,%rcx
  mov    $0x40,%edx
  mov    %rax,%rdi
  call   <copyuntil@plt>
  cmp    $0x5d,%al
  jne    L73
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,(%rax)
  movl   $0x1,-0x4(%rbp)
  jmp    L161
L73:
  lea    D8(%rip),%rax
  mov    %rax,%rsi
  mov    $0x1,%edi
  call   <debug@plt>
  movl   $0xffffffff,-0x4(%rbp)
  jmp    L161
L166:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isalpha@plt>
  test   %eax,%eax
  je     L42
  mov    -0x18(%rbp),%rsi
  mov    -0x20(%rbp),%rax
  lea    D12(%rip),%rdx
  mov    %rdx,%rcx
  mov    $0x40,%edx
  mov    %rax,%rdi
  call   <copyuntil@plt>
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <eatwhite@plt>
  mov    -0x18(%rbp),%rdx
  mov    %rax,(%rdx)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  movzbl (%rax),%eax
  cmp    $0x3d,%al
  jne    L184
  movl   $0x2,-0x4(%rbp)
  jmp    L38
L184:
  movl   $0x5,-0x4(%rbp)
  jmp    L38
L42:
  movl   $0xffffffff,-0x4(%rbp)
L38:
  nop
L161:
  mov    -0x4(%rbp),%eax
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: tag: D34
type_infered: string
name: retrieve_data
arguments: tag: D18
type_infered: string
name: retrieve_data
arguments: tag: D8
type_infered: string
name: retrieve_data
arguments: tag: D12
type_infered: string

tool: D34:  #;	


tool: D18: ]


tool: D8: Section not closed off

tool: D12: = 	


assistant: ```c
int linescan(char **lp, char *tokstring) {
  int retval;
  *lp = eatwhite(*lp);
  switch (**lp) {
  case '\n':
    retval = 0;
    break;
  case ';':
  case '#':
    retval = 4;
    break;
  case '=':
    *lp = eatwhite((++(*lp)));
    copyuntil(tokstring, lp, 256, " #;\t\n");
    retval = 3;
    break;
  case '[':
    (*lp)++;
    if (copyuntil(tokstring, lp, 64, "]\n") == ']') {
      (*lp)++;
      retval = 1;
    } else {
      debug(1, "Section not closed off");
      retval = -1;
    }
    break;
  default:
    if (isalpha(**lp)) {
      copyuntil(tokstring, lp, 64, "= \t\n");
      *lp = eatwhite(*lp);
      if (**lp == '=')
        retval = 2;
      else
        retval = 5;
    } else
      retval = -1;
    break;
  }
  return retval;
}
```