Skip to content
Snippets Groups Projects
Commit 5adbca89 authored by deuce's avatar deuce
Browse files

Keep current x/y position and attribute... restore next call

Use clrscr() to clear the window.
Use clreol() to clear to end of line.
parent e3933ee2
Branches
No related tags found
No related merge requests found
...@@ -22,6 +22,8 @@ struct terminal { ...@@ -22,6 +22,8 @@ struct terminal {
char *scrollback; char *scrollback;
int backpos; int backpos;
int backlines; int backlines;
int xpos;
int ypos;
}; };
static struct terminal term; static struct terminal term;
...@@ -97,14 +99,7 @@ void clear2eol(void) ...@@ -97,14 +99,7 @@ void clear2eol(void)
char *buf; char *buf;
int i,j; int i,j;
buf=(char *)malloc((term.width-wherex()+1)*2); clreol();
j=0;
for(i=wherex();i<=term.width;i++) {
buf[j++]=' ';
buf[j++]=term.attr;
}
puttext(term.x+wherex(),term.y+wherey(),term.x+term.width,term.y+wherey(),buf);
free(buf);
} }
void clearscreen(char attr) void clearscreen(char attr)
...@@ -112,24 +107,15 @@ void clearscreen(char attr) ...@@ -112,24 +107,15 @@ void clearscreen(char attr)
char *buf; char *buf;
int x,y,j; int x,y,j;
term.backpos+=term.height;
if(term.scrollback!=NULL) { if(term.scrollback!=NULL) {
term.backpos+=term.height;
if(term.backpos>term.backlines) { if(term.backpos>term.backlines) {
memmove(term.scrollback,term.scrollback+term.width*2*(term.backpos-term.backlines),term.width*2*(term.backlines-(term.backpos-term.backlines))); memmove(term.scrollback,term.scrollback+term.width*2*(term.backpos-term.backlines),term.width*2*(term.backlines-(term.backpos-term.backlines)));
term.backpos=term.backlines; term.backpos=term.backlines;
} }
gettext(term.x+1,term.y+1,term.x+term.width,term.y+term.height,term.scrollback+(term.backpos-term.height)*term.width*2); gettext(term.x+1,term.y+1,term.x+term.width,term.y+term.height,term.scrollback+(term.backpos-term.height)*term.width*2);
} }
buf=(char *)malloc(term.width*(term.height)*2); clrscr();
j=0;
for(x=0;x<term.width;x++) {
for(y=0;y<term.height;y++) {
buf[j++]=' ';
buf[j++]=attr;
}
}
puttext(term.x+1,term.y+1,term.x+term.width,term.y+term.height,buf);
free(buf);
} }
void do_ansi(char *retbuf, int retsize) void do_ansi(char *retbuf, int retsize)
...@@ -524,7 +510,7 @@ void cterm_init(int height, int width, int xpos, int ypos, int backlines, unsign ...@@ -524,7 +510,7 @@ void cterm_init(int height, int width, int xpos, int ypos, int backlines, unsign
memset(term.scrollback,0,term.width*2*term.backlines); memset(term.scrollback,0,term.width*2*term.backlines);
textattr(term.attr); textattr(term.attr);
_setcursortype(_NORMALCURSOR); _setcursortype(_NORMALCURSOR);
window(term.x+1,term.y+1,term.x+term.width,term.y+term.height); window(term.x,term.y,term.x+term.width-1,term.y+term.height-1);
clrscr(); clrscr();
gotoxy(1,1); gotoxy(1,1);
} }
...@@ -536,9 +522,14 @@ char *cterm_write(unsigned char *buf, int buflen, char *retbuf, int retsize) ...@@ -536,9 +522,14 @@ char *cterm_write(unsigned char *buf, int buflen, char *retbuf, int retsize)
int key; int key;
int i,j,k; int i,j,k;
char *ret; char *ret;
struct text_info ti;
if(retbuf!=NULL) if(retbuf!=NULL)
retbuf[0]=0; retbuf[0]=0;
gettextinfo(&ti);
window(term.x,term.y,term.x+term.width-1,term.y+term.height-1);
gotoxy(term.xpos,term.ypos);
textattr(term.attr);
ch[1]=0; ch[1]=0;
switch(buflen) { switch(buflen) {
case 0: case 0:
...@@ -602,6 +593,14 @@ char *cterm_write(unsigned char *buf, int buflen, char *retbuf, int retsize) ...@@ -602,6 +593,14 @@ char *cterm_write(unsigned char *buf, int buflen, char *retbuf, int retsize)
prn[0]=0; prn[0]=0;
break; break;
} }
term.xpos=wherex();
term.ypos=wherey();
#if 0
window(ti.winleft,ti.wintop,ti.winright,ti.wintop);
gotoxy(ti.curx,ti.cury);
textattr(ti.attribute);
#endif
return(retbuf); return(retbuf);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment