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(); }
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; }
void convierteHTML(FILE *f) { std::string unEspacio = " "; 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" ); }