-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdmpsrc.f
95 lines (95 loc) · 2.66 KB
/
dmpsrc.f
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
SUBROUTINE DM_PSRC (iflno, nkeys, keynam, iloval, ihival, iret)
C************************************************************************
C* DM_PSRC *
C* *
C* This subroutine defines criteria for the primary search. If *
C* the result of this primary search is false for any location, no *
C* conditional search will be made. *
C* *
C* DM_PSRC ( IFLNO, NKEYS, KEYNAM, ILOVAL, IHIVAL, IRET ) *
C* *
C* Input parameters: *
C* IFLNO INTEGER File number *
C* NKEYS INTEGER Number of keys used in search *
C* KEYNAM (NKEYS) CHAR*4 Key names *
C* ILOVAL (NKEYS) INTEGER Low values *
C* IHIVAL (NKEYS) INTEGER High values *
C* *
C* Output parameters: *
C* IRET INTEGER Return code *
C* 0 = normal return *
C* -4 = file not open *
C* -14 = invalid key name *
C** *
C* Log: *
C* M. desJardins/GSFC 4/87 *
C* m. gamazaychikov/CWS 04/11 Add code for A2DB connectivity *
C************************************************************************
INCLUDE 'GEMPRM.PRM'
INCLUDE 'dmcmn.cmn'
INCLUDE 'dbcmn.cmn'
C
CHARACTER*(*) keynam (*)
INTEGER iloval (*), ihival (*)
CHARACTER type*4
C------------------------------------------------------------------------
C* For A2DB requests - set the iret to 0 and return.
C
IF ( dbread ) THEN
iret = 0
RETURN
END IF
C
C* Check that file is open.
C
CALL DM_CHKF ( iflno, iret )
IF ( iret .ne. 0 ) RETURN
C
C* Check that at least one key is to be used in search.
C
IF ( ( nkeys .lt. 1 ) .or. ( nkeys .gt. MMKEY ) ) THEN
iret = -14
RETURN
END IF
C
C* Reset search pointers.
C
srcflg (iflno) = .false.
ksrow (iflno) = 0
kscol (iflno) = 0
C
C* Set number of row, column searches.
C
ksnrow ( 0, iflno ) = 0
ksncol ( 0, iflno ) = 0
C
C* For each key name, determine type and save in common.
C
DO i = 1, nkeys
CALL DM_FKEY ( iflno, keynam (i), type, loc, ier )
IF ( ier .ne. 0 ) THEN
iret = ier
ELSE IF ( type .eq. 'ROW' ) THEN
ksnrow ( 0, iflno ) = ksnrow ( 0, iflno ) + 1
kslrow ( ksnrow (0,iflno), 0, iflno ) = loc
ksrlov ( ksnrow (0,iflno), 0, iflno ) = iloval (i)
ksrhiv ( ksnrow (0,iflno), 0, iflno ) = ihival (i)
ELSE IF ( type .eq. 'COL' ) THEN
ksncol ( 0, iflno ) = ksncol ( 0, iflno ) + 1
kslcol ( ksncol (0,iflno), 0, iflno ) = loc
ksclov ( ksncol (0,iflno), 0, iflno ) = iloval (i)
kschiv ( ksncol (0,iflno), 0, iflno ) = ihival (i)
END IF
END DO
C
C* If all keys were found, set search flag.
C
IF ( iret .eq. 0 ) THEN
srcflg (iflno) = .true.
ELSE
ksnrow ( 0, iflno ) = 0
ksncol ( 0, iflno ) = 0
END IF
C*
RETURN
END