📄 core_vga.c
字号:
/********************
Filename: CORE_VGA.C
History&DateTime:
02/13/2007
在 PutPixel() 中增加了 CursorDrawing 的使能
12/25/2006
进行整体优化 提高执行速度
02/12/2007
加入了CursorDrawing标志
为了能同步处理鼠标指针的绘制和响应上的时间差
********************/
#define _CORE_VGA_INC
#include <alloc.h>
#include "ST3000.H"
#include "STRUC_3K.H"
#include "BT848.H"
#include "CORE_VGA.H"
#define FABS(a) (((a)>=0) ? (a) : -(a))
struct {
char VESASignature[4];
short VESAVersion;
char far *OEMStringPtr;
long Capabilities;
unsigned far *VideoModePtr;
short TotalMemory;
short OemSoftwareRev;
long OemVendorNamePtr;
long OemProductNamePtr;
long OemProductRevPtr;
char reserved[222];
char OemDATA[256];
} vesainfoblock;
struct {
unsigned short ModeAttributes;
unsigned char WinAAttributes;
unsigned char WinBAttributes;
unsigned short WinGranularity;
unsigned short WinSize;
unsigned short WinASegment;
unsigned short WinBSegment;
void (far *WinFuncPtr)(void);
unsigned short BytesPerScanLine;
unsigned short XResolution;
unsigned short YResolution;
unsigned char XCharSize;
unsigned char YCharSize;
unsigned char NumberOfPlanes;
unsigned char BitsPerPixel;
unsigned char NumberOfBanks;
unsigned char MemoryModel;
unsigned char BankSize;
unsigned char NumberOfImagePages;
unsigned char res1;
unsigned char RedMaskSize;
unsigned char RedFieldPosition;
unsigned char GreenMaskSize;
unsigned char GreenFieldPosition;
unsigned char BlueMaskSize;
unsigned char BlueFieldPosition;
unsigned char RsvdMaskSize;
unsigned char RsvdFieldPosition;
unsigned char DirectColorModeInfo;
unsigned far *VideoPtr;
long OffScreenMemOffset;
short OffScreenMemSize;
char res2[206];
} VesaModeInfoBlock;
typedef struct {
int nCurBank,nBytesPerLine;
} graphatt;
graphatt g_graphatt;
int BitsOfPixel=4;
static int currx,curry;
static unsigned g_nBankShift; // Bank granularity adjust factor
static unsigned char far *LocalScrPtr; // Pointer to start of video memory
static int count_line=0;
static unsigned filltemp[3][256]={0};
// (vgap=20; hgap=20) (wid=60; hei=60)
#define softkey_wid 70 // 键盘 键钮宽度
#define softkey_hei 70 // 键盘 键钮高度
#define softkey_vert 10 // 键盘 键钮垂直间距
#define softkey_hori 10 // 键盘 键钮水平间距
int g_Klength=0; // 键盘输入有效数字个数
unsigned char g_Kmask=0,Dispbuf[20]={0},Tempbuf[20]={0};
/*
g_Kmask :
bit0=1 不允许小数输入; bit0=0 允许小数输入
bit1=1 不允许输入符号; bit1=0 允许输入符号
bit4=1 限制小数位数为1位; bit4=0 默认小数位数2位
*/
typedef struct {
int x,y;
unsigned char kName[5],kASC;
} SimKeys;
SimKeys KBMatrix_Num[16]={
{0, 0, "0", 0x30},
{0, 0, "1", 0x31},
{0, 0, "2", 0x32},
{0, 0, "3", 0x33},
{0, 0, "4", 0x34},
{0, 0, "5", 0x35},
{0, 0, "6", 0x36},
{0, 0, "7", 0x37},
{0, 0, "8", 0x38},
{0, 0, "9", 0x39},
{0, 0, "+", 0x00},
{0, 0, "-", 0x00},
{0, 0, ".", 0x00},
{0, 0, "Del", 0x00},
{0, 0, "Bac", 0x00},
{0, 0, "Ent", 0x00}
};
extern const _tagMenuAttr MenuAttr;
typedef struct {
unsigned char Bflag,Buffer[10];
} CAN_MSG;
CAN_MSG BuffCAN[200];
int MsgCount=0,rMsgCount=0;
// 如下增加的代码是最新的优化部分加入
// DateTime: 2007-04-04 15:00 完全处理所有的鼠标事件
#define MOUSE_CLICKEVT_LEN 50
typedef struct {
int x;
int y;
char flag;
} tagUsrClickEvtList;
static int rUsrClickEvtList=0,wUsrClickEvtList=0;
tagUsrClickEvtList UsrClickEvtList[MOUSE_CLICKEVT_LEN];
// 默认还没有按下左按钮 为了仅捕捉第一次按键
// UsrLeftKeyTms记录按钮按下的事件 =1刚开始按下; 当松开按键时 请=0.
// 初始坐标存储值 (UsrLeftKeyX,UsrLeftKeyY)=(0,0).
static int UsrLeftKeyX=0,UsrLeftKeyY=0;
static int UsrLeftKeyTms=0;
unsigned OldProcSeg,OldProcOff,OldMask;
int ClickCol,ClickRow,MouseClickFlag=0;
int OldMouseCol,OldMouseRow,MouseFlag=0,CursorDrawing=0;
unsigned char far *MouseImageBuffer;
/* 8*15 英文字库掩码
本来大小为8*16; 由于最下一行都是0x00 所以裁剪掉 节省了90个字节的内存 */
const unsigned char LibraryASC[] = {
0x00,0x00,0x18,0x3c,0x3c,0x3c,0x18,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00, //[!]
0x00,0x66,0x66,0x66,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //["]
0x00,0x00,0x00,0x6c,0x6c,0xfe,0x6c,0x6c,0x6c,0xfe,0x6c,0x6c,0x00,0x00,0x00, //[#]
0x18,0x18,0x7c,0xc6,0xc2,0xc0,0x7c,0x06,0x06,0x86,0xc6,0x7c,0x18,0x18,0x00, //[$]
0x00,0x00,0x00,0x00,0xc2,0xc6,0x0c,0x18,0x30,0x60,0xc6,0x86,0x00,0x00,0x00, //[%]
0x00,0x00,0x38,0x6c,0x6c,0x38,0x76,0xdc,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00, //[&]
0x00,0x30,0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //[']
0x00,0x00,0x0c,0x18,0x30,0x30,0x30,0x30,0x30,0x30,0x18,0x0c,0x00,0x00,0x00, //[(]
0x00,0x00,0x30,0x18,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x18,0x30,0x00,0x00,0x00, //[)]
0x00,0x00,0x00,0x00,0x00,0x66,0x3c,0xff,0x3c,0x66,0x00,0x00,0x00,0x00,0x00, //[*]
0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x7e,0x18,0x18,0x00,0x00,0x00,0x00,0x00, //[+]
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x30,0x00,0x00, //[,]
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //[-]
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00, //[.]
0x00,0x00,0x00,0x00,0x02,0x06,0x0c,0x18,0x30,0x60,0xc0,0x80,0x00,0x00,0x00, //[/]
0x00,0x00,0x38,0x6c,0xc6,0xc6,0xd6,0xd6,0xc6,0xc6,0x6c,0x38,0x00,0x00,0x00, //[0]
0x00,0x00,0x18,0x38,0x78,0x18,0x18,0x18,0x18,0x18,0x18,0x7e,0x00,0x00,0x00, //[1]
0x00,0x00,0x7c,0xc6,0x06,0x0c,0x18,0x30,0x60,0xc0,0xc6,0xfe,0x00,0x00,0x00, //[2]
0x00,0x00,0x7c,0xc6,0x06,0x06,0x3c,0x06,0x06,0x06,0xc6,0x7c,0x00,0x00,0x00, //[3]
0x00,0x00,0x0c,0x1c,0x3c,0x6c,0xcc,0xfe,0x0c,0x0c,0x0c,0x1e,0x00,0x00,0x00, //[4]
0x00,0x00,0xfe,0xc0,0xc0,0xc0,0xfc,0x06,0x06,0x06,0xc6,0x7c,0x00,0x00,0x00, //[5]
0x00,0x00,0x38,0x60,0xc0,0xc0,0xfc,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00, //[6]
0x00,0x00,0xfe,0xc6,0x06,0x06,0x0c,0x18,0x30,0x30,0x30,0x30,0x00,0x00,0x00, //[7]
0x00,0x00,0x7c,0xc6,0xc6,0xc6,0x7c,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00, //[8]
0x00,0x00,0x7c,0xc6,0xc6,0xc6,0x7e,0x06,0x06,0x06,0x0c,0x78,0x00,0x00,0x00, //[9]
0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00, //[:]
0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x30,0x00,0x00,0x00, //[;]
0x00,0x00,0x00,0x06,0x0c,0x18,0x30,0x60,0x30,0x18,0x0c,0x06,0x00,0x00,0x00, //[<]
0x00,0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,0x00,0x00, //[=]
0x00,0x00,0x00,0x60,0x30,0x18,0x0c,0x06,0x0c,0x18,0x30,0x60,0x00,0x00,0x00, //[>]
0x00,0x00,0x7c,0xc6,0xc6,0x0c,0x18,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00, //[?]
0x00,0x00,0x00,0x7c,0xc6,0xc6,0xde,0xde,0xde,0xdc,0xc0,0x7c,0x00,0x00,0x00, //[@]
0x00,0x00,0x10,0x38,0x6c,0xc6,0xc6,0xfe,0xc6,0xc6,0xc6,0xc6,0x00,0x00,0x00, //[A]
0x00,0x00,0xfc,0x66,0x66,0x66,0x7c,0x66,0x66,0x66,0x66,0xfc,0x00,0x00,0x00, //[B]
0x00,0x00,0x3c,0x66,0xc2,0xc0,0xc0,0xc0,0xc0,0xc2,0x66,0x3c,0x00,0x00,0x00, //[C]
0x00,0x00,0xf8,0x6c,0x66,0x66,0x66,0x66,0x66,0x66,0x6c,0xf8,0x00,0x00,0x00, //[D]
0x00,0x00,0xfe,0x66,0x62,0x68,0x78,0x68,0x60,0x62,0x66,0xfe,0x00,0x00,0x00, //[E]
0x00,0x00,0xfe,0x66,0x62,0x68,0x78,0x68,0x60,0x60,0x60,0xf0,0x00,0x00,0x00, //[F]
0x00,0x00,0x3c,0x66,0xc2,0xc0,0xc0,0xde,0xc6,0xc6,0x66,0x3a,0x00,0x00,0x00, //[G]
0x00,0x00,0xc6,0xc6,0xc6,0xc6,0xfe,0xc6,0xc6,0xc6,0xc6,0xc6,0x00,0x00,0x00, //[H]
0x00,0x00,0x3c,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x3c,0x00,0x00,0x00, //[I]
0x00,0x00,0x1e,0x0c,0x0c,0x0c,0x0c,0x0c,0xcc,0xcc,0xcc,0x78,0x00,0x00,0x00, //[J]
0x00,0x00,0xe6,0x66,0x66,0x6c,0x78,0x78,0x6c,0x66,0x66,0xe6,0x00,0x00,0x00, //[K]
0x00,0x00,0xf0,0x60,0x60,0x60,0x60,0x60,0x60,0x62,0x66,0xfe,0x00,0x00,0x00, //[L]
0x00,0x00,0xc6,0xee,0xfe,0xfe,0xd6,0xc6,0xc6,0xc6,0xc6,0xc6,0x00,0x00,0x00, //[M]
0x00,0x00,0xc6,0xe6,0xf6,0xfe,0xde,0xce,0xc6,0xc6,0xc6,0xc6,0x00,0x00,0x00, //[N]
0x00,0x00,0x7c,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00, //[O]
0x00,0x00,0xfc,0x66,0x66,0x66,0x7c,0x60,0x60,0x60,0x60,0xf0,0x00,0x00,0x00, //[P]
0x00,0x00,0x7c,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xd6,0xde,0x7c,0x0c,0x0e,0x00, //[Q]
0x00,0x00,0xfc,0x66,0x66,0x66,0x7c,0x6c,0x66,0x66,0x66,0xe6,0x00,0x00,0x00, //[R]
0x00,0x00,0x7c,0xc6,0xc6,0x60,0x38,0x0c,0x06,0xc6,0xc6,0x7c,0x00,0x00,0x00, //[S]
0x00,0x00,0x7e,0x7e,0x5a,0x18,0x18,0x18,0x18,0x18,0x18,0x3c,0x00,0x00,0x00, //[T]
0x00,0x00,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00, //[U]
0x00,0x00,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x6c,0x38,0x10,0x00,0x00,0x00, //[V]
0x00,0x00,0xc6,0xc6,0xc6,0xc6,0xd6,0xd6,0xd6,0xfe,0xee,0x6c,0x00,0x00,0x00, //[W]
0x00,0x00,0xc6,0xc6,0x6c,0x7c,0x38,0x38,0x7c,0x6c,0xc6,0xc6,0x00,0x00,0x00, //[X]
0x00,0x00,0x66,0x66,0x66,0x66,0x3c,0x18,0x18,0x18,0x18,0x3c,0x00,0x00,0x00, //[Y]
0x00,0x00,0xfe,0xc6,0x86,0x0c,0x18,0x30,0x60,0xc2,0xc6,0xfe,0x00,0x00,0x00, //[Z]
0x00,0x00,0x3c,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x3c,0x00,0x00,0x00, //[[]
0x00,0x00,0x00,0x80,0xc0,0xe0,0x70,0x38,0x1c,0x0e,0x06,0x02,0x00,0x00,0x00, //[\]
0x00,0x00,0x3c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x3c,0x00,0x00,0x00, //[]]
0x10,0x38,0x6c,0xc6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //[^]
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00, //[_]
0x30,0x30,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //[`]
0x00,0x00,0x00,0x00,0x00,0x78,0x0c,0x7c,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00, //[a]
0x00,0x00,0xe0,0x60,0x60,0x78,0x6c,0x66,0x66,0x66,0x66,0x7c,0x00,0x00,0x00, //[b]
0x00,0x00,0x00,0x00,0x00,0x7c,0xc6,0xc0,0xc0,0xc0,0xc6,0x7c,0x00,0x00,0x00, //[c]
0x00,0x00,0x1c,0x0c,0x0c,0x3c,0x6c,0xcc,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00, //[d]
0x00,0x00,0x00,0x00,0x00,0x7c,0xc6,0xfe,0xc0,0xc0,0xc6,0x7c,0x00,0x00,0x00, //[e]
0x00,0x00,0x38,0x6c,0x64,0x60,0xf0,0x60,0x60,0x60,0x60,0xf0,0x00,0x00,0x00, //[f]
0x00,0x00,0x00,0x00,0x00,0x76,0xcc,0xcc,0xcc,0xcc,0xcc,0x7c,0x0c,0xcc,0x78, //[g]
0x00,0x00,0xe0,0x60,0x60,0x6c,0x76,0x66,0x66,0x66,0x66,0xe6,0x00,0x00,0x00, //[h]
0x00,0x00,0x18,0x18,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x3c,0x00,0x00,0x00, //[i]
0x00,0x00,0x06,0x06,0x00,0x0e,0x06,0x06,0x06,0x06,0x06,0x06,0x66,0x66,0x3c, //[j]
0x00,0x00,0xe0,0x60,0x60,0x66,0x6c,0x78,0x78,0x6c,0x66,0xe6,0x00,0x00,0x00, //[k]
0x00,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x3c,0x00,0x00,0x00, //[l]
0x00,0x00,0x00,0x00,0x00,0xec,0xfe,0xd6,0xd6,0xd6,0xd6,0xc6,0x00,0x00,0x00, //[m]
0x00,0x00,0x00,0x00,0x00,0xdc,0x66,0x66,0x66,0x66,0x66,0x66,0x00,0x00,0x00, //[n]
0x00,0x00,0x00,0x00,0x00,0x7c,0xc6,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00, //[o]
0x00,0x00,0x00,0x00,0x00,0xdc,0x66,0x66,0x66,0x66,0x66,0x7c,0x60,0x60,0xf0, //[p]
0x00,0x00,0x00,0x00,0x00,0x76,0xcc,0xcc,0xcc,0xcc,0xcc,0x7c,0x0c,0x0c,0x1e, //[q]
0x00,0x00,0x00,0x00,0x00,0xdc,0x76,0x66,0x60,0x60,0x60,0xf0,0x00,0x00,0x00, //[r]
0x00,0x00,0x00,0x00,0x00,0x7c,0xc6,0x60,0x38,0x0c,0xc6,0x7c,0x00,0x00,0x00, //[s]
0x00,0x00,0x10,0x30,0x30,0xfc,0x30,0x30,0x30,0x30,0x36,0x1c,0x00,0x00,0x00, //[t]
0x00,0x00,0x00,0x00,0x00,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00, //[u]
0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x3c,0x18,0x00,0x00,0x00, //[v]
0x00,0x00,0x00,0x00,0x00,0xc6,0xc6,0xd6,0xd6,0xd6,0xfe,0x6c,0x00,0x00,0x00, //[w]
0x00,0x00,0x00,0x00,0x00,0xc6,0x6c,0x38,0x38,0x38,0x6c,0xc6,0x00,0x00,0x00, //[x]
0x00,0x00,0x00,0x00,0x00,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x7e,0x06,0x0c,0xf8, //[y]
0x00,0x00,0x00,0x00,0x00,0xfe,0xcc,0x18,0x30,0x60,0xc6,0xfe,0x00,0x00,0x00 //[z]
};
extern int BitsOfPixel;
extern FILE *fpGB16;
extern FILE *fpICO2424,*fpICO3232,*fpICO8840;
extern unsigned char far *lpImageData,*lpImageMask;
extern tagVarST3000 VarST3000;
extern int ClickCol,ClickRow,MouseClickFlag;
/*
void ___VESAFUNCs___(void)
*/
/***
Func: GetVESA Mode Information
Return:
1-success; 0-failed
***/
int GetVESAMode(int mode)
{
union REGS in,out;
struct SREGS segs;
char far *modeInfo = (char far *)&VesaModeInfoBlock;
if( mode<0x100 ) { return 0;}
in.x.ax = 0x4F01;
in.x.cx = mode;
in.x.di = FP_OFF(modeInfo);
segs.es = FP_SEG(modeInfo);
int86x(0x10, &in, &out, &segs);
if( out.x.ax==0x004f ) { return 1;}
return 0;
}
/***
Func: GetVESA Head Information
Return:
1-success; 0-failed
***/
int GetVESAInfo(void)
{
union REGS in,out;
struct SREGS segs;
char far *VbeInfo = (char far *)&vesainfoblock;
in.x.ax = 0x4F00;
in.x.di = FP_OFF(VbeInfo);
segs.es = FP_SEG(VbeInfo);
int86x(0x10, &in, &out, &segs);
if( out.x.ax==0x004f ) { return 1;}
return 0;
}
/***
Func: Set VESA-Graphcs to Special MODE
Parameters:
-mode; mode index
***/
void SetVESAMode(int mode)
{
asm {
PUSH AX
PUSH BX
MOV AX, 0x4F02
MOV BX, mode
INT 0x10
POP BX
POP AX
}
}
/***
Func: Initialize SVGA 1024x768x32 TureColor
***/
int InitVESA(void)
{
int Bfound=0;
unsigned far *p;
memset(&g_graphatt, 0, sizeof(graphatt));
if( !GetVESAInfo() ) { return 0;}
for(p=vesainfoblock.VideoModePtr; *p!=0xffff; p++)
{
if( GetVESAMode(*p) &&
VesaModeInfoBlock.XResolution==0x0400 &&
VesaModeInfoBlock.YResolution==0x0300 &&
VesaModeInfoBlock.BitsPerPixel==0x0020 &&
VesaModeInfoBlock.BytesPerScanLine==0x1000 &&
VesaModeInfoBlock.MemoryModel==0x06 &&
VesaModeInfoBlock.NumberOfPlanes==1 )
{ Bfound=1;}
if( Bfound )
{
g_graphatt.nBytesPerLine=0x1000;
// g_graphatt.dwPhysBasePtr=(unsigned long)(VesaModeInfoBlock.VideoPtr);
g_graphatt.nCurBank=-1;
g_nBankShift=0;
while( (unsigned)(64>>g_nBankShift)!=VesaModeInfoBlock.WinGranularity )
{ g_nBankShift++;}
LocalScrPtr=(unsigned char far*)(((unsigned long)0xa000)<<16);
SetVESAMode(*p);
BitsOfPixel=4;
return 1;
}
}
return 0;
}
/***
Func: End VESA-Graphics mode
***/
void EndVESA(void)
{
asm {
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AX, 3
INT 0x10
POP DX
POP CX
POP BX
POP AX
};
memset(&g_graphatt, 0, sizeof(graphatt));
}
/***
Func: Set MemBank for VESA Graphics
Parameters:
-bank ; bank index;
***/
void SetBANK(int bank)
{
if( bank == g_graphatt.nCurBank ) { return;}
g_graphatt.nCurBank = bank;
bank <<= g_nBankShift;
asm{
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AX, 0x4F05
MOV BX, 0
MOV DX, bank
INT 0x10
POP DX
POP CX
POP BX
POP AX
};
}
/***
Func: Pixel
Parameters:
-x,y ; position of pixel;
-r,g,b ; color of pixel;
***/
void PutPixel(int x, int y, int r, int g, int b)
{
// assert : GrahpicsMode = 32BIT-1024*768
unsigned long addr=((unsigned long)y<<12) + ((unsigned long)x<<2);//y*4096 + x*4
CursorDrawing=1;
SetBANK((int)(addr>>16));
*(LocalScrPtr+(addr&0xffff))=(char)r; addr++;
*(LocalScrPtr+(addr&0xffff))=(char)g; addr++;
*(LocalScrPtr+(addr&0xffff))=(char)b;
currx=x; curry=y;
CursorDrawing=0;
}
/***
Func: fill pixel sub for FillPoly
Parameters:
-r,g,b; color of pixel.
***/
void _FillPixel(int r, int g, int b)
{
int i,j,k,x,y,m,n;
for(i=0;filltemp[(count_line-1)%3][i]!=0xffff;i+=2)
{
x=filltemp[(count_line-1)%3][i];
for(j=0;filltemp[count_line%3][j]!=0xffff;j+=2)
{
if(filltemp[(count_line-1)%3][i]==filltemp[count_line%3][j])
{
m=filltemp[(count_line-1)%3][i+1];
n=filltemp[count_line%3][j+1];
if(m>n)
{ y=m; m=n; n=y;
}
for(y=m+1;y<n;y++)
{ PutPixel(x,y,r,g,b);}
}
}
}
for(j=0;filltemp[count_line%3][j]!=0xffff;j+=2)
{
x=filltemp[count_line%3][j];
for(k=0;filltemp[(count_line-2)%3][k]!=0xffff;k+=2)
{
if(filltemp[count_line%3][j]==filltemp[(count_line-2)%3][k])
{
m=filltemp[count_line%3][j+1];
n=filltemp[(count_line-2)%3][k+1];
if( m>n )
{ y=m; m=n; n=y;}
for(y=m+1;y<n;y++)
{ PutPixel(x,y,r,g,b);}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -