/*  graphics.h
 
    Definitions for Graphics Package.
 
    Copyright (c) Borland International 1987,1988
    All Rights Reserved.
*/
 
#if __STDC__
#define _Cdecl
#else
#define _Cdecl    cdecl
#endif
 
#if     !defined(__GRAPHX_DEF_)
#define __GRAPHX_DEF_
 
enum graphics_errors {      /* graphresult error return codes */
    grOk          =   0,
    grNoInitGraph    =  -1,
    grNotDetected    =  -2,
    grFileNotFound       =  -3,
    grInvalidDriver    =  -4,
    grNoLoadMem      =  -5,
    grNoScanMem      =  -6,
    grNoFloodMem     =  -7,
    grFontNotFound       =  -8,
    grNoFontMem      =  -9,
    grInvalidMode    = -10,
    grError       = -11,   /* generic error */
    grIOerror     = -12,
    grInvalidFont    = -13,
    grInvalidFontNum   = -14,
    grInvalidVersion   = -18
};
 
enum graphics_drivers {  /* define graphics drivers */
    DETECT,       /* requests autodetection */
    CGA, MCGA, EGA, EGA64, EGAMONO, IBM8514,  /* 1 - 6 */
    HERCMONO, ATT400, VGA, PC3270,         /* 7 - 10 */
    CURRENT_DRIVER = -1
};
 
enum graphics_modes {       /* graphics modes for each driver */
    CGAC0      = 0,  /* 320x200 palette 0; 1 page    */
    CGAC1      = 1,  /* 320x200 palette 1; 1 page    */
    CGAC2      = 2,  /* 320x200 palette 2: 1 page    */
    CGAC3      = 3,  /* 320x200 palette 3; 1 page    */
    CGAHI      = 4,  /* 640x200 1 page        */
    MCGAC0     = 0,  /* 320x200 palette 0; 1 page    */
    MCGAC1     = 1,  /* 320x200 palette 1; 1 page    */
    MCGAC2     = 2,  /* 320x200 palette 2; 1 page    */
    MCGAC3     = 3,  /* 320x200 palette 3; 1 page    */
    MCGAMED    = 4,  /* 640x200 1 page        */
    MCGAHI     = 5,  /* 640x480 1 page        */
    EGALO      = 0,  /* 640x200 16 color 4 pages */
    EGAHI      = 1,  /* 640x350 16 color 2 pages */
    EGA64LO    = 0,  /* 640x200 16 color 1 page  */
    EGA64HI    = 1,  /* 640x350 4 color  1 page  */
    EGAMONOHI  = 0,  /* 640x350 64K on card, 1 page - 256K on card, 4 pages */
    HERCMONOHI = 0,  /* 720x348 2 pages       */
    ATT400C0   = 0,  /* 320x200 palette 0; 1 page    */
    ATT400C1   = 1,  /* 320x200 palette 1; 1 page    */
    ATT400C2   = 2,  /* 320x200 palette 2; 1 page    */
    ATT400C3   = 3,  /* 320x200 palette 3; 1 page    */
    ATT400MED  = 4,  /* 640x200 1 page        */
    ATT400HI   = 5,  /* 640x400 1 page        */
    VGALO      = 0,  /* 640x200 16 color 4 pages */
    VGAMED     = 1,  /* 640x350 16 color 2 pages */
    VGAHI      = 2,  /* 640x480 16 color 1 page  */
    PC3270HI   = 0,  /* 720x350 1 page        */
    IBM8514LO  = 0,  /* 640x480 256 colors       */
    IBM8514HI  = 1   /*1024x768 256 colors       */
};
 
/* Colors for setpalette and setallpalette */
 
#if !defined(__COLORS)
#define __COLORS
 
enum COLORS {
    BLACK,        /* dark colors */
    BLUE,
    GREEN,
    CYAN,
    RED,
    MAGENTA,
    BROWN,
    LIGHTGRAY,
    DARKGRAY,         /* light colors */
    LIGHTBLUE,
    LIGHTGREEN,
    LIGHTCYAN,
    LIGHTRED,
    LIGHTMAGENTA,
    YELLOW,
    WHITE
};
#endif
 
enum CGA_COLORS {
    CGA_LIGHTGREEN     = 1,     /* Palette C0 Color Names   */
    CGA_LIGHTRED       = 2,
    CGA_YELLOW           = 3,
 
    CGA_LIGHTCYAN      = 1,     /* Palette C1 Color Names   */
    CGA_LIGHTMAGENTA   = 2,
    CGA_WHITE        = 3,
 
    CGA_GREEN        = 1,       /* Palette C2 Color Names   */
    CGA_RED          = 2,
    CGA_BROWN        = 3,
 
    CGA_CYAN         = 1,       /* Palette C3 Color Names   */
    CGA_MAGENTA        = 2,
    CGA_LIGHTGRAY      = 3
};
 
 
enum EGA_COLORS {
    EGA_BLACK      =  0,     /* dark colors */
    EGA_BLUE       =  1,
    EGA_GREEN      =  2,
    EGA_CYAN       =  3,
    EGA_RED        =  4,
    EGA_MAGENTA    =  5,
    EGA_BROWN      =  20,
    EGA_LIGHTGRAY  =  7,
    EGA_DARKGRAY   =  56,     /* light colors */
    EGA_LIGHTBLUE  =  57,
    EGA_LIGHTGREEN    =  58,
    EGA_LIGHTCYAN  =  59,
    EGA_LIGHTRED   =  60,
    EGA_LIGHTMAGENTA  =  61,
    EGA_YELLOW        =  62,
    EGA_WHITE      =  63
};
 
enum line_styles {       /* Line styles for get/setlinestyle */
    SOLID_LINE   = 0,
    DOTTED_LINE  = 1,
    CENTER_LINE  = 2,
    DASHED_LINE  = 3,
    USERBIT_LINE = 4, /* User defined line style */
};
 
enum line_widths {       /* Line widths for get/setlinestyle */
    NORM_WIDTH  = 1,
    THICK_WIDTH = 3,
};
 
enum font_names {
    DEFAULT_FONT  = 0,   /* 8x8 bit mapped font */
    TRIPLEX_FONT  = 1,   /* "Stroked" fonts */
    SMALL_FONT = 2,
    SANS_SERIF_FONT = 3,
    GOTHIC_FONT   = 4
};
 
#define HORIZ_DIR 0   /* left to right */
#define VERT_DIR  1   /* bottom to top */
 
#define USER_CHAR_SIZE   0   /* user-defined char size */
 
enum fill_patterns {     /* Fill patterns for get/setfillstyle */
    EMPTY_FILL,       /* fills area in background color */
    SOLID_FILL,       /* fills area in solid fill color */
    LINE_FILL,    /* --- fill */
    LTSLASH_FILL,     /* /// fill */
    SLASH_FILL,       /* /// fill with thick lines */
    BKSLASH_FILL,     /* \\\ fill with thick lines */
    LTBKSLASH_FILL,   /* \\\ fill */
    HATCH_FILL,       /* light hatch fill */
    XHATCH_FILL,      /* heavy cross hatch fill */
    INTERLEAVE_FILL,  /* interleaving line fill */
    WIDE_DOT_FILL,       /* Widely spaced dot fill */
    CLOSE_DOT_FILL,   /* Closely spaced dot fill */
    USER_FILL     /* user defined fill */
};
 
enum putimage_ops {      /* BitBlt operators for putimage */
    COPY_PUT,     /* MOV */
    XOR_PUT,      /* XOR */
    OR_PUT,       /* OR  */
    AND_PUT,      /* AND */
    NOT_PUT       /* NOT */
};
 
enum text_just {     /* Horizontal and vertical justification
                 for settextjustify */
    LEFT_TEXT  = 0,
    CENTER_TEXT   = 1,
    RIGHT_TEXT = 2,
 
    BOTTOM_TEXT   = 0,
     /* CENTER_TEXT  = 1,  already defined above */
    TOP_TEXT   = 2
};
 
 
#define MAXCOLORS 15
 
struct palettetype {
    unsigned char size;
    signed char colors[MAXCOLORS+1];
};
 
struct linesettingstype {
    int linestyle;
    unsigned upattern;
    int thickness;
};
 
struct textsettingstype {
    int font;
    int direction;
    int charsize;
    int horiz;
    int vert;
};
 
struct fillsettingstype {
    int pattern;
    int color;
};
 
struct pointtype {
    int x, y;
};
 
struct viewporttype {
    int left, top, right, bottom;
    int clip;
};
 
struct arccoordstype {
    int x, y;
    int xstart, ystart, xend, yend;
};
 
void      far _Cdecl arc(int x, int y, int stangle, int endangle,
             int radius);
void      far _Cdecl bar(int left, int top, int right, int bottom);
void      far _Cdecl bar3d(int left, int top, int right, int bottom,
               int depth, int topflag);
void      far _Cdecl circle(int x, int y, int radius);
void      far _Cdecl cleardevice(void);
void      far _Cdecl clearviewport(void);
void      far _Cdecl closegraph(void);
void      far _Cdecl detectgraph(int far *graphdriver,int far *graphmode);
void      far _Cdecl drawpoly(int numpoints, int far *polypoints);
void      far _Cdecl ellipse(int x, int y, int stangle, int endangle,
                 int xradius, int yradius);
void      far _Cdecl fillellipse( int x, int y, int xradius, int yradius );
void      far _Cdecl fillpoly(int numpoints, int far *polypoints);
void      far _Cdecl floodfill(int x, int y, int border);
void      far _Cdecl getarccoords(struct arccoordstype far *arccoords);
void      far _Cdecl getaspectratio(int far *xasp, int far *yasp);
int    far _Cdecl getbkcolor(void);
int    far _Cdecl getcolor(void);
struct palettetype * far _Cdecl getdefaultpalette( void );
char *    far _Cdecl getdrivername( void );
void      far _Cdecl getfillpattern(char far *pattern);
void      far _Cdecl getfillsettings(struct fillsettingstype far *fillinfo);
int    far _Cdecl getgraphmode(void);
void      far _Cdecl getimage(int left, int top, int right, int bottom,
                  void far *bitmap);
void      far _Cdecl getlinesettings(struct linesettingstype far *lineinfo);
int    far _Cdecl getmaxcolor(void);
int    far _Cdecl getmaxmode(void);
int    far _Cdecl getmaxx(void);
int    far _Cdecl getmaxy(void);
char *    far _Cdecl getmodename( int mode_number );
void      far _Cdecl getmoderange(int graphdriver, int far *lomode,
                 int far *himode);
unsigned   far _Cdecl getpixel(int x, int y);
void      far _Cdecl getpalette(struct palettetype far *palette);
int    far _Cdecl getpalettesize( void );
void      far _Cdecl gettextsettings(struct textsettingstype far *texttypeinfo);
void      far _Cdecl getviewsettings(struct viewporttype far *viewport);
int    far _Cdecl getx(void);
int    far _Cdecl gety(void);
void      far _Cdecl graphdefaults(void);
char *    far _Cdecl grapherrormsg(int errorcode);
void      far _Cdecl _graphfreemem(void far *ptr, unsigned size);
void far * far _Cdecl _graphgetmem(unsigned size);
int    far _Cdecl graphresult(void);
unsigned   far _Cdecl imagesize(int left, int top, int right, int bottom);
void      far _Cdecl initgraph(int  far *graphdriver,
              int  far *graphmode,
              char far *pathtodriver);
int    far _Cdecl installuserdriver( char far *name, int huge (*detect)(void) );
int    far _Cdecl installuserfont( char far *name );
void      far _Cdecl line(int x1, int y1, int x2, int y2);
void      far _Cdecl linerel(int dx, int dy);
void      far _Cdecl lineto(int x, int y);
void      far _Cdecl moverel(int dx, int dy);
void      far _Cdecl moveto(int x, int y);
void      far _Cdecl outtext(char far *textstring);
void      far _Cdecl outtextxy(int x, int y, char far *textstring);
void      far _Cdecl pieslice(int x, int y, int stangle, int endangle,
                  int radius);
void      far _Cdecl putimage(int left, int top, void far *bitmap, int op);
void      far _Cdecl putpixel(int x, int y, int color);
void      far _Cdecl rectangle(int left, int top, int right, int bottom);
void      far _Cdecl restorecrtmode(void);
void      far _Cdecl sector( int X, int Y, int StAngle, int EndAngle,
                 int XRadius, int YRadius );
void      far _Cdecl setactivepage(int page);
void      far _Cdecl setallpalette(struct palettetype far *palette);
void      far _Cdecl setaspectratio( int xasp, int yasp );
void      far _Cdecl setbkcolor(int color);
void      far _Cdecl setcolor(int color);
void      far _Cdecl setfillpattern(char far *upattern, int color);
void      far _Cdecl setfillstyle(int pattern, int color);
unsigned   far _Cdecl setgraphbufsize(unsigned bufsize);
void      far _Cdecl setgraphmode(int mode);
void      far _Cdecl setlinestyle(int linestyle, unsigned upattern,
                 int thickness);
void      far _Cdecl setpalette(int colornum, int color);
void      far _Cdecl setrgbpalette(int colornum,
                  int red, int green, int blue);
void      far _Cdecl settextjustify(int horiz, int vert);
void      far _Cdecl settextstyle(int font, int direction, int charsize);
void      far _Cdecl setusercharsize(int multx, int divx,
                    int multy, int divy);
void      far _Cdecl setviewport(int left, int top, int right, int bottom,
                int clip);
void      far _Cdecl setvisualpage(int page);
void      far _Cdecl setwritemode( int mode );
int    far _Cdecl textheight(char far *textstring);
int    far _Cdecl textwidth(char far *textstring);
 
/***** graphics drivers *****/
 
int        _Cdecl registerbgidriver(void (*driver)(void));
int    far _Cdecl registerfarbgidriver(void far *driver);
 
/* !!       These "functions" are NOT user-callable          !! */
/* !! They are there just so you can link in graphics drivers !! */
 
void          _Cdecl CGA_driver(void);
void          _Cdecl EGAVGA_driver(void);
void          _Cdecl IBM8514_driver(void);
void          _Cdecl Herc_driver(void);
void          _Cdecl ATT_driver(void);
void          _Cdecl PC3270_driver(void);
 
extern int far _Cdecl CGA_driver_far[];
extern int far _Cdecl EGAVGA_driver_far[];
extern int far _Cdecl IBM8514_driver_far[];
extern int far _Cdecl Herc_driver_far[];
extern int far _Cdecl ATT_driver_far[];
extern int far _Cdecl PC3270_driver_far[];
 
 
/***** graphics fonts *****/
 
int        _Cdecl registerbgifont(void (*font)(void));
int    far _Cdecl registerfarbgifont(void far *font);
 
/* !!  These "functions" are NOT user-callable,   !! */
/* !! they are there just so you can link in fonts !! */
 
void          _Cdecl triplex_font(void);
void          _Cdecl   small_font(void);
void          _Cdecl sansserif_font(void);
void          _Cdecl  gothic_font(void);
 
extern int far _Cdecl    triplex_font_far[];
extern int far _Cdecl      small_font_far[];
extern int far _Cdecl sansserif_font_far[];
extern int far _Cdecl     gothic_font_far[];
 
 
#endif