diff --git a/src/conio/ansi_cio.c b/src/conio/ansi_cio.c index c26774f8e63e7503d222e474452766b5f7f72312..eb79ed69f3ffb51c9cc781555fbb01c42263aa46 100644 --- a/src/conio/ansi_cio.c +++ b/src/conio/ansi_cio.c @@ -126,17 +126,29 @@ void ansi_sendch(char ch) if(!ch) ch=' '; if(ansi_row<ansi_rows-1 || (ansi_row==ansi_rows-1 && ansi_col<ansi_cols-1)) { + ansi_col++; + if(ansi_col>=ansi_cols) { + ansi_col=0; + ansi_row++; + if(ansi_row>=ansi_rows) { + ansi_col=ansi_cols-1; + ansi_row=ansi_rows-1; + } + } fwrite(&ch,1,1,stdout); if(ch<' ') force_move=1; } + else } void ansi_sendstr(char *str,int len) { if(len==-1) len=strlen(str); - fwrite(str,len,1,stdout); + if(len) { + fwrite(str,len,1,stdout); + } } int ansi_puttext(int sx, int sy, int ex, int ey, unsigned char *fill) @@ -164,8 +176,6 @@ int ansi_puttext(int sx, int sy, int ex, int ey, unsigned char *fill) out=fill; attrib=ti.attribute; - if((ey-sy+1)*(ex-sx+1)>32) - force_move=1; for(y=sy-1;y<ey;y++) { for(x=sx-1;x<ex;x++) { sch=*(out++); @@ -183,20 +193,9 @@ int ansi_puttext(int sx, int sy, int ex, int ey, unsigned char *fill) attrib=sch>>8; } ansi_sendch(sch&0xff); - ansi_col++; - if(ansi_col>=ansi_cols) { - ansi_col=0; - ansi_row++; - if(ansi_row>=ansi_rows) { - ansi_col=ansi_cols-1; - ansi_row=ansi_rows-1; - } - } } } - if((ey-sy+1)*(ex-sx+1)>32) - force_move=1; gotoxy(ti.curx,ti.cury); if(attrib!=ti.attribute) textattr(ti.attribute); @@ -464,8 +463,8 @@ int ansi_putch(unsigned char ch) puttext(ansi_col+1,ansi_row+1,ansi_col+1,ansi_row+1,buf); } else { - gotoxy(ti.curx+1,ti.cury); puttext(ansi_col+1,ansi_row+1,ansi_col+1,ansi_row+1,buf); + gotoxy(ti.curx+1,ti.cury); } } break; @@ -491,6 +490,7 @@ void ansi_gotoxy(int x, int y) else { if(x==1 && ansi_col != 0 && ansi_row<ansi_row-1) { ansi_sendch('\r'); + force_move=0; ansi_col=0; } if(x==ansi_col+1) { @@ -601,7 +601,7 @@ void ansi_fixterm(void) void ansi_initciowrap(long inmode) { int i; - char *init="\033[2J\033[1;1H\033[0m"; + char *init="\033[0m\033[2J\033[1;1H"; #ifdef _WIN32 _setmode(fileno(stdout),_O_BINARY); _setmode(fileno(stdin),_O_BINARY);