edivc/ediv/CHANGE_LOG.txt
2002-12-02 22:05:42 +00:00

912 lines
38 KiB
Plaintext

2/12/2002
---------
* He añadido en la web una sección desde donde se puede ver este changelog.
El script pilla el fichero directamente del CVS, o de divsite si no está
disponible, y parsea el fichero y lo muestra con un aspecto muy majo :)
Podéis seguir escribiendo los mensajes como hasta ahora, no os olvidéis
de firmarlos. Para que el script funcione bien la firma tiene que ser lo
último que se encuentre en el mensaje, cuidado no se os escape un punto
después de la firma, o algo asi. (Er_Makina)
30/10/2002
----------
* Añadido la variable RESOLUTION, que a la hora de compilar el TUTOR2.PRG daba problemas.
Ya se puede usar RESOLUTION =) (|RooT|)
* Corregido en la graphics donde ponia "trasparente" por "traNsparente".
(Er_Makina)
* ¡Funciona Signal! =) Solo falta testearlo... (Er_Makina)
29/10/2002
----------
* Añadido un Capturador de Pantalla que crea screenshoots pulsando ATL+P
en la ejecución de un PROGRAMA. Se guarda con el nombre del programa
estoy arreglando para que se guarde en JPG y se puedan guardar varias caputras de el (|RooT|)
* Añadido al EXPORT.H y EXTERN.H a la estructura 'fp' la variable
screen. Para poder acceder a la SCREEN desde el STUB (|RooT|)
* Bug arreglado: el programa se bloqueaba al llegar a cierta cantidad de
procesos. El problema estaba en que los procesos no desechaban los parámetros
de la pila después de leerlos. He cuidado que funcione bien tanto con
optimización como sin ella :D (Er_Makina)
* Para evitar cosas como esta (desbordamientos de pila) he puesto un "PANIC!"
en modo _DEBUG cuando se termina de ejecutar un frame y quedan cosas en la
pila. (Er_Makina)
* Bug arreglado: los procesos no devolvían el id. La causa del bug era la misma
que el de más arriba :) (Er_Makina)
* Ahora se dibujan todos los blits con la Z correcta. He quitado el sistema
que había antes (orden[]) y lo he reemplazado por un qsort justo antes de
dibujarlo todo, además supongo que es más rápido que ir insertando cosas
cada vez que se llamaba a Dibuja(). (Er_Makina)
28/10/2002
----------
* Añadida la variable SIZE.
¡¡OJO!! La función Dibuja ha cambiado!! Ahora es int Dibuja(SDL_Surface *src , SDL_Rect srcrect ,
SDL_Rect dstrect , int z , int trans,int size,int angle); por defecto no hay size=0, ni angle=0.
ya que size=0, es equivalente ha size=100; Esto lo hago para posibles despistes como por ejemplo
en la TEXT, que llama a la función dibuja y ese parametro como es 0, pues si no, no se veria el
texto al no ser que se colocara el 100, en la función dibuja. (|RooT|)
* Añadida una global SMOOTH, para hacer o no, smooth, a la hora de ampliar graficos (|RooT|)
* Limpieza de la graphics (Codigos viego, Comentarios inservibles,...) (|RooT|)
* He colocado un SDL_FreeSurface para liberar Surfaces y que no chupara tanta RAM (|RooT|)
27/10/2002
----------
* Añadidos los fp->Runtime_Error, excepto en la graphics, strings (¿hace
falta?) y scroll (obviamente). (Er_Makina)
* Añadido unit_size en file.dll. (Er_Makina)
24/10/2002
----------
* Ahora los id's de los procesos son siempre impares. (Er_Makina)
* Arreglado collision. He sustituido el algoritmo de choque entre dos cajas,
aunque no hacía falta, pero quizás así queda un poco más limpio. (Er_Makina)
* Añadido timer[], pero sólo en Win32. Hay que adaptarlo a Linux. (Er_Makina)
* tutor0b ya rula.. el robots asesinos ya parece que rula bien pero no puedo
mover al personaje, no se por qué... fallo en la input? (Er_Makina)
21/10/2002
----------
* delete_text() daba un runtime error si no existia el texto a eliminar. en
div2 no sucede esto, solo da error si el numero esta fuera de rango, asi que
lo he corregido. (Er_Makina)
20/10/2002
----------
* Ahora si no hay archivos .dll o .so solo muestra el mensaje de error, pero NO
sale de la compilacion (Daijo)
* Cambio todos los free/malloc de dll_load.c por e_free y e_malloc (Daijo)
* Cambio todos los free de los archivos que quedaban por e_free (Daijo)
* Mas comentarizacion (Daijo)
19/10/2002
----------
* Añado la rutina e_free() en ediv.c. Se encarga de comprobar si hay un puntero
en uso, y si es cierto lo libera primero y luego le asigna NULL. (Daijo)
* Añado el archivo errors.h a la carpeta shared con el motivo de que sea mas
claro identificar errores mediante un nombre en lugar de un numero. (Daijo)
* Limpio el archivo extern.h y comentarizo segun las normas de ANSI C99. (Daijo)
* Elimino varias variables no utilizadas en las dll's. (Daijo)
* Ahora el stub con trazador es aplicación de consola, desde la que podemos
trazar el programa con un "mini-trazador" que lleva incorporado. Así podemos
descubrir fácilmente dónde petan los programas (por ejemplo, robots.prg
peta en el collision). Por cierto, lo que muestra el trazador entre corchetes
al principio de cada línea es el imem donde comienza la sentencia.
(Er_Makina)
* Haciendo el mini_trazador he modificado inicio_sentencia(), ahora no tiene
bucle, sólo un par de asignaciones, así que en teoría eDIV debería compilar
ya correctamente en Windows 98. (Er_Makina)
* Cuando eDIV compila con la opción -d (y compilado en modo Debug), genera un
fichero ediv.lin donde se muestra la información que usa el trazador para
localizar el código correspondiente al imem actual. (Er_Makina)
18/10/2002
----------
* Añadido el entrypoint "quit". Usadlo para liberar los recursos de la dll.
(Er_Makina)
* Arreglado get_id, que (en teoria) no se reseteaba al hacer frame. Ademas he
hecho que use las variables de la estructura reserved. (Er_Makina)
* Ahora se inicializan las locales son, father, bigbro y smallbro. (Er_Makina)
* Añadido exit() (accede a stub_quit mediante fp->Stub_Quit). (Er_Makina)
17/10/2002
----------
* Eliminados archivos parser.* y compiler.* de la carpeta STUB ya que no los
utilizabamos (Daijo)
* Eliminados archivos de la libreria grafica de Fenix de GRAPHICS (Daijo)
* Añadidos los fp->RuntimeError(x) y eliminados printf\exit en el eDIV_LOAD_FPG
(Daijo)
10/10/2002
----------
* Corregido pequeño bug en load_bmp, que no seteaba correctamente el centro del
grafico (Er_Makina)
* Ya funciona el mouse. Faltan algunas cosas de la estructura mouse por añadir.
La ruedecilla del ratón no funciona, hay que leerla en SDL_PollEvents (en el
stub :P) (Er_Makina)
* Añadido "type mouse". Debe actualizarse collision() para que reconozca colisio-
nes con el ratón (si recibe como parámetro un 0 es que se ha usado type mouse)
(Er_Makina)
7/10/2002
---------
* Limpieza de codigo y comentarizacion en compiler.* (Daijo)
* Actualizados proyectos para Visual Studio .NET, ahora al
compilar en release no da errores. (Daijo)
* En Windows XP el ejecutable generado con eDIV *NO* se ejecuta,
¿sugerencias de por qué se produce el fallo? (Daijo)
* Esto último ya está arreglado (Er_Makina)
6/10/2002
---------
* Añadida estructura mouse en la input.dll. Lo malo es que peta al hacer
el blit :P supongo que no uso bien fp->Dibuja. (Er_Makina)
28/9/2002
---------
* El título por defecto de la ventana del juego compilado es el nombre in-
dicado en la sentencia program. (Er_Makina)
26/9/2002
---------
* Algunos bugfixes y cambios menores. CicTec y yo andamos tras la pista de
algunos bugs:
- En Windows 98, ediv peta cuando compila algunos programas que no tienen
compiler_options y no tienen una línea en blanco (o de comentarios)
antes del program. Al parecer el fallo está en inicio_sentencia().
- Al pasar de 512 procesos y cerrar el juego, se produce un error. Aparen-
temente salta al llegar a SDL_Quit, así que he deducido que puede ser
porque no se liberan los recursos (surfaces, etc) antes de salir. Para
permitir esto, añadiré un entrypoint "quit" que será llamado desde
stub_quit (lo dejo para mañana). Aunque, curiosamente, este fallo no se
produce si no usamos procesos con más de un parámetro.
- Al llegar a x procesos (600, 900...) el programa se queda bloqueado.
(Er_Makina)
25/9/2002
---------
* Añadido un control para evitar que haya más de "max_process" procesos. Si
ocurre, se produce un critical_error. A veces permite un pequeño margen,
en función de la memoria disponible. (Er_Makina)
* Aconsejo usar en cualquier momento stub_quit() en lugar de exit(), ya que
ahí se libera varindex y se ejecuta SDL_Quit. (Er_Makina)
* Añadidos los opcodes optimizados al stub. He puesto no_optimization a 0 en
el ediv.cfg. He compilado los test y parece que rulan perfectamente.
(Er_Makina)
* Corregido un pequeño fallo en el opcode ljpf. (Er_Makina)
* Se permite sobrecarga de funciones en las DLLs. Se pueden declarar varias
funciones con el mismo nombre siempre que tengan distinto número de pará-
metros. Dentro de la función se puede saber cuántos parámetros se han re-
cibido con fp->num_params. Ver doc/ExportaFuncs.txt para más detalles
(ya lo pasaré a .dok :P) (Er_Makina)
24/9/2002
---------
* ¡¡Añadido indexado de variables dinámico!! (¿contento Rise?) :D
+------------------------------+
| LEER ESTO CON MUCHA ATENCIÓN |
+------------------------------+
1) Compilad la documentación (doc/html/makedokNT.bat) y leed bien el
varindex-howto.html. Las macros a que hace referencia se encuentran en
varindex.h (para el stub) y export.h (para las dll's), por si quereis
verlas.
2) NO INCLUYÁIS VARINDEX.H EN LAS DLL's, sólamente export.h
Ya tenéis acceso a cualquier variable, tabla o estructura de cualquier dll
desde cualquier otra dll. Falta hacer un sistema de dependencias, rara vez
se va a dar el caso de que una dll dependa de otra (a excepción de la
graphics o la edivstd), pero vendrá muy bien de todas formas y aseguraremos
la robustez de ediv, especialmente de cara a dll's hechas por usuarios.
Al compilar, ediv (compilado como Debug) guarda en varindex.out la tabla
de variables sin comprimir, que podeis comparar con la lista que muestra
el stub en stdout al arrancar, por si hay que comprobar errores. (Er_Makina)
* Naturalmente ha sido necesario adaptar el stub y todas las dlls. De paso he
aprovechado para cambiar alguna cosilla por ahí para quitar warnings (uf
la graphics tiene cada warnings mas peligrosos.. variables sin inicializar..
de to) :P (Er_Makina)
* ¡¡Corregido bug de los 154 procesos!! (Er_Makina)
* ¡¡Ya se inicializan las variables locales!! (Er_Makina)
* Cambiado max_process en ediv.cfg de 20 a 1024 (Er_Makina)
* Por hacer: controlar el máximo de procesos permitidos. (Er_Makina)
9/9/2002
--------
* Le he añadido icono al stub, y también he hecho un programa (iconchanger)
para cambiárselo después de haber compilado un programa con ediv. mola
eh? :) incluyo también un icono de pacman de ejemplo ke me kedó mu majo.
(Er_Makina)
* Agregados all_drawing y all_text a sus correspondientes dll's. (Er_Makina)
* He incluido en la estructura fp funciones para errores (Runtime_Error y
Critical_Error). ¡¡Empezad a usarlas YA!! Tenéis una lista completa de los
errores en el language.c del stub. Podéis añadir nuevos errores aprovechando
los huecos, pero no añadáis a menos que estéis seguros de que ese error no
existe ya (si la descripción no es como os gusta, pos la cambiáis un poco,
hala). (Er_Makina)
6/9/2002
--------
* Mejorado ligeramente el sistema de indexado de variables, ya no estan
esos #defines tan engorrosos porke los identificadores van con enum.
Recordad recompilar si insertais alguna variable nueva. ¡Ojo! Tienen que
estar ordenadas por global, reserved y local, no vale saltearlas, de esta
forma se localizan mas rapidamente. (Er_Makina)
27/6/2002
---------
* Modificado el formato de los exes en modo debug. En lugar de la ruta
absoluta hacia el prg, se guarda el codigo fuente completo comprimido
(primero el tamaño descomprimido, luego el tamaño comprimido y luego el
codigo comprimido) (Er_Makina)
26/6/2002
---------
* El ediv_export daba error si se declaraban dos objetos con igual nombre en
distintos niveles de struct (problema con el "height" de la estructura
"video_modes" de la graphics.dll y la local "height" de edivstd.dll).
Creo que el problema está corregido (ver crea_objeto() en parser.c) pero
hace falta testearlo un poco más (Er_Makina)
16/3/2002
---------
* El MOTD ya puede ser recibido correctamente en Linux, no es unicamente para
sistemas Windows (Daijo)
22/2/2002
---------
* Corregido bug al leer las Dlls. Estas si contenian caracteres en mayúsculas
no las encontraba, solo encontraba aquellas cuyo nombre estaba escrito en
minusculas. Ahora las carga perfectamente, incluso en Linux, aunque es mas
probable ver mIDlL.dLL en Windows, que mISo.sO en lnx :).
(Daijo)
* Por ahora pongo al trazador un textbox normal y corriente, sin resaltado ni
nada (lo del resaltado de sintaxis va a tener tela...) (Er_Makina)
21/2/2002
---------
* Quitados los archivos _ml.* y añadidos los utils.*, estos ultimos servirán
para albergar todas las rutinas utiles que creemos. Actualmente contiene
'strcasecmp' y 'strncasecmp' definidas para Win32, en los sistemas **IX ya
existian. (Daijo)
19/2/2002
---------
* Comenzada la debug.dll. Se trata de una aplicación Qt que se ejecuta con el
entrypoint "debug". Tiene prioridad -512, ya que nunca debe ser añadida
manualmente, el compilador la añade siempre automáticamente cuando se compila
con la opción -d. Sólo funciona con el stub que tiene el trazador activado
(*.dbg), recordad compilarlo antes de probar el trazador. También he añadido
el entrypoint "trace", útil para trazar el programa sentencia por sentencia.
Naturalmente, el trazador aun está en bragas x) tengo el diseño hecho aparte,
de momento es un calco del trazador de DIV2 pero luego le iremos añadiendo
cosas (quickwatches y cosas de esas molonas). (Er_Makina)
* Corregidos algunos serios bugs relacionados con la carga de DLL's (otra vez
:P) (Er_Makina)
18/2/2002
---------
* Ahora en la 2ª fase del compilador y en el stub se le añade la extensión a
una DLL antes de cargarla. Esto no taba problemas en Windows 2000, pero
podía darlos en Windows XP/9x/Me. (Er_Makina)
* Añadido Call_Entrypoint. Teneis que recompilar todas las DLL's que tengais
para que funcionen correctamente. (Er_Makina)
17/2/2002
---------
* Una nueva dll llamada prueba.dll, para hacer tonterias como escribir mensajes
y numeros en un archivo, y mostrar msgbox. (Er_Makina)
* He conseguido que rule el prueba.prg ;) va perfectamente, voy a ver si es
capaz de ejecutar correctamente programas mas complejos, usando variables
globales, privadas, locales, etc (Er_Makina)
* Añadido #ifndef _CABECERA_H - #define _CABECERA_H - ... - #endif para evitar
includes recursivos. No habia ningun problema con esto, pero es mejor
evitarlos desde un principio. (Daijo)
16/2/2002
---------
* Completadas algunas instrucciones EML del intérprete. (Er_Makina)
* Arreglado un bug por el cual no se cargaban las dlls adecuadas. (Er_Makina)
15/2/2002
---------
* Bug arreglado: cuando en Win32 se encontraba la primera DLL, se contabilizaba
aunque no fuera válida. (Er_Makina)
* Ahora el nombre de las DLL's se almacena sin extensión. (Er_Makina)
* En el ediv.cfg ahora hay una sección llamada dll_priority, donde se pueden
ajustar prioridades a las DLL's, las cuales se superponen a las prioridades
por defecto de cada DLL. (Er_Makina)
* Si una DLL tiene como prioridad 512 (P_SIEMPRE), se tomará siempre como
necesaria. Si tiene -512 (P_NUNCA), se ignora la DLL. (Er_Makina)
* El directorio donde se encuentran las DLL's puede configurarse en el ediv.cfg
(Er_Makina)
* En edivcentral.com he creado una carpeta llamada "actual" donde hay
documentos que cambian frecuentemente, útiles para mantenerse informado sobre
el desarrollo de eDIV. Allí están el TODO, el ChangeLog, el MOTD, y también
el language.txt. Se puede acceder a ellos en www.edivcentral.com/actual. El
changelog se puede ver rápidamente en changelog.edivcentral.com.
(Er_Makina + Daijo)
* El sistema de prioridades de las DLL's ya funciona perfectamente, la tabla de
DLL's se ordena en memoria segun las prioridades antes de decidir cual se usa
y cual no. De esta forma se escriben ya ordenadas en el bytecode. (Er_Makina)
14/2/2002
---------
* Bug arreglado: en WinNT el stub fallaba al cargar una DLL. He puesto
que use las funciones de windows (LoadLibrary y compañia), pero
dll_load.c sigue siendo necesaria para cargar dll's embebidas en el
exe. (Er_Makina)
* El stub ya carga el indice de variables. OJO: aun no esta hecho lo de
las prioridades de las DLL's, por lo que es posible recibir ceros al
intentar localizar una variable, aunque pertenezca al edivstd.
(Er_Makina)
31/1/2002
---------
* Ya rula el indexado de variables por el lado del compilador. Se guarda
el indice comprimido en el exe, justo despues del bytecode, asi que hay
que adaptar el stub en consecuencia. (Er_Makina)
23/1/2002
---------
* Adaptado ediv_export.c al stub. Kizas me haya saltado algo y tenga
algunos bugs, ya me encargare de comprobarlo con algunas "chivatas" ;)
(Er_Makina)
13/1/2002
---------
* El compilador lee un archivo de configuración (ediv.cfg) de donde
obtiene las opciones de compilación por defecto, el servidor para el
MOTD, un idioma forzado y el directorio de las dll's. Falta por incluir
una sección [dll_priority] donde indicar las prioridades por defecto de
las dll's. Éstas irán, por ahora, de -512 a 512. El valor por defecto
es 0. Una dll con 512 de prioridad se cargará siempre aunque no se
indique ninguna referencia a una función de la dll en el PRG (éste es
el caso de la edivstd y la graphics). Una prioridad de -512 hace que
la dll no se cargue nunca (útil para tener varias dll's que hagan lo
mismo, por ejemplo una sound que use fmod y otra que use sdl).
(Daijo & Er_Makina)
* He incluido errores run-time leves y graves en el stub (mirar error.c).
En error.c explico también el planteamiento de poner msgbox en linux
para los errores. Los mensajes de error leves son los mismos que en
div2, esto es importante para mantener la compatibilidad con
ignore_error(). (Er_Makina)
* He mejorado la comunicación HTTP/1.1 para obtener el MOTD. Ahora
detecta si la información recibida es de texto plano, y no admite fi-
cheros de más de 1024 bytes. (Er_Makina)
* Implementado el sistema de entrypoints en el compilador y extern.h,
queda meterlo en el stub. (Er_Makina)
* Carga de dll's a medio hacer en el stub (ya funciona la instrucción IMP),
le falta un ediv_export.c, por tanto no compila. El stub busca las dll's
primero en el directorio actual y luego en dll\ (so/ en el caso de Linux).
(Er_Makina)
* dll_load.c y dll_load.h movidos a la carpeta shared. (Er_Makina)
* Arreglado pequeño desastre con el fichero extern.h (Er_Makina)
* Varios pequeños bugs arreglados. (Er_Makina)
1/12/2001
---------
* Ligeramente modificado el SDK, las funciones ediv_export ya no retornan
un puntero C a los datos exportados, sino un puntero DIV, es decir, la
posición en mem[] o loc[] donde han sido colocados. Esto permitirá hacer
el sistema de indexado para que unas DLLs (o el stub) puedan acceder a
datos de otras, y para que se pueda acceder a los datos locales mediante
mem[id+offset]. (Er_Makina)
* También he metido algunos #defines para hacer las funciones predefinidas
o autoejecutables de las DLL, se declararán con una función tipo
EDIV_Export_Auto(id_funcion,handle). Aun no tengo muy claro como fun-
cionará el asunto en general, imagino que todo se desencadenará a partir
de EDIV_post_process y a partir de ahí todas las DLLs irán llamando a las
correspondientes autoejecutables de las demás. Si alguien no entiende esto,
que me lo pregunte y me rallaré mas xD (Er_Makina)
* Añadida capacidad para leer un MOTD situado en www.edivcentral.com/motd.txt
con la opción -n, --news (de momento sólo rula en Win32) (Daijo + Er_Makina)
30/11/2001
----------
* Añadido archivo language.txt en el directorio raiz, para que sea mas facil
hacer traducciones. El que haga alguna traducción nueva, que la mande
a ediv@divsite.net para que la implementemos en el language.c. (Er_Makina)
29/11/2001
----------
* Añadido soporte multi-idioma (ojo, la traduccion al portugues esta por
terminar, y el #ifdef de detectar_idioma lo puse mal como WIN322 o algo asi
pa probar como rularia en linux. Probad a trastear con la variable de
entorno LANG... ;) (Er_Makina)
26/11/2001
----------
* He limpiado el encrypt.c del proyecto encrypt, ahora es hasta legible xD.
(Daijo)
* Los incluides, workspaces y librerias de ZLIB y SDL han sido eliminadas como
parte del codigo de eDiv. (Daijo)
* El archivo 'ediv 2ª etapa.txt' tambien lo he quitado. (Daijo)
* He arreglado unas incompatibilidades del STUB con las cabeceras de Windows,
en
concreto con WINBASE.H que tenia definiciones de lstrcpy, lstrcat y lstrlen.
Ahora si esta definido windows, las 'undefine' antes de ser vueltas a definir
en el stub :). (Daijo)
* Nuevo workspace 'modules.dsw' en 'Visual C' con las DLL. (Daijo)
* _ml.c lo voy a reescribir, por lo tanto he eliminado casi todo su codigo y el
codigo en ediv.c que utilizaban alguna funcion suya. (Daijo)
* Hay unos cuantos folders menos que no usabamos (limpieza rules xD). (Daijo)
21/11/2001
----------
* He comentado del kernel.c las lineas que servian para el programa de rebote
de
la bola. No las elimineis, ya que esas lineas estan en bien. Lo que aun no se
es porque cuando hay mas de un proceso activo el stub peta. Cuando lo
solucione
volvere a activar esas lineas. ( Riseven )
20/11/2001
----------
* Viendo la descripcion de las variables locales predefinidas, he visto que
exis-
ten variables locales privadas del interprete que sirven para el
funcionamien-
to del interprete. Estas variables cuinciden casi exactamente con las que
hice en procs_s[], esto debe ser buena señal no? al parecer el funcionamiento
interno del interprete de dani y el que estoy haciendo se parecen mas de lo
que hubiera imaginado en un principio. Mejor, asi es menos probable que nos
aparezcan errores inesperados de incompatibilidad :)
( Riseven )
* He hecho que el stub cargue "bola.bmp" en imgs[0] para poder utilizar de
grafi-
co 0, todos los procesos se visualizan en la posicion que indice su X e Y.
El stub peta si al llegar al frame hay mas de un proceso activo, aun no muy
bien el motivo. ( Riseven )
* He notado que la iloc_len es mas pequeña de lo que deberia ser, solo en
variables locales predefinidas ya hay 42, mientras que iloc_len vale 37.
( Riseven )
* He medido la velocidad del eDiv para modod 320x200, con un proceso cuyo graph
es una imagen de 25x25 pixels y e obtenido estos resultados:
CON DOUBLEBUFFERING SIN DOUBLEBUFFERING
Modo ventana: 106 fps 122 fps
Modo fullscreen: 64 fps 157 fps
( Riseven )
19/11/2001
----------
* Ya funciona correctamente la eliminacion de procesos ( antes siempre se
elimi-
naba el primer proceso ) esto era debido a que interprete() estaba mal.
( Riseven )
* Tras pelearme un poco con el ADA y JPF que ambos contenian fallos e
conseguido
que funcione correctamente el FROM :) No se muy bien que cosas soporta ya el
interprete, y que cosas utilizan mnemonicos no definidos aun.
( Riseven )
* Se me olvidaba, es NECESARIO utilizar <compiler_options _no_optimization;> ya
que aun no he hecho ningun mnemonico optimizado. ( Riseven )
* En stdout.txt podreis ver un debugger improvisado ;) , en cada paso escribe
el indice de codigo ( imem ), el numero de proceso activo ( num_proc, no con-
fundir con Id del proceso ), el indice de pila ( sp ) y el valor actual de la
pila ( pila[sp] )
( Riseven )
* Añadidas las variables locales al interprete, falta testearlo. Se trata de
los
mnemonicos AID y CID. AID suma id a la pila, y CID carga id en la pila. Esto
es debido a k las variables locales funcionan sumando id+offset_variable,
donde
id es el offset donde empiezan las variables locales del proceso
correspondien-
te, y offset_variable es el offset relativo. Los offset_relativos son iguales
para distintos procesos, si el offset relativo de X para un proceso es 19,
para
otra variable tb sera 19. ( Riseven )
* RNG ya esta hecho, bueno, en realidad no hace nada, pero si esta definido
DEBUG
si que hacia algunas cosas que no e puesto, no se si nos seran necesarias
para
nuestro debugger, si esto es asi ya sabeis donde faltan algunas rutinas :P
( Riseven )
* Ya se soporta SWITCHs :), los mnemonicos asociados son CSE Y CSR, y estan sin
testear. ( Riseven )
* Ya estan casi todos los menmonicos basicos, solo faltan algunos complicados
como
CPA, FUN o EXT, y algunos otros orientados unicamente a debug como RNG, DBG o
CHK.
Tecnicamente, si no se utilizan cadenas y utilizando la no_optimization, el
interprete ahora deberia estar preparado para soportarlo CASI TODO :).
( Riseven )
18/11/2001
----------
* He metido unos 30+ mnemonicos de EML, la mayoria de ellos testeados.
( Riseven )
16/11/2001
----------
* Creada procs_s[], esta estructura guarda informacion de los procesos activos,
posee datos como el indice actual del proceso ( en el k se quedo al llamar
a FRAME ), el graph, priority, x , y, id, y demas variables k tenga k
utilizar el kernel, para evitar tener k acceder a mem[] para buscar esos
datos.
Tambien guarda el tipo de proceso k es. ( Riseven )
* Incluidos los mnemonicos en el inte.h , copiados de compiler.h ( Riseven )
* Se inicializan las variables de posicion de codigo, globales, locales
publicas
y locales privadas. Se crea el proceso main y se mete a la lista de ejecucion
de procesos con lista_mete(). Creada la lista de ejecucion de procesos, se
llama proc_orden[], y guarda los procesos ordenados por priority, exactamente
lo que guarda es el indice correspondiente de procs_s[] ( Riseven )
15/11/2001
----------
* He comentado todo el code en C del eDivNoid, no borreis los comentarios, k
me vienen bien para programar el interprete ( Riseven )
8/11/2001
---------
* Implementada compilación cruzada: ahora es posible indicar el sistema
al que se quiere compilar con la opción -s, seguida del nombre del sistema
(deberá existir un fichero de stub con el nombre de ese sistema, ver si-
guiente punto) (Er_Makina)
* Implementado sistema de doble stub: uno con extensión .rel para compila-
ciones definitivas y otro con extensión .dbg para compilaciones de debug.
Para elegir si compilar el .rel o el .dbg se debe elegir "Select
configuration..." en el menú Build de Visual C y elegir por ejemplo
"Win32 Debug" para la versión .rel y "Win32 Debug con trazador" para la
versión .dbg. La diferencia entre los dos es que el .dbg se compila con
la macro DBG definida, y por tanto se activan las rutinas de depurado de
eDIV. (Er_Makina)
* El script makelib.bat también ha sido modificado para implementar lo de
los nuevos stubs y AHORA SE EJECUTA AUTOMÁTICAMENTE DESPUÉS DE COMPILAR
EL STUB, por lo que ya no hace falta hacerlo manualmente. Esto está
configurado en la pestaña "post-build step" en las opciones del proyecto
stub. (Er_Makina)
* Añadidas rutinas de stub y kernel de Riseven y |RooT|. (Daijo)
7/11/2001
---------
* Cambiado el 'magic' de la edivrun.lib de "dj!" a "eDIV Stub" (Er_Makina)
Nota: PROHIBIDO CAMBIARLO OTRA VEZ :PPPPPP
* El stub ahora descomprime el código y lo guarda en memoria. (Er_Makina)
* La clave de encriptación, el 'magic' de la edivrun.lib y otros datos
que son comunes a varios programas ahora se encuentran en el archivo
shared.h para poder modificar algun dato sin tener que hacerlo en varios
ficheros a la vez (Daijo)
* encrypt.c ordenado con sangrados de texto (Daijo)
* Nota: los programas que usan la zlib fallan al ejecutarlos en una makina
con micro AMD y Windows XP. No sucede cuando se compila con Visual C++ 7
(Framework .NET beta2) (Daijo)
29/6/2001
---------
* Corregidos miles de bugs de la versión para Win32. ':) Ahora se lee el
fichero prg en modo "rb" en vez de "r" ya que el gracioso de güindows
en modo "r" te sustituye los CRLF por LF a secas >:( y el programa no
resultaba tan grande como el tamaño del propio archivo, por lo que
encontraba "caracteres no reconocidos" (basura) antes de llegar al EOF
(el carácter de ASCII 0).
* Añadida opción -c o --check que hace que no se guarde el exe. Útil para
comprobar sintaxis, sacar listados, etc sin sobreescribir el exe actual
o simplemente sin malgastar espacio (y el trabajo de borrar el exe) xD
* Comenzada documentación... de solo mirar el indice ya da la sensación
de estar leyendo una tesis doctoral... xD También comencé una referencia
de EML pero me acabé aburriendo así que ya lo terminaré un día que esté
realmente aburrido y no tenga ganas de hacer otra cosa :p
Por cierto, la introducción me ha salido muy chunga, parece como si
hubiera escrito un anuncio del div3 o algo asi :( así que el que quiera
modificarla que lo haga por favor, o mejor dicho hacedlo, ke seguro ke
teneis mas inspiracion ke yo xD
(Er_Makina)
28/6/2001
---------
* Re-construidos proyectos para Win32, he puesto los includes de la zlib y
SDL en /inc, y sus libs correspondientes en /zlib. En /src/visual c está
el workspace con el ediv, stub y encrypt. Cada dll tiene su propio work-
space en el directorio de su source.
* Añadida la ruta absoluta del PRG en Win32 al compilar en modo debug.
* Ligeramente modificado el formato de los EXE, ahora se añade el tamaño de
los datos comprimidos después del tamaño de los datos descomprimidos. El
numerito tiene formato de unsigned long, que no recuerdo ahora mismo
cuantos bytes eran.
* Parece que hay un fallo en Win32 al reconocer qué DLLs se usan en el PRG.
Al compilar C.PRG, sólo reconoce que se usa edivstd.dll, cuando en reali-
dad debería usar también sample.dll. Esto se puede arreglar con una
sesión de debug pero ahora no tengo tiempo, mañana me ocuparé de eso.
(o esta noche si no me entra sueño xD)
* He modificado un poco el export.h para hacerlo más compatible con win32.
He comentarizado también el asunto del DllMain, tanto en el export.h como
en las DLLs, ya que aparte de darme problemas en win32, no tenía utilidad
en Linux.
(Er_Makina)
27/6/2001
---------
* Arreglado un bug por el cual se echaba a perder todo el eml. En un sitio
escribí mem en vez de imem y... ^_^ También he arreglado la generación de
la rutina de carga de DLLs, ahora recuerdo que no se puede volver de un
JMP con un RET xD
* Arreglado ELSEIF. No volveré a ser tan chapuzas, lo juro xD
Y esta vez lo he comprobado bien, repasando el desensamblado y todo :)
* Se escribe stub_size al final del ejecutable
* La opción -d (--debug) ya funciona. El formato del ejecutable de debug es
el siguiente: primero el stub y el EML, como en los ejecutables normales.
Luego, la ruta absoluta del PRG (hay que terminar la función escribe_lin
para hacer esto en win32). Luego la información que relaciona el bytecode
con el texto (lin), es decir, indica donde empieza y donde termina cada
sentencia tanto en el bytecode (mem[]) como en el prg. Naturalmente esto
es útil para el trazador. Luego viene la tabla de objetos (dbg), como en el
fichero .tab pero más críptico, obviamente. Primero está el volcado de la
tabla de objetos, sustituyendo los nombres por offsets a su nombre
correspondiente en el volcado de vnom (vector de nombres), que es lo que
viene justo después. Por último, se escriben 3 valores: el comienzo de la
sección "lin" en el fichero (justo donde termina el bytecode y empieza la
ruta del prg), el comienzo de la sección "dbg", y stub_size. Ah, el
ejecutable se marca como debug en el bit 6 de mem[0] (+64).
(Er_Makina)
26/6/2001
---------
* Opciones de línea de comando. Ahora se puede elegir generar una tabla de
objetos *.tab (--table) y/o el listado EML (--list). La opción --debug no
está disponible todavia. He metido estas nuevas opciones en listados.c
* Arreglado el estropicio que borró todos los mensajes de error a partir
del 55, por un despiste mio, que me puse un ediv.c que me pasó daijo y no
estaba actualizado
* Desactivado el sistema de "multi-error", lo he metido en #ifdefs por si
alguien en algun futuro quiere activarlo o por si le hace ilu.
* Arreglado horrible bug por el cual no se borraba vhash[] y las propias
dlls daban errores del tipo "el nombre no es nuevo" después de la
precompilación.
y creo ke ya ta... (Er_Makina)
25/6/2001
---------
* Terminado el proceso de remcompilación para ahorrar la memoria de las
DLLs no usadas
* Ya se crea el EXE, por ahora tiene la misma estructura que los EXE de
DIV2
(Er_Makina)
24/6/2001
---------
* Modularizadas las rutinas de carga de DLLs (Daijo)
* Terminada sección PRIVATE, código principal y PROCESOS (función
sintactico()). (Er_Makina)
* Terminadas todas las sentencias (función sentencia()) y añadido ELSEIF,
ojo que LTLEX.DEF ha sido modificado, y obviamente los #defines de p_xxxx
de PARSER.H tambien (Er_Makina)
22/6/2001
---------
* Completadas las variables y constantes predefinidas en edivstd.dll
* Terminada sección LOCAL
* He comprobado y arreglado algunos errores, el 39 y algun otro que no me
acuerdo
(Er_Makina)
21/6/2001
---------
* Terminada sección GLOBAL con todas sus declaraciones. ':)
* Corregidos algunos detalles y fallos de las expresiones constantes.
* POR HACER: Provocar y comprobar TODOS los errores :p
* Ah he hecho un icono del ediv, ediv.ico ^_^
(Er_Makina)
20/6/2001
---------
* EVALUADOR DE EXPRESIONES CONSTANTES TERMINADO :D
Bueno, en realidad casi, tan sólo falta comprobar todos los errores. Como
el DIV original detenía la compilación al encontrar un error y eDIV no,
hay que añadir código después de las llamadas a error() para hacer que el
parsing siga como si no hubiera pasado nada. A veces esto se arregla con
poner simplemente lexico(); pero la mayoría de las veces hay que hacer
algo más para ignorar el error.
* Tambien he incluido el generador de código y el optimizador peephole, y
de hecho ya sería capaz de compilar cosas, aunque sólo a la memoria (es
decir, al buffer mem[]). De momento solo reconoce el compiler_options.
Paciencia.
* Como podeis ver, ya hay unos cuantos mensajes de error, un problema es
que no sabemos cómo tenía el DIV original organizados los errores, así
que hay que investigar por qué se produce el error y qué mensaje le
viene bien. He usado mensajes originales del DIV2, fijándome en el
errores.html que me hice a partir de la ayuda del DIV2. Por desgracia no
están en orden :(
* En el DIV2 hay errores que tienen varios códigos para un solo mensaje,
esto es para que la ayuda de ese error sea más específica en el contexto
en que se ha producido el error. Aquí yo he puesto un solo código para
cada mensaje, si más tarde queremos hacer la ayuda multi-contexto ya se
cambiará.
* Aun no podemos considerar expresion.c terminado, ya que queda el código
para la evaluación de sentencias de asignación, expresiones variables y
condiciones.
* Se que el codigo, tal como esta ahora es ilegible, (especialmente
expresion.c y parser.c), pero me hubiera llevado semanas ordenarlo tal
como lo he hecho con plexico() por ejemplo, ya me pondré un día a hacerlo
y de paso destriparlo bien y poner todos los comentarios que pueda (por
ahora he puesto comentarios a todos los errores, para saber cuáles son)
* Ah, y he hecho una dll llamada "edivstd" se que ya la odiais de solo ver
el nombre, pero es necesaria una libreria "estandar" para cosas tan basicas
e inclasificables como las opciones de compilacion (ya implementadas, por
cierto :D ), la estructura local reserved, las locales father, smallbro,
bigbro, etc. Estas cosas pertenecen al gestor de procesos y eso es algo
que viene incluido en el stub.
(Er_Makina)
18/6/2001
---------
* La versión de Linux ya carga y registra los *.so al igual que la de win
hacía con las *.dll. Terminado el ediv_export.c, ya soporta datos locales
aunque aún hay que retocar un poco la exportación de funciones. Por
cierto, se me olvidó decir que eliminé el rollo del /src/gcc-linux porque
ahora que tenemos makefiles decentes ya no sirve para nada. (Er_Makina)
17/6/2001
---------
* La versión de Linux ya tiene todos sus makefiles y ya encuentra las *.so.
He modificado ligeramente el export.h para hacerlo compatible y he inclu-
ido una dll de muestra, sample. Aun no he probado a compilarla en win32.
(Er_Makina)
15/6/2001
---------
* Incluyo los ficheros necesarios para compilar bajo Linux, en src/gcc-linux
Hay que leer el archivo "MUY IMPORTANTE" que se encuentra en ese directorio.
Estos archivos solo son para desarrollo, es decir que requieren las rutas
relativas del CVS y por tanto NO DEBEN SER INCLUIDOS EN LOS PAQUETES DIS-
TRIBUIDOS. Algún día meteré ahí un directorio con un script que genere
automáticamente el paquete de código fuente para Linux, al estilo GNU.
(Er_Makina)
14/6/2001
---------
* Pakeo rapido, version con soporte para linux aunque aun por terminar. Ya esta
hecha la sustitucion de _findfirst y _findnext aunque aun queda por terminar
de
implementar el soporte .so.
Por hacer: terminar soporte .so y hacer el SDK para los .so (quizas haga
falta un export.h distinto?) a ser posible que se pueda utilizar el mismo src
para hacer una .dll y un .so, please mejor dicho esto es OBLIGATORIO
(Er_Makina)
15/4/2001
----------
* Añadido CheckWindowsVersion a Dll_Load.c. Ahora esta funcion se
llama justo antes de InitializeDllLoad para ajustar g_bIsWinNT a
1 o 0, dependiendo si usamos WINNT/WIN2K o Win'9x/Me. (Daijo)