All pastes #560176 Raw Edit

Mine

public text v1 · immutable
·published 2007-06-12 00:39 UTC
rendered paste body
// -------------------------------------------------------------------------------------------------------------------------------------       
// Funcion:     AllenVM_CPU_COND_SWITCH();
// Proposito:   Definir una condicion switch. 
// Devuelve:    0 si sus sentencias no se ejecutan / N si sentencia ejecutada.
// -------------------------------------------------------------------------------------------------------------------------------------

static int AllenVM_CPU_COND_SWITCH(struct AllenInterp *i, int argc, char **argv, void *pd) {
 if(argc < 3) return AllenVM_CPU_Error(i,argv[0]);                                     // Comprobamos parametros.
 if(argc % 2) return AllenVM_CPU_Error(i,argv[0]);                                     // Comprobamos parametros pares.

 register int c,p; float r=0; char *buf1,*buf2;                                        // Declaramos variables.

 for(p=2;p<argc;p+=2) {                                                                // Buscamos resultados.
  if((c = AllenVM_InterpEval(i,argv[1])) != Allen_VM_OK) return c;                     // Comprobamos la operacion primaria.
  buf1=strdup(i->result);                                                              // Almacenamos resultado en el buffer 1.
  if((c = AllenVM_InterpEval(i,argv[p])) != Allen_VM_OK) return c;                     // Comprobamos la operacion secundaria.
  buf2=strdup(i->result);                                                              // Almacenamos resultado en el buffer 2.

  if(!strcmp(buf1,buf2)) {                                                             // Si el resultado es el que buscamos:
  if((c = AllenVM_InterpEval(i,argv[p+1])) != Allen_VM_OK) return c; r=p/2; }          // Evaluamos las sentencias y definimos.   
  free(buf1); free(buf2);                                                              // Liberamos la memoria de ambos buffers.
 }

 char buf[TCOND_BSIZE];                                                                // Creamos buffer.
 snprintf(buf,TCOND_BSIZE,"%f", r);                                                    // Copiamos al buffer.
 AllenVM_InterpSetResult(i,buf);                                                       // Devolvemos 0/N segun sentencias ejecutadas. 
 return Allen_VM_OK;                                                                   // Devolvemos resultado.
}