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

```asm
<readInput>:
  endbr64
  push   %r15
  xor    %r15d,%r15d
  push   %r14
  push   %r13
  mov    %rdi,%r13
  push   %r12
  push   %rbp
  lea    D13(%rip),%rbp
  push   %rbx
  xor    %ebx,%ebx
  sub    $0x18,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  movb   $0x20,0x7(%rsp)
  lea    0x7(%rsp),%r12
L206:
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <scanf@plt>
  cmp    $0x1,%r15d
  jne    L73
  movzbl 0x7(%rsp),%eax
  cmp    $0x7c,%al
  je     L196
  nopl   (%rax)
L169:
  cmp    $0xa,%al
  je     L176
  cmp    $0x8,%al
  je     L217
  cmp    $0xa,%al
  lea    0x1(%rbx),%r14d
  movslq %ebx,%rbx
  setne  %cl
  cmp    $0x20,%al
  mov    %al,0x0(%r13,%rbx,1)
  setne  %al
  and    %ecx,%eax
  xor    $0x1,%eax
  movzbl %al,%r15d
  test   %al,%al
  jne    L27
  test   %cl,%cl
  je     L79
L27:
  mov    %r14d,%ebx
  jmp    L206
  nopl   0x0(%rax,%rax,1)
L79:
  movslq %r14d,%rax
  movb   $0x0,0x0(%r13,%rax,1)
  xor    %eax,%eax
  test   %r14d,%r14d
  setg   %al
L219:
  mov    0x8(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L38
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L217:
  sub    $0x1,%ebx
  movslq %ebx,%rax
  movb   $0x0,0x0(%r13,%rax,1)
L129:
  xor    %r15d,%r15d
  jmp    L206
  nopl   0x0(%rax)
L73:
  movzbl 0x7(%rsp),%eax
  mov    %ebx,%r14d
  xor    %ecx,%ecx
  cmp    $0x8,%al
  je     L158
  xchg   %ax,%ax
L41:
  cmp    $0xa,%al
  je     L209
  movslq %r14d,%rdx
  lea    0x1(%r14),%ebx
  mov    %al,0x0(%r13,%rdx,1)
  cmp    $0x7c,%al
  jne    L91
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <scanf@plt>
  movzbl 0x7(%rsp),%eax
  cmp    $0x7c,%al
  jne    L169
L196:
  lea    D10(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
  jmp    L219
L91:
  mov    %ebx,%r14d
  nopw   0x0(%rax,%rax,1)
L209:
  cmp    $0x1,%ecx
  je     L67
  cmp    $0xa,%al
  je     L79
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <scanf@plt>
  movzbl 0x7(%rsp),%eax
  xor    %ecx,%ecx
  cmp    $0x8,%al
  jne    L41
L158:
  sub    $0x1,%r14d
  movslq %r14d,%rax
  movb   $0x0,0x0(%r13,%rax,1)
L16:
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <scanf@plt>
  xor    %ecx,%ecx
L107:
  movzbl 0x7(%rsp),%eax
  cmp    $0x8,%al
  jne    L41
  sub    $0x1,%r14d
  movslq %r14d,%rax
  movb   $0x0,0x0(%r13,%rax,1)
  cmp    $0x1,%ecx
  jne    L16
  mov    %r14d,%ebx
  jmp    L129
L176:
  lea    D3(%rip),%rdi
  mov    %ebx,%r14d
  call   <printf@plt>
  mov    $0x1,%ecx
  jmp    L107
  cs nopw 0x0(%rax,%rax,1)
L67:
  cmp    $0xa,%al
  mov    %r14d,%ebx
  setne  %r15b
  cmp    $0x20,%al
  setne  %al
  and    %eax,%r15d
  xor    $0x1,%r15d
  movzbl %r15b,%r15d
  jmp    L206
L38:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: data_tag: D13
type_infered: string
name: read_data
arguments: data_tag: D10
type_infered: string
name: read_data
arguments: data_tag: D3
type_infered: string

tool: D13: %c

tool: D10: -bash: syntax error near unexpected token | 


tool: D3: >

assistant: ```c
int readInput(char *input_line) {
  char c = ' ';
  int i = 0;
  int pipeFound = 0;
  while (c != '\n' || pipeFound == 1) {
    scanf("%c", &c);
    if (pipeFound == 1 && c == '|') {
      printf("-bash: syntax error near unexpected token | \n");
      return 0;
    }
    if (c == '\n' && pipeFound == 1) {
      printf(">");
    }
    if (c == '\b') {
      i--;
      input_line[i] = '\0';
    } else if (c != '\n')
      input_line[i++] = c;
    if (c == '|') {
      pipeFound = 1;
    } else if (pipeFound == 1 && c != ' ' && c != '\n') {
      pipeFound = 0;
    }
  }
  input_line[i] = '\0';
  if (i < 1)
    return 0;
  return 1;
}
```