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
|
C----------------------------------------------------------------------
subroutine ftd2e(val,dec,cval,vlen,status)
C convert a double precision value to an E format character string
C If it will fit, the value field will be 20 characters wide;
C otherwise it will be expanded to up to 35 characters, left
C justified.
C
C val d input value to be converted
C dec i number of decimal places to display in output string
C cval c output character string
C vlen i length of output string
C status i output error status (0 = OK)
double precision val
integer dec,vlen,status
character*35 cval,form*10
if (status .gt. 0)return
if (dec .ge. 1 .and. dec .le. 9)then
vlen=20
write(form,2000)dec
2000 format('(1pe20.',i1,')')
else if (dec .ge. 10 .and. dec .le. 28)then
vlen=max(20,dec+7)
write(form,2001)vlen,dec
2001 format('(1pe',i2,'.',i2,')')
else
C illegal number of decimal places were specified
status=411
call ftpmsg('Error in FTR2E: number of decimal places '
& //'is less than 1 or greater than 28.')
return
endif
write(cval,form,err=900)val
if (cval(1:1) .eq. '*')go to 900
return
900 status=402
call ftpmsg('Error in FTD2E converting double to En.m string.')
end
|