next up previous contents
Next: Executia efectiva Up: Plotterul PLINT Previous: Motorul de primitive   Cuprins

Bufferul de comenzi

Existenta bufferul care tine stocate comenzile pana la golirea lor este motivat de aceea ca e primordiala asigurarea unui timp cat mai mic de executie a interpretorului. Pentru desene nu prea complicate, aceasta s-ar putea realiza daca se acumuleaza comenzile in buffer, interpretorul termina si desenarea merge in background. Tinand cont de faptul ca exista doar 3 comenzi de miscare: inainte, stai, inapoi, nu ar avea rost sa se tine pe 4 octeti un cod de miscare; e de ajuns 2 biti; ba mai mult s-ar putea ca sa se repete o serie de comenzi pe ambele axe de un numar de ori; se recurge prin urmare la o codificare RLE. Algoritmul e urmatorul:
  un cod de miscare se (de)codifica astfel:
  (01) i = 0; STARE = NORMAL;
  (02) daca i == max treci la (09)
       altfel
       {
         citeste 2 (ab) biti de la indexul i din buffer
         ab | semnif.
         ---+--------
         00 | repaus
         01 | inainte
         11 | inapoi
         10 | special
         i += 2
       }
  (03) daca ab == 10 continua
       altfel reia de la (02)
  (04) citeste 2 biti (cd) de la indexul i din buffer
       cd | semnif.
       ---+--------
       00 | repaus
       01 | inainte
       11 | inapoi
       10 | creion
       i += 2
  (05) daca cd == 10
       {
          modifica starea de apasat a creionului
	  reia de la (02)
       }
       altfel continua
  (06) STARE = RLE;
       citeste 16 biti (b15..b0) de la indexul i din buffer
       acestia reprezinta un numar pe 16 biti (n = 2^b15..b0)
       i += 16
  (07) pe parcursul urmatorelor n miscari executa miscarea
       codificata de cd (== 00, 01 sau 10) (i += m*2)
  (08) STARE = NORMAL; reia de la (02)
  (09) gata.

Nota: Avantajul apare cand sunt mai mult de 2 + PLOT_NR_COMMANDS
   comenzi succesive identice


Sebastian Glita 2002-06-19