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

📄 fblinear24.cpp

📁 linux文本方式下的外挂中文环境,很好用,有源码.功能很全.我都用它
💻 CPP
字号:
// vi:ts=4:shiftwidth=4:expandtab/***************************************************************************                          fblinear24.cpp  -  description                             -------------------    begin                : Fri July 20 2001    copyright            : (C) 2001 by ejoy, huyong    email                : ejoy@users.sourceforge.net                           ccpaging@online.sh.cn ***************************************************************************//*************************************************************************** *                                                                         * *   This program is free software; you can redistribute it and/or modify  * *   it under the terms of the GNU General Public License as published by  * *   the Free Software Foundation; either version 2 of the License, or     * *   (at your option) any later version.                                   * *                                                                         * ***************************************************************************/#include <assert.h>#include "global.h"#include "debug.h"#include "fblinear24.h"FBLinear24::FBLinear24() {    InitColorMap();    mNextLine = mNextLine ? mNextLine : mXres*3;}void FBLinear24::InitColorMap() {    int i;    __u32 red, green, blue;    for(i = 0; i < 16; i++) {        red = red16[i];        green = green16[i];        blue = blue16[i];        cfb24[i] = ((red  & 0xff00) << 8) |                   (green & 0xff00) |                   (blue >> 8);    }}#define convert4to3(in1, in2, in3, in4, out1, out2, out3) \    do  { \        out1 = in1       | (in2<<24); \        out2 = (in2>> 8) | (in3<<16); \        out3 = (in3>>16) | (in4<< 8); \    } while (0);inline void FBLinear24::store4pixels(__u32 d1, __u32 d2, __u32 d3, __u32 d4, __u32 *dest) {    __u32 o1, o2, o3;    convert4to3(d1, d2, d3, d4, o1, o2, o3);    fb_writel (o1, dest++);    fb_writel (o2, dest++);    fb_writel (o3, dest++);}void FBLinear24::FillRect(int x1,int y1,int x2,int y2,int color) {    assert( x1 >= 0 && x1 < mXres && y1 >=0 && y1 < mYres);    assert( x2 >= 0 && x2 < mXres && y2 >=0 && y2 < mYres);    assert(x1 <= x2 && y1 <= y2);    __u8* dest = ((__u8*)mpBuf + mNextLine * y1 + x1 * 3);    __u32 fgx = cfb24[color];    int height = y2 - y1 + 1;    int width = x2 - x1 + 1;    int cnt;    __u8* dest8;    __u16* dest16;    __u32 *dest32;    for(; height--; dest += mNextLine) {        dest32 = (__u32*)dest;        for (cnt = width/4; cnt--;) {            store4pixels(fgx, fgx, fgx, fgx, dest32);            dest32 += 3;        }        if (width & 2) {            fb_writel(fgx | fgx<<24, dest32++);            dest16 = (__u16*)dest32;            fb_writew(fgx>>8, dest16++);            dest32 = (__u32*)dest16;        }        if (width & 1) {            dest16 = (__u16*)dest32;            fb_writew(fgx, dest16++);            dest8 = (__u8*)dest16;            fb_writeb(fgx>>16, dest8);        }    }    /* base on ole, more simple    __u8 color0 = cfb24[color];    __u8 color1 = cfb24[color]>>8;    __u8 color2 = cfb24[color]>>16;    __u8* p;    int col;    int width = x2 - x1 + 1;    int height = y2 - y1 + 1;    for(; height > 0; height--, dest += mNextLine) {        p = dest;        for(col = width; col > 0; col--) {            fb_writeb(color0, p++);            fb_writeb(color1, p++);            fb_writeb(color2, p++);        }    }    */}void FBLinear24::RevRect(int x1,int y1,int x2,int y2) {    assert( x1 >= 0 && x1 < Width() && y1 >=0 && y1 < Height());    assert( x2 >= 0 && x2 < Width() && y2 >=0 && y2 < Height());    assert(x1 <= x2 && y1 <= y2);    __u8* dest = (__u8*)mpBuf + mNextLine * y1 + x1 * 3;    int height = y2 - y1 + 1;    int width = x2 - x1 + 1;    int cnt;    __u8* dest8;    __u16* dest16;    __u32* dest32;    for(; height--; dest += mNextLine) {        dest32 = (__u32*)dest;        for (cnt = width/4; cnt--;) {            fb_writel(fb_readl(dest32) ^ 0xffffffff, dest32++);            fb_writel(fb_readl(dest32) ^ 0xffffffff, dest32++);            fb_writel(fb_readl(dest32) ^ 0xffffffff, dest32++);        }        if (width & 2) {            fb_writel(fb_readl(dest32) ^ 0xffffffff, dest32++);            dest16 = (__u16*)dest32;            fb_writew(fb_readw(dest16) ^ 0xffff, dest16++);            dest32 = (__u32*)dest16;        }        if (width & 1) {            dest16 = (__u16*)dest32;            fb_writew(fb_readw(dest16) ^ 0xffff, dest16++);            dest8 = (__u8*)dest16;            fb_writeb(fb_readb(dest8) ^ 0xff, dest8);        }    }    /* more simple    for(; height--; dest += mNextLine) {        dest8 = (__u8*)dest;        for (cnt = width * 3; cnt--;) {            fb_writeb(fb_readb(dest8) ^ 0xff, dest8++);        }    }    */}inline void FBLinear24::PutPixel(int x,int y,int color) {    assert( x >= 0 && x < mXres && y >=0 && y < mYres);    __u8* dest = ((__u8*)mpBuf + mNextLine * y + x * 3);    fb_writew( (cfb24[color]<<8) & (cfb24[color]>>8), dest);    fb_writeb( cfb24[color]>>16, dest + 2);}void FBLinear24::DrawChar(int x,int y,int fg,int bg,struct CharBitMap* pFont) {    __u32 eorx, fgx, bgx, d1, d2, d3, d4;    fgx = cfb24[fg];    bgx = cfb24[bg];    eorx = fgx ^ bgx;    __u8* dest = ((__u8*)mpBuf + mNextLine * y + x * 3 );    __u32* dest32;    char* cdat = pFont->pBuf;    int cnt;    int row;    for (row = mBlockHeight; row-- ; dest += mNextLine) {        dest32 = (__u32*)dest;        for (cnt = (pFont->w)/8; cnt--;) {            d1 = (-(*cdat >> 7) & eorx) ^ bgx;            d2 = (-(*cdat >> 6 & 1) & eorx) ^ bgx;            d3 = (-(*cdat >> 5 & 1) & eorx) ^ bgx;            d4 = (-(*cdat >> 4 & 1) & eorx) ^ bgx;            store4pixels(d1, d2, d3, d4, dest32);            dest32 += 3;            d1 = (-(*cdat >> 3 & 1) & eorx) ^ bgx;            d2 = (-(*cdat >> 2 & 1) & eorx) ^ bgx;            d3 = (-(*cdat >> 1 & 1) & eorx) ^ bgx;            d4 = (-(*cdat & 1) & eorx) ^ bgx;            store4pixels(d1, d2, d3, d4, dest32);            dest32 += 3;            cdat++;        }        if (pFont->isMulti8)            continue;                    if (pFont->w & 4) {            d1 = (-(*cdat >> 7) & eorx) ^ bgx;            d2 = (-(*cdat >> 6 & 1) & eorx) ^ bgx;            d3 = (-(*cdat >> 5 & 1) & eorx) ^ bgx;            d4 = (-(*cdat >> 4 & 1) & eorx) ^ bgx;            store4pixels(d1, d2, d3, d4, dest32);            dest32 += 3;        }        if (pFont->w & 2) {            d1 = (-(*cdat >> 3 & 1) & eorx) ^ bgx;            d2 = (-(*cdat >> 2 & 1) & eorx) ^ bgx;            fb_writel(d1 | (d2<<24), dest32++);            fb_writew(d2>>8, ((__u16*)dest32)++);        }        if (pFont->w & 1) {            d3 = (-(*cdat >> 1 & 1) & eorx) ^ bgx;            fb_writew(d3, ((__u16*)dest32)++);            fb_writeb(d3>>16, (__u8*)dest32);        }        cdat++;    }}

⌨️ 快捷键说明

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