… | |
… | |
258 | lfree (swap_save[p]); |
258 | lfree (swap_save[p]); |
259 | lfree (drawn[p]); |
259 | lfree (drawn[p]); |
260 | } |
260 | } |
261 | |
261 | |
262 | /* we have fewer rows so fix up cursor position */ |
262 | /* we have fewer rows so fix up cursor position */ |
263 | MIN_IT (screen.cur.row, (int32_t)nrow - 1); |
263 | min_it (screen.cur.row, (int32_t)nrow - 1); |
264 | |
264 | |
265 | scr_reset_realloc (); /* realloc _last_ */ |
265 | scr_reset_realloc (); /* realloc _last_ */ |
266 | } |
266 | } |
267 | else if (nrow > prev_nrow) |
267 | else if (nrow > prev_nrow) |
268 | { |
268 | { |
… | |
… | |
295 | } |
295 | } |
296 | |
296 | |
297 | #ifdef DEBUG_STRICT |
297 | #ifdef DEBUG_STRICT |
298 | assert (screen.cur.row < nrow); |
298 | assert (screen.cur.row < nrow); |
299 | #else /* drive with your eyes closed */ |
299 | #else /* drive with your eyes closed */ |
300 | MIN_IT (screen.cur.row, nrow - 1); |
300 | min_it (screen.cur.row, nrow - 1); |
301 | #endif |
301 | #endif |
302 | ncol = ocol; // save b/c scr_blank_screen_mem uses this |
302 | ncol = ocol; // save b/c scr_blank_screen_mem uses this |
303 | } |
303 | } |
304 | |
304 | |
305 | /* resize columns */ |
305 | /* resize columns */ |
… | |
… | |
315 | { |
315 | { |
316 | lresize (drawn[p]); |
316 | lresize (drawn[p]); |
317 | lresize (swap_save[p]); |
317 | lresize (swap_save[p]); |
318 | } |
318 | } |
319 | |
319 | |
320 | MIN_IT (screen.cur.col, (int16_t)ncol - 1); |
320 | min_it (screen.cur.col, (int16_t)ncol - 1); |
321 | |
321 | |
322 | delete old_ta; |
322 | delete old_ta; |
323 | delete old_ra; |
323 | delete old_ra; |
324 | } |
324 | } |
325 | |
325 | |
… | |
… | |
515 | set_font_style (); |
515 | set_font_style (); |
516 | break; |
516 | break; |
517 | } |
517 | } |
518 | |
518 | |
519 | /* boundary check in case screen size changed between SAVE and RESTORE */ |
519 | /* boundary check in case screen size changed between SAVE and RESTORE */ |
520 | MIN_IT (s->cur.row, nrow - 1); |
520 | min_it (s->cur.row, nrow - 1); |
521 | MIN_IT (s->cur.col, ncol - 1); |
521 | min_it (s->cur.col, ncol - 1); |
522 | #ifdef DEBUG_STRICT |
522 | #ifdef DEBUG_STRICT |
523 | assert (s->cur.row >= 0); |
523 | assert (s->cur.row >= 0); |
524 | assert (s->cur.col >= 0); |
524 | assert (s->cur.col >= 0); |
525 | #else /* drive with your eyes closed */ |
525 | #else /* drive with your eyes closed */ |
526 | MAX_IT (s->cur.row, 0); |
526 | max_it (s->cur.row, 0); |
527 | MAX_IT (s->cur.col, 0); |
527 | max_it (s->cur.col, 0); |
528 | #endif |
528 | #endif |
529 | } |
529 | } |
530 | |
530 | |
531 | /* ------------------------------------------------------------------------- */ |
531 | /* ------------------------------------------------------------------------- */ |
532 | /* |
532 | /* |
… | |
… | |
745 | #ifdef DEBUG_STRICT |
745 | #ifdef DEBUG_STRICT |
746 | assert (screen.cur.col < last_col); |
746 | assert (screen.cur.col < last_col); |
747 | assert ((screen.cur.row < nrow) |
747 | assert ((screen.cur.row < nrow) |
748 | && (screen.cur.row >= - (int32_t)nsaved)); |
748 | && (screen.cur.row >= - (int32_t)nsaved)); |
749 | #else /* drive with your eyes closed */ |
749 | #else /* drive with your eyes closed */ |
750 | MIN_IT (screen.cur.col, last_col - 1); |
750 | min_it (screen.cur.col, last_col - 1); |
751 | MIN_IT (screen.cur.row, (int32_t)nrow - 1); |
751 | min_it (screen.cur.row, (int32_t)nrow - 1); |
752 | MAX_IT (screen.cur.row, - (int32_t)nsaved); |
752 | max_it (screen.cur.row, - (int32_t)nsaved); |
753 | #endif |
753 | #endif |
754 | row = screen.cur.row; |
754 | row = screen.cur.row; |
755 | |
755 | |
756 | checksel = selection.op && current_screen == selection.screen ? 1 : 0; |
756 | checksel = selection.op && current_screen == selection.screen ? 1 : 0; |
757 | |
757 | |
… | |
… | |
763 | |
763 | |
764 | if (c < 0x20) |
764 | if (c < 0x20) |
765 | if (c == C0_LF) |
765 | if (c == C0_LF) |
766 | { |
766 | { |
767 | if (!line->is_longer ()) /* XXX: think about this */ |
767 | if (!line->is_longer ()) /* XXX: think about this */ |
768 | MAX_IT (line->l, screen.cur.col); |
768 | max_it (line->l, screen.cur.col); |
769 | |
769 | |
770 | screen.flags &= ~Screen_WrapNext; |
770 | screen.flags &= ~Screen_WrapNext; |
771 | |
771 | |
772 | if (screen.cur.row == screen.bscroll) |
772 | if (screen.cur.row == screen.bscroll) |
773 | scr_scroll_text (screen.tscroll, screen.bscroll, 1); |
773 | scr_scroll_text (screen.tscroll, screen.bscroll, 1); |
… | |
… | |
778 | continue; |
778 | continue; |
779 | } |
779 | } |
780 | else if (c == C0_CR) |
780 | else if (c == C0_CR) |
781 | { |
781 | { |
782 | if (!line->is_longer ()) /* XXX: think about this */ |
782 | if (!line->is_longer ()) /* XXX: think about this */ |
783 | MAX_IT (line->l, screen.cur.col); |
783 | max_it (line->l, screen.cur.col); |
784 | |
784 | |
785 | screen.flags &= ~Screen_WrapNext; |
785 | screen.flags &= ~Screen_WrapNext; |
786 | screen.cur.col = 0; |
786 | screen.cur.col = 0; |
787 | continue; |
787 | continue; |
788 | } |
788 | } |
… | |
… | |
964 | #endif |
964 | #endif |
965 | } |
965 | } |
966 | } |
966 | } |
967 | |
967 | |
968 | if (!line->is_longer ()) /* XXX: think about this */ |
968 | if (!line->is_longer ()) /* XXX: think about this */ |
969 | MAX_IT (line->l, screen.cur.col); |
969 | max_it (line->l, screen.cur.col); |
970 | |
970 | |
971 | #ifdef DEBUG_STRICT |
971 | #ifdef DEBUG_STRICT |
972 | assert (screen.cur.row >= 0); |
972 | assert (screen.cur.row >= 0); |
973 | #else /* drive with your eyes closed */ |
973 | #else /* drive with your eyes closed */ |
974 | MAX_IT (screen.cur.row, 0); |
974 | max_it (screen.cur.row, 0); |
975 | #endif |
975 | #endif |
976 | } |
976 | } |
977 | |
977 | |
978 | /* ------------------------------------------------------------------------- */ |
978 | /* ------------------------------------------------------------------------- */ |
979 | /* |
979 | /* |
… | |
… | |
1045 | if (ht && options & Opt_pastableTabs) |
1045 | if (ht && options & Opt_pastableTabs) |
1046 | { |
1046 | { |
1047 | base_rend = SET_FONT (base_rend, 0); |
1047 | base_rend = SET_FONT (base_rend, 0); |
1048 | |
1048 | |
1049 | if (!l.is_longer ()) /* XXX: think about this */ |
1049 | if (!l.is_longer ()) /* XXX: think about this */ |
1050 | MAX_IT (l.l, x); |
1050 | max_it (l.l, x); |
1051 | |
1051 | |
1052 | i = screen.cur.col; |
1052 | i = screen.cur.col; |
1053 | |
1053 | |
1054 | l.t[i] = '\t'; |
1054 | l.t[i] = '\t'; |
1055 | l.r[i] = base_rend; |
1055 | l.r[i] = base_rend; |
… | |
… | |
1134 | { |
1134 | { |
1135 | want_refresh = 1; |
1135 | want_refresh = 1; |
1136 | ZERO_SCROLLBACK (); |
1136 | ZERO_SCROLLBACK (); |
1137 | |
1137 | |
1138 | screen.cur.col = relative & C_RELATIVE ? screen.cur.col + col : col; |
1138 | screen.cur.col = relative & C_RELATIVE ? screen.cur.col + col : col; |
1139 | MAX_IT (screen.cur.col, 0); |
1139 | max_it (screen.cur.col, 0); |
1140 | MIN_IT (screen.cur.col, (int32_t)ncol - 1); |
1140 | min_it (screen.cur.col, (int32_t)ncol - 1); |
1141 | |
1141 | |
1142 | screen.flags &= ~Screen_WrapNext; |
1142 | screen.flags &= ~Screen_WrapNext; |
1143 | |
1143 | |
1144 | if (relative & R_RELATIVE) |
1144 | if (relative & R_RELATIVE) |
1145 | { |
1145 | { |
… | |
… | |
1163 | else |
1163 | else |
1164 | { |
1164 | { |
1165 | if (screen.flags & Screen_Relative) |
1165 | if (screen.flags & Screen_Relative) |
1166 | { /* relative origin mode */ |
1166 | { /* relative origin mode */ |
1167 | screen.cur.row = row + screen.tscroll; |
1167 | screen.cur.row = row + screen.tscroll; |
1168 | MIN_IT (screen.cur.row, screen.bscroll); |
1168 | min_it (screen.cur.row, screen.bscroll); |
1169 | } |
1169 | } |
1170 | else |
1170 | else |
1171 | screen.cur.row = row; |
1171 | screen.cur.row = row; |
1172 | } |
1172 | } |
1173 | |
1173 | |
1174 | MAX_IT (screen.cur.row, 0); |
1174 | max_it (screen.cur.row, 0); |
1175 | MIN_IT (screen.cur.row, (int32_t)nrow - 1); |
1175 | min_it (screen.cur.row, (int32_t)nrow - 1); |
1176 | } |
1176 | } |
1177 | |
1177 | |
1178 | /* ------------------------------------------------------------------------- */ |
1178 | /* ------------------------------------------------------------------------- */ |
1179 | /* |
1179 | /* |
1180 | * direction should be UP or DN |
1180 | * direction should be UP or DN |
… | |
… | |
1195 | || (screen.cur.row == screen.tscroll && direction == DN)) |
1195 | || (screen.cur.row == screen.tscroll && direction == DN)) |
1196 | scr_scroll_text (screen.tscroll, screen.bscroll, dirn); |
1196 | scr_scroll_text (screen.tscroll, screen.bscroll, dirn); |
1197 | else |
1197 | else |
1198 | screen.cur.row += dirn; |
1198 | screen.cur.row += dirn; |
1199 | |
1199 | |
1200 | MAX_IT (screen.cur.row, 0); |
1200 | max_it (screen.cur.row, 0); |
1201 | MIN_IT (screen.cur.row, (int32_t)nrow - 1); |
1201 | min_it (screen.cur.row, (int32_t)nrow - 1); |
1202 | selection_check (0); |
1202 | selection_check (0); |
1203 | } |
1203 | } |
1204 | |
1204 | |
1205 | /* ------------------------------------------------------------------------- */ |
1205 | /* ------------------------------------------------------------------------- */ |
1206 | /* |
1206 | /* |
… | |
… | |
1224 | switch (mode) |
1224 | switch (mode) |
1225 | { |
1225 | { |
1226 | case 0: /* erase to end of line */ |
1226 | case 0: /* erase to end of line */ |
1227 | col = screen.cur.col; |
1227 | col = screen.cur.col; |
1228 | num = ncol - col; |
1228 | num = ncol - col; |
1229 | MIN_IT (ROW(row).l, (int16_t)col); |
1229 | min_it (ROW(row).l, (int16_t)col); |
1230 | if (ROWCOL_IN_ROW_AT_OR_AFTER (selection.beg, screen.cur) |
1230 | if (ROWCOL_IN_ROW_AT_OR_AFTER (selection.beg, screen.cur) |
1231 | || ROWCOL_IN_ROW_AT_OR_AFTER (selection.end, screen.cur)) |
1231 | || ROWCOL_IN_ROW_AT_OR_AFTER (selection.end, screen.cur)) |
1232 | CLEAR_SELECTION (); |
1232 | CLEAR_SELECTION (); |
1233 | break; |
1233 | break; |
1234 | case 1: /* erase to beginning of line */ |
1234 | case 1: /* erase to beginning of line */ |
… | |
… | |
1301 | CLEAR_SELECTION (); |
1301 | CLEAR_SELECTION (); |
1302 | |
1302 | |
1303 | if (row >= nrow) /* Out Of Bounds */ |
1303 | if (row >= nrow) /* Out Of Bounds */ |
1304 | return; |
1304 | return; |
1305 | |
1305 | |
1306 | MIN_IT (num, (nrow - row)); |
1306 | min_it (num, (nrow - row)); |
1307 | |
1307 | |
1308 | if (rstyle & (RS_RVid | RS_Uline)) |
1308 | if (rstyle & (RS_RVid | RS_Uline)) |
1309 | ren = (rend_t) ~RS_None; |
1309 | ren = (rend_t) ~RS_None; |
1310 | else if (GET_BASEBG (rstyle) == Color_bg) |
1310 | else if (GET_BASEBG (rstyle) == Color_bg) |
1311 | { |
1311 | { |
… | |
… | |
1419 | return; |
1419 | return; |
1420 | |
1420 | |
1421 | scr_do_wrap (); |
1421 | scr_do_wrap (); |
1422 | |
1422 | |
1423 | selection_check (1); |
1423 | selection_check (1); |
1424 | MIN_IT (count, (ncol - screen.cur.col)); |
1424 | min_it (count, (ncol - screen.cur.col)); |
1425 | |
1425 | |
1426 | row = screen.cur.row; |
1426 | row = screen.cur.row; |
1427 | |
1427 | |
1428 | line_t *line = &ROW(row); |
1428 | line_t *line = &ROW(row); |
1429 | |
1429 | |
… | |
… | |
1437 | } |
1437 | } |
1438 | |
1438 | |
1439 | if (!line->is_longer ()) |
1439 | if (!line->is_longer ()) |
1440 | { |
1440 | { |
1441 | line->l += count; |
1441 | line->l += count; |
1442 | MIN_IT (line->l, ncol); |
1442 | min_it (line->l, ncol); |
1443 | } |
1443 | } |
1444 | |
1444 | |
1445 | if (selection.op && current_screen == selection.screen |
1445 | if (selection.op && current_screen == selection.screen |
1446 | && ROWCOL_IN_ROW_AT_OR_AFTER (selection.beg, screen.cur)) |
1446 | && ROWCOL_IN_ROW_AT_OR_AFTER (selection.beg, screen.cur)) |
1447 | { |
1447 | { |
… | |
… | |
1478 | scr_blank_line (*line, ncol - count, count, tr); |
1478 | scr_blank_line (*line, ncol - count, count, tr); |
1479 | |
1479 | |
1480 | if (line->is_longer ()) /* break line continuation */ |
1480 | if (line->is_longer ()) /* break line continuation */ |
1481 | line->l = ncol; |
1481 | line->l = ncol; |
1482 | |
1482 | |
1483 | line->l = max (line->l - count, 0); |
1483 | max_it (line->l - count, 0); |
1484 | |
1484 | |
1485 | if (selection.op && current_screen == selection.screen |
1485 | if (selection.op && current_screen == selection.screen |
1486 | && ROWCOL_IN_ROW_AT_OR_AFTER (selection.beg, screen.cur)) |
1486 | && ROWCOL_IN_ROW_AT_OR_AFTER (selection.beg, screen.cur)) |
1487 | { |
1487 | { |
1488 | if (selection.end.row != screen.cur.row |
1488 | if (selection.end.row != screen.cur.row |
… | |
… | |
1508 | * XTERM_SEQ: Set region <top> - <bot> inclusive: ESC [ <top> ; <bot> r |
1508 | * XTERM_SEQ: Set region <top> - <bot> inclusive: ESC [ <top> ; <bot> r |
1509 | */ |
1509 | */ |
1510 | void |
1510 | void |
1511 | rxvt_term::scr_scroll_region (int top, int bot) |
1511 | rxvt_term::scr_scroll_region (int top, int bot) |
1512 | { |
1512 | { |
1513 | MAX_IT (top, 0); |
1513 | max_it (top, 0); |
1514 | MIN_IT (bot, (int)nrow - 1); |
1514 | min_it (bot, (int)nrow - 1); |
1515 | |
1515 | |
1516 | if (top > bot) |
1516 | if (top > bot) |
1517 | return; |
1517 | return; |
1518 | |
1518 | |
1519 | screen.tscroll = top; |
1519 | screen.tscroll = top; |
… | |
… | |
1763 | eheight = height; |
1763 | eheight = height; |
1764 | } |
1764 | } |
1765 | #endif |
1765 | #endif |
1766 | |
1766 | |
1767 | #ifdef DEBUG_STRICT |
1767 | #ifdef DEBUG_STRICT |
1768 | x = max (x, 0); |
1768 | #if 0 |
1769 | x = min (x, (int)width); |
1769 | // that's not debugging //TODO //FIXME |
1770 | y = max (y, 0); |
1770 | clamp_it (x, 0, width); |
1771 | y = min (y, (int)height); |
1771 | clamp_it (y, 0, height); |
|
|
1772 | #endif |
1772 | #endif |
1773 | #endif |
1773 | |
1774 | |
1774 | /* round down */ |
1775 | /* round down */ |
1775 | rc[PART_BEG].col = Pixel2Col (x); |
1776 | rc[PART_BEG].col = Pixel2Col (x); |
1776 | rc[PART_BEG].row = Pixel2Row (y); |
1777 | rc[PART_BEG].row = Pixel2Row (y); |
… | |
… | |
1779 | rc[PART_END].row = Pixel2Row (y + eheight + fheight - 1); |
1780 | rc[PART_END].row = Pixel2Row (y + eheight + fheight - 1); |
1780 | |
1781 | |
1781 | /* sanity checks */ |
1782 | /* sanity checks */ |
1782 | for (i = PART_BEG; i < RC_COUNT; i++) |
1783 | for (i = PART_BEG; i < RC_COUNT; i++) |
1783 | { |
1784 | { |
1784 | MIN_IT (rc[i].col, ncol - 1); |
1785 | min_it (rc[i].col, ncol - 1); |
1785 | MIN_IT (rc[i].row, nrow - 1); |
1786 | min_it (rc[i].row, nrow - 1); |
1786 | } |
1787 | } |
1787 | |
1788 | |
1788 | for (i = rc[PART_BEG].row; i <= rc[PART_END].row; i++) |
1789 | for (i = rc[PART_BEG].row; i <= rc[PART_END].row; i++) |
1789 | fill_text (&drawn[i].t[rc[PART_BEG].col], 0, rc[PART_END].col - rc[PART_BEG].col + 1); |
1790 | fill_text (&drawn[i].t[rc[PART_BEG].col], 0, rc[PART_END].col - rc[PART_BEG].col + 1); |
1790 | |
1791 | |
… | |
… | |
2130 | |
2131 | |
2131 | if (len != -1) |
2132 | if (len != -1) |
2132 | { |
2133 | { |
2133 | /* also comes here at end if needed because of >= above */ |
2134 | /* also comes here at end if needed because of >= above */ |
2134 | if (wlen < len) |
2135 | if (wlen < len) |
2135 | SWAP_IT (wlen, len, int); |
2136 | ::swap (wlen, len); |
2136 | |
2137 | |
2137 | XCopyArea (display->display, vt, vt, |
2138 | XCopyArea (display->display, vt, vt, |
2138 | gc, 0, Row2Pixel (len + i), |
2139 | gc, 0, Row2Pixel (len + i), |
2139 | (unsigned int)TermWin_TotalWidth (), |
2140 | (unsigned int)TermWin_TotalWidth (), |
2140 | (unsigned int)Height2Pixel (wlen - len + 1), |
2141 | (unsigned int)Height2Pixel (wlen - len + 1), |
… | |
… | |
2272 | fore = Color_UL; |
2273 | fore = Color_UL; |
2273 | #endif |
2274 | #endif |
2274 | |
2275 | |
2275 | if (invert) |
2276 | if (invert) |
2276 | { |
2277 | { |
2277 | SWAP_IT (fore, back, int); |
2278 | ::swap (fore, back); |
2278 | |
2279 | |
2279 | #ifndef NO_BOLD_UNDERLINE_REVERSE |
2280 | #ifndef NO_BOLD_UNDERLINE_REVERSE |
2280 | if (ISSET_PIXCOLOR (Color_RV)) |
2281 | if (ISSET_PIXCOLOR (Color_RV)) |
2281 | back = Color_RV; |
2282 | back = Color_RV; |
2282 | |
2283 | |
… | |
… | |
3364 | } |
3365 | } |
3365 | } |
3366 | } |
3366 | |
3367 | |
3367 | #if ENABLE_FRILLS |
3368 | #if ENABLE_FRILLS |
3368 | if (selection.rect && selection.beg.col > selection.end.col) |
3369 | if (selection.rect && selection.beg.col > selection.end.col) |
3369 | SWAP_IT (selection.beg.col, selection.end.col, int); |
3370 | ::swap (selection.beg.col, selection.end.col); |
3370 | #endif |
3371 | #endif |
3371 | } |
3372 | } |
3372 | |
3373 | |
3373 | #if ENABLE_FRILLS |
3374 | #if ENABLE_FRILLS |
3374 | void |
3375 | void |
… | |
… | |
3572 | */ |
3573 | */ |
3573 | void |
3574 | void |
3574 | rxvt_term::pixel_position (int *x, int *y) |
3575 | rxvt_term::pixel_position (int *x, int *y) |
3575 | { |
3576 | { |
3576 | *x = Pixel2Col (*x); |
3577 | *x = Pixel2Col (*x); |
3577 | /* MAX_IT (*x, 0); MIN_IT (*x, (int)ncol - 1); */ |
3578 | /* max_it (*x, 0); min_it (*x, (int)ncol - 1); */ |
3578 | *y = Pixel2Row (*y); |
3579 | *y = Pixel2Row (*y); |
3579 | /* MAX_IT (*y, 0); MIN_IT (*y, (int)nrow - 1); */ |
3580 | /* max_it (*y, 0); min_it (*y, (int)nrow - 1); */ |
3580 | } |
3581 | } |
3581 | |
3582 | |
3582 | /* ------------------------------------------------------------------------- */ |
3583 | /* ------------------------------------------------------------------------- */ |
3583 | #ifdef USE_XIM |
3584 | #ifdef USE_XIM |
3584 | void |
3585 | void |
… | |
… | |
3606 | |
3607 | |
3607 | if (x < 0) x = ncol - w; |
3608 | if (x < 0) x = ncol - w; |
3608 | if (y < 0) y = nrow - h; |
3609 | if (y < 0) y = nrow - h; |
3609 | |
3610 | |
3610 | // make space for border |
3611 | // make space for border |
3611 | w += 2; MIN_IT (w, ncol); |
3612 | w += 2; min_it (w, ncol); |
3612 | h += 2; MIN_IT (h, nrow); |
3613 | h += 2; min_it (h, nrow); |
3613 | |
3614 | |
3614 | x -= 1; MAX_IT (x, 0); |
3615 | x -= 1; max_it (x, 0); |
3615 | y -= 1; MAX_IT (y, 0); |
3616 | y -= 1; max_it (y, 0); |
3616 | |
3617 | |
3617 | MIN_IT (x, ncol - w); |
3618 | min_it (x, ncol - w); |
3618 | MIN_IT (y, nrow - h); |
3619 | min_it (y, nrow - h); |
3619 | |
3620 | |
3620 | ov_x = x; ov_y = y; |
3621 | ov_x = x; ov_y = y; |
3621 | ov_w = w; ov_h = h; |
3622 | ov_w = w; ov_h = h; |
3622 | |
3623 | |
3623 | ov_text = new text_t *[h]; |
3624 | ov_text = new text_t *[h]; |