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

📄 to_txt.c

📁 redboy for gba 是BPNS为GBA编写的一个小软件。软件的邹形是BASIC高级语言解释执行器。几经修改和扩展
💻 C
字号:
#include <CsAgb.h>
#include <rbasic.h>
#include <rb_stdio.h>
#include <rb_string.h>
#include <rb_mem.h>
#include <Qgraph.h>
#include <graph.h>

#define LSTDAT 0x06012C00

#define int_tp 0
#define float_tp 1
#define str_tp 2
#define int_dim_tp 3
#define float_dim_tp 4
#define def_tp 5
#define mark_tp 6
#define error_tp 128
#define bg_id 128
#define end_tp 8

#define max_cnt 128 //最大注册个数
#define max_len 10 //最大长度
#define error_id 255 //错误标志

#define math_cnt 39
#define str_cnt 18
#define key_cnt 71

#define key_co RGB(5,20,30)
#define str_co RGB(30,30,0)
#define pop_co RGB(30,30,30)
#define def_co RGB(30,0,30)
#define mark_co RGB(30,0,0)

extern void show_text(char *tit,char *txt);
extern int basic_look(u32 loc);

const char rb_math_std[math_cnt][10]={
"SIN","COS","TAN","LOG","LN","POW","EXP","SQR","ABS","SGN",//10
"INT","ARCSIN","ARCCOS","ARCTAN","SINH","COSH","TANH","RND","TIME","PEEK",//20
"CSRLIN","POS","GETBG","GETCOR","GETPET","GETKEY","MAX","MIN","VAR","AVER",//30
"RGB","EOF","TELL","LEN","VAL","INSTR","ASC","CMP","CALCU",//39
};//数字标准函数
const char rb_str_std[str_cnt][10]={
"STR$","LEFT$","RIGHT$","MID$","CHR$","STRING$","REVERSE$","LOWSTR$","UPSTR$","REPLACE$",//10
"COVER$","CVSTR$","NOBLANK$","TROP$","STRMV$","INKEY$","CAT$","INSERT$"//18
};//标准字符串处理函数
const char rb_key_std[key_cnt][10]={
"LET","PRINT","INPUT","TAB","READ","DATA","RESTORE","END","STOP","REM",//10
"IF","THEN","ELSE","GOTO","ON","FOR","NEXT","TO","STEP","WHILE","WEND",//21
"BREAK","DEF","DIM","CLS","LOCATE","COLOR","SCREEN","DRAW","LINE","BOX",//31
"CIRCLE","WRITE","OPEN","AS","CLOSE","GET","CALL","POKE","DEL","PLAY","GOSUB",//42
"RET","WAIT","LOAD","SEEK","PUT","EDIT","TEXT","ELLIPSE","MVSCR","SVSCR",//52
"LDSCR","EXEC","SAVE","SORT","DEAMON","DEND","CLEAN","DCNT","DFRQ","SUB",//62
"BMP","QUAD","TRIAN","PUSH","POP","OUTPUT","APPEND","RANDOM","SWAP"//71
};//命令或语句关健词
const char rb_logic_std[4][10]={"NOT","AND","OR","XOR"}; //4
extern char _file[40];//选定文件
int to_txt(u8 *mes,char *str)
{
	int mp=0,sp=0;
	int i=0;
	int fg=0;
	char *p=NULL;
	while (mes[mp]!=end_tp)
	{
		if (mes[mp]=='\"')//是字符串;
		{
			str[sp]=mes[mp];
			sp++;
			mp++;
			while (mes[mp]!='\"')
			{
				str[sp]=mes[mp];
				sp++;
				mp++;
			}
			str[sp]=mes[mp];
			sp++;
			mp++;
		}
		else
		{
			mp++;
			switch(mes[mp-1])
			{
			case 'K':
				p=rb_key_std[mes[mp]-bg_id];
				break;
			case 'M':
				p=rb_math_std[mes[mp]-bg_id];
				break;
			case 'S':
				p=rb_str_std[mes[mp]-bg_id];
				break;
			case 'L':
				p=rb_logic_std[mes[mp]-bg_id];
				break;
			case 'D':
				p=(char *)(rb_mes[def_tp]+(mes[mp]-bg_id)*10);
				break;
			case 'F':
				p=(char *)(rb_mes[float_tp]+(mes[mp]-bg_id)*10);
				break;
			case 'f':
				p=(char *)(rb_mes[float_dim_tp]+(mes[mp]-bg_id)*10);
				break;
			case 'I':
				p=(char *)(rb_mes[int_tp]+(mes[mp]-bg_id)*10);
				break;
			case 'i':
				p=(char *)(rb_mes[int_dim_tp]+(mes[mp]-bg_id)*10);
				break;
			case 'C':
				p=(char *)(rb_mes[str_tp]+(mes[mp]-bg_id)*10);
				fg=1;
				break;
			case 'c':
				p=(char *)(rb_mes[str_tp]+(mes[mp]-bg_id)*10);
				fg=1;
				break;
			case '@':
				str[sp]='@';
				sp++;
				p=(char *)(rb_mes[mark_tp]+(mes[mp]-bg_id)*10);
				break;
			default:
				p=NULL;
				str[sp]=mes[mp-1];
				sp++;
			}
			if (p!=NULL)
			{
				i=0;
				while (p[i]!='\0')
				{
					str[sp]=p[i];
					i++;
					sp++;
				}
				mp++;
				p=NULL;
			}
			if (fg)
			{
				str[sp]='$';
				sp++;
				fg=0;
			}
		}
	}
	str[sp]='\n';
	return sp;
}
void rb_list(u8 *mes)
{
	int mp=0,sp=0;
	int i=0;
	int fg=0;
	char *p=NULL;
	while (mes[mp]!=end_tp && mes[mp]!='\0')
	{
		if (mes[mp]=='\"')//是字符串;
		{
			prtchar(str_co,mes[mp]);
			mp++;
			while (mes[mp]!='\"')
			{
            prtchar(pop_co,mes[mp]);
				mp++;
			}
			prtchar(str_co,mes[mp]);
			mp++;
		}
		else
		{
			mp++;
			switch(mes[mp-1])
			{
			case 'K':
				p=rb_key_std[mes[mp]-bg_id];
				Rprint(key_co,p);
				break;
			case 'M':
				p=rb_math_std[mes[mp]-bg_id];
				Rprint(key_co,p);
				break;
			case 'S':
				p=rb_str_std[mes[mp]-bg_id];
				Rprint(key_co,p);
				break;
			case 'L':
				p=rb_logic_std[mes[mp]-bg_id];
				Rprint(key_co,p);
				break;
			case 'D':
				p=(char *)(rb_mes[def_tp]+(mes[mp]-bg_id)*10);
				Rprint(def_co,p);
				break;
			case 'F':
				p=(char *)(rb_mes[float_tp]+(mes[mp]-bg_id)*10);
				Rprint(pop_co,p);
				break;
			case 'f':
				p=(char *)(rb_mes[float_dim_tp]+(mes[mp]-bg_id)*10);
				Rprint(pop_co,p);
				break;
			case 'I':
				p=(char *)(rb_mes[int_tp]+(mes[mp]-bg_id)*10);
				Rprint(pop_co,p);
				break;
			case 'i':
				p=(char *)(rb_mes[int_dim_tp]+(mes[mp]-bg_id)*10);
				Rprint(pop_co,p);
				break;
			case 'C':
				p=(char *)(rb_mes[str_tp]+(mes[mp]-bg_id)*10);
				Rprint(pop_co,p);
				fg=1;
				break;
			case 'c':
				p=(char *)(rb_mes[str_tp]+(mes[mp]-bg_id)*10);
				Rprint(pop_co,p);
				fg=1;
				break;
			case '@':
				prtchar(RGB(30,30,0),'@');
				p=(char *)(rb_mes[mark_tp]+(mes[mp]-bg_id)*10);
				Rprint(mark_co,p);
				break;
			case '#':
            prtchar(RGB(30,30,0),'#');
            break;
			default:
            prtchar(pop_co,mes[mp-1]);
				p=NULL;
			}
			if (p!=NULL)
			{
				mp++;
				p=NULL;
			}
			if (fg)
			{
            prtchar(RGB(30,30,0),'$');
            fg=0;
			}
		}
	}
	if (rb_xp) endl();
}
void rb_list_all()
{
   int cnt=1,ncnt=0;
   int pc=0;
   int done=1;
   int i;
   char *codes=(char *)rb_bas;
   u32 *list_dat=(u32 *)LSTDAT;
   list_dat[0]=0;
   while (pc<rb_clen)//获得行数据
   {
      if (codes[pc]==end_tp)
      {

         list_dat[cnt]=pc+1;
         if (list_dat[cnt]-list_dat[cnt-1]<3) break;
         cnt++;
      }
      pc++;
   }
   Q_box(0,0,239,159,0);
   rb_xp=0;
   rb_yp=0;
   while (1)
   {
      CS_ReadKey();
      if (CS_IsKeyDown(KEY_B)) return;//返回
      else if (CS_IsKeyDown(KEY_UP) || CS_IsKeyDown(KEY_LEFT))
      {
         if (ncnt>0) {ncnt--;done=1;}
      }
      else if (CS_IsKeyDown(KEY_DOWN) || CS_IsKeyDown(KEY_RIGHT))
      {
         if (ncnt<cnt-1) {ncnt++;done=1;}
      }
      if (done)
      {
         i=ncnt;
         rb_bg=0;
         rb_xp=0;
         rb_yp=0;
         Q_box(0,0,239,159,0);
         while (rb_yp<=14 && i<cnt)
         {
            rb_list(codes+list_dat[i]);
            i++;
         }
         done=0;
      }
   }
}
void basic_txt(u32 loc)
{
   int sp=0;
   int pc=0;
   int pp=0;
   char *code;
   char *txt;
   if (basic_look(loc))
   {
      show_text(_file,(char *)loc);
      return;
   }
   code=(char *)rb_bas;
   txt=(char *)mymalloc(rb_clen*3+200);
   while (pc<rb_clen && sp<rb_clen*3+150)
   {
      pp=pc;
      while (code[pc]!=end_tp && code[pc]!='\0') pc++;
      if (code[pc]=='\0' || pc-pp<2) break;
      sp+=to_txt(code+pp,txt+sp);
      sp++;
      pc++;
   }
   txt[sp]='\0';
   show_text(_file,txt);
   myfree(txt);
   myfree(rb_marks);
   myfree(rb_mes);
}

⌨️ 快捷键说明

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