aboutsummaryrefslogtreecommitdiff
path: root/noao/digiphot/lib/pttables/ptkstat.x
blob: 077afaf64f7a98f22542249c2d7c79969a1e0ad5 (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
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
include "../ptkeysdef.h"

# PT_KSTATI -- Get an integer parameter from the keyword structure.

int procedure pt_kstati (key, column, parameter)

pointer	key		# pointer to the database strucuture
char	column[ARB]	# column name
int	parameter	# parameter to be returned

char	left_bracket
int	index, element, value
pointer	sp, kname
int	strdic(), stridx(), ctoi()
data	left_bracket /'['/

begin
	call smark (sp)
	call salloc (kname, KY_SZPAR, TY_CHAR)

	# Get the proper name in upper case and strip off the subscript.
	call strcpy (column, Memc[kname], KY_SZPAR)
	call strupr (Memc[kname])
	index = stridx (left_bracket, Memc[kname])
	if (index > 0) {
	    Memc[kname+index-1] = EOS
	    index = index + 1
	    if (ctoi (column, index, element) < 0)
		element = 1
	} else
	    element = 1

	# Find the field.
	index = strdic (Memc[kname], Memc[kname], KY_SZPAR, Memc[KY_WORDS(key)])

	# Fetch the parameter.
	switch (parameter) {
	case KY_INDEX:
	    value = index
	case KY_DATATYPE:
	    if (index > 0)
	        value = Memi[KY_TYPES(key)+index-1]
	    else
		value = INDEFI
	case KY_LENGTH:
	    if (index > 0)
	        value = Memi[KY_KINDICES(key)+index-1]
	    else
		value = INDEFI
	case KY_ELEMENT:
	    if (index <= 0)
		value = INDEFI
	    else if (element >= 1 && element <= Memi[KY_NELEMS(key)+index-1])
		value = element
	    else
		value = INDEFI
	case KY_NUMELEMS:
	    value = Memi[KY_NELEMS(key)+index-1]
	default:
	    value = INDEFI
	}

	call sfree (sp)

	return (value)
end


# PT_KSTATS -- Get a string parameter from the keyword structure.

procedure pt_kstats (key, column, parameter, str, maxch)

pointer	key		# pointer to the database strucuture
char	column[ARB]	# column name
int	parameter	# parameter to be returned
char	str[ARB]	# output string
int	maxch		# maximum number of characters

char	left_bracket
int	index, element, ip, len
pointer	sp, kname
int	strdic(), stridx(), ctoi()
data	left_bracket /'['/

begin
	call smark (sp)
	call salloc (kname, KY_SZPAR, TY_CHAR)

	# Get the proper name in upper case and strip off the subscript.
	call strcpy (column, Memc[kname], KY_SZPAR)
	call strupr (Memc[kname])
	index = stridx (left_bracket, Memc[kname])
	if (index > 0) {
	    Memc[kname+index-1] = EOS
	    index = index + 1
	    if (ctoi (column, index, element) < 0)
		element = 1
	} else
	    element = 1

	# Find the field.
	index = strdic (Memc[kname], Memc[kname], KY_SZPAR, Memc[KY_WORDS(key)])

	# Fetch the parameter.
	switch (parameter) {
	case KY_UNITSTR:
	    if (index <= 0) {
		str[1] = EOS
	    } else if (index == 1) {
		ip = 1
		len = Memi[KY_UINDICES(key)]
	        call strcpy (Memc[KY_UNITS(key)+ip-1], str, len)
	    } else {
		ip =  Memi[KY_UINDICES(key)+index-2] + 1
		len = Memi[KY_UINDICES(key)+index-1] -
		    Memi[KY_UINDICES(key)+index-2]
	        call strcpy (Memc[KY_UNITS(key)+ip-1], str, len)
	    }
	case KY_FMTSTR:
	    if (index <= 0) {
		str[1] = EOS
	    } else if (index == 1) {
		ip = 1
		len = Memi[KY_FINDICES(key)]
	        call strcpy (Memc[KY_FORMATS(key)+ip-1], str, len)
	    } else {
		ip =  Memi[KY_FINDICES(key)+index-2] + 1
		len = Memi[KY_FINDICES(key)+index-1] -
		    Memi[KY_FINDICES(key)+index-2]
	        call strcpy (Memc[KY_FORMATS(key)+ip-1], str, len)
	    }
	default:
	    str[1] = EOS
	}

	call sfree (sp)
end