|

楼主 |
发表于 2005-4-25 13:54:28
|
显示全部楼层
zhcon 里面这个函数为什么编译时会出错?(gcc-4.0)
- 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;
- [color=red] fb_writew(d3, ((__u16*)dest32)++);[/color]
- fb_writeb(d3>>16, (__u8*)dest32);
- }
- cdat++;
- }
- }
复制代码
fb_writew(d3, ((__u16*)dest32)++);
这一句的意思是什么?dest32 的指针究竟移动了没有, 移动了多少? fb_writew 接受到的参数又是什么?这种情况下解释的顺序是什么, 在 linux 和 freeBSD 中有没有不同? 在 debian 的 patch 中简单地做了 dest32++, 究竟对不对?
//bow |
|