📄 sdrv_puts.c
字号:
/*
********************************************************************************
* ACTOS
* ui dirver show picture
*
* (c) Copyright 2002-2003, Actions Co,Ld.
* All Right Reserved
*
* File : Sdrv_PutS.c
* By : Rcmai
* Version: 1> v1.00 first version 10/17/2003 10:46PM
********************************************************************************
*/
#include "display.h"
#include "Drv_S6B33B0A.h"
#pragma memory=constseg(BBS_PUTS)
#pragma memory=default
#pragma memory=dataseg(BBD_PUTS)
#pragma memory=default
#pragma codeseg(BBC_PUTS)
//BYTE lineNum_sav;//行号记录
//如果一行都是small ascii则高度为8(默认),如有一行中有一个是汉字或是 large 模式 ascii
// 则高度都为 16
BYTE StrHeight = ASCII_SMALL_HEIGHT_DEF;//一行字的高度
////*******************************************************************************/
///*
//** FUNCTION: Sdrv_PutS
//**
//** Description: 在屏幕上输出一个字符串,如串的长度超过屏幕,则多出部分不显示
//** 指针停在最后一个能显示的字的下一个字符左上角,碰到回车或
//** 串尾时退出,碰到换行时从下一行开始显示
//** input
//** str: 字符串首址 ;
//** strlen: 字符串的长度
//**
//** output
//** none
//********************************************************************************/
non_banked char *Sdrv_PutS(const char *str, signed char strlen)
{
int code;
char result;
char *lastcharpt;//记录上一个字符的指针
BYTE lineNum_sav,rowNum_sav;//行号记录
lineNum_sav = region.y;
rowNum_sav = region.x;
/*
//判断要输出的行的高度
if (AsciiSelect == FONT_TYPE_SMALL)
{
StrHeight = ASCII_SMALL_HEIGHT_DEF;//一行字符的高度
}
else
{
StrHeight = ASCII_LARGE_HEIGHT_DEF;//一行字符的高度
}
*/
// 炬力更新为下面的
//判断要输出的行的高度
if (AsciiSelect == FONT_TYPE_SMALL)
{
StrHeight = CHINESE_HEIGHT_DEF1;//一行字符的高度
}
else
{
StrHeight = CHINESE_HEIGHT_DEF1;//一行字符的高度
}
while ( (*str != '\r') //碰到回车时退出
&& (*str != '\0') //碰到结束符时退出
&& (strlen != NULL) ) //碰到字符长度为0时退出
{
lastcharpt = str;
//下面是碰到换行符时要作换行处理
if (*str == '\n')
{
str++;
//region.x = 0;
region.x = rowNum_sav;
region.y += StrHeight;
lineNum_sav = region.y;//保存当前行顶的y轴坐标
if (AsciiSelect == FONT_TYPE_SMALL)
{
StrHeight = CHINESE_HEIGHT_DEF1;//一行字符的高度
}
else
{
StrHeight = CHINESE_HEIGHT_DEF1;//一行字符的高度
}
}
//汉字和ASCII的不同处理
if (*str >= FirstSectionCode)
{//汉字
code = *(int *)str;
str++;//汉字指针要比ASCII多加一,
StrHeight = CHINESE_HEIGHT_DEF1;//把当前行的高度设为汉字的高度
}
else
{//ASCII
code = *str;
//这里保证ascii码与汉字下对齐
/*
if (AsciiSelect == FONT_TYPE_SMALL)
{
region.y += (StrHeight-ASCII_SMALL_HEIGHT_DEF);
}
else
{
region.y += (StrHeight-ASCII_LARGE_HEIGHT_DEF);
}
*/
StrHeight = CHINESE_HEIGHT_DEF1;//把当前行的高度设为汉字的高度
}
str++;
result = Sdrv_PutChar(code);
if (!result) //输出字符
{
//当输出区域超出范围时退出
return lastcharpt;//返回上一个字符的指针,因为当前指针已加一了
}
(unsigned char)strlen--;//不理负号直接减(因为0xff时表示显示全部)
region.y = lineNum_sav;//恢复当前行顶y的轴坐标
//暂时不让某些地方显示过长
///if ( ((unsigned char)strlen > 200) && (region.x > 188) )
//if ( ((unsigned char)strlen > 128) && (region.x > 120) )
//{
// break;
//}
}
return str;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -