// File: /workspace/github_c_makefile_star2_O0/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 %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movq %rdx, -0x18(%rbp)
cmpl $0x0, -0xc(%rbp)
je 0xab82
movl $0x0, -0x1c(%rbp)
jmp 0xab89
movl $0x1, -0x1c(%rbp)
movq -0x8(%rbp), %rax
cvtsi2sdl 0x4(%rax), %xmm0
movsd 0x9ae6(%rip), %xmm1     # 0x14680
subsd %xmm1, %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movslq -0x1c(%rbp), %rcx
leaq 0xe904(%rip), %rax      # 0x194c4
movss (%rax,%rcx,4), %xmm1
cvtss2sd %xmm1, %xmm1
mulsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, 0x2c(%rax)
movq -0x8(%rbp), %rax
cvtsi2sdl (%rax), %xmm0
movsd 0x9a8e(%rip), %xmm1     # 0x14678
subsd %xmm1, %xmm0
movslq -0x1c(%rbp), %rcx
leaq 0xe8d3(%rip), %rax      # 0x194cc
movss (%rax,%rcx,4), %xmm1
cvtss2sd %xmm1, %xmm1
mulsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, 0x30(%rax)
movq -0x18(%rbp), %rax
movss 0x2c(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movaps 0x9459(%rip), %xmm1     # 0x14080
pand %xmm1, %xmm0
movsd 0x93d5(%rip), %xmm1     # 0x14008
ucomisd %xmm1, %xmm0
jbe 0xac7a
movq -0x18(%rbp), %rax
movss 0x2c(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x9402(%rip), %xmm3     # 0x14050
movsd 0x93b2(%rip), %xmm2     # 0x14008
xorps %xmm1, %xmm1
cmpltsd %xmm1, %xmm0
movaps %xmm0, %xmm1
andpd %xmm3, %xmm1
andnpd %xmm2, %xmm0
orpd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, 0x2c(%rax)
movq -0x18(%rbp), %rax
movss 0x30(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movaps 0x93f2(%rip), %xmm1     # 0x14080
pand %xmm1, %xmm0
movsd 0x99ee(%rip), %xmm1     # 0x14688
ucomisd %xmm1, %xmm0
jbe 0xace1
movq -0x18(%rbp), %rax
movss 0x30(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x99db(%rip), %xmm3     # 0x14690
movsd 0x99cb(%rip), %xmm2     # 0x14688
xorps %xmm1, %xmm1
cmpltsd %xmm1, %xmm0
movaps %xmm0, %xmm1
andpd %xmm3, %xmm1
andnpd %xmm2, %xmm0
orpd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, 0x30(%rax)
movq -0x18(%rbp), %rax
movss 0x30(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x9312(%rip), %xmm1     # 0x14008
mulsd %xmm1, %xmm0
movsd 0x9986(%rip), %xmm1     # 0x14688
divsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x20(%rbp)
movq -0x18(%rbp), %rax
movss 0x2c(%rax), %xmm0
movq -0x18(%rbp), %rax
movss 0x2c(%rax), %xmm2
movss -0x20(%rbp), %xmm1
mulss -0x20(%rbp), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
callq 0x5560
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x24(%rbp)
movss -0x24(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x92b2(%rip), %xmm1     # 0x14008
ucomisd %xmm1, %xmm0
jbe 0xada0
movss -0x24(%rbp), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x929b(%rip), %xmm0     # 0x14008
divsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x28(%rbp)
movss -0x28(%rbp), %xmm0
movq -0x18(%rbp), %rax
mulss 0x2c(%rax), %xmm0
movss %xmm0, 0x2c(%rax)
movss -0x28(%rbp), %xmm0
movq -0x18(%rbp), %rax
mulss 0x30(%rax), %xmm0
movss %xmm0, 0x30(%rax)
cmpl $0x0, 0xe739(%rip)      # 0x194e0
je 0xb070
xorl %edi, %edi
movb $0x0, %al
callq 0x98e0
cmpl $0x0, 0xe71f(%rip)      # 0x194dc
jne 0xadfe
leaq 0xeb9a(%rip), %rax      # 0x19960
movq (%rax), %rax
movl 0xf0(%rax), %edi
movb $0x0, %al
callq 0x9e90
movl $0x1, %edi
leaq 0xe6f2(%rip), %rsi      # 0x194d4
movb $0x0, %al
callq 0xa290
leaq 0xedf0(%rip), %rdi      # 0x19be0
movl $0x2, %esi
movb $0x0, %al
callq 0x95e0
jmp 0xae08
movl $0x0, 0xe6d4(%rip)      # 0x194dc
movq -0x18(%rbp), %rax
movss 0x30(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x986b(%rip), %xmm1     # 0x14688
divsd %xmm1, %xmm0
movsd 0x9887(%rip), %xmm1     # 0x146b0
mulsd %xmm1, %xmm0
movsd 0x9883(%rip), %xmm1     # 0x146b8
addsd %xmm1, %xmm0
cvttsd2si %xmm0, %eax
movl %eax, 0xe691(%rip)      # 0x194d4
movq -0x18(%rbp), %rax
movss 0x2c(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x91b0(%rip), %xmm1     # 0x14008
divsd %xmm1, %xmm0
movsd 0x983c(%rip), %xmm1     # 0x146a0
mulsd %xmm1, %xmm0
movsd 0x9838(%rip), %xmm1     # 0x146a8
addsd %xmm1, %xmm0
cvttsd2si %xmm0, %eax
movl %eax, 0xe65a(%rip)      # 0x194d8
movl $0x1, %edi
leaq 0xe64a(%rip), %rsi      # 0x194d4
movb $0x0, %al
callq 0xa1d0
movq -0x18(%rbp), %rax
movss 0x30(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x97e2(%rip), %xmm1     # 0x14688
divsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x2c(%rbp)
movq -0x18(%rbp), %rax
movss 0x2c(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x9140(%rip), %xmm1     # 0x14008
divsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x30(%rbp)
movss -0x2c(%rbp), %xmm0
movss -0x2c(%rbp), %xmm2
movss -0x30(%rbp), %xmm1
mulss -0x30(%rbp), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
callq 0x5560
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x34(%rbp)
movss -0x34(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x9784(%rip), %xmm1     # 0x14698
ucomisd %xmm1, %xmm0
jbe 0xaf62
movss -0x2c(%rbp), %xmm0
divss -0x34(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x9790(%rip), %xmm1     # 0x146c0
mulsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x3c(%rbp)
movss -0x30(%rbp), %xmm0
divss -0x34(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x976d(%rip), %xmm1     # 0x146c0
mulsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x38(%rbp)
jmp 0xaf72
xorps %xmm0, %xmm0
movss %xmm0, -0x3c(%rbp)
xorps %xmm0, %xmm0
movss %xmm0, -0x38(%rbp)
movw $0x357, 0xec6d(%rip)    # imm = 0x357
movw $0x357, 0xec5c(%rip)    # imm = 0x357
movl 0xe54a(%rip), %eax      # 0x194d4
addl $0xa, %eax
cvtsi2ss %eax, %xmm0
movss -0x38(%rbp), %xmm1
movss 0x975a(%rip), %xmm3     # 0x146f8
mulss %xmm3, %xmm1
addss %xmm1, %xmm0
cvttss2si %xmm0, %eax
movw %ax, 0xec33(%rip)       # 0x19be4
movl 0xe51d(%rip), %eax      # 0x194d4
addl $0xa, %eax
cvtsi2ss %eax, %xmm0
movss -0x38(%rbp), %xmm1
movss 0x9731(%rip), %xmm2     # 0x146fc
mulss %xmm2, %xmm1
addss %xmm1, %xmm0
cvttss2si %xmm0, %eax
movw %ax, 0xec0e(%rip)       # 0x19bec
movw $0x230, 0xec03(%rip)    # imm = 0x230
movw $0x230, 0xebf2(%rip)    # imm = 0x230
movl 0xe4e2(%rip), %eax      # 0x194d8
addl $0xa, %eax
cvtsi2ss %eax, %xmm0
movss -0x3c(%rbp), %xmm1
mulss %xmm3, %xmm1
addss %xmm1, %xmm0
cvttss2si %xmm0, %eax
movw %ax, 0xebd1(%rip)       # 0x19be6
movl 0xe4bd(%rip), %eax      # 0x194d8
addl $0xa, %eax
cvtsi2ss %eax, %xmm0
movss -0x3c(%rbp), %xmm1
mulss %xmm2, %xmm1
addss %xmm1, %xmm0
cvttss2si %xmm0, %eax
movw %ax, 0xebb4(%rip)       # 0x19bee
leaq 0xe91f(%rip), %rax      # 0x19960
movq (%rax), %rax
movl 0x118(%rax), %edi
movb $0x0, %al
callq 0x9e90
leaq 0xeb88(%rip), %rdi      # 0x19be0
movl $0x2, %esi
movb $0x0, %al
callq 0x95e0
movl $0x1, %edi
movb $0x0, %al
callq 0x98e0
cmpl $0x0, 0xe469(%rip)      # 0x194e0
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, 0xe459(%rip)      # 0x194e0
movq -0x18(%rbp), %rax
movss 0x30(%rax), %xmm0
movd %xmm0, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, 0x30(%rax)
addq $0x40, %rsp
popq %rbp
retq
nopl (%rax)