Index: trunk/AddOn/TAcq/minifits.cc
===================================================================
--- trunk/AddOn/TAcq/minifits.cc	(revision 3639)
+++ trunk/AddOn/TAcq/minifits.cc	(revision 3658)
@@ -5,6 +5,50 @@
 // #include <iostream>
 
+//////////////////////////////////////////////////////////////////////
+///     Classe  MiniFITSException
+//////////////////////////////////////////////////////////////////////
+
+
+/* --Methode-- */
+MiniFITSException::MiniFITSException(const char * m)   throw()
+{
+  if (m!=NULL) { 
+    strncpy(msg_, m, MFEX_MAXMSGLEN-1);
+    msg_[MFEX_MAXMSGLEN-1] = '\0';
+  }
+  else msg_[0] = '\0';
+}
+
+/* --Methode-- */
+MiniFITSException::MiniFITSException(const string& m)   throw()
+{
+  strncpy(msg_, m.c_str(), MFEX_MAXMSGLEN-1);
+  msg_[MFEX_MAXMSGLEN-1] = '\0';
+}
+
+/* --Methode-- */
+MiniFITSException::~MiniFITSException()  throw()
+{
+}
+
+/* --Methode-- */
+const char* MiniFITSException::what() const throw()
+{
+  return msg_;
+}
+
+/* --Methode-- */
+string const MiniFITSException::Msg() const 
+{
+  return (string(msg_));
+}
+
+//////////////////////////////////////////////////////////////////////
+///     Classe  MiniFITSFile
+//////////////////////////////////////////////////////////////////////
+
 #define MFITSHLEN 2880
 
+/* --Methode-- */
 MiniFITSFile::MiniFITSFile()
 {
@@ -12,4 +56,5 @@
 }
 
+/* --Methode-- */
 MiniFITSFile::MiniFITSFile(string const & nom, MiniFITS_Mode rwm)
 {
@@ -18,4 +63,5 @@
 }
 
+/* --Methode-- */
 MiniFITSFile::MiniFITSFile(const char* nom, MiniFITS_Mode rwm)
 {
@@ -25,4 +71,5 @@
 
 
+/* --Methode-- */
 MiniFITSFile::~MiniFITSFile()
 {
@@ -31,4 +78,5 @@
 }
 
+/* --Methode-- */
 void MiniFITSFile::Init()
 {
@@ -40,7 +88,9 @@
   totwsz = 0;
   header = new char[MFITSHLEN];
-
-}
-
+  for(int i=0; i<MFITSHLEN; i++)  header[i]=' ';
+  nkeya_ = 0;
+}
+
+/* --Methode-- */
 void MiniFITSFile::Open(const char* nom, MiniFITS_Mode rwm)
 {
@@ -65,4 +115,5 @@
 }
 
+/* --Methode-- */
 void MiniFITSFile::Close()
 {
@@ -71,6 +122,11 @@
   	  // on remplit avec des zeros pour avoir une longueur multiple de 2880	
   	  size_t padsz = MFITSHLEN-(totwsz%MFITSHLEN);
-  	  for(size_t k=0; k<padsz; k++) header[k]=0;
-  	  fwrite(header, 1, padsz, fip);
+          char zeros[160];
+  	  for(size_t k=0; k<160; k++) zeros[k]=0;
+	  while(padsz>160) {
+	    fwrite(zeros, 1, 160, fip);
+	    padsz-=160;
+	  }
+	  if (padsz>0)  fwrite(zeros, 1, padsz, fip);
   	  // On reecrit l'entete 
   	  FillHeader();
@@ -84,4 +140,5 @@
 }
 
+/* --Methode-- */
 void MiniFITSFile::setDTypeNaxis(MiniFITS_DT dt, size_t na1, size_t na2)
 {
@@ -95,4 +152,5 @@
 }
 
+/* --Methode-- */
 string MiniFITSFile::DataTypeToString()
 {
@@ -103,4 +161,5 @@
 }
 
+/* --Methode-- */
 int MiniFITSFile::Write(void* data, size_t sz)
 {
@@ -110,4 +169,5 @@
 }
 
+/* --Methode-- */
 int MiniFITSFile::Read(void* data, size_t sz, size_t offset)
 {
@@ -117,7 +177,7 @@
 }
 
+/* --Methode-- */
 void MiniFITSFile::FillHeader()
 {
-  for(int i=0; i<MFITSHLEN; i++)  header[i]=' ';
   strcpy(header, "SIMPLE  =                    T / file does conform to FITS standard");
   header[strlen(header)] = ' ';
@@ -138,8 +198,8 @@
   sprintf(buff, "NAXIS2  = %20ld /   number of bits per data pixel", (long)nax2);
   buff[strlen(buff)] = ' ';
-  buff = header+400;
+  buff = header+400+nkeya_*80;
   strcpy(buff,"COMMENT  BAO-Radio / MiniFITSFile ");
   buff[strlen(buff)] = ' ';
-  buff = header+480;
+  buff = header+480+nkeya_*80;
   strcpy(buff,"END");
   buff[strlen(buff)] = ' ';
@@ -148,5 +208,76 @@
 }
 
-
+/* --Methode-- */
+int MiniFITSFile::AddKeyI(const char* key, long val, const char* comm)
+{
+  if (nkeya_ >= 29) return 0;
+  char cle[10];
+  strncpy(cle,key,8);
+  cle[8]='=';
+  for(int i=0;i<8;i++) 
+    if (cle[i]=='\0') cle[i]=' ';
+  cle[9]='\0';
+  char* buff=header+400+nkeya_*80;
+  if (comm!=NULL) {
+    char tcom[50];
+    strncpy(tcom,comm,48);  
+    tcom[48]='\0';
+    sprintf(buff,"%s %20ld / %s", cle, val, tcom);
+  }
+  else  sprintf(buff,"%s %20ld / ", cle, val);
+  buff[strlen(buff)]=' ';
+  nkeya_++;
+  return nkeya_;
+}
+
+/* --Methode-- */
+int MiniFITSFile::AddKeyD(const char* key, double val, const char* comm)
+{
+  if (nkeya_ >= 29) return 0;
+  char cle[10];
+  strncpy(cle,key,8);
+  cle[8]='=';
+  for(int i=0;i<8;i++) 
+    if (cle[i]=='\0') cle[i]=' ';
+  cle[9]='\0';
+  char* buff=header+400+nkeya_*80;
+  if (comm!=NULL) {
+    char tcom[50];
+    strncpy(tcom,comm,48);  
+    tcom[48]='\0';
+    sprintf(buff,"%s %20lg / %s", cle, val, tcom);
+  }
+  else  sprintf(buff,"%s %20ld / ", cle, val);
+  buff[strlen(buff)] = ' ';
+  nkeya_++;
+  return nkeya_;
+}
+
+/* --Methode-- */
+int MiniFITSFile::AddKeyS(const char* key, const char* val, const char* comm)
+{
+  if (nkeya_ >= 29) return 0;
+  char cle[10];
+  strncpy(cle,key,8);
+  cle[8]='=';
+  for(int i=0;i<8;i++) 
+    if (cle[i]=='\0') cle[i]=' ';
+  cle[9]='\0';
+  char tcom[72];
+  tcom[0]='\'';
+  strncpy(tcom+1,val,65);
+  int l=strlen(tcom);
+  strcpy(tcom+l,"' / ");
+  l+=4;
+  if ((l<70)&&(comm!=NULL)) strncpy(tcom+l,comm,70-l);
+  tcom[70]='\0';
+  char* buff=header+400+nkeya_*80;
+  sprintf(buff,"%s %s", cle, tcom);
+  buff[strlen(buff)] = ' ';
+  nkeya_++;
+  return nkeya_;
+}
+
+/* --Methode-- */
 void MiniFITSFile::DecodeHeader()
 {
