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

```asm
<ieee1888_datapool_parse_CSV_line>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbp
  mov    %rsi,%r14
  mov    %rdx,%r13
  mov    %rcx,%r12
  call   <strlen@plt>
  test   %eax,%eax
  jle    L24
  mov    $0x0,%esi
  mov    $0x0,%edi
  mov    $0x0,%r8d
  mov    $0x0,%ebx
  mov    $0x0,%edx
  jmp    L101
L81:
  add    $0x1,%ebx
L92:
  add    $0x1,%edx
  cmp    %edx,%eax
  jle    L152
L101:
  movslq %edx,%rcx
  movzbl 0x0(%rbp,%rcx,1),%ecx
  cmp    $0xa,%cl
  je     L152
  cmp    $0x2c,%cl
  je     L81
  cmp    $0x1,%ebx
  je     L175
  cmp    $0x2,%ebx
  je     L155
  test   %ebx,%ebx
  je     L182
  mov    %eax,%edx
  jmp    L92
L182:
  cmp    $0xfe,%r8d
  jg     L119
  movslq %r8d,%r9
  mov    %cl,(%r14,%r9,1)
  lea    0x1(%r8),%r8d
  jmp    L92
L119:
  lea    D8(%rip),%rdi
  call   <printf@plt>
  jmp    L4
L175:
  cmp    $0x30,%edi
  jg     L195
  movslq %edi,%r9
  mov    %cl,0x0(%r13,%r9,1)
  lea    0x1(%rdi),%edi
  jmp    L92
L195:
  lea    D36(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%ebx
  jmp    L4
L155:
  cmp    $0x26,%esi
  jg     L29
  movslq %esi,%r9
  mov    %cl,(%r12,%r9,1)
  lea    0x1(%rsi),%esi
  jmp    L92
L29:
  lea    D11(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%ebx
  jmp    L4
L152:
  movslq %r8d,%r8
  movb   $0x0,(%r14,%r8,1)
  movslq %edi,%rdi
  movb   $0x0,0x0(%r13,%rdi,1)
  movslq %esi,%rsi
  movb   $0x0,(%r12,%rsi,1)
  cmp    $0x2,%ebx
  jne    L183
  mov    $0x1,%ebx
L4:
  mov    %ebx,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L24:
  movb   $0x0,(%r14)
  movb   $0x0,0x0(%r13)
  movb   $0x0,(%r12)
L183:
  lea    D22(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%ebx
  jmp    L4
```

tool_calls: name: parse_data
arguments: data_tag: D8
type: string
name: parse_data
arguments: data_tag: D36
type: string
name: parse_data
arguments: data_tag: D11
type: string
name: parse_data
arguments: data_tag: D22
type: string

tool: D8: the lendth of id section is too long...


tool: D36: the lendth of time section is too long...


tool: D11: the lendth of value section is too long...


tool: D22: Error while parsing a line of datapool CSV ...


assistant: ```c
int ieee1888_datapool_parse_CSV_line(const char *line, char *row_id, char *row_time, char *row_value) {
  int i;
  int column = 0;
  int row_id_index = 0;
  int row_time_index = 0;
  int row_value_index = 0;
  int len = strlen(line);
  for (i = 0; i < len; i++) {
    if (line[i] == '\n') {
      break;
    }
    if (line[i] == ',') {
      column++;
      continue;
    }
    switch (column) {
    case 0:
      if (row_id_index < 256 - 1) {
        row_id[row_id_index++] = line[i];
      } else {
        printf("the lendth of id section is too long...\n");
        return 0;
      }
      break;
    case 1:
      if (row_time_index < 50 - 1) {
        row_time[row_time_index++] = line[i];
      } else {
        printf("the lendth of time section is too long...\n");
        return 0;
      }
      break;
    case 2:
      if (row_value_index < 40 - 1) {
        row_value[row_value_index++] = line[i];
      } else {
        printf("the lendth of value section is too long...\n");
        return 0;
      }
      break;
    default:
      i = len;
    }
  }
  row_id[row_id_index] = '\0';
  row_time[row_time_index] = '\0';
  row_value[row_value_index] = '\0';
  if (column != 2) {
    printf("Error while parsing a line of datapool CSV ...\n");
    return 0;
  }
  return 1;
}
```