示例#1
0
文件: lz78.c 项目: wedrowycz/LZ78
int main(int argc, char**argv)
{
	char * inputf;
	char * outputf;
	char * hparaml=(char*)malloc(4);//help
	char * vparam = (char*)malloc(4);//verbose
	char  kierunek = ' ' ;//c lub d - kompresja lub dekompresja
	char * rparam = (char*)malloc(4);//-r - reclaim , odzyskaj "nieuzywane elementy"
	int rdepth = 0;
	char * komenda;


	komenda = (char*)malloc(255);

	int i; 

	//je¿eli nie podano parametrów
	if (argc < 1)
	{
		PrintSkladnia();
		return 0;
	}

	//sprawdzenie parametrów 
	for (i = 1; i < argc; i++)
	{
		if (argv[i][0] == '-')
		{
			komenda = argv[i];
			if (komenda[1] == 'h')
			{
				strcpy(hparaml , "TAK");
				komenda = "";
			}
			else if (komenda[1] == 'v')
			{
				strcpy(vparam , "TAK");
				komenda = "";
			}
			else if ((komenda[1] == 'r') || (komenda[1] == 'R'))
			{   //parametr metody slownikowej
				//printf("%s\n", komenda);
				//printf("%c\n", komenda[2]);
				strcpy( rparam , "TAK");
				if (strlen(komenda) > 1)
				{
					rdepth = atoi(&komenda[2]);
				}

				komenda = "";

			}
			else if ((komenda[1] == 'c') || (komenda[1] == 'C'))
			{
				if (kierunek != ' ')
				{
					printf("Blad skladni - plik nie moze byc jednoczesnie kodowany i dekodowany");
					PrintSkladnia();
					return 0;
				}
				kierunek = 'c';
				komenda = "";
			}
			else if ((komenda[1] == 'd') || (komenda[1] == 'D'))
			{
				if (kierunek != ' ')
				{
					printf("Blad skladni - plik nie moze byc jednoczesnie kodowany i dekodowany");
					PrintSkladnia();
					return 0;
				}

				kierunek = 'd';
				komenda = "";
			}
		}
		else
		{
			if((komenda[1] == 'f')||(komenda[1]=='F'))
			{
				inputf = (char*)malloc(strlen(argv[i]) + 1);
				strcpy( inputf , argv[i]) ;
				komenda = "";
			}
			else if((komenda[1] == 'o')||(komenda[1]=='O'))
			{
				outputf = (char*)malloc(strlen(argv[i]) + 1);
				strcpy(outputf , argv[i] );
				komenda = "";
			}

		}

	}

	if ((hparaml == "TAK") || (kierunek == ' ') || (inputf == "") )
	{
		PrintSkladnia();
		return 0;
	}
		
	
	if (kierunek == 'c')
	{
		kompresja(inputf, outputf, (strcmp(vparam, "TAK")==0? 1 : 0), rdepth);
	}
	if (kierunek == 'd')
	{
		dekompresja(inputf, outputf, (strcmp(vparam, "TAK") == 0 ? 1 : 0), rdepth);
	}

	free(hparaml);
	free(vparam);
	free(rparam);
	free(inputf);
	free(outputf);
	return 0;
}
示例#2
0
文件: TIiK_cw3.cpp 项目: rarry/it
int main(int argc, char *argv[])
{
    int liczba_symboli_modelu=0;
    int liczba_symboli_dodanych=0;
   	char *nazwa_pliku_in;
    char rozszerzenie_m[]= "model";
    char rozszerzenie_s[]= "modsort";
    char rozszerzenie_mmod[]= "modmod";
    char rozszerzenie_d[]= "tree";
    char rozszerzenie_tkodow[]= "coding";
    char rozszerzenie_tkodu[]= "code";
    char rozszerzenie_out[]= "huffman";
    char nazwapliku_model[24];
    char nazwa_modsort[24];
    char nazwapliku_drzewo[24];
    char nazwa_modmod[24];
    char nazwa_tkodow[24];
    char nazwa_tkodu[24];
    char nazwa_pliku_out[24];
   	
    int n;
   	
          
    if(argc==2)
      {
        nazwa_pliku_in=argv[1];
        printf("Parametry programu:  %d   %s \n",  argc, nazwa_pliku_in);
      }
	else
    {
   		printf("Zla liczba parametrow.  ","%d", argc);
		exit(EXIT_FAILURE);
    }

    
    n=nazwa_pliku(nazwa_pliku_in, rozszerzenie_tkodu,nazwa_tkodu);
    liczba_symboli_modelu = czytaj_tabele_kodu( nazwa_tkodu, tablica_kodu);

    if (liczba_symboli_modelu>0)
     printf("Tablica kodu odczytana z pliku %s\n", nazwa_tkodu);
    else
    {
     printf("Odczytanie tablicy kodu nie powiodlo sie.\n");
     exit(EXIT_FAILURE);
    }
 
    n=nazwa_pliku(nazwa_pliku_in, rozszerzenie_out,nazwa_pliku_out);

    n=kompresja(nazwa_pliku_in, nazwa_pliku_out, tablica_kodu,liczba_symboli_modelu);

    
    if (n>0)
    {
      printf("Suma bitow kodu w pliku %s  %d  \n", nazwa_pliku_out, n);
      if (n%8!=0)
        n=n/8+1;
      printf("Liczba bajtow w pliku %s  %d  \n", nazwa_pliku_out, n);
    }
    else
      printf("Kodowanie nie powiodlo sie.\n");
  
    return 0;
    
}