diff --git a/ediv/0.1.txt b/ediv/0.1.txt index 74561d9..306296a 100644 --- a/ediv/0.1.txt +++ b/ediv/0.1.txt @@ -2,7 +2,8 @@ >> hacer fuente 0 ->> carga de map, pcx, bmp y jpg completa y decente +>> carga de map, pcx, bmp (y jpg?) completa y decente >> size y angle +>> cargar muchos fpg's diff --git a/ediv/CHANGE_LOG.txt b/ediv/CHANGE_LOG.txt index e36b568..702f698 100644 --- a/ediv/CHANGE_LOG.txt +++ b/ediv/CHANGE_LOG.txt @@ -1,3 +1,14 @@ +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) + 24/9/2002 --------- * ¡¡Añadido indexado de variables dinámico!! (¿contento Rise?) :D diff --git a/ediv/bin/ediv.cfg b/ediv/bin/ediv.cfg index 325cc28..3e568f5 100644 --- a/ediv/bin/ediv.cfg +++ b/ediv/bin/ediv.cfg @@ -10,7 +10,7 @@ case_sensitive=0 ; Sin case sensitive ignore_errors=0 ; No ignorar errores no_strfix=0 ; no_id_check=0 ; -no_optimization=1 ; Para las pruebas de momento ;) +no_optimization=0 ; Para las pruebas de momento ;) no_range_check=0 ; no_null_check=0 ; no_check=0 ; diff --git a/ediv/src/dlls/dlls.suo b/ediv/src/dlls/dlls.suo index 52ded97..f2460e4 100644 Binary files a/ediv/src/dlls/dlls.suo and b/ediv/src/dlls/dlls.suo differ diff --git a/ediv/src/ediv/ediv_export.c b/ediv/src/ediv/ediv_export.c index 37c9137..6976daf 100644 --- a/ediv/src/ediv/ediv_export.c +++ b/ediv/src/ediv/ediv_export.c @@ -37,6 +37,7 @@ struct objeto * ob; struct objeto * ob2; int creaobj; +int numparams; byte decl_struct=0; // 1 si se está declarando un struct byte struct_reserved=0; // 1 si se está declarando la estructura reserved @@ -64,6 +65,11 @@ int EDIV_Export(char* cadena, int nparam, void* hfuncion) return 0; } + if(nparam<0) { + dll_error(5,cadena); + return 0; + } + creaobj=crea_objeto((byte*)cadena); #ifdef DEBUG_DLL diff --git a/ediv/src/shared/extern.h b/ediv/src/shared/extern.h index 0919a29..8cd75df 100644 --- a/ediv/src/shared/extern.h +++ b/ediv/src/shared/extern.h @@ -267,6 +267,7 @@ struct _fun_params{ //int sp; void* extfuncs[MAX_EXTERN_FUNCS]; // tabla de punteros a las funciones de las DLLs (stub) +int extparms[MAX_EXTERN_FUNCS]; // nº de parámetros de cada función externa (necesario para la sobrecarga) struct _entrypoints { int tipo; // Ver #defines de entrypoints más arriba diff --git a/ediv/src/stub/inte.c b/ediv/src/stub/inte.c index ae6d2ca..6f9f432 100644 --- a/ediv/src/stub/inte.c +++ b/ediv/src/stub/inte.c @@ -306,7 +306,7 @@ int proceso( int num ) reserved("param_offset",procs_s[num_proc].id)=sp-reserved("parameters",procs_s[num_proc].id)+1; /**/procs_s[num_proc].num_params = mem[ imem-1 ] ; break; - case lcpa://31 POR HACER #-# + case lcpa://31 POR HACER? mem[pila[sp--]]=pila[reserved("param_offset",procs_s[num_proc].id)++]; break; case ltyp://32 @@ -320,7 +320,7 @@ int proceso( int num ) reserved("process_type",procs_s[num_proc].id) = procs_s[num_proc].tipo ; inicio_privadas=mem[6]; break ; - case lpri://33 POR HACER + case lpri://33 POR HACER? memcpy(&mem[procs_s[num_proc].id+inicio_privadas],&mem[imem+1],(mem[imem]-imem-1)<<2); inicio_privadas+=(mem[imem]-imem-1); imem=mem[imem]; break ; @@ -400,7 +400,7 @@ int proceso( int num ) pila[ sp-1 ] = mem[ pila[ sp-1 ] ] <<= pila[sp] ; sp--; break; - case lpar://52 POR HACER + case lpar://52 POR HACER? //imem++; inicio_privadas+=mem[imem++]; break; @@ -428,12 +428,78 @@ int proceso( int num ) break ; case ldbg://58 #ifdef DBG - //Call_Entrypoint(EDIV_debug,imem,nombreprg,lin,0); + Call_Entrypoint(EDIV_debug,imem,nombreprg,lin,0); #endif break ; + + // OPCODES OPTIMIZADOS + + case lcar2://60 + pila[++sp]=mem[imem++]; + pila[++sp]=mem[imem++]; + break; + case lcar3://61 + pila[++sp]=mem[imem++]; + pila[++sp]=mem[imem++]; + pila[++sp]=mem[imem++]; + break; + case lcar4://62 + pila[++sp]=mem[imem++]; + pila[++sp]=mem[imem++]; + pila[++sp]=mem[imem++]; + pila[++sp]=mem[imem++]; + break; + case lasiasp://63 + mem[pila[sp-1]]=pila[sp]; + sp-=2; + break; + case lcaraid://64 + pila[++sp]=mem[imem++]+procs_s[num_proc].id; + break; + case lcarptr://65 + pila[++sp]=mem[mem[imem++]]; + break; + case laidptr://66 + pila[sp]=mem[pila[sp]+procs_s[num_proc].id]; + break; + case lcaraidptr://67 + pila[++sp]=mem[mem[imem++]+procs_s[num_proc].id]; + break; + case lcaraidcpa://68 + mem[mem[imem++]+procs_s[num_proc].id]=pila[reserved("param_offset",procs_s[num_proc].id)++]; + break; + case laddptr://69 + pila[sp-1]=mem[pila[sp-1]+pila[sp]]; + sp--; + break; + case lfunasp://70 NO USADO + break; + case lcaradd://71 + pila[sp]+=mem[imem++]; + break; + case lcaraddptr://72 + pila[sp]=mem[pila[sp]+mem[imem++]]; + break; + case lcarmul://73 + pila[sp]*=mem[imem++]; + break; + case lcarmuladd://74 + pila[sp-1]+=pila[sp]*mem[imem++]; + sp--; + break; + case lcarasiasp://75 + mem[pila[sp]]=mem[imem++]; + sp--; + break; + case lcarsub://76 + pila[sp]-=mem[imem++]; + break; + case lcardiv://77 no hay nunca "cardiv 0" + pila[sp]/=mem[imem++]; + break; } #ifdef DBG - //Call_Entrypoint(EDIV_trace,imem,nombreprg,lin,0); + Call_Entrypoint(EDIV_trace,imem,nombreprg,lin,0); #endif } diff --git a/ediv/src/stub/language.c b/ediv/src/stub/language.c index f1f2ed4..b97be3e 100644 --- a/ediv/src/stub/language.c +++ b/ediv/src/stub/language.c @@ -782,7 +782,7 @@ char* translate_runtime_error(int num) char* translate_critical_error(int num) { - static char *e[NUM_LANGUAGES][9] = { + static char *e[NUM_LANGUAGES][10] = { /* 0 - ESPAÑOL */ @@ -794,7 +794,8 @@ char* translate_critical_error(int num) /* 5 */ "Librería no encontrada: %s", /* 6 */ "%s no es una librería válida de eDIV", /* 7 */ "No se pudo inicializar SDL", - /* 8 */ "Demasiados procesos en ejecución" + /* 8 */ "Demasiados procesos en ejecución", + /* 9 */ "Se requiere SDL versión %d.%d.%d\nVersión detectada en el sistema: %d.%d.%d", /* 1 - ITALIANO */ @@ -807,6 +808,7 @@ char* translate_critical_error(int num) /* 6 */ "%s non è una libreria valida di eDIV", /* 7 */ "No se pudo inicializar SDL", // TODO /* 8 */ "Demasiados procesos en ejecución", // TODO + /* 9 */ "Se requiere SDL versión %d.%d.%d\nVersión detectada en el sistema: %d.%d.%d", // TODO /* 2 - PORTUGUÉS (FIXMI: traducir) */ @@ -819,6 +821,7 @@ char* translate_critical_error(int num) /* 6 */ "%s no es una librería válida de eDIV", /* 7 */ "No se pudo inicializar SDL", /* 8 */ "Demasiados procesos en ejecución", + /* 9 */ "Se requiere SDL versión %d.%d.%d\nVersión detectada en el sistema: %d.%d.%d", // TODO /* 3 - INGLÉS */ @@ -831,6 +834,7 @@ char* translate_critical_error(int num) /* 6 */ "%s is not a valid eDIV library", /* 7 */ "Cannot initialize SDL", /* 8 */ "Too many processes in execution", + /* 9 */ "This program requires SDL version %d.%d.%d\nSDL version detected in this system: %d.%d.%d", /* 4 - CATALÁN */ @@ -843,6 +847,7 @@ char* translate_critical_error(int num) /* 6 */ "%s no és una llibreria vàlida d' eDIV", /* 7 */ "No se pudo inicializar SDL", // TODO /* 8 */ "Demasiados procesos en ejecución", // TODO + /* 9 */ "Se requiere SDL versión %d.%d.%d\nVersión detectada en el sistema: %d.%d.%d", // TODO /* 5 - EUSKERA */ @@ -855,6 +860,7 @@ char* translate_critical_error(int num) /* 6 */ "%s ez da eDIV-en liburutegi zuzen bat", /* 7 */ "No se pudo inicializar SDL", // TODO /* 8 */ "Demasiados procesos en ejecución", // TODO + /* 9 */ "Se requiere SDL versión %d.%d.%d\nVersión detectada en el sistema: %d.%d.%d" // TODO }; return e[idioma][num]; diff --git a/ediv/src/stub/stub.c b/ediv/src/stub/stub.c index 73d121f..606c481 100644 --- a/ediv/src/stub/stub.c +++ b/ediv/src/stub/stub.c @@ -56,6 +56,7 @@ int main(int argc, char* argv[]) byte * ptr; unsigned long len,len_descomp; byte* vartemp; + const SDL_version* sdl_version; #ifdef DBG int start_lin; int linsize; @@ -68,6 +69,21 @@ int main(int argc, char* argv[]) eDIV_InstallParachute(); + sdl_version=SDL_Linked_Version(); + #ifdef _DEBUG + printf("Versión SDL del exe: %d.%d.%d\n",SDL_MAJOR_VERSION,SDL_MINOR_VERSION,SDL_PATCHLEVEL); + printf("Versión de SDL instalada: %d.%d.%d\n",sdl_version->major,sdl_version->minor,sdl_version->patch); + #endif + if(sdl_version->majormajor==SDL_MAJOR_VERSION && + sdl_version->minormajor==SDL_MAJOR_VERSION && + sdl_version->minor==SDL_MINOR_VERSION && + sdl_version->patchmajor,sdl_version->minor,sdl_version->patch); + } + for ( i = 0 ; i < 100 ; i++ ) tiempo[ i ] = 0 ; tiempo_i = 0 ; diff --git a/ediv/src/visual c/ediv/ediv.vcproj b/ediv/src/visual c/ediv/ediv.vcproj index 76bf1fc..9046cf0 100644 --- a/ediv/src/visual c/ediv/ediv.vcproj +++ b/ediv/src/visual c/ediv/ediv.vcproj @@ -179,6 +179,9 @@ + + diff --git a/ediv/src/visual c/ediv_ws.suo b/ediv/src/visual c/ediv_ws.suo index 165bb80..e1131be 100644 Binary files a/ediv/src/visual c/ediv_ws.suo and b/ediv/src/visual c/ediv_ws.suo differ