// File: /workspace/github_c_makefile_star2_O0/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
movq %rsp, %rbp
subq $0x60, %rsp
movq 0x10(%rbp), %rax
movl %edi, -0x4(%rbp)
movl %esi, -0x8(%rbp)
movl %edx, -0xc(%rbp)
movq %rcx, -0x18(%rbp)
movq %r8, -0x20(%rbp)
movq %r9, -0x28(%rbp)
movl -0x4(%rbp), %eax
subl $0x1, %eax
movl %eax, -0x30(%rbp)
movq -0x18(%rbp), %rax
movw $0x2, 0xc2(%rax)
movq -0x18(%rbp), %rcx
addq $0x120, %rcx            # imm = 0x120
movq -0x18(%rbp), %rax
movq %rcx, 0xe8(%rax)
movl $0x1, -0x34(%rbp)
movl -0x34(%rbp), %eax
cmpl -0x30(%rbp), %eax
jg 0x141b3
movl -0x34(%rbp), %eax
subl $0x1, %eax
movw %ax, %cx
movq -0x18(%rbp), %rax
movslq -0x34(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movw %cx, 0x2(%rax)
movq -0x18(%rbp), %rcx
movl -0x34(%rbp), %eax
subl $0x1, %eax
cltq
imulq $0x90, %rax, %rax
addq %rax, %rcx
addq $0x30, %rcx
movq -0x18(%rbp), %rax
movslq -0x34(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movq %rcx, 0x28(%rax)
movq -0x18(%rbp), %rax
movslq -0x34(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
movw $0x246, 0x32(%rax)      # imm = 0x246
movq -0x18(%rbp), %rax
movslq -0x34(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
movq $0x0, 0x58(%rax)
movl -0x34(%rbp), %eax
addl $0x1, %eax
movw %ax, %cx
movq -0x18(%rbp), %rax
movslq -0x34(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movw %cx, 0x62(%rax)
movq -0x18(%rbp), %rcx
movl -0x34(%rbp), %eax
addl $0x1, %eax
cltq
imulq $0x90, %rax, %rax
addq %rax, %rcx
movq -0x18(%rbp), %rax
movslq -0x34(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movq %rcx, 0x88(%rax)
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
movl -0x34(%rbp), %eax
cmpl -0x30(%rbp), %eax
jg 0x141a3
movl -0x34(%rbp), %eax
subl $0x1, %eax
movw %ax, %cx
movq -0x18(%rbp), %rax
movslq -0x34(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movw %cx, 0x2(%rax)
movq -0x18(%rbp), %rcx
movl -0x34(%rbp), %eax
subl $0x1, %eax
cltq
imulq $0x90, %rax, %rax
addq %rax, %rcx
addq $0x60, %rcx
movq -0x18(%rbp), %rax
movslq -0x34(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movq %rcx, 0x28(%rax)
movq -0x18(%rbp), %rax
movslq -0x34(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
movw $0x246, 0x62(%rax)      # imm = 0x246
movq -0x18(%rbp), %rax
movslq -0x34(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
movq $0x0, 0x88(%rax)
movl -0x34(%rbp), %eax
addl $0x1, %eax
movw %ax, %cx
movq -0x18(%rbp), %rax
movslq -0x34(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movw %cx, 0x32(%rax)
movq -0x18(%rbp), %rcx
movl -0x34(%rbp), %eax
addl $0x1, %eax
cltq
imulq $0x90, %rax, %rax
addq %rax, %rcx
movq -0x18(%rbp), %rax
movslq -0x34(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movq %rcx, 0x58(%rax)
jmp 0x141a5
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0x13fe4
movl -0x8(%rbp), %eax
movl $0x2, %ecx
cltd
idivl %ecx
cmpl $0x0, %edx
jne 0x141df
movq -0x18(%rbp), %rax
movslq -0x8(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
addq $0x60, %rax
movq %rax, -0x40(%rbp)
jmp 0x141f9
movq -0x18(%rbp), %rax
movslq -0x8(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
addq $0x30, %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
movw $0x1, 0x2(%rax)
movq -0x18(%rbp), %rcx
addq $0x90, %rcx
movq -0x40(%rbp), %rax
movq %rcx, 0x28(%rax)
movl -0x8(%rbp), %eax
movw %ax, %cx
movq -0x18(%rbp), %rax
movw %cx, 0x92(%rax)
movq -0x40(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0xb8(%rax)
movl -0x4(%rbp), %eax
subl -0xc(%rbp), %eax
movl %eax, -0x2c(%rbp)
movl -0x2c(%rbp), %eax
movl $0x2, %ecx
cltd
idivl %ecx
cmpl $0x0, %edx
jne 0x1426b
movq -0x18(%rbp), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
addq $0x60, %rax
movq %rax, -0x40(%rbp)
jmp 0x14285
movq -0x18(%rbp), %rax
movslq -0x2c(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
addq $0x30, %rax
movq %rax, -0x40(%rbp)
movl -0x30(%rbp), %eax
movl $0x2, %ecx
cltd
idivl %ecx
cmpl $0x0, %edx
jne 0x142b1
movq -0x18(%rbp), %rax
movslq -0x30(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
addq $0x30, %rax
movq %rax, -0x48(%rbp)
jmp 0x142cb
movq -0x18(%rbp), %rax
movslq -0x30(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
addq $0x60, %rax
movq %rax, -0x48(%rbp)
movl -0x2c(%rbp), %eax
movw %ax, %cx
movq -0x48(%rbp), %rax
movw %cx, 0x2(%rax)
movq -0x40(%rbp), %rcx
movq -0x48(%rbp), %rax
movq %rcx, 0x28(%rax)
movl -0x30(%rbp), %eax
movw %ax, %cx
movq -0x40(%rbp), %rax
movw %cx, 0x2(%rax)
movq -0x48(%rbp), %rcx
movq -0x40(%rbp), %rax
movq %rcx, 0x28(%rax)
movl -0x30(%rbp), %eax
movw %ax, %cx
movq -0x18(%rbp), %rax
movw %cx, 0x2(%rax)
movl -0x8(%rbp), %eax
movl $0x2, %ecx
cltd
idivl %ecx
cmpl $0x0, %edx
jne 0x14343
movq -0x18(%rbp), %rax
addq $0x120, %rax            # imm = 0x120
addq $0x60, %rax
movq %rax, -0x50(%rbp)
movq -0x18(%rbp), %rax
addq $0x90, %rax
addq $0x30, %rax
movq %rax, -0x58(%rbp)
jmp 0x14367
movq -0x18(%rbp), %rax
addq $0x120, %rax            # imm = 0x120
addq $0x60, %rax
movq %rax, -0x58(%rbp)
movq -0x18(%rbp), %rax
addq $0x90, %rax
addq $0x30, %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rdi
callq 0x136b0
movq %rax, %rcx
movq -0x20(%rbp), %rax
movq %rcx, (%rax)
movq -0x58(%rbp), %rdi
callq 0x136b0
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
movl -0x30(%rbp), %eax
movl $0x2, %ecx
cltd
idivl %ecx
cmpl $0x0, %edx
jne 0x143ea
movl -0xc(%rbp), %eax
movl $0x2, %ecx
cltd
idivl %ecx
cmpl $0x0, %edx
jne 0x143ce
movq -0x18(%rbp), %rax
movl -0x30(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
addq $0x30, %rax
movq %rax, -0x50(%rbp)
jmp 0x143e8
movq -0x18(%rbp), %rax
movslq -0x30(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
addq $0x60, %rax
movq %rax, -0x50(%rbp)
jmp 0x14437
movl -0xc(%rbp), %eax
movl $0x2, %ecx
cltd
idivl %ecx
cmpl $0x0, %edx
jne 0x1441b
movq -0x18(%rbp), %rax
movl -0x30(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
addq $0x60, %rax
movq %rax, -0x50(%rbp)
jmp 0x14435
movq -0x18(%rbp), %rax
movslq -0x30(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
addq $0x30, %rax
movq %rax, -0x50(%rbp)
jmp 0x14437
movq -0x50(%rbp), %rdi
callq 0x136b0
movq %rax, %rcx
movq 0x10(%rbp), %rax
movq %rcx, (%rax)
addq $0x60, %rsp
popq %rbp
retq