Changeset 3658 in Sophya for trunk/AddOn/TAcq/minifits.cc
- Timestamp:
- Oct 18, 2009, 11:10:33 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/AddOn/TAcq/minifits.cc
r3639 r3658 5 5 // #include <iostream> 6 6 7 ////////////////////////////////////////////////////////////////////// 8 /// Classe MiniFITSException 9 ////////////////////////////////////////////////////////////////////// 10 11 12 /* --Methode-- */ 13 MiniFITSException::MiniFITSException(const char * m) throw() 14 { 15 if (m!=NULL) { 16 strncpy(msg_, m, MFEX_MAXMSGLEN-1); 17 msg_[MFEX_MAXMSGLEN-1] = '\0'; 18 } 19 else msg_[0] = '\0'; 20 } 21 22 /* --Methode-- */ 23 MiniFITSException::MiniFITSException(const string& m) throw() 24 { 25 strncpy(msg_, m.c_str(), MFEX_MAXMSGLEN-1); 26 msg_[MFEX_MAXMSGLEN-1] = '\0'; 27 } 28 29 /* --Methode-- */ 30 MiniFITSException::~MiniFITSException() throw() 31 { 32 } 33 34 /* --Methode-- */ 35 const char* MiniFITSException::what() const throw() 36 { 37 return msg_; 38 } 39 40 /* --Methode-- */ 41 string const MiniFITSException::Msg() const 42 { 43 return (string(msg_)); 44 } 45 46 ////////////////////////////////////////////////////////////////////// 47 /// Classe MiniFITSFile 48 ////////////////////////////////////////////////////////////////////// 49 7 50 #define MFITSHLEN 2880 8 51 52 /* --Methode-- */ 9 53 MiniFITSFile::MiniFITSFile() 10 54 { … … 12 56 } 13 57 58 /* --Methode-- */ 14 59 MiniFITSFile::MiniFITSFile(string const & nom, MiniFITS_Mode rwm) 15 60 { … … 18 63 } 19 64 65 /* --Methode-- */ 20 66 MiniFITSFile::MiniFITSFile(const char* nom, MiniFITS_Mode rwm) 21 67 { … … 25 71 26 72 73 /* --Methode-- */ 27 74 MiniFITSFile::~MiniFITSFile() 28 75 { … … 31 78 } 32 79 80 /* --Methode-- */ 33 81 void MiniFITSFile::Init() 34 82 { … … 40 88 totwsz = 0; 41 89 header = new char[MFITSHLEN]; 42 43 } 44 90 for(int i=0; i<MFITSHLEN; i++) header[i]=' '; 91 nkeya_ = 0; 92 } 93 94 /* --Methode-- */ 45 95 void MiniFITSFile::Open(const char* nom, MiniFITS_Mode rwm) 46 96 { … … 65 115 } 66 116 117 /* --Methode-- */ 67 118 void MiniFITSFile::Close() 68 119 { … … 71 122 // on remplit avec des zeros pour avoir une longueur multiple de 2880 72 123 size_t padsz = MFITSHLEN-(totwsz%MFITSHLEN); 73 for(size_t k=0; k<padsz; k++) header[k]=0; 74 fwrite(header, 1, padsz, fip); 124 char zeros[160]; 125 for(size_t k=0; k<160; k++) zeros[k]=0; 126 while(padsz>160) { 127 fwrite(zeros, 1, 160, fip); 128 padsz-=160; 129 } 130 if (padsz>0) fwrite(zeros, 1, padsz, fip); 75 131 // On reecrit l'entete 76 132 FillHeader(); … … 84 140 } 85 141 142 /* --Methode-- */ 86 143 void MiniFITSFile::setDTypeNaxis(MiniFITS_DT dt, size_t na1, size_t na2) 87 144 { … … 95 152 } 96 153 154 /* --Methode-- */ 97 155 string MiniFITSFile::DataTypeToString() 98 156 { … … 103 161 } 104 162 163 /* --Methode-- */ 105 164 int MiniFITSFile::Write(void* data, size_t sz) 106 165 { … … 110 169 } 111 170 171 /* --Methode-- */ 112 172 int MiniFITSFile::Read(void* data, size_t sz, size_t offset) 113 173 { … … 117 177 } 118 178 179 /* --Methode-- */ 119 180 void MiniFITSFile::FillHeader() 120 181 { 121 for(int i=0; i<MFITSHLEN; i++) header[i]=' ';122 182 strcpy(header, "SIMPLE = T / file does conform to FITS standard"); 123 183 header[strlen(header)] = ' '; … … 138 198 sprintf(buff, "NAXIS2 = %20ld / number of bits per data pixel", (long)nax2); 139 199 buff[strlen(buff)] = ' '; 140 buff = header+400 ;200 buff = header+400+nkeya_*80; 141 201 strcpy(buff,"COMMENT BAO-Radio / MiniFITSFile "); 142 202 buff[strlen(buff)] = ' '; 143 buff = header+480 ;203 buff = header+480+nkeya_*80; 144 204 strcpy(buff,"END"); 145 205 buff[strlen(buff)] = ' '; … … 148 208 } 149 209 150 210 /* --Methode-- */ 211 int MiniFITSFile::AddKeyI(const char* key, long val, const char* comm) 212 { 213 if (nkeya_ >= 29) return 0; 214 char cle[10]; 215 strncpy(cle,key,8); 216 cle[8]='='; 217 for(int i=0;i<8;i++) 218 if (cle[i]=='\0') cle[i]=' '; 219 cle[9]='\0'; 220 char* buff=header+400+nkeya_*80; 221 if (comm!=NULL) { 222 char tcom[50]; 223 strncpy(tcom,comm,48); 224 tcom[48]='\0'; 225 sprintf(buff,"%s %20ld / %s", cle, val, tcom); 226 } 227 else sprintf(buff,"%s %20ld / ", cle, val); 228 buff[strlen(buff)]=' '; 229 nkeya_++; 230 return nkeya_; 231 } 232 233 /* --Methode-- */ 234 int MiniFITSFile::AddKeyD(const char* key, double val, const char* comm) 235 { 236 if (nkeya_ >= 29) return 0; 237 char cle[10]; 238 strncpy(cle,key,8); 239 cle[8]='='; 240 for(int i=0;i<8;i++) 241 if (cle[i]=='\0') cle[i]=' '; 242 cle[9]='\0'; 243 char* buff=header+400+nkeya_*80; 244 if (comm!=NULL) { 245 char tcom[50]; 246 strncpy(tcom,comm,48); 247 tcom[48]='\0'; 248 sprintf(buff,"%s %20lg / %s", cle, val, tcom); 249 } 250 else sprintf(buff,"%s %20ld / ", cle, val); 251 buff[strlen(buff)] = ' '; 252 nkeya_++; 253 return nkeya_; 254 } 255 256 /* --Methode-- */ 257 int MiniFITSFile::AddKeyS(const char* key, const char* val, const char* comm) 258 { 259 if (nkeya_ >= 29) return 0; 260 char cle[10]; 261 strncpy(cle,key,8); 262 cle[8]='='; 263 for(int i=0;i<8;i++) 264 if (cle[i]=='\0') cle[i]=' '; 265 cle[9]='\0'; 266 char tcom[72]; 267 tcom[0]='\''; 268 strncpy(tcom+1,val,65); 269 int l=strlen(tcom); 270 strcpy(tcom+l,"' / "); 271 l+=4; 272 if ((l<70)&&(comm!=NULL)) strncpy(tcom+l,comm,70-l); 273 tcom[70]='\0'; 274 char* buff=header+400+nkeya_*80; 275 sprintf(buff,"%s %s", cle, tcom); 276 buff[strlen(buff)] = ' '; 277 nkeya_++; 278 return nkeya_; 279 } 280 281 /* --Methode-- */ 151 282 void MiniFITSFile::DecodeHeader() 152 283 {
Note:
See TracChangeset
for help on using the changeset viewer.