--- np2/lio/gline.c 2004/03/04 17:36:06 1.12 +++ np2/lio/gline.c 2005/02/07 14:46:12 1.14 @@ -7,17 +7,17 @@ typedef struct { - BYTE x1[2]; - BYTE y1[2]; - BYTE x2[2]; - BYTE y2[2]; - BYTE pal; - BYTE type; - BYTE sw; - BYTE style[2]; - BYTE patleng; - BYTE off[2]; - BYTE seg[2]; + UINT8 x1[2]; + UINT8 y1[2]; + UINT8 x2[2]; + UINT8 y2[2]; + UINT8 pal; + UINT8 type; + UINT8 sw; + UINT8 style[2]; + UINT8 patleng; + UINT8 off[2]; + UINT8 seg[2]; } GLINE; typedef struct { @@ -178,7 +178,7 @@ static void glineb(const _GLIO *lio, con // ---- -static void gbox(const _GLIO *lio, const LINEPT *lp, BYTE *tile, UINT leng) { +static void gbox(const _GLIO *lio, const LINEPT *lp, UINT8 *tile, UINT leng) { int x1; int y1; @@ -191,7 +191,7 @@ static void gbox(const _GLIO *lio, const UINT adrs[4]; UINT8 ope[4]; UINT16 pat; - BYTE *tterm; + UINT8 *tterm; UINT r; x1 = lp->x1; @@ -248,7 +248,7 @@ static void gbox(const _GLIO *lio, const tmp = (x1 - lio->draw.x1) & 7; do { r = GDCPATREVERSE(*tile); - *tile = (BYTE)((r << tmp) | (r >> (8 - tmp))); + *tile = (UINT8)((r << tmp) | (r >> (8 - tmp))); } while(++tile < tterm); tile -= leng; tmp = (y1 - lio->draw.y1) * planes; @@ -300,7 +300,7 @@ REG8 lio_gline(GLIO lio) { UINT16 pat; UINT leng; // UINT lengmin; - BYTE tile[256]; + UINT8 tile[256]; lio_updatedraw(lio); MEML_READSTR(CPU_DS, CPU_BX, &dat, sizeof(dat)); @@ -308,13 +308,13 @@ REG8 lio_gline(GLIO lio) { lp.y1 = (SINT16)LOADINTELWORD(dat.y1); lp.x2 = (SINT16)LOADINTELWORD(dat.x2); lp.y2 = (SINT16)LOADINTELWORD(dat.y2); + + TRACEOUT(("lio_gline %d,%d-%d,%d [%d]", lp.x1, lp.y1, lp.x2, lp.y2, dat.type)); + if (dat.pal == 0xff) { - lp.pal = lio->work.fgcolor; - } - else { - lp.pal = dat.pal; + dat.pal = lio->work.fgcolor; } - if (lp.pal >= lio->draw.palmax) { + if (dat.pal >= lio->draw.palmax) { goto gline_err; } pat = 0xffff; @@ -323,6 +323,7 @@ REG8 lio_gline(GLIO lio) { pat = (GDCPATREVERSE(dat.style[0]) << 8) + GDCPATREVERSE(dat.style[1]); } + lp.pal = dat.pal; if (dat.type == 0) { gline(lio, &lp, pat); } @@ -340,7 +341,16 @@ REG8 lio_gline(GLIO lio) { MEML_READSTR(LOADINTELWORD(dat.seg), LOADINTELWORD(dat.off), tile, leng); } - gbox(lio, &lp, tile, leng); + if (dat.sw != 1) { + lp.pal = dat.pal; + gbox(lio, &lp, tile, leng); + } + else { + lp.pal = dat.style[0]; + gbox(lio, &lp, tile, leng); + lp.pal = dat.pal; + glineb(lio, &lp, 0xffff); + } } else { goto gline_err;