#ifndef __IMGFILE_H__
#define __IMGFILE_H__

// This is a little helper class for writing things to temporary files
// and giving them the correct name after the save suceeds...
//
class CFileSaver
    {
    public:

     CFileSaver(const TCHAR* szFileName); // setup and create temp names
    ~CFileSaver();                       // make sure temp files are gone

    BOOL CanSave() const;               // checks for R/O
    const TCHAR* GetSafeName() const     // return name of file to create
                                    { return m_strTempName; }
    const TCHAR* GetRealName() const     // return name of final file
                                    { return m_strName; }
    BOOL Finish();                      // rename new file as original

    private:

    CString m_strName;
    CString m_strBackupName;
    CString m_strTempName;

    static const TCHAR BASED_CODE c_szAps [];
    };

struct ICONFILEHEADER
    {
    WORD icoReserved;
    WORD icoResourceType;
    WORD icoResourceCount;
    };


struct ICONDIRENTRY
    {
    BYTE nWidth;
    BYTE nHeight;
    BYTE nColorCount;
    BYTE bReserved;
    WORD wReserved1;
    WORD wReserved2;
    DWORD icoDIBSize;
    DWORD icoDIBOffset;
    };

struct CURSORFILEHEADER
    {
    WORD curReserved;
    WORD curResourceType;
    WORD curResourceCount;
    };


struct CURSORDIRENTRY
    {
    BYTE nWidth;
    BYTE nHeight;
    WORD wReserved;
    WORD curXHotspot;
    WORD curYHotspot;
    DWORD curDIBSize;
    DWORD curDIBOffset;
    };



extern int MkPath(TCHAR *szPath);
extern void MkFullPath(CString& strFullPath, const CString& strRelPath,
    BOOL bPathOnly = FALSE);
extern BOOL OpenSubFile(CFile& file, const CFileSaver& saver, UINT nOpenFlags,
    CFileException* pError = NULL);



/////////////////////////////////////////////////////////////////////////

#endif // __IMGFILE_H__