added rowDeleteRow
This commit is contained in:
parent
72db60a4e8
commit
d0e850e13d
55
ste.c
55
ste.c
@ -71,6 +71,10 @@ static inline void rowInit (void);
|
|||||||
static void rowAddChar (row *rw, char c);
|
static void rowAddChar (row *rw, char c);
|
||||||
static void rowDeleteChar (row *rw, int m);
|
static void rowDeleteChar (row *rw, int m);
|
||||||
static void rowCpy (row *to, row *from);
|
static void rowCpy (row *to, row *from);
|
||||||
|
static void rowAddRow (int pos);
|
||||||
|
static void rowFree (row *rw);
|
||||||
|
static void rowAddString (row *rw, char *s, int len, int pos);
|
||||||
|
static void rowDeleteRow (int pos);
|
||||||
|
|
||||||
/* Terminal operations */
|
/* Terminal operations */
|
||||||
static void termInit (void);
|
static void termInit (void);
|
||||||
@ -85,13 +89,10 @@ void fileSave (char *filename);
|
|||||||
static void rowAddLast (char *s, int len);
|
static void rowAddLast (char *s, int len);
|
||||||
|
|
||||||
/* garbage */
|
/* garbage */
|
||||||
|
static inline void handleBackspace (void);
|
||||||
/* testing */
|
/* testing */
|
||||||
static void updateInfo (void);
|
static void updateInfo (void);
|
||||||
static void rowAddRow (int pos);
|
|
||||||
static int whatsThat (void);
|
static int whatsThat (void);
|
||||||
static void rowFree (row *rw);
|
|
||||||
|
|
||||||
|
|
||||||
/* --------------------------------- main ------------------------------------ */
|
/* --------------------------------- main ------------------------------------ */
|
||||||
int main (int argc, char *argv[])
|
int main (int argc, char *argv[])
|
||||||
@ -134,7 +135,8 @@ int main (int argc, char *argv[])
|
|||||||
cursorMove(c);
|
cursorMove(c);
|
||||||
break;
|
break;
|
||||||
case (KEY_BACKSPACE):
|
case (KEY_BACKSPACE):
|
||||||
rowDeleteChar(&rows.rw[t.cur.yy], 0);
|
handleBackspace();
|
||||||
|
break;
|
||||||
break;
|
break;
|
||||||
case (KEY_DC):
|
case (KEY_DC):
|
||||||
rowDeleteChar(&rows.rw[t.cur.yy], 1);
|
rowDeleteChar(&rows.rw[t.cur.yy], 1);
|
||||||
@ -630,9 +632,52 @@ void rowCpy (row *to, row *from) // WIP
|
|||||||
if (to->chars == NULL) termDie("malloc in rowCpy");
|
if (to->chars == NULL) termDie("malloc in rowCpy");
|
||||||
to->size = from->size;
|
to->size = from->size;
|
||||||
memcpy(to->chars, from->chars, to->size);
|
memcpy(to->chars, from->chars, to->size);
|
||||||
|
to->chars[to->size] = '\0';
|
||||||
updateRender(to);
|
updateRender(to);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void rowAddString (row *rw, char *s, int len, int pos)
|
||||||
|
{
|
||||||
|
char *temp = realloc(rw->chars, rw->size + len + 1);
|
||||||
|
if (temp == NULL) termDie("realloc in rowAddString");
|
||||||
|
rw->chars = temp;
|
||||||
|
if (pos == -1 || pos == rw->size) {
|
||||||
|
memcpy(&rw->chars[rw->size], s, len);
|
||||||
|
rw->size += len;
|
||||||
|
rw->chars[rw->size] = '\0';
|
||||||
|
} else {
|
||||||
|
memcpy(&rw->chars[rw->size], &rw->chars[rw->size - len], len);
|
||||||
|
memcpy(&rw->chars[rw->size - len], s, len);
|
||||||
|
rw->size += len;
|
||||||
|
rw->chars[rw->size] = '\0';
|
||||||
|
}
|
||||||
|
updateRender(rw);
|
||||||
|
}
|
||||||
|
|
||||||
|
void handleBackspace (void)
|
||||||
|
{
|
||||||
|
if (t.cur.x <= 0 && t.cur.yy > 0) {
|
||||||
|
t.cur.x = rows.rw[t.cur.yy - 1].size;
|
||||||
|
rowAddString(&rows.rw[t.cur.yy - 1], rows.rw[t.cur.yy].chars, rows.rw[t.cur.yy].size, -1);
|
||||||
|
rowDeleteRow(t.cur.yy);
|
||||||
|
t.cur.y--;
|
||||||
|
} else {
|
||||||
|
rowDeleteChar(&rows.rw[t.cur.yy], 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void rowDeleteRow (int pos)
|
||||||
|
{
|
||||||
|
for (; pos < rows.rownum - 1; pos++) {
|
||||||
|
rowCpy(&rows.rw[pos], &rows.rw[pos + 1]); // rowcpy already frees the row
|
||||||
|
}
|
||||||
|
rows.rownum--;
|
||||||
|
rowFree(&rows.rw[rows.rownum]);
|
||||||
|
row *temp = realloc(rows.rw, sizeof(row) * rows.rownum);
|
||||||
|
if (temp == NULL) termDie("malloc in rowDeleteRow");
|
||||||
|
rows.rw = temp;
|
||||||
|
}
|
||||||
|
|
||||||
/*--------------------------------- garbage ------------------------------------*/
|
/*--------------------------------- garbage ------------------------------------*/
|
||||||
|
|
||||||
void updateInfo (void)
|
void updateInfo (void)
|
||||||
|
Loading…
Reference in New Issue
Block a user