CORRECCIÓN DE 'LETRA MÁGICA'
Quisiera corregir un error en la sección de Amiga Magias del mes de Septiembre. Se trata del programa anónimo 'letra mágica', donde la correspondiente letra no es tal porque el cálculo lo realiza el ordenador en precisión simple (forma científica, valor por defecto), por lo que habrá que decirle que lo ejecute en precisión doble con una simple línea antes de las variables DEFDBL a-z
José Núñez Oller
MAGIAS VARIADAS
Lamentablemente las direcciones de los pokes que se publican en la revista no siempre funcionan con la versión 1.3 así que estos son algunos de los pokes para la versión 1.3:
20308 > Dirección de inicio de datos del puntero con 512K.
20371 > Dirección final de datos del puntero.
PEEKL 19174 > Dirección donde comienza la pantalla que se está visualizando.
Para poder acceder a todos los códigos de escape de tu impresora que aparecen en el manual solo tienes que llamarla como "PAR:" en vez de como "PTR:", pero ten cuidado por que las vocales acentuadas no las imprimirá, si no se hace una conversión adecuada. Conviene tener una tabla ASCII de PC. Desde el Basic es:
OPEN "PAR:" FOR OUTPUT AS 1
PRINT #1, 'C�digo de escape'
CLOSE 1
La mejor forma de configurar la conocida impresora, para los usuarios de Amiga, STAR LC10C es escoger en la lista de impresoras el drive con el nombre EpsonX[CBM_MPS1250] aunque no imprime las negritas en NLQ, el drive CBM_MPS1000 si que imprime las negritas en NLQ, pero sin embargo no imprime las itálicas.
PUESTA DEL SOL
Este pequeño programa sirve para calcular la salida y la puesta del Sol en cualquier día del año, más que una utilidad podemos calificar a dicho programa como una curiosidad.
REM El�as Jim�nez Parra
REM Calvario,8 .02620 Minaya (Albacete)
REM
REM (C) AMIGA WORLD - IDG COMMUNICATIONS - 1990
PRINT
PRINT " * CALCULO DE SALIDA Y PUESTA DEL SOL *"
PRINT
PRINT:PRINT
INPUT " Dia , Mes: ";di,m:PRINT:PRINT
FOR e=1 TO m-1:READ f:d=d+f:NEXT
DATA 31,28,31,30,31,30,31,31,30,31,30,31
' Longitud: Oeste + Este -
' Latitud : Norte + Sur -
' Coordenadas del lugar de observaci�n.
long=2.315833:lat=39,27222
d=d+di
gra=3.1415926#/180
f=(d-3.34815)*.98565
q=.1277*SIN(f*gra)
v=f+15*q-77.3411
r=.16441*SIN(2*v*gra)
e=q-r
s=.3978*SIN(v*gra)
c=(1-s^2)^.5
x=s*SIN(lat*gra)+.01454
x=x/(c*CON(lat*gra))
ar=SQR(-x*x+1)
ar=-ATN(x/ar)+1.5708
ar=ar/gra
orto=(long+ar)/15+e:IF SGN(orto)=-1 THEN orto=orto+24
ocas=(long-ar)/15+e:IF SGN(ocas)=-1 THEN ocas=ocas+24
o%=FIX(orto):s%=FIX(ocas)
o$=MID$(STR$(o%),2):mi$=MID$(STR$(INT((orto-o%)*60)),2)
a$=MID$(STR$(a%),2):ms$=MID$(STR$(INT((ocas-s%)*60)),2)
o$=LEFT$("00",2-
LEN(o$))+o$:s$=LEFT$("00",2-
LEN(s$))+s$
PRINT " Salida: "o$":"mi$
PRINT
PRINT " Puesta: "s$":"ms$
PRINT :PRINT : PRINT " En invierno +1 hora ,en verano +2 horas.":PRINT :PRINT
Elías Jiménez Parra
TRUCO JUEGO
El juego Shadow of the Beast II es muy bueno, pero el problema es que es tremendamente difícil pasar de nivel. Una solución que he encontrado es la siguiente:
Cuando comienza el juego se ha de ir por la izquierda, cuando aparezca una especie de grieta (donde los pájaros) hay que descender hasta el fondo del todo y seguir de nuevo hacia la izquierda. Si se ha tenido suerte, y aun no han acabado con nosotros, se llegará a una caseta en la cual hay un hombre. Bastará con pedirle 10 cervezas 'Ten pints' para obtener inmunidad a partir de ese momento.
Justo Herrero
MEMORY PEEKER
Con este programa podrá mirar el contenido de la memoria de su Amiga, sin embargo ha de tener cuidado con no introducirse en direcciones demasiado altas, ya que podría producirse un GURU.
REM El�as Jim�nez Parra. 7-Nov-1990
REM Calvario,10 . 02620 Minaya (ALbacete)
REM
REM(C) AMIGA WORLD - IDG COMMUNICATIONS - 1990
PRINT :PRINT TAB(16) "* M E M O R Y P E E K E R *"
start:
PRINT :PRINT :PRINT
INPUT "DESDE:";h$
GOSUB DEC :P&=s&
INPUT "HASTA:";h$
GOSUB DEC :F&=s&
CLS
I&=P&:GOSUB Phex
FOR I&=P& TO F&
pe=PEEK(I&)
pe$=CHR$(pe):IF pe‹32 THEN pe$="."
IF POS(0) >75 THEN PRINT:GOSUB Phex
PRINT pe$;
NEXT
END
DEC:
L=LEN(h$):s&=0
FOR I=L TO 1 STEP-1:a=ASC(MID$(h$,I,1))
IF a>64 AND a‹71 THEN s&=s&+(a-55)*16^(L-I):GOTO acabo
IF a‹48 OR a>57 THEN nulo
s&=s&+(a-48)*16^(L-I)
acabo:
NEXT:RETURN
nulo:
COLOR 0,3:PRINT "ENTRA LAS CIFRAS EN MAYUSCULAS":COLOR 1,0
GOTO start
Phex:
O$="0000":L=LEN(HEX$(I&)):PRINT RIGHT$(O$,6-L);HEX$(I&)":";
RETURN
Elías Jiménez Parra
OCULTAR FICHEROS
Ocultar es un programa sencillo y rápido de teclear, útil si el ordenador lo utilizan varias personas y no quieres que vena un fichero determinado. El programa realiza una operación con bits en cada byte, con lo que se consigue que el fichero introducido quede codificado de tal manera, que no es posible leerlo sino se vuelve a ejecutar. Por ejemplo, tienes el fichero ASCII (Puede ser cualquier clase de fichero, incluso no ASCII) llamado "prueba" entonces teclea en el CLI o Shell "ocultar prueba" y lista el directorio, comprobarás que hay un fichero llamado "prueba.cod" que ya no se puede leer hasta que no ejecutes "ocultar prueba.cod" con lo cual el fichero quedará como al principio.
Lo que realmente hace el programa es un XOR u OR exclusivo de 11011011 (219 decimal) a cada uno de los bytes que contenga el fichero. Un XOR es un operador a nivel bits cuya regla es que un bit es verdadero solo y exclusivamente cuando uno de los dos es verdadero; si los dos bits son verdaderos o son los dos falsos el resultado será un bit falso pero si por el contrario uno de ellos es exclusivamente verdadero el resultado sera un bit verdadero. Supongamos que el primer byte es 01000001 (65 en decimal y la letra 'A' en ASCII) el ordenador hará el XOR de 11011011 a 01000001 de la siguiente forma:
65 XOR 219 Resultado
---------------------
0 1 1
1 1 0
0 0 0
0 1 1
0 1 1
0 0 0
0 1 1
1 1 0
A continuación seguirá con el siguiente byte repitiendo hasta que no quedara ninguno. Para decodificarlo se produce la misma acción que para codificarlo ya que si se realiza la operación dos veces se deja el fichero como estaba; el resultado de esta operación ((64 XOR 219) XOR 219) es 64.
Para compilarlo no hace falta ninguna librería rara o algún "include" personal, es un programa que puede teclear cualquiera que tenga algún Compilador de C. Yo personalmente lo he tecleado con Aztec C. Teclea el listado en algún editor de texto exclusivo ASCII (Ed, Memacs, etc...), después grabalo en el disco RAM con el nombre ocultar.c, y compilalo y linkalo:
(Para Aztec C)
cc ram:ocultar.c ln ram:ocultar.o -lc
Si por el contrario no tienes un compilador de C, también incluyo un listado en Basic que trabaja igual que el escrito en C, pero muchísimo mas lento, incluso es posible codificar un fichero con el programa en C y luego decodificarlo con el programa en Basic, es decir los ficheros creados con los dos programas son totalmente compatibles.
/* Ocultar */
/*Codificador/Decodificador*/
/* Versi�n 1.2.1 */
/*1990 (c) by Joaqu�n Gracia*/
#include "stdio.h"
#include "ctype.h"
main (argo,argv)
int argc;
char *argv[];
{
int lon = strlen(argv[1]);
char nombre1[35];
char gu[36];
if (argc != 2 ) {
printf("Usar:Ocultar fichero\n");
exit (0); }
gu[0] = 0;
strncat (gu,argv[1],lon-4);
strcat (gu,".cod");
if ( strcmp(argv[1],gu) ) {
strcpy (nombre1,argv[1]);
strcat (nombre1,".cod");
codifica (argv[1],nombre1); }
else {
strncat (nombre1,argv[1],lon4);
codifica (argv[1],nombre1); }
exit (0);
}
codifica (nombre,nombre1)
char *nombre,*nombre1;
{
FILE *fp,*fp1;
register char ch;
if ((fp = fopen (nombre,"r")) == NULL) {
printf ("Fichero noencontrado\n");
exit (0); }
if ((fp1 = fopen (nombre1,"w")) == NULL) {
printf ("No Puedo abrir el fichero\n");
exit (0); }
for (;;) {
ch = getc (fp);
if (feof(fp)) break;
putc (ch ^ 219,fp1);
}
fclose (fp);
fclose (fp1);
DeleteFile (nombre);
}
' Ocultar
' Versi�n en Basic
' Codificador/Decodificador
' Versi�n 1.2.1
' 1990 (c) by Joaqu�n Gracia
INPUT "Nombre del fichero",nombre$
IF RIGHT$(nombre$,4) = ".cod" THEN nombre1$=LEFTs(nombre$,LEN(nombre$)-4)
ELSE
nombre1$=nombre$+".cod"
END IF
OPEN nombre$ FOR INPUT AS 1
OPEN nombres1$ FOR OUTPUT AS 2
codifica:
a$=INPUT$ (1,1)
PRINT #2,CHR$(ASC(a$) XOR 219);
IF EOF(1) THEN fin
GOTO codifica
fin:
CLOSE 1
CLOSE 2 |