
#include "image.h"


//---- DATA ------------------------------------------------------------------//

int image_font[ 5*(128-32) ] =
{
  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),

  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),

  IMAGE_FONTLINE( 0,1,0,1,0 ),
  IMAGE_FONTLINE( 0,1,0,1,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),

  IMAGE_FONTLINE( 0,1,0,1,0 ),
  IMAGE_FONTLINE( 1,1,1,1,1 ),
  IMAGE_FONTLINE( 0,1,0,1,0 ),
  IMAGE_FONTLINE( 1,1,1,1,1 ),
  IMAGE_FONTLINE( 0,1,0,1,0 ),

  IMAGE_FONTLINE( 0,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,1,0,0 ),
  IMAGE_FONTLINE( 0,1,1,1,0 ),
  IMAGE_FONTLINE( 0,0,1,0,1 ),
  IMAGE_FONTLINE( 0,1,1,1,0 ),

  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 0,0,0,1,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,1,0,0,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),

  IMAGE_FONTLINE( 0,1,1,0,0 ),
  IMAGE_FONTLINE( 1,0,1,0,0 ),
  IMAGE_FONTLINE( 0,1,1,0,1 ),
  IMAGE_FONTLINE( 1,0,0,1,0 ),
  IMAGE_FONTLINE( 0,1,1,0,1 ),

  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),

  IMAGE_FONTLINE( 0,0,1,1,0 ),
  IMAGE_FONTLINE( 0,1,0,0,0 ),
  IMAGE_FONTLINE( 0,1,0,0,0 ),
  IMAGE_FONTLINE( 0,1,0,0,0 ),
  IMAGE_FONTLINE( 0,0,1,1,0 ),

  IMAGE_FONTLINE( 0,1,1,0,0 ),
  IMAGE_FONTLINE( 0,0,0,1,0 ),
  IMAGE_FONTLINE( 0,0,0,1,0 ),
  IMAGE_FONTLINE( 0,0,0,1,0 ),
  IMAGE_FONTLINE( 0,1,1,0,0 ),

  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 1,0,1,0,1 ),
  IMAGE_FONTLINE( 0,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,1,0,1 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),

  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 1,1,1,1,1 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),

  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),

  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 1,1,1,1,1 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),

  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),

  IMAGE_FONTLINE( 0,0,0,0,1 ),
  IMAGE_FONTLINE( 0,0,0,1,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,1,0,0,0 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),

  //- Numbers
  
  IMAGE_FONTLINE( 0,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,1,1 ),
  IMAGE_FONTLINE( 1,0,1,0,1 ),
  IMAGE_FONTLINE( 1,1,0,0,1 ),
  IMAGE_FONTLINE( 0,1,1,1,0 ),

  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,1,1,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,1,1,1,0 ),

  IMAGE_FONTLINE( 0,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 0,0,1,1,0 ),
  IMAGE_FONTLINE( 0,1,0,0,0 ),
  IMAGE_FONTLINE( 1,1,1,1,1 ),

  IMAGE_FONTLINE( 0,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 0,0,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 0,1,1,1,0 ),

  IMAGE_FONTLINE( 0,0,0,1,0 ),
  IMAGE_FONTLINE( 0,0,1,1,0 ),
  IMAGE_FONTLINE( 0,1,0,1,0 ),
  IMAGE_FONTLINE( 1,1,1,1,1 ),
  IMAGE_FONTLINE( 0,0,0,1,0 ),

  IMAGE_FONTLINE( 1,1,1,1,1 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),
  IMAGE_FONTLINE( 1,1,1,1,0 ),
  IMAGE_FONTLINE( 0,0,0,0,1 ),
  IMAGE_FONTLINE( 1,1,1,1,0 ),

  IMAGE_FONTLINE( 0,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),
  IMAGE_FONTLINE( 1,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 0,1,1,1,0 ),

  IMAGE_FONTLINE( 1,1,1,1,1 ),
  IMAGE_FONTLINE( 0,0,0,0,1 ),
  IMAGE_FONTLINE( 0,0,0,1,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),

  IMAGE_FONTLINE( 0,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 0,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 0,1,1,1,0 ),

  IMAGE_FONTLINE( 0,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 0,1,1,1,1 ),
  IMAGE_FONTLINE( 0,0,0,0,1 ),
  IMAGE_FONTLINE( 0,0,0,1,0 ),

  //- :;<=>?@

  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),

  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),

  IMAGE_FONTLINE( 0,0,0,1,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,1,0,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,0,1,0 ),

  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 1,1,1,1,1 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 1,1,1,1,1 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),

  IMAGE_FONTLINE( 0,1,0,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,0,1,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,1,0,0,0 ),

  IMAGE_FONTLINE( 0,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 0,0,1,1,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),

  IMAGE_FONTLINE( 0,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,1,0,1 ),
  IMAGE_FONTLINE( 1,0,1,1,1 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),
  IMAGE_FONTLINE( 0,1,1,1,0 ),

  //- Letters

  IMAGE_FONTLINE( 0,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,1,1,1,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),

  IMAGE_FONTLINE( 1,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,1,1,1,0 ),

  IMAGE_FONTLINE( 0,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 0,1,1,1,0 ),

  IMAGE_FONTLINE( 1,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,1,1,1,0 ),

  IMAGE_FONTLINE( 1,1,1,0,0 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),
  IMAGE_FONTLINE( 1,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),
  IMAGE_FONTLINE( 1,1,1,1,1 ),

  IMAGE_FONTLINE( 1,1,1,1,1 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),
  IMAGE_FONTLINE( 1,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),

  IMAGE_FONTLINE( 0,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),
  IMAGE_FONTLINE( 1,0,0,1,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 0,1,1,1,1 ),

  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,1,1,1,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),

  IMAGE_FONTLINE( 0,1,1,1,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,1,1,1,0 ),

  IMAGE_FONTLINE( 1,1,1,1,1 ),
  IMAGE_FONTLINE( 0,0,0,1,0 ),
  IMAGE_FONTLINE( 0,0,0,1,0 ),
  IMAGE_FONTLINE( 1,0,0,1,0 ),
  IMAGE_FONTLINE( 0,1,1,0,0 ),

  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,1,0 ),
  IMAGE_FONTLINE( 1,1,1,0,0 ),
  IMAGE_FONTLINE( 1,0,0,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),

  IMAGE_FONTLINE( 1,0,0,0,0 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),
  IMAGE_FONTLINE( 1,1,1,1,1 ),

  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,1,0,1,1 ),
  IMAGE_FONTLINE( 1,0,1,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),

  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,1,0,0,1 ),
  IMAGE_FONTLINE( 1,0,1,0,1 ),
  IMAGE_FONTLINE( 1,0,0,1,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),

  IMAGE_FONTLINE( 0,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 0,1,1,1,0 ),

  IMAGE_FONTLINE( 1,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),

  IMAGE_FONTLINE( 0,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,1,0 ),
  IMAGE_FONTLINE( 0,1,1,0,1 ),

  IMAGE_FONTLINE( 1,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),

  IMAGE_FONTLINE( 0,1,1,1,1 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),
  IMAGE_FONTLINE( 0,1,1,1,0 ),
  IMAGE_FONTLINE( 0,0,0,0,1 ),
  IMAGE_FONTLINE( 1,1,1,1,0 ),

  IMAGE_FONTLINE( 1,1,1,1,1 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),

  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 0,1,1,1,0 ),

  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 0,1,0,1,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),

  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,1,0,1 ),
  IMAGE_FONTLINE( 1,0,1,0,1 ),
  IMAGE_FONTLINE( 0,1,0,1,0 ),

  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 0,1,0,1,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,1,0,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),

  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 0,1,0,1,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),

  IMAGE_FONTLINE( 1,1,1,1,1 ),
  IMAGE_FONTLINE( 0,0,0,1,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,1,0,0,0 ),
  IMAGE_FONTLINE( 1,1,1,1,1 ),

  //- [\]^_`

  IMAGE_FONTLINE( 0,1,1,1,0 ),
  IMAGE_FONTLINE( 0,1,0,0,0 ),
  IMAGE_FONTLINE( 0,1,0,0,0 ),
  IMAGE_FONTLINE( 0,1,0,0,0 ),
  IMAGE_FONTLINE( 0,1,1,1,0 ),

  IMAGE_FONTLINE( 1,0,0,0,0 ),
  IMAGE_FONTLINE( 0,1,0,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,0,1,0 ),
  IMAGE_FONTLINE( 0,0,0,0,1 ),

  IMAGE_FONTLINE( 0,1,1,1,0 ),
  IMAGE_FONTLINE( 0,0,0,1,0 ),
  IMAGE_FONTLINE( 0,0,0,1,0 ),
  IMAGE_FONTLINE( 0,0,0,1,0 ),
  IMAGE_FONTLINE( 0,1,1,1,0 ),

  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,1,0,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),

  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 1,1,1,1,1 ),

  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,0,1,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),

  //- Letters

  IMAGE_FONTLINE( 0,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,1,1,1,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),

  IMAGE_FONTLINE( 1,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,1,1,1,0 ),

  IMAGE_FONTLINE( 0,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 0,1,1,1,0 ),

  IMAGE_FONTLINE( 1,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,1,1,1,0 ),

  IMAGE_FONTLINE( 1,1,1,0,0 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),
  IMAGE_FONTLINE( 1,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),
  IMAGE_FONTLINE( 1,1,1,1,1 ),

  IMAGE_FONTLINE( 1,1,1,1,1 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),
  IMAGE_FONTLINE( 1,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),

  IMAGE_FONTLINE( 0,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),
  IMAGE_FONTLINE( 1,0,0,1,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 0,1,1,1,1 ),

  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,1,1,1,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),

  IMAGE_FONTLINE( 0,1,1,1,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,1,1,1,0 ),

  IMAGE_FONTLINE( 1,1,1,1,1 ),
  IMAGE_FONTLINE( 0,0,0,1,0 ),
  IMAGE_FONTLINE( 0,0,0,1,0 ),
  IMAGE_FONTLINE( 1,0,0,1,0 ),
  IMAGE_FONTLINE( 0,1,1,0,0 ),

  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,1,0 ),
  IMAGE_FONTLINE( 1,1,1,0,0 ),
  IMAGE_FONTLINE( 1,0,0,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),

  IMAGE_FONTLINE( 1,0,0,0,0 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),
  IMAGE_FONTLINE( 1,1,1,1,1 ),

  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,1,0,1,1 ),
  IMAGE_FONTLINE( 1,0,1,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),

  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,1,0,0,1 ),
  IMAGE_FONTLINE( 1,0,1,0,1 ),
  IMAGE_FONTLINE( 1,0,0,1,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),

  IMAGE_FONTLINE( 0,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 0,1,1,1,0 ),

  IMAGE_FONTLINE( 1,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),

  IMAGE_FONTLINE( 0,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,1,0 ),
  IMAGE_FONTLINE( 0,1,1,0,1 ),

  IMAGE_FONTLINE( 1,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,1,1,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),

  IMAGE_FONTLINE( 0,1,1,1,1 ),
  IMAGE_FONTLINE( 1,0,0,0,0 ),
  IMAGE_FONTLINE( 0,1,1,1,0 ),
  IMAGE_FONTLINE( 0,0,0,0,1 ),
  IMAGE_FONTLINE( 1,1,1,1,0 ),

  IMAGE_FONTLINE( 1,1,1,1,1 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),

  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 0,1,1,1,0 ),

  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 0,1,0,1,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),

  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,1,0,1 ),
  IMAGE_FONTLINE( 1,0,1,0,1 ),
  IMAGE_FONTLINE( 0,1,0,1,0 ),

  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 0,1,0,1,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,1,0,1,0 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),

  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 0,1,0,1,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),

  IMAGE_FONTLINE( 1,1,1,1,1 ),
  IMAGE_FONTLINE( 0,0,0,1,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,1,0,0,0 ),
  IMAGE_FONTLINE( 1,1,1,1,1 ),

  //- {|}~

  IMAGE_FONTLINE( 0,0,0,1,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,1,1,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,0,1,0 ),

  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),

  IMAGE_FONTLINE( 0,1,0,0,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,0,1,1,0 ),
  IMAGE_FONTLINE( 0,0,1,0,0 ),
  IMAGE_FONTLINE( 0,1,0,0,0 ),

  IMAGE_FONTLINE( 0,0,0,0,0 ),
  IMAGE_FONTLINE( 0,1,0,0,0 ),
  IMAGE_FONTLINE( 1,0,1,0,1 ),
  IMAGE_FONTLINE( 0,0,0,1,0 ),
  IMAGE_FONTLINE( 0,0,0,0,0 ),

  IMAGE_FONTLINE( 1,1,1,1,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,0,0,0,1 ),
  IMAGE_FONTLINE( 1,1,1,1,1 )

};



//---- IMAGE CLASS -----------------------------------------------------------//

//---- Image

Image::Image( int w, int h )
{
  this->w = w;
  this->h = h;
  buf = new int[ size = w*h ];
}

//---- ~Image

Image::~Image()
{
  delete[] this->buf;
}

//---- clear

void Image::clear( int col )
{
  for( int i=0; i<size; i++ ) buf[i] = col;
}

//---- checks

void Image::checks( )
{
  int i, j;

  int *p = buf;

  for(j=0; j<h; j++) for(i=0; i<w; i++)
  {
    *p++ = (((i>>4)^(j>>4))&1) * 0x222222 + 0xDDDDDD;
  }
}

//---- setOrigin

void Image::setOrigin( float ox, float oy )
{
  this->ox = ox;
  this->oy = oy;
}

//---- fillPolygon

void Image::fillPolygon( Poly *p, int col )
{
  Scanline sl;

  //  Render each scanline

  for( int i=0; i<h; i++ )
  {
    p->getScanline( &sl, i );
    fillScanline( i, &sl, col );
  }
}

//---- fillScanline

void Image::fillScanline( int y, Scanline *sl, int col )
{
  float x1, x2;

  sl->firstPair();

  while( sl->nextPair( &x1, &x2 ) )
  {
    if( x1 < 0 ) x1 = 0;
    if( x2 > w ) x2 = w;

    for( int i=x1+0.9999; i<x2; i++ )
    {
      buf[ y*w + i ] = col;
    }
  }
}

//---- drawPolygon

void Image::drawPolygon( Poly *p, int col )
{
  Scanline sl;

  int i;

  //  Render each scanline

  for( i=0; i<h; i++ )
  {
    p->getScanline( &sl, i );
    drawScanline( i, &sl, col );
  }

  //  Render each vertical scanline

  for( i=0; i<w; i++ )
  {
    p->getVScanline( &sl, i );
    drawVScanline( i, &sl, col );
  }
}

//---- drawScanline

void Image::drawScanline( int y, Scanline *sl, int col )
{
  float x1, x2;

  sl->firstPair();

  while( sl->nextPair( &x1, &x2 ) )
  {
    if( x1 < 0 ) x1 = 0;
    if( x2 > w ) x2 = w;

    buf[ y*w + (int)x1 ] = col;
    buf[ y*w + (int)x2 ] = col;
  }
}

//---- drawVScanline

void Image::drawVScanline( int x, Scanline *sl, int col )
{
  float y1, y2;

  sl->firstPair();

  while( sl->nextPair( &y1, &y2 ) )
  {
    if( y1 < 0 ) y1 = 0;
    if( y2 > h ) y2 = h;

    buf[ ((int)y1)*w + x ] = col;
    buf[ ((int)y2)*w + x ] = col;
  }
}

//---- blendCol

int Image::blendCol( int col1, int col2, float a )
{
  if( a < 0 ) a = 0;
  if( a > 1 ) a = 1;

  float aa = 1.f-a;

  int r = ((col1>>16)&255) * aa + ((col2>>16)&255) * a;
  int g = ((col1>> 8)&255) * aa + ((col2>> 8)&255) * a;
  int b = ((col1    )&255) * aa + ((col2    )&255) * a;

  return (r<<16)+(g<<8)+b;
}

//---- fillPolygonAA

void Image::fillPolygonAA( Poly *p, int col )
{
  Scanline sl;

  //  Seperate colours

  int i;

  //  Render each scanline

  for( i=0; i<h; i++ )
  {
    p->getScanline( &sl, i );
    fillScanlineAA( i, &sl, col );
  }

  //  Render each vertical scanline

  for( i=0; i<h; i++ )
  {
    p->getVScanline( &sl, i );
    drawVScanlineAA( i, &sl, col );
  }
}

//---- fillScanlineAA

void Image::fillScanlineAA( int y, Scanline *sl, int col )
{
  float x1, x2;

  sl->firstPair();

  while( sl->nextPair( &x1, &x2 ) )
  {
    if( x1 < 0 ) x1 = 0;
    if( x2 > w-1 ) x2 = w-1;  //  TEMP! (need to deal with edge case)

    for( int i=x1+0.9999; i<x2; i++ )
    {
      buf[ y*w + i ] = col;
    }

    buf[ y*w + (int)x1 ] = blendCol( col, 0x000000, x1 - (int)x1 );
    buf[ y*w + (int)x2 ] = blendCol( 0x000000, col, x2 - (int)x2 );
  }
}

//---- drawVScanlineAA

void Image::drawVScanlineAA( int x, Scanline *sl, int col )
{
  float y1, y2;

  sl->firstPair();

  while( sl->nextPair( &y1, &y2 ) )
  {
    if( y1 < 0 ) y1 = 0;
    if( y2 > h-1 ) y2 = h-1;  //  TEMP! (need to deal with edge case)

    buf[ ((int)y1)*w + x ] = blendCol( col, 0x000000, y1 - (int)y1 );
    buf[ ((int)y2)*w + x ] = blendCol( 0x000000, col, y2 - (int)y2 );
  }
}

//---- drawText

void Image::drawText( int x, int y, char *s, int col )
{
  for( int i=0; s[i]; i++ )
  {
    drawChar( x, y, s[i], col );
    x += 6;
  }
}

//---- drawChar

void Image::drawChar( int x, int y, int c, int col )
{
  int i, j;
  int *p;

  p = buf + y*w + x;

  c -= 32;
  if( c < 0 || c > 128-32 ) c = 127;

  for( j=0; j<5; j++ )
  {
    int a = image_font[ c*5 + j ];

    for( i=0; i<5; i++ )
    {
      if( a & 1 ) *p = col;
      p++;
      a >>= 1;
    }

    p += w-5;
  }
}

//---- textWidth

int Image::textWidth( char *s )
{
  if( !s ) return 0;
  for( int i=0; s[i]; i++ );
  return i*6;
}

//---- textHeight

int Image::textHeight( char *s )
{
  return 6;
}

//---- setPixel

void Image::setPixel( int x, int y, int col )
{
  x += ox;
  y += oy;

  if( x < 0 ) return;
  if( y < 0 ) return;
  if( x >= w ) return;
  if( y >= h ) return;
  
  buf[ x + w*y ] = col;
}

//---- getPixel

int Image::getPixel( int x, int y )
{
  x += ox;
  y += oy;

  if( x < 0 ) return 0xFF00FF;
  if( y < 0 ) return 0xFF00FF;
  if( x >= w ) return 0xFF00FF;
  if( y >= h ) return 0xFF00FF;
  
  return buf[ x + w*y ];
}

