Changeset 25406 for branches/eam_branches/20090715/pstamp/src/pstampdump.c
- Timestamp:
- Sep 15, 2009, 4:02:42 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/20090715/pstamp/src/pstampdump.c
r21404 r25406 1 // pstampdump - read a fits table describing a postage stamp request or response file and1 // pstampdump - read a fits file containing a postage stamp request or response table and 2 2 // print the contents to stdout 3 3 // 4 // Actually should work for any kind of fits table, but I'm not sure what will5 // happen for binary data.4 // Actually this should work fine for dumping the rows of any of any kind of fits table 5 // The -header option is pstamp table specific 6 6 7 7 #include <pslib.h> … … 9 9 #include <string.h> 10 10 11 static psArray *readRequestTable(psString fileName)11 static bool readFitsFile(psString fileName, psMetadata **pHeader, psArray **pTable) 12 12 { 13 psFits *fits File= psFitsOpen(fileName, "r");14 if (fits File== NULL) {13 psFits *fits = psFitsOpen(fileName, "r"); 14 if (fits == NULL) { 15 15 psError(PS_ERR_IO, false, "failed to open %s for output", fileName); 16 return NULL; 16 return false; 17 } 18 if (!psFitsMoveExtNum(fits, 1, true)) { 19 psError(PS_ERR_IO, false, "failed to move to first extension from %s", fileName); 20 return false; 17 21 } 18 22 19 psArray *array = psFitsReadTable(fitsFile); 23 if (pHeader) { 24 *pHeader = psFitsReadHeader(NULL, fits); 25 if (!*pHeader) { 26 psError(PS_ERR_IO, false, "failed to header from %s", fileName); 27 return false; 28 } 29 } 20 30 21 psFitsClose(fitsFile); 31 if (pTable) { 32 *pTable = psFitsReadTable(fits); 33 if (*pTable == NULL) { 34 psError(PS_ERR_IO, false, "psFitsReadTable failed for %s", fileName); 35 return false; 36 } 37 } 22 38 23 if (array == NULL) { 24 psError(PS_ERR_IO, false, "psFitsReadTable failed for %s", fileName); 25 return NULL; 26 } 39 psFitsClose(fits); 27 40 28 return array;41 return true; 29 42 } 30 43 … … 32 45 usage(char *program_name) 33 46 { 34 fprintf(stderr, "usage: %s filename\n", program_name);47 fprintf(stderr, "usage: %s [-header] [-simple] filename\n", program_name); 35 48 exit(1); 36 49 } 50 37 51 int main(int argc, char *argv[]) 38 52 { 53 bool dumpHeader = false; 54 bool simple = false; 55 bool dumpTable = true; 56 int argnum; 57 if ((argnum = psArgumentGet(argc, argv, "-header"))) { 58 dumpHeader = true; 59 psArgumentRemove(argnum, &argc, argv); 60 } 61 if ((argnum = psArgumentGet(argc, argv, "-simple"))) { 62 simple = true; 63 psArgumentRemove(argnum, &argc, argv); 64 } 65 if ((argnum = psArgumentGet(argc, argv, "-headeronly"))) { 66 dumpTable = false; 67 dumpHeader = true; 68 psArgumentRemove(argnum, &argc, argv); 69 } 70 39 71 if (argc != 2) { 40 72 usage(argv[0]); … … 43 75 psString fileName = argv[1]; 44 76 45 psArray *array = readRequestTable(fileName); 46 if (array == NULL) { 47 psErrorStackPrint(stderr, "failed to read fits table: %s\n", fileName); 77 psMetadata *header; 78 psArray *array; 79 if (!readFitsFile(fileName, dumpHeader ? &header : NULL, dumpTable ? &array : NULL)) { 80 psErrorStackPrint(stderr, "failed to process fits table from: %s\n", fileName); 81 return PS_EXIT_DATA_ERROR; 82 } 83 if (dumpHeader) { 84 psString extname = psMetadataLookupStr(NULL, header, "EXTNAME"); 85 if (!extname) { 86 psErrorStackPrint(stderr, "failed to find EXTNAME in fits header of: %s\n", fileName); 87 return PS_EXIT_DATA_ERROR; 88 } 89 psString req_name = psMetadataLookupStr(NULL, header, "REQ_NAME"); 90 if (!req_name) { 91 psErrorStackPrint(stderr, "failed to find REQ_NAME in fits header of: %s\n", fileName); 92 return PS_EXIT_DATA_ERROR; 93 } 94 if (!strcmp(extname, "PS1_PS_REQUEST")) { 95 psString extver = psMetadataLookupStr(NULL, header, "EXTVER"); 96 if (!extver) { 97 // work around bug in MOPS request files 98 // Accept an integer for the version number 99 psS32 extver_num = psMetadataLookupS32(NULL, header, "EXTVER"); 100 if (extver_num) { 101 psStringAppend(&extver, "%d", extver_num); 102 } else { 103 psErrorStackPrint(stderr, "failed to find EXTVER in fits header of: %s\n", fileName); 104 return PS_EXIT_DATA_ERROR; 105 } 106 } 107 printf("%s %s %s\n", extname, extver, req_name); 108 } else if (!strcmp(extname, "PS1_PS_RESULTS")) { 109 psS64 req_id = psMetadataLookupS64(NULL, header, "REQ_ID"); 110 printf("%s %s %" PRId64 "\n", extname, req_name, req_id); 111 } else { 112 psErrorStackPrint(stderr, "do not recognize extname: %s in %s\n", extname, fileName); 113 return PS_EXIT_DATA_ERROR; 114 } 115 } 116 if (!dumpTable) { 117 // done 118 return 0; 119 } 120 121 if (!psArrayLength(array)) { 122 fprintf(stderr, "%s contains an empty table\n", fileName); 48 123 return 1; 49 124 } 50 125 51 if (!psArrayLength(array)) {52 fprintf(stderr, "%s is an empty table\n", fileName);53 exit(1);54 }55 56 // printf("FITS_TABLE METADATA\n");57 126 for (int i=0; i<psArrayLength(array); i++) { 58 printf("ROW_%d METADATA\n", i);59 // psMetadataPrint(stderr, array->data[i], 0);60 // psMetadataConfigWrite(array->data[i], "-");61 127 psString str = psMetadataConfigFormat(array->data[i]); 62 128 if (!str) { 63 psErrorStackPrint(stderr, " Can't write to STDOUT\n");64 exit(PS_EXIT_SYS_ERROR);129 psErrorStackPrint(stderr, "failed to format metadata item\n"); 130 return (PS_EXIT_SYS_ERROR); 65 131 } 66 printf("%s", str); 67 printf("END\n"); 132 if (!simple) { 133 printf("ROW_%d METADATA\n", i); 134 printf("%s", str); 135 printf("END\n"); 136 } else { 137 // simple output format space separated values one line per row 138 char *p = str; 139 char *pnl; 140 while ((pnl = strchr(p, '\n'))) { 141 // terminate the string for this line 142 *pnl = 0; 143 bool blank = (p == pnl); 144 if (blank) { 145 p = pnl + 1; 146 continue; 147 } 148 // split line into space separated tokens 149 char *name = strtok(p, " "); 150 char *type = strtok(NULL, " "); 151 char *val = strtok(NULL, " "); 152 153 // avoid unused variables warning/error 154 (void) name; (void) type; 155 156 if (val) { 157 printf("%s ", val); 158 } 159 // next line 160 p = pnl + 1; 161 } 162 printf("\n"); 163 } 68 164 } 69 // printf("END\n");70 165 71 166 return 0;
Note:
See TracChangeset
for help on using the changeset viewer.
