/* (C) 2003-2007 Willem Jan Hengeveld * Web: http://www.xs4all.nl/~itsme/ * http://wiki.xda-developers.com/ * * $Id: pnewbmp.cpp 1921 2008-07-31 17:08:31Z itsme $ */ #include #include "ItsUtils.h" #include "dllversion.h" #include "debug.h" #include "args.h" #include #include #include #include using namespace std; bool ITFlashROM(DWORD dwOffset, BYTE *buffer, DWORD dwBufLength); bool ReadFromFile(char *filename, DWORD dwOffset, BYTE *buffer, DWORD dwSize); DWORD CalcCheckSum(BYTE *buffer, DWORD dwSize); void usage() { printf("(C) 2003-2008 Willem jan Hengeveld itsme@xs4all.nl\n"); printf("Usage: { -3 | -4 } pnewbmp filename\n"); } int main( int argc, char *argv[]) { DebugStdOut(); char *filename=NULL; DWORD dwBmpOffset= 0; int argsfound=0; for (int i=1 ; idwOffset= dwOffset; req->dwSize= dwBufLength; memcpy(req->buffer, buffer, dwBufLength); req->dwCheckSum= CalcCheckSum(req->buffer, req->dwSize); DWORD outsize=0; FlashROMResult *outbuf=NULL; HRESULT res= ItsutilsInvoke(L"ITFlashROM", insize, (BYTE*)req, &outsize, (BYTE**)&outbuf); if (res || outbuf==NULL) { error(res, "ITFlashROM(%08lx, %08lx)", dwOffset, dwBufLength); return false; } debug("result: %08lx\n", outbuf->dwResult); LocalFree(outbuf); return true; } bool ReadFromFile(char *filename, DWORD dwOffset, BYTE *buffer, DWORD dwSize) { FILE *f= fopen(filename, "rb"); if (f==NULL) { error("fopen(%hs)", filename); return false; } if (0!=fseek(f, dwOffset, SEEK_SET)) { error("fseek(%hs, %08lx)", filename, dwOffset); fclose(f); return false; } if (1!=fread(buffer, dwSize, 1, f)) { error("fread(%hs, %08lx)", filename, dwSize); fclose(f); return false; } fclose(f); return true; } DWORD CalcCheckSum(BYTE *buffer, DWORD dwSize) { DWORD sum= 0; while (dwSize--) sum+=*buffer++; return sum; }