// File: /workspace/github_c_makefile_star2_O0/mishun[P]plantri/fullgen.c
// Function: suchestart
KANTE *suchestart( KANTE *start)
/* 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.*/

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



while (start->next->invers->next->invers->next->name == 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; }

position=0;
seqkanten[0]=start;


for (zaehler=1, run=start;
     run->prev->invers->prev->invers->prev->name == 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->name != 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->name == 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->name != aussen;
     run=run->invers->prev) 
{ sequenz[position]=0; position++; seqkanten[position]=nil; }
}


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

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]->ursprung < run->ursprung)) run=seqkanten[i];
  }

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


return(run);


}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xc0, %rsp
movq %rdi, -0x8(%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 0x2(%rax), %eax
cmpl $0x246, %eax            # imm = 0x246
jne 0x13700
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 0x136bf
movl $0x0, -0xc(%rbp)
cmpl $0x7, -0xc(%rbp)
jge 0x13740
movslq -0xc(%rbp), %rax
movl $0xfffe, -0x50(%rbp,%rax,4) # imm = 0xFFFE
movslq -0xc(%rbp), %rax
movq $0x0, -0x90(%rbp,%rax,8)
movslq -0xc(%rbp), %rax
movb $0x0, -0xb7(%rbp,%rax)
movl -0xc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xc(%rbp)
jmp 0x13707
movl $0x0, -0x1c(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x90(%rbp)
movl $0x1, -0x18(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movzwl 0x2(%rax), %eax
cmpl $0x246, %eax            # imm = 0x246
jne 0x137ab
movl -0x18(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x18(%rbp)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq %rax, -0x28(%rbp)
jmp 0x13761
movl -0x18(%rbp), %eax
movl %eax, -0x50(%rbp)
movl $0x1, -0x1c(%rbp)
movq $0x0, -0x88(%rbp)
movq -0x28(%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, -0x28(%rbp)
movq -0x28(%rbp), %rax
movzwl 0x2(%rax), %eax
cmpl $0x246, %eax            # imm = 0x246
je 0x1382d
movslq -0x1c(%rbp), %rax
movl $0x0, -0x50(%rbp,%rax,4)
movl -0x1c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1c(%rbp)
movslq -0x1c(%rbp), %rax
movq $0x0, -0x90(%rbp,%rax,8)
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq %rax, -0x28(%rbp)
jmp 0x137e7
jmp 0x1382f
movq -0x28(%rbp), %rax
cmpq -0x8(%rbp), %rax
je 0x13931
movq -0x28(%rbp), %rcx
movslq -0x1c(%rbp), %rax
movq %rcx, -0x90(%rbp,%rax,8)
movl $0x1, -0x18(%rbp)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movzwl 0x2(%rax), %eax
cmpl $0x246, %eax            # imm = 0x246
jne 0x1389e
movl -0x18(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x18(%rbp)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq %rax, -0x28(%rbp)
jmp 0x13854
movl -0x18(%rbp), %ecx
movslq -0x1c(%rbp), %rax
movl %ecx, -0x50(%rbp,%rax,4)
movl -0x1c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1c(%rbp)
movslq -0x1c(%rbp), %rax
movq $0x0, -0x90(%rbp,%rax,8)
movq -0x28(%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, -0x28(%rbp)
movq -0x28(%rbp), %rax
movzwl 0x2(%rax), %eax
cmpl $0x246, %eax            # imm = 0x246
je 0x1392c
movslq -0x1c(%rbp), %rax
movl $0x0, -0x50(%rbp,%rax,4)
movl -0x1c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1c(%rbp)
movslq -0x1c(%rbp), %rax
movq $0x0, -0x90(%rbp,%rax,8)
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq 0x18(%rax), %rax
movq %rax, -0x28(%rbp)
jmp 0x138e6
jmp 0x1382f
movslq -0x1c(%rbp), %rax
movl $0xfffe, -0x50(%rbp,%rax,4) # imm = 0xFFFE
movslq -0x1c(%rbp), %rax
movq $0x0, -0x90(%rbp,%rax,8)
leaq -0x50(%rbp), %rdi
callq 0x49a0
movb %al, -0xb7(%rbp)
movl $0x0, -0xc(%rbp)
movslq -0xc(%rbp), %rax
cmpl $0xfffe, -0x50(%rbp,%rax,4) # imm = 0xFFFE
je 0x13a23
movl -0xc(%rbp), %eax
movl %eax, -0x10(%rbp)
movl $0x0, -0x14(%rbp)
movslq -0x10(%rbp), %rax
cmpl $0xfffe, -0x50(%rbp,%rax,4) # imm = 0xFFFE
je 0x139b7
movslq -0x10(%rbp), %rax
movl -0x50(%rbp,%rax,4), %ecx
movslq -0x14(%rbp), %rax
movl %ecx, -0xb0(%rbp,%rax,4)
movl -0x10(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x10(%rbp)
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0x13982
movl $0x0, -0x10(%rbp)
movl -0x10(%rbp), %eax
cmpl -0xc(%rbp), %eax
jge 0x139ed
movslq -0x10(%rbp), %rax
movl -0x50(%rbp,%rax,4), %ecx
movslq -0x14(%rbp), %rax
movl %ecx, -0xb0(%rbp,%rax,4)
movl -0x10(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x10(%rbp)
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0x139be
movslq -0x14(%rbp), %rax
movl $0xfffe, -0xb0(%rbp,%rax,4) # imm = 0xFFFE
leaq -0xb0(%rbp), %rdi
callq 0x49a0
movb %al, %cl
movslq -0xc(%rbp), %rax
movb %cl, -0xb7(%rbp,%rax)
movl -0xc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xc(%rbp)
jmp 0x13963
movl $0x0, -0xc(%rbp)
movq $0x0, -0x28(%rbp)
movslq -0xc(%rbp), %rax
cmpl $0xfffe, -0x50(%rbp,%rax,4) # imm = 0xFFFE
je 0x13a8e
movslq -0xc(%rbp), %rax
cmpb $0x0, -0xb7(%rbp,%rax)
je 0x13a81
cmpq $0x0, -0x28(%rbp)
je 0x13a6f
movslq -0xc(%rbp), %rax
movq -0x90(%rbp,%rax,8), %rax
movzwl (%rax), %eax
movq -0x28(%rbp), %rcx
movzwl (%rcx), %ecx
cmpl %ecx, %eax
jge 0x13a7f
movslq -0xc(%rbp), %rax
movq -0x90(%rbp,%rax,8), %rax
movq %rax, -0x28(%rbp)
jmp 0x13a81
jmp 0x13a83
movl -0xc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xc(%rbp)
jmp 0x13a32
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movzwl 0x2(%rax), %eax
cmpl $0x246, %eax            # imm = 0x246
je 0x13acd
jmp 0x13abb
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %rax
movq %rax, -0x28(%rbp)
jmp 0x13aaa
movq -0x28(%rbp), %rax
addq $0xc0, %rsp
popq %rbp
retq
nopw (%rax,%rax)