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

📄 bbc888.c

📁 linux嵌入式开发程序
💻 C
字号:

/*===========================================================================
        2D Graphics Library
        ALL RIGHTS RESERVED, COPYRIGHT (C) FUJITSU LIMITED 1993-2002
        LICENSED MATERIAL - PROGRAM PROPERTY OF FUJITSU LIMITED
 ===========================================================================*/
#include "gl.h"#include "defhook.h"#define BitLen  24#define PTR(b,o) (Acc *)(  (char *)(b)+(o)   )int_GL_bbcopyRGB888(GL_WP *gp){    long    soffs,doffs ;    Acc     dmask_head, dmask_tail ;    int     sbitp,dbitp,lines,words ;    int     slbytes, dlbytes ;    slbytes = gp->bitblt.slbytes ;    dlbytes = gp->bitblt.dlbytes ;    if(gp->bitblt.ty<0){        slbytes = -slbytes ;        dlbytes = -dlbytes ;    }    if(gp->bitblt.tx<0){        Acc *basep = gp->hwork.VRAMadr[gp->bitblt.spage][0] ;        soffs = gp->bitblt.soffs ;        sbitp = gp->bitblt.sbitp + BitLen -1 ;        doffs = gp->bitblt.doffs ;        dbitp = gp->bitblt.dbitp + BitLen -1 ;        lines = Abs(gp->bitblt.ty) ;        AdjAccOffs(soffs,sbitp) ;        AdjAccOffs(doffs,dbitp) ;        dmask_head = (Acc)-1 ;        if(dbitp<31)            dmask_head = ~(dmask_head>>(dbitp+1)) ;        words      = (-gp->bitblt.tx*BitLen) + (DBits-(dbitp+1)) ;        dmask_tail = ~((Acc)-1L>>((-words)&DMask)) ;        words    >>= DShift ;        if(words==0){            dmask_head &= ~dmask_tail ;            dmask_tail  = 0 ;        } else            words-- ;        while(lines--){            register Acc    *dst ;            int             n ;            dst = _AddAdrHigh(gp->hwork.VRAMadr[gp->hwork.page][0],doffs) ;            n   = dbitp-sbitp ;            if(n){                register long   src ;                register long   count ;                register Acc    d, o ;                int             un ;                src  = soffs ;                d    = *PTR(basep,src) ;                src -= AccLen ;                o    = 0 ;                if(n<0){                    un   = -n ;                    *dst = *dst & ~dmask_head | (d<<un) & dmask_head ;                    n   += DBits ;                } else {                    un   = DBits - n ;                    if(src>=0){                        o = *PTR(basep,src) ;                        src -= AccLen ;                    }                    *dst = *dst & ~dmask_head | ((d>>n)|(o<<un)) & dmask_head ;                    d = o ;                }                dst-- ;                count = words ;                while(count--){                    if(src>=0){                        o = *PTR(basep,src) ;                        src -= AccLen ;                    }                    *dst = (d>>n)|(o<<un) ;                    dst-- ;                    d = o ;                    o = 0 ;                }                if(dmask_tail){                    if(src>=0)                        o = *PTR(basep,src) ;                    *dst = *dst & dmask_tail | ((d>>n)|(o<<un)) &~dmask_tail ;                }                soffs += slbytes ;                doffs += dlbytes ;            } else {                register Acc    *src ;                register long   count ;                src  = PTR(basep, soffs) ;                *dst = *dst & ~dmask_head | *src & dmask_head ;                src-- ;                dst-- ;                count = words ;                while(count--)                    *dst-- = *src-- ;                if(dmask_tail){                    *dst = *dst & dmask_tail | *src &~dmask_tail ;                }                soffs += slbytes ;                doffs += dlbytes ;            }        }    } else {        soffs = gp->bitblt.soffs ;        sbitp = gp->bitblt.sbitp ;        doffs = gp->bitblt.doffs ;        dbitp = gp->bitblt.dbitp ;        lines = Abs(gp->bitblt.ty) ;        AdjAccOffs(soffs, sbitp) ;        AdjAccOffs(doffs, dbitp) ;        dmask_head = (Acc)-1L>>dbitp ;        words      = (gp->bitblt.tx*BitLen) + dbitp ;        dmask_tail = ~((Acc)-1L>>(words&DMask)) ;        words >>= DShift ;        if(words==0){            dmask_head &= dmask_tail ;            dmask_tail = 0 ;        } else            words-- ;        while(lines--){            register Acc    *src ;            register Acc    *dst ;            register long   count ;            int     n ;            src = _AddAdr(gp->hwork.VRAMadr[gp->bitblt.spage][0], soffs) ;            dst = _AddAdr(gp->hwork.VRAMadr[gp->hwork.page  ][0], doffs) ;            n   = sbitp-dbitp ;            if(n){                register Acc    d, o ;                register int    un ;                d = *src++ ;                if(n<0){                    un   = -n ;                    *dst = *dst & ~dmask_head | (d>>un) & dmask_head ;                    n   += DBits ;                } else {                    un   = DBits - n ;                    o    = *src++ ;                    *dst = *dst & ~dmask_head | ((d<<n)|(o>>un)) & dmask_head ;                    d    = o ;                }                dst++ ;                count = words ;                while(count--){                    o = *src++ ;                    *dst++ = (d<<n)|(o>>un) ;                    d = o ;                }                if(dmask_tail){                    o = *src ;                    *dst = *dst & ~dmask_tail| ((d<<n)|(o>>un)) & dmask_tail ;                }                soffs += slbytes ;                doffs += dlbytes ;            } else {                *dst = *dst & ~dmask_head | *src & dmask_head ;                src++ ;                dst++ ;                count = words ;                while(count--)                    *dst++ = *src++ ;                if(dmask_tail){                    *dst = *dst & ~dmask_tail | *src & dmask_tail ;                }                soffs += slbytes ;                doffs += dlbytes ;            }        }    }    return GL_Ok ;}

⌨️ 快捷键说明

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