Vous trouverez ici un code source, en C, de l'équivalent des fonctions graphiques fournies par TURBO C dans GRAPHICS.H

Remarque : comme vous pouvez le voir, ce n'est pas de moi

/*                                                        */
/* Graphics Library for X11-Unix Plathome                 */
/* Written by N.Okamoto<okamoto@ish.ic.kanagawa-it.ac.jp> */
/*                                                        */
/* Based on the [graphics.h]...Borland C++ BGI Compatible */
/*  Library.                                              */
/*                                                        */
/*  Last Modified: May, 16, 1999                          */
/*                                                        */

/* ====================================================== */
#include <X11/xlib.h>
#include <X11/xutil.h>
#include <stdio.h>

/* Color Define */
#define BLACK            0
#define BLUE             1
#define GREEN            2
#define CYAN             3
#define RED              4
#define MAGENTA          5
#define BROWN            6
#define LIGHTGRAY        7
#define DARKGRAY         8
#define LIGHTBLUE        9
#define LIGHTGREEN      10
#define LIGHTCYAN       11
#define PINK            12
#define LIGHTMAGENTA    13
#define YELLOW          14
#define WHITE           15

/* Structure Define */
struct viewporttype {
    int left, top, right, bottom;
    int clip;
};

/* Global Variables */
Display                 *_display;
Window                  _window;
GC                      _gc;
XGCValues               gv;
XSetWindowAttributes    attr;
Colormap                _colmap;
XColor                  _col, _ext;
char ColorTable[16][15] = { "black", "blue", "green", "cyan", "red",
                            "magenta", "brown", "lightgray", "darkgray",
                            "lightblue", "lightgreen", "lightcyan", 
                            "pink", "lightmagenta", "yellow", "white" };
int FgColor, BgColor;
int current_x, current_y;
int NowCol = WHITE;


/* Wrapping Functions */

/* ============================================================= */
/*  Graphic Driver                                               */

int graphic_init(void)
{
    Window rw;

    _display = XOpenDisplay( NULL );
    rw = XDefaultRootWindow( _display );
    _window = XCreateSimpleWindow( _display, rw, 0, 0, 700, 700, 2, 
        WhitePixel( _display, 0 ),BlackPixel( _display, 0 )  );
    _colmap = XDefaultColormap( _display, 0 );    

    attr.backing_store = Always;
    XChangeWindowAttributes( _display, _window, CWBackingStore, &attr );
    attr.override_redirect = True;
    XChangeWindowAttributes( _display, _window, CWOverrideRedirect, &attr );

    XMapWindow( _display, _window );
    gv.line_width = 1;
    _gc = XCreateGC( _display, rw, GCLineWidth, &gv );
    XAllocNamedColor( _display, _colmap, "white", &_col, &_ext );
    XSetForeground( _display, _gc, _col.pixel );
    XSetLineAttributes( _display, _gc, 1, LineSolid, CapButt, JoinMiter );

    XFlush( _display );
    current_x = current_y = 0;
    FgColor = WHITE;
    BgColor = BLACK;
    NowCol = BLACK;
    return 0;
}

void graphic_close( void )
{
    XFreeGC( _display, _gc );
    XDestroyWindow( _display, _window );
    XFlush( _display );
    XCloseDisplay( _display );
}

int getmaxx( void )
{
    return 699;
}

int getmaxy( void )
{
    return 699;
}

void graphdefaults( void )
{
    current_x = 0;
    current_y = 0;
    FgColor = WHITE;
    BgColor = BLACK;
}

void cleardevice( void )
{
    XColor t;

    XAllocNamedColor( _display, _colmap, ColorTable[BgColor], &t, &_ext );
    XSetForeground( _display, _gc, t.pixel );
    XFillRectangle( _display, _window, _gc, 0, 0, 699, 699 ); 
    XSetForeground( _display, _gc, _col.pixel );

    XFlush( _display );
    current_x = 0;
    current_y = 0;
}

/* ============================================================= */
/*  Screen                                                       */

void clearviewport( void )
{
    current_x = 0;
    current_y = 0;
}

void getaspectratio( int *x, int *y )
{
     *x = 10000;
     *y = 10000;
}

void getviewsettings( struct viewporttype *view )
{
    view -> left   = 0;
    view -> top    = 0;
    view -> right  = 699;
    view -> bottom = 799;
    view -> clip   = 0;
} 

/* ============================================================= */
/*  Color                                                        */

int setcolor( int c )
{
    NowCol = c;

    XAllocNamedColor( _display, _colmap, ColorTable[c], &_col, &_ext );
    XSetForeground( _display, _gc, _col.pixel );
}

int setRGBcolor(unsigned char r, unsigned char g, unsigned char b)
{
    XColor color;

    color.red   = r * 256;
    color.green = g * 256;
    color.blue  = b * 256;
    color.flags = DoRed | DoGreen | DoBlue;
    
    XAllocColor( _display, _colmap, &color );
    XSetForeground( _display, _gc, color.pixel );
}

int getbkcolor( void )
{
    return BgColor;
}

void setbkcolor( int color )
{
    BgColor = color;
}

int getcolor( void )
{
    return NowCol;
}

int getmaxcolor( void )
{
    return 16;
}

/* ============================================================= */
/*  Drawing                                                      */

void point( int x, int y )
{
    XDrawPoint( _display, _window, _gc, x, y);
    XFlush( _display );
    current_x = x;
    current_y = y;
}

void line( int x1, int y1, int x2, int y2 )
{
    XDrawLine( _display, _window, _gc, x1, y1, x2, y2 );
    XFlush( _display );
    current_x = x2;
    current_y = y2;
}

void rectangle( int x1, int y1, int x2, int y2 )
{
    XDrawRectangle( _display, _window, _gc, x1, y1, x2 - x1, y2 - y1 );
    XFlush( _display );
    current_x = x2;
    current_y = y2;
}

void fillrectangle( int x1, int y1, int x2, int y2 )
{
    XFillRectangle( _display, _window, _gc, x1, y1, x2 - x1 , y2 - y1 );
    XFlush( _display );
    current_x = x2;
    current_y = y2;
}

void lineto( int x2, int y2 )
{
    XDrawLine( _display, _window, _gc, current_x, current_y, x2, y2 );
    XFlush( _display );
    current_x = x2;
    current_y = y2;
}

void linerel( int dx, int dy )
{
    XDrawLine( _display, _window, _gc, current_x, current_y, 
                    current_x + dx, current_y + dy);
    XFlush( _display );
    current_x += dx;
    current_y += dy;
}

void circle( int x, int y, int radius )
{
    XDrawArc( _display, _window, _gc, x-radius, y-radius, 
                     radius*2, radius*2, 0, 360*64 ); 
    XFlush( _display );
    current_x = x;
    current_y = y;
}

void arc( int x, int y, int sangle, int eangle, int radius )
{
    XDrawArc( _display, _window, _gc, x-radius, y-radius, 
                     radius*2, radius*2, sangle*64, eangle*64 ); 
    XFlush( _display );
    current_x = x;
    current_y = y;
}

void ellipse( int x, int y, int sangle, int eangle, int xradius, int yradius )
{
    XDrawArc( _display, _window, _gc, x-xradius, y-yradius, 
                     xradius*2, yradius*2, sangle*64, eangle*64 ); 
    XFlush( _display );
    current_x = x;
    current_y = y;
}

void fillellipse( int x, int y, int sangle, int eangle, 
                                      int xradius, int yradius )
{
    XFillArc( _display, _window, _gc, x-xradius, y-yradius, 
                     xradius*2, yradius*2, sangle*64, eangle*64 ); 
    XFlush( _display );
    current_x = x;
    current_y = y;
}


/* ============================================================= */
/*  Move Current                                                 */

void moveto( int x1, int y1 )
{
    current_x = x1;
    current_y = y1;
}

void moverel( int dx, int dy )
{
    current_x += dx;
    current_y += dy;
}

int getx( void )
{
    return current_x;
}

int gety( void )
{
    return current_y;
}

/* ===== End of Graphics.h ===== */

P>retour au cours d'infographie.