#include "lzw.h" #include "lz78.h" #include "types.h" using namespace std; /** * \mainpage Métodos de compresión basados en diccionarios. * * \section notas Notas previas * * * * \section install Compilar * * Para compilar el programa principal basta con ejecutar:
* * $make * * * Para compilar los programas de pruebas hay que ejecutar:
* * * $make test * * * o * * $cd test * $make * * * \section help Ejecución * * Modo de empleo del programa principal: * *

$dicpres (modo) [opciones] fichero-entrada [fichero-salida]

* * Opciones:
* --help : Muestra este texto de ayuda.
* -v : Activa el modo verbose, sacando por pantalla información * de depuración.
* * Modo:
* -c : Comprime.
* -e : Descomprime.
* * Metodos:
* -lz78 : Comprime con el método del LZ78 (Por defecto).
* -lzw : Comprime con el método del LZW.
* * \section source Código fuente * * El código fuente del proyecto, además de estar adjunto, * está disponible en la siguiente dirección:
* * http://code.google.com/p/dicpres * * También está disponible el código en un repositorio * de Subversion, accesible desde el anterior enlace. * */ int main (int argc, char * argv[]) { bool bError = false; bool bLZ78 = true; // Por defecto. bool bLZW = false; bool bHelp = false; bool bVerbose = false; bool bCompress = false; bool bExtract = false; string sFileIn; string sFileOut; if (argc == 1) bError = true; for (int i = 1; i < argc; i++) { if (argv[i][0] == '-') { /** * Estamos en el caso de que sea una opción. */ string sOption(argv[i]); if (sOption == "-lzw") { bLZW = true; bLZ78 = false; } else if (sOption == "-lz78"){ bLZ78 = true; } else if (sOption == "-v") { bVerbose = true; } else if (sOption == "--help") { bHelp = true; } else if (sOption == "-c") { bCompress = true; } else if (sOption == "-e") { bExtract = true; } else { bError = true; } } else { /** * Es un fichero. */ if (sFileIn == "") { sFileIn = argv[i]; } else if ( sFileIn != "" && sFileOut == ""){ sFileOut = argv[i]; } else { bError = true; } } } if (bCompress && bExtract) bError = true; if (!bCompress && !bExtract) bError = true; if (bLZW && bLZ78) bError = true; if (!bLZW && !bLZ78) bError = true; if (sFileIn == "") bError = true; if (bHelp) bError = false; if (bError) { cerr << "Modo de empleo:\n" << argv[0] << " (modo) [opciones] fichero-entrada [fichero-salida]" << endl; cerr << "Use la opción --help para optener más ayuda." << endl; return 0; } if (bHelp) { /** * Mostrar ayuda. */ cout << "Comprime ficheros únicos mediante métodos de diccionario.\n"<< endl; cout << "Modo de empleo: " << endl; cout << argv[0] <<" (modo) [opciones] fichero-entrada [fichero-salida]" << endl << endl; cout << "Opciones:" << endl; cout << "--help : Muestra este texto de ayuda." << endl; cout << "-v : Activa el modo verbose, sacando por pantalla información" << endl; cout << " de depuración." << endl << endl; cout << "Modo:" << endl; cout << "-c : Comprime." << endl; cout << "-e : Descomprime." << endl << endl; cout << "Metodos:" << endl; cout << "-lz78 : Comprime con el método del LZ78 (Por defecto)." << endl; cout << "-lzw : Comprime con el método del LZW." << endl << endl; cout << "Autores: Iván Rodríguez Sastre & Marcos Gabarda Inal" << endl; cout << "GPL 3.0" << endl; } else { /** * Ejecutar. */ if (bCompress) { /** * Modo compresión. */ if (bLZ78) { /** * Método LZ78. */ lz78 tmp; if (sFileOut == "") sFileOut = sFileIn + ".lz78"; tmp.readFile(sFileIn); tmp.compress(sFileOut); } else if (bLZW) { /** * Método LZW. */ lzw tmp(bVerbose); if (sFileOut == "") sFileOut = sFileIn + ".lzw"; tmp.compress(sFileIn, sFileOut); } } else if (bExtract){ /** * Modo descompresión. */ if (bLZ78) { /** * Método LZ78. */ lz78 tmp; if (sFileOut == "") sFileOut = sFileIn + ".unlz78"; tmp.readCom(sFileIn); tmp.uncompress(sFileOut); } else if (bLZW) { /** * Método LZW. */ lzw tmp(bVerbose); if (sFileOut == "") sFileOut = sFileIn + ".unlzw"; tmp.uncompress(sFileIn, sFileOut); } } } return 0; }