Hola gente!
Despues de tanto tiempo, poco a poco estoy volviendo
Estas son un par de funciones para crear todos los timers ke deseen ..
Las hice para el perla, pero capaz ke a alguien le sirvan..
aca va el codigo y un ejemplito...
Saludos!!
TIMERS_FUNCTIONS.PRG:
[code language="bennu"]
//------------------------------------//
//Tipo timer
//------------------------------------//
TYPE TYPE_Timer
INT value;
TYPE_Timer POINTER next;
END
#DEFINE MyTimer INT*
//------------------------------------//
//Puntero global a timers
//------------------------------------//
GLOBAL
TYPE_Timer POINTER timers;
END
//------------------------------------//
//Timer manager
//------------------------------------//
PROCESS Timers_Start()
PRIVATE
INT ultimo=0,incremento;
TYPE_Timer POINTER aux;
BEGIN
//Crea un timer base
timers=alloc(sizeof(TYPE_Timer));
[timers].value=0;
[timers].next=NULL;
LOOP
//Calcula incremento
incremento=get_timer()-ultimo;
ultimo=get_timer();
//Incrementa todos los timers
aux=timers;
WHILE ([aux].next)
[aux].value+=incremento;
aux=[aux].next;
END
[aux].value+=incremento;
FRAME;
END
END
//------------------------------------//
//Crea un timer nuevo
//------------------------------------//
FUNCTION MyTimer Timer_New()
PRIVATE
TYPE_Timer POINTER aux;
BEGIN
aux=timers;
WHILE ([aux].next)
aux=[aux].next;
END
[aux].next=alloc(sizeof(TYPE_Timer));
aux=[aux].next;
[aux].value=0;
[aux].next=NULL;
RETURN &([aux].value);
END
//------------------------------------//
//Elimina un timer
//------------------------------------//
FUNCTION Timer_Delete(MyTimer Timer_Value)
PRIVATE
TYPE_Timer POINTER aux;
TYPE_Timer POINTER next;
BEGIN
aux=timers;
WHILE (&([[aux].next].value)!=Timer_Value)
aux=[aux].next;
END
//Guarda el dato que se pierde
next=[[aux].next].next;
//Libera memoria
free([aux].next);
//Restaura la cadena
[aux].next=next;
END
//------------------------------------//
//Defines
//------------------------------------//
#DEFINE Timer_GetValue(a) [a]
[/code]
TEST:
[code language="bennu"]
PROGRAM timers
BEGIN
Timers_Start(); //Inicia el controlador de los timers
test();
END
PROCESS test()
PRIVATE
MyTimer timer1;
BEGIN
timer1=Timer_New(); //Crea el timer
LOOP
say(Timer_GetValue(timer1));
//Equivalente a:
say([timer1]);
FRAME;
END
END
[/code]
AHh me olvide... si le ven algun error o algo ke se pueda optimizar.. porfavor decidme XD
ahora si , chauss
le probare esta interesante
Abro el sarcófago de la pirámide y lleno de polvo el foro al postear en este hilo. Me ha dado por echar un vistazo a los proyectos más antiguos, de cuando todavía no era 100% Bennusero y veo que este hilo aporta código interesante para la creación de tipos de datos dinámicos, también un buen uso de DEFINES, que tengo costumbre de no utilizar... Y debería... Tomo nota.
Lo dicho, disculpad el polvo pero espero que os sirva de inspiración echar un vistazo al módulo de Phreak, si vuelve a postear por aquí le daré un karma... Con más de 1 año de retraso :o