diff --git a/src/syncterm/term.c b/src/syncterm/term.c index 0626f4afe6e8e9ca7ad8efc7911fa0abfe9eaab5..1b9836759d9e83c496bb7272914d570830e90d7f 100644 --- a/src/syncterm/term.c +++ b/src/syncterm/term.c @@ -37,6 +37,12 @@ void scrollup(void) char *buf; int i,j; + term.backpos++; + if(term.backpos>backlines) { + memmove(term.scrollback,term.scrollback+term.width*2,term.width*2*(backlines-1)); + term.packpos--; + } + gettext(term.x+1,term.y+1,term.x+term.width,term.y+1,term.scrollback+(term.backpos-1)*term.width*2); buf=(char *)malloc(term.width*(term.height-1)*2); gettext(term.x+1,term.y+2,term.x+term.width,term.y+term.height,buf); puttext(term.x+1,term.y+1,term.x+term.width,term.y+term.height-1,buf); @@ -492,12 +498,13 @@ void doterm(void) term.escbuf[0]=0; term.sequence=0; term.music=0; - + term.backpos=0; + term.scrollback=malloc(term.width*2*backlines); ch[1]=0; - /* Main input loop */ gotoxy(term.xpos,term.ypos); textattr(term.attr); _setcursortype(_NORMALCURSOR); + /* Main input loop */ for(;;) { /* Get remote input */ i=rlogin_recv(ch,1,100); @@ -586,8 +593,10 @@ void doterm(void) /* Get local input */ if(kbhit()) { key=getch(); - if(key==17) + if(key==17) { + free(term.scrollback); return; + } if(key<256) { ch[0]=key; rlogin_send(ch,1,100); diff --git a/src/syncterm/term.h b/src/syncterm/term.h index 2c3e5bb17ba414e0d155ffa4ad007ec2bbe8e9be..012995eb72ba13093cce4ecd25a7254c7c43e2b5 100644 --- a/src/syncterm/term.h +++ b/src/syncterm/term.h @@ -15,6 +15,8 @@ struct terminal { char escbuf[1024]; int sequence; int music; + char *scrollback; + int backpos; }; extern struct terminal term;