Estoy intentando escribir KEYIN en S*BASIC para usarlo en un programa, pero no encuentro cómo.
Primer intento, con DO.
No funciona, porque DO detiene la ejecución del programa.
Código: Seleccionar todo
defproc keyin(sbasic_code$):rem first try
rem Evaluate a string that contains S*BASIC code
rem It doesn't work, because DO stops the program.
loc file$,channel
let file$="ram1_keyin_tmp"
let channel=fop_over(file$)
rem if channel<0:fatal_error "keyin: "&channel
print #channel,sbasic_code$
close #channel
do file$
delete file$
enddef
Segundo intento, con MERGE.
No funciona porque no se puede usar MERGE desde dentro de un procedimiento (o rutina), o mientras haya algún procedimiento o rutina que no esté cerrado (lo he descubierto en la práctica, porque el manual no dice nada de esto).
Código: Seleccionar todo
defproc keyin(sbasic_code$):rem second try
rem Evaluate a string that contains S*BASIC code
rem It doesn't work, because MERGE cannot be used inside a procedure or while any procedure is active.
loc file$,merge_line,channel
let file$="ram1_keyin_tmp"
let merge_line=32767
let channel=fop_over(file$)
rem if channel<0:fatal_error "keyin: "&channel
print #channel,merge_line&"defproc do_keyin:"&sbasic_code$&":enddef"
close #channel
merge file$
do_keyin
dline merge_line
delete file$
enddef
Me estoy quedando sin ideas. He mirado en las extensiones que conozco pero no he encontrado ningún comando nuevo que haga esto.