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 <-