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
|