user: 请从给定的汇编指令推导出C源代码：

```asm
<ReadPowerStatus>:
  endbr64
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %rdi,%rbp
  lea    D9(%rip),%rsi
  call   <ProcessCommand@plt>
  mov    %eax,%ebx
  test   %eax,%eax
  je     L151
L100:
  mov    %ebx,%eax
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  ret
L151:
  mov    %rbp,%rdi
  call   <atoi@plt>
  cmp    $0x28,%eax
  jg     L12
  mov    $0x0,%esi
  test   %eax,%eax
  js     L140
  cmp    $0x28,%eax
  ja     L165
  mov    %eax,%eax
  lea    D16(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D46(%rip),%rsi
  jmp    L140
L165:
  mov    $0x0,%esi
  jmp    L140
L12:
  lea    D97(%rip),%rsi
  cmp    $0x51,%eax
  je     L140
  cmp    $0x58,%eax
  jne    L154
  lea    D21(%rip),%rsi
  jmp    L140
L154:
  cmp    $0x50,%eax
  lea    D28(%rip),%rsi
  mov    $0x0,%eax
  cmovne %rax,%rsi
L140:
  mov    %rbp,%rdi
  call   <strcpy@plt>
  jmp    L100
  lea    D91(%rip),%rsi
  jmp    L140
  lea    D68(%rip),%rsi
  jmp    L140
  lea    D61(%rip),%rsi
  jmp    L140
  lea    D56(%rip),%rsi
  jmp    L140
  lea    D125(%rip),%rsi
  jmp    L140
  lea    D6(%rip),%rsi
  jmp    L140
  lea    D77(%rip),%rsi
  jmp    L140
```

tool_calls: name: unpack_data
arguments: tag: D9
datatype: string
name: unpack_data
arguments: tag: D46
datatype: string
name: unpack_data
arguments: tag: D97
datatype: string
name: unpack_data
arguments: tag: D21
datatype: string
name: unpack_data
arguments: tag: D28
datatype: string
name: unpack_data
arguments: tag: D91
datatype: string
name: unpack_data
arguments: tag: D68
datatype: string
name: unpack_data
arguments: tag: D61
datatype: string
name: unpack_data
arguments: tag: D56
datatype: string
name: unpack_data
arguments: tag: D125
datatype: string
name: unpack_data
arguments: tag: D6
datatype: string
name: unpack_data
arguments: tag: D77
datatype: string

tool: D9: CR0

tool: D46: power on

tool: D97: stand-by after cooling down due to lamp failure

tool: D21: stand-by due to abnormal temperature or door failure

tool: D28: stand-by

tool: D91: processing cooling down

tool: D68: power failure

tool: D61: processing cooling down due to abnormal temperature

tool: D56: processing power save / cooling down

tool: D125: power save

tool: D6: processing cooling down after lamp failure

tool: D77: processing countdown

assistant: ```c
int ReadPowerStatus(char ret[]) {
  char *status = NULL;
  int err;
  if (!(err = ProcessCommand(ret, "CR0\r"))) {
    switch (atoi((char *)ret)) {
    case 00:
      status = "power on";
      break;
    case 80:
      status = "stand-by";
      break;
    case 40:
      status = "processing countdown";
      break;
    case 20:
      status = "processing cooling down";
      break;
    case 10:
      status = "power failure";
      break;
    case 28:
      status = "processing cooling down due to abnormal temperature";
      break;
    case 88:
      status = "stand-by due to abnormal temperature or door failure";
      break;
    case 24:
      status = "processing power save / cooling down";
      break;
    case 04:
      status = "power save";
      break;
    case 21:
      status = "processing cooling down after lamp failure";
      break;
    case 81:
      status = "stand-by after cooling down due to lamp failure";
      break;
    }
    strcpy(ret, status);
  }
  return (err);
}
```