// File: /workspace/github_c_makefile_star2_O0/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
movq %rsp, %rbp
subq $0x80, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movl %ecx, -0x24(%rbp)
movl %r8d, -0x28(%rbp)
movq -0x20(%rbp), %rax
movzwl 0x2(%rax), %eax
cmpl $0x246, %eax            # imm = 0x246
je 0x56df
movq 0x16934(%rip), %rax     # 0x1bff8
movq (%rax), %rdi
leaq 0x12f65(%rip), %rsi     # 0x18633
movb $0x0, %al
callq 0x1080
movl $0x8, %edi
callq 0x1120
movq -0x10(%rbp), %rax
movzwl 0x2(%rax), %eax
movl %eax, -0x4c(%rbp)
cmpl $0x5, -0x4c(%rbp)
jne 0x5703
movq -0x18(%rbp), %rax
movb $0x1, (%rax)
movl $0x1, -0x4(%rbp)
jmp 0x5c9b
movl $0x1, -0x2c(%rbp)
movl -0x2c(%rbp), %eax
cmpl -0x4c(%rbp), %eax
jg 0x57c1
movl $0x0, -0x30(%rbp)
cmpl $0x3, -0x30(%rbp)
jge 0x57b1
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
movslq -0x30(%rbp), %rcx
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movzwl 0x2(%rax), %eax
cmpl $0x246, %eax            # imm = 0x246
jne 0x577c
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
movslq -0x30(%rbp), %rcx
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movabsq $0x7fffffffffffffff, %rcx # imm = 0x7FFFFFFFFFFFFFFF
movq %rcx, 0x8(%rax)
jmp 0x57a1
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
movslq -0x30(%rbp), %rcx
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq $0x0, 0x8(%rax)
jmp 0x57a3
movl -0x30(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x30(%rbp)
jmp 0x571d
jmp 0x57b3
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
jmp 0x570a
movq -0x20(%rbp), %rax
movq %rax, -0x60(%rbp)
movl $0x0, -0x34(%rbp)
movl -0x4c(%rbp), %eax
movl %eax, -0x3c(%rbp)
cmpl $0x0, -0x28(%rbp)
je 0x5aeb
movl $0x0, -0x44(%rbp)
movq -0x18(%rbp), %rax
movb $-0x1, 0x2(%rax)
movq -0x18(%rbp), %rax
movb $0x0, (%rax)
movl $0x2, -0x34(%rbp)
movl -0x3c(%rbp), %eax
movl %eax, -0x48(%rbp)
movl $0x1, -0x50(%rbp)
movl $0x0, -0x54(%rbp)
movq -0x20(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x70(%rbp)
movl -0x44(%rbp), %ecx
xorl %eax, %eax
cmpl -0x28(%rbp), %ecx
movb %al, -0x7a(%rbp)
jge 0x5836
cmpl $0x0, -0x54(%rbp)
setne %al
xorb $-0x1, %al
movb %al, -0x7a(%rbp)
movb -0x7a(%rbp), %al
testb $0x1, %al
jne 0x5842
jmp 0x5abc
movq -0x70(%rbp), %rdi
callq 0x5640
cmpl $0x5, %eax
jne 0x5a94
movl -0x50(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x50(%rbp)
movq -0x70(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x60(%rbp)
movl $0x2, -0x34(%rbp)
movl -0x48(%rbp), %eax
movl %eax, -0x3c(%rbp)
movl $0x0, -0x40(%rbp)
movl -0x34(%rbp), %eax
cmpl -0x24(%rbp), %eax
jge 0x5a22
movl -0x40(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40(%rbp)
movl $0x2, -0x38(%rbp)
movq -0x60(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq 0x8(%rax), %rax
movslq -0x50(%rbp), %rcx
cmpq %rcx, %rax
jl 0x58cc
movq -0x60(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq %rax, -0x60(%rbp)
jmp 0x5899
movslq -0x50(%rbp), %rcx
movq -0x60(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq %rcx, 0x8(%rax)
movslq -0x50(%rbp), %rcx
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x28(%rax), %rax
movq %rcx, 0x8(%rax)
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %rax
movq %rax, -0x60(%rbp)
movl -0x3c(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x3c(%rbp)
movq -0x60(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x50(%rbp), %rcx
cmpq %rcx, %rax
jl 0x5972
movl -0x38(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x38(%rbp)
movl -0x3c(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x3c(%rbp)
movslq -0x50(%rbp), %rcx
movq -0x60(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq %rcx, 0x8(%rax)
movslq -0x50(%rbp), %rcx
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x28(%rax), %rax
movq %rcx, 0x8(%rax)
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %rax
movq %rax, -0x60(%rbp)
jmp 0x5911
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x68(%rbp)
movq -0x60(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x60(%rbp)
movq -0x68(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x50(%rbp), %rcx
cmpq %rcx, %rax
jge 0x59b6
movl -0x38(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x38(%rbp)
movq -0x68(%rbp), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq %rax, -0x68(%rbp)
jmp 0x598a
cmpl $0x5, -0x38(%rbp)
jne 0x59d4
movl -0x40(%rbp), %eax
movb %al, %cl
movslq -0x34(%rbp), %rax
movb %cl, -0x79(%rbp,%rax)
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0x59fe
cmpl $0x6, -0x38(%rbp)
je 0x59fc
movq 0x16617(%rip), %rax     # 0x1bff8
movq (%rax), %rdi
leaq 0x12c6f(%rip), %rsi     # 0x1865a
movb $0x0, %al
callq 0x1080
movl $0x9, %edi
callq 0x1120
jmp 0x59fe
cmpl $0x5, -0x3c(%rbp)
jne 0x5a1d
movl -0x40(%rbp), %eax
addl $0x1, %eax
movb %al, %cl
movslq -0x34(%rbp), %rax
movb %cl, -0x79(%rbp,%rax)
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0x587d
movq -0x18(%rbp), %rdi
addq $0x2, %rdi
leaq -0x79(%rbp), %rsi
addq $0x2, %rsi
movl $0x6, %edx
callq 0x2fb0
movl %eax, -0x58(%rbp)
cmpl $0x0, %eax
jle 0x5a85
cmpl $0x0, -0x44(%rbp)
je 0x5a56
movl $0x0, -0x4(%rbp)
jmp 0x5c9b
movl $0x2, -0x34(%rbp)
cmpl $0x8, -0x34(%rbp)
jge 0x5a81
movslq -0x34(%rbp), %rax
movb -0x79(%rbp,%rax), %dl
movq -0x18(%rbp), %rax
movslq -0x34(%rbp), %rcx
movb %dl, (%rax,%rcx)
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0x5a5d
jmp 0x5a83
jmp 0x5a85
cmpl $0x0, -0x58(%rbp)
jne 0x5a92
movl $0x1, -0x54(%rbp)
jmp 0x5a94
jmp 0x5a96
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
movq -0x70(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %rax
movq 0x28(%rax), %rax
movq %rax, -0x70(%rbp)
jmp 0x581d
cmpl $0x0, -0x54(%rbp)
je 0x5ad3
movl -0x44(%rbp), %eax
subl $0x1, %eax
movb %al, %cl
movq -0x18(%rbp), %rax
movb %cl, 0x1(%rax)
jmp 0x5adf
movl -0x28(%rbp), %eax
movb %al, %cl
movq -0x18(%rbp), %rax
movb %cl, 0x1(%rax)
movl $0x1, -0x4(%rbp)
jmp 0x5c9b
movl $0x0, -0x40(%rbp)
movl -0x34(%rbp), %eax
cmpl -0x24(%rbp), %eax
jge 0x5c94
movl -0x40(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40(%rbp)
movl $0x2, -0x38(%rbp)
movq -0x60(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
cmpq $0x0, 0x8(%rax)
je 0x5b3b
movq -0x60(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq %rax, -0x60(%rbp)
jmp 0x5b0e
movq -0x60(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq $0x1, 0x8(%rax)
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x28(%rax), %rax
movq $0x1, 0x8(%rax)
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %rax
movq %rax, -0x60(%rbp)
movl -0x3c(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x3c(%rbp)
movq -0x60(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x5bdb
movl -0x38(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x38(%rbp)
movl -0x3c(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x3c(%rbp)
movq -0x60(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq $0x1, 0x8(%rax)
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x28(%rax), %rax
movq $0x1, 0x8(%rax)
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %rax
movq %rax, -0x60(%rbp)
jmp 0x5b80
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x68(%rbp)
movq -0x60(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x60(%rbp)
movq -0x68(%rbp), %rax
cmpq $0x0, 0x8(%rax)
setne %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x5c07
jmp 0x5c22
movl -0x38(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x38(%rbp)
movq -0x68(%rbp), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq %rax, -0x68(%rbp)
jmp 0x5bf3
cmpl $0x5, -0x38(%rbp)
jne 0x5c43
movl -0x40(%rbp), %eax
movb %al, %dl
movq -0x18(%rbp), %rax
movslq -0x34(%rbp), %rcx
movb %dl, (%rax,%rcx)
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0x5c6d
cmpl $0x6, -0x38(%rbp)
je 0x5c6b
movq 0x163a8(%rip), %rax     # 0x1bff8
movq (%rax), %rdi
leaq 0x12a24(%rip), %rsi     # 0x1867e
movb $0x0, %al
callq 0x1080
movl $0xa, %edi
callq 0x1120
jmp 0x5c6d
cmpl $0x5, -0x3c(%rbp)
jne 0x5c8f
movl -0x40(%rbp), %eax
addl $0x1, %eax
movb %al, %dl
movq -0x18(%rbp), %rax
movslq -0x34(%rbp), %rcx
movb %dl, (%rax,%rcx)
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0x5af2
movl $0x1, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x80, %rsp
popq %rbp
retq
nopw (%rax,%rax)