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.
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"
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 ************
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.
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
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
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
O comando ERASE apaga toda a tela. Equivale ao comando CLS do Basic do MSX.
. erase
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.
<< Anterior | dBASE II | Próxima >> |