Revistas en papel
 Amiga World Nº7 - Febrero 1990
Anterior
Menú
Logotipo

El Amiga Me Encanta ha conseguido el permiso por escrito de IDG Comunications España
para ofrecer los artículos de la revista Amiga World España.

PUNTERO MAKER Amiga World

Por José Dos Santos

Con todos los datos, referentes a la estructura del puntero, ha sido realizado el programa "Puntero Maker", el cual puede ser una gran ayuda a la hora de crear el puntero.

Nada más cargar el puntero se borrará la pantalla, y sobre ésta aparecerá una cuadrícula de 16x16 cuadrados, los cuales representaran al puntero. Debajo de la cuadrícula habrá cuatro cuadrados que contendrán los respectivos colores del puntero, aunque en esta ocasión los colores que contiene son los de la pantalla.

A la derecha de la cuadrícula habrá dos cuadrados, uno de ellos informará al usuario del color que en esos momentos está en uso, y el cuadrado interior contendrá la imagen del puntero tal como quedará a escala real.

Para definir el puntero basta con llevar, con el ratón, el puntero hasta la cuadrícula, colocándolo sobre el píxel que se quiera dibujar para a continuación pulsar el botón izquierdo del ratón y dibujar sobre la cuadrícula un cuadrado con el color que en ese momento se haya elegido. Para elegir el color hay que realizar el mismo proceso pero con la cuadrícula de los colores. El conjunto de todos los cuadrados de la cuadrícula que haya coloreados en lo que va a definir la forma del puntero.

Además el usuario dispone de otras ayudas que se encuentran en la barra de menús, a la cual se accede dejando pulsado el botón derecho del ratón.

La barra de menús está compuesta por tres menús: el menú sistema, menú edición y menú definir.


Menú sistema

En el menú sistema, el usuario tendrá las siguientes ayudas:

- Grabar datos: sirve para grabar los bytes que componen el puntero, para después poderlos usar desde este u otro programa. El ordenador antes de realizar la operación pedirá el nombre que se quiere destinar al fichero.

- Cargar datos: sirve para cargar un fichero que se haya grabado con la anterior opción. El ordenador pide al usuario el nombre del fichero, y si éste se encuentra en el disco se procederá a su carga, dibujando sobre la cuadrícula la imagen que éste contenga.

- Grabar SYSTEM: esta opción es quizás la que tenga una mayor utilidad, sirve para grabar en el fichero SYSTEM-CONFIGURATION la secuencia de bytes que componen el puntero. Cuando se elija esta opción, el ordenador pedirá que se introduzca el disco donde se quiera grabar y a continuación se pulsa una tecla. En el fichero destino tiene que haberse grabado anteriormente el fichero SYSTEM-CONFIGURATION, ya que el programa no crea este fichero sino que lo único que hace es modificar los datos del mismo. Esta es la única opción que graba el bit de elección.

- Cargar SYSTEM: esta función es la inversa de la anterior. El ordenador pide que se introduzca el disco donde figura este fichero, para a continuación mostrar la imagen que contenga en la cuadrícula.

- Salir: como su propio nombre indica, esta opción cierra las opciones del Basic, saliendo al WorkBench.


Menú edición

En el menú edición el usuario podrá acceder a las siguientes opciones:

- Restaurar: si después de definir el puntero, no se ha quedado satisfecho con el nuevo aspecto que adquiere éste, eligiendo esta opción el ordenador restablece la forma original del puntero que tenía antes de haber cargado el programa.

- Rotar Vert: sirve para girar verticalmente la figura que esté en la cuadrícula 180 grados.

- Rotar Horiz: realiza la misma función que la opción anterior, sólo que en sentido horizontal.


Menú definir

Este último menú sólo está constituido por dos opciones:

- Puntero: transfiere el dibujo de la cuadrícula al puntero. Cuando se ha elegido esta opción, es recomendable no mover el ratón mientras se está definiendo.

- Cursor: sirve para definir el bit de elección del puntero. Una vez se haya accedido a esta opción, el siguiente bit que se marque en la cuadrícula será el bit de elección. Este estará representado por una "X" en el color escogido.

Cuando se elige en el menú de sistema alguna opción se grabación, lo que se graba no es el dibujo que esté en esos momentos en la cuadrícula, sino los datos que contiene el puntero.

Después de cargar el programa de demostración, éste cargará a su vez cuatro ficheros de datos que han sido creados con el PUNTERO-MAKER. Estos ficheros son el dibujo de la flecha, apuntando a cada una de las cuatro direcciones.

Cuando ya esté en marcha el programa, el usuario puede mover el puntero con toda facilidad, pero cada vez que pulse el botón izquierdo del ratón, éste cambiará de forma apuntando la flecha al cuadrante en el que se encuentre.

Sirva también como ejemplo de los curiosos efectos de animación con el puntero, el programa puntero que acompaña a los discos de AMIGA WORLD.

DIM COL(16,16):COLO=1:DIM A1$(8):DIM A2$(8):DIM INV(16,16)
DIM INIT(63):GOSUB CUADRICULA:PX=255:PY=0:DIM FIL$(232):
DIM VA(64)
FOR N=0 TO 63:INIT(N)=PEEK(3204+N):NEXT N
GOSUB OPCIONES:
ON MOUSE GOSUB PINTA:MOUSE ON:MENU ON
ON ERROR GOTO FALLO
MAIN:
GOTO MAIN
FALLO:
WINDOW 2,"ERROR",(30,30)-(260,60),15
GOSUB PAUSA1
WINDOW CLOSE 2
MENU ON:MOUSE ON
RESUME MAIN
CUADRICULA:
LINE(0,0-(400-0):LINE (400,0)-(400,160):LINE(400,160)-(0,
160 )
LINE(0,160)-(0,0)
FOR N=1 TO 16:LINE(N*25,0)-(N*25,160):NEXT N
FOR N=1 TO 16:LINE(0,N*10)-(400,N*10):NEXT N
LINE(0,170)-(400,170):LINE(400,170)-(400,180):LINE(400,180
)-(0,180)
LINE(0,180)-(0,170):FOR N=1 TO 4:LINE(N*100,170)-(N*100,18
0 )
PAINT (N*100-20,175),N-1,1:NEXT N
LINE(440,15)-(500,15):LINE(500,15)-(500,45):LINE(500,45)-(
440 ,45)
LINE(440,45)-(440,15):LOCATE 1,56:PRINT"COLOR":LINE (450,2
0 )-(490,40),,BF
LINE(440,55)-(500,55):LINE (500,55)-(500,85):LINE(500,85)-
(440,85)
LINE(440.85)-(440,55):LOCATE 13,56:PRINT "PUNTERO"
RETURN:
PINTA:
IF MOUSE(0)>=0 THEN PINTA
X=MOUSE(1):Y=MOUSE(2)
IF Y>159 THEN ELIGECOL
IF X>399 THEN MOUSE ON:RETURN
Y=INT(Y/10):X=INT(X/25)
LINE(X*25,Y*10)-(X*25+25,Y*10+10),COLO,BF
LINE(X*25,Y*10)-(X*25+25,Y*10):LINE(X*25+25,Y*10)-(X*25+25
,Y*10+10)
LINE(X*25+25,Y*10+10)-(X*25,Y*10+10):LINE(X*25,Y*10+10)-(X
*25,Y*10)
PSET (460+(X*2),60+Y),COLO:PSET (461+(X*2),60+Y),COLO
COL(Y,X)=COLO
MOUSE ON:RETURN
ELIGECOL:
IF Y<171 OR Y>179 THEN MOUSE ON:RETURN
IF X>399 THEN MOUSE ON:RETURN
COLO=INT(X/100):LINE(450,20)-(490,40),COLO,BF
MOUSE ON:RETURN
PUNTERO:
PO=0:FOR N=0 TO 31:FOR F=1 TO 8:AL=INT(N/2)
IF COL(AL,((N-AL*2)*8)+F-1)=0 THEN A1$(F)="0":A2$(F)="0"
IF COL(AL,((N-AL*2)*8)+F-1)=1 THEN A1$(F)="1":A2$(F)="0"
IF COL(AL,((N-AL*2)*8)+F-1)=2 THEN A1$(F)="0":A2$(F)="1"
IF COL(AL,((N-AL*2)*8)+F-1)=3 THEN A1$(F)="1":A2$(F)="1"
NEXT F:GOSUB PEE1:POKE 3204+AL*4+(N-AL*2),POK:GOSUB PEE2:P
OKE 3206+AL*4+(N-AL*2),POK
PO=PO+1
NEXT N
PX=255-PX:PY=256-PY:IF PY=256 THEN PY=0
POKE 12598650&,PK:POKE 12598651&,PY
RETURN
PRUBA:
FOR N=0 TO 15:FOR F=0 TO 15
PRINT COL(N,F):NEXT F:PRINT:NEXT M
RETURN
PEE1:
POK=0:BYTE=128:FOR Z=1 TO 8:IF A1$(Z)="1" THEN POK=POK+BYTE
BYTE=BYTE/2:NEXT Z
RETURN
PEE2:
POK=0:BYTE=128:FOR Z=1 TO 8:IF A2$(Z)="1" THEN POK=POK+BYTE
BYTE=BYTE/2;NEXT Z
RETURN
INVERSION:
FOR I=0 TO 15:FOR IN=0 TO 15:INV(I,IN)=COL(15-IN,I):NEXT I
N:NEXT I
FOR I=0 TO 15:FOR IN=0 TO 15:LINE(I*25,IN*10)-(I*25+25,IN*
10 +10),INV(I,IN),BF
PSET (460+I*2,60+IN),INV(I,IN):PSET (461+I*2,60+IN),INV(I,
IN)
NEXT IN:NEXT I:GOSUB CUADRICULA
FOR I=0 TO 15:FOR IN=0 TO 15:COL(I,IN)=INV(IN,I):NEXT IN:
NEXT I
RETURN
LOD:
FOR I=0 TO 15:FOR IN=0 TO 1:FOR IL=0 TO 7:ELE(IL)=COL(I,IN
*8+IL):
COL(I,IN*8+IL)=COL(I,IL):COL(I,IL)=ELE(IL)
NEXT IL:NEXT IN:NEXT I:FOR IL=0 TO 7:ELE(IL)=COL(0,8+IL):
NEXT IL
FOR I=1 TO 15:FOR IN=0 TO 7:COL(I-1,8+IN)=COL(I,8+IN):
NEXT IN:NEXT I
FOR I=0 TO 15:FOR IN=0 TO 15:INV(I,IN)=COL(IN,I):NEXT IN:
NEXT I
FOR I=0 TO 15:FOR IN=0 TO 15:LINE(I*25,IN*10)-(I*25+25,IN*
10 +10),INV(I,IN),BF
PSET (460+I*2,60+IN),INV(I,IN):PSET (461+I*2,60+IN),INV(I,
IN)
NEXT IN:NEXT I:GOSUB CUADRICULA
RETURN
INVER:
FOR I=0 TO 15:FOR IN=0 TO 15:INV(I,IN)=COL(IN,15-I):
NEXT IN:NEXT I
FOR I=0 TO 15:FOR IN=0 TO15:LINE(I*25,IN*10)-(I*25+25,IN*
10 +10),INV(I,IN),BF
PSET (460+I*2,60+IN),INV(I,IN):PSET (461+I*2,60+IN),INV(I,
IN)
NEXT IN:NEXT I:GOSUB CUADRICULA
FOR I=0 TO 15:FOR IN=0 TO 15:COL(I,IN)=INV(IN,I):NEXT IN:
NEXT I
RETURN
RESTAURA:
FOR RES=0 TO 63:POKE(3204+RES),INIT(RES):NEXT RES:RETURN
PUNTO:
MOUSE OFF
IF MOUSE(1)>=0 THEN PUNTO
X=MOUSE(1):Y=MOUSE(2)
IF Y>159 THEN PUNTO
IF X>399 THEN PUNTO
Y=INT(Y/10):X=INT(X/25)
LINE(X*25,Y*10)-(X*25+25,Y*10+10),COLO
LINE(X*25+25,Y*10)-(X*25,Y*10+10),COLO
LINE(X*25+25,Y*10)-(X*25+25,Y*10):LINE(X*25+25,Y*10)-(X*25+25
,Y*10+10)
LINE(X*25+25,Y*10+10)-(X*25,Y*10+10):LINE(X*25,Y*10+10)-(X
*25,Y*10)
PSET (460+(X*2),60+Y),COLO:PSET (461+(X*2),60+Y),COLO
PY=Y:PX=X
MOUSE ON:RETURN
CARGA:
OPEN "DF0:DEVS/SYSTEM-CONFIGURATION" FOR INPUT AS 1:LONJ=0
WHILE NOT EOF(1)
FIL$(LONJ)=(INPUT$(1,1))
LONJ=LONJ+1
WEND
CLOSE
RETURN
SAVFILE:
OPEN A$ FOR OUTPUT AS 1
FOR GRA=0 TO 63
PRINT #1,CHR$(PEEK(3204+GRA));:NEXT GRA
CLOSE
RETURN
LOAFILE:
OPEN A$ FOR INPUT AS 1
FOR LONJ=0 TO 63:FIL$(31+LONJ)=(INPUT$(1,1))
NEXT LONJ
CLOSE
GOSUB INICIALIZA
RETURN
GRABA:
OPEN "DF0:DEVS/SYSTEM-CONFIGURATION" FOR OUTPUT AS 1
FOR GRA=0 TO 63:FIL$(32+GRA)=CHR$(PEEK(3204+GRA)):NEXT GRA
FIL$(100)=CHR$(PX)
FIL$(101)=CHR$(PY)
FOR FINAL=0 TO LONJ-1:PRINT #1,FIL$(FINAL);:NEXT FINAL
CLOSE
RETURN
OPCIONES:
MENU 1,0,1,"SISTEMA"
MENU 1,1,1,"GRABAR DATOS"
MENU 1,2,1,"CARGAR DATOS"
MENU 1,3,1,"GRABAR SYSTEM"
MENU 1,4,1,"CARGAR SYSTEM"
MENU 1,5,1,"SALIR        "
MENU 2,0,1,"EDICION"
MENU 2,1,1,"BORRAR"
MENU 2,2,1,"RESTAURAR"
MENU 2,3,1,"ROTAR VERT"
MENU 2,4,1,"ROTAR HORIZ"
MENU 3,1,1,"DEFINIR"
MENU 3,2,1,"PUNTERO"
MENU 3,3,1,"CURSOR"
MENU 4,0,1,""
ON MENU GOSUB ELECCION
RETURN
SISTEMA:
ON MENY GOSUB GFILE,LFILE,GSYSTEM,LSYSTEM,SALIR
RETURN
SALIR:
SYSTEM
GFILE:
P$="GRABAR DATOS"
FAENA$="PREGUNTA"
GOSUB VENTANA
GOSUB LOAFILE
RETURN
GSYSTEM:
P$="GRABAR SYSTEM-CONFIGURATION"
FAENA$="PAUSA"
GOSUB VENTANA
GOSUB CARGA
GOSUB GRABA
RETURN
LSYSTEM:
P$="CARGAR SYSTEM-CONFIGURATION"
FAENA$="PAUSA"
GOSUB VENTANA
GOSUB CARGA
GOSUB INICIALIZA
RETURN
VENTANA:
WINDOW 2,P$,(30,30)-(400,60),15
WINDOW OUTPUT 2
IF FAENA$="PAUSA" THEN GOSUB PAUSA
IF FAENA$="PREGUNTA" THEN GOSUB PREGUNTA
WINDOW CLOSE 2
RETURN
PAUSA:
PRINT "INTRODUCE EL DISCO DESTINO Y PULSA UNA TECLA"
PAUSA1:A$=""
WHILE A$="":A$=INKEY$:WEND
RETURN
PREGUNTA:
INPUT "NOMBRE DEL FICHERO";A$
RETURN
ELECCION
MENU OFF:MOUSE OFF
MENX=MENU(0):MENY=MENU(1)
ON MENX GOSUB SISTEMA,EDICION,DEFINIR
MENU ON:MOUSE ON:RETURN
EDICION:
ON MENY GOSUB BORRA,RESTAURA,INVERSION,INVER
RETURN
BORRA:
CLS:GOSUB CUADRICULA
FOR I=0 TO 15:FOR IN=0 TO 15:COL(IN,I)=0:NEXT IN:NEXT I:
RETURN
DEFINIR:
ON MENY GOSUB PUNTERO,PUNTO
RETURN
DECIFRA:
PO=0:FOR N=0 TO 31:GOSUB PEE3:FOR F=1 TO 8:AL=INT(N/2):
IF A1$(F)="0" AND A2$(F)="1" THEN COL(AL,((N-AL*2)*8)+F-1)
=0
IF A1$(F)="1" AND A2$(F)="1" THEN COL(AL,((N-AL*2)*8)+F-1)
=2
IF A1$(F)="1" AND A2$(F)="0" THEN COL(AL,((N-AL*2)*8)+F-1)
=1
IF A1$(F)="1" AND A2$(F)="1" THEN COL(AL,((N-AL*2)*8)+F-1)
=3
NEXT F:
NEXT N
RETURN
PEE3:
PAT=128:FOR F=1 TO 8:A1$(F)="0":A2$(F)="0"
IF VA(AL*4+(N-AL*2))>=PAT THEN VA(AL*4+(N-AL*2))=VA(AL*4+(
N-AL*2))-PAT : A1$(F)="1"
IF VA(2+AL*4+(N-AL*2))>=PAT THEN VA(2+AL*4+(N-AL*2))=VA(2+
AL*4+(N-AL*2))-PAT:A2$(F)="1"
PAT=PAT/2:NEXT F:RETURN
INICIALIZA:
WINDOW 2,"ESPERA UN MOMENTO",(30,30)-(400,60),15
FOR N=0 TO 63:VA(N)=ASC(FIL$(N+31)):NEXT N
GOSUB DESCIFRA
WINDOW CLOSE 2
GOSUB LOD
RETURN
Numero de líneas:  269
  
.186
.292
.321
.13
.758
.293
.702
.951
.527
.256
.902
.606
.231
.37
.235
.86
.77
.488
.148
.213
.138
.401
.145
.370
.337
.452
.893
.482
.165
.250
.866
.245
.210
.907
.381
.529
.27
.922
.99
.590
.305
.935
.270
.195
.557
.94
.850
.844
.896
.518
.99
.933
.844
.231
.226
.46
.456
.109
.519
.978
.495
.66
.108
.569
.324
.357
.439
.726
.316
.357
.241
.547
.865
.357
.290
.119
.865
.357
.150
.160
.962
.264
.709
.686
.177
.472
.899
.73
.357
.524
.303
.752
.805
.757
.44
.417
.687
.548
.73
.264
.709
.686
.177
.472
.357
.44
.222
.687
.264
.709
.686
.177
.472
.899
.73
.357
.7
.550
.953
.899
.468
.27
.934
.828
.590
.380
.965
.935
.270
.195
.557
.94
.478
.844
.972
.746
.271
.682
.746
.89
.533
.357
.262
.223
.43
.503
.533
.357
.302
.417
.163
.742
.533
.597
.357
.470
.786
.282
.706
.804
.901
.533
.357
.108
.513
.531
.513
.381
.317
.268
.706
.728
.541
.575
.312
.65
.713
.74
.924
.669
.357
.967
.666
.357
.341
.209
.441
.877
.361
.32
.345
.357
.452
.326
.356
.32
.994
.66
.357
.310
.834
.356
.32
.994
.597
.357
.109
.315
.921
.309
.34
.231
.357
.271
.831
.880
.307
.357
.663
.814
.357
.231
.350
.980
.347
.257
.394
.820
.357
.516
.704
.837
.357
.985
.325
.357
.497
.817
.826
.328
.650
.342
.875
.335
.699
.349
.770
.108
.357
.339
.787
.175
.260
.805
.716
.751
.707
.384
.745
.534
.231
.618
.357
  


DIM CURSOR(3,63):VALOR)=1:VA=1
GOSUB CARGA
ON MOUSE GOSUB MUEVE:MOUSE ON
MAIN:
GOTO MAIN
CARGA:
FOR L=0 TO 3:NOMBRE$="CURSOR"+STR$(L+1)
OPEN NOMBRE$ FOR INPUT AS 1
FOR F=0 TO 63
CURSOR (L,F)=ASC(INPUT$(1,1))
NEXT F:CLOSE:NEXT L
MUEVE:
MOUSE OFF
VALOR=1
IF MOUSE(0)>=0 THEN MUEVE
X=MOUSE(1):Y=MOUSE(2)
IF X>320 THEN VALOR=VALOR+1
IF Y>120 THEN VALOR=VALOR+2
IF VA<>VALOR THEN VA=VALOR:FOR N=0 TO 63:POKE 3204+N,
CURSOR(VA-1,N):NEXT N
MOUSE ON
RETURN
Numero de líneas:  22
  
.87
.994
.349
.951
.527
.972
.196
.638
.777
.984
.582
.219
.899
.402
.934
.27
.225
.192
.891
.939
.828
.357
  

Envía esta página web a un amigo:
Esta opción está desactivada temporalmente, rogamos disculpen las molestias

Volver a la página anterior

Al menú principal