Curso de dBASE II
Comandos de impressão na tela


Você está em: MarMSX >> Cursos >> dBASE II - Programável

2. Comandos de impressão na tela

Para a construção de um sistema interativo com o usuário, são necessários comandos de impressão na tela e captura de dados.

2.1. Os comandos @ y,x e SAY

Os comandos @ y,x e SAY trabalham em conjunto para posicionar o cursor em um local da tela ou impressora e imprimir uma mensagem. O comando @ y,x indica a localização onde o cursor deverá se posicionar. O valor de x corresponde à coluna, varia de 0 a n, enquanto que y corresponde à linha e varia de 0 a 254 [2]. Já o comando SAY imprime dados na tela e possui a seguinte sintaxe [2]:

SAY <campo, variável, expressão ou texto> [USING <"formato">]

O comando pode ser utilizado no modo interativo.

. @ 0,0 SAY "O MSX Vive"

2.2. Os comandos ?, ?? e REMARK

O comando ? imprime um texto, variável ou expressão na próxima linha. Já o comando ?? imprime na mesma linha do cursor.

O exemplo a seguir cria uma variável e imprime o valor.

. store 7000 to SALARIO
. ? SALARIO
     7000

Para um texto mais uma expressão (salario * 1.1):

. ? "O salario com abono de 10% é de R$ ", salario * 1.1
O salário é de         7700

O comando @ y,x não trabalha diretamente com os comandos de impressão ? ou ??, mas pode seu utilizado sozinho para posicionar o cursor em uma determinada linha (não funciona para estabelecer uma coluna, só a linha). Uma vez posicionado o cursor na linha desejada, podemos utilizar os comandos ? e ??.

@ 20,0
?? "Estou na linha 20" 
@ 20,0
? "Estou na linha 21" 

O comando remark permite imprimir textos logo após ele. Veja o exemplo a seguir.

remark ************
remark *** MENU ***
remark ************

2.3. Os comandos TEXT e ENDTEXT

Os comandos TEXT e ENDTEXT permitem identificar o início e fim, respectivamente, de uma área de texto formatada. Após o início da marcação, todos os espaços e formatações do texto devem ser seguidas. Muito semelhante à tag HTML <pre>. Veja o exemplo a seguir.

TEXT

   1. Consultar dados
   2. Inserir dados
   3. Sair   

TEXTEND

Ao rodar o programa através do comando DO, a marcação irá imprimir o texto, mas os marcadores não aparacem impressos na tela.

2.4. O comando SET FORMAT

O comando SET FORMAT direciona a saída do texto para a tela ou impressora.

Formatando a saída para a impressora.

SET FORMAT TO PRINTER

Formatando a saída para a tela.

SET FORMAT TO SCREEN

2.5. Inserindo comentários

O comando NOTE ou o símbolo * permitem inserir comentários no programa. As linhas comentadas não são apresentadas na tela ou impressora. Veja o exemplo a seguir.

@ 0,0 SAY "Isto aparece impresso na tela"
NOTE Isto não aparece na tela, mas na edição do programa

2.6. Formatação da saída - USING

A cláusula USING permite formatar a saída de dados para a tela ou impressora. É similar ao PRINT USING do Basic do MSX. Entretanto, seu uso é exclusivo com o comando SAY.

Máscaras [2]:

Exemplos:

. @ 0,0 say 150.45 using "###.#"
150.4
. @ 0,0 say "12-10-2024" using "XX/XX/XXXX"
12/10/2024

2.7. O comando ERASE

O comando ERASE apaga toda a tela. Equivale ao comando CLS do Basic do MSX.

. erase

2.8. Layout da tela do menu

Desejamos criar um menu para gerenciar um sistema de tabelas de alunos e notasmat. Um dos possíveis menus é apresentado a seguir.

Escola do MSX
-------------

1. Cadastrar Aluno
2. Consultar Aluno
3. Alterar dados do Aluno
4. Remover Aluno
5. Inserir Notas
6. Sair

<< Escolha uma opção >>

Podemos criá-lo diretamente através dos comandos TEXT e ENDTEXT ou através do par @ y,x e SAY. No caso do comando SAY, temos que conhecer a localização de cada linha do menu na tela. Alguns truques para calcular a posição dos textos são apresentados a seguir.

Para centralizar horizontalmente um texto na tela, contamos o número de caracteres dele e utilizamos a seguinte fórmula:

x = (largura_da_tela - num_caracteres) / 2

Tanto a string "Escola do MSX" como a parte sublinhada possuem 13 caracteres cada. Para uma tela MSX padrão de 40 colunas, temos:

x = (40 - 13) / 2 = 13.5 => 13

Assim, podemos aplicar o comando @ ?,13 para colocar o título do menu na coluna desejada, onde "?" é a linha que ainda será calculada.

Para centralizar verticalmente todo o texto do menu, utilizamos uma fórmula semelhante:

y = (altura_da_tela - num_linhas_bloco) / 2

O bloco possui 11 linhas e a altura da tela é de 24 caracteres. Logo:

y = (24 - 11) / 2 = 6.5 => 6

Para as opções do menu separadas do título, vamos centralizar a posição de todo o bloco e determinar o valor de x. Como referência da largura do bloco, nos baseamos na maior string dele (a opção "3"), que é de 25 caracteres. Assim, o valor de x será 7. Para o alinhamento do bloco à esquerda, utilizamos o valor de x para todas as linhas do menu.

Caso desejássemos alinhar cada linha do bloco de forma centralizada, o valor de x deveria ser calculado para cada linha, de acordo com o seu comprimento.

Após calcular todas as posições, podemos criar o programa do MENU.

erase
@ 6,13 say "Escola do MSX"
@ 7,13 say "-------------"
@ 9,7 SAY "1. Cadastrar Aluno"
@ 10,7 SAY "2. Consultar Aluno"
@ 11,7 SAY "3. Alterar dados do Aluno"
@ 12,7 SAY "4. Remover Aluno"
@ 13,7 SAY "5. Inserir Notas"
@ 14,7 SAY "6. Sair"
@ 16,8 SAY "<< Escolha uma opção >>"

O livro de dBASE II para MSX [2] apresenta uma solução para guiar na construção de um menu ou tela no dBASE II. Trata-se da utilização de um gabarito em grade, com as coordenadas da tela. Entretanto, consideramos a solução apresentada acima mais fácil de ser implementada.

A título de ilustração, vejamos como ficou nosso menu no gabarito proposto pelo livro.

                       1                   2                   3

   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 
  ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
0 │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
  ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
1 │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
  ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
2 │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
  ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
3 │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
  ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
4 │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
  ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
5 │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
  ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
6 │ │ │ │ │ │ │ │ │ │ │ │ │ │E│s│c│o│l│a│ │d│o│ │M│S│X│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
  ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
7 │ │ │ │ │ │ │ │ │ │ │ │ │ │-│-│-│-│-│-│-│-│-│-│-│-│-│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
  ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
8 │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
  ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
9 │ │ │ │ │ │ │ │1│.│ │C│a│d│a│s│t│r│a│r│ │A│l│u│n│o│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
  ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
10│ │ │ │ │ │ │ │2│.│ │C│o│n│s│u│l│t│a│r│ │A│l│u│n│o│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
  ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
11│ │ │ │ │ │ │ │3│.│ │A│l│t│e│r│a│r│ │d│a│d│o│s│ │d│o│ │A│l│u│n│o│ │ │ │ │ │ │ │ │
  ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
12│ │ │ │ │ │ │ │4│.│ │R│e│m│o│v│e│r│ │A│l│u│n│o│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
  ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
13│ │ │ │ │ │ │ │5│.│ │I│n│s│e│r│i│r│ │N│o│t│a│s│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
  ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
14│ │ │ │ │ │ │ │6│.│ │S│a│i│r│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
  ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
15│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
  ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
16│ │ │ │ │ │ │ │ │<│<│ │E│s│c│o│l│h│a│ │u│m│a│ │o│p│ç│ã│o│ │>│>│ │ │ │ │ │ │ │ │ │
  ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
17│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
  ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
18│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
  ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
19│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
  ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
20│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
  ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
21│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
  ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
22│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
  ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
23│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
  └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘



Referências:

[1]- dBASE II PLUS para MSX interativo - curso prático, Nelson Casari, Ed. Atlas, 1990.

[2]- dBASE II PLUS para MSX programável - curso prático, Nelson Casari, Ed. Atlas, 1989.