#define poslt(p1,p2) ( (p1).y < (p2).y || ( (p1).y == (p2).y && (p1).x < (p2).x ) )
#define posle(p1,p2) ( (p1).y < (p2).y || ( (p1).y == (p2).y && (p1).x <= (p2).x ) )
#define poseq(p1,p2) ( (p1).y == (p2).y && (p1).x == (p2).x )
-#define posdiff(p1,p2) ( ((p2).y - (p1).y) * (cols+1) + (p2).x - (p1).x )
+#define posdiff(p1,p2) ( ((p1).y - (p2).y) * (cols+1) + (p1).x - (p2).x )
#define incpos(p) ( (p).x == cols ? ((p).x = 0, (p).y++, 1) : ((p).x++, 0) )
#define decpos(p) ( (p).x == 0 ? ((p).x = cols, (p).y--, 1) : ((p).x--, 0) )
static void logtraffic(unsigned char c, int logmode);
/*
+ * Resize a line to make it `cols' columns wide.
+ */
+unsigned long *resizeline(unsigned long *line, int cols)
+{
+ int i, oldlen;
+ unsigned long lineattrs;
+
+ if (line[0] != (unsigned long)cols) {
+ /*
+ * This line is the wrong length, which probably means it
+ * hasn't been accessed since a resize. Resize it now.
+ */
+ oldlen = line[0];
+ lineattrs = line[oldlen + 1];
+ line = srealloc(line, TSIZE * (2 + cols));
+ line[0] = cols;
+ for (i = oldlen; i < cols; i++)
+ line[i + 1] = ERASE_CHAR;
+ line[cols + 1] = lineattrs & LATTR_MODE;
+ }
+
+ return line;
+}
+
+/*
* Retrieve a line of the screen or of the scrollback, according to
* whether the y coordinate is non-negative or negative
* (respectively).
*/
unsigned long *lineptr(int y, int lineno)
{
- unsigned long *line, lineattrs;
+ unsigned long *line, *newline;
tree234 *whichtree;
- int i, treeindex, oldlen;
+ int treeindex;
if (y >= 0) {
whichtree = screen;
/* We assume that we don't screw up and retrieve something out of range. */
assert(line != NULL);
- if (line[0] != cols) {
- /*
- * This line is the wrong length, which probably means it
- * hasn't been accessed since a resize. Resize it now.
- */
- oldlen = line[0];
- lineattrs = line[oldlen + 1];
+ newline = resizeline(line, cols);
+ if (newline != line) {
delpos234(whichtree, treeindex);
- line = srealloc(line, TSIZE * (2 + cols));
- line[0] = cols;
- for (i = oldlen; i < cols; i++)
- line[i + 1] = ERASE_CHAR;
- line[cols + 1] = lineattrs & LATTR_MODE;
- addpos234(whichtree, line, treeindex);
+ addpos234(whichtree, newline, treeindex);
}
return line + 1;
Context ctx;
ctx = get_ctx();
if (ctx) {
+ if (seen_disp_event)
+ update_sbar();
if ((seen_key_event && (cfg.scroll_on_key)) ||
(seen_disp_event && (cfg.scroll_on_disp))) {
disptop = 0; /* return to main screen */
seen_disp_event = seen_key_event = 0;
- update_sbar();
}
do_paint(ctx, TRUE);
sys_cursor(curs.x, curs.y - disptop);
*/
void term_size(int newrows, int newcols, int newsavelines)
{
- tree234 *newsb, *newscreen, *newalt;
- unsigned long *newdisp, *oldline, *line;
- int i, j, ccols;
+ tree234 *newalt;
+ unsigned long *newdisp, *line;
+ int i, j;
int sblen;
int save_alt_which = alt_which;
if (lines < 0) {
while (lines < 0) {
line = delpos234(screen, botline);
+ line = resizeline(line, cols);
for (i = 0; i < cols; i++)
line[i + 1] = erase_char;
line[cols + 1] = 0;
addpos234(scrollback, line, sblen);
line = line2;
}
+ line = resizeline(line, cols);
for (i = 0; i < cols; i++)
line[i + 1] = erase_char;
line[cols + 1] = 0;
/*
* Perform an actual beep if we're not overloaded.
*/
- if ((!cfg.bellovl || !beep_overloaded)
- && cfg.beep != 0) {
- if (cfg.beep != 2)
- beep(cfg.beep);
- else if (cfg.beep == 2) {
+ if (!cfg.bellovl || !beep_overloaded) {
+ beep(cfg.beep);
+ if (cfg.beep == BELL_VISUAL) {
in_vbell = TRUE;
vbell_timeout = ticks + VBELL_TIMEOUT;
term_update();
case ANSI('5', '#'):
nlattr = LATTR_NORM;
break;
- case ANSI('6', '#'):
+ default: /* spiritually case ANSI('6', '#'): */
nlattr = LATTR_WIDE;
break;
}
val = c - 'A' + 10;
else if (c >= 'a' && c <= 'a' + max - 10)
val = c - 'a' + 10;
- else
+ else {
termstate = TOPLEVEL;
+ break;
+ }
osc_string[osc_strlen++] = val;
if (osc_strlen >= 7) {
palette_set(osc_string[0],
ATTR_BLINK)));
break;
#endif
+ default: break; /* placate gcc warning about enum use */
}
if (selstate != NO_SELECTION) {
pos cursplus = curs;
case MBT_WHEEL_DOWN:
encstate = 0x61;
break;
+ default: break; /* placate gcc warning about enum use */
}
switch (a) {
case MA_DRAG:
return;
is_down = b;
break;
+ default: break; /* placate gcc warning about enum use */
}
if (shift)
encstate += 0x04;