?login_element?

Subversion Repositories NedoOS

Rev

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

  1. //// ёЄрэфрЁЄэ√х тхЄъш
  2.  
  3.       case _CMDINCLUDE: {
  4.         _inclfile[_ninclfiles] = _fin;
  5.         INC _ninclfiles;
  6.         _lenfn = 0;
  7.         i = 0;
  8.         readfin(); //tab
  9.         readfin(); //"
  10.         //readfin(); //TOK_WRSTR
  11.         _token = readfin(); //TOK_TEXT
  12.         inclfnloop:
  13.           asmreadprefixed(); //ўшЄрхь ўхЁхч readfin, ЁрёъЁ√трхь \n \r \t \0
  14.           IF ((_token==+_TOKENDTEXT)||_waseof) goto inclfnq; //BREAK;
  15.           //IF (_waseof) BREAK; //эр тё ъшщ ёыєўрщ
  16.           _lenfn = stradd(_fn, _lenfn, (CHAR)_token); //asmbyte(_prefixedtoken);
  17.           IF ((CHAR)_token == '.') i = _lenfn;
  18.           goto inclfnloop;
  19.         inclfnq:
  20.    //_lenfn = strjoineol(_fn, 0, _fn, '.'); //terminator is not copied
  21.    //_lenfn = stradd(_fn, _lenfn, '.');
  22.    _lenfn = i; //after last dot
  23.    _lenfn = stradd(_fn, _lenfn, (CHAR)((BYTE)_fn[_lenfn]&0xdf));
  24.    _lenfn = stradd(_fn, _lenfn, '_');
  25.         _fn[_lenfn] = '\0';
  26.         readfin(); //"
  27.         _fin = nfopen(_fn, "rb");
  28.    IF (_fin != (PBYTE)0) {
  29.        goto loop;
  30. ///ё■фр яюярф╕ь т ъюэЎх Їрщыр
  31.       inclq:
  32.         fclose(_fin);
  33.    }ELSE {
  34.      errstr("no "); errstr(_fn); enderr();
  35.    };
  36.         DEC _ninclfiles;
  37.         _fin = _inclfile[_ninclfiles];
  38.         _waseof = +FALSE;
  39.         goto loop;
  40.       }
  41.  
  42.       case _CMDINCBIN: {
  43.         _lenfn = 0;
  44.         readfin(); //tab
  45.         readfin(); //"
  46.         //readfin(); //TOK_WRSTR
  47.         _token = readfin(); //TOK_TEXT
  48.         incbfnloop:
  49.           asmreadprefixed(); //ўшЄрхь ўхЁхч readfin, ЁрёъЁ√трхь \n \r \t \0
  50.           IF ((_token==+_TOKENDTEXT)||_waseof) goto incbfnq; //BREAK;
  51.           //IF (_waseof) BREAK; //эр тё ъшщ ёыєўрщ
  52.           _lenfn = stradd(_fn, _lenfn, (CHAR)_token); //asmbyte(_prefixedtoken);
  53.           goto incbfnloop;
  54.         incbfnq:
  55.         _fn[_lenfn] = '\0';
  56.         readfin(); //"
  57.         _fincb = nfopen(_fn, "rb");
  58.    IF (_fincb != (PBYTE)0) {
  59.         incbloop:
  60.           _token = readf(_fincb);
  61.           IF (_waseof) goto incbq; //BREAK;
  62.           asmbyte(_token);
  63.           goto incbloop;
  64.         incbq:
  65.         fclose(_fincb);
  66.    }ELSE {
  67.      errstr("no "); errstr(_fn); enderr();
  68.    };
  69.         _waseof = +FALSE;
  70.         goto loop;
  71.       }
  72.  
  73.       //case _CMDREADSTATE: {asmreadstate(); goto loop;}
  74.       case _CMDLABEL: {
  75.         _isaddr = 0x00;
  76.         _curdir = _token;
  77.         asmdir_label(); //эхы№ч  ёхщўрё яхЁхюяЁхфхы Є№! шэрўх эхы№ч  label=label+1
  78.         goto loop;
  79.       }
  80.  
  81.       case _CMDEXPORT: /**{
  82.         _lenfn = 0;
  83.         readfin(); //tab
  84.         readfin(); //TOK_LABEL
  85.         _token = readfin(); //TOK_TEXT
  86.         getexploop:
  87.           asmreadprefixed(); //ўшЄрхь ўхЁхч readfin, ЁрёъЁ√трхь \n \r \t \0
  88.           IF ((_token==+_TOKENDTEXT)||_waseof) goto getexpq; //BREAK;
  89.           //IF (_waseof) BREAK; //эр тё ъшщ ёыєўрщ
  90.           _lenfn = stradd(_fn, _lenfn, (CHAR)_token); //asmbyte(_prefixedtoken);
  91.           goto getexploop;
  92.         getexpq:
  93.         _fn[_lenfn] = '\0';
  94.         goto loop;
  95.       }*/
  96.  
  97.       case _CMDORG:
  98.       case _CMDDISP:
  99.       case _CMDDB:
  100.       case _CMDDW:
  101.       case _CMDDL:
  102.       case _CMDDS:
  103.       case _CMDALIGN:
  104.  
  105.         {_isaddr = 0x00; _curdir=_token; goto loop;}
  106.  
  107.       case _FMTREEQU: {
  108.         asmfmt_reequ();
  109.         goto loop;
  110.       }
  111.       case _FMTCMD: {
  112.         IF (_curdir == +_CMDLABEL) {
  113.           IF (_labelchanged) {
  114.             errstr("redef "); errstr((PCHAR)_curlabeltext); enderr();
  115.           };
  116.         }ELSE IF (_curdir == +_CMDORG) {
  117.           asmemitblock();
  118.           _curaddr = (UINT)asmpopvalue();
  119.           _curbegin = _curaddr;
  120. #ifdef TARGET_THUMB
  121.         }ELSE IF (_curdir == +_CMDALIGN) {
  122.           //i = -(_curaddr+_curshift) & ((UINT)asmpopvalue()-1); //no bias "+1"
  123.           i = -(_curaddr+_curshift-_BIAS) & ((UINT)asmpopvalue()-1); //bias (thumb)
  124.           i = i;
  125.           WHILE (i!=0) {
  126.             asmbyte(0x00);
  127.             DEC i;
  128.           };
  129. #endif
  130.         }ELSE IF (_curdir == +_CMDDISP) {
  131.           _curshift = (UINT)asmpopvalue() - _curaddr; //todo тыюцхээю
  132.         }ELSE IF (_curdir == +_CMDENT) {
  133.           _curshift = 0; //todo тыюцхээю
  134.         }ELSE IF (_curdir == +_CMDDB) {
  135.         }ELSE IF (_curdir == +_CMDDW) {
  136.         }ELSE IF (_curdir == +_CMDDL) {
  137.         }ELSE IF (_curdir == +_CMDDS) {
  138.           IF (_nvalues==0x02) {_token = (BYTE)asmpopvalue();
  139.           }ELSE _token=0x00;
  140.           i = (UINT)asmpopvalue();
  141.           WHILE (i != 0) {
  142.             asmbyte(_token);
  143.             DEC i;
  144.           };
  145.           //fwrite(+(PBYTE)&zeros, 1, i, _fout);
  146.           //_curaddr = _curaddr + i;
  147.           //todo while фы  ds уЁєяя√ срщЄ, эю ЄЁєфэю сєфхЄ фюёЄрЄ№ шч ёЄхър
  148.         }ELSE IF (_curdir == +_CMDEXPORT) {
  149.           i = (UINT)asmpopvalue();
  150.           IF (_asms) { //ёухэхЁшЁютрЄ№ <_curlabeltext>=<?modname?>+<i-?base?>
  151.             decltoken(+_CMDLABEL);
  152.             decltoken(+_TOKTEXT);
  153.             fputs((PCHAR)_curlabeltext, _fdecl);
  154.             decltoken(+_TOKENDTEXT);
  155.             decltoken(+_TOKEQUAL/**'='*/);
  156.             decltoken(+_TOKLABEL);
  157.             decltoken(+_TOKTEXT);
  158.             decltoken((BYTE)'_'); //todo <modname>?
  159.             decltoken(+_TOKENDTEXT);
  160.             decltoken(+_TOKPLUS/**'+'*/);
  161.             decltoken(+_TOKNUM);
  162.             decltoken(+_TOKTEXT);
  163.             emitn(i-_curbegin/**_BASEADDR*/);
  164.             fputs((PCHAR)_nbuf, _fdecl); //+_TOKENDTEXT==0
  165.             decltoken(+_TOKENDTEXT);
  166.             decltoken(+_OPADD);
  167.             decltoken(+_FMTREEQU);
  168.             decltoken(+_TOKEOL);
  169.           }; //
  170.         ;;}ELSE {err((CHAR)_token); enderr();
  171.         };
  172.         goto loop;
  173.       }
  174.  
  175.       case _OPPUSH0: {asmpushvalue(0L); /**readfin();*/ goto loop;}
  176.  
  177.       case _OPADD:   {                           asmpushvalue(asmpopvalue()+asmpopvalue()); goto loop;}
  178.       case _OPSUB:   {tempvalue=asmpopvalue();   asmpushvalue(asmpopvalue()-tempvalue); goto loop;}
  179.       case _OPMUL:   {                           asmpushvalue(asmpopvalue()*asmpopvalue()); _isaddr = 0x00; goto loop;}
  180.       case _OPDIV:   {
  181.         tempvalue=asmpopvalue();
  182.         {
  183.         ;;IF (tempvalue!=0L)
  184.           asmpushvalue(asmpopvalue()/tempvalue);
  185.         }
  186.         goto loop;
  187.       }
  188.       case _OPAND:   {                           asmpushvalue(asmpopvalue()&asmpopvalue()); goto loop;}
  189.       case _OPOR:    {                           asmpushvalue(asmpopvalue()|asmpopvalue()); goto loop;}
  190.       case _OPXOR:   {                           asmpushvalue(asmpopvalue()^asmpopvalue()); goto loop;}
  191.       case _OPSHL:   {tempvalue=asmpopvalue();   asmpushvalue(asmpopvalue()<<tempvalue); goto loop;}
  192.       case _OPSHR:   {tempvalue=asmpopvalue();   asmpushvalue(asmpopvalue()>>tempvalue); goto loop;}
  193.       //case _OPEQ:    {                           asmpushbool((asmpopvalue()==asmpopvalue())); goto loop;} //шэрўх эхы№ч  т ыюу.т√Ёрцхэш ї шёяюы№чютрЄ№ ъюэёЄрэЄє TRUE (-1 шыш 1 эхяЁхфёърчєхью)
  194.       //case _OPNOTEQ: {                           asmpushbool((asmpopvalue()!=asmpopvalue())); goto loop;}
  195.       //case _OPLESS:  {tempvalue=asmpopvalue();   asmpushbool((UINT)asmpopvalue() <  (UINT)tempvalue); goto loop;}
  196.       //case _OPLESSEQ:{tempvalue=asmpopvalue();   asmpushbool((UINT)asmpopvalue() <= (UINT)tempvalue); goto loop;}
  197.       //case _OPMORE:  {tempvalue=asmpopvalue();   asmpushbool((UINT)asmpopvalue() >  (UINT)tempvalue); goto loop;}
  198.       //case _OPMOREEQ:{tempvalue=asmpopvalue();   asmpushbool((UINT)asmpopvalue() >= (UINT)tempvalue); goto loop;}
  199.       case _OPINV:   {                           asmpushvalue(~asmpopvalue()); goto loop;} //==invbool
  200.       //case _OPPEEK:{/**asmpopvalue();*/ errstr("PEEK not supported"); enderr(); goto loop;}
  201.  
  202.       case _TOKEOL: {INC _curlnbeg; goto loop;}
  203.       case _TOKEOF: {IF (_ninclfiles==0x00) {goto endloop;/**exit!!!*/}ELSE goto inclq;} //todo break
  204.  
  205.       case _TOKPLUS/**'+'*/:
  206.       case _TOKMINUS/**'-'*/:
  207.       case _TOKSTAR/**'*'*/:
  208.       case _TOKSLASH/**'/'*/:
  209.       case _TOKLESS/**'<'*/:
  210.       case _TOKMORE/**'>'*/:
  211.       case _TOKEQUAL/**'='*/:
  212.       case _TOKAND/**'&'*/:
  213.       case _TOKPIPE/**'|'*/:
  214.       case _TOKCARON/**'^'*/:
  215.       case _TOKTILDE/**'~'*/:
  216.       case _TOKEXCL/**'!'*/:
  217.       case _TOKPRIMESYM:
  218.       case _TOKDBLQUOTESYM:
  219.       case _TOKOPEN:
  220.       case _TOKOPENSQ:
  221.       case _TOKCLOSE:
  222.       case _TOKCLOSESQ:
  223.       case _TOKCOLON:
  224.       case _TOKDIRECT:
  225.       case _TOKSPC0:
  226.       case _TOKSPC1:
  227.       case _TOKSPC2:
  228.       case _TOKSPC3:
  229.       case _TOKSPC4:
  230.       case _TOKSPC5:
  231.       case _TOKSPC6:
  232.       case _TOKSPC7:
  233.       case _TOKSPC8:
  234.  
  235.         {goto loop;}
  236.  
  237.       case _TOKPRIME: {
  238.         readfin(); //text
  239.         asmreadprefixed(); //ўшЄрхь ўхЁхч readfin, ЁрёъЁ√трхь \n \r \t \0
  240.         asmpushvalue((LONG)_prefixedtoken);
  241.         readfin(); //endtext
  242.         readfin(); //чръЁ√тр■∙шщ ряюёЄЁюЇ
  243.         goto loop;
  244.       }
  245.       case _TOKDOLLAR: {asmpushvalue((LONG)(_curaddr+_curshift)); _isaddr = +_ASMLABEL_ISADDR; goto loop;}
  246.  
  247.       case _TOKCOMMENT: { /**skip cmt text*/
  248.         REPEAT {
  249.           _token=readfin();
  250.         }UNTIL ((_token==+_TOKENDCOMMENT)||_waseof); /**Єюъхэ, ъюЄюЁ√щ эх тёЄЁхўрхЄё  т ЄхъёЄрї*/
  251.         goto loop;
  252.       }
  253.       case _TOKNUM: {
  254.         readfin(); //TOK_TEXT
  255.         _token = readfin(); //first digit or prefix (0x, 0b, 0)
  256.         tempvalue = 0L;
  257.         scale = 10;
  258.         IF ((CHAR)_token=='0'){
  259.           _token=readfin(); //'x' (hex), 'b' (bin), 'o' (oct), else oct with error
  260.           IF       ((CHAR)_token=='x') {
  261.             scale=16;
  262.             rdbase:
  263.             IF (_token!=+_TOKENDTEXT) _token=readfin(); //first digit
  264.           }ELSE IF ((CHAR)_token=='b') {
  265.             scale=2;
  266.             goto rdbase; //IF (_token!=+_TOKENDTEXT) _token=readfin(); //first digit
  267.           }ELSE IF ((CHAR)_token=='o') {
  268.             scale=8;
  269.             goto rdbase; //IF (_token!=+_TOKENDTEXT) _token=readfin(); //first digit
  270.           }ELSE IF ((CHAR)_token=='L') { //0L
  271.           }ELSE IF ((CHAR)_token=='.') { //0.
  272.           }ELSE IF (_token!=+_TOKENDTEXT) {
  273.             scale=8;
  274.             errstr("Use 0o oct"); enderr();
  275.           };
  276.         };
  277.         IF (_token!=+_TOKENDTEXT) {
  278.           rdnumloop: //WHILE (+TRUE)
  279.           { //яхЁтр  ЎшЇЁр ўшёыр єцх яЁюўшЄрэр
  280.             IF ((_token==+_TOKENDTEXT)||_waseof) goto rdnumend; //BREAK;
  281.             //IF (_waseof) goto rdnumend; //BREAK; //эр тё ъшщ ёыєўрщ
  282.             IF ((CHAR)_token!='L') {
  283.               IF (_token>=(BYTE)'a') {_token = _token - 0x27/**- (BYTE)'a' + 0x0a + (BYTE)'0'*/; //todo error
  284.               }ELSE IF (_token>=(BYTE)'A') {_token = _token - 0x07/**- (BYTE)'A' + 0x0a + (BYTE)'0'*/; //todo error
  285. #ifdef TARGET_SCRIPT
  286.               }ELSE IF (_token==(BYTE)'.') { //float
  287.                 fexp = 0L;
  288.                 fexpminus = +FALSE;
  289.                 ffraction = 0L;
  290.                 ffractionscale = 1L;
  291.                 _token = readfin();
  292.                 IF (_token!=+_TOKENDTEXT) {
  293.                   rdfloatloop:
  294.                   { //яхЁтр  ЎшЇЁр ўшёыр єцх яЁюўшЄрэр
  295.                     //printf("ffraction = %lf\n",(double)ffraction);
  296.                     IF ((_token==+_TOKENDTEXT)||_waseof) goto rdfloatend; //BREAK;
  297.                     //IF (_waseof) goto rdfloatend; //BREAK; //эр тё ъшщ ёыєўрщ
  298.                     IF ((CHAR)_token!='f') {
  299.                       IF (_token==(BYTE)'e') { //TODO e12/e-12
  300.                         _token = readfin();
  301.                         IF (_token==+_TOKENDTEXT) goto rdfloatend; //BREAK;
  302.                         IF (_token=='-') { //TODO
  303.                           fexpminus = +TRUE;
  304.                           _token = readfin();
  305.                         };
  306.                         //printf("fexp = %u, token = %c\n",(unsigned int)fexp, _token);
  307.                         IF (_token!=+_TOKENDTEXT) {
  308.                           rdexploop:
  309.                           { //яхЁтр  ЎшЇЁр ¤ъёяюэхэЄ√ єцх яЁюўшЄрэр
  310.                             //printf("fexp = %u\n",(unsigned int)fexp);
  311.                             IF ((_token==+_TOKENDTEXT)||_waseof) goto rdfloatend; //BREAK;
  312.                             fexp = fexp*10L + (LONG)(_token - (BYTE)'0');
  313.                             _token = readfin();
  314.                             goto rdexploop;
  315.                           }
  316.                         };
  317.                         goto rdfloatend; //BREAK;
  318.                       };
  319.                     };
  320.                     ffraction = ffraction*10L + (LONG)(_token - (BYTE)'0');
  321.                     ffractionscale = ffractionscale*10L;
  322.                     //ffraction += (float)(_token - (BYTE)'0')*ffractionscale;
  323.                     _token = readfin();
  324.                     goto rdfloatloop;
  325.                   };
  326.                 };
  327.                 rdfloatend:
  328.                 fvalue = (double)tempvalue + (double)ffraction/(double)ffractionscale; //чэръ ЁрсюЄрхЄ ъръ юяхЁрЎш , Єръ ўЄю эх єўшЄ√трхь
  329.                 IF (fexpminus) {
  330.                   fvalue = fvalue/pow10(fexp);
  331.                 }ELSE {
  332.                   fvalue = fvalue*pow10(fexp);
  333.                 };
  334.                 //fvalue = 0.1415926536;
  335.                 //printf("%ld\n",fexp);
  336.                 //printf("%20.20lf\n",fvalue);
  337.                 //printf("%20.20lf\n",0.1415926536);
  338.                 tempvalue = *(LONG*)(&fvalue);
  339.                 goto rdnumend;
  340. #endif
  341.               };//ELSE _token = _token - (BYTE)'0';
  342.               tempvalue = (LONG)scale*tempvalue + (LONG)(_token - (BYTE)'0');
  343.             };
  344.             _token = readfin();
  345.             goto rdnumloop;
  346.           };
  347.           rdnumend:;
  348.         };
  349.         asmpushvalue(tempvalue);
  350.         goto loop;
  351.       }
  352.       case _TOKLABEL: { //эрщЄш ш яЁюўшЄрЄ№ ьхЄъє
  353.         readlabel();
  354.         _plabel_index = findlabel(_curlabeltext);
  355.         asmpushvalue(getlabel());
  356.         goto loop;
  357.       }
  358.       case _ERR: {
  359.         _token=readfin();
  360.         IF       (_token==+_ERRCMD) {errstr("badcmd \""); goto err;
  361.         }ELSE IF (_token==+_ERREXPR) {errstr("badexpr \""); goto err;
  362.         }ELSE IF (_token==+_ERRCOMMA) {errstr("need \',\' \""); goto err;
  363.         }ELSE IF (_token==+_ERRPAR) {errstr("badpar \""); goto err;
  364.         }ELSE IF (_token==+_ERROPEN) {errstr("need \'(\'/\'[\' \""); goto err;
  365.         }ELSE IF (_token==+_ERRCLOSE) {errstr("need \')\'/\']\' \""); goto err;
  366.         }ELSE IF (_token==+_ERRREG) {errstr("badreg \"");
  367.           err:
  368.           asmerrtext(); goto loop;
  369.         };
  370.       }
  371.  
  372.       case _OPWRSTR: { //фю эхую quotesymbol
  373.         //чряшёрЄ№ ёЄЁюъє тэєЄЁш text...endtext
  374.         _token = readfin(); //TOK_TEXT
  375.         writestringloop:
  376.           asmreadprefixed(); //ўшЄрхь ўхЁхч readfin, ЁрёъЁ√трхь \n \r \t \0
  377.           IF ((_token==+_TOKENDTEXT)||_waseof) goto loop; //BREAK;
  378.           //IF (_waseof) BREAK; //эр тё ъшщ ёыєўрщ
  379. #ifdef TARGET_SCRIPT
  380.           asmpushvalue((LONG)_prefixedtoken);
  381.           asmbytepopvalue();
  382. #else
  383.           asmbyte(_prefixedtoken);
  384. #endif
  385.           goto writestringloop;
  386.       }
  387.       case _OPWRVAL: { //ёЄюшЄ яюёых т√Ёрцхэш 
  388.         IF       (_curdir==+_CMDDB) {asmbytepopvalue();
  389.         }ELSE IF (_curdir==+_CMDDW) {asmwordpopvalue();
  390.         }ELSE IF (_curdir==+_CMDDL) {asmlong((LONG)asmpopvalue());
  391.         };
  392.         goto loop;
  393.       }
  394.  
  395.       //case _TOKTEXT: {errstr("TEXT"); enderr(); /**format error*/ goto loop;}
  396.       //case _TOKENDTEXT: {errstr("ENDTEXT"); enderr(); /**format error*/ goto loop;}
  397.       //case _TOKENDCOMMENT: {errstr("ENDCOMMENT"); enderr(); /**format error*/ goto loop;}
  398.       //case _TOKENDERR: {errstr("ENDERR"); enderr(); goto loop;}
  399.