设为首页 加入收藏

TOP

256色汉字显示程序
2014-11-23 21:36:48 】 浏览:638
Tags:256 汉字 显示 程序

  /*
  CC256.C -- 256色汉字显示程序
  */
  #include "dos.h"
  #include "stdio.h"
  #include "conio.h"
  FILE *fp;
  void OpenLIB(void);
  void CC256(int, int, int, char *Str);
  void ErrMsg();
  void InitScr();
  void RstScr();
  void PutPoint(int x, int y, int Color);
  void Quit();
  int main(void)
  {
  char *Str = "谢谢您使用本书";
  OpenLIB();
  InitScr();
  CC256(70, 80, 2, Str);
  getch();
  Quit();
  return 0;
  }
  void InitScr()
  {
  union REGS In;
  In.x.ax = 0x13; /*进入13H模式 */
  int86(0x10, &In, &In);
  }
  void RstScr()
  {
  union REGS In;
  In.x.ax = 0x03; /* 退出13H模式 */
  int86(0x10, &In, &In);
  }
  void OpenLIB(void) /* 打开24点阵宋体字库 */
  {
  if ((fp = fopen("c:\\ucdos\\clib24s", "rb")) == NULL) ErrMsg();
  }
  void CC256(int x, int y, int Wid, char *Str)
  {
  unsigned Zcode, Bcode; /* 区码, 位码 */
  int i, j, k, Rec, Color;
  long Len;
  char Buf[72];
  while (*Str) /* 直到字串显示完 */
  {
  if ((*Str & 0x80) && (*(Str+1) &0x80)) /* 是汉字 */
  {
  Zcode = (*Str-0xa1) & 0x07f; /* 区码 */
  Bcode = (*(Str+1)-0xa1) & 0x07f; /* 位码 */
  Rec = Zcode*94+Bcode; /* 记录号 */
  Len = Rec*72L; /* 在字库中位置 */
  fseek(fp, Len, SEEK_SET);
  fread (Buf, 1, 72, fp); /* 72字节 */
  for (i = 0; i < 24; i++)
  for (j = 0; j < 3; j++)
  for (k = 0; k < 8; k++)
  if (Buf[i*3+j] >> (7-k) & 1)
  {
  Color = y+j*8+k-46;
  PutPoint(x+i, y+j*8+k, Color);
  }
  x = x+24+Wid;
  Str += 2;
  }
  }
  return;
  }
  /* 直接写视频缓冲区 */
  void PutPoint(int x, int y, int Color) /* 画点函数 */
  {
  char far *p;
  p = (char far *) (0x0a0000000L);
  * (x+y*320+p) = Color;
  }
  void Quit()
  {
  RstScr();
  fcloseall();
  }
  void ErrMsg()
  {
  printf("Open LIB File Error!"); 
  getch();
  Quit();
  }


  相关链接:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇一个用C++编写的五子棋游戏 下一篇俄罗斯方块:程序编写详解

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目