zoukankan
html css js c++ java
一个编程函数集(包含大量C实用函数)
又一个编程函数集(包含大量实用函数)
编程函数集,详细内容如下:
格式化字符串转换
鼠标驱动
西文模式下输出汉字(BGI)
三维窗体
时钟中断服务
取得键盘扫描码
文本模式光标定位
显示的关闭与开启
文本模式的直接写屏技术
TVGA直接写屏图形引擎
/**/
/*
-------------------------------------------------------------------------
*/
/**/
/*
Head
*/
/**/
/*
-------------------------------------------------------------------------
*/
#include
<
stdio.h
>
#include
<
conio.h
>
#include
<
stdarg.h
>
#include
<
dos.h
>
#include
<
graphics.h
>
#include
<
stdio.h
>
#include
<
iostream.h
>
#include
<
stdlib.h
>
#include
<
time.h
>
#include
<
bios.h
>
#include
<
string
.h
>
#include
<
math.h
>
/**/
/*
---------------------------格式化字符串转换------------------------------
*/
int
vsprint(
char
*
buffer,
char
*
fmt,
)
{
va_list argptr;
int
cnt;
va_start(argptr, fmt);
cnt
=
vsprintf(buffer, fmt, argptr);
va_end(argptr);
return
(cnt);
}
/**/
/*
-------------------------------鼠标驱动----------------------------------
*/
int
mouse(
int
a,
int
b,
int
c,
int
d)
{
asm mov ax,a
asm mov bx,b
asm mov cx,c
asm mov dx,d
asm
int
33h
return
_AX;
}
#if
defined(MOUSESHAPE)
//
光标形状设定
typedef
struct
{
unsigned
int
shape[
32
];
char
hotx;
char
hoty;
}
SHAPE;
SHAPE pen1
=
{
{
0x0fff
,
0x07ff
,
0x03ff
,
0x01ff
,
0x80ff
,
0xc07f
,
0xe03f
,
0xf01f
,
0xf80f
,
0xfc07
,
0xfe03
,
0xff01
,
0xff80
,
0xffc1
,
0xffe3
,
0xfff7
,
0xf000
,
0xe800
,
0xd400
,
0xaa00
,
0x5500
,
0x2a80
,
0x1540
,
0x0aa0
,
0x0550
,
0x02a8
,
0x0154
,
0x00aa
,
0x0055
,
0x002a
,
0x0014
,
0x0008
}
,
0
,
0
}
;
SHAPE pen2
=
{
{
0xe1ff
,
0xe1ff
,
0xe1ff
,
0xe1ff
,
0xe000
,
0xe000
,
0xe000
,
0xe000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x1e00
,
0x1200
,
0x1200
,
0x1200
,
0x1200
,
0x13ff
,
0x1249
,
0x1249
,
0x1249
,
0x9001
,
0x9001
,
0x9001
,
0x8001
,
0x8001
,
0x8001
,
0xffff
}
,
5
,
0
}
;
void
mouseshape(SHAPE sp)
{
_BX
=
sp.hotx;
_CX
=
sp.hoty;
_ES
=
FP_SEG(
&
sp.shape);
_DX
=
FP_OFF(
&
sp.shape);
_AX
=
0x09
;
geninterrupt(
0x33
);
}
#endif
/**/
/*
--------------------------西文模式下输出汉字(BGI)------------------------
*/
void
initgraphics(
int
gdriver,
int
gmode,
char
*
drvpath
=
""
)
{
initgraph(
&
gdriver,
&
gmode,drvpath);
}
couttextxy(FILE
*
library,
int
x,
int
y,unsigned
char
far
*
string
,
char
color)
{
register
int
i,j;
unsigned
long
int
locate;
int
k
=
0
;
char
l
=
0
,buffer[
32
];
if
(library
==
NULL)
return
0
;
while
(
string
[k]
!=
'
\0
'
)
{
locate
=
(
string
[k]
-
161
)
*
94
+
string
[k
+
1
]
-
161
;
fseek(library,(
long
int
)locate
*
32
,SEEK_SET);
fread(buffer,
32
,
sizeof
(
char
),library);
k
+=
2
;
for
(i
=
0
;i
<
16
;i
++
)
for
(j
=
0
;j
<
2
;j
++
)
{
l
=
buffer[i
*
2
+
j];
if
((l
&
0x80
)
!=
0
) putpixel(x
+
j
*
8
,y
+
i,color);
if
((l
&
0x40
)
!=
0
) putpixel(x
+
j
*
8
+
1
,y
+
i,color);
if
((l
&
0x20
)
!=
0
) putpixel(x
+
j
*
8
+
2
,y
+
i,color);
if
((l
&
0x10
)
!=
0
) putpixel(x
+
j
*
8
+
3
,y
+
i,color);
if
((l
&
0x08
)
!=
0
) putpixel(x
+
j
*
8
+
4
,y
+
i,color);
if
((l
&
0x04
)
!=
0
) putpixel(x
+
j
*
8
+
5
,y
+
i,color);
if
((l
&
0x02
)
!=
0
) putpixel(x
+
j
*
8
+
6
,y
+
i,color);
if
((l
&
0x01
)
!=
0
) putpixel(x
+
j
*
8
+
7
,y
+
i,color);
}
x
+=
16
;
}
return
1
;
}
/**/
/*
-------------------------------三维窗体----------------------------------
*/
void
window3d(
int
x,
int
y,
int
length,
int
width,
char
*
title)
{
setcolor(
7
);
line(x,y,x
+
length,y);
line(x,y,x,y
+
width);
setcolor(
0
);
line(x,y
+
width,x
+
length,y
+
width);
line(x
+
length,y,x
+
length,y
+
width);
setcolor(
15
);
line(x
+
1
,y
+
1
,x
+
length
-
1
,y
+
1
);
line(x
+
1
,y
+
1
,x
+
1
,y
+
width
-
1
);
setcolor(
8
);
line(x
+
1
,y
+
width
-
1
,x
+
length
-
1
,y
+
width
-
1
);
line(x
+
length
-
1
,y
+
1
,x
+
length
-
1
,y
+
width
-
1
);
setfillstyle(
1
,
7
);
bar(x
+
2
,y
+
2
,x
+
length
-
2
,y
+
width
-
2
);
setfillstyle(
1
,
1
);
bar(x
+
4
,y
+
4
,x
+
length
-
4
,y
+
20
);
setcolor(
15
);
outtextxy(x
+
8
,y
+
8
,title);
}
void
textwindow3d(
int
x,
int
y,
int
length,
int
width,
char
*
title,
int
bargin)
{
window3d(x,y,length,width,title);
setfillstyle(
1
,
15
);
bar(x
+
bargin,y
+
bargin
+
20
,x
+
length
-
bargin,y
+
width
-
bargin);
setcolor(
0
);
line(x
+
bargin
-
1
,y
+
bargin
+
19
,x
+
length
-
bargin
+
1
,y
+
bargin
+
19
);
line(x
+
bargin
-
1
,y
+
bargin
+
19
,x
+
bargin
-
1
,y
+
width
-
bargin
+
1
);
setcolor(
7
);
line(x
+
length
-
bargin
+
1
,y
+
bargin
+
19
,x
+
1
+
length
-
bargin,y
+
width
-
bargin
+
1
);
line(x
+
bargin
-
1
,y
+
width
-
bargin
+
1
,x
+
1
+
length
-
bargin,y
+
width
-
bargin
+
1
);
setcolor(
8
);
line(x
+
bargin
-
2
,y
+
bargin
+
18
,x
+
2
+
length
-
bargin,y
+
18
+
bargin);
line(x
+
bargin
-
2
,y
+
18
+
bargin,x
+
bargin
-
2
,y
+
2
+
width
-
bargin);
setcolor(
15
);
line(x
+
2
+
length
-
bargin,y
+
18
+
bargin,x
+
2
+
length
-
bargin,y
+
2
+
width
-
bargin);
line(x
+
bargin
-
2
,y
+
2
+
width
-
bargin,x
+
2
+
length
-
bargin,y
+
2
+
width
-
bargin);
}
/**/
/*
-----------------------------时钟中断服务--------------------------------
*/
#if
defined(INTERRUPT)
void
interrupt (
*
old)();
//
void interrupt hand(){(*old)();}
void
uninstall()
{
disable();
setvect(
0x1c
,(
*
old));
enable();
}
void
install()
{
disable();
old
=
getvect(
0x1c
);
setvect(
0x1c
,hand);
enable();
}
#endif
/**/
/*
-----------------------------取得键盘扫描码------------------------------
*/
int
keydown()
{
int
key;
if
(bioskey(
1
)
==
0
)
return
-
1
;
else
key
=
bioskey(
0
);
key
=
key
&
0xff
?
key
&
0xff
:key
>>
8
;
return
key;
}
/**/
/*
----------------------------文本模式光标定位-----------------------------
*/
void
goto_xy(
char
x,
char
y)
{
asm mov ah,
2
asm mov dl,x
asm mov dh,y
asm mov bh,
0
asm
int
10h
}
/**/
/*
----------------------------显示的关闭与开启-----------------------------
*/
#define
CLOSE 0x1201
#define
OPEN 0x1200
void
video(
int
mode)
{
asm mov bl,36h
asm mov ax,mode
asm
int
10h
}
/**/
/*
---------------------------文本模式的直接写屏技术------------------------
*/
int
video_mode(
void
)
{
union REGS r;
r.h.ah
=
15
;
return
int86(
0x10
,
&
r,
&
r)
&
255
;
}
char
far
*
set_v_ptr()
{
int
vmode;
char
far
*
vid_mem;
vmode
=
video_mode();
if
((vmode
!=
2
)
&&
(vmode
!=
3
)
&&
(vmode
!=
7
))
{
printf(
"
Video must be in 80 column text mode!
"
);
exit(
1
);
}
if
(vmode
==
7
) vid_mem
=
(
char
far
*
)
0xb0000000
;
else
vid_mem
=
(
char
far
*
)
0xb8000000
;
return
vid_mem;
}
void
write_char(
char
far
*
vid_mem,
int
x,
int
y,
char
ch,
int
attrib)
{
char
far
*
v;
v
=
vid_mem;
v
+=
(y
*
160
)
+
x
*
2
;
*
v
++=
ch;
*
v
=
attrib;
}
void
write_string(
char
far
*
vid_mem,
int
x,
int
y,
char
*
string
,
int
color)
{
int
i;
for
(i
=
0
;i
<
strlen(
string
);i
++
)
write_char(vid_mem,x
+
i,y,
*
(
string
+
i),color);
}
int
read_color(
char
far
*
vid_mem,
int
x,
int
y)
{
char
far
*
v;
v
=
vid_mem;
v
+=
(y
*
160
)
+
x
*
2
;
return
*
(
++
v);
}
char
read_char(
char
far
*
vid_mem,
int
x,
int
y)
{
char
far
*
v;
v
=
vid_mem;
v
+=
(y
*
160
)
+
x
*
2
;
return
*
v;
}
/**/
/*
-------------------------TVGA直接写屏图形引擎--------------------------
*/
void
_setgraphmode(
int
mode,
int
*
xmax,
int
*
ymax)
{
union REGS regs;
unsigned
char
video;
switch
(mode)
{
case
0
: video
=
0x5c
;
*
xmax
=
640
;
*
ymax
=
400
;
break
;
//
640x400
case
1
: video
=
0x5d
;
*
xmax
=
640
;
*
ymax
=
480
;
break
;
//
640x480
case
2
: video
=
0x5e
;
*
xmax
=
800
;
*
ymax
=
600
;
break
;
//
800x600
case
3
: video
=
0x62
;
*
xmax
=
1024
;
*
ymax
=
768
;
break
;
//
1024x768
default
:video
=
0x5d
;
*
xmax
=
640
;
*
ymax
=
480
;
break
;
//
Default: 640x480
}
regs.h.ah
=
0
;
regs.h.al
=
video;
int86(
0x10
,®s,®s);
outportb(
0x3c4
,
0x0b
);
inportb(
0x3c5
);
return
;
}
void
_putpixel(
int
x,
int
y,
int
color,
int
xmax)
{
unsigned
long
int
result
=
y;
char
far
*
offset;
char
temp;
result
*=
xmax;
result
+=
x;
offset
=
(
char
far
*
)MK_FP(
0xa000
,(unsigned)result
&
0xffff
);
outportb(
0x3c4
,
0x0e
);
temp
=
((result
>>
16
)
&
0x0f
)
^
0x02
;
outportb(
0x3c5
,temp);
temp
=*
offset;
*
offset
=
(
char
)color;
return
;
}
int
_getpixel(
int
x,
int
y,
int
xamx)
{
unsigned
long
int
result
=
y;
char
far
*
offset;
char
temp;
result
*=
xmax;
result
+=
x;
offset
=
(
char
far
*
)MK_FP(
0xa000
,(unsigned)result
&
0xffff
);
outportb(
0x3c4
,
0x0e
);
temp
=
((result
>>
16
)
&
0x0f
)
^
0x02
;
outportb(
0x3c5
,temp);
temp
=*
offset;
return
(
int
)temp;
}
void
_closegraph()
{
union REGS regs;
regs.h.ah
=
0x00
;
regs.h.al
=
0x03
;
int86(
0x10
,®s,®s);
return
;
}
void
_outtextxy(
int
x,
int
y,
char
far
*
string
,
int
color,
int
xmax)
{
register
int
i,j;
char
huge
*
ptr;
int
k
=
0
;
while
(
string
[k]
!=
'
\0
'
)
{
ptr
=
(
char
huge
*
)MK_FP(
0xf000
,
0xfa6e
+
(
string
[k]
<<
3
));
for
(i
=
0
;i
<
8
;i
++
)
for
(j
=
0
;j
<
8
;j
++
)
if
((ptr[i]
&
(
0x80
>>
j))
!=
0
)
_putpixel(x
+
(k
<<
3
)
+
j,y
+
i,color,xmax);
k
++
;
}
return
;
}
int
_couttextxy(FILE
*
library,
int
x,
int
y,unsigned
char
far
*
string
,
char
color,
int
xmax)
{
register
int
i,j;
unsigned
long
int
locate;
int
k
=
0
;
char
l
=
0
,buffer[
32
];
if
(library
==
NULL)
return
0
;
while
(
string
[k]
!=
'
\0
'
)
{
locate
=
(
string
[k]
-
161
)
*
94
+
string
[k
+
1
]
-
161
;
fseek(library,(
long
int
)locate
*
32
,SEEK_SET);
fread(buffer,
32
,
sizeof
(
char
),library);
k
+=
2
;
for
(i
=
0
;i
<
16
;i
++
)
for
(j
=
0
;j
<
2
;j
++
)
{
l
=
buffer[i
*
2
+
j];
if
((l
&
0x80
)
!=
0
) _putpixel(x
+
j
*
8
,y
+
i,color,xmax);
if
((l
&
0x40
)
!=
0
) _putpixel(x
+
j
*
8
+
1
,y
+
i,color,xmax);
if
((l
&
0x20
)
!=
0
) _putpixel(x
+
j
*
8
+
2
,y
+
i,color,xmax);
if
((l
&
0x10
)
!=
0
) _putpixel(x
+
j
*
8
+
3
,y
+
i,color,xmax);
if
((l
&
0x08
)
!=
0
) _putpixel(x
+
j
*
8
+
4
,y
+
i,color,xmax);
if
((l
&
0x04
)
!=
0
) _putpixel(x
+
j
*
8
+
5
,y
+
i,color,xmax);
if
((l
&
0x02
)
!=
0
) _putpixel(x
+
j
*
8
+
6
,y
+
i,color,xmax);
if
((l
&
0x01
)
!=
0
) _putpixel(x
+
j
*
8
+
7
,y
+
i,color,xmax);
}
x
+=
16
;
}
return
1
;
}
#if
defined(TVGAMOUSE)
char
image[
55
];
char
cursorshape[
55
]
=
{
14
,
14
,
14
,
14
,
0
,
14
,
14
,
0
,
0
,
14
,
14
,
0
,
0
,
0
,
14
,
14
,
0
,
0
,
0
,
0
,
14
,
14
,
0
,
0
,
0
,
0
,
0
,
14
,
14
,
0
,
0
,
0
,
0
,
0
,
0
,
14
,
14
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
14
,
14
,
14
,
14
,
14
,
14
,
14
,
14
,
14
,
14
,
14
}
;
void
_putimage(
int
x,
int
y)
{
int
i,j,k
=
0
;
for
(j
=
y;j
<
y
+
10
;j
++
)
for
(i
=
x;i
-
x
<
j
-
y
+
1
;i
++
)
{
_putpixel(i,j,image[k
++
]);
}
return
;
}
void
cursor(
int
x,
int
y)
{
static
int
cf
=
0
,oldx
=-
1
,oldy
=-
1
;
if
(
!
cf) cf
=
1
;
else
if
(x
!=
oldx
||
y
!=
oldy) _putimage(oldx,oldy);
if
(x
!=
oldx
||
y
!=
oldy) draw(x,y);
oldx
=
x;oldy
=
y;
return
;
}
#endif
/**/
/*
-------------------------------------------------------------------------
*/
查看全文
相关阅读:
vue中使用v-bind="$attrs"和v-on="$listeners"进行多层组件通信
django2 用iframe标签完成 网页内嵌播放b站视频功能
django 分类搜索(根据不同的单选框,改变form提交的地址)
python datetime 字符串 时间戳
django 前端模板继承显示model中使用choices的字段
django2用模板代码图标字体丢失报404 cJZKeOuBrn4kERxqtaUH3T8E0i7KZn-EPnyo3HZu7kw.woff
在views中引用UserProfile报错RuntimeError: Model class apps.users.models.UserProfile doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
python3+django2 开发易语言网络验证(下)
腾讯云centos安装python3.6和pip
windows使用python原生组件包获取系统日志信息
原文地址:https://www.cnblogs.com/zhangyin/p/650869.html
最新文章
剑指 Offer 31. 栈的压入、弹出序列
打印序列的所有出栈顺序(回溯法)及复杂度分析(卡特兰数)
剑指 Offer 30. 包含min函数的栈
剑指 Offer 29. 顺时针打印矩阵
在TFS 2013的敏捷组合管理中添加积压工作
为Visual Studio添加一个“编码的UI测试生成器”的快捷方式
洛谷P3224 [HNOI2012]永无乡
bzoj2683 简单题
AC自动机
codevs3002 石子归并3
热门文章
四边形不等式优化dp
Java中使用Jacob实现Windows下语音合成并生成音频文件
HTML5中使用SpeechSynthesisAPI实现语音合成
MobileIMSDK怎样将Java服务端运行起来以及打成jar包运行
AndroidStudio中调试时一直显示waiting for debugger
Eclipse安装低版本4.3并安装FatJar打包插件来打包引用第三方jar包的项目成jar包
Android中怎样使用createTempFile实现将字节数据创建到临时文件并转换成FileOutputStream和FileInputStream
Android中怎样使用MediaPlayer播放byte数组音频文件
Android中怎样调用自带的Base64实现文件与字符串的编码和解码
AndroidStudio中将项目运行在模拟器中提示:The currently selected variant "debug" uses split APKs, but none of the 1 split apks...
Copyright © 2011-2022 走看看