// File: /workspace/github_c_makefile_star2_O0/markpeerdeman[P]mbemm/src/general/restr.c
// Function: restraint_dll
restraint restraint_dll( restraint thedll, const int command, const int label )
{ restraint thecopy;
  /* make a copy of the incoming restraint for certain commands: */
  if ((command==APPEND)||(command==NEW)) thecopy=(restraint)newrestraint();
	switch(command) {
	case START:  { while(thedll->PREV!=(restraint)NULL) thedll=thedll->PREV;
				   thedll=thedll->NEXT;
				   return thedll;
				 }
	case END:    { while((thedll!=(restraint)NULL)&&
	               (thedll->NEXT!=(restraint)NULL)) thedll=thedll->NEXT;
				   return thedll;
				 }
	case SEARCH: { if (thedll->NEXT==NULL) return (restraint)NULL;
				   thedll=restraint_dll(thedll,START,0);
				   while((thedll->label!=label)&&(thedll->NEXT!=(restraint)NULL))
				   { thedll=thedll->NEXT;
				   }
				   if (thedll->label==label) return thedll;
				   else
				   {/*  evaluate_level(YELLOW,81); */
					 return (restraint)NULL;
				   }
				 }
	case APPEND: { thedll = restraint_dll(thedll,END,0);
				   thedll->NEXT=thecopy;
				   thecopy->PREV=thedll;
				   thecopy->NEXT=(restraint)NULL;
				   return thecopy;
				 }
	case NEW:    { thecopy->PREV=(restraint)NULL;
				   thecopy->NEXT=(restraint)NULL;
				   return thecopy;
				 }
	case KILL:   { thedll=restraint_dll(thedll,END,0);
				   while(thedll->PREV!=(restraint)NULL)
				   { thedll=thedll->PREV;
					 myfree(thedll->NEXT);
				   }
				   myfree(thedll);
				   return (restraint)NULL;
				 }
	default:     { evaluate_level(YELLOW,82);
				 }
  } /* switch */
return (restraint)NULL;
}

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x28(%rsp)
movl %esi, 0x24(%rsp)
movl %edx, 0x20(%rsp)
cmpl $0x3, 0x24(%rsp)
je 0x17a5f
cmpl $0x4, 0x24(%rsp)
jne 0x17a69
callq 0x17840
movq %rax, 0x18(%rsp)
movl 0x24(%rsp), %eax
movq %rax, 0x10(%rsp)
subq $0x5, %rax
ja 0x17c70
movq 0x10(%rsp), %rax
leaq 0x3a40(%rip), %rcx      # 0x1b4c8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0x17a93
movq 0x28(%rsp), %rax
cmpq $0x0, (%rax)
je 0x17aad
movq 0x28(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x28(%rsp)
jmp 0x17a93
movq 0x28(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rax
movq %rax, 0x30(%rsp)
jmp 0x17c88
jmp 0x17acc
xorl %eax, %eax
cmpq $0x0, 0x28(%rsp)
movb %al, 0xf(%rsp)
je 0x17aeb
movq 0x28(%rsp), %rax
cmpq $0x0, 0x8(%rax)
setne %al
movb %al, 0xf(%rsp)
movb 0xf(%rsp), %al
testb $0x1, %al
jne 0x17af5
jmp 0x17b05
movq 0x28(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x28(%rsp)
jmp 0x17acc
movq 0x28(%rsp), %rax
movq %rax, 0x30(%rsp)
jmp 0x17c88
movq 0x28(%rsp), %rax
cmpq $0x0, 0x8(%rax)
jne 0x17b2e
movq $0x0, 0x30(%rsp)
jmp 0x17c88
movq 0x28(%rsp), %rdi
xorl %edx, %edx
movl %edx, %esi
callq 0x17a40
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rax
movl 0x14(%rax), %ecx
xorl %eax, %eax
cmpl 0x20(%rsp), %ecx
movb %al, 0xe(%rsp)
je 0x17b66
movq 0x28(%rsp), %rax
cmpq $0x0, 0x8(%rax)
setne %al
movb %al, 0xe(%rsp)
movb 0xe(%rsp), %al
testb $0x1, %al
jne 0x17b70
jmp 0x17b80
movq 0x28(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x28(%rsp)
jmp 0x17b41
movq 0x28(%rsp), %rax
movl 0x14(%rax), %eax
cmpl 0x20(%rsp), %eax
jne 0x17b9d
movq 0x28(%rsp), %rax
movq %rax, 0x30(%rsp)
jmp 0x17c88
movq $0x0, 0x30(%rsp)
jmp 0x17c88
movq 0x28(%rsp), %rdi
movl $0x1, %esi
xorl %edx, %edx
callq 0x17a40
movq %rax, 0x28(%rsp)
movq 0x18(%rsp), %rcx
movq 0x28(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0x28(%rsp), %rcx
movq 0x18(%rsp), %rax
movq %rcx, (%rax)
movq 0x18(%rsp), %rax
movq $0x0, 0x8(%rax)
movq 0x18(%rsp), %rax
movq %rax, 0x30(%rsp)
jmp 0x17c88
movq 0x18(%rsp), %rax
movq $0x0, (%rax)
movq 0x18(%rsp), %rax
movq $0x0, 0x8(%rax)
movq 0x18(%rsp), %rax
movq %rax, 0x30(%rsp)
jmp 0x17c88
movq 0x28(%rsp), %rdi
movl $0x1, %esi
xorl %edx, %edx
callq 0x17a40
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rax
cmpq $0x0, (%rax)
je 0x17c5b
movq 0x28(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rax
movq 0x8(%rax), %rdi
callq 0x174a0
jmp 0x17c33
movq 0x28(%rsp), %rdi
callq 0x174a0
movq $0x0, 0x30(%rsp)
jmp 0x17c88
movl $0x1, %edi
movl $0x52, %esi
callq 0x15200
movq $0x0, 0x30(%rsp)
movq 0x30(%rsp), %rax
addq $0x38, %rsp
retq
nopw %cs:(%rax,%rax)
nopl (%rax)