📄 to_txt.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 + -