Curso de Basic
Comandos Básicos


Você está em: MarMSX >> Cursos >> BASIC   O objetivo desse capítulo é apresentar os principais comandos em Basic.

  Um comando Basic é uma instrução dada ao interpretador Basic do MSX para que ele faça uma determinada ação. Ele pode possuir ou não parâmetros, que são os valores colocados logo após o comando e separados por vírgulas. Os parâmetros têm a função de passar informações para o interpretador. Exemplo:
COLOR 15,1,1
  O comando Basic é "COLOR" e os parâmetros passados são 15, 1 e 1. Assim, o interpretador Basic sabe que deverá trocar a cor do vídeo, e que essas cores são 15 para o texto, 1 para o fundo e 1 para a borda.

  Regras dos parâmetros dos comandos:
  1. Cada comando possui um determinado número de parâmetros, variando de 0 a N.
  2. Ao dar o comando, o número de parâmetros passados deve ser entre 0 e N.
  3. É possível passar valores nulos para o comando, que fará com que certas características não sejam modificadas.
  4. O tipo de dado passado deverá ser do mesmo tipo definido, ou seja, números para tipo numérico e strings para tipo alfanumérica.
  5. O valor do parâmetro deverá estar dentro da faixa especificada.
  O comando CLS possui 0 parâmetros, enquanto que o comando COLOR possui 3 parâmetros.
  Sintaxe do comando COLOR:
COLOR cor_de_frente, cor_de_fundo, cor_da_borda

  De acordo com a regra 2, podemos passar no mínimo 0 parâmetros e no máximo N parâmetros. Assim:
COLOR		: ' É válido
COLOR 15	: ' É válido
COLOR 15,1	: ' É válido
COLOR 15,1,1	: ' É válido
COLOR 15,1,1,1	: ' Não é válido

  A regra 3 diz que podemos passar valores nulos para o comando. Nesse caso, o parâmetro que recebe valor nulo não modifica sua característica. Exemplo:
COLOR 15	: ' cor_de_fundo e cor_da_borda recebem nulo.
                  ' Nesse caso, somente a cor_de_frente é modificada.
COLOR ,4	: ' cor_de_frente e cor_da_borda recebem nulo.
                  ' Nesse caso, somente a cor_de_fundo é modificada.
COLOR ,,1	: ' cor_de_frente e cor_de_fundo recebem nulo.
                  ' Nesse caso, somente a cor_da_borda é modificada.
COLOR 15,,1	: ' cor_de_fundo recebe nulo.
                  ' Nesse caso, só a cor_de_frente e cor_da_borda são modificadas.
  Essa regra é interessante, pois permite que modifiquemos apenas alguns parâmetros, utilizando o comando Basic.
  Antes do último número válido utilizamos vírgulas vazias e depois, apenas omitimos os parâmetros.

  A sintaxe do comando ON KEY GOSUB é:
ON KEY GOSUB key_1, key_2, ..., key_10
  Assim, temos para ativar somente a tecla F3:
10 ON KEY GOSUB ,,100
20 KEY(3) ON

  Exemplo de violação da regra 4:
COLOR "A"

  No comando COLOR, a faixa de valores válidos para cada parâmetro vai de 0 a 15. Assim, uma violação da regra 5 seria:
COLOR 16,1,1

  As funções do MSX são uma espécie de comandos que retornam valores. Elas serão abordadas no capítulo 8. Entretanto, vale a pena ressaltar que as regras dos parâmetros são um pouco diferentes para as funções. Em uma função, somos obrigados a passar todos os N parâmetros definidos para ela, além de não poder passar valores nulos. Entretanto, há algumas funções que possuem alguns parâmetros com o valor DEFAULT, e nesse caso, podem receber valor nulo, como no caso do MID$.
  Exemplos:
10 DEF FN F(X,Y)=X*Y
20 PRINT FN F(2,4) 	: ' É válido
30 PRINT FN F(2) 	: ' Não é válido
10 PRINT MID$("abcdef",1,4) : ' É válido
20 PRINT MID$("abcdef",,4)  : ' Não é válido
30 PRINT MID$("abcdef",1)   : ' É válido, pois o comprimento da 
                              string possui um valor DEFAULT com
                              o tamanho da string passada.


  Modo de tela texto (screens 0 e 1)

Comando Descrição Exemplo
CLS Apaga a tela. CLS
COLOR Muda a cor do texto, fundo e borda. COLOR 15,1,1
LOCATE Posiciona o cursor em uma coordenada da tela. LOCATE 4,5
PRINT Imprime uma informação na tela. Pode usar o símbolo ? em vez de PRINT. PRINT"Olá"
?"Olá"
PRINT USING Imprime uma informação formatada na tela. PRINT USING"##.#"; 12.3456
SCREEN Escolhe o modo de tela. SCREEN 0
SPC Imprime um determinado número de espaços em branco. PRINT SPC(5)
TAB Move o cursor um determinado número de espaços à direita PRINT TAB(16)
WIDTH Determina o número de colunas. WIDTH 32


  Edição de programa

Comando Descrição Exemplo
AUTO Numera automaticamente as linhas do programa. AUTO 100,5
DELETE Apaga uma linha (ou faixa de linhas). DELETE 20-40
FRE Mostra a quantidade de bytes livres para o programa. PRINT FRE(1)
LIST Lista o programa. LIST 10-100
NEW Apaga todo o programa da memória. NEW
REM Insere comentário. Pode usar ' em vez. REM Rotina 1
' ROTINA 1
RENUM Renumera o programa. RENUM 100,10,5


  Execução de programa

Comando Descrição Exemplo
CONT Continua um programa interrompido. CONT
END Termina a execução de um programa. END
STOP Suspende a execução de um programa. STOP
TRON Exibe o número da linha em execução. TRON
TROFF Desliga o recurso do TRON. TROFF
RUN Executa o programa. RUN 50

  É interessante utilizar o comando TRON para visualizar o fluxo de execução de um programa, principalmente aqueles com desvios:
5 TRON
10 GOSUB 40
20 PRINT"linha 20"
30 END
40 PRINT"linha 40"
50 RETURN
  Saída:
  [10][40]linha 40
  [50][20]linha 20
  [30]


  Tratamento de exceções

Comando Descrição Exemplo
ERL Retorna a linha de origem do erro. PRINT ERL
ERR Retorna o código do erro. PRINT ERR
ERROR Gera uma exceção, seguida de um código. ERROR 200
ON ERROR GOTO Desvia o programa para uma determinada linha, em caso de erro. ON ERROR GOTO 50
RESUME Determina o retorno a uma determinada linha em caso de um erro lançado. RESUME NEXT volta para a linha seguinte do erro. RESUME 40

  O programa a seguir irá gerar uma exceção para quando o usuário digitar uma tecla diferente de "A" [adaptado de 3]:
10 ON ERROR GOTO 60
20 PRINT"Digite a tecla A"
30 A$=INPUT$(1)
40 IF A$<>"a" AND A$<>"A" THEN ERROR 230
50 END
60 PRINT"Pressione a tecla A, por favor."
70 RUN
  A exceção "ERROR 230" só pode ser lançada uma vez. Caso na linha 70 o comando "RUN" seja substituído por "GOTO 30", um erro do tipo "Unprintable error" irá acontecer.


  Interação com o usuário

Comando Descrição Exemplo
INKEY$ Obtém o caractere de uma tecla que ESTÁ SENDO pressionada. IF INKEY$="A" THEN 50
LINE INPUT Obtém uma string do teclado. LINE INPUT "Nome:";NO$
INPUT Lê dados do teclado. Coloca "?" ao final da mensagem. INPUT "Qual a idade";I
INPUT$ Lê uma determinada quantidade de
caracteres que FOI digitada no teclado.
A$ = INPUT$(2)
ON KEY GOSUB Desvia o programa, caso uma tecla F1-F10 tenha sido pressionada. A ordem do GOSUB é a ordem das teclas. ON KEY GOSUB 30,50,80
ON STOP GOSUB Desvia o programa, caso as teclas CONTROL + STOP tenham sido pressionadas. ON STOP GOSUB 80
ON STRIG GOSUB Desvia o programa, caso a barra de espaços ou o botão do joystick tenham sido pressionados. ON STRIG GOSUB 100
STICK Mostra o estado das teclas do cursor ou joystick. C = STICK(0)
STRIG Mostra o estado da barra de espaços ou o botão do joystick. IF STRING(0)=0 THEN GOTO 50


  Funções matemáticas

Comando Descrição Exemplo
ABS Elimina o sinal de um número. PRINT ABS(-1)
ATN Calcula o arco-tangente de um valor. PRINT ATN(0.88)
COS Calcula o cosseno de um ângulo em radianos. PRINT COS(PI)
EXP Calcula o exponencial natual de um número, ou seja, e^x, onde e=2.7182818284. PRINT EXP(1)
FIX Fornece a parte inteira de um número. PRINT FIX(2.34)
INT Fornece o maior número inteiro que não seja maior que o argumento passado. PRINT INT(-2.1)
Resp: -3
LOG Calcula o logaritmo natural de um número. PRINT LOG(2.78)
RND Gera um número aleatório entre 0 e 1. Argumentos:
1 = Gera sempre um número diferente.
-1 = Repete sempre o mesmo número.
0 = Repete o último número gerado.
-TIME = utiliza o clock para gerar o número.
PRINT INT(RND(1)*10)
Resp: um número entre 0 e 9
SGN Verifica o sinal de um número. PRINT SNG(-2)
SIN Calcula o seno de um ângulo em radianos. PRINT SIN(PI)
SQR Calcula a raiz quadrada de um número. Equivale à expressão N^(1/2). PRINT SQR(4)
TAN Calcula a tangente de um ângulo em radianos. PRINT TAN(1.0)


  Funções de conversão

Comando Descrição Exemplo
ASC Fornece o código ASCII do primeiro caractere de uma string. PRINT ASC("A")
BIN$ Converte um número inteiro para binário. O retorno é uma string. PRINT BIN$(4)
CDBL Converte um número para precisão dupla. A# = CDBL(2.34!)
CHR$ Converte um código ASCII em caractere. PRINT CHR$(65)
CINT Converte um número para inteiro. A% = CINT(1.23#)
CSNG Converte um número para precisão simples. A! = CSNG(1%)
HEX$ Converte um número inteiro para hexadecimal. O retorno é uma string. PRINT HEX$(15)
OCT$ Converte um número inteiro para octal. O retorno é uma string. PRINT OCT$(8)
STR$ Converte de número para string. PRINT STR$(25)
VAL Converte de string para número. PRINT VAL("25")


  Acesso à memória

Comando Descrição Exemplo
PEEK Lê um dado da memória RAM. PRINT PEEK(0)
POKE Escreve um dado na memória RAM. POKE &HC000,255
VPEEK Lê um dado da memória de vídeo. PRINT VPEEK(0)
VPOKE Escreve um dado na memória de vídeo. VPOKE 0,65


  Entrada e saída de dados

Comando Descrição Exemplo
BLOAD Carrega arquivo no formato binário. BLOAD"ARQ.BIN",R
BSAVE Salva arquivo no formato binário. BSAVE"ARQ.BIN", 0,1000,100
CLOSE Fecha arquivo aberto por OPEN. CLOSE 1
EOF Testa se o fim de um arquivo aberto para leitura foi atingido. IF NOT EOF(1) THEN 60
INPUT# Recupera dados de um arquivo que foi aberto como leitura, separados por vírgula ou return. INPUT #1, A$
INPUT$(c,#) Recupera uma certa quantidade de caracteres de um arquivo que foi aberto como leitura. A$ = INPUT$(1,#1)
LINE INPUT# Recupera uma linha inteira de um arquivo que foi aberto como leitura. LINE INPUT #1, A$
LOAD Carrega um arquivo do tipo Basic. LOAD"ARQ.BAS"
LOF Retorna o tamanho em bytes de um arquivo aberto por OPEN. PRINT LOF(1)
MERGE Junta um arquivo em Basic que foi gravado no formato ASCII ao programa corrente. MERGE"ARQ2.BAS"
OPEN Abre um arquivo para ser lido / gravado no disco. Equivale ao fopen do C. OPEN "ARQ.DAT" FOR OUTPUT AS#1
PRINT# Grava dados em um arquivo que foi aberto como gravação. PRINT #1, "MarMSX"
RUN Lê e executa um arquivo no formato Basic. RUN"ARQ.BAS"
SAVE Salva um arquivo no formato Basic. A opção ",A" ao final salva o arquivo no formato ASCII (texto puro) em vez de tokens. SAVE"ARQ.BAS"
SAVE"ARQ.BAS",A


  Referência completa

  O MSX Expert da Gradiente vinha com um excelente manual [3][4], contendo todos os comandos do Basic explicados e com exemplos. Este material foi coordenado pelo professor Pierluigi Piazzi e pode ser encontrado no formato HTML no site MSX Pró [1]. Entretanto, este material se limita ao MSX 1.
  Uma referência mais completa sobre a programação Basic pode ser encontrada na MSX.ORG [2]. Nela, encontram-se os comandos novos do Basic do MSX 2.



  Referências:

  [1] - MSX Pró - Luciano Sturaro - http://www.msxpro.com/basic.php
  [2] - MSX.ORG, Basic Instructions - https://www.msx.org/wiki/MSX-BASIC_Instructions
  [3] - Livro: Linguagem Basic MSX, editora Aleph, 5a. Edição, 1987.
  [4] - Livro: Dominando o Expert, editora Aleph, 5a. Edição, 1987.


<< Anterior Basic Próxima >>