⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 textout.c

📁 源程序是在VisualDSP环境下开发出来的
💻 C
字号:
/******************************************************************

** 文件名:textout.c

** Copyright (c) 1998-1999 *********公司技术开发部

** 创建人:

** 日 期:2003.03.11

** 修改人:

** 日 期:2003.05.25

** 描 述:用于在屏幕上产生各种字符、数字、字符串的函数的定义

** 版 本:

******************************************************************/
#include "hddamacros.h"
#include <stdio.h>
#include "globalvar.h"
#include <math.h>
/*****************************************************************

** 函数名:PutChar

** 输 入: char c,int x,int y,int color,int nFlags

** c---字符的ASCII码

** x---字符的x坐标,如果是左对齐输出,基准点在左上角。如果是右对齐输出,基准点在右上角。

** y---字符的y坐标

** color---字符的颜色,是调色板的索引值

** nFlags---字符的属性

** 输 出: 无

** 功能描述:输出单个字符或符号

** 全局变量:g_nCharHeight,g_nCharWidth---输出字符的高和宽,本函数的返回值

** 调用模块:asmputchar()

** 作 者:

** 日 期:2003.03.11

** 修 改:

** 日 期:2003.05.25

** 版 本:

****************************************************************/
void PutChar(char c,int x,int y,int color,int nFlags)
{
int *pLib;
if(c<0||c>255)
{
	//error character	
}
//如果是无效字符或空格
if((pLib=g_pCharIndex[c])==0)
{
	g_nCharWidth=12;
	g_nCharHeight=21;
	if(nFlags&BIGFONT)
	{g_nCharWidth*=2;g_nCharHeight*=2;}
	return;
}

//如果字符需要闪烁,并且正处于闪烁的消失期,则取得字高字宽后直接返回
if((nFlags&BLINKING)&&g_nBlinkCounter<0) 
{
	g_nCharHeight=*(pLib+1);
	g_nCharWidth=*(pLib+2);
}
else
{
	if(nFlags&BIGFONT)
		asmbigchar(x,y,color,pLib,nFlags);
	else
		asmputchar(x,y,color,pLib,nFlags);
}
return;	
}

/*****************************************************************

** 函数名:StringOut

** 输 入: char* str,int x,int y,int color,int nFlags

** str---要输出的字符串的指针

** x---字符串的x坐标,如果是左对齐或垂直输出,基准点在左上角。如果是右对齐输出,基准点在右上角。

** y---字符串的y坐标

** color---数字的颜色,是调色板的索引值

** nFlags---字符串的属性

** 输 出: 	如果是左对齐输出,返回字符串右上角的x坐标
			如果是右对齐输出,返回字符串左上角的x坐标
			如果是垂直输出,返回字符串底部的y坐标

** 功能描述:输出一个字符串

** 全局变量:g_nCharHeight,g_nCharWidth

** 调用模块:PutChar()

** 作 者:

** 日 期:2003.03.11

** 修 改:

** 日 期:2003.05.25

** 版 本:字符串不能右对齐输出

****************************************************************/

int StringOut(char* str,int x,int y,int color,int nFlags)
{
char c;
int ntemp=0;
//如果字符串需要垂直排列
if(nFlags&VERTICALSTRING)
{
	while(c=*(str++))
		{
			PutChar(c,x,y,color,nFlags);
			y+=g_nCharHeight;
		}
	return y;
}
//如果字符串需要向右对齐
else if(nFlags&RIGHTALIGN)
	{
//找到字符串的最后一个字符和字符的个数
		while(*(str++))
		{
			ntemp++;
		}
		str-=2;
		while(ntemp--)
		{
			PutChar(*(str--),x,y,color,nFlags);x-=g_nCharWidth;
		}
	}
//如果字符串需要向左对齐
	else
	{
		while(c=*(str++))
			{
				PutChar(c,x,y,color,nFlags);x+=g_nCharWidth;
			}	
	}
return x;
}

/*****************************************************************

** 函数名:Int2Str

** 输 入: int source,int x,int y,int color,int nFlags,int nbits

** source---要输出的正整数值,如果是负数取绝对值后输出

** x---数字的x坐标,如果是左对齐输出,基准点在左上角。如果是右对齐输出,基准点在右上角。

** y---数字的y坐标

** color---数字的颜色,是调色板的索引值

** nFlags---字符串的属性

** nbits---数字的位数,如大于数字的实际位数,在数字前加零。否则按实际位数输出

** 输 出: 	如果是左对齐输出,返回数字右上角的x坐标
			如果是右对齐输出,返回数字左上角的x坐标
			如果是垂直输出,返回数字底部的y坐标


** 功能描述:输出一个正整数

** 全局变量:无

** 调用模块:StringOut()

** 作 者:

** 日 期:2003.03.11

** 修 改:

** 日 期:2003.05.25

** 版 本:

****************************************************************/

int Int2Str(int source,int x,int y,int color,int nFlags,int nbits)
{
char *p,*p1;
char str[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int temp;
//如果是负数则取绝对值
temp=source=((source>0)?source:-source);
//指向str的最后一个有效字符	
p=str+19;
while(source/=10)
{
	*(--p)=temp-source*10+'0';
	temp=source;nbits--;
}
*(--p)=temp+'0';nbits--;
//如果nbits大于数字的实际位数,在数字前加零
for(;nbits>0;nbits--)
{
	*(--p)='0';
}
return StringOut(p,x,y,color,nFlags);
}

/*****************************************************************

** 函数名:Float2Str

** 输 入: float source,int x,int y,int color,int nFlags,int nbits

** source---要输出的正浮点数值,如果是负数取绝对值后输出

** x---数字的x坐标,如果是左对齐输出,基准点在左上角。如果是右对齐输出,基准点在右上角。

** y---数字的y坐标

** color---数字的颜色,是调色板的索引值

** nFlags---字符串的属性

** nbits---小数点后要精确到的位数,如果小于等于零,精确到小数点后两位,否则按nbits的值精确

** 输 出: 	如果是左对齐输出,返回数字右上角的x坐标
			如果是右对齐输出,返回数字左上角的x坐标
			如果是垂直输出,返回数字底部的y坐标


** 功能描述:输出一个正浮点数

** 全局变量:无

** 调用模块:Int2Str(),PutChar()

** 作 者:

** 日 期:2003.03.11

** 修 改:

** 日 期:2003.05.25

** 版 本:

****************************************************************/

int Float2Str(float source,int x,int y,int color,int nFlags,int nbits)
{
int intsource=source=((source>0)?source:-source);
//如果字符串需要垂直排列
if(nFlags&VERTICALSTRING)
{
	//调用Int2Str输出source的整数部分
	y=Int2Str(intsource,x,y,color,nFlags,0);
	//输出小数点
	PutChar('.',x,y,color,nFlags);
	y+=g_nCharHeight;
	//如果nbits小于等于零,精确到小数点后两位	
	if(nbits<=0) nbits=2;
	//调用Int2Str输出source的小数部分
	y=Int2Str((source-intsource)*pow(10,nbits),x,y,color,nFlags,nbits);
	return y;
}
else
{
	//如果是左对齐,先输出整数部分和小数点
	if(!(nFlags&RIGHTALIGN))
	{
	//调用Int2Str输出source的整数部分
		x=Int2Str(intsource,x,y,color,nFlags,0);
	//输出小数点
		PutChar('.',x,y,color,nFlags);
		x+=g_nCharWidth;
	}
	//如果nbits小于等于零,精确到小数点后两位	
	if(nbits<=0) nbits=2;
	//调用Int2Str输出source的小数部分
	x=Int2Str((source-intsource)*pow(10,nbits),x,y,color,nFlags,nbits);
	//如果是右对齐,还有小数点和整数部分要输出
	if(nFlags&RIGHTALIGN)
	{
		//输出小数点
		PutChar('.',x,y,color,nFlags);
		x-=g_nCharWidth;
		//调用Int2Str输出source的整数部分
		x=Int2Str(intsource,x,y,color,nFlags,0);
	}
	return x;
}
}

/*****************************************************************

** 函数名:ConfigBlink

** 输 入: int exist,int vanish

** exist---一个周期中字符或图形在屏幕上出现的时间,以帧为单位

** vanish---一个周期中字符或图形在屏幕上消失的时间,以帧为单位

** 输 出: 	无

** 功能描述:配置闪烁的频率

** 全局变量:blinkexisttime;blinkvanishtime;

** 调用模块:无

** 作 者:

** 日 期:2003.03.11

** 修 改:

** 日 期:2003.05.25

** 版 本:2.0

****************************************************************/

void ConfigBlink(int exist,int vanish)
{
g_nBlinkExistTime=exist;
g_nBlinkVanishTime=vanish;
return;
}

/*****************************************************************

** 函数名:GenerateCharIndex

** 输 入: 无

** 输 出: 	无

** 功能描述:按字符的ASCII码值生成各字符在字符库中位置的索引

** 全局变量:

** 调用模块:无

** 作 者:

** 日 期:2003.03.11

** 修 改:

** 日 期:2003.05.25

** 版 本:2.0

****************************************************************/

void GenerateCharIndex(void)
{
int i;int* pLib=g_nCharLib;
//先把所有的索引值设为零,索引值为零表示字符库中无此字符
for(i=0;i<256;i++)
{
	g_pCharIndex[i]=0;
}
//数字,字母和符号,NUMOFCHARINLIB是字符库中数字,字母和符号的总个数
for(i=0;i<NUMOFCHARINLIB;i++)
{
	//每个字符的数据中的第一个是该字符数据的个数,只在建索引时要用,以后都不会再用所以索引直接指向该位置的下一个位置
	//g_cCharLibIndex[i]是字符库中第i个字符的ASCII码值
	g_pCharIndex[g_cCharLibIndex[i]]=pLib+1;
	//指向字符库中下一个字符的开头
	pLib+=*(pLib);
}
pLib=g_nChineseCharLib;
//汉字,NUMOFCHN是汉字库中汉字的个数
for(i=0;i<NUMOFCHN;i++)
{
	//汉字的ASCII值从128开始顺序排列
	g_pCharIndex[i+128]=pLib+1;
	//指向汉字库中下一个汉字的数据的开头
	pLib+=*(pLib);
}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -