//// imported
#include "../_sdk/io.h"
//#include "../_sdk/print.h"
EXTERN PCHAR _texttoken[256];
PROC asmfilltokens FORWARD();
////
//яхЁхф EOF ьюцхЄ с√Є№/эх с√Є№ EOL
PROC asmexport_line()
{
VAR BYTE token;
VAR CHAR c;
//VAR PCHAR pin;
//VAR PCHAR pout;
VAR PCHAR pintoken;
WHILE (+TRUE) {
//token=*pin;
//pin=pin+1;
token = readfin();
IF (_waseof) BREAK;
IF (token == (BYTE)(+_TOKTEXT)) { //anytext
WHILE (+TRUE) {
//c=*pin;
//pin=pin+1;
c = (CHAR)readfin();
IF (c == (CHAR)((BYTE)(+_TOKENDTEXT))) BREAK;
//*pout=c;
//pout=pout+1;
writefout((BYTE)c);
};
}ELSE { //token
fputs(_texttoken
[token
], _fout
);
/** pintoken = _texttoken[token];
WHILE (+TRUE) {
c = *(PCHAR)(pintoken);
IF (c == '\0') BREAK;
INC pintoken;
//*pout=*pintoken;
//pout=pout+1;
writebyte(_fexp, (BYTE)c);
};*/
};
IF (token == (BYTE)(+_TOKEOL)) BREAK;
};
}
PROC asmexport(PCHAR fn)
{
VAR BYTE b;
//setxy(0x05,0x00);
//prchar('@');
//nprintf("Hello %s %d world!",(UINT)"ZX Spectrum",(UINT)48);
b = 0x00;
REPEAT { //эр тё ъшщ ёыєўрщ ўшёЄшь тёх Єюъхэ√
_texttoken[b] = "";
INC b;
}UNTIL (b == 0x00);
_texttoken[+_TOKEOL]="\n";
//_texttoken[+_TOKEOF]="";
//_texttoken[+_TOKSPC0]="";
_texttoken[+_TOKSPC1]=" ";
_texttoken[+_TOKSPC2]=" ";
_texttoken[+_TOKSPC3]=" ";
_texttoken[+_TOKSPC4]=" ";
_texttoken[+_TOKSPC5]=" ";
_texttoken[+_TOKSPC6]=" ";
_texttoken[+_TOKSPC7]=" ";
_texttoken[+_TOKSPC8]=" ";
_texttoken[+_TOKCOMMA]=",";
_texttoken[+_TOKOPEN]="(";
_texttoken[+_TOKOPENSQ]="[";
_texttoken[+_TOKCLOSE]=")";
_texttoken[+_TOKCLOSESQ]="]";
_texttoken[+_TOKCOLON]=":";
//_texttoken[+_TOKDIRECT]="#";
_texttoken[+_TOKPRIME]="\'";
_texttoken[+_TOKPRIMESYM]="\'"; //шёяюы№чєхЄё фы ёшьтюы№э√ї ъюэёЄрэЄ Єшяр 'c'
_texttoken[+_TOKDBLQUOTESYM]="\"";
_texttoken[+_TOKDOLLAR]="$";
//_texttoken[+_TOKREEQU]="=";
_texttoken[+_TOKPLUS]="+";
_texttoken[+_TOKMINUS]="-";
_texttoken[+_TOKSTAR]="*";
_texttoken[+_TOKSLASH]="/";
_texttoken[+_TOKLESS]="<";
_texttoken[+_TOKMORE]=">";
_texttoken[+_TOKEQUAL]="=";
_texttoken[+_TOKAND]="&";
_texttoken[+_TOKPIPE/**'|'*/]="|";
_texttoken[+_TOKCARON/**'^'*/]="^";
_texttoken[+_TOKTILDE/**'~'*/]="~";
_texttoken[+_TOKEXCL]="!";
//_texttoken[+_TOKTEXT]="";
//_texttoken[+_TOKENDTEXT]="";
_texttoken[+_TOKCOMMENT]=";";
//_texttoken[+_TOKENDCOMMENT]="";
//_texttoken[+_TOKNUM]="";
//_texttoken[+_TOKLABEL]="";
//_texttoken[+_ERR_]="";
//_texttoken[+_CMDLABEL ]="";
//_texttoken[+_CMDREEQU ]="";
_texttoken[+_CMDORG ]="org";
_texttoken[+_CMDALIGN ]="align";
_texttoken[+_CMDPAGE ]="page";
_texttoken[+_CMDIF ]="if";
_texttoken[+_CMDELSE ]="else";
_texttoken[+_CMDENDIF ]="endif";
_texttoken[+_CMDDUP ]="dup";
_texttoken[+_CMDEDUP ]="edup";
_texttoken[+_CMDMACRO ]="macro";
_texttoken[+_CMDENDM ]="endm";
//_texttoken[+_CMDUSEMACRO]="usemacro";
_texttoken[+_CMDEXPORT ]="export";
_texttoken[+_CMDLOCAL ]="local";
_texttoken[+_CMDENDL ]="endl";
_texttoken[+_CMDDISP ]="disp";
_texttoken[+_CMDENT ]="ent";
_texttoken[+_CMDINCLUDE ]="include";
_texttoken[+_CMDINCBIN ]="incbin";
_texttoken[+_CMDDB ]="db";
_texttoken[+_CMDDW ]="dw";
_texttoken[+_CMDDL ]="dl";
_texttoken[+_CMDDS ]="ds";
_texttoken[+_CMDDISPLAY ]="display";
_texttoken[+_CMDREPEAT ]="repeat";
_texttoken[+_CMDUNTIL ]="until";
_texttoken[+_CMDSTRUCT ]="struct";
_texttoken[+_CMDENDSTRUCT]="endstruct";
asmfilltokens();
//setfin( "tok.f" );
_fin = nfopen(fn, "rb");
IF (_fin != (PBYTE)0) {
_waseof = +FALSE;
_fout = openwrite( "exp.f" );
//_waseof = +FALSE; //єцх хёЄ№ т setfin
WHILE (!_waseof) {
asmexport_line();
};
//todo яюффхЁцрЄ№ TOK_EOF
};
}