Subversion Repositories NedoOS

Rev

Rev 2325 | Blame | Compare with Previous | Last modification | View Log | Download

  1. //// ёЄрэфрЁЄэ√х тхЄъш
  2.  
  3.       case _CMDINCLUDE: {
  4.         _inclfile[_ninclfiles] = _fin;
  5.         INC _ninclfiles;
  6.         _lenfn = 0;
  7.         i = 0;
  8.         readfin(); //tab
  9.         readfin(); //"
  10.         _token = readfin(); //_TOKTEXT
  11.         inclfnloop:
  12.           asmreadprefixed(); //ўшЄрхь ўхЁхч readfin, ЁрёъЁ√трхь \n \r \t \0
  13.           IF ((_token==+_TOKENDTEXT)||_waseof) goto inclfnq; //BREAK;
  14.           //IF (_waseof) BREAK; //эр тё ъшщ ёыєўрщ
  15.           _lenfn = stradd(_fn, _lenfn, (CHAR)_token); //asmbyte(_prefixedtoken);
  16.           IF ((CHAR)_token == '.') i = _lenfn;
  17.           goto inclfnloop;
  18.         inclfnq:
  19.    //_lenfn = strjoineol(_fn, 0, _fn, '.'); //terminator is not copied
  20.    //_lenfn = stradd(_fn, _lenfn, '.');
  21.    _lenfn = i; //after last dot
  22.    _lenfn = stradd(_fn, _lenfn, (CHAR)((BYTE)_fn[_lenfn]&0xdf));
  23.    _lenfn = stradd(_fn, _lenfn, '_');
  24.         _fn[_lenfn] = '\0';
  25.         readfin(); //"
  26.         _fin = nfopen(_fn, "rb");
  27.    IF (_fin != (PBYTE)0) {
  28.        goto loop;
  29. ///ё■фр яюярф╕ь т ъюэЎх Їрщыр
  30.       inclq:
  31.         fclose(_fin);
  32.    }ELSE {
  33.      errstr("no "); errstr(_fn); enderr();
  34.    };
  35.         DEC _ninclfiles;
  36.         _fin = _inclfile[_ninclfiles];
  37.         _waseof = +FALSE;
  38.         goto loop;
  39.       }
  40.  
  41.       case _CMDINCBIN: {
  42.         _lenfn = 0;
  43.         readfin(); //tab
  44.         readfin(); //"
  45.         _token = readfin(); //_TOKTEXT
  46.         incbfnloop:
  47.           asmreadprefixed(); //ўшЄрхь ўхЁхч readfin, ЁрёъЁ√трхь \n \r \t \0
  48.           IF ((_token==+_TOKENDTEXT)||_waseof) goto incbfnq; //BREAK;
  49.           //IF (_waseof) BREAK; //эр тё ъшщ ёыєўрщ
  50.           _lenfn = stradd(_fn, _lenfn, (CHAR)_token); //asmbyte(_prefixedtoken);
  51.           goto incbfnloop;
  52.         incbfnq:
  53.         _fn[_lenfn] = '\0';
  54.         readfin(); //"
  55.         _fincb = nfopen(_fn, "rb");
  56.    IF (_fincb != (PBYTE)0) {
  57.         incbloop:
  58.           _token = readf(_fincb);
  59.           IF (_waseof) goto incbq; //BREAK;
  60.           asmbyte(_token);
  61.           goto incbloop;
  62.         incbq:
  63.         fclose(_fincb);
  64.    }ELSE {
  65.      errstr("no "); errstr(_fn); enderr();
  66.    };
  67.         _waseof = +FALSE;
  68.         goto loop;
  69.       }
  70.  
  71.       //case _CMDREADSTATE: {asmreadstate(); goto loop;}
  72.       case _CMDLABEL: {
  73.         _isaddr = 0x00;
  74.         _curdir = _token;
  75.         asmdir_label(); //эхы№ч  ёхщўрё яхЁхюяЁхфхы Є№! шэрўх эхы№ч  label=label+1
  76.         goto looptok; //readlabel яЁюўшЄры ёыхфє■∙шщ Єюъхэ
  77.       }
  78.  
  79.       case _CMDEXPORT: /**{
  80.         _lenfn = 0;
  81.         readfin(); //tab
  82.         readfin(); //TOK_LABEL
  83.         _token = readfin(); //_TOKTEXT
  84.         getexploop:
  85.           asmreadprefixed(); //ўшЄрхь ўхЁхч readfin, ЁрёъЁ√трхь \n \r \t \0
  86.           IF ((_token==+_TOKENDTEXT)||_waseof) goto getexpq; //BREAK;
  87.           //IF (_waseof) BREAK; //эр тё ъшщ ёыєўрщ
  88.           _lenfn = stradd(_fn, _lenfn, (CHAR)_token); //asmbyte(_prefixedtoken);
  89.           goto getexploop;
  90.         getexpq:
  91.         _fn[_lenfn] = '\0';
  92.         goto loop;
  93.       }*/
  94.  
  95.       case _CMDORG:
  96.       case _CMDDISP:
  97.       case _CMDDB:
  98.       case _CMDDW:
  99.       case _CMDDL:
  100.       case _CMDDS:
  101.       case _CMDALIGN:
  102.  
  103.         {_isaddr = 0x00; _curdir=_token; goto loop;}
  104.  
  105.       case _FMTREEQU: {
  106.         asmfmt_reequ();
  107.         goto loop;
  108.       }
  109.       case _FMTCMD: {
  110.         IF (_curdir == +_CMDLABEL) {
  111.           IF (_labelchanged) {
  112.             errstr("redef "); errstr((PCHAR)_curlabeltext); enderr();
  113.           };
  114.         }ELSE IF (_curdir == +_CMDORG) {
  115.           asmemitblock();
  116.           _curaddr = (UINT)asmpopvalue();
  117.           _curbegin = _curaddr;
  118. #ifdef TARGET_THUMB
  119.         }ELSE IF (_curdir == +_CMDALIGN) {
  120.           //i = -(_curaddr+_curshift) & ((UINT)asmpopvalue()-1); //no bias "+1"
  121.           i = -(_curaddr+_curshift-_BIAS) & ((UINT)asmpopvalue()-1); //bias (thumb)
  122.           i = i;
  123.           WHILE (i!=0) {
  124.             asmbyte(0x00);
  125.             DEC i;
  126.           };
  127. #endif
  128.         }ELSE IF (_curdir == +_CMDDISP) {
  129.           _curshift = (UINT)asmpopvalue() - _curaddr; //todo тыюцхээю
  130.         }ELSE IF (_curdir == +_CMDENT) {
  131.           _curshift = 0; //todo тыюцхээю
  132.         }ELSE IF (_curdir == +_CMDDB) {
  133.         }ELSE IF (_curdir == +_CMDDW) {
  134.         }ELSE IF (_curdir == +_CMDDL) {
  135.         }ELSE IF (_curdir == +_CMDDS) {
  136.           IF (_nvalues==0x02) {_token = (BYTE)asmpopvalue();
  137.           }ELSE _token=0x00;
  138.           i = (UINT)asmpopvalue();
  139.           WHILE (i != 0) {
  140.             asmbyte(_token);
  141.             DEC i;
  142.           };
  143.           //fwrite(+(PBYTE)&zeros, 1, i, _fout);
  144.           //_curaddr = _curaddr + i;
  145.           //todo while фы  ds уЁєяя√ срщЄ, эю ЄЁєфэю сєфхЄ фюёЄрЄ№ шч ёЄхър
  146.         }ELSE IF (_curdir == +_CMDEXPORT) {
  147.           i = (UINT)asmpopvalue();
  148.           IF (_asms) { //ёухэхЁшЁютрЄ№ <_curlabeltext>=<?modname?>+<i-?base?>
  149.             decltoken(+_CMDLABEL);
  150.             //decltoken(+_TOKTEXT);
  151.             fputs((PCHAR)_curlabeltext, _fdecl);
  152.             //decltoken(+_TOKENDTEXT);
  153.             decltoken((BYTE)'=');
  154.             decltoken(+_TOKEXPR);
  155.             decltoken((BYTE)'_'); //todo <modname>?
  156.             decltoken((BYTE)'+');
  157.             emitn(i-_curbegin/**_BASEADDR*/);
  158.             fputs((PCHAR)_nbuf, _fdecl); //+_TOKENDTEXT==0
  159.             decltoken(+_TOKENDEXPR);
  160.             decltoken(+_FMTREEQU);
  161.             decltoken(+_TOKEOL);
  162.           }; //
  163.         ;;}ELSE {err((CHAR)_token); enderr();
  164.         };
  165.         goto loop;
  166.       }
  167.  
  168.       case _TOKEXPR: {
  169.         _token = readfin(); //(фю тїюфр)
  170.         doexpr_();
  171.         goto loop;
  172.       }
  173.       case _TOKENDEXPR: {goto loop;}
  174.  
  175.       //case _OPPEEK:{/**asmpopvalue();*/ errstr("PEEK not supported"); enderr(); goto loop;}
  176.  
  177.       case _TOKEOL: {INC _curlnbeg; goto loop;}
  178.       case _TOKEOF: {IF (_ninclfiles==0x00) {goto endloop;/**exit!!!*/}ELSE goto inclq;} //todo break
  179.  
  180.       case _TOKEQUAL: //=
  181.       case _TOKPRIME:
  182.       case _TOKDBLQUOTE: //" //TODO чрўхь?
  183.       case _TOKOPEN:
  184.       case _TOKOPENSQ:
  185.       case _TOKCLOSE:
  186.       case _TOKCLOSESQ:
  187.       case _TOKCOLON:
  188.       case _TOKDIRECT: //#
  189.       case _TOKSPC1:
  190.       case _TOKSPC2:
  191.       case _TOKSPC3:
  192.       case _TOKSPC4:
  193.       case _TOKSPC5:
  194.       case _TOKSPC6:
  195.       case _TOKSPC7:
  196.       case _TOKSPC8:
  197.  
  198.         {goto loop;}
  199.  
  200.       case _TOKCOMMENT: { /**skip cmt text*/
  201.         REPEAT {
  202.           _token=readfin();
  203.         }UNTIL ((_token==+_TOKEOL/**_TOKENDCOMMENT*/)||(_token==+_TOKEOF)/**||_waseof*/); /**Єюъхэ, ъюЄюЁ√щ эх тёЄЁхўрхЄё  т ЄхъёЄрї*/
  204.         goto loop;
  205.       }
  206.       case _TOKLABEL: { //эрщЄш ш яЁюўшЄрЄ№ ьхЄъє //TODO єсЁрЄ№, эю ёхщўрё эєцэю!
  207.         _token=readfin(); //яхЁт√щ ёшьтюы ьхЄъш
  208.         readlabel();
  209.         _plabel_index = findlabel(_curlabeltext);
  210.         asmpushvalue(getlabel());
  211.         goto looptok; //readlabel яЁюўшЄры ёыхфє■∙шщ Єюъхэ
  212.       }
  213.       case _ERR: {
  214.         _token=readfin();
  215.         IF       (_token==+_ERRCMD) {errstr("badcmd \""); goto err;
  216.         }ELSE IF (_token==+_ERREXPR) {errstr("badexpr \""); goto err;
  217.         }ELSE IF (_token==+_ERRCOMMA) {errstr("need \',\' \""); goto err;
  218.         }ELSE IF (_token==+_ERRPAR) {errstr("badpar \""); goto err;
  219.         }ELSE IF (_token==+_ERROPEN) {errstr("need \'(\'/\'[\' \""); goto err;
  220.         }ELSE IF (_token==+_ERRCLOSE) {errstr("need \')\'/\']\' \""); goto err;
  221.         }ELSE IF (_token==+_ERRREG) {errstr("badreg \"");
  222.           err:
  223.           asmerrtext(); goto loop;
  224.         };
  225.       }
  226.  
  227.       case _OPWRSTR: { //фю эхую quotesymbol
  228.         //чряшёрЄ№ ёЄЁюъє тэєЄЁш text...endtext
  229.         _token = readfin(); //_TOKTEXT
  230.         writestringloop:
  231.           asmreadprefixed(); //ўшЄрхь ўхЁхч readfin, ЁрёъЁ√трхь \n \r \t \0
  232.           IF ((_token==+_TOKENDTEXT)||_waseof) goto loop; //BREAK;
  233.           //IF (_waseof) BREAK; //эр тё ъшщ ёыєўрщ
  234. #ifdef TARGET_SCRIPT
  235.           asmpushvalue((LONG)_prefixedtoken);
  236.           asmbytepopvalue();
  237. #else
  238.           asmbyte(_prefixedtoken);
  239. #endif
  240.           goto writestringloop;
  241.       }
  242.       case _OPWRVAL: { //ёЄюшЄ яюёых т√Ёрцхэш 
  243.         IF       (_curdir==+_CMDDB) {asmbytepopvalue();
  244.         }ELSE IF (_curdir==+_CMDDW) {asmwordpopvalue();
  245.         }ELSE IF (_curdir==+_CMDDL) {asmlong((LONG)asmpopvalue());
  246.         };
  247.         goto loop;
  248.       }
  249.  
  250.       //case _TOKTEXT: {errstr("TEXT"); enderr(); /**format error*/ goto loop;}
  251.       //case _TOKENDTEXT: {errstr("ENDTEXT"); enderr(); /**format error*/ goto loop;}
  252.       //case _TOKENDCOMMENT: {errstr("ENDCOMMENT"); enderr(); /**format error*/ goto loop;}
  253.       //case _TOKENDERR: {errstr("ENDERR"); enderr(); goto loop;}
  254.