dos_compilers/Zortech C++ v206/INCLUDE/FG.H

331 lines
13 KiB
C++
Raw Normal View History

2024-07-02 16:30:38 +02:00
/*_ fg.h Fri Mar 24 1989 Modified by: Walter Bright */
/* Copyright (C) 1987-1989 by Northwest Software */
/* All Rights Reserved */
/* Originally written by Joe Huffman */
#ifndef FG_H
#define FG_H 1
#if __cplusplus
extern "C" {
#endif
/* Definition of basic coordinate system */
/************************************
* Coordinate system (right-handed):
*
* Y2 +
* |
* |
* |
* Y1 +-----------+
* X1 X2
*
* Where:
* X1 <= X2
* Y1 <= Y2
*/
typedef int fg_coord_t; /* data type for all coordinates */
/*****************************
* Coordinate box.
* box[FG_X1] = x coordinate of left edge
* box[FG_Y1] = y coordinate of bottom edge
* box[FG_X2] = x coordinate of right edge
* box[FG_Y2] = y coordinate of top edge
*/
typedef fg_coord_t fg_box_t[4];
typedef fg_coord_t far *fg_pbox_t; /* pointer to a box */
typedef fg_coord_t const far *fg_const_pbox_t;/* pointer to a const box */
typedef fg_coord_t fg_line_t[4];
typedef fg_coord_t far *fg_pline_t; /* pointer to a line */
typedef fg_coord_t const far *fg_const_pline_t;/* pointer to a const line */
#define FG_X1 0
#define FG_Y1 1
#define FG_X2 2
#define FG_Y2 3
/* Midpoint of 2 coordinates */
#define fg_coord_midpoint(x1,x2) (((x1) + (x2)) / 2)
/* Determine # of pixels high a box is */
#define fg_box_height(b) ((b)[FG_Y2] - (b)[FG_Y1] + 1)
/* Determine # of pixels wide a box is */
#define fg_box_width(b) ((b)[FG_X2] - (b)[FG_X1] + 1)
/* The number of bytes to allocate for a matrix with a bounding box 'b'. */
#define fg_matrix_size(b) (sizeof(char)*((b)[FG_X2]+1+7)/8*((b)[FG_Y2]+1))
/* The number of pixels in a box 'b'. Helpful for calculating memory for
a fg_boxread. */
#define fg_box_area(b) (((long)fg_box_width(b))*((long)fg_box_height(b)))
/* Fill in the coordinates of a line. */
#define fg_make_line(l,x1,y1,x2,y2) ((l)[FG_X1]=(x1),(l)[FG_Y1]=(y1),\
(l)[FG_X2]=(x2),(l)[FG_Y2]=(y2))
/* Fill in the coordinates of a box. */
#define fg_make_box(b,x1,y1,x2,y2) ((b)[FG_X1]=(x1),(b)[FG_Y1]=(y1),\
(b)[FG_X2]=(x2),(b)[FG_Y2]=(y2))
/****** Return TRUE if line is horizontal ******/
#define fg_line_horiz(line) ((line)[FG_Y1] == (line)[FG_Y2])
/****** Return TRUE if line is vertical ******/
#define fg_line_vert(line) ((line)[FG_X1] == (line)[FG_X2])
/* Determine if line is 0 length */
#define fg_line_zerolength(ln)\
((ln)[FG_X1] == (ln)[FG_X2] && (ln)[FG_Y1] == (ln)[FG_Y2])
/* Copy boxes */
#define fg_box_cpy(to,from) ((fg_pbox_t)fg_line_cpy((to),(from)))
/* Change the definition of a FG_COLOR. */
/* As in 'fg_setcolornum(FG_WHITE, 7);' */
#define fg_setcolornum(old,new) ((old) = (new))
/*************************
* Rotation values:
*/
#define FG_ROT0 0
#define FG_ROT90 1
#define FG_ROT180 2
#define FG_ROT270 3
typedef unsigned char fg_color_t;
typedef struct FG_HANDLE far *fg_handle_t;
/* Defines for the type of display encountered */
#define FG_NULL 0 /* all graphics are routed to bit bucket */
/* The following correspond to BIOS video modes: */
#define FG_CGAMEDRES 4 /* IBM CGA in 320*200 color (mode 0x04) */
#define FG_CGAHIRES 6 /* IBM CGA in 640*200 (mode 0x06) */
#define FG_EGACOLOR 0x0E /* EGA with regular color display (mode 0x0E) */
#define FG_EGAMONO 0x0F /* EGA with IBM monochrome monitor (mode 0x0F) */
#define FG_EGAECD 0x10 /* EGA with enhanced color display (mode 0x10) */
#define FG_VGA11 0x11 /* IBM VGA in 640*480, 1 color */
#define FG_VGA12 0x12 /* IBM VGA in 640*480, 16 colors */
#define FG_VGA13 0x13 /* IBM VGA in 320*200, 256 colors */
#define FG_PARADISEHIRES 0x58/* PARADISE VGA 800*600, 16 colors */
/* Other values for fg_display: */
#define FG_VEGAVGAHIRES 0x62 /* VIDEO 7 VEGA VGA in 800 x 600, 16 colors */
#define FG_EVGAHIRES 0x70 /* Everex EVGA in 800 x 600, 16 colors */
#define FG_HERCHALF 2 /* Hercules monochrome, 1 display page */
#define FG_HERCFULL 3 /* Hercules monochrome, 2 display pages */
#define FG_TOSHIBA -6 /* Toshiba J-3100 */
#define FG_8514A -10 /* IBM 8514A */
/* Used for filling outlines of pixels, see fg_outlinefill(). */
#define FG_FILL_ON_RIGHT 1 /* Don't change these without careful */
#define FG_FILL_ON_LEFT 0 /* consideration of the source code. See */
/* the static function delete_excess. */
/* Collect global variables into a single structure. */
struct fg_state
{
int (* cdecl far init_p)(void);
#define FG_LINE_MAX 10
int linetype[FG_LINE_MAX];
#define FG_COLOR_MAX 20
int color[FG_COLOR_MAX];
int saddr;
char far *fontptr, far *fontptr2;
int activepage;
int displaypage;
fg_box_t charbox;
int display; /* FGxxxxx */
fg_box_t displaybox;
long ncolormap;
int nsimulcolor;
unsigned numpages;
int pixelx, pixely;
/* Function pointers (initialized by fg_init_xxxx()) */
void (* cdecl far blit_p)(fg_const_pbox_t, fg_coord_t, fg_coord_t,int,int);
void (* cdecl far drawarc_p) (fg_color_t,int,int,fg_coord_t,fg_coord_t,
fg_coord_t,int,int,fg_const_pbox_t);
void (* cdecl far drawdot_p) (fg_color_t,int,int,fg_coord_t,fg_coord_t);
void (* cdecl far drawline_p)(fg_color_t,int,int,int,fg_const_pline_t);
void (* cdecl far drawlinep_p)(fg_color_t,int,int,int,fg_const_pline_t);
void (* cdecl far drawmatrix_p) (fg_color_t,int,int,int,fg_coord_t,
fg_coord_t,char far *, fg_const_pbox_t,fg_const_pbox_t);
void (* cdecl far fillbox_p) (fg_color_t, int, int, fg_const_pbox_t);
void (* cdecl far flush_p)(void);
void (* cdecl far getcolormap_p)(fg_color_t far *, int);
void (* cdecl far putc_p)(fg_color_t,int,int,int,fg_coord_t,
fg_coord_t,char,fg_const_pbox_t);
void (* cdecl far readbox_p) (fg_const_pbox_t, fg_color_t far *);
fg_color_t (* cdecl far readdot_p)(fg_coord_t,fg_coord_t);
void (* cdecl far setcolormap_p) (const fg_color_t far *, int);
void (* cdecl far setdisplaypage_p)(unsigned int);
void (* cdecl far setactivepage_p)(unsigned int);
void (* cdecl far setlinepattern_p)(int, int);
void (* cdecl far term_p)(void);
void (* cdecl far writebox_p)(fg_const_pbox_t, const fg_color_t far *);
char text_rows, attribute, text_mode;
};
extern struct fg_state cdecl fg;
/* For backward compatibility. */
#define fg_activepage fg.activepage
#define fg_charbox fg.charbox
#define fg_color fg.color
#define fg_display fg.display
#define fg_displaybox fg.displaybox
#define fg_displaypage fg.displaypage
#define fg_linetype fg.linetype
#define fg_ncolormap fg.ncolormap
#define fg_nsimulcolor fg.nsimulcolor
#define fg_numpages fg.numpages
#define fg_pixelx fg.pixelx
#define fg_pixely fg.pixely
void cdecl far fg_assert(const char far *,const char far *,unsigned);
int cdecl far fg_get_type(void);
fg_handle_t cdecl far fg_save(fg_const_pbox_t);
int cdecl far fg_init_all(void);
int cdecl far fg_init_cga(void);
int cdecl far fg_init_cgamedres(void);
int cdecl far fg_init_egaecd(void);
int cdecl far fg_init_egamono(void);
int cdecl far fg_init_egacolor(void);
int cdecl far fg_init_herc(void);
int cdecl far fg_init_herchalf(void);
int cdecl far fg_init_hercfull(void);
int cdecl far fg_init_paradisehires(void);
int cdecl far fg_init_vga11(void);
int cdecl far fg_init_vga12(void);
int cdecl far fg_init_vga13(void);
int cdecl far fg_init_evgahires(void);
int cdecl far fg_init_vegavgahires(void);
int cdecl far fg_init_toshiba(void);
int cdecl far fg_init_8514a(void);
int cdecl far fg_box_enclose(fg_const_pbox_t b1, fg_const_pbox_t b2);
int cdecl far fg_pt_inbox(fg_const_pbox_t clip,fg_coord_t x,fg_coord_t y);
int cdecl far fg_getfillside (const fg_coord_t far *p, unsigned int vertices);
unsigned cdecl far fg_linepixels (fg_const_pline_t line);
fg_pline_t cdecl far fg_line_cpy(fg_pline_t to, fg_const_pline_t from);
int cdecl far fg_lineclip(fg_const_pbox_t clip, fg_const_pline_t fline,
fg_pline_t lin);
void cdecl far fg_setenv_variable (const char far *new_string);
void cdecl far fg_setpalette (fg_color_t color_num, fg_color_t red,
fg_color_t green,
fg_color_t blue);
int cdecl far cdecl fg_fillpolygon (fg_color_t color, int mode, int mask,
unsigned int vertices, const fg_coord_t far *polygon,
fg_const_pbox_t clipbox);
void cdecl far fg_restore (fg_handle_t);
void cdecl far fg_drawellipse(fg_color_t,int,int,fg_coord_t,fg_coord_t,
fg_coord_t, fg_coord_t,int,int,fg_const_pbox_t);
void cdecl far fg_drawlineclip (fg_color_t color, int mode, int mask,
int fg_line_type, fg_const_pline_t line,
fg_const_pbox_t clip);
void cdecl far fg_drawlinepclip (fg_color_t color, int mode, int mask,
int fg_line_type, fg_const_pline_t line,
fg_const_pbox_t clip);
void cdecl far fg_drawbox (fg_color_t, int, int, int, fg_const_pbox_t,
fg_const_pbox_t);
void cdecl far fg_drawpolygon (fg_color_t color, int mode, int mask, int
line_type, unsigned int vertices, const fg_coord_t far
*polygon, fg_const_pbox_t clipbox);
void cdecl far fg_filloutline (fg_color_t color, int mode, int mask,
const fg_coord_t far *out_line, fg_coord_t far *buffer,
unsigned int pixels, int fill_side, fg_const_pbox_t clipbox);
void cdecl far fg_puts (fg_color_t,int,int,int,fg_coord_t,fg_coord_t,
char far *, fg_const_pbox_t);
void cdecl far fg_adjustxy (int, int, fg_coord_t far *, fg_coord_t far *,
fg_const_pbox_t);
void cdecl far fg_fill(fg_coord_t,fg_coord_t,fg_color_t,fg_color_t);
void cdecl far fg_traverseline (int line_type, fg_const_pline_t ln_ptr,
fg_coord_t far *pt_pairs);
void cdecl far fg_drawthickline (fg_color_t,int,int,int,fg_const_pline_t,
fg_const_pbox_t,int);
/* Use function pointers for lowest level routines */
#define fg_blit (*fg.blit_p)
#define fg_drawarc (*fg.drawarc_p)
#define fg_drawdot (*fg.drawdot_p)
#define fg_drawline (*fg.drawline_p)
#define fg_drawlinep (*fg.drawlinep_p)
#define fg_drawmatrix (*fg.drawmatrix_p)
#define fg_fillbox (*fg.fillbox_p)
#define fg_flush (*fg.flush_p)
#define fg_getcolormap (*fg.getcolormap_p)
#define fg_init (*fg.init_p)
#define fg_putc (*fg.putc_p)
#define fg_readbox (*fg.readbox_p)
#define fg_readdot (*fg.readdot_p)
#define fg_setcolormap (*fg.setcolormap_p)
#define fg_setdisplaypage (*fg.setdisplaypage_p)
#define fg_setactivepage (*fg.setactivepage_p)
#define fg_setlinepattern (*fg.setlinepattern_p)
#define fg_term (*fg.term_p)
#define fg_writebox (*fg.writebox_p)
/* Writing modes */
#define FG_MODE_XOR 3
#define FG_MODE_SET 0
/* Line types */
#define FG_LINE_SOLID 0
#define FG_LINE_LONG_DASH 1
#define FG_LINE_MEDIUM_DOTTED 2
#define FG_LINE_DASH_DOTTED 3
#define FG_LINE_MEDIUM_DASHED 4
#define FG_LINE_DASH_W_2_DOTS 5
#define FG_LINE_SHORT_DASH 6
#define FG_LINE_DENSE_DOTTED 7
#define FG_LINE_SPARSE_DOTTED 8
#define FG_LINE_USER_DEFINED 9
/* Values for color */
#define FG_BLACK fg.color[0]
#define FG_BLUE fg.color[1]
#define FG_GREEN fg.color[2]
#define FG_CYAN fg.color[3]
/* Cyan is the same as BLUE_GREEN. */
#define FG_BLUE_GREEN fg.color[3]
#define FG_RED fg.color[4]
#define FG_MAGENTA fg.color[5]
/* Purple is the same as magenta. */
#define FG_PURPLE fg.color[5]
#define FG_YELLOW fg.color[6]
#define FG_WHITE fg.color[7]
#define FG_GRAY fg.color[8]
#define FG_LIGHT_BLUE fg.color[9]
#define FG_LIGHT_GREEN fg.color[10]
#define FG_LIGHT_CYAN fg.color[11]
/* Light blue-green is the same as light_cyan. */
#define FG_LIGHT_BLUE_GREEN fg.color[11]
#define FG_LIGHT_RED fg.color[12]
#define FG_LIGHT_MAGENTA fg.color[13]
#define FG_BROWN fg.color[14]
/* normally an intense white */
#define FG_LIGHT_WHITE fg.color[15]
/* Same as LIGHT_WHITE */
#define FG_HIGHLIGHT fg.color[15]
/* blinking white */
#define FG_BLINK fg.color[16]
#if __cplusplus
}
#endif
#endif /* ifndef FG_H */