Skip to content
Snippets Groups Projects
Commit 3c977879 authored by deuce's avatar deuce
Browse files

Attempt to fix CSI ? s/n

These basically never worked as documented.  Now they should, but they can't
save/restore the doorway mode setting since it's not set/cleared using
CSI ? h/l.  If that's really needed (you need to know the doorway state
regardless, so it's more likely that a query doorway command is needed if
anything) it can be added as a separate command.
parent 1c40c3dd
Branches
Tags
No related merge requests found
...@@ -1126,10 +1126,10 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int * ...@@ -1126,10 +1126,10 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int *
p2=cterm->escbuf+2; p2=cterm->escbuf+2;
GETTEXTINFO(&ti); GETTEXTINFO(&ti);
i=GETVIDEOFLAGS(); i=GETVIDEOFLAGS();
if(p2>p) { if(!*p2) {
/* All the save stuff... */ /* All the save stuff... */
cterm->saved_mode_mask |= (CTERM_SAVEMODE_AUTOWRAP|CTERM_SAVEMODE_CURSOR|CTERM_SAVEMODE_ALTCHARS|CTERM_SAVEMODE_NOBRIGHT|CTERM_SAVEMODE_BGBRIGHT|CTERM_SAVEMODE_DOORWAY|CTERM_SAVEMODE_ORIGIN); cterm->saved_mode_mask |= (CTERM_SAVEMODE_AUTOWRAP|CTERM_SAVEMODE_CURSOR|CTERM_SAVEMODE_ALTCHARS|CTERM_SAVEMODE_NOBRIGHT|CTERM_SAVEMODE_BGBRIGHT|CTERM_SAVEMODE_ORIGIN);
cterm->saved_mode &= ~(CTERM_SAVEMODE_AUTOWRAP|CTERM_SAVEMODE_CURSOR|CTERM_SAVEMODE_ALTCHARS|CTERM_SAVEMODE_NOBRIGHT|CTERM_SAVEMODE_BGBRIGHT|CTERM_SAVEMODE_DOORWAY|CTERM_SAVEMODE_ORIGIN); cterm->saved_mode &= ~(CTERM_SAVEMODE_AUTOWRAP|CTERM_SAVEMODE_CURSOR|CTERM_SAVEMODE_ALTCHARS|CTERM_SAVEMODE_NOBRIGHT|CTERM_SAVEMODE_BGBRIGHT|CTERM_SAVEMODE_ORIGIN);
cterm->saved_mode |= (cterm->autowrap)?CTERM_SAVEMODE_AUTOWRAP:0; cterm->saved_mode |= (cterm->autowrap)?CTERM_SAVEMODE_AUTOWRAP:0;
cterm->saved_mode |= (cterm->cursor==_NORMALCURSOR)?CTERM_SAVEMODE_CURSOR:0; cterm->saved_mode |= (cterm->cursor==_NORMALCURSOR)?CTERM_SAVEMODE_CURSOR:0;
cterm->saved_mode |= (i&CIOLIB_VIDEO_ALTCHARS)?CTERM_SAVEMODE_ALTCHARS:0; cterm->saved_mode |= (i&CIOLIB_VIDEO_ALTCHARS)?CTERM_SAVEMODE_ALTCHARS:0;
...@@ -1137,57 +1137,51 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int * ...@@ -1137,57 +1137,51 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int *
cterm->saved_mode |= (i&CIOLIB_VIDEO_BGBRIGHT)?CTERM_SAVEMODE_BGBRIGHT:0; cterm->saved_mode |= (i&CIOLIB_VIDEO_BGBRIGHT)?CTERM_SAVEMODE_BGBRIGHT:0;
cterm->saved_mode |= (i&CIOLIB_VIDEO_BLINKALTCHARS)?CTERM_SAVEMODE_BLINKALTCHARS:0; cterm->saved_mode |= (i&CIOLIB_VIDEO_BLINKALTCHARS)?CTERM_SAVEMODE_BLINKALTCHARS:0;
cterm->saved_mode |= (i&CIOLIB_VIDEO_NOBLINK)?CTERM_SAVEMODE_NOBLINK:0; cterm->saved_mode |= (i&CIOLIB_VIDEO_NOBLINK)?CTERM_SAVEMODE_NOBLINK:0;
cterm->saved_mode |= (cterm->doorway_mode)?CTERM_SAVEMODE_DOORWAY:0;
cterm->saved_mode |= (cterm->origin_mode)?CTERM_SAVEMODE_ORIGIN:0; cterm->saved_mode |= (cterm->origin_mode)?CTERM_SAVEMODE_ORIGIN:0;
break; break;
} }
while((p=strtok(p2,";"))!=NULL) { while((p=strtok(p2,";"))!=NULL) {
p2=NULL; p2=NULL;
if(!strcmp(cterm->escbuf,"?6")) { if(!strcmp(p,"6")) {
cterm->saved_mode_mask |= CTERM_SAVEMODE_ORIGIN; cterm->saved_mode_mask |= CTERM_SAVEMODE_ORIGIN;
cterm->saved_mode &= ~(CTERM_SAVEMODE_AUTOWRAP|CTERM_SAVEMODE_CURSOR|CTERM_SAVEMODE_ALTCHARS|CTERM_SAVEMODE_NOBRIGHT|CTERM_SAVEMODE_BGBRIGHT|CTERM_SAVEMODE_ORIGIN); cterm->saved_mode &= ~(CTERM_SAVEMODE_AUTOWRAP|CTERM_SAVEMODE_CURSOR|CTERM_SAVEMODE_ALTCHARS|CTERM_SAVEMODE_NOBRIGHT|CTERM_SAVEMODE_BGBRIGHT|CTERM_SAVEMODE_ORIGIN);
cterm->saved_mode |= cterm->origin_mode?CTERM_SAVEMODE_ORIGIN:0; cterm->saved_mode |= cterm->origin_mode?CTERM_SAVEMODE_ORIGIN:0;
} }
if(!strcmp(cterm->escbuf,"?7")) { if(!strcmp(p,"7")) {
cterm->saved_mode_mask |= CTERM_SAVEMODE_AUTOWRAP; cterm->saved_mode_mask |= CTERM_SAVEMODE_AUTOWRAP;
cterm->saved_mode &= ~(CTERM_SAVEMODE_AUTOWRAP|CTERM_SAVEMODE_CURSOR|CTERM_SAVEMODE_ALTCHARS|CTERM_SAVEMODE_NOBRIGHT|CTERM_SAVEMODE_BGBRIGHT); cterm->saved_mode &= ~(CTERM_SAVEMODE_AUTOWRAP|CTERM_SAVEMODE_CURSOR|CTERM_SAVEMODE_ALTCHARS|CTERM_SAVEMODE_NOBRIGHT|CTERM_SAVEMODE_BGBRIGHT);
cterm->saved_mode |= cterm->autowrap?CTERM_SAVEMODE_AUTOWRAP:0; cterm->saved_mode |= cterm->autowrap?CTERM_SAVEMODE_AUTOWRAP:0;
} }
if(!strcmp(cterm->escbuf,"?25")) { if(!strcmp(p,"25")) {
cterm->saved_mode_mask |= CTERM_SAVEMODE_CURSOR; cterm->saved_mode_mask |= CTERM_SAVEMODE_CURSOR;
cterm->saved_mode &= ~(CTERM_SAVEMODE_CURSOR); cterm->saved_mode &= ~(CTERM_SAVEMODE_CURSOR);
cterm->saved_mode |= (cterm->cursor==_NORMALCURSOR)?CTERM_SAVEMODE_CURSOR:0; cterm->saved_mode |= (cterm->cursor==_NORMALCURSOR)?CTERM_SAVEMODE_CURSOR:0;
} }
if(!strcmp(cterm->escbuf,"?31")) { if(!strcmp(p,"31")) {
cterm->saved_mode_mask |= CTERM_SAVEMODE_ALTCHARS; cterm->saved_mode_mask |= CTERM_SAVEMODE_ALTCHARS;
cterm->saved_mode &= ~(CTERM_SAVEMODE_ALTCHARS); cterm->saved_mode &= ~(CTERM_SAVEMODE_ALTCHARS);
cterm->saved_mode |= (i&CIOLIB_VIDEO_ALTCHARS)?CTERM_SAVEMODE_ALTCHARS:0; cterm->saved_mode |= (i&CIOLIB_VIDEO_ALTCHARS)?CTERM_SAVEMODE_ALTCHARS:0;
} }
if(!strcmp(cterm->escbuf,"?32")) { if(!strcmp(p,"32")) {
cterm->saved_mode_mask |= CTERM_SAVEMODE_NOBRIGHT; cterm->saved_mode_mask |= CTERM_SAVEMODE_NOBRIGHT;
cterm->saved_mode &= ~(CTERM_SAVEMODE_NOBRIGHT); cterm->saved_mode &= ~(CTERM_SAVEMODE_NOBRIGHT);
cterm->saved_mode |= (i&CIOLIB_VIDEO_NOBRIGHT)?CTERM_SAVEMODE_NOBRIGHT:0; cterm->saved_mode |= (i&CIOLIB_VIDEO_NOBRIGHT)?CTERM_SAVEMODE_NOBRIGHT:0;
} }
if(!strcmp(cterm->escbuf,"?33")) { if(!strcmp(p,"33")) {
cterm->saved_mode_mask |= CTERM_SAVEMODE_BGBRIGHT; cterm->saved_mode_mask |= CTERM_SAVEMODE_BGBRIGHT;
cterm->saved_mode &= ~(CTERM_SAVEMODE_BGBRIGHT); cterm->saved_mode &= ~(CTERM_SAVEMODE_BGBRIGHT);
cterm->saved_mode |= (i&CIOLIB_VIDEO_BGBRIGHT)?CTERM_SAVEMODE_BGBRIGHT:0; cterm->saved_mode |= (i&CIOLIB_VIDEO_BGBRIGHT)?CTERM_SAVEMODE_BGBRIGHT:0;
} }
if(!strcmp(cterm->escbuf,"?34")) { if(!strcmp(p,"34")) {
cterm->saved_mode_mask |= CTERM_SAVEMODE_BLINKALTCHARS; cterm->saved_mode_mask |= CTERM_SAVEMODE_BLINKALTCHARS;
cterm->saved_mode &= ~(CTERM_SAVEMODE_BLINKALTCHARS); cterm->saved_mode &= ~(CTERM_SAVEMODE_BLINKALTCHARS);
cterm->saved_mode |= (i&CIOLIB_VIDEO_BLINKALTCHARS)?CTERM_SAVEMODE_BLINKALTCHARS:0; cterm->saved_mode |= (i&CIOLIB_VIDEO_BLINKALTCHARS)?CTERM_SAVEMODE_BLINKALTCHARS:0;
} }
if(!strcmp(cterm->escbuf,"?35")) { if(!strcmp(p,"35")) {
cterm->saved_mode_mask |= CTERM_SAVEMODE_NOBLINK; cterm->saved_mode_mask |= CTERM_SAVEMODE_NOBLINK;
cterm->saved_mode &= ~(CTERM_SAVEMODE_NOBLINK); cterm->saved_mode &= ~(CTERM_SAVEMODE_NOBLINK);
cterm->saved_mode |= (i&CIOLIB_VIDEO_NOBLINK)?CTERM_SAVEMODE_NOBLINK:0; cterm->saved_mode |= (i&CIOLIB_VIDEO_NOBLINK)?CTERM_SAVEMODE_NOBLINK:0;
} }
if(!strcmp(cterm->escbuf,"=255")) {
cterm->saved_mode_mask |= CTERM_SAVEMODE_DOORWAY;
cterm->saved_mode &= ~(CTERM_SAVEMODE_DOORWAY);
cterm->saved_mode |= (cterm->doorway_mode)?CTERM_SAVEMODE_DOORWAY:0;
}
} }
} }
break; break;
...@@ -1197,7 +1191,7 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int * ...@@ -1197,7 +1191,7 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int *
p2=cterm->escbuf+2; p2=cterm->escbuf+2;
GETTEXTINFO(&ti); GETTEXTINFO(&ti);
i=GETVIDEOFLAGS(); i=GETVIDEOFLAGS();
if(p2>p) { if(!*p2) {
/* All the save stuff... */ /* All the save stuff... */
if(cterm->saved_mode_mask & CTERM_SAVEMODE_ORIGIN) if(cterm->saved_mode_mask & CTERM_SAVEMODE_ORIGIN)
cterm->origin_mode=(cterm->saved_mode & CTERM_SAVEMODE_ORIGIN) ? true : false; cterm->origin_mode=(cterm->saved_mode & CTERM_SAVEMODE_ORIGIN) ? true : false;
...@@ -1237,32 +1231,26 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int * ...@@ -1237,32 +1231,26 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int *
else else
i &= ~CIOLIB_VIDEO_BGBRIGHT; i &= ~CIOLIB_VIDEO_BGBRIGHT;
} }
if(cterm->saved_mode_mask & CTERM_SAVEMODE_DOORWAY) {
if(cterm->saved_mode & CTERM_SAVEMODE_DOORWAY)
cterm->doorway_mode = 1;
else
cterm->doorway_mode = 0;
}
SETVIDEOFLAGS(i); SETVIDEOFLAGS(i);
break; break;
} }
while((p=strtok(p2,";"))!=NULL) { while((p=strtok(p2,";"))!=NULL) {
p2=NULL; p2=NULL;
if(!strcmp(cterm->escbuf,"?6")) { if(!strcmp(p,"6")) {
if(cterm->saved_mode_mask & CTERM_SAVEMODE_ORIGIN) if(cterm->saved_mode_mask & CTERM_SAVEMODE_ORIGIN)
cterm->origin_mode=(cterm->saved_mode & CTERM_SAVEMODE_ORIGIN) ? true : false; cterm->origin_mode=(cterm->saved_mode & CTERM_SAVEMODE_ORIGIN) ? true : false;
} }
if(!strcmp(cterm->escbuf,"?7")) { if(!strcmp(p,"7")) {
if(cterm->saved_mode_mask & CTERM_SAVEMODE_AUTOWRAP) if(cterm->saved_mode_mask & CTERM_SAVEMODE_AUTOWRAP)
cterm->autowrap=(cterm->saved_mode & CTERM_SAVEMODE_AUTOWRAP) ? true : false; cterm->autowrap=(cterm->saved_mode & CTERM_SAVEMODE_AUTOWRAP) ? true : false;
} }
if(!strcmp(cterm->escbuf,"?25")) { if(!strcmp(p,"25")) {
if(cterm->saved_mode_mask & CTERM_SAVEMODE_CURSOR) { if(cterm->saved_mode_mask & CTERM_SAVEMODE_CURSOR) {
cterm->cursor = (cterm->saved_mode & CTERM_SAVEMODE_CURSOR) ? _NORMALCURSOR : _NOCURSOR; cterm->cursor = (cterm->saved_mode & CTERM_SAVEMODE_CURSOR) ? _NORMALCURSOR : _NOCURSOR;
SETCURSORTYPE(cterm->cursor); SETCURSORTYPE(cterm->cursor);
} }
} }
if(!strcmp(cterm->escbuf,"?31")) { if(!strcmp(p,"31")) {
if(cterm->saved_mode_mask & CTERM_SAVEMODE_ALTCHARS) { if(cterm->saved_mode_mask & CTERM_SAVEMODE_ALTCHARS) {
if(cterm->saved_mode & CTERM_SAVEMODE_ALTCHARS) if(cterm->saved_mode & CTERM_SAVEMODE_ALTCHARS)
i |= CIOLIB_VIDEO_ALTCHARS; i |= CIOLIB_VIDEO_ALTCHARS;
...@@ -1271,7 +1259,7 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int * ...@@ -1271,7 +1259,7 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int *
SETVIDEOFLAGS(i); SETVIDEOFLAGS(i);
} }
} }
if(!strcmp(cterm->escbuf,"?32")) { if(!strcmp(p,"32")) {
if(cterm->saved_mode_mask & CTERM_SAVEMODE_NOBRIGHT) { if(cterm->saved_mode_mask & CTERM_SAVEMODE_NOBRIGHT) {
if(cterm->saved_mode & CTERM_SAVEMODE_NOBRIGHT) if(cterm->saved_mode & CTERM_SAVEMODE_NOBRIGHT)
i |= CIOLIB_VIDEO_NOBRIGHT; i |= CIOLIB_VIDEO_NOBRIGHT;
...@@ -1280,7 +1268,7 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int * ...@@ -1280,7 +1268,7 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int *
SETVIDEOFLAGS(i); SETVIDEOFLAGS(i);
} }
} }
if(!strcmp(cterm->escbuf,"?33")) { if(!strcmp(p,"33")) {
if(cterm->saved_mode_mask & CTERM_SAVEMODE_BGBRIGHT) { if(cterm->saved_mode_mask & CTERM_SAVEMODE_BGBRIGHT) {
if(cterm->saved_mode & CTERM_SAVEMODE_BGBRIGHT) if(cterm->saved_mode & CTERM_SAVEMODE_BGBRIGHT)
i |= CIOLIB_VIDEO_BGBRIGHT; i |= CIOLIB_VIDEO_BGBRIGHT;
...@@ -1289,7 +1277,7 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int * ...@@ -1289,7 +1277,7 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int *
SETVIDEOFLAGS(i); SETVIDEOFLAGS(i);
} }
} }
if(!strcmp(cterm->escbuf,"?34")) { if(!strcmp(p,"34")) {
if(cterm->saved_mode_mask & CTERM_SAVEMODE_BLINKALTCHARS) { if(cterm->saved_mode_mask & CTERM_SAVEMODE_BLINKALTCHARS) {
if(cterm->saved_mode & CTERM_SAVEMODE_BLINKALTCHARS) if(cterm->saved_mode & CTERM_SAVEMODE_BLINKALTCHARS)
i |= CIOLIB_VIDEO_BLINKALTCHARS; i |= CIOLIB_VIDEO_BLINKALTCHARS;
...@@ -1298,7 +1286,7 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int * ...@@ -1298,7 +1286,7 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int *
SETVIDEOFLAGS(i); SETVIDEOFLAGS(i);
} }
} }
if(!strcmp(cterm->escbuf,"?35")) { if(!strcmp(p,"35")) {
if(cterm->saved_mode_mask & CTERM_SAVEMODE_NOBLINK) { if(cterm->saved_mode_mask & CTERM_SAVEMODE_NOBLINK) {
if(cterm->saved_mode & CTERM_SAVEMODE_NOBLINK) if(cterm->saved_mode & CTERM_SAVEMODE_NOBLINK)
i |= CIOLIB_VIDEO_NOBLINK; i |= CIOLIB_VIDEO_NOBLINK;
...@@ -1307,10 +1295,6 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int * ...@@ -1307,10 +1295,6 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int *
SETVIDEOFLAGS(i); SETVIDEOFLAGS(i);
} }
} }
if(!strcmp(cterm->escbuf,"=255")) {
if(cterm->saved_mode_mask & CTERM_SAVEMODE_DOORWAY)
cterm->autowrap=(cterm->saved_mode & CTERM_SAVEMODE_DOORWAY) ? 1 : 0;
}
} }
} }
break; break;
......
...@@ -98,7 +98,7 @@ struct cterminal { ...@@ -98,7 +98,7 @@ struct cterminal {
#define CTERM_SAVEMODE_ALTCHARS 0x004 #define CTERM_SAVEMODE_ALTCHARS 0x004
#define CTERM_SAVEMODE_NOBRIGHT 0x008 #define CTERM_SAVEMODE_NOBRIGHT 0x008
#define CTERM_SAVEMODE_BGBRIGHT 0x010 #define CTERM_SAVEMODE_BGBRIGHT 0x010
#define CTERM_SAVEMODE_DOORWAY 0x020 // 0x010 was CTERM_SAVEMODE_DOORWAY
#define CTERM_SAVEMODE_ORIGIN 0x040 #define CTERM_SAVEMODE_ORIGIN 0x040
#define CTERM_SAVEMODE_BLINKALTCHARS 0x080 #define CTERM_SAVEMODE_BLINKALTCHARS 0x080
#define CTERM_SAVEMODE_NOBLINK 0x100 #define CTERM_SAVEMODE_NOBLINK 0x100
......
...@@ -646,9 +646,13 @@ CSI [ p1 ] n ...@@ -646,9 +646,13 @@ CSI [ p1 ] n
CSI ? [ p1 [ pX ... ] ] s CSI ? [ p1 [ pX ... ] ] s
NON-STANDARD EXTENSION NON-STANDARD EXTENSION
Save Mode Setting Save Mode Setting
Saves the current mode states as specified by CSI l and CSI h. If Saves the current mode states as specified by CSI ? l and CSI ? h. If
p1 is omitted, saves all such states. If pX is included, saves only p1 is omitted, saves all such states. If pX is included, saves only
the specified states (arguments to CSI l/h). the specified states (arguments to CSI ? l/h).
Note that currently, CSI ? s with no parameters will save the doorway
mode state, which can't be specified with a parameter (since it's set
using CSI = 255 h, not CSI ? 255 h).
SOURCE: SyncTERM only SOURCE: SyncTERM only
...@@ -664,9 +668,13 @@ CSI s ...@@ -664,9 +668,13 @@ CSI s
CSI ? [ p1 [ pX ... ] ] u CSI ? [ p1 [ pX ... ] ] u
NON-STANDARD EXTENSION NON-STANDARD EXTENSION
Restore Mode Setting Restore Mode Setting
Saves the current mode states as specified by CSI l and CSI h. If Saves the current mode states as specified by CSI ? l and CSI ? h. If
p1 is omitted, saves all such states. If pX is included, restores p1 is omitted, saves all such states. If pX is included, restores
all the specified states (arguments to CSI l/h) all the specified states (arguments to CSI ? l/h)
Note that currently, CSI ? u with no parameters will restore the
doorway mode state, which can't be specified with a parameter (since
it's set using CSI = 255 h, not CSI ? 255 h).
SOURCE: SyncTERM only SOURCE: SyncTERM only
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment