diff --git a/src/dos/dev_con.h b/src/dos/dev_con.h index 1e7c62d2..b108c38a 100644 --- a/src/dos/dev_con.h +++ b/src/dos/dev_con.h @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: dev_con.h,v 1.25 2006-04-07 16:34:07 c2woody Exp $ */ +/* $Id: dev_con.h,v 1.26 2006-10-13 16:33:24 qbix79 Exp $ */ #include "dos_inc.h" #include "../ints/int10.h" @@ -50,7 +50,6 @@ private: Bit8s savecol; Bit8s saverow; } ansi; - }; bool device_CON::Read(Bit8u * data,Bit16u * size) { @@ -157,6 +156,7 @@ bool device_CON::Write(Bit8u * data,Bit16u * size) { continue; } /*ansi.esc and ansi.sci are true */ + Bit8u page = real_readb(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE); switch(data[count]){ case '0': case '1': @@ -267,47 +267,47 @@ bool device_CON::Write(Bit8u * data,Bit16u * size) { case 'H':/* Cursor Pos*/ if(ansi.data[0]==0) ansi.data[0]=1; if(ansi.data[1]==0) ansi.data[1]=1; - INT10_SetCursorPos(--(ansi.data[0]),--(ansi.data[1]),0); /*ansi=1 based, int10 is 0 based */ + INT10_SetCursorPos(--(ansi.data[0]),--(ansi.data[1]),page); /*ansi=1 based, int10 is 0 based */ ClearAnsi(); break; /* cursor up down and forward and backward only change the row or the col not both */ case 'A': /* cursor up*/ - col=CURSOR_POS_COL(0) ; - row=CURSOR_POS_ROW(0) ; + col=CURSOR_POS_COL(page) ; + row=CURSOR_POS_ROW(page) ; tempdata = (ansi.data[0]? ansi.data[0] : 1); if(tempdata > row) { row=0; } else { row-=tempdata;} - INT10_SetCursorPos(row,col,0); + INT10_SetCursorPos(row,col,page); ClearAnsi(); break; case 'B': /*cursor Down */ - col=CURSOR_POS_COL(0) ; - row=CURSOR_POS_ROW(0) ; + col=CURSOR_POS_COL(page) ; + row=CURSOR_POS_ROW(page) ; tempdata = (ansi.data[0]? ansi.data[0] : 1); if(tempdata + static_cast(row) >= ansi.nrows) { row = ansi.nrows - 1;} else { row += tempdata; } - INT10_SetCursorPos(row,col,0); + INT10_SetCursorPos(row,col,page); ClearAnsi(); break; case 'C': /*cursor forward */ - col=CURSOR_POS_COL(0); - row=CURSOR_POS_ROW(0); + col=CURSOR_POS_COL(page); + row=CURSOR_POS_ROW(page); tempdata=(ansi.data[0]? ansi.data[0] : 1); if(tempdata + static_cast(col) >= ansi.ncols) { col = ansi.ncols - 1;} else { col += tempdata;} - INT10_SetCursorPos(row,col,0); + INT10_SetCursorPos(row,col,page); ClearAnsi(); break; case 'D': /*Cursor Backward */ - col=CURSOR_POS_COL(0); - row=CURSOR_POS_ROW(0); + col=CURSOR_POS_COL(page); + row=CURSOR_POS_ROW(page); tempdata=(ansi.data[0]? ansi.data[0] : 1); if(tempdata > col) {col = 0;} else { col -= tempdata;} - INT10_SetCursorPos(row,col,0); + INT10_SetCursorPos(row,col,page); ClearAnsi(); break; case 'J': /*erase screen and move cursor home*/ @@ -315,9 +315,9 @@ bool device_CON::Write(Bit8u * data,Bit16u * size) { if(ansi.data[0]!=2) {/* every version behaves like type 2 */ LOG(LOG_IOCTL,LOG_NORMAL)("ANSI: esc[%dJ called : not supported handling as 2",ansi.data[0]); } - INT10_ScrollWindow(0,0,255,255,0,ansi.attr,0xFF); + INT10_ScrollWindow(0,0,255,255,0,ansi.attr,page); ClearAnsi(); - INT10_SetCursorPos(0,0,0); + INT10_SetCursorPos(0,0,page); break; case 'h': /* SET MODE (if code =7 enable linewrap) */ case 'I': /* RESET MODE */ @@ -325,20 +325,20 @@ bool device_CON::Write(Bit8u * data,Bit16u * size) { ClearAnsi(); break; case 'u': /* Restore Cursor Pos */ - INT10_SetCursorPos(ansi.saverow,ansi.savecol,0); + INT10_SetCursorPos(ansi.saverow,ansi.savecol,page); ClearAnsi(); break; case 's': /* SAVE CURSOR POS */ - ansi.savecol=CURSOR_POS_COL(0); - ansi.saverow=CURSOR_POS_ROW(0); + ansi.savecol=CURSOR_POS_COL(page); + ansi.saverow=CURSOR_POS_ROW(page); ClearAnsi(); break; case 'K':/* erase till end of line (don't touch cursor) */ - col = CURSOR_POS_COL(0); - row = CURSOR_POS_ROW(0); - INT10_WriteChar(' ',ansi.attr,0,ansi.ncols-col,true); //Use this one to prevent scrolling when end of screen is reached + col = CURSOR_POS_COL(page); + row = CURSOR_POS_ROW(page); + INT10_WriteChar(' ',ansi.attr,page,ansi.ncols-col,true); //Use this one to prevent scrolling when end of screen is reached //for(i = col;i<(Bitu) ansi.ncols; i++) INT10_TeletypeOutputAttr(' ',ansi.attr,true); - INT10_SetCursorPos(row,col,0); + INT10_SetCursorPos(row,col,page); ClearAnsi(); break; case 'l':/* (if code =7) disable linewrap */