/*
* $Log$
+ * Revision 1.5 2008/02/20 23:31:48 staffcvs
+ * *** empty log message ***
+ *
+ * Revision 1.4 2008/02/20 22:54:22 staffcvs
+ * *** empty log message ***
+ *
+ * Revision 1.3 2008/02/20 20:16:07 james
+ * *** empty log message ***
+ *
+ * Revision 1.2 2008/02/04 02:05:06 james
+ * *** empty log message ***
+ *
* Revision 1.1 2008/02/03 23:31:25 james
* *** empty log message ***
*
*/
-void
+#include "project.h"
+
+
+#define V(i) (((i)==0)?0x80:(((i)==1)?0xc0:0xff))
+#define COLOR(r,g,b,i) ((((r)?(V(i)):0) << 0)| (((g)?(V(i)):0) << 8)| (((b)?(V(i)):0) << 16))
+
+static int colormap[] = {
+ [CRT_COLOR_BLACK] = COLOR (0, 0, 0, 0),
+ [CRT_COLOR_RED] = COLOR (0, 0, 1, 0),
+ [CRT_COLOR_GREEN] = COLOR (0, 1, 0, 0),
+ [CRT_COLOR_YELLOW] = COLOR (0, 1, 1, 0),
+ [CRT_COLOR_BLUE] = COLOR (1, 0, 0, 0),
+ [CRT_COLOR_MAGENTA] = COLOR (1, 0, 1, 0),
+ [CRT_COLOR_CYAN] = COLOR (1, 1, 0, 0),
+ [CRT_COLOR_WHITE] = COLOR (1, 1, 1, 1),
+ [CRT_COLOR_BLACK | CRT_COLOR_INTENSITY] = COLOR (1, 1, 1, 0),
+ [CRT_COLOR_RED | CRT_COLOR_INTENSITY] = COLOR (0, 0, 1, 2),
+ [CRT_COLOR_GREEN | CRT_COLOR_INTENSITY] = COLOR (0, 1, 0, 2),
+ [CRT_COLOR_YELLOW | CRT_COLOR_INTENSITY] = COLOR (0, 1, 1, 2),
+ [CRT_COLOR_BLUE | CRT_COLOR_INTENSITY] = COLOR (1, 0, 0, 2),
+ [CRT_COLOR_MAGENTA | CRT_COLOR_INTENSITY] = COLOR (1, 0, 1, 2),
+ [CRT_COLOR_CYAN | CRT_COLOR_INTENSITY] = COLOR (1, 1, 0, 2),
+ [CRT_COLOR_WHITE | CRT_COLOR_INTENSITY] = COLOR (1, 1, 1, 2),
+};
+
+
+static void
html_entity (FILE * f, int c)
{
switch (c)
}
}
-void
+static void
html_render (FILE * f, CRT_CA c)
{
+ int fg, bg;
+
if (c.attr & CRT_ATTR_REVERSE)
{
- fprintf (f, "<td bgcolor='#000000'><font color='#ffffff'>");
+ fg = CRT_COLOR_BG (c.color);
+ bg = CRT_COLOR_FG (c.color);
}
else
{
- fprintf (f, "<td>");
+ fg = CRT_COLOR_FG (c.color);
+ bg = CRT_COLOR_BG (c.color);
+ if (c.attr & CRT_ATTR_BOLD)
+ fg |= CRT_COLOR_INTENSITY;
}
+#if 1
+ fprintf (f, "<td bgcolor='#%06x'><font color='#%06x'>", colormap[bg],
+ colormap[fg]);
+#endif
+
+ fprintf (f, "<tt>");
+#if 0
+ fprintf (f, "<span style='color: #%06x; background-color: #%06x'>",
+ colormap[fg], colormap[bg]);
+#endif
if (c.attr & CRT_ATTR_UNDERLINE)
fprintf (f, "<ul>");
{
fprintf (f, "</font>");
}
+ fprintf (f, "</tt>");
+#if 1
fprintf (f, "</td>");
+#endif
+#if 0
+ fprintf (f, "</span>");
+#endif
}
-void
+static void
html_draw (FILE * f, CRT * c)
{
CRT_Pos p;
int o;
+// fprintf (f, "<pre>");
fprintf (f, "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n");
for (p.y = 0; p.y < CRT_ROWS; ++p.y)
{
o = CRT_ADDR (p.y, 0);
fprintf (f, "<tr>");
- for (p.x = 0; p.x < CRT_ROWS; ++p.x, ++o)
+ for (p.x = 0; p.x < CRT_COLS; ++p.x, ++o)
{
html_render (f, c->screen[o]);
}
fprintf (f, "</tr>\n");
+// fprintf(f,"\n");
}
- fprintf (f, "</table>\n");
+ fprintf (f, "</table>");
+// fprintf (f, "</pre>\n");
+}
+
+
+static void
+html_one_shot (ANSI * a, CRT * c)
+{
+ html_draw (a->file, c);
+}
+
+
+static void
+ansi_free (ANSI * a)
+{
+ free (a);
+}
+
+ANSI *
+ansi_new_html (FILE * f)
+{
+ ANSI *ret;
+
+ ret = malloc (sizeof (ANSI));
+ memset (ret, 0, sizeof (ANSI));
+
+ ret->file = f;
+ ret->close = ansi_free;
+ ret->one_shot = html_one_shot;
+
+ return ret;
}