100 lines
3.4 KiB
Text
100 lines
3.4 KiB
Text
$NetBSD: patch-ag,v 1.3 2006/04/28 13:09:38 joerg Exp $
|
||
|
||
--- src/gens/util/chd.h.orig 2006-04-28 12:32:01.000000000 +0000
|
||
+++ src/gens/util/chd.h
|
||
@@ -0,0 +1,95 @@
|
||
+#ifndef HAD_CHD_H
|
||
+
|
||
+/*
|
||
+ NiH: chd.h,v 1.3 2004/06/25 23:31:08 dillo Exp
|
||
+
|
||
+ chd.h -- accessing chd files
|
||
+ Copyright (C) 2004 Dieter Baron and Thomas Klausner
|
||
+
|
||
+ This file is part of ckmame, a program to check rom sets for MAME.
|
||
+ The authors can be contacted at <nih@giga.or.at>
|
||
+
|
||
+ This program is free software; you can redistribute it and/or modify
|
||
+ it under the terms of the GNU General Public License, version 2, as
|
||
+ published by the Free Software Foundation.
|
||
+
|
||
+ 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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||
+*/
|
||
+
|
||
+#include <inttypes.h>
|
||
+#include <stdio.h>
|
||
+#include <zlib.h>
|
||
+
|
||
+#define CHD_ERR_NONE 0 /* N no error */
|
||
+#define CHD_ERR_OPEN 1 /* S cannot open file */
|
||
+#define CHD_ERR_READ 2 /* S read error */
|
||
+#define CHD_ERR_NO_CHD 3 /* N not a CHD file */
|
||
+#define CHD_ERR_VERSION 4 /* N unsupported version */
|
||
+#define CHD_ERR_INVAL 5 /* N invalid argument */
|
||
+#define CHD_ERR_SEEK 6 /* S seek error */
|
||
+#define CHD_ERR_NOTSUP 7 /* N unsupported chd feature */
|
||
+#define CHD_ERR_ZLIB 8 /* Z zlib error */
|
||
+#define CHD_ERR_CRC 9 /* N CRC mismatch */
|
||
+#define CHD_ERR_NOMEM 10 /* N out of memory */
|
||
+
|
||
+#define CHD_MAP_TYPE_COMPRESSED 0x01
|
||
+#define CHD_MAP_TYPE_UNCOMPRESSED 0x02
|
||
+#define CHD_MAP_TYPE_MINI 0x03
|
||
+#define CHD_MAP_TYPE_SELF_HUNK 0x04
|
||
+#define CHD_MAP_TYPE_PARENT_HUNK 0x05
|
||
+#define CHD_MAP_TYPE_MASK 0x0f
|
||
+#define CHD_MAP_FL_NOCRC 0x10
|
||
+
|
||
+#define CHD_COMP_NONE 0x0
|
||
+#define CHD_COMP_ZLIB 0x1
|
||
+#define CHD_COMP_ZLIB_PLUS 0x2
|
||
+
|
||
+
|
||
+
|
||
+struct chd_map_entry {
|
||
+ uint64_t offset; /* offse t within the file of the data */
|
||
+ uint32_t crc; /* 32-bit CRC of the data */
|
||
+ uint16_t length; /* length of the data */
|
||
+ uint16_t flags; /* misc flags */
|
||
+};
|
||
+
|
||
+struct chd {
|
||
+ FILE *f;
|
||
+ char *name;
|
||
+ int error;
|
||
+
|
||
+ uint32_t hdr_length; /* length of header data */
|
||
+ uint32_t version; /* drive format version */
|
||
+ uint32_t flags; /* flags field */
|
||
+ uint32_t compression; /* compression type */
|
||
+ uint32_t hunk_len; /* number of bytes per hunk */
|
||
+ uint32_t total_hunks; /* total # of hunks represented */
|
||
+ uint64_t total_len; /* logical size of the data */
|
||
+ uint64_t meta_offset; /* offset in file of first metadata */
|
||
+ uint8_t md5[16]; /* MD5 checksum of raw data */
|
||
+ uint8_t parent_md5[16]; /* MD5 checksum of parent file */
|
||
+ uint8_t sha1[20]; /* SHA1 checksum of raw data */
|
||
+ uint8_t parent_sha1[20]; /* SHA1 checksum of parent file */
|
||
+
|
||
+ struct chd_map_entry *map; /* hunk map */
|
||
+ char *buf; /* decompression buffer */
|
||
+ z_stream z; /* decompressor */
|
||
+ int hno; /* hunk currently in hbuf */
|
||
+ char *hbuf; /* hunk data buffer */
|
||
+};
|
||
+
|
||
+
|
||
+
|
||
+void chd_close(struct chd *);
|
||
+struct chd *chd_open(const char *, int *);
|
||
+int chd_read_hunk(struct chd *, int, char *);
|
||
+int chd_read_range(struct chd *, char *, int, int);
|
||
+
|
||
+#endif /* chd.h */
|