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

```asm
<Get_var_units>:
  endbr64
  push   %r12
  mov    %rdx,%r12
  push   %rbp
  mov    %rsi,%rbp
  lea    D138(%rip),%rsi
  mov    %rbp,%rdi
  sub    $0x8,%rsp
  call   <strcmp@plt>
  test   %rax,%rax
  je     L86
  lea    D145(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L86
  lea    D126(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L111
  lea    D7(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L66
  lea    D88(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L43
  lea    D24(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L43
  lea    D118(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L25
  lea    D15(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L25
  lea    D12(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L111
  lea    D13(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L111
  movb   $0x0,(%r12)
  mov    $0x1,%eax
  jmp    L68
  nopl   (%rax)
L86:
  mov    $0x800,%edx
  lea    D119(%rip),%rsi
  mov    %r12,%rdi
  call   <strncpy@plt>
  xor    %eax,%eax
L68:
  add    $0x8,%rsp
  pop    %rbp
  pop    %r12
  ret
  cs nopw 0x0(%rax,%rax,1)
L66:
  mov    $0x800,%edx
  lea    D121(%rip),%rsi
  mov    %r12,%rdi
  call   <strncpy@plt>
  xor    %eax,%eax
  jmp    L68
  nopl   0x0(%rax,%rax,1)
L111:
  mov    %r12,%rdi
  mov    $0x800,%edx
  lea    D28(%rip),%rsi
  call   <strncpy@plt>
  add    $0x8,%rsp
  xor    %eax,%eax
  pop    %rbp
  pop    %r12
  ret
  xchg   %ax,%ax
L43:
  mov    %r12,%rdi
  mov    $0x800,%edx
  lea    D38(%rip),%rsi
  call   <strncpy@plt>
  add    $0x8,%rsp
  xor    %eax,%eax
  pop    %rbp
  pop    %r12
  ret
  xchg   %ax,%ax
L25:
  mov    $0x800,%edx
  lea    D10(%rip),%rsi
  mov    %r12,%rdi
  call   <strncpy@plt>
  xor    %eax,%eax
  jmp    L68
```

tool_calls: name: unpack_data
arguments: label: D138
type: string
name: unpack_data
arguments: label: D145
type: string
name: unpack_data
arguments: label: D126
type: string
name: unpack_data
arguments: label: D7
type: string
name: unpack_data
arguments: label: D88
type: string
name: unpack_data
arguments: label: D24
type: string
name: unpack_data
arguments: label: D118
type: string
name: unpack_data
arguments: label: D15
type: string
name: unpack_data
arguments: label: D12
type: string
name: unpack_data
arguments: label: D13
type: string
name: unpack_data
arguments: label: D119
type: string
name: unpack_data
arguments: label: D121
type: string
name: unpack_data
arguments: label: D28
type: string
name: unpack_data
arguments: label: D38
type: string
name: unpack_data
arguments: label: D10
type: string

tool: D138: model_grid_cell__row_index

tool: D145: model_grid_cell__column_index

tool: D126: cyclone__magnitude_of_velocity

tool: D7: cyclone__azimuth_angle_of_velocity

tool: D88: atmosphere_bottom_air__pressure

tool: D24: atmosphere_bottom_air__reference_pressure

tool: D118: cyclone_air_flow_max_speed__radius

tool: D15: cyclone__radius

tool: D12: atmosphere_air_flow__east_component_of_velocity

tool: D13: atmosphere_air_flow__north_component_of_velocity

tool: D119: count

tool: D121: degrees

tool: D28: meters second-1

tool: D38: pascals

tool: D10: meters

assistant: ```c
int Get_var_units(void *self, const char *name, char *units) {
  if (strcmp(name, "model_grid_cell__row_index") == 0) {
    strncpy(units, "count", (2048));
    return (0);
  } else if (strcmp(name, "model_grid_cell__column_index") == 0) {
    strncpy(units, "count", (2048));
    return (0);
  } else if (strcmp(name, "cyclone__magnitude_of_velocity") == 0) {
    strncpy(units, "meters second-1", (2048));
    return (0);
  } else if (strcmp(name, "cyclone__azimuth_angle_of_velocity") == 0) {
    strncpy(units, "degrees", (2048));
    return (0);
  } else if (strcmp(name, "atmosphere_bottom_air__pressure") == 0) {
    strncpy(units, "pascals", (2048));
    return (0);
  } else if (strcmp(name, "atmosphere_bottom_air__reference_pressure") == 0) {
    strncpy(units, "pascals", (2048));
    return (0);
  } else if (strcmp(name, "cyclone_air_flow_max_speed__radius") == 0) {
    strncpy(units, "meters", (2048));
    return (0);
  } else if (strcmp(name, "cyclone__radius") == 0) {
    strncpy(units, "meters", (2048));
    return (0);
  } else if (strcmp(name, "atmosphere_air_flow__east_component_of_velocity") == 0) {
    strncpy(units, "meters second-1", (2048));
    return (0);
  } else if (strcmp(name, "atmosphere_air_flow__north_component_of_velocity") == 0) {
    strncpy(units, "meters second-1", (2048));
    return (0);
  } else {
    units[0] = '\0';
    return (1);
  }
}
```