1 | /* |
1 | /* |
|
|
2 | |
2 | generate_image.c - Part of psiconv, a PSION 5 file formats converter |
3 | generate_image.c - Part of psiconv, a PSION 5 file formats converter |
3 | Copyright (c) 1999, 2000 Frodo Looijaard <frodol@dds.nl> |
4 | Copyright (c) 1999, 2000 Frodo Looijaard <frodol@dds.nl> |
4 | |
5 | |
5 | This program is free software; you can redistribute it and/or modify |
6 | This program is free software; you can redistribute it and/or modify |
6 | it under the terms of the GNU General Public License as published by |
7 | it under the terms of the GNU General Public License as published by |
… | |
… | |
84 | }; |
85 | }; |
85 | |
86 | |
86 | |
87 | |
87 | int psiconv_write_paint_data_section(const psiconv_config config, |
88 | int psiconv_write_paint_data_section(const psiconv_config config, |
88 | psiconv_buffer buf, |
89 | psiconv_buffer buf, |
89 | const psiconv_paint_data_section value) |
90 | const psiconv_paint_data_section value, |
|
|
91 | int is_clipart) |
90 | { |
92 | { |
91 | int res,colordepth,i; |
93 | int res,colordepth,i; |
92 | psiconv_pixel_ints ints; |
94 | psiconv_pixel_ints ints; |
93 | psiconv_pixel_floats_t floats,palet; |
95 | psiconv_pixel_floats_t floats,palet; |
94 | psiconv_list bytes; |
96 | psiconv_list bytes; |
… | |
… | |
144 | if ((res = psiconv_write_u32(config,buf,0))) |
146 | if ((res = psiconv_write_u32(config,buf,0))) |
145 | goto ERROR3; |
147 | goto ERROR3; |
146 | /* Encoding: no RLE for now */ |
148 | /* Encoding: no RLE for now */ |
147 | if ((res = psiconv_write_u32(config,buf,0))) |
149 | if ((res = psiconv_write_u32(config,buf,0))) |
148 | goto ERROR3; |
150 | goto ERROR3; |
|
|
151 | if (is_clipart) { |
|
|
152 | if ((res = psiconv_write_u32(config,buf,0xffffffff))) |
|
|
153 | goto ERROR3; |
|
|
154 | if ((res = psiconv_write_u32(config,buf,0x00000044))) |
|
|
155 | goto ERROR3; |
|
|
156 | } |
149 | for (i = 0; i < psiconv_list_length(bytes); i++) { |
157 | for (i = 0; i < psiconv_list_length(bytes); i++) { |
150 | if (!(byteptr = psiconv_list_get(bytes,i))) |
158 | if (!(byteptr = psiconv_list_get(bytes,i))) |
151 | goto ERROR3; |
159 | goto ERROR3; |
152 | if ((res = psiconv_write_u8(config,buf,*byteptr))) |
160 | if ((res = psiconv_write_u8(config,buf,*byteptr))) |
153 | goto ERROR3; |
161 | goto ERROR3; |
… | |
… | |
302 | return res; |
310 | return res; |
303 | } |
311 | } |
304 | |
312 | |
305 | int psiconv_write_sketch_section(const psiconv_config config, |
313 | int psiconv_write_sketch_section(const psiconv_config config, |
306 | psiconv_buffer buf, |
314 | psiconv_buffer buf, |
307 | psiconv_sketch_section value) |
315 | const psiconv_sketch_section value) |
308 | { |
316 | { |
309 | int res; |
317 | int res; |
310 | |
318 | |
311 | if (!value) { |
319 | if (!value) { |
312 | psiconv_warn(config,0,0,"NULL sketch section"); |
320 | psiconv_warn(config,0,0,"NULL sketch section"); |
… | |
… | |
330 | goto ERROR1; |
338 | goto ERROR1; |
331 | if ((res = psiconv_write_u16(config,buf,value->form_ysize))) |
339 | if ((res = psiconv_write_u16(config,buf,value->form_ysize))) |
332 | goto ERROR1; |
340 | goto ERROR1; |
333 | if ((res = psiconv_write_u16(config,buf,0x0000))) |
341 | if ((res = psiconv_write_u16(config,buf,0x0000))) |
334 | goto ERROR1; |
342 | goto ERROR1; |
335 | if ((res = psiconv_write_paint_data_section(config,buf,value->picture))) |
343 | if ((res = psiconv_write_paint_data_section(config,buf,value->picture,0))) |
336 | goto ERROR1; |
344 | goto ERROR1; |
337 | if ((res = psiconv_write_u16(config,buf,value->magnification_x * 0x03e8))) |
345 | if ((res = psiconv_write_u16(config,buf,value->magnification_x * 0x03e8))) |
338 | goto ERROR1; |
346 | goto ERROR1; |
339 | if ((res = psiconv_write_u16(config,buf,value->magnification_y * 0x03e8))) |
347 | if ((res = psiconv_write_u16(config,buf,value->magnification_y * 0x03e8))) |
340 | goto ERROR1; |
348 | goto ERROR1; |
… | |
… | |
352 | goto ERROR1; |
360 | goto ERROR1; |
353 | |
361 | |
354 | ERROR1: |
362 | ERROR1: |
355 | return res; |
363 | return res; |
356 | } |
364 | } |
|
|
365 | |
|
|
366 | int psiconv_write_jumptable_section(const psiconv_config config, |
|
|
367 | psiconv_buffer buf, |
|
|
368 | const psiconv_jumptable_section value) |
|
|
369 | { |
|
|
370 | int res,i; |
|
|
371 | psiconv_u32 *offset_ptr; |
|
|
372 | |
|
|
373 | |
|
|
374 | if (!value) { |
|
|
375 | psiconv_warn(config,0,psiconv_buffer_length(buf), |
|
|
376 | "NULL Jumptable Section"); |
|
|
377 | res = -PSICONV_E_GENERATE; |
|
|
378 | goto ERROR; |
|
|
379 | } |
|
|
380 | if ((res = psiconv_write_u32(config,buf,psiconv_list_length(value)))) |
|
|
381 | goto ERROR; |
|
|
382 | for (i = 0; i < psiconv_list_length(value); i++) { |
|
|
383 | if (!(offset_ptr = psiconv_list_get(value,i))) { |
|
|
384 | psiconv_warn(config,0,psiconv_buffer_length(buf), |
|
|
385 | "Massive memory corruption"); |
|
|
386 | res = -PSICONV_E_NOMEM; |
|
|
387 | goto ERROR; |
|
|
388 | } |
|
|
389 | if ((res = psiconv_write_offset(config,buf,*offset_ptr))) |
|
|
390 | goto ERROR; |
|
|
391 | } |
|
|
392 | |
|
|
393 | ERROR: |
|
|
394 | return res; |
|
|
395 | } |
|
|
396 | |
|
|
397 | int psiconv_write_clipart_section(const psiconv_config config, |
|
|
398 | psiconv_buffer buf, |
|
|
399 | const psiconv_clipart_section value) |
|
|
400 | { |
|
|
401 | int res; |
|
|
402 | |
|
|
403 | |
|
|
404 | if (!value) { |
|
|
405 | psiconv_warn(config,0,psiconv_buffer_length(buf), |
|
|
406 | "NULL Clipart Section"); |
|
|
407 | res = -PSICONV_E_GENERATE; |
|
|
408 | goto ERROR; |
|
|
409 | } |
|
|
410 | if ((res = psiconv_write_u32(config,buf,PSICONV_ID_CLIPART_ITEM))) |
|
|
411 | goto ERROR; |
|
|
412 | if ((res = psiconv_write_u32(config,buf,0x00000002))) |
|
|
413 | goto ERROR; |
|
|
414 | if ((res = psiconv_write_u32(config,buf,0x00000000))) |
|
|
415 | goto ERROR; |
|
|
416 | if ((res = psiconv_write_u32(config,buf,0x00000000))) |
|
|
417 | goto ERROR; |
|
|
418 | if ((res = psiconv_write_u32(config,buf,0x0000000C))) |
|
|
419 | goto ERROR; |
|
|
420 | if ((res = psiconv_write_paint_data_section(config,buf,value->picture,1))) |
|
|
421 | goto ERROR; |
|
|
422 | |
|
|
423 | ERROR: |
|
|
424 | return res; |
|
|
425 | } |