FACT++
1.0
Main Page
Related Pages
Namespaces
Classes
Files
Examples
File List
File Members
fitsHacker.cc
Go to the documentation of this file.
1
/*
2
* fitsHacker.cc
3
*
4
* Created on: Sep 8, 2011
5
* Author: lyard
6
*/
7
8
#include <fstream>
9
#include <cstdlib>
10
#include <iostream>
11
#include <cstring>
12
13
using namespace
std
;
14
/*
15
* Usage: fitsHacker <nameOfFileToHack> <numberOfBytesToSkip> <WhichCharactersToPutAfterShift>(optionnal)
16
*
17
*
18
*
19
*/
20
21
enum
ModeT
{
seekingHDU
,
22
foundHDU
,
23
fixedEND
,
24
reachedHeaderEnd
};
25
26
int
main
(
int
argc,
char
** argv)
27
{
28
if
(argc < 2)
29
return
0;
30
31
/* ENDfixer */
32
fstream file(argv[1]);
33
34
char
c[81];
35
c[80] = 0;
36
int
seeking=0;
37
38
ModeT
mode
=
seekingHDU
;
39
40
bool
reallyFixedEnd =
false
;
41
int
endAddress = 0;
42
43
while
(mode !=
fixedEND
)
44
{
45
file.read(c, 80);
46
if
(!file.good()) {
47
cout << 0;
48
return
0;
49
}
50
string
str
(c);
51
// cout << c << endl;
52
if
(str.substr(0, 9) ==
"XTENSION="
)
53
mode =
foundHDU
;
54
55
if
(mode ==
foundHDU
&& str==
"END "
)
56
{
57
mode =
fixedEND
;
58
endAddress = seeking;
59
// cout << "found END at " << endAddress << endl;
60
}
61
if
(mode ==
foundHDU
&& str ==
" "
)
62
{
63
file.seekp(seeking);
64
file.put(
'E'
);
65
file.put(
'N'
);
66
file.put(
'D'
);
67
mode =
fixedEND
;
68
reallyFixedEnd =
true
;
69
endAddress = seeking;
70
// cout << "added END at " << endAddress << endl;
71
}
72
73
seeking+=80;
74
}
75
76
file.seekp(seeking-1);
77
while
(mode !=
reachedHeaderEnd
)
78
{
79
file.read(c, 80);
80
if
(!file.good()) {
81
cout << 0;
82
return
0;
83
}
84
string
str
(c);
85
86
if
(str ==
" "
)
87
seeking+=80;
88
else
89
mode =
reachedHeaderEnd
;
90
}
91
92
file.close();
93
94
if
(seeking % 2880 != 0)
95
{
96
cout <<
"Error: header length not acceptable"
<< endl;
97
return
0;
98
}
99
100
if
(((seeking - endAddress)/80) > 35)
101
{
102
cout <<
"Error: too much header space after END keyword"
<< endl;
103
return
0;
104
}
105
106
cout << seeking;
107
108
return
seeking;
109
110
/* FITS HACKER
111
file.get(data, shift);
112
113
for (int i=0;i<shift;i++)
114
{
115
if (i%80 == 0)
116
cout << "||| " << endl;
117
cout << data[i];
118
}
119
cout << endl;
120
if (argc < 4)
121
return 0;
122
123
int length = strlen(argv[3]);
124
125
126
file.seekp(shift-1);
127
for (int i=0;i<length;i++)
128
file.put(argv[3][i]);
129
130
file.close();
131
132
delete[] data;*/
133
}
main
int main(int argc, char **argv)
Definition:
fitsHacker.cc:26
mode
int mode
Definition:
dim_get_service.c:9
ModeT
ModeT
Definition:
fitsHacker.cc:21
str
char str[80]
Definition:
test_client.c:7
foundHDU
Definition:
fitsHacker.cc:22
std
STL namespace.
reachedHeaderEnd
Definition:
fitsHacker.cc:24
fixedEND
Definition:
fitsHacker.cc:23
seekingHDU
Definition:
fitsHacker.cc:21
src
fitsHacker.cc
Generated on Sun Sep 18 2016 20:50:25 for FACT++ by
1.8.11