unroff-website/www/doc/m-6.html

121 lines
3.8 KiB
HTML

<html>
<head>
<!-- This file has been generated by unroff 1.0, 03/21/96 19:29:43. -->
<!-- Do not edit! -->
<link rev="made" href="mailto:net@informatik.uni-bremen.de">
<title>unroff Programmer's Manual, section 6.</title>
</head><body>
<h2><a name="section6">6.</a>&#160;<tt> </tt>Event Procedures with Side-Effects
</h2>
<p>
&#160;<tt> </tt>&#160;<tt> </tt>&#160;<tt> </tt>Besides the basic events described in the
<a href="m-3.html#.events">preceding sections</a>,
another group of--slightly different--events exist and can
be handled by user-defined Scheme procedures.<tt> </tt>
These events are not related to troff functions, but to a number of
other conditions that are encountered when processing documents:
<ul>
<li>
the end of an input line
<li>
the beginning of a troff input file processed by
<i>unroff
</i><li>
the end of a troff input file
<li>
startup of the program
<li>
termination of the program
<li>
a keyword/value option encountered in the command line.<tt> </tt>
</ul>
<p>
&#160;<tt> </tt>&#160;<tt> </tt>&#160;<tt> </tt>Among other tasks, these events can be used to generate a prologue and
epilogue for each input file.<tt> </tt>
In contrast to the events described in the previous section, handlers for
these events are called solely for their side-effects.<tt> </tt>
Each event handler must be a Scheme procedure.<tt> </tt>
Their results are ignored, thus the procedures must have side-effects
to be useful.<tt> </tt>
Another difference is that more than one event handler can be associated
with each request.<tt> </tt>
A numeric
<i>level
</i>(a small integer number) is specified together with each event handler,
and when the corresponding event is triggered, all procedures
defined for this event are executed in increasing order as indicated by
their levels.<tt> </tt>
<h2>
(defevent <i>event</i> <i>level</i> <i>handler</i>)
</h2>
<p>
&#160;<tt> </tt>&#160;<tt> </tt>&#160;<tt> </tt>Associates the procedure
<i>handler
</i>with an event and returns the previous event handler registered
for this combination of event and level.<tt> </tt>
<i>level
</i>is an integer between 0 and 99;
<i>handler
</i>is a procedure, or the literal #f to remove a previously defined handler.<tt> </tt>
<i>event
</i>indicates the type of event and is one of the following Scheme symbols:
<i>line
</i>(end of input line),
<i>prolog
</i>(beginning of input file),
<i>epilog
</i>(end of input file),
<i>start
</i>(program start),
<i>exit
</i>(program termination),
<i>option
</i>(keyword/value command line option).<tt> </tt>
<p>
Procedures defined for the events
<i>prolog
</i>and
<i>epilog
</i>are called with two string arguments:
the path name (as specified by the user) and the file name component of
the troff input file whose processing has just begun or finished,
or the string ``stdin'' if
<i>unroff
</i>is taking its input from standard input.<tt> </tt>
Procedures defined for the event
<i>option
</i>are passed the option's name and value as strings.<tt> </tt>
All other event procedures are invoked without arguments.<tt> </tt>
<i>unroff
</i>provides a default handler for
<i>option
</i>(see the
<a href="m-15.html#.options">primitives for options</a>
below).<tt> </tt>
<p>
Example:
<dl><dt><dd>
<pre>
(defevent 'exit 50 ; cleanup on exit
(lambda ()
...))
</pre>
</dl>
The handler defined in this way will be executed on termination,
after any handlers with levels 0-49.<tt> </tt>
<h2>
(eventdef <i>event</i> <i>level</i>)
</h2>
<p>
&#160;<tt> </tt>&#160;<tt> </tt>&#160;<tt> </tt>Returns the procedure defined as a handler for
<i>event
</i>and
<i>level</i>,
or #f if no such handler exists.<tt> </tt>
See
<i>defevent
</i>above for a description of the arguments.<tt> </tt>
<p><hr>
Markup created by <em>unroff</em> 1.0,&#160;<tt> </tt>&#160;<tt> </tt>March 21, 1996,&#160;<tt> </tt>&#160;<tt> </tt>net@informatik.uni-bremen.de</body>
</html>