// File: /workspace/github_c_makefile_star2_O0/mishun[P]plantri/fullgen.c
// Function: suchestart_reko
KANTE *suchestart_reko( KANTE *start, int *fuenfecke)
/* belegt eine sequenz und sucht die kanonische Kante mit dem kleinsten Namen 
   arbeitet "invers", d.h. es wird als Innenrand gesehen, der gefuellt werden
   muss. Wird aufgerufen fuer Brille und Sandwich. Start muss eine Kante sein, die
   ins innere zeigt.
   Funktioniert wie suchestart, nur dass mininame statt name benutzt wird und die
   Anzahl der 5-Ecke auch berechnet wird */

{
int i, j, k, zaehler, position, sqlaenge;
KANTE *run;
int sequenz[7]; 
KANTE *seqkanten[7];
int puffer[7];
char kan[7];



while (start->next->invers->next->invers->next->mininame == aussen) 
                      start=start->next->invers->next->invers->next;
/* Sucht 2 Kanten hintereinander nach aussen -- zu unterscheiden vom namen aussen, was 
   auch nach innen heissen kann. Duerfte nur fuer bauchbinden eine Endlosschleife sein */

for (i=0; i<7; i++) { sequenz[i]=leer; seqkanten[i]=nil; kan[i]=0; }

sqlaenge=0;
position=0;
seqkanten[0]=start;


for (zaehler=1, run=start;
     run->prev->invers->prev->invers->prev->mininame == aussen;
     run=run->prev->invers->prev->invers->prev) zaehler++;
sequenz[0]=zaehler; position=1; seqkanten[1]=nil;
for (run=run->prev->invers->prev->invers->prev->invers->prev; run->mininame != aussen;
     run=run->invers->prev) 
{ sequenz[position]=0; position++; seqkanten[position]=nil; }
/* naechste Kante vor nicht-0-sequenz suchen -- entsprechende innenkanten gibt es nicht
   und muessen sich dementsprechend auch nicht gemerkt werden */


while (run != start)
{
seqkanten[position]=run;
for (zaehler=1; 
     run->prev->invers->prev->invers->prev->mininame == aussen;
     run=run->prev->invers->prev->invers->prev) { zaehler++; }
sequenz[position]=zaehler; position++; seqkanten[position]=nil;
for (run=run->prev->invers->prev->invers->prev->invers->prev; run->mininame != aussen;
     run=run->invers->prev) 
{ sequenz[position]=0; position++; seqkanten[position]=nil; }
}


sequenz[position]=leer; seqkanten[position]=nil;
sqlaenge=position;

*fuenfecke=6-sqlaenge;

kan[0]=sequenz_kanonisch(sequenz);


for (i=0; sequenz[i] != leer; i++)
  { for (j=i, k=0; sequenz[j]!=leer; j++, k++) puffer[k]=sequenz[j];
    for (j=0; j<i; j++, k++) puffer[k]=sequenz[j];
    puffer[k]=leer;
    kan[i]=sequenz_kanonisch(puffer);
  }



for (i=0, run=nil; sequenz[i] != leer; i++)
  { if (kan[i])
      if ((run==nil) || (seqkanten[i]->dummy < run->dummy)) run=seqkanten[i];
      /* dummy ersetzt ursprung */
  }

/* Jetzt die vorige Innenkante suchen, um rechts davon dann einfuegen zu koennen */
for (run=run->next->invers->next->invers->next; run->mininame != aussen; run=run->invers->next);


return(run);

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xc0, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %rax
movzwl 0x14(%rax), %eax
cmpl $0x246, %eax            # imm = 0x246
jne 0x9ff4
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %rax
movq %rax, -0x8(%rbp)
jmp 0x9fb3
movl $0x0, -0x14(%rbp)
cmpl $0x7, -0x14(%rbp)
jge 0xa034
movslq -0x14(%rbp), %rax
movl $0xfffe, -0x50(%rbp,%rax,4) # imm = 0xFFFE
movslq -0x14(%rbp), %rax
movq $0x0, -0x90(%rbp,%rax,8)
movslq -0x14(%rbp), %rax
movb $0x0, -0xb7(%rbp,%rax)
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0x9ffb
movl $0x0, -0x28(%rbp)
movl $0x0, -0x24(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x90(%rbp)
movl $0x1, -0x20(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movzwl 0x14(%rax), %eax
cmpl $0x246, %eax            # imm = 0x246
jne 0xa0a6
movl -0x20(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x20(%rbp)
movq -0x30(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq %rax, -0x30(%rbp)
jmp 0xa05c
movl -0x20(%rbp), %eax
movl %eax, -0x50(%rbp)
movl $0x1, -0x24(%rbp)
movq $0x0, -0x88(%rbp)
movq -0x30(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
movzwl 0x14(%rax), %eax
cmpl $0x246, %eax            # imm = 0x246
je 0xa128
movslq -0x24(%rbp), %rax
movl $0x0, -0x50(%rbp,%rax,4)
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
movslq -0x24(%rbp), %rax
movq $0x0, -0x90(%rbp,%rax,8)
movq -0x30(%rbp), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq %rax, -0x30(%rbp)
jmp 0xa0e2
jmp 0xa12a
movq -0x30(%rbp), %rax
cmpq -0x8(%rbp), %rax
je 0xa22c
movq -0x30(%rbp), %rcx
movslq -0x24(%rbp), %rax
movq %rcx, -0x90(%rbp,%rax,8)
movl $0x1, -0x20(%rbp)
movq -0x30(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movzwl 0x14(%rax), %eax
cmpl $0x246, %eax            # imm = 0x246
jne 0xa199
movl -0x20(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x20(%rbp)
movq -0x30(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq %rax, -0x30(%rbp)
jmp 0xa14f
movl -0x20(%rbp), %ecx
movslq -0x24(%rbp), %rax
movl %ecx, -0x50(%rbp,%rax,4)
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
movslq -0x24(%rbp), %rax
movq $0x0, -0x90(%rbp,%rax,8)
movq -0x30(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
movzwl 0x14(%rax), %eax
cmpl $0x246, %eax            # imm = 0x246
je 0xa227
movslq -0x24(%rbp), %rax
movl $0x0, -0x50(%rbp,%rax,4)
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
movslq -0x24(%rbp), %rax
movq $0x0, -0x90(%rbp,%rax,8)
movq -0x30(%rbp), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq %rax, -0x30(%rbp)
jmp 0xa1e1
jmp 0xa12a
movslq -0x24(%rbp), %rax
movl $0xfffe, -0x50(%rbp,%rax,4) # imm = 0xFFFE
movslq -0x24(%rbp), %rax
movq $0x0, -0x90(%rbp,%rax,8)
movl -0x24(%rbp), %eax
movl %eax, -0x28(%rbp)
movl $0x6, %ecx
subl -0x28(%rbp), %ecx
movq -0x10(%rbp), %rax
movl %ecx, (%rax)
leaq -0x50(%rbp), %rdi
callq 0x49a0
movb %al, -0xb7(%rbp)
movl $0x0, -0x14(%rbp)
movslq -0x14(%rbp), %rax
cmpl $0xfffe, -0x50(%rbp,%rax,4) # imm = 0xFFFE
je 0xa332
movl -0x14(%rbp), %eax
movl %eax, -0x18(%rbp)
movl $0x0, -0x1c(%rbp)
movslq -0x18(%rbp), %rax
cmpl $0xfffe, -0x50(%rbp,%rax,4) # imm = 0xFFFE
je 0xa2c6
movslq -0x18(%rbp), %rax
movl -0x50(%rbp,%rax,4), %ecx
movslq -0x1c(%rbp), %rax
movl %ecx, -0xb0(%rbp,%rax,4)
movl -0x18(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x18(%rbp)
movl -0x1c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1c(%rbp)
jmp 0xa291
movl $0x0, -0x18(%rbp)
movl -0x18(%rbp), %eax
cmpl -0x14(%rbp), %eax
jge 0xa2fc
movslq -0x18(%rbp), %rax
movl -0x50(%rbp,%rax,4), %ecx
movslq -0x1c(%rbp), %rax
movl %ecx, -0xb0(%rbp,%rax,4)
movl -0x18(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x18(%rbp)
movl -0x1c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1c(%rbp)
jmp 0xa2cd
movslq -0x1c(%rbp), %rax
movl $0xfffe, -0xb0(%rbp,%rax,4) # imm = 0xFFFE
leaq -0xb0(%rbp), %rdi
callq 0x49a0
movb %al, %cl
movslq -0x14(%rbp), %rax
movb %cl, -0xb7(%rbp,%rax)
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xa272
movl $0x0, -0x14(%rbp)
movq $0x0, -0x30(%rbp)
movslq -0x14(%rbp), %rax
cmpl $0xfffe, -0x50(%rbp,%rax,4) # imm = 0xFFFE
je 0xa39d
movslq -0x14(%rbp), %rax
cmpb $0x0, -0xb7(%rbp,%rax)
je 0xa390
cmpq $0x0, -0x30(%rbp)
je 0xa37e
movslq -0x14(%rbp), %rax
movq -0x90(%rbp,%rax,8), %rax
movq 0x8(%rax), %rax
movq -0x30(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jge 0xa38e
movslq -0x14(%rbp), %rax
movq -0x90(%rbp,%rax,8), %rax
movq %rax, -0x30(%rbp)
jmp 0xa390
jmp 0xa392
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xa341
movq -0x30(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
movzwl 0x14(%rax), %eax
cmpl $0x246, %eax            # imm = 0x246
je 0xa3dc
jmp 0xa3ca
movq -0x30(%rbp), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %rax
movq %rax, -0x30(%rbp)
jmp 0xa3b9
movq -0x30(%rbp), %rax
addq $0xc0, %rsp
popq %rbp
retq
nopl (%rax)