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

```asm
<xml_parse_tag_only>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %rdi,%rbp
  mov    %rsi,%r13
  mov    %edx,%r14d
  mov    %rcx,%r15
  jmp    L179
L71:
  mov    %rbp,%rdi
  call   <feof@plt>
  cmp    $0x3c,%bl
  je     L145
  test   %eax,%eax
  jne    L145
L179:
  mov    %rbp,%rdi
  call   <getc@plt>
  mov    %eax,%ebx
  cmp    $0xa,%al
  jne    L71
  addl   $0x1,(%r15)
  jmp    L71
L145:
  mov    $0x0,%ebx
  jmp    L184
L286:
  cmpb   $0x21,0x0(%r13)
  jne    L173
  cmpb   $0x2d,0x1(%r13)
  jne    L173
  cmpb   $0x2d,0x2(%r13)
  jne    L173
  mov    $0x0,%ebx
  jmp    L41
L168:
  add    $0x1,%ebx
L163:
  mov    %rbp,%rdi
  call   <feof@plt>
  test   %eax,%eax
  jne    L281
L41:
  mov    %rbp,%rdi
  call   <getc@plt>
  cmp    $0x2d,%al
  je     L168
  cmp    $0x3e,%al
  jne    L72
  cmp    $0x1,%ebx
  je     L72
  mov    %rbp,%rdi
  call   <feof@plt>
  test   %eax,%eax
  jne    L281
  cmp    $0x1,%ebx
  jle    L41
  jmp    L281
L305:
  mov    %rbp,%rdi
  call   <feof@plt>
  cmp    $0x3c,%bl
  je     L261
  test   %eax,%eax
  jne    L261
L281:
  mov    %rbp,%rdi
  call   <getc@plt>
  mov    %eax,%ebx
  cmp    $0xa,%al
  jne    L305
  addl   $0x1,(%r15)
  jmp    L305
L261:
  mov    $0x0,%ebx
  jmp    L173
L32:
  test   %ebx,%ebx
  mov    $0x1,%eax
  cmove  %eax,%ebx
  movslq %ebx,%rbx
  movb   $0x0,-0x1(%r13,%rbx,1)
  mov    %r13,%rdi
  call   <xml_remove_leading_trailing_spaces@plt>
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L72:
  mov    $0x0,%ebx
  jmp    L163
L151:
  movb   $0x20,(%r12)
L127:
  add    $0x1,%ebx
  cmp    $0x3,%ebx
  je     L286
L173:
  mov    %rbp,%rdi
  call   <feof@plt>
  cmp    %r14d,%ebx
  jge    L32
  test   %eax,%eax
  jne    L32
  movslq %ebx,%rax
  cmpb   $0x3e,-0x1(%r13,%rax,1)
  je     L32
L184:
  movslq %ebx,%r12
  add    %r13,%r12
  mov    %rbp,%rdi
  call   <getc@plt>
  cmp    $0xa,%al
  je     L151
  mov    %al,(%r12)
  cmp    $0xd,%al
  jne    L127
  mov    %rbp,%rdi
  call   <feof@plt>
  test   %eax,%eax
  je     L184
  jmp    L127
```

assistant: ```c
void xml_parse_tag_only(FILE *fileptr, char *tag, int maxlen, int *lnn) {
  int i;
  char ch;
  do {
    ch = getc(fileptr);
    if (ch == '\n')
      (*lnn)++;
  } while ((!feof(fileptr)) && (ch != '<'));
  i = 0;
  do {
    do {
      tag[i] = getc(fileptr);
      if (tag[i] == '\n')
        tag[i] = ' ';
    } while ((tag[i] == '\r') && (!feof(fileptr)));
    i = i + 1;
    if ((i == 3) && (tag[0] == '!') && (tag[1] == '-') && (tag[2] == '-')) {
      i = 0;
      do {
        ch = getc(fileptr);
        if (ch == '-')
          i = i + 1;
        else if ((ch != '>') || (i == 1))
          i = 0;
      } while ((!feof(fileptr)) && ((i < 2) || (ch != '>')));
      do {
        ch = getc(fileptr);
        if (ch == '\n')
          (*lnn)++;
      } while ((!feof(fileptr)) && (ch != '<'));
      i = 0;
    }
  } while ((!feof(fileptr)) && (i < maxlen) && (tag[i - 1] != '>'));
  if (i == 0)
    i = 1;
  tag[i - 1] = '\0';
  xml_remove_leading_trailing_spaces(tag);
}
```