Avances, Diario de...

Started by SplinterGU, April 17, 2008, 03:00:51 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

blostec

Ese código no te funciona porque el soporte 32bits alpha se ha añadido en la r30 de la cual no se han liberado los binarios. Es normal que con la r28 no funcione. Si tienes dudas con las dll's, lo mejor es que las borres y te bajes de nuevo la release 28 y el mandatory pack. Saludos!

SplinterGU

maldicion, ayer pense que habia subido los cambios, pero se ve que fallo...

ahora si, revision 33 disponible en el svn...

lamentablemente no estoy pudiendo subir los ejecutables, mi ISP me tiene cansado...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

izubiaurre

Diferencias entre betas, wips, revisions y snapshots?

blostec

Veo que ya estas subiendo la r34, mañana me la bajo y la pruebo. Gracias!  ;)

SplinterGU

betas son betas...
wips, son versiones en desarrollo, podria ser lo mismo que snapshots.
revision es la numeracion de cada cambio...
snapshot es una foto binaria de lo que esta en el repositorio en tal revision
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Prg

Quoteahora si, revision ...
gracias, :)
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

MythomizeR

#577
Gracias por la r34.

A ver si se me ocurren más sugerencias para el lenguaje y las digo, aunque supongo que lo prioritario en éstos momentos sea su depuración...

MythomizeR

#578
Bueno, escribo en un post nuevo no vaya a ser que por editar el anterior pase desapercibido... :-)

El caso es que tras probar la última release, la r34, un sencillo fragmento de código que antes me funcionaba sin problemas ahora ha dejado de hacerlo, a saber:

private
  int fichero;
  word *buffer;
  int n;
begin
  buffer = alloc(1000);
  fichero = fopen(filename,O_READ);
  for(n=1000;n;n--)
    fread(fichero,buffer);
    buffer++;
  end
  fclose(fichero);
end


Antes me cargaba los 1000 bytes correctamente en 'buffer' y ahora lo carga con datos "basura" que nada tienen que ver con lo que antes cargaba...

Ello me hace pensar que quizás en este tiempo ha habido algún cambio (quizás bug, no se...) en la función fread.

Y que sí, que es un poco gañán usar fread en su versión de dos parámetros teniendo una de tres que te lee todos los datos de una, pero lo cierto es que cuando vi la documentación de ésta, no me lo dejaba claro (INT FREAD(POINTER, INTEGER, INTEGER))... y bueno, ya se que es cuestión de probar, pero aprovecho para preguntar cual de los dos enteros es el que recoge el dato y cual la cantidad de este :-)

Por cierto, aprovecho tambien para decir que qué chulo estaría que el Bennu dejara usar llaves {} en lugar del begin-end... y ya de paso, que nos dejara ahorrarnos éstas en aquellos casos de sentencia única a lo C style, of course... pero bueno, esto ya es por pedir, que para eso es gratis :-)

SplinterGU

iba a probar tu codigo, pero caramba! claro que no va a funcionar... buffer es un pointer... lo unico que haces con fread es leer punteros (4 bytes, pointer), no su contenido...
por otra parte con alloc 1000 solo estas alocando espacio para 500 words...
esta todo mal por donde lo mires... no puede ser que antes te funcionara... si antes te funcionaba habia un bug...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

MythomizeR

#580
LOL qué cosas me dices :-), me sorprende, pues te puedo asegurar que me ha estado funcionando perfectamente hasta no sé que versión, porque no sé si me quedé por la r28 o por ahí, no recuerdo bien... yo pensaba que debe recibir un puntero al área a cargar, como en C...

Y sí, claro que sé que alloc reserva bytes, y por tanto en words son la mitad, pero es que por otro lado ese no es el código exactamente original, pero vamos, que el original es así solo que algo más engorroso... pero vamos que es así.

Pues a ver si va a ser un bug que hubo, no se... pero ya te digo que me ha ido de rechupete para una librería que hice y que, bueno... tendrá que ver la luz algún día y espero os guste :-)

Editado:
Viendo la documentación de la Wiki, jaja ya lo veo, pero es que qué raro que no viera tal docu, pues echo mano de ésta con frecuencia como es natural... y qué suerte por tanto he tenido todo este tiempo al funcionarme jaja

Pues voy a ver si subsano el asunto...
Gracias.

SplinterGU

#581
perdon, quizas no me explique bien... intentare explicarlo, para que razonemos juntos y veamos porque no deberia funcionar...

el prototipo de la funcion (original) es:

fread(fichero, variable)

donde fichero es lo que retorna el fopen
y variable es la variable a cargar

bien, la funcion fread, toma del "tipo" de variable los valores de address y tamaño...
esto es:

&variable y sizeof(variable)

entonces, al variable ser un pointer... lo unico que haces es leer el puntero. ("&variable" NO variable...)

se entiende ahora?

Cuando dije 500, lo dije, porque en el ejemplo haces un for de 1000, y no de 500...

EDIT:
En otro prototipo es:

fread(address, size, fichero);

casi como C.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

MythomizeR

#582
Sí, bien, todo aclarado... con la primera explicación que me has dao ya he empezado a ver el asunto y luego después al mirar la wiki (que no sé por que se me habia pasado por alto mirar allí)...

Y sí, lo del bucle 1000 es que es por lo que te he contado después en el EDIT de mi post anterior, que el código no es el original y entonces por eso se me ha pasado modificar eso...

Gracias, voy a ver si arreglo la cosa y no hay más problemas en el código :-D

SplinterGU

aca te pongo un ejemplo, llama al codigo "fread.prg"

[code language="bennu"]
import "mod_file";
import "mod_mem";
import "mod_say";
import "mod_string";
private
  int fichero;
  char *buffer;
  string str;
  int n;
begin
  buffer = alloc(1000);
  fichero = fopen("fread.prg",O_READ);
  fread(buffer,1000-1,fichero);
  buffer[1000]=0;
  fclose(fichero);
  str = "";
  for (n=0;n<1000;n++)
    str += chr(buffer[n]);
    if (!buffer[n]) break; end
  end
  say(str);
end
[/code]
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

MythomizeR

#584
Nada, no te preocupes, si ya lo he visto todo claro y ya me vuelve a funcionar perfecto el código, era esa chuminá y que lógicamente he solucionado con simplemente añadir un bonito asterisco punterístico delante de 'buffer' y así cargar donde hay que cargar X-D) (pero sabía yo que mi fallo provenía del fread... :-):

fread(fichero,*buffer);

La confusión vino porque al no dar yo con la documentación de fread en su versión dos parámetros, pues yo imaginé que la variable que recibe el dato leido era tambien un puntero como ocurre con el fread de C, más o menos...

Pues nada me alegro de que me vuelva a rular el código.

Gracias de nuevo :-)