// File: /workspace/github_c_makefile_star2_O1/mishun[P]plantri/fullgen.c
// Function: baue_brille
void baue_brille(int pfadlaenge,int laenge_1,int laenge_3,PLANMAP map, 
		 KANTE **anfang_1, KANTE **anfang_2, KANTE **anfang_3)
{
int stelle_2, knotenzahl, i;
KANTE *aussenzeiger, *letzte_Kante, *startkante_1, *startkante_2;

knotenzahl=pfadlaenge-1;

/* zuerst:

    knotenzahl-------stelle_2----------stelle1-------
                                                    |
                                           1        |
					   |        |
					   2--3-----
ohne die zykelschliessenden Kanten */



map[1][1].name=2; map[1][1].invers=map[2]+0; 
for (i=1; i<=knotenzahl; i++)
  { map[i][0].name=i-1; map[i][0].invers=map[i-1]+1; 
    map[i][1].name=aussen; map[i][1].invers=nil;
    map[i][2].name=i+1; map[i][2].invers=map[i+1]+0; 
    i++;
    if (i<=knotenzahl)
      { map[i][0].name=i-1; map[i][0].invers=map[i-1]+2; 
	map[i][2].name=aussen; map[i][2].invers=nil;
	map[i][1].name=i+1; map[i][1].invers=map[i+1]+0; }
   }

/* Knoten 1 und Knoten knotenzahl haben jetzt falsche vorher bzw nachher
   werte, sie muessen jetzt mit der Brille verklebt werden */
   
if ((laenge_1%2)==0) aussenzeiger=map[laenge_1]+2; else aussenzeiger=map[laenge_1]+1;

aussenzeiger->name=1; aussenzeiger->invers=map[1]+0;
map[1][0].name=laenge_1; map[1][0].invers=aussenzeiger;

stelle_2=pfadlaenge-laenge_3;
if ((stelle_2%2)==0) aussenzeiger=map[stelle_2]+2; else aussenzeiger=map[stelle_2]+1;
if ((knotenzahl%2)==0) letzte_Kante=map[knotenzahl]+1; else letzte_Kante=map[knotenzahl]+2;

letzte_Kante->name=stelle_2; letzte_Kante->invers=aussenzeiger;
aussenzeiger->name=knotenzahl; aussenzeiger->invers=letzte_Kante;

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

/* Jetzt die anfangskanten belegen: */

if ((laenge_1 %2)==0) { startkante_1=map[2]+2; startkante_2=map[1]+1; }
                     /* dann zeigt die Aussenkante von Knoten 2 ins innere von zykel_1 */
               else  { startkante_2=map[2]+2; startkante_1=map[1]+1; }
*anfang_1=suchestart(startkante_1);
*anfang_2=suchestart(startkante_2);

if ((knotenzahl%2)==0)
  { if ((laenge_3 % 2)==0) startkante_1=map[knotenzahl-1]+1;
       else startkante_1=map[knotenzahl]+2; }
  else /* d.h. knotenzahl ungerade */
  { if ((laenge_3 % 2)==0) startkante_1=map[knotenzahl-1]+2;
       else startkante_1=map[knotenzahl]+1; }
*anfang_3=suchestart(startkante_1);

}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %r9, 0x10(%rsp)
movq %r8, 0x8(%rsp)
movq %rcx, %rbx
movl %edi, %r14d
leal -0x1(%r14), %r8d
addq $0x90, %rcx
leaq 0xc0(%rbx), %rax
movw $0x2, 0xc2(%rbx)
leaq 0x120(%rbx), %rdi
movq %rdi, 0xe8(%rbx)
movslq %r8d, %r12
cmpl $0x2, %r14d
jl 0xd436
movl %r14d, %r15d
xorl %edi, %edi
movq %rbx, %r8
leaq 0x1(%rdi), %r10
movw %di, 0x92(%r8)
leaq 0x30(%r8), %r9
movq %r9, 0xb8(%r8)
movw $0x246, 0xc2(%r8)       # imm = 0x246
movq $0x0, 0xe8(%r8)
leal 0x2(%rdi), %r9d
movw %r9w, 0xf2(%r8)
leaq 0x120(%r8), %r9
movq %r9, 0x118(%r8)
cmpq %r12, %r10
jge 0xd41f
leaq 0xf0(%r8), %r10
leal 0x1(%rdi), %r11d
movw %r11w, 0x122(%r8)
movq %r10, 0x148(%r8)
movw $0x246, 0x182(%r8)      # imm = 0x246
movq $0x0, 0x1a8(%r8)
leal 0x3(%rdi), %r10d
movw %r10w, 0x152(%r8)
leaq 0x1b0(%r8), %r10
movq %r10, 0x178(%r8)
leaq 0x2(%rdi), %r10
addq $0x3, %rdi
movq %r9, %r8
cmpq %r15, %rdi
movq %r10, %rdi
jb 0xd38b
movslq %esi, %r15
leaq (%r15,%r15,8), %r9
shlq $0x4, %r9
movl %r14d, %r8d
subl %edx, %r8d
movslq %r8d, %rdi
leaq (%rdi,%rdi,8), %r10
shlq $0x4, %r10
testb $0x1, %r8b
leaq 0x60(%rbx,%r10), %r11
leaq 0x30(%rbx,%r10), %r8
cmoveq %r11, %r8
leaq (%r12,%r12,8), %r10
shlq $0x4, %r10
testb $0x1, %r12b
movl %edx, 0x4(%rsp)
leaq 0x30(%rbx,%r10), %rbp
leaq 0x60(%rbx,%r10), %r13
movq %r13, %r10
cmoveq %rbp, %r10
testb $0x1, %sil
leaq 0x60(%rbx,%r9), %rsi
leaq 0x30(%rbx,%r9), %r9
cmoveq %rsi, %r9
movw $0x1, 0x2(%r9)
movq %rcx, 0x28(%r9)
movw %r15w, 0x92(%rbx)
movq %r9, 0xb8(%rbx)
movw %di, 0x2(%r10)
movq %r8, 0x28(%r10)
movw %r12w, 0x2(%r8)
movq %r10, 0x28(%r8)
leaq 0x180(%rbx), %r15
movq %rax, %rdi
cmoveq %r15, %rdi
cmoveq %rax, %r15
movw %r12w, 0x2(%rbx)
callq 0xcf56
movq 0x8(%rsp), %rcx
movq %rax, (%rcx)
movq %r15, %rdi
callq 0xcf56
movq 0x10(%rsp), %rcx
movq %rax, (%rcx)
testb $0x1, %r12b
jne 0xd51c
testb $0x1, 0x4(%rsp)
jne 0xd53c
movslq %r14d, %rax
leaq (%rax,%rax,8), %rax
shlq $0x4, %rax
leaq (%rbx,%rax), %r13
addq $-0xf0, %r13
jmp 0xd53c
movq %rbp, %r13
testb $0x1, 0x4(%rsp)
jne 0xd53c
movslq %r14d, %rax
leaq (%rax,%rax,8), %rax
shlq $0x4, %rax
leaq (%rbx,%rax), %r13
addq $-0xc0, %r13
movq %r13, %rdi
callq 0xcf56
movq 0x50(%rsp), %rcx
movq %rax, (%rcx)
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq