Changeset 1784 for libcaca/trunk/cucul/import.c
- Timestamp:
- Jun 28, 2007, 2:56:40 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libcaca/trunk/cucul/import.c
r1462 r1784 227 227 unsigned int control_size, data_size, expected_size, frames, f, n; 228 228 uint16_t version, flags; 229 unsigned int offset; 230 int32_t xmin = 0, ymin = 0, xmax = 0, ymax = 0; 229 231 230 232 if(size < 20) … … 259 261 int x, y, handlex, handley; 260 262 261 width = sscanu32(buf + 4 + 16 + f * 24); 262 height = sscanu32(buf + 4 + 16 + f * 24 + 4); 263 duration = sscanu32(buf + 4 + 16 + f * 24 + 8); 264 attr = sscanu32(buf + 4 + 16 + f * 24 + 12); 265 x = (int32_t)sscanu32(buf + 4 + 16 + f * 24 + 16); 266 y = (int32_t)sscanu32(buf + 4 + 16 + f * 24 + 20); 267 handlex = (int32_t)sscanu32(buf + 4 + 16 + f * 24 + 24); 268 handley = (int32_t)sscanu32(buf + 4 + 16 + f * 24 + 28); 269 263 width = sscanu32(buf + 4 + 16 + f * 32); 264 height = sscanu32(buf + 4 + 16 + f * 32 + 4); 265 duration = sscanu32(buf + 4 + 16 + f * 32 + 8); 266 attr = sscanu32(buf + 4 + 16 + f * 32 + 12); 267 x = (int32_t)sscanu32(buf + 4 + 16 + f * 32 + 16); 268 y = (int32_t)sscanu32(buf + 4 + 16 + f * 32 + 20); 269 handlex = (int32_t)sscanu32(buf + 4 + 16 + f * 32 + 24); 270 handley = (int32_t)sscanu32(buf + 4 + 16 + f * 32 + 28); 270 271 expected_size += width * height * 8; 272 if(-handlex < xmin) 273 xmin = -handlex; 274 if(-handley < ymin) 275 ymin = -handley; 276 if((((int32_t) width) - handlex) > xmax) 277 xmax = ((int32_t) width) - handlex; 278 if((((int32_t) height) - handley) > ymax) 279 ymax = ((int32_t) height) - handley; 271 280 } 272 281 … … 278 287 } 279 288 280 /* FIXME: read all frames, not only the first one */281 289 cucul_set_canvas_size(cv, 0, 0); 282 cucul_set_canvas_size(cv, sscanu32(buf + 4 + 16), 283 sscanu32(buf + 4 + 16 + 4)); 284 285 /* FIXME: check for return value */ 286 287 for(n = sscanu32(buf + 4 + 16) * sscanu32(buf + 4 + 16 + 4); n--; ) 288 { 289 cv->chars[n] = sscanu32(buf + 4 + control_size + 8 * n); 290 cv->attrs[n] = sscanu32(buf + 4 + control_size + 8 * n + 4); 291 } 292 293 cv->curattr = sscanu32(buf + 4 + 16 + 12); 294 cv->frames[0].x = (int32_t)sscanu32(buf + 4 + 16 + 0 * 24 + 16); 295 cv->frames[0].y = (int32_t)sscanu32(buf + 4 + 16 + 0 * 24 + 20); 296 cv->frames[0].handlex = (int32_t)sscanu32(buf + 4 + 16 + 0 * 24 + 24); 297 cv->frames[0].handley = (int32_t)sscanu32(buf + 4 + 16 + 0 * 24 + 28); 290 cucul_set_canvas_size(cv, xmax - xmin, ymax - ymin); 291 292 for (f = cucul_get_frame_count(cv); f--; ) 293 { 294 cucul_free_frame(cv, f); 295 } 296 297 for (offset = 0, f = 0; f < frames; f ++) 298 { 299 unsigned int width, height; 300 301 width = sscanu32(buf + 4 + 16 + f * 32); 302 height = sscanu32(buf + 4 + 16 + f * 32 + 4); 303 cucul_create_frame(cv, f); 304 cucul_set_frame(cv, f); 305 306 cv->curattr = sscanu32(buf + 4 + 16 + f * 32 + 12); 307 cv->frames[f].x = (int32_t)sscanu32(buf + 4 + 16 + f * 32 + 16); 308 cv->frames[f].y = (int32_t)sscanu32(buf + 4 + 16 + f * 32 + 20); 309 cv->frames[f].handlex = (int32_t)sscanu32(buf + 4 + 16 + f * 32 + 24); 310 cv->frames[f].handley = (int32_t)sscanu32(buf + 4 + 16 + f * 32 + 28); 311 312 /* FIXME: check for return value */ 313 314 for(n = width * height; n--; ) 315 { 316 int x = (n % width) - cv->frames[f].handlex - xmin; 317 int y = (n / width) - cv->frames[f].handley - ymin; 318 319 cucul_put_char(cv, x, y, sscanu32(buf + 4 + control_size 320 + offset + 8 * n)); 321 cucul_put_attr(cv, x, y, sscanu32(buf + 4 + control_size 322 + offset + 8 * n + 4)); 323 } 324 offset += width * height * 8; 325 326 cv->frames[f].x -= cv->frames[f].handlex; 327 cv->frames[f].y -= cv->frames[f].handley; 328 cv->frames[f].handlex = -xmin; 329 cv->frames[f].handley = -ymin; 330 } 331 332 cucul_set_frame(cv, 0); 298 333 299 334 return 4 + control_size + data_size;
Note: See TracChangeset
for help on using the changeset viewer.