예제 #1
0
int main(int argc, const char* argv[])
{
	if (argc != 2) {
		FatalError("Neplatne argumenty programu!");
	}

	struct ppm* image = ppm_read(argv[1]);
	if (!image) {
		return EXIT_FAILURE;
	}

	BA_create(bit_array, N); 
	Eratosthenes(bit_array);

	int ch, nbits; 
	ch = nbits = 0; 

	unsigned long image_size = image->xsize * image->ysize * 3;
	for (unsigned long i = 2; i < image_size; i++) {
		
		if (BA_get_bit(bit_array, i) == 0) {

			/** :) kdyz najdeme prvocislo tak to znamena ze 
			 * v poli image->data mame v LSB bitu v bajtu 
			 * na indexu i ulozeny jeden bit znaku zakodovane
			 * zpravy
			 */ 

			// n-ty bit (nbits) znaku (ch) nastavime na hodnotu LSB bitu
			// prvociselne polozky pole image->data
         		DU1_SET_BIT((&ch), nbits, DU1_GET_BIT((&image->data[i]), 0));

			if((++nbits) == CHAR_BIT) { // mame j*z cely znak? 

				if (ch == 0) {  
					break; 
				} else if (isprint(ch)) {
					printf("%c", ch);
					nbits = 0; 
				} else {  
					FatalError("Zprava obsahuje netisknutelny znak!");
				}
			}
		}	
	}

	free(image);

	return EXIT_SUCCESS; 	
}
예제 #2
0
int main(int argc, char *argv[])
{
	if (argc == 2)				// ak nie je zadany chybny pocet argumentov
	{
		struct ppm *picture = ppm_read(argv[1]);  // nacitanie struktury
		char sprava = 0,index2=0,bit;
		unsigned long index;
		int nullbyte = 0;
		
		if (picture == NULL) 			// ak nacitanie skoncilo s chybou
			FatalError("Chybne zadany subor\n");
		
		BitArray(bitmap,LIMIT);   // iniciaizacia bit. pola
	
		Eratosthenes(bitmap);   // vypocet prvociselnych indexov
			
		for (index=2;index <= (LIMIT); index++)	
		{
			if (GetBit(bitmap,index) == 0)   // prvociselny index
			{	
				bit = DU1_GET_BIT((&(picture->data)[index+1]),0); // vyber LSB z bytu
				DU1_SET_BIT((&sprava),index2,bit);				  // nastav na nasledujuci index vybrany bit
												
				if (index2 < (BYTE - 1))							  // ci uz nie je zaplneny cely byte
				{
					index2++;
				} 
					else if ((sprava != '\0') && (isprint(sprava)))   // ak nie je znak nulovy alebo netlacitelny
					{
						printf("%c",sprava);						  // vytlaci 1 znak zo spravy
						index2 = 0; 								  // vynulue pocet nast. bitov a znak
						sprava = 0;
					}
						else if (sprava == '\0')					 // ak je znak nulovy -> koniec spravy
						{
							printf("\n");
							nullbyte = 1;
							break;
						}
						else                						// ak je znak netlacitelny -> fatal error
							{									
								free(picture);
								FatalError("Sprava ulozena v subore: %s nie je korektna\n",argv[1]);
							}
			}		
		}
		
	if (nullbyte == 0)
	{
		free(picture);
		FatalError("Sprava ulozena v subore: %s nie je korektne ukoncena\n",argv[1]);
		return 1;
	} else
		{
			free(picture);													// uvolnenie alokovanej pamate
			return 0;
		}
		
	} else
		{
			FatalError("Nespravne zadane argumenty\n");
			return 1;
		}
	
	
}