// File: /workspace/github_c_makefile_star2_O1/mishun[P]plantri/fullgen.c
// Function: codiere
int codiere(PLANMAP map, FLAECHENTYP *code, KANTE *start, int codesize, int laenge)
{
int i, j, stelle, zaehler, knotenzahl, flaechennumber, verschiebung, merkeknoten;
/* zaehler zaehlt die Flaechengroesse, knotenzahl die zahl der restlichen knoten */
int tempknz, laufzaehler, autozaehler, minitest;
KANTE *run, *merke, *run2;
FLAECHENTYP testcode[9];


if (start->name != aussen) { fprintf(stderr,"Codiere must start at external edge !\n"); 
			     exit(8); }

tempknz=map[0][0].name;

if (tempknz==5) { code[0]=1; return(1); }

for (i=1; i<=tempknz; i++) for (j=0; j<3; j++)
  if (map[i][j].name == aussen) map[i][j].dummy= infty; else map[i][j].dummy=0;

run=start; stelle=0; knotenzahl=tempknz;

if (laenge) /* d.h. 6-Fuenfecke-patch */
  { verschiebung=0;
    code[2]=unbelegt; 
    code[0]=0; /*code[1]=verschiebung;*/ stelle=2; 
    merkeknoten=knotenzahl;
    laufzaehler=1;
    /* Jetzt den minimalen Code ausrechnen: */
    for ( autozaehler=0, run2=start->prev; 
	 (verschiebung<laenge) && !autozaehler; verschiebung++, run2=run2->prev->invers->next->invers)
      if (checksize(run2)==5)
	{
	  laufzaehler++;
	  run=run2->next;
	  stelle=2; knotenzahl=merkeknoten;
	  flaechennumber=0;
	  while (stelle<codesize)
	    { flaechennumber++;
	      zaehler=2;
	      while (run->prev->invers->prev->dummy>=laufzaehler) 
		                                     run=run->prev->invers->prev; /* sicherstellen, dass davor
										     keine aussenkanten sind */
	      run->prev->invers->dummy=laufzaehler; run->next->invers->dummy=laufzaehler;
	      run=run->next->invers->next; knotenzahl--;
	      while (run->dummy>=laufzaehler)
		{ zaehler++; knotenzahl--; run->prev->invers->dummy=laufzaehler; 
		  run->next->invers->dummy=laufzaehler;
		  run=run->next->invers->next; }
	      merke=run->next;
	      run=run->prev;
	      while (merke->dummy<laufzaehler)
		{ zaehler++; merke=merke->invers->prev; }
	      if (zaehler==5) { testcode[stelle]=flaechennumber; stelle++; }
	      else if (zaehler!=6) { fprintf(stderr,"ERROR in CODIERE: No 5- or 6-Gon !\n"); exit(9); }
	      if (knotenzahl==5) { testcode[stelle]=flaechennumber+1; stelle++; }
	    } /* ende while */
	  if ((minitest=codecmp(code+2,testcode+2,6))>0) 
	    { if (verschiebung) return(0);
	      else { for (stelle=2; stelle<8; stelle++) code[stelle]=testcode[stelle]; }
	    }
	  if (minitest==0) autozaehler=1; /* verschiebung>=1 ist automatisch */
	} /* ende checksize==5 */
    if (autozaehler) code[1]=verschiebung-1;
    else code[1]=laenge;
    return(1);
  } /* ende if */



 flaechennumber=0;



while (stelle<codesize)
  { flaechennumber++;
    zaehler=2;
    while (run->prev->invers->prev->dummy) run=run->prev->invers->prev; /* sicherstellen, dass davor
									   keine aussenkanten sind */
    run->prev->invers->dummy=1; run->next->invers->dummy=1;
    run=run->next->invers->next; knotenzahl--;
    while (run->dummy)
      { zaehler++; knotenzahl--; run->prev->invers->dummy=1; run->next->invers->dummy=1;
	run=run->next->invers->next; }
    merke=run->next;
    run=run->prev;
    while (!(merke->dummy))
      { zaehler++; merke=merke->invers->prev; }
    if (zaehler==5) { code[stelle]=flaechennumber; stelle++; }
    else if (zaehler!=6) { fprintf(stderr,"ERROR in CODIERE(2): No 5- or 6-Gon !\n"); exit(10); }
    if (knotenzahl==5) { code[stelle]=flaechennumber+1; stelle++; }
  } /* ende while */

return(1);

}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
cmpw $0x246, 0x2(%rdx)       # imm = 0x246
jne 0x53cd
movzwl 0x2(%rdi), %r9d
testl %r9d, %r9d
je 0x50f9
cmpl $0x5, %r9d
jne 0x50ab
movb $0x1, (%rsi)
jmp 0x53ab
leaq 0x1(%r9), %rax
addq $0x98, %rdi
movl $0x1, %r10d
movabsq $0x7fffffffffffffff, %r11 # imm = 0x7FFFFFFFFFFFFFFF
xorl %ebx, %ebx
cmpw $0x246, -0x6(%rdi,%rbx) # imm = 0x246
movl $0x0, %r14d
cmoveq %r11, %r14
movq %r14, (%rdi,%rbx)
addq $0x30, %rbx
cmpq $0x90, %rbx
jne 0x50c8
incq %r10
addq $0x90, %rdi
cmpq %rax, %r10
jne 0x50c6
testl %r8d, %r8d
je 0x52bb
movb $-0x1, 0x2(%rsi)
movb $0x0, (%rsi)
jle 0x5398
leaq 0x2(%rsi), %rax
movq %rax, 0x10(%rsp)
addq $0x18, %rdx
xorl %r11d, %r11d
movl $0x1, %ebp
xorl %eax, %eax
movq (%rdx), %rdx
movl $0x5, %edi
movq %rdx, %r10
movq 0x28(%r10), %r10
movq 0x20(%r10), %r10
decl %edi
cmpq %rdx, %r10
jne 0x5131
testl %edi, %edi
jne 0x528d
incl %ebp
cmpl $0x3, %ecx
jl 0x522b
movq 0x20(%rdx), %rbx
movslq %ebp, %r14
movl $0x2, %r15d
xorl %edi, %edi
movl %r9d, %r12d
movl %edi, %r13d
movq %rbx, %rdi
movq 0x18(%rbx), %r10
movq 0x28(%r10), %r10
movq 0x18(%r10), %rbx
cmpq %r14, 0x8(%rbx)
jge 0x5168
movq %r14, 0x8(%r10)
movq 0x20(%rdi), %rdi
movq 0x28(%rdi), %rdi
movq %r14, 0x8(%rdi)
movq 0x20(%rdi), %rdi
cmpq %r14, 0x8(%rdi)
jge 0x51a2
decl %r12d
movl $0x2, %r10d
jmp 0x51d3
movl $0x1, %r10d
movq 0x18(%rdi), %rbx
movq 0x28(%rbx), %rbx
movq %r14, 0x8(%rbx)
movq 0x20(%rdi), %rdi
movq 0x28(%rdi), %rdi
movq %r14, 0x8(%rdi)
movq 0x20(%rdi), %rdi
incl %r10d
cmpq %r14, 0x8(%rdi)
jge 0x51a8
subl %r10d, %r12d
incl %r10d
movq 0x18(%rdi), %rbx
movq 0x20(%rdi), %rdi
cmpq %r14, 0x8(%rdi)
jge 0x51ee
incl %r10d
movq 0x28(%rdi), %rdi
movq 0x18(%rdi), %rdi
jmp 0x51db
leal 0x1(%r13), %edi
cmpl $0x6, %r10d
je 0x520d
cmpl $0x5, %r10d
jne 0x53c3
movslq %r15d, %r15
movb %dil, 0x7(%rsp,%r15)
incl %r15d
cmpl $0x5, %r12d
jne 0x5222
addb $0x2, %r13b
movslq %r15d, %r15
movb %r13b, 0x7(%rsp,%r15)
incl %r15d
cmpl %ecx, %r15d
jl 0x5165
movq 0x10(%rsp), %rdi
movb (%rdi), %dil
movb 0x9(%rsp), %r10b
cmpb %r10b, %dil
jne 0x525a
xorl %ebx, %ebx
movb 0x3(%rsi,%rbx), %dil
movb 0xa(%rsp,%rbx), %r10b
cmpb %r10b, %dil
jne 0x525a
leaq 0x1(%rbx), %r14
cmpl $0x4, %ebx
movq %r14, %rbx
jne 0x523f
cmpb %r10b, %dil
jbe 0x5281
testl %eax, %eax
jne 0x53bf
leaq 0x9(%rsp), %r15
movzwl 0x4(%r15), %ebx
movq 0x10(%rsp), %r14
movw %bx, 0x4(%r14)
movl (%r15), %ebx
movl %ebx, (%r14)
cmpb %r10b, %dil
movl $0x1, %edi
cmovel %edi, %r11d
incl %eax
testl %r11d, %r11d
sete %dil
cmpl %r8d, %eax
jge 0x52b4
movq 0x18(%rdx), %rdx
movq 0x28(%rdx), %rdx
movq 0x20(%rdx), %rdx
addq $0x28, %rdx
testl %r11d, %r11d
je 0x5126
decb %al
jmp 0x539d
movl $0x1, %eax
testl %ecx, %ecx
jle 0x53b0
xorl %ebx, %ebx
movl $0x1, %edi
xorl %r8d, %r8d
movl %ebx, %r10d
movq %rdx, %r11
movq 0x18(%rdx), %rdx
movq 0x28(%rdx), %rbx
movq 0x18(%rbx), %rdx
cmpq $0x0, 0x8(%rdx)
jne 0x52d5
movq %rdi, 0x8(%rbx)
movq 0x20(%r11), %rdx
movq 0x28(%rdx), %rdx
movq %rdi, 0x8(%rdx)
movq 0x20(%rdx), %rbx
cmpq $0x0, 0x8(%rbx)
je 0x533a
movl $0x1, %r11d
movq 0x18(%rbx), %rdx
movq 0x28(%rdx), %rdx
movq %rdi, 0x8(%rdx)
movq 0x20(%rbx), %rdx
movq 0x28(%rdx), %rdx
movq %rdi, 0x8(%rdx)
movq 0x20(%rdx), %rbx
incl %r11d
cmpq $0x0, 0x8(%rbx)
jne 0x530c
subl %r11d, %r9d
incl %r11d
jmp 0x5343
decl %r9d
movl $0x2, %r11d
movq 0x18(%rbx), %rdx
movq 0x20(%rbx), %rbx
cmpq $0x0, 0x8(%rbx)
jne 0x535f
incl %r11d
movq 0x28(%rbx), %rbx
movq 0x18(%rbx), %rbx
jmp 0x534b
leal 0x1(%r10), %ebx
cmpl $0x6, %r11d
je 0x5379
cmpl $0x5, %r11d
jne 0x53c8
movslq %r8d, %r8
movb %bl, (%rsi,%r8)
incl %r8d
cmpl $0x5, %r9d
jne 0x538d
addb $0x2, %r10b
movslq %r8d, %r8
movb %r10b, (%rsi,%r8)
incl %r8d
cmpl %ecx, %r8d
jl 0x52d2
jmp 0x53b0
movb $0x1, %dil
movb $-0x1, %al
testb %dil, %dil
je 0x53a8
movb %r8b, 0x1(%rsi)
jmp 0x53ab
movb %al, 0x1(%rsi)
movl $0x1, %eax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
xorl %eax, %eax
jmp 0x53b0
callq 0x1571
callq 0x1596
callq 0x154c