* Fix some of the cursor motion commands to handle multiline fields
* Fix line wrapping code for multiline fields
This commit is contained in:
parent
c56fc52024
commit
98181dccba
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: internals.c,v 1.16 2001/05/16 11:51:16 blymn Exp $ */
|
/* $NetBSD: internals.c,v 1.17 2001/05/23 15:02:55 blymn Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1998-1999 Brett Lymn
|
* Copyright (c) 1998-1999 Brett Lymn
|
||||||
|
@ -364,7 +364,7 @@ _formi_wrap_field(FIELD *field, unsigned int loc)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* split on first whitespace before current word */
|
/* split on first whitespace before current word */
|
||||||
pos = width + field->lines[row].start;
|
pos = width + field->lines[row].start - 1;
|
||||||
if (pos >= field->buffers[0].length)
|
if (pos >= field->buffers[0].length)
|
||||||
pos = field->buffers[0].length - 1;
|
pos = field->buffers[0].length - 1;
|
||||||
|
|
||||||
|
@ -393,6 +393,15 @@ _formi_wrap_field(FIELD *field, unsigned int loc)
|
||||||
if ((pos == field->buffers[0].length - 1) &&
|
if ((pos == field->buffers[0].length - 1) &&
|
||||||
(isblank(str[pos])))
|
(isblank(str[pos])))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* otherwise, if we are still sitting on a
|
||||||
|
* blank but not at the end of the line
|
||||||
|
* move forward one char so the blank
|
||||||
|
* is on the line boundary.
|
||||||
|
*/
|
||||||
|
if (isblank(str[pos]))
|
||||||
|
pos++;
|
||||||
|
|
||||||
if (split_line(field, pos) != E_OK) {
|
if (split_line(field, pos) != E_OK) {
|
||||||
return E_REQUEST_DENIED;
|
return E_REQUEST_DENIED;
|
||||||
|
@ -417,9 +426,16 @@ _formi_join_line(FIELD *field, unsigned int pos, int direction)
|
||||||
unsigned int row, i;
|
unsigned int row, i;
|
||||||
int old_alloced, old_row_count;
|
int old_alloced, old_row_count;
|
||||||
struct _formi_field_lines *saved;
|
struct _formi_field_lines *saved;
|
||||||
|
#ifdef DEBUG
|
||||||
|
int dbg_ok = FALSE;
|
||||||
|
|
||||||
|
if (_formi_create_dbg_file() == E_OK) {
|
||||||
|
dbg_ok = TRUE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if ((saved = (struct _formi_field_lines *)
|
if ((saved = (struct _formi_field_lines *)
|
||||||
malloc(field->row_count * sizeof(struct _formi_field_lines)))
|
malloc(field->lines_alloced * sizeof(struct _formi_field_lines)))
|
||||||
== NULL)
|
== NULL)
|
||||||
return E_REQUEST_DENIED;
|
return E_REQUEST_DENIED;
|
||||||
|
|
||||||
|
@ -429,6 +445,13 @@ _formi_join_line(FIELD *field, unsigned int pos, int direction)
|
||||||
old_row_count = field->row_count;
|
old_row_count = field->row_count;
|
||||||
|
|
||||||
row = find_cur_line(field, pos);
|
row = find_cur_line(field, pos);
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
if (dbg_ok == TRUE) {
|
||||||
|
fprintf(dbg, "join_line: working on row %d, row_count = %d\n",
|
||||||
|
row, field->row_count);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if ((direction == JOIN_NEXT) || (direction == JOIN_NEXT_NW)) {
|
if ((direction == JOIN_NEXT) || (direction == JOIN_NEXT_NW)) {
|
||||||
/* see if there is another line following... */
|
/* see if there is another line following... */
|
||||||
|
@ -436,6 +459,20 @@ _formi_join_line(FIELD *field, unsigned int pos, int direction)
|
||||||
free(saved);
|
free(saved);
|
||||||
return E_REQUEST_DENIED;
|
return E_REQUEST_DENIED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
if (dbg_ok == TRUE) {
|
||||||
|
fprintf(dbg,
|
||||||
|
"join_line: join_next before end = %d, length = %d",
|
||||||
|
field->lines[row].end,
|
||||||
|
field->lines[row].length);
|
||||||
|
fprintf(dbg,
|
||||||
|
" :: next row end = %d, length = %d\n",
|
||||||
|
field->lines[row + 1].end,
|
||||||
|
field->lines[row + 1].length);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
field->lines[row].end = field->lines[row + 1].end;
|
field->lines[row].end = field->lines[row + 1].end;
|
||||||
field->lines[row].length += field->lines[row + 1].length;
|
field->lines[row].length += field->lines[row + 1].length;
|
||||||
/* shift all the remaining lines up.... */
|
/* shift all the remaining lines up.... */
|
||||||
|
@ -446,6 +483,20 @@ _formi_join_line(FIELD *field, unsigned int pos, int direction)
|
||||||
free(saved);
|
free(saved);
|
||||||
return E_REQUEST_DENIED;
|
return E_REQUEST_DENIED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
if (dbg_ok == TRUE) {
|
||||||
|
fprintf(dbg,
|
||||||
|
"join_line: join_prev before end = %d, length = %d",
|
||||||
|
field->lines[row].end,
|
||||||
|
field->lines[row].length);
|
||||||
|
fprintf(dbg,
|
||||||
|
" :: prev row end = %d, length = %d\n",
|
||||||
|
field->lines[row - 1].end,
|
||||||
|
field->lines[row - 1].length);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
field->lines[row - 1].end = field->lines[row].end;
|
field->lines[row - 1].end = field->lines[row].end;
|
||||||
field->lines[row - 1].length += field->lines[row].length;
|
field->lines[row - 1].length += field->lines[row].length;
|
||||||
/* shift all the remaining lines up */
|
/* shift all the remaining lines up */
|
||||||
|
@ -453,6 +504,14 @@ _formi_join_line(FIELD *field, unsigned int pos, int direction)
|
||||||
field->lines[i - 1] = field->lines[i];
|
field->lines[i - 1] = field->lines[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
if (dbg_ok == TRUE) {
|
||||||
|
fprintf(dbg,
|
||||||
|
"join_line: exit end = %d, length = %d\n",
|
||||||
|
field->lines[row].end, field->lines[row].length);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
field->row_count--;
|
field->row_count--;
|
||||||
|
|
||||||
/* wrap the field if required, if this fails undo the change */
|
/* wrap the field if required, if this fails undo the change */
|
||||||
|
@ -509,8 +568,23 @@ split_line(FIELD *field, unsigned pos)
|
||||||
row, field->lines[row].end, row,
|
row, field->lines[row].end, row,
|
||||||
field->lines[row].length);
|
field->lines[row].length);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
assert(((field->lines[row].end < INT_MAX) &&
|
||||||
|
(field->lines[row].length < INT_MAX) &&
|
||||||
|
(field->lines[row].length > 0)));
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* if asked to split right where the line already starts then
|
||||||
|
* just return - nothing to do.
|
||||||
|
*/
|
||||||
|
if (field->lines[row].start == pos)
|
||||||
|
return E_OK;
|
||||||
|
|
||||||
|
for (i = field->row_count - 1; i > row; i--) {
|
||||||
|
field->lines[i + 1] = field->lines[i];
|
||||||
|
}
|
||||||
|
|
||||||
field->lines[row + 1].end = field->lines[row].end;
|
field->lines[row + 1].end = field->lines[row].end;
|
||||||
field->lines[row].end = pos - 1;
|
field->lines[row].end = pos - 1;
|
||||||
field->lines[row].length = pos - field->lines[row].start;
|
field->lines[row].length = pos - field->lines[row].start;
|
||||||
|
@ -523,7 +597,9 @@ split_line(FIELD *field, unsigned pos)
|
||||||
(field->lines[row].end < INT_MAX) &&
|
(field->lines[row].end < INT_MAX) &&
|
||||||
(field->lines[row].length < INT_MAX) &&
|
(field->lines[row].length < INT_MAX) &&
|
||||||
(field->lines[row + 1].start < INT_MAX) &&
|
(field->lines[row + 1].start < INT_MAX) &&
|
||||||
(field->lines[row + 1].length < INT_MAX)));
|
(field->lines[row + 1].length < INT_MAX) &&
|
||||||
|
(field->lines[row].length > 0) &&
|
||||||
|
(field->lines[row + 1].length > 0)));
|
||||||
|
|
||||||
if (dbg_ok == TRUE) {
|
if (dbg_ok == TRUE) {
|
||||||
fprintf(dbg,
|
fprintf(dbg,
|
||||||
|
@ -533,16 +609,20 @@ split_line(FIELD *field, unsigned pos)
|
||||||
fprintf(dbg, "lines[%d].start = %d, lines[%d].end = %d, ",
|
fprintf(dbg, "lines[%d].start = %d, lines[%d].end = %d, ",
|
||||||
row + 1, field->lines[row + 1].start, row + 1,
|
row + 1, field->lines[row + 1].start, row + 1,
|
||||||
field->lines[row + 1].end);
|
field->lines[row + 1].end);
|
||||||
fprintf(dbg, "lines[%d].length = %d\n", row + 1,
|
fprintf(dbg, "lines[%d].length = %d, row_count = %d\n",
|
||||||
field->lines[row + 1].length);
|
row + 1, field->lines[row + 1].length,
|
||||||
|
field->row_count + 1);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (i = row + 2; i < field->row_count; i++) {
|
|
||||||
field->lines[i + 1] = field->lines[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
field->row_count++;
|
field->row_count++;
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
if (dbg_ok == TRUE) {
|
||||||
|
bump_lines(field, 0, 0); /* will report line data for us */
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return E_OK;
|
return E_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -771,7 +851,7 @@ _formi_find_pages(FORM *form)
|
||||||
void
|
void
|
||||||
_formi_redraw_field(FORM *form, int field)
|
_formi_redraw_field(FORM *form, int field)
|
||||||
{
|
{
|
||||||
unsigned int pre, post, flen, slen, i, row, start;
|
unsigned int pre, post, flen, slen, i, row, start, last_row;
|
||||||
char *str;
|
char *str;
|
||||||
FIELD *cur;
|
FIELD *cur;
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
@ -784,7 +864,12 @@ _formi_redraw_field(FORM *form, int field)
|
||||||
slen = 0;
|
slen = 0;
|
||||||
start = 0;
|
start = 0;
|
||||||
|
|
||||||
for (row = cur->start_line; row < cur->row_count; row++) {
|
if ((cur->row_count - cur->start_line) < cur->rows)
|
||||||
|
last_row = cur->row_count;
|
||||||
|
else
|
||||||
|
last_row = cur->start_line + cur->rows;
|
||||||
|
|
||||||
|
for (row = cur->start_line; row < last_row; row++) {
|
||||||
wmove(form->scrwin,
|
wmove(form->scrwin,
|
||||||
(int) (cur->form_row + row - cur->start_line),
|
(int) (cur->form_row + row - cur->start_line),
|
||||||
(int) cur->form_col);
|
(int) cur->form_col);
|
||||||
|
@ -1147,29 +1232,67 @@ _formi_manipulate_field(FORM *form, int c)
|
||||||
* cursor is at the end of the field.
|
* cursor is at the end of the field.
|
||||||
*/
|
*/
|
||||||
if (((cur->opts & O_STATIC) == O_STATIC) &&
|
if (((cur->opts & O_STATIC) == O_STATIC) &&
|
||||||
(cur->cursor_xpos == cur->cols - 1))
|
(cur->cursor_xpos == cur->cols - 1) &&
|
||||||
|
((cur->rows + cur->nrows) == 1))
|
||||||
return E_REQUEST_DENIED;
|
return E_REQUEST_DENIED;
|
||||||
|
|
||||||
if ((cur->cursor_xpos + cur->start_char + 1)
|
if ((cur->cursor_xpos + cur->start_char + 1)
|
||||||
> cur->buffers[0].length)
|
> cur->buffers[0].length)
|
||||||
return E_REQUEST_DENIED;
|
return E_REQUEST_DENIED;
|
||||||
|
|
||||||
cur->cursor_xpos++;
|
if ((cur->rows + cur->nrows) == 1) {
|
||||||
if (cur->cursor_xpos >= cur->cols - 1) {
|
cur->cursor_xpos++;
|
||||||
cur->cursor_xpos = cur->cols - 1;
|
if (cur->cursor_xpos >= cur->cols - 1) {
|
||||||
if ((cur->opts & O_STATIC) != O_STATIC)
|
cur->cursor_xpos = cur->cols - 1;
|
||||||
cur->start_char++;
|
if ((cur->opts & O_STATIC) != O_STATIC)
|
||||||
|
cur->start_char++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
row = cur->start_line + cur->cursor_ypos;
|
||||||
|
if (cur->cursor_xpos == (cur->lines[row].length - 1)) {
|
||||||
|
if ((row + 1) >= cur->row_count)
|
||||||
|
return E_REQUEST_DENIED;
|
||||||
|
|
||||||
|
cur->cursor_xpos = 0;
|
||||||
|
if (cur->cursor_ypos == (cur->rows - 1))
|
||||||
|
cur->start_line++;
|
||||||
|
else
|
||||||
|
cur->cursor_ypos++;
|
||||||
|
} else
|
||||||
|
cur->cursor_xpos++;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case REQ_PREV_CHAR:
|
case REQ_PREV_CHAR:
|
||||||
if (cur->cursor_xpos == 0) {
|
if ((cur->rows + cur->nrows) == 1) {
|
||||||
if (cur->start_char > 0)
|
if (cur->cursor_xpos == 0) {
|
||||||
cur->start_char--;
|
if (cur->start_char > 0)
|
||||||
else
|
cur->start_char--;
|
||||||
|
else
|
||||||
|
return E_REQUEST_DENIED;
|
||||||
|
} else
|
||||||
|
cur->cursor_xpos--;
|
||||||
|
} else {
|
||||||
|
if ((cur->cursor_xpos == 0) &&
|
||||||
|
(cur->cursor_ypos == 0) &&
|
||||||
|
(cur->start_line == 0))
|
||||||
return E_REQUEST_DENIED;
|
return E_REQUEST_DENIED;
|
||||||
} else
|
|
||||||
cur->cursor_xpos--;
|
if (cur->cursor_xpos > 0) {
|
||||||
|
cur->cursor_xpos--;
|
||||||
|
} else {
|
||||||
|
if (cur->cursor_ypos > 0)
|
||||||
|
cur->cursor_ypos--;
|
||||||
|
else
|
||||||
|
cur->start_line--;
|
||||||
|
cur->cursor_xpos =
|
||||||
|
cur->lines[cur->start_line
|
||||||
|
+ cur->cursor_ypos].length
|
||||||
|
- 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case REQ_NEXT_LINE:
|
case REQ_NEXT_LINE:
|
||||||
|
@ -1248,8 +1371,6 @@ _formi_manipulate_field(FORM *form, int c)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case REQ_BEG_LINE:
|
case REQ_BEG_LINE:
|
||||||
cur->start_char =
|
|
||||||
cur->lines[cur->start_line + cur->cursor_ypos].start;
|
|
||||||
cur->cursor_xpos = 0;
|
cur->cursor_xpos = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1262,9 +1383,6 @@ _formi_manipulate_field(FORM *form, int c)
|
||||||
cur->cursor_ypos = cur->row_count - 1;
|
cur->cursor_ypos = cur->row_count - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
cur->start_char =
|
|
||||||
cur->lines[cur->start_line + cur->cursor_ypos].start;
|
|
||||||
cur->cursor_xpos = 0;
|
|
||||||
/* we fall through here deliberately, we are on the
|
/* we fall through here deliberately, we are on the
|
||||||
* correct row, now we need to get to the end of the
|
* correct row, now we need to get to the end of the
|
||||||
* line.
|
* line.
|
||||||
|
@ -1275,53 +1393,49 @@ _formi_manipulate_field(FORM *form, int c)
|
||||||
start = cur->lines[cur->start_line + cur->cursor_ypos].start;
|
start = cur->lines[cur->start_line + cur->cursor_ypos].start;
|
||||||
end = cur->lines[cur->start_line + cur->cursor_ypos].end;
|
end = cur->lines[cur->start_line + cur->cursor_ypos].end;
|
||||||
|
|
||||||
if (end - start > cur->cols - 1) {
|
if ((cur->rows + cur->nrows) == 1) {
|
||||||
cur->cursor_xpos = cur->cols - 1;
|
if (end - start > cur->cols - 1) {
|
||||||
cur->start_char = end - cur->cols;
|
cur->cursor_xpos = cur->cols - 1;
|
||||||
if ((cur->opts & O_STATIC) != O_STATIC)
|
cur->start_char = end - cur->cols;
|
||||||
cur->start_char++;
|
if ((cur->opts & O_STATIC) != O_STATIC)
|
||||||
|
cur->start_char++;
|
||||||
|
} else {
|
||||||
|
cur->cursor_xpos = end - start + 1;
|
||||||
|
if (((cur->opts & O_STATIC) == O_STATIC) &&
|
||||||
|
((end - start) == (cur->cols - 1)))
|
||||||
|
cur->cursor_xpos--;
|
||||||
|
|
||||||
|
cur->start_char = start;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
cur->cursor_xpos = end - start + 1;
|
cur->cursor_xpos = end - start + 1;
|
||||||
if (((cur->opts & O_STATIC) == O_STATIC) &&
|
|
||||||
((end - start) == (cur->cols - 1)))
|
|
||||||
cur->cursor_xpos--;
|
|
||||||
|
|
||||||
cur->start_char = start;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case REQ_LEFT_CHAR:
|
case REQ_LEFT_CHAR:
|
||||||
if ((cur->cursor_xpos == 0) && (cur->start_char == 0))
|
if ((cur->cursor_xpos == 0) && (cur->start_char == 0)
|
||||||
|
&& (cur->start_line == 0) && (cur->cursor_ypos == 0))
|
||||||
return E_REQUEST_DENIED;
|
return E_REQUEST_DENIED;
|
||||||
|
|
||||||
if (cur->cursor_xpos == 0) {
|
if (cur->cursor_xpos == 0) {
|
||||||
cur->start_char--;
|
if ((cur->rows + cur->nrows) == 1) {
|
||||||
start = cur->lines[cur->cursor_ypos
|
if (cur->start_char > 0)
|
||||||
+ cur->start_line].start;
|
cur->start_char--;
|
||||||
if (cur->start_char < start) {
|
else
|
||||||
|
return E_REQUEST_DENIED;
|
||||||
|
} else {
|
||||||
if ((cur->cursor_ypos == 0) &&
|
if ((cur->cursor_ypos == 0) &&
|
||||||
(cur->start_line == 0))
|
(cur->start_line == 0))
|
||||||
{
|
|
||||||
cur->start_char++;
|
|
||||||
return E_REQUEST_DENIED;
|
return E_REQUEST_DENIED;
|
||||||
}
|
|
||||||
|
|
||||||
if (cur->cursor_ypos == 0)
|
if (cur->cursor_ypos == 0)
|
||||||
cur->start_line--;
|
cur->start_line--;
|
||||||
else
|
else
|
||||||
cur->cursor_ypos--;
|
cur->cursor_ypos--;
|
||||||
|
|
||||||
end = cur->lines[cur->cursor_ypos
|
cur->cursor_xpos =
|
||||||
+ cur->start_line].end;
|
cur->lines[cur->cursor_ypos
|
||||||
len = cur->lines[cur->cursor_ypos
|
+ cur->start_line].length;
|
||||||
+ cur->start_line].length;
|
|
||||||
if (len >= cur->cols) {
|
|
||||||
cur->cursor_xpos = cur->cols - 1;
|
|
||||||
cur->start_char = end - cur->cols;
|
|
||||||
} else {
|
|
||||||
cur->cursor_xpos = len;
|
|
||||||
cur->start_char = start;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
cur->cursor_xpos--;
|
cur->cursor_xpos--;
|
||||||
|
@ -1353,12 +1467,10 @@ _formi_manipulate_field(FORM *form, int c)
|
||||||
} else
|
} else
|
||||||
cur->cursor_ypos++;
|
cur->cursor_ypos++;
|
||||||
|
|
||||||
row++;
|
|
||||||
|
|
||||||
cur->cursor_xpos = 0;
|
cur->cursor_xpos = 0;
|
||||||
cur->start_char = cur->lines[row].start;
|
|
||||||
} else {
|
} else {
|
||||||
if (cur->cursor_xpos == cur->cols - 1)
|
if (((cur->rows + cur->nrows) == 1) &&
|
||||||
|
(cur->cursor_xpos == cur->cols - 1))
|
||||||
cur->start_char++;
|
cur->start_char++;
|
||||||
else
|
else
|
||||||
cur->cursor_xpos++;
|
cur->cursor_xpos++;
|
||||||
|
@ -1382,7 +1494,6 @@ _formi_manipulate_field(FORM *form, int c)
|
||||||
|
|
||||||
row = cur->start_line + cur->cursor_ypos;
|
row = cur->start_line + cur->cursor_ypos;
|
||||||
|
|
||||||
cur->start_char = cur->lines[row].start;
|
|
||||||
if (cur->cursor_xpos > cur->lines[row].length)
|
if (cur->cursor_xpos > cur->lines[row].length)
|
||||||
cur->cursor_xpos = cur->lines[row].length;
|
cur->cursor_xpos = cur->lines[row].length;
|
||||||
break;
|
break;
|
||||||
|
@ -1396,7 +1507,6 @@ _formi_manipulate_field(FORM *form, int c)
|
||||||
cur->cursor_ypos++;
|
cur->cursor_ypos++;
|
||||||
|
|
||||||
row = cur->start_line + cur->cursor_ypos;
|
row = cur->start_line + cur->cursor_ypos;
|
||||||
cur->start_char = cur->lines[row].start;
|
|
||||||
if (cur->cursor_xpos > cur->lines[row].length)
|
if (cur->cursor_xpos > cur->lines[row].length)
|
||||||
cur->cursor_xpos = cur->lines[row].length;
|
cur->cursor_xpos = cur->lines[row].length;
|
||||||
break;
|
break;
|
||||||
|
@ -1486,6 +1596,7 @@ _formi_manipulate_field(FORM *form, int c)
|
||||||
bcopy(&cur->buffers[0].string[end + 1],
|
bcopy(&cur->buffers[0].string[end + 1],
|
||||||
&cur->buffers[0].string[start],
|
&cur->buffers[0].string[start],
|
||||||
(unsigned) cur->buffers[0].length - end + 1);
|
(unsigned) cur->buffers[0].length - end + 1);
|
||||||
|
/* XXXX wrong */
|
||||||
if (cur->row_count > 1) {
|
if (cur->row_count > 1) {
|
||||||
cur->row_count--;
|
cur->row_count--;
|
||||||
bcopy(&cur->lines[row + 1], &cur->lines[row],
|
bcopy(&cur->lines[row + 1], &cur->lines[row],
|
||||||
|
|
Loading…
Reference in New Issue