made deleteChar and addChar more general
This commit is contained in:
parent
d0e850e13d
commit
c66839b23d
38
ste.c
38
ste.c
@ -68,8 +68,8 @@ static int curRealToRender (row *rw, int c_x);
|
||||
|
||||
/* Row operations */
|
||||
static inline void rowInit (void);
|
||||
static void rowAddChar (row *rw, char c);
|
||||
static void rowDeleteChar (row *rw, int m);
|
||||
static void rowAddChar (row *rw, char c, int pos);
|
||||
static void rowDeleteChar (row *rw, int select, int pos);
|
||||
static void rowCpy (row *to, row *from);
|
||||
static void rowAddRow (int pos);
|
||||
static void rowFree (row *rw);
|
||||
@ -139,7 +139,7 @@ int main (int argc, char *argv[])
|
||||
break;
|
||||
break;
|
||||
case (KEY_DC):
|
||||
rowDeleteChar(&rows.rw[t.cur.yy], 1);
|
||||
rowDeleteChar(&rows.rw[t.cur.yy], 1, t.cur.xx);
|
||||
break;
|
||||
case (KEY_ENTER):
|
||||
case (10):
|
||||
@ -156,7 +156,7 @@ int main (int argc, char *argv[])
|
||||
break;
|
||||
default:
|
||||
if (c == KEY_STAB) c = '\t';
|
||||
rowAddChar(&rows.rw[t.cur.yy], c);
|
||||
rowAddChar(&rows.rw[t.cur.yy], c, t.cur.xx);
|
||||
}
|
||||
if (decimalSize(rows.rownum) - irow) updateInfo();
|
||||
}
|
||||
@ -397,7 +397,7 @@ void rowInit (void)
|
||||
rows.rownum = 0;
|
||||
}
|
||||
|
||||
void rowAddChar (row *rw, char c) // WIP
|
||||
void rowAddChar (row *rw, char c, int pos) // WIP
|
||||
{
|
||||
// Error checking (allow tab)
|
||||
if (!c || (iscntrl(c) && c != '\t')) return;
|
||||
@ -411,15 +411,15 @@ void rowAddChar (row *rw, char c) // WIP
|
||||
rw->size++;
|
||||
|
||||
// copy bf cursor
|
||||
for (i = 0; i < t.cur.xx; i++) {
|
||||
for (i = 0; i < pos; i++) {
|
||||
rw->chars[i] = s[i];
|
||||
}
|
||||
|
||||
// add at cursor
|
||||
rw->chars[t.cur.xx++] = c;
|
||||
rw->chars[pos++] = c;
|
||||
|
||||
//copy after cursor
|
||||
for (i = t.cur.xx; i < rw->size + 1; i++) {
|
||||
for (i = pos; i < rw->size + 1; i++) {
|
||||
rw->chars[i] = s[i - 1];
|
||||
}
|
||||
|
||||
@ -429,35 +429,35 @@ void rowAddChar (row *rw, char c) // WIP
|
||||
t.cur.x++;
|
||||
}
|
||||
|
||||
void rowDeleteChar (row *rw, int m) // WIP
|
||||
void rowDeleteChar (row *rw, int select, int pos) // WIP
|
||||
{
|
||||
char *s = rw->chars;
|
||||
//Do not delete NULL char
|
||||
if (s[t.cur.xx - 1] == '\0' && t.cur.xx) return;
|
||||
if (!t.cur.xx && !m) return;
|
||||
if (s[t.cur.xx] == '\0' && m) return;
|
||||
if (s[pos - 1] == '\0' && pos) return;
|
||||
if (!pos && !select) return;
|
||||
if (s[pos] == '\0' && select) return;
|
||||
|
||||
rw->chars = malloc(rw->size);
|
||||
if (rw->chars == NULL) termDie("malloc in rowDeleteChar");
|
||||
rw->size--;
|
||||
|
||||
// Backspace
|
||||
if (!m) {
|
||||
for (int i = 0; i < t.cur.xx - 1; i++)
|
||||
if (!select) {
|
||||
for (int i = 0; i < pos - 1; i++)
|
||||
rw->chars[i] = s[i];
|
||||
|
||||
for (int i = t.cur.xx; i < rw->size + 1; i++)
|
||||
for (int i = pos; i < rw->size + 1; i++)
|
||||
rw->chars[i - 1] = s[i];
|
||||
|
||||
t.cur.x--;
|
||||
// Delete
|
||||
} else {
|
||||
if(t.cur.xx) {
|
||||
for (int i = 0; i < t.cur.xx; i++)
|
||||
if(pos) {
|
||||
for (int i = 0; i < pos; i++)
|
||||
rw->chars[i] = s[i];
|
||||
}
|
||||
|
||||
for (int i = t.cur.xx; i < rw->size + 1; i++)
|
||||
for (int i = pos; i < rw->size + 1; i++)
|
||||
rw->chars[i] = s[i + 1];
|
||||
}
|
||||
|
||||
@ -662,7 +662,7 @@ void handleBackspace (void)
|
||||
rowDeleteRow(t.cur.yy);
|
||||
t.cur.y--;
|
||||
} else {
|
||||
rowDeleteChar(&rows.rw[t.cur.yy], 0);
|
||||
rowDeleteChar(&rows.rw[t.cur.yy], 0, t.cur.xx);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user