Creating user functions in GENPLOT using "gpextend.lib"
Each user function contains several files. For this reason I suggest creating a directory for each function under the following path:
A collection of template files (which can be copied into a new directory and then edited to create a new function) is located in:
After copying all the files from this directory into a new directory you will need to rename them using your chosen name for your new function (denoted as <name> from now on). This can be done with the following:
ren template.c <name>.c
ren template.def <name>.def
The following files are needed to generate a function using gpextend.lib:
When using the template files you will need to edit "makefile" & "<name>.def" and replace all occurences of the word "template" with whatever your function name is (after this you should not need to edit either of these files again). The next step is to edit the <name>.c file....
Editing the <name>.c file:
The <name>.c file is where the code for the function you wish to implement goes. It is fairly well commented so and should be fairly easy to follow (the default template file gives the code necessary for a line fitting funcion). You should change the following:
In the UserInit() function:
Line 12: SetNumParams(2);
Change the "2" to the number of parameters used in the "P"
Line 13: SetNumConstants(0);
Change the "0" to the number of constants used in the "C"
In the FitFunc() function:
Line 24: float y;
Declare your variables at this point in the function.
Line 33: y=p*x + p;
This is where the code for your function should go.
Line 35: *result=y;
Set *result to whatever number you wish for your function to
Editing the <name>.def file:
You should only need to change the first line of the <name>.def file. The first line in template.def is:
This should be changed to:
Compiling your function:
After following the previous steps you should be able to compile your code by typing "nmake" at the command line prompt (also you must be in the directory with the "makefile" and your program files). After typing "nmake" your function will be automatically placed in a directory where GENPLOT can get to it (assuming that there were no errors during compilation). You can test to see if you function will load by typing "user -load <name>" at the GENPLOT prompt... however this is the only case where you should use the "user -load" command with a gpextend function.
What about "template.mac"?
In order for the gpextend library to function properly... user functions created with it must be run from a macro file (you can have many different macro files for each function but they must follow the same form as template.mac). This file is not used in the compilation process so it can be placed where ever it is convinient (perhaps with the data that the parameters are associated with). The first thing you should do is rename the file using:
ren template.mac <mymac>.mac
Here <mymac> refers to whatever you wish to call the macro.
To use the macro you need to edit it:
Line 4: user -load template
Change "template" to <name> (from above).
Line 10: declare MacroName c:\progra~1\cgs\surf\template\template.mac
Change the "c:\progra~....\template.mac" to the full path name
of your new macro (ie <path>\<mymac>.mac).
Line 13: alloc P array 20
You generally will not need to change this unless you have
more than 20 parameters in the P array (same goes for the C
Line 19: let P(0)=0.500000
This is where the parameters are stored. I recomend not
changing this by hand. I suggest executing the macro (with
the "x" command), and then use let P(???)=### to change the
param values (to get them to update inside the macro file
simply exit genplot or load another function).