Posts: 27
Threads: 10
Joined: Nov 2024
Reputation:
0
Lo siento si esto ha sido preguntado antes, pero no lo he encontrado.
Dado un proc como este:
Code: const NumLocs as ubyte = 2
'enum Exits
const ExitNorth as ubyte = 0
const ExitSouth as ubyte = 1
const ExitEast as ubyte = 2
const ExitWest as ubyte = 3
const ExitUp as ubyte = 4
const ExitDown as ubyte = 5
const NumExits as ubyte = 6
'end enum
dim locDescs(NumLocs) as string
dim locExits(NumLocs, NumExits) as integer
sub init_locs()
'locDescs( 0 ) = "El lugar del alunizaje. La vaina abierta y sin " _
' + "contenido parece una triste parodia de ella misma. " _
' + "Un valle natural conduce al sur."
'locDescs( 1 ) = "El lugar del alunizaje. La vaina abierta y sin " _
' + "contenido parece una triste parodia de ella misma. " _
' + "Un valle natural conduce al sur."
restore LocData
for i = 0 to NumLocs - 1
print "numloc i:", i
' Read the desc
read locDescs( i )
print "read numloc i: "; i; locDescs( i )
' Read the exits
for j = 0 to NumExits - 1
print "numloc i:"; i; " exit "; j
read locExits(i, j)
print "numloc i:"; i; " exit "; j; " = "; locExits(i, j)
input a
next
next
return
LocData:
' Loc 0 - Landing
data "El lugar del alunizaje. La vaina abierta y sin " _
+ "contenido parece una triste parodia de ella misma. " _
+ "Un valle natural conduce al sur."
data -1, 1, -1, -1, -1, -1
' Loc 1 - Valley
data "El lugar del alunizaje. La vaina abierta y sin " _
+ "contenido parece una triste parodia de ella misma. " _
+ "Un valle natural conduce al sur."
data 0, -1, -1, -1, -1, -1
end sub
El problema es el siguiente. Si descomento las primeras líneas y comento la línea
y los data correspondientes, el programa parece que funciona. Pero si dejo el programa tal y como está, solo lee porquería en la posición i del vector locDescs, y el Speccy se reinicia. ¿No se pueden leer cadenas con READ? Según los docs, entiendo que sí...
Posts: 1,831
Threads: 56
Joined: Aug 2019
Reputation:
25
Hola!
Sí se pueden leer cadenas con READ y DATA.
Qué versión del compilador tienes? Este programa no debería compilarte. La instrución INPUT a, no está soportada como tal.
Si quieres hacer una pausa usa PAUSE 0.
Igualmente en las nuevas versiones, los DATA han de definirse fuera de las funciones y SUBs.
Además, corregí un bug con READ para tamaños numéricos pequeños. Descárgate esta beta y dime si funciona (haz click sobre el enlace correspondiente a tu sistema operativo):
http://www.boriel.com/files/zxb/zxbasic-...ta4.tar.gz
http://www.boriel.com/files/zxb/zxbasic-...-beta4.zip
http://www.boriel.com/files/zxb/zxbasic-...-win32.zip
http://www.boriel.com/files/zxb/zxbasic-...x64.tar.gz
http://www.boriel.com/files/zxb/zxbasic-...cos.tar.gz
---
Boriel
Posts: 27
Threads: 10
Joined: Nov 2024
Reputation:
0
11-21-2024, 07:25 AM
(This post was last modified: 11-21-2024, 10:36 AM by boriel.)
Hola,
> Sí se pueden leer cadenas con READ y DATA.
> Qué versión del compilador tienes? Este programa no debería compilarte. La instrución INPUT a, no está soportada como tal.
> Si quieres hacer una pausa usa PAUSE 0.
Pues funciona como uno se esperaría... pero vale, lo cambio por un pause 0.
Code: $ ./zxbc.sh --version
zxbc.py 1.17.3
La versión es la última que encontré en Github...
> Igualmente en las nuevas versiones, los DATA han de definirse fuera de las funciones y SUBs.
Oh, con lo recogidito que queda así... :-P
Me descargo la beta, y te cuento.
Gracias,
Hola,
Me salen muchos warnings de funciones que no se usan de la librería estándar. ¿Esto es normal?
-- Baltasar
Vale, probada la nueva versión.
Code: $ ./zxbc.sh --version
zxbc.py v1.18.0-beta4
Hasta donde veo, fuciona bien, pero... ahora se me queda atascado tras leer el cuarto byte de las conexiones, las salidas, de la primera loc.
He cambiado el código fuente:
Code: ' Locs
' (c) 2022/25 Reveni Baltasar MIT License <baltasarq@gmail.com>
const NumLocs as ubyte = 2
'enum Exits
const ExitNorth as ubyte = 0
const ExitSouth as ubyte = 1
const ExitEast as ubyte = 2
const ExitWest as ubyte = 3
const ExitUp as ubyte = 4
const ExitDown as ubyte = 5
const NumExits as ubyte = 6
'end enum
dim locDescs(NumLocs) as string
dim locExits(NumLocs, NumExits) as integer
sub init_locs()
'locDescs( 0 ) = "El lugar del alunizaje. La vaina abierta y sin " _
' + "contenido parece una triste parodia de ella misma. " _
' + "Un valle natural conduce al sur."
'locDescs( 1 ) = "El lugar del alunizaje. La vaina abierta y sin " _
' + "contenido parece una triste parodia de ella misma. " _
' + "Un valle natural conduce al sur."
restore LocData
for i = 0 to NumLocs - 1
print "numloc i:", i
' Read the desc
read locDescs( i )
print "read numloc i: "; i; locDescs( i )
' Read the exits
for j = 0 to NumExits - 1
print "numloc i:"; i; " exit "; j
read locExits(i, j)
print "numloc i:"; i; " exit "; j; " = "; locExits(i, j)
pause 0
next
next
end sub
LocData:
' Loc 0 - Landing
data "El lugar del alunizaje. La vaina abierta y sin " _
+ "contenido parece una triste parodia de ella misma. " _
+ "Un valle natural conduce al sur."
data -1, 1, -1, -1, -1, -1
' Loc 1 - Valley
data "El lugar del alunizaje. La vaina abierta y sin " _
+ "contenido parece una triste parodia de ella misma. " _
+ "Un valle natural conduce al sur."
data 0, -1, -1, -1, -1, -1
¿Me he metido en un jardín con lo de los DATA? ¿Es mejor asignarlos "normal", y punto?
¿Es posible inicializar a -1 un vector con locExits, sin recorrer a un bucle for?
Gracias,
-- Baltasar
Posts: 1,831
Threads: 56
Joined: Aug 2019
Reputation:
25
baltasarq Wrote:Hola,
> Sí se pueden leer cadenas con READ y DATA.
> Qué versión del compilador tienes? Este programa no debería compilarte. La instrución INPUT a, no está soportada como tal.
> Si quieres hacer una pausa usa PAUSE 0.
Pues funciona como uno se esperaría... pero vale, lo cambio por un pause 0.
Code: $ ./zxbc.sh --version
zxbc.py 1.17.3
La versión es la última que encontré en Github...
> Igualmente en las nuevas versiones, los DATA han de definirse fuera de las funciones y SUBs.
Oh, con lo recogidito que queda así... :-P
Me descargo la beta, y te cuento.
Gracias,
Hola,
Me salen muchos warnings de funciones que no se usan de la librería estándar. ¿Esto es normal?
-- Baltasar
Vale, probada la nueva versión.
Code: $ ./zxbc.sh --version
zxbc.py v1.18.0-beta4
Hasta donde veo, fuciona bien, pero... ahora se me queda atascado tras leer el cuarto byte de las conexiones, las salidas, de la primera loc.
He cambiado el código fuente:
Code: ' Locs
' (c) 2022/25 Reveni Baltasar MIT License <baltasarq@gmail.com>
const NumLocs as ubyte = 2
'enum Exits
const ExitNorth as ubyte = 0
const ExitSouth as ubyte = 1
const ExitEast as ubyte = 2
const ExitWest as ubyte = 3
const ExitUp as ubyte = 4
const ExitDown as ubyte = 5
const NumExits as ubyte = 6
'end enum
dim locDescs(NumLocs) as string
dim locExits(NumLocs, NumExits) as integer
sub init_locs()
'locDescs( 0 ) = "El lugar del alunizaje. La vaina abierta y sin " _
' + "contenido parece una triste parodia de ella misma. " _
' + "Un valle natural conduce al sur."
'locDescs( 1 ) = "El lugar del alunizaje. La vaina abierta y sin " _
' + "contenido parece una triste parodia de ella misma. " _
' + "Un valle natural conduce al sur."
restore LocData
for i = 0 to NumLocs - 1
print "numloc i:", i
' Read the desc
read locDescs( i )
print "read numloc i: "; i; locDescs( i )
' Read the exits
for j = 0 to NumExits - 1
print "numloc i:"; i; " exit "; j
read locExits(i, j)
print "numloc i:"; i; " exit "; j; " = "; locExits(i, j)
pause 0
next
next
end sub
LocData:
' Loc 0 - Landing
data "El lugar del alunizaje. La vaina abierta y sin " _
+ "contenido parece una triste parodia de ella misma. " _
+ "Un valle natural conduce al sur."
data -1, 1, -1, -1, -1, -1
' Loc 1 - Valley
data "El lugar del alunizaje. La vaina abierta y sin " _
+ "contenido parece una triste parodia de ella misma. " _
+ "Un valle natural conduce al sur."
data 0, -1, -1, -1, -1, -1
¿Me he metido en un jardín con lo de los DATA? ¿Es mejor asignarlos "normal", y punto?
¿Es posible inicializar a -1 un vector con locExits, sin recorrer a un bucle for?
Gracias,
No, está bien
Es simplemente que el DATA del BASIC de ZX Spectrum es muy potente (permite incluso expresiones como DATA x * x + SQRT(x ^3), y cosas así.
Todo eso está soportado, solo que no está muy probado y por eso ahora eres el primer tester que lo prueba a fondo. :-)
Si es inicializar un vector o matriz numérico, se puede hacer directamente, pero recuerda que aquí el DIM es una declaración, no una "instanciación". Es decir, DIM, independientemente de la posición donde se ponga, se hace al principio de la ejecución del programa una sola vez.
Para crear un array numérico inicializado (no funciona con cadenas por el momento), es con la sintaxis:
Code: DIM a(5) as Uinteger => {0, 1, 2, 3, 4, 5}
Admite múltiples dimensiones, anidando llaves. Aquí tienes más información (al final de la página): https://zxbasic.readthedocs.io/en/docs/d...clarations
Y lo dicho, los arrays inicializados se inicializan una vez. Si necesitas inicializarlos repetidamente, has de usar READ y DATA :-)
---
Boriel
Posts: 1,831
Threads: 56
Joined: Aug 2019
Reputation:
25
11-22-2024, 09:36 PM
(This post was last modified: 11-22-2024, 09:37 PM by boriel.)
El programa que has puesto no hace nada. Supongo que le fallta llamar a la subrutina init_locs()
lo he hecho, y pulsando una tecla me va leyendo todo hasta que termina. Así que no veo el fallo?
---
Boriel
|