Subversion Repositories NedoOS

Rev

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

  1. //// imported
  2. #include "../_sdk/io.h"
  3.  
  4. //#include "../_sdk/print.h"
  5.  
  6. EXTERN PCHAR _texttoken[256];
  7.  
  8. PROC asmfilltokens FORWARD();
  9.  
  10. ////
  11.  
  12. CONST BOOL _isalphand[256]={ //тъы■ўр  Єюўъє (т юЄышўшх юЄ read.c/_isalphanum)
  13.   +FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE, +FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE, //0X
  14.   +FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE, +FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE, //1X
  15.   +FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE, +FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+TRUE/**FALSE*/,+FALSE, //2X
  16.   +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE, //3X
  17.   +FALSE,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , //4X
  18.   +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+FALSE,+FALSE,+FALSE,+FALSE,+TRUE , //5X
  19.   +FALSE,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , //6X
  20.   +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+FALSE,+FALSE,+FALSE,+FALSE,+FALSE, //7X
  21.  
  22.   +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , //8X..FX
  23.   +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , //8X..FX
  24.   +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , //8X..FX
  25.   +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , //8X..FX
  26.   +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , //8X..FX
  27.   +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , //8X..FX
  28.   +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , //8X..FX
  29.   +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE , +TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE ,+TRUE   //8X..FX
  30. };
  31.  
  32. //яхЁхф EOF ьюцхЄ с√Є№/эх с√Є№ EOL
  33.  
  34. PROC asmexport_line()
  35. {
  36. VAR BYTE token;
  37. //VAR PCHAR pintoken;
  38.  
  39.   WHILE (+TRUE) {
  40.     token = readfin();
  41. reinterpret:
  42.     IF (_waseof) BREAK;
  43.     IF (token == (BYTE)(+_TOKTEXT)) { //anytext
  44.       WHILE (+TRUE) {
  45.         token = readfin();
  46.         IF (token == +_TOKENDTEXT) BREAK;
  47.         writefout(token);
  48.       };
  49.     }ELSE IF (token == +_TOKEXPR) {
  50.       WHILE (+TRUE) {
  51.         token = readfin();
  52.         IF (token == +_TOKENDEXPR) BREAK;
  53.         writefout(token);
  54.       };
  55.     }ELSE IF ((token == +_TOKLABEL)||(token == +_CMDLABEL)) {
  56.       WHILE (+TRUE) {
  57.         token = readfin();
  58.         IF (!_isalphand[token]) goto reinterpret;
  59.         writefout(token);
  60.       };
  61.     }ELSE IF (token == +_TOKCOMMENT) {
  62.       writefout(token);
  63.       WHILE (+TRUE) {
  64.         token = readfin();
  65.         IF ((token == +_TOKEOL)||(token == +_TOKEOF)) goto reinterpret;
  66.         writefout(token);
  67.       };
  68.     }ELSE { //simple token
  69.       fputs(_texttoken[token], _fout);
  70. /**      pintoken = _texttoken[token];
  71.       WHILE (+TRUE) {
  72.         c = *(PCHAR)(pintoken);
  73.         IF (c == '\0') BREAK;
  74.         INC pintoken;
  75.         writebyte(_fexp, (BYTE)c);
  76.       };*/
  77.     };
  78.     IF (token == +_TOKEOL) BREAK;
  79.   };
  80. }
  81.  
  82. PROC asmexport(PCHAR fn)
  83. {
  84. VAR BYTE b;
  85.   //setxy(0x05,0x00);
  86.   //prchar('@');
  87.   //nprintf("Hello %s %d world!",(UINT)"ZX Spectrum",(UINT)48);
  88.  
  89.   b = 0x00;
  90.   REPEAT { //эр тё ъшщ ёыєўрщ ўшёЄшь тёх Єюъхэ√
  91.     _texttoken[b] = "";
  92.     INC b;
  93.   }UNTIL (b == 0x00);
  94.  
  95.   _texttoken[+_TOKEOL]="\n";
  96.   _texttoken[+_TOKSPC1]=" ";
  97.   _texttoken[+_TOKSPC2]="  ";
  98.   _texttoken[+_TOKSPC3]="   ";
  99.   _texttoken[+_TOKSPC4]="    ";
  100.   _texttoken[+_TOKSPC5]="     ";
  101.   _texttoken[+_TOKSPC6]="      ";
  102.   _texttoken[+_TOKSPC7]="       ";
  103.   _texttoken[+_TOKSPC8]="        ";
  104.  
  105.   _texttoken[+_TOKCOMMA]=",";
  106.   _texttoken[+_TOKOPEN]="(";
  107.   _texttoken[+_TOKOPENSQ]="[";
  108.   _texttoken[+_TOKCLOSE]=")";
  109.   _texttoken[+_TOKCLOSESQ]="]";
  110.   _texttoken[+_TOKCOLON]=":";
  111.   _texttoken[+_TOKDIRECT]="#";
  112.   _texttoken[+_TOKPRIME]="\'"; //фы  af'
  113.   _texttoken[+_TOKDBLQUOTE]="\"";
  114.   _texttoken[+_TOKEQUAL]="=";
  115.  
  116.   _texttoken[+_TOKCOMMENT]=";";
  117.  
  118.   _texttoken[+_CMDORG     ]="org";
  119.   _texttoken[+_CMDALIGN   ]="align";
  120.   _texttoken[+_CMDPAGE    ]="page";
  121.   _texttoken[+_CMDIF      ]="if";
  122.   _texttoken[+_CMDELSE    ]="else";
  123.   _texttoken[+_CMDENDIF   ]="endif";
  124.   _texttoken[+_CMDDUP     ]="dup";
  125.   _texttoken[+_CMDEDUP    ]="edup";
  126.   _texttoken[+_CMDMACRO   ]="macro";
  127.   _texttoken[+_CMDENDM    ]="endm";
  128.   _texttoken[+_CMDEXPORT  ]="export";
  129.   _texttoken[+_CMDLOCAL   ]="local";
  130.   _texttoken[+_CMDENDL    ]="endl";
  131.   _texttoken[+_CMDDISP    ]="disp";
  132.   _texttoken[+_CMDENT     ]="ent";
  133.   _texttoken[+_CMDINCLUDE ]="include";
  134.   _texttoken[+_CMDINCBIN  ]="incbin";
  135.   _texttoken[+_CMDDB      ]="db";
  136.   _texttoken[+_CMDDW      ]="dw";
  137.   _texttoken[+_CMDDL      ]="dl";
  138.   _texttoken[+_CMDDS      ]="ds";
  139.   _texttoken[+_CMDDISPLAY ]="display";
  140.   _texttoken[+_CMDREPEAT  ]="repeat";
  141.   _texttoken[+_CMDUNTIL   ]="until";
  142.   _texttoken[+_CMDSTRUCT  ]="struct";
  143.   _texttoken[+_CMDENDSTRUCT]="endstruct";
  144.  
  145.   asmfilltokens();
  146.  
  147.   //setfin( "tok.f" );
  148.   _fin = nfopen(fn, "rb");
  149.   IF (_fin != (PBYTE)0) {
  150.     _waseof = +FALSE;
  151.     _fout = openwrite( "exp.f" );
  152.  
  153.     WHILE (!_waseof) {
  154.       asmexport_line();
  155.     };
  156.  
  157.     fclose(_fout);
  158.     fclose(_fin); //closefin();
  159.   };
  160. }
  161.