Witam, mam takie komunikaty przy kompilacji:
modul.c: In function ‘czytaj’:
modul.c18: warning: assignment from incompatible pointer type [enabled by default]
obraz->tablica = (int()[obraz->wymx])malloc(obraz->wymxobraz->wymy*sizeof(int));
^
modul.c: In function ‘przetwarzaj_opcje’:
modul.c4: warning: passing argument 2 of ‘czytaj’ from incompatible pointer type [enabled by default]
czytaj(obraz, wybor->plik_we);}
^
modul.c5: note: expected ‘struct w_opcje *’ but argument is of type ‘struct FILE *’
int czytaj(s_obraz *obraz, w_opcje *wybor){
^
modul.c4: warning: passing argument 2 of ‘zapis’ from incompatible pointer type [enabled by default]
zapis(obraz, wybor->plik_we);
^
In file included from modul.c0:
modul.h5: note: expected ‘struct w_opcje *’ but argument is of type ‘struct FILE *’
int zapis(s_obraz *obraz, w_opcje *wybor);
^
Oto plik modul.c
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
#include "modul.h"
#define W_OK 0 /* wartosc oznaczajaca brak bledow */
#define B_NIEPOPRAWNAOPCJA -1 /* kody bledow rozpoznawania opcji */
#define B_BRAKNAZWY -2
#define B_BRAKWARTOSCI -3
#define B_BRAKPLIKU -4
#define DL_LINII 1024
/*Funkcja czytaj*/
int czytaj(s_obraz *obraz, w_opcje *wybor){
char buf[DL_LINII]; /* bufor pomocniczy do czytania naglowka i komentarzy */
int znak; /* zmienna pomocnicza do czytania komentarzy */
int koniec=0; /* czy napotkano koniec danych w pliku */
int i,j;
/*Sprawdzenie czy podano prawidłowy uchwyt pliku */
if (wybor->plik_we==NULL) {
fprintf(stderr,"Blad: Nie podano uchwytu do pliku\n");
return(0);
}
/* Sprawdzenie "numeru magicznego" - powinien być P2 */
if (fgets(buf,DL_LINII,wybor->plik_we)==NULL) /* Wczytanie pierwszej linii pliku do bufora */
koniec=1; /* Nie udalo sie? Koniec danych! */
if ( (buf[0]!='P') || (buf[1]!='2') || koniec) { /* Czy jest magiczne "P2"? */
fprintf(stderr,"Blad: To nie jest plik PGM\n");
return(0);
}
/* Pominiecie komentarzy */
do {
if ((znak=fgetc(wybor->plik_we))=='#') { /* Czy linia rozpoczyna sie od znaku '#'? */
if (fgets(buf,DL_LINII,wybor->plik_we)==NULL) /* Przeczytaj ja do bufora */
koniec=1; /* Zapamietaj ewentualny koniec danych */
} else {
ungetc(znak,wybor->plik_we); /* Gdy przeczytany znak z poczatku linii */
} /* nie jest '#' zwroc go */
} while (znak=='#' && !koniec); /* Powtarzaj dopoki sa linie komentarza */
/* i nie nastapil koniec danych */
/* Pobranie wymiarow obrazu i liczby odcieni szarosci */
if (fscanf(wybor->plik_we,"%d %d %d",&(obraz->wymx),&(obraz->wymy),&(obraz->szarosci))!=3) {
fprintf(stderr,"Blad: Brak wymiarow obrazu lub liczby stopni szarosci\n");
return(0);
}
/* Pobranie obrazu i zapisanie w tablicy dynamicznej*/
obraz->wymx = 5; obraz->wymy = 7;
int (*tablica)[obraz->wymx];
obraz->tablica = (int(*)[obraz->wymx])malloc(obraz->wymx*obraz->wymy*sizeof(int));
for (i=0;i<obraz->wymy;i++) {
for (j=0;j<obraz->wymx;j++) {
if (fscanf(wybor->plik_we,"%d",&(obraz->tablica[i][j]))!=1) {
fprintf(stderr,"Blad: Niewlasciwe wymiary obrazu\n");
return(0);
}
}
}
return ((obraz->wymx)*(obraz->wymy)); /* Czytanie zakonczone sukcesem */
} /* Zwroc liczbe wczytanych pikseli */
int przetwarzaj_opcje(int argc, char **argv, w_opcje *wybor, s_obraz *obraz) {
int i, prog;
char *nazwa_pliku_we, *nazwa_pliku_wy;
wyzeruj_opcje(wybor);
wybor->plik_wy=stdout; /* na wypadek gdy nie podano opcji "-o" */
for (i=1; i<argc; i++) {
if (argv[i][0] != '-') /* blad: to nie jest opcja - brak znaku "-" */
return B_NIEPOPRAWNAOPCJA;
switch (argv[i][1]) {
case 'i': { /* opcja z nazwa pliku wejsciowego */
if (++i<argc) { /* wczytujemy kolejny argument jako nazwe pliku */
obraz->nazwa_we=argv[i];
if (strcmp(obraz->nazwa_we,"-")==0) /* gdy nazwa jest "-" */
wybor->plik_we=stdin; /* ustwiamy wejscie na stdin */
else { /* otwieramy wskazany plik */
wybor->plik_we=fopen(obraz->nazwa_we,"r");
czytaj(obraz, wybor->plik_we);}
} else
return B_BRAKNAZWY; /* blad: brak nazwy pliku */
break;
}
case 'o': { /* opcja z nazwa pliku wyjsciowego */
if (++i<argc) { /* wczytujemy kolejny argument jako nazwe pliku */
obraz->nazwa_wy=argv[i];
if (strcmp(obraz->nazwa_wy,"-")==0)/* gdy nazwa jest "-" */
wybor->plik_wy=stdout; /* ustwiamy wyjscie na stdout */
else{ /* otwieramy wskazany plik */
wybor->plik_wy=fopen(obraz->nazwa_wy,"w");
zapis(obraz, wybor->plik_we);
}} else
return B_BRAKNAZWY; /* blad: brak nazwy pliku */
break;
}
case 'p': {
if (++i<argc) { /* wczytujemy kolejny argument jako wartosc progu */
if (sscanf(argv[i],"%d",&prog)==1) {
wybor->progowanie=1;
wybor->w_progu=prog;
} else
return B_BRAKWARTOSCI; /* blad: niepoprawna wartosc progu */
} else
return B_BRAKWARTOSCI; /* blad: brak wartosci progu */
break;
}
case 'n': { /* mamy wykonac negatyw */
wybor->negatyw=1;
break;
}
case 'k': { /* mamy wykonac konturowanie */
wybor->konturowanie=1;
break;
}
case 'd': { /* mamy wyswietlic obraz */
wybor->wyswietl=1;
break;
}
default: /* nierozpoznana opcja */
return B_NIEPOPRAWNAOPCJA;
} /*koniec switch */
} /* koniec for */
if (wybor->plik_we!=NULL) /* ok: wej. strumien danych zainicjowany */
return W_OK;
else
return B_BRAKPLIKU; /* blad: nie otwarto pliku wejsciowego */
}
/* Funkcja wyswietlania obrazu za pomoca 'display' */
void wyswietl(char *n_pliku) {
char polecenie[DL_LINII]; /* bufor pomocniczy do zestawienia polecenia */
strcpy(polecenie,"display "); /* konstrukcja polecenia postaci */
strcat(polecenie,n_pliku); /* display "nazwa_pliku" & */
strcat(polecenie," &");
printf("%s\n",polecenie); /* wydruk kontrolny polecenia */
system(polecenie); /* wykonanie polecenia */
}
/*Wyzeruj opcje*/
void wyzeruj_opcje(w_opcje *wybor) {
wybor->plik_we=NULL;
wybor->plik_wy=NULL;
wybor->negatyw=0;
wybor->konturowanie=0;
wybor->progowanie=0;
wybor->wyswietl=0;
}
/* Funkcja zapisu obrazu do pliku */
int zapis(s_obraz *obraz, w_opcje *opcje) {
unsigned int i,j;
if(opcje->plik_wy == NULL) { fprintf(stderr,"Blad: Nie podano uchwytu pliku\n"); return 0; }
fprintf(opcje->plik_wy,"P2\n"); fprintf(opcje->plik_wy,"%d %d\n",obraz->wymx,obraz->wymy); fprintf(opcje->plik_wy,"%d\n",obraz->szarosci);
for(j = 0;j < obraz->wymy; j++) {
for(i = 0;i < obraz->wymx; i++) {
fprintf(opcje->plik_wy,"%3d ",obraz->tablica[j][i]); }
i = 0; }
return 1;}
/* Funkcja negatywu */
void negatyw(s_obraz *obraz){
int i, j;
for (j=0; j<obraz->wymx; j++){
for (i=0; i<obraz->wymy; i++){
obraz->tablica[i][j]=obraz->odcieni-obraz->tablica[i][j];
}
}
}
/* Funkcja progowania */
void progowanie(s_obraz *obraz, int prog){
int i, j;
for (j=0; j<obraz->wymx; j++){
for (i=0; i<obraz->wymy; i++){
if (obraz->tablica[i][j]<=prog)
obraz->tablica[i][j]=0;
else if (obraz->tablica[i][j]>prog)
obraz->tablica[i][j]=obraz->odcieni;
}
}
}
/* Funkcja konturowania */
void konturowanie(s_obraz *obraz){
int i, j;
for (j=0; j<obraz->wymx; j++){
for (i=0; i<obraz->wymy; i++){
obraz->tablica[i][j]=abs(obraz->tablica[i][1,j]-obraz->tablica[i][j])+abs(obraz->tablica[i][j+1]-obraz->tablica[i][j]);
}
}
}
/* Funkcja rozmywania poziomego */
void rozmywanie(s_obraz *obraz){
int i, j;
for (j=0; j<obraz->wymx; j++){
for (i=1; i<obraz->wymy; i++){
obraz->tablica[i][j]=(((obraz->tablica[i-1][j])+(obraz->tablica[i][j])+(obraz->tablica[i+1][j]))/3);
}
}
}
Modul.h:
#ifndef MODUL_H
#define MODUL_H
/* strukura do zapamietywania opcji podanych w wywolaniu programu */
typedef struct {
FILE *plik_we, *plik_wy; /* uchwyty do pliku wej. i wyj. */
int negatyw,progowanie,konturowanie,wyswietl; /* opcje */
int w_progu;
} w_opcje;
typedef struct {
char *nazwa_we, *nazwa_wy;
int szarosci;
int odcieni;
int wymx;
int wymy;
int **tablica;
} s_obraz;
int przetwarzaj_opcje(int argc, char **argv, w_opcje *wybor, s_obraz *obraz);
int czytaj(s_obraz *obraz, w_opcje *opcje);
void wyswietl(char *n_pliku);
int zapis(s_obraz *obraz, w_opcje *wybor);
void negatyw(s_obraz *obraz);
void progowanie(s_obraz *obraz, int prog);
void konturowanie(s_obraz *obraz);
void rozmywanie(s_obraz *obraz);
void wyzeruj_opcje(w_opcje *wybor);
#endif
Ktoś może pomóc?