user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<key>:
  endbr64
  sub    $0x8,%rsp
  cmp    $0x7a,%edi
  jg     L178
  cmp    $0x1f,%edi
  jle    L216
  sub    $0x20,%edi
  cmp    $0x5a,%edi
  ja     L216
  mov    %edi,%edi
  lea    D4(%rip),%rdx
  movslq (%rdx,%rdi,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
L178:
  cmp    $0xe002,%edi
  je     L57
  jle    L297
  cmp    $0xe003,%edi
  jne    L216
  mov    $0x0,%eax
  call   <TurnRight@plt>
  jmp    L216
L297:
  cmp    $0xe000,%edi
  je     L125
  cmp    $0xe001,%edi
  jne    L216
  mov    $0x0,%eax
  call   <TurnForwards@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <shoulder2Subtract@plt>
L216:
  mov    $0x0,%eax
  add    $0x8,%rsp
  ret
  mov    $0x0,%eax
  call   <shoulder2Add@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <shoulder1Subtract@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <shoulder1Add@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <shoulder3Add@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <shoulder4Add@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <shoulder3Subtract@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <shoulder4Subtract@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <lat2Raise@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <lat2Lower@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <lat1Raise@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <lat1Lower@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <elbow2Add@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <elbow2Subtract@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <elbow1Add@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <elbow1Subtract@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <RotateAdd@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <RotateSubtract@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <MechTiltAdd@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <MechTiltSubtract@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <RaiseLeg2Forward@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <LowerLeg2Backwards@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <RaiseLeg2Outwards@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <LowerLeg2Inwards@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <RaiseLeg1Forward@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <LowerLeg1Backwards@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <RaiseLeg1Outwards@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <LowerLeg1Inwards@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <Heel2Add@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <Heel2Subtract@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <Heel1Add@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <Heel1Subtract@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <Ankle2Add@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <Ankle2Subtract@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <Ankle1Add@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <Ankle1Subtract@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <LightTurnRight@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <LightTurnLeft@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <LightForwards@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <LightBackwards@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <Toggle@plt>
  jmp    L216
L57:
  mov    $0x0,%eax
  call   <TurnLeft@plt>
  jmp    L216
L125:
  mov    $0x0,%eax
  call   <TurnBackwards@plt>
  jmp    L216
  mov    $0x0,%eax
  call   <FireCannon@plt>
  jmp    L216
```

assistant: ```c
GLenum key(int key, GLenum mask) {
  int i = 0;
  switch (key) {
  case 'q': {
    shoulder2Subtract();
    i++;
  } break;
  case 'a': {
    shoulder2Add();
    i++;
  } break;
  case 'w': {
    shoulder1Subtract();
    i++;
  } break;
  case 's': {
    shoulder1Add();
    i++;
  } break;
  case '2': {
    shoulder3Add();
    i++;
  } break;
  case '1': {
    shoulder4Add();
    i++;
  } break;
  case '4': {
    shoulder3Subtract();
    i++;
  } break;
  case '3': {
    shoulder4Subtract();
    i++;
  } break;
  case 'z': {
    lat2Raise();
    i++;
  } break;
  case 'Z': {
    lat2Lower();
    i++;
  } break;
  case 'x': {
    lat1Raise();
    i++;
  } break;
  case 'X': {
    lat1Lower();
    i++;
  } break;
  case 'A': {
    elbow2Add();
    i++;
  } break;
  case 'Q': {
    elbow2Subtract();
    i++;
  } break;
  case 'S': {
    elbow1Add();
    i++;
  } break;
  case 'W': {
    elbow1Subtract();
    i++;
  } break;
  case 'd': {
    RotateAdd();
    i++;
  } break;
  case 'g': {
    RotateSubtract();
    i++;
  } break;
  case 'r': {
    MechTiltAdd();
    i++;
  } break;
  case 'f': {
    MechTiltSubtract();
    i++;
  } break;
  case 'h': {
    RaiseLeg2Forward();
    i++;
  } break;
  case 'y': {
    LowerLeg2Backwards();
    i++;
  } break;
  case 'Y': {
    RaiseLeg2Outwards();
    i++;
  } break;
  case 'H': {
    LowerLeg2Inwards();
    i++;
  } break;
  case 'j': {
    RaiseLeg1Forward();
    i++;
  } break;
  case 'u': {
    LowerLeg1Backwards();
    i++;
  } break;
  case 'U': {
    RaiseLeg1Outwards();
    i++;
  } break;
  case 'J': {
    LowerLeg1Inwards();
    i++;
  } break;
  case 'N': {
    Heel2Add();
    i++;
  } break;
  case 'n': {
    Heel2Subtract();
    i++;
  } break;
  case 'M': {
    Heel1Add();
    i++;
  } break;
  case 'm': {
    Heel1Subtract();
    i++;
  } break;
  case 'k': {
    Ankle2Add();
    i++;
  } break;
  case 'K': {
    Ankle2Subtract();
    i++;
  } break;
  case 'l': {
    Ankle1Add();
    i++;
  } break;
  case 'L': {
    Ankle1Subtract();
    i++;
  } break;
  case 'p': {
    LightTurnRight();
    i++;
  } break;
  case 'i': {
    LightTurnLeft();
    i++;
  } break;
  case 'o': {
    LightForwards();
    i++;
  } break;
  case '9': {
    LightBackwards();
    i++;
  } break;
  case 't':
    Toggle();
    break;
  case 0xe002:
    TurnLeft();
    break;
  case 0xe003:
    TurnRight();
    break;
  case 0xe000:
    TurnBackwards();
    break;
  case 0xe001:
    TurnForwards();
    break;
  case ' ':
    FireCannon();
  }
  return 0;
}
```