#include "common.h" void GetResourceData(char *FileName){ extern HANDLE hHeap; extern char BasicCurDir[MAX_PATH]; int i2,i3; char *buffer,temporary[MAX_PATH],temp2[MAX_PATH]; HANDLE hFile; DWORD dwId; extern RESOURCEDATAINFO *pCursorResourceInfo; extern int CursorResourceNum; extern RESOURCEDATAINFO *pBitmapResourceInfo; extern int BitmapResourceNum; extern RESOURCEDATAINFO *pIconResourceInfo; extern int IconResourceNum; pCursorResourceInfo=(RESOURCEDATAINFO *)HeapAlloc(hHeap,0,1); CursorResourceNum=0; pBitmapResourceInfo=(RESOURCEDATAINFO *)HeapAlloc(hHeap,0,1); BitmapResourceNum=0; pIconResourceInfo=(RESOURCEDATAINFO *)HeapAlloc(hHeap,0,1); IconResourceNum=0; extern char szManifestPath[MAX_PATH]; extern int XPManiResourceNum; szManifestPath[0]=0; XPManiResourceNum=0; hFile=CreateFile(FileName,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if(hFile==INVALID_HANDLE_VALUE) return; i2=GetFileSize(hFile,NULL); buffer=(char *)HeapAlloc(hHeap,0,i2+i2); ReadFile(hFile,buffer,i2,(DWORD *)&i3,NULL); CloseHandle(hFile); buffer[i3]=0; ChangeReturnCode(buffer); i2=0; while(1){ //ID while(buffer[i2]==' '||buffer[i2]=='\t') i2++; for(i3=0;;i2++,i3++){ if(!IsVariableChar(buffer[i2])){ temporary[i3]=0; break; } temporary[i3]=buffer[i2]; } if(temporary[0]=='\0') break; _int64 i64data; Type resultType; if( !StaticCalculation(true, temporary,0,&i64data,resultType) ){ return; } if(resultType.IsReal()){ SetError(9,temporary,0); return; } dwId=(DWORD)i64data; //Type while(buffer[i2]==' '||buffer[i2]=='\t') i2++; for(i3=0;;i2++,i3++){ if(!IsVariableChar(buffer[i2])){ temporary[i3]=0; break; } temporary[i3]=buffer[i2]; } //FileName while(buffer[i2]==' '||buffer[i2]=='\t') i2++; if(buffer[i2]!='\"'){ //G[ return; } for(i2++,i3=0;;i2++,i3++){ if(buffer[i2]=='\"'){ temp2[i3]=0; break; } temp2[i3]=buffer[i2]; } GetFullPath(temp2,BasicCurDir); if(lstrcmpi(temporary,"CURSOR")==0){ pCursorResourceInfo=(RESOURCEDATAINFO *)HeapReAlloc(hHeap,0,pCursorResourceInfo,(CursorResourceNum+1)*sizeof(RESOURCEDATAINFO)); pCursorResourceInfo[CursorResourceNum].dwId=dwId; lstrcpy(pCursorResourceInfo[CursorResourceNum].FileName,temp2); CursorResourceNum++; } else if(lstrcmpi(temporary,"BITMAP")==0){ pBitmapResourceInfo=(RESOURCEDATAINFO *)HeapReAlloc(hHeap,0,pBitmapResourceInfo,(BitmapResourceNum+1)*sizeof(RESOURCEDATAINFO)); pBitmapResourceInfo[BitmapResourceNum].dwId=dwId; lstrcpy(pBitmapResourceInfo[BitmapResourceNum].FileName,temp2); BitmapResourceNum++; } else if(lstrcmpi(temporary,"ICON")==0){ pIconResourceInfo=(RESOURCEDATAINFO *)HeapReAlloc(hHeap,0,pIconResourceInfo,(IconResourceNum+1)*sizeof(RESOURCEDATAINFO)); pIconResourceInfo[IconResourceNum].dwId=dwId; lstrcpy(pIconResourceInfo[IconResourceNum].FileName,temp2); IconResourceNum++; } else if(lstrcmpi(temporary,"RT_MANIFEST")==0){ if(XPManiResourceNum) goto error; lstrcpy(szManifestPath,temp2); XPManiResourceNum++; } else{ error: SetError(17,NULL,0); return; } i2++; while(buffer[i2]==' '||buffer[i2]=='\t') i2++; if(buffer[i2]=='\0') break; else if(buffer[i2]!='\n'){ SetError(17,NULL,0); return; } i2++; } HeapDefaultFree(buffer); }