// File: /workspace/github_c_makefile_star2_O0/mishun[P]plantri/fullgen.c
// Function: brille
void brille(int min_sechsecke, int max_sechsecke) 
{ 
int knotenzahl, pfadlaenge, s1ps2; 
int laenge_1, 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 */
KANTE *anfang_1, *anfang_2, *anfang_3; /* eine kanonische Kante auf dem Rand zum Anfangen */ 
ITEMLISTE *item_1, *item_2, *item_3; 
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;

knotenzahl= 20 + 2*max_sechsecke;

init_map(map);

code[1]=2;

for (pfadlaenge=2*minbrillenglas+1; pfadlaenge <= knotenzahl+1; pfadlaenge++) 
  { /* EINZIGE Konvention: laenge_1 >= laenge_3 --- dann darf keine konvention 
       fuer die 6-Ecke mehr erfolgen ! */ 
    code[0]=pfadlaenge;
    for (laenge_1=minbrillenglas; (laenge_1 <= maxbrillenglas) &&
	                            (laenge_1 < pfadlaenge-minbrillenglas); laenge_1++) 
      if (brillenglasmark[laenge_1])
      { if ((laenge_1 % 2)==0) 
	  { adresse_1[0]=4; adresse_1[2]=(laenge_1-2)/2; adresse_1[3]=0; } 
        else { adresse_1[0]=5; adresse_1[2]=(laenge_1-1)/2; } 	
	code[2]=laenge_1;
	for (sixgons_1=0; sixgons_1 <= max_sechsecke; sixgons_1++) 
	  /* auch hier kann man besser abschaetzen */ 	 
	  { adresse_1[1]=sixgons_1;
	    for (item_1=suche_item(adresse_1); item_1 != nil; item_1=item_1->next_item) 	 
	      { 
		czmerke_1=4+adresse_1[0];
		for (j=4; j<czmerke_1; j++) code[j]=item_1->code[j-4];
 		for (laenge_3=minbrillenglas; 
		     (laenge_3 <= laenge_1) && (laenge_1+laenge_3 < pfadlaenge); laenge_3++)
		 if (brillenglasmark[laenge_3])
 		 {
		   modulozaehler++;
		   if (modulozaehler==mod) modulozaehler=0;
		   if (!mod || (modulozaehler==0))
		     {
		       code[3]=laenge_3;
		       berechne_brillenadressen(laenge_1,pfadlaenge,laenge_3,adresse_2,adresse_3);
		       gebaut_1=0; /* Man koennte auch patch_1 immer in der aeusseren
				      Schleife bauen und dann die Brille verschieden fortsetzen, aber erst Brille bauen 
				      und dann die patches einkleben erscheint mir sympathischer und weniger fehleranfaellig --
				      wenn auch von der Komplexitaet her ein wenig schlechter */ 
		       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];
				       if (gebaut_1==0) {
					 anzahl_5ek=0;
					 baue_brille(pfadlaenge,laenge_1,laenge_3,map, &anfang_1, &anfang_2,&anfang_3);
					 insert_patch(map,anfang_1,item_1,sixgons_1+adresse_1[0],adresse_1[0]); 
					 gebaut_1=1;
				       }
				       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 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 von map */
		     }
 		 } /* ende for ueber laenge_3 */
	      } /* ende for ueber item_1 */
	  } /* ende for ueber sixgons_1 */
      } /* ende for ueber laenge_1 */ 
  } /* ende for ueber pfadlaenge */
 }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x147b0, %rsp          # imm = 0x147B0
movl %edi, -0x4(%rbp)
movl %esi, -0x8(%rbp)
movl 0x7ab5(%rip), %eax      # 0x1c18c
movl %eax, -0x147a4(%rbp)
movl -0x8(%rbp), %eax
shll %eax
addl $0x14, %eax
movl %eax, -0xc(%rbp)
leaq -0x14760(%rbp), %rdi
callq 0x3f40
movw $0x2, -0x1478e(%rbp)
movl 0x7a25(%rip), %eax      # 0x1c128
shll %eax
addl $0x1, %eax
movl %eax, -0x10(%rbp)
movl -0x10(%rbp), %eax
movl -0xc(%rbp), %ecx
addl $0x1, %ecx
cmpl %ecx, %eax
jg 0x14ca5
movl -0x10(%rbp), %eax
movw %ax, -0x14790(%rbp)
movl 0x79fc(%rip), %eax      # 0x1c128
movl %eax, -0x18(%rbp)
movl -0x18(%rbp), %ecx
xorl %eax, %eax
cmpl 0x7a3a(%rip), %ecx      # 0x1c174
movb %al, -0x147a5(%rbp)
jg 0x14759
movl -0x18(%rbp), %eax
movl -0x10(%rbp), %ecx
subl 0x79da(%rip), %ecx      # 0x1c128
cmpl %ecx, %eax
setl %al
movb %al, -0x147a5(%rbp)
movb -0x147a5(%rbp), %al
testb $0x1, %al
jne 0x14768
jmp 0x14c95
movslq -0x18(%rbp), %rcx
leaq 0x12cad(%rip), %rax     # 0x27420
cmpb $0x0, (%rax,%rcx)
je 0x14c85
movl -0x18(%rbp), %eax
movl $0x2, %ecx
cltd
idivl %ecx
cmpl $0x0, %edx
jne 0x147ad
movw $0x4, -0x28(%rbp)
movl -0x18(%rbp), %eax
subl $0x2, %eax
movl $0x2, %ecx
cltd
idivl %ecx
movw %ax, -0x24(%rbp)
movw $0x0, -0x22(%rbp)
jmp 0x147c5
movw $0x5, -0x28(%rbp)
movl -0x18(%rbp), %eax
subl $0x1, %eax
movl $0x2, %ecx
cltd
idivl %ecx
movw %ax, -0x24(%rbp)
movl -0x18(%rbp), %eax
movw %ax, -0x1478c(%rbp)
movl $0x0, -0x44(%rbp)
movl -0x44(%rbp), %eax
cmpl -0x8(%rbp), %eax
jg 0x14c83
movl -0x44(%rbp), %eax
movw %ax, -0x26(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x12470
movq %rax, -0x70(%rbp)
cmpq $0x0, -0x70(%rbp)
je 0x14c73
movzwl -0x28(%rbp), %eax
addl $0x4, %eax
movl %eax, -0x14798(%rbp)
movl $0x4, -0x14794(%rbp)
movl -0x14794(%rbp), %eax
cmpl -0x14798(%rbp), %eax
jge 0x1485e
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 0x14818
movl 0x78c4(%rip), %eax      # 0x1c128
movl %eax, -0x1c(%rbp)
movl -0x1c(%rbp), %ecx
xorl %eax, %eax
cmpl -0x18(%rbp), %ecx
movb %al, -0x147a6(%rbp)
jg 0x14889
movl -0x18(%rbp), %eax
addl -0x1c(%rbp), %eax
cmpl -0x10(%rbp), %eax
setl %al
movb %al, -0x147a6(%rbp)
movb -0x147a6(%rbp), %al
testb $0x1, %al
jne 0x14898
jmp 0x14c61
movslq -0x1c(%rbp), %rcx
leaq 0x12b7d(%rip), %rax     # 0x27420
cmpb $0x0, (%rax,%rcx)
je 0x14c51
movl -0x147a4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x147a4(%rbp)
movl -0x147a4(%rbp), %eax
cmpl 0x78c0(%rip), %eax      # 0x1c188
jne 0x148d4
movl $0x0, -0x147a4(%rbp)
cmpl $0x0, 0x78ad(%rip)      # 0x1c188
je 0x148ea
cmpl $0x0, -0x147a4(%rbp)
jne 0x14c4f
movl -0x1c(%rbp), %eax
movw %ax, -0x1478a(%rbp)
movl -0x18(%rbp), %edi
movl -0x10(%rbp), %esi
movl -0x1c(%rbp), %edx
leaq -0x34(%rbp), %rcx
leaq -0x40(%rbp), %r8
callq 0x13ae0
movb $0x0, -0x81(%rbp)
movl $0x0, -0x48(%rbp)
movl -0x48(%rbp), %eax
movl -0x8(%rbp), %ecx
subl -0x44(%rbp), %ecx
cmpl %ecx, %eax
jg 0x14c46
movl -0x44(%rbp), %eax
addl -0x48(%rbp), %eax
movl %eax, -0x14(%rbp)
movl -0x48(%rbp), %eax
movw %ax, -0x32(%rbp)
movl -0x8(%rbp), %eax
subl -0x14(%rbp), %eax
movl %eax, -0x4c(%rbp)
movl -0x4c(%rbp), %ecx
movl -0x4(%rbp), %edx
subl -0x14(%rbp), %edx
xorl %eax, %eax
cmpl %edx, %ecx
movb %al, -0x147a7(%rbp)
jl 0x14964
cmpl $0x0, -0x4c(%rbp)
setge %al
movb %al, -0x147a7(%rbp)
movb -0x147a7(%rbp), %al
testb $0x1, %al
jne 0x14973
jmp 0x14c36
movl -0x4c(%rbp), %eax
movw %ax, -0x3e(%rbp)
leaq -0x34(%rbp), %rdi
callq 0x12470
movq %rax, -0x78(%rbp)
cmpq $0x0, -0x78(%rbp)
je 0x14c26
movb $0x1, 0x779b(%rip)      # 0x1c134
movb $0x0, -0x83(%rbp)
movb $0x0, -0x82(%rbp)
movl -0x14798(%rbp), %eax
movzwl -0x34(%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 0x14a0e
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 0x149c5
leaq -0x40(%rbp), %rdi
callq 0x12470
movq %rax, -0x80(%rbp)
xorl %eax, %eax
cmpq $0x0, -0x80(%rbp)
movb %al, -0x147a8(%rbp)
je 0x14a3c
cmpb $0x0, -0x83(%rbp)
setne %al
xorb $-0x1, %al
movb %al, -0x147a8(%rbp)
movb -0x147a8(%rbp), %al
testb $0x1, %al
jne 0x14a4b
jmp 0x14bf7
movl -0x1479c(%rbp), %eax
movzwl -0x40(%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 0x14ab2
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 0x14a69
movsbl -0x81(%rbp), %eax
cmpl $0x0, %eax
jne 0x14b16
movl $0x0, 0x14270(%rip)     # 0x28d38
movl -0x10(%rbp), %edi
movl -0x18(%rbp), %esi
movl -0x1c(%rbp), %edx
leaq -0x14760(%rbp), %rcx
leaq -0x58(%rbp), %r8
leaq -0x60(%rbp), %r9
leaq -0x68(%rbp), %rax
movq %rax, (%rsp)
callq 0x13f90
leaq -0x14760(%rbp), %rdi
movq -0x58(%rbp), %rsi
movq -0x70(%rbp), %rdx
movl -0x44(%rbp), %ecx
movzwl -0x28(%rbp), %eax
addl %eax, %ecx
movzwl -0x28(%rbp), %r8d
callq 0x14450
movb $0x1, -0x81(%rbp)
movsbl -0x82(%rbp), %eax
cmpl $0x0, %eax
jne 0x14b6d
movzwl -0x28(%rbp), %eax
imull $0x5, %eax, %eax
movl %eax, 0x14209(%rip)     # 0x28d38
leaq -0x14760(%rbp), %rdi
movq -0x60(%rbp), %rsi
movq -0x78(%rbp), %rdx
movl -0x48(%rbp), %ecx
movzwl -0x34(%rbp), %eax
addl %eax, %ecx
movzwl -0x34(%rbp), %r8d
callq 0x14450
movb $0x1, -0x82(%rbp)
movsbl 0x75d5(%rip), %eax      # 0x1c134
cmpl $0x0, %eax
jne 0x14b6b
movb $0x1, -0x83(%rbp)
jmp 0x14b6d
movzwl -0x40(%rbp), %ecx
movl $0xc, %eax
subl %ecx, %eax
imull $0x5, %eax, %eax
movl %eax, 0x141b7(%rip)     # 0x28d38
cmpb $0x0, 0x75ac(%rip)      # 0x1c134
je 0x14be5
leaq -0x14760(%rbp), %rdi
movq -0x68(%rbp), %rsi
movq -0x80(%rbp), %rdx
movl -0x4c(%rbp), %ecx
movzwl -0x40(%rbp), %eax
addl %eax, %ecx
movzwl -0x40(%rbp), %r8d
callq 0x14450
cmpb $0x0, 0x7581(%rip)      # 0x1c134
je 0x14bca
leaq -0x14760(%rbp), %rdi
leaq -0x14790(%rbp), %rsi
callq 0x123b0
jmp 0x14bd1
movb $0x1, 0x7563(%rip)      # 0x1c134
leaq -0x14760(%rbp), %rdi
movq -0x68(%rbp), %rsi
leaq -0x40(%rbp), %rdx
callq 0x14540
jmp 0x14be7
movq -0x80(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x80(%rbp)
jmp 0x14a1b
cmpb $0x0, -0x82(%rbp)
je 0x14c14
leaq -0x14760(%rbp), %rdi
movq -0x60(%rbp), %rsi
leaq -0x34(%rbp), %rdx
callq 0x14540
jmp 0x14c16
movq -0x78(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x78(%rbp)
jmp 0x14987
jmp 0x14c28
movl -0x4c(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x14942
jmp 0x14c38
movl -0x48(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x48(%rbp)
jmp 0x14918
movw $0x0, -0x1475e(%rbp)
jmp 0x14c51
jmp 0x14c53
movl -0x1c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1c(%rbp)
jmp 0x14867
jmp 0x14c63
movq -0x70(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x70(%rbp)
jmp 0x147f6
jmp 0x14c75
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
jmp 0x147d6
jmp 0x14c85
jmp 0x14c87
movl -0x18(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x18(%rbp)
jmp 0x1472f
jmp 0x14c97
movl -0x10(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x10(%rbp)
jmp 0x1470b
addq $0x147b0, %rsp          # imm = 0x147B0
popq %rbp
retq
nop