runExit();
quit = true;
    public void init(GLDrawable drawable) {      GL gl = drawable.getGL();      GLU glu = drawable.getGLU();      float cc = 0.0f;      gl.glClearColor(cc, cc, cc, 1);      gl.glColor3f(1,1,1);      gl.glEnable(GL.GL_DEPTH_TEST);      gl.glDisable(GL.GL_CULL_FACE);      try {        initExtension(gl, "GL_ARB_vertex_program");      } catch (RuntimeException e) {        runExit();        throw(e);      }      for(int i=0; i<NUM_OBJS; i++) {        gl.glNewList(i+1, GL.GL_COMPILE);        drawObject(gl, glu, i);        gl.glEndList();      }          for(int i=0; i<NUM_PROGS; i++) {        int[] vtxProgTmp = new int[1];        gl.glGenProgramsARB(1, vtxProgTmp);        programs[i] = vtxProgTmp[0];        gl.glBindProgramARB(GL.GL_VERTEX_PROGRAM_ARB, programs[i]);        gl.glProgramStringARB(GL.GL_VERTEX_PROGRAM_ARB, GL.GL_PROGRAM_FORMAT_ASCII_ARB, programTexts[i].length(), programTexts[i]);      }      gl.glProgramEnvParameter4fARB(GL.GL_VERTEX_PROGRAM_ARB, 0, 0.0f, 0.0f, 1.0f, 0.0f);   // light position/direction      gl.glProgramEnvParameter4fARB(GL.GL_VERTEX_PROGRAM_ARB, 1, 0.0f, 1.0f, 0.0f, 0.0f);   // diffuse color      gl.glProgramEnvParameter4fARB(GL.GL_VERTEX_PROGRAM_ARB, 2, 1.0f, 1.0f, 1.0f, 0.0f);   // specular color      gl.glProgramEnvParameter4fARB(GL.GL_VERTEX_PROGRAM_ARB, 3, 0.0f, 1.0f, 2.0f, 3.0f);   // smoothstep constants      // sin Taylor series constants - 1, 1/3!, 1/5!, 1/7!      gl.glProgramEnvParameter4fARB(GL.GL_VERTEX_PROGRAM_ARB, 4, 1.0f, 1.0f / (3*2), 1.0f / (5*4*3*2), 1.0f / (7*6*5*4*3*2));      gl.glProgramEnvParameter4fARB(GL.GL_VERTEX_PROGRAM_ARB, 5, 1.0f / (2.0f * SIN_PERIOD), 2.0f * SIN_PERIOD, SIN_PERIOD, SIN_PERIOD/2.0f);      // sin wave frequency, amplitude      gl.glProgramEnvParameter4fARB(GL.GL_VERTEX_PROGRAM_ARB, 6, 1.0f, 0.2f, 0.0f, 0.0f);      // phase animation      gl.glProgramEnvParameter4fARB(GL.GL_VERTEX_PROGRAM_ARB, 7, 0.0f, 0.0f, 0.0f, 0.0f);      // fisheye sphere radius      gl.glProgramEnvParameter4fARB(GL.GL_VERTEX_PROGRAM_ARB, 8, 1.0f, 0.0f, 0.0f, 0.0f);      setWindowTitle();      b['p'] = true;            drawable.addKeyListener(new KeyAdapter() {          public void keyPressed(KeyEvent e) {            dispatchKey(e.getKeyCode(), e.getKeyChar());          }        });      // Register the window with the ManipManager      ManipManager manager = ManipManager.getManipManager();      manager.registerWindow(drawable);      viewer = new ExaminerViewer(MouseButtonHelper.numMouseButtons());      viewer.setNoAltKeyMode(true);      viewer.attach(drawable, new BSphereProvider() {	  public BSphere getBoundingSphere() {	    return new BSphere(new Vec3f(0, 0, 0), 1.0f);	  }	});      viewer.setVertFOV((float) Math.toRadians(60));      viewer.setZNear(zNear);      viewer.setZFar(zFar);    }