SMART is designed to be reasonably easy to modify. The notions of run-time selection of procedures and of the procedure hierarchy enable the addition of experimental procedures without adversely affecting any other uses of SMART. All other SMART users will presumably not be specifying the new experimental procedure in their specification runs and thus will not be affected. This idea of isolation of experimental procedures while still being able to keep them around and available as part of SMART is an important one in an active research project.
Most modifications of SMART will be simple alterations of existing procedures. The general paradigm is not to alter the existing procedure in place (except for bug fixes), but instead
1. Copy oldproc.c to newproc.c
2. Edit newproc.c to
a. Replace all oldprocedure names with your new name
b. Make the necessary alterations.
3. Edit "makefile" and add newproc.o to the list of object files.
4. Edit src/libproc/proc_<library>.c to add your new
procedure names to the procedure hierarchy. Here,
<library> is whatever library directory newproc.c was
in (or a close approximation to that directory name).
5. "Make" the new version.
Now, all of the old scripts or programs involving SMART will continue to work, since they'll use the old procedure, but you will be able to specify the new procedure in your run specification files.
There may be times when you want to write a new procedure from scratch (actually, extremely rarely). In that case, .../Sample/skel.c has a very complicated skeleton procedure, that does as much SMART procedure setup as possible. You may want to see .../Doc/overview/app.proc for explanations of much of what the skeleton does.