There are two ways the user of the personal database facility can approach the information about available hooks in the system: Via static or dynamic hook reports.
Figure 2: An example of a static hook report.
The static hook report relevant for our sample application is shown in figure 2. Each entry (each line in the presentation of the report) shows information about a single hook. The left column of the report shows all the hooks in the database group. The middle column shows the procedures attached to the hooks. As can be seen, the hooks add-database-entry and get-email-hook have already been attached. (The latter is attached to more than one function). The right column shows the hook combinators in effect.
Via static hook reports (as well as the dynamic hook reports), it is possible to browse into the detailed documentation of the individual hooks. The documentation presented in this way is defined by the hook-documentation clauses (see section 5.4). Using the static hook report in our customization example, it is possible to get knowledge about all the hooks in the database group, but it is up to the user to find out which of the hooks are relevant for the customizations we have in mind.
Figure 3: An example of a dynamic hook report.
The alternative way to get information about hooks is through a dynamic hook report. A dynamic hook report displays information about hooks when they are encountered during the execution of a program. If we assume that dynamic hook reporting is active for the database group, then the requests of inserting the address of someone results in entry number 1 and number 2 in the report shown in figure 3. Asking for a phone number results in entry numbers 3 and 4. Thus, a dynamic hook report makes it easy to relate specific interactions to all potential open points encountered during these interactions.
Static hook reports are initiated from a more general report, which we call a hook classification report. An example of such a report is shown in figure 4. The report shows all the known groups of hooks (cf. section 5.5) together with a so-called filter-condition. If a programmer is interested in obtaining detailed, dynamic information about hooks in a specific group, he or she should turn on the filter condition for that group. In figure 4 the hooks belonging to the groups database and emacs will be reported dynamically. A hook classification report is created on explicit request from the user.
Figure 4: An example of a hook classification report.
Besides the browser functionality of hook reports, the reports also offer a flexible interface for experimental attaching of hooks. Instead of using the programmatic hook interface, as defined in sections 5.2 and 5.3, a terse command interface, based on direct manipulation of the entries in the reports is provided on top of the hook reports.
Let us continue our concrete example from the state of the dynamic hook report in figure 3. After reading the hook documentation, the user finds out that the hook get-address-hook is relevant for the first of the customizations. By just typing the single letter ``a'' (for attach) on the entry for this hook, the user will be prompted for a name of the function to be attached to the hook. If the function doesn't exist, the tool will offer to define a template of it, with the correct parameter profile. Now it is straightforward to try out the effect of the attachment, simply by interacting with the database again. It is also easy via the command interface to get rid of an attachment.