arreglado bug askeroso!!!

This commit is contained in:
Gabriel Lorenzo 2002-10-29 19:31:36 +00:00
parent f5932a64d8
commit 985e38755e
7 changed files with 32 additions and 7 deletions

View file

@ -1,3 +1,19 @@
29/10/2002
----------
* 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 28/10/2002
---------- ----------
* Añadida la variable SIZE. * Añadida la variable SIZE.

View file

@ -4,8 +4,7 @@
Version="7.00" Version="7.00"
Name="b2f" Name="b2f"
ProjectGUID="{892F2A1D-847C-45C1-B7D9-3F421D749FA5}" ProjectGUID="{892F2A1D-847C-45C1-B7D9-3F421D749FA5}"
SccProjectName="" >
SccLocalPath="">
<Platforms> <Platforms>
<Platform <Platform
Name="Win32"/> Name="Win32"/>

Binary file not shown.

View file

@ -169,6 +169,7 @@ int proceso( int num, int padre )
int no_devuelve = 0 ; int no_devuelve = 0 ;
int (*externa)(struct _fun_params*); int (*externa)(struct _fun_params*);
int temp ; int temp ;
int cpas=0;
#ifdef DBG #ifdef DBG
int actual_lin; int actual_lin;
#endif #endif
@ -324,8 +325,12 @@ int proceso( int num, int padre )
reserved("param_offset",procs_s[num_proc].id)=sp-reserved("parameters",procs_s[num_proc].id)+1; 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 ] ; /**/procs_s[num_proc].num_params = mem[ imem-1 ] ;
break; break;
case lcpa://31 POR HACER? case lcpa://31
mem[pila[sp--]]=pila[reserved("param_offset",procs_s[num_proc].id)++]; mem[pila[sp]]=pila[reserved("param_offset",procs_s[num_proc].id)++];
sp--;
cpas++;
if(cpas==reserved("parameters",procs_s[num_proc].id))
sp-=cpas;
break; break;
case ltyp://32 case ltyp://32
if ( procs_s[num_proc].tipo != 0 ) if ( procs_s[num_proc].tipo != 0 )
@ -498,6 +503,7 @@ int proceso( int num, int padre )
break; break;
case lcaraidcpa://68 case lcaraidcpa://68
mem[mem[imem++]+procs_s[num_proc].id]=pila[reserved("param_offset",procs_s[num_proc].id)++]; mem[mem[imem++]+procs_s[num_proc].id]=pila[reserved("param_offset",procs_s[num_proc].id)++];
sp--;
break; break;
case laddptr://69 case laddptr://69
pila[sp-1]=mem[pila[sp-1]+pila[sp]]; pila[sp-1]=mem[pila[sp-1]+pila[sp]];

View file

@ -272,7 +272,7 @@ char* translate_runtime_error(int num)
/* 114 */ "Non è stato possibile caricare la fonte, archivio non trovato.", /* 114 */ "Non è stato possibile caricare la fonte, archivio non trovato.",
/* 115 */ "Si è tentato di caricare un archivio di fonte non valido.", /* 115 */ "Si è tentato di caricare un archivio di fonte non valido.",
/* 116 */ "Codice identificatore fonte di lettere non valido.", /* 116 */ "Codice identificatore fonte di lettere non valido.",
/* 117 */ "Codice di centrato di testo non valido.", /* 117 */ "Codice di allineamento testo non valido.",
/* 118 */ "Hai troppi testi attivi nel programma.", /* 118 */ "Hai troppi testi attivi nel programma.",
/* 119 */ "Identificatore di testo non valido.", /* 119 */ "Identificatore di testo non valido.",
/* 120 */ "Regione di schermo definita incorrettamente.", /* 120 */ "Regione di schermo definita incorrettamente.",

View file

@ -292,11 +292,11 @@ int main(int argc, char* argv[])
if ( screen == NULL ) if ( screen == NULL )
k_error(K_ERR_SDL_SET_VIDEO_MODE); k_error(K_ERR_SDL_SET_VIDEO_MODE);
*/ */
//assert(0);
ini_interprete(); ini_interprete();
/*if ( !ini_interprete() ) /*if ( !ini_interprete() )
k_error(K_ERR_INI_INTERPRETE) ;*/ k_error(K_ERR_INI_INTERPRETE) ;*/
while (1) { while (1) {
char noevent; char noevent;
/* /*
@ -338,6 +338,10 @@ int main(int argc, char* argv[])
stub_quit(0); stub_quit(0);
interprete(); interprete();
#ifdef _DEBUG
if(sp!=0) printf("PANIC! Quedan restos en la pila!! (sp=%d)\n",sp);
#endif
/*if (!interprete()) /*if (!interprete())
k_error(K_ERR_INTERPRETE);*/ k_error(K_ERR_INTERPRETE);*/

Binary file not shown.