summaryrefslogtreecommitdiff
path: root/rbutil/rbutilqt/mspack/szddd.c
diff options
context:
space:
mode:
Diffstat (limited to 'rbutil/rbutilqt/mspack/szddd.c')
-rw-r--r--rbutil/rbutilqt/mspack/szddd.c70
1 files changed, 35 insertions, 35 deletions
diff --git a/rbutil/rbutilqt/mspack/szddd.c b/rbutil/rbutilqt/mspack/szddd.c
index af77f15565..1d6d05f844 100644
--- a/rbutil/rbutilqt/mspack/szddd.c
+++ b/rbutil/rbutilqt/mspack/szddd.c
@@ -66,8 +66,8 @@ void mspack_destroy_szdd_decompressor(struct msszdd_decompressor *base)
66{ 66{
67 struct msszdd_decompressor_p *self = (struct msszdd_decompressor_p *) base; 67 struct msszdd_decompressor_p *self = (struct msszdd_decompressor_p *) base;
68 if (self) { 68 if (self) {
69 struct mspack_system *sys = self->system; 69 struct mspack_system *sys = self->system;
70 sys->free(self); 70 sys->free(self);
71 } 71 }
72} 72}
73 73
@@ -77,7 +77,7 @@ void mspack_destroy_szdd_decompressor(struct msszdd_decompressor *base)
77 * opens an SZDD file without decompressing, reads header 77 * opens an SZDD file without decompressing, reads header
78 */ 78 */
79static struct msszddd_header *szddd_open(struct msszdd_decompressor *base, 79static struct msszddd_header *szddd_open(struct msszdd_decompressor *base,
80 const char *filename) 80 const char *filename)
81{ 81{
82 struct msszdd_decompressor_p *self = (struct msszdd_decompressor_p *) base; 82 struct msszdd_decompressor_p *self = (struct msszdd_decompressor_p *) base;
83 struct msszddd_header *hdr; 83 struct msszddd_header *hdr;
@@ -90,18 +90,18 @@ static struct msszddd_header *szddd_open(struct msszdd_decompressor *base,
90 fh = sys->open(sys, filename, MSPACK_SYS_OPEN_READ); 90 fh = sys->open(sys, filename, MSPACK_SYS_OPEN_READ);
91 hdr = (struct msszddd_header *) sys->alloc(sys, sizeof(struct msszddd_header_p)); 91 hdr = (struct msszddd_header *) sys->alloc(sys, sizeof(struct msszddd_header_p));
92 if (fh && hdr) { 92 if (fh && hdr) {
93 ((struct msszddd_header_p *) hdr)->fh = fh; 93 ((struct msszddd_header_p *) hdr)->fh = fh;
94 self->error = szddd_read_headers(sys, fh, hdr); 94 self->error = szddd_read_headers(sys, fh, hdr);
95 } 95 }
96 else { 96 else {
97 if (!fh) self->error = MSPACK_ERR_OPEN; 97 if (!fh) self->error = MSPACK_ERR_OPEN;
98 if (!hdr) self->error = MSPACK_ERR_NOMEMORY; 98 if (!hdr) self->error = MSPACK_ERR_NOMEMORY;
99 } 99 }
100 100
101 if (self->error) { 101 if (self->error) {
102 if (fh) sys->close(fh); 102 if (fh) sys->close(fh);
103 if (hdr) sys->free(hdr); 103 sys->free(hdr);
104 hdr = NULL; 104 hdr = NULL;
105 } 105 }
106 106
107 return hdr; 107 return hdr;
@@ -113,7 +113,7 @@ static struct msszddd_header *szddd_open(struct msszdd_decompressor *base,
113 * closes an SZDD file 113 * closes an SZDD file
114 */ 114 */
115static void szddd_close(struct msszdd_decompressor *base, 115static void szddd_close(struct msszdd_decompressor *base,
116 struct msszddd_header *hdr) 116 struct msszddd_header *hdr)
117{ 117{
118 struct msszdd_decompressor_p *self = (struct msszdd_decompressor_p *) base; 118 struct msszdd_decompressor_p *self = (struct msszdd_decompressor_p *) base;
119 struct msszddd_header_p *hdr_p = (struct msszddd_header_p *) hdr; 119 struct msszddd_header_p *hdr_p = (struct msszddd_header_p *) hdr;
@@ -142,33 +142,33 @@ static unsigned char szdd_signature_qbasic[8] = {
142}; 142};
143 143
144static int szddd_read_headers(struct mspack_system *sys, 144static int szddd_read_headers(struct mspack_system *sys,
145 struct mspack_file *fh, 145 struct mspack_file *fh,
146 struct msszddd_header *hdr) 146 struct msszddd_header *hdr)
147{ 147{
148 unsigned char buf[8]; 148 unsigned char buf[8];
149 149
150 /* read and check signature */ 150 /* read and check signature */
151 if (sys->read(fh, buf, 8) != 8) return MSPACK_ERR_READ; 151 if (sys->read(fh, buf, 8) != 8) return MSPACK_ERR_READ;
152 152
153 if ((mspack_memcmp(buf, szdd_signature_expand, 8) == 0)) { 153 if ((memcmp(buf, szdd_signature_expand, 8) == 0)) {
154 /* common SZDD */ 154 /* common SZDD */
155 hdr->format = MSSZDD_FMT_NORMAL; 155 hdr->format = MSSZDD_FMT_NORMAL;
156 156
157 /* read the rest of the header */ 157 /* read the rest of the header */
158 if (sys->read(fh, buf, 6) != 6) return MSPACK_ERR_READ; 158 if (sys->read(fh, buf, 6) != 6) return MSPACK_ERR_READ;
159 if (buf[0] != 0x41) return MSPACK_ERR_DATAFORMAT; 159 if (buf[0] != 0x41) return MSPACK_ERR_DATAFORMAT;
160 hdr->missing_char = buf[1]; 160 hdr->missing_char = buf[1];
161 hdr->length = EndGetI32(&buf[2]); 161 hdr->length = EndGetI32(&buf[2]);
162 } 162 }
163 else if ((mspack_memcmp(buf, szdd_signature_qbasic, 8) == 0)) { 163 else if ((memcmp(buf, szdd_signature_qbasic, 8) == 0)) {
164 /* special QBasic SZDD */ 164 /* special QBasic SZDD */
165 hdr->format = MSSZDD_FMT_QBASIC; 165 hdr->format = MSSZDD_FMT_QBASIC;
166 if (sys->read(fh, buf, 4) != 4) return MSPACK_ERR_READ; 166 if (sys->read(fh, buf, 4) != 4) return MSPACK_ERR_READ;
167 hdr->missing_char = '\0'; 167 hdr->missing_char = '\0';
168 hdr->length = EndGetI32(buf); 168 hdr->length = EndGetI32(buf);
169 } 169 }
170 else { 170 else {
171 return MSPACK_ERR_SIGNATURE; 171 return MSPACK_ERR_SIGNATURE;
172 } 172 }
173 return MSPACK_ERR_OK; 173 return MSPACK_ERR_OK;
174} 174}
@@ -179,7 +179,7 @@ static int szddd_read_headers(struct mspack_system *sys,
179 * decompresses an SZDD file 179 * decompresses an SZDD file
180 */ 180 */
181static int szddd_extract(struct msszdd_decompressor *base, 181static int szddd_extract(struct msszdd_decompressor *base,
182 struct msszddd_header *hdr, const char *filename) 182 struct msszddd_header *hdr, const char *filename)
183{ 183{
184 struct msszdd_decompressor_p *self = (struct msszdd_decompressor_p *) base; 184 struct msszdd_decompressor_p *self = (struct msszdd_decompressor_p *) base;
185 struct mspack_file *fh, *outfh; 185 struct mspack_file *fh, *outfh;
@@ -195,19 +195,19 @@ static int szddd_extract(struct msszdd_decompressor *base,
195 /* seek to the compressed data */ 195 /* seek to the compressed data */
196 data_offset = (hdr->format == MSSZDD_FMT_NORMAL) ? 14 : 12; 196 data_offset = (hdr->format == MSSZDD_FMT_NORMAL) ? 14 : 12;
197 if (sys->seek(fh, data_offset, MSPACK_SYS_SEEK_START)) { 197 if (sys->seek(fh, data_offset, MSPACK_SYS_SEEK_START)) {
198 return self->error = MSPACK_ERR_SEEK; 198 return self->error = MSPACK_ERR_SEEK;
199 } 199 }
200 200
201 /* open file for output */ 201 /* open file for output */
202 if (!(outfh = sys->open(sys, filename, MSPACK_SYS_OPEN_WRITE))) { 202 if (!(outfh = sys->open(sys, filename, MSPACK_SYS_OPEN_WRITE))) {
203 return self->error = MSPACK_ERR_OPEN; 203 return self->error = MSPACK_ERR_OPEN;
204 } 204 }
205 205
206 /* decompress the data */ 206 /* decompress the data */
207 self->error = lzss_decompress(sys, fh, outfh, SZDD_INPUT_SIZE, 207 self->error = lzss_decompress(sys, fh, outfh, SZDD_INPUT_SIZE,
208 hdr->format == MSSZDD_FMT_NORMAL 208 hdr->format == MSSZDD_FMT_NORMAL
209 ? LZSS_MODE_EXPAND 209 ? LZSS_MODE_EXPAND
210 : LZSS_MODE_QBASIC); 210 : LZSS_MODE_QBASIC);
211 211
212 /* close output file */ 212 /* close output file */
213 sys->close(outfh); 213 sys->close(outfh);
@@ -221,7 +221,7 @@ static int szddd_extract(struct msszdd_decompressor *base,
221 * unpacks directly from input to output 221 * unpacks directly from input to output
222 */ 222 */
223static int szddd_decompress(struct msszdd_decompressor *base, 223static int szddd_decompress(struct msszdd_decompressor *base,
224 const char *input, const char *output) 224 const char *input, const char *output)
225{ 225{
226 struct msszdd_decompressor_p *self = (struct msszdd_decompressor_p *) base; 226 struct msszdd_decompressor_p *self = (struct msszdd_decompressor_p *) base;
227 struct msszddd_header *hdr; 227 struct msszddd_header *hdr;