6#define NORMALPRINTS { "%s", "%s", "%s", "%s", "%s", }
7#define NONE { "", "", "", "", "", }
9static char *html_escapes[] =
10{
"<",
"<",
">",
">",
"&",
"&", NULL};
11static char *html_alt_escapes[] =
12{
"<",
"<",
">",
">",
"&",
"&",
"\"",
""", NULL};
14static char *vyhen_escapes[] =
15{
"|",
"||",
"~",
"~~", NULL};
18static char *irc_escapes[] =
21static char *generate_filename(
char *
template,
char *result,
int x,
int y,
int pages,
char *extension);
28 AA_NORMAL_MASK | AA_BOLD_MASK | AA_BOLDFONT_MASK | AA_DIM_MASK,
32 "<HTML>\n<HEAD><TITLE>Ascii arted image done using aalib</TITLE>\n</HEAD>\n<BODY BGCOLOR=\"#000000\" TEXT=\"#b2b2b2\" LINK=\"#FFFFFF\">\n<FONT COLOR=#b2b2b2 SIZE=2><PRE>\n",
33 "</PRE></FONT></BODY>\n</HTML>\n",
37 "<FONT COLOR=\"686868\">",
38 "<FONT COLOR=\"ffffff\">",
55 AA_NORMAL_MASK | AA_BOLD_MASK | AA_BOLDFONT_MASK,
59 "<HTML>\n <HEAD> <TITLE>Ascii arted image done using aalib</TITLE>\n</HEAD>\n<BODY><PRE>\n",
60 "</PRE></BODY>\n</HTML>\n",
82 AA_NORMAL_MASK | AA_BOLD_MASK | AA_BOLDFONT_MASK | AA_REVERSE_MASK | AA_DIM_MASK,
84 "ANSI escape seqences",
110 AA_NORMAL_MASK | AA_BOLD_MASK | AA_REVERSE_MASK | AA_DIM_MASK | AA_EXTENDED,
155 AA_NORMAL_MASK | AA_BOLD_MASK | AA_BOLDFONT_MASK,
164 {
"%s",
"%s",
"%s\10%s",
"%s\10%s",
"%s"},
176 "HP laser jet - A4 small font",
178 "\33(10U\33(s0p16.67h8.5v0s0b0T\33%%0A\33&/0U\33&/0Z\33&/24D",
193 "HP laser jet - A4 big font",
208 AA_NORMAL_MASK | AA_BOLD_MASK | AA_REVERSE_MASK,
210 "For catting to an IRC channel",
235 AA_NORMAL_MASK | AA_DIM_MASK | AA_BOLD_MASK,
237 "For catting to an IRC channel II",
262 AA_NORMAL_MASK | AA_BOLD_MASK,
264 "For including in a man page",
292 "HTML <IMG ALT= tag",
296 "<PRE><IMG SRC=\"your image here\" ALT=\"\n",
335#define FORMAT ((struct aa_savedata *)c->driverdata)->format
336#define DATA ((struct aa_savedata *)c->driverdata)
338static char **build_conversions(
char **in,
char **conv)
342 memset(conv, 0,
sizeof(
char *) * 256);
345 while (*in != NULL && *(in + 1) != NULL) {
359 *data = (
void *) malloc(
sizeof(
struct aa_savedata));
363 dest->font = d->format->font;
364 dest->width = d->format->width;
365 dest->height = d->format->height;
366 dest->supported = d->format->supported;
374static void save_getsize(
aa_context * c,
int *width,
int *height)
377static void save_gotoxy(
aa_context * c,
int x,
int y)
384static void stop_tag()
387 fputs(FORMAT->ends[lastattr], f);
390static void start_tag(
int attr)
392 if (attr > AA_NATTRS)
395 fputs(FORMAT->begin[lastattr], f);
397static void encodechar(
unsigned char attr,
unsigned char ch,
char **conversions)
400 if (FORMAT->flags & AA_NORMAL_SPACES && ch ==
' ' && (attr != AA_REVERSE))
402 if (attr != lastattr) {
406 if (conversions[ch] == NULL) {
409 fprintf(f, FORMAT->prints[attr], chr, chr, chr, chr);
411 fprintf(f, FORMAT->prints[attr], conversions[ch], conversions[ch],
412 conversions[ch], conversions[ch]);
416static void savearea(
int x1,
int y1,
int x2,
int y2,
char **conversions)
419 fputs(FORMAT->head, f);
421 for (y = y1; y < y2; y++) {
422 for (x = x1; x < x2; x++) {
423 if (x < 0 || x >= aa_scrwidth(c) ||
424 y < 0 || y >= aa_scrheight(c))
425 encodechar(AA_NORMAL,
' ', conversions);
427 int pos = x + y * aa_scrwidth(c);
428 encodechar(c->attrbuffer[pos], c->textbuffer[pos], conversions);
432 fputs(FORMAT->newline, f);
434 fputs(FORMAT->end, f);
441 char *conversions[256];
443 build_conversions(FORMAT->conversions, conversions);
444 if (FORMAT->flags & AA_USE_PAGES) {
445 int xpages = (aa_scrwidth(c1) + FORMAT->pagewidth - 1) /
447 int ypages = (aa_scrheight(c1) + FORMAT->pageheight - 1) /
450 for (x = 0; x < xpages; x++)
451 for (y = 0; y < ypages; y++) {
452 if (DATA->name != NULL) {
453 generate_filename(DATA->name, fname, x, y, 1, FORMAT->extension);
454 f = fopen(fname,
"w");
460 savearea(x * FORMAT->pagewidth, y * FORMAT->pageheight,
461 (x + 1) * FORMAT->pagewidth,
462 (y + 1) * FORMAT->pageheight, conversions);
463 if (DATA->name != NULL)
468 if (DATA->name != NULL) {
469 generate_filename(DATA->name, fname, 0, 0, 0, FORMAT->extension);
470 f = fopen(fname,
"w");
475 savearea(0, 0, aa_scrwidth(c1), aa_scrheight(c1), conversions);
476 if (DATA->name != NULL)
495static char *generate_filename(
char *
template,
char *result,
int x,
int y,
int pages,
char *extension)
499 char *end = result + 4090;
500 b =
template - 1, a = result - 1;
501 while ((*++a = *++b)) {
512 sprintf(text,
"%i", x);
513 while ((*++a = *++e))
525 sprintf(text,
"%i", y);
526 while ((*++a = *++e))
538 sprintf(text,
"_%i_%i", x, y);
539 while ((*++a = *++e))
549 char *e = extension - 1;
550 while ((*++a = *++e))
572 "save",
"Special driver for saving to files",