Section Header
    + name := ABSTRACT_BITMAP;
    - comment := "Generic Bitmap.";
    - external := `
//
// Font System 1250 bytes.
//
unsigned short __index_font[96]={
0x000,0x007,0x008,0x00B,0x012,0x017,0x021,0x028,0x029,0x02C,0x02F,0x034,
0x039,0x03B,0x03F,0x040,0x044,0x049,0x04C,0x051,0x056,0x05B,0x060,0x065,
0x06A,0x06F,0x074,0x075,0x077,0x07C,0x081,0x086,0x08B,0x097,0x0A0,0x0A7,
0x0AF,0x0B7,0x0BE,0x0C5,0x0CD,0x0D5,0x0D6,0x0DB,0x0E2,0x0E8,0x0F1,0x0F9,
0x101,0x109,0x111,0x11A,0x121,0x12A,0x132,0x13B,0x148,0x150,0x159,0x15F,
0x162,0x166,0x169,0x16E,0x175,0x177,0x17E,0x184,0x18A,0x190,0x196,0x199,
0x19F,0x1A4,0x1A5,0x1A7,0x1AD,0x1AE,0x1B7,0x1BC,0x1C2,0x1C8,0x1CE,0x1D1,
0x1D6,0x1D9,0x1DE,0x1E5,0x1EE,0x1F4,0x1FB,0x1FF,0x204,0x205,0x20A,0x211};
unsigned short __graph_font[0x211]={
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x17F8,0x0078,0x0000,
0x0078,0x0200,0x1E40,0x03C0,0x1E78,0x03C0,0x0278,0x0040,0x08E0,0x1110,
0x3FF8,0x1110,0x0E60,0x0030,0x0848,0x0448,0x0230,0x0100,0x0080,0x0C40,
0x1220,0x1210,0x0C00,0x0E00,0x1170,0x1088,0x1188,0x1670,0x0800,0x1400,
0x0078,0x1FC0,0x6030,0x8008,0x8008,0x6030,0x1FC0,0x0050,0x0060,0x0038,
0x0060,0x0050,0x0100,0x0100,0x07C0,0x0100,0x0100,0x2000,0x1000,0x0100,
0x0100,0x0100,0x0100,0x1000,0x7000,0x0E00,0x01C0,0x0038,0x0FF0,0x1008,
0x1008,0x1008,0x0FF0,0x0010,0x0010,0x1FF8,0x1C30,0x1208,0x1108,0x1088,
0x1070,0x0810,0x1008,0x1088,0x1088,0x0F70,0x0300,0x0280,0x0260,0x0210,
0x1FF8,0x09F8,0x1088,0x1088,0x1088,0x0F08,0x0FF0,0x1108,0x1088,0x1088,
0x0F10,0x0008,0x1C08,0x0308,0x00C8,0x0038,0x0F70,0x1088,0x1088,0x1088,
0x0F70,0x08F0,0x1108,0x1108,0x1088,0x0FF0,0x1040,0x2000,0x1040,0x0100,
0x0380,0x06C0,0x0C60,0x0820,0x0280,0x0280,0x0280,0x0280,0x0280,0x0820,
0x0C60,0x06C0,0x0380,0x0100,0x0030,0x0008,0x1708,0x0088,0x0070,0x03C0,
0x0C30,0x1008,0x1008,0x2384,0x2444,0x2444,0x2244,0x25C8,0x1408,0x1430,
0x03C0,0x1800,0x0600,0x0380,0x0260,0x0218,0x0260,0x0380,0x0600,0x1800,
0x1FF8,0x1088,0x1088,0x1088,0x1088,0x1088,0x0F70,0x07E0,0x0810,0x1008,
0x1008,0x1008,0x1008,0x0810,0x0420,0x1FF8,0x1008,0x1008,0x1008,0x1008,
0x1008,0x0810,0x07E0,0x1FF8,0x1088,0x1088,0x1088,0x1088,0x1088,0x1008,
0x1FF8,0x0088,0x0088,0x0088,0x0088,0x0088,0x0008,0x07E0,0x0810,0x1008,
0x1008,0x1008,0x1108,0x0910,0x1F20,0x1FF8,0x0080,0x0080,0x0080,0x0080,
0x0080,0x0080,0x1FF8,0x1FF8,0x0C00,0x1000,0x1000,0x1000,0x0FF8,0x1FF8,
0x0080,0x0140,0x0220,0x0410,0x0808,0x1000,0x1FF8,0x1000,0x1000,0x1000,
0x1000,0x1000,0x1FF8,0x0060,0x0180,0x0600,0x1800,0x0600,0x0180,0x0060,
0x1FF8,0x1FF8,0x0010,0x0060,0x0080,0x0100,0x0600,0x0800,0x1FF8,0x07E0,
0x0810,0x1008,0x1008,0x1008,0x1008,0x0810,0x07E0,0x1FF8,0x0108,0x0108,
0x0108,0x0108,0x0108,0x0090,0x0060,0x07E0,0x0810,0x1008,0x1008,0x1008,
0x1408,0x0810,0x17E0,0x1FF8,0x0108,0x0108,0x0108,0x0108,0x0108,0x0190,
0x0E60,0x1000,0x0C70,0x1088,0x1088,0x1088,0x1108,0x1108,0x0E30,0x0008,
0x0008,0x0008,0x0008,0x1FF8,0x0008,0x0008,0x0008,0x0008,0x07F8,0x0800,
0x1000,0x1000,0x1000,0x1000,0x0800,0x07F8,0x0018,0x0060,0x0180,0x0600,
0x1800,0x0600,0x0180,0x0060,0x0018,0x0038,0x00C0,0x0700,0x1800,0x0700,
0x00C0,0x0038,0x00C0,0x0700,0x1800,0x0700,0x00C0,0x0038,0x1818,0x0420,
0x0240,0x0180,0x0180,0x0240,0x0420,0x1818,0x0018,0x0020,0x0040,0x0080,
0x1F00,0x0080,0x0040,0x0020,0x0018,0x1808,0x1608,0x1108,0x1088,0x1068,
0x1018,0xFFF8,0x8008,0x8008,0x0038,0x01C0,0x0E00,0x7000,0x8008,0x8008,
0xFFF8,0x0010,0x0008,0x0004,0x0008,0x0010,0x4000,0x4000,0x4000,0x4000,
0x4000,0x4000,0x4000,0x0008,0x0010,0x0E80,0x1140,0x1140,0x1140,0x1140,
0x0F80,0x1000,0x1FF8,0x0880,0x1040,0x1040,0x1040,0x0F80,0x0F80,0x1040,
0x1040,0x1040,0x1040,0x0880,0x0F80,0x1040,0x1040,0x1040,0x0880,0x1FF8,
0x0F80,0x1240,0x1240,0x1240,0x1240,0x0B80,0x0040,0x1FF0,0x0048,0x0F80,
0x9040,0x9040,0x9040,0x8880,0x7FC0,0x1FF8,0x0080,0x0040,0x0040,0x1F80,
0x1FC8,0x8000,0x7FC8,0x1FF8,0x0200,0x0300,0x0480,0x0840,0x1000,0x1FF8,
0x1FC0,0x0080,0x0040,0x0040,0x1F80,0x0080,0x0040,0x0040,0x1F80,0x1FC0,
0x0080,0x0040,0x0040,0x1F80,0x0F80,0x1040,0x1040,0x1040,0x1040,0x0F80,
0xFFC0,0x0880,0x1040,0x1040,0x1040,0x0F80,0x0F80,0x1040,0x1040,0x1040,
0x0880,0xFFC0,0x1FC0,0x0080,0x0040,0x0980,0x1240,0x1240,0x1240,0x0C80,
0x0040,0x0FF0,0x1040,0x0FC0,0x1000,0x1000,0x0800,0x1FC0,0x00C0,0x0300,
0x0C00,0x1000,0x0C00,0x0300,0x00C0,0x00C0,0x0700,0x1800,0x0700,0x00C0,
0x0700,0x1800,0x0700,0x00C0,0x1040,0x0880,0x0700,0x0700,0x0880,0x1040,
0x80C0,0x8300,0x4C00,0x3000,0x0C00,0x0300,0x00C0,0x1840,0x1640,0x1140,
0x10C0,0x0200,0x0200,0x7DF0,0x8008,0x8008,0xFFF8,0x8008,0x8008,0x7DF0,
0x0200,0x0200,0x0030,0x0008,0x0008,0x0010,0x0020,0x0020,0x0018};
`;
Section Inherit
    - parent_object:OBJECT :=
Section Public
    - get_y_line y:INTEGER :ABSTRACT_BMP_LINE <-
Data.
Image size.
    + height:INTEGER;
    + width:INTEGER;
    - x_max:INTEGER <-
    - y_max:INTEGER <-
Clipping :
    + clip_x0:INTEGER;
    + clip_y0:INTEGER;
    + clip_x1:INTEGER;
    + clip_y1:INTEGER;
Current position.
    + spot_x:INTEGER;
    + spot_y:INTEGER;
Current color.
    + rgbcolor :UINTEGER_32;
        Format: RRGGBB in hexadecimal
    + rgbbackcolor:UINTEGER_32;
    + transparent :BOOLEAN;
    + mode:UINTEGER_8 :=
        Set mode.
Ref. `X.h'
    - mode_copy:UINTEGER_8 :=
    - mode_xor :UINTEGER_8 :=
    - set_mode m:UINTEGER_8 <-
Macro colors
    - black:UINTEGER_32 :=
    - white:UINTEGER_32 :=
    - red:UINTEGER_32 :=
    - green:UINTEGER_32 :=
    - blue:UINTEGER_32 :=
    - yellow:UINTEGER_32:=
    - purple:UINTEGER_32:=
    - cyan:UINTEGER_32 :=
    - gray:UINTEGER_32 :=
    - brown:UINTEGER_32 :=
    - pixel_geometry:PIXEL <-
Creation.
    - create (w,h:INTEGER) :SELF <-
    - make (w,h:INTEGER) <-
    - create (w,h:INTEGER) at offset_begin:UINTEGER_32 bytes_per_line lx:INTEGER :SELF <-
    - make (w,h:INTEGER) at offset_begin:UINTEGER_32 bytes_per_line lx:INTEGER <-
Section Public
Low level.
    - pixel_hard (x,y:INTEGER) color col:UINTEGER_32 <-
    - line_h_hard (x,y:INTEGER) until x1:INTEGER color col:UINTEGER_32 <-
    - line_h_hard (x,y:INTEGER) until x1:INTEGER image line:ABSTRACT_BMP_LINE offset ofs:INTEGER <-
    - get_pixel_hard (x,y:INTEGER) :PIXEL <-
Section Public
    - color col:UINTEGER_32 <-
    - backcolor col:UINTEGER_32 <-
    - transparent_on <-
    - transparent_off <-
    - clipping (x0,y0:INTEGER) to (x1,y1:INTEGER) <-
    - clipping_off <-
    - move_to (pos_x,pos_y:INTEGER) <-
GetPixel
    - get_pixel:BOOLEAN <-
        Load Spot pixel.
    - get_pixel_to (x,y:INTEGER) :BOOLEAN<-
PutPixel
    - pixel:BOOLEAN <-
    - pixel_to (x,y:INTEGER) :BOOLEAN <-
    - pixel_color col:UINTEGER_32 :BOOLEAN <-
    - pixel_to (x,y:INTEGER) color col:UINTEGER_32 :BOOLEAN <-
Line
    - line_h (x,y:INTEGER) until x_end:INTEGER image line:ABSTRACT_BMP_LINE :BOOLEAN <-
    - line_h_until x:INTEGER :BOOLEAN <-
    - line_h_until x1:INTEGER color col:UINTEGER_32 :BOOLEAN <-
    - line_h (x0,y0:INTEGER) until x1:INTEGER :BOOLEAN <-
    - line_h (x0,y0:INTEGER) until x1:INTEGER color col:UINTEGER_32 :BOOLEAN <-
    - line_v_until y:INTEGER :BOOLEAN <-
    - line_v_until y1:INTEGER color col:UINTEGER_32 :BOOLEAN <-
    - line_v (x0,y0:INTEGER) until y1:INTEGER :BOOLEAN <-
    - line_v (x0,y0:INTEGER) until y1:INTEGER color col:UINTEGER_32 :BOOLEAN <-
:UINTEGER_8 CalculCode(:INTEGER_64 X,:INTEGER_64 Y,:INTEGER_64 Xmin,:INTEGER_64 Ymin,:INTEGER_64 Xmax,:INTEGER_64 Ymax)
{ return( (XXmax)<<1)|((YYmax)<<3) );
};
************************
* CLIPPING DE LINE BUGGE -> Blocage !!!
************************
    - line_to (x2,y2:INTEGER) :BOOLEAN <-
    - line_to (x1,y1:INTEGER) color col:UINTEGER_32 :BOOLEAN <-
    - line (x1,y1:INTEGER) to (x2,y2:INTEGER) :BOOLEAN <-
    - line (x1,y1:INTEGER) to (x2,y2:INTEGER) color col:UINTEGER_32 :BOOLEAN <-
Rectangle
    - rectangle_to (x1,y1:INTEGER) :BOOLEAN <-
    - rectangle_to (x1,y1:INTEGER) color col:UINTEGER_32 :BOOLEAN <-
    - rectangle (x0,y0:INTEGER) to (x1,y1:INTEGER) :BOOLEAN <-
    - rectangle (x0,y0:INTEGER) to (x1,y1:INTEGER) color col:UINTEGER_32 :BOOLEAN <-
    - rectangle_fill_to (x,y:INTEGER) :BOOLEAN <-
    - rectangle_fill (x0,y0:INTEGER) to (x1,y1:INTEGER) :BOOLEAN <-
    - rectangle_fill (x0,y0:INTEGER) to (x1,y1:INTEGER) color col:UINTEGER_32 :BOOLEAN <-
Circle
Section Public
    - circle_fill_rayon r:INTEGER <-
    - circle_fill (x,y:INTEGER) rayon r:INTEGER <-
    - circle_fill (x,y:INTEGER) rayon r:INTEGER color col:UINTEGER_32 <-
    - circle_rayon r:INTEGER <-
    - circle (x,y:INTEGER) rayon r:INTEGER <-
    - circle (x,y:INTEGER) rayon r:INTEGER color col:UINTEGER_32 <-
Spline
Section Public
    - spline_w1 (px0,py0:INTEGER) w2 (px1,py1:INTEGER) to (x1,y1:INTEGER) :BOOLEAN <-
    - spline_w1 (px0,py0:INTEGER) w2 (px1,py1:INTEGER) to (x1,y1:INTEGER) color col:UINTEGER_32 :BOOLEAN <-
    - spline (x0,y0:INTEGER) w1 (px0,py0:INTEGER) w2 (px1,py1:INTEGER) to (x1,y1:INTEGER) :BOOLEAN <-
    - spline (x0,y0:INTEGER) w1 (px0,py0:INTEGER) w2 (px1,py1:INTEGER) to (x1,y1:INTEGER) color col:UINTEGER_32 :BOOLEAN <-
*****************************************************************************
* POLYGONE COMPLEXE *
* V.4.0 : Il n'y a plus de contrainte de sens comme dans la version 3.0 *
* Nouvelle algo made in `moi'... *
* Il faut juste faire attention à appeler dans l'ordre suivant : *
* => poly_move_to poly_line_to ... poly_trace *
* *
* Rmq. : Il reste des optimisations à faire pour le tri (qsort) et utiliser *
* des MAP_FAST_ARRAY capable de s'agrandir dynamiquement ... *
* *
* BeN inside *
*****************************************************************************
Section Public
    - poly_move_to (x,y:INTEGER) <-
    - poly_line_to (x1,y1:INTEGER) <-
    - poly_spline_w1 (px0,py0:INTEGER) w2 (px1,py1:INTEGER) to (x1,y1:INTEGER) <-
    - poly_ellipse (x,y:INTEGER) rays (ray_x,ray_y:INTEGER) <-
    - poly_trace <-
    - poly_trace_color col:UINTEGER_32 <-
    - put_bitmap bmp:ABSTRACT_BITMAP to (x,y:INTEGER) <-
    - put_bitmap bmp:ABSTRACT_BITMAP to (x,y:INTEGER) scale (scale_x,scale_y:REAL_16_16) <-
Section Public
For demo ... :-)
    - font_width string:ABSTRACT_STRING :INTEGER <-
    - font_width_letter char:CHARACTER :INTEGER <-
    - font_width string:ABSTRACT_STRING size n:INTEGER :INTEGER <-
    - font_width string:ABSTRACT_STRING at beg:INTEGER to end:INTEGER :INTEGER <-
    - print_char c:CHARACTER to (x,y:INTEGER) :INTEGER <-
    - print string:ABSTRACT_STRING at b:INTEGER to e:INTEGER to (x,y:INTEGER) :INTEGER <-
    - print string:ABSTRACT_STRING to (x,y:INTEGER) :INTEGER <-