1 2007-08-18 John Darrington <john@darrington.wattle.id.au>
3 * clipboard.c clipboard.h data-editor.c: Added the ability to paste from
4 the clipboard into the data sheet.
6 2007-08-16 John Darrington <john@darrington.wattle.id.au>
8 * output-viewer.c output-viewer.h output-viewer.glade (new files)
9 helper.c psppire.c syntax-editor.glade window-manager.c
10 window-manager.h : Added a basic output viewer window.
12 2007-08-13 John Darrington <john@darrington.wattle.id.au>
14 * clipboard.c (clip_to_html clip_to_text): Fixed bug --- use the
15 variable count instead of the value count for the columns limit.
17 2007-08-12 John Darrington <john@darrington.wattle.id.au>
18 Ben Pfaff <blp@gnu.org>
20 Implement Edit|Cut operation for datasheet. Patch #6117.
22 * automake.mk: Add clipboard.c, clipboard.h.
24 * clipboard.c: New file.
26 * clipboard.h: New file.
28 * data-editor.c (new_data_editor): Connect Edit|Copy to
29 on_edit_copy function.
30 (data_var_select): Enable or disable Edit|Copy as appropriate.
31 (on_edit_copy): New function.
33 * data-editor.glade: Connect menu items to new operations.
35 2007-08-12 Ben Pfaff <blp@gnu.org>
37 * psppire-dict.c (psppire_dict_dump): Don't use
38 dict_get_compacted_dict_index_to_case_index, as that function has
41 2007-08-13 John Darrington <john@darrington.wattle.id.au>
43 * psppire-case-file.c (psppire_case_file_append_case):
44 Deleted unused function.
46 2007-08-07 John Darrington <john@darrington.wattle.id.au>
48 * helper.c (execute_syntax): Set the active file data to NULL at the
49 end of the procedure. Thanks to Ben for suggesting this.
51 * psppire-case-file.c: Added assertions to the remaining functions
52 on inaccessible objects.
54 * psppire-data-store.c psppire-data-store.h: Disconnect or block
55 signals on dictionary and case_file, when make_reader has been called.
56 Reconnect or unblock them when a new datasheet has been set for the
59 2007-08-06 John Darrington <john@darrington.wattle.id.au>
61 * syntax-editor.glade: Changed some properties to be less annoying.
63 2007-07-29 John Darrington <john@darrington.wattle.id.au>
65 * helper.c psppire.c: Enabled the output system so that the results
66 of analysis can be seen.
68 2007-07-26 John Darrington <john@darrington.wattle.id.au>
70 * helper.c helper.h (execute_syntax): removed implicit EXECUTE at end
73 * data-editor.c data-editor.glade: Added "Run Pending Transformations"
76 2007-07-25 John Darrington <john@darrington.wattle.id.au>
78 * customentry.c: Redraw button in insensitive state, if the widget's
79 "editable" style is FALSE. Don't emit the "clicked" signal if
82 * var-sheet.c: If variables are long-string variables, then set the
83 "editable" properties of the entry widgets for the values and missing
86 2007-07-18 John Darrington <john@darrington.wattle.id.au>
88 * psppire-case-file.c psppire-case-file.h psppire-data-store.c
89 psppire-dict.c psppire-dict.h psppire-var-store.c : Added the
90 ability to resize string variables. Fixed associated problems
91 inserting/deleting variables.
93 * helper.c helper.h (marshaller_VOID__INT_INT_INT): New marshaller
96 2007-07-16 John Darrington <john@darrington.wattle.id.au>
98 * data-editor.c: File Open dialog remembers directory. Thanks to
99 Ben Pfaff for this suggestion.
101 2007-07-15 John Darrington <john@darrington.wattle.id.au>
103 * compute-dialog.c: Only generate NUMERIC/STRING command if the
104 type-and-label dialog was used.
106 2007-07-12 John Darrington <john@darrington.wattle.id.au>
108 * psppire-data-store.c: Added call to g_sheet_model_range_changed to
109 ensure that datasheet displays the current store.
111 * psppire-data-store.h: Formatting tidy up.
113 2007-07-11 John Darrington <john@darrington.wattle.id.au>
115 * compute-dialog.c : Set type-and-label dialog to sensible state, and made syntax generation depend upon existence of target variable.
117 2007-07-08 John Darrington <john@darrington.wattle.id.au>
119 * data-editor.c data-editor.glade data-editor.h: Implemented
120 the "Insert Case" button/dialog.
122 2007-07-08 John Darrington <john@darrington.wattle.id.au>
124 * goto-case-dialog.c goto-case-dialog.h (new files)
125 * automake.mk data-editor.c data-editor.glade data-editor.h
126 psppire-case-file.c psppire-case-file.h psppire-data-store.c
127 psppire-data-store.h psppire.glade : Implemented the goto-case dialog
130 2007-07-07 John Darrington <john@darrington.wattle.id.au>
132 * psppire-data-store.c psppire-data-store.h: Made cases number from
135 * psppire-data-store.c: Added a tooltip like feature to display
136 the label of variables.
138 2007-07-03 John Darrington <john@darrington.wattle.id.au>
140 * data-editor.c data-sheet.c: Turned off autoscrolling, and
141 manually move to cell on column click instead.
143 2007-06-29 John Darrington <john@darrington.wattle.id.au>
145 * data-editor.c data-editor.glade psppire-data-store.c
146 psppire-data-store.h: Enabled cell reference entry and datum
149 2007-06-29 John Darrington <john@darrington.wattle.id.au>
151 * data-editor.c data-sheet.c: Moved update_cell_ref_entry from
152 data-sheet.c to data-editor.c and made it work again.
154 2007-06-06 Ben Pfaff <blp@gnu.org>
156 Adapt case sources, sinks, and clients of procedure code to the
159 * automake.mk: Removed files.
161 * flexifile-factory.c: Removed, dead code.
162 * flexifile-factory.h: Ditto.
164 * helper.c: Adapt to new procedure and datasheet code.
165 * missing-val-dialog.c: Ditto.
166 * psppire-case-file.c: Ditto.
167 * psppire-data-store.c: Ditto.
170 2007-06-03 Ben Pfaff <blp@gnu.org>
172 * psppire-var-store.c (psppire_var_store_item_editable): Use
175 2007-05-07 John Darrington <john@darrington.wattle.id.au>
177 * psppire-dialog.c psppire-dialog.h: Added "orientation" property,
178 to allow dialogs to be either vertical or horizontal.
180 * comments-dialog.c comments-dialog.h: New files, invoking
183 2007-04-30 John Darrington <john@darrington.wattle.id.au>
185 * var-display.c var-display.h variable-info-dialog.c
186 variable-info-dialog.h : New files.
190 * psppire-buttonbox.c psppire-buttonbox.h : Added the "buttons"
191 property, and optional GOTO and CONTINUE buttons.
193 * psppire-dialog.h: Added response codes for the new buttons.
195 * psppire-var-store.c : Moved some code to var-display.[ch]
197 2007-04-25 John Darrington <john@darrington.wattle.id.au>
199 * icons/scalable/splash.c icons/splash.png : More eye candy.
201 * main.c psppire.h : new files.
203 * psppire.c : Seperated the command line parsing and other
204 environment startup from the core psppire code.
206 2007-04-25 John Darrington <john@darrington.wattle.id.au>
208 * icons/scalable icons/16x16: new directories.
209 * psppire.c : Add new icons to factory.
211 * dict-display.c: Refactor code get model from modelfilter.
212 Added cellrenderer to display icon indicating variables' types.
213 Displayed the label of variables, if there is one.
216 2007-04-15 Ben Pfaff <blp@gnu.org>
218 * compute-dialog.c (function_list_populate): Use new accessor
219 functions exported by language/expressions/public.h.
221 2007-04-15 Ben Pfaff <blp@gnu.org>
223 * compute-dialog.c: Make #include for parse.inc work with VPATH
226 2007-04-13 John Darrington <john@darrington.wattle.id.au>
228 * var-type-dialog.c: Added a FMT_DATETIME20 template.
230 2007-04-04 John Darrington <john@darrington.wattle.id.au>
232 * compute-dialog.c compute-dialog.h: New files
234 * data-editor.c data-editor.h data-editor.glade : Added Transform
235 menu, and support for Compute dialog
237 * glade-register.c psppire-buttonbox.c psppire-buttonbox.h
238 psppire-vbottonbox.c psppire-vbuttonbox.h psppire-hbuttonbox.c
239 psppire-vbuttonbox.h : Made buttonbox an abstract base class
240 and separated it into vbuttonbox and hbuttonbox.
242 * psppire-selector.c : Allowed GtkTextView to be the destination
245 * psppire-keypad.c: Added an "erase" signal. Fixed other
248 2007-04-03 Ben Pfaff <blp@gnu.org>
249 John McCabe-Dansted <gmatht@gmail.com>
251 * psppire-selector.c (psppire_selector_set_subjects): Add an
252 assert that may or may not trap some Windows-related bugs.
254 2007-04-03 John Darrington <john@darrington.wattle.id.au>
256 * data-editor.c data-editor.glade helper.h syntax-editor.c
257 syntax-editor.h : Implemented the File->Recently_Used_ menus.
260 2007-03-31 John Darrington <john@darrington.wattle.id.au>
262 * data-editor.c data-editor.glade data-editor.h dialog-common.c
263 psppire-buttonbox.c psppire-dialog.c psppire-dialog.h
264 psppire-selector.c psppire-selector.h psppire.c psppire.glade
265 sort-cases-dialog.c sort-cases-dialog.h split-file-dialog.c
266 transpose-dialog.c weight-cases-dialog.c : Fixed the Refresh
267 button on all the dialogs.
269 2007-03-31 John Darrington <john@darrington.wattle.id.au>
271 * data-editor.c: Added hooks for the split-file-dialog
273 * psppire.glade: Added the split file dialog box.
275 * split-file-dialog.c split-file-dialog.h: New files.
277 * dialog-common.c dialog-common.h: New files containing functions
278 which seem to be used a lot in dialog box implementations.
280 * psppire-keypad.c psppire-keypad.h: New files. Implements keypad
283 * psppire-selector.c: Made the orientation of the arrow a property
284 of the widget, so that it can be selected from glade.
286 2007-03-18 Ben Pfaff <blp@gnu.org>
288 * syntax-editor-source.c (close): Rename do_close to avoid naming
289 conflict with POSIX function of same name.
291 Tue Mar 13 17:20:05 CET 2007 John Darrington <john@darrington.wattle.id.au>
292 * psppire.c: Changed gtk_init to gtk_parse_args, followed by a delayed call to gdk_init, so that psppire --version will succeed, even if it
293 cannot connect to a display .
295 Wed Mar 7 19:05:12 CET 2007 John Darrington <john@darrington.wattle.id.au>
297 * var-sheet.c: Replaced call to nl_langinfo with locale_charset
300 Thu Feb 22 12:27:41 CET 2007 John Darrington <john@darrington.wattle.id.au>
302 * data-editor.c : called new gen_quoted_string function to properly
303 quote filenames in generated syntax.
305 * window-manager.c : Converted name from filename encoding to UTF8
306 before displaying in title bar.
308 Tue Jan 30 20:13:46 WST 2007 John Darrington <john@darrington.wattle.id.au>
310 * psppire-dict.c: Call all the callbacks when a new dictionary becomes current.
312 * data-editor.c: Clear existing file name on FILE NEW.
314 Sat Jan 27 09:48:21 WST 2007 John Darrington <john@darrington.wattle.id.au>
316 * var-type-dialog.c: Fixed bugs closing window, apparent when compiled
319 Fri Jan 26 15:51:34 WST 2007 John Darrington <john@darrington.wattle.id.au>
321 * psppire-var-select.c psppire-var-select.h : Deleted.
323 * psppire-selector.c psppire-selector.h : New files.
325 * transpose-dialog.c transpose-dialog.h : New files.
327 * psppire-dict.c psppire-dict.h : Added missing GtkTreeModel
330 * weight-cases-dialog.c weight-cases-dialog.h : Re-implemented,
331 using new PsppireSelector widget.
333 * dict-display.c dict-display.h : New files.
335 * psppire-object.c psppire-object.h : Deleted. Seemed like a good idea at the time.
337 Tue Jan 23 21:10:01 WST 2007 John Darrington <john@darrington.wattle.id.au>
339 * helper.c helper.h: New function execute_syntax.
341 * syntax-editor.c syntax-editor.glade: Disabled data open/save menu
344 * data-editor.c data-editor.glade data-editor.h: Enabled data
345 open/save/save_as menu-items.
347 * window-manager.h window-manager.c (default_window_name) : New
350 Sat Jan 13 07:47:26 WST 2007 John Darrington <john@darrington.wattle.id.au>
352 * psppire-case-file.c psppire-data-store.c psppire-dialog.c
353 psppire-dict.c psppire-var-select.c : Replaced identifier 'signal'
354 with 'signals' to avoid conflict with sysv based systems which use
355 this identifer for something else.
356 Thanks to Daniel E WILLIAMS for reporting this problem.
358 Wed Jan 10 07:20:39 WST 2007 John Darrington <john@darrington.wattle.id.au>
360 * psppire-case-file.c : Make sure there is always a valid flexifile
362 * psppire-data-store.c : assertions.
364 * psppire.c: Ignore replace source callbacks if the new source is
365 not of storiage_source_class
367 * syntax-editor.c: Close/Abort source after parsing is complete.
369 Sun Jan 7 08:38:29 WST 2007 John Darrington <john@darrington.wattle.id.au>
371 * psppire-dict.c: Add FILTER_CHANGED and SPLIT_CHANGED signals
372 corresponding to the callbacks in src/data/dictionary.c
374 * data-editor.c : Connect functions to the FILTER_CHANGED and
375 SPLIT_CHANGED signals to update the status bar accordingly.
377 Mon Jan 1 10:37:07 WST 2007 John Darrington <john@darrington.wattle.id.au>
379 * psppire-case-file.c psppire-case-file.h: Changed the backend
380 semantics. An object is now created without any backend. A new function ( psppire_case_file_replace_flexifile ) sets the backend to use.
382 * psppire-data-store.c : Updated callers accordingly.
384 * psppire-dict.c psppire-dict.h : New function
385 (psppire_dict_replace_dictionary) .
387 * psppire.c : Updated to use new dataset replace_{source, dictionary}
390 * syntax-editor.c : parses in state CMD_STATE_DATA unless there are
391 no variables in the dictionary.
393 Mon Dec 25 12:38:24 WST 2006 John Darrington <john@darrington.wattle.id.au>
395 * data-editor.c data-editor.glade: Enabled deleting of variables from
398 Mon Dec 25 11:28:29 WST 2006 John Darrington <john@darrington.wattle.id.au>
400 * psppire-dict.c psppire-dict.h: Removed explicit signal emit calls.
401 These are not required, now that src/data/dictionary.c has callbacks
403 Mon Dec 25 08:49:57 WST 2006 John Darrington <john@darrington.wattle.id.au>
405 * var-sheet.c val-labs-dialog.c val-labs-dialog.h: Fixed bug in value
408 Sun Dec 17 08:26:10 WST 2006 John Darrington <john@darrington.wattle.id.au>
410 * syntax-editor-source.c syntax-editor-source.h syntax-editor.h:
413 * message-dialog.c : Now reports the filename and line number in
416 * psppire.c psppire.glade syntax-editor.c: Added the ability to run
417 syntax from the syntax editor.
420 Sat Dec 16 14:13:07 2006 Ben Pfaff <blp@gnu.org>
422 * psppire-data-store.c (geometry_get_justification): Don't assume
423 that ALIGN_* and GTK_JUSTIFY_* values coincide.
425 Sat Dec 16 14:10:43 2006 Ben Pfaff <blp@gnu.org>
427 * psppire-var-store.c (text_for_column): Adjust to account for new
428 values of the MEASURE_* enums.
430 * var-sheet.c (change_measure): Ditto.
432 Sat Dec 16 12:24:35 WST 2006 John Darrington <john@darrington.wattle.id.au>
434 * psppire-variable.c psppire-variable.h: Deleted.
436 * psppire-dict.c psppire-dict.h: Removed the caching of the variable
437 data, which is now unecessary because src/data/vardict.h maintains
438 an association between variables and their dictionary.
440 * data-sheet.c menu-actions.c missing-val-dialog.c
441 missing-val-dialog.h psppire-data-store.c
442 psppire-var-store.c psppire-var-store.h
443 sort-cases-dialog.c val-labs-dialog.c val-labs-dialog.h
444 var-sheet.c var-type-dialog.c var-type-dialog.h: Dealt with the
445 consequences of deleting psppire-variable.[ch].
448 Sat Dec 9 20:03:04 2006 Ben Pfaff <blp@gnu.org>
450 * var-type-dialog.c (var_type_dialog_create): Use
451 fmt_dollar_template from data/format.c.
452 (dollar_format_template) Removed.
454 Sat Dec 9 07:19:53 WST 2006 John Darrington <john@darrington.wattle.id.au>
456 * syntax-editor.c : New file.
458 Tue Oct 31 19:25:31 2006 Ben Pfaff <blp@gnu.org>
460 * var-type-dialog.c: Add missing "#include <config.h>".
464 Mon Jul 17 18:21:29 WST 2006 John Darrington <john@darrington.wattle.id.au>
466 * automake.mk menu-actions.c psppire-case-file.c psppire-case-file.h
467 psppire-data-store.c psppire-dict.c psppire-dict.h psppire-variable.c
468 psppire.c psppire.glade: Adjusted code to use the new flexifile object.
470 Sat Jul 15 11:27:15 WST 2006 John Darrington <john@darrington.wattle.id.au>
472 * psppire.c psppire.glade automake.mk icons/* : Added toolbar icons where
473 there's no suitable gtk stock icon.
475 Tue Jul 4 09:08:38 WST 2006 John Darrington <john@darrington.wattle.id.au>
477 * psppire.c: Fixed --help and --version options.
479 Sat Jun 24 16:56:22 WST 2006 John Darrington <john@darrington.wattle.id.au>
481 * menu-actions.c: Added goto case and sort cases dialogs.
483 * psppire-case-file.c psppire-case-file.h: Added sort function.
485 * psppire-data-store.c psppire-variable.c psppire-variable.h:
486 Renamed psppire_variable_get_index to psppire_variable_get_fv and
487 dealt with the consequences. Added a psppire_variable_get_index
488 function which actually does what the name suggests.
490 * psppire-dict.c psppire-dict.h: Implemented GtkTreeModel interface,
491 which allows a dictionary to be displayed in a GtkTreeView.
493 * psppire.glade: Added dialog boxes for Goto Case and Sort Case.
495 * sort-cases-dialog.c sort-cases-dialog.h (new files).
497 Mon Jun 19 18:10:53 WST 2006 John Darrington <john@darrington.wattle.id.au>
499 * psppire-case-file.c psppire-case-file.h (new files)
501 * automake.mk data-sheet.c data-sheet.h menu-actions.c
502 psppire-data-store.c psppire-data-store.h psppire-dict.c
503 psppire-dict.h psppire-var-store.c psppire.c
505 Replaced psppire-case-array.c with psppire-case-file.c, so as to
506 allow an arbitrary number of cases to be represented.
508 Sun Jun 4 15:50:28 WST 2006 John Darrington <john@darrington.wattle.id.au>
510 * psppire-var-store.c, psppire.c, var-sheet.c : Unlimited the number of
511 variables that can be displayed. Minor i18n issues.
513 Tue May 30 19:53:35 WST 2006 John Darrington <john@darrington.wattle.id.au>
515 * menu-actions.c menu-actions.h psppire.c: Fixed up load/new
516 interactions with startup.
518 * psppire-data-store.c: Fixed bad i18n call.
520 * pspppire-var-store.c, psppire-var-store.h: constness.
522 * helper.c: Implemented proper way to convert from PSPP to UTF8 encoding.
525 Sat May 27 16:25:38 WST 2006 John Darrington <john@darrington.wattle.id.au>
527 * customentry.c data-sheet.c menu-actions.c message-dialog.c
528 missing-val-dialog.c psppire-data-store.c psppire-var-store.c
529 psppire.c psppire.glade var-sheet.c: Fixed internationalisation.
531 Thu May 25 18:01:17 WST 2006 John Darrington <john@darrington.wattle.id.au>
533 * psppire-var-store.c: Converted strings to utf8 and returned them on the
536 Sat May 20 21:08:18 WST 2006 John Darrington <john@darrington.wattle.id.au>
538 * data-sheet.c, menu-actions.c menu-actions: Fixed data sheet so that
539 active cell is never on a deleted variable.
541 * psppire-data-store.c psppire-data-store.h: Added get_var_count and
542 get_case_count functions.
544 * psppire-dict.c: removed VARIABLE_DELETED (singular) signal.
546 * psppire.c: Allowed user to specify *.sav file on command line.
548 Mon May 15 20:01:25 WST 2006 John Darrington <john@darrington.wattle.id.au>
550 * menu-actions.c psppire-case-array.c psppire-case-array.h
551 psppire-data-store.c psppire-dict.c psppire-dict.h
554 Initialised new cases to SYSMIS/blank when inserting in data sheet.
556 Sat May 13 08:00:50 WST 2006 John Darrington <john@darrington.wattle.id.au>
558 * data-sheet.c, helper.c, helper.h, psppire-data-store.c,
561 Set free_strings flag so that the gtksheet frees the string data
562 when it's done with them.
564 Thu May 11 22:25:49 WST 2006 John Darrington <john@darrington.wattle.id.au>
566 * data-sheet.c helper.c helper.h psppire-data-store.c psppire-var-store.c
567 psppire.c: Converted strings to utf8 before passing to gtksheet.
569 * psppire-dict.c: Changed buffer to more reasonable length
571 * var-sheet.c: Changed maximum string length to use macro from
575 Sun May 7 10:07:28 WST 2006 John Darrington <john@darrington.wattle.id.au>
577 * psppire-data-store.c: Fixed buglet initialising string members.
579 Thu May 4 18:04:04 WST 2006 John Darrington <john@darrington.wattle.id.au>
581 * message-dialog.c message-dialog.h: Added simple queuing to messages
582 reported, and ensure that dialog boxes dont appear when pointer grab
585 * psppire-data-store.c: Fix overflow on very long string variables.
587 * automake.mk: Fix broken dependency.
590 Tue Apr 25 11:08:04 2006 Ben Pfaff <blp@gnu.org>
592 Finish reforming error message support. In this phase, move
593 message.c into libpspp.
595 * automake.mk: (src_ui_gui_psppire_SOURCES) Remove src/message.c.
597 Tue Apr 25 10:56:53 2006 Ben Pfaff <blp@gnu.org>
599 Continue reforming error message support. In this phase, drop
600 actual message printing from core code, substituting a callback,
601 and add the callback to each UI. Also, move verbose_msg() into
604 * automake.mk: (src_ui_gui_psppire_SOURCES) Add src/message.c.
606 * message-dialog.c: (message_dialog_init) New function.
607 (vmsg) Rename handle_msg(), rewrite as callback function.
610 (msg_assert_fail) Removed.
611 (verbose_msg) Removed.
613 * psppire.c: (main) Call message_dialog_init().
615 Sun Apr 23 22:07:49 2006 Ben Pfaff <blp@gnu.org>
617 Continue reforming error message support. In this phase, get rid
618 of message "titles" and put the message text in `struct error'.
619 Now `struct error' encapsulates a message more properly.
621 * message-dialog.c: (err_vmsg) Rename err_msg(). Updated
624 Sun Apr 16 20:45:35 2006 Ben Pfaff <blp@gnu.org>
626 Continue reforming error message support. In this phase, we
627 divide the classification of messages along "category" and
630 * message-dialog.c: (vmsg) Use severity and category in
631 straightforward fashion instead of the less obvious "class".
632 (err_vmsg) Construct class before passing along to vmsg().
634 Sun Apr 16 16:06:54 2006 Ben Pfaff <blp@gnu.org>
636 Continue reforming error message support. In this phase, we get
637 rid of VM() and the other msg() support for "verbosity", replacing
638 it by a new function verbose_msg().
640 * message-dialog.c: (verbose_msg) New function.
641 (err_cond_fail) Removed (dead code).
642 (err_failure) Removed (dead code).
644 Sun Apr 16 11:53:25 2006 Ben Pfaff <blp@gnu.org>
646 Start reforming error message support. In this phase, we get rid
647 of "installation errors" and change all uses of msg() in the
648 output drivers to uses of error() or error_at_line().
650 * message-dialog.c: (vmsg) Removed IE, IS support.
652 Mon Mar 13 16:42:44 WST 2006 John Darrington <john@darrington.wattle.id.au>
654 * psppire.c: Supported (sort of) the --help and --version options.
656 * Rename error-dialog.[ch] -> message-dialog.[ch]
658 * Moved code from the psppire module.
660 Sat Jan 28 16:22:23 WST 2006 John Darrington <john@darrington.wattle.id.au>
662 * Separated the data out of the GtkSheet.
664 Tue Nov 2 19:00:28 WST 2004 John Darrington <john@darrington.wattle.id.au>
666 * Very first incarnation.