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

```asm
<type_from_name>:
  endbr64
  push   %rbx
  mov    %rdi,%rbx
  lea    D113(%rip),%rsi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0x73,%eax
  test   %edx,%edx
  je     L97
  lea    D144(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0x6e,%eax
  test   %edx,%edx
  je     L97
  lea    D136(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0x71,%eax
  test   %edx,%edx
  je     L97
  lea    D102(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0x69,%eax
  test   %edx,%edx
  je     L97
  lea    D35(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0x75,%eax
  test   %edx,%edx
  je     L97
  lea    D31(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0x78,%eax
  test   %edx,%edx
  je     L97
  lea    D74(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0x74,%eax
  test   %edx,%edx
  je     L97
  lea    D96(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0x64,%eax
  test   %edx,%edx
  je     L97
  lea    D75(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0x79,%eax
  test   %edx,%edx
  je     L97
  lea    D140(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0x62,%eax
  test   %edx,%edx
  je     L97
  lea    D49(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0x6f,%eax
  test   %edx,%edx
  je     L97
  lea    D8(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0x76,%eax
  test   %edx,%edx
  je     L97
  lea    D23(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0x61,%eax
  test   %edx,%edx
  je     L97
  lea    D103(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0x72,%eax
  test   %edx,%edx
  je     L97
  lea    D138(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0x65,%eax
  test   %edx,%edx
  je     L97
  mov    %rbx,%rdx
  lea    D57(%rip),%rsi
  mov    $0x0,%edi
  call   <assert_error@plt>
  mov    $0x0,%eax
L97:
  pop    %rbx
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D113
type: string
name: disassemble_data
arguments: data_tag: D144
type: string
name: disassemble_data
arguments: data_tag: D136
type: string
name: disassemble_data
arguments: data_tag: D102
type: string
name: disassemble_data
arguments: data_tag: D35
type: string
name: disassemble_data
arguments: data_tag: D31
type: string
name: disassemble_data
arguments: data_tag: D74
type: string
name: disassemble_data
arguments: data_tag: D96
type: string
name: disassemble_data
arguments: data_tag: D75
type: string
name: disassemble_data
arguments: data_tag: D140
type: string
name: disassemble_data
arguments: data_tag: D49
type: string
name: disassemble_data
arguments: data_tag: D8
type: string
name: disassemble_data
arguments: data_tag: D23
type: string
name: disassemble_data
arguments: data_tag: D103
type: string
name: disassemble_data
arguments: data_tag: D138
type: string
name: disassemble_data
arguments: data_tag: D57
type: string

tool: D113: string

tool: D144: int16

tool: D136: uint16

tool: D102: int32

tool: D35: uint32

tool: D31: int64

tool: D74: uint64

tool: D96: double

tool: D75: byte

tool: D140: boolean

tool: D49: objpath

tool: D8: variant

tool: D23: array

tool: D103: struct

tool: D138: dict

tool: D57: Unknown type '%s'

assistant: ```c
int type_from_name(const char *arg) {
  if (!strcmp(arg, "string"))
    return 's';
  else if (!strcmp(arg, "int16"))
    return 'n';
  else if (!strcmp(arg, "uint16"))
    return 'q';
  else if (!strcmp(arg, "int32"))
    return 'i';
  else if (!strcmp(arg, "uint32"))
    return 'u';
  else if (!strcmp(arg, "int64"))
    return 'x';
  else if (!strcmp(arg, "uint64"))
    return 't';
  else if (!strcmp(arg, "double"))
    return 'd';
  else if (!strcmp(arg, "byte"))
    return 'y';
  else if (!strcmp(arg, "boolean"))
    return 'b';
  else if (!strcmp(arg, "objpath"))
    return 'o';
  else if (!strcmp(arg, "variant"))
    return 'v';
  else if (!strcmp(arg, "array"))
    return 'a';
  else if (!strcmp(arg, "struct"))
    return 'r';
  else if (!strcmp(arg, "dict"))
    return 'e';
  assert_error(0, "Unknown type '%s'", arg);
  return 0;
}
```