1
! ++++++++++++++++++++++++++++++++++++++++++++++++++++++
3
! MIDAS procedure kcompare.prg
4
! K. Banse 920910, 980526, 090717, 100319, 110427
6
! use as @@ kcompare labref:keyref keynew indexa,indexb eps
7
! or keyref keynew indexa,indexb eps
8
! with labref: = optional reference label displayed for failed checks
9
! keyref = name of reference keyword
10
! keynew = name of new keyword
11
! indexa,indexb = start + end index for comparison
12
! and following params only for real/double keywords
13
! eps = epsilon for difference from indexa-b
14
! indexc,indexd = start + end index for comparison
15
! eps = epsilon for difference from indexc-d
16
! indexe,indexf = start + end index for comparison
17
! eps = epsilon for difference from indexe-f
19
! we use he global integer keyword errsum to pass error info
20
! back to the calling procedure, i.e. keyw. errsum must exist!
22
! ++++++++++++++++++++++++++++++++++++++++++++++++++++++
24
define/par p1 ? ? "Enter labref:refkey "
25
define/par p2 ? ? "Enter newkey: "
26
define/par p3 1,1 n "Enter indexa,indexb: "
27
define/par p4 0. n "Enter epsilon for difference check: "
29
define/local myp5/c/1/20 {p5} !optional 2nd interval
30
define/local myp7/c/1/20 {p7} !optional 3rd interval
31
define/local mypara/c/1/20 {p3}
32
define/local myparb/c/1/20 {p4}
33
define/local loopi/i/1/3 0 all +lower
34
define/local failindx/i/1/1 0 ? +lower !index of 1st difference
35
define/local labref/c/1/20 "? " ? +lower
37
define/local ktype/i/1/1 0
38
define/local idif/i/1/1 0
39
define/local rdif/d/1/1 0.
40
define/local reps/r/1/1 0.
41
define/local ddif/d/1/1 0.
42
define/local deps/d/1/1 0.
43
define/local idx/i/1/1 0
48
labref(1:) = "["//p1(1:{idx})//"] "
54
ktype = mid$info(1) !save keytype
55
if ktype .eq. 0 .or. ktype .eq. 3 then
56
write/out invalid keyword {p1}, or invalid type ...
62
write/keyw loopi/i/1/3 0,{mypara}
66
do loopi = {loopi(2)} {loopi(3)}
67
idif = m$abs({p1}({loopi}) - {p2}({loopi}))
69
if failindx .eq. 0 failindx = loopi
74
else if ktype .eq. 2 then
77
do loopi = {loopi(2)} {loopi(3)}
78
rdif = m$abs({p1}({loopi}) - {p2}({loopi}))
79
if rdif .gt. reps then
80
if failindx .eq. 0 failindx = loopi
87
do loopi = {loopi(2)} {loopi(3)}
88
ddif = m$abs({p1}({loopi}) - {p2}({loopi}))
89
if ddif .gt. deps then
90
if failindx .eq. 0 failindx = loopi
95
if failindx .ne. 0 then
96
@@ kcompare,out {p1} {p2}
99
if myp5(1:1) .ne. "?" then
100
write/keyw mypara/c/1/20 {p5}
101
write/keyw myparb/c/1/20 {p6}
106
if myp7(1:1) .ne. "?" then
107
write/keyw mypara/c/1/20 {p7}
108
write/keyw myparb/c/1/20 {p8}
117
if labref(1:1) .eq. "?" then
118
write/out " reference: new: "
120
write/out " reference: new: label: " {labref}
122
do loopi = {loopi(2)} {loopi(3)}
123
if loopi .eq. failindx then
124
write/out ({loopi}) {{p1}({loopi})} " *** " {{p2}({loopi})}
126
write/out ({loopi}) {{p1}({loopi})} " " {{p2}({loopi})}