INIT_JUMP( Número máximo de "jumpers" )


PROCESS( mi_proceso )
 PUBLIC
  int i;
 
 // Inicializamos el número de "jumpers" que vamos a utilizar
 // en este caso 2
 INIT_JUMP(2)

 // Obligatoriamente la función miembro ha de ser tipo "int"
 // para poder comunicarse con el proceso que la llamo 
 int funcion2();
 int funcion1();
PROTOTYPE

La sentencia INIT_JUMP() sirve para inicializar los "jumpers" o saltadores de código. Se tendrá que indicar el número de funciones en los que vamos a utilizar sentencias tipo JUMP_FRAME() o JUMP_FRAME_PERCENT() a esta sentencia para que sean creadas de otro modo no será posible utilizar dichas sentencias dentro de funciones miembro.

Se muestra, a continuación, un programa para documentar el uso de la sentencia INIT_JUMP():


PROCESS( pru )
 PUBLIC
  int i;
 
 // Inicializamos el número de "jumpers" que vamos a utilizar
 // en este caso 2
 INIT_JUMP(2)

 // Obligatoriamente la función miembro ha de ser tipo "int"
 // para poder comunicarse con el proceso que la llamo 
 int prueba2();
 int prueba();
PROTOTYPE
 
 // función miembro "prueba2()" admite parámetros y sentencias:
 //  JUMP_FRAME(número de jumper)
 //  JUMP_FRAME_PERCENT(número de jumper, %frame )
 //  mismo funcionamiento que sus respectivas 
 BEGIN_JUMP(1, pru::prueba2())  
  
  for( i = 0; i < 200; i++ )                         
  {  
   write_int(0, 0, 0, 0, &i);
   JUMP_FRAME(1);
  }
 
 END_JUMP
 
 // función miembro "prueba()"
 //  JUMP_ANCHOR(número de jumper, función miembro tipo JUMP)
 //  establece el ancla de salto, para que en sucesivas llamadas
 //  se pueda seguir ejecutando "prueba()" hasta que termine
 //  "prueba2()"
 BEGIN_JUMP(0, pru::prueba())  
  
   JUMP_ANCHOR(0, prueba2());
 
 END_JUMP

 // Declaración del cuerpo del proceso
BEGIN_BODY( pru )
 
 //  ANCHOR(función miembro tipo JUMP)
 //  establece el ancla de salto, para que en sucesivas llamadas
 //  se pueda seguir ejecutando "prueba()" hasta que termine
 ANCHOR(prueba());
  
 write(0, 0, 20, 0, "Final de código");
  
END_BODY

MAIN_PROGRAM_CDIV
BEGIN 

    set_gfx(GFX_AUTODETECT_WINDOWED);

    set_mode(m320x200);

    new pru();
    
    LOOP
     FRAME;

END

RUN_PROGRAM_CDIV

En este ejemplo vemos como se pude llamar a una función miembro capaz de ejecutar sentencias tipo FRAME, que a su vez llama a otra función miembro con igual operabilidad para mostrar un resultado y es capaz de dibujarlo por medio de la sentencia JUMP_FRAME() o JUMP_FRAME_PERCENT().

Las funciones miembro llamadas por medio de ANCHOR() o JUMP_ANCHOR() no pierden el valor de los parámetros de entrada ya que en cada ciclo vuelven a ser llamadas con dichos valor en sus parámetros, si estos cambiasen fuesen cambiados por otra función las funciones que utilicen dichos parámetros también serian afectadas. Además dichas funciones han de ser obligatoriamente de tipo entero "int".

Es posible anidar llamadas de funciones miembro por medio de las funciones ANCHOR() o JUMP_ANCHOR() siempre y cuando tengamos suficientes "jumpers" inicializados por medio de la función INIT_JUMP().


Ver: Sintaxis - BEGIN_JUMP() ... END_JUMP - ANCHOR() - JUMP_ANCHOR() - JUMP_FRAME() - JUMP_FRAME_PERCENT()