/* This file is part of PSPFormat, a File Format plugin for Adobe Photoshop Copyright (C) 2003-7 Toby Thain, toby@telegraphics.com.au This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* PSP File Format Specification is Copyright (C) 2000 Jasc Software, Inc. See http://www.jasc.com/specs/psp.asp */ #ifdef WIN32 #include #else #include "wintypes.h" #endif #include "psp7constants.h" #include "psp7structures.h" #include "file_io.h" #if defined(MAC_ENV) || defined(WIN_ENV) || defined(__MWERKS__) #include "dbg.h" #include "ui.h" #define BAD alert #define PRINTF #define DPRINTF #define INFO #else /* probably building under UNIX */ #define BAD bad #define PRINTF printf #define DPRINTF #define INFO puts #endif #define PAD1(bits) ( ((bits)+7)/8 ) #define PAD4(bits) ( (((bits)+31)/8) & -4 ) enum{ RLE_MAXRUN = 127 }; OSErr readvarstr(FILEREF r, char *p, int max); OSErr writevarstr(FILEREF r, char *p); OSErr readrectL(FILEREF r, RECT *pr); OSErr writerectL(FILEREF r, RECT *pr); OSErr skip(FILEREF r, long n); long rle_compress(unsigned char *src, unsigned char *dst, long n); long rle_count(unsigned char *src, long n); void rle_expand(unsigned char *indata, long bytesin, unsigned char *outdata, long bytesout); OSErr psp_read_file_header(FILEREF r, PSP_file_header *h); OSErr psp_write_file_header(FILEREF r, PSP_file_header *h); OSErr psp_read_block_header(FILEREF r, int vers, PSP_block_header *bh); OSErr psp_write_block_header(FILEREF r, int vers, PSP_block_header *bh); OSErr write_block(FILEREF f, int vers, WORD block_id, DWORD initial_len, DWORD block_len); OSErr psp_read_image_attr_chunk(FILEREF r, int vers, PSP_image_attr_chunk *c); OSErr psp_write_image_attr_chunk(FILEREF r, int vers, PSP_image_attr_chunk *c); OSErr psp5_read_thumbnail_attr_chunk(FILEREF r, PSP5_thumbnail_attr_chunk *c); OSErr psp_read_layer_info_chunk(FILEREF r, int vers, PSP_layer_info_chunk *c); OSErr psp_write_layer_info_chunk(FILEREF r, int vers, PSP_layer_info_chunk *c); OSErr psp7_read_layer_bitmap_chunk(FILEREF r, PSP7_layer_bitmap_chunk *c); OSErr psp7_write_layer_bitmap_chunk(FILEREF r, PSP7_layer_bitmap_chunk *c); OSErr psp_read_channel_info_chunk(FILEREF r, int vers, PSP_channel_info_chunk *c); OSErr psp_write_channel_info_chunk(FILEREF r, int vers, PSP_channel_info_chunk *c); //OSErr psp_blockdump(FILEREF f,PSP7_file_header *h); OSErr psp_layer(FILEREF f, PSP_file_header *h, PSP_image_attr_chunk *gia, PSP_layer_info_chunk *li, PSP_channel_info_chunk channels[], PSP_alpha_channel_info_chunk **alphainfo, PSP_palette_info_chunk *pi, RGBQUAD **palette); OSErr compress_channel(FILEREF f, int comptype, unsigned char *p, long nrows, long rowbytes, long *output); OSErr psp_channel(FILEREF f, PSP_image_attr_chunk *gia, PSP_channel_info_chunk *ci, unsigned char *outptr, long uncompsize); OSErr psp_block(FILEREF f, PSP_file_header *h, PSP_image_attr_chunk *gia, PSP_layer_info_chunk **layers, PSP_channel_info_chunk channels[], PSP_alpha_channel_info_chunk **alphainfo, PSP_palette_info_chunk *pi, RGBQUAD **palette); OSErr psp_read_palette_info_chunk(FILEREF r, int vers, PSP_palette_info_chunk *c); OSErr psp_write_palette_info_chunk(FILEREF r, int vers, PSP_palette_info_chunk *c); OSErr psp_read_alpha_bank_info_chunk(FILEREF r, int vers, PSP_alpha_bank_info_chunk *c); OSErr psp_write_alpha_bank_info_chunk(FILEREF r, int vers, PSP_alpha_bank_info_chunk *c); OSErr psp_read_alpha_channel_info_chunk(FILEREF r, int vers, PSP_alpha_channel_info_chunk *c); OSErr psp_write_alpha_channel_info_chunk(FILEREF r, int vers, PSP_alpha_channel_info_chunk *c); OSErr psp7_read_alpha_channel_chunk(FILEREF r, PSP7_alpha_channel_chunk *c); OSErr psp7_write_alpha_channel_chunk(FILEREF r, PSP7_alpha_channel_chunk *c); void dump_block_header(PSP_block_header *bh); void dump_image_attr(PSP_image_attr_chunk *gia); void dump_layer_info(PSP_layer_info_chunk *li); void dump_layer_bitmap(PSP7_layer_bitmap_chunk *lb); void dump_thumbnail_attr(PSP5_thumbnail_attr_chunk *ta); void dump_channel_info(PSP_channel_info_chunk *ci);