+/*
+LICENSE INFORMATION:
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License (LGPL) as published by the Free Software Foundation.
+
+Please refer to the COPYING file for more information.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Copyright (c) 2004 Bruno T. C. de Oliveira
+*/
+
+
#include "rote.h"
#include "roteprivate.h"
#include "inject_csi.h"
#include <string.h>
+#include <stdio.h>
static void cursor_line_down(RoteTerm *rt) {
int i;
}
static inline void put_normal_char(RoteTerm *rt, char c) {
+ if (rt->ccol >= rt->cols) {
+ rt->ccol = 0;
+ cursor_line_down(rt);
+ }
+
+ if (rt->insert) {
+ int i;
+
+ for(i = rt->cols - 1; i >= rt->ccol+1; i--)
+ rt->cells[rt->crow][i] = rt->cells[rt->crow][i-1];
+ }
+
rt->cells[rt->crow][rt->ccol].ch = c;
rt->cells[rt->crow][rt->ccol].attr = rt->curattr;
rt->ccol++;
rt->line_dirty[rt->crow] = true;
rt->curpos_dirty = true;
-
- if (rt->ccol >= rt->cols) {
- rt->ccol = 0;
- cursor_line_down(rt);
- }
}
static inline void put_graphmode_char(RoteTerm *rt, char c) {
rt->curpos_dirty = true;
break;
case '\t': /* tab */
- while (rt->ccol % 8) put_normal_char(rt, ' ');
+ rt->ccol += 8 - (rt->ccol % 8);
+ clamp_cursor_to_bounds(rt);
break;
case '\x1B': /* begin escape sequence (aborting previous one if any) */
new_escape_sequence(rt);