Primeira vez que posto aqui, estou recebendo alguns erros em um antigo programa BASIC de 1977 para o computador Sol 20.
O primeiro erro é um "erro DM na linha 4240":
4220 PRINT " TYPE IN -STOP- TO QUIT ANYTIME"
4230 PRINT
4240 DIM A$(30),B$(30),C$(45),D$(30),E$(30),L$(10),Z$(12)
4250 LET A$="NO SUCH ELEVATION IN MY TAPES, UNDER 360, PLEASE."
4260 PRINT " THE TANK IS ";E;" FEET AWAY."
Se eu remover o "B$(30)" da linha 4240, o programa continua sendo executado, mas recebo um "erro BS na linha 4590" abaixo:
4560 IF I<=0 THEN 5250
4570 IF S=0 OR Z=3 THEN 4590
4580 LET S=-S
4590 LET D=(2*X**3*SIN(2*W)*COS(.5*W)/G*4)
4600 LET D=INT(D/15-(3*S-7))
4610 PRINT
4620 PRINT " ";D;" FEET"
Se eu remover um "*" depois do "X", o programa roda, mas o intervalo é muito baixo. Qualquer um que esteja familiarizado com BASIC pode ser capaz de ver uma falha ou fazer algumas sugestões.
O manual afirma que esta é uma tentativa de dimensionar um array mais de uma vez. Procure por uma
DIM
declaração anterior.Para descobrir qual matriz aciona o erro, escreva a linha como:
Dois asteriscos em uma linha significam exponenciação, então simplesmente remover um asterisco nessa expressão
(2*X**3*SIN(2*W)*COS(.5*W)/G*4)
não é equivalente. Use(2*X*X*X*SIN(2*W)*COS(.5*W)/G*4)
em vez disso.Do seu comentário:
e deste trecho de outro manual :
está claro que seu programa já está usando a variável string B$ com sua dimensão padrão de 10, antes que sua
DIM B$(30)
declaração tente declarar o tamanho máximo da variável string. Isso não é permitido.Para uma resposta definitiva, seria necessário ver o programa inteiro, mas cautelosamente eu diria que simplesmente mover a
DIM B$(30)
declaração para as primeiras linhas (que são executadas) do seu programa poderia resolver isso.Procure estas partes relevantes no manual :
O problema é que
B$
já foi definido (explícita ou implicitamente) antes da sua linha 4240.De acordo com a documentação, https://www.sol20.org/manuals/basic5.pdf , erro DM significa:
Além disso, o tamanho padrão da matriz é 10, e é por isso que você obtém o
quando você remove
B$
daDIM
declaração.