master
Alessandro Mauri 5 years ago
parent 40396405e5
commit a64690b418
  1. 208
      ste.c

208
ste.c

@ -23,9 +23,6 @@ struct term {
int off_y; int off_y;
int r_x; int r_x;
int r_y; int r_y;
//int d_x;
//int xx;
//int yy;
} cur; } cur;
struct { struct {
@ -65,7 +62,6 @@ static void curUpdateRender (void);
static void cursorMove(int a); static void cursorMove(int a);
static int decimalSize (int n); static int decimalSize (int n);
static inline void lnMove (int y, int x); static inline void lnMove (int y, int x);
//static int curRealToRender (row *rw, int c_x);
/* Row operations */ /* Row operations */
static inline void rowInit (void); static inline void rowInit (void);
@ -143,20 +139,15 @@ int main (int argc, char *argv[])
case (KEY_ENTER): case (KEY_ENTER):
case (10): case (10):
case ('\r'): case ('\r'):
//rowAddRow(t.cur.yy);
//t.cur.off_x = 0;
rowAddRow(t.cur.y); rowAddRow(t.cur.y);
t.cur.y++; t.cur.y++;
t.cur.x = 0; t.cur.x = 0;
break; break;
case (KEY_END): case (KEY_END):
t.cur.y = rows.rownum - 1; t.cur.y = rows.rownum - 1;
//t.cur.off_y = 0;
break; break;
case (KEY_HOME): case (KEY_HOME):
t.cur.y = 0; t.cur.y = 0;
//t.cur.off_y = 0;
break; break;
default: default:
if (c == KEY_STAB) c = '\t'; if (c == KEY_STAB) c = '\t';
@ -375,7 +366,7 @@ void fileOpen (char *filename)
void rowAddLast (char *s, int len) void rowAddLast (char *s, int len)
{ {
/* Extend the block of memory containing the lines */ /* Extend the block of memory containing the lines */
row *newr = reallocarray(rows.rw, rows.rownum + 1, sizeof(row)); row *newr = realloc(rows.rw, (rows.rownum + 1) * sizeof(row));
if (newr == NULL) termDie("realloc in rowAddLast"); if (newr == NULL) termDie("realloc in rowAddLast");
else rows.rw = newr; else rows.rw = newr;
@ -558,102 +549,82 @@ void rowDeleteRow (int pos)
/* ----------------------------- row operations --------------------------- */ /* ----------------------------- row operations --------------------------- */
/* take care of the cursor movement */ /* take care of the cursor movement */
/*void cursorMove (int a) void cursorMove (int a)
{ {
switch (a) { switch (a) {
case (KEY_LEFT): case (KEY_LEFT):
//if (t.cur.x <= 0 && !t.cur.off_x) {
if (t.cur.x <= 0) { if (t.cur.x <= 0) {
if (t.cur.yy) { if (t.cur.y) {
t.cur.y--; t.cur.y--;
t.cur.yy--; t.cur.x = rows.rw[t.cur.y].size;
t.cur.x = rows.rw[t.cur.yy].size;
} }
} else t.cur.x--; } else
t.cur.x--;
break; break;
case (KEY_RIGHT): case (KEY_RIGHT):
if (t.cur.x >= rows.rw[t.cur.yy].size) { if (t.cur.x >= rows.rw[t.cur.y].size) {
if (t.cur.yy < rows.rownum - 1) { if (t.cur.y < rows.rownum - 1) {
t.cur.y++; t.cur.y++;
t.cur.yy++; t.cur.x = 0;
//if (t.cur.off_x) t.cur.off_x = 0; }
//t.cur.x = rows.rw[t.cur.yy].size; } else
t.cur.x = 0; t.cur.x++;
}
} else t.cur.x++;
break; break;
case (KEY_UP): case (KEY_UP):
if (t.cur.yy > 0) { if (t.cur.y) {
if (t.cur.y) { t.cur.y--;
t.cur.y--; if (t.cur.x > rows.rw[t.cur.y].size)
t.cur.yy--; t.cur.x = rows.rw[t.cur.y].size;
if (t.cur.x > rows.rw[t.cur.yy].size) {
//if (t.cur.off_x) t.cur.off_x = 0;
t.cur.x = rows.rw[t.cur.yy].size;
}
} }
break; break;
case (KEY_DOWN): case (KEY_DOWN):
if (t.cur.yy < rows.rownum - 1) { if (t.cur.y < rows.rownum - 1) {
t.cur.y++; t.cur.y++;
t.cur.yy++; if (t.cur.x > rows.rw[t.cur.y].size)
if (t.cur.x > rows.rw[t.cur.yy].size) { t.cur.x = rows.rw[t.cur.y].size;
//if (t.cur.off_x) t.cur.off_x = 0;
t.cur.x = rows.rw[t.cur.yy].size;
}
} }
break; break;
}
} }
}*/ }
/*void curUpdateRender (void) void curUpdateRender ()
{ {
//Set y offset // y
if (t.cur.y >= t.dim.y) { if (t.cur.y >= t.cur.off_y && t.cur.y < t.cur.off_y + t.dim.y) {
if (t.cur.y == t.dim.y) t.cur.off_y++; t.cur.r_y = t.cur.y - t.cur.off_y;
else t.cur.off_y += t.cur.y - t.dim.y;
t.cur.y = t.dim.y - 1;
} else if (t.cur.y <= 0 && t.cur.off_y > 0) {
t.cur.off_y--;
t.cur.y = 0;
}
//Old curRealToRender() } else if (t.cur.y >= t.cur.off_y + t.dim.y) {
t.cur.r_x = curRealToRender(&rows.rw[t.cur.yy], t.cur.x); if (t.cur.y == t.cur.off_y + t.dim.y) t.cur.off_y++;
else t.cur.off_y += t.cur.y - (t.cur.off_y + t.dim.y);
t.cur.r_y = t.dim.y - 1;
} else if (t.cur.y < t.cur.off_y) {
t.cur.off_y -= t.cur.off_y - t.cur.y;
t.cur.r_y = 0;
}
// x
static int i;
for (i = 0, t.cur.r_x = 0; i < t.cur.x; i++) {
if (rows.rw[t.cur.y].chars[i] == '\t') t.cur.r_x += (TABSIZE - 1) - (t.cur.r_x % TABSIZE);
t.cur.r_x++;
}
if (t.cur.r_x >= t.dim.x) { if (t.cur.r_x >= t.cur.off_x && t.cur.r_x < t.dim.x) {
t.cur.off_x += (t.cur.r_x > t.dim.x ) ? (t.cur.r_x - t.dim.x) : 1; //ok
t.cur.r_x = t.dim.x - 1; } else if (t.cur.r_x < t.cur.off_x) {
} else if (t.cur.r_x <= 0) { t.cur.off_x -= t.cur.off_x - t.cur.r_x;
t.cur.off_x -= (t.cur.off_x > 0) ? 0 : t.cur.off_x;
t.cur.r_x = 0; t.cur.r_x = 0;
} else if (t.cur.r_x > t.cur.off_x + t.dim.x) {
if (t.cur.r_x == t.cur.off_x + t.dim.x) t.cur.off_x++;
else t.cur.off_x += t.cur.r_x - t.cur.off_x - t.dim.x;
t.cur.r_x = t.dim.x;
} }
//convert the cursor from real to render }
// and update other cursor info
t.cur.yy = t.cur.y + t.cur.off_y;
//t.cur.xx = t.cur.x + t.cur.off_x;
//t.cur.d_x = t.cur.r_x - t.cur.x;
} */
/* convert the cursor matchoing the memory to the drawn one */
/*
int curRealToRender (row *rw, int c_x)
{
static int r_x = 0, i;
for (i = 0, r_x = 0; i < c_x; i++) {
if (rw->chars[i] == '\t') r_x += (TABSIZE - 1) - (r_x % TABSIZE);
r_x++;
}
return r_x;
}*/
/*---------------------------------- scroll ------------------------------------*/ /*---------------------------------- scroll ------------------------------------*/
@ -699,8 +670,6 @@ void handleDel (int select)
} }
} }
/*--------------------------------- garbage ------------------------------------*/
void updateInfo (void) void updateInfo (void)
{ {
getmaxyx(stdscr, t.dim.y, t.dim.x); getmaxyx(stdscr, t.dim.y, t.dim.x);
@ -709,81 +678,4 @@ void updateInfo (void)
t.dim.x -= t.pad + 1; t.dim.x -= t.pad + 1;
} }
/* take care of the cursor movement */
void cursorMove (int a)
{
switch (a) {
case (KEY_LEFT):
if (t.cur.x <= 0) {
if (t.cur.y) {
t.cur.y--;
t.cur.x = rows.rw[t.cur.y].size;
}
} else
t.cur.x--;
break;
case (KEY_RIGHT):
if (t.cur.x >= rows.rw[t.cur.y].size) {
if (t.cur.y < rows.rownum - 1) {
t.cur.y++;
t.cur.x = 0;
}
} else
t.cur.x++;
break;
case (KEY_UP):
if (t.cur.y) {
t.cur.y--;
if (t.cur.x > rows.rw[t.cur.y].size)
t.cur.x = rows.rw[t.cur.y].size;
}
break;
case (KEY_DOWN):
if (t.cur.y < rows.rownum - 1) {
t.cur.y++;
if (t.cur.x > rows.rw[t.cur.y].size)
t.cur.x = rows.rw[t.cur.y].size;
}
break;
}
}
void curUpdateRender ()
{
// y
if (t.cur.y >= t.cur.off_y && t.cur.y < t.cur.off_y + t.dim.y) {
t.cur.r_y = t.cur.y - t.cur.off_y;
} else if (t.cur.y >= t.cur.off_y + t.dim.y) {
if (t.cur.y == t.cur.off_y + t.dim.y) t.cur.off_y++;
else t.cur.off_y += t.cur.y - (t.cur.off_y + t.dim.y);
t.cur.r_y = t.dim.y - 1;
} else if (t.cur.y < t.cur.off_y) {
t.cur.off_y -= t.cur.off_y - t.cur.y;
t.cur.r_y = 0;
}
// x
static int i;
for (i = 0, t.cur.r_x = 0; i < t.cur.x; i++) {
if (rows.rw[t.cur.y].chars[i] == '\t') t.cur.r_x += (TABSIZE - 1) - (t.cur.r_x % TABSIZE);
t.cur.r_x++;
}
if (t.cur.r_x >= t.cur.off_x && t.cur.r_x < t.dim.x) {
//ok
} else if (t.cur.r_x < t.cur.off_x) {
t.cur.off_x -= t.cur.off_x - t.cur.r_x;
t.cur.r_x = 0;
} else if (t.cur.r_x > t.cur.off_x + t.dim.x) {
if (t.cur.r_x == t.cur.off_x + t.dim.x) t.cur.off_x++;
else t.cur.off_x += t.cur.r_x - t.cur.off_x - t.dim.x;
t.cur.r_x = t.dim.x;
}
}
/*--------------------------------- testing ------------------------------------*/ /*--------------------------------- testing ------------------------------------*/

Loading…
Cancel
Save