plcsim2016/PLCSim2016/lib/lib.cpp
2016-08-02 00:36:22 +09:00

170 lines
3.4 KiB
C++
Raw Permalink Blame History

#include "lib.h"
/*
* limit :
* 1. can't use this object in heap area
* 2. last character can't be cKEY
* type : int
* argument :
* 1. (sString*) sString array for store data
* 2. int sString array depth
* 3. (char*) Data Buffer to Parse
* 4. int* Buffer Length
* 5. (char) KEY character you want to split
* return :
* -1. not support
* -2. out of array index
* 0. ok
*/
int sSplitToStringArray(sString* sRetArray,
int iArrayDepth,
char* sStringBuffer,
int* iBufferLen,
char cKEY){
int iOccurCount=0;
int i,j,k;
if(sStringBuffer[*iBufferLen] == cKEY)
return -1;
for(i = 0;i < *iBufferLen;i++){
if(sStringBuffer[i] == cKEY)
iOccurCount++;
}
for(i=0,j=0,k=0;i < *iBufferLen;i++){
if(sStringBuffer[i] == cKEY){
j++;
k=0;
if(j > iArrayDepth)
return -2;
}else{
sRetArray[j].m_String[k++] = sStringBuffer[i];
}
}
return 0;
}
/*
* type : int
* argument :
* 1. (char*) Data Buffer to Parse
* 2. int* Buffer Length
* 3. (char*) KEY character you want to find
* 4. int* key length
* 5. int* offset begin from data buffer / first key character occur in buffer
* return :
* 0. success
* -1. failure
*/
int iFindKeyCharacterFromBuffer(char* sDataBuffer,
int* iBufferLength,
char* sKEY,
int* iKEY_Length,
int* iOffset){
/* Check if Job is over Buffer length return immediate */
if((*iOffset + *iKEY_Length) > *iBufferLength)
return -1;
for(int i = *iOffset;i+*iKEY_Length < *iBufferLength;i++){
if(memcmp(&sDataBuffer[i],sKEY,*iKEY_Length) == 0){
*iOffset = i;
return 0;
}
}
return -1;
}
/*
* type : int
* argument :
* 1. (char*) file path want to read
* 2. (BYTE*) buffer pointer for store file
* 3. (int*) buffer size and file size return
* return :
* 0. success
* -1. file read failure
* -2. buffer size not enougth
*/
int iFileR(char* sPath,BYTE* pBUF,int* piSize)
{
struct _stat lfilestat;
int result;
FILE* pFile;
result = _stat( sPath, &lfilestat );
if( result != 0 )
return -1;
if(lfilestat.st_size > *piSize)
return -2;
*piSize = lfilestat.st_size;
pFile = fopen(sPath,"rb");
if(pFile == NULL)
return -1;
result = fread(pBUF,1,*piSize,pFile);
if(result != *piSize)
{
fclose(pFile);
return -1;
}
fclose(pFile);
return 0;
}
/*
* type : int
* argument :
* 1. Windows Handle
* 2. (char*) Title for display
* 3. (char*) buffer for return string
* return :
* 0. failure
* n. buffer length
*/
int GetPathDialog(HWND hWnd,char* sTitle,char *pBuffer)
{
BROWSEINFO bf;
LPITEMIDLIST lpitem;
memset(&bf,0,sizeof BROWSEINFO);
bf.hwndOwner=hWnd;
bf.lpszTitle=sTitle;
bf.ulFlags=BIF_RETURNONLYFSDIRS;
lpitem=SHBrowseForFolder(&bf);
if(lpitem==NULL)
return 0;
SHGetPathFromIDList(lpitem,pBuffer);
return lstrlen(pBuffer);
}
#ifndef LIB_UNIT_TEST
#define LIB_UNIT_TEST
void main(int argc,char** argv)
{
int str_len,offset,keylen,iret;
sString AA[10];
char tt[]="AAA BBB CCC DDD EEE FFF GGG";
str_len = strlen(tt);
iret = sSplitToStringArray(AA,10,tt,&str_len,' ');
char test[]="1234567890AA123";
keylen=2;
str_len= strlen(test);
offset=0;
iret = iFindKeyCharacterFromBuffer(test,&str_len,"AA",&keylen,&offset);
/* iFileR Unit Test */
/*
int size,iRet;
BYTE* pBuffer;
size = 4096000;
pBuffer = new BYTE[size];
//iRet = iFileR("C:\\TWMJ_1032.exe",pBuffer,&size);
GetPathDialog(NULL,"<22><><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD><4F><EFBFBD>ɸ<EFBFBD>?",(char*)pBuffer);
delete pBuffer;
printf("Hello world\r\n");
*/
}
#endif