Login

Subversion Repositories NedoOS

Rev

Rev 637 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

//// 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(); //ўшЄрхь тё■ уЁєяяє фшхЁхчшёют + ёшьтюы ъръ юфшэ ёшьтюы
}