// File: /workspace/github_c_makefile_star2_O0/markpeerdeman[P]mbemm/src/general/elements.c
// Function: element_dll
element element_dll( element thedll, const int command, const int label )
{ element thecopy;
  int found=0;
  /* make a copy of the incoming element for certain commands: */
  if ( (command==APPEND)||(command==NEW) ) thecopy = newelement();
    switch(command) {
    case START:  { while(thedll->PREV!=(element)NULL) thedll=thedll->PREV;
                   thedll=thedll->NEXT;
		   return thedll;
		 }
	case END:    { while((thedll!=(element)NULL)&&
	               (thedll->NEXT!=(element)NULL)) thedll=thedll->NEXT;
		           return thedll;
		 }
    case SEARCH: { thedll=element_dll(thedll,START,0);
		   while((thedll->label!=label)&&(thedll->NEXT!=(element)NULL))
			 thedll=thedll->NEXT;
		   if (thedll->label==label) return thedll;
		   else
		   {   evaluate_level(YELLOW,71); 
		       return (element)NULL;
		   }
		 }
	case SEARCHNODE:
		 { thedll=element_dll(thedll,START,0);
		   found=0;
		   while((found==0)&&(thedll->NEXT!=(element)NULL))
			 { thedll=thedll->NEXT;
			   if (label==thedll->p1) found=1;
			   if (label==thedll->p2) found=1;
			   if (label==thedll->p3) found=1;
			 }
		   if (found==0) return (element)NULL; else return thedll;
		 }
	case APPEND: { thedll = element_dll(thedll,END,0);
		   thedll->NEXT=thecopy;
		   thecopy->NEXT=(element)NULL;
		   thecopy->PREV=thedll;
		   return thecopy;
		 }
	case NEW:    { thecopy->PREV=(element)NULL;
		   thecopy->NEXT=(element)NULL;
		   return thecopy;
		 }
	case KILL:   { thedll=element_dll(thedll,END,0);
		   while(thedll->PREV!=(element)NULL)
		   { thedll=thedll->PREV;
			 myfree(thedll->NEXT);
		   }
		   myfree(thedll);
		   return (element)NULL;
		 }
	default:     { evaluate_level(YELLOW,72);
		 }
  } /* switch */
return (element)NULL;
}

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x28(%rsp)
movl %esi, 0x24(%rsp)
movl %edx, 0x20(%rsp)
movl $0x0, 0x14(%rsp)
cmpl $0x3, 0x24(%rsp)
je 0x14597
cmpl $0x4, 0x24(%rsp)
jne 0x145a1
callq 0x144e0
movq %rax, 0x18(%rsp)
movl 0x24(%rsp), %eax
movq %rax, 0x8(%rsp)
subq $0x6, %rax
ja 0x14856
movq 0x8(%rsp), %rax
leaq 0x5f40(%rip), %rcx      # 0x1a500
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0x145cb
movq 0x28(%rsp), %rax
cmpq $0x0, (%rax)
je 0x145e5
movq 0x28(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x28(%rsp)
jmp 0x145cb
movq 0x28(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rax
movq %rax, 0x30(%rsp)
jmp 0x1486e
jmp 0x14604
xorl %eax, %eax
cmpq $0x0, 0x28(%rsp)
movb %al, 0x7(%rsp)
je 0x14623
movq 0x28(%rsp), %rax
cmpq $0x0, 0x8(%rax)
setne %al
movb %al, 0x7(%rsp)
movb 0x7(%rsp), %al
testb $0x1, %al
jne 0x1462d
jmp 0x1463d
movq 0x28(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x28(%rsp)
jmp 0x14604
movq 0x28(%rsp), %rax
movq %rax, 0x30(%rsp)
jmp 0x1486e
movq 0x28(%rsp), %rdi
xorl %edx, %edx
movl %edx, %esi
callq 0x14570
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rax
movl 0x14(%rax), %ecx
xorl %eax, %eax
cmpl 0x20(%rsp), %ecx
movb %al, 0x6(%rsp)
je 0x14684
movq 0x28(%rsp), %rax
cmpq $0x0, 0x8(%rax)
setne %al
movb %al, 0x6(%rsp)
movb 0x6(%rsp), %al
testb $0x1, %al
jne 0x1468e
jmp 0x1469e
movq 0x28(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x28(%rsp)
jmp 0x1465f
movq 0x28(%rsp), %rax
movl 0x14(%rax), %eax
cmpl 0x20(%rsp), %eax
jne 0x146bb
movq 0x28(%rsp), %rax
movq %rax, 0x30(%rsp)
jmp 0x1486e
movl $0x1, %edi
movl $0x47, %esi
callq 0x15200
movq $0x0, 0x30(%rsp)
jmp 0x1486e
movq 0x28(%rsp), %rdi
xorl %edx, %edx
movl %edx, %esi
callq 0x14570
movq %rax, 0x28(%rsp)
movl $0x0, 0x14(%rsp)
xorl %eax, %eax
cmpl $0x0, 0x14(%rsp)
movb %al, 0x5(%rsp)
jne 0x14711
movq 0x28(%rsp), %rax
cmpq $0x0, 0x8(%rax)
setne %al
movb %al, 0x5(%rsp)
movb 0x5(%rsp), %al
testb $0x1, %al
jne 0x1471b
jmp 0x1476d
movq 0x28(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x28(%rsp)
movl 0x20(%rsp), %eax
movq 0x28(%rsp), %rcx
cmpl 0x18(%rcx), %eax
jne 0x1473f
movl $0x1, 0x14(%rsp)
movl 0x20(%rsp), %eax
movq 0x28(%rsp), %rcx
cmpl 0x1c(%rcx), %eax
jne 0x14755
movl $0x1, 0x14(%rsp)
movl 0x20(%rsp), %eax
movq 0x28(%rsp), %rcx
cmpl 0x20(%rcx), %eax
jne 0x1476b
movl $0x1, 0x14(%rsp)
jmp 0x146f3
cmpl $0x0, 0x14(%rsp)
jne 0x14782
movq $0x0, 0x30(%rsp)
jmp 0x1486e
movq 0x28(%rsp), %rax
movq %rax, 0x30(%rsp)
jmp 0x1486e
movq 0x28(%rsp), %rdi
movl $0x1, %esi
xorl %edx, %edx
callq 0x14570
movq %rax, 0x28(%rsp)
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 0x1486e
movq 0x18(%rsp), %rax
movq $0x0, (%rax)
movq 0x18(%rsp), %rax
movq $0x0, 0x8(%rax)
movq 0x18(%rsp), %rax
movq %rax, 0x30(%rsp)
jmp 0x1486e
movq 0x28(%rsp), %rdi
movl $0x1, %esi
xorl %edx, %edx
callq 0x14570
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rax
cmpq $0x0, (%rax)
je 0x14841
movq 0x28(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rax
movq 0x8(%rax), %rdi
callq 0x174a0
jmp 0x14819
movq 0x28(%rsp), %rdi
callq 0x174a0
movq $0x0, 0x30(%rsp)
jmp 0x1486e
movl $0x1, %edi
movl $0x48, %esi
callq 0x15200
movq $0x0, 0x30(%rsp)
movq 0x30(%rsp), %rax
addq $0x38, %rsp
retq
nopl (%rax,%rax)