1
C++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2
C.IDENTIFICATION ISDLBL.FOR
3
C.AUTHOR: J.D.PONZ ESA-VILSPA
4
C.KEYWORDS IUE, GO FORMAT, LINE-BY-LINE IMAGE
7
C Reads the low dispersion line-by-line LBL and extended LBL files.
9
C The routine performs the following functions (routine names in brackets):
11
C \item Handles the file header (ISDFHD)
12
C \item Creates the MIDAS image file on disk (STFCRE)
13
C Format and size of the file is controlled by the argument
15
C \item Iterates on pseudo-orders to:
17
C \item Read wavelength record
18
C \item Decode first and last wavelength if it is the first pseudo-order
19
C \item Read epsilon record
20
C \item Read record with pixel values
21
C \item Decode pixel values
22
C \item Write into the disk file
24
C \item Writes standard image descriptors (STDWRx)
25
C \item Writes IUE specific descriptors (ISTDES)
26
C \item Closes the image file (STFCLO)
32
C The following extensions are used:
35
C \item INCLUDE statement
36
C \item long variable names
37
C \item Underscore character
40
C.VERSION: 1.0 INITIAL CODING 24 JUN 1994
41
C------------------------------------------------------------------
42
SUBROUTINE ISDLBL(CHANL,BUFF,FILE,DSKFMT,
43
. NRECO,NBYTE,DSPFLG,IOFF,STATUS)
46
INTEGER CHANL ! IN: tape channel number
47
CHARACTER*(*) BUFF ! IN: buffer with the ascii header
48
CHARACTER*(*) FILE ! IN: file name
49
INTEGER DSKFMT ! IN: disk format (-1 no file)
50
INTEGER NRECO ! IN: number of records
51
INTEGER NBYTE ! IN: number of bytes per record
52
INTEGER DSPFLG ! IN: display flag
54
INTEGER STATUS ! OUT: status
56
INTEGER DTYPE, NO, SIZE, FELM, NL, LEN, I, J, IP
57
INTEGER NAXIS(1), NPIX(2), DUM(1), NP, NORDER, RPERGR
59
INTEGER IBUFF(1024), IZERO(1024)
60
INTEGER LAMB0(100), IORD(100), NVAL(100)
61
INTEGER BBUFF(1024), BZERO(1024)
63
REAL CUTS(4), XMIN, XMAX, SCG
64
DOUBLE PRECISION START(2), STEP(2), W0, W1
65
CHARACTER*72 IDENT, CUNIT
66
INCLUDE 'MID_INCLUDE:ST_DEF.INC'
67
EQUIVALENCE (IBUFF(1),BBUFF(1))
68
EQUIVALENCE (IZERO(1), BZERO(1))
69
EQUIVALENCE (IZERO(103), LAMB0(1))
70
EQUIVALENCE (IZERO(203), IORD(1))
71
EQUIVALENCE (IZERO(303), NVAL(1))
72
INCLUDE 'MID_INCLUDE:ST_DAT.INC'
73
DATA CUNIT/'FN ANGSTROM PIXEL'/
75
C ... decode full header, print it and put info in common area
80
CALL ISDFHD(CHANL,BUFF,DSPFLG,IOFF,STATUS)
81
IF (STATUS.NE.0) RETURN
82
IF (DSKFMT.LT.0) RETURN ! only displays header
84
C ... reads data record 0
86
CALL ISDRHW(CHANL,BZERO,NBYTE,LEN,IOFF,STATUS)
87
IF ((NBYTE+IOFF).NE.LEN. OR. STATUS.NE.0) THEN
92
C ... define file dimensions and other parameters
98
SCG = FLOAT(JG)/(2.**KG)
102
IF (NORDER.NE.(NRECO-1)/RPERGR) THEN
103
CALL STTPUT('Problem with NORDER in LBL ***',STATUS)
112
C ... create the frame
115
CALL STFCRE(FILE,DTYPE,F_O_MODE,F_IMA_TYPE,SIZE,NO,STATUS)
116
IF (STATUS.NE.0) RETURN
118
C ... loop to read tape and write into disk
122
CALL ISDRHW(CHANL,BBUFF,NBYTE,LEN,IOFF,STATUS) ! read lambda
124
W0 = IBUFF(3) * 0.2 + LAMB0(1)
125
W1 = IBUFF(NP+2)*0.2 + LAMB0(1)
127
IF ((NBYTE+IOFF).NE.LEN .OR. STATUS.NE.0) RETURN
128
CALL ISDRHW(CHANL,BBUFF,NBYTE,LEN,IOFF,STATUS) ! read epsilon
129
IF ((NBYTE+IOFF).NE.LEN .OR. STATUS.NE.0) RETURN
130
CALL ISDRHW(CHANL,BBUFF,NBYTE,LEN,IOFF,STATUS) ! read data
131
IF ((NBYTE+IOFF).NE.LEN .OR. STATUS.NE.0) RETURN
133
DO 15 J = 5, NBYTE, 2
134
RBUFF(IP) = IBUFF(IP+2)*SCG
135
XMAX = AMAX1(XMAX,RBUFF(IP))
136
XMIN = AMIN1(XMIN,RBUFF(IP))
138
IF (IP.GT.NP) GO TO 17
140
17 CALL STFPUT(NO,FELM,NP,RBUFF,STATUS)
141
IF (STATUS.NE.0) RETURN
145
C ... write image descriptors
152
STEP(1) = (W1 - W0)/(NP-1)
158
IDENT = BUFF(145:210)
159
CALL STDWRI(NO,'NAXIS',NAXIS,1,1,DUM,STATUS)
160
CALL STDWRI(NO,'NPIX',NPIX,1,2,DUM,STATUS)
161
CALL STDWRD(NO,'START',START,1,2,DUM,STATUS)
162
CALL STDWRD(NO,'STEP',STEP,1,2,DUM,STATUS)
163
CALL STDWRR(NO,'LHCUTS',CUTS,1,4,DUM,STATUS)
164
CALL STDWRC(NO,'IDENT',1,IDENT,1,72,DUM,STATUS)
165
CALL STDWRC(NO,'CUNIT',1,CUNIT,1,48,DUM,STATUS)
167
C ... write label descriptors
169
CALL ISTDES(NO,BUFF,STATUS)
170
CALL STFCLO(NO,STATUS)