made deleteChar and addChar more general

master
Alessandro Mauri 5 years ago
parent d0e850e13d
commit c66839b23d
  1. 38
      ste.c

38
ste.c

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

Loading…
Cancel
Save