~ubuntu-branches/ubuntu/saucy/libbonobo/saucy-proposed

« back to all changes in this revision

Viewing changes to doc/api/html/libbonobo-bonobo-event-source.html

  • Committer: Bazaar Package Importer
  • Author(s): Sebastien Bacher
  • Date: 2010-03-30 13:59:10 UTC
  • mfrom: (1.1.27 upstream)
  • Revision ID: james.westby@ubuntu.com-20100330135910-bq8awt4jhdd71oq1
Tags: 2.24.3-0ubuntu1
* New upstream version:
  - Set up dbus environment in test-activation/test.sh 
  - Fix memory corruption 
  - Updated translations 

Show diffs side-by-side

added added

removed removed

Lines of Context:
8
8
<link rel="up" href="property-bags.html" title="Property Bags, Events, Listeners">
9
9
<link rel="prev" href="properties.html" title="Properties">
10
10
<link rel="next" href="libbonobo-bonobo-listener.html" title="bonobo-listener">
11
 
<meta name="generator" content="GTK-Doc V1.11 (XML mode)">
 
11
<meta name="generator" content="GTK-Doc V1.14 (XML mode)">
12
12
<link rel="stylesheet" href="style.css" type="text/css">
13
13
<link rel="chapter" href="general.html" title="General">
14
14
<link rel="chapter" href="factories.html" title="Objects, Factories, Reference Counting">
30
30
</tr>
31
31
<tr><td colspan="5" class="shortcuts">
32
32
<a href="#libbonobo-bonobo-event-source.synopsis" class="shortcut">Top</a>
33
 
                 | 
34
 
                <a href="#libbonobo-bonobo-event-source.description" class="shortcut">Description</a>
 
33
                   | 
 
34
                  <a href="#libbonobo-bonobo-event-source.description" class="shortcut">Description</a>
35
35
</td></tr>
36
36
</table>
37
37
<div class="refentry" title="bonobo-event-source">
45
45
</tr></table></div>
46
46
<div class="refsynopsisdiv" title="Synopsis">
47
47
<a name="libbonobo-bonobo-event-source.synopsis"></a><h2>Synopsis</h2>
48
 
<pre class="synopsis">
49
 
BonoboEventSource * <a class="link" href="libbonobo-bonobo-event-source.html#bonobo-event-source-new" title="bonobo_event_source_new ()">bonobo_event_source_new</a>             (void);
50
 
void                <a class="link" href="libbonobo-bonobo-event-source.html#bonobo-event-source-notify-listeners" title="bonobo_event_source_notify_listeners ()">bonobo_event_source_notify_listeners</a>
51
 
                                                        (BonoboEventSource *event_source,
52
 
                                                         const char *event_name,
53
 
                                                         const CORBA_any *opt_value,
54
 
                                                         CORBA_Environment *opt_ev);
55
 
void                <a class="link" href="libbonobo-bonobo-event-source.html#bonobo-event-source-notify-listeners-full" title="bonobo_event_source_notify_listeners_full ()">bonobo_event_source_notify_listeners_full</a>
56
 
                                                        (BonoboEventSource *event_source,
57
 
                                                         const char *path,
58
 
                                                         const char *type,
59
 
                                                         const char *subtype,
60
 
                                                         const CORBA_any *opt_value,
61
 
                                                         CORBA_Environment *opt_ev);
62
 
void                <a class="link" href="libbonobo-bonobo-event-source.html#bonobo-event-source-client-remove-listener" title="bonobo_event_source_client_remove_listener ()">bonobo_event_source_client_remove_listener</a>
63
 
                                                        (Bonobo_Unknown object,
64
 
                                                         Bonobo_Listener listener,
65
 
                                                         CORBA_Environment *opt_ev);
66
 
void                <a class="link" href="libbonobo-bonobo-event-source.html#bonobo-event-source-client-add-listener" title="bonobo_event_source_client_add_listener ()">bonobo_event_source_client_add_listener</a>
67
 
                                                        (Bonobo_Unknown object,
68
 
                                                         <a class="link" href="libbonobo-bonobo-listener.html#BonoboListenerCallbackFn" title="BonoboListenerCallbackFn ()">BonoboListenerCallbackFn</a> event_callback,
69
 
                                                         const char *opt_mask,
70
 
                                                         CORBA_Environment *opt_ev,
71
 
                                                         <a
72
 
href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
73
 
>gpointer</a> user_data);
74
 
<a
75
 
href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
76
 
>gboolean</a>            <a class="link" href="libbonobo-bonobo-event-source.html#bonobo-event-source-has-listener" title="bonobo_event_source_has_listener ()">bonobo_event_source_has_listener</a>    (BonoboEventSource *event_source,
77
 
                                                         const char *event_name);
78
 
void                <a class="link" href="libbonobo-bonobo-event-source.html#bonobo-event-source-client-add-listener-closure" title="bonobo_event_source_client_add_listener_closure ()">bonobo_event_source_client_add_listener_closure</a>
79
 
                                                        (Bonobo_Unknown object,
80
 
                                                         <a
81
 
href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#GClosure"
82
 
>GClosure</a> *callback,
83
 
                                                         const char *opt_mask,
84
 
                                                         CORBA_Environment *opt_ev);
85
 
Bonobo_Listener     <a class="link" href="libbonobo-bonobo-event-source.html#bonobo-event-source-client-add-listener-full" title="bonobo_event_source_client_add_listener_full ()">bonobo_event_source_client_add_listener_full</a>
86
 
                                                        (Bonobo_Unknown object,
87
 
                                                         <a
88
 
href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#GClosure"
89
 
>GClosure</a> *callback,
90
 
                                                         const char *opt_mask,
91
 
                                                         CORBA_Environment *opt_ev);
92
 
void                <a class="link" href="libbonobo-bonobo-event-source.html#bonobo-event-source-ignore-listeners" title="bonobo_event_source_ignore_listeners ()">bonobo_event_source_ignore_listeners</a>
93
 
                                                        (BonoboEventSource *event_source);
 
48
<pre class="synopsis"><span class="returnvalue">BonoboEventSource</span> * <a class="link" href="libbonobo-bonobo-event-source.html#bonobo-event-source-new" title="bonobo_event_source_new ()">bonobo_event_source_new</a>             (void);
 
49
<span class="returnvalue">void</span>                <a class="link" href="libbonobo-bonobo-event-source.html#bonobo-event-source-notify-listeners" title="bonobo_event_source_notify_listeners ()">bonobo_event_source_notify_listeners</a>
 
50
                                                        (<span class="returnvalue">BonoboEventSource</span> *event_source,
 
51
                                                         const <span class="returnvalue">char</span> *event_name,
 
52
                                                         const <span class="returnvalue">CORBA_any</span> *opt_value,
 
53
                                                         <span class="returnvalue">CORBA_Environment</span> *opt_ev);
 
54
<span class="returnvalue">void</span>                <a class="link" href="libbonobo-bonobo-event-source.html#bonobo-event-source-notify-listeners-full" title="bonobo_event_source_notify_listeners_full ()">bonobo_event_source_notify_listeners_full</a>
 
55
                                                        (<span class="returnvalue">BonoboEventSource</span> *event_source,
 
56
                                                         const <span class="returnvalue">char</span> *path,
 
57
                                                         const <span class="returnvalue">char</span> *type,
 
58
                                                         const <span class="returnvalue">char</span> *subtype,
 
59
                                                         const <span class="returnvalue">CORBA_any</span> *opt_value,
 
60
                                                         <span class="returnvalue">CORBA_Environment</span> *opt_ev);
 
61
<span class="returnvalue">void</span>                <a class="link" href="libbonobo-bonobo-event-source.html#bonobo-event-source-client-remove-listener" title="bonobo_event_source_client_remove_listener ()">bonobo_event_source_client_remove_listener</a>
 
62
                                                        (<span class="returnvalue">Bonobo_Unknown</span> object,
 
63
                                                         <span class="returnvalue">Bonobo_Listener</span> listener,
 
64
                                                         <span class="returnvalue">CORBA_Environment</span> *opt_ev);
 
65
<span class="returnvalue">void</span>                <a class="link" href="libbonobo-bonobo-event-source.html#bonobo-event-source-client-add-listener" title="bonobo_event_source_client_add_listener ()">bonobo_event_source_client_add_listener</a>
 
66
                                                        (<span class="returnvalue">Bonobo_Unknown</span> object,
 
67
                                                         <a class="link" href="libbonobo-bonobo-listener.html#BonoboListenerCallbackFn" title="BonoboListenerCallbackFn ()"><span class="returnvalue">BonoboListenerCallbackFn</span></a> event_callback,
 
68
                                                         const <span class="returnvalue">char</span> *opt_mask,
 
69
                                                         <span class="returnvalue">CORBA_Environment</span> *opt_ev,
 
70
                                                         <span class="returnvalue">gpointer</span> user_data);
 
71
<span class="returnvalue">gboolean</span>            <a class="link" href="libbonobo-bonobo-event-source.html#bonobo-event-source-has-listener" title="bonobo_event_source_has_listener ()">bonobo_event_source_has_listener</a>    (<span class="returnvalue">BonoboEventSource</span> *event_source,
 
72
                                                         const <span class="returnvalue">char</span> *event_name);
 
73
<span class="returnvalue">void</span>                <a class="link" href="libbonobo-bonobo-event-source.html#bonobo-event-source-client-add-listener-closure" title="bonobo_event_source_client_add_listener_closure ()">bonobo_event_source_client_add_listener_closure</a>
 
74
                                                        (<span class="returnvalue">Bonobo_Unknown</span> object,
 
75
                                                         <span class="returnvalue">GClosure</span> *callback,
 
76
                                                         const <span class="returnvalue">char</span> *opt_mask,
 
77
                                                         <span class="returnvalue">CORBA_Environment</span> *opt_ev);
 
78
<span class="returnvalue">Bonobo_Listener</span>     <a class="link" href="libbonobo-bonobo-event-source.html#bonobo-event-source-client-add-listener-full" title="bonobo_event_source_client_add_listener_full ()">bonobo_event_source_client_add_listener_full</a>
 
79
                                                        (<span class="returnvalue">Bonobo_Unknown</span> object,
 
80
                                                         <span class="returnvalue">GClosure</span> *callback,
 
81
                                                         const <span class="returnvalue">char</span> *opt_mask,
 
82
                                                         <span class="returnvalue">CORBA_Environment</span> *opt_ev);
 
83
<span class="returnvalue">void</span>                <a class="link" href="libbonobo-bonobo-event-source.html#bonobo-event-source-ignore-listeners" title="bonobo_event_source_ignore_listeners ()">bonobo_event_source_ignore_listeners</a>
 
84
                                                        (<span class="returnvalue">BonoboEventSource</span> *event_source);
94
85
</pre>
95
86
</div>
96
87
<div class="refsect1" title="Description">
113
104
sub-type to the property name:
114
105
  </p>
115
106
<div class="example">
116
 
<a name="id2981226"></a><p class="title"><b>Example 9. An example event source notification</b></p>
117
 
<div class="example-contents"><pre class="programlisting">
118
 
static void
 
107
<a name="id2621519"></a><p class="title"><b>Example 9. An example event source notification</b></p>
 
108
<div class="example-contents">
 
109
  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
 
110
    <tbody>
 
111
      <tr>
 
112
        <td class="listing_lines" align="right"><pre>1
 
113
2
 
114
3
 
115
4
 
116
5
 
117
6
 
118
7
 
119
8
 
120
9
 
121
10
 
122
11
 
123
12
 
124
13</pre></td>
 
125
        <td class="listing_code"><pre class="programlisting"><span class="type">static</span> <span class="type">void</span>
119
126
notify_listeners (BonoboPropertyBag *pb,
120
 
                  BonoboProperty    *prop,
121
 
                  const BonoboArg   *new_value,
122
 
                  CORBA_Environment *opt_ev)
 
127
                  BonoboProperty    *prop,
 
128
                  <span class="type">const</span> BonoboArg   *new_value,
 
129
                  CORBA_Environment *opt_ev)
123
130
{
124
 
        if (prop-&gt;flags &amp; BONOBO_PROPERTY_NO_LISTENING)
125
 
                return;
126
 
        bonobo_event_source_notify_listeners_full (pb-&gt;es,
127
 
                                                   "Bonobo/Property",
128
 
                                                   "change", prop-&gt;name,
129
 
                                                   new_value, opt_ev);
130
 
}
131
 
    </pre></div>
 
131
        <span class="keyword">if</span> (prop-&gt;flags &amp; BONOBO_PROPERTY_NO_LISTENING)
 
132
                <span class="keyword">return</span>;
 
133
        bonobo_event_source_notify_listeners_full (pb-&gt;es,
 
134
                                                   <span class="number">&quot;Bonobo/Property&quot;</span>,
 
135
                                                   <span class="number">&quot;change&quot;</span>, prop-&gt;name,
 
136
                                                   new_value, opt_ev);
 
137
}</pre></td>
 
138
      </tr>
 
139
    </tbody>
 
140
  </table>
 
141
</div>
 
142
 
132
143
</div>
133
144
<p><br class="example-break">
134
145
  Of course, you need to notify the listener with a valid
136
147
a structure. eg.
137
148
  </p>
138
149
<div class="example">
139
 
<a name="id2981258"></a><p class="title"><b>Example 10. Passing a structure in an event</b></p>
 
150
<a name="id2621553"></a><p class="title"><b>Example 10. Passing a structure in an event</b></p>
140
151
<div class="example-contents">
141
152
<pre class="programlisting">
142
153
module GNOME {
182
193
<a name="libbonobo-bonobo-event-source.details"></a><h2>Details</h2>
183
194
<div class="refsect2" title="bonobo_event_source_new ()">
184
195
<a name="bonobo-event-source-new"></a><h3>bonobo_event_source_new ()</h3>
185
 
<pre class="programlisting">BonoboEventSource * bonobo_event_source_new             (void);</pre>
 
196
<pre class="programlisting"><span class="returnvalue">BonoboEventSource</span> * bonobo_event_source_new             (void);</pre>
186
197
<p>
187
198
Creates a new BonoboEventSource object.  Typically this
188
199
object will be exposed to clients through CORBA and they
192
203
<p>
193
204
To notify clients of an event, use the <a class="link" href="libbonobo-bonobo-event-source.html#bonobo-event-source-notify-listeners" title="bonobo_event_source_notify_listeners ()"><code class="function">bonobo_event_source_notify_listeners()</code></a>
194
205
function.</p>
195
 
<p>
196
 
</p>
197
206
<div class="variablelist"><table border="0">
198
207
<col align="left" valign="top">
199
208
<tbody><tr>
206
215
<hr>
207
216
<div class="refsect2" title="bonobo_event_source_notify_listeners ()">
208
217
<a name="bonobo-event-source-notify-listeners"></a><h3>bonobo_event_source_notify_listeners ()</h3>
209
 
<pre class="programlisting">void                bonobo_event_source_notify_listeners
210
 
                                                        (BonoboEventSource *event_source,
211
 
                                                         const char *event_name,
212
 
                                                         const CORBA_any *opt_value,
213
 
                                                         CORBA_Environment *opt_ev);</pre>
 
218
<pre class="programlisting"><span class="returnvalue">void</span>                bonobo_event_source_notify_listeners
 
219
                                                        (<span class="returnvalue">BonoboEventSource</span> *event_source,
 
220
                                                         const <span class="returnvalue">char</span> *event_name,
 
221
                                                         const <span class="returnvalue">CORBA_any</span> *opt_value,
 
222
                                                         <span class="returnvalue">CORBA_Environment</span> *opt_ev);</pre>
214
223
<p>
215
224
This will notify all clients that have registered with this EventSource
216
225
(through the addListener or addListenerWithMask methods) of the availability
220
229
<p>
221
230
<em class="parameter"><code>event_name</code></em> can not contain comma separators, as commas are used to
222
231
separate the various event names.</p>
223
 
<p>
224
 
</p>
225
232
<div class="variablelist"><table border="0">
226
233
<col align="left" valign="top">
227
234
<tbody>
252
259
<hr>
253
260
<div class="refsect2" title="bonobo_event_source_notify_listeners_full ()">
254
261
<a name="bonobo-event-source-notify-listeners-full"></a><h3>bonobo_event_source_notify_listeners_full ()</h3>
255
 
<pre class="programlisting">void                bonobo_event_source_notify_listeners_full
256
 
                                                        (BonoboEventSource *event_source,
257
 
                                                         const char *path,
258
 
                                                         const char *type,
259
 
                                                         const char *subtype,
260
 
                                                         const CORBA_any *opt_value,
261
 
                                                         CORBA_Environment *opt_ev);</pre>
 
262
<pre class="programlisting"><span class="returnvalue">void</span>                bonobo_event_source_notify_listeners_full
 
263
                                                        (<span class="returnvalue">BonoboEventSource</span> *event_source,
 
264
                                                         const <span class="returnvalue">char</span> *path,
 
265
                                                         const <span class="returnvalue">char</span> *type,
 
266
                                                         const <span class="returnvalue">char</span> *subtype,
 
267
                                                         const <span class="returnvalue">CORBA_any</span> *opt_value,
 
268
                                                         <span class="returnvalue">CORBA_Environment</span> *opt_ev);</pre>
262
269
<p>
263
270
</p>
264
271
<div class="variablelist"><table border="0">
300
307
<hr>
301
308
<div class="refsect2" title="bonobo_event_source_client_remove_listener ()">
302
309
<a name="bonobo-event-source-client-remove-listener"></a><h3>bonobo_event_source_client_remove_listener ()</h3>
303
 
<pre class="programlisting">void                bonobo_event_source_client_remove_listener
304
 
                                                        (Bonobo_Unknown object,
305
 
                                                         Bonobo_Listener listener,
306
 
                                                         CORBA_Environment *opt_ev);</pre>
 
310
<pre class="programlisting"><span class="returnvalue">void</span>                bonobo_event_source_client_remove_listener
 
311
                                                        (<span class="returnvalue">Bonobo_Unknown</span> object,
 
312
                                                         <span class="returnvalue">Bonobo_Listener</span> listener,
 
313
                                                         <span class="returnvalue">CORBA_Environment</span> *opt_ev);</pre>
307
314
<p>
308
315
</p>
309
316
<div class="variablelist"><table border="0">
330
337
<hr>
331
338
<div class="refsect2" title="bonobo_event_source_client_add_listener ()">
332
339
<a name="bonobo-event-source-client-add-listener"></a><h3>bonobo_event_source_client_add_listener ()</h3>
333
 
<pre class="programlisting">void                bonobo_event_source_client_add_listener
334
 
                                                        (Bonobo_Unknown object,
335
 
                                                         <a class="link" href="libbonobo-bonobo-listener.html#BonoboListenerCallbackFn" title="BonoboListenerCallbackFn ()">BonoboListenerCallbackFn</a> event_callback,
336
 
                                                         const char *opt_mask,
337
 
                                                         CORBA_Environment *opt_ev,
338
 
                                                         <a
339
 
href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"
340
 
>gpointer</a> user_data);</pre>
 
340
<pre class="programlisting"><span class="returnvalue">void</span>                bonobo_event_source_client_add_listener
 
341
                                                        (<span class="returnvalue">Bonobo_Unknown</span> object,
 
342
                                                         <a class="link" href="libbonobo-bonobo-listener.html#BonoboListenerCallbackFn" title="BonoboListenerCallbackFn ()"><span class="returnvalue">BonoboListenerCallbackFn</span></a> event_callback,
 
343
                                                         const <span class="returnvalue">char</span> *opt_mask,
 
344
                                                         <span class="returnvalue">CORBA_Environment</span> *opt_ev,
 
345
                                                         <span class="returnvalue">gpointer</span> user_data);</pre>
341
346
<p>
342
347
</p>
343
348
<div class="variablelist"><table border="0">
374
379
<hr>
375
380
<div class="refsect2" title="bonobo_event_source_has_listener ()">
376
381
<a name="bonobo-event-source-has-listener"></a><h3>bonobo_event_source_has_listener ()</h3>
377
 
<pre class="programlisting"><a
378
 
href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"
379
 
>gboolean</a>            bonobo_event_source_has_listener    (BonoboEventSource *event_source,
380
 
                                                         const char *event_name);</pre>
 
382
<pre class="programlisting"><span class="returnvalue">gboolean</span>            bonobo_event_source_has_listener    (<span class="returnvalue">BonoboEventSource</span> *event_source,
 
383
                                                         const <span class="returnvalue">char</span> *event_name);</pre>
381
384
<p>
382
385
This method determines if there are any listeners for
383
386
the event to be broadcast. This can be used to detect
384
387
whether it is worth constructing a potentialy expensive
385
388
state update, before sending it to no-one.</p>
386
 
<p>
387
 
</p>
388
389
<div class="variablelist"><table border="0">
389
390
<col align="left" valign="top">
390
391
<tbody>
409
410
<hr>
410
411
<div class="refsect2" title="bonobo_event_source_client_add_listener_closure ()">
411
412
<a name="bonobo-event-source-client-add-listener-closure"></a><h3>bonobo_event_source_client_add_listener_closure ()</h3>
412
 
<pre class="programlisting">void                bonobo_event_source_client_add_listener_closure
413
 
                                                        (Bonobo_Unknown object,
414
 
                                                         <a
415
 
href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#GClosure"
416
 
>GClosure</a> *callback,
417
 
                                                         const char *opt_mask,
418
 
                                                         CORBA_Environment *opt_ev);</pre>
 
413
<pre class="programlisting"><span class="returnvalue">void</span>                bonobo_event_source_client_add_listener_closure
 
414
                                                        (<span class="returnvalue">Bonobo_Unknown</span> object,
 
415
                                                         <span class="returnvalue">GClosure</span> *callback,
 
416
                                                         const <span class="returnvalue">char</span> *opt_mask,
 
417
                                                         <span class="returnvalue">CORBA_Environment</span> *opt_ev);</pre>
419
418
<p>
420
419
</p>
421
420
<div class="variablelist"><table border="0">
447
446
<hr>
448
447
<div class="refsect2" title="bonobo_event_source_client_add_listener_full ()">
449
448
<a name="bonobo-event-source-client-add-listener-full"></a><h3>bonobo_event_source_client_add_listener_full ()</h3>
450
 
<pre class="programlisting">Bonobo_Listener     bonobo_event_source_client_add_listener_full
451
 
                                                        (Bonobo_Unknown object,
452
 
                                                         <a
453
 
href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#GClosure"
454
 
>GClosure</a> *callback,
455
 
                                                         const char *opt_mask,
456
 
                                                         CORBA_Environment *opt_ev);</pre>
 
449
<pre class="programlisting"><span class="returnvalue">Bonobo_Listener</span>     bonobo_event_source_client_add_listener_full
 
450
                                                        (<span class="returnvalue">Bonobo_Unknown</span> object,
 
451
                                                         <span class="returnvalue">GClosure</span> *callback,
 
452
                                                         const <span class="returnvalue">char</span> *opt_mask,
 
453
                                                         <span class="returnvalue">CORBA_Environment</span> *opt_ev);</pre>
457
454
<p>
458
455
</p>
459
456
<div class="variablelist"><table border="0">
490
487
<hr>
491
488
<div class="refsect2" title="bonobo_event_source_ignore_listeners ()">
492
489
<a name="bonobo-event-source-ignore-listeners"></a><h3>bonobo_event_source_ignore_listeners ()</h3>
493
 
<pre class="programlisting">void                bonobo_event_source_ignore_listeners
494
 
                                                        (BonoboEventSource *event_source);</pre>
 
490
<pre class="programlisting"><span class="returnvalue">void</span>                bonobo_event_source_ignore_listeners
 
491
                                                        (<span class="returnvalue">BonoboEventSource</span> *event_source);</pre>
495
492
<p>
496
493
Instructs the event source to de-register any listeners
497
494
that are added from the global running context.</p>
498
 
<p>
499
 
</p>
500
495
<div class="variablelist"><table border="0">
501
496
<col align="left" valign="top">
502
497
<tbody><tr>
516
511
</div>
517
512
<div class="footer">
518
513
<hr>
519
 
          Generated by GTK-Doc V1.11</div>
 
514
          Generated by GTK-Doc V1.14</div>
520
515
</body>
521
 
</html>
 
516
</html>
 
 
b'\\ No newline at end of file'