home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Vectronix 2
/
VECTRONIX2.iso
/
FILES_07
/
LATTIC_3.ZIP
/
HEADERS
/
LINEA.H
< prev
next >
Wrap
C/C++ Source or Header
|
1990-03-05
|
16KB
|
370 lines
/*
* linea.h - vdi primitives interface file
*
* Started 31/8/89 Alex G. Kiernan
*
* Copyright (c) 1989 HiSoft
*/
#ifndef _LINEA_H
#define _LINEA_H
/* Lattice 3 flavour */
typedef struct linea_info
{
long li_d0; /* linea data structure pointer */
struct la_data *li_a0; /* linea data structure pointer */
struct la_font **li_a1; /* system font vector */
long (*li_a2)(); /* linea function vector */
} LINEA_INFO;
extern struct linea_info la_info;
/* Mark Williams flavour */
struct linea_init
{
long li_d0; /* linea data structure pointer */
struct la_data *li_a0; /* linea data structure pointer */
struct la_font **li_a1; /* system font vector */
long (*li_a2)(); /* linea function vector */
};
extern struct linea_init la_init;
typedef struct la_data
{
short ld_vplanes; /* number of video planes */
short ld_vwrap; /* number of bytes/video line */
short *ld_contrl; /* pointer to CONTRL array */
short *ld_intin; /* pointer to INTIN array */
short *ld_ptsin; /* pointer to PTSIN array */
short *ld_intout; /* pointer to INTOUT array */
short *ld_ptsout; /* pointer to PTSOUT array */
short ld_colbit[4]; /* colour bit-plane[i] value */
short ld_lstlin; /* plot last pixel flag */
short ld_lnmask; /* line-style mask */
short ld_wmode; /* writing mode 0:replace, 1:transparent,
2:exclusive OR, 3:inverse transparent */
short ld_x1; /* X1 coordinate */
short ld_y1; /* Y1 coordinate */
short ld_x2; /* X2 coordinate */
short ld_y2; /* Y2 coordinate */
short *ld_patptr; /* fill pattern pointer */
short ld_patmsk; /* fill pattern mask */
short ld_mfill; /* multi-plane fill flag */
short ld_clip; /* clipping flag */
short ld_xmincl; /* minimum X clipping value */
short ld_ymincl; /* minimum Y clipping value */
short ld_xmaxcl; /* maximum X clipping value */
short ld_ymaxcl; /* maximum Y clipping value */
short ld_xdda; /* accumulator for textblt dda */
short ld_ddainc; /* fixed point scale factor */
short ld_scaldir; /* scale direction flag */
short ld_mono; /* current font is monospaced */
short ld_srcx; /* X coord of character in font */
short ld_srcy; /* Y coord of character in font */
short ld_dstx; /* X coord of character on screen */
short ld_dsty; /* Y coord of character on screen */
short ld_delx; /* width of character */
short ld_dely; /* height of character */
void *ld_fbase; /* pointer to start of font form */
short ld_fwidth; /* width of font form */
short ld_style; /* textblt special effects flags */
short ld_litemsk; /* lightening mask */
short ld_skewmsk; /* skewing mask */
short ld_weight; /* thickening factor */
short ld_roff; /* skew offset above baseline */
short ld_loff; /* skew offset below baseline */
short ld_scale; /* scaling flag */
short ld_chup; /* character rotation vector */
short ld_textfg; /* text foreground colour */
void *ld_scrtchp; /* text special effects buffer */
short ld_scrpt2; /* offset to scaling buffer from above */
short ld_textbg; /* text background colour */
short ld_copytran; /* copy raster form type flag */
int (*ld_seedabort)(void); /* seedfill end detect function */
} LA_DATA;
typedef struct la_ext
{
long ld_resvd1;
struct la_font *ld_cur_font; /* pointer to current font header */
short ld_resvd2[23];
short ld_m_pos_hx; /* mouse x hot spot */
short ld_m_pos_hy; /* mouse y hot spot */
short ld_m_planes; /* writing mode for mouse */
short ld_m_cdb_bg; /* mouse background colour */
short ld_m_cdb_fg; /* mouse foreground colour */
short ld_mask_form[32]; /* mouse mask and form */
short ld_inq_tab[45]; /* vq_extnd information */
short ld_dev_tab[45]; /* v_opnwk information */
short ld_gcurx; /* current mouse x position */
short ld_gcury; /* current mouse x position */
short ld_m_hid_ct; /* mouse hide count */
short ld_mouse_bt; /* mouse button status */
short ld_req_col[3][16]; /* internal vq_color lookup */
short ld_siz_tab[15]; /* current text, line and marker sizes */
short ld_resvd3;
short ld_resvd4;
short *ld_cur_work; /* current vwork attributes */
struct la_font *ld_def_font; /* default font header */
struct la_font *ld_font_ring[4];/* vdi font ring */
short ld_font_count; /* number of fonts in font ring */
short ld_resvd5[45];
unsigned char ld_cur_ms_stat; /* mouse status */
char ld_resvd6;
short ld_v_hid_cnt; /* cursor hide count */
short ld_cur_x; /* mouse x position */
short ld_cur_y; /* mouse y position */
char ld_cur_flag; /* mouse draw status */
char ld_mouse_flag; /* mouse processing enabled */
long ld_resvd7;
short ld_v_sav_xy[2]; /* saved cursor xy position */
short ld_save_len; /* height of saved form */
short *ld_save_addr; /* screen address of saved form */
short ld_save_stat; /* save status */
long ld_save_area[4][16]; /* form save area */
void (*ld_user_tim)(); /* user timer vector */
void (*ld_next_tim)(); /* next timer vector */
void (*ld_user_but)(); /* user button vector */
void (*ld_user_cur)(); /* user cursor vector */
void (*ld_user_mot)(); /* user motion vector */
short ld_cel_ht; /* cell height */
short ld_cel_mx; /* max x cells */
short ld_cel_my; /* max y cells */
short ld_cel_wr; /* displacement to next vertical cell */
short ld_col_bg; /* background colour index */
short ld_col_fg; /* foreground colour index */
void *ld_cur_ad; /* cursor address */
short ld_cur_off; /* offset to first cell */
short ld_cur_xy[2]; /* cursor xy position */
char ld_cur_cnt; /* cursor flash period */
char ld_cur_tim; /* cursor flash countdown */
void *ld_fnt_ad; /* address of font data */
short ld_fnt_nd; /* last ade in font */
short ld_fnt_st; /* first ade in font */
short ld_fnt_wr; /* font form width */
short ld_x_max; /* horizontal pixel resolution */
void *ld_off_ad; /* pointer to font offset table */
short ld_status; /* cursor status */
short ld_y_max; /* vertical pixel resolution */
short ld_bytes_lin; /* width of destination form */
} LA_EXT;
/* Lattice 3 compatability macros */
#define VPLANES la_info.li_a0->ld_vplanes
#define VWRAP la_info.li_a0->ld_vwrap
#define CONTRL la_info.li_a0->ld_contrl
#define INTIN la_info.li_a0->ld_intin
#define PTSIN la_info.li_a0->ld_ptsin
#define INTOUT la_info.li_a0->ld_intout
#define PTSOUT la_info.li_a0->ld_ptsout
#define COLBIT0 la_info.li_a0->ld_colbit[0]
#define COLBIT1 la_info.li_a0->ld_colbit[1]
#define COLBIT2 la_info.li_a0->ld_colbit[2]
#define COLBIT3 la_info.li_a0->ld_colbit[3]
#define LSTLIN la_info.li_a0->ld_lstlin
#define LNMASK la_info.li_a0->ld_lnmask
#define WMODE la_info.li_a0->ld_wmode
#define X1 la_info.li_a0->ld_x1
#define Y1 la_info.li_a0->ld_y1
#define X2 la_info.li_a0->ld_x2
#define Y2 la_info.li_a0->ld_y2
#define PATPTR la_info.li_a0->ld_patptr
#define PATMSK la_info.li_a0->ld_patmsk
#define MFILL la_info.li_a0->ld_mfill
#define CLIP la_info.li_a0->ld_clip
#define XMINCL la_info.li_a0->ld_xmincl
#define YMINCL la_info.li_a0->ld_ymincl
#define XMAXCL la_info.li_a0->ld_xmaxcl
#define YMAXCL la_info.li_a0->ld_ymaxcl
#define XDDA la_info.li_a0->ld_xdda
#define DDAINC la_info.li_a0->ld_ddainc
#define SCALDIR la_info.li_a0->ld_scaldir
#define MONO la_info.li_a0->ld_mono
#define SRCX la_info.li_a0->ld_srcx
#define SRCY la_info.li_a0->ld_srcy
#define DSTX la_info.li_a0->ld_dstx
#define DSTY la_info.li_a0->ld_dsty
#define DELX la_info.li_a0->ld_delx
#define DELY la_info.li_a0->ld_dely
#define FBASE la_info.li_a0->ld_fbase
#define FWIDTH la_info.li_a0->ld_fwidth
#define STYLE la_info.li_a0->ld_style
#define LITEMSK la_info.li_a0->ld_litemsk
#define SKEWMSK la_info.li_a0->ld_skewmsk
#define WEIGHT la_info.li_a0->ld_weight
#define ROFF la_info.li_a0->ld_roff
#define LOFF la_info.li_a0->ld_loff
#define SCALE la_info.li_a0->ld_scale
#define CHUP la_info.li_a0->ld_chup
#define TEXTFG la_info.li_a0->ld_textfg
#define SCRTCHP la_info.li_a0->ld_scrtchp
#define SCRPT2 la_info.li_a0->ld_scrpt2
#define TEXTBG la_info.li_a0->ld_textbg
#define COPYTRAN la_info.li_a0->ld_copytran
#define SEEDABORT la_info.li_a0->ld_seedabort
#define V_CUR_FONT ((LA_EXT *)la_info.li_a0-1)->ld_cur_font
#define V_M_POS_HX ((LA_EXT *)la_info.li_a0-1)->ld_m_pos_hx
#define V_M_POS_HY ((LA_EXT *)la_info.li_a0-1)->ld_m_pos_hy
#define V_M_PLANES ((LA_EXT *)la_info.li_a0-1)->ld_m_planes
#define V_M_CDB_BG ((LA_EXT *)la_info.li_a0-1)->ld_m_cdb_bg
#define V_M_CDB_FG ((LA_EXT *)la_info.li_a0-1)->ld_m_cdb_fg
#define V_MASK_FORM ((LA_EXT *)la_info.li_a0-1)->ld_mask_form
#define V_INQ_TAB ((LA_EXT *)la_info.li_a0-1)->ld_inq_tab
#define V_DEV_TAB ((LA_EXT *)la_info.li_a0-1)->ld_dev_tab
#define V_GCURX ((LA_EXT *)la_info.li_a0-1)->ld_gcurx
#define V_GCURY ((LA_EXT *)la_info.li_a0-1)->ld_gcury
#define V_M_HID_CT ((LA_EXT *)la_info.li_a0-1)->ld_m_hid_ct
#define V_MOUSE_BT ((LA_EXT *)la_info.li_a0-1)->ld_mouse_bt
#define V_REQ_COL ((LA_EXT *)la_info.li_a0-1)->ld_req_col
#define V_SIZ_TAB ((LA_EXT *)la_info.li_a0-1)->ld_siz_tab
#define V_CUR_WORK ((LA_EXT *)la_info.li_a0-1)->ld_cur_work
#define V_DEF_FONT ((LA_EXT *)la_info.li_a0-1)->ld_def_font
#define V_FONT_RING ((LA_EXT *)la_info.li_a0-1)->ld_font_ring
#define V_FONT_COUNT ((LA_EXT *)la_info.li_a0-1)->ld_font_count
#define V_CUR_MS_STAT ((LA_EXT *)la_info.li_a0-1)->ld_cur_ms_stat
#define V_V_HID_CNT ((LA_EXT *)la_info.li_a0-1)->ld_v_hid_cnt
#define V_CUR_X ((LA_EXT *)la_info.li_a0-1)->ld_cur_x
#define V_CUR_Y ((LA_EXT *)la_info.li_a0-1)->ld_cur_y
#define V_CUR_FLAG ((LA_EXT *)la_info.li_a0-1)->ld_cur_flag
#define V_MOUSE_FLAG ((LA_EXT *)la_info.li_a0-1)->ld_mouse_flag
#define V_V_SAV_XY ((LA_EXT *)la_info.li_a0-1)->ld_v_sav_xy
#define V_SAVE_LEN ((LA_EXT *)la_info.li_a0-1)->ld_save_len
#define V_SAVE_ADDR ((LA_EXT *)la_info.li_a0-1)->ld_save_addr
#define V_SAVE_STAT ((LA_EXT *)la_info.li_a0-1)->ld_save_stat
#define V_SAVE_AREA ((LA_EXT *)la_info.li_a0-1)->ld_save_area
#define V_USER_TIM ((LA_EXT *)la_info.li_a0-1)->ld_user_tim
#define V_NEXT_TIM ((LA_EXT *)la_info.li_a0-1)->ld_next_tim
#define V_USER_BUT ((LA_EXT *)la_info.li_a0-1)->ld_user_but
#define V_USER_CUR ((LA_EXT *)la_info.li_a0-1)->ld_user_cur
#define V_USER_MOT ((LA_EXT *)la_info.li_a0-1)->ld_user_mot
#define V_CEL_HT ((LA_EXT *)la_info.li_a0-1)->ld_cel_ht
#define V_CEL_MX ((LA_EXT *)la_info.li_a0-1)->ld_cel_mx
#define V_CEL_MY ((LA_EXT *)la_info.li_a0-1)->ld_cel_my
#define V_CEL_WR ((LA_EXT *)la_info.li_a0-1)->ld_cel_wr
#define V_COL_BG ((LA_EXT *)la_info.li_a0-1)->ld_col_bg
#define V_COL_FG ((LA_EXT *)la_info.li_a0-1)->ld_col_fg
#define V_CUR_AD ((LA_EXT *)la_info.li_a0-1)->ld_cur_ad
#define V_CUR_OFF ((LA_EXT *)la_info.li_a0-1)->ld_cur_off
#define V_CUR_CX ((LA_EXT *)la_info.li_a0-1)->ld_cur_xy[0]
#define V_CUR_CY ((LA_EXT *)la_info.li_a0-1)->ld_cur_xy[1]
#define V_CUR_CNT ((LA_EXT *)la_info.li_a0-1)->ld_cur_cnt
#define V_CUR_TIM ((LA_EXT *)la_info.li_a0-1)->ld_cur_tim
#define V_FNT_AD ((LA_EXT *)la_info.li_a0-1)->ld_fnt_ad
#define V_FNT_ND ((LA_EXT *)la_info.li_a0-1)->ld_fnt_nd
#define V_FNT_ST ((LA_EXT *)la_info.li_a0-1)->ld_fnt_st
#define V_FNT_WR ((LA_EXT *)la_info.li_a0-1)->ld_fnt_wr
#define V_X_MAX ((LA_EXT *)la_info.li_a0-1)->ld_x_max
#define V_OFF_AD ((LA_EXT *)la_info.li_a0-1)->ld_off_ad
#define V_STATUS ((LA_EXT *)la_info.li_a0-1)->ld_status
#define V_Y_MAX ((LA_EXT *)la_info.li_a0-1)->ld_y_max
#define BYTES_LIN ((LA_EXT *)la_info.li_a0-1)->ld_bytes_lin
#define putpixel(x,y,v) ((PTSIN[0]=(x)),(PTSIN[1]=(y)),(INTIN[0]=(v)),linea1())
#define getpixel(x,y) ((PTSIN[0]=(x)),(PTSIN[1]=(y)),linea2())
#define showmouse(show) (INTIN[0]=show,linea9())
#define hidemouse() lineaa()
#define mousehidden (V_M_HID_CT)
typedef struct la_blk
{
short bl_xmin; /* minimum x */
short bl_ymin; /* minimum y */
short *bl_form; /* word aligned memory form */
short bl_nxwd; /* offset to next word in line */
short bl_nxln; /* offset to next line in plane */
short bl_nxpl; /* offset to next plane */
} LA_BLK;
typedef struct la_blit
{
short bb_b_wd; /* width of block in pixels */
short bb_b_ht; /* height of block in pixels */
short bb_plane_ct; /* number of planes to blit */
short bb_fg_col; /* foreground colour */
short bb_bg_col; /* background colour */
char bb_op_tab[4]; /* Logic for fg x bg combination */
struct la_blk bb_s; /* source info block */
struct la_blk bb_d; /* destination info block */
short *bb_p_addr; /* pattern buffer address */
short bb_p_nxln; /* offset to next line in pattern */
short bb_p_nxpl; /* offset to next plane in pattern */
short bb_p_mask; /* pattern index mask */
char bb_fill[24]; /* work space */
} LA_BLIT;
typedef struct la_sprite
{
short ls_xhot; /* X hot spot offset */
short ls_yhot; /* Y hot spot offset */
short ls_form; /* 1 for VDI, -1 for XOR */
short ls_bgcol; /* background colour index */
short ls_fgcol; /* foreground colour index */
short ls_image[32]; /* background/foreground interleaved image */
} LA_SPRITE;
typedef struct la_font
{
short font_id; /* face identifier */
short font_size; /* font size in points */
char font_name[32]; /* face name */
short font_low_ade; /* lowest ASCII value in face */
short font_hi_ade; /* highest ASCII value in face */
short font_top_dst; /* top line distance */
short font_ascent_dst; /* ascent line distance */
short font_half_dst; /* half line distance */
short font_descent_dst; /* descent line distance */
short font_bottom_dist; /* bottom line distance */
short font_fatest; /* width of widest char in font */
short font_fat_cell; /* width of widest char cell in font */
short font_left_off; /* left offset */
short font_right_off; /* right offset */
short font_thickening; /* no. of pixels to widen chars */
short font_underline; /* width in pixels of underline */
short font_lightening; /* mask used to drop pixels out */
short font_skewing; /* mask used to determine skewing */
short font_flags; /* font flags */
short *font_horiz_off; /* pointer to horizontal offset table */
short *font_char_off; /* pointer to char offset table */
void *font_data; /* pointer to font data */
short font_width; /* font width */
short font_height; /* font height */
struct la_font *font_next; /* pointer to next font */
} LA_FONT;
struct la_data *linea0(void);
void linea1(void);
short linea2(void);
void linea3(void);
void linea4(void);
void linea5(void);
void linea6(void);
void linea7(LA_BLIT *);
void linea8(void);
void linea9(void);
void lineaa(void);
void lineab(void);
void lineac(void *);
void linead(int,int,LA_SPRITE *,void *);
void lineae(void);
void lineaf(void);
#pragma inline linea1() {register a2,d2; "a001";}
#pragma inline d0=linea2() {register a2,d2; "a002";}
#pragma inline linea3() {register a2,d2; "a003";}
#pragma inline linea4() {register a2,d2; "a004";}
#pragma inline linea5() {register a2,d2; "a005";}
#pragma inline linea6() {register a2,d2; "a006";}
#pragma inline linea7(a6) {register a2,d2; "a007";}
#pragma inline linea8() {register a2,d2; "a008";}
#pragma inline linea9() {register a2,d2; "a009";}
#pragma inline lineaa() {register a2,d2; "a00a";}
#pragma inline lineab() {register a2,d2; "a00b";}
#pragma inline lineac(a2) {register a2,d2,a6; "a00c";}
#pragma inline linead(d0,d1,a0,a2) {register d2,a6; "a00d";}
#pragma inline lineae() {register a2,d2; "a00e";}
#pragma inline lineaf() {register a2,d2; "a00f";}
#endif