user: Please show me the C implementation that matches the assembly code listed below:

```asm
<fftkey>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x90,%rsp
  mov    %rdi,-0x88(%rbp)
  mov    %rsi,-0x90(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x74(%rbp)
  mov    -0x90(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  jle    L61
  mov    -0x90(%rbp),%rax
  mov    (%rax),%eax
  jmp    L229
L61:
  mov    -0x88(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %rax,-0x70(%rbp)
  cmpq   $0x8,-0x70(%rbp)
  jbe    L220
  movq   $0x8,-0x70(%rbp)
L220:
  movq   $0x0,-0x68(%rbp)
  jmp    L190
L66:
  mov    -0x90(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  jne    L109
  mov    -0x88(%rbp),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x75(%rbp)
  jmp    L19
L109:
  mov    -0x88(%rbp),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <toupper@plt>
  mov    %al,-0x75(%rbp)
L19:
  cmpb   $0x40,-0x75(%rbp)
  jle    L107
  cmpb   $0x5a,-0x75(%rbp)
  jle    L51
L107:
  cmpb   $0x2f,-0x75(%rbp)
  jle    L4
  cmpb   $0x39,-0x75(%rbp)
  jle    L51
L4:
  cmpb   $0x2d,-0x75(%rbp)
  je     L51
  cmpb   $0x5f,-0x75(%rbp)
  jne    L206
L51:
  cmpl   $0x0,-0x74(%rbp)
  je     L232
  mov    -0x90(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  jne    L141
  mov    -0x88(%rbp),%rdx
  lea    -0x60(%rbp),%rax
  mov    %rdx,%rcx
  lea    D19(%rip),%rdx
  mov    $0x51,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  lea    -0x60(%rbp),%rax
  mov    %rax,%rdi
  call   <ffpmsg@plt>
L141:
  mov    -0x90(%rbp),%rax
  movl   $0xcf,(%rax)
  mov    -0x90(%rbp),%rax
  mov    (%rax),%eax
  jmp    L229
L206:
  mov    -0x88(%rbp),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  jne    L90
  movl   $0x1,-0x74(%rbp)
  jmp    L232
L90:
  mov    -0x90(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  jne    L22
  mov    -0x68(%rbp),%rax
  add    $0x1,%eax
  mov    %eax,%ecx
  mov    -0x88(%rbp),%rdx
  lea    -0x60(%rbp),%rax
  mov    %rdx,%r8
  lea    D32(%rip),%rdx
  mov    $0x51,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  lea    -0x60(%rbp),%rax
  mov    %rax,%rdi
  call   <ffpmsg@plt>
  mov    -0x88(%rbp),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L65
  lea    D30(%rip),%rax
  mov    %rax,%rdi
  call   <ffpmsg@plt>
  jmp    L22
L65:
  mov    -0x88(%rbp),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x9,%al
  jne    L22
  lea    D37(%rip),%rax
  mov    %rax,%rdi
  call   <ffpmsg@plt>
L22:
  mov    -0x90(%rbp),%rax
  movl   $0xcf,(%rax)
  mov    -0x90(%rbp),%rax
  mov    (%rax),%eax
  jmp    L229
L232:
  addq   $0x1,-0x68(%rbp)
L190:
  mov    -0x68(%rbp),%rax
  cmp    -0x70(%rbp),%rax
  jb     L66
  mov    -0x90(%rbp),%rax
  mov    (%rax),%eax
L229:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L70
  call   <__stack_chk_fail@plt>
L70:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D19
type_guessed: string
name: parse_data
arguments: data_tag: D32
type_guessed: string
name: parse_data
arguments: data_tag: D30
type_guessed: string
name: parse_data
arguments: data_tag: D37
type_guessed: string

tool: D19: Keyword name contains embedded space(s): %.8s

tool: D32: Character %d in this keyword is illegal: %.8s

tool: D30:  (This a NULL (0) character).

tool: D37:  (This an ASCII TAB (9) character).

assistant: ```c
int fftkey(const char *keyword, int *status) {
  size_t maxchr, ii;
  int spaces = 0;
  char msg[81], testchar;
  if (*status > 0)
    return (*status);
  maxchr = strlen(keyword);
  if (maxchr > 8)
    maxchr = 8;
  for (ii = 0; ii < maxchr; ii++) {
    if (*status == 0)
      testchar = keyword[ii];
    else
      testchar = toupper(keyword[ii]);
    if ((testchar >= 'A' && testchar <= 'Z') || (testchar >= '0' && testchar <= '9') || testchar == '-' || testchar == '_') {
      if (spaces) {
        if (*status == 0) {
          snprintf(msg, 81, "Keyword name contains embedded space(s): %.8s", keyword);
          ffpmsg(msg);
        }
        return (*status = 207);
      }
    } else if (keyword[ii] == ' ')
      spaces = 1;
    else {
      if (*status == 0) {
        snprintf(msg, 81, "Character %d in this keyword is illegal: %.8s", (int)(ii + 1), keyword);
        ffpmsg(msg);
        if (keyword[ii] == 0)
          ffpmsg(" (This a NULL (0) character).");
        else if (keyword[ii] == 9)
          ffpmsg(" (This an ASCII TAB (9) character).");
      }
      return (*status = 207);
    }
  }
  return (*status);
}
```