diff --git a/src/conio/cterm.c b/src/conio/cterm.c index af4e43bca807ce1f2b30fbfd4be460f861642fcd..bbdd819d99ee432563acb8d1c087b7153d641602 100644 --- a/src/conio/cterm.c +++ b/src/conio/cterm.c @@ -914,10 +914,14 @@ void do_ansi(char *retbuf, size_t retsize, int *speed) case 'g': /* ToDo? VT100 Tabs */ break; case 'h': /* ToDo? Scrolling regeion, word-wrap, doorway mode */ + if(!strcmp(cterm.escbuf,"[=255h")) + cterm.doorway_mode=1; break; case 'i': /* ToDo? Printing */ break; case 'l': /* ToDo? Scrolling regeion, word-wrap, doorway mode */ + if(!strcmp(cterm.escbuf,"[=255l")) + cterm.doorway_mode=0; break; case 'm': *(p--)=0; @@ -1882,47 +1886,68 @@ char *cterm_write(unsigned char *buf, int buflen, char *retbuf, size_t retsize, } } else { /* ANSI-BBS */ - switch(buf[j]) { - case 0: - break; - case 7: /* Beep */ - ctputs(prn); - prn[0]=0; - if(cterm.log==CTERM_LOG_ASCII && cterm.logfile != NULL) - fputs("\x07", cterm.logfile); - #ifdef __unix__ - putch(7); - #else - MessageBeep(MB_OK); - #endif - break; - case 12: /* ^L - Clear screen */ - ctputs(prn); - prn[0]=0; - if(cterm.log==CTERM_LOG_ASCII && cterm.logfile != NULL) - fputs("\x0c", cterm.logfile); - clearscreen((char)cterm.attr); - gotoxy(1,1); - break; - case 27: /* ESC */ - ctputs(prn); - prn[0]=0; - cterm.sequence=1; - break; - case '\t': - ctputs(prn); - prn[0]=0; - if(cterm.log==CTERM_LOG_ASCII && cterm.logfile != NULL) - fputs("\t", cterm.logfile); - for(k=0;k<11;k++) { - if(cterm_tabs[k]>wherex()) { - gotoxy(cterm_tabs[k],wherey()); - break; - } + if(cterm.doorway_char) { + ctputs(prn); + ch[1]=cterm.attr; + puttext(cterm.x+wherex()-1,cterm.y+wherey()-1,cterm.x+wherex()-1,cterm.y+wherey()-1,ch); + ch[1]=0; + if(wherex()==cterm.width) { + if(wherey()==cterm.height) { + scrollup(); + gotoxy(1,wherey()); } - break; - default: - strcat(prn,ch); + else + gotoxy(1,wherey()+1); + } + else + gotoxy(wherex()+1,wherey()); + cterm.doorway_char=0; + } + else { + switch(buf[j]) { + case 0: + if(cterm.doorway_mode) + cterm.doorway_char=1; + break; + case 7: /* Beep */ + ctputs(prn); + prn[0]=0; + if(cterm.log==CTERM_LOG_ASCII && cterm.logfile != NULL) + fputs("\x07", cterm.logfile); + #ifdef __unix__ + putch(7); + #else + MessageBeep(MB_OK); + #endif + break; + case 12: /* ^L - Clear screen */ + ctputs(prn); + prn[0]=0; + if(cterm.log==CTERM_LOG_ASCII && cterm.logfile != NULL) + fputs("\x0c", cterm.logfile); + clearscreen((char)cterm.attr); + gotoxy(1,1); + break; + case 27: /* ESC */ + ctputs(prn); + prn[0]=0; + cterm.sequence=1; + break; + case '\t': + ctputs(prn); + prn[0]=0; + if(cterm.log==CTERM_LOG_ASCII && cterm.logfile != NULL) + fputs("\t", cterm.logfile); + for(k=0;k<11;k++) { + if(cterm_tabs[k]>wherex()) { + gotoxy(cterm_tabs[k],wherey()); + break; + } + } + break; + default: + strcat(prn,ch); + } } } } diff --git a/src/conio/cterm.h b/src/conio/cterm.h index 5a9945429522b0227491e4977a07e0b02b32244e..017640c8335ccf16fce320dab6378f8db9a79021 100644 --- a/src/conio/cterm.h +++ b/src/conio/cterm.h @@ -85,6 +85,8 @@ struct cterminal { int font_size; int font_read; int font_start_time; + int doorway_mode; + int doorway_char; }; #define CTERM_MUSIC_SYNCTERM 0