?login_element?

Subversion Repositories NedoOS

Rev

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

  1. //// imported
  2. #ifdef TARGET_THUMB
  3. #include "sizesarm.h"
  4. #else
  5. #ifdef TARGET_SCRIPT
  6. #include "sizesspt.h"
  7. #else
  8. #ifdef TARGET_386
  9. #include "sizes386.h"
  10. #else
  11. #include "sizesz80.h"
  12. #endif
  13. #endif
  14. #endif
  15.  
  16. //#ifdef DOUBLES
  17. //CONST BYTE _NRGS; //ўшёыю ЁхушёЄЁют
  18.  
  19.   //яЁшюЁшЄхЄ√ ЁхушёЄЁют:
  20. CONST BYTE _RMAIN; //ЁхушёЄЁ Ёхчєы№ЄрЄр ш 1-ую ярЁрьхЄЁр ёЄрэфрЁЄэ√ї ЇєэъЎшщ
  21. CONST BYTE _RMAIN2; //ЁхушёЄЁ тЄюЁюую ёыютр Ёхчєы№ЄрЄр ш 2-ую ярЁрьхЄЁр ёЄрэфрЁЄэ√ї ЇєэъЎшщ
  22. CONST BYTE _RMAIN3;
  23. CONST BYTE _RMAIN4;
  24. //#endif
  25.  
  26. PROC emitpoprg FORWARD(BYTE rnew);
  27. PROC emitpushrg FORWARD(BYTE rnew);
  28. PROC emitmovrg FORWARD(BYTE rsrc, BYTE rdest); //эх чрърч√трхЄ ш эх юётюсюцфрхЄ (ёь. moverg)
  29.  
  30. //#ifdef USE_COMMENTS
  31. //;;PROC cmt FORWARD(CHAR c);
  32. //;;PROC cmtstr FORWARD(PCHAR s);
  33. //;;PROC cmtuint FORWARD(UINT i);
  34. //;;PROC endcmt FORWARD();
  35. //#endif
  36. #ifdef USE_HINTS
  37. ;;PROC hint FORWARD(CHAR c);
  38. ;;PROC hintstr FORWARD(PCHAR s);
  39. ;;PROC hintuint FORWARD(UINT i);
  40. ;;PROC endhint FORWARD();
  41. #endif
  42. PROC err FORWARD(CHAR c);
  43. PROC errstr FORWARD(PCHAR s);
  44. PROC erruint FORWARD(UINT i);
  45. PROC enderr FORWARD();
  46.  
  47. ////
  48. VAR BYTE _usedrg[16]/**_NRGS*/;
  49. VAR BYTE _usedrgs;
  50. VAR BOOL _usedr1; //todo ьрёёшт
  51. VAR BOOL _usedr2;
  52. VAR BOOL _usedr3;
  53. VAR BOOL _usedr4;
  54.  
  55. VAR BYTE _rnew;
  56. VAR BYTE _rold;
  57. VAR BYTE _rold2;
  58. VAR BYTE _rold3;
  59.  
  60. #ifdef USE_HINTS
  61. ;;PROC hintrg(PCHAR text, BYTE data) {
  62. ;;  hintstr("//"); hintstr(text); hintuint(+(UINT)data);
  63. ;;}
  64.  
  65. ;;PROC hintrgstate() {
  66. ;;  hintrg("_fastrg4used=", +(BYTE)_usedr4); //bool!
  67. ;;  hintrg("_fastrg3used=", +(BYTE)_usedr3); //bool!
  68. ;;  hintrg("_fastrg2used=", +(BYTE)_usedr2); //bool!
  69. ;;  hintrg("_fastrgused=" , +(BYTE)_usedr1); //bool!
  70. ;;  endhint();
  71. ;;  hintrg("[0]=", _usedrg[0]); //#!
  72. ;;  hintrg("[1]=", _usedrg[1]); //#!
  73. ;;  hintrg("[2]=", _usedrg[2]); //#!
  74. ;;  hintrg("[3]=", _usedrg[3]); //#!
  75. ;;  endhint();
  76. ;;  hintrg("_usedrgs=", _usedrgs); //byte!
  77. ;;  endhint();
  78. ;;}
  79. #endif
  80.  
  81. //////////////////////////////////////////////////////////////////////////////////////////
  82. //rg pool
  83. //(т ЁхушёЄЁрї ьюцхЄ с√Є№ яєёЄю, тё╕ т ёЄхъх)
  84. //яЁюЎхфєЁ√, эхфюёЄєяэ√х шч commands
  85.  
  86. PROC nouserg FORWARD(BYTE rnew);  //Єюы№ъю ёсЁрё√трхЄ Їыру шёяюы№чютрэш  ЁхушёЄЁр ш фтшурхЄ ёў╕Єўшъ!
  87. FUNC BYTE userg FORWARD(BYTE rnew);  //Єюы№ъю єёЄрэртыштрхЄ Їыру шёяюы№чютрэш  ЁхушёЄЁр ш фтшурхЄ ёў╕Єўшъ!
  88. PROC popgetrg FORWARD(BYTE rnew);  //userg + фюсртыхэшх т юўхЁхф№ _usedrg ёэшчє + pop
  89.  
  90. //////////////////////////////////////////
  91. //схч ьр°шээюую ъюфр
  92.  
  93. //яхЁхьхёЄшЄ№ фрээ√х т чрфрээ√щ ЁхушёЄЁ rdest
  94. PROC moverg(BYTE rsrcindex, BYTE rdest) //чрюфэю чрърч√трхЄ ш юётюсюцфрхЄ ЁхушёЄЁ√
  95. {
  96. VAR BYTE rsrc;
  97.   rsrc = _usedrg[rsrcindex];
  98.   emitmovrg(rsrc,rdest); //todo шыш ёЁртэштрЄ№ rsrc!=rdest ЄєЄ?
  99.   _usedrg[rsrcindex] = rdest; //Єрь с√ыю rsrc
  100.   nouserg( rsrc ); //Єюы№ъю ёсЁрё√трхЄ Їыру шёяюы№чютрэш  ЁхушёЄЁр ш фтшурхЄ ёў╕Єўшъ!
  101.   userg( rdest ); //Єюы№ъю єёЄрэртыштрхЄ Їыру шёяюы№чютрэш  ЁхушёЄЁр ш фтшурхЄ ёў╕Єўшъ!
  102. }
  103.  
  104. PROC pushtailrg()
  105. {
  106. VAR BYTE rnew;
  107. VAR BYTE i;
  108. #ifdef USE_HINTS
  109. ;;  hintstr( "//pusholdestrg" ); endhint();
  110. #endif
  111. ;;  IF (_usedrgs<0x01) { errstr( "pusholdestrg _usedrgs=" ); erruint(+(UINT)_usedrgs); enderr();
  112. ;;  }ELSE
  113.   {
  114.     rnew = _usedrg[ 0 ];
  115.     emitpushrg( rnew );
  116.     i = 0x01;
  117.     WHILE (i < _usedrgs/**_NRGS*/) { //ёў╕Єўшъ х∙╕ эх ёфтшэєЄ
  118.       _usedrg[i-0x01] = _usedrg[i];
  119.       INC i;
  120.     };
  121.     nouserg( rnew ); //Єюы№ъю ёсЁрё√трхЄ Їыру шёяюы№чютрэш  ЁхушёЄЁр ш фтшурхЄ ёў╕Єўшъ!
  122.   };
  123. #ifdef USE_HINTS
  124. ;;  hintrgstate();
  125. #endif
  126. }
  127.  
  128. FUNC BYTE findrfree() //эрщЄш ётюсюфэ√щ (ъръ ьюцэю сюыхх с√ёЄЁ√щ) ЁхушёЄЁ ш тхЁэєЄ№ хую ъюф
  129. {
  130. VAR BYTE result;
  131.   IF (_usedrgs==_NRGS) pushtailrg();
  132.   IF       (!_usedr1) {result = 0x01;
  133.   }ELSE IF (!_usedr2) {result = 0x02;
  134.   }ELSE IF (!_usedr3) {result = 0x03;
  135.   }ELSE result = 0x04;
  136.   RETURN result;
  137. }
  138.  
  139. PROC nouserg(BYTE rnew) //Єюы№ъю ёсЁрё√трхЄ Їыру шёяюы№чютрэш  ЁхушёЄЁр ш фтшурхЄ ёў╕Єўшъ!
  140. {
  141. ;;  IF (_usedrgs==0x00) { errstr( "nouserg _usedrgs=" ); erruint(+(UINT)_usedrgs); enderr();
  142. ;;  }ELSE
  143.   {
  144.     IF       (rnew==0x01) {_usedr1 = +FALSE;
  145.     }ELSE IF (rnew==0x02) {_usedr2 = +FALSE;
  146.     }ELSE IF (rnew==0x03) {_usedr3 = +FALSE;
  147.     }ELSE _usedr4 = +FALSE;
  148.     DEC _usedrgs;
  149.   };
  150. }
  151.  
  152. FUNC BYTE userg(BYTE rnew) //Єюы№ъю єёЄрэртыштрхЄ Їыру шёяюы№чютрэш  ЁхушёЄЁр ш фтшурхЄ ёў╕Єўшъ!
  153. {
  154. ;;  IF (_usedrgs>=_NRGS) { errstr( "userg _usedrgs=" ); erruint(+(UINT)_usedrgs); enderr();
  155. ;;  }ELSE
  156.   {
  157.     IF       (rnew==0x01) {_usedr1 = +TRUE;
  158.     }ELSE IF (rnew==0x02) {_usedr2 = +TRUE;
  159.     }ELSE IF (rnew==0x03) {_usedr3 = +TRUE;
  160.     }ELSE _usedr4 = +FALSE;
  161.     INC _usedrgs;
  162.   };
  163.   RETURN rnew;
  164. }
  165.  
  166. FUNC BYTE getrg(BYTE rnew) //userg + фюсртыхэшх т юўхЁхф№ _usedrg
  167. {
  168. #ifdef USE_HINTS
  169. ;;  hintrg("getrg ",rnew); endhint();
  170. ;;  hintrgstate();
  171. #endif
  172.   _usedrg[_usedrgs] = rnew;
  173.   userg( rnew ); //Єюы№ъю єёЄрэртыштрхЄ Їыру шёяюы№чютрэш  ЁхушёЄЁр ш фтшурхЄ ёў╕Єўшъ!
  174. #ifdef USE_HINTS
  175. ;;  hintrgstate();
  176. #endif
  177.   RETURN rnew;
  178. }
  179.  
  180. PROC popgetrg(BYTE rnew) //userg + фюсртыхэшх т юўхЁхф№ _usedrg ёэшчє + pop
  181. {
  182. VAR BYTE i;
  183. #ifdef USE_HINTS
  184. ;;  hintstr( "//getoldestrg" ); endhint();
  185. #endif
  186.   i = _usedrgs; //ёў╕Єўшъ х∙╕ эх ёфтшэєЄ //_NRGS-0x01;
  187.   WHILE (i>0x00) {
  188.     _usedrg[i] =_usedrg[i-0x01];
  189.     DEC i;
  190.   };
  191.   _usedrg[ 0 ] =rnew;
  192.   userg( rnew ); //Єюы№ъю єёЄрэртыштрхЄ Їыру шёяюы№чютрэш  ЁхушёЄЁр ш фтшурхЄ ёў╕Єўшъ!
  193. #ifdef USE_HINTS
  194. ;;  hintrgstate();
  195. #endif
  196.   emitpoprg(rnew);
  197. }
  198.  
  199. //яюьхэ Є№ ьхёЄрьш фтр ЁхушёЄЁр эр тхЁ°шэх "ёЄхър" (ўшёЄю ыюушўхёъш)
  200. PROC swaptop()
  201. {
  202. VAR BYTE rtmp;
  203.   IF ( _usedrgs==0x00 ) popgetrg(0x02);
  204.   IF ( _usedrgs==0x01 ) popgetrg( findrfree() );
  205.   rtmp = _usedrg[_usedrgs-0x02]; //old
  206.   _usedrg[_usedrgs-0x02] = _usedrg[_usedrgs-0x01]; //new => old
  207.   _usedrg[_usedrgs-0x01] = rtmp; //=> new
  208. }
  209.  
  210. ////////////////////////////////////////////////////////////////////////////////
  211. //эхфюёЄєяэ√ шч ъюьяшы ЄюЁр, фюёЄєяэ√ шч commands
  212. //схч ьр°шээюую ъюфр
  213. //эх яш°єЄ т ...used (ъЁюьх initrgs)
  214.  
  215. //rg pool
  216.  
  217. PROC rgs_initrgs()
  218. {
  219.   _usedr1 = +FALSE;
  220.   _usedr2 = +FALSE;
  221.   _usedr3 = +FALSE;
  222.   _usedr4 = +FALSE;
  223.   _usedrgs = 0x00;
  224. }
  225.  
  226. PROC getrnew() //ёЄрЁрхЄё  сЁрЄ№ new=FASTRG
  227. //чфхё№ эхы№ч  фхырЄ№ getnothing (шч-чр bytetoint, inttobyte)
  228. {
  229. #ifdef USE_HINTS
  230. ;;  hintstr( "//getrnew" ); endhint();
  231. #endif
  232.   IF ( _usedrgs==0x00 ) popgetrg(0x01);
  233.   _rnew = _usedrg[_usedrgs-0x01];
  234. }
  235.  
  236. PROC getrold() //ёЄрЁрхЄё  сЁрЄ№ old=FASTRG (т√уюфэю т√ч√трЄ№ фю getrnew фы  +,-)
  237. {
  238. #ifdef USE_HINTS
  239. ;;  hintstr( "//getrold" ); endhint();
  240. #endif
  241.   IF ( _usedrgs==0x00 ) popgetrg(0x02);
  242.   IF ( _usedrgs==0x01 ) popgetrg( findrfree() );
  243.   _rold = _usedrg[_usedrgs-0x02];
  244. }
  245.  
  246. PROC getrold2() //ёЄрЁрхЄё  сЁрЄ№ old2=FASTRG (т√уюфэю т√ч√трЄ№ фю getrnew фы  +,-)
  247. {
  248. #ifdef USE_HINTS
  249. ;;  hintstr( "//getrold2" ); endhint();
  250. #endif
  251.   IF ( _usedrgs==0x00 ) popgetrg(0x03);
  252.   IF ( _usedrgs==0x01 ) { //я√Єрхьё  тч Є№ old=_RFAST2
  253.     IF ( _usedrg[0]!=0x02 ) {popgetrg(0x02);
  254.     }ELSE popgetrg( findrfree() );
  255.   };
  256.   IF ( _usedrgs==0x02 ) popgetrg( findrfree() );
  257.   _rold = _usedrg[_usedrgs-0x03];
  258. }
  259.  
  260. PROC getrold3()
  261. {
  262. #ifdef USE_HINTS
  263. ;;  hintstr( "//getrold3" ); endhint();
  264. #endif
  265.   IF ( _usedrgs==0x00 ) popgetrg(0x03);
  266.   IF ( _usedrgs==0x01 ) popgetrg( findrfree() );
  267.   IF ( _usedrgs==0x02 ) popgetrg( findrfree() );
  268.   IF ( _usedrgs==0x03 ) popgetrg( findrfree() );
  269.   _rold = _usedrg[_usedrgs-0x04];
  270. }
  271.  
  272. PROC freernew() //юётюсюфшЄ№ ЁхушёЄЁ ё тхЁ°шэ√ ёЄхър
  273. {
  274. #ifdef USE_HINTS
  275. ;;  hintstr( "//freernew" ); endhint();
  276. ;;  hintrgstate();
  277. #endif
  278.   getrnew(); //р Єю тфЁєу эхЄ т ЁхушёЄЁрї
  279.   //юўхЁхф№ usedrgs ьюцэю эх ЄЁюурЄ№, яЁюёЄю ёфтшэєЄ№ уюыютє юўхЁхфш (ёў╕Єўшъ)
  280.   nouserg( _usedrg[_usedrgs-0x01] ); //Єюы№ъю ёсЁрё√трхЄ Їыру шёяюы№чютрэш  ЁхушёЄЁр ш фтшурхЄ ёў╕Єўшъ!
  281. #ifdef USE_HINTS
  282. ;;  hintrgstate();
  283. ;;  hintstr( "//end freernew" ); endhint();
  284. #endif
  285. }
  286.  
  287. //
  288. //ёыхфє■∙шх яЁюЎхфєЁ√ эх юсЁр∙р■Єё   тэю ъ ...used
  289. //
  290. PROC getnothing() //ёюїЁрэшЄ№ ЁхушёЄЁ√ ш срщЄ√ т ёЄхъх ш юётюсюфшЄ№
  291. {
  292.   WHILE (_usedrgs>0x00) pushtailrg();
  293. }
  294.  
  295. PROC getrfree() //чрэ Є№ ётюсюфэ√щ ЁхушёЄЁ ш тхЁэєЄ№ хую ъюф
  296. //чфхё№ эхы№ч  фхырЄ№ getnothing (шч-чр bytetoint, inttobyte)
  297. {
  298. #ifdef USE_HINTS
  299. ;;  hintstr( "//getrfree" ); endhint();
  300. #endif
  301.   _rnew = getrg(findrfree());
  302. }
  303.  
  304. PROC getmainrg() //тч Є№ RMAIN=new ш юётюсюфшЄ№ юёЄры№э√х ЁхушёЄЁ√ (todo хёыш тё╕ т ЁхушёЄЁрї, Єю тёЄртшЄ№ RMAIN т oldestrg)
  305. {
  306. #ifdef USE_HINTS
  307. ;;  hintstr( "//getmainrg" ); endhint();
  308. #endif
  309.   IF ( _usedrgs==0x00 ) popgetrg( _RMAIN ); //emitpopoldestrg(RMAIN);
  310.   WHILE ( _usedrgs>0x01 ) pushtailrg();
  311.   //ЄхяхЁ№ чрэ Є Ёютэю 1 ЁхушёЄЁ
  312.   moverg( (0x00), _RMAIN ); //todo юяЄшьшчшЁютрЄ№ ўхЁхч ex de,hl
  313. #ifdef USE_HINTS
  314. ;;  hintstr( "//end getmainrg" ); endhint();
  315. #endif
  316. }
  317.  
  318. PROC getmain2rgs() //тч Є№ RMAIN=old, RMAIN2=new ш юётюсюфшЄ№ юёЄры№э√х ЁхушёЄЁ√ (todo хёыш тё╕ т ЁхушёЄЁрї, Єю тёЄртшЄ№ RMAIN, RMAIN2 т oldestrg)
  319. {
  320. #ifdef USE_HINTS
  321. ;;  hintstr( "//getmain2rgs" ); endhint();
  322. #endif
  323.   IF ( _usedrgs==0x00 ) popgetrg( _RMAIN2 );
  324.   IF ( _usedrgs==0x01 ) {
  325.     moverg( (0x00), _RMAIN2 ); //todo юяЄшьшчшЁютрЄ№ ўхЁхч ex de,hl
  326.     popgetrg( _RMAIN );
  327.   };
  328.   WHILE ( _usedrgs>0x02 ) pushtailrg();
  329.   //ЄхяхЁ№ чрэ Єю Ёютэю 2 ЁхушёЄЁр
  330.   //RMAIN, XXX: moverg((1),RMAIN2);
  331.   IF (_usedrg[0]==_RMAIN) {moverg( (0x01), _RMAIN2 );
  332.   }ELSE IF (_usedrg[1]==_RMAIN ) {
  333.     //RMAIN2, RMAIN: pusholdestrg;moverg((0),RMAIN2);popoldestrg(RMAIN);
  334.     IF (_usedrg[0]==_RMAIN2) {
  335.       pushtailrg();
  336.       moverg( (0x00), _RMAIN2 ); //todo юяЄшьшчшЁютрЄ№ ўхЁхч ex de,hl
  337.       popgetrg( _RMAIN );
  338.     }ELSE { //XXX, RMAIN: moverg((1),RMAIN2);moverg((0),RMAIN);
  339.      moverg( (0x01), _RMAIN2 ); //todo юяЄшьшчшЁютрЄ№ ўхЁхч ex de,hl //moverg((0),RMAIN) ёь. эшцх
  340.     };
  341.   };
  342.   //XXX, YYY: moverg((0),RMAIN);moverg((1),RMAIN2);
  343.   moverg( (0x00), _RMAIN ); //todo юяЄшьшчшЁютрЄ№ ўхЁхч ex de,hl
  344.   moverg( (0x01), _RMAIN2 ); //todo юяЄшьшчшЁютрЄ№ ўхЁхч ex de,hl
  345. #ifdef USE_HINTS
  346. ;;  hintstr( "//end getmain2rgs" ); endhint();
  347. #endif
  348. }
  349. /**
  350. PROC getmain3rgs()
  351. {
  352. #ifdef USE_HINTS
  353. ;;  hintstr( "//getmain3rgs" ); endhint();
  354. #endif
  355.   getmain2rgs();
  356.   getrold2();
  357. #ifdef USE_HINTS
  358. ;;  hintstr( "//end getmain3rgs" ); endhint();
  359. #endif
  360. }
  361. */
  362. PROC getmain4rgs()
  363. {
  364. #ifdef USE_HINTS
  365. ;;  hintstr( "//getmain4rgs" ); endhint();
  366. #endif
  367.   IF ( (_usedrgs!=0x04)
  368.     || (_usedrg[0]!=_RMAIN)
  369.     || (_usedrg[1]!=_RMAIN2)
  370.     || (_usedrg[2]!=_RMAIN3)
  371.     || (_usedrg[3]!=_RMAIN4)
  372.      ) {
  373.     getnothing(); //todo яю юфэюьє, ё яЁютхЁъющ эр ёююЄтхЄёЄтшх
  374.     popgetrg(_RMAIN4);
  375.     popgetrg(_RMAIN3);
  376.     popgetrg(_RMAIN2);
  377.     popgetrg(_RMAIN);
  378.   };
  379. #ifdef USE_HINTS
  380. ;;  hintstr( "//end getmain4rgs" ); endhint();
  381. #endif
  382. }
  383.  
  384. PROC setmainrg() //єёЄрэютшЄ№ яЁшчэръш, ъръ сєфЄю ь√ яюыєўшыш Ёхчєы№ЄрЄ т ЁхушёЄЁх
  385. { //ёхщўрё тёх ЁхушёЄЁ√ ёўшЄр■Єё  ётюсюфэ√ьш
  386.   getrg( _RMAIN );
  387. }
  388.  
  389. PROC setmain2rgs() //єёЄрэютшЄ№ яЁшчэръш, ъръ сєфЄю ь√ яюыєўшыш Ёхчєы№ЄрЄ т ЁхушёЄЁрї
  390. { //ёхщўрё тёх ЁхушёЄЁ√ ёўшЄр■Єё  ётюсюфэ√ьш
  391.   getrg( _RMAIN );
  392.   getrg( _RMAIN2 );
  393. }
  394.  
  395.