bes  Updated for version 3.20.6
fits_read_attributes.cc
1 // fits_read_attributes.cc
2 
3 // This file is part of fits_handler, a data handler for the OPeNDAP data
4 // server.
5 
6 // Copyright (c) 2004,2005 University Corporation for Atmospheric Research
7 // Author: Patrick West <pwest@ucar.edu> and Jose Garcia <jgarcia@ucar.edu>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact University Corporation for Atmospheric Research at
24 // 3080 Center Green Drive, Boulder, CO 80301
25 
26 // (c) COPYRIGHT University Corporation for Atmostpheric Research 2004-2005
27 // Please read the full copyright statement in the file COPYRIGHT_UCAR.
28 //
29 // Authors:
30 // pwest Patrick West <pwest@ucar.edu>
31 // jgarcia Jose Garcia <jgarcia@ucar.edu>
32 
33 // #include <stdlib.h>
34 // #include <ctype.h>
35 
36 #include <string>
37 #include <sstream>
38 
39 #include <fitsio.h>
40 
41 #include <AttrTable.h>
42 #include <DAS.h>
43 
44 #include "fits_read_attributes.h"
45 
46 using namespace libdap;
47 using namespace std;
48 
49 bool fits_handler::fits_read_attributes(DAS &das, const string &filename, string &error)
50 {
51  fitsfile *fptr;
52  int status = 0;
53  if (fits_open_file(&fptr, filename.c_str(), READONLY, &status)) {
54  error = "Can not open fits file ";
55  error += filename;
56  return false;
57  }
58 
59  int hdutype;
60  for (int ii = 1; !(fits_movabs_hdu(fptr, ii, &hdutype, &status)); ii++) {
61  AttrTable *at = new AttrTable();
62 
63  /* get no. of keywords */
64  int nkeys, keypos;
65  if (fits_get_hdrpos(fptr, &nkeys, &keypos, &status)) {
66  fits_close_file(fptr, &status);
67  return false;
68  }
69 
70  for (int jj = 1; jj <= nkeys; jj++) {
71  char name[FLEN_KEYWORD];
72  char value[FLEN_VALUE];
73  char comment[FLEN_COMMENT];
74 
75  if (fits_read_keyn(fptr, jj, name, value, comment, &status)) {
76  fits_close_file(fptr, &status);
77  return false;
78  }
79 #if 0
80  // name, ..., will always be true
81  string s_name = "";
82  if (name)
83  s_name = name;
84 
85  string s_value = "";
86  if (value)
87  s_value = value;
88 
89  string s_comment = "";
90  if (comment)
91  s_comment = comment;
92 #endif
93  string s_name = name;
94  if (s_name.empty()/* == ""*/) {
95  ostringstream oss;
96  oss << "key_" << jj;
97  s_name = oss.str();
98 #if 0
99  char tmp[100];
100  ltoa(jj, tmp, 10);
101  s_name = (string) "key_" + tmp;
102 #endif
103  }
104 
105  {
106  string com = "\"";
107  com.append(value);
108  com.append(" / ");
109  com.append(comment);
110  com.append("\"");
111  at->append_attr(s_name, "String"/*type*/, com);
112  }
113 
114  }
115 #if 0
116  string str = "HDU_";
117  char tmp[100];
118  ltoa(ii, tmp, 10);
119  str.append(tmp);
120 #endif
121  ostringstream oss;
122  oss << "HDU_" << ii;
123  das.add_table(oss.str(), at);
124  }
125 
126  if (status == END_OF_FILE) /* status values are defined in fitsioc.h */
127  status = 0; /* got the expected EOF error; reset = 0 */
128  else {
129  /* got an unexpected error */
130  fits_close_file(fptr, &status);
131  return false;
132  }
133 
134  if (fits_close_file(fptr, &status))
135  return false;
136 
137  return true;
138 }
139 
libdap
Definition: BESDapFunctionResponseCache.h:35