rda-python-icoads 1.0.6__py3-none-any.whl → 1.0.9__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rda-python-icoads might be problematic. Click here for more details.
- rda_python_icoads/R3.0-stat_doc.pdf +0 -0
- rda_python_icoads/checkicoads.py +222 -0
- rda_python_icoads/cleanicoads.py +175 -0
- rda_python_icoads/counticoads.py +153 -0
- rda_python_icoads/fillicoads.py +138 -0
- rda_python_icoads/fillinventory.py +149 -0
- rda_python_icoads/fillitable.py +289 -0
- rda_python_icoads/fillmonth.py +94 -0
- rda_python_icoads/imma1_subset.py +1 -0
- rda_python_icoads/msg +457 -0
- rda_python_icoads/msg3.0_subset_readme.txt +94 -0
- rda_python_icoads/msg3_subset.py +345 -0
- rda_python_icoads/msg_download.py +211 -0
- rda_python_icoads/msgsubset.f +612 -0
- rda_python_icoads/writeicoads.py +169 -0
- {rda_python_icoads-1.0.6.dist-info → rda_python_icoads-1.0.9.dist-info}/METADATA +1 -1
- rda_python_icoads-1.0.9.dist-info/RECORD +25 -0
- rda_python_icoads-1.0.9.dist-info/entry_points.txt +12 -0
- rda_python_icoads-1.0.6.dist-info/RECORD +0 -11
- rda_python_icoads-1.0.6.dist-info/entry_points.txt +0 -2
- {rda_python_icoads-1.0.6.dist-info → rda_python_icoads-1.0.9.dist-info}/LICENSE +0 -0
- {rda_python_icoads-1.0.6.dist-info → rda_python_icoads-1.0.9.dist-info}/WHEEL +0 -0
- {rda_python_icoads-1.0.6.dist-info → rda_python_icoads-1.0.9.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,612 @@
|
|
|
1
|
+
!------------------------------------------------------------------------------
|
|
2
|
+
!
|
|
3
|
+
! Title : msgsubset.f
|
|
4
|
+
! Author : Zaihua Ji, zji@ucar.edu
|
|
5
|
+
! Date : 11/16/2010
|
|
6
|
+
! 2025-02-28 transferred to package rda_python_icoads from
|
|
7
|
+
! subset.f in https://github.com/NCAR/rda-icoads.git
|
|
8
|
+
! Purpose : Fortran program Subsetting ICOADS MSG data
|
|
9
|
+
!
|
|
10
|
+
! Github : https://github.com/NCAR/rda-python-icoads.git
|
|
11
|
+
!
|
|
12
|
+
! Instruction:
|
|
13
|
+
! after python -m pip install rda_python_icoads
|
|
14
|
+
! cd $ENVHOME/bin/
|
|
15
|
+
! gfortran -o msgsubset $ENVHOME/lib/python3.n*/site-packages/rda_python_icoads/msgsubset.f
|
|
16
|
+
!
|
|
17
|
+
! *: python 3 release number, for example n = 10 in Python 3.10.12
|
|
18
|
+
! $ENVHOME: /glade/u/home/rdadata/rdamsenv (venv) on DECS machines, and
|
|
19
|
+
! /glade/work/rdadata/conda-envs/pg-rda (conda) on DAV;
|
|
20
|
+
!------------------------------------------------------------------------------
|
|
21
|
+
PROGRAM SUBSET
|
|
22
|
+
IMPLICIT INTEGER(A-E,G-Z)
|
|
23
|
+
!
|
|
24
|
+
CHARACTER*15 PROGID
|
|
25
|
+
DATA PROGID/'SUBSET.MSG.01B'/
|
|
26
|
+
C Read and extract MSG data within specified time and region
|
|
27
|
+
c on LINUX machine, compile it as 'gfortran -o subset subset.f'
|
|
28
|
+
C
|
|
29
|
+
DATA UNIT/1/,FMISS/-9999./
|
|
30
|
+
C
|
|
31
|
+
CHARACTER RPT*64
|
|
32
|
+
C
|
|
33
|
+
CHARACTER FORMAT*640
|
|
34
|
+
PARAMETER(NUMBER=49, iout=20)
|
|
35
|
+
|
|
36
|
+
parameter (iomax=500000) !maximum number of records in an output file
|
|
37
|
+
|
|
38
|
+
COMMON /MSG1/FUNITS(NUMBER,3:9),FBASE(NUMBER,3:9),BITS(NUMBER)
|
|
39
|
+
+,OFFSET(NUMBER),FORMAT(3:9),RPTID,INDXCK
|
|
40
|
+
C
|
|
41
|
+
DIMENSION CODED(NUMBER),FTRUE(NUMBER)
|
|
42
|
+
PARAMETER(S1=1,S3=2,S5=3,M=4,N=5,S=6,D=7,H=8,X=9,Y=10)
|
|
43
|
+
REAL YEAR,MONTH,BSZ,BLO,BLA,PID1,PID2,GRP,CK
|
|
44
|
+
COMMON YEAR,MONTH,BSZ,BLO,BLA,PID1,PID2,GRP,CK,FTRUE2(4,Y)
|
|
45
|
+
EQUIVALENCE(FTRUE,YEAR)
|
|
46
|
+
C
|
|
47
|
+
CHARACTER*4 type, vname
|
|
48
|
+
character*120 ierror,formato,header,colhead,kname
|
|
49
|
+
integer index(number),group,nstat,idstr,idend,nfile,jfile
|
|
50
|
+
integer nrecin, nrecout, inlen, outlen, vlen, lennam, resol
|
|
51
|
+
real alatt,alatb,alonl,alonr,alat,alon,xlat,xlon
|
|
52
|
+
character*80 indir, infile, outdir, outfile
|
|
53
|
+
|
|
54
|
+
c read control data
|
|
55
|
+
read(5,'(a)')header
|
|
56
|
+
read(5,'(a)')colhead
|
|
57
|
+
read(5,*)group
|
|
58
|
+
read(5,*)nstat
|
|
59
|
+
read(5,*)(index(i),i=1,nstat)
|
|
60
|
+
read(5,*)ichkmis
|
|
61
|
+
read(5,'(a)')formato
|
|
62
|
+
read(5,*)alatb,alatt,alonl,alonr,idstr,idend
|
|
63
|
+
read(5,'(i1)')resol
|
|
64
|
+
read(5,'(a3)')type
|
|
65
|
+
read(5,'(a2)')vname
|
|
66
|
+
vlen = lentrm(vname)
|
|
67
|
+
read(5, '(a)') indir
|
|
68
|
+
inlen = lentrm(indir) ! input directory string length
|
|
69
|
+
read(5, '(a)') outdir
|
|
70
|
+
outlen = lentrm(outdir) ! output directory string length
|
|
71
|
+
read(5, *) nfile ! number of input msg data files
|
|
72
|
+
C
|
|
73
|
+
C final check of latitudes/longitudes, added by Hua, 05/18/04
|
|
74
|
+
C
|
|
75
|
+
write(*,5)header(:lentrm(header)),group,nstat,ichkmis,
|
|
76
|
+
* formato(:lentrm(formato)),resol,type,vname(:vlen),
|
|
77
|
+
* alatb,alatt,alonl,alonr,idstr,idend,
|
|
78
|
+
* indir(:inlen),outdir(:outlen),nfile
|
|
79
|
+
5 format(' Control data:'/,
|
|
80
|
+
* ' comment header :',a/,
|
|
81
|
+
* ' group number :',i6/,
|
|
82
|
+
* ' num. stats :',i6/,
|
|
83
|
+
* ' missing data chk :',i6/,
|
|
84
|
+
* ' output format :',a/,
|
|
85
|
+
* ' data resolution :',i1/,
|
|
86
|
+
* ' statistic type :',a3/,
|
|
87
|
+
* ' Variable Name :',a/,
|
|
88
|
+
* ' latitude limits :',2f8.2/,
|
|
89
|
+
* ' longitude limits :',2f8.2/,
|
|
90
|
+
* ' date limits :',2i8/,
|
|
91
|
+
* ' Data Directory :',a/,
|
|
92
|
+
* ' Output Diretory :',a/,
|
|
93
|
+
* ' num. msg files :',i5/)
|
|
94
|
+
|
|
95
|
+
print*,' array index numbers for the variables :'
|
|
96
|
+
write(*,'(20i3)')(index(i),i=1,nstat)
|
|
97
|
+
|
|
98
|
+
nrecout = 0
|
|
99
|
+
nrecin = 0
|
|
100
|
+
jfile = 0 !output file counter
|
|
101
|
+
iorec = 0
|
|
102
|
+
|
|
103
|
+
50 continue
|
|
104
|
+
if(nfile .le. 0) goto 950 ! all input files are processed
|
|
105
|
+
nfile = nfile - 1
|
|
106
|
+
c
|
|
107
|
+
c get input file name and open it for read
|
|
108
|
+
c
|
|
109
|
+
read(5, '(a)') infile
|
|
110
|
+
lennam=lentrm(infile)
|
|
111
|
+
print *, "Reading MSG file: " // infile(:lennam)
|
|
112
|
+
if(nrecin .gt. 1) then
|
|
113
|
+
print *, "Records In:", nrecin, " & Out:", nrecout
|
|
114
|
+
endif
|
|
115
|
+
print *, "Number of MSG Files Left:", nfile
|
|
116
|
+
|
|
117
|
+
C OPEN TO READ BINARY DATA measures RECL in BYTES!!!!!
|
|
118
|
+
OPEN(UNIT,FORM='UNFORMATTED',ACCESS='DIRECT',RECL=LEN(RPT)
|
|
119
|
+
+,STATUS='OLD',file=indir(:inlen)//infile(:lennam))
|
|
120
|
+
|
|
121
|
+
C INITIALIZE NUMBER OF RECORDS READ
|
|
122
|
+
NREC=1
|
|
123
|
+
|
|
124
|
+
C READ REPORT (MACHINE-DEPENDENT MODIFICATIONS MAY BE NEEDED)
|
|
125
|
+
100 READ(UNIT,REC=NREC,IOSTAT=EOF)RPT
|
|
126
|
+
C EOF OF ZERO INDICATES A SUCCESSFUL READ
|
|
127
|
+
IF(EOF.NE.0) GOTO 50
|
|
128
|
+
C INCREMENT NUMBER OF RECORDS READ
|
|
129
|
+
NREC=NREC+1
|
|
130
|
+
nrecin = nrecin + 1
|
|
131
|
+
C
|
|
132
|
+
C UNPACK REPORT AND CONVERT CODED TO TRUE VALUES
|
|
133
|
+
GROUP=ICHAR(RPT(8:8))/16
|
|
134
|
+
CALL GETRPT(RPT,CODED,FTRUE,FMISS
|
|
135
|
+
+,FUNITS(1,GROUP),FBASE(1,GROUP),BITS,OFFSET,NUMBER,RPTID,INDXCK)
|
|
136
|
+
|
|
137
|
+
c check for missing data based on key variable
|
|
138
|
+
if(ftrue(ichkmis).eq.-9999.0)go to 100
|
|
139
|
+
|
|
140
|
+
c combine yr/mn into one integer for quick comparison
|
|
141
|
+
iyear = nint(ftrue(1))
|
|
142
|
+
imonth = nint(ftrue(2))
|
|
143
|
+
idate = iyear*100 + imonth
|
|
144
|
+
ibsz = nint(ftrue(3))
|
|
145
|
+
ipid2 = nint(ftrue(7))
|
|
146
|
+
if(ftrue(7).eq.-9999.0)ipid2 = -9 !reset for missing PID
|
|
147
|
+
|
|
148
|
+
c do time window check
|
|
149
|
+
if(idate .lt. idstr .or. idate .gt. idend) goto 100
|
|
150
|
+
|
|
151
|
+
c get latitude and longitude for region checking
|
|
152
|
+
alat = ftrue(5)
|
|
153
|
+
alon = ftrue(4)
|
|
154
|
+
if(alon .ge. 360.0) then
|
|
155
|
+
alon = alon - 360.0 ! just in case
|
|
156
|
+
elseif(alon .lt. 0.0) then
|
|
157
|
+
alon = alon + 360.0 ! in case it between -179.99 and -0.01
|
|
158
|
+
endif
|
|
159
|
+
|
|
160
|
+
c do the area window criteria tests
|
|
161
|
+
|
|
162
|
+
if(alat .lt. alatb .or. alat .ge. alatt) goto 100
|
|
163
|
+
|
|
164
|
+
if(alonl .lt. alonr) then
|
|
165
|
+
if(alon .lt. alonl .or. alon .ge. alonr) goto 100
|
|
166
|
+
else
|
|
167
|
+
if(alon .lt. alonl .and. alon .ge. alonr) goto 100
|
|
168
|
+
endif
|
|
169
|
+
c
|
|
170
|
+
c check file size, close it if it gets too big
|
|
171
|
+
c
|
|
172
|
+
if(iorec .gt. iomax) then
|
|
173
|
+
close(iout)
|
|
174
|
+
iorec = 0
|
|
175
|
+
endif
|
|
176
|
+
c
|
|
177
|
+
c open a new file for output
|
|
178
|
+
c
|
|
179
|
+
if(iorec .eq. 0) then
|
|
180
|
+
jfile = jfile + 1
|
|
181
|
+
write(outfile,
|
|
182
|
+
+ "('MSG',i1,'.', a, '.', a3, '.', i6, '.', i6, '_')")
|
|
183
|
+
+ resol,vname(:vlen), type, idstr, idend
|
|
184
|
+
lennam = lentrm(outfile)
|
|
185
|
+
if(jfile .le. 9) then
|
|
186
|
+
write(outfile(lentrm(outfile)+1:), '(i1)') jfile
|
|
187
|
+
elseif(jfile .le. 99) then
|
|
188
|
+
write(outfile(lentrm(outfile)+1:), '(i2)') jfile
|
|
189
|
+
else
|
|
190
|
+
write(outfile(lentrm(outfile)+1:), '(i3)') jfile
|
|
191
|
+
endif
|
|
192
|
+
lennam = lentrm(outfile)
|
|
193
|
+
print *, "Open file for Output:",
|
|
194
|
+
+ outdir(:outlen)//outfile(:lennam)
|
|
195
|
+
open(iout, file=outdir(:outlen)//outfile(:lennam),
|
|
196
|
+
+ form='formatted', status='new')
|
|
197
|
+
c write in the comment header field column headers
|
|
198
|
+
lennam = lentrm(header)
|
|
199
|
+
write(iout,'(a)')header(:lennam)
|
|
200
|
+
lennam = lentrm(colhead)
|
|
201
|
+
write(iout,'(a)')colhead(:lennam)
|
|
202
|
+
endif
|
|
203
|
+
|
|
204
|
+
c write records to output file
|
|
205
|
+
|
|
206
|
+
write(iout,formato)iyear,imonth,ibsz,alon,alat,ipid2,
|
|
207
|
+
* (ftrue(index(ii)),ii=1,nstat)
|
|
208
|
+
iorec = iorec + 1
|
|
209
|
+
nrecout = nrecout + 1
|
|
210
|
+
|
|
211
|
+
if(iorec.le.5) write(*,formato)iyear,imonth,ibsz,alon,alat,ipid2,
|
|
212
|
+
* (ftrue(index(ii)),ii=1,nstat)
|
|
213
|
+
go to 100
|
|
214
|
+
! END OF FILE
|
|
215
|
+
950 CONTINUE
|
|
216
|
+
close(iout)
|
|
217
|
+
write(*,"('INRECS: ', i10)") nrecin
|
|
218
|
+
write(*,"('OUTRECS: ', i10)") nrecout
|
|
219
|
+
|
|
220
|
+
stop
|
|
221
|
+
end
|
|
222
|
+
C=============================================================================C
|
|
223
|
+
C WARNING: Code beyond this point should not require any modification. C
|
|
224
|
+
C=============================================================================C
|
|
225
|
+
C-----------------------------------------------------------------------3456789
|
|
226
|
+
BLOCK DATA BDMSG1
|
|
227
|
+
IMPLICIT INTEGER(A-E,G-Z)
|
|
228
|
+
C
|
|
229
|
+
CHARACTER FORMAT*640
|
|
230
|
+
PARAMETER(NUMBER=49)
|
|
231
|
+
COMMON /MSG1/FUNITS(NUMBER,3:9),FBASE(NUMBER,3:9),BITS(NUMBER)
|
|
232
|
+
+,OFFSET(NUMBER),FORMAT(3:9),RPTID,INDXCK
|
|
233
|
+
C
|
|
234
|
+
DATA (FUNITS(I,3),I=1,NUMBER)
|
|
235
|
+
+/1. ,1. ,1. ,.5 ,.5 ,1. ,1. ,1. ,1.
|
|
236
|
+
1 ,.01 ,.01 ,.01 ,.1
|
|
237
|
+
3 ,.01 ,.01 ,.01 ,.1
|
|
238
|
+
5 ,.01 ,.01 ,.01 ,.1
|
|
239
|
+
M ,.01 ,.01 ,.01 ,.1
|
|
240
|
+
N ,1. ,1. ,1. ,1.
|
|
241
|
+
S ,.01 ,.01 ,.01 ,.1
|
|
242
|
+
D ,2. ,2. ,2. ,2.
|
|
243
|
+
H ,.1 ,.1 ,.1 ,.1
|
|
244
|
+
X ,.1 ,.1 ,.1 ,.1
|
|
245
|
+
Y ,.1 ,.1 ,.1 ,.1/
|
|
246
|
+
C
|
|
247
|
+
DATA (FUNITS(I,4),I=1,NUMBER)
|
|
248
|
+
+/1. ,1. ,1. ,.5 ,.5 ,1. ,1. ,1. ,1.
|
|
249
|
+
1 ,.01 ,.01 ,.01 ,.01
|
|
250
|
+
3 ,.01 ,.01 ,.01 ,.01
|
|
251
|
+
5 ,.01 ,.01 ,.01 ,.01
|
|
252
|
+
M ,.01 ,.01 ,.01 ,.01
|
|
253
|
+
N ,1. ,1. ,1. ,1.
|
|
254
|
+
S ,.01 ,.01 ,.01 ,.01
|
|
255
|
+
D ,2. ,2. ,2. ,2.
|
|
256
|
+
H ,.1 ,.1 ,.1 ,.1
|
|
257
|
+
X ,.1 ,.1 ,.1 ,.1
|
|
258
|
+
Y ,.1 ,.1 ,.1 ,.1/
|
|
259
|
+
C
|
|
260
|
+
DATA (FUNITS(I,5),I=1,NUMBER)
|
|
261
|
+
+/1. ,1. ,1. ,.5 ,.5 ,1. ,1. ,1. ,1.
|
|
262
|
+
1 ,.1 ,.1 ,.1 ,.1
|
|
263
|
+
3 ,.1 ,.1 ,.1 ,.1
|
|
264
|
+
5 ,.1 ,.1 ,.1 ,.1
|
|
265
|
+
M ,.1 ,.1 ,.1 ,.1
|
|
266
|
+
N ,1. ,1. ,1. ,1.
|
|
267
|
+
S ,.1 ,.1 ,.1 ,.1
|
|
268
|
+
D ,2. ,2. ,2. ,2.
|
|
269
|
+
H ,.1 ,.1 ,.1 ,.1
|
|
270
|
+
X ,.1 ,.1 ,.1 ,.1
|
|
271
|
+
Y ,.1 ,.1 ,.1 ,.1/
|
|
272
|
+
C
|
|
273
|
+
DATA (FUNITS(I,6),I=1,NUMBER)
|
|
274
|
+
+/1. ,1. ,1. ,.5 ,.5 ,1. ,1. ,1. ,1.
|
|
275
|
+
1 ,.01 ,.1 ,.01 ,.1
|
|
276
|
+
3 ,.01 ,.1 ,.01 ,.1
|
|
277
|
+
5 ,.01 ,.1 ,.01 ,.1
|
|
278
|
+
M ,.01 ,.1 ,.01 ,.1
|
|
279
|
+
N ,1. ,1. ,1. ,1.
|
|
280
|
+
S ,.01 ,.1 ,.01 ,.1
|
|
281
|
+
D ,2. ,2. ,2. ,2.
|
|
282
|
+
H ,.1 ,.1 ,.1 ,.1
|
|
283
|
+
X ,.1 ,.1 ,.1 ,.1
|
|
284
|
+
Y ,.1 ,.1 ,.1 ,.1/
|
|
285
|
+
C
|
|
286
|
+
DATA (FUNITS(I,7),I=1,NUMBER)
|
|
287
|
+
+/1. ,1. ,1. ,.5 ,.5 ,1. ,1. ,1. ,1.
|
|
288
|
+
1 ,.1 ,.1 ,.1 ,.1
|
|
289
|
+
3 ,.1 ,.1 ,.1 ,.1
|
|
290
|
+
5 ,.1 ,.1 ,.1 ,.1
|
|
291
|
+
M ,.1 ,.1 ,.1 ,.1
|
|
292
|
+
N ,1. ,1. ,1. ,1.
|
|
293
|
+
S ,.1 ,.1 ,.1 ,.1
|
|
294
|
+
D ,2. ,2. ,2. ,2.
|
|
295
|
+
H ,.1 ,.1 ,.1 ,.1
|
|
296
|
+
X ,.1 ,.1 ,.1 ,.1
|
|
297
|
+
Y ,.1 ,.1 ,.1 ,.1/
|
|
298
|
+
C
|
|
299
|
+
DATA (FUNITS(I,8),I=1,NUMBER)
|
|
300
|
+
+/1. ,1. ,1. ,.5 ,.5 ,1. ,1. ,1. ,1.
|
|
301
|
+
1 ,.01 ,.01 ,.1 ,.1
|
|
302
|
+
3 ,.01 ,.01 ,.1 ,.1
|
|
303
|
+
5 ,.01 ,.01 ,.1 ,.1
|
|
304
|
+
M ,.01 ,.01 ,.1 ,.1
|
|
305
|
+
N ,1. ,1. ,1. ,1.
|
|
306
|
+
S ,.01 ,.01 ,.1 ,.1
|
|
307
|
+
D ,2. ,2. ,2. ,2.
|
|
308
|
+
H ,.1 ,.1 ,.1 ,.1
|
|
309
|
+
X ,.1 ,.1 ,.1 ,.1
|
|
310
|
+
Y ,.1 ,.1 ,.1 ,.1/
|
|
311
|
+
C
|
|
312
|
+
DATA (FUNITS(I,9),I=1,NUMBER)
|
|
313
|
+
+/1. ,1. ,1. ,.5 ,.5 ,1. ,1. ,1. ,1.
|
|
314
|
+
1 ,.1 ,.1 ,.5 ,5.
|
|
315
|
+
3 ,.1 ,.1 ,.5 ,5.
|
|
316
|
+
5 ,.1 ,.1 ,.5 ,5.
|
|
317
|
+
M ,.1 ,.1 ,.5 ,5.
|
|
318
|
+
N ,1. ,1. ,1. ,1.
|
|
319
|
+
S ,.1 ,.1 ,.5 ,5.
|
|
320
|
+
D ,2. ,2. ,2. ,2.
|
|
321
|
+
H ,.1 ,.1 ,.1 ,.1
|
|
322
|
+
X ,.1 ,.1 ,.1 ,.1
|
|
323
|
+
Y ,.1 ,.1 ,.1 ,.1/
|
|
324
|
+
C
|
|
325
|
+
DATA (FBASE(I,3),I=1,NUMBER)
|
|
326
|
+
+/1799. ,0. ,-1. ,-1. ,-181. ,-1. ,-1. ,0. ,0.
|
|
327
|
+
1 ,-501. ,-8801. ,-1. ,-1.
|
|
328
|
+
3 ,-501. ,-8801. ,-1. ,-1.
|
|
329
|
+
5 ,-501. ,-8801. ,-1. ,-1.
|
|
330
|
+
M ,-501. ,-8801. ,-1. ,-1.
|
|
331
|
+
N ,0. ,0. ,0. ,0.
|
|
332
|
+
S ,-1. ,-1. ,-1. ,-1.
|
|
333
|
+
D ,0. ,0. ,0. ,0.
|
|
334
|
+
H ,-1. ,-1. ,-1. ,-1.
|
|
335
|
+
X ,-1. ,-1. ,-1. ,-1.
|
|
336
|
+
Y ,-1. ,-1. ,-1. ,-1./
|
|
337
|
+
C
|
|
338
|
+
DATA (FBASE(I,4),I=1,NUMBER)
|
|
339
|
+
+/1799. ,0. ,-1. ,-1. ,-181. ,-1. ,-1. ,0. ,0.
|
|
340
|
+
1 ,-1. ,-10221. ,-10221. ,86999.
|
|
341
|
+
3 ,-1. ,-10221. ,-10221. ,86999.
|
|
342
|
+
5 ,-1. ,-10221. ,-10221. ,86999.
|
|
343
|
+
M ,-1. ,-10221. ,-10221. ,86999.
|
|
344
|
+
N ,0. ,0. ,0. ,0.
|
|
345
|
+
S ,-1. ,-1. ,-1. ,-1.
|
|
346
|
+
D ,0. ,0. ,0. ,0.
|
|
347
|
+
H ,-1. ,-1. ,-1. ,-1.
|
|
348
|
+
X ,-1. ,-1. ,-1. ,-1.
|
|
349
|
+
Y ,-1. ,-1. ,-1. ,-1./
|
|
350
|
+
C
|
|
351
|
+
DATA (FBASE(I,5),I=1,NUMBER)
|
|
352
|
+
+/1799. ,0. ,-1. ,-1. ,-181. ,-1. ,-1. ,0. ,0.
|
|
353
|
+
1 ,-1. ,-1. ,-30001. ,-30001.
|
|
354
|
+
3 ,-1. ,-1. ,-30001. ,-30001.
|
|
355
|
+
5 ,-1. ,-1. ,-30001. ,-30001.
|
|
356
|
+
M ,-1. ,-1. ,-30001. ,-30001.
|
|
357
|
+
N ,0. ,0. ,0. ,0.
|
|
358
|
+
S ,-1. ,-1. ,-1. ,-1.
|
|
359
|
+
D ,0. ,0. ,0. ,0.
|
|
360
|
+
H ,-1. ,-1. ,-1. ,-1.
|
|
361
|
+
X ,-1. ,-1. ,-1. ,-1.
|
|
362
|
+
Y ,-1. ,-1. ,-1. ,-1./
|
|
363
|
+
C
|
|
364
|
+
DATA (FBASE(I,6),I=1,NUMBER)
|
|
365
|
+
+/1799. ,0. ,-1. ,-1. ,-181. ,-1. ,-1. ,0. ,0.
|
|
366
|
+
1 ,-6301. ,-10001. ,-4001. ,-10001.
|
|
367
|
+
3 ,-6301. ,-10001. ,-4001. ,-10001.
|
|
368
|
+
5 ,-6301. ,-10001. ,-4001. ,-10001.
|
|
369
|
+
M ,-6301. ,-10001. ,-4001. ,-10001.
|
|
370
|
+
N ,0. ,0. ,0. ,0.
|
|
371
|
+
S ,-1. ,-1. ,-1. ,-1.
|
|
372
|
+
D ,0. ,0. ,0. ,0.
|
|
373
|
+
H ,-1. ,-1. ,-1. ,-1.
|
|
374
|
+
X ,-1. ,-1. ,-1. ,-1.
|
|
375
|
+
Y ,-1. ,-1. ,-1. ,-1./
|
|
376
|
+
C
|
|
377
|
+
DATA (FBASE(I,7),I=1,NUMBER)
|
|
378
|
+
+/1799. ,0. ,-1. ,-1. ,-181. ,-1. ,-1. ,0. ,0.
|
|
379
|
+
1 ,-20001. ,-20001. ,-10001. ,-10001.
|
|
380
|
+
3 ,-20001. ,-20001. ,-10001. ,-10001.
|
|
381
|
+
5 ,-20001. ,-20001. ,-10001. ,-10001.
|
|
382
|
+
M ,-20001. ,-20001. ,-10001. ,-10001.
|
|
383
|
+
N ,0. ,0. ,0. ,0.
|
|
384
|
+
S ,-1. ,-1. ,-1. ,-1.
|
|
385
|
+
D ,0. ,0. ,0. ,0.
|
|
386
|
+
H ,-1. ,-1. ,-1. ,-1.
|
|
387
|
+
X ,-1. ,-1. ,-1. ,-1.
|
|
388
|
+
Y ,-1. ,-1. ,-1. ,-1./
|
|
389
|
+
C
|
|
390
|
+
DATA (FBASE(I,8),I=1,NUMBER)
|
|
391
|
+
+/1799. ,0. ,-1. ,-1. ,-181. ,-1. ,-1. ,0. ,0.
|
|
392
|
+
1 ,-501. ,-8801. ,-30001. ,-30001.
|
|
393
|
+
3 ,-501. ,-8801. ,-30001. ,-30001.
|
|
394
|
+
5 ,-501. ,-8801. ,-30001. ,-30001.
|
|
395
|
+
M ,-501. ,-8801. ,-30001. ,-30001.
|
|
396
|
+
N ,0. ,0. ,0. ,0.
|
|
397
|
+
S ,-1. ,-1. ,-1. ,-1.
|
|
398
|
+
D ,0. ,0. ,0. ,0.
|
|
399
|
+
H ,-1. ,-1. ,-1. ,-1.
|
|
400
|
+
X ,-1. ,-1. ,-1. ,-1.
|
|
401
|
+
Y ,-1. ,-1. ,-1. ,-1./
|
|
402
|
+
C
|
|
403
|
+
DATA (FBASE(I,9),I=1,NUMBER)
|
|
404
|
+
+/1799. ,0. ,-1. ,-1. ,-181. ,-1. ,-1. ,0. ,0.
|
|
405
|
+
1 ,-10001. ,-10001. ,-1. ,-1.
|
|
406
|
+
3 ,-10001. ,-10001. ,-1. ,-1.
|
|
407
|
+
5 ,-10001. ,-10001. ,-1. ,-1.
|
|
408
|
+
M ,-10001. ,-10001. ,-1. ,-1.
|
|
409
|
+
N ,0. ,0. ,0. ,0.
|
|
410
|
+
S ,-1. ,-1. ,-1. ,-1.
|
|
411
|
+
D ,0. ,0. ,0. ,0.
|
|
412
|
+
H ,-1. ,-1. ,-1. ,-1.
|
|
413
|
+
X ,-1. ,-1. ,-1. ,-1.
|
|
414
|
+
Y ,-1. ,-1. ,-1. ,-1./
|
|
415
|
+
C
|
|
416
|
+
DATA BITS
|
|
417
|
+
+/8 ,4 ,3 ,10 ,9 ,3 ,3 ,4 ,4
|
|
418
|
+
1 ,16 ,16 ,16 ,16
|
|
419
|
+
3 ,16 ,16 ,16 ,16
|
|
420
|
+
5 ,16 ,16 ,16 ,16
|
|
421
|
+
M ,16 ,16 ,16 ,16
|
|
422
|
+
N ,16 ,16 ,16 ,16
|
|
423
|
+
S ,16 ,16 ,16 ,16
|
|
424
|
+
D ,4 ,4 ,4 ,4
|
|
425
|
+
H ,4 ,4 ,4 ,4
|
|
426
|
+
X ,4 ,4 ,4 ,4
|
|
427
|
+
Y ,4 ,4 ,4 ,4/
|
|
428
|
+
C
|
|
429
|
+
DATA OFFSET
|
|
430
|
+
+/16 ,24 ,28 ,31 ,41 ,50 ,53 ,56 ,60
|
|
431
|
+
1 ,64 ,80 ,96 ,112
|
|
432
|
+
3 ,128 ,144 ,160 ,176
|
|
433
|
+
5 ,192 ,208 ,224 ,240
|
|
434
|
+
M ,256 ,272 ,288 ,304
|
|
435
|
+
N ,320 ,336 ,352 ,368
|
|
436
|
+
S ,384 ,400 ,416 ,432
|
|
437
|
+
D ,448 ,452 ,456 ,460
|
|
438
|
+
H ,464 ,468 ,472 ,476
|
|
439
|
+
X ,480 ,484 ,488 ,492
|
|
440
|
+
Y ,496 ,500 ,504 ,508/
|
|
441
|
+
C
|
|
442
|
+
DATA FORMAT(3)
|
|
443
|
+
+/"(/' YEAR ',F5.0,' MONTH ',F3.0,' BSZ ',F2.0,' BLO ',F5.1,' BLA '
|
|
444
|
+
+,F5.1,' PID1 ',F6.0,' PID2 ',F6.0,' GRP ',F3.0,' CK ',F6.0/
|
|
445
|
+
+11X,6X,'S1',6X,'S3',6X,'S5',7X,'M',7X,'N',7X,'S',7X,'D',7X,'H'
|
|
446
|
+
+,7X,'X',7X,'Y'/
|
|
447
|
+
+' S ',F8.2,F8.2,F8.2,F8.2,F8.0,F8.2,F8.0,F8.1,F8.1,F8.1/
|
|
448
|
+
+' A ',F8.2,F8.2,F8.2,F8.2,F8.0,F8.2,F8.0,F8.1,F8.1,F8.1/
|
|
449
|
+
+' Q ',F8.2,F8.2,F8.2,F8.2,F8.0,F8.2,F8.0,F8.1,F8.1,F8.1/
|
|
450
|
+
+' R ',F8.1,F8.1,F8.1,F8.1,F8.0,F8.1,F8.0,F8.1,F8.1,F8.1)
|
|
451
|
+
+"/
|
|
452
|
+
C
|
|
453
|
+
DATA FORMAT(4)
|
|
454
|
+
+/"(/' YEAR ',F5.0,' MONTH ',F3.0,' BSZ ',F2.0,' BLO ',F5.1,' BLA '
|
|
455
|
+
+,F5.1,' PID1 ',F6.0,' PID2 ',F6.0,' GRP ',F3.0,' CK ',F6.0/
|
|
456
|
+
+11X,6X,'S1',6X,'S3',6X,'S5',7X,'M',7X,'N',7X,'S',7X,'D',7X,'H'
|
|
457
|
+
+,7X,'X',7X,'Y'/
|
|
458
|
+
+' W ',F8.2,F8.2,F8.2,F8.2,F8.0,F8.2,F8.0,F8.1,F8.1,F8.1/
|
|
459
|
+
+' U ',F8.2,F8.2,F8.2,F8.2,F8.0,F8.2,F8.0,F8.1,F8.1,F8.1/
|
|
460
|
+
+' V ',F8.2,F8.2,F8.2,F8.2,F8.0,F8.2,F8.0,F8.1,F8.1,F8.1/
|
|
461
|
+
+' P ',F8.2,F8.2,F8.2,F8.2,F8.0,F8.2,F8.0,F8.1,F8.1,F8.1)
|
|
462
|
+
+"/
|
|
463
|
+
C
|
|
464
|
+
DATA FORMAT(5)
|
|
465
|
+
+/"(/' YEAR ',F5.0,' MONTH ',F3.0,' BSZ ',F2.0,' BLO ',F5.1,' BLA '
|
|
466
|
+
+,F5.1,' PID1 ',F6.0,' PID2 ',F6.0,' GRP ',F3.0,' CK ',F6.0/
|
|
467
|
+
+11X,6X,'S1',6X,'S3',6X,'S5',7X,'M',7X,'N',7X,'S',7X,'D',7X,'H'
|
|
468
|
+
+,7X,'X',7X,'Y'/
|
|
469
|
+
+' C ',F8.1,F8.1,F8.1,F8.1,F8.0,F8.1,F8.0,F8.1,F8.1,F8.1/
|
|
470
|
+
+' R ',F8.1,F8.1,F8.1,F8.1,F8.0,F8.1,F8.0,F8.1,F8.1,F8.1/
|
|
471
|
+
+' X=W*U ',F8.1,F8.1,F8.1,F8.1,F8.0,F8.1,F8.0,F8.1,F8.1,F8.1/
|
|
472
|
+
+' Y=W*V ',F8.1,F8.1,F8.1,F8.1,F8.0,F8.1,F8.0,F8.1,F8.1,F8.1)
|
|
473
|
+
+"/
|
|
474
|
+
C
|
|
475
|
+
DATA FORMAT(6)
|
|
476
|
+
+/"(/' YEAR ',F5.0,' MONTH ',F3.0,' BSZ ',F2.0,' BLO ',F5.1,' BLA '
|
|
477
|
+
+,F5.1,' PID1 ',F6.0,' PID2 ',F6.0,' GRP ',F3.0,' CK ',F6.0/
|
|
478
|
+
+11X,6X,'S1',6X,'S3',6X,'S5',7X,'M',7X,'N',7X,'S',7X,'D',7X,'H'
|
|
479
|
+
+,7X,'X',7X,'Y'/
|
|
480
|
+
+' D=S-A ',F8.2,F8.2,F8.2,F8.2,F8.0,F8.2,F8.0,F8.1,F8.1,F8.1/
|
|
481
|
+
+' E=(S-A)*W ',F8.1,F8.1,F8.1,F8.1,F8.0,F8.1,F8.0,F8.1,F8.1,F8.1/
|
|
482
|
+
+' F=QS-Q ',F8.2,F8.2,F8.2,F8.2,F8.0,F8.2,F8.0,F8.1,F8.1,F8.1/
|
|
483
|
+
+' G=(QS-Q)*W',F8.1,F8.1,F8.1,F8.1,F8.0,F8.1,F8.0,F8.1,F8.1,F8.1)
|
|
484
|
+
+"/
|
|
485
|
+
C
|
|
486
|
+
DATA FORMAT(7)
|
|
487
|
+
+/"(/' YEAR ',F5.0,' MONTH ',F3.0,' BSZ ',F2.0,' BLO ',F5.1,' BLA '
|
|
488
|
+
+,F5.1,' PID1 ',F6.0,' PID2 ',F6.0,' GRP ',F3.0,' CK ',F6.0/
|
|
489
|
+
+11X,6X,'S1',6X,'S3',6X,'S5',7X,'M',7X,'N',7X,'S',7X,'D',7X,'H'
|
|
490
|
+
+,7X,'X',7X,'Y'/
|
|
491
|
+
+' I=U*A ',F8.1,F8.1,F8.1,F8.1,F8.0,F8.1,F8.0,F8.1,F8.1,F8.1/
|
|
492
|
+
+' J=V*A ',F8.1,F8.1,F8.1,F8.1,F8.0,F8.1,F8.0,F8.1,F8.1,F8.1/
|
|
493
|
+
+' K=U*Q ',F8.1,F8.1,F8.1,F8.1,F8.0,F8.1,F8.0,F8.1,F8.1,F8.1/
|
|
494
|
+
+' L=V*Q ',F8.1,F8.1,F8.1,F8.1,F8.0,F8.1,F8.0,F8.1,F8.1,F8.1)
|
|
495
|
+
+"/
|
|
496
|
+
C
|
|
497
|
+
DATA FORMAT(8)
|
|
498
|
+
+/"(/' YEAR ',F5.0,' MONTH ',F3.0,' BSZ ',F2.0,' BLO ',F5.1,' BLA '
|
|
499
|
+
+,F5.1,' PID1 ',F6.0,' PID2 ',F6.0,' GRP ',F3.0,' CK ',F6.0/
|
|
500
|
+
+11X,6X,'S1',6X,'S3',6X,'S5',7X,'M',7X,'N',7X,'S',7X,'D',7X,'H'
|
|
501
|
+
+,7X,'X',7X,'Y'/
|
|
502
|
+
+' S ',F8.2,F8.2,F8.2,F8.2,F8.0,F8.2,F8.0,F8.1,F8.1,F8.1/
|
|
503
|
+
+' A ',F8.2,F8.2,F8.2,F8.2,F8.0,F8.2,F8.0,F8.1,F8.1,F8.1/
|
|
504
|
+
+' X=W*U ',F8.1,F8.1,F8.1,F8.1,F8.0,F8.1,F8.0,F8.1,F8.1,F8.1/
|
|
505
|
+
+' Y=W*V ',F8.1,F8.1,F8.1,F8.1,F8.0,F8.1,F8.0,F8.1,F8.1,F8.1)
|
|
506
|
+
+"/
|
|
507
|
+
C
|
|
508
|
+
DATA FORMAT(9)
|
|
509
|
+
+/"(/' YEAR ',F5.0,' MONTH ',F3.0,' BSZ ',F2.0,' BLO ',F5.1,' BLA '
|
|
510
|
+
+,F5.1,' PID1 ',F6.0,' PID2 ',F6.0,' GRP ',F3.0,' CK ',F6.0/
|
|
511
|
+
+11X,6X,'S1',6X,'S3',6X,'S5',7X,'M',7X,'N',7X,'S',7X,'D',7X,'H'
|
|
512
|
+
+,7X,'X',7X,'Y'/
|
|
513
|
+
+' M=(QS-Q)*U',F8.1,F8.1,F8.1,F8.1,F8.0,F8.1,F8.0,F8.1,F8.1,F8.1/
|
|
514
|
+
+' N=(QS-Q)*V',F8.1,F8.1,F8.1,F8.1,F8.0,F8.1,F8.0,F8.1,F8.1,F8.1/
|
|
515
|
+
+' B1=W*W*W ',F8.1,F8.1,F8.1,F8.1,F8.0,F8.1,F8.0,F8.1,F8.1,F8.1/
|
|
516
|
+
+' B2=W*W*W ',F8.0,F8.0,F8.0,F8.0,F8.0,F8.0,F8.0,F8.1,F8.1,F8.1)
|
|
517
|
+
+"/
|
|
518
|
+
C
|
|
519
|
+
DATA RPTID/1/ ,INDXCK/9/
|
|
520
|
+
END
|
|
521
|
+
C-----------------------------------------------------------------------3456789
|
|
522
|
+
SUBROUTINE GETRPT(RPT,CODED,FTRUE,FMISS
|
|
523
|
+
+,FUNITS,FBASE,BITS,OFFSET,NUMBER,RPTID,INDXCK)
|
|
524
|
+
C UNPACK REPORT AND CONVERT CODED TO TRUE VALUES
|
|
525
|
+
C
|
|
526
|
+
IMPLICIT INTEGER(A-E,G-Z)
|
|
527
|
+
CHARACTER*(*) RPT
|
|
528
|
+
DIMENSION CODED(*),FTRUE(*),FUNITS(*),FBASE(*),BITS(*),OFFSET(*)
|
|
529
|
+
C
|
|
530
|
+
IF(MOD(ICHAR(RPT(2:2)),16).NE.RPTID)STOP 'RPTID ERROR'
|
|
531
|
+
CALL UNPACK(RPT,CODED)
|
|
532
|
+
FTRUE(INDXCK)=CODED(INDXCK)
|
|
533
|
+
CODED(INDXCK)=0
|
|
534
|
+
DO 190 I=1,NUMBER
|
|
535
|
+
IF(I.EQ.INDXCK)GOTO 190
|
|
536
|
+
IF(I.GT.NUMBER-8)FUNITS(I)=2**NINT(FTRUE(3))*.05
|
|
537
|
+
IF(CODED(I).EQ.0)THEN
|
|
538
|
+
FTRUE(I)=FMISS
|
|
539
|
+
ELSE
|
|
540
|
+
FTRUE(I)=(CODED(I)+FBASE(I))*FUNITS(I)
|
|
541
|
+
CODED(INDXCK)=CODED(INDXCK)+CODED(I)
|
|
542
|
+
ENDIF
|
|
543
|
+
190 CONTINUE
|
|
544
|
+
CODED(INDXCK)=MOD(CODED(INDXCK),2**BITS(INDXCK)-1)
|
|
545
|
+
IF(FTRUE(INDXCK).NE.CODED(INDXCK))STOP 'CHECKSUM ERROR'
|
|
546
|
+
END
|
|
547
|
+
C-----------------------------------------------------------------------3456789
|
|
548
|
+
SUBROUTINE UNPACK(RPT,CODED)
|
|
549
|
+
C UNPACK REPORT
|
|
550
|
+
C
|
|
551
|
+
IMPLICIT INTEGER(A-E,G-Z)
|
|
552
|
+
CHARACTER*(*) RPT
|
|
553
|
+
DIMENSION CODED(*)
|
|
554
|
+
C
|
|
555
|
+
CODED(1)=ICHAR(RPT(3:3))
|
|
556
|
+
CODED(2)=ICHAR(RPT(4:4))/16
|
|
557
|
+
CODED(3)=MOD(ICHAR(RPT(4:4)),16)/2
|
|
558
|
+
CODED(4)=(MOD(ICHAR(RPT(4:4)),2)*256+ICHAR(RPT(5:5)))*2
|
|
559
|
+
++ICHAR(RPT(6:6))/128
|
|
560
|
+
CODED(5)=MOD(ICHAR(RPT(6:6)),128)*4+ICHAR(RPT(7:7))/64
|
|
561
|
+
CODED(6)=MOD(ICHAR(RPT(7:7)),64)/8
|
|
562
|
+
CODED(7)=MOD(ICHAR(RPT(7:7)),8)
|
|
563
|
+
CODED(8)=ICHAR(RPT(8:8))/16
|
|
564
|
+
CODED(9)=MOD(ICHAR(RPT(8:8)),16)
|
|
565
|
+
CODED(10)=ICHAR(RPT(9:9))*256+ICHAR(RPT(10:10))
|
|
566
|
+
CODED(11)=ICHAR(RPT(11:11))*256+ICHAR(RPT(12:12))
|
|
567
|
+
CODED(12)=ICHAR(RPT(13:13))*256+ICHAR(RPT(14:14))
|
|
568
|
+
CODED(13)=ICHAR(RPT(15:15))*256+ICHAR(RPT(16:16))
|
|
569
|
+
CODED(14)=ICHAR(RPT(17:17))*256+ICHAR(RPT(18:18))
|
|
570
|
+
CODED(15)=ICHAR(RPT(19:19))*256+ICHAR(RPT(20:20))
|
|
571
|
+
CODED(16)=ICHAR(RPT(21:21))*256+ICHAR(RPT(22:22))
|
|
572
|
+
CODED(17)=ICHAR(RPT(23:23))*256+ICHAR(RPT(24:24))
|
|
573
|
+
CODED(18)=ICHAR(RPT(25:25))*256+ICHAR(RPT(26:26))
|
|
574
|
+
CODED(19)=ICHAR(RPT(27:27))*256+ICHAR(RPT(28:28))
|
|
575
|
+
CODED(20)=ICHAR(RPT(29:29))*256+ICHAR(RPT(30:30))
|
|
576
|
+
CODED(21)=ICHAR(RPT(31:31))*256+ICHAR(RPT(32:32))
|
|
577
|
+
CODED(22)=ICHAR(RPT(33:33))*256+ICHAR(RPT(34:34))
|
|
578
|
+
CODED(23)=ICHAR(RPT(35:35))*256+ICHAR(RPT(36:36))
|
|
579
|
+
CODED(24)=ICHAR(RPT(37:37))*256+ICHAR(RPT(38:38))
|
|
580
|
+
CODED(25)=ICHAR(RPT(39:39))*256+ICHAR(RPT(40:40))
|
|
581
|
+
CODED(26)=ICHAR(RPT(41:41))*256+ICHAR(RPT(42:42))
|
|
582
|
+
CODED(27)=ICHAR(RPT(43:43))*256+ICHAR(RPT(44:44))
|
|
583
|
+
CODED(28)=ICHAR(RPT(45:45))*256+ICHAR(RPT(46:46))
|
|
584
|
+
CODED(29)=ICHAR(RPT(47:47))*256+ICHAR(RPT(48:48))
|
|
585
|
+
CODED(30)=ICHAR(RPT(49:49))*256+ICHAR(RPT(50:50))
|
|
586
|
+
CODED(31)=ICHAR(RPT(51:51))*256+ICHAR(RPT(52:52))
|
|
587
|
+
CODED(32)=ICHAR(RPT(53:53))*256+ICHAR(RPT(54:54))
|
|
588
|
+
CODED(33)=ICHAR(RPT(55:55))*256+ICHAR(RPT(56:56))
|
|
589
|
+
CODED(34)=ICHAR(RPT(57:57))/16
|
|
590
|
+
CODED(35)=MOD(ICHAR(RPT(57:57)),16)
|
|
591
|
+
CODED(36)=ICHAR(RPT(58:58))/16
|
|
592
|
+
CODED(37)=MOD(ICHAR(RPT(58:58)),16)
|
|
593
|
+
CODED(38)=ICHAR(RPT(59:59))/16
|
|
594
|
+
CODED(39)=MOD(ICHAR(RPT(59:59)),16)
|
|
595
|
+
CODED(40)=ICHAR(RPT(60:60))/16
|
|
596
|
+
CODED(41)=MOD(ICHAR(RPT(60:60)),16)
|
|
597
|
+
CODED(42)=ICHAR(RPT(61:61))/16
|
|
598
|
+
CODED(43)=MOD(ICHAR(RPT(61:61)),16)
|
|
599
|
+
CODED(44)=ICHAR(RPT(62:62))/16
|
|
600
|
+
CODED(45)=MOD(ICHAR(RPT(62:62)),16)
|
|
601
|
+
CODED(46)=ICHAR(RPT(63:63))/16
|
|
602
|
+
CODED(47)=MOD(ICHAR(RPT(63:63)),16)
|
|
603
|
+
CODED(48)=ICHAR(RPT(64:64))/16
|
|
604
|
+
CODED(49)=MOD(ICHAR(RPT(64:64)),16)
|
|
605
|
+
END
|
|
606
|
+
FUNCTION LENTRM(STR)
|
|
607
|
+
C LENGTH OF A STRING MINUS TRAILING BLANKS
|
|
608
|
+
CHARACTER STR*(*)
|
|
609
|
+
DO 190 LENTRM=LEN(STR),1,-1
|
|
610
|
+
IF (STR(LENTRM:LENTRM).NE.' ') RETURN
|
|
611
|
+
190 CONTINUE
|
|
612
|
+
END
|