ioex.c

Go to the documentation of this file.

/* By Peter O., Public domain */

#include "ioex.h"

DWORD XRead(LPVOID file, IOSTRUCT *ios, DWORD offset, LPVOID b, DWORD sz){
 DWORD oldpos=ios->SeekFile(file,0,FILE_CURRENT);
 DWORD ret;
 ios->SeekFile(file,offset,FILE_BEGIN);
 ret=ios->ReadFile(file,b,sz);
 ios->SeekFile(file,oldpos,FILE_BEGIN);
 return ret;
}
DWORD XWrite(LPVOID file, IOSTRUCT *ios, DWORD offset, LPVOID b, DWORD sz){
 DWORD oldpos=ios->SeekFile(file,0,FILE_CURRENT);
 DWORD ret;
 ios->SeekFile(file,offset,FILE_BEGIN);
 ret=ios->WriteFile(file,b,sz);
 ios->SeekFile(file,oldpos,FILE_BEGIN);
 return ret;
}

DWORD ReadEndian(
  LPVOID file,
  IOSTRUCT *ios,
  DWORD offset,
  DWORD sz,
  BOOL big,
  BOOL xread,
  DWORD *psz
){
 DWORD sizeRead=0;
 BYTE buffer[4];
 DWORD ret=0;
 LONG i;
 if(sz<=4 && sz>0){
  ZeroMemory(buffer,4);
  if(xread){
   sizeRead=XRead(file,ios,offset,buffer,sz);
  } else {
   sizeRead=ios->ReadFile(file,buffer,sz);
  }
  if(big){
   for(i=0;i<sz;i++){
    ret<<=8;
    ret|=buffer[i];
   } 
  } else {
   for(i=sz-1;i>=0;i--){
    ret<<=8;
    ret|=buffer[i];
   } 
  }
 }
 if(psz)*psz=sizeRead;
 return ret;
}
DWORD WriteEndian(
  LPVOID file,
  IOSTRUCT *ios,
  DWORD offset,
  DWORD x,
  DWORD sz,
  BOOL big,
  BOOL xwrite
){
 DWORD sizeWrite=0;
 BYTE buffer[4];
 LONG i;
 if(sz<=4 && sz>0){
  ZeroMemory(buffer,4);
  if(big){
   for(i=sz-1;i>=0;i--){
    buffer[i]=x&0xFF;
    x>>=8;
   } 
  } else {
   for(i=0;i<sz;i++){
    buffer[i]=x&0xFF;
    x>>=8;
   }
  }
  if(xwrite){
   sizeWrite=XWrite(file,ios,offset,buffer,sz);
  } else {
   sizeWrite=ios->WriteFile(file,buffer,sz);
  }
 }
 return sizeWrite;
}
LONG ReadEndianSigned(
  LPVOID file,
  IOSTRUCT *ios,
  DWORD offset,
  DWORD sz,
  BOOL big,
  BOOL xread,
  DWORD *psz
){
 DWORD ret=ReadEndian(file,ios,offset,sz,big,xread,psz);
 if(sz<=4 && sz>0){
  DWORD extend[]={0,0xFFFFFF00,0xFFFF0000,0xFF000000,0};
  DWORD sign[]={0,0x80,0x8000,0x800000,0x80000000};
  if(ret&sign[sz])ret|=extend[sz];
 }
 return (LONG)ret;
}

Generated on Thu Mar 27 01:46:52 2008 for Item Arrays by  doxygen 1.4.6-NO