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

```asm
<prj2plane>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x1a8,%rsp
  mov    %rdi,-0x188(%rbp)
  mov    %rsi,-0x190(%rbp)
  mov    %rdx,-0x198(%rbp)
  mov    %rcx,-0x1a0(%rbp)
  movsd  %xmm0,-0x1a8(%rbp)
  mov    %r8,-0x1b0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  movsd  D15(%rip),%xmm0
  movsd  %xmm0,-0x140(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x138(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x130(%rbp)
  movsd  D7(%rip),%xmm0
  movsd  %xmm0,-0x128(%rbp)
  lea    -0x70(%rbp),%rdi
  lea    -0x170(%rbp),%rsi
  mov    -0x198(%rbp),%rcx
  mov    -0x190(%rbp),%rdx
  mov    -0x188(%rbp),%rax
  mov    %rdi,%r9
  mov    %rsi,%r8
  mov    %rax,%rsi
  mov    $0x1,%edi
  call   <bring_atoms@plt>
  mov    -0x170(%rbp),%rax
  mov    $0x3,%ecx
  mov    $0x1,%edx
  mov    %eax,%esi
  mov    $0x1,%edi
  call   <dmatrix@plt>
  mov    %rax,-0x158(%rbp)
  movq   $0x1,-0x168(%rbp)
  jmp    L10
L57:
  movq   $0x1,-0x160(%rbp)
  jmp    L12
L63:
  mov    -0x168(%rbp),%rax
  mov    -0x70(%rbp,%rax,8),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x1a0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x160(%rbp),%rax
  shl    $0x3,%rax
  add    %rax,%rdx
  mov    -0x168(%rbp),%rax
  lea    0x0(,%rax,8),%rcx
  mov    -0x158(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rcx
  mov    -0x160(%rbp),%rax
  shl    $0x3,%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
  addq   $0x1,-0x160(%rbp)
L12:
  cmpq   $0x3,-0x160(%rbp)
  jle    L63
  addq   $0x1,-0x168(%rbp)
L10:
  mov    -0x170(%rbp),%rax
  cmp    %rax,-0x168(%rbp)
  jle    L57
  mov    -0x170(%rbp),%rsi
  lea    -0xc0(%rbp),%r8
  lea    -0x178(%rbp),%rdi
  lea    -0x100(%rbp),%rcx
  lea    -0xe0(%rbp),%rdx
  mov    -0x158(%rbp),%rax
  mov    %r8,%r9
  mov    %rdi,%r8
  mov    %rax,%rdi
  call   <ls_plane@plt>
  mov    -0x1b0(%rbp),%rdi
  lea    -0xe0(%rbp),%rcx
  lea    -0x100(%rbp),%rdx
  mov    -0x1a0(%rbp),%rsi
  mov    -0x188(%rbp),%rax
  mov    %rdi,%r8
  mov    %rax,%rdi
  call   <plane_xyz@plt>
  mov    $0x3,%ecx
  mov    $0x1,%edx
  mov    $0x3,%esi
  mov    $0x1,%edi
  call   <dmatrix@plt>
  mov    %rax,-0x150(%rbp)
  pxor   %xmm0,%xmm0
  ucomisd -0x1a8(%rbp),%xmm0
  jp     L105
  pxor   %xmm0,%xmm0
  ucomisd -0x1a8(%rbp),%xmm0
  je     L68
L105:
  lea    -0x120(%rbp),%rdx
  lea    -0x140(%rbp),%rcx
  lea    -0xe0(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <cross@plt>
  lea    -0x140(%rbp),%rdx
  lea    -0xe0(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <magang@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x148(%rbp)
  mov    -0x150(%rbp),%rcx
  mov    -0x148(%rbp),%rdx
  lea    -0x120(%rbp),%rax
  mov    %rcx,%rsi
  movq   %rdx,%xmm0
  mov    %rax,%rdi
  call   <arb_rotation@plt>
  movq   $0x1,-0x168(%rbp)
  jmp    L95
L79:
  movq   $0x1,-0x160(%rbp)
  jmp    L122
L15:
  mov    -0x160(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x150(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x168(%rbp),%rax
  lea    0x0(,%rax,8),%rcx
  mov    -0x1a0(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rax
  mov    -0x168(%rbp),%rcx
  lea    0x0(,%rcx,8),%rsi
  mov    -0x1b0(%rbp),%rcx
  add    %rsi,%rcx
  mov    (%rcx),%rsi
  mov    -0x160(%rbp),%rcx
  shl    $0x3,%rcx
  lea    (%rsi,%rcx,1),%rbx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <dot@plt>
  movq   %xmm0,%rax
  mov    %rax,(%rbx)
  addq   $0x1,-0x160(%rbp)
L122:
  cmpq   $0x3,-0x160(%rbp)
  jle    L15
  addq   $0x1,-0x168(%rbp)
L95:
  mov    -0x168(%rbp),%rax
  cmp    -0x188(%rbp),%rax
  jle    L79
  movq   $0x1,-0x168(%rbp)
  jmp    L75
L115:
  mov    -0x168(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x1b0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  add    $0x18,%rax
  movsd  (%rax),%xmm0
  mov    -0x1b0(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  add    $0x18,%rax
  movsd  (%rax),%xmm1
  mov    -0x168(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x1b0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  add    $0x18,%rax
  subsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  addq   $0x1,-0x168(%rbp)
L75:
  mov    -0x168(%rbp),%rax
  cmp    -0x188(%rbp),%rax
  jle    L115
L68:
  mov    -0x170(%rbp),%rax
  mov    %eax,%edx
  mov    -0x158(%rbp),%rax
  mov    $0x3,%r8d
  mov    $0x1,%ecx
  mov    $0x1,%esi
  mov    %rax,%rdi
  call   <free_dmatrix@plt>
  mov    -0x150(%rbp),%rax
  mov    $0x3,%r8d
  mov    $0x1,%ecx
  mov    $0x3,%edx
  mov    $0x1,%esi
  mov    %rax,%rdi
  call   <free_dmatrix@plt>
  nop
  mov    -0x18(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L112
  call   <__stack_chk_fail@plt>
L112:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D15
type_guessed: byte[8]
name: parse_data
arguments: data_tag: D7
type_guessed: f64

tool: {"D15": [0x85,0xeb,0x51,0xb8,0xfe,0x87,0xc3,0xc0]}

tool: D7: 1

assistant: ```c
void prj2plane(long num, long rnum, char **AtomName, double **xyz, double z0, double **nxyz) {
  double ang, temp;
  double zaxis[4] = {-9999.99, 0.0, 0.0, 1.0};
  double adist[10], hinge[4], ppos[4], z[4];
  double **bxyz, **rmtx;
  long i, j, nmatch;
  long batom[10];
  bring_atoms(1, num, rnum, AtomName, &nmatch, batom);
  bxyz = dmatrix(1, nmatch, 1, 3);
  for (i = 1; i <= nmatch; i++)
    for (j = 1; j <= 3; j++)
      bxyz[i][j] = xyz[batom[i]][j];
  ls_plane(bxyz, nmatch, z, ppos, &temp, adist);
  plane_xyz(num, xyz, ppos, z, nxyz);
  rmtx = dmatrix(1, 3, 1, 3);
  if (z0) {
    cross(z, zaxis, hinge);
    ang = magang(z, zaxis);
    arb_rotation(hinge, ang, rmtx);
    for (i = 1; i <= num; i++)
      for (j = 1; j <= 3; j++)
        nxyz[i][j] = dot(xyz[i], rmtx[j]);
    for (i = 1; i <= num; i++)
      nxyz[i][3] -= nxyz[1][3];
  }
  free_dmatrix(bxyz, 1, nmatch, 1, 3);
  free_dmatrix(rmtx, 1, 3, 1, 3);
}
```