X-Git-Url: http://git.madism.org/?a=blobdiff_plain;ds=sidebyside;f=inject.c;h=031b809d35d1e553d6ed89b8c6ce3a7c6b1af009;hb=8e5831e371def4903b232c4e91962d2053cc6ce1;hp=0ba7d695d65352104e94744568cfb8419b3e1174;hpb=93c516d8991c4b6935fc03a24317ea0785e78a93;p=apps%2Fmadtty.git diff --git a/inject.c b/inject.c index 0ba7d69..031b809 100644 --- a/inject.c +++ b/inject.c @@ -1,7 +1,29 @@ +/* +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 +#include static void cursor_line_down(RoteTerm *rt) { int i; @@ -54,17 +76,24 @@ static void cursor_line_up(RoteTerm *rt) { } 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) { @@ -107,7 +136,8 @@ static void handle_control_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);