File:  [RetroPC.NET] / np2 / lio / gline.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Fri Oct 17 02:58:27 2003 JST (22 years ago) by yui
Branches: mie
CVS tags: start, rel_036, VER_0_72, VER_0_71, VER_0_70
Neko Project II

#include	"compiler.h"
#include	"i286.h"
#include	"memory.h"
#include	"lio.h"


typedef struct {
	BYTE	x1[2];
	BYTE	y1[2];
	BYTE	x2[2];
	BYTE	y2[2];
	BYTE	pal;
	BYTE	type;
	BYTE	sw;
	BYTE	style_l;
	BYTE	style_h;
	BYTE	patleng;
	BYTE	off[2];
	BYTE	seg[2];
} MEMGLINE;


static void nor_linebox(SINT16 x1, SINT16 y1,
											SINT16 x2, SINT16 y2, BYTE pal) {

	lio_line(x1, x2, y1, pal);
	if (y1 != y2) {
		lio_line(x1, x2, y2, pal);
	}
	for (; y1<y2; y1++) {
		lio_pset(x1, y1, pal);
		lio_pset(x2, y1, pal);
	}
}

static void nor_lineboxfill(SINT16 x1, SINT16 y1,
											SINT16 x2, SINT16 y2, BYTE pal) {

	for (; y1<=y2; y1++) {
		lio_line(x1, x2, y1, pal);
	}
}

BYTE lio_gline(void) {

	MEMGLINE	dat;
	SINT16		x1;
	SINT16		y1;
	SINT16		x2;
	SINT16		y2;

	i286_memstr_read(I286_DS, I286_BX, &dat, sizeof(dat));
	if (dat.pal == 0xff) {
		dat.pal = lio.gcolor1.fgcolor;
	}
	else if (dat.pal >= lio.gcolor1.palmax) {
		return(5);
	}
	x1 = (SINT16)LOADINTELWORD(dat.x1);
	y1 = (SINT16)LOADINTELWORD(dat.y1);
	x2 = (SINT16)LOADINTELWORD(dat.x2);
	y2 = (SINT16)LOADINTELWORD(dat.y2);
	switch(dat.type) {
		case 0:
			break;

		case 1:
			nor_linebox(x1, y1, x2, y2, dat.pal);
			break;

		case 2:
			nor_lineboxfill(x1, y1, x2, y2, dat.pal);
			break;

		default:
			return(5);
	}
	return(0);
}


RetroPC.NET-CVS <cvs@retropc.net>