// File: /workspace/github_c_makefile_star2_O0/mishun[P]plantri/fullgen.c
// Function: sandwich
void sandwich (int min_sechsecke, int max_sechsecke)

{ 
int knotenzahl, maxpfadlaenge, s1ps2; 
int laenge_1, laenge_2, laenge_3;
KNOTENTYP adresse_1[6], adresse_2[6], adresse_3[6]; 
int sixgons_1, sixgons_2, sixgons_3; /* zur besseren lesbarkeit -- es koennte auch
					immer adresse_i[1] benutzt werden. s_1 ist 
					die Anzahl der 6-Ecke zwischen l1 und l2. s_2 zwischen
					l2 und l3 und s_3..... analog fuer adresse und item */ 
KANTE *anfang_1, *anfang_2, *anfang_3; /* eine kanonische Kante auf dem Rand zum Anfangen */ 
ITEMLISTE *item_1, *item_2, *item_3; 
int randl_p1, randl_p2, randl_p3; 
BOOL gebaut_1, gebaut_2, ipr_fault_item2; 
PLANMAP map;
KNOTENTYP code[20];
int j, czmerke_1, czmerke_2, czmerke_3;
int modulozaehler;

modulozaehler=rest;
/* l1--l2  und  l2--l3  bilden je ein brillenglas */


knotenzahl= 20 + 2*max_sechsecke; maxpfadlaenge=knotenzahl+1;
init_map(map);
code[1]=3;

for (laenge_1=(min_2_3_4 /2); laenge_1 <= maxpfadlaenge-minbrillenglas; laenge_1++) 
  { 
  code[2]=laenge_1;
  for (laenge_2=1; laenge_2 <= maxpfadlaenge-min_2_3_4; laenge_2 += 2) /* muss immer ungerade sein ! */ 
  { randl_p1=laenge_1+laenge_2;
    if (brillenglasmark[randl_p1])
    { /* l1+l2 umrahmt patch 1 */
       code[3]=laenge_2;
 	if (randl_p1%2) { adresse_1[0]=5; adresse_1[2]=(randl_p1-1)/2; }
 	 else { adresse_1[0]=4; adresse_1[2]=(randl_p1-2)/2; adresse_1[3]=0; }
 	for (sixgons_1=0; sixgons_1 <= max_sechsecke; sixgons_1++)
 	 { 	
	   adresse_1[1]=sixgons_1;
	   for (item_1=suche_item(adresse_1); item_1 != nil; item_1=item_1->next_item)
	     { 	
	       modulozaehler++;
	       if (modulozaehler==mod) modulozaehler=0;
	       if (!mod || (modulozaehler==0))
		 {
		   czmerke_1=4+adresse_1[0];
		   for (j=4; j<czmerke_1; j++) code[j]=item_1->code[j-4];
		   for (laenge_3=1; ((randl_p1 + laenge_3) <= maxpfadlaenge) && (laenge_1>= laenge_3); laenge_3++)
		     { randl_p2=laenge_2+laenge_3;
		       randl_p3=laenge_3+laenge_1;
		       if (brillenglasmark[randl_p2] && zwei_3_4_mark[randl_p3])
			 { code[0]=laenge_3 + randl_p1;
			   gebaut_1=0;
			   if (randl_p2%2) { adresse_2[0]=5; adresse_2[2]=(randl_p2-1)/2; } 	 
			   else { adresse_2[0]=4; adresse_2[2]=(randl_p2-2)/2; adresse_2[3]=0; }
			   /* fuer den patch zwischen l1 und l3 ist die Lage leider komplizierter */ 	
			   berechne_adresse3(laenge_1,laenge_3,adresse_3);
			   for (sixgons_2=0; sixgons_2 <= max_sechsecke-sixgons_1; sixgons_2++)
			     { s1ps2=sixgons_1 + sixgons_2;
			       adresse_2[1]=sixgons_2;
			       for (sixgons_3=max_sechsecke-s1ps2; (sixgons_3>=min_sechsecke-s1ps2) && (sixgons_3>=0);
				    sixgons_3--)
				 { 
				   adresse_3[1]=sixgons_3;
				   for (item_2=suche_item(adresse_2); item_2 != nil; item_2=item_2->next_item)
				     { is_ipr=1; ipr_fault_item2=0;
				       gebaut_2=0;
				       czmerke_2=czmerke_1+adresse_2[0];
				       for (j=czmerke_1; j<czmerke_2; j++) code[j]=item_2->code[j-czmerke_1];
				       for (item_3=suche_item(adresse_3); (item_3 != nil) && (!ipr_fault_item2); 
					    item_3=item_3->next_item)
					 {
					   czmerke_3=czmerke_2+adresse_3[0];
					   for (j=czmerke_2; j<czmerke_3; j++) code[j]=item_3->code[j-czmerke_2];
					   /* Der Kern */
					   if (gebaut_1==0) 			 
					     { anzahl_5ek=0;
					       baue_sandwich(map,laenge_1,laenge_2,laenge_3,&anfang_1,&anfang_2,&anfang_3);
					       gebaut_1=1;
					       insert_patch(map,anfang_1,item_1,sixgons_1+adresse_1[0],adresse_1[0]); }
					   if (gebaut_2==0)
					     { anzahl_5ek= 5*adresse_1[0];
					       insert_patch(map,anfang_2,item_2,sixgons_2+adresse_2[0],adresse_2[0]); 
					       gebaut_2=1;
					       if (is_ipr==0) ipr_fault_item2=1; }
					   anzahl_5ek=5*(12-adresse_3[0]);
					   if (is_ipr) 
					     { insert_patch(map,anfang_3,item_3,sixgons_3+adresse_3[0],adresse_3[0]);
					       if (is_ipr) teste_und_schreibe(map,code); else is_ipr=1;
					       delete_patch(map,anfang_3,adresse_3); }
					   /* Ende Kern */
					   
					   
					 } /* ende for ueber item_3 */ 
				       if (gebaut_2) delete_patch(map,anfang_2,adresse_2);
				     } /*ende for ueber item_2 */
				 } /* ende for ueber sixgons_3 */
			     } /* ende for ueber sixgons_2 */ 
			   map[0][0].name=0; /* entspricht loeschen */
			 } /* ende if randl_p2 und randl_p3 OK */
		     } /* ende for ueber laenge_3 */
		 }
	     } /* ende for ueber item_1 */
	 } /* ende for ueber sixgons_1 */ 
     } /* ende if randl_p1 OK */
  } /* ende for ueber laenge_2; */
} /* ende for ueber laenge_1 */

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x147b0, %rsp          # imm = 0x147B0
movl %edi, -0x4(%rbp)
movl %esi, -0x8(%rbp)
movl 0x6e15(%rip), %eax      # 0x1c18c
movl %eax, -0x147a4(%rbp)
movl -0x8(%rbp), %eax
shll %eax
addl $0x14, %eax
movl %eax, -0xc(%rbp)
movl -0xc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x10(%rbp)
leaq -0x14760(%rbp), %rdi
callq 0x3f40
movw $0x3, -0x1478e(%rbp)
movl 0x6d80(%rip), %eax      # 0x1c12c
movl $0x2, %ecx
cltd
idivl %ecx
movl %eax, -0x18(%rbp)
movl -0x18(%rbp), %eax
movl -0x10(%rbp), %ecx
subl 0x6d65(%rip), %ecx      # 0x1c128
cmpl %ecx, %eax
jg 0x159cf
movl -0x18(%rbp), %eax
movw %ax, -0x1478c(%rbp)
movl $0x1, -0x1c(%rbp)
movl -0x1c(%rbp), %eax
movl -0x10(%rbp), %ecx
subl 0x6d44(%rip), %ecx      # 0x1c12c
cmpl %ecx, %eax
jg 0x159bf
movl -0x18(%rbp), %eax
addl -0x1c(%rbp), %eax
movl %eax, -0x84(%rbp)
movslq -0x84(%rbp), %rcx
leaq 0x12016(%rip), %rax     # 0x27420
cmpb $0x0, (%rax,%rcx)
je 0x159af
movl -0x1c(%rbp), %eax
movw %ax, -0x1478a(%rbp)
movl -0x84(%rbp), %eax
movl $0x2, %ecx
cltd
idivl %ecx
cmpl $0x0, %edx
je 0x1544e
movw $0x5, -0x2c(%rbp)
movl -0x84(%rbp), %eax
subl $0x1, %eax
movl $0x2, %ecx
cltd
idivl %ecx
movw %ax, -0x28(%rbp)
jmp 0x1546f
movw $0x4, -0x2c(%rbp)
movl -0x84(%rbp), %eax
subl $0x2, %eax
movl $0x2, %ecx
cltd
idivl %ecx
movw %ax, -0x28(%rbp)
movw $0x0, -0x26(%rbp)
movl $0x0, -0x48(%rbp)
movl -0x48(%rbp), %eax
cmpl -0x8(%rbp), %eax
jg 0x159ad
movl -0x48(%rbp), %eax
movw %ax, -0x2a(%rbp)
leaq -0x2c(%rbp), %rdi
callq 0x12470
movq %rax, -0x70(%rbp)
cmpq $0x0, -0x70(%rbp)
je 0x1599d
movl -0x147a4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x147a4(%rbp)
movl -0x147a4(%rbp), %eax
cmpl 0x6ccc(%rip), %eax      # 0x1c188
jne 0x154c8
movl $0x0, -0x147a4(%rbp)
cmpl $0x0, 0x6cb9(%rip)      # 0x1c188
je 0x154de
cmpl $0x0, -0x147a4(%rbp)
jne 0x1598b
movzwl -0x2c(%rbp), %eax
addl $0x4, %eax
movl %eax, -0x14798(%rbp)
movl $0x4, -0x14794(%rbp)
movl -0x14794(%rbp), %eax
cmpl -0x14798(%rbp), %eax
jge 0x1553b
movq -0x70(%rbp), %rax
movl -0x14794(%rbp), %ecx
subl $0x4, %ecx
movslq %ecx, %rcx
movzbl 0x8(%rax,%rcx), %eax
movw %ax, %cx
movslq -0x14794(%rbp), %rax
movw %cx, -0x14790(%rbp,%rax,2)
movl -0x14794(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14794(%rbp)
jmp 0x154f5
movl $0x1, -0x20(%rbp)
movl -0x84(%rbp), %ecx
addl -0x20(%rbp), %ecx
xorl %eax, %eax
cmpl -0x10(%rbp), %ecx
movb %al, -0x147a5(%rbp)
jg 0x15567
movl -0x18(%rbp), %eax
cmpl -0x20(%rbp), %eax
setge %al
movb %al, -0x147a5(%rbp)
movb -0x147a5(%rbp), %al
testb $0x1, %al
jne 0x15576
jmp 0x15989
movl -0x1c(%rbp), %eax
addl -0x20(%rbp), %eax
movl %eax, -0x88(%rbp)
movl -0x20(%rbp), %eax
addl -0x18(%rbp), %eax
movl %eax, -0x8c(%rbp)
movslq -0x88(%rbp), %rcx
leaq 0x11e84(%rip), %rax     # 0x27420
movsbl (%rax,%rcx), %eax
cmpl $0x0, %eax
je 0x15979
movslq -0x8c(%rbp), %rcx
leaq 0x120b9(%rip), %rax     # 0x27670
movsbl (%rax,%rcx), %eax
cmpl $0x0, %eax
je 0x15979
movl -0x20(%rbp), %eax
addl -0x84(%rbp), %eax
movw %ax, -0x14790(%rbp)
movb $0x0, -0x8d(%rbp)
movl -0x88(%rbp), %eax
movl $0x2, %ecx
cltd
idivl %ecx
cmpl $0x0, %edx
je 0x1560b
movw $0x5, -0x38(%rbp)
movl -0x88(%rbp), %eax
subl $0x1, %eax
movl $0x2, %ecx
cltd
idivl %ecx
movw %ax, -0x34(%rbp)
jmp 0x1562c
movw $0x4, -0x38(%rbp)
movl -0x88(%rbp), %eax
subl $0x2, %eax
movl $0x2, %ecx
cltd
idivl %ecx
movw %ax, -0x34(%rbp)
movw $0x0, -0x32(%rbp)
movl -0x18(%rbp), %edi
movl -0x20(%rbp), %esi
leaq -0x44(%rbp), %rdx
callq 0x14cb0
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
movl -0x8(%rbp), %ecx
subl -0x48(%rbp), %ecx
cmpl %ecx, %eax
jg 0x15970
movl -0x48(%rbp), %eax
addl -0x4c(%rbp), %eax
movl %eax, -0x14(%rbp)
movl -0x4c(%rbp), %eax
movw %ax, -0x36(%rbp)
movl -0x8(%rbp), %eax
subl -0x14(%rbp), %eax
movl %eax, -0x50(%rbp)
movl -0x50(%rbp), %ecx
movl -0x4(%rbp), %edx
subl -0x14(%rbp), %edx
xorl %eax, %eax
cmpl %edx, %ecx
movb %al, -0x147a6(%rbp)
jl 0x1568e
cmpl $0x0, -0x50(%rbp)
setge %al
movb %al, -0x147a6(%rbp)
movb -0x147a6(%rbp), %al
testb $0x1, %al
jne 0x1569d
jmp 0x15960
movl -0x50(%rbp), %eax
movw %ax, -0x42(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x12470
movq %rax, -0x78(%rbp)
cmpq $0x0, -0x78(%rbp)
je 0x15950
movb $0x1, 0x6a71(%rip)      # 0x1c134
movb $0x0, -0x8f(%rbp)
movb $0x0, -0x8e(%rbp)
movl -0x14798(%rbp), %eax
movzwl -0x38(%rbp), %ecx
addl %ecx, %eax
movl %eax, -0x1479c(%rbp)
movl -0x14798(%rbp), %eax
movl %eax, -0x14794(%rbp)
movl -0x14794(%rbp), %eax
cmpl -0x1479c(%rbp), %eax
jge 0x15738
movq -0x78(%rbp), %rax
movl -0x14794(%rbp), %ecx
subl -0x14798(%rbp), %ecx
movslq %ecx, %rcx
movzbl 0x8(%rax,%rcx), %eax
movw %ax, %cx
movslq -0x14794(%rbp), %rax
movw %cx, -0x14790(%rbp,%rax,2)
movl -0x14794(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14794(%rbp)
jmp 0x156ef
leaq -0x44(%rbp), %rdi
callq 0x12470
movq %rax, -0x80(%rbp)
xorl %eax, %eax
cmpq $0x0, -0x80(%rbp)
movb %al, -0x147a7(%rbp)
je 0x15766
cmpb $0x0, -0x8f(%rbp)
setne %al
xorb $-0x1, %al
movb %al, -0x147a7(%rbp)
movb -0x147a7(%rbp), %al
testb $0x1, %al
jne 0x15775
jmp 0x15921
movl -0x1479c(%rbp), %eax
movzwl -0x44(%rbp), %ecx
addl %ecx, %eax
movl %eax, -0x147a0(%rbp)
movl -0x1479c(%rbp), %eax
movl %eax, -0x14794(%rbp)
movl -0x14794(%rbp), %eax
cmpl -0x147a0(%rbp), %eax
jge 0x157dc
movq -0x80(%rbp), %rax
movl -0x14794(%rbp), %ecx
subl -0x1479c(%rbp), %ecx
movslq %ecx, %rcx
movzbl 0x8(%rax,%rcx), %eax
movw %ax, %cx
movslq -0x14794(%rbp), %rax
movw %cx, -0x14790(%rbp,%rax,2)
movl -0x14794(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14794(%rbp)
jmp 0x15793
movsbl -0x8d(%rbp), %eax
cmpl $0x0, %eax
jne 0x15840
movl $0x0, 0x13546(%rip)     # 0x28d38
leaq -0x14760(%rbp), %rdi
movl -0x18(%rbp), %esi
movl -0x1c(%rbp), %edx
movl -0x20(%rbp), %ecx
leaq -0x58(%rbp), %r8
leaq -0x60(%rbp), %r9
leaq -0x68(%rbp), %rax
movq %rax, (%rsp)
callq 0x14ef0
movb $0x1, -0x8d(%rbp)
leaq -0x14760(%rbp), %rdi
movq -0x58(%rbp), %rsi
movq -0x70(%rbp), %rdx
movl -0x48(%rbp), %ecx
movzwl -0x2c(%rbp), %eax
addl %eax, %ecx
movzwl -0x2c(%rbp), %r8d
callq 0x14450
movsbl -0x8e(%rbp), %eax
cmpl $0x0, %eax
jne 0x15897
movzwl -0x2c(%rbp), %eax
imull $0x5, %eax, %eax
movl %eax, 0x134df(%rip)     # 0x28d38
leaq -0x14760(%rbp), %rdi
movq -0x60(%rbp), %rsi
movq -0x78(%rbp), %rdx
movl -0x4c(%rbp), %ecx
movzwl -0x38(%rbp), %eax
addl %eax, %ecx
movzwl -0x38(%rbp), %r8d
callq 0x14450
movb $0x1, -0x8e(%rbp)
movsbl 0x68ab(%rip), %eax      # 0x1c134
cmpl $0x0, %eax
jne 0x15895
movb $0x1, -0x8f(%rbp)
jmp 0x15897
movzwl -0x44(%rbp), %ecx
movl $0xc, %eax
subl %ecx, %eax
imull $0x5, %eax, %eax
movl %eax, 0x1348d(%rip)     # 0x28d38
cmpb $0x0, 0x6882(%rip)      # 0x1c134
je 0x1590f
leaq -0x14760(%rbp), %rdi
movq -0x68(%rbp), %rsi
movq -0x80(%rbp), %rdx
movl -0x50(%rbp), %ecx
movzwl -0x44(%rbp), %eax
addl %eax, %ecx
movzwl -0x44(%rbp), %r8d
callq 0x14450
cmpb $0x0, 0x6857(%rip)      # 0x1c134
je 0x158f4
leaq -0x14760(%rbp), %rdi
leaq -0x14790(%rbp), %rsi
callq 0x123b0
jmp 0x158fb
movb $0x1, 0x6839(%rip)      # 0x1c134
leaq -0x14760(%rbp), %rdi
movq -0x68(%rbp), %rsi
leaq -0x44(%rbp), %rdx
callq 0x14540
jmp 0x15911
movq -0x80(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x80(%rbp)
jmp 0x15745
cmpb $0x0, -0x8e(%rbp)
je 0x1593e
leaq -0x14760(%rbp), %rdi
movq -0x60(%rbp), %rsi
leaq -0x38(%rbp), %rdx
callq 0x14540
jmp 0x15940
movq -0x78(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x78(%rbp)
jmp 0x156b1
jmp 0x15952
movl -0x50(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x50(%rbp)
jmp 0x1566c
jmp 0x15962
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x15642
movw $0x0, -0x1475e(%rbp)
jmp 0x1597b
movl -0x20(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x20(%rbp)
jmp 0x15542
jmp 0x1598b
jmp 0x1598d
movq -0x70(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x70(%rbp)
jmp 0x15496
jmp 0x1599f
movl -0x48(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x48(%rbp)
jmp 0x15476
jmp 0x159af
jmp 0x159b1
movl -0x1c(%rbp), %eax
addl $0x2, %eax
movl %eax, -0x1c(%rbp)
jmp 0x153dc
jmp 0x159c1
movl -0x18(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x18(%rbp)
jmp 0x153b7
addq $0x147b0, %rsp          # imm = 0x147B0
popq %rbp
retq
nopl (%rax,%rax)