4 * Copyright (c) 2008 James McKenzie <james@fishsoup.dhs.org>,
9 static char rcsid[] = "$Id$";
13 * Revision 1.6 2008/02/20 23:42:05 staffcvs
14 * *** empty log message ***
16 * Revision 1.5 2008/02/20 23:31:48 staffcvs
17 * *** empty log message ***
19 * Revision 1.4 2008/02/20 22:54:22 staffcvs
20 * *** empty log message ***
22 * Revision 1.3 2008/02/20 20:16:07 james
23 * *** empty log message ***
25 * Revision 1.2 2008/02/04 02:05:06 james
26 * *** empty log message ***
28 * Revision 1.1 2008/02/03 23:31:25 james
29 * *** empty log message ***
36 #define V(i) (((i)==0)?0x80:(((i)==1)?0xc0:0xff))
37 #define COLOR(r,g,b,i) ((((r)?(V(i)):0) << 0)| (((g)?(V(i)):0) << 8)| (((b)?(V(i)):0) << 16))
39 static int colormap[] = {
40 [CRT_COLOR_BLACK] = COLOR (0, 0, 0, 0),
41 [CRT_COLOR_RED] = COLOR (0, 0, 1, 0),
42 [CRT_COLOR_GREEN] = COLOR (0, 1, 0, 0),
43 [CRT_COLOR_YELLOW] = COLOR (0, 1, 1, 0),
44 [CRT_COLOR_BLUE] = COLOR (1, 0, 0, 0),
45 [CRT_COLOR_MAGENTA] = COLOR (1, 0, 1, 0),
46 [CRT_COLOR_CYAN] = COLOR (1, 1, 0, 0),
47 [CRT_COLOR_WHITE] = COLOR (1, 1, 1, 1),
48 [CRT_COLOR_BLACK | CRT_COLOR_INTENSITY] = COLOR (1, 1, 1, 0),
49 [CRT_COLOR_RED | CRT_COLOR_INTENSITY] = COLOR (0, 0, 1, 2),
50 [CRT_COLOR_GREEN | CRT_COLOR_INTENSITY] = COLOR (0, 1, 0, 2),
51 [CRT_COLOR_YELLOW | CRT_COLOR_INTENSITY] = COLOR (0, 1, 1, 2),
52 [CRT_COLOR_BLUE | CRT_COLOR_INTENSITY] = COLOR (1, 0, 0, 2),
53 [CRT_COLOR_MAGENTA | CRT_COLOR_INTENSITY] = COLOR (1, 0, 1, 2),
54 [CRT_COLOR_CYAN | CRT_COLOR_INTENSITY] = COLOR (1, 1, 0, 2),
55 [CRT_COLOR_WHITE | CRT_COLOR_INTENSITY] = COLOR (1, 1, 1, 2),
60 html_entity (FILE * f, int c)
65 fprintf (f, " ");
82 html_render (FILE * f, CRT_CA c)
86 if (c.attr & CRT_ATTR_REVERSE)
88 fg = CRT_COLOR_BG (c.color);
89 bg = CRT_COLOR_FG (c.color);
93 fg = CRT_COLOR_FG (c.color);
94 bg = CRT_COLOR_BG (c.color);
95 if (c.attr & CRT_ATTR_BOLD)
96 fg |= CRT_COLOR_INTENSITY;
99 fprintf (f, "<span style='color: #%06x; background-color: #%06x'>",
100 colormap[fg], colormap[bg]);
102 fprintf (f, "<td bgcolor='#%06x'><font color='#%06x'>", colormap[bg],
107 if (c.attr & CRT_ATTR_UNDERLINE)
109 if (c.attr & CRT_ATTR_BOLD)
117 html_entity (f, c.chr);
119 if (c.attr & CRT_ATTR_BOLD)
121 if (c.attr & CRT_ATTR_UNDERLINE)
122 fprintf (f, "</ul>");
123 if (c.attr & CRT_ATTR_REVERSE)
125 fprintf (f, "</font>");
128 fprintf (f, "</span>");
130 fprintf (f, "</tt>");
131 fprintf (f, "</td>");
136 html_draw (FILE * f, CRT * c)
142 fprintf (f, "<pre>");
144 fprintf (f, "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n");
146 for (p.y = 0; p.y < CRT_ROWS; ++p.y)
148 o = CRT_ADDR (p.y, 0);
152 for (p.x = 0; p.x < CRT_COLS; ++p.x, ++o)
154 html_render (f, c->screen[o]);
159 fprintf (f, "</tr>\n");
163 fprintf (f, "</pre>\n");
165 fprintf (f, "</table>");
171 html_one_shot (ANSI * a, CRT * c)
173 html_draw (a->file, c);
184 ansi_new_html (FILE * f)
188 ret = malloc (sizeof (ANSI));
189 memset (ret, 0, sizeof (ANSI));
192 ret->close = ansi_free;
193 ret->one_shot = html_one_shot;