user: Translate the below assembly code into C programming language:

```asm
<make_window8>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %esi,-0x1c(%rbp)
  mov    %edx,-0x20(%rbp)
  mov    %rcx,-0x28(%rbp)
  mov    %r8d,%eax
  mov    %al,-0x2c(%rbp)
  cmpb   $0x0,-0x2c(%rbp)
  je     L29
  movb   $0x7,-0xa(%rbp)
  movb   $0xc,-0x9(%rbp)
  jmp    L75
L29:
  movb   $0x8,-0xa(%rbp)
  movb   $0xf,-0x9(%rbp)
L75:
  mov    -0x1c(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    -0x1c(%rbp),%esi
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rsp
  push   $0x0
  mov    %edx,%r9d
  mov    $0x0,%r8d
  mov    $0x0,%ecx
  mov    $0x8,%edx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <boxfill8@plt>
  add    $0x10,%rsp
  mov    -0x1c(%rbp),%eax
  lea    -0x2(%rax),%edx
  mov    -0x1c(%rbp),%esi
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rsp
  push   $0x1
  mov    %edx,%r9d
  mov    $0x1,%r8d
  mov    $0x1,%ecx
  mov    $0x7,%edx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <boxfill8@plt>
  add    $0x10,%rsp
  mov    -0x20(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    -0x1c(%rbp),%esi
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rsp
  push   %rdx
  mov    $0x0,%r9d
  mov    $0x0,%r8d
  mov    $0x0,%ecx
  mov    $0x8,%edx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <boxfill8@plt>
  add    $0x10,%rsp
  mov    -0x20(%rbp),%eax
  lea    -0x2(%rax),%edx
  mov    -0x1c(%rbp),%esi
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rsp
  push   %rdx
  mov    $0x1,%r9d
  mov    $0x1,%r8d
  mov    $0x1,%ecx
  mov    $0x7,%edx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <boxfill8@plt>
  add    $0x10,%rsp
  mov    -0x20(%rbp),%eax
  lea    -0x2(%rax),%ecx
  mov    -0x1c(%rbp),%eax
  lea    -0x2(%rax),%edi
  mov    -0x1c(%rbp),%eax
  lea    -0x2(%rax),%edx
  mov    -0x1c(%rbp),%esi
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rsp
  push   %rcx
  mov    %edi,%r9d
  mov    $0x1,%r8d
  mov    %edx,%ecx
  mov    $0xf,%edx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <boxfill8@plt>
  add    $0x10,%rsp
  mov    -0x20(%rbp),%eax
  lea    -0x1(%rax),%ecx
  mov    -0x1c(%rbp),%eax
  lea    -0x1(%rax),%edi
  mov    -0x1c(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    -0x1c(%rbp),%esi
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rsp
  push   %rcx
  mov    %edi,%r9d
  mov    $0x0,%r8d
  mov    %edx,%ecx
  mov    $0x0,%edx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <boxfill8@plt>
  add    $0x10,%rsp
  mov    -0x20(%rbp),%eax
  lea    -0x3(%rax),%edx
  mov    -0x1c(%rbp),%eax
  lea    -0x3(%rax),%ecx
  mov    -0x1c(%rbp),%esi
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rsp
  push   %rdx
  mov    %ecx,%r9d
  mov    $0x2,%r8d
  mov    $0x2,%ecx
  mov    $0x8,%edx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <boxfill8@plt>
  add    $0x10,%rsp
  mov    -0x1c(%rbp),%eax
  lea    -0x4(%rax),%ecx
  movsbl -0x9(%rbp),%edx
  mov    -0x1c(%rbp),%esi
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rsp
  push   $0x14
  mov    %ecx,%r9d
  mov    $0x3,%r8d
  mov    $0x3,%ecx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <boxfill8@plt>
  add    $0x10,%rsp
  mov    -0x20(%rbp),%eax
  lea    -0x2(%rax),%edx
  mov    -0x1c(%rbp),%eax
  lea    -0x2(%rax),%edi
  mov    -0x20(%rbp),%eax
  lea    -0x2(%rax),%ecx
  mov    -0x1c(%rbp),%esi
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rsp
  push   %rdx
  mov    %edi,%r9d
  mov    %ecx,%r8d
  mov    $0x1,%ecx
  mov    $0xf,%edx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <boxfill8@plt>
  add    $0x10,%rsp
  mov    -0x20(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    -0x1c(%rbp),%eax
  lea    -0x1(%rax),%edi
  mov    -0x20(%rbp),%eax
  lea    -0x1(%rax),%ecx
  mov    -0x1c(%rbp),%esi
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rsp
  push   %rdx
  mov    %edi,%r9d
  mov    %ecx,%r8d
  mov    $0x0,%ecx
  mov    $0x0,%edx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <boxfill8@plt>
  add    $0x10,%rsp
  movsbl -0xa(%rbp),%edx
  mov    -0x28(%rbp),%rcx
  mov    -0x1c(%rbp),%esi
  mov    -0x18(%rbp),%rax
  mov    %rcx,%r9
  mov    %edx,%r8d
  mov    $0x4,%ecx
  mov    $0x18,%edx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <putfonts8_asc@plt>
  movl   $0x0,-0x4(%rbp)
  jmp    L49
L60:
  movl   $0x0,-0x8(%rbp)
  jmp    L43
L2:
  mov    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x4(%rbp),%eax
  cltq
  shl    $0x4,%rax
  add    %rax,%rdx
  lea    D6(%rip),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0xb(%rbp)
  cmpb   $0x40,-0xb(%rbp)
  jne    L32
  movb   $0x0,-0xb(%rbp)
  jmp    L70
L32:
  cmpb   $0x24,-0xb(%rbp)
  jne    L33
  movb   $0xf,-0xb(%rbp)
  jmp    L70
L33:
  cmpb   $0x51,-0xb(%rbp)
  jne    L27
  movb   $0x8,-0xb(%rbp)
  jmp    L70
L27:
  movb   $0x7,-0xb(%rbp)
L70:
  mov    -0x4(%rbp),%eax
  add    $0x5,%eax
  imul   -0x1c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x1c(%rbp),%eax
  lea    -0x15(%rax),%ecx
  mov    -0x8(%rbp),%eax
  add    %ecx,%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rax,%rdx
  movzbl -0xb(%rbp),%eax
  mov    %al,(%rdx)
  addl   $0x1,-0x8(%rbp)
L43:
  cmpl   $0xf,-0x8(%rbp)
  jle    L2
  addl   $0x1,-0x4(%rbp)
L49:
  cmpl   $0xd,-0x4(%rbp)
  jle    L60
  nop
  leave
  ret
```

assistant: ```c
void make_window8(unsigned char *buf, int xsize, int ysize, char *title, char act) {
  static char closebtn[14][16] = {"OOOOOOOOOOOOOOO@", "OQQQQQQQQQQQQQ$@", "OQQQQQQQQQQQQQ$@", "OQQQ@@QQQQ@@QQ$@", "OQQQQ@@QQ@@QQQ$@", "OQQQQQ@@@@QQQQ$@", "OQQQQQQ@@QQQQQ$@", "OQQQQQ@@@@QQQQ$@", "OQQQQ@@QQ@@QQQ$@", "OQQQ@@QQQQ@@QQ$@", "OQQQQQQQQQQQQQ$@", "OQQQQQQQQQQQQQ$@", "O$$$$$$$$$$$$$$@", "@@@@@@@@@@@@@@@@"};
  int x, y;
  char c, tc, tbc;
  if (act != 0) {
    tc = 7;
    tbc = 12;
  } else {
    tc = 8;
    tbc = 15;
  }
  boxfill8(buf, xsize, 8, 0, 0, xsize - 1, 0);
  boxfill8(buf, xsize, 7, 1, 1, xsize - 2, 1);
  boxfill8(buf, xsize, 8, 0, 0, 0, ysize - 1);
  boxfill8(buf, xsize, 7, 1, 1, 1, ysize - 2);
  boxfill8(buf, xsize, 15, xsize - 2, 1, xsize - 2, ysize - 2);
  boxfill8(buf, xsize, 0, xsize - 1, 0, xsize - 1, ysize - 1);
  boxfill8(buf, xsize, 8, 2, 2, xsize - 3, ysize - 3);
  boxfill8(buf, xsize, tbc, 3, 3, xsize - 4, 20);
  boxfill8(buf, xsize, 15, 1, ysize - 2, xsize - 2, ysize - 2);
  boxfill8(buf, xsize, 0, 0, ysize - 1, xsize - 1, ysize - 1);
  putfonts8_asc(buf, xsize, 24, 4, tc, title);
  for (y = 0; y < 14; y++) {
    for (x = 0; x < 16; x++) {
      c = closebtn[y][x];
      if (c == '@') {
        c = 0;
      } else if (c == '$') {
        c = 15;
      } else if (c == 'Q') {
        c = 8;
      } else {
        c = 7;
      }
      buf[(5 + y) * xsize + (xsize - 21 + x)] = c;
    }
  }
  return;
}
```