#include #include #include #include #include /*---------------------------------------------------------*/ /* Programme : lec_mtp.c */ /* */ /* . lit le header binaire d'un fichier OpenMTP */ /* . imprime des elements du header */ /* date/slot/channel/nombre de pixels et lignes */ /* (programme base sur ~/iddi/src/header.c ) */ /* */ /* (Read and Print information on the OpenMTP file) */ /* */ /* PROGRAMME DEPENDANT DU FORMAT du NOM DE FICHIER */ /* */ /* Appel : */ /* lec_mtp filename */ /* avec filename : nom du fichier meteosat */ /* (au format OpenMTP) */ /* */ /* Compilation : */ /* cc -o lec_mtp lec_mtp.c */ /* */ /* Auteur : */ /* ICARE - A.Alias Aout 2003 */ /* */ /* Documentation : */ /* Ref. EUM FG "Visible, Infra Red and Water Vapour OpentMTP */ /* format Guide" rev2.1, April 2000 */ /* EUMETSAT http://www.eumetsat.de/ * /*---------------------------------------------------------*/ main(int argc,char *argv[]) { FILE *fp; char *filename,*mot,ctab[9]; int an,mm,jj,slot,date; int tab[40],lan,lslot,ldate,lchan,npixels,nlines; char lpltfrm[3],lcalco[6],lspace[4],chan[7]; char can[5],cmm[3],cjj[3],cslot[3]; int offset,ret_flag,err,err1,i; /* ---------------- SYNTAXE D'APPEL DE L'EXECUTABLE -------- */ if (argc != 2) { printf ("\n\nerreur syntaxe : lec_mtp filename \n\n"); exit(1); } /* ---------------- PROGRAMME PRINCIPAL -------------------- */ filename=argv[1]; fp=fopen(filename,"r"); if(!fp) { printf("Ouverture de fichier impossible : %s .\n", filename); exit(1); } /* Lecture des 18*4bytes */ offset=1345; ret_flag=fseek(fp, offset, SEEK_SET); if(ret_flag) { printf("Erreur positionnement : %s.\n",filename); fclose(fp); exit(1); } ret_flag=fread(ctab, 8, 1, fp); if(ret_flag!=1) { printf("Erreur de lecture (1) : %s\n", filename); fclose(fp); exit(1); } ctab[8]='\0'; ret_flag=strcmp(ctab," PIMA1AM"); if (ret_flag!=0) { ret_flag=strcmp(ctab," PIMA2AM"); if (ret_flag!=0) { ret_flag=strcmp(ctab," PVISBAN"); if (ret_flag!=0) { ret_flag=strcmp(ctab," PPWV1AP"); if (ret_flag!=0) { ret_flag=strcmp(ctab," PPWV2AP"); if (ret_flag!=0) { printf(" Erreur fichier non OpenMTP : %s. \n",filename); exit(1); } } } } } ret_flag=fread(tab, 4, 6, fp); if(ret_flag!=6) { printf("Erreur de lecture (2): %s\n", filename); fclose(fp); exit(1); } /* Permet d'avoir les bytes dans le bon sens */ lan=ntohl(tab[0]); lslot=ntohl(tab[2]); ldate=ntohl(tab[4]); ret_flag=fread(ctab, 4, 1, fp); if(ret_flag!=1) { printf("Erreur de lecture (3) : %s\n", filename); fclose(fp); exit(1); } sscanf(ctab,"%2s",lpltfrm); lpltfrm[2]='\0'; ret_flag=fread(tab, 4, 2, fp); if(ret_flag!=2) { printf("Erreur de lecture (4) : %s\n", filename); fclose(fp); exit(1); } lchan=ntohl(tab[1]); if(lchan==0) strcpy(&chan[0],"NA"); if(lchan==1) strcpy(&chan[0],"VISS"); if(lchan==2) strcpy(&chan[0],"VISN"); if(lchan==3) strcpy(&chan[0],"VISN&S"); if(lchan==4) strcpy(&chan[0],"IR2"); if(lchan==5) strcpy(&chan[0],"IR2"); if(lchan==6) strcpy(&chan[0],"WV1"); if(lchan==7) strcpy(&chan[0],"WV2"); ret_flag=fread(ctab, 8, 1, fp); if(ret_flag!=1) { printf("Erreur de lecture (5) : %s\n", filename); fclose(fp); exit(1); } mot=ctab; for (i=0;i<5;i++,mot++) lcalco[i]=*mot; for (i=0;i<3;i++,mot++) lspace[i]=*mot; lcalco[5]='\0'; lspace[3]='\0'; ctab[8]='\0'; ret_flag=fread(ctab, 7, 1, fp); if(ret_flag!=1) { printf("Erreur de lecture (5) : %s\n", filename); fclose(fp); exit(1); } ret_flag=fread(tab, 4, 20, fp); if(ret_flag!=20) { printf("Erreur de lecture (6) : %s\n", filename); fclose(fp); exit(1); } nlines=ntohl(tab[18]); npixels=ntohl(tab[19]); fclose(fp); printf("\nParametres du fichier : %s\n",filename); printf(" date : %06d slot : %d\n",ldate,lslot); printf(" satellite : %s canal : %s \n",lpltfrm,chan); printf(" calco : %5s space : %3s \n",lcalco,lspace); printf(" taille de l'image : %dx%d pixels\n\n",nlines,npixels); }