📄 n2d.h
字号:
{
return -1;
}
if (x >= 0 && x < rect_scr_h)
{
if (rect_scr_h - x >= width) /*直线完全显示*/
{
len = length = width + 1;
}
else /*直线右边溢出*/
{
/*if (x > g_rect_left)
{
x = x - g_rect_left;
}*/
len = length = rect_scr_h - x + 1;
}
}
else if (x < 0 && x > (-width))
{
if (width + x >= rect_scr_h) /*直线两端溢出*/
{
len = length = rect_scr_h + 1;
xx = x = 0;
}
else /*直线左边溢出*/
{
len = (length = width + 1) + x;
x = 0;
}
}
else
{
return -1;
}
page = (char)((addr = ((long)y + g_sl_offset) * g_screen_h + x) >> 15);
if (page == (addr + length) >> 15)
{
int far *d_tmp = (int far *)(g_videoptr + ((addr<<1) & 0xffff));
if (g_cur_vbe_page != page)
{
set_vbe_page(page);
}
for (k = g_rect_left; k < len; ++k)
{
#ifndef NEO_draw_mode_unused
switch(g_draw_mode)
{
case COPY_PUT : d_tmp[k] = color; break;
case XOR_PUT : d_tmp[k] = d_tmp[k] ^ color; break;
case NOT_PUT : d_tmp[k] = ~d_tmp[k]; break;
case OR_PUT : d_tmp[k] = d_tmp[k] | color; break;
case AND_PUT : d_tmp[k] = d_tmp[k] & color; break;
}
#else
d_tmp[k] = color;
#endif
}
}
else
{
for (k = g_rect_left;k < length; ++k)
dot(k + xx, y, color);
}
#else
x += 0; y += 0; width += 0; color += 0;
#endif
return 0;
}
}
#ifndef NEO_hi_graphics_h_used
void rect(int x0, int y0, int x1, int y1, int color)
{
line(x0,y0,x0,y1,color);
line(x0,y0,x1,y0,color);
line(x0,y1,x1,y1,color);
line(x1,y1,x1,y0,color);
}
#else
void rect(int x0, int y0, int x1, int y1, int color)
{
setcolor(color);
line(x0, y0, x0, y1);
line(x0, y0, x1, y0);
line(x0, y1, x1, y1);
line(x1, y1, x1, y0);
}
#endif
#ifndef NEO_hi_graphics_h_used
void tri(int xa, int ya, int xb, int yb, int xc, int yc, int col)
{
line(xa, ya, xb, yb,col);
line(xb, yb, xc, yc,col);
line(xc, yc, xa, ya,col);
}
#else
void tri(int xa, int ya, int xb, int yb, int xc, int yc, int col)
{
setcolor(col);
line(xa, ya, xb, yb);
line(xb, yb, xc, yc);
line(xc, yc, xa, ya);
}
#endif
void rectfill(int x1, int y1, int x2, int y2, int color)
{
int delta, temp;
if (x1 > x2)
{
temp = x1; x1 = x2; x2 = temp;
}
if (y1 > y2)
{
temp = y1; y1 = y2; y2 = temp;
}
delta = x2 - x1;
for (temp=y1; temp<=y2; ++temp)
{
hline(x1, temp, delta, color);
}
}
#ifndef NEO_hi_graphics_h_used
/*画圆函数,以(c_x, c_y)为中心画一半径为r的圆*/
void circle(int c_x, int c_y, int r, unsigned char color)
{
int x = 0, y = r, d0, d1, d2, direction;
/*x = 0; y = r;*/
d0 = (1-r)<<1;
while (y >= 0)
{
dot(c_x + x, c_y + y, color);
dot(c_x - x, c_y - y, color);
dot(c_x + x, c_y - y, color);
dot(c_x - x, c_y + y, color);
if (d0 < 0)
{
d1 = (d0 + y)<<1 -1;
if (d1 <= 0) direction = 1;
else direction = 2;
}
else if (d0 > 0)
{
d2 = (d0-x)<<1 - 1;
if (d2 <= 0) direction = 2;
else direction = 3;
}
else direction = 2;
switch(direction)
{
case 1 : ++x;
d0 += (x<<1) + 1;
break;
case 2 : ++x;
--y;
d0+=(x-y+1)<<1;
break;
case 3 : --y;
d0 += -(y<<1) + 1;
break;
}
}
}
#else
void circle(int c_x, int c_y, int r)
{
int x = 0, y = r, d0, d1, d2, direction;
d0 = (1-r)<<1;
while (y >= 0)
{
dot(c_x + x, c_y + y, g_frt_color);
dot(c_x - x, c_y - y, g_frt_color);
dot(c_x + x, c_y - y, g_frt_color);
dot(c_x - x, c_y + y, g_frt_color);
if (d0 < 0)
{
d1 = (d0 + y)<<1 -1;
if (d1 <= 0) direction = 1;
else direction = 2;
}
else if (d0 > 0)
{
d2 = (d0-x)<<1 - 1;
if (d2 <= 0) direction = 2;
else direction = 3;
}
else direction = 2;
switch(direction)
{
case 1 : ++x;
d0 += (x<<1) + 1;
break;
case 2 : ++x;
--y;
d0+=(x-y+1)<<1;
break;
case 3 : --y;
d0 += -(y<<1) + 1;
break;
}
}
}
#endif
#ifndef NEO_hi_graphics_h_used
void circlefill(int x, int y, int r, int c)
{
int i;
for (i = 0; i < r; ++i)
{
circle(x, y, i, c);
}
}
#else
void circlefill(int x, int y, int r, int c)
{
int i;
setcolor(c);
for (i = 0; i < r; ++i)
{
circle(x, y, i);
}
}
#endif
#ifndef NEO_hi_graphics_h_used
/*以(x0,y0)为中心、a和b分别为水平和垂直半轴画一椭圆*/
void ellipse(int x0,int y0,int a,int b,unsigned char color)
{
float d1, d2;
int x, y;
x=0; y=b;
d1 = b * b + a * a * (-b + 0.25);
dot(x0 + x, y0 + y, color);
dot(x0 - x, y0 - y, color);
dot(x0 - x, y0 + y, color);
dot(x0 + x, y0 - y, color);
while ((x + 1.0f) * b * b < (y - 0.5f) * a * a)
{
if (d1 < 0)
{
d1 += (2.0f * x + 3) * b * b;
++x;
}
else
{
d1 += (2.0f * x + 3) * b * b + (-2.0f * y + 2) * a * a;
++x; --y;
}
dot(x0 + x, y0 + y, color);
dot(x0 - x, y0 - y, color);
dot(x0 - x, y0 + y, color);
dot(x0 + x, y0 - y, color);
}
d2 = (x + 0.5f) * b + (y - 1.0f) * a - a * b;
while (y > 0)
{
if (d2 < 0)
{
d2 += (2.0f * x + 2) * b * b + (-2.0f * y + 3) * a * a;
++x; --y;
}
else
{
d2 += (-2.0f * y + 3) * a * a;
--y;
}
dot(x0 + x, y0 + y, color);
dot(x0 - x, y0 - y, color);
dot(x0 - x, y0 + y, color);
dot(x0 + x, y0 - y, color);
}
}
#else
void ellipse(int x0,int y0,int a,int b)
{
float d1, d2;
int x, y;
x=0; y=b;
d1 = b * b + a * a * (-b + 0.25);
dot(x0 + x, y0 + y, g_frt_color);
dot(x0 - x, y0 - y, g_frt_color);
dot(x0 - x, y0 + y, g_frt_color);
dot(x0 + x, y0 - y, g_frt_color);
while ((x + 1.0f) * b * b < (y - 0.5f) * a * a)
{
if (d1 < 0)
{
d1 += (2.0f * x + 3) * b * b;
++x;
}
else
{
d1 += (2.0f * x + 3) * b * b + (-2.0f * y + 2) * a * a;
++x; --y;
}
dot(x0 + x, y0 + y, g_frt_color);
dot(x0 - x, y0 - y, g_frt_color);
dot(x0 - x, y0 + y, g_frt_color);
dot(x0 + x, y0 - y, g_frt_color);
}
d2 = (x + 0.5f) * b + (y - 1.0f) * a - a * b;
while (y > 0)
{
if (d2 < 0)
{
d2 += (2.0f * x + 2) * b * b + (-2.0f * y + 3) * a * a;
++x; --y;
}
else
{
d2 += (-2.0f * y + 3) * a * a;
--y;
}
dot(x0 + x, y0 + y, g_frt_color);
dot(x0 - x, y0 - y, g_frt_color);
dot(x0 - x, y0 + y, g_frt_color);
dot(x0 + x, y0 - y, g_frt_color);
}
}
#endif
void _dot(int x, int y, int color)
{
long addr;
int page;
if (g_color_depth == 8)
{
#ifndef NEO_color_depth_8_unused
page = (int)((addr = ((long)y + g_sl_offset) * g_screen_h + x) >> 16);
if (g_cur_vbe_page != page)
{
#ifndef MSVC15
_BX = 0;
_DX = g_cur_vbe_page = page;
_AX = 0x4f05;
__int__(0x10);
#else
g_cur_vbe_page = page;
_asm
{
mov bx,0
mov dx,g_cur_vbe_page
mov ax,4f05h
int 10h
}
#endif
}
*(g_videoptr+(addr& 0xffff)) = (unsigned char)color;
#else
x = y = color;
#endif
}
else /*if (g_v_mode == 1)*/
{
#ifndef NEO_color_depth_16_unused
int far *videoptr = (int far *)0xa0000000;
page = (int)((addr = ((long)y + g_sl_offset) * g_screen_h + x) >> 15);
if (g_cur_vbe_page != page)
{
#ifndef MSVC15
_BX = 0;
_DX = g_cur_vbe_page = page;
_AX = 0x4f05;
__int__(0x10);
#else
g_cur_vbe_page = page;
_asm
{
mov bx,0
mov dx,g_cur_vbe_page
mov ax,4f05h
int 10h
}
#endif
}
*(videoptr + (addr & 0xffff)) = color;
#else
x = y = color;
#endif
}
}
#endif
void clear_to_color(int color)
{
#ifndef NEO_rect_unused
rect_store();
#endif
screen(0, 0, SCREEN_W, SCREEN_H);
#ifndef NEO_basic_draw_unused
rectfill(0, 0, SCREEN_W, SCREEN_H, color);
#else
{
int x, y;
for (y = 0; y < SCREEN_H; ++y)
for (x = 0; x < SCREEN_W; ++x)
dot(x, y, color);
}
#endif
#ifndef NEO_rect_unused
rect_restore();
#endif
}
void clear(void)
{
clear_to_color(0);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -