| @@ -350,22 +350,25 @@ static long int import_ansi(cucul_canvas_t *cv, | |||
| unsigned char const *buffer = (unsigned char const*)data; | |||
| unsigned int i, j, skip, dummy = 0; | |||
| unsigned int width = 0, height = 0, wch = 1; | |||
| uint32_t savedattr, resizeattr; | |||
| unsigned long int ch; | |||
| int x = 0, y = 0, save_x = 0, save_y = 0; | |||
| cucul_set_canvas_size(cv, width, height); | |||
| cucul_set_canvas_size(cv, 0, 0); | |||
| if(utf8) | |||
| { | |||
| grcm.dfg = cucul_attr_to_ansi_fg(cv->curattr); | |||
| grcm.dbg = cucul_attr_to_ansi_bg(cv->curattr); | |||
| grcm.dfg = CUCUL_DEFAULT; | |||
| grcm.dbg = CUCUL_TRANSPARENT; | |||
| } | |||
| else | |||
| { | |||
| grcm.dfg = CUCUL_LIGHTGRAY; | |||
| grcm.dbg = CUCUL_BLACK; | |||
| cucul_set_color_ansi(cv, grcm.dfg, grcm.dbg); | |||
| cucul_set_color_ansi(cv, CUCUL_LIGHTGRAY, CUCUL_BLACK); | |||
| } | |||
| resizeattr = cucul_get_attr(cv, -1, -1); | |||
| ansi_parse_grcm(cv, &grcm, 1, &dummy); | |||
| for(i = 0; i < size; i += skip) | |||
| @@ -491,8 +494,12 @@ static long int import_ansi(cucul_canvas_t *cv, | |||
| break; | |||
| case 'K': /* EL - Erase In Line */ | |||
| if(width < 80) | |||
| cucul_set_color_ansi(cv, grcm.dfg, grcm.dbg); | |||
| { | |||
| savedattr = cucul_get_attr(cv, -1, -1); | |||
| cucul_set_attr(cv, resizeattr); | |||
| cucul_set_canvas_size(cv, width = 80, height); | |||
| cucul_set_attr(cv, savedattr); | |||
| } | |||
| for(j = x; j < 80; j++) | |||
| cucul_put_char(cv, j, y, ' '); | |||
| x = 80; | |||
| @@ -541,26 +548,31 @@ static long int import_ansi(cucul_canvas_t *cv, | |||
| /* Make sure the canvas is big enough. */ | |||
| if((unsigned int)x + wch > width) | |||
| { | |||
| cucul_set_color_ansi(cv, grcm.dfg, grcm.dbg); | |||
| savedattr = cucul_get_attr(cv, -1, -1); | |||
| cucul_set_attr(cv, resizeattr); | |||
| cucul_set_canvas_size(cv, width = x + wch, height); | |||
| cucul_set_attr(cv, savedattr); | |||
| } | |||
| if((unsigned int)y >= height) | |||
| { | |||
| cucul_set_color_ansi(cv, grcm.dfg, grcm.dbg); | |||
| savedattr = cucul_get_attr(cv, -1, -1); | |||
| cucul_set_attr(cv, resizeattr); | |||
| cucul_set_canvas_size(cv, width, height = y + 1); | |||
| cucul_set_attr(cv, savedattr); | |||
| } | |||
| /* Now paste our character */ | |||
| cucul_set_color_ansi(cv, grcm.efg, grcm.ebg); | |||
| cucul_put_char(cv, x, y, ch); | |||
| x += wch; | |||
| } | |||
| if((unsigned int)y > height) | |||
| { | |||
| cucul_set_color_ansi(cv, grcm.dfg, grcm.dbg); | |||
| savedattr = cucul_get_attr(cv, -1, -1); | |||
| cucul_set_attr(cv, resizeattr); | |||
| cucul_set_canvas_size(cv, width, height = y); | |||
| cucul_set_attr(cv, savedattr); | |||
| } | |||
| return size; | |||
| @@ -645,5 +657,7 @@ static void ansi_parse_grcm(cucul_canvas_t *cv, struct ansi_grcm *g, | |||
| g->efg = CUCUL_WHITE; | |||
| } | |||
| } | |||
| cucul_set_color_ansi(cv, g->efg, g->ebg); | |||
| } | |||