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
Tags
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