// File: /workspace/github_c_makefile_star2_O0/markpeerdeman[P]mbemm/src/general/points.c
// Function: point_dll
point point_dll( point thedll, const int command, const int label )
{ point thecopy;
  /* make a copy of the incoming point for certain commands: */
  if ( (command==APPEND)||(command==NEW) )
  { thecopy=newpoint(); thecopy->label=-1; thecopy->x=0.0;
    thecopy->y=0.0; thecopy->z=0.0;
  }
  switch(command) {
    case START:  { while(thedll->PREV!=(point)NULL) thedll=thedll->PREV;
                   thedll=thedll->NEXT; /* because first item isn't used */
		   return thedll;
		 }
	case END:    { while((thedll!=(point)NULL)&&
	               (thedll->NEXT!=(point)NULL)) thedll=thedll->NEXT;
		   return thedll;
		 }
    case SEARCH: { thedll=point_dll(thedll,START,0);
		   while((thedll->label!=label)&&(thedll->NEXT!=(point)NULL))
		     thedll=thedll->NEXT;
		   if (thedll->label==label) return thedll;
		   else
		   {   evaluate_level(YELLOW,11);
			   return (point)NULL;
		   }
		 }
    case APPEND: { point_dll(thedll,END,0);
		   thedll->NEXT=thecopy;
		   thecopy->NEXT=(point)NULL;
		   thecopy->PREV=thedll;
		   return thecopy;
		 }
    case NEW:    { thecopy->PREV=(point)NULL;
		   thecopy->NEXT=(point)NULL;
		   return thecopy;
		 }
    case KILL:   { thedll=point_dll(thedll,END,0);
		   while(thedll->PREV!=(point)NULL)
		   { thedll=thedll->PREV;
		     myfree(thedll->NEXT);
		   }
		   myfree(thedll);
		   return (point)NULL;
		 }
    default:     { evaluate_level(YELLOW,12);
		 }
  } /* switch */
return (point)NULL;
}

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x28(%rsp)
movl %esi, 0x24(%rsp)
movl %edx, 0x20(%rsp)
cmpl $0x3, 0x24(%rsp)
je 0x175df
cmpl $0x4, 0x24(%rsp)
jne 0x1761c
callq 0x17540
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rax
movl $0xffffffff, 0x10(%rax) # imm = 0xFFFFFFFF
movq 0x18(%rsp), %rax
xorps %xmm0, %xmm0
movsd %xmm0, 0x20(%rax)
movq 0x18(%rsp), %rax
xorps %xmm0, %xmm0
movsd %xmm0, 0x28(%rax)
movq 0x18(%rsp), %rax
xorps %xmm0, %xmm0
movsd %xmm0, 0x30(%rax)
movl 0x24(%rsp), %eax
movq %rax, 0x10(%rsp)
subq $0x5, %rax
ja 0x17813
movq 0x10(%rsp), %rax
leaq 0x3e75(%rip), %rcx      # 0x1b4b0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0x17646
movq 0x28(%rsp), %rax
cmpq $0x0, (%rax)
je 0x17660
movq 0x28(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x28(%rsp)
jmp 0x17646
movq 0x28(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rax
movq %rax, 0x30(%rsp)
jmp 0x1782b
jmp 0x1767f
xorl %eax, %eax
cmpq $0x0, 0x28(%rsp)
movb %al, 0xf(%rsp)
je 0x1769e
movq 0x28(%rsp), %rax
cmpq $0x0, 0x8(%rax)
setne %al
movb %al, 0xf(%rsp)
movb 0xf(%rsp), %al
testb $0x1, %al
jne 0x176a8
jmp 0x176b8
movq 0x28(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x28(%rsp)
jmp 0x1767f
movq 0x28(%rsp), %rax
movq %rax, 0x30(%rsp)
jmp 0x1782b
movq 0x28(%rsp), %rdi
xorl %edx, %edx
movl %edx, %esi
callq 0x175c0
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rax
movl 0x10(%rax), %ecx
xorl %eax, %eax
cmpl 0x20(%rsp), %ecx
movb %al, 0xe(%rsp)
je 0x176ff
movq 0x28(%rsp), %rax
cmpq $0x0, 0x8(%rax)
setne %al
movb %al, 0xe(%rsp)
movb 0xe(%rsp), %al
testb $0x1, %al
jne 0x17709
jmp 0x17719
movq 0x28(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x28(%rsp)
jmp 0x176da
movq 0x28(%rsp), %rax
movl 0x10(%rax), %eax
cmpl 0x20(%rsp), %eax
jne 0x17736
movq 0x28(%rsp), %rax
movq %rax, 0x30(%rsp)
jmp 0x1782b
movl $0x1, %edi
movl $0xb, %esi
callq 0x15200
movq $0x0, 0x30(%rsp)
jmp 0x1782b
movq 0x28(%rsp), %rdi
movl $0x1, %esi
xorl %edx, %edx
callq 0x175c0
movq 0x18(%rsp), %rcx
movq 0x28(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0x18(%rsp), %rax
movq $0x0, 0x8(%rax)
movq 0x28(%rsp), %rcx
movq 0x18(%rsp), %rax
movq %rcx, (%rax)
movq 0x18(%rsp), %rax
movq %rax, 0x30(%rsp)
jmp 0x1782b
movq 0x18(%rsp), %rax
movq $0x0, (%rax)
movq 0x18(%rsp), %rax
movq $0x0, 0x8(%rax)
movq 0x18(%rsp), %rax
movq %rax, 0x30(%rsp)
jmp 0x1782b
movq 0x28(%rsp), %rdi
movl $0x1, %esi
xorl %edx, %edx
callq 0x175c0
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rax
cmpq $0x0, (%rax)
je 0x177fe
movq 0x28(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rax
movq 0x8(%rax), %rdi
callq 0x174a0
jmp 0x177d6
movq 0x28(%rsp), %rdi
callq 0x174a0
movq $0x0, 0x30(%rsp)
jmp 0x1782b
movl $0x1, %edi
movl $0xc, %esi
callq 0x15200
movq $0x0, 0x30(%rsp)
movq 0x30(%rsp), %rax
addq $0x38, %rsp
retq
nopw %cs:(%rax,%rax)
nop