00001
00002 #include "compressore.h"
00003 #include "decompressore.h"
00004 #include <iostream>
00005
00006
00007 #ifdef WIN32
00008
00009
00010
00011
00012
00013 #include <windows.h>
00014
00016
00017
00018
00019 void clrscr()
00020 {
00021 COORD coordScreen = { 0, 0 };
00022 DWORD cCharsWritten;
00023 CONSOLE_SCREEN_BUFFER_INFO csbi;
00024 DWORD dwConSize;
00025 HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
00026
00027 GetConsoleScreenBufferInfo(hConsole, &csbi);
00028 dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
00029 FillConsoleOutputCharacter(hConsole, TEXT(' '), dwConSize,
00030 coordScreen, &cCharsWritten);
00031 GetConsoleScreenBufferInfo(hConsole, &csbi);
00032 FillConsoleOutputAttribute(hConsole, csbi.wAttributes, dwConSize,
00033 coordScreen, &cCharsWritten);
00034 SetConsoleCursorPosition(hConsole, coordScreen);
00035 }
00036
00037 #endif
00038
00040
00043 int main()
00044 {
00045 while (1)
00046 {
00047 #ifdef WIN32
00048 clrscr();
00049 #endif
00050
00051 cout << "---PROGRAMMA PER COMPRESSIONE/DECOMPRESSIONE---" << endl;
00052 cout << "AVVISO: non utilizzare spaziature nell'inserimento di nomi o" << endl;
00053 cout << "percorsi, nel caso fossero presenti, esse verranno ignorate" << endl;
00054 cout << "Premere il tasto Invio per continuare . . ." << endl;
00055
00056 try
00057
00058 {
00059 char c;
00060 cin.clear();
00061 cin.ignore(numeric_limits<streamsize>::max(),'\n');
00062 cin.clear();
00063 cout << endl;
00064 cout << "MENU'" << endl;
00065 cout << "1) comprimi un file" << endl;
00066 cout << "2) decomprimi un file" << endl;
00067 cout << "3) esci dal programma" << endl;
00068 int a;
00069 cout << "digitare l'alternativa scelta: ";
00070 cin >> a;
00071 if (!cin)
00072 {
00073 cout << "imput non corretto" <<endl;
00074 system ("PAUSE");
00075 continue;
00076 }
00077 string file;
00078 string file1;
00079 string formato = ".huf";
00080 cin.clear();
00081 cin.ignore(numeric_limits<streamsize>::max(),'\n');
00082 cin.clear();
00083 switch (a)
00084 {
00085 case 1: cout << "il file da comprimere e'"
00086 " in questa cartella? (Y,N) --> ";
00087 cin >> c;
00088 if (!cin)
00089 {
00090 cout << "imput non corretto" << endl;
00091 system ("PAUSE");
00092 continue;
00093 }
00094 cin.clear();
00095 cin.ignore(numeric_limits<streamsize>::max(),'\n');
00096 cin.clear();
00097 switch (c)
00098 {
00099 case 'y': case 'Y': cout << "nome del file (comprendente"
00100 " estensione): ";
00101 cin >> file;
00102 if (!cin)
00103 {
00104 cout << "imput non corretto" << endl;
00105 continue;
00106 }
00107 break;
00108 case 'n': case 'N': cout << "nome del file (comprendente"
00109 " percorso e estensione): ";
00110 cin >> file;
00111 if (!cin)
00112 {
00113 cout << "imput non corretto" << endl;
00114 system ("PAUSE");
00115 continue;
00116 }
00117 break;
00118 default: cout << "imput non corretto" << endl;
00119 system ("PAUSE");
00120 continue;
00121 }
00122 cin.clear();
00123 cin.ignore(numeric_limits<streamsize>::max(),'\n');
00124 cin.clear();
00125 cout << "si desidera utilizzare il formato predefinito" << endl <<
00126 "per la compressione .huf? (Y,N) --> ";
00127 cin >> c;
00128 if (!cin)
00129 {
00130 cout << "imput non corretto" << endl;
00131 system ("PAUSE");
00132 continue;
00133 }
00134 switch (c)
00135 {
00136 case 'y': case 'Y': break;
00137 case 'n': case 'N': cout << "specificare il nuovo"
00138 " formato (comprendente '.',"
00139 " max 3 lettere): ";
00140 cin.clear();
00141 cin.ignore(numeric_limits<streamsize>::max(),'\n');
00142 cin.clear();
00143 cin >> formato;
00144 if (!cin)
00145 {
00146 cout << "imput non corretto" << endl;
00147 system ("PAUSE");
00148 continue;
00149 }
00150 break;
00151 default: cout << "imput non corretto" << endl;
00152 system ("PAUSE");
00153 continue;
00154 }
00155 cin.clear();
00156 cin.ignore(numeric_limits<streamsize>::max(),'\n');
00157 cin.clear();
00158 cout << "il file compresso sara' ubicato"
00159 " in questa cartella? (Y,N) --> ";
00160 cin >> c;
00161 if (!cin)
00162 {
00163 cout << "imput non corretto" << endl;
00164 system ("PAUSE");
00165 continue;
00166 }
00167 cin.clear();
00168 cin.ignore(numeric_limits<streamsize>::max(),'\n');
00169 cin.clear();
00170 switch (c)
00171 {
00172 case 'y': case 'Y': cout << "nome del file(senza e"
00173 "stensione): ";
00174 cin >> file1;
00175 if (!cin)
00176 {
00177 cout << "imput non corretto" << endl;
00178 system ("PAUSE");
00179 continue;
00180 }
00181 break;
00182 case 'n': case 'N': cout << "nome del file (comprendente"
00183 " percorso, senza estens"
00184 "ione): ";
00185 cin >> file1;
00186 if (!cin)
00187 {
00188 cout << "imput non corretto" << endl;
00189 system ("PAUSE");
00190 continue;
00191 }
00192 break;
00193 default: cout << "imput non corretto" << endl;
00194 system ("PAUSE");
00195 continue;
00196 }
00197 cin.clear();
00198 cin.ignore(numeric_limits<streamsize>::max(),'\n');
00199 cin.clear();
00200 cout << "compressione in corso..." << endl;
00201 file1 = file1+formato;
00202 {
00203 compressore (file.c_str(), file1.c_str());
00204 }
00205 cout << "compressione ultimata" << endl;
00206 system ("PAUSE");
00207 break;
00208
00209 case 2: cout << "il file da decomprimere e'"
00210 " in questa cartella? (Y,N) --> ";
00211 cin >> c;
00212 if (!cin)
00213 {
00214 cout << "imput non corretto" << endl;
00215 system ("PAUSE");
00216 continue;
00217 }
00218 cin.clear();
00219 cin.ignore(numeric_limits<streamsize>::max(),'\n');
00220 cin.clear();
00221 switch (c)
00222 {
00223 case 'y': case 'Y': cout << "nome del file (comprendente"
00224 " estensione): ";
00225 cin >> file;
00226 if (!cin)
00227 {
00228 cout << "imput non corretto" << endl;
00229 system ("PAUSE");
00230 continue;
00231 }
00232 break;
00233 case 'n': case 'N': cout << "nome del file (comprendente"
00234 " percorso e estensione: ";
00235 cin >> file;
00236 if (!cin)
00237 {
00238 cout << "imput non corretto" << endl;
00239 system ("PAUSE");
00240 continue;
00241 }
00242 break;
00243 default: cout << "imput non corretto" << endl;
00244 system ("PAUSE");
00245 continue;
00246 }
00247 cout << "il file decompresso sara' ubicato"
00248 " in questa cartella? (Y,N) --> ";
00249 cin >> c;
00250 if (!cin) continue;
00251 switch (c)
00252 {
00253 case 'y': case 'Y': cout << "nome del file "
00254 "(comprendente"
00255 " estensione): ";
00256 cin >> file1;
00257 if (!cin)
00258 {
00259 cout << "imput non corretto" << endl;
00260 system ("PAUSE");
00261 continue;
00262 }
00263 break;
00264 case 'n': case 'N': cout << "nome del file (comprendente"
00265 " percorso e estensione): ";
00266 cin >> file1;
00267 if (!cin)
00268 {
00269 cout << "imput non corretto" << endl;
00270 system ("PAUSE");
00271 continue;
00272 }
00273 break;
00274 default: cout << "imput non corretto" << endl;
00275 system ("PAUSE");
00276 continue;
00277 }
00278 cout << "decompressione in corso..." << endl;
00279 {
00280 decompressore (file.c_str(), file1.c_str());
00281 }
00282 cout << "decompressione ultimata" << endl;
00283 system ("PAUSE");
00284 break;
00285 case 3: cout << "chiusura applicazione in corso" << endl;
00286 system ("PAUSE");
00287 return 0;
00288 break;
00289 default: cout << "input non corretto" << endl;
00290 system ("PAUSE");
00291 continue;
00292 }
00293
00294 }
00295 catch (const char str[])
00296 {
00297 if (strcmp(str, "vuoto") == 0)
00298 {
00299 cout << "file vuoto" << endl;
00300 system ("PAUSE");
00301 continue;
00302 }
00303 if (strcmp(str, "memoria") == 0)
00304 {
00305 cout << "memoria dinamica esaurita" << endl;
00306 system ("PAUSE");
00307 continue;
00308 }
00309 if (strcmp(str, "vuoto") == 0)
00310 {
00311 cout << "file vuoto" << endl;
00312 system ("PAUSE");
00313 continue;
00314 }
00315 if (strcmp(str, "compressione") == 0)
00316 {
00317 cout << "errore durante la compressione" << endl;
00318 system ("PAUSE");
00319 continue;
00320 }
00321 if (strcmp(str, "apertura") == 0)
00322 {
00323 cout << "impossibile aprire il file, potrebbe essere inesistente"
00324 " o protetto" << endl;
00325 system ("PAUSE");
00326 continue;
00327 }
00328 if (strcmp(str, "contatore") == 0)
00329 {
00330 cout << "errore critico nella scrittura della codifica" << endl;
00331 system ("PAUSE");
00332 continue;
00333 }
00334 if (strcmp(str, "lettura") == 0)
00335 {
00336 cout << "il file non e' codificato correttamente, potrebbe non essere"
00337 " stato codificato con questo programma" << endl;
00338 system ("PAUSE");
00339 continue;
00340 }
00341 }
00342 }
00343 cout << "errore critico" << endl;
00344 system ("PAUSE");
00345 exit(1);
00346 }
00347
00348