It is easiest to assemble all the code to implement a new panel into a single library. Along with the above routines, do not forget to write the trial_handler() as detailed in Section 3.1. This routine should call the routine trial_open() and be placed in the file trial_hnd.c.
The computational code which is executed when buttons are pressed should be placed in a file called trial_go.c. Note that this file should be completely independent of the windowing system. It should use the data structure written by trial_read_window(). For our example, the code in trial_go.c is simply the following:
#include <stdio.h> #include <pm_main.h> extern int trial_choice; extern double *trial_varb_value; /* * trial_button1_go() * * puts chosen value into postmaster */ int trial_button1_go() { pm(PUT, Traj_Ds_Object, Varb_Ic, trial_choice, trial_varb_value[trial_choice], NULL); }
There is a general Makefile already written for use with dstool which should be used to make the new library. To copy it, type
cd $DSTOOL_USER/trial cp $DSTOOL_USER/userlib/Makefile.generic Makefile
Now edit the Makefile to include your new code. For our example, the following lines should read:
LIBRARY = triallib.a SOURCES_A = \ trial_cui.c \ trial_hnd.c \ trial.c \ trial_go.c DEPS_A = trial_cui.h
You will also need to add this new library into the list of libraries contained in the Makefile in the directory $DSTOOL_USER. Do this by adding triallib.a to the list of USER_LIBS.
USER_LIBS = \ models/modellib.a \ userlib/userlib.a \ trial/triallib.a
Now when the user's local version of dstool is recompiled, the new window code will be incorporated into dstool. Recall that the compilation is initiated from the $DSTOOL_USER directory with the command make dstool_u.