// File: /workspace/github_c_makefile_star2_O1/jrrk[P]cbzone/c_graphics.c
// Function: joystick
void joystick (position, sens, pl)
     int* position;
     Genericp pl;
     Bool sens;
{
  static float sscale[] = {0.06, 0.03};
  static float rscale[] = {0.00013, 0.000065};
  static int destorigin[] = {845, 550};
  static short stick[8] = {0};
  static Bool first = True;
  static Bool draw = True;
  int ind;
  float scrot, sctot, scale, xl, yl, tl, xoff, yoff;

  if (sens)
    ind = 0;
  else
    ind = 1;
  pl->speed = -(position[1] - 355.0) * sscale[ind];
  pl->rotate = (position[0] - 500.0) * rscale[ind];
  if (fabs(pl->speed) > 10.0)
    pl->speed = sign(10.0, pl->speed);
  if (fabs(pl->rotate) > 0.030)
    pl->rotate = sign(0.030, pl->rotate);
  scrot = pl->rotate * 10.0 / 0.030;
  sctot = sqrt(pl->speed*pl->speed + scrot*scrot);
  if (sctot > 10.0) {
    scale = 10.0 / sctot;
    pl->speed *= scale;
    pl->rotate *= scale;
  }
  if (draw) {
    gprsetclippingactive(False);
    if (!first) {
      gprsetdrawvalue(opt->cpi[COLOR_BG]);
      removepixmap(1, destorigin);
      multiline(stick, 2);
    }
    else
      first = False;
    destorigin[0] =  35.0 * (pl->rotate / 0.03) + 845.0;
    destorigin[1] = -35.0 * (pl->speed  / 10.0)  + 550.0;
    putpixmap(1, destorigin);
    xl = pl->rotate / 0.030;
    yl = pl->speed / 10.0;
    tl = sqrt(xl*xl + yl*yl);
    if (tl > 0.05) {
      yoff = xl / tl * 9.0;
      xoff = yl / tl * 9.0;
    }
    else {
      yoff = 0.0;
      xoff = 0.0;
    }
    stick[0] = stick[4] = 855;
    stick[2] = destorigin[0] + 10 + xoff / 2;
    stick[6] = destorigin[0] + 10 - xoff / 2;
    stick[1] = stick[5] = 560;
    stick[3] = destorigin[1] + 10 + yoff / 2;;
    stick[7] = destorigin[1] + 10 - yoff / 2;
    gprsetdrawvalue(opt->cpi[COLOR_JOYSTICK]);
    multiline(stick, 2);
    gprsetclippingactive(True);
  }
  draw = !draw;
  pl->rotate = -pl->rotate;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdx, %rbx
xorl %eax, %eax
testl %esi, %esi
sete %al
cvtsi2sdl 0x4(%rdi), %xmm0
addsd 0x6409(%rip), %xmm0     # 0xe588
xorpd 0x64a9(%rip), %xmm0     # 0xe630
shll $0x2, %eax
leaq 0x648f(%rip), %rcx      # 0xe620
cvtss2sd (%rax,%rcx), %xmm1
mulsd %xmm0, %xmm1
cvtsd2ss %xmm1, %xmm1
movss %xmm1, 0x2c(%rdx)
xorps %xmm0, %xmm0
cvtsi2sdl (%rdi), %xmm0
addsd 0x63de(%rip), %xmm0     # 0xe590
leaq 0x646f(%rip), %rcx      # 0xe628
cvtss2sd (%rax,%rcx), %xmm2
mulsd %xmm0, %xmm2
xorps %xmm0, %xmm0
cvtsd2ss %xmm2, %xmm0
movss %xmm0, 0x30(%rdx)
movaps 0x5e6b(%rip), %xmm2     # 0xe040
andps %xmm1, %xmm2
ucomiss 0x5e25(%rip), %xmm2     # 0xe004
jbe 0x81fd
xorps %xmm2, %xmm2
xorl %eax, %eax
ucomiss %xmm1, %xmm2
seta %al
leaq 0x63a5(%rip), %rcx      # 0xe598
movss (%rcx,%rax,4), %xmm1
movss %xmm1, 0x2c(%rbx)
movaps 0x5e3c(%rip), %xmm1     # 0xe040
andps %xmm0, %xmm1
cvtss2sd %xmm1, %xmm1
ucomisd 0x638d(%rip), %xmm1     # 0xe5a0
jbe 0x8231
xorps %xmm1, %xmm1
xorl %eax, %eax
ucomiss %xmm0, %xmm1
seta %al
leaq 0x6381(%rip), %rcx      # 0xe5a8
movss (%rcx,%rax,4), %xmm0
movss %xmm0, 0x30(%rbx)
xorps %xmm0, %xmm0
cvtss2sd 0x30(%rbx), %xmm0
mulsd 0x636f(%rip), %xmm0     # 0xe5b0
divsd 0x6357(%rip), %xmm0     # 0xe5a0
xorps %xmm1, %xmm1
cvtsd2ss %xmm0, %xmm1
movss 0x2c(%rbx), %xmm0
mulss %xmm1, %xmm1
mulss %xmm0, %xmm0
addss %xmm1, %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jb 0x826f
sqrtss %xmm0, %xmm0
jmp 0x8274
callq 0x45e0
ucomiss 0x5d89(%rip), %xmm0     # 0xe004
jbe 0x82a1
movss 0x5d7f(%rip), %xmm1     # 0xe004
divss %xmm0, %xmm1
movss 0x2c(%rbx), %xmm0
mulss %xmm1, %xmm0
movss %xmm0, 0x2c(%rbx)
mulss 0x30(%rbx), %xmm1
movss %xmm1, 0x30(%rbx)
cmpl $0x0, 0xc0e4(%rip)      # 0x1438c
je 0x84bd
xorl %edi, %edi
xorl %eax, %eax
callq 0x71ba
cmpb $0x1, 0xc4d2(%rip)      # 0x14790
jne 0x82ff
leaq 0xc2c9(%rip), %rax      # 0x14590
movq (%rax), %rax
movl 0xf0(%rax), %edi
xorl %eax, %eax
callq 0x7608
leaq 0xc0a6(%rip), %rsi      # 0x14384
movl $0x1, %edi
xorl %eax, %eax
callq 0x79ae
leaq 0xc48f(%rip), %rdi      # 0x14780
movl $0x2, %esi
xorl %eax, %eax
callq 0x6e78
jmp 0x8306
movb $0x1, 0xc48a(%rip)      # 0x14790
xorps %xmm0, %xmm0
cvtss2sd 0x30(%rbx), %xmm0
divsd 0x628a(%rip), %xmm0     # 0xe5a0
mulsd 0x629a(%rip), %xmm0     # 0xe5b8
addsd 0x629a(%rip), %xmm0     # 0xe5c0
cvttsd2si %xmm0, %eax
movl %eax, 0xc054(%rip)      # 0x14384
xorps %xmm0, %xmm0
cvtss2sd 0x2c(%rbx), %xmm0
divsd 0x6270(%rip), %xmm0     # 0xe5b0
mulsd 0x6280(%rip), %xmm0     # 0xe5c8
addsd 0x6280(%rip), %xmm0     # 0xe5d0
leaq 0xc02d(%rip), %rsi      # 0x14384
cvttsd2si %xmm0, %eax
movl %eax, 0xc027(%rip)      # 0x14388
movl $0x1, %edi
xorl %eax, %eax
callq 0x7909
xorps %xmm0, %xmm0
cvtss2sd 0x30(%rbx), %xmm0
divsd 0x6223(%rip), %xmm0     # 0xe5a0
xorps %xmm2, %xmm2
cvtsd2ss %xmm0, %xmm2
movss 0x2c(%rbx), %xmm3
divss 0x5c73(%rip), %xmm3     # 0xe004
movaps %xmm3, %xmm1
mulss %xmm3, %xmm1
movaps %xmm2, %xmm0
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
xorps %xmm4, %xmm4
ucomiss %xmm4, %xmm0
jb 0x83b1
sqrtss %xmm0, %xmm0
jmp 0x83cf
movss %xmm2, 0x4(%rsp)
movss %xmm3, (%rsp)
callq 0x45e0
xorps %xmm4, %xmm4
movss (%rsp), %xmm3
movss 0x4(%rsp), %xmm2
xorps %xmm1, %xmm1
cvtss2sd %xmm0, %xmm1
ucomisd 0x61fa(%rip), %xmm1     # 0xe5d8
xorps %xmm1, %xmm1
jbe 0x8411
divss %xmm0, %xmm2
movss 0x6251(%rip), %xmm1     # 0xe640
mulss %xmm1, %xmm2
divss %xmm0, %xmm3
mulss %xmm1, %xmm3
movss 0x6241(%rip), %xmm0     # 0xe644
mulss %xmm0, %xmm3
mulss %xmm0, %xmm2
movaps %xmm3, %xmm4
movaps %xmm2, %xmm1
movl $0x2300357, %eax        # imm = 0x2300357
movl %eax, 0xc36c(%rip)      # 0x14788
movl 0xbf62(%rip), %ecx      # 0x14384
addl $0xa, %ecx
xorps %xmm0, %xmm0
cvtsi2ss %ecx, %xmm0
leaq 0xc34d(%rip), %r14      # 0x14780
movl %eax, 0xc347(%rip)      # 0x14780
movaps %xmm4, %xmm2
addss %xmm0, %xmm2
cvttss2si %xmm2, %eax
movw %ax, 0xc339(%rip)       # 0x14784
subss %xmm4, %xmm0
cvttss2si %xmm0, %eax
movw %ax, 0xc332(%rip)       # 0x1478c
movl 0xbf28(%rip), %eax      # 0x14388
addl $0xa, %eax
xorps %xmm0, %xmm0
cvtsi2ss %eax, %xmm0
movaps %xmm1, %xmm2
addss %xmm0, %xmm2
cvttss2si %xmm2, %eax
movw %ax, 0xc30a(%rip)       # 0x14786
subss %xmm1, %xmm0
cvttss2si %xmm0, %eax
movw %ax, 0xc303(%rip)       # 0x1478e
leaq 0xc0fe(%rip), %rax      # 0x14590
movq (%rax), %rax
movl 0x118(%rax), %edi
xorl %eax, %eax
callq 0x7608
movq %r14, %rdi
movl $0x2, %esi
xorl %eax, %eax
callq 0x6e78
movl $0x1, %edi
xorl %eax, %eax
callq 0x71ba
xorl %eax, %eax
cmpl $0x0, 0xbec6(%rip)      # 0x1438c
sete %al
movl %eax, 0xbebd(%rip)      # 0x1438c
movss 0x30(%rbx), %xmm0
xorps 0x5b45(%rip), %xmm0     # 0xe020
movss %xmm0, 0x30(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r14
retq