Changeset 27435 for trunk/Ohana/src/libfits
- Timestamp:
- Mar 24, 2010, 11:22:25 AM (16 years ago)
- Location:
- trunk/Ohana
- Files:
-
- 39 edited
-
. (modified) (1 prop)
-
src/libfits/header/F_H_field.c (modified) (11 diffs)
-
src/libfits/header/F_copy_H.c (modified) (2 diffs)
-
src/libfits/header/F_create_H.c (modified) (4 diffs)
-
src/libfits/header/F_delete.c (modified) (2 diffs)
-
src/libfits/header/F_modify.c (modified) (5 diffs)
-
src/libfits/header/F_print.c (modified) (4 diffs)
-
src/libfits/header/F_read_H.c (modified) (4 diffs)
-
src/libfits/header/F_read_XH.c (modified) (3 diffs)
-
src/libfits/header/F_scan.c (modified) (7 diffs)
-
src/libfits/header/F_write_H.c (modified) (3 diffs)
-
src/libfits/include/gfitsio.h (modified) (12 diffs)
-
src/libfits/matrix/F_add_M.c (modified) (2 diffs)
-
src/libfits/matrix/F_add_M_value.c (modified) (1 diff)
-
src/libfits/matrix/F_compress_M.c (modified) (15 diffs)
-
src/libfits/matrix/F_convert_format.c (modified) (6 diffs)
-
src/libfits/matrix/F_copy_M.c (modified) (1 diff)
-
src/libfits/matrix/F_create_M.c (modified) (2 diffs)
-
src/libfits/matrix/F_get_M_value.c (modified) (2 diffs)
-
src/libfits/matrix/F_insert_M.c (modified) (1 diff)
-
src/libfits/matrix/F_load_M.c (modified) (3 diffs)
-
src/libfits/matrix/F_matrix.c (modified) (2 diffs)
-
src/libfits/matrix/F_read_M.c (modified) (1 diff)
-
src/libfits/matrix/F_read_portion.c (modified) (5 diffs)
-
src/libfits/matrix/F_read_segment.c (modified) (5 diffs)
-
src/libfits/matrix/F_set_M_value.c (modified) (1 diff)
-
src/libfits/matrix/F_write_M.c (modified) (4 diffs)
-
src/libfits/table/F_create_T.c (modified) (4 diffs)
-
src/libfits/table/F_create_TH.c (modified) (2 diffs)
-
src/libfits/table/F_define_column.c (modified) (8 diffs)
-
src/libfits/table/F_get_column.c (modified) (6 diffs)
-
src/libfits/table/F_read_T.c (modified) (19 diffs)
-
src/libfits/table/F_read_TH.c (modified) (5 diffs)
-
src/libfits/table/F_set_column.c (modified) (4 diffs)
-
src/libfits/table/F_table_format.c (modified) (12 diffs)
-
src/libfits/table/F_table_row.c (modified) (7 diffs)
-
src/libfits/table/F_table_varlength.c (modified) (5 diffs)
-
src/libfits/table/F_write_T.c (modified) (7 diffs)
-
src/libfits/table/F_write_TH.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana
-
Property svn:mergeinfo
set to
/branches/eam_branches/20091201/Ohana merged eligible /branches/eam_branches/largefiles.20100314/Ohana merged eligible
-
Property svn:mergeinfo
set to
-
trunk/Ohana/src/libfits/header/F_H_field.c
r21059 r27435 6 6 7 7 char *buf; 8 int i, Nwant, Nfound; 8 off_t i; 9 int Nwant, Nfound; 9 10 char keyword[10]; 11 12 if (header[0].buffer == NULL) return NULL; 10 13 11 14 /* create a blank-padded keyword with exactly 8 characters */ … … 19 22 /* find the Nth entry */ 20 23 Nfound = 0; 21 for (i = 0; i < header[0]. size; i+= FT_LINE_LENGTH, buf += FT_LINE_LENGTH) {24 for (i = 0; i < header[0].datasize; i+= FT_LINE_LENGTH, buf += FT_LINE_LENGTH) { 22 25 if (!strncmp (keyword, buf, 8)) { 23 26 Nfound ++; … … 30 33 /* count the entries */ 31 34 Nfound = 0; 32 for (i = 0; i < header[0]. size; i+= FT_LINE_LENGTH, buf += FT_LINE_LENGTH) {35 for (i = 0; i < header[0].datasize; i+= FT_LINE_LENGTH, buf += FT_LINE_LENGTH) { 33 36 if (!strncmp (keyword, buf, 8)) { 34 37 Nfound ++; … … 41 44 /* find the Nwant entry */ 42 45 Nfound = 0; 43 for (i = 0; i < header[0]. size; i+= FT_LINE_LENGTH, buf += FT_LINE_LENGTH) {46 for (i = 0; i < header[0].datasize; i+= FT_LINE_LENGTH, buf += FT_LINE_LENGTH) { 44 47 if (!strncmp (keyword, buf, 8)) { 45 48 Nfound ++; … … 50 53 } 51 54 52 return ((char *) NULL);55 return NULL; 53 56 54 57 /* … … 66 69 67 70 char *buf, *ptr; 68 int i, Nwant, Nfound, Nfield; 71 off_t i; 72 int Nwant, Nfound, Nfield; 73 74 if (header[0].buffer == NULL) return NULL; 69 75 70 76 Nfield = strlen (field); … … 76 82 if (N > 0) { 77 83 Nfound = 0; 78 for (i = 0; i < header[0]. size; i+= FT_LINE_LENGTH, buf += FT_LINE_LENGTH) {84 for (i = 0; i < header[0].datasize; i+= FT_LINE_LENGTH, buf += FT_LINE_LENGTH) { 79 85 // have we found a HIERARCH entry? 80 86 if (strncmp ("HIERARCH", buf, 8)) continue; … … 90 96 /* count the entries */ 91 97 Nfound = 0; 92 for (i = 0; i < header[0]. size; i+= FT_LINE_LENGTH, buf += FT_LINE_LENGTH) {98 for (i = 0; i < header[0].datasize; i+= FT_LINE_LENGTH, buf += FT_LINE_LENGTH) { 93 99 if (strncmp ("HIERARCH", buf, 8)) continue; 94 100 ptr = buf + 9; // start of following keyword … … 102 108 /* find the Nwant entry */ 103 109 Nfound = 0; 104 for (i = 0; i < header[0]. size; i+= FT_LINE_LENGTH, buf += FT_LINE_LENGTH) {110 for (i = 0; i < header[0].datasize; i+= FT_LINE_LENGTH, buf += FT_LINE_LENGTH) { 105 111 if (strncmp ("HIERARCH", buf, 8)) continue; 106 112 ptr = buf + 9; // start of following keyword … … 111 117 } 112 118 113 return ((char *) NULL);119 return NULL; 114 120 115 121 /* … … 122 128 123 129 /*********************** fits header field ****************************/ 124 char *gfits_header_lineno (Header *header, int N) {130 char *gfits_header_lineno (Header *header, off_t N) { 125 131 126 132 char *buf; 127 133 128 if (N*80 >= header[0]. size) return NULL;134 if (N*80 >= header[0].datasize) return NULL; 129 135 130 136 buf = &header[0].buffer[N*80]; -
trunk/Ohana/src/libfits/header/F_copy_H.c
r17903 r27435 16 16 out[0].Naxis[i] = in[0].Naxis[i]; 17 17 18 out[0]. size = in[0].size;18 out[0].datasize = in[0].datasize; 19 19 20 20 out[0].pcount = in[0].pcount; … … 24 24 25 25 if (out[0].buffer != NULL) free (out[0].buffer); 26 ALLOCATE (out[0].buffer, char, out[0]. size);26 ALLOCATE (out[0].buffer, char, out[0].datasize); 27 27 28 strncpy (out[0].buffer, in[0].buffer, out[0].size);28 memcpy (out[0].buffer, in[0].buffer, out[0].datasize); 29 29 30 30 return (TRUE); -
trunk/Ohana/src/libfits/header/F_create_H.c
r15487 r27435 9 9 char axis[10]; 10 10 11 header[0]. size = NBYTES;11 header[0].datasize = NBYTES; 12 12 13 13 ALLOCATE (header[0].buffer, char, NBYTES); … … 17 17 strncpy (header[0].buffer, "END", 3); 18 18 19 gfits_modify (header, "SIMPLE", "%t", 1, header[0].simple);19 gfits_modify_alt (header, "SIMPLE", "%t", 1, header[0].simple); 20 20 gfits_modify (header, "BITPIX", "%d", 1, header[0].bitpix); 21 21 gfits_modify (header, "NAXIS", "%d", 1, header[0].Naxes); … … 23 23 for (i = 0; i < header[0].Naxes; i++) { 24 24 snprintf (axis, 10, "NAXIS%d", i + 1); 25 gfits_modify (header, axis, "% d", 1,header[0].Naxis[i]);25 gfits_modify (header, axis, "%lld", 1, (long long) header[0].Naxis[i]); 26 26 } 27 27 … … 30 30 gfits_modify (header, "BSCALE", "%lf", 1, header[0].bscale); 31 31 gfits_modify (header, "BZERO", "%lf", 1, header[0].bzero); 32 gfits_modify (header, "EXTEND", "%t", 1, header[0].extend);32 gfits_modify_alt (header, "EXTEND", "%t", 1, header[0].extend); 33 33 return (TRUE); 34 34 -
trunk/Ohana/src/libfits/header/F_delete.c
r7054 r27435 5 5 int gfits_delete (Header *header, char *field, int N) { 6 6 7 int i, Nbytes; 7 int i; 8 off_t Nbytes; 8 9 char *p1, *p2; 9 10 … … 22 23 23 24 p2 = gfits_header_field (header, "END", 1); 24 if (header[0]. size - (p2 - header[0].buffer + FT_LINE_LENGTH) > FT_RECORD_SIZE) {25 header[0]. size -= FT_RECORD_SIZE;26 REALLOCATE (header[0].buffer, char, header[0]. size);25 if (header[0].datasize - (p2 - header[0].buffer + FT_LINE_LENGTH) > FT_RECORD_SIZE) { 26 header[0].datasize -= FT_RECORD_SIZE; 27 REALLOCATE (header[0].buffer, char, header[0].datasize); 27 28 } 28 29 return (TRUE); -
trunk/Ohana/src/libfits/header/F_modify.c
r21059 r27435 2 2 # include <gfitsio.h> 3 3 4 // this is only valid for the regular and non-boolean fields 4 5 int gfits_modify (Header *header, char *field, char *mode, int N,...) { 5 6 … … 8 9 9 10 char comment[82], string[82], data[82]; 10 char *p, *q s, *qe;11 char *p, *qe; 11 12 va_list argp; 12 13 … … 29 30 30 31 /* is there enough space for 1 more line? */ 31 if (header[0]. size - (p - (header[0].buffer)) < 2*FT_LINE_LENGTH) {32 header[0]. size += FT_RECORD_SIZE;33 REALLOCATE (header[0].buffer, char, header[0]. size);32 if (header[0].datasize - (p - (header[0].buffer)) < 2*FT_LINE_LENGTH) { 33 header[0].datasize += FT_RECORD_SIZE; 34 REALLOCATE (header[0].buffer, char, header[0].datasize); 34 35 p = gfits_header_field (header, "END", 1); 35 36 if (p == NULL) return (FALSE); … … 50 51 51 52 /* write the numeric modes */ 52 if (!strcmp (mode, "%d")) snprintf (string, 81, "%-8s= %20d / %-s ", field, va_arg (argp, int), comment); 53 if (!strcmp (mode, "%u")) snprintf (string, 81, "%-8s= %20d / %-s ", field, va_arg (argp, unsigned), comment); 54 if (!strcmp (mode, "%ld")) snprintf (string, 81, "%-8s= %20ld / %-s ", field, va_arg (argp, long), comment); 55 if (!strcmp (mode, "%hd")) snprintf (string, 81, "%-8s= %20d / %-s ", field, va_arg (argp, int), comment); 56 if (!strcmp (mode, "%f")) snprintf (string, 81, "%-8s= %20.10f / %-s ", field, va_arg (argp, double), comment); 57 if (!strcmp (mode, "%lf")) snprintf (string, 81, "%-8s= %20.10f / %-s ", field, va_arg (argp, double), comment); 58 if (!strcmp (mode, "%e")) snprintf (string, 81, "%-8s= %20.10E / %-s ", field, va_arg (argp, double), comment); 59 if (!strcmp (mode, "%le")) snprintf (string, 81, "%-8s= %20.10E / %-s ", field, va_arg (argp, double), comment); 60 if (!strcmp (mode, "%g")) snprintf (string, 81, "%-8s= %20.10G / %-s ", field, va_arg (argp, double), comment); 61 if (!strcmp (mode, "%lg")) snprintf (string, 81, "%-8s= %20.10G / %-s ", field, va_arg (argp, double), comment); 53 if (!strcmp (mode, "%d")) snprintf (string, 81, "%-8s= %20d / %-s ", field, va_arg (argp, int), comment); 54 if (!strcmp (mode, "%ld")) snprintf (string, 81, "%-8s= %20ld / %-s ", field, va_arg (argp, long), comment); 55 if (!strcmp (mode, "%lld")) snprintf (string, 81, "%-8s= %20lld / %-s ", field, va_arg (argp, long long), comment); 56 if (!strcmp (mode, "%Ld")) snprintf (string, 81, "%-8s= %20lld / %-s ", field, va_arg (argp, long long), comment); 57 if (!strcmp (mode, "%u")) snprintf (string, 81, "%-8s= %20u / %-s ", field, va_arg (argp, unsigned), comment); 58 if (!strcmp (mode, "%lu")) snprintf (string, 81, "%-8s= %20lu / %-s ", field, va_arg (argp, unsigned long), comment); 59 if (!strcmp (mode, "%llu")) snprintf (string, 81, "%-8s= %20llu / %-s ", field, va_arg (argp, unsigned long long), comment); 60 if (!strcmp (mode, "%Lu")) snprintf (string, 81, "%-8s= %20llu / %-s ", field, va_arg (argp, unsigned long long), comment); 61 if (!strcmp (mode, "%hd")) snprintf (string, 81, "%-8s= %20d / %-s ", field, va_arg (argp, int), comment); 62 if (!strcmp (mode, "%f")) snprintf (string, 81, "%-8s= %20.10f / %-s ", field, va_arg (argp, double), comment); 63 if (!strcmp (mode, "%lf")) snprintf (string, 81, "%-8s= %20.10f / %-s ", field, va_arg (argp, double), comment); 64 if (!strcmp (mode, "%e")) snprintf (string, 81, "%-8s= %20.10E / %-s ", field, va_arg (argp, double), comment); 65 if (!strcmp (mode, "%le")) snprintf (string, 81, "%-8s= %20.10E / %-s ", field, va_arg (argp, double), comment); 66 if (!strcmp (mode, "%g")) snprintf (string, 81, "%-8s= %20.10G / %-s ", field, va_arg (argp, double), comment); 67 if (!strcmp (mode, "%lg")) snprintf (string, 81, "%-8s= %20.10G / %-s ", field, va_arg (argp, double), comment); 68 69 /* string value. Quotes must be at least 18 chars apart */ 70 if (!strcmp (mode, "%s")) { 71 strncpy (data, va_arg (argp, char *), 68); 72 snprintf (string, 81, "%-8s= '%-18s' / %-s ", field, data, comment); 73 } 74 75 strncpy (p, string, 80); 76 va_end (argp); 77 return (TRUE); 78 79 } 80 81 // alternate version for the special types (boolean, comments, COMMENT) 82 int gfits_modify_alt (Header *header, char *field, char *mode, int N,...) { 83 84 /* this function expects one more argument, the value to be written */ 85 /* this function is extremely similar to gfits_print, except it allows for changing an existing field. */ 86 87 char comment[82], string[82], data[82]; 88 char *p, *qs, *qe; 89 va_list argp; 90 91 va_start (argp, N); 92 bzero (data, 82); 93 bzero (string, 82); 94 bzero (comment, 82); 95 96 if (mode[0] != '%') { 97 fprintf (stderr, "gfits_print: weird mode: %s\n", mode); 98 return (FALSE); 99 } 100 101 /* find location of desired entry */ 102 p = gfits_header_field (header, field, N); 103 if (p == NULL) { 104 /* new entry, find the END of the header */ 105 p = gfits_header_field (header, "END", 1); 106 if (p == NULL) return (FALSE); 107 108 /* is there enough space for 1 more line? */ 109 if (header[0].datasize - (p - (header[0].buffer)) < 2*FT_LINE_LENGTH) { 110 header[0].datasize += FT_RECORD_SIZE; 111 REALLOCATE (header[0].buffer, char, header[0].datasize); 112 p = gfits_header_field (header, "END", 1); 113 if (p == NULL) return (FALSE); 114 memset (p + FT_LINE_LENGTH, ' ', FT_RECORD_SIZE); 115 } 116 117 /* push END line back 1 */ 118 memmove ((p + FT_LINE_LENGTH), p, FT_LINE_LENGTH); 119 memset (p, ' ', FT_LINE_LENGTH); 120 } else { 121 /* old entry, save the comment region (is this skipping a character for non-strings?) */ 122 qe = gfits_keyword_end (p); 123 qe += 3; 124 qe = MIN (p + 80, qe); 125 strncpy (comment, qe, p + 80 - qe); 126 } 127 gfits_pad_ending (comment, ' ', 82); /* comment must contain spaces to the end */ 62 128 63 129 /* write the boolean mode */ … … 67 133 else 68 134 snprintf (string, 81, "%-8s= %18s F / %-s ", field, " ", comment); 69 }70 71 /* string value. Quotes must be at least 18 chars apart */72 if (!strcmp (mode, "%s")) {73 strncpy (data, va_arg (argp, char *), 68);74 snprintf (string, 81, "%-8s= '%-18s' / %-s ", field, data, comment);75 135 } 76 136 -
trunk/Ohana/src/libfits/header/F_print.c
r7054 r27435 2 2 # include <gfitsio.h> 3 3 4 // this only prints the regular and non-boolean fields 4 5 int gfits_print (Header *header, char *field, char *mode, int N,...) { 6 7 /* this function expects one more argument, the value to be written */ 8 9 static char blank[] = " "; 10 char string[82], line[80]; 11 char *p; 12 va_list argp; 13 14 va_start (argp, N); 15 16 if (mode[0] != '%') { 17 fprintf (stderr, "gfits_print: weird mode: %s\n", mode); 18 return (FALSE); 19 } 20 21 /* this is supposed to create a new field, not modify an old one. */ 22 p = gfits_header_field (header, field, N); 23 if (p != NULL) return (FALSE); 24 25 /* find the END of the header */ 26 p = gfits_header_field (header, "END", 1); 27 if (p == NULL) return (FALSE); 28 29 /* is there enough space for 1 more line? */ 30 if (header[0].datasize - (p - (header[0].buffer)) < 2*FT_LINE_LENGTH) { 31 header[0].datasize += FT_RECORD_SIZE; 32 REALLOCATE (header[0].buffer, char, header[0].datasize); 33 /* re-find the "END" marker, in case new memory block is used */ 34 p = gfits_header_field (header, "END", 1); 35 if (p == NULL) return (FALSE); 36 memset (p + FT_LINE_LENGTH, ' ', FT_RECORD_SIZE); 37 } 38 39 /* push END line back 1 */ 40 memmove ((p + FT_LINE_LENGTH), p, FT_LINE_LENGTH); 41 memset (p, ' ', FT_LINE_LENGTH); 42 43 /* write the new FITS card, setting the comment to be blank */ 44 /* in these lines, the value field will expand as needed, forcing out the comment 45 the total line is limited by snprintf to only 80 chars + EOL */ 46 47 /* write the numeric modes */ 48 if (!strcmp (mode, "%d")) { snprintf (string, 81, "%-8s= %20d / %46s ", field, va_arg (argp, int), blank); } 49 if (!strcmp (mode, "%ld")) { snprintf (string, 81, "%-8s= %20ld / %46s ", field, va_arg (argp, long), blank); } 50 if (!strcmp (mode, "%lld")){ snprintf (string, 81, "%-8s= %20lld / %46s ", field, va_arg (argp, long long), blank); } 51 if (!strcmp (mode, "%Ld")) { snprintf (string, 81, "%-8s= %20lld / %46s ", field, va_arg (argp, long long), blank); } 52 if (!strcmp (mode, "%u")) { snprintf (string, 81, "%-8s= %20u / %46s ", field, va_arg (argp, unsigned), blank); } 53 if (!strcmp (mode, "%lu")) { snprintf (string, 81, "%-8s= %20lu / %46s ", field, va_arg (argp, unsigned long), blank); } 54 if (!strcmp (mode, "%llu")){ snprintf (string, 81, "%-8s= %20llu / %46s ", field, va_arg (argp, unsigned long long), blank); } 55 if (!strcmp (mode, "%Lu")) { snprintf (string, 81, "%-8s= %20llu / %46s ", field, va_arg (argp, unsigned long long), blank); } 56 if (!strcmp (mode, "%hd")) { snprintf (string, 81, "%-8s= %20d / %46s ", field, va_arg (argp, int), blank); } 57 if (!strcmp (mode, "%f")) { snprintf (string, 81, "%-8s= %20.10f / %46s ", field, va_arg (argp, double), blank); } 58 if (!strcmp (mode, "%lf")) { snprintf (string, 81, "%-8s= %20.10f / %46s ", field, va_arg (argp, double), blank); } 59 if (!strcmp (mode, "%e")) { snprintf (string, 81, "%-8s= %20.10E / %46s ", field, va_arg (argp, double), blank); } 60 if (!strcmp (mode, "%le")) { snprintf (string, 81, "%-8s= %20.10E / %46s ", field, va_arg (argp, double), blank); } 61 if (!strcmp (mode, "%g")) { snprintf (string, 81, "%-8s= %20.10G / %46s ", field, va_arg (argp, double), blank); } 62 if (!strcmp (mode, "%lg")) { snprintf (string, 81, "%-8s= %20.10G / %46s ", field, va_arg (argp, double), blank); } 63 64 /* string value. Quotes must be at least 18 chars apart. Longer lines will this should be fixed to allow arbitrary string lengths, up to 69 chars */ 65 if (!strcmp (mode, "%s")) { 66 strcpy (line, va_arg (argp, char *)); 67 line[68] = 0; 68 snprintf (string, 81, "%-8s= '%-18s' / %46s ", field, line, blank); 69 } 70 71 strncpy (p, string, 80); 72 73 va_end (argp); 74 return (TRUE); 75 76 } 77 78 // alternate version for the special types (boolean, comments, COMMENT) 79 int gfits_print_alt (Header *header, char *field, char *mode, int N,...) { 5 80 6 81 /* this function expects one more argument, the value to be written */ … … 27 102 28 103 /* is there enough space for 1 more line? */ 29 if (header[0]. size - (p - (header[0].buffer)) < 2*FT_LINE_LENGTH) {30 header[0]. size += FT_RECORD_SIZE;31 REALLOCATE (header[0].buffer, char, header[0]. size);104 if (header[0].datasize - (p - (header[0].buffer)) < 2*FT_LINE_LENGTH) { 105 header[0].datasize += FT_RECORD_SIZE; 106 REALLOCATE (header[0].buffer, char, header[0].datasize); 32 107 /* re-find the "END" marker, in case new memory block is used */ 33 108 p = gfits_header_field (header, "END", 1); … … 40 115 memset (p, ' ', FT_LINE_LENGTH); 41 116 42 /* write the new FITS card, setting the comment to be blank */43 /* in these lines, the value field will expand as needed, forcing out the comment44 the total line is limited by snprintf to only 80 chars + EOL */45 46 /* write the numeric modes */47 if (!strcmp (mode, "%d")) { snprintf (string, 81, "%-8s= %20d / %46s ", field, va_arg (argp, int), blank); }48 if (!strcmp (mode, "%u")) { snprintf (string, 81, "%-8s= %20d / %46s ", field, va_arg (argp, unsigned), blank); }49 if (!strcmp (mode, "%ld")) { snprintf (string, 81, "%-8s= %20ld / %46s ", field, va_arg (argp, long), blank); }50 if (!strcmp (mode, "%hd")) { snprintf (string, 81, "%-8s= %20d / %46s ", field, va_arg (argp, int), blank); }51 if (!strcmp (mode, "%f")) { snprintf (string, 81, "%-8s= %20.10f / %46s ", field, va_arg (argp, double), blank); }52 if (!strcmp (mode, "%lf")) { snprintf (string, 81, "%-8s= %20.10f / %46s ", field, va_arg (argp, double), blank); }53 if (!strcmp (mode, "%e")) { snprintf (string, 81, "%-8s= %20.10E / %46s ", field, va_arg (argp, double), blank); }54 if (!strcmp (mode, "%le")) { snprintf (string, 81, "%-8s= %20.10E / %46s ", field, va_arg (argp, double), blank); }55 if (!strcmp (mode, "%g")) { snprintf (string, 81, "%-8s= %20.10G / %46s ", field, va_arg (argp, double), blank); }56 if (!strcmp (mode, "%lg")) { snprintf (string, 81, "%-8s= %20.10G / %46s ", field, va_arg (argp, double), blank); }57 58 117 /* write the boolean mode */ 59 118 if (!strcmp (mode, "%t")) { … … 63 122 else 64 123 snprintf (string, 81, "%-8s= %18s F / %46s ", field, blank, blank); 65 }66 67 /* string value. Quotes must be at least 18 chars apart. Longer lines will this should be fixed to allow arbitrary string lengths, up to 69 chars */68 if (!strcmp (mode, "%s")) {69 strcpy (line, va_arg (argp, char *));70 line[68] = 0;71 snprintf (string, 81, "%-8s= '%-18s' / %46s ", field, line, blank);72 124 } 73 125 -
trunk/Ohana/src/libfits/header/F_read_H.c
r15904 r27435 23 23 int gfits_load_header (FILE *f, Header *header) { 24 24 25 int i, done, Nbytes, t1, t2; 25 off_t i, Nbytes; 26 int done, t1, t2; 26 27 char *p; 27 28 28 header[0]. size = 0;29 header[0].datasize = 0; 29 30 done = FALSE; 30 31 ALLOCATE (header[0].buffer, char, 1); … … 32 33 for (i = 0; !done; i++) { 33 34 REALLOCATE (header[0].buffer, char, (i + 1)*FT_RECORD_SIZE); 34 Nbytes = fread (&header[0].buffer[i*FT_RECORD_SIZE], 35 sizeof(char), FT_RECORD_SIZE, f); 35 Nbytes = fread (&header[0].buffer[i*FT_RECORD_SIZE], sizeof(char), FT_RECORD_SIZE, f); 36 36 if (Nbytes != FT_RECORD_SIZE) { 37 37 if (feof(f)) return (FALSE); … … 40 40 } 41 41 42 header[0]. size += Nbytes;42 header[0].datasize += Nbytes; 43 43 44 44 if (i == 0) { … … 60 60 header[0].Naxis[i] = 0; 61 61 62 gfits_scan (header, "SIMPLE", "%t", 1, &header[0].simple);62 gfits_scan_alt (header, "SIMPLE", "%t", 1, &header[0].simple); 63 63 gfits_scan (header, "BITPIX", "%d", 1, &header[0].bitpix); 64 64 gfits_scan (header, "NAXIS", "%d", 1, &header[0].Naxes); 65 65 66 gfits_scan (header, "EXTEND", "%t", 1, &header[0].extend);67 gfits_scan (header, "UNSIGN", "%t", 1, &header[0].unsign);66 gfits_scan_alt (header, "EXTEND", "%t", 1, &header[0].extend); 67 gfits_scan_alt (header, "UNSIGN", "%t", 1, &header[0].unsign); 68 68 gfits_scan (header, "BSCALE", "%lf", 1, &header[0].bscale); 69 69 gfits_scan (header, "BZERO", "%lf", 1, &header[0].bzero); 70 70 71 gfits_scan (header, "NAXIS1", "% d", 1,&header[0].Naxis[0]);72 gfits_scan (header, "NAXIS2", "% d", 1,&header[0].Naxis[1]);73 gfits_scan (header, "NAXIS3", "% d", 1,&header[0].Naxis[2]);74 gfits_scan (header, "NAXIS4", "% d", 1,&header[0].Naxis[3]);75 gfits_scan (header, "NAXIS5", "% d", 1,&header[0].Naxis[4]);76 gfits_scan (header, "NAXIS6", "% d", 1,&header[0].Naxis[5]);77 gfits_scan (header, "NAXIS7", "% d", 1,&header[0].Naxis[6]);78 gfits_scan (header, "NAXIS8", "% d", 1,&header[0].Naxis[7]);79 gfits_scan (header, "NAXIS9", "% d", 1,&header[0].Naxis[8]);80 gfits_scan (header, "NAXIS10", "% d", 1,&header[0].Naxis[9]);71 gfits_scan (header, "NAXIS1", "%lld", 1, (long long *) &header[0].Naxis[0]); 72 gfits_scan (header, "NAXIS2", "%lld", 1, (long long *) &header[0].Naxis[1]); 73 gfits_scan (header, "NAXIS3", "%lld", 1, (long long *) &header[0].Naxis[2]); 74 gfits_scan (header, "NAXIS4", "%lld", 1, (long long *) &header[0].Naxis[3]); 75 gfits_scan (header, "NAXIS5", "%lld", 1, (long long *) &header[0].Naxis[4]); 76 gfits_scan (header, "NAXIS6", "%lld", 1, (long long *) &header[0].Naxis[5]); 77 gfits_scan (header, "NAXIS7", "%lld", 1, (long long *) &header[0].Naxis[6]); 78 gfits_scan (header, "NAXIS8", "%lld", 1, (long long *) &header[0].Naxis[7]); 79 gfits_scan (header, "NAXIS9", "%lld", 1, (long long *) &header[0].Naxis[8]); 80 gfits_scan (header, "NAXIS10", "%lld", 1, (long long *) &header[0].Naxis[9]); 81 81 82 82 if (!gfits_scan (header, "PCOUNT", "%d", 1, &header[0].pcount)) { -
trunk/Ohana/src/libfits/header/F_read_XH.c
r19250 r27435 31 31 /* read header for extension number N */ 32 32 33 int j, Nmatrix, Nskip; 33 int j; 34 off_t Nmatrix, Nskip; 34 35 Header theader; 35 36 36 37 /* set f to beginning of file */ 37 fseek (f, 0, SEEK_SET);38 fseeko (f, 0, SEEK_SET); 38 39 39 40 Nskip = 0; … … 47 48 48 49 /* skip to next header */ 49 fseek (f, Nmatrix, SEEK_CUR);50 Nskip += (Nmatrix + theader. size);50 fseeko (f, Nmatrix, SEEK_CUR); 51 Nskip += (Nmatrix + theader.datasize); 51 52 gfits_free_header (&theader); 52 53 } … … 55 56 return (FALSE); 56 57 } 57 Nskip += header[0]. size;58 Nskip += header[0].datasize; 58 59 return (Nskip); 59 60 } -
trunk/Ohana/src/libfits/header/F_scan.c
r21059 r27435 2 2 # include <gfitsio.h> 3 3 4 // this only scans the regular and non-boolean fields 4 5 int gfits_scan (Header *header, char *field, char *mode, int N,...) { 5 6 … … 13 14 } 14 15 16 // alternate version for the special types (boolean, comments, COMMENT) 17 int gfits_scan_alt (Header *header, char *field, char *mode, int N,...) { 18 19 int status; 20 va_list argp; 21 22 va_start (argp, N); 23 status = gfits_vscan_alt (header, field, mode, N, argp); 24 va_end (argp); 25 return (status); 26 } 27 28 // this only scans the regular and non-boolean fields 15 29 int gfits_vscan (Header *header, char *field, char *mode, int N, va_list argp) { 16 30 17 31 char *p, *q, *s, tmp[81]; 18 32 int Nchar, status; 19 double value; 33 long long value; 34 double fvalue; 20 35 21 36 /* find the correct line with field */ … … 26 41 } 27 42 43 /* all others require '=' in column 8 */ 44 if (p[8] != '=') return (FALSE); 45 46 /* extract data into char array (exclude containing ' chars) */ 47 if (!strcmp (mode, "%s")) { 48 s = gfits_keyword_start (p); /* points at first char (not ') */ 49 q = gfits_keyword_end (p); /* points at following space or ' */ 50 51 Nchar = MAX (0, (q - s)); 52 bzero (tmp, 81); 53 memcpy (tmp, s, Nchar); 54 stripwhite (tmp); 55 strcpy (va_arg (argp, char *), tmp); 56 return (TRUE); 57 } 58 59 /* remaining options are numerical data */ 60 /* need to interpret 1.0d5 as 1.0e5 */ 61 s = gfits_keyword_start (p); /* points at first char (not ') */ 62 q = gfits_keyword_end (p); /* points at following space or ' */ 63 64 if (!strcmp (mode, "%f") || !strcmp (mode, "%lf")) { 65 fvalue = strtod (s, &q); 66 if ((*q == 'd') || (*q == 'D')) 67 fvalue *= pow (10.0, atof (q + 1)); 68 69 if (!strcmp (mode, "%f")) { *va_arg (argp, float *) = fvalue; return (TRUE); } 70 if (!strcmp (mode, "%lf")) { *va_arg (argp, double *) = fvalue; return (TRUE); } 71 } 72 73 value = strtoll (s, &q, 0); 74 if ((*q == 'd') || (*q == 'D')) value *= pow (10.0, atof (q + 1)); 75 76 if (!strcmp (mode, "%d")) { *va_arg (argp, int *) = value; return (TRUE); } 77 if (!strcmp (mode, "%ld")) { *va_arg (argp, long *) = value; return (TRUE); } 78 if (!strcmp (mode, "%lld")) { *va_arg (argp, long long *) = value; return (TRUE); } 79 if (!strcmp (mode, "%Ld")) { *va_arg (argp, long long *) = value; return (TRUE); } 80 if (!strcmp (mode, "%u")) { *va_arg (argp, unsigned *) = value; return (TRUE); } 81 if (!strcmp (mode, "%lu")) { *va_arg (argp, unsigned long *) = value; return (TRUE); } 82 if (!strcmp (mode, "%llu")) { *va_arg (argp, unsigned long long *) = value; return (TRUE); } 83 if (!strcmp (mode, "%Lu")) { *va_arg (argp, unsigned long long *) = value; return (TRUE); } 84 if (!strcmp (mode, "%hd")) { *va_arg (argp, short *) = value; return (TRUE); } 85 86 /* no valid mode found */ 87 return (FALSE); 88 } 89 90 // alternate version for the special types (boolean, comments, COMMENT) 91 int gfits_vscan_alt (Header *header, char *field, char *mode, int N, va_list argp) { 92 93 char *p, *q, *s, tmp[81]; 94 int Nchar, status; 95 96 /* find the correct line with field */ 97 p = gfits_header_field (header, field, N); 98 if (p == NULL) { 99 status = gfits_vscan_hierarch (header, field, mode, N, argp); 100 return (status); 101 } 102 28 103 /* non-data entry (COMMENT, HISTORY) */ 29 104 if (!strcmp (mode, "%S")) { … … 47 122 } 48 123 49 /* extract data into char array (exclude containing ' chars) */50 if (!strcmp (mode, "%s")) {51 s = gfits_keyword_start (p); /* points at first char (not ') */52 q = gfits_keyword_end (p); /* points at following space or ' */53 54 Nchar = MAX (0, (q - s));55 bzero (tmp, 81);56 memcpy (tmp, s, Nchar);57 stripwhite (tmp);58 strcpy (va_arg (argp, char *), tmp);59 return (TRUE);60 }61 62 124 /* boolean data, requires int target */ 63 125 if (!strcmp (mode, "%t")) { … … 73 135 } 74 136 75 /* remaining options are numerical data */76 /* need to interpret 1.0d5 as 1.0e5 */77 s = gfits_keyword_start (p); /* points at first char (not ') */78 q = gfits_keyword_end (p); /* points at following space or ' */79 value = strtod (s, &q);80 if ((*q == 'd') || (*q == 'D'))81 value *= pow (10.0, atof (q + 1));82 83 if (!strcmp (mode, "%d")) { *va_arg (argp, int *) = value; return (TRUE); }84 if (!strcmp (mode, "%u")) { *va_arg (argp, unsigned *) = value; return (TRUE); }85 if (!strcmp (mode, "%ld")) { *va_arg (argp, long *) = value; return (TRUE); }86 if (!strcmp (mode, "%hd")) { *va_arg (argp, short *) = value; return (TRUE); }87 if (!strcmp (mode, "%f")) { *va_arg (argp, float *) = value; return (TRUE); }88 if (!strcmp (mode, "%lf")) { *va_arg (argp, double *) = value; return (TRUE); }89 90 137 /* no valid mode found */ 91 138 return (FALSE); … … 97 144 char *p, *q, *s, tmp[81]; 98 145 int Nchar, Nfield; 99 double value; 146 long long value; 147 double fvalue; 100 148 101 149 /* find the correct line with field */ … … 156 204 s = gfits_hierarch_keyword_start (p, field); /* points at first char (not ') */ 157 205 q = gfits_hierarch_keyword_end (p, field); /* points at following space or ' */ 158 value = strtod (s, &q); 159 if ((*q == 'd') || (*q == 'D')) 160 value *= pow (10.0, atof (q + 1)); 161 162 if (!strcmp (mode, "%d")) { *va_arg (argp, int *) = value; return (TRUE); } 163 if (!strcmp (mode, "%u")) { *va_arg (argp, unsigned *) = value; return (TRUE); } 164 if (!strcmp (mode, "%ld")) { *va_arg (argp, long *) = value; return (TRUE); } 165 if (!strcmp (mode, "%hd")) { *va_arg (argp, short *) = value; return (TRUE); } 166 if (!strcmp (mode, "%f")) { *va_arg (argp, float *) = value; return (TRUE); } 167 if (!strcmp (mode, "%lf")) { *va_arg (argp, double *) = value; return (TRUE); } 206 207 if (!strcmp (mode, "%f") || !strcmp (mode, "%lf")) { 208 fvalue = strtod (s, &q); 209 if ((*q == 'd') || (*q == 'D')) 210 fvalue *= pow (10.0, atof (q + 1)); 211 212 if (!strcmp (mode, "%f")) { *va_arg (argp, float *) = fvalue; return (TRUE); } 213 if (!strcmp (mode, "%lf")) { *va_arg (argp, double *) = fvalue; return (TRUE); } 214 } 215 216 value = strtoll (s, &q, 0); 217 if ((*q == 'd') || (*q == 'D')) value *= pow (10.0, atof (q + 1)); 218 219 if (!strcmp (mode, "%d")) { *va_arg (argp, int *) = value; return (TRUE); } 220 if (!strcmp (mode, "%ld")) { *va_arg (argp, long *) = value; return (TRUE); } 221 if (!strcmp (mode, "%lld")) { *va_arg (argp, long long *) = value; return (TRUE); } 222 if (!strcmp (mode, "%Ld")) { *va_arg (argp, long long *) = value; return (TRUE); } 223 if (!strcmp (mode, "%u")) { *va_arg (argp, unsigned *) = value; return (TRUE); } 224 if (!strcmp (mode, "%lu")) { *va_arg (argp, unsigned long *) = value; return (TRUE); } 225 if (!strcmp (mode, "%llu")) { *va_arg (argp, unsigned long long *) = value; return (TRUE); } 226 if (!strcmp (mode, "%Lu")) { *va_arg (argp, unsigned long long *) = value; return (TRUE); } 227 if (!strcmp (mode, "%hd")) { *va_arg (argp, short *) = value; return (TRUE); } 168 228 169 229 /* no valid mode found */ -
trunk/Ohana/src/libfits/header/F_write_H.c
r7054 r27435 6 6 7 7 FILE *f; 8 int Nbytes, status; 8 off_t Nbytes; 9 int status; 9 10 10 11 status = TRUE; … … 13 14 if (f == (FILE *) NULL) return (FALSE); 14 15 15 Nbytes = fwrite (header[0].buffer, sizeof(char), header[0]. size, f);16 Nbytes = fwrite (header[0].buffer, sizeof(char), header[0].datasize, f); 16 17 17 if (Nbytes != header[0]. size) {18 if (Nbytes != header[0].datasize) { 18 19 status = FALSE; 19 20 } … … 27 28 int gfits_save_header (FILE *f, Header *header) { 28 29 29 int Nbytes, status; 30 off_t Nbytes; 31 int status; 30 32 31 33 status = TRUE; 32 34 33 Nbytes = fwrite (header[0].buffer, sizeof(char), header[0]. size, f);35 Nbytes = fwrite (header[0].buffer, sizeof(char), header[0].datasize, f); 34 36 35 if (Nbytes != header[0]. size) {37 if (Nbytes != header[0].datasize) { 36 38 status = FALSE; 37 39 } -
trunk/Ohana/src/libfits/include/gfitsio.h
r21059 r27435 44 44 45 45 typedef struct { 46 int simple; 47 int unsign; 48 int extend; 49 int bitpix; 50 int Naxes; 51 intNaxis[FT_MAX_NAXES];52 intsize;46 int simple; // T or F 47 int unsign; // T or F 48 int extend; // T or F 49 int bitpix; // 8, 16, 32, 64, or -32, -64 50 int Naxes; // < FT_MAX_NAXES (10) 51 off_t Naxis[FT_MAX_NAXES]; 52 off_t datasize; 53 53 int pcount; 54 54 int gcount; … … 65 65 int bitpix; 66 66 int Naxes; 67 intNaxis[FT_MAX_NAXES];68 intsize;67 off_t Naxis[FT_MAX_NAXES]; 68 off_t datasize; 69 69 double bzero; 70 70 double bscale; … … 76 76 Header *header; 77 77 char *buffer; 78 intsize;78 off_t datasize; 79 79 } FTable; 80 80 … … 83 83 Header *header; 84 84 char **buffer; 85 intNrow;86 int*row;87 intsize; /* total buffer size */88 intpad; /* bytes of padding at the end */85 off_t Nrow; 86 off_t *row; 87 off_t datasize; /* total buffer size */ 88 off_t pad; /* bytes of padding at the end */ 89 89 } VTable; 90 90 91 91 typedef struct { 92 int maxlen; // max size of all table rows 93 int nbytes; // number of bytes per column element 94 int Nstart; // byte offset of this column 95 int heap_start; // byte offset to start of HEAP 96 char format; // data format character (one of: XLABIJEDCM) 92 int maxlen; // max size of all table rows 93 int nbytes; // number of bytes per column element 94 int Nstart; // byte offset of this column relative to first column 95 off_t heap_start; // byte offset to start of HEAP 96 char format; // data format character (one of: XLABIJEDCM) 97 char mode; // access data pointer type (one of P or Q) 97 98 } VarLengthColumn; 98 99 … … 106 107 107 108 char *gfits_header_field PROTO((Header *header, char *field, int N)); 108 char *gfits_header_lineno PROTO((Header *header, int N));109 char *gfits_header_lineno PROTO((Header *header, off_t N)); 109 110 char *gfits_keyword_end PROTO((char *line)); 110 111 int gfits_copy_header PROTO((Header *in, Header *out)); … … 118 119 int gfits_init_header PROTO((Header *header)); 119 120 int gfits_load_header PROTO((FILE *f, Header *header)); 120 int gfits_modify PROTO((Header *header, char *field, char *mode, int N,...)); 121 int gfits_print PROTO((Header *header, char *field, char *mode, int N,...)); 121 int gfits_modify PROTO((Header *header, char *field, char *mode, int N,...)) OHANA_FORMAT(printf, 3, 5); 122 int gfits_print PROTO((Header *header, char *field, char *mode, int N,...)) OHANA_FORMAT(printf, 3, 5); 123 int gfits_modify_alt PROTO((Header *header, char *field, char *mode, int N,...)); 124 int gfits_print_alt PROTO((Header *header, char *field, char *mode, int N,...)); 122 125 int gfits_read_Xheader PROTO((char *filename, Header *header, int N)); 123 126 int gfits_read_header PROTO((char *filename, Header *header)); 124 127 int gfits_save_header PROTO((FILE *f, Header *header)); 125 int gfits_scan PROTO((Header *header, char *field, char *mode, int N,...)); 128 int gfits_scan PROTO((Header *header, char *field, char *mode, int N,...)) OHANA_FORMAT(scanf, 3, 5); 129 int gfits_scan_alt PROTO((Header *header, char *field, char *mode, int N,...)); 126 130 int gfits_set_unsign_mode PROTO((int mode)); 127 131 int gfits_stripwhite PROTO((char *string)); 128 132 int gfits_vscan PROTO((Header *header, char *field, char *mode, int N, va_list argp)); 133 int gfits_vscan_alt PROTO((Header *header, char *field, char *mode, int N, va_list argp)); 129 134 int gfits_write_header PROTO((char *filename, Header *header)); 130 intgfits_data_size PROTO((Header *header));131 intgfits_data_min_size PROTO((Header *header));135 off_t gfits_data_size PROTO((Header *header)); 136 off_t gfits_data_min_size PROTO((Header *header)); 132 137 int gfits_extended_to_primary PROTO((Header *header, int simple, char *comment)); 133 138 int gfits_primary_to_extended PROTO((Header *header, char *exttype, char *comment)); … … 143 148 /******************************* Matrix functions *************/ 144 149 145 void gfits_add_matrix_value PROTO((Matrix *matrix, int x, int y, double value));150 void gfits_add_matrix_value PROTO((Matrix *matrix, off_t x, off_t y, double value)); 146 151 int gfits_convert_format PROTO((Header *header, Matrix *matrix, int outBitpix, double outScale, double outZero, int inBlank, int outUnsign)); 147 152 int gfits_copy_matrix PROTO((Matrix *in, Matrix *out)); … … 152 157 void gfits_free_matrix PROTO((Matrix *matrix)); 153 158 int gfits_fwrite_matrix PROTO((FILE *f, Matrix *matrix)); 154 double gfits_get_matrix_value PROTO((Matrix *matrix, int x, int y));155 void gfits_insert_ array PROTO((Matrix *matrix, Matrix *array, int x, int y));159 double gfits_get_matrix_value PROTO((Matrix *matrix, off_t x, off_t y)); 160 void gfits_insert_matrix PROTO((Matrix *matrix, Matrix *array, off_t x, off_t y)); 156 161 int gfits_load_matrix PROTO((FILE *f, Matrix *matrix, Header *header)); 157 162 int gfits_multiply_matrix PROTO((Matrix *M1, Matrix *M2, Matrix *M3)); 158 163 int gfits_read_matrix PROTO((char *filename, Matrix *matrix)); 159 164 int gfits_read_matrix_segment PROTO((char *filename, Matrix *matrix, char *region)); 160 int gfits_read_portion PROTO((char *filename, Matrix *matrix, int Nskip, int Npix));161 void gfits_set_matrix_value PROTO((Matrix *matrix, int x, int y, double value));165 int gfits_read_portion PROTO((char *filename, Matrix *matrix, off_t Nskip, off_t Npix)); 166 void gfits_set_matrix_value PROTO((Matrix *matrix, off_t x, off_t y, double value)); 162 167 int gfits_write_matrix PROTO((char *filename, Matrix *matrix)); 163 168 int gfits_uncompress_image PROTO((Header *header, Matrix *matrix, FTable *ftable)); … … 166 171 int gfits_byteswap_zdata PROTO((char *zdata, int Nzdata, int bitpix)); 167 172 int gfits_extension_is_compressed PROTO((Header *header)); 168 intgfits_tile_size PROTO((Matrix *matrix, int *otile, int *ztile));173 off_t gfits_tile_size PROTO((Matrix *matrix, int *otile, int *ztile)); 169 174 int gfits_uncompressed_data_pixsize PROTO((char *cmptype, int out_bitpix, char **optname, char **optvalue, int Noptions)); 170 175 int gfits_vartable_heap_pixsize PROTO((char format)); … … 173 178 174 179 char *gfits_table_print PROTO((FTable *ftable,...)); 175 int gfits_add_rows PROTO((FTable *ftable, char *data, int Nrow, int Nbytes));180 int gfits_add_rows PROTO((FTable *ftable, char *data, off_t Nrow, off_t Nbytes)); 176 181 int gfits_bintable_format PROTO((char *format, char *type, int *Nval, int *Nbytes)); 177 182 int gfits_create_table PROTO((Header *header, FTable *ftable)); … … 181 186 int gfits_fread_ftable PROTO((FILE *f, FTable *ftable, char *extname)); 182 187 int gfits_fread_ftable_data PROTO((FILE *f, FTable *ftable)); 183 int gfits_fread_ftable_range PROTO((FILE *f, FTable *ftable, int start, int Nrows));184 int gfits_fread_vtable PROTO((FILE *f, VTable *vtable, char *extname, int Nrow, int *row));185 int gfits_fread_vtable_range PROTO((FILE *f, VTable *vtable, int start, int Nrows));188 int gfits_fread_ftable_range PROTO((FILE *f, FTable *ftable, off_t start, off_t Nrows)); 189 int gfits_fread_vtable PROTO((FILE *f, VTable *vtable, char *extname, off_t Nrow, off_t *row)); 190 int gfits_fread_vtable_range PROTO((FILE *f, VTable *vtable, off_t start, off_t Nrows)); 186 191 int gfits_free_table PROTO((FTable *ftable)); 187 192 int gfits_free_vtable PROTO((VTable *vtable)); 188 193 int gfits_fwrite_table PROTO((FILE *f, FTable *table)); 189 194 int gfits_fwrite_vtable PROTO((FILE *f, VTable *table)); 190 int gfits_fwrite_ftable_range PROTO((FILE *f, FTable *table, int start, int Nrows, int Ndisk, int Ntotal));195 int gfits_fwrite_ftable_range PROTO((FILE *f, FTable *table, off_t start, off_t Nrows, off_t Ndisk, off_t Ntotal)); 191 196 int gfits_get_bintable_column PROTO((Header *header, FTable *table, char *label, void **data)); 192 197 int gfits_get_bintable_column_type PROTO((Header *header, char *label, char *type, int *Nval)); 193 void *gfits_get_bintable_column_data PROTO((Header *header, FTable *table, char *label, char *type, int *Nrow, int *Ncol));198 void *gfits_get_bintable_column_data PROTO((Header *header, FTable *table, char *label, char *type, off_t *Nrow, int *Ncol)); 194 199 int gfits_get_table_column PROTO((Header *header, FTable *table, char *label, void **data)); 195 200 int gfits_get_table_column_type PROTO((Header *header, char *label, char *type)); 196 201 int gfits_read_ftable PROTO((char *filename, FTable *table, char *extname)); 197 202 int gfits_read_table PROTO((char *filename, FTable *ftable)); 198 int gfits_set_bintable_column PROTO((Header *header, FTable *table, char *label, void *data, int Nrow));199 int gfits_set_table_column PROTO((Header *header, FTable *table, char *label, void *data, int Nrow));200 int gfits_table_column PROTO((FTable *ftable, char *field, char *mode,...)) ;203 int gfits_set_bintable_column PROTO((Header *header, FTable *table, char *label, void *data, off_t Nrow)); 204 int gfits_set_table_column PROTO((Header *header, FTable *table, char *label, void *data, off_t Nrow)); 205 int gfits_table_column PROTO((FTable *ftable, char *field, char *mode,...)) OHANA_FORMAT(printf, 3, 4); 201 206 int gfits_table_format PROTO((char *format, char *type, int *Nval, int *Nbytes)); 202 207 int gfits_table_scale_data PROTO((FTable *ftable)); 203 208 int gfits_table_scale_storage PROTO((FTable *ftable)); 204 int gfits_table_to_vtable PROTO((FTable *ftable, VTable *vtable, int start, int Nkeep));205 int gfits_vadd_rows PROTO((VTable *vtable, char *data, int Nrow, int Nbytes));206 int gfits_vtable_from_ftable PROTO((FTable *ftable, VTable *vtable, int *row, int Nrow));209 int gfits_table_to_vtable PROTO((FTable *ftable, VTable *vtable, off_t start, off_t Nkeep)); 210 int gfits_vadd_rows PROTO((VTable *vtable, char *data, off_t Nrow, off_t Nbytes)); 211 int gfits_vtable_from_ftable PROTO((FTable *ftable, VTable *vtable, off_t *row, off_t Nrow)); 207 212 int gfits_write_table PROTO((char *filename, FTable *ftable)); 208 213 … … 215 220 216 221 int gfits_varlength_column_define PROTO((FTable *ftable, VarLengthColumn *def, int column)); 217 void *gfits_varlength_column_pointer PROTO((FTable *ftable, VarLengthColumn *column, int row, int *length));222 void *gfits_varlength_column_pointer PROTO((FTable *ftable, VarLengthColumn *column, off_t row, off_t *length)); 218 223 219 224 #endif /* FITSIO */ -
trunk/Ohana/src/libfits/matrix/F_add_M.c
r7054 r27435 3 3 4 4 /*********************** fits insert array ***********************************/ 5 void gfits_add_matrix (matrix, array, x, y) 6 Matrix *matrix, *array; 7 int x, y; 5 void gfits_add_matrix (Matrix *matrix, Matrix *array, off_t x, off_t y) 8 6 { 9 7 … … 15 13 if ((x + array[0].Naxis[0] > matrix[0].Naxis[0]) || 16 14 (y + array[0].Naxis[1] > matrix[0].Naxis[1])) { 17 fprintf (stderr, "can't add array here: (%d,%d) - (%d,%d) vs (%d,%d)\n", 18 x, y, x + array[0].Naxis[0], y + array[0].Naxis[1], 19 matrix[0].Naxis[0], matrix[0].Naxis[1]); 15 fprintf (stderr, "can't add array here: (%lld,%lld) - (%lld,%lld) vs (%lld,%lld)\n", 16 (long long) x, 17 (long long) y, 18 (long long) x + array[0].Naxis[0], 19 (long long) y + array[0].Naxis[1], 20 (long long) matrix[0].Naxis[0], 21 (long long) matrix[0].Naxis[1]); 20 22 return; 21 23 } -
trunk/Ohana/src/libfits/matrix/F_add_M_value.c
r7054 r27435 3 3 4 4 /***************** fits add matrix value ***********************************/ 5 void gfits_add_matrix_value (matrix, x, y, Value) 6 Matrix *matrix; 7 int x, y; 8 double Value; 5 void gfits_add_matrix_value (Matrix *matrix, off_t x, off_t y, double Value) 9 6 { 10 7 -
trunk/Ohana/src/libfits/matrix/F_compress_M.c
r23724 r27435 24 24 gfits_delete (header, ZNAME, 1); } 25 25 26 # define MOD_KEYWORD_ALT(ZNAME,NAME,TYPE,IN,OUT) { \ 27 if (gfits_scan_alt (header, ZNAME, TYPE, 1, IN)) { \ 28 gfits_modify_alt (header, NAME, TYPE, 1, OUT); \ 29 } \ 30 gfits_delete (header, ZNAME, 1); } 31 26 32 # define MOD_KEYWORD_REQUIRED(ZNAME,NAME,TYPE,IN,OUT) { \ 27 33 if (!gfits_scan (header, ZNAME, TYPE, 1, IN)) ESCAPE; \ … … 31 37 int gfits_uncompress_image (Header *header, Matrix *matrix, FTable *ftable) { 32 38 33 int i, j, status, zimage, zcol, Nzrows, Nout, Nzdata, max_tile_size; 39 off_t Nzdata, Nzrows, zcol; 40 int i, j, status, zimage, Nout, max_tile_size; 34 41 char cmptype[80]; 35 42 char zaxis[10], naxis[10], key[10], word[81], exttype[81], checksum[81], datasum[81]; … … 51 58 52 59 // is ZIMAGE present? 53 status = gfits_scan (ftable->header, "ZIMAGE", "%t", 1, &zimage);60 status = gfits_scan_alt (ftable->header, "ZIMAGE", "%t", 1, &zimage); 54 61 if (!status || !zimage) ESCAPE; 55 62 … … 70 77 snprintf (zaxis, 10, "ZNAXIS%d", i + 1); 71 78 snprintf (naxis, 10, "NAXIS%d", i + 1); 72 MOD_KEYWORD_REQUIRED (zaxis, naxis, "% d", &header->Naxis[i],header->Naxis[i]);79 MOD_KEYWORD_REQUIRED (zaxis, naxis, "%lld", (long long *) &header->Naxis[i], (long long) header->Naxis[i]); 73 80 } 74 81 … … 118 125 int have_ztension; 119 126 120 have_zsimple = gfits_scan (header, "ZSIMPLE", "%t", 1, &zsimple);127 have_zsimple = gfits_scan_alt (header, "ZSIMPLE", "%t", 1, &zsimple); 121 128 have_ztension = gfits_scan (header, "ZTENSION", "%s", 1, exttype); 122 129 … … 130 137 gfits_extended_to_primary (header, header->simple, "Image data"); 131 138 132 MOD_KEYWORD ("ZEXTEND", "EXTEND", "%t", &header->extend, header->extend);133 MOD_KEYWORD ("ZBLOCKED", "BLOCKED", "%t", &header->extend, header->extend);139 MOD_KEYWORD_ALT ("ZEXTEND", "EXTEND", "%t", &header->extend, header->extend); 140 MOD_KEYWORD_ALT ("ZBLOCKED", "BLOCKED", "%t", &header->extend, header->extend); 134 141 } 135 142 … … 140 147 gfits_extended_to_primary (header, header->simple, "Image data"); 141 148 142 MOD_KEYWORD ("ZEXTEND", "EXTEND", "%t", &header->extend, header->extend);143 MOD_KEYWORD ("ZBLOCKED", "BLOCKED", "%t", &header->extend, header->extend);149 MOD_KEYWORD_ALT ("ZEXTEND", "EXTEND", "%t", &header->extend, header->extend); 150 MOD_KEYWORD_ALT ("ZBLOCKED", "BLOCKED", "%t", &header->extend, header->extend); 144 151 } 145 152 … … 175 182 176 183 zscale = 1; 177 gfits_scan (header, "ZSCALE", "% lf", 1, &zscale);184 gfits_scan (header, "ZSCALE", "%f", 1, &zscale); 178 185 179 186 zblank = 32767; … … 184 191 185 192 zzero = 0; 186 gfits_scan (header, "ZZERO", "% lf", 1, &zzero);193 gfits_scan (header, "ZZERO", "%f", 1, &zzero); 187 194 188 195 // find the COMPRESSED_DATA column (format should be 1PB, 1PI, 1PJ) … … 196 203 if (!gfits_varlength_column_define (ftable, &zdef, zcol)) ESCAPE; 197 204 gfits_delete (header, "TFIELDS", 1); 198 snprintf (key, 10, "TTYPE% d",zcol);205 snprintf (key, 10, "TTYPE%lld", (long long) zcol); 199 206 gfits_delete (header, key, 1); 200 snprintf (key, 10, "TFORM% d",zcol);207 snprintf (key, 10, "TFORM%lld", (long long) zcol); 201 208 gfits_delete (header, key, 1); 202 209 … … 236 243 ALLOCATE (out, char, odata_pixsize*max_tile_size); 237 244 245 off_t row; 246 238 247 // uncompress the data 239 248 Nzrows = ftable->header->Naxis[1]; 240 for ( i = 0; i < Nzrows; i++) {249 for (row = 0; row < Nzrows; row++) { 241 250 242 251 // expected output size for this tile 243 252 Nout = gfits_tile_size (matrix, otile, ztile); 244 253 245 zdata = gfits_varlength_column_pointer (ftable, &zdef, i, &Nzdata);254 zdata = gfits_varlength_column_pointer (ftable, &zdef, row, &Nzdata); 246 255 if (!zdata) return (FALSE); 247 256 … … 254 263 255 264 // gfits_uncompress_data uncompresses from zdata to the temporary output buffer which must be allocated 265 // XXX the tile must not be > 2GB 256 266 if (!gfits_uncompress_data ((char *)zdata, Nzdata, cmptype, optname, optvalue, Noptions, out, &Nout, odata_pixsize)) return (FALSE); 257 267 … … 284 294 285 295 // true sizes of this tile (in pixels) 286 int gfits_tile_size (Matrix *matrix, int *otile, int *ztile) {287 288 int i, Npixels, Ndimen;296 off_t gfits_tile_size (Matrix *matrix, int *otile, int *ztile) { 297 298 off_t i, Npixels, Ndimen; 289 299 290 300 Npixels = 1; … … 470 480 has_extension = gfits_scan (header, "XTENSION", "%s", 1, extension); 471 481 has_extname = gfits_scan (header, "EXTNAME", "%s", 1, extname); 472 has_zimage = gfits_scan (header, "ZIMAGE", "%t", 1, &zimage);482 has_zimage = gfits_scan_alt (header, "ZIMAGE", "%t", 1, &zimage); 473 483 474 484 if (has_extension && !strcmp (extension, "IMAGE")) return (FALSE); … … 486 496 int ztension, zimage; 487 497 488 has_zimage = gfits_scan (header, "ZIMAGE", "%t", 1, &zimage);489 has_ztension = gfits_scan (header, "ZTENSION", "%t", 1, &ztension);498 has_zimage = gfits_scan_alt (header, "ZIMAGE", "%t", 1, &zimage); 499 has_ztension = gfits_scan_alt (header, "ZTENSION", "%t", 1, &ztension); 490 500 491 501 if (has_zimage && zimage) return (TRUE); -
trunk/Ohana/src/libfits/matrix/F_convert_format.c
r20652 r27435 24 24 *out = *in*A + B; \ 25 25 } \ 26 REALLOCATE (matrix[0].buffer, char, matrix[0]. size);26 REALLOCATE (matrix[0].buffer, char, matrix[0].datasize); 27 27 28 28 # define CONVERTSAME(MY_NAN) \ … … 41 41 inMode *in; \ 42 42 outMode *out; \ 43 REALLOCATE (matrix[0].buffer, char, matrix[0]. size); \43 REALLOCATE (matrix[0].buffer, char, matrix[0].datasize); \ 44 44 out = (outMode *)matrix[0].buffer + Npixels - 1; \ 45 45 in = (inMode *)matrix[0].buffer + Npixels - 1; \ … … 62 62 *out = *in*A + B; \ 63 63 } \ 64 REALLOCATE (matrix[0].buffer, char, matrix[0]. size);64 REALLOCATE (matrix[0].buffer, char, matrix[0].datasize); 65 65 66 66 # define CONVERTSAME_FF(MY_NAN) \ … … 79 79 inMode *in; \ 80 80 outMode *out; \ 81 REALLOCATE (matrix[0].buffer, char, matrix[0]. size); \81 REALLOCATE (matrix[0].buffer, char, matrix[0].datasize); \ 82 82 out = (outMode *)matrix[0].buffer + Npixels - 1; \ 83 83 in = (inMode *)matrix[0].buffer + Npixels - 1; \ … … 106 106 return (TRUE); 107 107 108 matrix[0].bitpix = header[0].bitpix = outBitpix;109 matrix[0].bscale = header[0].bscale = outScale;110 matrix[0].bzero = header[0].bzero = outZero;111 matrix[0].unsign = header[0].unsign = outUnsign;112 matrix[0]. size= gfits_data_size (header);108 matrix[0].bitpix = header[0].bitpix = outBitpix; 109 matrix[0].bscale = header[0].bscale = outScale; 110 matrix[0].bzero = header[0].bzero = outZero; 111 matrix[0].unsign = header[0].unsign = outUnsign; 112 matrix[0].datasize = gfits_data_size (header); 113 113 gfits_modify (header, "BITPIX", "%d", 1, outBitpix); 114 114 gfits_modify (header, "BSCALE", "%lf", 1, outScale); 115 115 gfits_modify (header, "BZERO", "%lf", 1, outZero); 116 gfits_modify (header, "UNSIGN", "%t", 1, outUnsign);116 gfits_modify_alt (header, "UNSIGN", "%t", 1, outUnsign); 117 117 118 118 Npixels = header[0].Naxis[0]*header[0].Naxis[1]; … … 426 426 { 427 427 char *out; 428 int Nextra;428 off_t Nextra; 429 429 430 430 out = (char *)matrix[0].buffer; 431 Nextra = matrix[0]. size - nbytes;431 Nextra = matrix[0].datasize - nbytes; 432 432 bzero (&out[nbytes], Nextra); 433 433 } -
trunk/Ohana/src/libfits/matrix/F_copy_M.c
r17903 r27435 7 7 int i; 8 8 9 matrix2[0].unsign = matrix1[0].unsign;10 matrix2[0].bitpix = matrix1[0].bitpix;11 matrix2[0]. size = matrix1[0].size;12 matrix2[0].bzero = matrix1[0].bzero;13 matrix2[0].bscale = matrix1[0].bscale;14 matrix2[0].Naxes = matrix1[0].Naxes;9 matrix2[0].unsign = matrix1[0].unsign; 10 matrix2[0].bitpix = matrix1[0].bitpix; 11 matrix2[0].datasize = matrix1[0].datasize; 12 matrix2[0].bzero = matrix1[0].bzero; 13 matrix2[0].bscale = matrix1[0].bscale; 14 matrix2[0].Naxes = matrix1[0].Naxes; 15 15 for (i = 0; i < FT_MAX_NAXES; i++) 16 16 matrix2[0].Naxis[i] = matrix1[0].Naxis[i]; 17 17 18 18 if (matrix2[0].buffer != NULL) free (matrix2[0].buffer); 19 ALLOCATE (matrix2[0].buffer, char, matrix2[0]. size);19 ALLOCATE (matrix2[0].buffer, char, matrix2[0].datasize); 20 20 21 memcpy (matrix2[0].buffer, matrix1[0].buffer, matrix2[0]. size);21 memcpy (matrix2[0].buffer, matrix1[0].buffer, matrix2[0].datasize); 22 22 23 23 return (TRUE); -
trunk/Ohana/src/libfits/matrix/F_create_M.c
r17903 r27435 3 3 4 4 /*********************** fits create matrix *******************************/ 5 int gfits_create_matrix (header, matrix) 6 Header *header; 7 Matrix *matrix; 8 { 5 int gfits_create_matrix (Header *header, Matrix *matrix) { 9 6 10 int i, Nbytes; 7 int i; 8 off_t Nbytes; 11 9 12 10 matrix[0].bitpix = header[0].bitpix; … … 20 18 Nbytes = gfits_data_size (header); 21 19 ALLOCATE (matrix[0].buffer, char, MAX (Nbytes, 1)); 22 bzero (matrix[0].buffer, Nbytes);20 memset (matrix[0].buffer, 0, Nbytes); 23 21 24 matrix[0]. size = Nbytes;22 matrix[0].datasize = Nbytes; 25 23 return (TRUE); 26 24 -
trunk/Ohana/src/libfits/matrix/F_get_M_value.c
r15487 r27435 3 3 4 4 /***************** fits get matrix value ***********************************/ 5 double gfits_get_matrix_value (Matrix *matrix, int x, int y) {5 double gfits_get_matrix_value (Matrix *matrix, off_t x, off_t y) { 6 6 7 7 double value; … … 11 11 return (0.0); 12 12 pixel = matrix[0].Naxis[0]*y + x; 13 value = HUGE_VAL;13 value = NAN; 14 14 15 15 if (matrix[0].unsign) { -
trunk/Ohana/src/libfits/matrix/F_insert_M.c
r15487 r27435 3 3 4 4 /*********************** fits insert array ***********************************/ 5 void gfits_insert_matrix (Matrix *matrix, Matrix *array, int x, int y) {5 void gfits_insert_matrix (Matrix *matrix, Matrix *array, off_t x, off_t y) { 6 6 7 7 /* there is no check here to match BITPIX, BZERO, or BSCALE */ 8 8 9 int i, start_m, Nbytes_m, Nbytes; 9 int i; 10 off_t start_m, Nbytes_m, Nbytes; 10 11 11 12 if ((x + array[0].Naxis[0] > matrix[0].Naxis[0]) || 12 13 (y + array[0].Naxis[1] > matrix[0].Naxis[1])) { 13 fprintf (stderr, "can't insert array here: (%d,%d) - (%d,%d) vs (%d,%d)\n", 14 x, y, x + array[0].Naxis[0], y + array[0].Naxis[1], 15 matrix[0].Naxis[0], matrix[0].Naxis[1]); 14 fprintf (stderr, "can't insert array here: (%lld,%lld) - (%lld,%lld) vs (%lld,%lld)\n", 15 (long long) x, 16 (long long) y, 17 (long long) x + array[0].Naxis[0], 18 (long long) y + array[0].Naxis[1], 19 (long long) matrix[0].Naxis[0], 20 (long long) matrix[0].Naxis[1]); 16 21 return; 17 22 } -
trunk/Ohana/src/libfits/matrix/F_load_M.c
r16139 r27435 13 13 int gfits_load_matrix (FILE *f, Matrix *matrix, Header *header) { 14 14 15 int i, nbytes, Nbytes; 15 16 off_t i, nbytes, Nbytes; 16 17 17 18 matrix[0].bitpix = header[0].bitpix; … … 25 26 Nbytes = gfits_data_size (header); 26 27 ALLOCATE (matrix[0].buffer, char, Nbytes); 27 matrix[0]. size = Nbytes;28 matrix[0].datasize = Nbytes; 28 29 29 30 nbytes = fread (matrix[0].buffer, sizeof(char), Nbytes, f); … … 94 95 } 95 96 if (nbytes != Nbytes) { /* this is a FITS error, but often the image is OK */ 96 fprintf (stderr, "incomplete block in FITS file: (% d, %d)\n", nbytes,Nbytes);97 fprintf (stderr, "incomplete block in FITS file: (%lld, %lld)\n", (long long) nbytes, (long long) Nbytes); 97 98 return (TRUE); 98 99 } -
trunk/Ohana/src/libfits/matrix/F_matrix.c
r15751 r27435 2 2 # include <gfitsio.h> 3 3 4 int gfits_data_size (Header *header) {4 off_t gfits_data_size (Header *header) { 5 5 6 int i, Nrec, size; 6 int i; 7 off_t Nrec, size; 7 8 8 9 if (header[0].Naxes == 0) return (0); … … 25 26 } 26 27 27 int gfits_data_min_size (Header *header) {28 off_t gfits_data_min_size (Header *header) { 28 29 29 int i, size; 30 int i; 31 off_t size; 30 32 31 33 if (header[0].Naxes == 0) return (0); -
trunk/Ohana/src/libfits/matrix/F_read_M.c
r7054 r27435 18 18 if (f == NULL) return (FALSE); 19 19 20 fseek (f, header.size, 0);20 fseeko (f, header.datasize, 0); 21 21 22 22 status = gfits_load_matrix (f, matrix, &header); -
trunk/Ohana/src/libfits/matrix/F_read_portion.c
r16139 r27435 9 9 /*********************** fits read matrix ***********************************/ 10 10 /** the result of this function is a matrix with dimension Npix * 1 **/ 11 int gfits_read_portion (char *filename, Matrix *matrix, int Nskip, int Npix) {11 int gfits_read_portion (char *filename, Matrix *matrix, off_t Nskip, off_t Npix) { 12 12 13 13 FILE *f; 14 14 Header header; 15 int status, nbytes, Nbytes, Nrec; 15 int status; 16 off_t nbytes, Nbytes, Nrec; 16 17 17 18 status = gfits_read_header (filename, &header); … … 37 38 Nbytes = FT_RECORD_SIZE * Nrec; 38 39 } 39 matrix[0]. size = Nbytes;40 matrix[0].datasize = Nbytes; 40 41 ALLOCATE (matrix[0].buffer, char, Nbytes); 41 42 … … 43 44 f = fopen (filename, "r"); 44 45 if (f == NULL) return (FALSE); 45 fseek (f, header.size + Nskip, SEEK_SET);46 fseeko (f, header.datasize + Nskip, SEEK_SET); 46 47 nbytes = fread (matrix[0].buffer, sizeof(char), Nbytes, f); 47 48 if (nbytes != Nbytes) { … … 52 53 53 54 # ifdef BYTE_SWAP 54 { 55 int i, perpix; 56 unsigned char *byte0, *byte1, *byte2, *byte3, *byte4, *byte5, *byte6, *byte7, ctmp; 55 { 56 off_t i; 57 int perpix; 58 unsigned char *byte0, *byte1, *byte2, *byte3, *byte4, *byte5, *byte6, *byte7, ctmp; 57 59 58 perpix = abs(header.bitpix) / 8; 59 if (perpix > 1) { 60 byte0 = (unsigned char *) matrix[0].buffer; 61 byte1 = (unsigned char *) matrix[0].buffer + 1; 62 byte2 = (unsigned char *) matrix[0].buffer + 2; 63 byte3 = (unsigned char *) matrix[0].buffer + 3; 64 byte4 = (unsigned char *) matrix[0].buffer + 4; 65 byte5 = (unsigned char *) matrix[0].buffer + 5; 66 byte6 = (unsigned char *) matrix[0].buffer + 6; 67 byte7 = (unsigned char *) matrix[0].buffer + 7; 68 if (perpix == 2) { 69 for (i = 0; i < nbytes; i+=2, byte0 += 2, byte1 += 2) { 70 ctmp = *byte0; 71 *byte0 = *byte1; 72 *byte1 = ctmp; 60 perpix = abs(header.bitpix) / 8; 61 if (perpix > 1) { 62 byte0 = (unsigned char *) matrix[0].buffer; 63 byte1 = (unsigned char *) matrix[0].buffer + 1; 64 byte2 = (unsigned char *) matrix[0].buffer + 2; 65 byte3 = (unsigned char *) matrix[0].buffer + 3; 66 byte4 = (unsigned char *) matrix[0].buffer + 4; 67 byte5 = (unsigned char *) matrix[0].buffer + 5; 68 byte6 = (unsigned char *) matrix[0].buffer + 6; 69 byte7 = (unsigned char *) matrix[0].buffer + 7; 70 if (perpix == 2) { 71 for (i = 0; i < nbytes; i+=2, byte0 += 2, byte1 += 2) { 72 ctmp = *byte0; 73 *byte0 = *byte1; 74 *byte1 = ctmp; 75 } 73 76 } 74 }75 if (perpix == 4) {76 for (i = 0; i < nbytes; i+=4, byte0 += 4, byte1 += 4, byte2 += 4, byte3 += 4) { 77 ctmp = *byte0;78 *byte0 = *byte3;79 *byte3 = ctmp;80 ctmp = *byte1;81 *byte1 = *byte2;82 *byte2 = ctmp;77 if (perpix == 4) { 78 for (i = 0; i < nbytes; i+=4, byte0 += 4, byte1 += 4, byte2 += 4, byte3 += 4) { 79 ctmp = *byte0; 80 *byte0 = *byte3; 81 *byte3 = ctmp; 82 ctmp = *byte1; 83 *byte1 = *byte2; 84 *byte2 = ctmp; 85 } 83 86 } 84 }85 if (perpix == 8) {86 for (i = 0; i < nbytes; i+=8, byte0 += 8, byte1 += 8, byte2 += 8, byte3 += 8, byte4 += 8, byte5 += 8, byte6 += 8, byte7 += 8) { 87 ctmp = *byte0;88 *byte0 = *byte7;89 *byte7 = ctmp;90 ctmp = *byte1;91 *byte1 = *byte6;92 *byte6 = ctmp;93 ctmp = *byte1;94 *byte2 = *byte5;95 *byte5 = ctmp;96 ctmp = *byte1;97 *byte3 = *byte4;98 *byte4 = ctmp;87 if (perpix == 8) { 88 for (i = 0; i < nbytes; i+=8, byte0 += 8, byte1 += 8, byte2 += 8, byte3 += 8, byte4 += 8, byte5 += 8, byte6 += 8, byte7 += 8) { 89 ctmp = *byte0; 90 *byte0 = *byte7; 91 *byte7 = ctmp; 92 ctmp = *byte1; 93 *byte1 = *byte6; 94 *byte6 = ctmp; 95 ctmp = *byte1; 96 *byte2 = *byte5; 97 *byte5 = ctmp; 98 ctmp = *byte1; 99 *byte3 = *byte4; 100 *byte4 = ctmp; 101 } 99 102 } 100 103 } 101 104 } 102 }103 105 # endif 104 106 … … 106 108 107 109 if (nbytes < Nbytes - 2880) { /* this is a bad FITS error: image is not OK */ 108 fprintf (stderr, "error reading in matrix data from FITS file %s (% d < %d - 2880)\n", filename, nbytes,Nbytes);110 fprintf (stderr, "error reading in matrix data from FITS file %s (%lld < %lld - 2880)\n", filename, (long long) nbytes, (long long) Nbytes); 109 111 return (FALSE); 110 112 } 111 113 if (nbytes != Nbytes) { /* this is a FITS error, but often the image is OK */ 112 fprintf (stderr, "incomplete block in %s: (% d, %d)\n", filename, nbytes,Nbytes);114 fprintf (stderr, "incomplete block in %s: (%lld, %lld)\n", filename, (long long) nbytes, (long long) Nbytes); 113 115 return (TRUE); 114 116 } -
trunk/Ohana/src/libfits/matrix/F_read_segment.c
r16139 r27435 36 36 int gfits_fread_matrix_segment (FILE *f, Matrix *matrix, Header *header, char *region) { 37 37 38 int status, i, nbytes, Nbytes, Nskip, NbytesData; 38 int status; 39 off_t i, nbytes, Nbytes, Nskip, NbytesData; 39 40 int wantaxis[FT_MAX_NAXES][2]; 40 41 double tmp; … … 65 66 matrix[0].Naxis[i] = wantaxis[i][1] - wantaxis[i][0]; 66 67 67 matrix[0]. size = abs (matrix[0].bitpix) / 8;68 matrix[0].datasize = abs (matrix[0].bitpix) / 8; 68 69 for (i = 0; i < matrix[0].Naxes; i++) 69 matrix[0]. size *= matrix[0].Naxis[i];70 matrix[0].datasize *= matrix[0].Naxis[i]; 70 71 71 72 Nskip = wantaxis[2][0]*matrix[0].Naxis[0]*matrix[0].Naxis[1]*abs(matrix[0].bitpix)/8; 72 NbytesData = Nskip + matrix[0]. size;73 NbytesData = Nskip + matrix[0].datasize; 73 74 74 75 if (NbytesData % FT_RECORD_SIZE) 75 Nbytes = FT_RECORD_SIZE * (( int) (NbytesData / FT_RECORD_SIZE) + 1) - Nskip;76 Nbytes = FT_RECORD_SIZE * ((off_t) (NbytesData / FT_RECORD_SIZE) + 1) - Nskip; 76 77 else 77 Nbytes = FT_RECORD_SIZE * (( int) (NbytesData / FT_RECORD_SIZE)) - Nskip;78 Nbytes = FT_RECORD_SIZE * ((off_t) (NbytesData / FT_RECORD_SIZE)) - Nskip; 78 79 79 80 ALLOCATE (matrix[0].buffer, char, MAX (Nbytes, 1)); … … 86 87 87 88 /* currently only good for reading in full planes in 3-D */ 88 fseek (f, Nskip, SEEK_CUR);89 fseeko (f, Nskip, SEEK_CUR); 89 90 nbytes = fread (matrix[0].buffer, sizeof(char), Nbytes, f); 90 91 if (nbytes != Nbytes) { … … 92 93 } 93 94 94 matrix[0]. size = Nbytes;95 matrix[0].datasize = Nbytes; 95 96 96 97 # ifdef BYTE_SWAP … … 147 148 148 149 if (nbytes < Nbytes - 2880) { /* this is a bad FITS error: image is not OK */ 149 fprintf (stderr, "error reading in matrix data from FITS file (% d < %d - 2880)\n", nbytes,Nbytes);150 fprintf (stderr, "error reading in matrix data from FITS file (%lld < %lld - 2880)\n", (long long) nbytes, (long long) Nbytes); 150 151 return (FALSE); 151 152 } 152 153 if (nbytes != Nbytes) { /* this is a FITS error, but often the image is OK */ 153 fprintf (stderr, "incomplete block in FITS file: (% d, %d)\n", nbytes,Nbytes);154 fprintf (stderr, "incomplete block in FITS file: (%lld, %lld)\n", (long long) nbytes, (long long) Nbytes); 154 155 return (TRUE); 155 156 } -
trunk/Ohana/src/libfits/matrix/F_set_M_value.c
r15487 r27435 3 3 4 4 /****************** fits set matrix value ***********************************/ 5 void gfits_set_matrix_value (Matrix *matrix, int x, int y, double Value) {5 void gfits_set_matrix_value (Matrix *matrix, off_t x, off_t y, double Value) { 6 6 7 int pixel;7 off_t pixel; 8 8 double value; 9 9 -
trunk/Ohana/src/libfits/matrix/F_write_M.c
r16139 r27435 11 11 if (f == NULL) return (FALSE); 12 12 13 fseek (f, 0, SEEK_END); /* write matrix to end of file! */13 fseeko (f, 0LL, SEEK_END); /* write matrix to end of file! */ 14 14 15 15 status = gfits_fwrite_matrix (f, matrix); … … 21 21 int gfits_fwrite_matrix (FILE *f, Matrix *matrix) { 22 22 23 int status, nbytes, Nbytes; 23 int status; 24 off_t nbytes, Nbytes; 24 25 25 26 status = TRUE; … … 27 28 /* this is a bit dangerous: we are not realloc'ing the matrix. 28 29 if the size is wrong, it probably should simply pad the fwrite statement. 29 better policy should be defined (ie, matrix. size always correct blocking?)30 better policy should be defined (ie, matrix.datasize always correct blocking?) 30 31 */ 31 32 32 if (matrix[0]. size % FT_RECORD_SIZE)33 nbytes = FT_RECORD_SIZE * (( int) (matrix[0].size / FT_RECORD_SIZE) + 1);33 if (matrix[0].datasize % FT_RECORD_SIZE) 34 nbytes = FT_RECORD_SIZE * ((off_t) (matrix[0].datasize / FT_RECORD_SIZE) + 1); 34 35 else 35 nbytes = FT_RECORD_SIZE * (( int) (matrix[0].size / FT_RECORD_SIZE));36 nbytes = FT_RECORD_SIZE * ((off_t) (matrix[0].datasize / FT_RECORD_SIZE)); 36 37 37 38 /* this is a bit cumbersome: swap all words, write out file, then swap back... */ 38 39 # ifdef BYTE_SWAP 39 40 { 40 int i;41 off_t i; 41 42 unsigned char *byte0, *byte1, *byte2, *byte3, *byte4, *byte5, *byte6, *byte7, tmp; 42 43 int perpix; … … 96 97 # ifdef BYTE_SWAP 97 98 { 98 int i;99 off_t i; 99 100 unsigned char *byte0, *byte1, *byte2, *byte3, *byte4, *byte5, *byte6, *byte7, tmp; 100 101 int perpix; -
trunk/Ohana/src/libfits/table/F_create_T.c
r15487 r27435 5 5 int gfits_create_table (Header *header, FTable *table) { 6 6 7 int Nbytes;7 off_t Nbytes; 8 8 char type[80]; 9 9 … … 19 19 memset (table[0].buffer, 0, Nbytes); 20 20 } 21 table[0]. size = Nbytes;21 table[0].datasize = Nbytes; 22 22 return (TRUE); 23 23 … … 29 29 int gfits_create_vtable (Header *header, VTable *table, int Nrow) { 30 30 31 int i, Nx, Ny;31 off_t i, Nx, Ny; 32 32 char type[80]; 33 33 … … 37 37 Nx = table[0].header[0].Naxis[0]; 38 38 Ny = table[0].header[0].Naxis[0]; 39 table[0]. size = gfits_data_size (header);40 table[0].pad = table[0]. size - Nx*Ny;39 table[0].datasize = gfits_data_size (header); 40 table[0].pad = table[0].datasize - Nx*Ny; 41 41 42 42 table[0].Nrow = Nrow; 43 43 ALLOCATE (table[0].buffer, char *, MAX (Nrow, 1)); 44 ALLOCATE (table[0].row, int, MAX (Nrow, 1));44 ALLOCATE (table[0].row, off_t, MAX (Nrow, 1)); 45 45 for (i = 0; i < Nrow; i++) { 46 46 ALLOCATE (table[0].buffer[i], char, Nx); -
trunk/Ohana/src/libfits/table/F_create_TH.c
r15487 r27435 13 13 char axis[10]; 14 14 15 header[0]. size = NBYTES;15 header[0].datasize = NBYTES; 16 16 17 17 ALLOCATE (header[0].buffer, char, NBYTES); … … 27 27 for (i = 0; i < header[0].Naxes; i++) { 28 28 sprintf (axis, "NAXIS%d", i + 1); 29 gfits_modify (header, axis, "% d", 1, header[0].Naxis[i], 1);29 gfits_modify (header, axis, "%lld", 1, (long long) header[0].Naxis[i]); 30 30 } 31 31 -
trunk/Ohana/src/libfits/table/F_define_column.c
r26384 r27435 5 5 int gfits_define_bintable_column (Header *header, char *format, char *label, char *comment, char *unit, double bscale, double bzero) { 6 6 7 int Nfields, Nbytes, Nval, Naxis1; 7 off_t Naxis1; 8 int Nfields, Nbytes, Nval; 8 9 char type[16], field[16]; 9 10 … … 12 13 Nfields = 0; 13 14 gfits_scan (header, "TFIELDS", "%d", 1, &Nfields); 14 gfits_scan (header, "NAXIS1", "% d", 1,&Naxis1);15 gfits_scan (header, "NAXIS1", "%lld", 1, (long long *) &Naxis1); 15 16 Nfields ++; 16 17 Naxis1 += Nbytes*Nval; … … 18 19 sprintf (field, "TTYPE%d", Nfields); 19 20 gfits_modify (header, field, "%s", 1, label); 20 gfits_modify (header, field, "%C", 1, comment);21 gfits_modify_alt (header, field, "%C", 1, comment); 21 22 sprintf (field, "TUNIT%d", Nfields); 22 23 gfits_modify (header, field, "%s", 1, unit); … … 34 35 /* update TFIELDS & NAXIS1 */ 35 36 gfits_modify (header, "TFIELDS", "%d", 1, Nfields); 36 gfits_modify (header, "NAXIS1", "% d", 1,Naxis1);37 gfits_modify (header, "NAXIS1", "%lld", 1, (long long) Naxis1); 37 38 header[0].Naxis[0] = Naxis1; 38 39 … … 43 44 int gfits_define_table_column (Header *header, char *format, char *label, char *comment, char *unit) { 44 45 45 int Nstart, Nfields, Nbytes, Nval, Naxis1; 46 off_t Naxis1; 47 int Nstart, Nfields, Nbytes, Nval; 46 48 char type[16], field[16], cformat[16]; 47 49 … … 51 53 Nfields = 0; 52 54 gfits_scan (header, "TFIELDS", "%d", 1, &Nfields); 53 gfits_scan (header, "NAXIS1", "% d", 1,&Naxis1);55 gfits_scan (header, "NAXIS1", "%lld", 1, (long long *) &Naxis1); 54 56 Nstart = Naxis1 + 1; 55 57 Nfields ++; … … 58 60 sprintf (field, "TTYPE%d", Nfields); 59 61 gfits_modify (header, field, "%s", 1, label); 60 gfits_modify (header, field, "%C", 1, comment);62 gfits_modify_alt (header, field, "%C", 1, comment); 61 63 sprintf (field, "TUNIT%d", Nfields); 62 64 gfits_modify (header, field, "%s", 1, unit); … … 68 70 69 71 gfits_modify (header, "TFIELDS", "%d", 1, Nfields); 70 gfits_modify (header, "NAXIS1", "% d", 1,Naxis1);72 gfits_modify (header, "NAXIS1", "%lld", 1, (long long) Naxis1); 71 73 header[0].Naxis[0] = Naxis1; 72 74 -
trunk/Ohana/src/libfits/table/F_get_column.c
r26384 r27435 16 16 tmp = Pin[3]; Pin[3] = Pin[4]; Pin[4] = tmp; } 17 17 18 void *gfits_get_bintable_column_data (Header *header, FTable *table, char *label, char *type, int *Nrow, int *Ncol) { 19 20 int i, N, Nfields, Nval, Nbytes, Nx, Ny, Nstart, Nv, Nb; 18 void *gfits_get_bintable_column_data (Header *header, FTable *table, char *label, char *type, off_t *Nrow, int *Ncol) { 19 20 off_t Nx, Ny; 21 int i, N, Nfields, Nval, Nbytes, Nstart, Nv, Nb; 21 22 char tlabel[80], field[80], format[80], tmpline[16]; 22 23 char *Pin, *Pout, *array; … … 50 51 51 52 /* check existing table dimensions */ 52 gfits_scan (header, "NAXIS1", "% d", 1,&Nx);53 gfits_scan (header, "NAXIS2", "% d", 1,&Ny);53 gfits_scan (header, "NAXIS1", "%lld", 1, (long long *) &Nx); 54 gfits_scan (header, "NAXIS2", "%lld", 1, (long long *) &Ny); 54 55 55 56 /* scan columns to find insert point */ … … 153 154 int gfits_get_bintable_column (Header *header, FTable *table, char *label, void **data) { 154 155 155 int i, N, Nfields, Nval, Nbytes, Nx, Ny, Nstart, Nv, Nb; 156 off_t Nx, Ny; 157 int i, N, Nfields, Nval, Nbytes, Nstart, Nv, Nb; 156 158 char tlabel[80], field[80], format[80], type[16], tmpline[16]; 157 159 char *Pin, *Pout, *array; … … 185 187 186 188 /* check existing table dimensions */ 187 gfits_scan (header, "NAXIS1", "% d", 1,&Nx);188 gfits_scan (header, "NAXIS2", "% d", 1,&Ny);189 gfits_scan (header, "NAXIS1", "%lld", 1, (long long *) &Nx); 190 gfits_scan (header, "NAXIS2", "%lld", 1, (long long *) &Ny); 189 191 190 192 /* scan columns to find insert point */ … … 307 309 int gfits_get_table_column (Header *header, FTable *table, char *label, void **data) { 308 310 309 int i, N, Nfields, Nval, Nbytes, Nx, Ny, Nstart, Nv, Nb; 311 off_t Nx, Ny; 312 int i, N, Nfields, Nval, Nbytes, Nstart, Nv, Nb; 310 313 char tlabel[80], field[80], format[80], cformat[80], type[16], tmp[16]; 311 314 char *array, *Pin, *Pout, *line; … … 333 336 334 337 /* check existing table dimensions */ 335 gfits_scan (header, "NAXIS1", "% d", 1,&Nx);336 gfits_scan (header, "NAXIS2", "% d", 1,&Ny);338 gfits_scan (header, "NAXIS1", "%lld", 1, (long long *) &Nx); 339 gfits_scan (header, "NAXIS2", "%lld", 1, (long long *) &Ny); 337 340 338 341 /* scan columns to find insert point */ -
trunk/Ohana/src/libfits/table/F_read_T.c
r15751 r27435 19 19 int gfits_fread_ftable (FILE *f, FTable *table, char *extname) { 20 20 21 int j, found, Nbytes; 21 int j, found; 22 off_t Nbytes; 22 23 Header *header; 23 24 char tname[80]; 24 25 25 26 header = table[0].header; 26 fseek (f, 0, SEEK_SET);27 fseeko (f, 0, SEEK_SET); 27 28 28 29 found = FALSE; … … 42 43 /* skip to next header */ 43 44 Nbytes = gfits_data_size (header); 44 fseek (f, Nbytes, SEEK_CUR);45 fseeko (f, Nbytes, SEEK_CUR); 45 46 gfits_free_header (header); 46 47 } … … 51 52 int gfits_fread_ftable_data (FILE *f, FTable *table) { 52 53 53 int Nbytes, Nread;54 off_t Nbytes, Nread; 54 55 char string[128]; 55 56 … … 63 64 perror (string); 64 65 if (Nread < gfits_data_min_size (table[0].header)) { 65 fprintf (stderr, "error: fits read error in %s, read % d, need %d\n", __func__, Nread,gfits_data_min_size (table[0].header));66 fprintf (stderr, "error: fits read error in %s, read %lld, need %lld\n", __func__, (long long) Nread, (long long) gfits_data_min_size (table[0].header)); 66 67 gfits_free_table (table); 67 68 return (FALSE); … … 69 70 fprintf (stderr, "warning: file missing pad\n"); 70 71 } 71 table[0]. size = Nbytes;72 table[0].datasize = Nbytes; 72 73 return (TRUE); 73 74 } 74 75 75 76 /*********************** fits read ftable data ***********************************/ 76 int gfits_fread_ftable_range (FILE *f, FTable *table, int start, int Nrows) {77 78 int Nbytes, Nread, Nskip, Nx, Ny;77 int gfits_fread_ftable_range (FILE *f, FTable *table, off_t start, off_t Nrows) { 78 79 off_t Nbytes, Nread, Nskip, Nx, Ny; 79 80 80 81 /* find disk table size */ … … 93 94 ALLOCATE (table[0].buffer, char, MAX (Nbytes, 1)); 94 95 95 fseek (f, Nskip, SEEK_CUR);96 fseeko (f, Nskip, SEEK_CUR); 96 97 97 98 Nread = fread (table[0].buffer, sizeof (char), Nbytes, f); … … 108 109 /* modify structure and header to match actual read rows Ny */ 109 110 table[0].header[0].Naxis[1] = Nrows; 110 gfits_modify (table[0].header, "NAXIS2", "% d", 1,Nrows);111 table[0]. size = gfits_data_size (table[0].header);111 gfits_modify (table[0].header, "NAXIS2", "%lld", 1, (long long) Nrows); 112 table[0].datasize = gfits_data_size (table[0].header); 112 113 113 114 return (TRUE); … … 115 116 116 117 /*********************** fits read ftable data ***********************************/ 117 int gfits_fread_vtable_range (FILE *f, VTable *table, int start, int Nrows) {118 119 int i, Nbytes, Nread, Nskip, Nx, Ny;118 int gfits_fread_vtable_range (FILE *f, VTable *table, off_t start, off_t Nrows) { 119 120 off_t i, Nbytes, Nread, Nskip, Nx, Ny; 120 121 char *buffer; 121 122 … … 123 124 Nx = table[0].header[0].Naxis[0]; 124 125 Ny = table[0].header[0].Naxis[1]; 125 table[0]. size = gfits_data_size (table[0].header);126 table[0].pad = table[0]. size - Nx*Ny;126 table[0].datasize = gfits_data_size (table[0].header); 127 table[0].pad = table[0].datasize - Nx*Ny; 127 128 128 129 if (start < 0) return (FALSE); … … 133 134 ALLOCATE (buffer, char, MAX (Nbytes, 1)); 134 135 135 fseek (f, Nskip, SEEK_CUR);136 fseeko (f, Nskip, SEEK_CUR); 136 137 Nread = fread (buffer, sizeof (char), Nbytes, f); 137 138 if (Nread != Nbytes) { … … 141 142 } 142 143 143 ALLOCATE (table[0].row, int, MAX (Nrows, 1));144 ALLOCATE (table[0].row, off_t, MAX (Nrows, 1)); 144 145 ALLOCATE (table[0].buffer, char *, MAX (Nrows, 1)); 145 146 for (i = 0; i < Nrows; i++) { … … 154 155 155 156 /*********************** fits read virtual table ***********************************/ 156 int gfits_fread_vtable (FILE *f, VTable *table, char *extname, int Nrow, int *row) { 157 158 int i, j, Nbytes, Nread; 159 int start, Nx, Ny, offset; 157 int gfits_fread_vtable (FILE *f, VTable *table, char *extname, off_t Nrow, off_t *row) { 158 159 off_t i, j; 160 off_t Nbytes, Nread; 161 off_t start, Nx, Ny, offset; 160 162 Header *header; 161 163 char tname[80]; 162 164 163 165 header = table[0].header; 164 fseek (f, 0, SEEK_SET);166 fseeko (f, 0, SEEK_SET); 165 167 166 168 for (j = -1; TRUE; j++) { … … 176 178 if (strcmp (tname, extname)) { 177 179 /* skip to next header */ 178 fseek (f, Nbytes, SEEK_CUR);180 fseeko (f, Nbytes, SEEK_CUR); 179 181 gfits_free_header (header); 180 182 continue; … … 182 184 183 185 /* file pointer is at beginning of desired table data */ 184 start = ftell (f);185 gfits_scan (header, "NAXIS1", "% d", 1,&Nx);186 gfits_scan (header, "NAXIS2", "% d", 1,&Ny);186 start = ftello (f); 187 gfits_scan (header, "NAXIS1", "%lld", 1, (long long *) &Nx); 188 gfits_scan (header, "NAXIS2", "%lld", 1, (long long *) &Ny); 187 189 for (i = 0; i < Nrow; i++) { 188 190 if (row[i] > Ny) { return (FALSE); } … … 193 195 ALLOCATE (table[0].buffer[i], char, MAX (1, Nx)); 194 196 offset = start + Nx*row[i]; 195 fseek (f, offset, SEEK_SET);197 fseeko (f, offset, SEEK_SET); 196 198 Nread = fread (table[0].buffer[i], sizeof (char), Nx, f); 197 199 if (Nread != Nx) { … … 202 204 203 205 table[0].Nrow = Nrow; 204 ALLOCATE (table[0].row, int, MAX (1, Nrow));206 ALLOCATE (table[0].row, off_t, MAX (1, Nrow)); 205 207 for (i = 0; i < Nrow; i++) table[0].row[i] = row[i]; 206 table[0]. size= gfits_data_size (table[0].header);207 table[0].pad = table[0].size - Nx*Ny;208 table[0].datasize = gfits_data_size (table[0].header); 209 table[0].pad = table[0].datasize - Nx*Ny; 208 210 return (TRUE); 209 211 } … … 212 214 int gfits_fread_header_extname (FILE *f, Header *header, char *extname) { 213 215 214 int Nbytes;216 off_t Nbytes; 215 217 char current[80]; 216 218 217 fseek (f, 0, SEEK_SET);219 fseeko (f, 0, SEEK_SET); 218 220 gfits_fread_header (f, header); 219 221 … … 221 223 222 224 Nbytes = gfits_data_size (header); 223 fseek (f, Nbytes, SEEK_CUR);225 fseeko (f, Nbytes, SEEK_CUR); 224 226 225 227 while (gfits_fread_header (f, header)) { … … 227 229 if (!strcmp (current, extname)) return (TRUE); 228 230 Nbytes = gfits_data_size (header); 229 fseek (f, Nbytes, SEEK_CUR);231 fseeko (f, Nbytes, SEEK_CUR); 230 232 } 231 233 return (FALSE); -
trunk/Ohana/src/libfits/table/F_read_TH.c
r15743 r27435 7 7 FILE *f; 8 8 Header header; 9 int status, Nbytes; 9 int status; 10 off_t Nbytes; 10 11 11 12 status = gfits_read_header (filename, &header); … … 23 24 24 25 Nbytes = gfits_data_size (&header); 25 fseek (f, Nbytes, SEEK_SET);26 fseeko (f, Nbytes, SEEK_SET); 26 27 gfits_free_header (&header); 27 28 … … 36 37 37 38 char *p; 38 int i, done, status, Nbytes; 39 int i, done, status; 40 off_t Nbytes; 39 41 40 Theader[0]. size = 0;42 Theader[0].datasize = 0; 41 43 done = FALSE; 42 44 ALLOCATE (Theader[0].buffer, char, 1); … … 44 46 for (i = 0; !done; i++) { 45 47 REALLOCATE (Theader[0].buffer, char, (i + 1)*FT_RECORD_SIZE); 46 Nbytes = fread (&Theader[0].buffer[i*FT_RECORD_SIZE], 47 sizeof(char), FT_RECORD_SIZE, f); 48 Nbytes = fread (&Theader[0].buffer[i*FT_RECORD_SIZE], sizeof(char), FT_RECORD_SIZE, f); 48 49 if (Nbytes != FT_RECORD_SIZE) { 49 50 perror ("fits matrix read error"); 50 51 } 51 52 52 Theader[0]. size += Nbytes;53 if (Nbytes != FT_RECORD_SIZE) 53 Theader[0].datasize += Nbytes; 54 if (Nbytes != FT_RECORD_SIZE) { 54 55 done = TRUE; 56 } 55 57 p = gfits_header_field (Theader, "END", 1); 56 58 if (p != NULL) … … 68 70 if (!status) return (FALSE); 69 71 70 gfits_scan (Theader, "NAXIS1", "% d", 1,&Theader[0].Naxis[0]);71 gfits_scan (Theader, "NAXIS2", "% d", 1,&Theader[0].Naxis[1]);72 gfits_scan (Theader, "NAXIS3", "% d", 1,&Theader[0].Naxis[2]);73 gfits_scan (Theader, "NAXIS4", "% d", 1,&Theader[0].Naxis[3]);74 gfits_scan (Theader, "NAXIS5", "% d", 1,&Theader[0].Naxis[4]);75 gfits_scan (Theader, "NAXIS6", "% d", 1,&Theader[0].Naxis[5]);76 gfits_scan (Theader, "NAXIS7", "% d", 1,&Theader[0].Naxis[6]);77 gfits_scan (Theader, "NAXIS8", "% d", 1,&Theader[0].Naxis[7]);78 gfits_scan (Theader, "NAXIS9", "% d", 1,&Theader[0].Naxis[8]);79 gfits_scan (Theader, "NAXIS10", "% d", 1,&Theader[0].Naxis[9]);72 gfits_scan (Theader, "NAXIS1", "%lld", 1, (long long *) &Theader[0].Naxis[0]); 73 gfits_scan (Theader, "NAXIS2", "%lld", 1, (long long *) &Theader[0].Naxis[1]); 74 gfits_scan (Theader, "NAXIS3", "%lld", 1, (long long *) &Theader[0].Naxis[2]); 75 gfits_scan (Theader, "NAXIS4", "%lld", 1, (long long *) &Theader[0].Naxis[3]); 76 gfits_scan (Theader, "NAXIS5", "%lld", 1, (long long *) &Theader[0].Naxis[4]); 77 gfits_scan (Theader, "NAXIS6", "%lld", 1, (long long *) &Theader[0].Naxis[5]); 78 gfits_scan (Theader, "NAXIS7", "%lld", 1, (long long *) &Theader[0].Naxis[6]); 79 gfits_scan (Theader, "NAXIS8", "%lld", 1, (long long *) &Theader[0].Naxis[7]); 80 gfits_scan (Theader, "NAXIS9", "%lld", 1, (long long *) &Theader[0].Naxis[8]); 81 gfits_scan (Theader, "NAXIS10", "%lld", 1, (long long *) &Theader[0].Naxis[9]); 80 82 81 83 return (TRUE); -
trunk/Ohana/src/libfits/table/F_set_column.c
r16139 r27435 16 16 17 17 /***********************/ 18 int gfits_set_bintable_column (Header *header, FTable *table, char *label, void *data, int Nrow) { 19 20 int i, N, Nfields, Nval, Nbytes, Nx, Ny, nbytes, Nstart, Nv, Nb; 18 int gfits_set_bintable_column (Header *header, FTable *table, char *label, void *data, off_t Nrow) { 19 20 off_t Nx, Ny, nbytes; 21 int i, N, Nfields; 22 int Nval, Nbytes, Nstart, Nv, Nb; 21 23 char tlabel[80], field[80], format[80], type[16], tmpline[16]; 22 24 char *Pin, *Pout, *array; … … 47 49 48 50 /* check existing table dimensions */ 49 gfits_scan (header, "NAXIS1", "%d", 1,&Nx);50 gfits_scan (header, "NAXIS2", "%d", 1,&Ny);51 gfits_scan (header, "NAXIS1", "%lld", 1, (long long *) &Nx); 52 gfits_scan (header, "NAXIS2", "%lld", 1, (long long *) &Ny); 51 53 if (Ny == 0) { 52 54 Ny = Nrow; 53 55 header[0].Naxis[1] = Ny; 54 gfits_modify (header, "NAXIS2", "%d", 1,Ny);56 gfits_modify (header, "NAXIS2", "%lld", 1, (long long) Ny); 55 57 56 58 nbytes = gfits_data_size (header); 57 59 REALLOCATE (table[0].buffer, char, MAX (nbytes, 1)); 58 60 bzero (table[0].buffer, nbytes); 59 table[0]. size = nbytes;61 table[0].datasize = nbytes; 60 62 } 61 63 if (Ny != Nrow) return (FALSE); … … 151 153 152 154 /***********************/ 153 int gfits_set_table_column (Header *header, FTable *table, char *label, void *data, int Nrow) { 154 155 int i, N, Nfields, Nval, Nbytes, Nx, Ny, nbytes, Nstart, Nv, Nb; 155 int gfits_set_table_column (Header *header, FTable *table, char *label, void *data, off_t Nrow) { 156 157 off_t Nx, Ny, nbytes; 158 int i, N, Nfields, Nval, Nbytes, Nstart, Nv, Nb; 156 159 char tlabel[80], field[80], format[80], cformat[80], type[16], tmp[16]; 157 160 char *array, *Pin, *Pout, *line; … … 178 181 179 182 /* check existing table dimensions */ 180 gfits_scan (header, "NAXIS1", "%d", 1,&Nx);181 gfits_scan (header, "NAXIS2", "%d", 1,&Ny);183 gfits_scan (header, "NAXIS1", "%lld", 1, (long long *) &Nx); 184 gfits_scan (header, "NAXIS2", "%lld", 1, (long long *) &Ny); 182 185 if (Ny == 0) { 183 186 Ny = Nrow; 184 187 header[0].Naxis[1] = Ny; 185 gfits_modify (header, "NAXIS2", "%d", 1,Ny);188 gfits_modify (header, "NAXIS2", "%lld", 1, (long long) Ny); 186 189 187 190 nbytes = gfits_data_size (header); 188 191 REALLOCATE (table[0].buffer, char, MAX (nbytes, 1)); 189 192 bzero (table[0].buffer, nbytes); 190 table[0]. size = nbytes;193 table[0].datasize = nbytes; 191 194 } 192 195 if (Ny != Nrow) return (FALSE); -
trunk/Ohana/src/libfits/table/F_table_format.c
r26384 r27435 3 3 4 4 /***********************/ 5 // get the format of a table column 6 // Nval : number of joined columns 7 // Nbytes : width of column 5 8 int gfits_bintable_format (char *format, char *type, int *Nval, int *Nbytes) { 6 9 … … 119 122 120 123 /** extract a table subset to a vtable ***/ 121 int gfits_table_to_vtable (FTable *ftable, VTable *vtable, int start, int Nkeep) {124 int gfits_table_to_vtable (FTable *ftable, VTable *vtable, off_t start, off_t Nkeep) { 122 125 123 126 /* gfits_table_to_vtable (f, v, 0, Ny - 1) - keep all of table … … 125 128 */ 126 129 127 int i, Nx, Ny;128 129 gfits_scan (ftable[0].header, "NAXIS1", "% d", 1,&Nx);130 gfits_scan (ftable[0].header, "NAXIS2", "% d", 1,&Ny);130 off_t i, Nx, Ny; 131 132 gfits_scan (ftable[0].header, "NAXIS1", "%lld", 1, (long long *) &Nx); 133 gfits_scan (ftable[0].header, "NAXIS2", "%lld", 1, (long long *) &Ny); 131 134 132 135 if (start + Nkeep > Ny) return (FALSE); … … 134 137 if (Nkeep < 0) return (FALSE); 135 138 136 ALLOCATE (vtable[0].row, int, MAX (1, Nkeep));139 ALLOCATE (vtable[0].row, off_t, MAX (1, Nkeep)); 137 140 ALLOCATE (vtable[0].buffer, char *, MAX (1, Nkeep)); 138 141 for (i = 0; i < Nkeep; i++) { … … 143 146 144 147 vtable[0].header = ftable[0].header; 145 vtable[0]. size = ftable[0].size;148 vtable[0].datasize = ftable[0].datasize; 146 149 vtable[0].Nrow = Nkeep; 147 vtable[0].pad = vtable[0]. size - Nx*Ny;150 vtable[0].pad = vtable[0].datasize - Nx*Ny; 148 151 149 152 return (TRUE); … … 151 154 152 155 /** convert specified rows to vtable */ 153 int gfits_vtable_from_ftable (FTable *ftable, VTable *vtable, int *row, int Nrow) {154 155 int i, N, Nx, Ny;156 157 gfits_scan (ftable[0].header, "NAXIS1", "% d", 1,&Nx);158 gfits_scan (ftable[0].header, "NAXIS2", "% d", 1,&Ny);156 int gfits_vtable_from_ftable (FTable *ftable, VTable *vtable, off_t *row, off_t Nrow) { 157 158 off_t i, N, Nx, Ny; 159 160 gfits_scan (ftable[0].header, "NAXIS1", "%lld", 1, (long long *) &Nx); 161 gfits_scan (ftable[0].header, "NAXIS2", "%lld", 1, (long long *) &Ny); 159 162 160 163 /* make empty vtable from table */ 161 vtable[0].header = ftable[0].header; /* make this a copy? */162 vtable[0]. size = ftable[0].size;163 vtable[0].pad = vtable[0].size - Nx*Ny;164 vtable[0].Nrow = Ny;164 vtable[0].header = ftable[0].header; /* make this a copy? */ 165 vtable[0].datasize = ftable[0].datasize; 166 vtable[0].pad = vtable[0].datasize - Nx*Ny; 167 vtable[0].Nrow = Ny; 165 168 166 169 /* insert selected rows in vtable (mask rows marked with -1) */ 167 ALLOCATE (vtable[0].row, int, Nrow);170 ALLOCATE (vtable[0].row, off_t, Nrow); 168 171 ALLOCATE (vtable[0].buffer, char *, Nrow); 169 172 for (N = i = 0; i < Nrow; i++) { … … 181 184 char *gfits_table_print (FTable *table,...) { 182 185 183 int i, Nx, Nfields;184 int off, Nchar, Nval, Nbytes;186 off_t Nx, off; 187 int i, Nchar, Nval, Nbytes, Nfields; 185 188 char *line, format[64], field[16], type[16]; 186 189 va_list argp; … … 188 191 va_start (argp, table); 189 192 190 gfits_scan (table[0].header, "NAXIS1", "% d", 1,&Nx);193 gfits_scan (table[0].header, "NAXIS1", "%lld", 1, (long long *) &Nx); 191 194 gfits_scan (table[0].header, "TFIELDS", "%d", 1, &Nfields); 192 195 … … 220 223 // apply table tzero, tscal in situ (from storage to data) 221 224 int gfits_table_scale_data (FTable *ftable) { 222 223 int i, j, n, Nx, Ny, Nfields; 224 int off, Nchar, Nval, Nbytes, status; 225 226 off_t Nx, Ny, off; 227 int i, j, n, Nfields; 228 int Nchar, Nval, Nbytes, status; 225 229 char format[64], field[16], type[16]; 226 230 double tzero, tscale; … … 232 236 off = 0; 233 237 234 gfits_scan (ftable[0].header, "NAXIS1", "% d", 1,&Nx);235 gfits_scan (ftable[0].header, "NAXIS2", "% d", 1,&Ny);238 gfits_scan (ftable[0].header, "NAXIS1", "%lld", 1, (long long *) &Nx); 239 gfits_scan (ftable[0].header, "NAXIS2", "%lld", 1, (long long *) &Ny); 236 240 gfits_scan (ftable[0].header, "TFIELDS", "%d", 1, &Nfields); 237 241 … … 304 308 int gfits_table_scale_storage (FTable *ftable) { 305 309 306 int i, j, n, Nx, Ny, Nfields; 307 int off, Nchar, Nval, Nbytes, status; 310 off_t Nx, Ny, off; 311 int i, j, n, Nfields; 312 int Nchar, Nval, Nbytes, status; 308 313 char format[64], field[16], type[16]; 309 314 double tzero, tscale; … … 315 320 off = 0; 316 321 317 gfits_scan (ftable[0].header, "NAXIS1", "% d", 1,&Nx);318 gfits_scan (ftable[0].header, "NAXIS2", "% d", 1,&Ny);322 gfits_scan (ftable[0].header, "NAXIS1", "%lld", 1, (long long *) &Nx); 323 gfits_scan (ftable[0].header, "NAXIS2", "%lld", 1, (long long *) &Ny); 319 324 gfits_scan (ftable[0].header, "TFIELDS", "%d", 1, &Nfields); 320 325 -
trunk/Ohana/src/libfits/table/F_table_row.c
r15487 r27435 3 3 4 4 /*********************** fits table column ****************************/ 5 int gfits_add_rows (FTable *table, char *data, int Nrow, int Nbytes) {5 int gfits_add_rows (FTable *table, char *data, off_t Nrow, off_t Nbytes) { 6 6 7 int Nx, Ny;8 int nbytes, Nstart;7 off_t Nx, Ny; 8 off_t nbytes, Nstart; 9 9 Header *header; 10 10 11 11 header = table[0].header; 12 12 13 gfits_scan (header, "NAXIS1", "% d", 1,&Nx);14 gfits_scan (header, "NAXIS2", "% d", 1,&Ny);13 gfits_scan (header, "NAXIS1", "%lld", 1, (long long *) &Nx); 14 gfits_scan (header, "NAXIS2", "%lld", 1, (long long *) &Ny); 15 15 16 16 if (header[0].Naxis[1] != Ny) return (FALSE); … … 23 23 Ny += Nrow; 24 24 header[0].Naxis[1] = Ny; 25 gfits_modify (header, "NAXIS2", "% d", 1,Ny);25 gfits_modify (header, "NAXIS2", "%lld", 1, (long long) Ny); 26 26 27 27 nbytes = gfits_data_size (header); 28 28 REALLOCATE (table[0].buffer, char, MAX (nbytes, 1)); 29 table[0]. size = nbytes;29 table[0].datasize = nbytes; 30 30 31 31 memcpy (&table[0].buffer[Nstart], data, Nbytes*Nrow); … … 35 35 36 36 /*********************** fits add (real) rows to virtual table ****************************/ 37 int gfits_vadd_rows (VTable *table, char *data, int Nrow, int Nbytes) {37 int gfits_vadd_rows (VTable *table, char *data, off_t Nrow, off_t Nbytes) { 38 38 39 int i, Nx, Ny;40 int Nstart;39 off_t i, Nx, Ny; 40 off_t Nstart; 41 41 Header *header; 42 42 43 43 header = table[0].header; 44 44 45 gfits_scan (header, "NAXIS1", "% d", 1,&Nx);46 gfits_scan (header, "NAXIS2", "% d", 1,&Ny);45 gfits_scan (header, "NAXIS1", "%lld", 1, (long long *) &Nx); 46 gfits_scan (header, "NAXIS2", "%lld", 1, (long long *) &Ny); 47 47 48 48 if (header[0].Naxis[1] != Ny) return (FALSE); … … 54 54 table[0].Nrow += Nrow; 55 55 REALLOCATE (table[0].buffer, char *, table[0].Nrow); 56 REALLOCATE (table[0].row, int, table[0].Nrow);56 REALLOCATE (table[0].row, off_t, table[0].Nrow); 57 57 for (i = 0; i < Nrow; i++) { 58 58 ALLOCATE (table[0].buffer[Nstart+i], char, MAX (1, Nx)); … … 64 64 Ny += Nrow; 65 65 header[0].Naxis[1] = Ny; 66 gfits_modify (header, "NAXIS2", "%d", 1,Ny);66 gfits_modify (header, "NAXIS2", "%lld", 1, (long long) Ny); 67 67 68 table[0]. size= gfits_data_size (table[0].header);69 table[0].pad = table[0].size - Nx*Ny;68 table[0].datasize = gfits_data_size (table[0].header); 69 table[0].pad = table[0].datasize - Nx*Ny; 70 70 71 71 return (TRUE); … … 73 73 74 74 /*********************** fits table column ****************************/ 75 int gfits_delete_rows (FTable *table, int Nstart, int Nrow) {75 int gfits_delete_rows (FTable *table, off_t Nstart, off_t Nrow) { 76 76 77 int Nx, Ny, N0, N1, N2;78 int nbytes;77 off_t Nx, Ny, N0, N1, N2; 78 off_t nbytes; 79 79 Header *header; 80 80 81 81 header = table[0].header; 82 82 83 gfits_scan (header, "NAXIS1", "% d", 1,&Nx);84 gfits_scan (header, "NAXIS2", "% d", 1,&Ny);83 gfits_scan (header, "NAXIS1", "%lld", 1, (long long *) &Nx); 84 gfits_scan (header, "NAXIS2", "%lld", 1, (long long *) &Ny); 85 85 86 86 if (header[0].Naxis[1] != Ny) return (FALSE); … … 97 97 Ny -= Nrow; 98 98 header[0].Naxis[1] = Ny; 99 gfits_modify (header, "NAXIS2", "%d", 1,Ny);99 gfits_modify (header, "NAXIS2", "%lld", 1, (long long) Ny); 100 100 101 101 nbytes = gfits_data_size (header); 102 102 REALLOCATE (table[0].buffer, char, MAX (nbytes, 1)); 103 table[0]. size = nbytes;103 table[0].datasize = nbytes; 104 104 return (TRUE); 105 105 } -
trunk/Ohana/src/libfits/table/F_table_varlength.c
r18264 r27435 4 4 int gfits_varlength_column_define (FTable *ftable, VarLengthColumn *def, int column) { 5 5 6 int i, Nv, Nb; 6 int i; 7 int Nv, Nb; 7 8 char *p1, *p2, *p3; 8 9 char field[81]; … … 32 33 // now p1 must be 'P'; 33 34 if (*p1 == 0) return (FALSE); 34 if (*p1 != 'P') return (FALSE); 35 if ((*p1 != 'P') && (*p1 != 'Q')) return (FALSE); 36 def->mode = *p1; 35 37 36 38 // next value is the actual varlength column format … … 61 63 } 62 64 63 if (!gfits_scan (ftable->header, "THEAP", "%d", 1, &def->heap_start)) { 65 // heap_start must be long long so file may be very large 66 if (!gfits_scan (ftable->header, "THEAP", "%lld", 1, (long long *) &def->heap_start)) { 64 67 def->heap_start = ftable->header->Naxis[0]*ftable->header->Naxis[1]; 65 68 } … … 68 71 } 69 72 70 void *gfits_varlength_column_pointer (FTable *ftable, VarLengthColumn *column, int row, int *length) { 73 // return the data and length for row 'row' of a variable length column 74 // is this capable of handling large files (value holding length and offset is an int)? 75 void *gfits_varlength_column_pointer (FTable *ftable, VarLengthColumn *column, off_t row, off_t *length) { 71 76 72 77 void *result; 73 int offset, Nx, *ptr; 78 off_t offset, Nx; 79 80 if ((column->mode != 'P') && (column->mode != 'Q')) abort(); 74 81 75 82 // find the values for the specified row … … 89 96 # endif 90 97 91 ptr = (int *) &ftable->buffer[row*Nx + column->Nstart]; 92 *length = ptr[0]; 93 offset = ptr[1]; 98 if (column->mode == 'P') { 99 int *ptr; 100 ptr = (int *) &ftable->buffer[row*Nx + column->Nstart]; 101 *length = ptr[0]; 102 offset = ptr[1]; 103 } 104 if (column->mode == 'Q') { 105 off_t *ptr; 106 ptr = (off_t *) &ftable->buffer[row*Nx + column->Nstart]; 107 *length = ptr[0]; 108 offset = ptr[1]; 109 } 94 110 95 111 result = (void *) (ftable->buffer + column->heap_start + offset); -
trunk/Ohana/src/libfits/table/F_write_T.c
r15743 r27435 13 13 if (f == (FILE *) NULL) return (FALSE); 14 14 15 status = fseek (f, 0, SEEK_END); /* write table to end of file! */15 status = fseeko (f, 0LL, SEEK_END); /* write table to end of file! */ 16 16 status = gfits_fwrite_table (f, table); 17 17 … … 23 23 int gfits_fwrite_table (FILE *f, FTable *table) { 24 24 25 int Nbytes;25 off_t Nbytes; 26 26 27 Nbytes = fwrite (table[0].buffer, sizeof(char), table[0]. size, f);27 Nbytes = fwrite (table[0].buffer, sizeof(char), table[0].datasize, f); 28 28 29 if (Nbytes != table[0]. size) return (FALSE);29 if (Nbytes != table[0].datasize) return (FALSE); 30 30 return (TRUE); 31 31 } … … 34 34 int gfits_fwrite_vtable (FILE *f, VTable *table) { 35 35 36 int i, Nx, Ny, Npad, offset, start;37 int Nbytes, *row, Nrow;36 off_t i, Nx, Ny, Npad, offset, start; 37 off_t Nbytes, *row, Nrow; 38 38 char *pad; 39 39 40 40 Nrow = table[0].Nrow; 41 41 row = table[0].row; 42 gfits_scan (table[0].header, "NAXIS1", "% d", 1,&Nx);43 gfits_scan (table[0].header, "NAXIS2", "% d", 1,&Ny);42 gfits_scan (table[0].header, "NAXIS1", "%lld", 1, (long long *) &Nx); 43 gfits_scan (table[0].header, "NAXIS2", "%lld", 1, (long long *) &Ny); 44 44 45 45 /* file pointer is at beginning of desired table data */ 46 start = ftell (f);46 start = ftello (f); 47 47 48 48 for (i = 0; i < Nrow; i++) { 49 49 offset = start + Nx*row[i]; 50 fseek (f, offset, SEEK_SET);50 fseeko (f, offset, SEEK_SET); 51 51 Nbytes = fwrite (table[0].buffer[i], sizeof (char), Nx, f); 52 52 if (Nbytes != Nx) { return (FALSE); } 53 53 } 54 54 55 Npad = table[0]. size - Nx*Ny;55 Npad = table[0].datasize - Nx*Ny; 56 56 ALLOCATE (pad, char, Npad); 57 57 bzero (pad, Npad); 58 58 59 59 offset = start + Nx*Ny; 60 fseek (f, offset, SEEK_SET);60 fseeko (f, offset, SEEK_SET); 61 61 Nbytes = fwrite (pad, sizeof (char), Npad, f); 62 62 if (Nbytes != Npad) { return (FALSE); } … … 71 71 72 72 /*********************** fits read ftable data ***********************************/ 73 int gfits_fwrite_ftable_range (FILE *f, FTable *ftable, int start, int Nrows, int Ndisk, int Ntotal) {73 int gfits_fwrite_ftable_range (FILE *f, FTable *ftable, off_t start, off_t Nrows, off_t Ndisk, off_t Ntotal) { 74 74 75 int Nbytes, Nwrite, Nskip, Nx, Npad;75 off_t Nbytes, Nwrite, Nskip, Nx, Npad; 76 76 char *pad; 77 77 … … 79 79 80 80 /* modify vtable to represent full disk table */ 81 gfits_modify (ftable[0].header, "NAXIS2", "% d", 1,Ntotal);81 gfits_modify (ftable[0].header, "NAXIS2", "%lld", 1, (long long) Ntotal); 82 82 ftable[0].header[0].Naxis[1] = Ntotal; 83 83 84 84 Nx = ftable[0].header[0].Naxis[0]; // final output table size on disk 85 ftable[0]. size = gfits_data_size (ftable[0].header);85 ftable[0].datasize = gfits_data_size (ftable[0].header); 86 86 87 87 Nskip = start * Nx; … … 95 95 96 96 // cursor must be at start of the table (after table header) 97 fseek (f, Nskip, SEEK_CUR);97 fseeko (f, Nskip, SEEK_CUR); 98 98 Nwrite = fwrite (ftable[0].buffer, sizeof (char), Nbytes, f); 99 99 if (Nwrite != Nbytes) { … … 102 102 103 103 if (Ntotal >= Ndisk) { 104 Npad = ftable[0]. size - Nx*Ntotal;104 Npad = ftable[0].datasize - Nx*Ntotal; 105 105 ALLOCATE (pad, char, Npad); 106 106 bzero (pad, Npad); -
trunk/Ohana/src/libfits/table/F_write_TH.c
r7054 r27435 13 13 if (f == (FILE *) NULL) return (FALSE); 14 14 15 status = fseek (f, 0, SEEK_END); /* write header to end of file! */15 status = fseeko (f, 0LL, SEEK_END); /* write header to end of file! */ 16 16 status = gfits_fwrite_Theader (f, header); 17 17 … … 23 23 int gfits_fwrite_Theader (FILE *f, Header *header) { 24 24 25 int Nbytes;25 off_t Nbytes; 26 26 27 Nbytes = fwrite (header[0].buffer, sizeof(char), header[0]. size, f);27 Nbytes = fwrite (header[0].buffer, sizeof(char), header[0].datasize, f); 28 28 29 if (Nbytes != header[0]. size) return (FALSE);29 if (Nbytes != header[0].datasize) return (FALSE); 30 30 return (TRUE); 31 31 }
Note:
See TracChangeset
for help on using the changeset viewer.
