This interpolation software relies on the gensub record (written by Andy Foster), a copy of which is included in synApps, built in the std/stdApp/src directory. The following fields of the gensub record have the following functions in this software: A independent variable array. The values needn't be equally spaced. N0A allocated length of A array B y1(A) array N0B allocated length of B array C y2(A) array N0C allocated length of C array D new value of independent variable for which y1(D) and y2(D) are desired E number of values actually used in A, B, C arrays F kind of interpolation to be done: 0,1 : linear interpolation > 1 : polynomial of order F VALB Interpolated value y1(D) VALC Interpolated value y2(D) VALF low limit for D VALG high limit for D Here's how you use it: Load A, B, C arrays such that B[i] = y1(A[i]) and C[i] = y2(A[i]), where y1 and y2 are the functions you want to interpolate. You can do this by editing the file interp.load, and using BURT to load it, or by editing the file interp.sav and using autosave/restore to load it. The supplied interp.adl file expects interp.load to be located in ../burt, relative to the directory in which medm was started. You could also do it by hand. However you load the arrays, make sure you do all of the following: 1) load the number of points in the A, B, C arrays into E 2) load arrays into A, B, and C 3) cause the record to process, so that limits will be calculated and written to $(P)interp_x.DRVL, $(P)interp_x.DRVL. The supplied database adds a sort of user interface to the software described above. The user writes to $(P)interp_x, and the database sends this (limit-checked) value to the gensub record, which interpolates and writes to $(P)interp_y1 and $(P)interp_y2. If the user has specified output-link fields $(P)interp_y1.OUT or $(P)interp_y2.OUT, then the values will be written to the PV's named in those links. Tim Mooney 7/28/2004