Esempio n. 1
0
        public object Ejecutar(Ambito ambito)
        {
            try
            {
                if (estilo.parametros.Count == 3)
                {
                    Expresion p1 = estilo.parametros.ElementAt(0);
                    Expresion p2 = estilo.parametros.ElementAt(1);
                    Expresion p3 = estilo.parametros.ElementAt(2);

                    Object min = p1.getValor(ambito);
                    Object max = p2.getValor(ambito);
                    Object fil = p3.getValor(ambito);

                    if (min is int && max is int && fil is int)
                    {
                        int cad_min = (int)min;
                        int cad_max = (int)max;
                        int cad_fil = (int)fil;

                        if (cad_max <= cad_min)
                        {
                            cad_max = cad_min + 2;
                        }
                        this.numero = Estatico.numPregunta;
                        Estatico.numPregunta++;
                        DamePregunta dame = new DamePregunta(identificador, parametros, clase, linea, columna, "Texto/Cadena", "(min, max, fil)", this.numero);

                        Pregunta p = dame.getPregunta(ambito);

                        if (p != null)
                        {
                            Objeto ob = dame.ob;

                            Ambito auxiliar = dame.ambPregu;


MuestraForm:
                            /*AQUI YA CREO EL FORMULARIO*/
                            Cadenas c = new Cadenas(p, linea, columna, clase, ambito.archivo, cad_max, cad_min, cad_fil, true);
                            c.ShowDialog();

                            String resp = c.respuesta;

                            if (resp.Equals(""))
                            {
                                this.valorResp = Estatico.respuestaPorDefecto(this.casteo);
                            }
                            else
                            {
                                this.valorResp = Estatico.casteaRespuestaA(resp, valorResp, this.casteo);
                            }
                            if (valorResp is null)
                            {
                                TError error = new TError("Semantico", "No se logro Castear la respuesta a tipo: " + this.casteo.ToString() + " | Clase: " + clase + " | Archivo: " + ambito.archivo, linea, columna, false);
                                Estatico.errores.Add(error);
                                Estatico.ColocaError(error);
                                goto MuestraForm;
                            }

                            // LLAMO A RESPUESTA
                            if (!llamaARespuesta(auxiliar, valorResp))
                            {
                                goto MuestraForm;
                            }

                            PreguntaAlmacenada pr = new PreguntaAlmacenada(this.identificador, p.etiqueta, this.numero);
                            pr.addAnswer(this.valorResp.ToString());
                            Estatico.resps.Add(pr);

                            ob.ambito = dame.ambPregu;

                            if (c.salir != null)
                            {
                                return(c.salir);
                            }
                        }
                    }
                    else
                    {
                        TError error = new TError("Semantico", "Error Al Mostrar Pregunta: \"" + this.identificador + "\" ya que se espera que sus parametros sean enteros: (min, max, fila) | Clase: " + clase + " | Archivo: " + ambito.archivo, linea, columna, false);
                        Estatico.errores.Add(error);
                        Estatico.ColocaError(error);
                    }
                }
                else
                {
                    this.numero = Estatico.numPregunta;
                    Estatico.numPregunta++;
                    DamePregunta dame = new DamePregunta(identificador, parametros, clase, linea, columna, "Texto/Cadena", "()", this.numero);

                    Pregunta p = dame.getPregunta(ambito);

                    if (p != null)
                    {
                        Objeto ob = dame.ob;

                        Ambito auxiliar = dame.ambPregu;

MuestraForm1:
                        /*AQUI YA CREO EL FORMULARIO*/
                        Cadenas c = new Cadenas(p, linea, columna, clase, ambito.archivo, -1, -2, -1, false);
                        c.ShowDialog();

                        String resp = c.respuesta;
                        if (resp.Equals(""))
                        {
                            this.valorResp = Estatico.respuestaPorDefecto(this.casteo);
                        }
                        else
                        {
                            this.valorResp = Estatico.casteaRespuestaA(resp, valorResp, this.casteo);
                        }
                        if (valorResp is null)
                        {
                            TError error = new TError("Semantico", "No se logro Castear la respuesta a tipo: " + this.casteo.ToString() + " que es lo que se espera! | Clase: " + clase + " | Archivo: " + ambito.archivo, linea, columna, false);
                            Estatico.errores.Add(error);
                            Estatico.ColocaError(error);
                            goto MuestraForm1;
                        }

                        // LLAMO A RESPUESTA
                        if (!llamaARespuesta(auxiliar, valorResp))
                        {
                            goto MuestraForm1;
                        }

                        PreguntaAlmacenada pr = new PreguntaAlmacenada(this.identificador, p.etiqueta, this.numero);
                        pr.addAnswer(this.valorResp.ToString());
                        Estatico.resps.Add(pr);

                        ob.ambito = dame.ambPregu;

                        if (c.salir != null)
                        {
                            return(c.salir);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                TError error = new TError("Ejecucion", "Error al ejecutar Pregunta: " + this.identificador + " | Clase: " + clase + " | Archivo: " + ambito.archivo + " | Mensaje: " + e.Message, linea, columna, false);
                Estatico.ColocaError(error);
                Estatico.errores.Add(error);
            }
            return(new Nulo());
        }