⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iesave.c

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
    MemFree (img_file);
    MemFree (imginfo);

    AllowRestoreOption( node );
    SetIsSaved( node->hwnd, TRUE );

    return( TRUE );
} /* saveImgToData */

static BOOL CreateNewImageLNODE( img_node *node, uint_16 type )
{
    char                fn[_MAX_FNAME];
    WResID              *tname;
    WResID              *rname;
    WResLangType        lang;
    int                 dup;
    BOOL                ok;

    lang.lang = DEF_LANG;
    lang.sublang = DEF_SUBLANG;
    ok = ( node && node->wrinfo );

    if( ok ) {
        if( node->wrinfo->dir == NULL ) {
            node->wrinfo->dir = WResInitDir();
            ok = ( node->wrinfo->dir != NULL );
        }
    }

    if( ok ) {
        tname = WResIDFromNum( type );
        ok = ( tname != NULL );
    }

    if( ok ) {
        _splitpath( node->fname, NULL, NULL, fn, NULL );
        rname = WResIDFromStr( fn );
        ok = ( rname != NULL );
    }

    if( ok ) {
        ok = !WResAddResource( tname, rname, DEF_MEMFLAGS, 0, 0,
                               node->wrinfo->dir, &lang, &dup ) && !dup;
    }

    if( ok ) {
        node->lnode = WRFindLangNode( node->wrinfo->dir, tname, rname, &lang );
        ok = ( node->lnode != NULL );
    }

    if( tname != NULL ) {
        MemFree( tname );
    }

    if( rname != NULL ) {
        MemFree( rname );
    }

    return( ok );
}

static BOOL SaveResourceFile( img_node *node )
{
    BYTE        *data;
    uint_32     size;
    uint_16     type;
    WRFileType  save_type;
    BOOL        info_created;
    BOOL        was32bit;
    BOOL        is32bit;
    BOOL        ok;
    WPI_PROC    cb;

    info_created = FALSE;
    data = NULL;
    type = 0;
    ok = ( node != NULL );

    if( ok ) {
        switch( node->imgtype ) {
            case BITMAP_IMG:
                type = (uint_16)RT_BITMAP;
                break;
            case ICON_IMG:
                type = (uint_16)RT_GROUP_ICON;
                break;
            case CURSOR_IMG:
                type = (uint_16)RT_GROUP_CURSOR;
                break;
            default:
                ok = FALSE;
        }
    }

    if( ok ) {
        if( node->wrinfo == NULL ) {
            node->wrinfo = WRAllocWRInfo();
            info_created = TRUE;
            ok = ( node->wrinfo != NULL );
        }
    }

    if( ok ) {
        if( info_created ) {
            ok = CreateNewImageLNODE( node, type );
        }
        ok = ( ok && ( node->lnode != NULL ) );
    }

    if( ok ) {
        was32bit = WRIs32Bit( node->wrinfo->file_type );
        while( TRUE ) {
            cb = _wpi_makeprocinstance( (WPI_PROC)IEHelpCallBack, Instance );
            save_type = WRSelectFileType( HMainWindow, node->fname, was32bit, TRUE, cb );
            _wpi_freeprocinstance( cb );
            is32bit = WRIs32Bit( save_type );
            if( was32bit ) {
                if( is32bit ) {
                    break;
                } else {
                    IEDisplayErrorMsg( WIE_SAVEIMAGETITLE2, WIE_NOSAVE32TO16,
                                       MB_ICONSTOP | MB_OK );
                }
            } else {
                if( is32bit ) {
                    IEDisplayErrorMsg( WIE_SAVEIMAGETITLE2, WIE_NOSAVE16TO32,
                                       MB_ICONSTOP | MB_OK );
                } else {
                    break;
                }
            }
        }
        ok = ( save_type != WR_DONT_KNOW );
    }

    // get rid of the old image resources for icons or cursors
    if( ok ) {
        if( type != (uint_16)RT_BITMAP ) {
            ok = WRDeleteGroupImages( node->wrinfo, node->lnode, type );
        }
    }

    if( ok ) {
        // delete the data image of the resource
        if( node->lnode->data != NULL ) {
            MemFree( node->lnode->data );
            node->lnode->data = NULL;
        }
        // create the data for this resource
        switch( node->imgtype ) {
            case BITMAP_IMG:
                ok = saveBitmapToData( node, &data, &size );
                break;
            case ICON_IMG:
            case CURSOR_IMG:
                ok = saveImgToData( node, &data, &size );
                break;
            default:
                ok = FALSE;
        }
    }

    // massage and add the data back into the resource
    if( ok ) {
        switch( node->imgtype ) {
            case BITMAP_IMG:
                ok = WRStripBitmapFileHeader( &data, &size );
                if( ok ) {
                    node->lnode->data = data;
                    node->lnode->Info.Length = size;
                }
                break;
            case ICON_IMG:
                ok = WRCreateIconEntries( node->wrinfo, node->lnode,
                                          data, size );
                break;
            case CURSOR_IMG:
                ok = WRCreateCursorEntries( node->wrinfo, node->lnode,
                                            data, size );
                break;
            default:
                ok = FALSE;
        }
    }

    if( ok ) {
        node->wrinfo->save_type = save_type;
        node->wrinfo->save_name = node->fname;
        ok = WRSaveResource( node->wrinfo, TRUE );
        node->wrinfo->save_name = NULL;
    }

    if( ok ) {
        AllowRestoreOption( node );
        SetIsSaved( node->hwnd, TRUE );
        PrintHintTextByID( WIE_IMAGESAVEDTO, node->fname );
    }

    if( type != (uint_16)RT_BITMAP ) {
        if( data ) {
            MemFree( data );
        }
    }

    return( ok );
}

/*
 * SaveFileFromNode - Saves the image file (bitmap, cursor or icon).
 */
BOOL SaveFileFromNode( img_node *node, short how )
{
    img_node    *rootnode;
    char        new_name[ _MAX_PATH ];
    char        ext[ _MAX_EXT ];

    if (!node) return(FALSE);
    rootnode = GetImageNode( node->hwnd );

    if( !rootnode ) return( FALSE );

    if( strnicmp( rootnode->fname, IEImageUntitled, strlen( IEImageUntitled ) ) == 0 ) {
        how = SB_SAVE_AS;
    }

    if( how == SB_SAVE_AS ) {
        if( !getSaveFName( new_name, rootnode->imgtype ) ) {
            return( FALSE );
        }
        node = rootnode;
        while( node ) {
            strcpy( node->fname, new_name );
            node = node->nexticon;
        }
    }

    checkForExt( rootnode );

    _splitpath( rootnode->fname, NULL, NULL, NULL, ext );
    if( !stricmp(ext, ".res") || !stricmp(ext, ".exe") ||
        !stricmp(ext, ".dll") ) {
        return( SaveResourceFile( rootnode ) );
    }

    switch( rootnode->imgtype ) {
    case BITMAP_IMG:
        if (!saveBitmapFile( rootnode )) {
            return(FALSE);
        }
        break;

    case ICON_IMG:
    case CURSOR_IMG:
        if (!saveImgFile( rootnode )) {
            return(FALSE);
        }
        break;

    default:
        return (FALSE);
    }
    return(TRUE);
} /* SaveFileFromNode */

/*
 * SaveFile - Saves the image file (bitmap, cursor or icon).
 */
BOOL SaveFile( short how )
{
    img_node    *node;

    node = GetCurrentNode();

    return( SaveFileFromNode( node, how ) );
} /* SaveFile */

/*
 * getSavePalName - Get the name of the palette file to be saved.
 */
static BOOL getSavePalName( char *fname )
{
    static OPENFILENAME of;
    char                szFileTitle[_MAX_PATH];
    int                 rc;
    long of_size;

    of_size = sizeof( OPENFILENAME );
#if defined (__NT__) && (WINVER >= 0x0500) && (_WIN32_WINNT >= 0x0500)
    {
        OSVERSIONINFO os_info;
        os_info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
        GetVersionEx(os_info);
        if ( os_info.dwMajorVersion < 5 ) {
            of_size = OPENFILENAME_SIZE_VERSION_400;
            /* WIN32 major version < 5 detected     */
            /* See OPENFILENAME doc on www.msdn.com */
            /* Added as future proofing...          */
        }
    }
#endif

    fname[ 0 ] = 0;
    memset( &of, 0, of_size);
    of.lStructSize = of_size;
    of.hwndOwner = HMainWindow;
    of.lpstrFilter = (LPSTR)IEPaletteFilter;
    of.nFilterIndex = 0L;
    of.lpstrFile = fname;
    of.nMaxFile = _MAX_PATH;
    of.lpstrFileTitle = szFileTitle;
    of.nMaxFileTitle = sizeof(szFileTitle);
    of.lpstrTitle = IESavePaletteTitle;
    of.lpstrInitialDir = initialDir;
    of.Flags = OFN_SHOWHELP | OFN_OVERWRITEPROMPT;
#if !defined(__NT__) 
    of.Flags |= OFN_ENABLEHOOK;
    of.lpfnHook = (LPVOID) MakeProcInstance( (LPVOID) SaveHook, Instance );
#endif
    rc = GetSaveFileName( &of );
    #ifndef __NT__
    FreeProcInstance( (LPVOID) of.lpfnHook );
    #endif
    return( rc );

} /* getSavePalName */

/*
 * SaveColourPalette - saves the current colour palette.
 */
BOOL SaveColourPalette( void )
{
    a_pal_file          pal_file;
    FILE                *fp;
    char                fname[ _MAX_PATH ];
    char                filename[ _MAX_FNAME + _MAX_EXT ];

    if ( !GetPaletteFile(&pal_file) ) {
        WImgEditError( WIE_ERR_PALETTE_NOT16, NULL );
        return(TRUE);                   // Just return ... no error
    }

    if ( !getSavePalName(fname) ) {
        return( FALSE );
    }
    checkForPalExt(fname);

    GetFnameFromPath( fname, filename );
    fp = fopen( fname, "wb" );
    if (fp == NULL) {
        WImgEditError( WIE_ERR_SAVE_FAIL, filename );
        return(FALSE);
    }

    if (fseek( fp, 0L, SEEK_SET )) {
        WImgEditError( WIE_ERR_SAVE_FAIL, filename );
        return(FALSE);
    }

    if ( fwrite(&pal_file, sizeof(a_pal_file), 1, fp) != 1 ) {
        WImgEditError( WIE_ERR_SAVE_FAIL, filename );
        return(FALSE);
    }

    fclose( fp );
    PrintHintTextByID( WIE_PALETTESAVEDTO, filename );
    return(TRUE);

} /* SaveColourPalette */

/*
 * SetInitialSaveDir - sets the initial directory for the open filename
 */
void SetInitialSaveDir( char *new_dir )
{
    if (new_dir) {
        strcpy( initialDir, new_dir );
    } else {
        strcpy( initialDir, "" );
    }
} /* SetInitialSaveDir */

/*
 * GetInitSaveDir - gets the directory which we want to use as our initial one
 *              next time we run.
 */
char *GetInitSaveDir( void )
{
    return(initialDir);
} /* GetInitSaveDir */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -