// The winbgim library, Version 6.0, August 9, 2004 // Written by: // Grant Macklem (Grant.Macklem@colorado.edu) // Gregory Schmelter (Gregory.Schmelter@colorado.edu) // Alan Schmidt (Alan.Schmidt@colorado.edu) // Ivan Stashak (Ivan.Stashak@colorado.edu) // Michael Main (Michael.Main@colorado.edu) // CSCI 4830/7818: API Programming // University of Colorado at Boulder, Spring 2003 // --------------------------------------------------------------------------- // Notes // --------------------------------------------------------------------------- // * This library is still under development. // * Please see http://www.cs.colorado.edu/~main/bgi for information on // * using this library with the mingw32 g++ compiler. // * This library only works with Windows API level 4.0 and higher (Windows 95, NT 4.0 and newer) // * This library may not be compatible with 64-bit versions of Windows // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- // Macro Guard and Include Directives // --------------------------------------------------------------------------- #ifndef WINBGI_H #define WINBGI_H #include // Provides the mouse message types #include // Provides INT_MAX #include // Provides std::ostringstream // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- // Definitions // --------------------------------------------------------------------------- // Definitions for the key pad extended keys are added here. When one // of these keys are pressed, getch will return a zero followed by one // of these values. This is the same way that it works in conio for // dos applications. #define KEY_HOME 71 #define KEY_UP 72 #define KEY_PGUP 73 #define KEY_LEFT 75 #define KEY_CENTER 76 #define KEY_RIGHT 77 #define KEY_END 79 #define KEY_DOWN 80 #define KEY_PGDN 81 #define KEY_INSERT 82 #define KEY_DELETE 83 #define KEY_F1 59 #define KEY_F2 60 #define KEY_F3 61 #define KEY_F4 62 #define KEY_F5 63 #define KEY_F6 64 #define KEY_F7 65 #define KEY_F8 66 #define KEY_F9 67 // Line thickness settings #define NORM_WIDTH 1 #define THICK_WIDTH 3 // Character Size and Direction #define USER_CHAR_SIZE 0 #define HORIZ_DIR 0 #define VERT_DIR 1 // Constants for closegraph #define CURRENT_WINDOW -1 #define ALL_WINDOWS -2 #define NO_CURRENT_WINDOW -3 // The standard Borland 16 colors #define MAXCOLORS 15 enum colors { BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY, DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE }; // The standard line styles enum line_styles { SOLID_LINE, DOTTED_LINE, CENTER_LINE, DASHED_LINE, USERBIT_LINE }; // The standard fill styles enum fill_styles { EMPTY_FILL, SOLID_FILL, LINE_FILL, LTSLASH_FILL, SLASH_FILL, BKSLASH_FILL, LTBKSLASH_FILL, HATCH_FILL, XHATCH_FILL, INTERLEAVE_FILL, WIDE_DOT_FILL, CLOSE_DOT_FILL, USER_FILL }; // The various graphics drivers enum graphics_drivers { DETECT, CGA, MCGA, EGA, EGA64, EGAMONO, IBM8514, HERCMONO, ATT400, VGA, PC3270 }; // Various modes for each graphics driver enum graphics_modes { CGAC0, CGAC1, CGAC2, CGAC3, CGAHI, MCGAC0 = 0, MCGAC1, MCGAC2, MCGAC3, MCGAMED, MCGAHI, EGALO = 0, EGAHI, EGA64LO = 0, EGA64HI, EGAMONOHI = 3, HERCMONOHI = 0, ATT400C0 = 0, ATT400C1, ATT400C2, ATT400C3, ATT400MED, ATT400HI, VGALO = 0, VGAMED, VGAHI, PC3270HI = 0, IBM8514LO = 0, IBM8514HI }; // Borland error messages for the graphics window. #define NO_CLICK -1 // No mouse event of the current type in getmouseclick enum graph_errors { grInvalidVersion = -18, grInvalidDeviceNum = -15, grInvalidFontNum, grInvalidFont, grIOerror, grError, grInvalidMode, grNoFontMem, grFontNotFound, grNoFloodMem, grNoScanMem, grNoLoadMem, grInvalidDriver, grFileNotFound, grNotDetected, grNoInitGraph, grOk }; // Write modes enum putimage_ops{ COPY_PUT, XOR_PUT, OR_PUT, AND_PUT, NOT_PUT }; // Text Modes enum horiz { LEFT_TEXT, CENTER_TEXT, RIGHT_TEXT }; enum vertical { BOTTOM_TEXT, VCENTER_TEXT, TOP_TEXT }; // middle not needed other than as seperator enum font_names { DEFAULT_FONT, TRIPLEX_FONT, SMALL_FONT, SANS_SERIF_FONT, GOTHIC_FONT, SCRIPT_FONT, SIMPLEX_FONT, TRIPLEX_SCR_FONT, COMPLEX_FONT, EUROPEAN_FONT, BOLD_FONT }; // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- // Structures // --------------------------------------------------------------------------- // This structure records information about the last call to arc. It is used // by getarccoords to get the location of the endpoints of the arc. struct arccoordstype { int x, y; // Center point of the arc int xstart, ystart; // The starting position of the arc int xend, yend; // The ending position of the arc. }; // This structure defines the fill style for the current window. Pattern is // one of the system patterns such as SOLID_FILL. Color is the color to // fill with struct fillsettingstype { int pattern; // Current fill pattern int color; // Current fill color }; // This structure records information about the current line style. // linestyle is one of the line styles such as SOLID_LINE, upattern is a // 16-bit pattern for user defined lines, and thickness is the width of the // line in pixels. struct linesettingstype { int linestyle; // Current line style unsigned upattern; // 16-bit user line pattern int thickness; // Width of the line in pixels }; // This structure records information about the text settings. struct textsettingstype { int font; // The font in use int direction; // Text direction int charsize; // Character size int horiz; // Horizontal text justification int vert; // Vertical text justification }; // This structure records information about the viewport struct viewporttype { int left, top, // Viewport bounding box right, bottom; int clip; // Whether to clip image to viewport }; // This structure records information about the palette. struct palettetype { unsigned char size; signed char colors[MAXCOLORS + 1]; }; // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- // API Entries // --------------------------------------------------------------------------- #ifdef __cplusplus extern "C" { #endif // Drawing Functions void arc( int x, int y, int stangle, int endangle, int radius ); void bar( int left, int top, int right, int bottom ); void bar3d( int left, int top, int right, int bottom, int depth, int topflag ); void circle( int x, int y, int radius ); void cleardevice( ); void clearviewport( ); void drawpoly(int n_points, int* points); void ellipse( int x, int y, int stangle, int endangle, int xradius, int yradius ); void fillellipse( int x, int y, int xradius, int yradius ); void fillpoly(int n_points, int* points); void floodfill( int x, int y, int border ); void line( int x1, int y1, int x2, int y2 ); void linerel( int dx, int dy ); void lineto( int x, int y ); void pieslice( int x, int y, int stangle, int endangle, int radius ); void putpixel( int x, int y, int color ); void rectangle( int left, int top, int right, int bottom ); void sector( int x, int y, int stangle, int endangle, int xradius, int yradius ); // Miscellaneous Functions int getdisplaycolor( int color ); int converttorgb( int color ); void delay( int msec ); void getarccoords( arccoordstype *arccoords ); int getbkcolor( ); int getcolor( ); void getfillpattern( char *pattern ); void getfillsettings( fillsettingstype *fillinfo ); void getlinesettings( linesettingstype *lineinfo ); int getmaxcolor( ); int getmaxheight( ); int getmaxwidth( ); int getmaxx( ); int getmaxy( ); bool getrefreshingbgi( ); int getwindowheight( ); int getwindowwidth( ); int getpixel( int x, int y ); void getviewsettings( viewporttype *viewport ); int getx( ); int gety( ); void moverel( int dx, int dy ); void moveto( int x, int y ); void refreshbgi(int left, int top, int right, int bottom); void refreshallbgi( ); void setbkcolor( int color ); void setcolor( int color ); void setfillpattern( char *upattern, int color ); void setfillstyle( int pattern, int color ); void setlinestyle( int linestyle, unsigned upattern, int thickness ); void setrefreshingbgi(bool value); void setviewport( int left, int top, int right, int bottom, int clip ); void setwritemode( int mode ); // Window Creation / Graphics Manipulation void closegraph( int wid=ALL_WINDOWS ); void detectgraph( int *graphdriver, int *graphmode ); void getaspectratio( int *xasp, int *yasp ); char *getdrivername( ); int getgraphmode( ); int getmaxmode( ); char *getmodename( int mode_number ); void getmoderange( int graphdriver, int *lomode, int *himode ); void graphdefaults( ); char *grapherrormsg( int errorcode ); int graphresult( ); void initgraph( int *graphdriver, int *graphmode, char *pathtodriver ); int initwindow ( int width, int height, const char* title="Windows BGI", int left=0, int top=0, bool dbflag=false, bool closeflag=true ); int installuserdriver( char *name, int *fp ); // Not available in WinBGI int installuserfont( char *name ); // Not available in WinBGI int registerbgidriver( void *driver ); // Not available in WinBGI int registerbgifont( void *font ); // Not available in WinBGI void restorecrtmode( ); void setaspectratio( int xasp, int yasp ); unsigned setgraphbufsize( unsigned bufsize ); // Not available in WinBGI void setgraphmode( int mode ); void showerrorbox( const char *msg = NULL ); // User Interaction int getch( ); int kbhit( ); // User-Controlled Window Functions (winbgi.cpp) int getcurrentwindow( ); void setcurrentwindow( int window ); // Double buffering support (winbgi.cpp) int getactivepage( ); int getvisualpage( ); void setactivepage( int page ); void setvisualpage( int page ); void swapbuffers( ); // Image Functions (drawing.cpp) unsigned imagesize( int left, int top, int right, int bottom ); void getimage( int left, int top, int right, int bottom, void *bitmap ); void putimage( int left, int top, void *bitmap, int op ); void printimage( const char* title=NULL, double width_inches=7, double border_left_inches=0.75, double border_top_inches=0.75, int left=0, int top=0, int right=INT_MAX, int bottom=INT_MAX, bool active=true, HWND hwnd=NULL ); void readimagefile( const char* filename=NULL, int left=0, int top=0, int right=INT_MAX, int bottom=INT_MAX ); void writeimagefile( const char* filename=NULL, int left=0, int top=0, int right=INT_MAX, int bottom=INT_MAX, bool active=true, HWND hwnd=NULL ); // Text Functions (text.cpp) void gettextsettings(struct textsettingstype *texttypeinfo); void outtext(char *textstring); void outtextxy(int x, int y, char *textstring); void settextjustify(int horiz, int vert); void settextstyle(int font, int direction, int charsize); void setusercharsize(int multx, int divx, int multy, int divy); int textheight(char *textstring); int textwidth(char *textstring); extern std::ostringstream bgiout; void outstream(std::ostringstream& out=bgiout); void outstreamxy(int x, int y, std::ostringstream& out=bgiout); // Mouse Functions (mouse.cpp) void clearmouseclick( int kind ); void clearresizeevent( ); void getmouseclick( int kind, int& x, int& y ); bool ismouseclick( int kind ); bool isresizeevent( ); int mousex( ); int mousey( ); void registermousehandler( int kind, void h( int, int ) ); void setmousequeuestatus( int kind, bool status=true ); // Palette Functions palettetype *getdefaultpalette( ); void getpalette( palettetype *palette ); int getpalettesize( ); void setallpalette( palettetype *palette ); void setpalette( int colornum, int color ); void setrgbpalette( int colornum, int red, int green, int blue ); // Color Macros #define IS_BGI_COLOR(v) ( ((v) >= 0) && ((v) < 16) ) #define IS_RGB_COLOR(v) ( (v) & 0x03000000 ) #define RED_VALUE(v) int(GetRValue( converttorgb(v) )) #define GREEN_VALUE(v) int(GetGValue( converttorgb(v) )) #define BLUE_VALUE(v) int(GetBValue( converttorgb(v) )) #undef COLOR int COLOR(int r, int g, int b); // No longer a macro #ifdef __cplusplus }; #endif // --------------------------------------------------------------------------- #endif // WINBGI_H