user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<functs>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  lea    D9(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <look@plt>
  mov    %rax,-0x8(%rbp)
  cmpq   $0x0,-0x8(%rbp)
  jne    L20
  mov    -0x18(%rbp),%rax
  lea    D35(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <look@plt>
  mov    %rax,-0x8(%rbp)
  cmpq   $0x0,-0x8(%rbp)
  jne    L20
  mov    -0x18(%rbp),%rax
  lea    D51(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <look@plt>
  mov    %rax,-0x8(%rbp)
  cmpq   $0x0,-0x8(%rbp)
  jne    L20
  mov    -0x18(%rbp),%rax
  lea    D42(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <look@plt>
  mov    %rax,-0x8(%rbp)
  cmpq   $0x0,-0x8(%rbp)
  jne    L20
  mov    -0x18(%rbp),%rax
  lea    D25(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <look@plt>
  mov    %rax,-0x8(%rbp)
  cmpq   $0x0,-0x8(%rbp)
  jne    L20
  mov    -0x18(%rbp),%rax
  lea    D2(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <look@plt>
  mov    %rax,-0x8(%rbp)
  cmpq   $0x0,-0x8(%rbp)
  jne    L20
  mov    -0x18(%rbp),%rax
  lea    D59(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <look@plt>
  mov    %rax,-0x8(%rbp)
  cmpq   $0x0,-0x8(%rbp)
  je     L157
  jmp    L20
L0:
  addq   $0x1,-0x8(%rbp)
L20:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  je     L0
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x9,%al
  je     L0
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2a,%al
  je     L0
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2f,%al
  jle    L28
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x39,%al
  jle    L0
L28:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x28,%al
  je     L0
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x29,%al
  je     L0
  mov    -0x8(%rbp),%rax
  lea    D73(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <look@plt>
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  jmp    L18
L157:
  mov    $0x0,%eax
L18:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D9
datatype: string
name: disassemble_data
arguments: tag: D35
datatype: string
name: disassemble_data
arguments: tag: D51
datatype: string
name: disassemble_data
arguments: tag: D42
datatype: string
name: disassemble_data
arguments: tag: D25
datatype: string
name: disassemble_data
arguments: tag: D2
datatype: string
name: disassemble_data
arguments: tag: D59
datatype: string
name: disassemble_data
arguments: tag: D73
datatype: string

tool: D9: character

tool: D35: logical

tool: D51: real

tool: D42: integer

tool: D25: doubleprecision

tool: D2: complex

tool: D59: doublecomplex

tool: D73: function

assistant: ```c
char *functs(char *p) {
  char *ptr;
  if ((ptr = look(p, "character")) != 0 || (ptr = look(p, "logical")) != 0 || (ptr = look(p, "real")) != 0 || (ptr = look(p, "integer")) != 0 || (ptr = look(p, "doubleprecision")) != 0 || (ptr = look(p, "complex")) != 0 || (ptr = look(p, "doublecomplex")) != 0) {
    while (*ptr == ' ' || *ptr == '\t' || *ptr == '*' || (*ptr >= '0' && *ptr <= '9') || *ptr == '(' || *ptr == ')')
      ptr++;
    ptr = look(ptr, "function");
    return (ptr);
  } else
    return (0);
}
```