user: Translate the below assembly code into C programming language:

```asm
<HaveAlsaRoutines>:
  endbr64
  sub    $0x8,%rsp
  xor    %eax,%eax
  call   <HaveMy_snd_pcm_open@plt>
  test   %rax,%rax
  jne    L79
L198:
  xor    %eax,%eax
L207:
  add    $0x8,%rsp
  ret
  nopl   0x0(%rax,%rax,1)
L79:
  xor    %eax,%eax
  call   <HaveMy_snd_pcm_close@plt>
  test   %rax,%rax
  je     L198
  xor    %eax,%eax
  call   <HaveMy_snd_pcm_hw_params_malloc@plt>
  test   %rax,%rax
  je     L198
  xor    %eax,%eax
  call   <HaveMy_snd_pcm_hw_params_free@plt>
  test   %rax,%rax
  je     L198
  xor    %eax,%eax
  call   <HaveMy_snd_pcm_hw_params_any@plt>
  test   %rax,%rax
  je     L198
  xor    %eax,%eax
  call   <HaveMy_snd_pcm_hw_params_set_access@plt>
  test   %rax,%rax
  je     L198
  xor    %eax,%eax
  call   <HaveMy_snd_pcm_hw_params_set_format@plt>
  test   %rax,%rax
  je     L198
  xor    %eax,%eax
  call   <HaveMy_snd_pcm_hw_params_set_rate_near@plt>
  test   %rax,%rax
  je     L198
  xor    %eax,%eax
  call   <HaveMy_snd_pcm_hw_params_set_channels@plt>
  test   %rax,%rax
  je     L198
  xor    %eax,%eax
  call   <HaveMy_snd_pcm_hw_params_set_buffer_size_near@plt>
  test   %rax,%rax
  je     L198
  xor    %eax,%eax
  call   <HaveMy_snd_pcm_hw_params_set_period_size_near@plt>
  test   %rax,%rax
  je     L198
  xor    %eax,%eax
  call   <HaveMy_snd_pcm_hw_params@plt>
  test   %rax,%rax
  je     L198
  xor    %eax,%eax
  call   <HaveMy_snd_pcm_sw_params_malloc@plt>
  test   %rax,%rax
  je     L198
  xor    %eax,%eax
  call   <HaveMy_snd_pcm_sw_params_free@plt>
  test   %rax,%rax
  je     L198
  xor    %eax,%eax
  call   <HaveMy_snd_pcm_sw_params_current@plt>
  test   %rax,%rax
  je     L198
  xor    %eax,%eax
  call   <HaveMy_snd_pcm_sw_params_set_start_threshold@plt>
  test   %rax,%rax
  je     L198
  xor    %eax,%eax
  call   <HaveMy_snd_pcm_sw_params_set_avail_min@plt>
  test   %rax,%rax
  je     L198
  xor    %eax,%eax
  call   <HaveMy_snd_pcm_sw_params@plt>
  test   %rax,%rax
  je     L198
  xor    %eax,%eax
  call   <HaveMy_snd_pcm_nonblock@plt>
  test   %rax,%rax
  je     L198
  xor    %eax,%eax
  call   <HaveMy_snd_pcm_state@plt>
  test   %rax,%rax
  je     L198
  xor    %eax,%eax
  call   <HaveMy_snd_pcm_prepare@plt>
  test   %rax,%rax
  je     L198
  xor    %eax,%eax
  call   <HaveMy_snd_pcm_start@plt>
  test   %rax,%rax
  je     L198
  xor    %eax,%eax
  call   <HaveMy_snd_pcm_resume@plt>
  test   %rax,%rax
  je     L198
  xor    %eax,%eax
  call   <HaveMy_snd_pcm_avail_update@plt>
  test   %rax,%rax
  je     L198
  xor    %eax,%eax
  call   <HaveMy_snd_pcm_writei@plt>
  test   %rax,%rax
  je     L198
  xor    %eax,%eax
  call   <HaveMy_snd_pcm_drop@plt>
  test   %rax,%rax
  je     L198
  xor    %eax,%eax
  call   <HaveMy_snd_strerror@plt>
  test   %rax,%rax
  setne  %al
  movzbl %al,%eax
  jmp    L207
```

assistant: ```c
int HaveAlsaRoutines(void) {
  int IsOk = 0;
  if (HaveMy_snd_pcm_open())
    if (HaveMy_snd_pcm_close())
      if (HaveMy_snd_pcm_hw_params_malloc())
        if (HaveMy_snd_pcm_hw_params_free())
          if (HaveMy_snd_pcm_hw_params_any())
            if (HaveMy_snd_pcm_hw_params_set_access())
              if (HaveMy_snd_pcm_hw_params_set_format())
                if (HaveMy_snd_pcm_hw_params_set_rate_near())
                  if (HaveMy_snd_pcm_hw_params_set_channels())
                    if (HaveMy_snd_pcm_hw_params_set_buffer_size_near())
                      if (HaveMy_snd_pcm_hw_params_set_period_size_near())
                        if (HaveMy_snd_pcm_hw_params())
                          if (HaveMy_snd_pcm_sw_params_malloc())
                            if (HaveMy_snd_pcm_sw_params_free())
                              if (HaveMy_snd_pcm_sw_params_current())
                                if (HaveMy_snd_pcm_sw_params_set_start_threshold())
                                  if (HaveMy_snd_pcm_sw_params_set_avail_min())
                                    if (HaveMy_snd_pcm_sw_params())
                                      if (HaveMy_snd_pcm_nonblock())
                                        if (HaveMy_snd_pcm_state())
                                          if (HaveMy_snd_pcm_prepare())
                                            if (HaveMy_snd_pcm_start())
                                              if (HaveMy_snd_pcm_resume())
                                                if (HaveMy_snd_pcm_avail_update())
                                                  if (HaveMy_snd_pcm_writei())
                                                    if (HaveMy_snd_pcm_drop())
                                                      if (HaveMy_snd_strerror()) {
                                                        IsOk = 1;
                                                      }
  return IsOk;
}
```