aboutsummaryrefslogtreecommitdiff
path: root/vo/votools/resdb.x
blob: 3437b12283ec2b38a9bcb4ec49099a2263a49235 (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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#
#  RESDB -- Utility routines to manage the local resource database


bool procedure rdb_lookup (resdb, term, type, sname, ivorn, svcurl)

char	resdb[ARB]				#i resource database
char	term[ARB]				#i search term
char	type[ARB]				#i service type
char	sname[ARB]				#i short name
char	ivorn[ARB]				#i ivorn string
char	svcurl[ARB]				#i URL string

char	typ[SZ_FNAME], alias[SZ_FNAME], bpass[SZ_FNAME], line[SZ_LINE]
char	ivo[SZ_FNAME], shortname[SZ_FNAME], url[SZ_FNAME]
int	fd, ip, i, lnum

int	access(), open(), getline()
bool	streq()

begin
	if (access (resdb, 0, 0) == NO) {
	    call eprintf ("Error: cannot open resdb '%s'\n")
		call pargstr (resdb)
	    return
	}

	call strlwr (term)

	# Open the resource database
	fd = open (resdb, READ_ONLY, TEXT_FILE)
	for (lnum=0; getline (fd, line) != EOF; lnum=lnum+1) {

	    if (line[1] == '#' || line[1] == EOS || line[1] == '\n')
		next

	    call aclrc (type,      SZ_FNAME)
	    call aclrc (alias,     SZ_FNAME)
	    call aclrc (bpass,     SZ_FNAME)
	    call aclrc (ivo,       SZ_FNAME)
	    call aclrc (url,       SZ_FNAME)
	    call aclrc (shortname, SZ_FNAME)

	    ip = 1
	    for (i=1; line[ip] != ','; i=i+1) { 	# type string
		typ[i] = line[ip]
		ip = ip + 1
	    }
	    call strlwr (typ)
	    ip = ip + 1

	    for (i=1; line[ip] != ','; i=i+1) { 	# alias string
		alias[i] = line[ip]
		ip = ip + 1
	    }
	    call strlwr (alias)
	    ip = ip + 1

	    for (i=1; line[ip] != ','; i=i+1) { 	# bandpass string
		bpass[i] = line[ip]
		ip = ip + 1
	    }
	    call strlwr (typ)
	    ip = ip + 1

	    for (i=1; line[ip] != ','; i=i+1) { 	# ivorn string
		ivo[i] = line[ip]
		ip = ip + 1
	    }
	    call strlwr (typ)
	    ip = ip + 1

	    for (i=1; line[ip] != ','; i=i+1) { 	# ShortName string
		shortname[i] = line[ip]
		ip = ip + 1
	    }
	    call strlwr (typ)
	    ip = ip + 1

	    for (i=1; line[ip] != ','; i=i+1) { 	# URL string
		url[i] = line[ip]
		ip = ip + 1
	    }
	    call strlwr (typ)
	    ip = ip + 1


	    if (type[1] == EOS || typ[1] == type[1]) {
		if (streq (alias, term)) {
		    call strcpy (shortname, sname, SZ_FNAME)		
		    call strcpy (ivo, ivorn, SZ_FNAME)		
		    call strcpy (url, svcurl, SZ_FNAME)		
		    return (true)
		}
	    }
	}
	call close (fd)

	return (false)
end