diff options
Diffstat (limited to 'engines/cruise/volume.cpp')
| -rw-r--r-- | engines/cruise/volume.cpp | 361 | 
1 files changed, 157 insertions, 204 deletions
| diff --git a/engines/cruise/volume.cpp b/engines/cruise/volume.cpp index ef877d6026..a31178a0cd 100644 --- a/engines/cruise/volume.cpp +++ b/engines/cruise/volume.cpp @@ -26,77 +26,72 @@  namespace Cruise { -FILE* PAL_fileHandle = NULL; -uint8* PAL_ptr = NULL; +FILE *PAL_fileHandle = NULL; +uint8 *PAL_ptr = NULL;  int16 numLoadedPal;  int16 fileData2; -void loadPal(volumeDataStruct* entry) -{ -  char name[20]; +void loadPal(volumeDataStruct *entry) { +	char name[20];  	return; -  if(PAL_fileHandle) -  { -    fclose(PAL_fileHandle); -  } +	if (PAL_fileHandle) { +		fclose(PAL_fileHandle); +	} + +	removeExtention(entry->ident, name); +	strcat(name, ".PAL"); -  removeExtention(entry->ident, name); -  strcat(name,".PAL"); -  -  PAL_fileHandle = fopen(name,"rb"); +	PAL_fileHandle = fopen(name, "rb"); -  fread(&numLoadedPal, 2, 1, PAL_fileHandle); -  fread(&fileData2, 2, 1, PAL_fileHandle); +	fread(&numLoadedPal, 2, 1, PAL_fileHandle); +	fread(&fileData2, 2, 1, PAL_fileHandle); -  flipShort(&numLoadedPal); -  flipShort(&fileData2); +	flipShort(&numLoadedPal); +	flipShort(&fileData2); -  PAL_ptr = (uint8*)malloc(numLoadedPal*fileData2); +	PAL_ptr = (uint8 *) malloc(numLoadedPal * fileData2);  } -int getVolumeDataEntry(volumeDataStruct* entry) -{ +int getVolumeDataEntry(volumeDataStruct *entry) {  	char buffer[256];  	int i;  	volumeNumEntry = 0;  	volumeNumberOfEntry = 0; -	if(currentVolumeFile.isOpen()) -	{ +	if (currentVolumeFile.isOpen()) {  		freeDisk();  	}  	askDisk(-1); -	strcpyuint8(buffer,entry->ident); +	strcpyuint8(buffer, entry->ident);  	currentVolumeFile.open(buffer); -	if(!currentVolumeFile.isOpen()) -	{ -		return(-14); +	if (!currentVolumeFile.isOpen()) { +		return (-14);  	}  	changeCursor(1); -	currentVolumeFile.read(&volumeNumberOfEntry,2); -	currentVolumeFile.read(&volumeSizeOfEntry,2); +	currentVolumeFile.read(&volumeNumberOfEntry, 2); +	currentVolumeFile.read(&volumeSizeOfEntry, 2);  	flipShort(&volumeNumberOfEntry);  	flipShort(&volumeSizeOfEntry);  	volumeNumEntry = volumeNumberOfEntry; -	assert(volumeSizeOfEntry == 14+4+4+4+4); +	assert(volumeSizeOfEntry == 14 + 4 + 4 + 4 + 4); -	volumePtrToFileDescriptor = (fileEntry*)mallocAndZero(sizeof(fileEntry) * volumeNumEntry); +	volumePtrToFileDescriptor = +	    (fileEntry *) mallocAndZero(sizeof(fileEntry) * volumeNumEntry); -	for(i=0;i<volumeNumEntry;i++) -	{ +	for (i = 0; i < volumeNumEntry; i++) {  		volumePtrToFileDescriptor[i].name[0] = 0;  		volumePtrToFileDescriptor[i].offset = 0;  		volumePtrToFileDescriptor[i].size = 0; @@ -104,177 +99,153 @@ int getVolumeDataEntry(volumeDataStruct* entry)  		volumePtrToFileDescriptor[i].unk3 = 0;  	} -	for(i=0;i<volumeNumEntry;i++) -	{ +	for (i = 0; i < volumeNumEntry; i++) {  		currentVolumeFile.read(&volumePtrToFileDescriptor[i].name, 14); -		currentVolumeFile.read(&volumePtrToFileDescriptor[i].offset, 4); +		currentVolumeFile.read(&volumePtrToFileDescriptor[i].offset, +		    4);  		currentVolumeFile.read(&volumePtrToFileDescriptor[i].size, 4); -		currentVolumeFile.read(&volumePtrToFileDescriptor[i].extSize, 4); +		currentVolumeFile.read(&volumePtrToFileDescriptor[i].extSize, +		    4);  		currentVolumeFile.read(&volumePtrToFileDescriptor[i].unk3, 4);  	} -	for(i=0;i<volumeNumEntry;i++) -	{ +	for (i = 0; i < volumeNumEntry; i++) {  		flipLong(&volumePtrToFileDescriptor[i].offset);  		flipLong(&volumePtrToFileDescriptor[i].size);  		flipLong(&volumePtrToFileDescriptor[i].extSize);  	}  	loadPal(entry); -	 +  	return 0;  } -int searchFileInVolCnf(uint8* fileName,int32 diskNumber) -{ +int searchFileInVolCnf(uint8 *fileName, int32 diskNumber) {  	int foundDisk = -1;  	int i; -	for(i=0;i<numOfDisks;i++) -	{ -		if(volumeData[i].diskNumber == diskNumber) -		{ +	for (i = 0; i < numOfDisks; i++) { +		if (volumeData[i].diskNumber == diskNumber) {  			int j;  			int numOfEntry = volumeData[i].size / 13; -			for(j=0;j<numOfEntry;j++) -			{ -				if(!strcmpuint8(volumeData[i].ptr[j].name,fileName)) -				{ -					return(i); +			for (j = 0; j < numOfEntry; j++) { +				if (!strcmpuint8(volumeData[i].ptr[j].name, +					fileName)) { +					return (i);  				}  			}  		}  	} -	return(foundDisk); +	return (foundDisk);  } -int32 findFileInDisksSub1(uint8* fileName) -{ +int32 findFileInDisksSub1(uint8 *fileName) {  	int foundDisk = -1;  	int i; -	for(i=0;i<numOfDisks;i++) -	{ +	for (i = 0; i < numOfDisks; i++) {  		int j;  		int numOfEntry = volumeData[i].size / 13; -		for(j=0;j<numOfEntry;j++) -		{ -			if(!strcmpuint8(volumeData[i].ptr[j].name,fileName)) -			{ -				return(i); +		for (j = 0; j < numOfEntry; j++) { +			if (!strcmpuint8(volumeData[i].ptr[j].name, fileName)) { +				return (i);  			}  		}  	} -	return(foundDisk); +	return (foundDisk);  } -void strToUpper(uint8* fileName) -{ +void strToUpper(uint8 *fileName) {  	char character; -	do -	{ +	do {  		character = *fileName; -		if(character>='a' && character<='z') -		{ -			character&=0xDF; +		if (character >= 'a' && character <= 'z') { +			character &= 0xDF;  			*fileName = character;  		}  		fileName++; -	}while(character); +	} while (character);  } -int16 fileExist(uint8* fileName) -{ -	FILE* fHandle; +int16 fileExist(uint8 *fileName) { +	FILE *fHandle; -	fHandle = fopenuint8(fileName,"rb"); +	fHandle = fopenuint8(fileName, "rb"); -	if(fHandle) -	{ +	if (fHandle) {  		fclose(fHandle); -		return(0); +		return (0);  	} -	 -	return(1); + +	return (1);  } -void freeDisk(void) -{ -	if(currentVolumeFile.isOpen()) -	{ +void freeDisk(void) { +	if (currentVolumeFile.isOpen()) {  		currentVolumeFile.close();  		free(volumePtrToFileDescriptor);  	}  	/* TODO -	if(PAL_fileHandle) -	{ -		freeAllDataPtr(); -	} -	*/ +	 * if(PAL_fileHandle) +	 * { +	 * freeAllDataPtr(); +	 * } +	 */  } -int16 findFileInList(uint8* fileName) -{ +int16 findFileInList(uint8 *fileName) {  	int i; -	 -	if(!currentVolumeFile.isOpen()) -	{ -		return(-1); + +	if (!currentVolumeFile.isOpen()) { +		return (-1);  	}  	strToUpper(fileName); -	if(volumeNumEntry<=0) -	{ -		return(-1); +	if (volumeNumEntry <= 0) { +		return (-1);  	} -	for(i=0;i<volumeNumEntry;i++) -	{ -		if(!strcmpuint8(volumePtrToFileDescriptor[i].name,fileName)) -		{ -			return(i); +	for (i = 0; i < volumeNumEntry; i++) { +		if (!strcmpuint8(volumePtrToFileDescriptor[i].name, fileName)) { +			return (i);  		}  	} -	return(-1); +	return (-1);  } -void askDisk(int16 discNumber) -{ +void askDisk(int16 discNumber) {  	char diskNumberString[256];  	uint8 fileName[256];  	uint8 string[256];  	char messageDrawn = 0; -	if(discNumber != -1) -	{ +	if (discNumber != -1) {  		currentDiskNumber = discNumber;  	} -  	// skip drive selection stuff -	strcpyuint8(fileName,"VOL."); -	sprintf(diskNumberString,"%d",currentDiskNumber); -	strcatuint8(fileName,diskNumberString); +	strcpyuint8(fileName, "VOL."); +	sprintf(diskNumberString, "%d", currentDiskNumber); +	strcatuint8(fileName, diskNumberString); -	strcpyuint8(string,"INSERER LE DISQUE "); -	strcatuint8(string,diskNumberString); -	strcatuint8(string," EN "); +	strcpyuint8(string, "INSERER LE DISQUE "); +	strcatuint8(string, diskNumberString); +	strcatuint8(string, " EN "); -//	while(fileExist(fileName)) +//      while(fileExist(fileName))  	{ -		if(!messageDrawn) -		{ +		if (!messageDrawn) {  			drawMsgString(string);  			messageDrawn = 1;  		} @@ -283,20 +254,15 @@ void askDisk(int16 discNumber)  	changeCursor(currentCursor);  } - - -int16 findFileInDisks(uint8* fileName) -{ +int16 findFileInDisks(uint8 *fileName) {  	int disk;  	int fileIdx; -	 +  	strToUpper(fileName); -	if(!volumeDataLoaded) -	{ +	if (!volumeDataLoaded) {  		printf("CNF wasn't loaded, reading now...\n"); -		if(currentVolumeFile.isOpen()) -		{ +		if (currentVolumeFile.isOpen()) {  			askDisk(-1);  			freeDisk();  		} @@ -305,28 +271,24 @@ int16 findFileInDisks(uint8* fileName)  		readVolCnf();  	} -	if(currentVolumeFile.isOpen()) -	{ +	if (currentVolumeFile.isOpen()) {  		askDisk(-1);  	}  	fileIdx = findFileInList(fileName); -	if(fileIdx>=0) -	{ -		return(fileIdx); +	if (fileIdx >= 0) { +		return (fileIdx);  	} -	disk = searchFileInVolCnf(fileName,currentDiskNumber); +	disk = searchFileInVolCnf(fileName, currentDiskNumber); -	if(disk>=0) -	{ +	if (disk >= 0) {  		int temp;  		printf("File found on disk %d\n", disk); -		 -		if(currentVolumeFile.isOpen()) -		{ + +		if (currentVolumeFile.isOpen()) {  			askDisk(-1);  		} @@ -338,69 +300,61 @@ int16 findFileInDisks(uint8* fileName)  		temp = findFileInList(fileName); -		if(temp>=0) -			return(temp); +		if (temp >= 0) +			return (temp); -		return(-1); +		return (-1); -	} -	else -	{ +	} else {  		int temp;  		temp = findFileInDisksSub1(fileName); -		if(temp>=0) -		{ +		if (temp >= 0) {  			int temp2; -	 +  			askDisk(volumeData[temp].diskNumber);  			getVolumeDataEntry(&volumeData[temp]);  			temp2 = findFileInList(fileName); -			if(temp2>=0) -				return(temp2); +			if (temp2 >= 0) +				return (temp2);  		} - -		return(-1); +		return (-1);  	}  } -int16 readVolCnf(void) -{ +int16 readVolCnf(void) {  	int i;  	Common::File fileHandle;  	short int sizeHEntry;  	volumeDataLoaded = 0; -	for(i=0;i<20;i++) -	{ +	for (i = 0; i < 20; i++) {  		volumeData[i].ident[0] = 0;  		volumeData[i].ptr = NULL; -		volumeData[i].diskNumber = i+1; +		volumeData[i].diskNumber = i + 1;  		volumeData[i].size = 0;  	}  	fileHandle.open("VOL.CNF"); -	if(!fileHandle.isOpen()) -	{ -		return(0); +	if (!fileHandle.isOpen()) { +		return (0);  	} -	fileHandle.read(&numOfDisks,2); +	fileHandle.read(&numOfDisks, 2);  	flipShort(&numOfDisks); -	fileHandle.read(&sizeHEntry,2); -	flipShort(&sizeHEntry);             // size of one header entry - 20 bytes +	fileHandle.read(&sizeHEntry, 2); +	flipShort(&sizeHEntry);	// size of one header entry - 20 bytes -	for(i=0;i<numOfDisks;i++) -	{ -	//	fread(&volumeData[i],20,1,fileHandle); +	for (i = 0; i < numOfDisks; i++) { +		//      fread(&volumeData[i],20,1,fileHandle);  		fileHandle.read(&volumeData[i].ident, 10);  		fileHandle.read(&volumeData[i].ptr, 4);  		fileHandle.read(&volumeData[i].diskNumber, 2); @@ -411,24 +365,22 @@ int16 readVolCnf(void)  		flipLong(&volumeData[i].size);  	} -	for(i=0;i<numOfDisks;i++) -	{ -		fileName* ptr; -		 -		fileHandle.read(&volumeData[i].size,4); +	for (i = 0; i < numOfDisks; i++) { +		fileName *ptr; + +		fileHandle.read(&volumeData[i].size, 4);  		flipLong(&volumeData[i].size); -		ptr = (fileName*)mallocAndZero(volumeData[i].size); +		ptr = (fileName *) mallocAndZero(volumeData[i].size);  		volumeData[i].ptr = ptr; -		if(!ptr) -		{ +		if (!ptr) {  			fileHandle.close(); -			return(-2); +			return (-2);  		} -		fileHandle.read(ptr,volumeData[i].size); +		fileHandle.read(ptr, volumeData[i].size);  	}  	fileHandle.close(); @@ -438,31 +390,29 @@ int16 readVolCnf(void)  //#define dumpResources  #ifdef dumpResources -	for(i=0;i<numOfDisks;i++) -	{ +	for (i = 0; i < numOfDisks; i++) {  		int j;  		char nameBuffer[256]; -		fileEntry* buffer; +		fileEntry *buffer; -		sprintf(nameBuffer,"D%d.",i+1); +		sprintf(nameBuffer, "D%d.", i + 1); -		fileHandle = fopen(nameBuffer,"rb"); +		fileHandle = fopen(nameBuffer, "rb");  		short int numEntry;  		short int sizeEntry; -		fread(&numEntry,2,1,fileHandle); -		fread(&sizeEntry,2,1,fileHandle); +		fread(&numEntry, 2, 1, fileHandle); +		fread(&sizeEntry, 2, 1, fileHandle);  		flipShort(&numEntry);  		flipShort(&sizeEntry); -		buffer = (fileEntry*)mallocAndZero(numEntry*sizeEntry); +		buffer = (fileEntry *) mallocAndZero(numEntry * sizeEntry); -		fread(buffer,numEntry*sizeEntry,1,fileHandle); +		fread(buffer, numEntry * sizeEntry, 1, fileHandle); -		for(j=0;j<numEntry;j++) -		{ +		for (j = 0; j < numEntry; j++) {  			flipLong(&buffer[j].offset);  			flipLong(&buffer[j].size);  			flipLong(&buffer[j].unk2); @@ -470,29 +420,33 @@ int16 readVolCnf(void)  			fseek(fileHandle, buffer[j].offset, SEEK_SET); -			char* bufferLocal; -			bufferLocal = (char*)mallocAndZero(buffer[j].size); +			char *bufferLocal; +			bufferLocal = (char *)mallocAndZero(buffer[j].size); -			fread(bufferLocal,buffer[j].size,1,fileHandle); +			fread(bufferLocal, buffer[j].size, 1, fileHandle);  			char nameBuffer[256]; -			sprintf(nameBuffer,"D%d.dmp/%s",i+1,buffer[j].name); +			sprintf(nameBuffer, "D%d.dmp/%s", i + 1, +			    buffer[j].name); -			if(buffer[j].size == buffer[j].unk2) -			{ -				FILE* fOut = fopen(nameBuffer,"wb+"); -				fwrite(bufferLocal,buffer[j].size,1,fOut); +			if (buffer[j].size == buffer[j].unk2) { +				FILE *fOut = fopen(nameBuffer, "wb+"); +				fwrite(bufferLocal, buffer[j].size, 1, fOut);  				fclose(fOut); -			} -			else -			{ -				char* uncompBuffer = (char*)mallocAndZero(buffer[j].unk2+500); - -				decomp((uint8*)bufferLocal+buffer[j].size-4,(uint8*)uncompBuffer+buffer[j].unk2+500,buffer[j].unk2); - -				FILE* fOut = fopen(nameBuffer,"wb+"); -				fwrite(uncompBuffer+500,buffer[j].unk2,1,fOut); +			} else { +				char *uncompBuffer = +				    (char *)mallocAndZero(buffer[j].unk2 + +				    500); + +				decomp((uint8 *) bufferLocal + buffer[j].size - +				    4, +				    (uint8 *) uncompBuffer + buffer[j].unk2 + +				    500, buffer[j].unk2); + +				FILE *fOut = fopen(nameBuffer, "wb+"); +				fwrite(uncompBuffer + 500, buffer[j].unk2, 1, +				    fOut);  				fclose(fOut);  				//free(uncompBuffer); @@ -505,13 +459,12 @@ int16 readVolCnf(void)  #endif -	return(1); +	return (1);  }  ///////////////////////////:: -void drawMsgString(uint8* string) -{ +void drawMsgString(uint8 *string) {  	//printf("%s\n",string);  } | 
