void Agente::cargarDesdeArchivo(const std::string& rutaDatos) {
	std::fstream archivo(rutaDatos.c_str(), std::fstream::in);
	Consulta cons;
	std::string linea;
	std::string campo;
	Utilitario util;

	while (archivo.good() && _sck->conectado()) {
		cons.limpiar();
		cons.definirComoConsultaAgente();

		leerLinea(archivo, linea);

		if (linea.size() > 0) {

			for (unsigned i = 0 ; i < Organizacion::cantidadCampos() ; i++) {
				campo = util.separar(linea, TABULADOR, i);
				cons.agregarCampo(campo);
			}

			this->enviarConsulta(cons);
		}
	}

	this->recibirRespuesta();
}
Exemple #2
0
int main(int argc, char *argv[]) {
	int cantidadLineas;
	if (argc != 1) {
		show_help(argv[1]);
		return 0;
	}
	cantidadLineas = 0;
	while (!feof(stdin)) {
		leerLinea(stdin, &cantidadLineas);
	}
	return 0;
}
tCaptura pedirCaptura (void) {
	char str[5];
	int tipoCaptura;

	printf("Especifique algún tipo de captura, pues el movimiento que quiere realizar admite tanto captura por acercamiento como por alejamiento.\n");

	do {
		printf("Ingrese [w] o [a] > ");
		leerLinea(str, 5);
		tipoCaptura = validarFmtCaptura (str);
	} while (tipoCaptura == ERROR);
	
	return tipoCaptura;
}
tFlag leerSN(void) {
	char c;
	char str[3];

	do {
		printf("Ingrese S o N > ");

		leerLinea(str, 3); 
		/* dimensión 3, pues si se ingresa más de S o N str[1] sería distinto de '\0' */
		
		c = toupper(str[0]);
	} while( (c != 'S' && c!= 'N') || str[1] != '\0');
	
	return c == 'S';
}
enum tJugada pedirJugada(tMovimiento *mov, char *nombre) {
	int n;
	char str[STR_DIM];
	tFlag jugada=OK;

	printf("Ingrese una jugada:\n");

	do {
		printf(" > ");
		n = leerLinea(str, STR_DIM);
		jugada = validarFmtLinea (str, n, mov, nombre);
		imprimirErrorFmt(jugada); /* solo imprime en casos de error */
	} while (jugada < 0); /* hay algún tipo de error en el formato */

	return jugada;
}
void pedirNombre (char nombre[]) {
	char str[STR_DIM];
	int n;
	tFlag esValido = 1;

	printf("Escriba el nombre con el que quiere guardar su juego. (Max %d caracteres)\n", MAX_NOM);

	do {
		printf(" > ");
		imprimirErrorFmt(esValido);
		 /* en una primera instancia no imprime nada, pues esValido es mayor o igual a 0*/
		
		n = leerLinea(str, STR_DIM);
		esValido = validarFmtNombre (nombre, str, n);
	} while (esValido < 0);

	return;
}
tMovimiento pedirCadena (tPartida partida) {
	tFlag esValido = 1;
	tCoordenada origenCadena;
	tMovimiento nuevoMov;
	char str[STR_DIM]; 
	char nuevoStr[15]; /* tamaño suficiente para evaluar si el usuario introdujo de más */
	int fo, co;
	int n;

	origenCadena = consultarOrigenCadena(partida);
	fo = origenCadena.fil+1;
	co = origenCadena.col+1;
	/* sumamos 1 a las coordenadas, pues origenCadena va de 0 fil/col-1, 
	** pero la función de validar formato lee de 1 a fil */ 
	
	printf("\n¡Puede encadenar una movimiento!\n");
	printf("Ingrese solo la coordenada de la casilla a la que desea moverse y el tipo de captura si es necesario.\n");
	printf("Se imprimirá su actual casilla de origen.\n");

	do {
		imprimirErrorFmt(esValido); 
		/* en una primer instancia no imprimirá nada, pues esValido es mayor a 0 */

		printf(" > M [%d,%d]", fo, co);

		n = leerLinea(nuevoStr, 15);

		if (n >= MIN_COORD && n <= MAX_COORD) {
			sprintf(str, "M [%d,%d]%s", fo, co, nuevoStr);
			esValido = validarFmtMov (str, &nuevoMov); /* devuelve menor a 0 en caso de error */
		}
		else
			esValido = ERR_FMT_MOV1;

	} while (esValido < 0); /* si es menor a cero es error */

	return nuevoMov;
}
/* main crea la partida según las especificaciones del usuario 
** y llama a jugar con dicha partida. */
int main(void){
	
	int opcion;
	int modo;
	tPartida partida;
	char nombre[MAX_NOM];	
	tFlag ganador;
	int filas, columnas;
	
	printf("\n\t\t=*=*=*=*=*=*=*=*=*==FANORONA==*=*=*=*=*=*=*=*=*=*=");
	printf("\n\t\t=*=*=*=*=*=*=*=*=FUTURAMA EDITION=*=*=*=*=*=*=*=*=\n\n");

	printf("\n\t\t=*=*=*=*=*=*=*==NOTAS SOBRE EL JUEGO=*=*=*=*=*=*=*=\n");
	printf("\n\t\t\t\tLa captura es obligatoria\n");
	printf("\n\t\tLas casillas fuertes se marcan con letras mayusculas\n");
	printf("\t\ty las debiles oon minuscula");
	printf("\n\n\t\tEl formato de movida es \"M [Fo,Co][Fd,Cd][w]\", o bien\n");
	printf("\t\t\"M [Fo,Co][Fd,Cd][a]\", siendo Fo,Co Fd,Cd las coordenadas\n");
	printf("\t\tde origen y destino, y w/a el tipo de movida (WITHDRAWAL \n");
	printf("\t\t o APPROACH)\n\n");
	printf("\t\t=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=\n\n");
	printf("\tElija una opcion:\n\n");
	printf("\t\t1. Juego nuevo: vs PC\n");
	printf("\t\t2. Juego nuevo: dos jugadores\n");
	printf("\t\t3. Cargar partida de archivo\n");
	printf("\t\t4. Salir\n\n");
	do{
		opcion=getint("Ingrese un numero de opcion > "); 
	}while(opcion<1 || opcion>4);

	if(opcion == 1 || opcion == 2){
		modo = opcion == 1 ? PVE : PVP; /* 1 es juego contra la computadora, 2 es dos jugadores*/	
		pedirDimensiones(&filas, &columnas);
		partida=generarPartida(filas,columnas, modo);
	
		if(partida == NULL){
			imprimirError(ERR_MEM_COMPU);
			return 1;
		}
	}
	else if(opcion == 3){
		/*Cargar partida*/
		printf("Ingrese el nombre del archivo:\n > ");
		leerLinea(nombre, MAX_NOM);
		partida=cargarPartida(nombre); /*modo cambia al correspondiente (0 o 1)*/
	        if(partida == NULL){
			printf("\nError al intentar abrir el archivo \"%s\". Abortando...\n\n", nombre);
			return 1;
		}
		printf("\nMODO DE JUEGO: %s\n", modoJuego(partida)?"DOS JUGADORES":"JUGADOR VS COMPUTADORA");
		printf("TURNO DEL JUGADOR %s\n", jugadorActual(partida)?"NEGRO":"BLANCO");
		printf("DIMENSIONES DEL TABLERO: %dx%d\n\n", numFilas(partida),numCols(partida));
	}
			
	else{
		/* Salir */
		printf("\n\t\t¡Adios!\n\n");
		return 0;
	}


	ganador = jugar(partida);		

	switch(ganador) {
		case GANADOR_BLANCO: printf("\a\n\n\t===========GANADOR: BLANCO==========\n\n"); break;
		case EMPATE: printf("\a\n\n\t===========EMPATE===========\n\n"); break;
		case GANADOR_NEGRO: printf("\a\n\n\t==========GANADOR: NEGRO===========\n\n"); break;
	}
	eliminarPartida(partida);
	return 0;

}
Exemple #9
0
void convierteHTML(FILE *f)
{
	std::string unEspacio = "&nbsp;";
	std::string espacios = unEspacio;
    std::string lin;
	std::string token;
    FILE *out = fopen( "out.html", "wt" );
	Zero::AnalizadorLexico::TipoToken tk;
	bool esNuevaLinea;
    Susts::iterator it;

	espacios += unEspacio;

        // Cabecera html
        std::fprintf( out, "<html><head><Title>zm source</Title>\n</head>\n"
	              "<body>\n<code>\n\n"
        );

        while( !std::feof( f ) )
        {
            leerLinea( f, lin );

            // Analizar la lin.
            {
                std::auto_ptr<Zero::AnalizadorLexico> scan( new Zero::AnalizadorLexico( &lin ) );

                scan->pasaEsp();
                std::fprintf( out, "\n<br>" );
		esNuevaLinea = true;

                if ( scan->getCaracterActual() == '/'
   	          && !scan->esEol()
		  && scan->getLinea()[ scan->getPosActual() + 1] == '*' )
                {
			// Es un comentario
			do {
				convertirAcentos( lin );
				std::fprintf( out, "%s", espacios.c_str() );
				std::fprintf( out, "<font color=\"#0000FF\">" );
				std::fprintf( out, "<i>" );
				std::fprintf( out, "%s", lin.c_str() );
				std::fprintf( out, "</i>" );
				std::fprintf( out, "</font><br>" );

				leerLinea( f, lin );
			} while( lin.find( "*/" ) == std::string::npos );

			convertirAcentos( lin );
			std::fprintf( out, "%s", espacios.c_str() );
			std::fprintf( out, "<font color=\"#0000FF\">" );
			std::fprintf( out, "<i>" );
			std::fprintf( out, "%s", lin.c_str() );
			std::fprintf( out, "</i>" );
			std::fprintf( out, "</font><br>" );

			leerLinea( f, lin );

			scan.reset( new Zero::AnalizadorLexico( &lin ) );

			scan->pasaEsp();
			std::fprintf( out, "\n<br>" );
			esNuevaLinea = true;
                }

                if ( scan->getCaracterActual() == '!'
 		  || ( scan->getCaracterActual() == '/'
		    && !scan->esEol()
		    && scan->getLinea()[ scan->getPosActual() + 1] == '/' ) )
                {
			// Es un comentario
			std::fprintf( out, "%s", espacios.c_str() );
			std::fprintf( out, "<font color=\"#0000FF\">" );
                        std::fprintf( out, "<i>" );
                        std::fprintf( out, "%s", lin.c_str() );
                        std::fprintf( out, "</i>" );
			std::fprintf( out, "</font>" );
                }
		else
		if ( scan->getCaracterActual() == ':' )
		{
			// Es una etiqueta
			std::fprintf( out, "%s", espacios.c_str() );
			std::fprintf( out, "<font color=\"#C000C0\">" );
			std::fprintf( out, "%s", "<u>" );
            std::fprintf( out, "%s", lin.c_str() );
            std::fprintf( out, "%s", "</u>" );
			std::fprintf( out, "</font>" );
		}
		else
		if ( scan->getCaracterActual() == '}' )
		{
			// Calcular el nuevo espaciado
			espacios.erase( espacios.length()
				- ( unEspacio.length()
					* 2 ),
				espacios.length()
			);

			// Imprimir el cierre de llave
			std::fprintf( out, "%s", espacios.c_str() );
			std::fprintf( out, "<font color=\"#C000C0\"><b>}</b></font>" );
			std::fprintf( out, "%s", lin.substr( scan->getPosActual() + 1, lin.length() ).c_str() );

			if ( esNuevaLinea ) {
				std::fprintf( out, "%s", espacios.c_str() );
			}
		}
		else
		if ( scan->getCaracterActual() == '{' ) {
			std::string misEspacios = espacios;

			misEspacios.erase( misEspacios.length()
				- ( unEspacio.length()
					* 2 ),
				misEspacios.length()
			);

			// Imprimir la apertura de llave
			std::fprintf( out, "%s", misEspacios.c_str() );
			std::fprintf( out, "<font color=\"#C000C0\"><b>{</b></font>" );
			std::fprintf( out, "%s", lin.substr( scan->getPosActual() + 1, lin.length() ).c_str() );

			// Nuevo espaciado (no se cambia por que ya lo ha hecho method)
			if ( esNuevaLinea ) {
				std::fprintf( out, "%s", espacios.c_str() );
			}
		}
                else {
                    while( !scan->esEol() )
                    {
		    	    // Encontrar el tipo de token y cogerlo
		    	    do {
			      tk = scan->getTipoSiguienteToken();

			      switch ( tk )
			      {
			    	case Zero::AnalizadorLexico::IDENTIFICADOR:
                        scan->getToken();
                        break;
                    case Zero::AnalizadorLexico::LITNUMERICO:
                        scan->getNumero();

                        std::fprintf( out, "<font color=\"#828200\">" );

                        std::fprintf( out, "%s ",
                                 scan->getTokenActual().c_str()
                        );

                        std::fprintf( out, "</font>" );
                        break;
                    case Zero::AnalizadorLexico::LITCADENA:
                        scan->avanza();
                        scan->getLiteral( '"' );
                        scan->avanza();
                        token = scan->getTokenActual();
                        convertirAcentos( token );

                        std::fprintf( out, "<font color=\"#828200\">" );

                        std::fprintf( out, "\"%s\" ", token.c_str() );

                        std::fprintf( out, "</font>" );

                        break;
                    case Zero::AnalizadorLexico::NADA:
                        std::fprintf( out, "%c ",
                                 scan->getCaracterActual()
                        );
                        scan->avanza();
			      }
			    } while ( tk != Zero::AnalizadorLexico::IDENTIFICADOR
			           && !scan->esEol() );

		            // Procesar el token
		 	    if ( tk == Zero::AnalizadorLexico::IDENTIFICADOR
			      || !scan->esEol() )
			    {
                  it = cambiosHTML.find(
                        Zero::AnalizadorLexico::mays( scan->getTokenActual() )
                  );

                  if ( it != cambiosHTML.end() ) {
                    // Es una de las palabras clave
				    if ( it->first == "OBJECT" ) {
				    	if ( esNuevaLinea ) {
					  std::fprintf( out, "%s", espacios.c_str() );
					}
				    	espacios += unEspacio;
					espacios += unEspacio;
				    }
				    else
				    if ( it->first == "METHOD"
 				      || it->first == "DO" )
				    {
				    	if ( esNuevaLinea ) {
					  std::fprintf( out, "%s", espacios.c_str() );
					}
				    	espacios += unEspacio;
					espacios += unEspacio;
				    }
				    else
			            if ( it->first == "ENDOBJECT" ) {
				    	espacios.erase( espacios.length()
					              - ( unEspacio.length()
						         * 2 ),
						        espacios.length()
					);
				    	if ( esNuevaLinea ) {
					  std::fprintf( out, "%s", espacios.c_str() );
					}
				    }
				    else
				    if ( it->first == "ENDMETHOD" )
				    {
				    	espacios.erase( espacios.length()
					              - ( unEspacio.length()
						         * 2 ),
						        espacios.length()
					);
				    	if ( esNuevaLinea ) {
					  std::fprintf( out, "%s", espacios.c_str() );
					}
				    }
				    else {
				    	if ( esNuevaLinea ) {
					  std::fprintf( out, "%s", espacios.c_str() );
					}
				    }

				    esNuevaLinea = false;
                                    std::fprintf( out, "%s ", it->second.c_str() );
			      }
                              else {
			      	    if ( esNuevaLinea ) {
			            	std::fprintf( out, "%s", espacios.c_str() );
					esNuevaLinea = false;
				    }

			    	    std::fprintf( out, "%s ",
			    			  scan->getTokenActual().c_str()
				    );
			      }
			    }
                    }
                }
            }
         }

        // fin html
        std::fprintf( out, "\n\n</code>\n</body>\n</html>\n" );
}