-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwdbtch.for
More file actions
518 lines (518 loc) · 13.9 KB
/
Copy pathwdbtch.for
File metadata and controls
518 lines (518 loc) · 13.9 KB
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
C
C
C
SUBROUTINE WDBCRL
I (WDMSFL,DSN,DSTYPE,
O RETCOD)
C
C + + + PURPOSE + + +
C add a label to a wdmsfl
C
C + + + DUMMY ARGUMENTS + + +
INTEGER WDMSFL,DSN,DSTYPE,RETCOD
C
C + + + ARGUMENT DEFINITIONS + + +
C WDMSFL - watershed data management file unit number
C DSN - data-set number to add
C DSTYPE - type of data set, 1- timeseries, 2-table, ...
C RETCOD - return code,
C 0 - label added
C -71 - data set already exists
C
C + + + LOCAL VARIABLES + + +
INTEGER PSA,RREC,LWDMFL,LDSN
C
C + + + EXTERNALS + + +
EXTERNAL WDDSCK, WDLBAD, WID2UD
C
C + + + END SPECIFICATIONS + + +
C
C adjust wdm and dsn as needed
CALL WID2UD (WDMSFL,DSN,
O LWDMFL,LDSN)
CALL WDDSCK (LWDMFL,LDSN,
O RREC,RETCOD)
C
IF (RETCOD.EQ.-81) THEN
C data set does not exist, add the label
CALL WDLBAD(LWDMFL,LDSN,DSTYPE,
O PSA)
RETCOD= 0
ELSE
C data set already exists, can not add a label
RETCOD= -71
END IF
C
RETURN
END
C
C
C
SUBROUTINE WDBSGC
I (WDMSFL,DSN,SAIND,SALEN,
O SAVAL,RETCOD)
C
C + + + PURPOSE + + +
C gets values of character search attribute for a dsn
C
C + + + DUMMY ARGUMENTS + + +
INTEGER WDMSFL,SAIND,SALEN,DSN,RETCOD
CHARACTER*1 SAVAL(SALEN)
C
C + + + ARGUMENT DEFINITIONS + + +
C WDMSFL - watershed data management file unit number
C DSN - data-set number to add
C SAIND - index number of attribute
C SALEN - length of attribute
C SAVAL - value of attribute
C RETCOD - return code,
C 0 - attribute value returned
C -81 - data set does not exist
C -107 - attribute not present on this data set
C
C + + + COMMON BLOCKS + + +
INCLUDE 'cfbuff.inc'
C
C + + + LOCAL VARIABLES + + +
INTEGER SAPOS,RREC,RIND,I,J,K,LWDMFL,LDSN
CHARACTER*4 C4DUM
C
C + + + FUNCTIONS + + +
INTEGER WDRCGO
C
C + + + EXTERNALS + + +
EXTERNAL WDDSCK, WDRCGO, WDSAFL, WID2UD
C
C + + + INPUT FORMATS + + +
1000 FORMAT (4A1)
C
C + + + OUTPUT FORMATS + + +
2000 FORMAT (A4)
C
C + + + END SPECIFICATIONS + + +
C
C adjust wdm and dsn as needed
CALL WID2UD (WDMSFL,DSN,
O LWDMFL,LDSN)
CALL WDDSCK (LWDMFL,LDSN,
O RREC,RETCOD)
IF (RETCOD.EQ.0) THEN
C data set exists, get position within buffer
RIND= WDRCGO(LWDMFL,RREC)
C get starting position for search attribute
CALL WDSAFL (SAIND,WIBUFF(1,RIND),
O SAPOS,RETCOD)
IF (RETCOD.EQ.0) THEN
J= SAPOS
DO 10 I= 1,SALEN,4
WRITE (C4DUM,2000) WIBUFF(J,RIND)
READ (C4DUM,1000) (SAVAL(K),K=I,I+3)
J= J+ 1
10 CONTINUE
END IF
END IF
IF (RETCOD.NE.0) THEN
C no value found, return blanks
DO 20 I= 1,SALEN
SAVAL(I)= ' '
20 CONTINUE
END IF
C
RETURN
END
C
C
C
SUBROUTINE WDBSGI
I (WDMSFL,DSN,SAIND,SALEN,
O SAVAL,RETCOD)
C
C + + + PURPOSE + + +
C gets the values of integer search attribute for a dsn
C
C + + + DUMMY ARGUMENTS + + +
INTEGER WDMSFL,SAIND,SALEN,DSN,RETCOD
INTEGER SAVAL(SALEN)
C
C + + + ARGUMENT DEFINITIONS + + +
C WDMSFL - watershed data management file unit number
C DSN - data-set number to add
C SAIND - index number of attribute
C SALEN - length of attribute
C SAVAL - value of attribute
C RETCOD - return code,
C 0 - attribute value returned
C -81 - data set does not exist
C -107 - attribute not present on this data set
C
C + + + COMMON BLOCKS + + +
INCLUDE 'cfbuff.inc'
C
C + + + LOCAL VARIABLES + + +
INTEGER SAPOS,RREC,RIND,I,J,LWDMFL,LDSN
C
C + + + FUNCTIONS + + +
INTEGER WDRCGO
C
C + + + EXTERNALS + + +
EXTERNAL WDDSCK, WDRCGO, WDSAFL, WID2UD
C
C + + + END SPECIFICATIONS + + +
C
C adjust wdm and dsn as needed
CALL WID2UD (WDMSFL,DSN,
O LWDMFL,LDSN)
CALL WDDSCK(LWDMFL,LDSN,
O RREC,RETCOD)
IF (RETCOD.EQ.0) THEN
C data set exists, get position within buffer
RIND= WDRCGO(LWDMFL,RREC)
C get starting position for search attribute
CALL WDSAFL (SAIND,WIBUFF(1,RIND),
O SAPOS,RETCOD)
IF (RETCOD.EQ.0) THEN
C get the value
DO 10 I= 1,SALEN
J= SAPOS+I-1
SAVAL(I)= WIBUFF(J,RIND)
10 CONTINUE
END IF
END IF
IF (RETCOD.NE.0) THEN
C no value found, return dummy value
DO 20 I= 1,SALEN
SAVAL(I)= -999
20 CONTINUE
END IF
C
RETURN
END
C
C
C
SUBROUTINE WDBSGR
I (WDMSFL,DSN,SAIND,SALEN,
O SAVAL,RETCOD)
C
C + + + PURPOSE + + +
C Get the values of real search attribute for a data set.
C
C + + + DUMMY ARGUMENTS + + +
INTEGER WDMSFL,SAIND,SALEN,DSN,RETCOD
REAL SAVAL(SALEN)
C
C + + + ARGUMENT DEFINITIONS + + +
C WDMSFL - watershed data management file unit number
C DSN - data-set number to add
C SAIND - index number of attribute
C SALEN - length of attribute
C SAVAL - value of attribute
C RETCOD - return code
C 0 - attribute value returned
C -81 - data set does not exist
C -107 - attribute not present on this data set
C
C + + + COMMON BLOCKS + + +
INCLUDE 'cfbuff.inc'
C
C + + + LOCAL VARIABLES + + +
INTEGER SAPOS,RREC,RIND,I,J,LWDMFL,LDSN
C
C + + + FUNCTIONS + + +
INTEGER WDRCGO
C
C + + + EXTERNALS + + +
EXTERNAL WDDSCK, WDRCGO, WDSAFL, WID2UD
C
C + + + END SPECIFICATIONS + + +
C
C adjust wdm and dsn as needed
CALL WID2UD (WDMSFL,DSN,
O LWDMFL,LDSN)
CALL WDDSCK (LWDMFL,LDSN,
O RREC,RETCOD)
IF (RETCOD.EQ.0) THEN
C data set exists, get position within buffer
RIND= WDRCGO(LWDMFL,RREC)
C get starting position for search attribute
CALL WDSAFL (SAIND,WIBUFF(1,RIND),
O SAPOS,RETCOD)
IF (RETCOD.EQ.0) THEN
C get the value
DO 10 I= 1,SALEN
J= SAPOS+I-1
SAVAL(I)= WRBUFF(J,RIND)
10 CONTINUE
END IF
END IF
IF (RETCOD.NE.0) THEN
C no value found, return dummy value
DO 20 I= 1,SALEN
SAVAL(I)= -999.
20 CONTINUE
END IF
C
RETURN
END
C
C
C
SUBROUTINE WDDSRN
I (WDMSFL,ODSN,NDSN,
O RETCOD)
C
C + + + PURPOSE + + +
C routine to renumber data sets with no user interaction
C
C + + + DUMMY ARGUMENTS + + +
INTEGER WDMSFL,ODSN,NDSN,RETCOD
C
C + + + ARGUMENT DEFINITIONS + + +
C WDMSFL - Fortran unit number for WDM file
C ODSN - old data-set number
C NDSN - new data-set number
C RETCOD - return code
C 0 - renumber successfully completed
C -72 - old data set does not exist
C -73 - new data set already exists
C
C + + + COMMON BLOCKS + + +
INCLUDE 'cfbuff.inc'
INCLUDE 'cdrloc.inc'
C
C + + + LOCAL VARIABLES + + +
INTEGER I,OREC,NREC,RREC,RIND,DSTYPE,PRDSN,NXDSN
C
C + + + FUNCTIONS + + +
INTEGER WDRCGO
C
C + + + EXTERNALS + + +
EXTERNAL WDRCGO, WDRCUP, WDDSCK, WDFDUP
C
C + + + END SPECIFICATIONS + + +
C
C does old data set exist?
CALL WDDSCK (WDMSFL,ODSN,
O OREC,RETCOD)
IF (RETCOD.EQ.0) THEN
C old exists, does new data set exist?
CALL WDDSCK (WDMSFL,NDSN,
O NREC,RETCOD)
IF (RETCOD.EQ.0) THEN
C it does, can't renumber
RETCOD= -73
ELSE
C it does not, reset return code
RETCOD= 0
END IF
ELSE
C no old data set
RETCOD= -72
END IF
IF (RETCOD.EQ.0) THEN
C old data set exists, new data set does not
RIND= WDRCGO (WDMSFL,OREC)
I= 5
WIBUFF(I,RIND)= NDSN
CALL WDRCUP (WDMSFL,RIND)
I= 6
DSTYPE= WIBUFF(I,RIND)
I= 1
PRDSN = WIBUFF(I,RIND)
I= 2
NXDSN = WIBUFF(I,RIND)
C update directory records, delete old entry
I= 0
CALL WDFDUP (WDMSFL,ODSN,I)
C add new entry
CALL WDFDUP (WDMSFL,NDSN,OREC)
C update data set chain
IF (NXDSN.GT.0) THEN
C update next data set's back pointer
CALL WDDSCK (WDMSFL,NXDSN,
O RREC,RETCOD)
RIND= WDRCGO (WDMSFL,RREC)
WIBUFF(1,RIND)= NDSN
CALL WDRCUP (WDMSFL,RIND)
END IF
IF (PRDSN.GT.0) THEN
C update previous data-set next pointer
CALL WDDSCK (WDMSFL,PRDSN,
O RREC,RETCOD)
RIND= WDRCGO (WDMSFL,RREC)
I = 2
WIBUFF(I,RIND)= NDSN
CALL WDRCUP (WDMSFL,RIND)
ELSE
C update file label record chain DSN
RREC= 1
RIND= WDRCGO (WDMSFL,RREC)
I = PTSNUM+ (DSTYPE-1)*2+ 1
WIBUFF(I,RIND)= NDSN
CALL WDRCUP (WDMSFL,RIND)
END IF
END IF
C
RETURN
END
C
C
C
SUBROUTINE WDDSCL
I (OWDMFL,ODSN,NWDMFL,NDSN,NTYPE,
O RETCOD)
C
C + + + PURPOSE + + +
C copies an old data-set label into a new data-set label
C
C + + + DUMMY ARGUMENTS + + +
INTEGER OWDMFL,ODSN,NWDMFL,NDSN,NTYPE,RETCOD
C
C + + + ARGUMENT DEFINITIONS + + +
C OWDMFL - old watershed data management file unit number
C ODSN - old data-set number
C NWDMFL - new watershed data management file unit number
C NDSN - new data-set number
C NTYPE - new data-set type, 0 - same as old,
C 1 - timeseries, 2-table, etc.
C RETCOD - return code
C 0 - copy complete
C -61 - old data set doesn't exist
C -62 - new data set already exists
C -63 - data-set type out of range
C
C + + + COMMON BLOCKS + + +
INCLUDE 'cfbuff.inc'
C
C + + + LOCAL VARIABLES + + +
INTEGER OFREC,OIND,NFREC,NIND,DSTYPE,I,PRNREC,PDAT
C
C + + + FUNCTIONS + + +
INTEGER WDRCGO,WDRCGX,WDPTCL
C
C + + + EXTERNALS + + +
EXTERNAL WDDSCK, WDFCUP, WDFDUP, WDPTCL, WDRCGO, WDRCGX, WDRCUP
EXTERNAL WDCRDT
C
C + + + END SPECIFICATIONS + + +
C
C write(99,*) 'WDDSCL:',OWDMFL,ODSN,NWDMFL,NDSN,NTYPE
RETCOD= 0
C check for old data set
CALL WDDSCK (OWDMFL,ODSN,
O OFREC,RETCOD)
IF (OFREC.EQ.0) THEN
C old data set does not exist
RETCOD= -61
ELSE IF (NTYPE.LT.0 .OR. NTYPE.GT.9) THEN
C bad dataset type
RETCOD= -63
ELSE
C check for new data set
CALL WDDSCK(NWDMFL,NDSN,
O NFREC,RETCOD)
IF (NFREC.GT.0) THEN
C new data set already exists
RETCOD= -62
ELSE
C ok to copy
RETCOD= 0
END IF
END IF
C
IF (RETCOD.EQ.0) THEN
C ok to copy
OIND = WDRCGO(OWDMFL,OFREC)
C type of data set
IF (NTYPE .EQ. 0) THEN
C use old data set type
DSTYPE= WIBUFF(6,OIND)
ELSE
C new data set type specified
DSTYPE= NTYPE
END IF
C where data pointers start
PDAT = WIBUFF(11,OIND)
C get a new record with no pointers
PRNREC= 0
I = 0
NIND = WDRCGX(NWDMFL,I,PRNREC)
PRNREC= RECNO(NIND)
C write(99,*) ' oind,nind,ofrec,prnrec,dstype:',
C 1 OIND,NIND,OFREC,PRNREC,DSTYPE
C fill in new dsn
WIBUFF(5,NIND)= NDSN
C fill in new data set type
WIBUFF(6,NIND)= DSTYPE
C update new record
CALL WDRCUP(NWDMFL,NIND)
C add new dsn to directories
C first data set directory
CALL WDFDUP (NWDMFL,NDSN,PRNREC)
C next pointer in file def rec and dsn pointers
I= 1
CALL WDFCUP (NWDMFL,DSTYPE,NDSN,I)
C
C be sure old label is still in memory
OIND= WDRCGO(OWDMFL,OFREC)
C be sure old label is still in memory
NIND= WDRCGO(NWDMFL,PRNREC)
C write(99,*) ' oind,rec,nind,rec:',OIND,RECNO(OIND),
C 1 NIND,RECNO(NIND)
C
C dont copy data pointers
C copy information from old record
DO 10 I= 7,PDAT-1
WIBUFF(I,NIND)= WIBUFF(I,OIND)
10 CONTINUE
C update free data space pointer to first data value pos
WIBUFF(PDAT+1,NIND)= WDPTCL(RECNO(NIND),WIBUFF(12,OIND))
C update the new record
CALL WDRCUP(NWDMFL,NIND)
C write(99,*) ' nwdmfl,nind:',NWDMFL,NIND
C set dataset creation date attribute
CALL WDCRDT (NWDMFL,NDSN)
END IF
C
RETURN
END
C
C
C
SUBROUTINE WDLBAD
I (WDMSFL,DSN,DSTYPE,
O PSA)
C
C + + + PURPOSE + + +
C ** not normally called by applications, use WDBCRL **
C add a new data set label, but no search attributes or data,
C use default label sizing
C
C + + + DUMMY ARGUMENTS + + +
INTEGER WDMSFL,DSN,DSTYPE,PSA
C
C + + + ARGUMENT DEFINITIONS + + +
C WDMSFL - watershed data management file unit number
C DSN - data-set number
C DSTYPE - type of data set
C PSA - pointer to search attribute space
C
C + + + LOCAL VARIABLES + + +
INTEGER NDN,NUP,NSA,NSASP,NDP
C
C + + + EXTERNALS + + +
EXTERNAL WDLBAX
C
C + + + END SPECIFICATIONS + + +
C
NDN = 1
NUP = 1
NSA = 35
NSASP= 70
NDP = 100
C
CALL WDLBAX (WDMSFL,DSN,DSTYPE,NDN,NUP,NSA,NSASP,NDP,
O PSA)
C
RETURN
END