import java.io.*;
import java.nio.*;
import java.nio.charset.*;
import java.awt.*;
import java.awt.event.*;
import javax.media.opengl.*;
import com.sun.opengl.util.*; // GLUT
import java.text.NumberFormat;

public class Font {

  private final int asciiOffset = 32;
  private int fontOffset;

  public Font() {}

  public void init( GL gl ) 
    {
      // Init byte buffers with letters.
      for (int i = 0; i < rasters.length; i++) {
	buf[i] = ByteBuffer.allocateDirect( rasters[i].length );
	buf[i].put( rasters[i] );
	buf[i].rewind();
      }
      // An other font with just the letter F.
      bufF = ByteBuffer.allocateDirect( rasterF.length );
      bufF.put( rasterF );
      bufF.rewind();

    // OpenGL init.
    gl.glShadeModel(GL.GL_FLAT);
    makeRasterFont(gl); // Init display lists.
  }

  private void makeRasterFont(GL gl) 
    {
      gl.glPixelStorei(GL.GL_UNPACK_ALIGNMENT, 1);

      fontOffset = gl.glGenLists(128);
      if( fontOffset == 0 ) {
	System.out.println("GenList Error");
      } else {
	//System.out.println("GenList listoffset: "+fontOffset);//ddd
	for (int i = 0; i < rasters.length; i++) 
	{
	  // We start the lists at ASCII Space=20
	  gl.glNewList( fontOffset + asciiOffset + i , GL.GL_COMPILE); {
	    gl.glBitmap( 8, 13, 0.0f, 2.0f, 10.0f, 0.0f, buf[i] );
	  } gl.glEndList();
	}
      }
    }

  public void printString( GL gl, String s ) 
    {
      // Charset charset = Charset.forName("iso-latin-1");
      // System.out.println("charset.name():"+charset.name() );
      // ByteBuffer strbufTmp = charset.encode( s );

      // Copy the string as bytes into a buffer.
      // These bytes are used to select the 
      // displaylists to call for each character.
      ByteBuffer strbuf = ByteBuffer.allocateDirect( s.length() );
      for( int i = 0; i < strbuf.capacity(); i++ ) {
	strbuf.put( (byte)s.charAt(i) ); }
      
      gl.glPushAttrib(GL.GL_LIST_BIT);
      gl.glListBase(fontOffset);
      gl.glCallLists( strbuf.capacity(),//s.length(), 
		    GL.GL_UNSIGNED_BYTE, strbuf );
      gl.glPopAttrib();
    }

  public void draw( GL gl ) 
    {
      drawFFF( gl );	

      drawFont( gl );

      gl.glWindowPos2i(20, 250);
      printString( gl, "The quick brown fox jumps" );
      gl.glWindowPos2i(20, 220);
      printString(gl, "over a lazy dog.");

      gl.glColor3f(1f, 1f, 1f);
      //gl.glRasterPos2i(20, 20);
      gl.glWindowPos2i(20, 20);
      printString( gl, new String("This is it.") );
    }


  public void drawFontWithGLUT( GL gl, GLUT glut ) 
    {
      // Fomat numbers with Java.
      NumberFormat format = NumberFormat.getNumberInstance();
      format.setMinimumFractionDigits(2);
      format.setMaximumFractionDigits(2);

      // Printing fonts, letters and numbers is much simpler with GLUT.
      // We do not have to use our own bitmap for the font.
      gl.glWindowPos2i( 20, 20 );
      glut.glutBitmapString( 
	GLUT.BITMAP_TIMES_ROMAN_24, 
	"OpenGL Text with GLUT - " + 
	format.format( 17.13 ) );
    }


  public void drawStringWithGLUTfont( 
    GL gl, GLUT glut, int xPos, int yPos, 
    String s , int font) 
    {
      gl.glWindowPos2i( xPos, yPos );
      glut.glutBitmapString( font, s );
    }

  public void drawFont( GL gl ) 
    {
    gl.glColor3f( 1f, 1f, 1f );
    gl.glWindowPos2i(10, 120);
    for (int i = 0; i < rasters.length; i++) {
      gl.glBitmap( 8, 13, 0.0f, 2.0f, 10.0f, 0.0f, buf[i] );      
      // Wrap.
      float pos[] = new float[4];
      gl.glGetFloatv( GL.GL_CURRENT_RASTER_POSITION, pos, 0 );
      //System.out.println("x"+pos[0]+"y"+pos[1]+"z"+pos[2] );
      if( (int)pos[0] > 260 )
      {
	gl.glWindowPos2i(10, (int)pos[1]-25);
      }
    }
  }


  private void drawFFF(GL gl) 
    {
      gl.glColor3f( 1f, 1f, 1f ); // white
      gl.glWindowPos2i(160, 160);
      gl.glBitmap(10, 12, 0.0f, 0.0f, 12.0f, 0.0f, bufF );
      gl.glColor3f( 1f, 0f, 0f );  // red
      gl.glWindowPos2i(180, 160);
      gl.glBitmap(10, 12, 0.0f, 0.0f, 12.0f, 0.0f, bufF );
      gl.glColor3f( 0f, 1f, 0f ); // green
      gl.glWindowPos2i(200, 160);
      gl.glBitmap(10, 12, 0.0f, 0.0f, 12.0f, 0.0f, bufF );
      gl.glColor3f( 0f, 0f, 1f ); // blue
      gl.glWindowPos2i(220, 160);
      gl.glBitmap(10, 12, 0.0f, 0.0f, 12.0f, 0.0f, bufF );
    }


  /////////////  Data //////////////////////////////////

  // Bitmaps for all letters of one font 
  // starting with space.
  private byte rasters [][] = {
    {(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00},
    {(byte)0x00, (byte)0x00, (byte)0x18, (byte)0x18, (byte)0x00, (byte)0x00, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18}, 
    {(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x36, (byte)0x36, (byte)0x36, (byte)0x36}, 
    {(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x66, (byte)0x66, (byte)0xff, (byte)0x66, (byte)0x66, (byte)0xff, (byte)0x66, (byte)0x66, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x18, (byte)0x7e, (byte)0xff, (byte)0x1b, (byte)0x1f, (byte)0x7e, (byte)0xf8, (byte)0xd8, (byte)0xff, (byte)0x7e, (byte)0x18}, 
    {(byte)0x00, (byte)0x00, (byte)0x0e, (byte)0x1b, (byte)0xdb, (byte)0x6e, (byte)0x30, (byte)0x18, (byte)0x0c, (byte)0x76, (byte)0xdb, (byte)0xd8, (byte)0x70}, 
    {(byte)0x00, (byte)0x00, (byte)0x7f, (byte)0xc6, (byte)0xcf, (byte)0xd8, (byte)0x70, (byte)0x70, (byte)0xd8, (byte)0xcc, (byte)0xcc, (byte)0x6c, (byte)0x38}, 
    {(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x18, (byte)0x1c, (byte)0x0c, (byte)0x0e}, 
    {(byte)0x00, (byte)0x00, (byte)0x0c, (byte)0x18, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x18, (byte)0x0c}, 
    {(byte)0x00, (byte)0x00, (byte)0x30, (byte)0x18, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x18, (byte)0x30}, 
    {(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x99, (byte)0x5a, (byte)0x3c, (byte)0xff, (byte)0x3c, (byte)0x5a, (byte)0x99, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0xff, (byte)0xff, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x30, (byte)0x18, (byte)0x1c, (byte)0x1c, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xff, (byte)0xff, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x38, (byte)0x38, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x60, (byte)0x60, (byte)0x30, (byte)0x30, (byte)0x18, (byte)0x18, (byte)0x0c, (byte)0x0c, (byte)0x06, (byte)0x06, (byte)0x03, (byte)0x03}, 
    {(byte)0x00, (byte)0x00, (byte)0x3c, (byte)0x66, (byte)0xc3, (byte)0xe3, (byte)0xf3, (byte)0xdb, (byte)0xcf, (byte)0xc7, (byte)0xc3, (byte)0x66, (byte)0x3c}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x78, (byte)0x38, (byte)0x18}, 
    {(byte)0x00, (byte)0x00, (byte)0xff, (byte)0xc0, (byte)0xc0, (byte)0x60, (byte)0x30, (byte)0x18, (byte)0x0c, (byte)0x06, (byte)0x03, (byte)0xe7, (byte)0x7e}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0xe7, (byte)0x03, (byte)0x03, (byte)0x07, (byte)0x7e, (byte)0x07, (byte)0x03, (byte)0x03, (byte)0xe7, (byte)0x7e}, 
    {(byte)0x00, (byte)0x00, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0xff, (byte)0xcc, (byte)0x6c, (byte)0x3c, (byte)0x1c, (byte)0x0c}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0xe7, (byte)0x03, (byte)0x03, (byte)0x07, (byte)0xfe, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xff}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0xe7, (byte)0xc3, (byte)0xc3, (byte)0xc7, (byte)0xfe, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xe7, (byte)0x7e}, 
    {(byte)0x00, (byte)0x00, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x18, (byte)0x0c, (byte)0x06, (byte)0x03, (byte)0x03, (byte)0x03, (byte)0xff}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0xe7, (byte)0xc3, (byte)0xc3, (byte)0xe7, (byte)0x7e, (byte)0xe7, (byte)0xc3, (byte)0xc3, (byte)0xe7, (byte)0x7e}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0xe7, (byte)0x03, (byte)0x03, (byte)0x03, (byte)0x7f, (byte)0xe7, (byte)0xc3, (byte)0xc3, (byte)0xe7, (byte)0x7e}, 
    {(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x38, (byte)0x38, (byte)0x00, (byte)0x00, (byte)0x38, (byte)0x38, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x30, (byte)0x18, (byte)0x1c, (byte)0x1c, (byte)0x00, (byte)0x00, (byte)0x1c, (byte)0x1c, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x06, (byte)0x0c, (byte)0x18, (byte)0x30, (byte)0x60, (byte)0xc0, (byte)0x60, (byte)0x30, (byte)0x18, (byte)0x0c, (byte)0x06}, 
    {(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xff, (byte)0xff, (byte)0x00, (byte)0xff, (byte)0xff, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x60, (byte)0x30, (byte)0x18, (byte)0x0c, (byte)0x06, (byte)0x03, (byte)0x06, (byte)0x0c, (byte)0x18, (byte)0x30, (byte)0x60}, 
    {(byte)0x00, (byte)0x00, (byte)0x18, (byte)0x00, (byte)0x00, (byte)0x18, (byte)0x18, (byte)0x0c, (byte)0x06, (byte)0x03, (byte)0xc3, (byte)0xc3, (byte)0x7e}, 
    {(byte)0x00, (byte)0x00, (byte)0x3f, (byte)0x60, (byte)0xcf, (byte)0xdb, (byte)0xd3, (byte)0xdd, (byte)0xc3, (byte)0x7e, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xff, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0x66, (byte)0x3c, (byte)0x18}, 
    {(byte)0x00, (byte)0x00, (byte)0xfe, (byte)0xc7, (byte)0xc3, (byte)0xc3, (byte)0xc7, (byte)0xfe, (byte)0xc7, (byte)0xc3, (byte)0xc3, (byte)0xc7, (byte)0xfe}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0xe7, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xe7, (byte)0x7e}, 
    {(byte)0x00, (byte)0x00, (byte)0xfc, (byte)0xce, (byte)0xc7, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc7, (byte)0xce, (byte)0xfc}, 
    {(byte)0x00, (byte)0x00, (byte)0xff, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xfc, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xff}, 
    {(byte)0x00, (byte)0x00, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xfc, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xff}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0xe7, (byte)0xc3, (byte)0xc3, (byte)0xcf, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xe7, (byte)0x7e}, 
    {(byte)0x00, (byte)0x00, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xff, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x7e}, 
    {(byte)0x00, (byte)0x00, (byte)0x7c, (byte)0xee, (byte)0xc6, (byte)0x06, (byte)0x06, (byte)0x06, (byte)0x06, (byte)0x06, (byte)0x06, (byte)0x06, (byte)0x06}, 
    {(byte)0x00, (byte)0x00, (byte)0xc3, (byte)0xc6, (byte)0xcc, (byte)0xd8, (byte)0xf0, (byte)0xe0, (byte)0xf0, (byte)0xd8, (byte)0xcc, (byte)0xc6, (byte)0xc3}, 
    {(byte)0x00, (byte)0x00, (byte)0xff, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0}, 
    {(byte)0x00, (byte)0x00, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xdb, (byte)0xff, (byte)0xff, (byte)0xe7, (byte)0xc3}, 
    {(byte)0x00, (byte)0x00, (byte)0xc7, (byte)0xc7, (byte)0xcf, (byte)0xcf, (byte)0xdf, (byte)0xdb, (byte)0xfb, (byte)0xf3, (byte)0xf3, (byte)0xe3, (byte)0xe3}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0xe7, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xe7, (byte)0x7e}, 
    {(byte)0x00, (byte)0x00, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xfe, (byte)0xc7, (byte)0xc3, (byte)0xc3, (byte)0xc7, (byte)0xfe}, 
    {(byte)0x00, (byte)0x00, (byte)0x3f, (byte)0x6e, (byte)0xdf, (byte)0xdb, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0x66, (byte)0x3c}, 
    {(byte)0x00, (byte)0x00, (byte)0xc3, (byte)0xc6, (byte)0xcc, (byte)0xd8, (byte)0xf0, (byte)0xfe, (byte)0xc7, (byte)0xc3, (byte)0xc3, (byte)0xc7, (byte)0xfe}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0xe7, (byte)0x03, (byte)0x03, (byte)0x07, (byte)0x7e, (byte)0xe0, (byte)0xc0, (byte)0xc0, (byte)0xe7, (byte)0x7e}, 
    {(byte)0x00, (byte)0x00, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0xff}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0xe7, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3}, 
    {(byte)0x00, (byte)0x00, (byte)0x18, (byte)0x3c, (byte)0x3c, (byte)0x66, (byte)0x66, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3}, 
    {(byte)0x00, (byte)0x00, (byte)0xc3, (byte)0xe7, (byte)0xff, (byte)0xff, (byte)0xdb, (byte)0xdb, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3}, 
    {(byte)0x00, (byte)0x00, (byte)0xc3, (byte)0x66, (byte)0x66, (byte)0x3c, (byte)0x3c, (byte)0x18, (byte)0x3c, (byte)0x3c, (byte)0x66, (byte)0x66, (byte)0xc3}, 
    {(byte)0x00, (byte)0x00, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x3c, (byte)0x3c, (byte)0x66, (byte)0x66, (byte)0xc3}, 
    {(byte)0x00, (byte)0x00, (byte)0xff, (byte)0xc0, (byte)0xc0, (byte)0x60, (byte)0x30, (byte)0x7e, (byte)0x0c, (byte)0x06, (byte)0x03, (byte)0x03, (byte)0xff}, 
    {(byte)0x00, (byte)0x00, (byte)0x3c, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x3c}, 
    {(byte)0x00, (byte)0x03, (byte)0x03, (byte)0x06, (byte)0x06, (byte)0x0c, (byte)0x0c, (byte)0x18, (byte)0x18, (byte)0x30, (byte)0x30, (byte)0x60, (byte)0x60}, 
    {(byte)0x00, (byte)0x00, (byte)0x3c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x3c}, 
    {(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xc3, (byte)0x66, (byte)0x3c, (byte)0x18}, 
    {(byte)0xff, (byte)0xff, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x18, (byte)0x38, (byte)0x30, (byte)0x70}, 
    {(byte)0x00, (byte)0x00, (byte)0x7f, (byte)0xc3, (byte)0xc3, (byte)0x7f, (byte)0x03, (byte)0xc3, (byte)0x7e, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0xfe, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xfe, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0xc3, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc3, (byte)0x7e, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x7f, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0x7f, (byte)0x03, (byte)0x03, (byte)0x03, (byte)0x03, (byte)0x03}, 
    {(byte)0x00, (byte)0x00, (byte)0x7f, (byte)0xc0, (byte)0xc0, (byte)0xfe, (byte)0xc3, (byte)0xc3, (byte)0x7e, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0xfc, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x33, (byte)0x1e}, 
    {(byte)0x7e, (byte)0xc3, (byte)0x03, (byte)0x03, (byte)0x7f, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0x7e, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xfe, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0}, 
    {(byte)0x00, (byte)0x00, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x00, (byte)0x00, (byte)0x18, (byte)0x00}, 
    {(byte)0x38, (byte)0x6c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x0c, (byte)0x00, (byte)0x00, (byte)0x0c, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0xc6, (byte)0xcc, (byte)0xf8, (byte)0xf0, (byte)0xd8, (byte)0xcc, (byte)0xc6, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x78}, 
    {(byte)0x00, (byte)0x00, (byte)0xdb, (byte)0xdb, (byte)0xdb, (byte)0xdb, (byte)0xdb, (byte)0xdb, (byte)0xfe, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0xc6, (byte)0xc6, (byte)0xc6, (byte)0xc6, (byte)0xc6, (byte)0xc6, (byte)0xfc, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x7c, (byte)0xc6, (byte)0xc6, (byte)0xc6, (byte)0xc6, (byte)0xc6, (byte)0x7c, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xfe, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xfe, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x03, (byte)0x03, (byte)0x03, (byte)0x7f, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0x7f, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xc0, (byte)0xe0, (byte)0xfe, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0xfe, (byte)0x03, (byte)0x03, (byte)0x7e, (byte)0xc0, (byte)0xc0, (byte)0x7f, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x1c, (byte)0x36, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0xfc, (byte)0x30, (byte)0x30, (byte)0x30, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x7e, (byte)0xc6, (byte)0xc6, (byte)0xc6, (byte)0xc6, (byte)0xc6, (byte)0xc6, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x18, (byte)0x3c, (byte)0x3c, (byte)0x66, (byte)0x66, (byte)0xc3, (byte)0xc3, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0xc3, (byte)0xe7, (byte)0xff, (byte)0xdb, (byte)0xc3, (byte)0xc3, (byte)0xc3, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0xc3, (byte)0x66, (byte)0x3c, (byte)0x18, (byte)0x3c, (byte)0x66, (byte)0xc3, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0xc0, (byte)0x60, (byte)0x60, (byte)0x30, (byte)0x18, (byte)0x3c, (byte)0x66, (byte)0x66, (byte)0xc3, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0xff, (byte)0x60, (byte)0x30, (byte)0x18, (byte)0x0c, (byte)0x06, (byte)0xff, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 
    {(byte)0x00, (byte)0x00, (byte)0x0f, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x38, (byte)0xf0, (byte)0x38, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x0f}, 
    {(byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x18}, 
    {(byte)0x00, (byte)0x00, (byte)0xf0, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0x1c, (byte)0x0f, (byte)0x1c, (byte)0x18, (byte)0x18, (byte)0x18, (byte)0xf0},
    {(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x06, (byte)0x8f, (byte)0xf1, (byte)0x60, (byte)0x00, (byte)0x00, (byte)0x00},
  };


  // Bitmap for the letter F.
  private byte rasterF[] = 
  { 
    (byte) 0xc0, (byte) 0x00, (byte) 0xc0, (byte) 0x00, (byte) 0xc0,
    (byte) 0x00, (byte) 0xc0, (byte) 0x00, (byte) 0xc0, (byte) 0x00,
    (byte) 0xff, (byte) 0x00, (byte) 0xff, (byte) 0x00, (byte) 0xc0,
    (byte) 0x00, (byte) 0xc0, (byte) 0x00, (byte) 0xc0, (byte) 0x00,
    (byte) 0xff, (byte) 0xc0, (byte) 0xff, (byte) 0xc0 
  };

  // Buffers for all font-bitmap byte arrays.
  // The glBitmap function is the current jogl version (1.1.1)
  // requires a byte buffer not an array.
  ByteBuffer buf[] = new ByteBuffer[rasters.length];
  ByteBuffer bufF;


}

