📄 moveimg.c
字号:
/*-----------------------------------------------------------
函数 _MoveImage : 在显示存储器中移动屏幕映象块。
-----------------------------------------------------------*/
#include <hanenv.h>
void _Cdecl _MoveImage(col1,line1,width,high,col2,line2)
int col1; /* 屏幕图象块左上角列坐标(以字节为单位) */
int line1; /* 屏幕图象块左上角行坐标(以象素为单位) */
int width; /* 屏幕图象块宽度(以字节为单位) */
int high; /* 屏幕图象块高度(以象素为单位) */
int col2; /* 屏幕图象块新位置列坐标(以字节为单位) */
int line2; /* 屏幕图象块新位置行坐标(以象素为单位) */
{
register int i,j;
unsigned char tmpreg;
unsigned char far *sour;
unsigned char far *dest;
/*-- 设置显示寄存器操作标志 -----------*/
_VideoBusy = YES;
/*-- 确定源屏幕块和目标屏幕块的首地址 -*/
sour = MK_FP(0xa000,(line1+_ScreenTop)*_ScreenWidth+col1);
dest = MK_FP(0xa000,(line2+_ScreenTop)*_ScreenWidth+col2);
/*-- 修改方式寄存器内容为写方式1 ------*/
outportb(0x3ce,0x05);
tmpreg = inportb(0x3cf);
tmpreg |= 0x01;
outportb(0x3cf,tmpreg);
/*-- 如果源块在目标块之后,正向拷贝 ----*/
if(sour >= dest)
{
for(i=0;i<high;i++)
{
for(j=0;j<width;j++)
*(dest+j)=*(sour+j);
dest += _ScreenWidth;
sour += _ScreenWidth;
}
}
/*-- 如果源块在目标块之前,反向拷贝 ----*/
else
{
sour += (high-1)*_ScreenWidth+width-1;
dest += (high-1)*_ScreenWidth+width-1;
for(i=high-1;i>=0;i--)
{
for(j=0;j<width;j++)
*(dest-j)=*(sour-j);
dest -= _ScreenWidth;
sour -= _ScreenWidth;
}
}
/*-- 恢复方式寄存器内容为写方式0 ------*/
tmpreg &= 0xfc;
outportb(0x3ce,0x05);
outportb(0x3cf,tmpreg);
_VideoBusy = NO;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -