C This program demonstrates how to use Callable IDL from a FORTRAN program.
C Data for five functions are generated; the data are imported into
IDL,
C and a companion IDL program (align.pro) is invoked to plot the
data.
C The companion program brings up a widget application. Included
are a
C button to exit the application and a draw widget where the imported
data
C are plotted.
C All of the arguments and keywords which are passed to the companion
C progrsam (and, subsequently, to the IDL PLOT procedure), are
defined in
C this FORTRAN program.
C The use of companion IDL programs for Callable IDL applications
is very
C desirable. If designed carefully, they can simplify both "sides"
of
C the Callable IDL environment.
C In addition to the companion IDL program, a set of "wrapper" functions,
C written in C, are used to "step" from FORTRAN into the actual
IDL
C internal functions that are called. These "wrapper" functions
are located
C in the file callable_wraps.c .
C Written by Doug Loucks
C Research Systems, Inc., Oct, 1998
C Function data generation and plot annotation are taken from a
program by
C Bill Gadzuk and Barbara am Ende, NIST, October, 1998
C Define a few IDL parameters based upon those found in export.h
PARAMETER (IDL_FALSE = 0)
PARAMETER (IDL_TRUE = 1)
PARAMETER (IDL_TYP_FLOAT = 4)
C This eases changes to the size of the function arrays.
PARAMETER (NUMPOINTS = 80)
C Declare the arrays for the function data.
DIMENSION XP(NUMPOINTS),
*
Y1(NUMPOINTS),
*
Y2(NUMPOINTS),
*
Y3(NUMPOINTS),
*
Y4(NUMPOINTS),
*
Y5(NUMPOINTS)
INTEGER*4 options, just_cleanup,
status
INTEGER*4 ndim, dim(1), type
INTEGER*4 callback /0/
INTEGER*4 zero /0/
CHARACTER*1 null
C Initialize local variables.
null = char(0)
C Initialize Callable IDL.
options = 0
status = IDL_Init( options )
C Check for problems. Exit if Callable IDL can't be initialized.
if (status .eq. IDL_FALSE) then
print *, 'Failure to
Initialize Callable IDL. Status: ', status
call exit
endif
C Generate the function data to be plotted (From Barbara am Ende).
EX = 0.0
DEX = 0.1
DO 15 J=1, NUMPOINTS
X1 = EX
X2 = EX / 2.0
X3 = EX / 3.0
X4 = EX / 4.0
X5 = EX / 5.0
Y1(J) = X1 * (2.+X1)
/ (1.+X1)**2
Y2(J) = X2 * (2.+X2)
/ (1.+X2)**2
Y3(J) = X3 * (2.+X3)
/ (1.+X3)**2
Y4(J) = X4 * (2.+X4)
/ (1.+X4)**2
Y5(J) = X5 * (2.+X5)
/ (1.+X5)**2
XP(J) = EX
EX = EX + DEX
15 CONTINUE
C Prepare to import these data into the IDL environment. First,
define
C the arguments to the IDL function that imports data.
ndim = 1
dim(1) = NUMPOINTS
type = IDL_TYP_FLOAT
callback = 0
zero = 0
C Import each of the function arrays. For your code, use one function
call for each C
array you need to import.
call IDL_ImportNamedArray( 'xp'
// null, ndim, dim,
* type, xp, callback,
zero )
call IDL_ImportNamedArray( 'y1' //
null, ndim, dim,
* type, y1, callback,
zero )
call IDL_ImportNamedArray( 'y2' //
null, ndim, dim,
* type, y2, callback,
zero )
call IDL_ImportNamedArray( 'y3' //
null, ndim, dim,
* type, y3, callback,
zero )
call IDL_ImportNamedArray( 'y4' //
null, ndim, dim,
* type, y4, callback,
zero )
call IDL_ImportNamedArray( 'y5' //
null, ndim, dim,
* type, y5, callback,
zero )
C Execute the IDL command that runs the companion IDL program. The
C companion program is passed the data which have been imported
into IDL.
C Here you are calling the name of the procedure contained within
align.pro and
C passing arguments that contain the array names and the keywords
needed for the
C plot command.
call IDL_ExecuteStr(
* 'align, xp, y1,y2,y3,y4,y5,
* xtitle = ''INCIDENT ENERGY (EV)'',
* xstyle = 1, xticks=4, xminor=10,
xrange = [0,8], xsize=500,
* ytitle = ''T TO V EFFICIENCY'',
* ystyle = 1, yrange = [0,1], ysize=500,
* yticks = 1, yminor = 10,
* charsize = 1, psym=0,
* title=''ALIGN -- Callable IDL
Example''' // null )
C Do the IDL cleanup stuff. With just_cleanup set to one, the IDL_Cleanup
C function returns to this program.
just_cleanup = 1
status = IDL_Cleanup( just_cleanup
)
print *, 'FORTRAN program TESTPLOT -- Done -- status:', status
CALL EXIT
END