From 2c272e7e908c68731842c145c33cb07f29f2a67e Mon Sep 17 00:00:00 2001 From: rocky Date: Tue, 1 Jun 2004 10:47:37 +0000 Subject: [PATCH] Break out file NRG format structures into a header. --- lib/image/nrg.c | 98 ++--------------------------------------- lib/image/nrg.h | 114 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 117 insertions(+), 95 deletions(-) create mode 100644 lib/image/nrg.h diff --git a/lib/image/nrg.c b/lib/image/nrg.c index 6d79d04b..39be98d1 100644 --- a/lib/image/nrg.c +++ b/lib/image/nrg.c @@ -1,5 +1,5 @@ /* - $Id: nrg.c,v 1.18 2004/06/01 10:43:23 rocky Exp $ + $Id: nrg.c,v 1.19 2004/06/01 10:47:37 rocky Exp $ Copyright (C) 2003, 2004 Rocky Bernstein Copyright (C) 2001, 2003 Herbert Valerio Riedel @@ -47,102 +47,10 @@ #include "ds.h" #include "cdio_private.h" #include "_cdio_stdio.h" +#include "nrg.h" -static const char _rcsid[] = "$Id: nrg.c,v 1.18 2004/06/01 10:43:23 rocky Exp $"; +static const char _rcsid[] = "$Id: nrg.c,v 1.19 2004/06/01 10:47:37 rocky Exp $"; -/* NERO (NRG) file format structures. */ - -/* this ugly image format is typical for lazy win32 programmers... at - least structure were set big endian, so at reverse - engineering wasn't such a big headache... */ - -PRAGMA_BEGIN_PACKED -typedef union { - struct { - uint32_t __x GNUC_PACKED; - uint32_t ID GNUC_PACKED; - uint32_t footer_ofs GNUC_PACKED; - } v50; - struct { - uint32_t ID GNUC_PACKED; - uint64_t footer_ofs GNUC_PACKED; - } v55; -} _footer_t; - -typedef struct { - uint32_t start GNUC_PACKED; - uint32_t length GNUC_PACKED; - uint32_t type GNUC_PACKED; /* 0x0 -> MODE1, 0x2 -> MODE2 form1, - 0x3 -> MIXED_MODE2 2336 blocksize - */ - uint32_t start_lsn GNUC_PACKED; /* does not include any pre-gaps! */ - uint32_t _unknown GNUC_PACKED; /* wtf is this for? -- always zero... */ -} _etnf_array_t; - -/* Finally they realized that 32-bit offsets are a bit outdated for - IA64 *eg* */ -typedef struct { - uint64_t start GNUC_PACKED; - uint64_t length GNUC_PACKED; - uint32_t type GNUC_PACKED; /* 0x0 -> MODE1, 0x2 -> MODE2 form1, - 0x3 -> MIXED_MODE2 2336 blocksize - */ - uint32_t start_lsn GNUC_PACKED; - uint64_t _unknown GNUC_PACKED; /* wtf is this for? -- always zero... */ -} _etn2_array_t; - -typedef struct { - uint8_t type GNUC_PACKED; /* has track copy bit and whether audiofile - or datafile. Is often 0x41 == 'A' */ - uint8_t track GNUC_PACKED; /* binary or BCD?? */ - uint8_t addr_ctrl GNUC_PACKED; /* addresstype: MSF or LBA in lower 4 bits - control in upper 4 bits. - makes 0->1 transitions */ - uint8_t res GNUC_PACKED; /* ?? */ - uint32_t lsn GNUC_PACKED; -} _cuex_array_t; - -typedef struct { - uint32_t _unknown1 GNUC_PACKED; - char mcn[CDIO_MCN_SIZE] GNUC_PACKED; - uint8_t _unknown[64-CDIO_MCN_SIZE-sizeof(uint32_t)] GNUC_PACKED; -} _daox_array_t; - -typedef struct { - uint32_t _unknown1 GNUC_PACKED; - char mcn[CDIO_MCN_SIZE] GNUC_PACKED; - uint8_t _unknown[64-CDIO_MCN_SIZE-sizeof(uint32_t)] GNUC_PACKED; -} _daoi_array_t; - -typedef struct { - uint32_t id GNUC_PACKED; - uint32_t len GNUC_PACKED; - char data[EMPTY_ARRAY_SIZE] GNUC_PACKED; -} _chunk_t; - -PRAGMA_END_PACKED - -/* Nero images are Big Endian. */ -#define CUEX_ID 0x43554558 /* Nero version 5.5 */ -#define CUES_ID 0x43554553 /* Nero pre version 5.5.x */ -#define DAOX_ID 0x44414f58 /* Nero version 5.5.x */ -#define DAOI_ID 0x44414f49 -#define END1_ID 0x454e4421 -#define ETN2_ID 0x45544e32 -#define ETNF_ID 0x45544e46 -#define NER5_ID 0x4e455235 /* Nero version 5.5.x */ -#define NERO_ID 0x4e45524f /* Nero pre 5.5.x */ -#define SINF_ID 0x53494e46 /* Session information */ -#define MTYP_ID 0x4d545950 /* Disc Media type? */ - -#define MTYP_AUDIO_CD 1 /* This isn't correct. But I don't know the - the right thing is and it sometimes works (and - sometimes is wrong). */ - -/* Disk track type Values gleaned from DAOX */ -#define DTYP_MODE1 0 -#define DTYP_MODE2_XA 2 -#define DTYP_INVALID 255 /* reader */ diff --git a/lib/image/nrg.h b/lib/image/nrg.h new file mode 100644 index 00000000..30e918d8 --- /dev/null +++ b/lib/image/nrg.h @@ -0,0 +1,114 @@ +/* + $Id: nrg.h,v 1.1 2004/06/01 10:47:37 rocky Exp $ + + Copyright (C) 2004 Rocky Bernstein + Copyright (C) 2001, 2003 Herbert Valerio Riedel + + 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 +*/ + +/* NERO (NRG) file format structures. */ + +/* this ugly image format is typical for lazy win32 programmers... at + least structure were set big endian, so at reverse + engineering wasn't such a big headache... */ + +PRAGMA_BEGIN_PACKED +typedef union { + struct { + uint32_t __x GNUC_PACKED; + uint32_t ID GNUC_PACKED; + uint32_t footer_ofs GNUC_PACKED; + } v50; + struct { + uint32_t ID GNUC_PACKED; + uint64_t footer_ofs GNUC_PACKED; + } v55; +} _footer_t; + +typedef struct { + uint32_t start GNUC_PACKED; + uint32_t length GNUC_PACKED; + uint32_t type GNUC_PACKED; /* 0x0 -> MODE1, 0x2 -> MODE2 form1, + 0x3 -> MIXED_MODE2 2336 blocksize + */ + uint32_t start_lsn GNUC_PACKED; /* does not include any pre-gaps! */ + uint32_t _unknown GNUC_PACKED; /* wtf is this for? -- always zero... */ +} _etnf_array_t; + +/* Finally they realized that 32-bit offsets are a bit outdated for + IA64 *eg* */ +typedef struct { + uint64_t start GNUC_PACKED; + uint64_t length GNUC_PACKED; + uint32_t type GNUC_PACKED; /* 0x0 -> MODE1, 0x2 -> MODE2 form1, + 0x3 -> MIXED_MODE2 2336 blocksize + */ + uint32_t start_lsn GNUC_PACKED; + uint64_t _unknown GNUC_PACKED; /* wtf is this for? -- always zero... */ +} _etn2_array_t; + +typedef struct { + uint8_t type GNUC_PACKED; /* has track copy bit and whether audiofile + or datafile. Is often 0x41 == 'A' */ + uint8_t track GNUC_PACKED; /* binary or BCD?? */ + uint8_t addr_ctrl GNUC_PACKED; /* addresstype: MSF or LBA in lower 4 bits + control in upper 4 bits. + makes 0->1 transitions */ + uint8_t res GNUC_PACKED; /* ?? */ + uint32_t lsn GNUC_PACKED; +} _cuex_array_t; + +typedef struct { + uint32_t _unknown1 GNUC_PACKED; + char mcn[CDIO_MCN_SIZE] GNUC_PACKED; + uint8_t _unknown[64-CDIO_MCN_SIZE-sizeof(uint32_t)] GNUC_PACKED; +} _daox_array_t; + +typedef struct { + uint32_t _unknown1 GNUC_PACKED; + char mcn[CDIO_MCN_SIZE] GNUC_PACKED; + uint8_t _unknown[64-CDIO_MCN_SIZE-sizeof(uint32_t)] GNUC_PACKED; +} _daoi_array_t; + +typedef struct { + uint32_t id GNUC_PACKED; + uint32_t len GNUC_PACKED; + char data[EMPTY_ARRAY_SIZE] GNUC_PACKED; +} _chunk_t; + +PRAGMA_END_PACKED + +/* Nero images are Big Endian. */ +#define CUEX_ID 0x43554558 /* Nero version 5.5 */ +#define CUES_ID 0x43554553 /* Nero pre version 5.5.x */ +#define DAOX_ID 0x44414f58 /* Nero version 5.5.x */ +#define DAOI_ID 0x44414f49 +#define END1_ID 0x454e4421 +#define ETN2_ID 0x45544e32 +#define ETNF_ID 0x45544e46 +#define NER5_ID 0x4e455235 /* Nero version 5.5.x */ +#define NERO_ID 0x4e45524f /* Nero pre 5.5.x */ +#define SINF_ID 0x53494e46 /* Session information */ +#define MTYP_ID 0x4d545950 /* Disc Media type? */ + +#define MTYP_AUDIO_CD 1 /* This isn't correct. But I don't know the + the right thing is and it sometimes works (and + sometimes is wrong). */ + +/* Disk track type Values gleaned from DAOX */ +#define DTYP_MODE1 0 +#define DTYP_MODE2_XA 2 +#define DTYP_INVALID 255