The final C code itself is obviously completely different for each extension.
In the example composition package we loop through each contig listed in our
-contigs
command line argument running a separate function that returns
a Tcl list containing the total number of characters processed and the number
of A, C, G, T and unknown nucleotides. Each list in turn is then added as an
item to another list which is used for the final result.
/* Do the actual work */ Tcl_DStringInit(&dstr); for (i = 0; i < num_contigs; i++) { result = doit(args.io, contigs[i].contig, contigs[i].start, contigs[i].end); if (NULL == result) { xfree(contigs); return TCL_ERROR; } Tcl_DStringAppendElement(&dstr, result); } Tcl_DStringResult(interp, &dstr); xfree(contigs); return TCL_OK; }
The above is the end of the tcl_composition
function. doit
is
our main algorithm written in C (which has no knowledge of Tcl). We use the
Tcl dynamic strings routines to build up the final return value. The complete
C code for this package can be found in the appendices.
If a command has persistent data about a contig (such as a plot containing the composition) the registration scheme should be used to keep this data up to date whenever database edits are made. See section Contig Registration Scheme.