user: Please show me the C implementation that matches the assembly code listed below:

```asm
<showMenu>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  lea    D11(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D5(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D31(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D71(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D126(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D36(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D40(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D4(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D13(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D102(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D63(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D132(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D93(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <getch@plt>
  sub    $0x31,%eax
  cmp    $0x4,%eax
  ja     L46
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D87(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D87(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    $0x0,%eax
  call   <doInsert@plt>
  jmp    L5
  mov    $0x0,%eax
  call   <doDelete@plt>
  jmp    L5
  mov    $0x0,%eax
  call   <doSearch@plt>
  jmp    L5
  mov    $0x0,%eax
  call   <doInOrder@plt>
  jmp    L5
  mov    $0x0,%eax
  call   <doShowHeight@plt>
  jmp    L5
L46:
  mov    $0x0,%edi
  call   <exit@plt>
  nop
L5:
  nop
  pop    %rbp
  ret
```

tool_calls: name: unpack_data
arguments: tag: D11
data_type: string
name: unpack_data
arguments: tag: D5
data_type: string
name: unpack_data
arguments: tag: D31
data_type: string
name: unpack_data
arguments: tag: D71
data_type: string
name: unpack_data
arguments: tag: D126
data_type: string
name: unpack_data
arguments: tag: D36
data_type: string
name: unpack_data
arguments: tag: D40
data_type: string
name: unpack_data
arguments: tag: D4
data_type: string
name: unpack_data
arguments: tag: D13
data_type: string
name: unpack_data
arguments: tag: D102
data_type: string
name: unpack_data
arguments: tag: D63
data_type: string
name: unpack_data
arguments: tag: D132
data_type: string
name: unpack_data
arguments: tag: D93
data_type: string

tool: D11: cls

tool: D5:      ___   ___      _____ ___ ___ ___       


tool: D31:      /_\ \ / / |    |_   _| _ \ __| __|  


tool: D71:     / _ \ - /| |__    | | |   / _|| _|     


tool: D126:    /_/ \_\_/ |____|   |_| |_|_\___|___|  


tool: D36:                      By: Raven G. Duran     


tool: D40: 



tool: D4: (1) Insert a Node


tool: D13: (2) Delete a Node


tool: D102: (3) Search a Node


tool: D63: (4) Print In Order


tool: D132: (5) Show Heights of Root


tool: D93: (6) Exit


assistant: ```c
void showMenu() {
  system("cls");
  printf("     ___   ___      _____ ___ ___ ___       \n");
  printf("     /_\\ \\ / / |    |_   _| _ \\ __| __|  \n");
  printf("    / _ \\ - /| |__    | | |   / _|| _|     \n");
  printf("   /_/ \\_\\_/ |____|   |_| |_|_\\___|___|  \n");
  printf("                     By: Raven G. Duran     \n");
  printf("\n\n");
  printf("(1) Insert a Node\n");
  printf("(2) Delete a Node\n");
  printf("(3) Search a Node\n");
  printf("(4) Print In Order\n");
  printf("(5) Show Heights of Root\n");
  printf("(6) Exit\n");
  switch (getch()) {
  case '1':
    doInsert();
    break;
  case '2':
    doDelete();
    break;
  case '3':
    doSearch();
    break;
  case '4':
    doInOrder();
    break;
  case '5':
    doShowHeight();
    break;
  default:
    exit(0);
  }
}
```