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.