//// imported
#include "../_sdk/str.h"
VAR PCHAR _tword; //Єхъє∙хх ёыютю
VAR UINT _lentword;
VAR CHAR _s0[_STRLEN]; //Єхъє∙хх ёыютю
//VAR PCHAR _tstr; //Єхъє∙р ёЄЁюър
//VAR UINT _lentstr;
//VAR CHAR _ss[_STRLEN]; //Єхъє∙р ёЄЁюър
EXTERN PBYTE _fin;
EXTERN BOOL _waseof;
EXTERN UINT _curlnbeg; //эюьхЁ ёЄЁюъш эр ьюьхэЄ эрўрыр Єюъхэр
FUNC BYTE readfin FORWARD();
//FUNC UINT readfinstr FORWARD(PBYTE pstr);
////
VAR UINT _curline; //Єхъє∙шщ эюьхЁ ёЄЁюъш
VAR CHAR _cnext; //ёыхфє■∙шщ ёшьтюы
VAR CHAR _c; //Єхъє∙шщ ёшьтюы (уыюсры№э√щ, ўЄюс√ эх ёюїЁрэ Є№ т ЁхъєЁёшш)
VAR UINT _spcsize; //ўшёыю яЁюсхыют яюёых яЁюўшЄрээющ ъюьрэф√
VAR UINT _waseols; //ёъюы№ъю с√ыю EOL ё яЁю°ыюую Ёрчр
VAR BOOL _doskip; //яЁюяєёърЄ№ ёЄЁюъш, ъЁюьх эрўшэр■∙шїё ё #
PROC rdword FORWARD();
PROC rdaddword FORWARD(); //join next word
CONST BOOL _isalphanum[256]={
+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE, +FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE, //0X
+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE, +FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE, //1X
+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE, +FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE, //2X
+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE, //3X
+FALSE,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , //4X
+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+FALSE,+FALSE,+FALSE,+FALSE,+TRUE , //5X
+FALSE,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , //6X
+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE, //7X
+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , //8X..FX
+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , //8X..FX
+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , //8X..FX
+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , //8X..FX
+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , //8X..FX
+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , //8X..FX
+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , //8X..FX
+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE //8X..FX
};
//эрфю эрўрЄ№ яЁюяєёъ ёЄЁюъ т ЄюЄ ьюьхэЄ, ъюуфр _cnext = яхЁт√щ ёшьтюы ёЄЁюъш, р _waseols!=0
//эр т√їюфх шч яЁюяєёър эрфю Єю цх ёюёЄю эшх: _cnext = яхЁт√щ ёшьтюы ёЄЁюъш, р _waseols!=0
PROC skiplines() //яЁюяєёърЄ№ ёЄЁюъш фю # (эр т√їюфх _cnext == '#')
{
//_curline = _curline; //ёхщўрё _cnext = яхЁт√щ ёшьтюы ёЄЁюъш, р _waseols!=0
skipline:
//яЁюяєёЄшЄ№ ёЄЁюъє, хёыш юэр эх эрўшэрхЄё ё # (шэрўх эр т√їюфх _cnext == '#')
//ёхщўрё _cnext == яхЁт√щ ёшьтюы ёЄЁюъш
//хёыш эх #, Єю яЁюяєёЄшЄ№ ёЄЁюъє
WHILE ((_cnext != '#')&&(!_waseof)) {
INC _curline;
INC _waseols;
loop:
_cnext = +(CHAR)readfin();
IF ((+(BYTE)_cnext != 0x0a)&&(!_waseof)) {
goto loop;
};
_cnext = +(CHAR)readfin();
//ёхщўрё _cnext == яхЁт√щ ёшьтюы ёЄЁюъш
};
//_curline = _curline; //ёхщўрё _cnext == '#' шыш EOF
}
//яЁюяєёърхЄ яЁюсхы√ ш хэЄхЁ√
PROC rdch()
//ўшЄрхь тё■ уЁєяяє фшхЁхчшёют + ёшьтюы ъръ юфшэ ёшьтюы
//фюсрты хЄ cnext т tword
//ш ўшЄрхЄ тё■ уЁєяяє фшхЁхчшёют + ёшьтюы ъръ юфшэ ёшьтюы cnext
{
// _lentword = stradd(_tword, _lentword, _cnext);
IF (_lentword < _STRMAX) {
_tword[_lentword] = _cnext;
INC _lentword;
};
loop:
_cnext = +(CHAR)readfin();
IF (+(BYTE)_cnext < +(BYTE)'!') { //єёъюЁхэшх т√їюфр
INC _spcsize; //spaces after tword
IF (+(BYTE)_cnext == 0x0a) {
INC _curline;
_spcsize = 0;
INC _waseols;
}ELSE IF (_cnext == '\t') {
_spcsize = _spcsize + 7; //TODO ёт чрЄ№ ё X
};
//_wasdieresis = +TRUE;
IF (!_waseof) goto loop; //todo т тхЄъх 0a
};
IF (_doskip)
IF (_waseols!=0) {
skiplines();
//ёхщўрё _cnext == '#'
};
}
//яЁюяєёърхЄ хэЄхЁ√
PROC rdchcmt()
//фюсрты хЄ cnext т tword
//ш ўшЄрхЄ тё■ уЁєяяє фшхЁхчшёют + ёшьтюы ъръ юфшэ ёшьтюы cnext
{
// _lentword = stradd(_tword, _lentword, _cnext);
IF (_lentword < _STRMAX) {
_tword[_lentword] = _cnext;
INC _lentword;
};
loop:
_cnext = +(CHAR)readfin();
IF (+(BYTE)_cnext == 0x0a) {
INC _curline;
_spcsize = 0;
INC _waseols;
IF (!_waseof) goto loop;
}ELSE IF (+(BYTE)_cnext == 0x0d) {
IF (!_waseof) goto loop;
};
IF (_doskip) //todo эрфю ыш ЄєЄ?
IF (_waseols!=0) {
skiplines();
//ёхщўрё _cnext == '#'
};
}
PROC rdaddword() //яюфъыхшЄ№ ёыхфє■∙є■ ъюьрэфє ъ Єхъє∙хщ
{
IF (_doskip)
IF (_waseols!=0) {
skiplines();
//ёхщўрё _cnext == '#'
};
beg:
_spcsize = 0; //ўшёыю яЁюсхыют яюёых яЁюўшЄрээющ ъюьрэф√
_waseols = 0;
_curlnbeg = _curline;
IF (_isalphanum[+(BYTE)_cnext] ) {
loop1: //REPEAT { //цф╕ь эхЎшЇЁюсєътє (EOF эх ЎшЇЁюсєътр)
IF (_lentword < _STRMAX) {
_tword[_lentword] = _cnext;
INC _lentword;
};
_cnext = +(CHAR)readfin();
IF (_isalphanum[+(BYTE)_cnext]) goto loop1; //}UNTIL (!_isalphanum[+(BYTE)_cnext]/** || _waseof*/ );
goto loopgo;
loop2: //REPEAT { //цф╕ь эхфшхЁхчшё шыш EOF
_cnext = +(CHAR)readfin();
loopgo:
IF (+(BYTE)_cnext < +(BYTE)'!') { //єёъюЁхэшх т√їюфр
INC _spcsize; //spaces after tword
IF (+(BYTE)_cnext == 0x0a) {
INC _curline;
_spcsize = 0;
INC _waseols;
};
IF (!_waseof) goto loop2;
};
//}UNTIL (_wasdieresis || _waseof );
}ELSE { //ёыютю шч эхЎшЇЁюсєътхээюую ёшьтюыр
rdch(); //ўшЄрхь тё■ уЁєяяє фшхЁхчшёют + ёшьтюы ъръ юфшэ ёшьтюы
}; //эхы№ч яюфъыхшЄ№ ¤Єю єёыютшх ъ Ўшъыє, Є.ъ. юэю фы шчэрўры№эюую cnext ш юфшэ Ёрч
_tword[_lentword] = (CHAR)0x00; //strclose(_tword, _lentword); //todo эрЁє°хэр ярЁэюёЄ№ clear..close
IF (_lentword==1) {
_c = *(PCHAR)_tword;
IF (+(BYTE)_c < +(BYTE)'<') { //єёъюЁхэшх
IF (
(
((_c=='/')&&(_cnext=='*'))
||((_c=='*')&&(_cnext=='/'))
)
) { //шуэюЁшЁєхь /* ш */
rdch(); //rdaddword(); //шёяюы№чєхь яхЁт√щ ёшьтюы чэрър ъюььхэЄрЁш , ўшЄрхь ёыхфє■∙шщ ёшьтюы яюёых яЁюсхыют
IF ( _cnext=='*' ) { ///** */ эрфю ъръ ъюььхэЄрЁшщ
rdchcmt(); //rdaddword(); //шёяюы№чєхь тЄюЁющ ёшьтюы чэрър ъюььхэЄрЁш
WHILE ( !( ( (_cnext=='/')&&(_c=='*') ) || _waseof ) ) {
_c = _cnext;
rdchcmt(); //яЁюяєёърхЄ тёх хэЄхЁ√
};
rdch(); //шёяюы№чєхь яюёыхфэшщ ёшьтюы ъюььхэЄрЁш , ўшЄрхь ёыхфє■∙шщ ёшьтюы яюёых яЁюсхыют
_tword[_lentword] = (CHAR)0x00; //strclose(_tword, _lentword); //todo эрЁє°хэр ярЁэюёЄ№ clear..close
//#ifdef USE_COMMENTS
;; //cmt(';'); cmtstr(_tword); endcmt();
;; IF
(_cmts
) {writebyte
(_fout
, +(BYTE
)';'); fputs(_tword
, _fout
); writebyte
(_fout
, +(BYTE
)'\n'); };
//#endif
};
//ўшЄрхь ёыютю яюёых ъюььхэЄрЁш шыш эхфюъюььхэЄрЁш /* шыш */
_lentword = 0/**strclear(_tword)*/; //todo эрЁє°хэр ярЁэюёЄ№ clear..close
goto beg; //rdaddword();
}ELSE IF ( //(_lentword==1)&&
(
(_c=='/')&&(_cnext=='/')
// ||(_c=='#')
||(_c==';')&&(_cnext==';')
)
) { //
_waseols = 0; //ўЄюс√ ;; ЁрсюЄрыю яюёых ёЄЁюъш, чрърэўштр■∙хщё эр ; (TODO эх яюьюурхЄ)
rdchcmt(); //rdaddword(); //шёяюы№чєхь яхЁт√щ ёшьтюы чэрър ъюььхэЄрЁш , ўшЄрхь ёыхфє■∙шщ ёшьтюы
WHILE (_waseols==0/** && !_waseof*/ ) {
rdchcmt(); //яЁюяєёърхЄ тёх хэЄхЁ√
};
_tword[_lentword] = (CHAR)0x00; //strclose(_tword, _lentword); //todo эрЁє°хэр ярЁэюёЄ№ clear..close
//#ifdef USE_COMMENTS
;; //cmt(';'); cmtstr(_tword); endcmt();
;; IF
(_cmts
) {writebyte
(_fout
, +(BYTE
)';'); fputs(_tword
, _fout
); writebyte
(_fout
, +(BYTE
)'\n'); };
//#endif
IF (+(BYTE)_cnext < +(BYTE)'!') {
rdch(); //шёяюы№чєхь яюёыхфэшщ ёшьтюы ъюььхэЄрЁш , ўшЄрхь ёыхфє■∙шщ ёшьтюы (TODO єэшЇшЎшЁютрЄ№ ъръ т√°х)
};
//ўшЄрхь ёыютю яюёых ъюььхэЄрЁш
_lentword = 0/**strclear(_tword)*/; //todo эрЁє°хэр ярЁэюёЄ№ clear..close
goto beg; //rdaddword();
};
}; //єёъюЁхэшх
}; //check cmt
}
PROC rdword()
//ўшЄрхь ёыютю _tword (шч ЄхъёЄр ё фшхЁхчшёрьш тьхёЄю яЁюсхыют, хэЄхЁют, Єрсєы Ўшщ)
//ёыютю чрърэўштрхЄё , ъюуфр фшхЁхчшё шыш эхЎшЇЁюсєътхээ√щ ёшьтюы (юэ яюярф╕Є т cnext, р ъєЁёюЁ т Їрщых яюёых эхую)
{
_lentword = 0/**strclear(_tword)*/; //todo эрЁє°хэр ярЁэюёЄ№ clear..close
rdaddword();
}
PROC rdquotes(CHAR eol) //ёўшЄ√трхЄ фю ърт√ўъш эхтъы■ўшЄхы№эю
{
WHILE (_spcsize != 0) { //фюсртшЄ№ ё·хфхээ√х яЁюсхы√
_lentword = stradd(_tword, _lentword, ' ');
DEC _spcsize;
};
WHILE ( (_cnext!=eol) && !_waseof) {
IF ( _cnext=='\\' ) {
_lentword = stradd(_tword, _lentword, _cnext);
_cnext = +(CHAR)readfin();
};
_lentword = stradd(_tword, _lentword, _cnext);
_cnext = +(CHAR)readfin();
};
_tword[_lentword] = (CHAR)0x00; //strclose(_tword, _lentword);
}
PROC initrd()
{
_doskip = +FALSE;
_tword = (PCHAR)_s0;
// _tstr = (PCHAR)_ss;
_waseols = 0;
_spcsize = 0;
_lentword = 0/**strclear(_tword)*/; //todo эрЁє°хэр ярЁэюёЄ№ clear..close
rdch(); //ўшЄрхь тё■ уЁєяяє фшхЁхчшёют + ёшьтюы ъръ юфшэ ёшьтюы
}