aboutsummaryrefslogtreecommitdiff
path: root/sys/gio/nspp/sysint/encd.f
blob: 1dba902b99b714a60573753dd6f60a6953eff8bb (plain) (blame)
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
SUBROUTINE ENCD (VALU,ASH,IOUT,NC,IOFFD)
C
C
C
C
C ON INPUT     VALU	 FLOATING POINT	NUMBER FROM WHICH THE LABEL IS
C			 TO BE CREATED.
C	       ASH	 SEE IOFFD.
C	       IOFFD	 IF IOFFD .EQ. 0, A LABEL WHICH	REFLECTS THE
C			      MAGNITUDE	OF VALU	IS TO BE CREATED.
C			      .1 .LE. ABS(VALU)	.LE. 99999.49999...
C			      OR VALUE .EQ. 0.0.  THE LABEL CREATED
C			      SHOULD HAVE 3 TO 5 CHARACTERS DEPENDING
C			      ON THE MAGNITUDE OF VALU.	 SEE IOUT.
C			 IF IOFFD .NE. 0, A LABEL WHICH	DOES NOT REFLECT
C			      THE MAGNITUDE OF VALU IS TO BE CREATED.
C			      ASH IS USED AS THE NORMALIZATION FACTOR.
C			      1. .LE. ASH*ABS(VALU) .LT. 1000. OR
C			      VALU .EQ.	0.0.  THE LABEL	CREATED	SHOULD
C			      HAVE 1 TO	3 CHARACTERS, DEPENDING	ON THE
C			      MAGNITUDE	OF ASH*VALU.  SEE IOUT.
C ON OUTPUT    IOUT	 CONTAINS THE LABEL CREATED.  IT SHOULD	HAVE NO
C			 LEADING BLANKS.  SEE NC.
C	       NC	 THE NUMBERS IN	THE LABEL IN IOUT.  SHOULD BE
C			 1 TO 5.
C
      SAVE
      CHARACTER*11 IFMT, IOUT
C
C IFMT MUST HOLD 11 CHARACTERS
C
      VAL = VALU
      IF (IOFFD	.NE. 0)	GO TO 103
      IF (VAL) 101,104,101
  101 LOG = IFIX((ALOG10(ABS(VAL))+.00001)+5000.)-5000
      V	= VAL
      NS = MAX0(4,MIN0(6,LOG+2))
      ND = MIN0(3,MAX0(0,2-LOG))
c     IF (VAL.LT.0)  NS	= NS + 1
c +noao: replacing ftn i/o for iraf implementation
c 102 WRITE (IFMT,'(A2,I2,A1,I1,A1)') '(F',NS,'.',ND,')'
  102 continue
c     if (len (char (ns + ichar ('0'))) .eq. 2) then
c	 ifmt(1:7) = '(f  . )'
c	 ifmt(3:4) = char (ns + ichar ('0'))
c	 ifmt(6:6) = char (nd + ichar ('0'))
c     else 
c	 ifmt(1:6) = '(f . )'
c	 ifmt(3:3) = char (ns + ichar ('0'))
c	 ifmt(5:5) = char (nd + ichar ('0'))
c     endif
c     WRITE (IOUT,IFMT)	V
      call encode (ns, ifmt, iout, v)
      NC = NS
c +noao
c The following statement was making 5 digit labels (+4800) come out
c truncated (+480) and it has been commented out.
c     IF (LOG.GE.3)  NC	= NC - 1
c -noao
      RETURN
  103 NS = 4
      IF (VAL.LT.0.)  NS=5
      IF (VAL.EQ.0.)  NS=2
      ND = 0
      V	= VAL*ASH
      LOG = 100
      GO TO 102
  104 iout(1:3) = '0.0'
      nc = 3
c 104 NS = 3
c     ND = 1
c     LOG = -100
c     V	= 0.
c     GO TO 102
C
C1001 FORMAT('(F',I2,'.',I1,',1H',A1,')')
C
      END