/* File: D:\WACKER\tdll\load_res.c (Created: 16-Dec-1993) * * Copyright 1994 by Hilgraeve Inc. -- Monroe, MI * All rights reserved * * $Revision: 7 $ * $Date: 4/12/02 4:59p $ */ #include #pragma hdrstop #include "stdtyp.h" #include "session.h" #include "assert.h" #include "tdll.h" #include "htchar.h" #include "load_res.h" #if defined(DEADWOOD) /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= * FUNCTION: * resLoadDataBlock * * DESCRIPTION: * This function is used to get a block of data stored in the resource file * as an RCDATA item. Note that in WIN32, it is not necessary to free the * resource after it has been locked. * * PARAMETERS: * hSession -- the session handle * pszName -- the id for the data block * ppData -- where to put the pointer to the data block * pSize -- addres of integer for size value * * RETURNS: 0 if successful, otherwise a defined error value. * * The size of the resource that has been loaded (in bytes). * NOTE: The return value may be (and often is) larger than the actual * size of the resource as it is defined in the rc file. For resources * of type RCDATA, the resource definition itself should include either a * delimiter, or a count of the number of items included in that resource. * See also RCDATA_TYPE in stdtype.h */ INT_PTR resLoadDataBlock(const HINSTANCE hInst, const int id, const void **ppData, DWORD *pSize) { HGLOBAL hG = NULL; HRSRC hR = NULL; LPVOID pV = NULL; DWORD nSize = 0; if(pSize) { *pSize = nSize; } hR = FindResource(hInst, MAKEINTRESOURCE(id), (LPCTSTR)RT_RCDATA); if (hR == NULL) { assert(FALSE); return LDR_BAD_ID; } hG = LoadResource(hInst, hR); if (hG == NULL) { assert(FALSE); return LDR_NO_RES; } nSize = SizeofResource(hInst, hR); if (nSize == 0) { assert(FALSE); return LDR_NO_RES; } if(pSize) { *pSize = nSize; } pV = LockResource(hG); if (pV == 0) { assert(FALSE); return LDR_NO_RES; } if (ppData == NULL) { assert(FALSE); return LDR_BAD_PTR; } *ppData = pV; return 0; } /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= * FUNCTION: * resFreeDataBlock * * DESCRIPTION: * This function is not necessary for WIN32. * * PARAMETERS: * hSession -- the session handle * pData -- pointer to the data block * * RETURNS: * ZERO if everything is OK, otherwise an error code. */ INT_PTR resFreeDataBlock(const HSESSION hSession, const void *pData) { return 0; } #endif // defined(DEADWOOD) /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= * FUNCTION: * resLoadFileMask * * DESCRIPTION: * This function is used to get around a problem that exists in loading * strings into the common file dialogs. The file name masks are two strings * that are NULL separated. This internal NULL is not treated with any * respect by the resource functions, so we split them up and do a two part * load to rebuild the string. * * PARAMETERS: * hInst -- the instance handle to use * uId -- the ID of the first resource to load * nCount -- the number of string PAIRS to load, starting a uId * pszBuffer -- where to put the strings * nSize -- the size of the buffer in characters * * RETURNS: * Zero if everything is OK, otherwise (-1) */ INT_PTR resLoadFileMask(HINSTANCE hInst, UINT uId, int nCount, LPTSTR pszBuffer, int nSize) { int i; LPTSTR pszEnd; LPTSTR pszPtr; if (pszBuffer == 0 || nSize == 0) { assert(0); return -1; } TCHAR_Fill(pszBuffer, TEXT('\0'), nSize); pszPtr = pszBuffer; pszEnd = pszBuffer + nSize; for (nCount *= 2 ; nCount > 0 ; --nCount) { i = LoadString(hInst, uId++, pszPtr, (int)(pszEnd - pszPtr - 1)); pszPtr += (unsigned)i + sizeof(TCHAR); if (pszPtr >= pszEnd) { assert(0); return -1; } } return 0; }