C语言函数 - B开头


函数名: bar

功  能: 画一个二维条形图

用  法: void far bar(int left, int top, int right, int bottom);

程序例:


#include <graphics.h>

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>


int main(void)

{

  /* request auto detection */

  int gdriver = DETECT, gmode, errorcode;

  int midx, midy, i;


  /* initialize graphics and local variables */

  initgraph(&gdriver, &gmode, "");


  /* read result of initialization */

  errorcode = graphresult();

  if (errorcode != grOk)  /* an error occurred */

  {

     printf("Graphics error: %s\n", grapherrormsg(errorcode));

     printf("Press any key to halt:");

     getch();

     exit(1); /* terminate with an error code */

  }


  midx = getmaxx() / 2;

  midy = getmaxy() / 2;


  /* loop through the fill patterns */

  for (i=SOLID_FILL; i<USER_FILL; i++)

  {

     /* set the fill style */

     setfillstyle(i, getmaxcolor());


     /* draw the bar */

     bar(midx-50, midy-50, midx+50,

        midy+50);


     getch();

  }


  /* clean up */

  closegraph();

  return 0;

}





函数名: bar3d

功  能: 画一个三维条形图

用  法: void far bar3d(int left, int top, int right, int bottom,

                      int depth, int topflag);

程序例:


#include <graphics.h>

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>


int main(void)

{

  /* request auto detection */

  int gdriver = DETECT, gmode, errorcode;

  int midx, midy, i;


  /* initialize graphics, local variables */

  initgraph(&gdriver, &gmode, "");


  /* read result of initialization */

  errorcode = graphresult();

  if (errorcode != grOk)  /* an error occurred */

  {

     printf("Graphics error: %s\n", grapherrormsg(errorcode));

     printf("Press any key to halt:");

     getch();

     exit(1); /* terminate with error code */

  }


  midx = getmaxx() / 2;

  midy = getmaxy() / 2;


  /* loop through the fill patterns */

  for (i=EMPTY_FILL; i<USER_FILL; i++)

  {

     /* set the fill style */

     setfillstyle(i, getmaxcolor());


     /* draw the 3-d bar */

     bar3d(midx-50, midy-50, midx+50, midy+50, 10, 1);


     getch();

  }


  /* clean up */

  closegraph();

  return 0;

}





函数名: bdos

功  能: DOS系统调用

用  法: int bdos(int dosfun, unsigned dosdx, unsigned dosal);

程序例:


#include <stdio.h>

#include <dos.h>


/* Get current drive as 'A', 'B', ... */

char current_drive(void)

{

  char curdrive;


  /* Get current disk as 0, 1, ... */

  curdrive = bdos(0x19, 0, 0);

  return('A' + curdrive);

}


int main(void)

{

  printf("The current drive is %c:\n", current_drive());

  return 0;

}





函数名: bdosptr

功  能: DOS系统调用

用  法: int bdosptr(int dosfun, void *argument, unsigned dosal);

程序例:


#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);

 /* See errno.h for error listings */

 exit (1);

     }


  getcwd(buffer, BUFLEN);

  printf("The current directory is: %s\n", buffer);


  return 0;

}





函数名: bioscom

功  能: 串行I/O通信

用  法: int bioscom(int cmd, char abyte, int port);

程序例:


#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;

}





函数名: biosdisk

功  能: 软硬盘I/O

用  法: int biosdisk(int cmd, int drive, int head, int track, int sector

      int nsects, void *buffer);

程序例:


#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;

}





函数名: biosequip

功  能: 检查设备

用  法: int biosequip(void);

程序例:


#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;

}





函数名: bioskey

功  能: 直接使用BIOS服务的键盘接口

用  法: int bioskey(int cmd);

程序例:


#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;


  /* function 1 returns 0 until a key is pressed */

  while (bioskey(1) == 0);


  /* function 0 returns the key that is waiting */

  key = bioskey(0);


  /* use function 2 to determine if shift keys were used */

  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("]");

  }

  /* print out the character read */

  if (isalnum(key & 0xFF))

     printf("'%c'\n", key);

  else

     printf("%#02x\n", key);

  return 0;

}




函数名: biosmemory

功  能: 返回存储块大小

用  法:int biosmemory(void);

程序例:


#include <stdio.h>

#include <bios.h>


int main(void)

{

  int memory_size;


  memory_size = biosmemory();  /* returns value up to 640K */

  printf("RAM size = %dK\n",memory_size);

  return 0;

}





函数名: biosprint

功  能: 直接使用BIOS服务的打印机I/O

用  法: int biosprint(int cmd, int byte, int port);

程序例:


#include <stdio.h>

#include <conio.h>

#include <bios.h>


int main(void)

{

  #define STATUS  2    /* printer status command */

  #define PORTNUM 0    /* port number for LPT1 */


  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;

}





函数名: biostime

功  能: 读取或设置BIOS时间

用  法: long biostime(int cmd, long newtime);

程序例:


#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;

}





函数名: brk

功  能: 改变数据段空间分配

用  法: int brk(void *endds);

程序例:


#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;

}





函数名: bsearch

功  能: 二分法搜索

用  法: void *bsearch(const void *key, const void *base, size_t *nelem,  size_t width, int(*fcmp)(const void *, const *));

程序例:


#include <stdlib.h>

#include <stdio.h>


#define NELEMS(arr) (sizeof(arr) / sizeof(arr[0]))


int numarray[] = {123, 145, 512, 627, 800, 933};


int numeric (const int *p1, const int *p2)

{

  return(*p1 - *p2);

}


int lookup(int key)

{

  int *itemptr;


  /* The cast of (int(*)(const void *,const void*))

     is needed to avoid a type mismatch error at

     compile time */

  itemptr = bsearch (&key, numarray, NELEMS(numarray),

     sizeof(int), (int(*)(const void *,const void *))numeric);

  return (itemptr != NULL);

}


int main(void)

{

  if (lookup(512))

     printf("512 is in the table.\n");

  else

     printf("512 isn't in the table.\n");


  return 0;

}