Changeset 3489 for libcaca/trunk/caca/driver/vga.c
- Timestamp:
- May 20, 2009, 12:48:12 AM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libcaca/trunk/caca/driver/vga.c
r2962 r3489 1 1 /* 2 2 * libcaca Colour ASCII-Art library 3 * Copyright (c) 2002-200 6 Sam Hocevar <sam@zoy.org>3 * Copyright (c) 2002-2009 Sam Hocevar <sam@hocevar.net> 4 4 * All Rights Reserved 5 5 * … … 115 115 static void vga_display(caca_display_t *dp) 116 116 { 117 char *screen = (char *)(intptr_t)0x000b8000; 118 uint32_t const *cvchars = (uint32_t const *)caca_get_canvas_chars(dp->cv); 119 uint32_t const *cvattrs = (uint32_t const *)caca_get_canvas_attrs(dp->cv); 120 int width = caca_get_canvas_width(dp->cv); 121 int height = caca_get_canvas_height(dp->cv); 122 int n; 117 int x, y, i; 123 118 124 for( n = height * width; n--;)119 for(i = 0; i < caca_get_dirty_rectangle_count(dp->cv); i++) 125 120 { 126 char ch = caca_utf32_to_cp437(*cvchars++); 127 if(n && *cvchars == CACA_MAGIC_FULLWIDTH) 121 char *screen = (char *)(intptr_t)0x000b8000; 122 uint32_t const *cvchars, *cvattrs; 123 int xmin, ymin, xmax, ymax; 124 125 caca_get_dirty_rectangle(dp->cv, i, &xmin, &ymin, &xmax, &ymax); 126 127 cvchars = (uint32_t const *)caca_get_canvas_chars(dp->cv) 128 + xmin + ymin * dp->cv->width; 129 cvattrs = (uint32_t const *)caca_get_canvas_attrs(dp->cv) 130 + xmin + ymin * dp->cv->width; 131 132 screen += ymin * dp->cv->width + xmin; 133 134 for(y = ymin; y <= ymax; y++) 128 135 { 129 *screen++ = '['; 130 *screen++ = caca_attr_to_ansi(*cvattrs++); 131 ch = ']'; 132 cvchars++; 133 n--; 136 for(x = xmin; x <= xmax; x++) 137 { 138 char ch = caca_utf32_to_cp437(*cvchars++); 139 if(x < xmax && *cvchars == CACA_MAGIC_FULLWIDTH) 140 { 141 *screen++ = '['; 142 *screen++ = caca_attr_to_ansi(*cvattrs++); 143 ch = ']'; 144 cvchars++; 145 x++; 146 } 147 *screen++ = ch; 148 *screen++ = caca_attr_to_ansi(*cvattrs++); 149 } 150 151 cvchars += dp->cv->width - (xmax - xmin) - 1; 152 cvattrs += dp->cv->width - (xmax - xmin) - 1; 153 screen += 2 * (dp->cv->width - (xmax - xmin) - 1); 134 154 } 135 *screen++ = ch;136 *screen++ = caca_attr_to_ansi(*cvattrs++);137 155 } 138 156 }
Note: See TracChangeset
for help on using the changeset viewer.