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

```asm
<show_KeyboardStatus>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x1c(%rbp)
  lea    D44(%rip),%rax
  mov    %rax,-0x10(%rbp)
  lea    -0x1c(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  mov    $0x3b,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <scanto@plt>
  mov    %eax,-0x18(%rbp)
  cmpl   $0x1b,-0x18(%rbp)
  jne    L104
  lea    -0x1c(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  mov    $0x6e,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <scan_any@plt>
  mov    %eax,-0x18(%rbp)
  cmpl   $0x0,-0x18(%rbp)
  je     L104
  cmpl   $0x28,-0x18(%rbp)
  ja     L298
  mov    -0x18(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  lea    D115(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D115(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D281(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D412(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D306(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D346(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D135(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D274(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D36(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D122(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D337(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D66(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D416(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D361(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D290(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D258(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D76(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D426(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D186(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D235(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D93(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D438(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D371(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D224(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D336(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D360(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D98(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D276(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D292(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D429(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D110(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
  lea    D33(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L104
L298:
  lea    D420(%rip),%rax
  mov    %rax,-0x10(%rbp)
L104:
  mov    -0x10(%rbp),%rax
  mov    %rax,%rsi
  lea    D28(%rip),%rax
  mov    %rax,%rdi
  call   <show_result@plt>
  mov    -0x1c(%rbp),%eax
  mov    %eax,-0x14(%rbp)
  lea    -0x1c(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  mov    $0x6e,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <scan_any@plt>
  mov    %eax,-0x18(%rbp)
  mov    -0x1c(%rbp),%eax
  cmp    %eax,-0x14(%rbp)
  je     L391
  mov    $0xa,%esi
  mov    $0x5,%edi
  call   <vt_move@plt>
  cmpl   $0x8,-0x18(%rbp)
  je     L231
  cmpl   $0x8,-0x18(%rbp)
  jg     L289
  cmpl   $0x0,-0x18(%rbp)
  je     L8
  cmpl   $0x3,-0x18(%rbp)
  je     L320
  jmp    L289
L8:
  lea    D343(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L360
L320:
  lea    D385(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L360
L231:
  lea    D410(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L360
L289:
  lea    D340(%rip),%rax
  mov    %rax,-0x10(%rbp)
L360:
  mov    -0x10(%rbp),%rax
  mov    %rax,%rsi
  lea    D28(%rip),%rax
  mov    %rax,%rdi
  call   <show_result@plt>
  mov    $0xa,%esi
  mov    $0x6,%edi
  call   <vt_move@plt>
  lea    -0x1c(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  mov    $0x6e,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <scan_any@plt>
  test   %eax,%eax
  je     L44
  cmp    $0x1,%eax
  je     L82
  jmp    L21
L44:
  lea    D259(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L183
L82:
  lea    D319(%rip),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L183
L21:
  lea    D262(%rip),%rax
  mov    %rax,-0x10(%rbp)
L183:
  mov    -0x10(%rbp),%rax
  mov    %rax,%rsi
  lea    D28(%rip),%rax
  mov    %rax,%rdi
  call   <show_result@plt>
L391:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L377
  call   <__stack_chk_fail@plt>
L377:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: tag: D44
type: string
name: extract_symbolic_data
arguments: tag: D281
type: string
name: extract_symbolic_data
arguments: tag: D412
type: string
name: extract_symbolic_data
arguments: tag: D306
type: string
name: extract_symbolic_data
arguments: tag: D346
type: string
name: extract_symbolic_data
arguments: tag: D135
type: string
name: extract_symbolic_data
arguments: tag: D274
type: string
name: extract_symbolic_data
arguments: tag: D36
type: string
name: extract_symbolic_data
arguments: tag: D122
type: string
name: extract_symbolic_data
arguments: tag: D337
type: string
name: extract_symbolic_data
arguments: tag: D66
type: string
name: extract_symbolic_data
arguments: tag: D416
type: string
name: extract_symbolic_data
arguments: tag: D361
type: string
name: extract_symbolic_data
arguments: tag: D290
type: string
name: extract_symbolic_data
arguments: tag: D258
type: string
name: extract_symbolic_data
arguments: tag: D76
type: string
name: extract_symbolic_data
arguments: tag: D426
type: string
name: extract_symbolic_data
arguments: tag: D186
type: string
name: extract_symbolic_data
arguments: tag: D235
type: string
name: extract_symbolic_data
arguments: tag: D93
type: string
name: extract_symbolic_data
arguments: tag: D438
type: string
name: extract_symbolic_data
arguments: tag: D371
type: string
name: extract_symbolic_data
arguments: tag: D224
type: string
name: extract_symbolic_data
arguments: tag: D336
type: string
name: extract_symbolic_data
arguments: tag: D360
type: string
name: extract_symbolic_data
arguments: tag: D98
type: string
name: extract_symbolic_data
arguments: tag: D276
type: string
name: extract_symbolic_data
arguments: tag: D292
type: string
name: extract_symbolic_data
arguments: tag: D429
type: string
name: extract_symbolic_data
arguments: tag: D110
type: string
name: extract_symbolic_data
arguments: tag: D33
type: string
name: extract_symbolic_data
arguments: tag: D420
type: string
name: extract_symbolic_data
arguments: tag: D28
type: string
name: extract_symbolic_data
arguments: tag: D343
type: string
name: extract_symbolic_data
arguments: tag: D385
type: string
name: extract_symbolic_data
arguments: tag: D410
type: string
name: extract_symbolic_data
arguments: tag: D340
type: string
name: extract_symbolic_data
arguments: tag: D259
type: string
name: extract_symbolic_data
arguments: tag: D319
type: string
name: extract_symbolic_data
arguments: tag: D262
type: string

tool: D44: failed

tool: D281: North American/ASCII

tool: D412: British

tool: D306: Flemish

tool: D346: French Canadian

tool: D135: Danish

tool: D274: Finnish

tool: D36: German

tool: D122: Dutch

tool: D337: Italian

tool: D66: Swiss (French)

tool: D416: Swiss (German)

tool: D361: Swedish

tool: D290: Norwegian/Danish

tool: D258: French/Belgian

tool: D76: Spanish Int.

tool: D426: Portugese

tool: D186: Hebrew

tool: D235: Greek

tool: D93: Canadian (English)

tool: D438: Turkish Q/Turkish

tool: D371: Turkish F/Turkish

tool: D224: Hungarian

tool: D336: Spanish National

tool: D360: Slovak

tool: D98: Czech

tool: D276: Polish

tool: D292: Romanian

tool: D429: SCS

tool: D110: Russian

tool: D33: Latin American

tool: D420: unknown

tool: D28: %s

tool: D343: keyboard ready

tool: D385: no keyboard

tool: D410: keyboard busy

tool: D340: unknown keyboard status

tool: D259: LK201

tool: D319: LK401

tool: D262: unknown keyboard type

assistant: ```c
void show_KeyboardStatus(char *report) {
  int pos = 0;
  int code;
  int save;
  const char *show = "failed";
  if ((code = scanto(report, &pos, ';')) == 27 && (code = scan_any(report, &pos, 'n')) != 0) {
    switch (code) {
    case 1:
      show = "North American/ASCII";
      break;
    case 2:
      show = "British";
      break;
    case 3:
      show = "Flemish";
      break;
    case 4:
      show = "French Canadian";
      break;
    case 5:
      show = "Danish";
      break;
    case 6:
      show = "Finnish";
      break;
    case 7:
      show = "German";
      break;
    case 8:
      show = "Dutch";
      break;
    case 9:
      show = "Italian";
      break;
    case 10:
      show = "Swiss (French)";
      break;
    case 11:
      show = "Swiss (German)";
      break;
    case 12:
      show = "Swedish";
      break;
    case 13:
      show = "Norwegian/Danish";
      break;
    case 14:
      show = "French/Belgian";
      break;
    case 15:
      show = "Spanish Int.";
      break;
    case 16:
      show = "Portugese";
      break;
    case 19:
      show = "Hebrew";
      break;
    case 22:
      show = "Greek";
      break;
    case 28:
      show = "Canadian (English)";
      break;
    case 29:
      show = "Turkish Q/Turkish";
      break;
    case 30:
      show = "Turkish F/Turkish";
      break;
    case 31:
      show = "Hungarian";
      break;
    case 32:
      show = "Spanish National";
      break;
    case 33:
      show = "Slovak";
      break;
    case 34:
      show = "Czech";
      break;
    case 35:
      show = "Polish";
      break;
    case 36:
      show = "Romanian";
      break;
    case 38:
      show = "SCS";
      break;
    case 39:
      show = "Russian";
      break;
    case 40:
      show = "Latin American";
      break;
    default:
      show = "unknown";
    }
  }
  show_result("%s", show);
  save = pos;
  code = scan_any(report, &pos, 'n');
  if (save != pos) {
    vt_move(5, 10);
    switch (code) {
    case 0:
      show = "keyboard ready";
      break;
    case 3:
      show = "no keyboard";
      break;
    case 8:
      show = "keyboard busy";
      break;
    default:
      show = "unknown keyboard status";
    }
    show_result("%s", show);
    vt_move(6, 10);
    switch (scan_any(report, &pos, 'n')) {
    case 0:
      show = "LK201";
      break;
    case 1:
      show = "LK401";
      break;
    default:
      show = "unknown keyboard type";
    }
    show_result("%s", show);
  }
}
```