/*
* $Log$
+ * Revision 1.6 2008/02/06 17:53:28 james
+ * *** empty log message ***
+ *
+ * Revision 1.5 2008/02/06 15:53:22 james
+ * *** empty log message ***
+ *
+ * Revision 1.4 2008/02/04 20:23:55 james
+ * *** empty log message ***
+ *
* Revision 1.3 2008/02/04 05:45:55 james
* ::
*
write (a->fd, buf, n);
}
-void
-ansi_getsize(ANSI *a)
+void
+ansi_getsize (ANSI * a)
{
-struct winsize sz={0};
-if (ioctl(a->fd,TIOCGWINSZ,&sz)) {
- a->size.x=CRT_COLS;
- a->size.y=CRT_ROWS;
-} else {
- a->size.x=sz.ws_col;
- a->size.y=sz.ws_row;
-}
+ struct winsize sz = { 0 };
+ if (ioctl (a->fd, TIOCGWINSZ, &sz))
+ {
+ a->size.x = CRT_COLS;
+ a->size.y = CRT_ROWS;
+ }
+ else
+ {
+ a->size.x = sz.ws_col;
+ a->size.y = sz.ws_row;
+ }
}
{
char buf[16];
int n;
- int dx = a->pos.x - p.x;
- int dy = a->pos.y - p.y;
+ int dx = p.x - a->pos.x;
+ int dy = p.y - a->pos.y;
+// a->pos.x = ANSI_INVAL;
if (a->pos.x != ANSI_INVAL)
{
}
else if (dy > 0)
{
- n = snprintf (buf, sizeof (buf), "\033[%dE", -dy);
+ n = snprintf (buf, sizeof (buf), "\033[%dE", dy);
ansi_write (a, buf, n);
}
else
{
- n = snprintf (buf, sizeof (buf), "\033[%dF", dy);
+ n = snprintf (buf, sizeof (buf), "\033[%dF", -dy);
ansi_write (a, buf, n);
}
}
if (!dif)
return;
+ a->attr = attr;
+
if (attr == CRT_ATTR_NORMAL)
{
ansi_force_attr_normal (a);
}
if (dif & CRT_ATTR_BOLD)
{
- if (attr & CRT_ATTR_REVERSE)
+ if (attr & CRT_ATTR_BOLD)
{
ansi_write (a, "\033[1m", 4);
}
else
{
+ ansi_write (a, "\033[21m", 5);
ansi_write (a, "\033[22m", 5);
}
}
+
}
CRT_Pos p = { 0 };
crt_cls (&a->crt);
+
ansi_force_attr_normal (a);
ansi_move (a, p);
ansi_write (a, "\033[2J", 4);
{
CRT_Pos p;
int o;
+ int hidden_cursor=0;
+
+
- ansi_showhide_cursor (a, 1);
for (p.y = 0; p.y < CRT_ROWS; ++p.y)
{
continue;
if (crt_ca_cmp (a->crt.screen[o], c->screen[o]))
{
+ ansi_showhide_cursor (a, 1);
a->crt.screen[o] = c->screen[o];
ansi_move (a, p);
}
}
+
+ if ((CRT_COLS>a->size.x) || (CRT_ROWS>a->size.y)) {
+ char msg[]="Window is too small";
+ p.x=0;
+ p.y=0;
+
+ ansi_showhide_cursor (a, 1);
+ ansi_set_attr (a, CRT_ATTR_REVERSE);
+ ansi_move(a,p);
+
+ ansi_write (a, msg, sizeof(msg));
+ a->pos.x = ANSI_INVAL;
+ }
+
+
+ if ((c->pos.x>=a->size.x)
+ || (c->pos.y>=a->size.y)) {
+ ansi_showhide_cursor (a, 1);
+ return;
+ }
+
a->crt.pos = c->pos;
ansi_move (a, a->crt.pos);
{
// FIXME: -- echos back crap?
// ansi_write (a, "\033[c", 3);
- ansi_getsize(a);
+ ansi_getsize (a);
a->pos.x = ANSI_INVAL;
a->hide_cursor = ANSI_INVAL;