void ucitajPPM(slika* sl, char* datoteka) { FILE *fin; char line[256]; int slikaX, slikaY, imax, ix, iy, i, ib; GLubyte *pixmap; if(!(fin = fopen(datoteka, "r"))) greska("ne mogu otvoriti datoteku!"); fgets(line, 256, fin); if(strcmp(line, "P3\n")) greska("nije PPM format!"); fgets(line, 256, fin); if(line[0] != '#') greska("ocekujemo komentar!"); fscanf(fin, "%d%d", &slikaX, &slikaY); printf("dimX = %d dimY = %d\n", slikaX, slikaY); fscanf(fin, "%d", &imax); if(imax != 255) greska("ocekujemo imax = 255!"); pixmap = (GLubyte *)malloc(slikaY * slikaX * 3 * sizeof(GLubyte)); for(iy = 0; iy < slikaY; iy++) for(ix = 0; ix < slikaX; ix++) for(i = 0; i < 3; i++) { fscanf(fin, "%d", &ib); pixmap[((slikaY - 1 - iy) * slikaX + ix) * 3 + i] = (GLubyte)ib; } fclose(fin); sl->dimX = slikaX; sl->dimY = slikaY; sl->pixmap = pixmap; } // ucitajPPM
int main(int argc, char *argv[]) { char linija[MAKS_LINIJA]; FILE * izlaz; int ispisi_v = 0, ispisi_m = 0; if (argc > 2) greska("Greska: neispravan poziv.\n"); if (argc == 1) ispisi_v = ispisi_m = 1; else { /* Funkcija strcasecmp poredi niske ignorisuci razliku izmedju malih i velikih slova. */ if (strcasecmp(argv[1], "-v") == 0) ispisi_v = 1; else if (strcasecmp(argv[1], "-m") == 0) ispisi_m = 1; else greska("Greska: neispravna opcija.\n"); } izlaz = fopen("izlaz.txt", "w"); if (izlaz == NULL) greska("Greska: neuspesno otvaranje izlazne datoteke.\n"); while (fgets(linija, MAKS_LINIJA, stdin) != NULL) { if ((ispisi_m && islower(linija[0])) || (ispisi_v && isupper(linija[0])) || (ispisi_m && ispisi_v)) fputs(linija, izlaz); } /* Zatvara se datoteka. */ fclose(izlaz); return 0; }