Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions doc/changes.md
Original file line number Diff line number Diff line change
Expand Up @@ -407,6 +407,8 @@ as part of K95 at this time, the default terminal remains VT220 for now.
width if the parameters value is 0. Any value less than 80 will now produce an
80 column terminal.
- Fixed crash writing to unopened file
- Fixed DECFRA accepting invalid fill character specifications
- Fixed DECFRA not using the selected remote character set for the fill character

## Kermit 95 v3.0 beta 7 - 27 January 2025

Expand Down
15 changes: 11 additions & 4 deletions doc/ctlseqs.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16252,10 +16252,17 @@ DCS $ q 3 , } ST</pre>
this will only be available to VT420 and higher emulations.
</p>
<p>
<param-single symbol="Pc"/> is the character
to fill with, while <tt><param-single symbol="Pt"/> ;
<param-single symbol="Pl"/> ; <param-single symbol="Pb"/> ;
<param-single symbol="Pr"/></tt> is the rectangle to fill
<tt><param-single symbol="Pt"/> ;
<param-single symbol="Pl"/> ; <param-single symbol="Pb"/> ;
<param-single symbol="Pr"/></tt> is the rectangle to fill.
</p>
<p>
<param-single symbol="Pc"/> is an integer referring to a
character in the current GL or GR character set to fill the
specified rectangular area. When not in UTF8 mode, it must fall
in the range 32-126 (GL) or 160-255 (GR). If the remote
character set is UTF8, then the second range is extended to
160-65535 to cover the Unicode base multilingual plane.
</p>
</section>
<section role="ctlseq" id="decrqpkfm" mnemonic="DECRQPKFM"
Expand Down
20 changes: 13 additions & 7 deletions kermit/k95/ckoco2.c
Original file line number Diff line number Diff line change
Expand Up @@ -1865,7 +1865,7 @@ VscrnScrollLf( BYTE vmode, USHORT TopRow, USHORT LeftCol, USHORT BotRow,
}
for ( x = RightCol - Columns + 1 ; x <= RightCol ; x++ ){
line->cells[x] = Cell ;
line->vt_char_attrs[x] = VT_CHAR_ATTR_NORMAL ;
line->vt_char_attrs[x] = VT_CHAR_ATTR_ERASED ;
}
}

Expand Down Expand Up @@ -1912,7 +1912,7 @@ VscrnScrollRt( BYTE vmode, USHORT TopRow, USHORT LeftCol, USHORT BotRow,
}
for ( x = LeftCol + Columns - 1 ; x >= LeftCol ; x-- ){
line->cells[x] = Cell ;
line->vt_char_attrs[x] = VT_CHAR_ATTR_NORMAL ;
line->vt_char_attrs[x] = VT_CHAR_ATTR_ERASED ;
}
}

Expand Down Expand Up @@ -2045,6 +2045,7 @@ USHORT vtattrib_to_int(vtattrib vta) {
(vta.unerasable ? VT_CHAR_ATTR_PROTECTED : 0) |
(vta.graphic ? VT_CHAR_ATTR_GRAPHIC : 0) |
(vta.crossedout ? VT_CHAR_ATTR_CROSSEDOUT: 0) |
(vta.erased ? VT_CHAR_ATTR_ERASED : 0) |
(vta.hyperlink ? VT_CHAR_ATTR_HYPERLINK : 0) |
(vta.wyseattr ? WY_CHAR_ATTR : 0) ;

Expand Down Expand Up @@ -2077,7 +2078,7 @@ VscrnWrtCell( BYTE vmode, viocell Cell, vtattrib att, USHORT Row, USHORT Col )
for ( i=0 ; i<MAXTERMCOL ; i++ ) {
line->cells[i].c = ' ' ;
line->cells[i].video_attr = cellcolor ;
line->vt_char_attrs[i] = VT_CHAR_ATTR_NORMAL ;
line->vt_char_attrs[i] = VT_CHAR_ATTR_ERASED ;
}
}

Expand Down Expand Up @@ -2642,6 +2643,7 @@ VscrnGetVtCharAttr( BYTE vmode, SHORT x, SHORT y )
vta.graphic = attr & VT_CHAR_ATTR_GRAPHIC ? 1 : 0 ;
vta.wyseattr = attr & WY_CHAR_ATTR ? 1 : 0 ;
vta.crossedout = attr & VT_CHAR_ATTR_CROSSEDOUT ? 1 : 0 ;
vta.erased = attr & VT_CHAR_ATTR_ERASED ? 1 : 0 ;
vta.hyperlink = attr & VT_CHAR_ATTR_HYPERLINK ? 1 : 0;
vta.linkid = attr & VT_CHAR_ATTR_HYPERLINK ? line->hyperlinks[x] : 0;

Expand Down Expand Up @@ -3646,7 +3648,7 @@ VscrnScrollPage(BYTE vmode, int updown, int topmargin, int bottommargin,
line->vt_line_attr = VT_LINE_ATTR_NORMAL ;
for ( x = 0 ; x < MAXTERMCOL ; x++ ) {
line->cells[x] = blankcell ;
line->vt_char_attrs[x] = VT_CHAR_ATTR_NORMAL ;
line->vt_char_attrs[x] = VT_CHAR_ATTR_ERASED ;
}
}

Expand Down Expand Up @@ -3685,7 +3687,7 @@ VscrnScrollPage(BYTE vmode, int updown, int topmargin, int bottommargin,
for ( x = 0 ; x < MAXTERMCOL ; x++ )
{
line->cells[x] = blankcell ;
line->vt_char_attrs[x] = VT_CHAR_ATTR_NORMAL ;
line->vt_char_attrs[x] = VT_CHAR_ATTR_ERASED ;
}
}
}
Expand Down Expand Up @@ -3730,7 +3732,7 @@ VscrnScrollPage(BYTE vmode, int updown, int topmargin, int bottommargin,
line->vt_line_attr = VT_LINE_ATTR_NORMAL ;
for ( x = 0 ; x < MAXTERMCOL ; x++ ) {
line->cells[x] = blankcell ;
line->vt_char_attrs[x] = VT_CHAR_ATTR_NORMAL ;
line->vt_char_attrs[x] = VT_CHAR_ATTR_ERASED ;
}
}
break;
Expand Down Expand Up @@ -5675,7 +5677,7 @@ VscrnInit( BYTE vmode )
for ( x = 0 ; x < MAXTERMCOL ; x++ ) {
line->cells[x].c = ' ' ;
line->cells[x].video_attr = vmode == VTERM ? attribute : colorcmd;
line->vt_char_attrs[x] = VT_CHAR_ATTR_NORMAL ;
line->vt_char_attrs[x] = VT_CHAR_ATTR_ERASED ;
}
}
}
Expand Down Expand Up @@ -5730,6 +5732,10 @@ VscrnIsClear( BYTE vmode, int page )
debug(F100,"VscrnIsClear video_attr != cellcolor","",0);
return 0;
}
/* TODO: Ideally we'd check if VT_CHAR_ATTR_ERASED is set too, but
* in order to do that we'd need to be *certain* that all
* emulations are correctly setting and clearing the attribute
* which is not currently the case. */
}
}
debug(F100,"VscrnIsClear all clear","",0);
Expand Down
Loading