// File: gpertea[P]gclib/GBase.cpp
// Function: fgetline(char*&, int&, _IO_FILE*, long*, int*)
char* fgetline(char* & buf, int& buf_cap, FILE *stream, off_t* f_pos, int* linelen) {
  //reads a char at a time until \n and/or \r are encountered
  int c=0;
  GDynArray<char> arr(buf, buf_cap);
  off_t fpos=(f_pos!=NULL) ? *f_pos : 0;
  while ((c=getc(stream))!=EOF) {
    if (c=='\n' || c=='\r') {
       if (c=='\r') {
         if ((c=getc(stream))!='\n') ungetc(c,stream);
                                else fpos++;
         }
       fpos++;
       break;
       }
    fpos++;
    arr.Push((char)c);
    } //while i<buf_cap-1
  //if (linelen!=NULL) *linelen=i;
  if (linelen!=NULL) *linelen=arr.Count();
  if (f_pos!=NULL) *f_pos=fpos;
  //if (c==EOF && i==0) return NULL;
  if (c==EOF && arr.Count()==0) return NULL;
  arr.Push('\0');
  buf=arr();
  buf_cap=arr.Capacity();
  return buf;
  }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa0, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movl $0x0, -0x34(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rsi
movq -0x18(%rbp), %rax
movl (%rax), %edx
leaq -0x58(%rbp), %rdi
callq 0x5bf0
cmpq $0x0, -0x28(%rbp)
je 0x3c00
movq -0x28(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x78(%rbp)
jmp 0x3c08
xorl %eax, %eax
movq %rax, -0x78(%rbp)
jmp 0x3c08
movq -0x78(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x20(%rbp), %rdi
callq 0x20c0
movl %eax, -0x7c(%rbp)
jmp 0x3c1e
movl -0x7c(%rbp), %eax
movl %eax, -0x34(%rbp)
cmpl $-0x1, %eax
je 0x3cbd
cmpl $0xa, -0x34(%rbp)
je 0x3c39
cmpl $0xd, -0x34(%rbp)
jne 0x3c9e
cmpl $0xd, -0x34(%rbp)
jne 0x3c90
movq -0x20(%rbp), %rdi
callq 0x20c0
movl %eax, -0x80(%rbp)
jmp 0x3c4d
movl -0x80(%rbp), %eax
movl %eax, -0x34(%rbp)
cmpl $0xa, %eax
je 0x3c82
movl -0x34(%rbp), %edi
movq -0x20(%rbp), %rsi
callq 0x2070
jmp 0x3c66
jmp 0x3c8e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x5d00
jmp 0x3d98
movq -0x60(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x60(%rbp)
jmp 0x3c90
movq -0x60(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x60(%rbp)
jmp 0x3cbd
movq -0x60(%rbp), %rax
incq %rax
movq %rax, -0x60(%rbp)
movsbl -0x34(%rbp), %esi
leaq -0x58(%rbp), %rdi
callq 0x5c30
jmp 0x3cb8
jmp 0x3c10
cmpq $0x0, -0x30(%rbp)
je 0x3ce1
leaq -0x58(%rbp), %rdi
callq 0x5ca0
movl %eax, -0x84(%rbp)
jmp 0x3cd5
movl -0x84(%rbp), %ecx
movq -0x30(%rbp), %rax
movl %ecx, (%rax)
cmpq $0x0, -0x28(%rbp)
je 0x3cf3
movq -0x60(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
cmpl $-0x1, -0x34(%rbp)
jne 0x3d26
leaq -0x58(%rbp), %rdi
callq 0x5ca0
movl %eax, -0x88(%rbp)
jmp 0x3d0a
movl -0x88(%rbp), %eax
cmpl $0x0, %eax
jne 0x3d26
movq $0x0, -0x8(%rbp)
movl $0x1, -0x70(%rbp)
jmp 0x3d82
leaq -0x58(%rbp), %rdi
xorl %esi, %esi
callq 0x5c30
jmp 0x3d33
leaq -0x58(%rbp), %rdi
callq 0x5cc0
movq %rax, -0x90(%rbp)
jmp 0x3d45
movq -0x90(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, (%rax)
leaq -0x58(%rbp), %rdi
callq 0x5ce0
movl %eax, -0x94(%rbp)
jmp 0x3d64
movl -0x94(%rbp), %ecx
movq -0x18(%rbp), %rax
movl %ecx, (%rax)
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x8(%rbp)
movl $0x1, -0x70(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x5d00
movq -0x8(%rbp), %rax
addq $0xa0, %rsp
popq %rbp
retq
movq -0x68(%rbp), %rdi
callq 0x2400
nopw %cs:(%rax,%rax)