As primeira instruções
Definindo CLS, BUFFER, FIG e LET

Todos os detalhes mostrados aqui deverão destar dentro da procedure ExeLin.

.A instrução CLS deve, em primeiro lugar, verificar se vai ser processada na Tela ou no Buffer, testando a flag Stb. Feito isso, ela verifica se há parâmetro (Vs1). Caso houver, o mesmo será usado como valor RGB da cor. Caso contrário, a cor para limpar a tela será obtida da variável 3:

  //Limpa a tela/buffer
if Cmd = 'cls' then begin
if
Stb then begin
//limpa o buffer
if Vs1 <> '' then Buf.Canvas.Brush.Color:= StrToInt(Vs1)
else Buf.Canvas.Brush.Color:= Vars[3]; //paper
Buf.Canvas.FillRect(rect(0,0,Buf.Width,Buf.Height));
end else begin
//limpa a tela
if Vs1 <>'' then Tela.Canvas.Brush.Color:= StrToInt(Vs1)
else Tela.Canvas.Brush.Color:= Vars[3]; //paper
Tela.Canvas.FillRect(rect(0,0,Tela.Width,Tela.Height));
end;
exit;
end;

A instrução BUFFER é processada segundo o parâmetro Vs1. Se for "on" ela apenas "liga" a flag que redireciona as impressões ou montagens:

  //Liga/desliga o back buffer
if Cmd = 'buffer' then begin
if
Vs1 = 'on' then Stb:= true else begin
Stb:= false;
Tela.Canvas.Draw(0,0,Buf);
Tela.Repaint;
end;
exit;
end;

A instrução FIG usa uma procedure do club TILT (DrawTrans) para colocar a figura na tela com transparência. Se não for preciso usar transparência, são usados os métodos normais de trasnferência gráfica. O resto do procedimento é parecido com a instrução CLS, ou seja, primeiro identifica os parâmetros, depois decide se a montagem vai para o Buffer ou Tela:

  //Coloca uma figura na tela/buffer
if Cmd = 'fig' then begin
Fig:= TBitmap.Create;
if Vs1 = '' then Vs1:= '"nome"';
Fig.LoadFromFile(copy(Vs1,2,length(Vs1)-2)+'.bmp');
if Vs2 = '' then Vs2:= '0';
if Vs2[1] = '#' then Px:= Vars[StrToInt(copy(Vs2,2,100))]
else Px:= StrToInt(Vs2);
if Vs3 = '' then Vs3:= '0';
if Vs3[1] = '#' then Py:= Vars[StrToInt(copy(Vs3,2,100))]
else Py:= StrToInt(Vs3);
if Vs4 = '' then Vs4:= '0';
if Vs4[1] = '#' then Pz:= Vars[StrToInt(copy(Vs4,2,100))]
else Pz:= StrToInt(Vs4);
if Pz = 0 then begin
if
Stb then
DrawTrans(Buf.Canvas,Px,Py,Fig,0,0,
Fig.Width,Fig.Height,Vars[9])
else
DrawTrans(Tela.Canvas,Px,Py,Fig,0,0,
Fig.Width,Fig.Height,Vars[9]);
end else begin
if
Stb then
BitBlt(Buf.Canvas.Handle,Px,Py,Fig.Width,Fig.Height,
Fig.Canvas.Handle,0,0,srccopy)
else
Tela.Canvas.CopyRect(bounds(Px,Py,Fig.Width,Fig.Height),
Fig.Canvas,bounds(0,0,Fig.Width,Fig.Height));
end;
Fig.Free;
exit;
end;

A instrução LET assume que o primeiro parâmetro Vs1 é o índice da variável e o segundo Vs2 o valor a ser transferido para ele:

  //Atribuição de variável
if Cmd = 'let' then begin
Vars[StrToInt(copy(Vs1,2,100))]:= StrToInt(Vs2);
exit;
end;
 
online