/* (C) 2003-2007 Willem Jan Hengeveld * Web: http://www.xs4all.nl/~itsme/ * http://wiki.xda-developers.com/ * * $Id: $ * * this program allows you to list / add / delete contacts * from your windows ce device * */ #define EDB 1 #ifdef EDB #define CEVT_STREAM (100) #define CEVT_RECID (101) #define CEVT_AUTO_I4 (102) #define CEVT_AUTO_I8 (103) #endif #include #include "ItsUtils.h" #include "dllversion.h" #include #include "debug.h" #include "stringutils.h" #include "args.h" #include #include #include "ptrutils.h" #include "PoomInterface.h" #include "PoomRecordManager.h" const FieldInfo gfi; bool g_verbose= false; bool IT_POOM_FindRecords(const ByteVector& query, DwordVector& oidlist); bool IT_POOM_AddRecord(const ByteVector & rec, DWORD *poid); bool IT_POOM_GetRecord(DWORD oid, ByteVector& rec); void usage() { printf("(C) 2003-2008 Willem jan Hengeveld itsme@xs4all.nl\n"); printf("Usage: pcontacts [options]\n"); printf(" -a name=m:mobilenr,h:homenr,a:addr,...\n"); printf(" adds a new record\n"); printf(" -d dumps all records\n"); printf(" -s [name|number] searches for record\n"); } int main( int argc, char *argv[]) { StringList addrecs; std::string searchquery; bool bDumpAll= false; DebugStdOut(); int argsfound=0; for (int i=1 ; idata[rec.size()])); inbuf= (AddRecordParams *)RapiAlloc(insize); inbuf->dwDatabase= POOM_CONTACTS; memcpy(inbuf->data, vectorptr(rec), rec.size()); outbuf= NULL; outsize= 0; HRESULT res= ItsutilsInvoke("IT_POOM_AddRecord", insize, (BYTE*)inbuf, &outsize, (BYTE**)&outbuf); if (res || outbuf==NULL) { error(res, "IT_POOM_AddRecord"); return false; } *poid= outbuf->oid; RapiFree(outbuf); return true; } bool IT_POOM_GetRecord(DWORD oid, ByteVector& rec) { GetRecordParams inbuf; DWORD outsize=0; GetRecordResult *outbuf=NULL; inbuf.dwDatabase= POOM_CONTACTS; inbuf.oid= oid; outbuf= NULL; outsize= 0; HRESULT res= ItsutilsInvoke("IT_POOM_GetRecord", sizeof(GetRecordParams), (BYTE*)&inbuf, &outsize, (BYTE**)&outbuf); if (res || outbuf==NULL) { error(res, "IT_POOM_GetRecord"); return false; } rec.resize(outsize); memcpy(vectorptr(rec), &outbuf->data, outsize); RapiFree(outbuf); return true; } bool IT_POOM_FindRecords(const ByteVector& query, DwordVector& oidlist) { FindRecordsParams *inbuf=NULL; DWORD outsize=0; FindRecordsResult *outbuf=NULL; DWORD insize= PTR_DIFF(inbuf, &(inbuf->query[query.size()])); inbuf= (FindRecordsParams *)RapiAlloc(insize); inbuf->dwDatabase= POOM_CONTACTS; memcpy(inbuf->query, vectorptr(query), query.size()); outbuf= NULL; outsize= 0; HRESULT res= ItsutilsInvoke("IT_POOM_FindRecords", insize, (BYTE*)inbuf, &outsize, (BYTE**)&outbuf); if (res) { error(res, "IT_POOM_FindRecords->%08lx", outbuf); return false; } oidlist.resize(outsize/sizeof(DWORD)); if (outbuf) { memcpy(vectorptr(oidlist), &outbuf->list, outsize); RapiFree(outbuf); } else if (outsize) { debug("ERROR: outbuf==NULL, outsize=%d\n", outsize); } return true; }