diff options
author | Max Horn | 2003-03-06 02:37:37 +0000 |
---|---|---|
committer | Max Horn | 2003-03-06 02:37:37 +0000 |
commit | 32b84fe2baa72e3bdf08ca8b0b215be9f12f6948 (patch) | |
tree | 20c08cd1924438cb7837262ec34e5d43be65d791 /sky/disk.cpp | |
parent | b525feba246b69f8770365288fd5ac0e8c2dd925 (diff) | |
download | scummvm-rg350-32b84fe2baa72e3bdf08ca8b0b215be9f12f6948.tar.gz scummvm-rg350-32b84fe2baa72e3bdf08ca8b0b215be9f12f6948.tar.bz2 scummvm-rg350-32b84fe2baa72e3bdf08ca8b0b215be9f12f6948.zip |
indention fixed
svn-id: r6704
Diffstat (limited to 'sky/disk.cpp')
-rw-r--r-- | sky/disk.cpp | 291 |
1 files changed, 144 insertions, 147 deletions
diff --git a/sky/disk.cpp b/sky/disk.cpp index 056276d9e1..fd1b62b8f9 100644 --- a/sky/disk.cpp +++ b/sky/disk.cpp @@ -8,7 +8,7 @@ * 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 + * 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 @@ -28,7 +28,7 @@ #define no_of_files_hd 1600 #define no_of_files_cd 5200 -#define max_files_in_list 60 +#define max_files_in_list 60 int UnpackM1(void *, void *, uint16); @@ -44,169 +44,166 @@ File *dnr_handle = new File(); void SkyState::initialise_disk() { - uint32 entries_read; - - dnr_handle->open(dinner_file_name, _gameDataPath); - if (dnr_handle->isOpen() == false) - error("Could not open %s%s!\n", _gameDataPath, dinner_file_name); - - if (!(dinner_table_size = dnr_handle->readUint32LE())) - error("Error reading from sky.dnr!\n"); //even though it was opened correctly?! - - debug(1, "Entries in dinner table: %d", dinner_table_size); - - dinner_table_area = (uint8 *)malloc(dinner_table_size*8); - entries_read = dnr_handle->read(dinner_table_area, 8*dinner_table_size) / 8; + uint32 entries_read; - if (entries_read != dinner_table_size) - warning("bytes_read != dinner_table_entries. [%d/%d]\n", entries_read, dinner_table_size); - - data_disk_handle->open(data_file_name, _gameDataPath); - if (data_disk_handle->isOpen() == false) - error("Error opening %s%s!\n", _gameDataPath, data_file_name); + dnr_handle->open(dinner_file_name, _gameDataPath); + if (dnr_handle->isOpen() == false) + error("Could not open %s%s!\n", _gameDataPath, dinner_file_name); + + if (!(dinner_table_size = dnr_handle->readUint32LE())) + error("Error reading from sky.dnr!\n"); //even though it was opened correctly?! + + debug(1, "Entries in dinner table: %d", dinner_table_size); + + dinner_table_area = (uint8 *)malloc(dinner_table_size*8); + entries_read = dnr_handle->read(dinner_table_area, 8*dinner_table_size) / 8; + + if (entries_read != dinner_table_size) + warning("bytes_read != dinner_table_entries. [%d/%d]\n", entries_read, dinner_table_size); + + data_disk_handle->open(data_file_name, _gameDataPath); + if (data_disk_handle->isOpen() == false) + error("Error opening %s%s!\n", _gameDataPath, data_file_name); } //load in file file_nr to address dest //if dest == NULL, then allocate memory for this file uint16 *SkyState::load_file(uint16 file_nr, uint8 *dest) { - uint8 cflag; - uint32 eax, ecx; - int32 bytes_read; - uint8 *file_ptr, *esiptr, *ediptr; - dataFileHeader file_header; - - #ifdef file_order_chk - warning("File order checking not implemented yet!\n"); - #endif - + uint8 cflag; + uint32 eax, ecx; + int32 bytes_read; + uint8 *file_ptr, *esiptr, *ediptr; + dataFileHeader file_header; + + #ifdef file_order_chk + warning("File order checking not implemented yet!\n"); + #endif + comp_file = file_nr; debug(1, "load file %d,%d (%d)", (file_nr>>11), (file_nr&2047), file_nr); - - - file_ptr = (uint8 *)get_file_info(file_nr); - if (file_ptr == NULL) { - printf("File %d not found!\n", file_nr); - return NULL; - } - - eax = READ_LE_UINT32((file_ptr+5)); - file_flags = eax; - eax &= 0x03fffff; - file_size = eax; - - ecx = READ_LE_UINT32((file_ptr+2)); - ecx &= 0x0ffffff; - - cflag = (uint8)((ecx >> (23)) & 0x1); - ecx = (((1 << (23)) ^ 0xFFFFFFFF) & ecx); - - if (cflag) - ecx = ecx << 4; - file_offset = ecx; - fixed_dest = dest; - file_dest = dest; - comp_dest = dest; - - if (dest == NULL) //we need to allocate memory for this file - file_dest = (uint8 *)malloc(eax); - - data_disk_handle->seek(file_offset, SEEK_SET); - - #ifdef file_order_chk - warning("File order checking not implemented yet!\n"); - #endif - - //now read in the data - bytes_read = data_disk_handle->read(file_dest, 1*file_size); - - if (bytes_read != (int32)file_size) - printf("ERROR: Unable to read %d bytes from datadisk (%d bytes read)\n", file_size, bytes_read); - - cflag = (uint8)((file_flags >> (23)) & 0x1); - - //if cflag == 0 then file is compressed, 1 == uncompressed - - if (!cflag) - { - debug(1, "File is compressed..."); - - memcpy(&file_header, file_dest, sizeof(struct dataFileHeader)); - if ( (uint8)((FROM_LE_16(file_header.flag) >> 7) & 0x1) ) { - debug(1, "with RNC!"); - - eax = FROM_LE_16(file_header.flag); - eax &= 0xFFFFFF00; //clear al - eax = eax << 8; - eax |= FROM_LE_16((uint16)file_header.s_tot_size); - - decomp_size = eax; - - if (fixed_dest == NULL) // is this valid? - comp_dest = (uint8 *)malloc(eax); - - esiptr = file_dest; - ediptr = comp_dest; + + file_ptr = (uint8 *)get_file_info(file_nr); + if (file_ptr == NULL) { + printf("File %d not found!\n", file_nr); + return NULL; + } + + eax = READ_LE_UINT32((file_ptr+5)); + file_flags = eax; + eax &= 0x03fffff; + file_size = eax; + + ecx = READ_LE_UINT32((file_ptr+2)); + ecx &= 0x0ffffff; + + cflag = (uint8)((ecx >> (23)) & 0x1); + ecx = (((1 << (23)) ^ 0xFFFFFFFF) & ecx); + + if (cflag) + ecx = ecx << 4; - if ( (uint8)(file_flags >> (22) & 0x1) ) //do we include the header? - esiptr += sizeof(struct dataFileHeader); - else { - memcpy(ediptr, esiptr, sizeof(struct dataFileHeader)); - esiptr += sizeof(struct dataFileHeader); - ediptr += sizeof(struct dataFileHeader); - } - - eax = UnpackM1(esiptr, ediptr, 0); - - debug(2, "UnpackM1 returned: %d", eax); - - if (eax == 0) { //Unpack returned 0: file was probably not packed. - if (fixed_dest == NULL) - free(comp_dest); - - return (uint16 *)file_dest; - } - - if (! (uint8)(file_flags >> (22) & 0x1) ) { //include header? - eax += sizeof(struct dataFileHeader); - - if (eax != decomp_size) - { - debug(1, "ERROR: invalid decomp size! (was: %d, should be: %d)", eax, decomp_size); + file_offset = ecx; + fixed_dest = dest; + file_dest = dest; + comp_dest = dest; + + if (dest == NULL) //we need to allocate memory for this file + file_dest = (uint8 *)malloc(eax); + + data_disk_handle->seek(file_offset, SEEK_SET); + + #ifdef file_order_chk + warning("File order checking not implemented yet!\n"); + #endif + + //now read in the data + bytes_read = data_disk_handle->read(file_dest, 1*file_size); + + if (bytes_read != (int32)file_size) + printf("ERROR: Unable to read %d bytes from datadisk (%d bytes read)\n", file_size, bytes_read); + + cflag = (uint8)((file_flags >> (23)) & 0x1); + + //if cflag == 0 then file is compressed, 1 == uncompressed + + if (!cflag) + { + debug(1, "File is compressed..."); + + memcpy(&file_header, file_dest, sizeof(struct dataFileHeader)); + if ( (uint8)((FROM_LE_16(file_header.flag) >> 7) & 0x1) ) { + debug(1, "with RNC!"); + + eax = FROM_LE_16(file_header.flag); + eax &= 0xFFFFFF00; //clear al + eax = eax << 8; + eax |= FROM_LE_16((uint16)file_header.s_tot_size); + + decomp_size = eax; + + if (fixed_dest == NULL) // is this valid? + comp_dest = (uint8 *)malloc(eax); + + esiptr = file_dest; + ediptr = comp_dest; + + if ( (uint8)(file_flags >> (22) & 0x1) ) //do we include the header? + esiptr += sizeof(struct dataFileHeader); + else { + memcpy(ediptr, esiptr, sizeof(struct dataFileHeader)); + esiptr += sizeof(struct dataFileHeader); + ediptr += sizeof(struct dataFileHeader); + } + + eax = UnpackM1(esiptr, ediptr, 0); + + debug(2, "UnpackM1 returned: %d", eax); + + if (eax == 0) { //Unpack returned 0: file was probably not packed. + if (fixed_dest == NULL) + free(comp_dest); + + return (uint16 *)file_dest; + } + + if (! (uint8)(file_flags >> (22) & 0x1) ) { // include header? + eax += sizeof(struct dataFileHeader); + + if (eax != decomp_size) { + debug(1, "ERROR: invalid decomp size! (was: %d, should be: %d)", eax, decomp_size); + } + } + + if (fixed_dest == NULL) + free(file_dest); + } - } - - if (fixed_dest == NULL) - free(file_dest); - + else + debug(1, "but not with RNC! (?!)"); + } else - debug(1, "but not with RNC! (?!)"); - - } - else - return (uint16 *)file_dest; - - return (uint16 *)comp_dest; + return (uint16 *)file_dest; + + return (uint16 *)comp_dest; } uint16 *SkyState::get_file_info(uint16 file_nr) { - uint16 i; - uint16 *dnr_tbl_16_ptr = (uint16 *)dinner_table_area; - - for (i = 0; i < dinner_table_size/2; i++) - { - if (READ_LE_UINT16(dnr_tbl_16_ptr+(i*4)) == file_nr) - { - debug(1, "file %d found!", file_nr); - return (dnr_tbl_16_ptr+(i*4)); + uint16 i; + uint16 *dnr_tbl_16_ptr = (uint16 *)dinner_table_area; + + for (i = 0; i < dinner_table_size/2; i++) { + if (READ_LE_UINT16(dnr_tbl_16_ptr+(i*4)) == file_nr) { + debug(1, "file %d found!", file_nr); + return (dnr_tbl_16_ptr+(i*4)); + } } - } - - //if file is speech file then return NULL if not found - printf("get_file_info() - speech file support not implemented yet!\n"); - return (uint16 *)NULL; + + // if file is speech file then return NULL if not found + printf("get_file_info() - speech file support not implemented yet!\n"); + return (uint16 *)NULL; } |