bb-llister

Descripción del contenido de la página

Programa para listar programas en Beta BASIC.

Etiquetas:

En la página 80 del manual de Beta BASIC 3.0 encontré una solución para estos casos: un programita que imprimía el listado a un fichero secuencial en microductora (microdrive) para después leerlo línea a línea, modificar cada línea con SHIFT$ para expandir los comandos y finalmente imprimirla con LPRINT.

Reescribí el programa para usar la interfaz Plus D, con la pequeña dificultad de que la función EOF() de Beta BASIC no funciona en la versión 4.0+D del intérprete (no está implementada en ninguna versión para unidad de disco, sólo en la original para microductoras); en su lugar imprimí una marca la final del fichero que me permitiera detectar su final al leerlo. Aparte de eso, mis modificaciones fueron sólo estéticas.

Intenté simplificar el programa original para que hiciera una sola lectura del fichero, traduciendo e imprimiendo las líneas en un solo paso, pero por algún motivo que no llegué a entender no funcionaba bien. Parece que es necesario grabar las líneas traducidas y volver a leerlas para imprimirlas.

Al resultado lo llamé bb-llister:

Código fuente

9000
     REM bb-llister

9010 REM A program to LLIST Beta Basic programs when there are problems with the printer driver.
9020 REM Modified from the version published in the Beta Basic 3.0 manual, page 80.
9030 REM This program has to be MERGEd with the program to list, and executed with GOTO9000.
9040 REM By Marcos Cruz (programandala.net)
9050 REM 2010-05-23 First version.

9060 CLS
     PRINT INVERSE 1;"bb-llister"''
9070 POKE @10,0
     REM keep Plus D from generating the graphic representation of some chars while LPRINTing
9080 PRINT "Step 1/3: Raw list into a file."
9090 OPEN #5;d*"tmp.raw" OUT
9100 LIST #5;1 TO 8999
     PRINT #5;"EOF"
9110 CLOSE #*5
9120 PRINT "Step 2/3: translate the listing."
9130 OPEN #5;d*"tmp.raw"IN
9140 OPEN #6;d*"tmp.lst" OUT
9150 DO
9160   INPUT #5; LINE t$
9170 EXIT IF t$="EOF"
9180   PRINT #6;SHIFT$(7,t$)+CHR$ 13
9190 LOOP
9200 CLOSE #*5
     ERASE d*"tmp.raw"
9210 PRINT #6;"EOF"
     CLOSE #*6
9220 PRINT "Step 3/3: print the listing."
9230 OPEN #6;d*"tmp.lst"IN
9240 DO
9250   INPUT #6; LINE t$
9260 EXIT IF t$="EOF"
9270   LPRINT t$
9280 LOOP
9290 CLOSE #*6
     ERASE d*"tmp.lst"
9300 PRINT "Done."
9310 STOP
9320
     REM Save bb-llister

9330 RENUM 9000 TO LINE 9000
9340 DELETE TO 8999
9350 SAVE OVER d*"bb-llister"
     STOP
9360 SAVE "bb-llister"

Descargas

Una solución más sencilla

Días después de escribir bb-llister encontré la solución al problema de impresión, lo cual hizo innecesario el programa: En la página 13 del boletín Beta BASIC Newsletter número 11 había un parche para corregir el fallo que impide usar FORMAT "p";n con la versión 4.0 del intérprete:

POKE 55940,205
POKE 55941,63
POKE 55942,189
POKE 55943,11

Con ello ya era posible seleccionar la impresión de texto en la salida serie de la ZX Spectrum 128:

FORMAT "p";0

Después sólo hacía falta modificar una varible del sistema de la Plus D, para impedir que la interfaz (que dispone de una salida Centronics) tomara el control de la salida por impresora:

POKE@11,1

Con ello el comando LLIST funcionaba correctamente.

Este parche y otros los recopilé en el programa bb4d-fixer.