//// imported
#include "../_sdk/str.h"
#define _BYTESTRMAX (BYTE)(_STRLEN-1)
VAR PCHAR _tword; //Єхъє∙хх ёыютю
VAR UINT _lentword;
VAR CHAR _s0[_STRLEN]; //Єхъє∙хх ёыютю
EXTERN PBYTE _fin;
EXTERN BOOL _waseof;
EXTERN UINT _curlnbeg; //эюьхЁ ёЄЁюъш эр ьюьхэЄ эрўрыр Єюъхэр
FUNC BYTE readfin FORWARD();
////
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 == '#')
{
//ёхщўрё _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 == яхЁт√щ ёшьтюы ёЄЁюъш
};
//ёхщўрё _cnext == '#' шыш EOF
}
//яЁюяєёърхЄ яЁюсхы√ ш хэЄхЁ√
PROC rdch()
//ўшЄрхь тё■ уЁєяяє фшхЁхчшёют + ёшьтюы ъръ юфшэ ёшьтюы
//фюсрты хЄ cnext т tword
//ш ўшЄрхЄ тё■ уЁєяяє фшхЁхчшёют + ёшьтюы ъръ юфшэ ёшьтюы cnext
{
IF ((BYTE)_lentword < _BYTESTRMAX) {
_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
};
IF (!_waseof) goto loop; //todo т тхЄъх 0a
};
IF (_doskip)
IF (_waseols!=0) {
skiplines();
//ёхщўрё _cnext == '#'
};
}
//яЁюяєёърхЄ хэЄхЁ√
PROC rdchcmt()
//фюсрты хЄ cnext т tword
//ш ўшЄрхЄ тё■ уЁєяяє фшхЁхчшёют + ёшьтюы ъръ юфшэ ёшьтюы cnext
{
IF ((BYTE)_lentword < _BYTESTRMAX) {
_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: //цф╕ь эхЎшЇЁюсєътє (EOF эх ЎшЇЁюсєътр)
IF ((BYTE)_lentword < _BYTESTRMAX) {
_tword[_lentword] = _cnext;
INC _lentword;
};
_cnext = (CHAR)readfin();
IF (_isalphanum[(BYTE)_cnext]) goto loop1;
goto loopgo;
loop2: //цф╕ь эхфшхЁхчшё шыш EOF
_cnext = (CHAR)readfin();
loopgo:
IF ((BYTE)_cnext < 0x21/**'!'*/) { //єёъюЁхэшх т√їюфр
INC _spcsize; //spaces after tword
IF ((BYTE)_cnext == 0x0a) {
INC _curline;
_spcsize = 0;
INC _waseols;
};
IF (!_waseof) goto loop2;
};
}ELSE { //ёыютю шч эхЎшЇЁюсєътхээюую ёшьтюыр
rdch(); //ўшЄрхь тё■ уЁєяяє фшхЁхчшёют + ёшьтюы ъръ юфшэ ёшьтюы
}; //эхы№ч яюфъыхшЄ№ ¤Єю єёыютшх ъ Ўшъыє, Є.ъ. юэю фы шчэрўры№эюую cnext ш юфшэ Ёрч
_tword[_lentword] = '\0';
IF ((BYTE)_cnext < 0x3c/**';'+1*/) { //юс√ўэю _cnext сєътр, р _tword[0] = 0x28'(',0x29')',0x3b';'
IF ((BYTE)_lentword == 0x01) {
_c = *(PCHAR)_tword;
IF (
(
((_c=='/')&&(_cnext=='*'))
||((_c=='*')&&(_cnext=='/'))
)
) { //шуэюЁшЁєхь /* ш */
rdch(); //rdaddword(); //шёяюы№чєхь яхЁт√щ ёшьтюы чэрър ъюььхэЄрЁш , ўшЄрхь ёыхфє■∙шщ ёшьтюы яюёых яЁюсхыют
IF ( _cnext=='*' ) { ///** */ эрфю ъръ ъюььхэЄрЁшщ
rdchcmt(); //rdaddword(); //шёяюы№чєхь тЄюЁющ ёшьтюы чэрър ъюььхэЄрЁш
WHILE ( !( ( (_cnext=='/')&&(_c=='*') ) || _waseof ) ) {
_c = _cnext;
rdchcmt(); //яЁюяєёърхЄ тёх хэЄхЁ√
};
rdch(); //шёяюы№чєхь яюёыхфэшщ ёшьтюы ъюььхэЄрЁш , ўшЄрхь ёыхфє■∙шщ ёшьтюы яюёых яЁюсхыют
_tword[_lentword] = '\0';
;; IF
(_cmts
) {writebyte
(_fout
, (BYTE
)';'); fputs(_tword
, _fout
); writebyte
(_fout
, (BYTE
)'\n'); };
};
//ўшЄрхь ёыютю яюёых ъюььхэЄрЁш шыш эхфюъюььхэЄрЁш /* шыш */
_lentword = 0;
goto beg; //rdaddword();
}ELSE IF ( //(_lentword==1)&&
(
(_c=='/')&&(_cnext=='/')
||(_c==';')&&(_cnext==';')
)
) { //
_waseols = 0; //ўЄюс√ ;; ЁрсюЄрыю яюёых ёЄЁюъш, чрърэўштр■∙хщё эр ; (TODO эх яюьюурхЄ)
rdchcmt(); //rdaddword(); //шёяюы№чєхь яхЁт√щ ёшьтюы чэрър ъюььхэЄрЁш , ўшЄрхь ёыхфє■∙шщ ёшьтюы
WHILE (_waseols==0/** && !_waseof*/ ) {
rdchcmt(); //яЁюяєёърхЄ тёх хэЄхЁ√
};
_tword[_lentword] = '\0';
;; IF
(_cmts
) {writebyte
(_fout
, (BYTE
)';'); fputs(_tword
, _fout
); writebyte
(_fout
, (BYTE
)'\n'); };
IF ((BYTE)_cnext < (BYTE)'!') {
rdch(); //шёяюы№чєхь яюёыхфэшщ ёшьтюы ъюььхэЄрЁш , ўшЄрхь ёыхфє■∙шщ ёшьтюы (TODO єэшЇшЎшЁютрЄ№ ъръ т√°х)
};
//ўшЄрхь ёыютю яюёых ъюььхэЄрЁш
_lentword = 0;
goto beg; //rdaddword();
};
}; //єёъюЁхэшх
}; //check cmt
}
PROC rdword()
//ўшЄрхь ёыютю _tword (шч ЄхъёЄр ё фшхЁхчшёрьш тьхёЄю яЁюсхыют, хэЄхЁют, Єрсєы Ўшщ)
//ёыютю чрърэўштрхЄё , ъюуфр фшхЁхчшё шыш эхЎшЇЁюсєътхээ√щ ёшьтюы (юэ яюярф╕Є т cnext, р ъєЁёюЁ т Їрщых яюёых эхую)
{
_lentword = 0;
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] = '\0';
}
PROC initrd()
{
_doskip = +FALSE;
_tword = (PCHAR)_s0;
_waseols = 0;
_spcsize = 0;
_lentword = 0;
rdch(); //ўшЄрхь тё■ уЁєяяє фшхЁхчшёют + ёшьтюы ъръ юфшэ ёшьтюы
}