Turbo Pascal

Introdução

  A linguagem Pascal é uma linguagem estruturada, isto é, permite-nos uma melhor organização na maneira de trabalhar. Foi criada por um grupo de estudantes no intuito de facilitar a programação de computadores.
  Como em maioria ds linguagens de alto nível, o programa é traduzido para a linguagem de máquina e então executado (o Basic é interpretado). Afinal, o que vem a ser traduzido ou interpretado?
  O computador não entende naturalmente uma linguagem textual (de alto nível, como o .pas ou .bas) como nós. Assim, o programa em alto nível deve sempre ser convertido em uma linguagem que o computador entenda, a linguagem de máquina (linguagem de baixo nível).
  Um programa é interpretado quando cada conjunto de instruções (geralmente uma linha) é convertido para a linguagem de máquina em tempo de execução. Assim, o interpretador converte e executa instruções linha a linha.
  Um programa é traduzido quando todo o código é convertido em linguagem de máquina antes da execução, gerando um novo arquivo chamado de arquivo executável. No caso do Pascal, um arquivo com extensão .com é gerado para ser posteriormente executado.
  Não é necessário dizer que um programa interpretado leva mais tempo para executar do que um traduzido, visto que é necessário fazer a compilação linha a linha, enquanto que no outro, essa compilação já está pronta.
  O MSX possui duas versões do Turbo Pascal: versão 2 e versão 3, que são perfeitamente compatíveis com o Pascal do PC, tanto na sintaxe, como nos arquivos fonte .PAS. Desse modo, se você fizer um programa em pascal no MSX e levar o fonte para o PC e compilar no PC, vai funcionar e vice-versa. O que não pode é levar a versão compilada de um sistema para outro. O PC conta ainda com as versões do Turbo Pascal 4, 5, 6 e 7, que possuem alguns recursos não disponíveis para MSX como os "units" e orientação a objeto.
  Este curso tem como finalidade familiarizar você ao Pascal do MSX, incluindo a utilização de blibliotecas criadas por Kari Lamassari para o MSX 2.


Iniciando

  Há três maneiras diferentes de se compilar ou estudar Pascal para MSX:

  1. Usar o Turbo Pascal para MSX.
  2. Usar um compilador Pascal para PC que gera código no formato CP/M.
  3. Usar um compilador Pascal para PC, como o Free Pascal, para testar os códigos.
  Se você deseja aprender bem a linguagem Pascal no PC antes, para depois ir para o MSX, pode fazer tranqüilamente. É mais fácil de programar e mais rápido para compilar. Assim, escolha a opção 3. Mas lembre-se de que o código executável não irá funcionar no MSX, assim como as rotinas do Lamassari.
  Quando formos passar a trabalhar no MSX, teremos duas opções. Alguns problemas podem ser citados, se fizermos a opção 1 (trabalhar direto no MSX). O primeiro é a edição do arquivo fonte. Os editores de texto para PC atuais são muito mais práticos e eficientes que os editores de texto do MSX. O segundo é o tempo de compilação de um arquivo no MSX, que é bem maior do que nos PC atuais. Dessa forma, o mais recomendado é utilizar a segunda opção, ou seja, um compilador Pascal do PC que gere um código pronto para rodar no MSX.
  Assim, uma escolha altamente recomendada é o programa MSX Pad, do SLotman, encontrado na página de MSX chamada "MSX Files". Ele possui um compilador Pascal para PC que gera código pronto para o MSX, bem como um editor de texto integrado. Além disso, é capaz de disparar um emulador de MSX para testar o código gerado.

  Algumas dicas para principiantes:
  1. Diferente do Basic, tanto o Pascal como o C precisam que nós informemos qual é o tipo de dado armazenado em cada variável que iremos trabalhar.
  2. Todo programa em Pascal precisa ter uma indicação explícita de inicio e fim. Isto vale para o corpo principal do programa, para as decisões (if) e loops (for, while, repeat)
  3. Na seção Programming da Funet (ftp://ftp.funet.fi/pub/msx/programming), encontramos o compilador Turbo Pascal para MSX. No mesmo arquivo compactado, encontramos tudo que precisamos para rodar o Turbo Pascal.
  A seguir, um mini tutorial de como rodar o Turbo Pascal para MSX.

  Após inserir o disco com o Pascal e com o MSX-DOS, tecle TURBO e enter. Ele irá perguntar se você quer que inclua as mensagens de erro. Sim, tecle Y.
   
  Agora estamos na tela principal do Pascal. Teclando:
E - Edita arquivo.
C - Compila arquivo.
R - Executa arquivo em uso (Work file).
S - Salva arquivo.
X - Executa.
D - Mostra diretório.
Q - Sai do Pascal.
O - Opções de compilação:
  M - Compila o programa na memória.
  C - Compila no disco em formato .com.
  H - Compila em formato Chain.
  Q - Sai deste menu.

  Uma outra tecla que pode ser pressionada, que não aparece no menu é a tecla W. Ela altera o arquivo ativo.
   
  Se nenhum arquivo estiver ativo, ao editarmos (E) um arquivo ele pedira a você um nome de arquivo (Work file).
  Escreva o nome desejado, sem colocar a extensão .PAS. Se o arquivo já existir, ele será aberto, senão um novo arquivo será criado.
  Vamos criar um novo arquivo. Digite: prog1. Ele criará um novo arquivo chamado prog1.pas.
  Agora, digite o programa da imagem ao lado.
  begin
    write('O MSX vive');
  end.
  Dicas: A combinação de teclas CTRL+Y apaga uma linha. Já CTRL+K e depois D sai da edição.
   
  Ao teclar CTRL+K e depois D para terminar a edição, o propt reaparece. Se desejar, tecle uma das setas para voltar a mostrar o menu.

  Agora, podemos fazer duas coisas:
  1. Somente compilar o programa na memória. Tecle C para isso.
  2. Rodar o programa. Tecle R, após compilar.
  Note que até aqui escrevemos o programa, compilamos na memória e o rodamos. Temos que salvar o código fonte do nosso programa, para futuras consultas e modificações. O Turbo Pascal não oferece ferramentas para chegarmos ao arquivo fonte a partir de um arquivo executável.
  Para salvar o arquivo fonte, tecle S. Este arquivo é salvo em formato texto e pode ser lido no Pascal do PC e também no Edit, Word etc.
  Se quisermos criar um arquivo que rode fora do Pascal, teremos que compilá-lo em um arquivo no formato .COM. Tecle O e em seguida C. Pressione Q e em seguida C.
  Dessa forma, sempre que rodarmos ou compilarmos um programa ele irá gravar um arquivo executável no formato .COM.


  Entendendo o mecanismo do Pascal:



  O pascal pode tanto compilar (transformar a sua fonte em Pascal para a linguagem de máquina) na memória, como salvar em disco no formato .COM. Entre no menu de compilação.

  Como boa parte dos usuários de MSX possuem conhecimentos sobre a linguagem Basic do MSX, coloquei alguns exemplos a seguir de programas em Pascal e o seu equivalente em Basic.
  Para aqueles já familiarizados com o Basic, estruturas como IF-THEN-ELSE e FOR são familiares. Se você não conhece nada sobre programação, não se preocupe. As seções seguintes explicam em detalhes essas estruturas.
  Então, vejamos alguns exemplos. Mãos à obra!

Exemplo 1:
Basic Pascal
10 print"O MSX vive!"  begin
  write('O MSX vive!');
end.

Objetivo dos programas: imprimir a mensagem "O MSX Vive!" na tela.


Exemplo 2:
Basic Pascal
10 for f=1 to 10
20 print f,"O MSX vive!"
30 next f 
var f : integer;

begin
  for f:=1 to 10 do
    writeln(f,' O MSX vive!');
end.


Objetivo dos programas: imprimir a mensagem "O MSX Vive!" dez vezes na tela.

  Obs: No Pascal precisamos indicar qual é o tipo de dados de um variável. As variáveis podem ser dos seguintes tipos:
 
Tipo No Pascal Tamanho
Inteira integer 2 bytes (-32768 a 32767)
Short shortint 1 byte (-128 a 127)
Longa longint 4 bytes (-2147483648 a 21...)
Byte byte 1 byte (0 a 255)
Word word 2 bytes (0 a 65535)
Booleana boolean 1 byte (0 ou 1)
Caracter char 1 byte (valor ascii)
String string[n] n bytes


Exemplo 3:
Basic Pascal
10 input"Escreva MSX para sair";n$
20 if n$ <> "MSX" then 10 
var n : string[255];

begin
  n := ' '; { Atribui valor inicial a n }
  while n <> 'MSX' do
  begin
    write('Escreva MSX para sair: ');
    readln(n);
  end;
end. 


Objetivo dos programas: ler dados do usuário até ele escrever "MSX".

  Dicas:


Exemplo 4:
Basic Pascal
10 input"Escreva seu nome";n$
20 if n$="MSX" then ?"Fala xará" else ? n$+" é o seu nome!" 
var n : string[255];

begin
  write('Escreva seu nome: ');
  readln(n);
  if nome='MSX' then
    writeln('Fala xará!')
  else
    writeln('Seu nome é ',n);
end.


  Dicas:
if nome='MSX' then writeln('Fala xará!') else writeln('Seu nome é ',n);
  Caso o IF venha possuir mais de uma linha de tratamento, deverá conter um begin, seguido de end sem ponto e vírgula. Ex:
if idade >= 65 then
begin
  writeln('O senhor já chegou à "melhoridade"');
  writeln('O senhor tem direito à prioridade em filas');
end
else
  writeln('Entre na fila comum.');
if idade < 65 then
  writeln('Entre na fila comum.')
else
begin
  writeln('O senhor já chegou à "melhoridade"');
  writeln('O senhor tem direito à prioridade em filas');
end;

  FLUXO DE EXECUÇÃO DO PROGRAMA

  O Pascal não possui número de linhas como o Basic, mas também executa linha a linha e instrução a instrução, começando pelas linhas de cima e caminhando no sentido das linhas de baixo, sempre em linhas consecutivas, salvo encontre algum desvio.
  As declarações de variáveis ou tipos não fazem parte da execução do programa. O que executa é o corpo principal e as sub-rotinas, como procedures e functions.
  A execução do programa começa no corpo principal do programa (espaço demarcado pela declaração de begin "puro" e end com ponto). Inicia pelo begin e vai descendo linha a linha até o end.
  Quando há um chamada à sub-rotina, o programa pára naquela linha e passa a executar as linhas da sub-rotina até terminar. Ao retornar, começa a executar a linha seguinte.

  O exemplo a seguir contém o número de ordem de execução dos comandos ao lado da linha de comandos.
01 begin
02   writeln('Olá');
03 end.
  Vamos ver um exemplo com um procedimento (procedure):
   procedure proc1;
04 begin
05   writeln('proc1');
06 end;

01 begin
02   writeln('Olá');
03   proc1;
07 end.
  Se omitirmos a chamada à procedure, ela não será executada:
   procedure proc1;
   begin
     writeln('proc1');
   end;

01 begin
02   writeln('Olá');
03 end.


Todas as teclas de atalho do Turbo Pascal para MSX:

Controle do cursor Teclas Opcional
Caracter à esquerda CTRL-S Seta à esquerda
Caracter à direita CTRL-D Seta à direita
Linha para cima CTRL-E Seta para cima
Linha para baixo CTRL-X Seta para baixo
Tela para cima CTRL-R  
Tela para baixo CTRL-C  
Palavra à esquerda CTRL-A  
Palavra à direita CTRL-F  
Scroll para cima CTRL-W  
Scroll para baixo CTRL-Z  
Começo da linha à esquerda CTRL-QS  
Fim da linha à direita CTRL-QD  
Topo da tela CTRL-QE  
Fim da tela CTRL-QX  
Topo do arquivo CTRL-QR  
Fim do arquivo CTRL-QC  
Começo do bloco CTRL-QB  
Fim do bloco CTRL-QK  
Posição anterior CTRL-QP  
Tabulação CTRL-I Tab
Tabulação automática (S/N) CTRL-QI  
 
Inserção ou deleção Teclas Opcional
Inserção CTRL-V Ins
Apaga caracter à esquerda BS  
Apaga caracter sob cursor CTRL-G Del
Apaga palavra à direita CTRL-T  
Insere linha CTRL-N  
Apaga linha CTRL-Y  
Apaga até o fim da linha CTRL-QY  
 
Manuseio de blocos Teclas Opcional
Marcar começo de bloco CTRL-KB  
Marcar fim de bloco CTRL-KK  
Marcar uma palavra CTRL-KT  
Mostar / esconder bloco CTRL-KH  
Copiar bloco marcado CTRL-KC  
Mover bloco marcado CTRL-KV  
Ler bloco de um arquivo CTRL-KR  
Escrever bloco num arquivo CTRL-KW  
 
Procura e troca Teclas Opcional
Procurar string CTRL-QF  
Procurar/trocar string CTRL-QA  
Repetir procura/troca CTRL-L  
 
Outros comandos Teclas Opcional
Inserir caracter de controle CTRL-P, CTRL-X  
Abandonar CTRL-U  
Restaurar linha CTRL-QL  
Terminar Edição CTRL-KD  



  O programador holandês Kari Lamassari criou algumas bibliotecas escritas em assembly para o uso no Pascal, que fazem acesso a alguns recursos do MSX como tela gráfica, sons, variáveis de sistema e relógio, bem como acesso a recursos do MSX-DOS 1 e 2.
  Uma biblioteca é uma coleção de programas prontos, que realizam determinadas tarefas. A vantagem disso é que não é necessário criar novamente uma solução para um mesmo problema já solucionado.
  No caso das bibliotecas do Lamassari, são rotinas que acessam recursos do MSX e que não existem no Turbo Pascal, tais como desenhar um círculo na tela.
  Uma vez que o Pascal não tem acesso aos recursos do MSX, faz-se necessário escrever programas na linguagem assembly para resolver tal questão. O Pascal permite a inserção de código de máquina no programa.
  Observe mais uma vantagem de se incluir programas prontos: alguém fez rotinas em assembly para resolver um determinado problema que necessita de acesso a um recurso do MSX. Eu apenas as incorporo ao meu programa, chamo a rotina passando alguns parâmetros. Assim, não preciso saber programar assembly para resolver meu problema, somente chamar a rotina. Ex:
circle(100,100,50,15);
  Até a versão do Turbo Pascal do MSX (versão 3.3), somente é posível incluir bibliotecas ao seu programa juntando os códigos. Ou seja, ao darmos um "include", estamos juntando dois arquivos em um só (semelhante ao MERGE do Basic).
  A partir da versão 4 do Turbo Pascal, é possível dividir o programa em módulos chamados "unit" e isolar o código em níveis. Por exemplo, o Pascal difere uma função chamada calcule() em units diferentes. Sejam as units math e outra estat, ao fazermos as chamadas math.calcule() e estat.calcule() estaremos chamando duas funções diferentes. Infelizmente, esse recurso não está disponível para o MSX.
  As bibliotecas ou includes são arquivos com extensão .INC e devem ser chamados dentro do programa em pascal da segunte maneira:
{$i arquivo.inc}
  Exemplo de programa que inclui biblioteca.
{$i date.inc}

var hora : integer;

begin
   gettime := hora;
end.
  Note que o comando gettime não existe no pascal. Entertanto, com a biblioteca "date.inc", o comando passa a ficar disponível. Repare que a inclusão da biblioteca deve ser a primeira coisa a ser feita.
  Na seção programming/pascal da funet estão todos os arquivos .INC da biblioteca do Lamassari.


/MARMSX/CURSOS