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

```asm
<Qt_setMinimumLimitSource>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  mov    %rdi,-0x58(%rbp)
  mov    %esi,-0x5c(%rbp)
  mov    %rdx,-0x68(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x58(%rbp),%rax
  lea    D28(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strstr@plt>
  test   %rax,%rax
  jne    L75
  mov    -0x68(%rbp),%rax
  lea    D73(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strstr@plt>
  test   %rax,%rax
  je     L61
  mov    -0x58(%rbp),%rdx
  lea    -0x50(%rbp),%rax
  lea    D53(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L69
L61:
  mov    -0x68(%rbp),%rax
  lea    D37(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strstr@plt>
  test   %rax,%rax
  je     L69
  mov    -0x58(%rbp),%rdx
  lea    -0x50(%rbp),%rax
  lea    D81(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
L69:
  mov    -0x58(%rbp),%rax
  lea    D40(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L5
  mov    -0x58(%rbp),%rax
  lea    D79(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L68
L5:
  mov    -0x5c(%rbp),%eax
  lea    0x1(%rax),%edx
  lea    -0x30(%rbp),%rax
  lea    D63(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  lea    -0x50(%rbp),%rdx
  lea    -0x30(%rbp),%rax
  lea    D106(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <Qt_handleString@plt>
  jmp    L0
L68:
  lea    -0x50(%rbp),%rax
  mov    %rax,%rdx
  lea    D106(%rip),%rax
  mov    %rax,%rsi
  lea    D95(%rip),%rax
  mov    %rax,%rdi
  call   <Qt_handleString@plt>
  jmp    L0
L75:
  nop
L0:
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L43
  call   <__stack_chk_fail@plt>
L43:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D28
datatype: string
name: extract_symbolic_data
arguments: data_tag: D73
datatype: string
name: extract_symbolic_data
arguments: data_tag: D53
datatype: string
name: extract_symbolic_data
arguments: data_tag: D37
datatype: string
name: extract_symbolic_data
arguments: data_tag: D81
datatype: string
name: extract_symbolic_data
arguments: data_tag: D40
datatype: string
name: extract_symbolic_data
arguments: data_tag: D79
datatype: string
name: extract_symbolic_data
arguments: data_tag: D63
datatype: string
name: extract_symbolic_data
arguments: data_tag: D106
datatype: string
name: extract_symbolic_data
arguments: data_tag: D95
datatype: string

tool: D28: Gauge

tool: D73: default

tool: D53: %s::User

tool: D37: channel

tool: D81: %s::Channel

tool: D40: caStripPlot

tool: D79: caCartesianPlot

tool: D63: YaxisScalingMin_%d

tool: D106: enum

tool: D95: limitsMode

assistant: ```c
void Qt_setMinimumLimitSource(char *widget, int pen, char *token) {
  char strng[30];
  if (strstr(widget, "Gauge") != (char *)0)
    return;
  if (strstr(token, "default") != (char *)0) {
    sprintf(strng, "%s::User", widget);
  } else if (strstr(token, "channel") != (char *)0) {
    sprintf(strng, "%s::Channel", widget);
  }
  if (!strcmp(widget, "caStripPlot") || !strcmp(widget, "caCartesianPlot")) {
    char asc[30];
    sprintf(asc, "YaxisScalingMin_%d", pen + 1);
    Qt_handleString(asc, "enum", strng);
  } else {
    Qt_handleString("limitsMode", "enum", strng);
  }
}
```