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

📄 stdio.c

📁 可以在嵌入式应用中
💻 C
字号:
#include <CsAgb.h>
#include <math.h>
#include <rb_math.h>
#include <ascii.h>
#include <rbasic.h>
#include <rb_data.h>
const char in_eng[]="E ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const char in_engs[]="E abcdefghijklmnopqrstuvwxyz";
const char in_num[]="N 1234567890E-.";
const char in_sybm[]="S +-*/=?\'\"<>()[]{}";
const char in_syb[]="S :;,.~`!@#$%^&*";
extern void line_list(struct comtree *com);
void rb_scroll()
{
   u8 i=0;
   for (i=0;i<15;i++)
   {
      CS_BackupScreenMem(&gScreen,0,i*10+10,239,i*10+19,VSAVE,MODE_3);
      CS_RestoreScreenMem(&gScreen,0,i*10,239,i*10+9,VSAVE,MODE_3);
   }
   r_box(0,150,239,159,rb_bg,1);
}

void print(u8 xp,u8 yp,u16 color,char ch)//显示单个字符
{
   u8 i,j;
   for (i=0;i<8;i++)
   for (j=0;j<8;j++)
   if (ascii[ch][i] & test[j]) *(mVRAM+xp+j+240*(yp+i))=color;
   else *(mVRAM+xp+j+240*(yp+i))=rb_bg;
   return;
}
void printf(u8 xp,u8 yp,u16 color, char *str)
{
   u8 i=0;
   while (*(str+i)!='\0')
   {
      print(xp+8*i,yp,color,*(str+i));
      i++;
   }
   return;
}

void prtchar(u16 color,char ch)//显示单个字符并移到光标
{
   if (ch=='\n') {rb_xp=0;rb_yp++;}
   else
   {
      print(rb_xp*8,rb_yp*10+2,color,ch);
      rb_xp++;
   }
   if (rb_xp==30) {rb_xp=0,rb_yp++;}
   if (rb_yp==16) {rb_yp=15;rb_scroll();}
}
void endl()
{
   prtchar(0,'\n');
}
void Vprint(u8 xp,u8 yp,u16 color,char *str)
{
   u16 i=0;
   u8 x=xp,y=yp;
   while (*(str+i)!='\0')
   {
      if (*(str+i)=='\n') {x=0;y++;i++;} //自动换行
      if (x>29) {x=0;y++;}
      if (y>15) {y=15;rb_scroll();}
      print(x*8,y*10+2,color,*(str+i));
      i++;
      x++;
   }
   rb_xp=x;
   rb_yp=y;
   if (rb_xp==30) {rb_xp=0,rb_yp++;}
   if (rb_yp>15) {rb_yp=15;rb_scroll();}
   return;
}
void Rprint(u16 color,char *str)
{
   Vprint(rb_xp,rb_yp,color,str);
}
void RBprint(char *str)
{
   Vprint(rb_xp,rb_yp,rb_co,str);
}
void prt_int_num(int num,u16 color)//显示整形数字
{
   u8 flag=(num<0);
   char str[11]="0000000000";
   u8 i;
   u32 temp=1000000000;
   num=abs(num);
   for (i=0;i<10;i++)
   {
      str[i]=num/temp+48;
      num=num%temp;
      temp=temp/10;
   }
   if (flag) prtchar(color,'-');
   i=0;
   while (str[i]=='0' && i<9) i++;
   Vprint(rb_xp,rb_yp,color,str+i);
}

void char_back()//删除屏幂上的一个字符
{
   if (rb_xp==0)
   {
      rb_xp=29;
      if (rb_yp>0) rb_yp--;
   }
   else rb_xp--;
   r_box(rb_xp*8,rb_yp*10+2,rb_xp*8+7,rb_yp*10+9,rb_bg,1);
}
void rb_input(char *str)
{
   u8 i=0;
   char *items[5]={in_eng,in_engs,in_num,in_sybm,in_syb};
   u8 select=0;
   u8 old=0,now=0;
   u8 done=1;
   u8 num;
   u8 xp=rb_xp,yp=rb_yp;
   CS_BackupScreenMem(&gScreen,0,147,239,159,VSAVE,MODE_3);
   while (TRUE)
   {
      if (done==1)
      {
         r_box(0,147,239,159,RGB(20,10,20),1);
         printf(5,150,RGB(30,30,30),items[select]);
         now=0;old=0;
         print(5+(now+2)*8,150,RGB(10,30,10),*(items[select]+now+2));
         done=0;
         num=strlen(items[select])-2;
      }
      if (done==2)
      {
         print(5+(old+2)*8,150,RGB(30,30,30),*(items[select]+old+2));
         print(5+(now+2)*8,150,RGB(10,30,10),*(items[select]+now+2));
         old=now;
         done=0;
      }
      CS_ReadKey();
      if (CS_IsKeyDown(KEY_R))
      {
         done=1;
         select=(select+1)%5;
      }
      else if(CS_IsKeyDown(KEY_L))
      {
         if (select==0) select=4;
         else select--;
         done=1;
      }
      else if(CS_IsKeyDown(KEY_LEFT))
      {
         if (now==0) now=num-1;
         else now--;
         done=2;
      }
      else if(CS_IsKeyDown(KEY_RIGHT))
      {
         now=(now+1)%num;
         done=2;
      }
      else if(CS_IsKeyDown(KEY_DOWN))
      {
         now=(now+num/4)%num;
         done=2;
      }
      else if(CS_IsKeyDown(KEY_UP))
      {
         if (now<num/4) now=num-1;
         else now=now-num/4;
         done=2;
      }
      else if(CS_IsKeyDown(KEY_A))
      {
         str[i]=*(items[select]+now+2);
         if (i<128) i++;
         str[i]='\0';
         Vprint(xp,yp,RGB(30,30,30),str);

      }
      else if(CS_IsKeyDown(KEY_SELECT))
      {
         str[i]=' ';
         if (i<128) i++;
         str[i]='\0';
         Vprint(xp,yp,RGB(30,30,30),str);
      }
      else if(CS_IsKeyDown(KEY_B))
      {
         if (i>0)
         {
            i--;
            str[i]='\0';
            char_back();
         }
      }
      else if(CS_IsKeyDown(KEY_START))
      {
         CS_RestoreScreenMem(&gScreen,0,147,239,159,VSAVE,MODE_3);
         return;
      }

   }
}
void show_float(double x,u16 color)
{
	char exp[11];
	u32 int_n;
	int index;
	char is_neg=(x<0.0);
	int i;
	char dot=0;
	char end=0;
	if (x==0.0) {prtchar(color,'0');return;}
	if (is_neg) prtchar(color,'-');
	x=abs(x);
	index=get_int(log10(x));
	x=x/power10(index);
	if (x>=10) {x=x/10;index++;}
	x=x+0.0000000001;
	for (i=0;i<10;i++)
	{
		exp[i]=48+(int)x;
		x=x-(int)x;
		x=x*10;
	}
	exp[10]='\0';
	end=9;
	for (i=9;i>=0;i--)
	{
		if (exp[i]!='0') {end=i;break;}
	}//冗余0的首位置
	if (index>=0 && index<9)
	{
		if (end<index) end=index;
		for (i=0;i<=end;i++)
		{
			prtchar(color,exp[i]);
			if (i==index && end!=index) prtchar(color,'.');
		}
	}
	else if(abs(index)>=9)
	{
		for (i=0;i<=end;i++)
		{
			prtchar(color,exp[i]);
			if (i==0) prtchar(color,'.');
		}
		if (end==0) prtchar(color,'0');
		prtchar(color,'E');
		prt_int_num(index,color);
	}
	else
	{
		dot=abs(index);
		for (i=0;i<dot;i++)
		{
			prtchar(color,'0');
		   if (i==0) prtchar(color,'.');
		}
		for (i=dot;i<=end+dot;i++) prtchar(color,exp[i-dot]);
	}
}
void paint_en(u8 xp,u8 yp,u16 color,char ch)
{
   u8 i,j;
   for (i=0;i<8;i++)
   for (j=0;j<8;j++)
   if (ascii[ch][i] & test[j]) *(mVRAM+xp+j+240*(yp+i))=color;
}
void paint_ch(u8 xp,u8 yp,u16 color,char *str)//汉字显示
{
   u32 loc=(str[0]-161)*94+str[1]-161;
   //u32 loc=15*94+3;
   u8 i;
   u8 j;
   u32 blit;
   loc=loc*20;
   for (i=0;i<10;i++)
   {
      blit=loc+i+i;
      for (j=0;j<8;j++)
      {
         if (testc[j]&gHzkBuf[blit]) *(mVRAM+(yp+i)*240+xp+j)=color;
      }
      for (j=8;j<10;j++)
      {
         if (testc[j-8]&gHzkBuf[blit+1]) *(mVRAM+(yp+i)*240+xp+j)=color;
      }
   }
}
void write(u8 xp,u8 yp,u16 color,char *str)//屏幂显示汉字(中英文混用)
{
   u32 i=0;
   while (str[i]!='\0')
   {
      if (str[i]>127)//是汉字
      {
         if (xp>229)
         {
            xp=0;yp=yp+12;
            if (yp>159) yp=0;
         }
         paint_ch(xp,yp,color,str+i);
         i=i+2;
         xp=xp+12;
      }
      else
      {
         if (xp>231)
         {
            xp=0;yp=yp+12;
            if (yp>159) yp=0;
         }
         paint_en(xp,yp+2,color,str[i]);
         i++;
         xp=xp+8;
      }
   }
}
void rb_report()//错误报告
{
   endl();
   if (rb_error)
   {
      Rprint(RGB(30,30,0),rb_error_content[rb_error-1]);
      Rprint(RGB(30,30,0)," IN ");
      prt_int_num(rb_now_line->line,RGB(0,30,30));
      endl();
      line_list(rb_now_line);
   }
   else Rprint(RGB(30,30,0),"OK.");
   endl();
}

⌨️ 快捷键说明

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