Changeset 41674 for trunk/Ohana/src/opihi/cmd.data
- Timestamp:
- Jul 1, 2021, 1:55:50 PM (5 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/opihi/cmd.data/wd.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/cmd.data/wd.c
r38441 r41674 1 1 # include "data.h" 2 FILE *gfits_open_and_extend (char *filename); 2 3 3 4 int wd (int argc, char **argv) { … … 98 99 // it updates NEXTEND and set EXTEND to TRUE, and modifies the PHU header (neither should happen) 99 100 // if those keywords do not exist... 100 if (Extend) { 101 Header Xhead; 102 FILE *f; 103 off_t nbytes; 104 int status, Nextend; 105 106 /* assume failure means non-existent file */ 107 if (!gfits_read_header (argv[2], &Xhead)) { 108 109 gfits_init_header (&Xhead); 110 Xhead.bitpix = 16; 111 Xhead.extend = TRUE; 112 gfits_create_header (&Xhead); 113 114 gfits_modify (&Xhead, "NEXTEND", "%d", 1, 0); 115 f = fopen (argv[2], "w"); 116 fclose (f); 117 } 118 119 gfits_modify_alt (&Xhead, "EXTEND", "%t", 1, TRUE); 120 121 Nextend = 0; 122 gfits_scan (&Xhead, "NEXTEND", "%d", 1, &Nextend); 123 Nextend ++; 124 gfits_modify (&Xhead, "NEXTEND", "%d", 1, Nextend); 125 126 /* write the main header to the start of the file */ 127 f = fopen (argv[2], "r+"); 128 if (f == NULL) { 129 gprint (GP_ERR, "failed to write file\n"); 101 if (Extend && !CompressMode) { 102 int status = TRUE; 103 104 FILE *f = gfits_open_and_extend (argv[2]); 105 if (!f) { 106 gprint (GP_ERR, "failed to extend file %s\n", argv[2]); 130 107 status = FALSE; 131 108 goto done1; 132 109 } 133 134 /* position to begining of file to write header */ 135 fseeko (f, 0LL, SEEK_SET); 136 nbytes = fwrite (Xhead.buffer, 1, Xhead.datasize, f); 137 if (nbytes != Xhead.datasize) { 138 gprint (GP_ERR, "ERROR: failed writing data to image header\n"); 139 status = FALSE; 140 goto done1; 141 } 142 110 143 111 /* fix up header */ 144 112 { … … 153 121 /* position to end of file to write new extend */ 154 122 fseeko (f, 0LL, SEEK_END); 155 nbytes = fwrite (temp_header.buffer, 1, temp_header.datasize, f); 156 fclose (f); 123 off_t nbytes = fwrite (temp_header.buffer, 1, temp_header.datasize, f); 157 124 if (nbytes != temp_header.datasize) { 125 fclose (f); 158 126 gprint (GP_ERR, "failed to write file\n"); 159 127 status = FALSE; 160 128 goto done1; 161 129 } 130 162 131 /* write the matrix buffer (automatically goes to end of file */ 163 if (!gfits_write_matrix (argv[2], &temp_matrix)) { 132 if (!gfits_fwrite_matrix (f, &temp_matrix)) { 133 fclose (f); 164 134 gprint (GP_ERR, "failed to write file\n"); 165 135 status = FALSE; 166 136 goto done1; 167 137 } 138 fclose (f); 168 139 status = TRUE; 140 169 141 done1: 170 gfits_free_header (&Xhead);171 142 gfits_free_header (&temp_header); 172 143 gfits_free_matrix (&temp_matrix); … … 180 151 Matrix myMatrix; 181 152 182 FILE *f = fopen (argv[2], "w"); 183 if (!f) { 184 fprintf (stderr, "ERROR: cannot open image subset file for output %s\n", argv[2]); 185 FREE (CompressMode); 186 return FALSE; 187 } 188 189 gfits_init_header (&myHeader); 190 myHeader.extend = TRUE; 191 gfits_create_header (&myHeader); 192 gfits_create_matrix (&myHeader, &myMatrix); 193 gfits_fwrite_header (f, &myHeader); 194 gfits_fwrite_matrix (f, &myMatrix); 195 gfits_free_header (&myHeader); 196 gfits_free_matrix (&myMatrix); 153 FILE *f; 154 155 if (Extend) { 156 // keeps an existing file 157 f = gfits_open_and_extend (argv[2]); 158 fseeko (f, 0LL, SEEK_END); 159 } else { 160 // replaces an existing file 161 f = fopen (argv[2], "w"); 162 if (!f) { 163 fprintf (stderr, "ERROR: cannot open image subset file for output %s\n", argv[2]); 164 FREE (CompressMode); 165 return FALSE; 166 } 167 168 gfits_init_header (&myHeader); 169 myHeader.extend = TRUE; 170 gfits_create_header (&myHeader); 171 gfits_create_matrix (&myHeader, &myMatrix); 172 gfits_fwrite_header (f, &myHeader); 173 gfits_fwrite_matrix (f, &myMatrix); 174 gfits_free_header (&myHeader); 175 gfits_free_matrix (&myMatrix); 176 } 197 177 198 178 FTable ftable; … … 236 216 return (TRUE); 237 217 } 218 219 // prepare the file to add an extension: 220 // read the PHU, update NEXTEND, write back header 221 // return the file pointer open and ready for write 222 FILE *gfits_open_and_extend (char *filename) { 223 224 Header Xhead; 225 FILE *f = NULL; 226 struct stat filestat; 227 228 // does the file already exist? 229 int status = stat (filename, &filestat); 230 if (status == 0) { /* file exists, are permissions OK? */ 231 f = fopen (filename, "r+"); 232 if (f == NULL) { 233 gprint (GP_ERR, "failed to open file %s for write\n", filename); 234 return NULL; 235 } 236 237 status = gfits_fread_header (f, &Xhead); 238 if (!status) { 239 gprint (GP_ERR, "failed to read header for existing file %s\n", filename); 240 return NULL; 241 } 242 } else { 243 f = fopen (filename, "w"); 244 if (f == NULL) { 245 gprint (GP_ERR, "failed to create file %s for write\n", filename); 246 return NULL; 247 } 248 249 // create an empty header 250 gfits_init_header (&Xhead); 251 Xhead.bitpix = 16; 252 Xhead.extend = TRUE; 253 gfits_create_header (&Xhead); 254 255 gfits_modify (&Xhead, "NEXTEND", "%d", 1, 0); 256 } 257 258 gfits_modify_alt (&Xhead, "EXTEND", "%t", 1, TRUE); 259 260 int Nextend = 0; 261 gfits_scan (&Xhead, "NEXTEND", "%d", 1, &Nextend); 262 Nextend ++; 263 gfits_modify (&Xhead, "NEXTEND", "%d", 1, Nextend); 264 265 /* position to begining of file to write header */ 266 fseeko (f, 0LL, SEEK_SET); 267 off_t nbytes = fwrite (Xhead.buffer, 1, Xhead.datasize, f); 268 if (nbytes != Xhead.datasize) { 269 gfits_free_header (&Xhead); 270 gprint (GP_ERR, "ERROR: failed writing data to image header\n"); 271 return NULL; 272 } 273 gfits_free_header (&Xhead); 274 275 return (f); 276 } 277 278 279 /// /* fix up header */ 280 /// { 281 /// static char simple[] = "XTENSION= 'IMAGE ' / Image extension"; 282 /// int Ns, No; 283 /// Ns = strlen (simple); 284 /// No = 80 - Ns; 285 /// strncpy (temp_header.buffer, simple, Ns); 286 /// memset (&temp_header.buffer[Ns], ' ', No); 287 /// } 288 /// 289 /// /* position to end of file to write new extend */ 290 /// fseeko (f, 0LL, SEEK_END); 291 /// nbytes = fwrite (temp_header.buffer, 1, temp_header.datasize, f); 292 /// fclose (f); 293 /// if (nbytes != temp_header.datasize) { 294 /// gprint (GP_ERR, "failed to write file\n"); 295 /// status = FALSE; 296 /// goto done1; 297 /// } 298 /// 299 /// }
Note:
See TracChangeset
for help on using the changeset viewer.
