Carat-Musi

Descripción del contenido de la página

Programa para crear carátulas de cintas de música, escrito para Sinclair ZX Spectrum.

Etiquetas:

Escribí Carat-Musi en 1984 para hacer carátulas de papel para mis cintas de música. Este pequeño programa un tiene dos características interesantes:

En primer lugar, el dibujo de las carátulas se hace en pantalla y se imprime en la impresora con un volcado gráfico. Esto requirió muchas pruebas, hasta encontrar las proporciones adecuadas para que el resultado final en papel tuviera el tamaño correcto. No hay que olvidar que entonces trabajábamos con impresoras matriciales, de agujas. Cuando escribí el programa utilizaba una interfaz de impresora Indescomp, que había que controlar con llamadas a sus rutinas en código máquina; a partir de 1987 usé el puerto paralelo de la interfaz DISCiPLE, que tenía un comando para hacer volcados de pantalla.

En segundo lugar. Los textos principales sobre las carátulas (el nombre del artista y el título del disco) se imprimían a 64 caracteres por línea. Para ello extraje la fuente del tratamiento de textos Tasword 2 y escribí un procedimiento de impresión sencillo y eficaz: Creé dos fuentes separadas, una en que los caracteres ocupan la posición izquierda de un carácter normal y otro la posición derecha; e imprimí cada carácter del texto usando una u otra fuente, y escribiendo dos veces en cada posición de columna.

Los textos de las canciones se imprimen sólo en papel, sobre el dibujo ya imprimido, con un tipo de letra pequeño. Por ello el programa pide que se recoloque el papel entre ambas impresiones, como se puede ver en el pantallazo a continuación:

Pantallazo

Ejemplo de carátula para el disco En el lado oscuro del grupo Alarma!!! (las canciones se imprimían a continuación sobre el mismo volcado de pantalla):

Carátulas

Código fuente

  10 REM Carat-Musi
  20 REM Caratulas de cintas para musica
  30 :
  40 REM Copyright (C) 1984,1987,2010 Marcos Cruz (http://programandala.net)
  50 REM Licencia: http://programandala.net/licencia
  60 :
  70 REM 1984-12-09 Primera version.
  75 REM 1987-02-24 Version para interfaz Beta Disk.
  80 REM 1987 Version para interfaz DISCiPLE.
  90 REM 2010-08-30 Retoques y comentarios en el codigo para su publicacion.
 100 :
 110 REM Preparacion
 120 :
 130 IF 0 THEN RANDOMIZE USR 64973: POKE 64524,4: REM inicializar la interfaz de impresora Indescomp
 140 PAPER 7: BORDER 7: INK 0
 150 CLEAR 31063
 160 LOAD d*"letrs64cpl"CODE 31064
 170 GO SUB 1150
 180 :
 190 LET LC=54: DIM C$(LC)
 200 CLS : PRINT INVERSE 1;AT 0,22;"Carat-Musi"''
 210 :
 220 REM Datos de la cinta
 230 :
 240 PRINT "GRUPO:  ";: INPUT G$: PRINT G$
 250 PRINT "L.P.:   ";: INPUT L$: PRINT L$
 260 PRINT "DOLBY: ";
 270 INPUT "S/N ";D$
 280 IF D$<>"S" AND D$<>"s" AND D$<>"N" AND D$<>"n" THEN GO TO 270
 290 PRINT D$
 300 INPUT "DURACION DE CADA CANCION?"'"(S/N)";T$
 310 IF T$<>"S" AND T$<>"s" AND T$<>"N" AND T$<>"n" THEN GO TO 300
 320 LET P$=""
 330 :
 340 REM Datos de la cara 1
 350 :
 360 PRINT "CARA 1: ";: INPUT "NUMERO DE CANCIONES: ";C1: PRINT C1;" CANCIONES"
 370 IF C1=0 THEN GO TO 530
 380 DIM Y$(C1,LC+9)
 390 FOR N=1 TO C1
 400 PRINT TAB (2-LEN STR$ N);N;":";: INPUT "CANCION: ";C$: IF T$<>"S" AND T$<>"s" THEN GO TO 470
 410 INPUT "MINUTOS: ";M$'"SEGUNDOS: ";S$
 420 IF M$="" THEN LET M$="  ": GO TO 440
 430 IF VAL M$<10 AND LEN M$=1 THEN LET M$=" "+M$
 440 IF S$="" THEN LET S$="  ": GO TO 470
 450 IF VAL S$<10 AND LEN S$=1 THEN LET S$="0"+S$
 460 LET P$=M$+":"+S$
 470 LET Y$(N)=C$+P$
 480 POKE 23692,255: PRINT Y$(N)
 490 NEXT N
 500 :
 510 REM Datos de la cara 2
 520 :
 530 PRINT "CARA 2: ";: INPUT "NUMERO DE CANCIONES: ";C2: PRINT C2;" CANCIONES"
 540 IF C2=0 THEN GO TO 700
 550 DIM Z$(C2,LC+9)
 560 FOR N=1 TO C2
 570 PRINT TAB (2-LEN STR$ N);N;":";: INPUT "CANCION: ";C$: IF T$<>"S" AND T$<>"s" THEN GO TO 640
 580 INPUT "MINUTOS: ";M$'"SEGUNDOS: ";S$
 590 IF M$="" THEN LET M$="  ": GO TO 610
 600 IF VAL M$<10 AND LEN M$=1 THEN LET M$=" "+M$
 610 IF S$="" THEN LET S$="  ": GO TO 640
 620 IF VAL S$<10 AND LEN S$=1 THEN LET S$="0"+S$
 630 LET P$=M$+":"+S$
 640 LET Z$(N)=C$+P$
 650 POKE 23692,255: PRINT Z$(N)
 660 NEXT n
 670 :
 680 REM Imprimir en pantalla
 690 :
 700 PRINT AT 20,0;"PULSA 0 PARA IMPRIMIR"
 710 PAUSE 0: IF INKEY$<>"0" THEN GO TO 190
 720 PRINT AT 20,0,,
 730 LET ANCHO=121
 740 CLS : PLOT 0,175: DRAW ANCHO,0: PLOT 0,136: DRAW ANCHO,0: PLOT 0,118: DRAW ANCHO,0: PLOT 0,24: DRAW ANCHO,0
 750 PLOT 0,175: DRAW 0,-151: PLOT ANCHO,175: DRAW 0,-151
 760 FOR Y=94 TO 166 STEP 72
 770 PLOT 126,Y: DRAW 6,6: DRAW 95,0: DRAW 6,-6: DRAW 0,-54: DRAW -107,0: DRAW 0,54
 780 PLOT 157,Y-40: DRAW 0,22,-PI: DRAW 45,0: DRAW 0,-22,-PI: DRAW -45,0
 790 NEXT Y
 800 PRINT AT 5,27;"I";AT 6,27;"J";AT 14,27;"K";AT 15,27;"L"
 810 IF D$="S" OR D$="s" THEN PRINT AT 3,1;"ABCDEFGH";AT 6,16;"AB";AT 15,16;"AB"
 820 LET L=0: LET M$=G$: GO SUB 860
 830 LET L=1: LET M$=L$: GO SUB 860
 840 GO TO 1010
 850 :
 860 REM Imprimir texto en 64 caracteres por linea
 870 :
 880 LET LD=INT (LEN M$/2): LET T1=INT ((15-LD)/2): LET T2=INT ((13-LD)/2+16)
 890 POKE 23606,88: OVER 1
 900 FOR N=1 TO LEN M$ STEP 2
 910 POKE 23607,120
 920 PRINT AT 5+L,T1;M$(N);AT 1+L,T2;M$(N);AT 10+L,T2;M$(N)
 930 IF N>=LEN M$ THEN GO TO 970
 940 POKE 23607,123
 950 PRINT AT 5+L,T1;M$(N+1);AT 1+L,T2;M$(N+1);AT 10+L,T2;M$(N+1)
 960 LET T1=T1+1: LET T2=T2+1
 970 NEXT N
 980 OVER 0: POKE 23606,0: POKE 23607,60
 990 RETURN
1000 :
1010 REM Imprimir en impresora
1020 :
1030 IF 0 THEN RANDOMIZE USR 65047: REM Interfaz Indescomp
1040 COPY SCREEN$ : REM Interfaz DISCiPLE
1050 LPRINT CHR$ 27;CHR$ 55;CHR$ 7: LPRINT CHR$ 27;CHR$ 65;CHR$ 8: LPRINT CHR$ 27;CHR$ 66;CHR$ 3
1060 PRINT AT 20,0;"SITUA EL PAPEL PARA IMPRIMIR LASCANCIONES Y PULSA UNA TECLA": PAUSE 0: PRINT AT 20,0,,,,
1070 LPRINT '" CARA 1:": FOR N=1 TO C1
1080 LPRINT TAB (3-LEN STR$ N);N;". ";Y$(N)
1090 NEXT N
1100 LPRINT '" CARA 2:": FOR N=1 TO C2
1110 LPRINT TAB (3-LEN STR$ N);N;". ";Z$(N)
1120 NEXT N
1130 GO TO 700
1140 :
1150 REM Graficos
1160 :
1170 FOR N=1 TO 12: READ A$: FOR M=USR A$ TO USR A$+7: READ F: POKE M,F: NEXT M: NEXT N: RETURN
1180 DATA "A",254,142,134,130,130,134,142,254,"B",254,226,194,130,130,194,226,254,"C",255,128,179,170,170,179,128,255,"D",255,0,167,165,167,183,0,255,"E",255,0,83,114,35,35,0,255
1190 DATA "F",255,0,171,58,147,147,0,255,"G",255,0,187,18,147,147,0,255,"H",254,2,186,42,42,170,2,254,"I",120,120,216,216,24,24,24,24,"J",24,24,24,24,24,24,255,255,"K",60,60,195,195,3,3,3,3,"L",3,60,60,192,192,192,255,255
1200 :
1210 REM Grabar el programa
1220 :
1230 CLEAR : SAVE d*"carat-musi" LINE 10
1240 SAVE d*"letrs64cpl"CODE 31064,1536

Descargas

El programa puede descargarse en una imagen de disco MGT (de DISCiPLE o Plus D), que también contiene el programa Carat-Prog: