Curso de Pascal
Introdução


  A linguagem Pascal é uma linguagem estruturada, isto é, permite-nos uma melhor organização na maneira de trabalhar e criar nossos programas. Ela foi criada por um grupo de estudantes no intuito de facilitar a programação de computadores.

  O que vem a ser uma linguagem estruturada?

  Em uma linguagem estruturada, as rotinas são separadas em blocos visivelmente identificados. Dessa forma, o programa fica mais legível, mais fácil de organizar e gerenciar. Já no caso do Basic, que não é uma linguagem estruturada, o código fica disposto em linhas sequenciais, sem qualquer tipo de separação, tornando-o mais complexo de utilizar.

  Como na maioria das linguagens de alto nível, o código de um programa em Pascal é compilado para a linguagem de máquina e então executado. Já a linguagem Basic é interpretada.

  Afinal, o que vem a ser uma linguagem compilada ou interpretada?

  Um programa é compilado 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.
  Um programa interpretado leva mais tempo para executar do que um traduzido, visto que é necessário fazer a tradução para a linguagem de máquina linha a linha, enquanto que no programa compilado o código executável já está em linguagem de máquina.

  O compilador de Pascal para o MSX é o Turbo Pascal, no qual possui duas versões: 2 e 3.
  O Turbo Pascal do MSX é perfeitamente compatível com os compiladores Pascal do PC, desde que utilizada a linguagem padrão Pascal, isto é, sem as rotinas específicas do sistema MSX. Desse modo, se você fizer um programa em Pascal em um computador e levar os fontes para compilar no outro, vai funcionar. O que não se pode fazer é 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ê à linguagem Pascal, saber como compilar no MSX e como utilizar a bliblioteca de rotinas criadas por Kari Lammassaari para o MSX.


  Primeiros passos

  Há três maneiras diferentes de se compilar um programa em Pascal para utilizar no 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 primeiro no PC para depois ir para o MSX, pode fazer tranqüilamente. É mais prático de programar e mais rápido para compilar e testar. Assim, escolha a opção 3. Mas lembre-se de que o código executável gerado no PC não irá funcionar no MSX (exceto na opção 2).

  Quando se desejar trabalhar no MSX, alguns problemas deverão estar em mente. Vamos a eles:   Para contornar esses problemas, recomenda-se:   Uma alternativa interessante é utilizar o programa "MSX Pad" da MSX Files (http://www.icongames.com/msxfiles). 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 automaticamente um emulador de MSX para testar o programa.


  Turbo Pascal 2

  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.



  Turbo Pascal 3.3f e MPW

  A versão mais atual do compilador Turbo Pascal é a versão 3.3f e pode ser encontrada na antiga Funet.
  Esse compilador não possui editor, sendo necessário utilizar o editor MPW.

  Abra o editor Mac Program Writer.
   
  Agora estamos no editor MPW. Principais comandos:

F1 - Ajuda.
F2 - Salva texto.
F3 - Abre texto.
F5 - Preferências.
F6 - Exibe diretório.
F8 - Divide a tela em duas para abrir dois textos ao mesmo tempo.
F9 - Troca texto ativo.
F10 - Sai do editor e volta para o DOS.
   
  Escrever o mesmo programa do exemplo do Turbo Pascal 2.

  Dicas:
  O comando control + K + B marca o inicio de um bloco.
  O comando control + K + K marca o fim do bloco.
  O comando control + K + C copia o bloco selecionado para a linha atual.
   
  Tecle F2 para salvar o programa.

  Nome do arquivo: "hello.pas".

  Quando a pergunta sobre trocar tabulações por espaços surgir, escolha N.

  Saia do editor teclando F10 (shift + F5).
   
  Para compilar o programa é fácil.

  Digite no DOS: "turbo hello".

  A extensão ".pas" deverá ser omitida.
   
  Para executar, basta digitar "hello".


  Entendendo o mecanismo do Pascal



  O Turbo Pascal 2 pode tanto compilar na memória, como salvar em disco no formato ".com". Para escolher a opção, entre no menu de compilação. Já o Turbo Pascal 3 somente pode compilar para arquivo ".com".


  Meus primeiros programas em Pascal

  Como boa parte dos usuários de MSX possuem conhecimentos sobre a linguagem Basic, os primeiros programas em Pascal aparecem juntamente com seu equivalente em Basic para comparação dos códigos. Algumas estruturas como IF-THEN-ELSE e FOR são similares ao Basic. Entretanto, se você não conhece nada sobre programação, não se preocupe. As seções seguintes explicam em detalhes essas estruturas.
  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.
  Então, vejamos alguns exemplos. Mãos à obra!


  Exemplo 1

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

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



  Exemplo 2

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

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

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


  Obs: No Pascal é obrigatória a declaração de uma variável, bem como o seu tipo. Sintaxe:
nome_variavel : tipo
  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

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

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. 


  Dicas:

  Exemplo 4

  O objetivo dos programas é identificar se alguém também se chama "MSX". Caso afirmativo, chama a pessoa de Xará. Caso negativo, imprime a mensagem "Seu nome é (...)" com o nome fornecido pela pessoa.

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

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


  Comentários:

  O condicional IF-THEN-ELSE pode ser dividido em duas estruturas: uma contendo o códigos de tratamento para condição verdadeira, outra contendo o código de tratamento para condição falsa. A divisão dos tratamentos em blocos já mostra uma grande vantagem do Pascal sobre o Basic, uma vez que cada bloco pode ter quantas linhas for necessário.
IF <condição>
  código, se condição for verdadeira.
ELSE
  código, se condição for falsa.

  O tratamento ELSE não é obrigatório, assim como no Basic.

  Quando uma estrutura como IF, WHILE, FOR em Pascal possuir apenas uma linha, não é necessário utilizar os delimitadores "begin" e "end". Ex:
if a=4 then
  writeln('Valor correto');

  Se um IF possuir apenas uma linha de código de tratamento e for SEGUIDO DE ELSE, essa linha de tratamento não irá possui o ponto e vírgula ao final. Equivaleria escrever o comando todo em uma linha:
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 do "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.');

  A regra dos delimitadores também se aplica ao "else". Entretanto, a linha simples, bem como o "end" do "else" sempre recebem o ponto e vírgula (;) ao final:
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 em Pascal

  O Pascal não possui linhas numeradas como o Basic, mas também executa o programa linha a linha, instrução a instrução. Ele começa pelo corpo principal do programa, pelas linhas de cima e caminha no sentido para baixo baixo, sempre em linhas consecutivas, salvo encontre alguma chamada de função ou procedimento (desvio).
  O corpo principal do programa é o "begin" e "end" que normalmente estão localizados ao final do código do programa e não estão ligados a qualquer outra estrutura, como uma função, procedimento, for, if, while etc. Sua sintaxe é:

begin
  código
end.
  No Pascal é obrigatória a declaração de variáveis que serão utilizadas no programa, bem como a indicação do tipo da variável. As variáveis declaradas se localizam no topo do programa. As declarações de variáveis ou tipos não fazem parte da execução do programa, onde o que executa é o corpo principal e as sub-rotinas como procedimentos e funções.
  A execução do programa começa no corpo principal do programa através da primeira linha de instrução depois do "begin" e vai descendo linha a linha até a última instrução antes do "end.".
var a : integer;

begin
  linha_1  |
  linha_2  |
  linha_3  |
  ...      V
end.
  Quando há um chamada de uma sub-rotina, o programa pára naquela linha e passa a executar as linhas da sub-rotina até terminar, sempre começando de cima para baixo. Ao retornar, começa a executar a linha seguinte.

  Os exemplos a seguir contêm o número da ordem de execução das instruções do programa em Pascal.
   begin
01   writeln('Olá');
   end.
  Saída:
  Olá

  Vamos ver um exemplo com um procedimento (procedure). O procedimento em Pascal é uma função que não retorna valor.
   procedure proc1;
   begin
03   writeln('proc1');       +---+
   end;                      |   |
                             |   |
   begin                     |   |
01   writeln('Olá');     |   |   |
02   proc1;              +---+   |
04   writeln('Tchau');           V
   end.
  Saída:
  Olá
  proc1
  Tchau

  Se omitirmos a chamada ao procedimento, ele não será executado:
   procedure proc1;
   begin
     writeln('proc1');
   end;

   begin
01   writeln('Olá');
   end.
  Saída:
  Olá


  Todas as teclas de atalho do Turbo Pascal 2 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  


  Biblioteca para o MSX


  O programador Kari Lammassaari criou algumas rotinas escritas em Assembly para o uso no Pascal do MSX, 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 Lammassaari, são rotinas que acessam recursos do MSX e que não existem no Turbo Pascal nativo, tais como desenhar um círculo na tela e tocar uma música.
  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. Dado que o Pascal permite a inserção de código de máquina no programa, fica fácil solucionar esse problema.
  Observe mais uma vantagem de se incluir programas prontos: um programador experiente fez rotinas em Assembly para resolver um determinado problema que necessita de acesso a um recurso específico do MSX. Meu trabalho é apenas incorpar tal rotina ao meu programa e chamar pela função que eu desejo executar, passando os parâmetros necessários para ela. Assim, não preciso saber programar Assembly para resolver meu problema. Somente tenho que chamar a rotina criada. Ex:

circle(100,100,50,15);

  As rotinas do Lammassaari foram criadas em arquivos separados, que são anexadas ao programa principal através do comando "include".
  Os arquivos de inclusão são arquivos com extensão ".inc" e devem ser chamados dentro do programa em pascal da segunte maneira:
{$i arquivo.inc}
  Exemplo de um programa que inclui um outro arquivo.
{$i date.inc}

var hora : integer;

begin
   gettime := hora;
end.
  Note que o comando "gettime" não existe no Pascal. Entretanto, o arquivo de inclusão "date.inc" possui uma rotina de acesso ao relógio do MSX, no qual disponibiliza esse recurso através da função "gettime". Repare que a inclusão do arquivo deve ser a primeira coisa a ser feita.
  Na seção programming/pascal da Funet (atual msxarchive) estão todos os arquivos ".inc" da biblioteca do Lammassaari.

  Obs:
  1. Até a versão do Turbo Pascal do MSX (versão 3.3), somente é posível incluir arquivos 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).
  2. 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.


<< Anterior Pascal Próxima >>


/MARMSX/CURSOS/PASCAL