Configurador para Overdrive
Descripción del contenido de la página
Programa escrito en SuperBASIC para la Sinclair QL, para configurar el programa Overdrive.
Etiquetas:
Overdrive, cuyo verdadero nombre era Universal Printer Driver Utility, era un controlador genérico de impresora para la Sinclair QL. Permitía traducir los caracteres no estándar de la QL (del 127 al 191) e insertar ficheros gráficos (copias de pantalla) en los textos, indicando el nombre del fichero gráfico entre llaves.
Este programa permite configurar el funcionamiento de Overdrive. Es una versión modificada por mí, en 1990 y 1992, del original escrito por Sergio Montoro en 1989 para que le funcionara en su QL con ROM JM (el programa Overdrive incluía su propio configurador).
Código fuente
1000 REMark CONFIGURADOR PARA "OVERDRIVE"
1010 REMark ADAPTILO POR "OVERDRIVE"
1020 :
1030 REMark Originalo far:
1040 REMark Sergio Montoro Ten, 1989
1050 REMark Tl. (91)-2028739
1060 :
1065 REMark Copyright (C) 1990,1992 Marcos Cruz (http://programandala.net)
1066 REMark Licencia/Permesilo/License: http://programandala.net/licencia
1067 :
1070 REMark novaj versioj far Marcos Cruz:
1080 REMark 2.00 - 1990 02
1090 REMark 2.10 - 1990 07 12
1100 REMark 2.20 - 1992 05 23
1110 REMark -printas liston de tradukoj
1120 REMark -uzas ALCHP, ne RESPR
1130 REMark -uzas versio$
1140 REMark -aldonas savu
1150 REMark 2.30 - 1992 07 03
1160 REMark -dulingva, hispana + esperanta
1170 REMark
1180 :
1190 versio$="2.30"
1200 :
1210 DIM index%(256),infor%(256,80),schr%(80),code%(112)
1220 base=ALCHP(21*1024)
1230 MODE 4
1240 OPEN#1,con
1250 INK 7:BORDER 1,7:CLS
1260 :
1270 REMark INICIALIZA DATOS
1280 REMark PRETIGAS DATUMOJN
1290 RESTORE
1300 PRINT "Leyendo datas..."
1310 PRINT "Lege datumojn..."
1320 FOR j=0 TO 110
1330 READ code%(j)
1340 POKE base+j,code%(j)
1350 END FOR j
1360 :
1370 REPeat main_loop
1380 menú
1390 key%=CODE(INKEY$(#1,-1))
1400 IF key%=49 THEN read_trans_data
1410 IF key%=50 THEN write_trans_data
1420 IF key%=51 THEN save_trans_data
1430 IF key%=52 THEN CLS:STOP
1440 IF key%=53 THEN listu
1450 END REPeat main_loop
1460 :
1470 DEFine PROCedure menú
1480 PRINT
1490 PRINT 'CONFIGURADOR PARA / ADAPTILO POR "OVERDRIVE"'
1500 PRINT
1510 PRINT "Original de / Originalo far Sergio Montoro, 1989e"
1520 PRINT "Versión/Versio"!versio$!"por/far Marcos Cruz, 1992e (http://programandala.net)"
1525 PRINT "Licencia/Permesilo: http://programandala.net/licencia"
1530 PRINT
1540 PRINT "Elige: / Elektu:"
1550 PRINT "1.- LEER FICHERO"
1560 PRINT " LEGI DOSIERON"
1570 PRINT "2.- ALTERAR EL FICHERO LEIDO"
1580 PRINT " MODIFI LA LEGITAN DOSIERON"
1590 PRINT "3.- GRABAR EL FICHERO"
1600 PRINT " REGISTRI LA DOSIERON"
1610 PRINT "4.- FIN DEL PROGRAMA"
1620 PRINT " FINO DE LA PROGRAMO"
1630 PRINT "5.- LISTAR LAS TRADUCCIONES"
1640 PRINT " LISTI LA TRADUKOJN"
1650 PRINT
1660 END DEFine menú
1670 :
1680 DEFine PROCedure read_trans_data
1690 LOCal count%,n,m
1700 INPUT "Fichero a leer / Legota dosiero ="!lname$
1710 LBYTES lname$,base
1720 PRINT
1730 PRINT "Espera un momento / Atendu momenton ..."
1740 byte_on% =PEEK(base+110)
1750 byte_off%=PEEK(base+111)
1760 ser2%=PEEK_W(base+6)
1770 count%=0
1780 FOR n=base+112 TO base+510 STEP 2
1790 index%(count%)=PEEK_W(n)
1800 count%=count%+1
1810 END FOR n
1820 FOR n=0 TO 255
1830 IF index%(n)<>0
1840 infor%(n,0)=PEEK(base+112+index%(n)+1)
1850 FOR m=1 TO infor%(n,0)
1860 infor%(n,m)=PEEK(base+112+index%(n)+1+m)
1870 END FOR m
1880 ELSE
1890 infor%(n,0)=0
1900 END IF
1910 END FOR n
1920 END DEFine read_trans_data
1930 :
1940 DEFine PROCedure write_trans_data
1950 LOCal count%,nchr%,n
1960 PRINT
1970 PRINT "Carácter para activar la inclusion de fichero"
1980 PRINT "Karaktro por komenci inkludon de dosiero"
1990 PRINT
2000 PRINT "(INTRO para ninguno)"
2010 PRINT "(ENIGOKLAVU se neniu)"
2020 PRINT
2030 INPUT byte_on$
2040 IF byte_on$="":byte_on$="0"
2050 byte_on%=byte_on$
2060 PRINT
2070 PRINT "Carácter para terminar la inclusión de fichero"
2080 PRINT "Karaktro por fini inkludon de dosiero"
2090 PRINT
2100 PRINT "(INTRO para ninguno) ";
2110 PRINT "(ENIGOKLAVU se neniu)"
2120 PRINT
2130 INPUT byte_off$
2140 IF byte_off$="":byte_off$="0"
2150 byte_off%=byte_off$
2160 PRINT
2170 PRINT "-1 = las traducciones de SER2 son idénticas a las de SER1"
2180 PRINT " tradukoj de SER2 egalas tiujn de SER1"
2190 PRINT " 0 = SER2 permanece inalterado"
2200 PRINT " SER2 restas nesxangxita"
2210 PRINT " 1 = SER2 tiene sus propias traducciones"
2220 PRINT " SER2 havas siajn proprajn tradukojn"
2230 PRINT
2240 INPUT ser2%
2250 PRINT
2260 REPeat loop1
2270 PRINT "Número del carácter a modificar (INTRO finaliza)"
2280 PRINT "Numero de la modifota karaktraro (ENIGOKLAVO finas)"
2290 PRINT
2300 INPUT nchr$
2310 IF nchr$="" THEN EXIT loop1
2320 nchr%=nchr$
2330 PRINT
2340 PRINT "La traducción actual para dicho código es:"
2350 PRINT "La nuna traduko por tiu kodo estas:"
2360 IF infor%(nchr%,0)=0
2370 PRINT "¡Ninguna! / Neniu!"
2380 ELSE
2390 PRINT
2400 FOR n=1 TO infor%(nchr%,0)
2410 PRINT infor%(nchr%,n)!;
2420 END FOR n
2430 END IF
2440 PRINT
2450 PRINT "Pulse INTRO para cambiar la traducción (otra tecla sale)"
2460 PRINT "ENIGOKLAVU por sxangxi la tradukon (alia klavo finas)"
2470 PRINT
2480 INPUT tecla$
2490 IF tecla$=""
2500 PRINT
2510 PRINT "Introduzca la traducción código a código (INTRO solo finaliza)"
2520 PRINT "Enmetu la tradukon, kodon post kodo (ENIGOKLAVO nura finas)"
2530 count%=1
2540 REPeat loop2
2550 INPUT infor$
2560 IF infor$="" THEN EXIT loop2
2570 infor%(nchr%,count%)=infor$
2580 count%=count%+1
2590 END REPeat loop2
2600 infor%(nchr%,0)=count%-1
2610 END IF
2620 END REPeat loop1
2630 END DEFine write_trans_data
2640 :
2650 DEFine PROCedure save_trans_data
2660 LOCal n,m,start
2670 PRINT
2680 PRINT "Espera un momento..."
2690 PRINT "Atendu momenton..."
2700 POKE_W base+6,ser2%
2710 POKE base+110,byte_on%
2720 POKE base+111,byte_off%
2730 start=base+113+512
2740 FOR n=0 TO 255
2750 IF infor%(n,0)=0
2760 POKE_W base+112+n*2,0
2770 ELSE
2780 POKE_W base+112+n*2,start-base-113
2790 FOR m=0 TO infor%(n,0)
2800 POKE start,infor%(n,m)
2810 start=start+1
2820 END FOR m
2830 IF infor%(n,0) MOD 2 = 1 THEN POKE start,32 : start=start+1
2840 POKE start,0
2850 start=start+1
2860 END IF
2870 END FOR n
2880 PRINT
2890 PRINT "Nombre y dispositivo del fichero a grabar"
2900 PRINT "Nomo kaj diskingo de la registrota dosiero"
2910 PRINT
2920 INPUT sname$
2930 SBYTES sname$,base,start-base+2
2940 END DEFine save_trans_data
2950 :
2960 DATA 96, 6, 0, 0, 3, 246, 0, 0, 112, 0, 78, 65, 65, 232, 0, 68, 32, 80, 66, 128, 177, 192, 103, 82, 32, 40, 255, 244, 12, 128, 74, 251, 1, 1, 102, 236, 67, 250, 0, 72, 69, 250, 255, 216, 32, 18, 74, 128, 102, 6, 33, 64, 255, 248, 96, 8, 34, 9, 84, 65
, 33, 65, 255, 248, 66, 128, 16, 42, 0, 4, 74, 0, 102, 6, 33, 64, 255, 252, 78, 117, 83, 64, 74, 0, 102, 12, 211, 210, 84, 73, 33, 73, 255, 252, 66, 128, 78, 117, 33, 104, 255, 248, 255, 252, 96, 244, 112, 237, 78, 117, 0, 0
2970 :
2980 DEFine PROCedure savu
2990 SAVE_O overdrive_bas
3000 SAVE_O overdrive_kop
3010 END DEFine savu
3020 :
3030 DEFine PROCedure listu
3040 LOCal count%,nchr,n
3050 OPEN#3,ser1
3060 PRINT#3,"Traducciones para la impresora:"
3070 PRINT#3,"Tradukoj por la printilo: ........................"
3080 PRINT#3,"Fichero con los datos para Overdrive:"
3090 PRINT#3,"Dosiero kun la datumoj por Overdrive: ........................"
3100 PRINT#3
3110 PRINT#3,"QL","Cara";CHR$(8);"'cter impreso con su traduccio";CHR$(8);"'n:"
3120 PRINT#3," ","Printita karaktraro kaj gxia traduko"
3130 PRINT#3,"===","==================================="
3140 FOR nchr=0 TO 255
3150 IF infor%(nchr,0)
3160 PRINT#3,nchr,;
3170 FOR n=1 TO infor%(nchr,0)
3180 PRINT#3,CHR$(infor%(nchr,n));
3190 END FOR n
3200 PRINT#3," = ";
3210 FOR n=1 TO infor%(nchr,0)
3220 PRINT#3,infor%(nchr,n)!;
3230 END FOR n
3240 PRINT#3
3250 END IF
3260 END FOR nchr
3270 PRINT#3
3280 CLOSE#3
3290 END DEFine listu
3300 :