doc/
[gpgme.git] / doc / ChangeLog
1 2004-05-21  Marcus Brinkmann  <marcus@g10code.de>
2
3         * gpgme.texi (Decrypt): Add note about new field wrong_key_usage
4         of gpgme_decrypt_result_t.
5
6         * gpgme.texi (Key Management): Add note about new field
7         keylist_mode of gpgme_key_t.
8
9 2004-04-29  Marcus Brinkmann  <marcus@g10code.de>
10
11         * gpgme.texi (Verify): Correct type of member wrong_key_usage.
12
13 2004-03-29  Moritz Schulte  <moritz@duesseldorf.ccc.de>
14
15         * gpgme.texi (Verify): Fix type of gpgme_op_verify_result.
16         * gpgme.texi (Key Listing Mode): Typo fix.
17
18 2004-03-23  Marcus Brinkmann  <marcus@g10code.de>
19
20         * gpgme.texi (Library Version Check): Fix the instruction when to
21         set the locale.
22
23 2004-03-03  Marcus Brinkmann  <marcus@g10code.de>
24
25         * gpgme.texi (I/O Callback Example Qt): New section by Marc Mutz.
26
27 2004-02-24  Marcus Brinkmann  <marcus@g10code.de>
28
29         * gpgme.texi (cancellation): New section.
30
31 2004-02-17  Werner Koch  <wk@gnupg.org>
32
33         * gpgme.texi (Key Listing Mode): Doc KEYLIST_MODE_VALIDATE.
34
35 2004-02-06  Moritz Schulte  <mo@g10code.com>
36
37         * gpgme.texi: A couple of small fixes regarding the Largfile
38         Support section.
39
40 2004-02-01  Marcus Brinkmann  <marcus@g10code.de>
41
42         * gpgme.texi (Largefile Support): New section.
43
44 2004-01-13  Marcus Brinkmann  <marcus@g10code.de>
45
46         * gpgme.texi (Key Management): Fix exportable field.
47
48 2003-12-25  Marcus Brinkmann  <marcus@g10code.de>
49
50         * gpgme.texi (Key Management): Rename member class in
51         gpgme_key_sig_t to sig_class.
52         (Creating a Signature): Likewise for gpgme_signature_t.
53
54 2003-12-23  Moritz Schulte  <mo@g10code.com>
55
56         * gpgme.texi (Listing Keys): Minor clarification for
57         gpgme_get_key.
58
59 2003-10-06  Marcus Brinkmann  <marcus@g10code.de>
60
61         * gpgme.texi (Signal Handling): New section.
62
63 2003-09-14  Marcus Brinkmann  <marcus@g10code.de>
64
65         * gpgme.texi (Multi Threading): Correct documentation on memory
66         synchronization requirement.
67
68         * gpgme.texi (Locale): New section.
69         (Multi Threading): Set locale in example.
70
71 2003-09-13  Marcus Brinkmann  <marcus@g10code.de>
72
73         * gpgme.texi (Error Strings): Add gpgme_strerror_r.
74
75 2003-09-13  Marcus Brinkmann  <marcus@g10code.de>
76
77         * gpgme.texi (Multi Threading): Update documentation.
78
79 2003-09-03  Marcus Brinkmann  <marcus@g10code.de>
80
81         * gpgme.texi (Header): We don't use the assuan namespace anymore.
82         Document new thread options.
83
84 2003-08-14  Marcus Brinkmann  <marcus@g10code.de>
85
86         * gpgme.texi (Creating a Signature): Change type of member class
87         to unsigned int.
88
89 2003-08-04  Marcus Brinkmann  <marcus@g10code.de>
90
91         * gpgme.texi (Verify): Get error code from SIG->status in the code
92         for gpgme_get_sig_status.
93
94 2003-07-31  Marcus Brinkmann  <marcus@g10code.de>
95
96         * gpgme.texi (Key Management): Add can_authenticate flag.
97
98         * gpgme.texi (Listing Keys): Document GPG_ERR_AMBIGUOUS_NAME for
99         gpgme_get_key.
100
101 2003-07-29  Marcus Brinkmann  <marcus@g10code.de>
102
103         * Makefile.am (EXTRA_DIST): Remove variable.
104
105         * gpgme.texi (Encrypting a Plaintext): Bad passphrase is only
106         possible with symmetric encryption, change the wording to reflect
107         that.
108
109         * gpgme.texi (Creating a Signature): Document
110         GPG_ERR_UNUSABLE_SECKEY.
111
112         * gpgme.texi (Encrypting a Plaintext): Mention encrypt and sign
113         operations in result function.
114         (Creating a Signature): Likewise.
115
116 2003-07-23  Marcus Brinkmann  <marcus@g10code.de>
117
118         * gpgme.texi (Key Listing Mode): Remove word duplication.
119         (Listing Keys): Remove mentioning of force argument.
120         (Verify): Don't mention r_stat.  Fix some typos.
121         (Decrypt and Verify): Correct info how to get the result.  Don't
122         mention r_stat.
123         (Manipulating Data Buffers): Fix documentation of return value.
124         (Listing Keys): Update examples.
125         (Decrypt): Result might also be available when operation failed.
126         (Verify): Result might also be available when operation failed.
127         All spotted by Stéphane Corthésy.
128
129 2003-07-22  Marcus Brinkmann  <marcus@g10code.de>
130
131         * gpgme.texi (Error Sources): Fix cut and paste error.
132
133 2003-07-09  Marcus Brinkmann  <marcus@g10code.de>
134
135         * gpgme.texi (Key Management): Clarify difference between can_sign
136         and can_certify.
137         (Information About Keys): Likewise for GPGME_ATTR_CAN_SIGN and
138         GPGME_ATTR_CAN_CERTIFY.
139
140 2003-07-08  Marcus Brinkmann  <marcus@g10code.de>
141
142         * gpgme.texi (Progress Meter Callback): Change return type of
143         gpgme_progress_cb_t to void.
144
145 2003-06-22  Marcus Brinkmann  <marcus@g10code.de>
146
147         * gpgme.texi: Add 2003 to copyright notice.
148
149         * gpgme.texi (Header): Fix name space documentation on
150         libgpg-error.
151
152 2003-06-22  Marcus Brinkmann  <marcus@g10code.de>
153
154         * gpgme.texi (Multi Threading): Remove reference to
155         gpgme_recipients_t.
156
157 2003-06-06  Marcus Brinkmann  <marcus@g10code.de>
158
159         * gpgme.texi (Crypto Operations): Rename gpgme_invalid_user_id_t
160         to gpgme_invalid_key_t.
161
162 2003-06-06  Marcus Brinkmann  <marcus@g10code.de>
163
164         * gpgme.texi: Change error codes to GPG_ERR_* variants.
165         (Error Handling): Rewritten.
166
167 2003-05-29  Marcus Brinkmann  <marcus@g10code.de>
168
169         * gpgme.texi (Exporting Keys): Change and document prototypes.
170         Add new gpgme_op_export_ext and gpgme_op_export_ext_start
171         variants.
172         (Selecting Recipients): Section removed.
173         (Encrypting a Plaintext): Change prototypes and document the
174         changes.
175
176 2003-05-28  Marcus Brinkmann  <marcus@g10code.de>
177
178         * gpgme.texi (Exporting Keys): Change argument type from
179         gpgme_recipient_t to gpgme_user_id_t.
180         (Encrypting a Plaintext): Likewise.
181         (Selecting Recipients): Rewritten.
182
183 2003-05-27  Marcus Brinkmann  <marcus@g10code.de>
184
185         * gpgme.texi (Protocol Selection): Do not use @acronym in @node
186         because that breaks texi2dvi.
187
188         * gpgme.texi (Passphrase Callback): Document new prototype.
189
190 2003-05-18  Marcus Brinkmann  <marcus@g10code.de>
191
192         * gpgme.texi (Header): Remove Gpgme as namespace prefix.  Add
193         _GPGME to namespace prefix.
194         * gpgme.texi (Multi Threading): Add note about link order.
195
196 2003-05-04  Marcus Brinkmann  <marcus@g10code.de>
197
198         * gpgme.texi (Listing Keys): Document what happens if key is not
199         found.
200
201         * gpgme.texi (Importing Keys): Fix cut and paste error.
202
203 2003-04-30  Marcus Brinkmann  <marcus@g10code.de>
204
205         * gpgme.texi (Encrypting a Plaintext): Remove reference to
206         gpgme_get_op_info.
207         (Detailed Results): Subsection removed.
208
209         * gpgme.texi (Key Listing Mode): Add GPGME_KEYLIST_MODE_SIGS.
210         (Manipulating Keys): Add obsoleteness note.
211         (Key Signatures): Likewise.
212         (Information About Keys): Likewise.
213         (Key Management): Add new data types GpgmeSubkey, GpgmeKeySig,
214         GpgmeUserID, and all the information about GpgmeKey.
215
216 2003-04-29  Marcus Brinkmann  <marcus@g10code.de>
217
218         * gpgme.texi (Listing Keys): Remove force_update argument from
219         gpgme_get_key.
220
221         * gpgme.texi (Trust Item Management): Add data members of
222         GpgmeTrustItem type.
223         (Information About Trust Items): Add note about obsoleteness.
224         (Manipulating Trust Items): Add gpgme_trust_item_ref and
225         gpgme_trust_item_unref.
226
227 2003-04-28  Marcus Brinkmann  <marcus@g10code.de>
228
229         * gpgme.texi (Verify): Rewritten to take into account new and
230         deprecated functions and data types.
231
232         * gpgme.texi (Decrypt): Descript gpgme_op_decrypt_result and
233         GpgmeDecryptResult.
234
235 2003-04-27  Marcus Brinkmann  <marcus@g10code.de>
236
237         * gpgme.texi (Encrypting a Plaintext): Add info about
238         GpgmeEncryptResult and gpgme_op_encrypt_result.
239
240         * gpgme.texi (Creating a Signature): Add info about
241         GpgmeNewSignature, GpgmeSignResult and gpgme_op_sign_result.
242         (Crypto Operations): Add GpgmeInvalidUserID.
243         (Algorithms): New chapter.
244
245         * gpgme.texi (Deleting Keys): Document
246         GPGME_Ambiguous_Specification.
247         (Error Values): Remove GPGME_Invalid_Type and GPGME_Invalid_Mode.
248         Add GPGME_Unknown_Reason, GPGME_Not_Found,
249         GPGME_Ambiguous_Specification, GPGME_Wrong_Key_Usage,
250         GPGME_Key_Revoked, GPGME_Key_Expired, GPGME_No_CRL_Known,
251         GPGME_CRL_Too_Old, GPGME_Policy_Mismatch, GPGME_No_Secret_Key,
252         GPGME_Key_Not_Trusted, GPGME_Issuer_Missing, GPGME_Chain_Too_Long,
253         GPGME_Unsupported_Algorithm, GPGME_Sig_Expired,
254         GPGME_Bad_Signature, GPGME_No_Public_Key.
255
256 2003-04-25  Marcus Brinkmann  <marcus@g10code.de>
257
258         * gpgme.texi (Importing Keys): Change GPGME_IMPORT_PRIVATE to
259         GPGME_IMPORT_SECRET.
260
261         * gpgme.texi (Importing Keys): Remove note about gpgme_get_op_info.
262         (Detailed Results): Remove note about import.
263
264         * gpgme.texi (Importing Keys): Add documentation for
265         GpgmeImportStatus, GpgmeImportResult and gpgme_op_import_result.
266
267         * gpgme.texi (Generating Keys): Fix documentation of public and
268         secret arguments.
269
270 2003-04-24  Marcus Brinkmann  <marcus@g10code.de>
271
272         * gpgme.texi (Generating Keys): Document changed gpgme_op_genkey
273         and new gpgme_op_genkey_result function.  Document
274         GpgmeGenKeyResult data type.
275
276         * gpgme.texi (Error Values): Rename GPGME_No_Passphrase to
277         GPGME_Bad_Passphrase.
278         * gpgme.texi (Decrypt): Likewise.
279         (Decrypt and Verify): Likewise.
280         (Creating a Signature): Likewise.
281         (Encrypting a Plaintext): Likewise.
282
283         * gpgme.texi (Error Values): Rename GPGME_No_Recipients to
284         GPGME_No_UserID and GPGME_Invalid_Recipient to
285         GPGME_Invalid_UserID.
286         (Encrypting a Plaintext): Likewise.
287
288         * gpgme.texi (Error Values): Remove GPGME_Busy and GPGME_No_Request.
289         (Listing Keys): Likewise.
290         (Listing Trust Items): Likewise.
291
292 2003-02-06  Marcus Brinkmann  <marcus@g10code.de>
293
294         * gpgme.texi (Cancelling an Operation): Removed.
295         (Passphrase Callback): Document new type for GpgmePassphraseCb.
296
297 2003-01-30  Marcus Brinkmann  <marcus@g10code.de>
298
299         * gpgme.texi (Engine Information): Rename member part to
300         file_name.
301
302         * gpgme.texi (Protocols and Engines): Document
303         gpgme_get_protocol_name.
304
305         * gpgme.texi (Engine Information): Rewritten.
306
307 2003-01-29  Marcus Brinkmann  <marcus@g10code.de>
308
309         * gpgme.texi (I/O Callback Interface): Document new even
310         GPGME_EVENT_START.
311         (Waiting For Completion): Document new possible return values.
312         (I/O Callback Interface): Document return type of GpgmeIOCb.
313
314 2003-01-29  Marcus Brinkmann  <marcus@g10code.de>
315
316         * gpgme.texi (Hooking Up Into Idle Time): Section removed.
317
318 2002-12-24  Marcus Brinkmann  <marcus@g10code.de>
319
320         * gpgme.texi (Verify): Drop R_STAT argument in gpgme_op_verify.
321         * gpgme.texi (Decrypt and Verify): Likewise for
322         gpgme_op_decrypt_verify.
323
324 2002-12-23  Marcus Brinkmann  <marcus@g10code.de>
325
326         * gpgme.texi (Information About Keys): Document that
327         GPGME_ATTR_IS_SECRET is not representable as a string anymore.
328
329 2002-12-22  Marcus Brinkmann  <marcus@g10code.de>
330
331         * gpgme.texi (Key Signatures): New section.
332         (Listing Keys): Add gpgme_get_key.
333
334 2002-12-06  Marcus Brinkmann  <marcus@g10code.de>
335
336         * gpgme.texi (Memory Based Data Buffers): New subsection.
337         (File Based Data Buffers): Likewise.
338         (Callback Based Data Buffers): Likewise.
339         (Manipulating Data Buffers): Update interfaces.  Add
340         gpgme_data_seek.
341         * gpgme.texi (Engine Version Check): Remove gpgme_check_engine.
342         
343 2002-11-21  Marcus Brinkmann  <marcus@g10code.de>
344
345         * gpgme.texi (Verify): Document the new interface.
346
347 2002-11-19  Marcus Brinkmann  <marcus@g10code.de>
348
349         * gpgme.texi (Generating Keys): Document new argument to
350         gpgme_op_genkey.
351
352 2002-11-05  Marcus Brinkmann  <marcus@g10code.de>
353
354         * gpgme.texi (Verify): Fix prototype of gpgme_get_sig_key.
355         Reported by Miguel Coca <e970095@zipi.fi.upm.es>.
356
357 2002-08-30  Marcus Brinkmann  <marcus@g10code.de>
358
359         * gpgme.texi (Selecting Signers): Fix reference count.
360
361 2002-08-21  Marcus Brinkmann  <marcus@g10code.de>
362
363         * gpgme.texi (Header): Document name space.
364
365 2002-08-20  Marcus Brinkmann  <marcus@g10code.de>
366
367         * gpgme.texi (Importing Keys): Document gpgme_op_import_ext.
368
369         * gpgme.texi (Importing Keys): Undocument EOF.
370
371 2002-08-14  Werner Koch  <wk@gnupg.org>
372
373         * gpgme.texi (Information About Keys): Changed GPGME_ATTR_TYPE.
374
375 2002-07-25  Marcus Brinkmann  <marcus@g10code.de>
376
377         * gpgme.texi (Deleting Keys): Say that secret keys might not be
378         deleted.
379
380 2002-07-25  Marcus Brinkmann  <marcus@g10code.de>
381
382         * gpgme.texi (Information About Keys): Document (badly) the new
383         key attributes.
384
385         * gpgme.texi (Manipulating Data Buffers): Mention that backend
386         tries to detect encoding automatically.
387
388 2002-07-03  Marcus Brinkmann  <marcus@g10code.de>
389
390         * gpgme.texi (Run Control): Update this section.
391         (Waiting For Completion): Likewise for this subsection.
392         (Cancelling an Operation): Likewise for this subsection.
393         (Using External Event Loops): New subsection with several
394         subsubsections.
395
396 2002-06-28  Marcus Brinkmann  <marcus@g10code.de>
397
398         * gpgme.texi (Multi Threading): Remove item about the need to
399         synchronize anything against gpgme_wait (except gpgme_wait
400         itself).
401
402 2002-06-27  Marcus Brinkmann  <marcus@g10code.de>
403
404         * gpgme.texi (Information About Keys): Fix documentation for IDX.
405         (Information About Trust Items): Likewise.
406
407 2002-06-26  Werner Koch  <wk@gnupg.org>
408
409         * gpgme.texi (Importing Keys): Document the return value -1 of
410         gpgme_op_import.
411
412 2002-06-20  Werner Koch  <wk@gnupg.org>
413
414         * gpgme.texi (Verify): Explain the new whatidx variable.
415
416 2002-06-10  Werner Koch  <wk@gnupg.org>
417
418         * gpgme.texi (Verify): Document attribute GPGME_ATTR_ERRTOK.
419
420 2002-06-04  Marcus Brinkmann  <marcus@g10code.de>
421
422         * gpgme.texi (Multi Threading): Document new autodetection.
423
424 2002-06-04  Marcus Brinkmann  <marcus@g10code.de>
425
426         * Makefile.am (DISTCLEANFILES): New variable.
427
428 2002-05-26  Marcus Brinkmann  <marcus@g10code.de>
429
430         * gpgme.texi: Some typographical correctons throughout.
431
432 2002-05-09  Marcus Brinkmann  <marcus@g10code.de>
433
434         * gpgme.texi (Using Automake): New section.
435
436 2002-05-09  Marcus Brinkmann  <marcus@g10code.de>
437
438         * gpgme.texi (Multi Threading): Escape { and }.
439
440 2002-05-09  Marcus Brinkmann  <marcus@g10code.de>
441
442         * gpgme.texi (Overview): Replace note about thread-safeness.
443         (Multi Threading): New section.
444
445 2002-05-03  Werner Koch  <wk@gnupg.org>
446
447         * gpgme.texi (Manipulating Data Buffers): Changed some data types
448         to void*.
449         (Protocol Selection): Added gpgme_get_protocol.
450         (Verify): Updated to include the new attribute fucntions and
451         status codes.
452
453 2002-04-27  Werner Koch  <wk@gnupg.org>
454
455         * gpgme.texi (Manipulating Data Buffers): New type GpgmeDataEncoding.
456
457 2002-04-23  Marcus Brinkmann  <marcus@g10code.de>
458
459         * gpgme.texi (Passphrase Callback): Document that either return
460         argument can be NULL.
461         (Progress Meter Callback): Likewise.
462
463 2002-04-22  Marcus Brinkmann  <marcus@g10code.de>
464
465         * gpgme.texi (Passphrase Callback): Fix small typo.  Document the
466         new function gpgme_get_passphrase_cb.
467         (Progress Meter Callback): Document the new function
468         gpgme_get_progress_cb.
469
470 2002-04-16  Marcus Brinkmann  <marcus@g10code.de>
471
472         * gpgme.texi (Creating a Signature): Fix function name.  Reported
473         by Wichert Ackerman <wichert@debian.org>.
474
475 2002-03-29  Marcus Brinkmann  <marcus@g10code.de>
476
477         * gpgme.texi (direntry): End index entry with a full stop.
478         Patch submitted by Jose Carlos Garcia Sogo <jsogo@debian.org>.
479         
480 2002-03-17  Marcus Brinkmann  <marcus@g10code.de>
481
482         * gpgme.texi (Detailed Results): Fix syntax error in last change.
483
484 2002-03-08  Werner Koch  <wk@gnupg.org>
485
486         * gpgme.texi (Detailed Results): Import does also return info.
487
488 2002-03-06  Marcus Brinkmann  <marcus@g10code.de>
489
490         * gpgme.texi (Encrypting a Plaintext): Document symmetric
491         encryption.
492
493 2002-03-06  Marcus Brinkmann  <marcus@g10code.de>
494
495         * gpgme.texi (Error Strings): Add example.
496         * gpgme.texi (Listing Keys): Likewise.
497
498 2002-03-03  Marcus Brinkmann  <marcus@g10code.de>
499
500         * gpgme.texi (Information About Keys): Document GPGME_ATTR_EXPIRE.
501
502 2002-03-03  Marcus Brinkmann  <marcus@g10code.de>
503
504         * gpgme.texi (Verify): Document verification of normal and
505         cleartext signatures.
506
507 2002-02-27  Marcus Brinkmann  <marcus@g10code.de>
508
509         * gpgme.texi (Listing Keys): Document gpgme_op_keylist_ext_start.
510
511 2002-02-27  Marcus Brinkmann  <marcus@g10code.de>
512
513         * gpgme.texi (Encrypting a Plaintext): Document
514         GPGME_Invalid_Recipients.
515         (Error Values): Likewise.
516
517 2002-02-26  Marcus Brinkmann  <marcus@g10code.de>
518
519         * gpgme.texi (Encrypting a Plaintext): Document
520         gpgme_op_encrypt_sign and gpgme_op_encrypt_sign_start.
521
522 2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
523
524         * gpgme.texi (Creating a Signature): Add a note about
525         certificates to include.
526         (Included Certificates): New section.
527
528 2002-02-09  Marcus Brinkmann  <marcus@g10code.de>
529
530         * gpgme.texi (Detailed Results): Remove literal tags.
531         (Generating Keys): Update documentation.
532
533         * gpgme.texi (Generating Keys): Fix syntax error.
534
535 2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
536
537         * gpgme.texi (Waiting For Completion): Adjust doc to changes in
538         the code.
539
540 2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
541
542         * gpgme.texi (Key Listing Mode): Update documentation.
543
544 2002-01-31  Marcus Brinkmann  <marcus@g10code.de>
545
546         * gpgme.texi (Generating Keys): Document error at creation
547         failure.
548
549 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
550
551         * gpgme.texi (Deleting Keys): Document new error values.
552
553 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
554
555         * gpgme.texi (Importing Keys): Add reference to gpgme_get_op_info.
556
557 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
558
559         * gpgme.texi: Some spell checking.
560
561 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
562
563         * gpgme.texi: Add all the gpgme_op_*_start functions.
564         Fill the concept index with many, many entries.
565
566 2002-01-29  Marcus Brinkmann  <marcus@g10code.de>
567
568         * gpgme.texi (Run Control): New section.
569         (Verify): Docuent gpgme_get_notation.
570         (More Information): New section describing gpgme_get_op_info.
571
572 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
573
574         * gpgme.texi (Passphrase callback): Change GpgmePassphraseCb's
575         R_HD type from void* to void**.
576
577 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
578
579         * gpgme.texi (Creating data buffers): Change
580         gpgme_data_new_from_filepart's LENGTH type from off_t to size_t.
581
582 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
583
584         * gpgme.texi (Generating keys): New subsection.
585         (Exporting keys): Likewise.
586         (Importing keys): Likewise.
587         (Deleting keys): Likewise.
588
589 2002-01-16  Marcus Brinkmann  <marcus@g10code.de>
590
591         * gpgme.texi: g10Code -> g10 Code
592
593         * gpgme.texi (Top): Complete detailmenu.
594         
595         * gpgme.texi: Convert embarassing cruft to the real thing.
596
597 2002-01-16  Marcus Brinkmann  <marcus@g10code.de>
598
599         * ChangeLog: New file.
600         * gpgme.texi: Likewise.
601         * gpl.texi: Likewise.
602         * fdl.texi: Likewise.
603         * Makefile.am (info_TEXINFOS): New variable.
604         (gpgme_TEXINFOS): Likewise.
605
606  Copyright 2002, 2003, 2004 g10 Code GmbH
607
608  This file is free software; as a special exception the author gives
609  unlimited permission to copy and/or distribute it, with or without
610  modifications, as long as this notice is preserved.
611
612  This file is distributed in the hope that it will be useful, but
613  WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
614  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.