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

```asm
<check_ft_type>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  mov    %rsi,%r12
  mov    %rdx,%rbp
  lea    D327(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L504
  movl   $0xe,0x0(%rbp)
  mov    $0x1,%eax
L1:
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L504:
  lea    D98(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L426
  lea    D163(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L184
L426:
  mov    %rbx,%rsi
  mov    %r12,%rdi
  call   <strcpy@plt>
  lea    D327(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcpy@plt>
  movl   $0xe,0x0(%rbp)
  mov    $0x1,%eax
  jmp    L1
L184:
  lea    D195(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L47
  lea    D210(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L390
L47:
  mov    %rbx,%rsi
  mov    %r12,%rdi
  call   <strcpy@plt>
  lea    D181(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcpy@plt>
  movl   $0x0,0x0(%rbp)
  mov    $0x1,%eax
  jmp    L1
L390:
  lea    D320(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L119
  lea    D66(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L87
L119:
  mov    %rbx,%rsi
  mov    %r12,%rdi
  call   <strcpy@plt>
  lea    D242(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcpy@plt>
  movl   $0x10,0x0(%rbp)
  mov    $0x1,%eax
  jmp    L1
L87:
  lea    D194(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L119
  lea    D30(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L119
  lea    D39(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L119
  lea    D242(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L119
  lea    D178(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L119
  lea    D219(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L119
  lea    D171(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L357
  movl   $0x11,0x0(%rbp)
  mov    $0x1,%eax
  jmp    L1
L357:
  lea    D56(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L62
  movl   $0x3,0x0(%rbp)
  mov    $0x1,%eax
  jmp    L1
L62:
  lea    D173(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L204
  movl   $0xb,0x0(%rbp)
  mov    $0x1,%eax
  jmp    L1
L204:
  lea    D55(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L235
  movl   $0xd,0x0(%rbp)
  mov    $0x1,%eax
  jmp    L1
L235:
  lea    D239(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L267
  movl   $0x7,0x0(%rbp)
  mov    $0x1,%eax
  jmp    L1
L267:
  lea    D37(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L385
  movl   $0x12,0x0(%rbp)
  mov    $0x1,%eax
  jmp    L1
L385:
  lea    D181(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L500
  movl   $0x0,0x0(%rbp)
  mov    $0x1,%eax
  jmp    L1
L500:
  lea    D0(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L418
  movl   $0x9,0x0(%rbp)
  mov    $0x1,%eax
  jmp    L1
L418:
  lea    D186(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L422
  movl   $0x5,0x0(%rbp)
  mov    $0x1,%eax
  jmp    L1
L422:
  lea    D157(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L346
  movl   $0x4,0x0(%rbp)
  mov    $0x1,%eax
  jmp    L1
L346:
  lea    D14(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L281
  movl   $0x6,0x0(%rbp)
  mov    $0x1,%eax
  jmp    L1
L281:
  lea    D51(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L69
  movl   $0xc,0x0(%rbp)
  mov    $0x1,%eax
  jmp    L1
L69:
  lea    D220(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L83
  movl   $0x8,0x0(%rbp)
  mov    $0x1,%eax
  jmp    L1
L83:
  lea    D21(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L339
  movl   $0x1,0x0(%rbp)
  mov    $0x1,%eax
  jmp    L1
L339:
  lea    D122(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L202
  movl   $0x2,0x0(%rbp)
  mov    $0x1,%eax
  jmp    L1
L202:
  lea    D168(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L452
  movl   $0xf,0x0(%rbp)
  mov    $0x1,%eax
  jmp    L1
L452:
  lea    D271(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L76
  movl   $0x13,0x0(%rbp)
  mov    $0x1,%eax
  jmp    L1
L76:
  lea    D322(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %rax,%rdx
  mov    $0x0,%eax
  test   %rdx,%rdx
  jne    L1
  movl   $0x14,0x0(%rbp)
  mov    $0x1,%eax
  jmp    L1
```

tool_calls: name: read_data
arguments: tag: D327
data_type: string
name: read_data
arguments: tag: D98
data_type: string
name: read_data
arguments: tag: D163
data_type: string
name: read_data
arguments: tag: D195
data_type: string
name: read_data
arguments: tag: D210
data_type: string
name: read_data
arguments: tag: D181
data_type: string
name: read_data
arguments: tag: D320
data_type: string
name: read_data
arguments: tag: D66
data_type: string
name: read_data
arguments: tag: D242
data_type: string
name: read_data
arguments: tag: D194
data_type: string
name: read_data
arguments: tag: D30
data_type: string
name: read_data
arguments: tag: D39
data_type: string
name: read_data
arguments: tag: D178
data_type: string
name: read_data
arguments: tag: D219
data_type: string
name: read_data
arguments: tag: D171
data_type: string
name: read_data
arguments: tag: D56
data_type: string
name: read_data
arguments: tag: D173
data_type: string
name: read_data
arguments: tag: D55
data_type: string
name: read_data
arguments: tag: D239
data_type: string
name: read_data
arguments: tag: D37
data_type: string
name: read_data
arguments: tag: D0
data_type: string
name: read_data
arguments: tag: D186
data_type: string
name: read_data
arguments: tag: D157
data_type: string
name: read_data
arguments: tag: D14
data_type: string
name: read_data
arguments: tag: D51
data_type: string
name: read_data
arguments: tag: D220
data_type: string
name: read_data
arguments: tag: D21
data_type: string
name: read_data
arguments: tag: D122
data_type: string
name: read_data
arguments: tag: D168
data_type: string
name: read_data
arguments: tag: D271
data_type: string
name: read_data
arguments: tag: D322
data_type: string

tool: D327: STRUCT

tool: D98: HELIX

tool: D163: STRAND

tool: D195: DNA_BIND

tool: D210: ZN_FING

tool: D181: DOMAIN

tool: D320: NP_BIND

tool: D66: CA_BIND

tool: D242: SITE

tool: D194: METAL

tool: D30: CARBOHYD

tool: D39: DISULFID

tool: D178: ACT_SITE

tool: D219: BINDING

tool: D171: MOD_RES

tool: D56: REPEAT

tool: D173: TRANSMEM

tool: D55: SIGNAL

tool: D239: VARSPLIC

tool: D37: VARIANT

tool: D0: BLOCK

tool: D186: REGION

tool: D157: PHYLOBLOCK

tool: D14: SEQERR

tool: D51: COIL

tool: D220: LOWCOMP

tool: D21: PFAM-A

tool: D122: PFAM-B

tool: D168: PROSITE

tool: D271: ELM

tool: D322: DISORDER

assistant: ```c
int check_ft_type(char *ft_type, char *ft_name, int *type) {
  int ret = 0;
  int seq_type = 0;
  if (strcmp(ft_type, "STRUCT") == 0) {
    seq_type = 3;
    (*type) = 14;
    ret = 1;
  } else if ((strcmp(ft_type, "HELIX") == 0) || (strcmp(ft_type, "STRAND") == 0)) {
    strcpy(ft_name, ft_type);
    strcpy(ft_type, "STRUCT");
    seq_type = 3;
    (*type) = 14;
    ret = 1;
  } else if ((strcmp(ft_type, "DNA_BIND") == 0) || (strcmp(ft_type, "ZN_FING") == 0)) {
    strcpy(ft_name, ft_type);
    strcpy(ft_type, "DOMAIN");
    (*type) = 0;
    ret = 1;
  } else if ((strcmp(ft_type, "NP_BIND") == 0) || (strcmp(ft_type, "CA_BIND") == 0) || (strcmp(ft_type, "METAL") == 0) || (strcmp(ft_type, "CARBOHYD") == 0) || (strcmp(ft_type, "DISULFID") == 0) || (strcmp(ft_type, "SITE") == 0) || (strcmp(ft_type, "ACT_SITE") == 0) || (strcmp(ft_type, "BINDING") == 0)) {
    strcpy(ft_name, ft_type);
    strcpy(ft_type, "SITE");
    (*type) = 16;
    ret = 1;
  } else if (strcmp(ft_type, "MOD_RES") == 0) {
    (*type) = 17;
    ret = 1;
  } else if (strcmp(ft_type, "REPEAT") == 0) {
    (*type) = 3;
    ret = 1;
  } else if (strcmp(ft_type, "TRANSMEM") == 0) {
    (*type) = 11;
    ret = 1;
  } else if (strcmp(ft_type, "SIGNAL") == 0) {
    (*type) = 13;
    ret = 1;
  } else if (strcmp(ft_type, "VARSPLIC") == 0) {
    (*type) = 7;
    ret = 1;
  } else if (strcmp(ft_type, "VARIANT") == 0) {
    (*type) = 18;
    ret = 1;
  } else if (strcmp(ft_type, "DOMAIN") == 0) {
    (*type) = 0;
    ret = 1;
  } else if (strcmp(ft_type, "BLOCK") == 0) {
    (*type) = 9;
    ret = 1;
  } else if (strcmp(ft_type, "REGION") == 0) {
    (*type) = 5;
    ret = 1;
  } else if (strcmp(ft_type, "PHYLOBLOCK") == 0) {
    (*type) = 4;
    ret = 1;
  } else if (strcmp(ft_type, "SEQERR") == 0) {
    (*type) = 6;
    ret = 1;
  } else if (strcmp(ft_type, "COIL") == 0) {
    (*type) = 12;
    ret = 1;
  } else if (strcmp(ft_type, "LOWCOMP") == 0) {
    (*type) = 8;
    ret = 1;
  } else if (strcmp(ft_type, "PFAM-A") == 0) {
    (*type) = 1;
    ret = 1;
  } else if (strcmp(ft_type, "PFAM-B") == 0) {
    (*type) = 2;
    ret = 1;
  } else if (strcmp(ft_type, "PROSITE") == 0) {
    (*type) = 15;
    ret = 1;
  } else if (strcmp(ft_type, "ELM") == 0) {
    (*type) = 19;
    ret = 1;
  } else if (strcmp(ft_type, "DISORDER") == 0) {
    (*type) = 20;
    ret = 1;
  }
  return ret;
}
```