author | ecalot
<ecalot> 2005-03-23 10:50:27 UTC |
committer | ecalot
<ecalot> 2005-03-23 10:50:27 UTC |
parent | 422674d7d499b15b24dac54dcb8b45fbc2368fef |
PR/src/lib/layers/dat.c | +16 | -23 |
diff --git a/PR/src/lib/layers/dat.c b/PR/src/lib/layers/dat.c index b4a2f57..8c4d109 100644 --- a/PR/src/lib/layers/dat.c +++ b/PR/src/lib/layers/dat.c @@ -34,6 +34,7 @@ dat.c: Princed Resources : DAT library #include <stdio.h> #include <stdlib.h> #include <string.h> +#include "pr.h" #include "disk.h" #include "dat.h" @@ -69,17 +70,8 @@ int mReadBeginDatFile(unsigned short int *numberOfItems,const char* vFiledat){ /* Open file */ readDatFileSize=mLoadFileArray(vFiledat,&readDatFile); - if (!readDatFileSize) - { - fprintf(stderr, "mReadBeginDatFile: %s not found\n", vFiledat); - return 0; - } - if (readDatFileSize<=6) - { - fprintf(stderr, "mReadBeginDatFile: File too short\n"); - free(readDatFile); - return 0; - } + if (!readDatFileSize) return 0; + if (readDatFileSize<=6) {free(readDatFile);return 0;} readDatFilePoint=readDatFile; @@ -89,7 +81,6 @@ int mReadBeginDatFile(unsigned short int *numberOfItems,const char* vFiledat){ indexSize=array2short(readDatFilePoint); if ((indexOffset>readDatFileSize)&&((indexOffset+indexSize)!=readDatFileSize)) { - fprintf(stderr, "mReadBeginDatFile: Invalid format\n"); free(readDatFile); return 0; /* this is not a valid prince dat file */ } @@ -111,14 +102,13 @@ int mReadBeginDatFile(unsigned short int *numberOfItems,const char* vFiledat){ } int mReadFileInDatFile(int k,unsigned char* *data,unsigned long int *size) { - int ok=1; /* TODO: rename mRead* for mRead* and mWrite for mWrite */ + int ok=1; unsigned short int id; /* for each archived file the index is read */ - id=array2short(indexPointer+ofk+k*recordSize); - - offset=array2long(indexPointer+ofk+k*recordSize+2); - *size= array2short(indexPointer+ofk+k*recordSize+6); + id= array2short(indexPointer+ofk+k*recordSize);/*(indexPointer[ofk+k*recordSize])+(indexPointer[ofk+k*recordSize+1]<<8);*/ + offset=array2long(indexPointer+ofk+k*recordSize+2);/*indexPointer[ofk+k*recordSize+2])+(indexPointer[ofk+k*recordSize+3]<<8)+(indexPointer[ofk+k*recordSize+4]<<16)+(indexPointer[ofk+k*recordSize+5]<<24);*/ + *size= array2short(indexPointer+ofk+k*recordSize+6)+1;/*indexPointer[ofk+k*recordSize+6])+(indexPointer[ofk+k*recordSize+7]<<8)+1;*/ if ((!pop1)&&(!(indexPointer[ofk+k*recordSize+8]==0x40)&&(!indexPointer[ofk+k*recordSize+9])&&(!indexPointer[ofk+k*recordSize+10]))) return -1; if (offset+indexSize>readDatFileSize) return -1; *data=readDatFile+offset; @@ -136,10 +126,10 @@ int mReadInitResource(tResource** res,const unsigned char* data,long size) { (*res)->palette=0; (*res)->number=0; (*res)->size=(unsigned short int)size; - (*res)->offset=(unsigned short)offset; /* TODO delete this line */ - /* (*res)->type=verifyHeader(data,(unsigned short int)size); */ + /* (*res)->offset=(unsigned short)offset; TODO delete this line */ + (*res)->type=verifyHeader(data,(unsigned short int)size); } else { /* If resource type is invalid or 0, the type will be decided by PR */ - if (!((*res)->type)) (*res)->type=0; /*verifyHeader(data,(unsigned short int)size);*/ + if (!((*res)->type)) (*res)->type=verifyHeader(data,(unsigned short int)size); } return 0; } @@ -162,8 +152,11 @@ int mWriteBeginDatFile(const char* vFile, int optionflag) { 0 File couldn't be open */ - if (writeOpen(vFile,&writeDatFile,optionflag)) { - fseek(writeDatFile,6,SEEK_SET); + if (writeOpen(vFile,&writeDatFile,optionflag|backup_flag)) { + short fill=0; + fwriteshort(&fill,writeDatFile); /* Fill the file with 6 starting null bytes */ + fwriteshort(&fill,writeDatFile); /* Fill the file with 6 starting null bytes */ + fwriteshort(&fill,writeDatFile); /* Fill the file with 6 starting null bytes */ return 1; } else { return 0; @@ -184,7 +177,7 @@ void mWriteInitResource(tResource** res) { void mWriteFileInDatFile(const unsigned char* data, int size) { /* Adds a data resource to a dat file keeping - abstractly the checksum ver ifications + abstractly the checksum verifications */ /* Declare variables */