?login_element?

Subversion Repositories NedoOS

Rev

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

  1. //// imported
  2. #include "../_sdk/str.h"
  3. #define _BYTESTRMAX (BYTE)(_STRLEN-1)
  4.  
  5. VAR PCHAR _tword; //Єхъє∙хх ёыютю
  6. VAR UINT _lentword;
  7. VAR CHAR _s0[_STRLEN]; //Єхъє∙хх ёыютю
  8.  
  9. EXTERN PBYTE _fin;
  10. EXTERN BOOL _waseof;
  11.  
  12. EXTERN UINT  _curlnbeg; //эюьхЁ ёЄЁюъш эр ьюьхэЄ эрўрыр Єюъхэр
  13.  
  14. FUNC BYTE readfin FORWARD();
  15.  
  16. ////
  17.  
  18. VAR UINT  _curline; //Єхъє∙шщ эюьхЁ ёЄЁюъш
  19. VAR CHAR _cnext; //ёыхфє■∙шщ ёшьтюы
  20. VAR CHAR _c; //Єхъє∙шщ ёшьтюы (уыюсры№э√щ, їюЄ  єцх эх шёяюы№чєхЄё  т ЁхъєЁёшш шыш т фЁєушї ьюфєы ї)
  21. VAR UINT _spcsize; //ўшёыю яЁюсхыют яюёых яЁюўшЄрээющ ъюьрэф√
  22. VAR UINT _waseols; //ёъюы№ъю с√ыю EOL ё яЁю°ыюую Ёрчр
  23.  
  24. VAR BOOL _doskip; //яЁюяєёърЄ№ ёЄЁюъш, ъЁюьх эрўшэр■∙шїё  ё #
  25.  
  26. PROC rdword FORWARD();
  27. PROC rdaddword FORWARD(); //join next word
  28.  
  29. CONST BOOL _isalphanum[256]={
  30.   +FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE, +FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE, //0X
  31.   +FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE, +FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE, //1X
  32.   +FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE, +FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE, //2X
  33.   +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE, //3X
  34.   +FALSE,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , //4X
  35.   +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+FALSE,+FALSE,+FALSE,+FALSE,+TRUE , //5X
  36.   +FALSE,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , //6X
  37.   +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE, //7X
  38.  
  39.   +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , //8X..FX
  40.   +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , //8X..FX
  41.   +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , //8X..FX
  42.   +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , //8X..FX
  43.   +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , //8X..FX
  44.   +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , //8X..FX
  45.   +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , //8X..FX
  46.   +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE   //8X..FX
  47. };
  48.  
  49. //эрфю эрўрЄ№ яЁюяєёъ ёЄЁюъ т ЄюЄ ьюьхэЄ, ъюуфр _cnext = яхЁт√щ ёшьтюы ёЄЁюъш, р _waseols!=0
  50. //эр т√їюфх шч яЁюяєёър эрфю Єю цх ёюёЄю эшх: _cnext = яхЁт√щ ёшьтюы ёЄЁюъш, р _waseols!=0
  51.  
  52. PROC skiplines() //яЁюяєёърЄ№ ёЄЁюъш фю # (эр т√їюфх _cnext == '#')
  53. {
  54. //ёхщўрё _cnext = яхЁт√щ ёшьтюы ёЄЁюъш, р _waseols!=0
  55.   skipline:
  56.  //яЁюяєёЄшЄ№ ёЄЁюъє, хёыш юэр эх эрўшэрхЄё  ё # (шэрўх эр т√їюфх _cnext == '#')
  57.  //ёхщўрё _cnext == яхЁт√щ ёшьтюы ёЄЁюъш
  58.  //хёыш эх #, Єю яЁюяєёЄшЄ№ ёЄЁюъє
  59.   WHILE ((_cnext != '#')&&(!_waseof)) {
  60.     INC _curline;
  61.     INC _waseols;
  62.     loop:
  63.     _cnext = (CHAR)readfin();
  64.     IF (((BYTE)_cnext != 0x0a)&&(!_waseof)) {
  65.       goto loop;
  66.     };
  67.     _cnext = (CHAR)readfin();
  68.     //ёхщўрё _cnext == яхЁт√щ ёшьтюы ёЄЁюъш
  69.   };
  70. //ёхщўрё _cnext == '#' шыш EOF
  71. }
  72.  
  73. //яЁюяєёърхЄ яЁюсхы√ ш хэЄхЁ√
  74. PROC rdch()
  75. //ўшЄрхь тё■ уЁєяяє фшхЁхчшёют + ёшьтюы ъръ юфшэ ёшьтюы
  76. //фюсрты хЄ cnext т tword
  77. //ш ўшЄрхЄ тё■ уЁєяяє фшхЁхчшёют + ёшьтюы ъръ юфшэ ёшьтюы cnext
  78. {
  79.   IF ((BYTE)_lentword < _BYTESTRMAX) {
  80.     _tword[_lentword] = _cnext;
  81.     INC _lentword;
  82.   };
  83.   loop:
  84.     _cnext = (CHAR)readfin();
  85.     IF ((BYTE)_cnext < (BYTE)'!') { //єёъюЁхэшх т√їюфр
  86.       INC _spcsize; //spaces after tword
  87.       IF ((BYTE)_cnext == 0x0a) {
  88.         INC _curline;
  89.         _spcsize = 0;
  90.         INC _waseols;
  91.       }ELSE IF (_cnext == '\t') {
  92.         _spcsize = _spcsize + 7; //TODO ёт чрЄ№ ё X
  93.       };
  94.       IF (!_waseof) goto loop; //todo т тхЄъх 0a
  95.     };
  96.   IF (_doskip)
  97.     IF (_waseols!=0) {
  98.       skiplines();
  99.       //ёхщўрё _cnext == '#'
  100.     };
  101. }
  102.  
  103. //яЁюяєёърхЄ хэЄхЁ√
  104. PROC rdchcmt()
  105. //фюсрты хЄ cnext т tword
  106. //ш ўшЄрхЄ тё■ уЁєяяє фшхЁхчшёют + ёшьтюы ъръ юфшэ ёшьтюы cnext
  107. {
  108.   IF ((BYTE)_lentword < _BYTESTRMAX) {
  109.     _tword[_lentword] = _cnext;
  110.     INC _lentword;
  111.   };
  112.   loop:
  113.     _cnext = (CHAR)readfin();
  114.     IF ((BYTE)_cnext == 0x0a) {
  115.       INC _curline;
  116.       _spcsize = 0;
  117.       INC _waseols;
  118.       IF (!_waseof) goto loop;
  119.     }ELSE IF ((BYTE)_cnext == 0x0d) {
  120.       IF (!_waseof) goto loop;
  121.     };
  122.   IF (_doskip) //todo эрфю ыш ЄєЄ?
  123.     IF (_waseols!=0) {
  124.       skiplines();
  125.       //ёхщўрё _cnext == '#'
  126.     };
  127. }
  128.  
  129. PROC rdaddword() //яюфъыхшЄ№ ёыхфє■∙є■ ъюьрэфє ъ Єхъє∙хщ
  130. {
  131.     IF (_doskip)
  132.       IF (_waseols!=0) {
  133.         skiplines();
  134.         //ёхщўрё _cnext == '#'
  135.       };
  136.   beg:
  137.   _spcsize = 0; //ўшёыю яЁюсхыют яюёых яЁюўшЄрээющ ъюьрэф√
  138.   _waseols = 0;
  139.   _curlnbeg = _curline;
  140.   IF (_isalphanum[(BYTE)_cnext] ) {
  141.     loop1: //цф╕ь эхЎшЇЁюсєътє (EOF эх ЎшЇЁюсєътр)
  142.       IF ((BYTE)_lentword < _BYTESTRMAX) {
  143.         _tword[_lentword] = _cnext;
  144.         INC _lentword;
  145.       };
  146.       _cnext = (CHAR)readfin();
  147.     IF (_isalphanum[(BYTE)_cnext]) goto loop1;
  148.     goto loopgo;
  149.     loop2: //цф╕ь эхфшхЁхчшё шыш EOF
  150.       _cnext = (CHAR)readfin();
  151.     loopgo:
  152.       IF ((BYTE)_cnext < 0x21/**'!'*/) { //єёъюЁхэшх т√їюфр
  153.         INC _spcsize; //spaces after tword
  154.         IF ((BYTE)_cnext == 0x0a) {
  155.           INC _curline;
  156.           _spcsize = 0;
  157.           INC _waseols;
  158.         };
  159.         IF (!_waseof) goto loop2;
  160.       };
  161.   }ELSE { //ёыютю шч эхЎшЇЁюсєътхээюую ёшьтюыр
  162.     rdch(); //ўшЄрхь тё■ уЁєяяє фшхЁхчшёют + ёшьтюы ъръ юфшэ ёшьтюы
  163.   }; //эхы№ч  яюфъыхшЄ№ ¤Єю єёыютшх ъ Ўшъыє, Є.ъ. юэю фы  шчэрўры№эюую cnext ш юфшэ Ёрч
  164.  
  165.   _tword[_lentword] = '\0';
  166.  
  167.   IF ((BYTE)_cnext < 0x3c/**';'+1*/) { //юс√ўэю _cnext сєътр, р _tword[0] = 0x28'(',0x29')',0x3b';'
  168.     IF ((BYTE)_lentword == 0x01) {
  169.       _c = *(PCHAR)_tword;
  170.       IF (
  171.           (
  172.            ((_c=='/')&&(_cnext=='*'))
  173.          ||((_c=='*')&&(_cnext=='/'))
  174.           )
  175.          ) { //шуэюЁшЁєхь /* ш */
  176.         rdch(); //rdaddword(); //шёяюы№чєхь яхЁт√щ ёшьтюы чэрър ъюььхэЄрЁш , ўшЄрхь ёыхфє■∙шщ ёшьтюы яюёых яЁюсхыют
  177.         IF ( _cnext=='*' ) { ///** */ эрфю ъръ ъюььхэЄрЁшщ
  178.           rdchcmt(); //rdaddword(); //шёяюы№чєхь тЄюЁющ ёшьтюы чэрър ъюььхэЄрЁш 
  179.           WHILE ( !( ( (_cnext=='/')&&(_c=='*') ) || _waseof ) ) {
  180.             _c = _cnext;
  181.             rdchcmt(); //яЁюяєёърхЄ тёх хэЄхЁ√
  182.           };
  183.           rdch(); //шёяюы№чєхь яюёыхфэшщ ёшьтюы ъюььхэЄрЁш , ўшЄрхь ёыхфє■∙шщ ёшьтюы яюёых яЁюсхыют
  184.           _tword[_lentword] = '\0';
  185.   ;;        IF (_cmts) {writebyte(_fout, (BYTE)';'); fputs(_tword, _fout); writebyte(_fout, (BYTE)'\n'); };
  186.         };
  187.         //ўшЄрхь ёыютю яюёых ъюььхэЄрЁш  шыш эхфюъюььхэЄрЁш  /* шыш */
  188.         _lentword = 0;
  189.         goto beg; //rdaddword();
  190.       }ELSE IF ( //(_lentword==1)&&
  191.                 (
  192.                  (_c=='/')&&(_cnext=='/')
  193.                ||(_c==';')&&(_cnext==';')
  194.                 )
  195.                ) { //
  196.         _waseols = 0; //ўЄюс√ ;; ЁрсюЄрыю яюёых ёЄЁюъш, чрърэўштр■∙хщё  эр ; (TODO эх яюьюурхЄ)
  197.         rdchcmt(); //rdaddword(); //шёяюы№чєхь яхЁт√щ ёшьтюы чэрър ъюььхэЄрЁш , ўшЄрхь ёыхфє■∙шщ ёшьтюы
  198.         WHILE (_waseols==0/** && !_waseof*/ ) {
  199.           rdchcmt(); //яЁюяєёърхЄ тёх хэЄхЁ√
  200.         };
  201.         _tword[_lentword] = '\0';
  202.   ;;        IF (_cmts) {writebyte(_fout, (BYTE)';'); fputs(_tword, _fout); writebyte(_fout, (BYTE)'\n'); };
  203.         IF ((BYTE)_cnext < (BYTE)'!') {
  204.           rdch(); //шёяюы№чєхь яюёыхфэшщ ёшьтюы ъюььхэЄрЁш , ўшЄрхь ёыхфє■∙шщ ёшьтюы (TODO єэшЇшЎшЁютрЄ№ ъръ т√°х)
  205.         };
  206.         //ўшЄрхь ёыютю яюёых ъюььхэЄрЁш 
  207.         _lentword = 0;
  208.         goto beg; //rdaddword();
  209.       };
  210.     }; //єёъюЁхэшх
  211.   }; //check cmt
  212. }
  213.  
  214. PROC rdword()
  215. //ўшЄрхь ёыютю _tword (шч ЄхъёЄр ё фшхЁхчшёрьш тьхёЄю яЁюсхыют, хэЄхЁют, Єрсєы Ўшщ)
  216. //ёыютю чрърэўштрхЄё , ъюуфр фшхЁхчшё шыш эхЎшЇЁюсєътхээ√щ ёшьтюы (юэ яюярф╕Є т cnext, р ъєЁёюЁ т Їрщых яюёых эхую)
  217. {
  218.   _lentword = 0;
  219.   rdaddword();
  220. }
  221.  
  222. PROC rdquotes(CHAR eol) //ёўшЄ√трхЄ фю ърт√ўъш эхтъы■ўшЄхы№эю
  223. {
  224.   WHILE (_spcsize != 0) { //фюсртшЄ№ ё·хфхээ√х яЁюсхы√
  225.     _lentword = stradd(_tword, _lentword, ' ');
  226.     DEC _spcsize;
  227.   };
  228.   WHILE ( (_cnext!=eol) && !_waseof) {
  229.     IF ( _cnext=='\\' ) {
  230.       _lentword = stradd(_tword, _lentword, _cnext);
  231.       _cnext = (CHAR)readfin();
  232.     };
  233.     _lentword = stradd(_tword, _lentword, _cnext);
  234.     _cnext = (CHAR)readfin();
  235.   };
  236.   _tword[_lentword] = '\0';
  237. }
  238.  
  239. PROC initrd()
  240. {
  241.   _doskip = +FALSE;
  242.   _tword = (PCHAR)_s0;
  243.   _waseols = 0;
  244.   _spcsize = 0;
  245.   _lentword = 0;
  246.   rdch(); //ўшЄрхь тё■ уЁєяяє фшхЁхчшёют + ёшьтюы ъръ юфшэ ёшьтюы
  247. }
  248.  
  249.