1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
C--------------------------------------------------------------------------
subroutine ftgkyt(iunit,keywrd,jval,dval,comm,status)
C read an integer value and fractional parts of a keyword value
C and the comment string from a header record
C
C iunit i fortran input unit number
C keywrd c keyword name
C OUTPUT PARAMETERS:
C jval i output integer part of keyword value
C dval d output fractional part of keyword value
C comm c output keyword comment
C status i returned error status (0=ok)
C
C written by Wm Pence, HEASARC/GSFC, Sept 1992
character*(*) keywrd,comm
integer iunit,jval,status,i,dot
double precision dval
character value*35
logical ed
C find the keyword and return value and comment as character strings
call ftgkey(iunit,keywrd,value,comm,status)
C read keyword in straight forward way first:
C just convert character string to double precision
C datatype conversion will be performed if necessary and if possible
call ftc2d(value,dval,status)
jval=dval
if (jval .ge. 0)then
dval=dval-jval
else
dval=dval+jval
end if
C now see if we have to read the fractional part again, this time
C with more precision
C find the decimal point, if any, and look for a D or E
dot=0
ed=.false.
do 10 i=1,35
if (value(i:i) .eq. '.')dot=i
if (value(i:i) .eq. 'E' .or. value(i:i) .eq. 'D')ed=.true.
10 continue
if (.not. ed .and. dot .gt. 0)then
C convert fractional part to double precision
call ftc2d(value(dot:),dval,status)
end if
end
|