// File: tomfunkhouser[P]gaps/apps/prpview/prpview.cpp
// Function: GLUTKeyboard(unsigned char, int, int)
void GLUTKeyboard(unsigned char key, int x, int y)
{
  // Process keyboard button event 
  switch (key) {
  case 'B':
  case 'b':
    show_backfacing = !show_backfacing;
    break;

  case 'F':
  case 'f':
    show_faces = !show_faces;
    break;

  case 'G':
    show_global_maxima = !show_global_maxima;
    break;

  case 'g':
    show_global_minima = !show_global_minima;
    break;

  case 'I':
  case 'i':
    show_isocontours = !show_isocontours;
    break;

  case 'L':
    show_local_maxima = !show_local_maxima;
    break;

  case 'l':
    show_local_minima = !show_local_minima;
    break;

  case 'N':
  case 'n':
    show_values = !show_values;
    break;

  case 'P':
  case 'p':
    show_points = !show_points;
    break;

  case 'S':
  case 's':
    show_statistics = !show_statistics;
    break;

  case 'T':
  case 't':
    show_text = !show_text;
    break;

  case 'V':
  case 'v':
    show_vertices = !show_vertices;
    break;

  case 27: // ESCAPE
    GLUTStop();
    break;
  }

  // Remember mouse position 
  GLUTmouse[0] = x;
  GLUTmouse[1] = GLUTwindow_height - y;

  // Remember modifiers 
  GLUTmodifiers = glutGetModifiers();

  // Redraw
  glutPostRedisplay();  
}

// Assembly:
subq $0x18, %rsp
movb %dil, %al
movb %al, 0x17(%rsp)
movl %esi, 0x10(%rsp)
movl %edx, 0xc(%rsp)
movzbl 0x17(%rsp), %eax
addl $-0x1b, %eax
movl %eax, %ecx
movq %rcx, (%rsp)
subl $0x5b, %eax
ja 0x29144
movq (%rsp), %rax
leaq 0x16d0c7(%rip), %rcx    # 0x1960bc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
cmpl $0x0, 0x1dbc77(%rip)    # 0x204c7c
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, 0x1dbc67(%rip)    # 0x204c7c
jmp 0x29144
cmpl $0x0, 0x1d5a8f(%rip)    # 0x1feab0
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, 0x1d5a7f(%rip)    # 0x1feab0
jmp 0x29144
cmpl $0x0, 0x1dbc67(%rip)    # 0x204ca4
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, 0x1dbc57(%rip)    # 0x204ca4
jmp 0x29144
cmpl $0x0, 0x1dbc4f(%rip)    # 0x204ca8
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, 0x1dbc3f(%rip)    # 0x204ca8
jmp 0x29144
cmpl $0x0, 0x1dbc2b(%rip)    # 0x204ca0
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, 0x1dbc1b(%rip)    # 0x204ca0
jmp 0x29144
cmpl $0x0, 0x1dbc1b(%rip)    # 0x204cac
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, 0x1dbc0b(%rip)    # 0x204cac
jmp 0x29144
cmpl $0x0, 0x1dbc03(%rip)    # 0x204cb0
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, 0x1dbbf3(%rip)    # 0x204cb0
jmp 0x29144
cmpl $0x0, 0x1d59eb(%rip)    # 0x1feab4
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, 0x1d59db(%rip)    # 0x1feab4
jmp 0x29144
cmpl $0x0, 0x1dbbb6(%rip)    # 0x204c98
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, 0x1dbba6(%rip)    # 0x204c98
jmp 0x29144
cmpl $0x0, 0x1d59c1(%rip)    # 0x1feabc
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, 0x1d59b1(%rip)    # 0x1feabc
jmp 0x29144
cmpl $0x0, 0x1dbbac(%rip)    # 0x204cc0
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, 0x1dbb9c(%rip)    # 0x204cc0
jmp 0x29144
cmpl $0x0, 0x1dbb5b(%rip)    # 0x204c88
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, 0x1dbb4b(%rip)    # 0x204c88
jmp 0x29144
callq 0x26ec0
movl 0x10(%rsp), %eax
movl %eax, 0x1dbb8a(%rip)    # 0x204cd8
movl 0x1d596c(%rip), %eax    # 0x1feac0
subl 0xc(%rsp), %eax
movl %eax, 0x1dbb7e(%rip)    # 0x204cdc
callq 0x18a2e0
movl %eax, 0x1dbb9f(%rip)    # 0x204d08
callq 0x1820b0
addq $0x18, %rsp
retq
nopw %cs:(%rax,%rax)