// File: /workspace/github_c_makefile_star2_O0/mishun[P]plantri/fullgen.c
// Function: add_polygon
void add_polygon(int n, PLANMAP map, KANTE *start, KANTE **lastout)
/* fuegt ein weiteres polygon einer Reihe an. Dabei ist n die groesse des polygons. 
   Angefuegt wird immer an start. Die Marke wird nicht versetzt. Ueber lastout wird
   die letzte Aussenkante des Polygons zurueckgegeben. */


{
int new_tempknz, tempknz;
KANTE *ende;
int common_vertices;


if (IPR && (n==5))
  {
    if (checksize_right(start->next)==5) is_ipr=0;
    for (ende=start->next->invers->next, common_vertices=2; ende->name != aussen; 
	  ende=ende->invers->next) { if (checksize_right(ende)==5) is_ipr=0;
                                     common_vertices++;
				   }
  }
else for (ende=start->next->invers->next, common_vertices=2; ende->name != aussen; 
	  ende=ende->invers->next) common_vertices++;


if (n<common_vertices) 
   { fprintf(stderr,"polygon to insert too small !\n"); 
     exit(4); }

/* es muessen also n-common_vertices knoten hinzugefuegt werden */

tempknz=map[0][0].name;
new_tempknz=tempknz+n-common_vertices;

if (n-common_vertices==0) /* dann kommt kein knoten dazu */
  { start->name=ende->ursprung; start->invers=ende;
    ende->name=start->ursprung; ende->invers=start;
    *lastout=nil;
    return;
  }

if (n-common_vertices==1) /* dann kommt nur ein knoten dazu */
 {
 tempknz++;
 start->name=tempknz; start->invers=map[tempknz];
 map[tempknz][0].name=start->ursprung; map[tempknz][0].invers=start;
 map[tempknz][1].name=aussen; map[tempknz][1].invers=nil;
 map[tempknz][2].name=ende->ursprung; map[tempknz][2].invers=ende;
 ende->name=tempknz; ende->invers=map[tempknz]+2;
 *lastout=map[tempknz]+1;
 map[0][0].name=tempknz;
 return;
 }


/* es bleibt: mindestens zwei neue knoten */

tempknz++;
start->name=tempknz; start->invers=map[tempknz];
map[tempknz][0].name=start->ursprung; map[tempknz][0].invers=start;
map[tempknz][1].name=aussen; map[tempknz][1].invers=nil;
map[tempknz][2].name=tempknz+1; map[tempknz][2].invers=map[tempknz+1];

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

/* und nun noch den letzten knoten */
map[tempknz][0].name=tempknz-1; map[tempknz][0].invers=map[tempknz-1]+2;
map[tempknz][1].name=aussen; map[tempknz][1].invers=nil;
map[tempknz][2].name=ende->ursprung; map[tempknz][2].invers= ende;
ende->name=tempknz; ende->invers=map[tempknz]+2;
*lastout=map[tempknz]+1;
map[0][0].name=tempknz;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movl %edi, -0x4(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movsbl 0x17d73(%rip), %eax     # 0x1c181
cmpl $0x0, %eax
je 0x448e
cmpl $0x5, -0x4(%rbp)
jne 0x448e
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x43a0
cmpl $0x5, %eax
jne 0x4432
movb $0x0, 0x17d02(%rip)     # 0x1c134
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %rax
movq %rax, -0x30(%rbp)
movl $0x2, -0x34(%rbp)
movq -0x30(%rbp), %rax
movzwl 0x2(%rax), %eax
cmpl $0x246, %eax            # imm = 0x246
je 0x448c
movq -0x30(%rbp), %rdi
callq 0x43a0
cmpl $0x5, %eax
jne 0x4471
movb $0x0, 0x17cc3(%rip)     # 0x1c134
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
movq -0x30(%rbp), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %rax
movq %rax, -0x30(%rbp)
jmp 0x444d
jmp 0x44d5
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %rax
movq %rax, -0x30(%rbp)
movl $0x2, -0x34(%rbp)
movq -0x30(%rbp), %rax
movzwl 0x2(%rax), %eax
cmpl $0x246, %eax            # imm = 0x246
je 0x44d3
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
movq -0x30(%rbp), %rax
movq 0x28(%rax), %rax
movq 0x20(%rax), %rax
movq %rax, -0x30(%rbp)
jmp 0x44a9
jmp 0x44d5
movl -0x4(%rbp), %eax
cmpl -0x34(%rbp), %eax
jge 0x44ff
movq 0x17b14(%rip), %rax     # 0x1bff8
movq (%rax), %rdi
leaq 0x1408a(%rip), %rsi     # 0x18578
movb $0x0, %al
callq 0x1080
movl $0x4, %edi
callq 0x1120
movq -0x10(%rbp), %rax
movzwl 0x2(%rax), %eax
movl %eax, -0x28(%rbp)
movl -0x28(%rbp), %eax
addl -0x4(%rbp), %eax
subl -0x34(%rbp), %eax
movl %eax, -0x24(%rbp)
movl -0x4(%rbp), %eax
subl -0x34(%rbp), %eax
cmpl $0x0, %eax
jne 0x4567
movq -0x30(%rbp), %rax
movw (%rax), %cx
movq -0x18(%rbp), %rax
movw %cx, 0x2(%rax)
movq -0x30(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x18(%rbp), %rax
movw (%rax), %cx
movq -0x30(%rbp), %rax
movw %cx, 0x2(%rax)
movq -0x18(%rbp), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x20(%rbp), %rax
movq $0x0, (%rax)
jmp 0x4992
movl -0x4(%rbp), %eax
subl -0x34(%rbp), %eax
cmpl $0x1, %eax
jne 0x46a6
movl -0x28(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x28(%rbp)
movl -0x28(%rbp), %eax
movw %ax, %cx
movq -0x18(%rbp), %rax
movw %cx, 0x2(%rax)
movq -0x10(%rbp), %rcx
movslq -0x28(%rbp), %rax
imulq $0x90, %rax, %rax
addq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x18(%rbp), %rax
movw (%rax), %cx
movq -0x10(%rbp), %rax
movslq -0x28(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movw %cx, 0x2(%rax)
movq -0x18(%rbp), %rcx
movq -0x10(%rbp), %rax
movslq -0x28(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movq %rcx, 0x28(%rax)
movq -0x10(%rbp), %rax
movslq -0x28(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
movw $0x246, 0x32(%rax)      # imm = 0x246
movq -0x10(%rbp), %rax
movslq -0x28(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
movq $0x0, 0x58(%rax)
movq -0x30(%rbp), %rax
movw (%rax), %cx
movq -0x10(%rbp), %rax
movslq -0x28(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movw %cx, 0x62(%rax)
movq -0x30(%rbp), %rcx
movq -0x10(%rbp), %rax
movslq -0x28(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movq %rcx, 0x88(%rax)
movl -0x28(%rbp), %eax
movw %ax, %cx
movq -0x30(%rbp), %rax
movw %cx, 0x2(%rax)
movq -0x10(%rbp), %rcx
movslq -0x28(%rbp), %rax
imulq $0x90, %rax, %rax
addq %rax, %rcx
addq $0x60, %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x10(%rbp), %rcx
movslq -0x28(%rbp), %rax
imulq $0x90, %rax, %rax
addq %rax, %rcx
addq $0x30, %rcx
movq -0x20(%rbp), %rax
movq %rcx, (%rax)
movl -0x28(%rbp), %eax
movw %ax, %cx
movq -0x10(%rbp), %rax
movw %cx, 0x2(%rax)
jmp 0x4992
movl -0x28(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x28(%rbp)
movl -0x28(%rbp), %eax
movw %ax, %cx
movq -0x18(%rbp), %rax
movw %cx, 0x2(%rax)
movq -0x10(%rbp), %rcx
movslq -0x28(%rbp), %rax
imulq $0x90, %rax, %rax
addq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x18(%rbp), %rax
movw (%rax), %cx
movq -0x10(%rbp), %rax
movslq -0x28(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movw %cx, 0x2(%rax)
movq -0x18(%rbp), %rcx
movq -0x10(%rbp), %rax
movslq -0x28(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movq %rcx, 0x28(%rax)
movq -0x10(%rbp), %rax
movslq -0x28(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
movw $0x246, 0x32(%rax)      # imm = 0x246
movq -0x10(%rbp), %rax
movslq -0x28(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
movq $0x0, 0x58(%rax)
movl -0x28(%rbp), %eax
addl $0x1, %eax
movw %ax, %cx
movq -0x10(%rbp), %rax
movslq -0x28(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movw %cx, 0x62(%rax)
movq -0x10(%rbp), %rcx
movl -0x28(%rbp), %eax
addl $0x1, %eax
cltq
imulq $0x90, %rax, %rax
addq %rax, %rcx
movq -0x10(%rbp), %rax
movslq -0x28(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movq %rcx, 0x88(%rax)
movl -0x28(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x28(%rbp)
movl -0x28(%rbp), %eax
cmpl -0x24(%rbp), %eax
jge 0x4880
movl -0x28(%rbp), %eax
subl $0x1, %eax
movw %ax, %cx
movq -0x10(%rbp), %rax
movslq -0x28(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movw %cx, 0x2(%rax)
movq -0x10(%rbp), %rcx
movl -0x28(%rbp), %eax
subl $0x1, %eax
cltq
imulq $0x90, %rax, %rax
addq %rax, %rcx
addq $0x60, %rcx
movq -0x10(%rbp), %rax
movslq -0x28(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movq %rcx, 0x28(%rax)
movq -0x10(%rbp), %rax
movslq -0x28(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
movw $0x246, 0x32(%rax)      # imm = 0x246
movq -0x10(%rbp), %rax
movslq -0x28(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
movq $0x0, 0x58(%rax)
movl -0x28(%rbp), %eax
addl $0x1, %eax
movw %ax, %cx
movq -0x10(%rbp), %rax
movslq -0x28(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movw %cx, 0x62(%rax)
movq -0x10(%rbp), %rcx
movl -0x28(%rbp), %eax
addl $0x1, %eax
cltq
imulq $0x90, %rax, %rax
addq %rax, %rcx
movq -0x10(%rbp), %rax
movslq -0x28(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movq %rcx, 0x88(%rax)
movl -0x28(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x28(%rbp)
jmp 0x4797
movl -0x28(%rbp), %eax
subl $0x1, %eax
movw %ax, %cx
movq -0x10(%rbp), %rax
movslq -0x28(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movw %cx, 0x2(%rax)
movq -0x10(%rbp), %rcx
movl -0x28(%rbp), %eax
subl $0x1, %eax
cltq
imulq $0x90, %rax, %rax
addq %rax, %rcx
addq $0x60, %rcx
movq -0x10(%rbp), %rax
movslq -0x28(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movq %rcx, 0x28(%rax)
movq -0x10(%rbp), %rax
movslq -0x28(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
movw $0x246, 0x32(%rax)      # imm = 0x246
movq -0x10(%rbp), %rax
movslq -0x28(%rbp), %rcx
imulq $0x90, %rcx, %rcx
addq %rcx, %rax
movq $0x0, 0x58(%rax)
movq -0x30(%rbp), %rax
movw (%rax), %cx
movq -0x10(%rbp), %rax
movslq -0x28(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movw %cx, 0x62(%rax)
movq -0x30(%rbp), %rcx
movq -0x10(%rbp), %rax
movslq -0x28(%rbp), %rdx
imulq $0x90, %rdx, %rdx
addq %rdx, %rax
movq %rcx, 0x88(%rax)
movl -0x28(%rbp), %eax
movw %ax, %cx
movq -0x30(%rbp), %rax
movw %cx, 0x2(%rax)
movq -0x10(%rbp), %rcx
movslq -0x28(%rbp), %rax
imulq $0x90, %rax, %rax
addq %rax, %rcx
addq $0x60, %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x10(%rbp), %rcx
movslq -0x28(%rbp), %rax
imulq $0x90, %rax, %rax
addq %rax, %rcx
addq $0x30, %rcx
movq -0x20(%rbp), %rax
movq %rcx, (%rax)
movl -0x28(%rbp), %eax
movw %ax, %cx
movq -0x10(%rbp), %rax
movw %cx, 0x2(%rax)
addq $0x40, %rsp
popq %rbp
retq
nopl (%rax,%rax)