总览
函数声明 |
函数功能 |
void bar(int left, int top, int right, int bottom); |
画一个二维条形图 |
void bar3d(int left, int top, int right, int bottom, int depth, int topflag); |
画一个三维条形图 |
int bdos(int dosfun, unsigned dosdx, unsigned dosal); |
DOS系统调用 |
int bdosptr(int dosfun, void *argument, unsigned dosal); |
DOS系统调用 |
int bioscom(int cmd, char abyte, int port); |
串行I/O通信 |
int biosdisk(int cmd, int drive, int head, int track, int sector, int nsects, void *buffer); |
软硬盘I/O |
int bioskey(int cmd); |
直接使用BIOS服务的键盘接口 |
int biosmemory(void); |
返回存储块大小,以K为单位 |
int biosprint(int cmd, int byte, int port); |
直接使用BIOS服务的打印机I/O |
long biostime(int cmd, long newtime); |
读取或设置BIOS时间 |
int brk(void *endds); |
用来改变分配给调用程序的数据段的空间数量 |
void *bsearch(const void *key, const void *base, size_t *nelem, size_t width, int(*fcmp)(const void *, const *)); |
二分法搜索 |
1. bar
1.1 函数说明
函数声明 |
函数功能 |
void bar(int left, int top, int right, int bottom); |
画一个二维条形图 |
关注点: 绘制二维条形图需要左上角和右下角的坐标。 left 指定左上角的 X 坐标,top 指定左上角的 Y 坐标,right 指定右下角的 X 坐标,bottom 指定右下角的 Y 坐标。 当前填充图案和填充颜色用于填充条形图。 要更改填充图案和填充颜色,请使用 setfillstyle。
1.2 演示示例
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
int main(void)
{
int gdriver = DETECT, gmode, errorcode;
int midx, midy, i;
initgraph(&gdriver, &gmode, "");
errorcode = graphresult();
if (errorcode != grOk)
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}
midx = getmaxx() / 2;
midy = getmaxy() / 2;
for (i=SOLID_FILL; i<USER_FILL; i++)
{
setfillstyle(i, getmaxcolor());
bar(midx-50, midy-50, midx+50, midy+50);
getch();
}
closegraph();
return 0;
}
1.3 运行结果
2. bar3d
2.1 函数说明
函数声明 |
函数功能 |
void bar3d(int left, int top, int right, int bottom, int depth, int topflag); |
画一个三维条形图 |
关注点: 绘制三维条形图需要条形左上角和右下角的坐标。 left 指定左上角的 X 坐标,top 指定左上角的 Y 坐标,right 指定右下角的 X 坐标,bottom 指定右下角的 Y 坐标,depth 指定条的深度 以像素为单位,topflag 确定是否将 3 维顶部放置在条形图上(如果它不为零,则放置否则不放置)。 当前填充图案和填充颜色用于填充条形图。 要更改填充图案和填充颜色,请使用 setfillstyle。
2.2 演示示例
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
int main(void)
{
int gdriver = DETECT, gmode, errorcode;
int midx, midy, i;
initgraph(&gdriver, &gmode, "");
errorcode = graphresult();
if (errorcode != grOk)
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}
midx = getmaxx() / 2;
midy = getmaxy() / 2;
for (i=EMPTY_FILL; i<USER_FILL; i++)
{
setfillstyle(i, getmaxcolor());
bar3d(midx-50, midy-50, midx+50, midy+50, 10, 1);
getch();
}
closegraph();
return 0;
}
2.3 运行结果
3. bdos
3.1 函数说明
函数声明 |
函数功能 |
int bdos(int dosfun, unsigned dosdx, unsigned dosal); |
DOS系统调用 |
3.2 演示示例
#include <stdio.h>
#include <dos.h>
char current_drive(void)
{
char curdrive;
curdrive = bdos(0x19, 0, 0);
return('A' + curdrive);
}
int main(void)
{
printf("The current drive is %c:\n", current_drive());
return 0;
}
4. bdosptr
4.1 函数说明
函数声明 |
函数功能 |
int bdosptr(int dosfun, void *argument, unsigned dosal); |
DOS系统调用 |
4.2 演示示例
#include <string.h>
#include <stdio.h>
#include <dir.h>
#include <dos.h>
#include <errno.h>
#include <stdlib.h>
#define BUFLEN 80
int main(void)
{
char buffer[BUFLEN];
int test;
printf("Enter full pathname of a directory\n");
gets(buffer);
test = bdosptr(0x3B,buffer,0);
if(test)
{
printf("DOS error message: %d\n", errno);
exit (1);
}
getcwd(buffer, BUFLEN);
printf("The current directory is: %s\n", buffer);
return 0;
}
5. bioscom
5.1 函数说明
函数声明 |
函数功能 |
int bioscom(int cmd, char abyte, int port); |
串行I/O通信 |
5.2 演示示例
#include <bios.h>
#include <conio.h>
#define COM1 0
#define DATA_READY 0x100
#define TRUE 1
#define FALSE 0
#define SETTINGS ( 0x80 | 0x02 | 0x00 | 0x00)
int main(void)
{
int in, out, status, DONE = FALSE;
bioscom(0, SETTINGS, COM1);
cprintf("... BIOSCOM [ESC] to exit ...\n");
while (!DONE)
{
status = bioscom(3, 0, COM1);
if (status & DATA_READY)
if ((out = bioscom(2, 0, COM1) & 0x7F) != 0)
putch(out);
if (kbhit())
{
if ((in = getch()) == '\x1B')
DONE = TRUE;
bioscom(1, in, COM1);
}
}
return 0;
}
6. biosdisk
6.1 函数说明
函数声明 |
函数功能 |
int biosdisk(int cmd, int drive, int head, int track, int sector, int nsects, void *buffer); |
软硬盘I/O |
6.2 演示示例
#include <bios.h>
#include <stdio.h>
int main(void)
{
int result;
char buffer[512];
printf("Testing to see if drive a: is ready\n");
result = biosdisk(4,0,0,0,0,1,buffer);
result &= 0x02;
(result) ? (printf("Drive A: Ready\n")) : (printf("Drive A: Not Ready\n"));
return 0;
}
7. bioskey
7.1 函数说明
函数声明 |
函数功能 |
int bioskey(int cmd); |
直接使用BIOS服务的键盘接口 |
7.2 演示示例
#include <stdio.h>
#include <bios.h>
#include <ctype.h>
#define RIGHT 0x01
#define LEFT 0x02
#define CTRL 0x04
#define ALT 0x08
int main(void)
{
int key, modifiers;
while (bioskey(1) == 0);
key = bioskey(0);
modifiers = bioskey(2);
if (modifiers)
{
printf("[");
if (modifiers & RIGHT) printf("RIGHT");
if (modifiers & LEFT) printf("LEFT");
if (modifiers & CTRL) printf("CTRL");
if (modifiers & ALT) printf("ALT");
printf("]");
}
if (isalnum(key & 0xFF))
printf("'%c'\n", key);
else
printf("%#02x\n", key);
return 0;
}
8. biosmemory
8.1 函数说明
函数声明 |
函数功能 |
int biosmemory(void); |
返回存储块大小,以K为单位 |
8.2 演示示例
#include <stdio.h>
#include <bios.h>
int main(void)
{
int memory_size;
memory_size = biosmemory();
printf("RAM size = %dK\n",memory_size);
return 0;
}
9. biosprint
9.1 函数说明
函数声明 |
函数功能 |
int biosprint(int cmd, int byte, int port); |
直接使用BIOS服务的打印机I/O |
9.2 演示示例
#include <stdio.h>
#include <conio.h>
#include <bios.h>
int main(void)
{
#define STATUS 2
#define PORTNUM 0
int status, abyte=0;
printf("Please turn off your printer. Press any key to continue\n");
getch();
status = biosprint(STATUS, abyte, PORTNUM);
if (status & 0x01)
printf("Device time out.\n");
if (status & 0x08)
printf("I/O error.\n");
if (status & 0x10)
printf("Selected.\n");
if (status & 0x20)
printf("Out of paper.\n");
if (status & 0x40)
printf("Acknowledge.\n");
if (status & 0x80)
printf("Not busy.\n");
return 0;
}
10. biostime
10.1 函数说明
函数声明 |
函数功能 |
long biostime(int cmd, long newtime); |
读取或设置BIOS时间 |
10.2 演示示例
#include <stdio.h>
#include <bios.h>
#include <time.h>
#include <conio.h>
int main(void)
{
long bios_time;
clrscr();
cprintf("The number of clock ticks since midnight is:\r\n");
cprintf("The number of seconds since midnight is:\r\n");
cprintf("The number of minutes since midnight is:\r\n");
cprintf("The number of hours since midnight is:\r\n");
cprintf("\r\nPress any key to quit:");
while(!kbhit())
{
bios_time = biostime(0, 0L);
gotoxy(50, 1);
cprintf("%lu", bios_time);
gotoxy(50, 2);
cprintf("%.4f", bios_time / CLK_TCK);
gotoxy(50, 3);
cprintf("%.4f", bios_time / CLK_TCK / 60);
gotoxy(50, 4);
cprintf("%.4f", bios_time / CLK_TCK / 3600);
}
return 0;
}
11. brk
11.1 函数说明
函数声明 |
函数功能 |
int brk(void *endds); |
用来改变分配给调用程序的数据段的空间数量 |
11.2 演示示例
#include <stdio.h>
#include <alloc.h>
int main(void)
{
char *ptr;
printf("Changing allocation with brk()\n");
ptr = malloc(1);
printf("Before brk() call: %lu bytes free\n", coreleft());
brk(ptr+1000);
printf(" After brk() call: %lu bytes free\n", coreleft());
return 0;
}
12. bsearch
12.1 函数说明
函数声明 |
函数功能 |
void *bsearch(const void *key, const void *base, size_t *nelem, size_t width, int(*fcmp)(const void *, const *)); |
二分法搜索 |
12.2 演示示例
#include <stdlib.h>
#include <stdio.h>
#define NELEMS(arr) (sizeof(arr) / sizeof(arr[0]))
int numarray[] = {
1, 2, 3, 5, 6, 8, 9, 10, 12, 14};
int numeric (const int *p1, const int *p2)
{
return(*p1 - *p2);
}
int lookup(int key)
{
int *itemptr;
itemptr = (int(*))bsearch(&key, numarray, NELEMS(numarray), sizeof(int), (int(*)(const void *,const void *))numeric);
return (itemptr != NULL);
}
int main(void)
{
int a;
printf("Please input key: ");
scanf("%d", &a);
if (lookup(a))
printf("%d is in the table.\n", a);
else
printf("%d isn't in the table.\n", a);
return 0;
}
12.3 运行结果
参考
- [API Reference Document]
- [c语言中的 bar 函数]
- [c语言中的 bar3d 函数]