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; }
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; } }