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

```asm
<preproc_escape_string>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  mov    %rdi,-0x48(%rbp)
  mov    %rsi,-0x50(%rbp)
  mov    %rdx,-0x58(%rbp)
  mov    %rcx,-0x60(%rbp)
  mov    %r8,-0x68(%rbp)
  mov    -0x48(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x38(%rbp)
  movq   $0x0,-0x30(%rbp)
  mov    -0x50(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x58(%rbp),%rax
  mov    (%rax),%rax
  sub    -0x60(%rbp),%rax
  mov    -0x68(%rbp),%rdx
  add    %rdx,%rdx
  sub    %rdx,%rax
  sub    $0x2,%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x60(%rbp),%rax
  mov    %rax,-0x18(%rbp)
  cmpq   $0x0,-0x10(%rbp)
  je     L92
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <malloc@plt>
  mov    %rax,-0x30(%rbp)
  mov    -0x18(%rbp),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  lea    0x1(%rax),%rdx
  mov    -0x38(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x10(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
L92:
  cmpq   $0x1,-0x18(%rbp)
  jbe    L247
  mov    -0x18(%rbp),%rax
  lea    -0x1(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x22,%al
  jne    L247
  mov    -0x18(%rbp),%rax
  lea    -0x2(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x52,%al
  jne    L247
  mov    -0x18(%rbp),%rax
  lea    -0x2(%rax),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movb   $0x22,(%rax)
  subq   $0x1,-0x18(%rbp)
L247:
  movq   $0x0,-0x20(%rbp)
  jmp    L279
L93:
  mov    -0x38(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  shlq   -0x28(%rbp)
  mov    -0x28(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <realloc@plt>
  mov    %rax,-0x38(%rbp)
  cmpq   $0x0,-0x38(%rbp)
  jne    L178
  mov    -0x30(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x48(%rbp),%rax
  movq   $0x0,(%rax)
  mov    -0x50(%rbp),%rax
  movq   $0xffffffffffffffff,(%rax)
  mov    -0x58(%rbp),%rax
  movq   $0x0,(%rax)
  jmp    L72
L178:
  mov    -0x18(%rbp),%rax
  add    $0x4,%rax
  cmp    %rax,-0x28(%rbp)
  jb     L93
  mov    -0x30(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x1f,%al
  jle    L179
  mov    -0x30(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x7f,%al
  jne    L254
L179:
  mov    -0x30(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jns    L199
L254:
  mov    -0x30(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  mov    -0x38(%rbp),%rdx
  add    %rax,%rdx
  movzbl (%rcx),%eax
  mov    %al,(%rdx)
  jmp    L75
L199:
  mov    -0x30(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  cmp    $0x27,%eax
  jg     L166
  cmp    $0x7,%eax
  jl     L17
  sub    $0x7,%eax
  cmp    $0x20,%eax
  ja     L17
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D0(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D0(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
L166:
  cmp    $0x5c,%eax
  je     L256
  jmp    L17
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  mov    -0x38(%rbp),%rdx
  add    %rdx,%rax
  movb   $0x5c,(%rax)
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  mov    -0x38(%rbp),%rdx
  add    %rdx,%rax
  movb   $0x61,(%rax)
  jmp    L75
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  mov    -0x38(%rbp),%rdx
  add    %rdx,%rax
  movb   $0x5c,(%rax)
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  mov    -0x38(%rbp),%rdx
  add    %rdx,%rax
  movb   $0x62,(%rax)
  jmp    L75
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  mov    -0x38(%rbp),%rdx
  add    %rdx,%rax
  movb   $0x5c,(%rax)
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  mov    -0x38(%rbp),%rdx
  add    %rdx,%rax
  movb   $0x66,(%rax)
  jmp    L75
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  mov    -0x38(%rbp),%rdx
  add    %rdx,%rax
  movb   $0x5c,(%rax)
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  mov    -0x38(%rbp),%rdx
  add    %rdx,%rax
  movb   $0x6e,(%rax)
  jmp    L75
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  mov    -0x38(%rbp),%rdx
  add    %rdx,%rax
  movb   $0x5c,(%rax)
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  mov    -0x38(%rbp),%rdx
  add    %rdx,%rax
  movb   $0x72,(%rax)
  jmp    L75
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  mov    -0x38(%rbp),%rdx
  add    %rdx,%rax
  movb   $0x5c,(%rax)
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  mov    -0x38(%rbp),%rdx
  add    %rdx,%rax
  movb   $0x74,(%rax)
  jmp    L75
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  mov    -0x38(%rbp),%rdx
  add    %rdx,%rax
  movb   $0x5c,(%rax)
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  mov    -0x38(%rbp),%rdx
  add    %rdx,%rax
  movb   $0x76,(%rax)
  jmp    L75
L256:
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  mov    -0x38(%rbp),%rdx
  add    %rdx,%rax
  movb   $0x5c,(%rax)
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  mov    -0x38(%rbp),%rdx
  add    %rdx,%rax
  movb   $0x5c,(%rax)
  jmp    L75
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  mov    -0x38(%rbp),%rdx
  add    %rdx,%rax
  movb   $0x5c,(%rax)
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  mov    -0x38(%rbp),%rdx
  add    %rdx,%rax
  movb   $0x27,(%rax)
  jmp    L75
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  mov    -0x38(%rbp),%rdx
  add    %rdx,%rax
  movb   $0x5c,(%rax)
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  mov    -0x38(%rbp),%rdx
  add    %rdx,%rax
  movb   $0x22,(%rax)
  jmp    L75
L17:
  mov    -0x30(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    -0x38(%rbp),%rcx
  mov    -0x18(%rbp),%rdx
  add    %rdx,%rcx
  mov    %eax,%edx
  lea    D11(%rip),%rax
  mov    %rax,%rsi
  mov    %rcx,%rdi
  call   <sprintf@plt>
  addq   $0x4,-0x18(%rbp)
  nop
L75:
  addq   $0x1,-0x20(%rbp)
L279:
  mov    -0x20(%rbp),%rax
  cmp    -0x10(%rbp),%rax
  jb     L178
  mov    -0x30(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x48(%rbp),%rax
  mov    -0x38(%rbp),%rdx
  mov    %rdx,(%rax)
  mov    -0x50(%rbp),%rax
  mov    -0x28(%rbp),%rdx
  mov    %rdx,(%rax)
  mov    -0x58(%rbp),%rax
  mov    -0x18(%rbp),%rdx
  mov    %rdx,(%rax)
L72:
  leave
  ret
```

tool_calls: name: read_data
arguments: data_tag: D11
data_type: string

tool: D11: \%3.3o

assistant: ```c
void preproc_escape_string(char **linep, size_t *linelenp, size_t *jp, size_t d, size_t dl) {
  char *line = *linep;
  char *r = 0;
  size_t linelen = *linelenp;
  size_t l = *jp - d - 2 * dl - 2;
  size_t i;
  size_t j = d;
  if (l != 0) {
    r = (char *)malloc(l);
    memcpy(r, &line[j + dl + 1], l);
  }
  if (j >= 2 && line[j - 1] == '\"' && line[j - 2] == 'R') {
    line[j - 2] = '\"';
    j--;
  }
  for (i = 0; i < l; i++) {
    while (j + 4 > linelen) {
      char *oldline = line;
      linelen *= 2;
      line = (char *)realloc(line, linelen);
      if (!line) {
        free(r);
        free(oldline);
        *linep = NULL;
        *linelenp = -1;
        *jp = 0;
        return;
      }
    }
    if ((r[i] >= ' ' && r[i] <= '~') || (r[i] & 0x80) != 0) {
      line[j++] = r[i];
    } else
      switch (r[i]) {
      case '\a':
        line[j++] = '\\';
        line[j++] = 'a';
        break;
      case '\b':
        line[j++] = '\\';
        line[j++] = 'b';
        break;
      case '\f':
        line[j++] = '\\';
        line[j++] = 'f';
        break;
      case '\n':
        line[j++] = '\\';
        line[j++] = 'n';
        break;
      case '\r':
        line[j++] = '\\';
        line[j++] = 'r';
        break;
      case '\t':
        line[j++] = '\\';
        line[j++] = 't';
        break;
      case '\v':
        line[j++] = '\\';
        line[j++] = 'v';
        break;
      case '\\':
        line[j++] = '\\';
        line[j++] = '\\';
        break;
      case '\'':
        line[j++] = '\\';
        line[j++] = '\'';
        break;
      case '\"':
        line[j++] = '\\';
        line[j++] = '\"';
        break;
      default:
        sprintf(&line[j], "\\%3.3o", r[i]);
        j += 4;
        break;
      }
  }
  free(r);
  *linep = line;
  *linelenp = linelen;
  *jp = j;
}
```