File: ChangeLog.old

package info (click to toggle)
blootbot 1.1.0-2
  • links: PTS
  • area: main
  • in suites: woody
  • size: 1,420 kB
  • ctags: 586
  • sloc: perl: 15,941; sh: 154; makefile: 56; sql: 45
file content (1015 lines) | stat: -rw-r--r-- 44,103 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
v1.0.0 (20000725): bug fixes mainly.
	- GmLB found that scripts/setup_*.pl didn't work. Fixed.
	- Fixed warning in Modules/Uptime.pl for clean install.
	- More fixes for scripts/*mysql*.pl from GmLB.
	- Added command 'hex'.
	- GmLB fixed mysql2txt.pl and txt2mysql.pl. You can now import and 
	  export to inforbot 'factpacks'.-

v1.0.0RC3 (20000720): bug fixes mainly.
	- Debian.pl's infoPackages() now checks for incoming 
	  automatically and shows the new file.
	- irq/dan found the bot wouldn't run if a stale (invalid) pid
	  file exists. Fixed.
	- Created &closeDCC(), &closePID()
	- Added factoid SAR of (3-123) => 53

v1.0.0RC2 (20000707):
	- Ported back Berkerley DBM support. 95% of it works :)
	- Also added pgSQL support.  Will not work out-of-the-box.
	- Updated README.
	- Fixed up 'modules.pl' a bit so if anything fails, it exits
	  gracefully.  Module reloading should work better now.
	- DCC CHAT commands now must have '.' prepended otherwise all text
	  will me broadcasted to the dcc chat arena.
	- Removed command 'part'.  Use 'kick' instead :)
	- 'random|cookie' now takes argument to narrow down randomness.
	- Merged 90% of MbM's@OPN modifications. Thanks.
		=> bug fixes here and there
		=> 'tell' fixed.
		=> checks for owner of factoids for delete/modify factoids
	- Moved Factoids/db* to .
	- Misc stuff here and there.

v1.0.0RC1 (20000701):
	- Added several hacks (run away fork) due to bot misbehaving.
	- Added deop.
	- Added ability to disable factoid support.
	- Reorganized source tree to be more modular.
		- Created dirs: IRC, Factoids.
		- moved partial core.pl and PerlMod.pl to modules.pl
		- renamed Modules.pl to CommandStubs.pl
	- Added command 'cycle'.
	- hardguy/max noted that insult was borked.  It wasn't converted
	  to the new fork format. Fixed but untested.
	- Added 'ircstats' command. forgot about DisconnectReason
	- Added to-expire-time on 'ignorelist'
	- Forgot to clear %ignoreList on loading the list.
	- moved 'ignorelist' from DCC-only to public/private msg.

v1.0.0pre11 (20000601):
	- we call &ircloop() if we want to reconnect. Any harm to perl?
	- Wingate fixed yet again. maximum time for response is 6secs in
	  order to cache maximum number of hosts.
	- Added ban() for Wingate.
	- Forgot about virtual host support when changed over to Net::IRC
	- process() still calls shmCycle() just in case.
	- Added limit to how many random things we can have in a factoid
	  to prevent endless loops from occurring.
	- All debian stuff now fully forks -- good.
	- Failure on &loadMyModule() now deletes $forked{$label}.
	- if instructed to join a channel "manually", tell who did it on
	  join.
	- Debian module now searches woody's non-US properly. Misc fixes
	  here and there.
	- Removed non-working mysql table locking code.
	- Freshmeat.pl now uses LWP::Simple's getstore. How to load the
	  file on-the-fly?
	- Looked at Modules-Reload and implemented idea in the bot.
	- Forgot about flushing uptime in scheduler.
	- Added unit conversion feature to bot, based on Units-Convert
	  package (at CPAN).
	- Converted several scalars to hashes.
	- Added slashdot,freshmeat and kernel announcements of new stuff.
	- merged chanstats into one line, added top msg stats.
	- Wingate now does intelligent on-the-fly caching and flushing to
	  a wingate file to prevent dupes. UNTESTED
	- "find pident potato" now works after few mods/hacks :)
	- ...

v1.0.0pre10 (20000523):
	- Fixed minor problems in Debian.pl, I hope.
	  => DebianDownload now calls generateIndex() if a download is
		successful.
	  => More clean ups.
	  => generateIncoming() forgot about checking stale of idxfile.
	- Modules in Modules/* now dynamically loaded. Using about ~200k
	  less ram now.
	- Added support of user modes with param{ircUMODE}. Requested by
	  Flugh.
	- hookMsg modified, we don't check ignore list if we're not
	  addressed or minvollength is defined. flooding is now
	  configurable by repeated message and total message, expire time
	  and count, like eggdrop.
	- nickometer didn't reset the score. noticed by greycat+others.
	- &setupScheduler() scheduler is only called once.
	- UIS now supports proper locking and lock check.
	- verifyUser didn't set userHandle to 'default' if not found.
	- Added factoid reply support of '(blah1|blah2)?'
	- Added 'FAQ'.
	- Added DebianExtra.pl module to list bugs. a hack and ugly!
	- Finally fixed list of old topics in Topic.pl, courtesy of mux
	  and nicholas_.
	- Removed usage of quotemeta, replaced with \Q\E pair for regex.
	- Included patches to modify stock-brokeness of perl modules.
	  'cd /usr/lib/perl5; cat *.patch| patch -p0'
	- Setup option whether to cache user online stats. Disabling will,
	  for sure, won't bloat the bot by 2-4megs (but why that much?).

v1.0.0pre9 (20000512):
	- Typo for outsider checking. Noticed when #debian flooder came
	  back yet again :)
	- seenCycle was in minutes instead of days. fixed.
	- Added User Information Services module. requested by Flugh.
		=> 'uinfo <nick>'
		=> 'uinfo set <type> <what>'
		=> 'uinfo unset <type>'
	- Added &IsNickInAnyChan($nick);
	- Added &DCCBroadcast($txt) to broadcast messages to all members
	  of DCC CHAT.
	- &say() now changes '0' to 'zero' due to Net::IRC bug.
	- Added &GetNickInChans($nick);
	- Merged fooz's wingate scanner.
	- Added 'ignoreAutoExpire' to differentiate time for ignore due to
	  flooding instead of 'ignore' through DCC CHAT.
	  => remove time for 'ignore' through DCC CHAT?
	- Added &debianCheck() to check state of gzip'd files.
	- ...

v1.0.0pre8 (20000505):
	- usual backlash from upgrade.
	- added 'useStrict' option to infobot.config.
	- added 'reload', to reload Core and Extras Modules. Does it
	  reload only if the file has changed?
	- added preliminary (debug) code for ftpGet() for truncated
	  downloads. regetting will be added soon afterwards.
	- minor fix for Debian.pl where a package exists but an
	  incomplete Packages file may not have info on that package.
	- Modified on-the-fly ignore to be temporary. temporary ignore
	  requested by jCommons.
	- added 'factstats requester'.
	- preliminary use of scheduler for &checkPing() in &on_init().
		no event hook on 'pong' :(((
	- Timers now use Net::IRC's scheduler, woohoo. Nice change over.
	  Moved ProcessExtras.pl to Schedulers.pl.
	- Added 'factstats deadredir'.
	- Don't prevent auto-reconnecting due to disconnection.
	- Forgot initialization before any new IRC connection.
	- Added scheduler for checking IRC connection.
	- Fixed problem in Freshmeat module, if forked to download, would
	  not continue with query. => now it does, nice hack.
	- Debian module should generate incoming index if does not exist.
	- Chatting can be done through DCC CHAT.
	- ...

v1.0.0pre7 (20000426):
	- INSTALL and README updated.
	- auto-request for ops after joining all channels instead of after
	  each channel join.
	- If factoid is requested by someone, show literally (no
	  evaluation) if owner of factoid matches aswell as if requested
	  privately(good idea?)
	- on_notice fixed and debugging info removed.
	- Added reconnect on HUP if we're not connected. I hope that it is
	  set to 0 otherwise this solution is dead.
	- ';' added as address char.
	- maths bug found by NoNix4.
		eg: 6000.0/9.000 - 6.000/9.000 - 666.00001
	- nickometer bug (pi not defined) found by ddent. 'strict' cleanup.
	- Preliminary CLI code included. Good for local use.
	- typo in Topic.pl, found by jCommons. Fix for NULL topic.
	- minor Debian.pl update to deal with 'missing files' on download.
	- multi-shmwrite support added. looks like it doesn't "refresh"
	  the value properly if written many times.
	- &verifyUser() only used if addressed.
	- Applied 'use strict' to all code. Also used 'use vars qw()'.
	- Added 'backlog #' to DCC CHAT. requested by jCommons.
	- ctcp version reply wrong; FIXED. found by fooz.

v1.0.0pre6 (20000407):
	- README updated.
	- Added retry on failure to reconnect through on_disconnect();
	  REMOVED -- this spun an endless loop.
	- Found why Googling didn't work. See README for fix.
	- Forgot about channel casing bugs (on_{join|part}) after
	  changeover to Net::IRC.
	- Changed addForked() to cycle through fork list and delete stale
	  forks in case a forked child dies unexpectedly.
	- Renamed allowOutsiders to disallowOutsiders just in case if the
	  option is removed from the configuration.

v1.0.0pre5 (20000331):
	- setup_users.pl. DBI*() => sql*().
	- 'topic add BLAH' on empty topic would bork. Why didn't I pick
	  this up before?
	- Somehow I removed (or it wasn't there) 'my @results' from
	  searchTable();
	- nickometer now uses loadPerlModule()... another 500 kB saved :)
	- repeat flood detection prevention added.
	- Added el-cheapo hash key counter... possible leak detector.
	- Added 'factstats lame' for short and most probably stupid
	  factoids.
	- Weather module removed
	- Renamed 'join' to 'joinchan' to due warning//conflict raised
	  with perl 5.005 (on potato not slink).
	- Disabled syscall (removes 300 kB on slink, 3megs on potato)

v1.0.0pre4 (20000323): pseudo AutoLoader support.
	- 'infobot' now first loads core.pl and logger.pl.
	- timerExpire() fixed.
	- Added unique maintainer count to 'dstats'.
	- Added demand-on-load of external perl modules. Now we need
	  dynamic(on demand) loading of 'Modules/*.pl' modules ;)

v1.0.0pre3 (20000319):
	- Fixed Freshmeat.pl not to show duplicate packages found by
	  'name' and 'oneliner' search. Made showPackage() function.
	- Debian modules now does multi distro. (woody's non-us appears to
	  be different structure so does not work :(, very crude hack... 
	  may not even work).
	- Added subfactoid randomising. eg: '(one|two|three)'.
	- 'dauthor' now works!
	- karma fixed... used the wrong var name.
	- Fixed doubling of text when message from 'nick' is ignored.
	- Added 'redir' to designate one factoid as master and duplicates
	  as redirectors//slaves.
	- Added addressing recognition character(s) support. eg "!status".
	- Seen info now cached and flushed at intervals or upon exiting.
	- Added 'EXAMPLES' file to doc/.
	- Removed ancient '&channel()'.
	- Bug fixes after offshore installation of bot.
	- Debian output of 'info' fixed. looks like 'fm', heh.
	- Debian distro stats added. I'm competing with larne and his mods
	  to dpkg@OPN#debian :) so far so good.
	- Forgot to close shm upon exit, heh :) However this does not
	  prevent leakage when the bot crashes.
	- Parameter 'forking' now works, courtesy of generic &Forker()
	  function, woohoo! Now we use &Forker() for _everything_.
	  I had this in the todo list, removed it and decided to implement
	  it once and for all.
	- More bug fixes when moved changes to 'apt'. Several "bug
	  reports" sent from #debian, thanks!
	- Moved infobot communications _after_ ignore checking code.
	- babelfish changed format? disabled for the time being.
	- ...

v1.0.0pre2 (20000310): BETA TEST RELEASE
	- Hacked multiple mysql connection support in.
	- Renamed DBI to SQL, including functions.
	- Added $ishost.
	- Added backup scripts to create and mirror tables.
	- listauth fixed.
	- Added parse_warn.pl to decipher warn messages from logs.
	- shm* now works. no more fork floods ;)
	- Applied fork protection on all forking modules.
	- Dict feature now supports specific retrival of definition,
	  however, default is still random.
	- Debian feature now supports multiple sub distributions. This can
	  be further extended to architecture (perhaps easily).
	- Added (but commented) larne's regex for debian search.
	- Added &hasParam() to include notification that a feature
	  (command) requested is disabled in configuration.
	- Added dumping of memory stats.
	- Fixed broken timerExpire().
	- Added auto shutdown of bot if too much ram is used.
	- Modified seen feature, set to off by default.
		- UPDATE: fixed, about time.
	- Improved parse_warn.pl to be like "diff".
	- Dollar variable addition?? suggestions by ddent.
	- 'factstats dupe' now ignores '<REPLY> see'.
		- UPDATE: fixed.
	- Added random factoid timer.
	- Don't redownload file via getFTP() if local and remote sizes are
	  the same.
	- Added $count{'Dunno'} for unanswered questions.
	- Fixed 'blah is also or' since we didn't allow 'or'.
	- Added 'factstats redir' to display factoid redirections.
	- Grep nick from list of nicks in IsNickInChan(). Bug found by
	  Mercury.
	- Time taken and final xfer rate displayed in FTP.
	- Fixed bug where 'or' is eval'd in Math.pl. Return '' if eval()
	  is not done. Bug found by dent.
	- Added 'factstats redir' to list working and non-working
	  redirected (symlink) factoids.
	- cmdstats now sorted by highest->lowest usage.
	- ...

v1.0.0pre1 (20000130):
	- Mostly converted to Net::IRC, quite nice, like the dbm to mysql
	  change over :)
	- Removed IrcHooks.pl and CTCP.pl.
	- Moved hooks stuff to IrcHooks.pl.
	- Moved IrcExtras.pl to Irc.pl.
	- Removed ansi_control option. colors can be stripped within
	  &status() anyway, like for logging.
	- Added DCC CHAT and DCC SEND support base.
		- DCC SEND: null file. due to fork()? Fixed anyway.
		- DCC CHAT: person's responsibility to close DCC CHAT.

v0.99pre12 (20000125):
	- Added intelligent flood protection and removed factoid
	  repetition prevention.
	- Modified Math.pl...
	- Unified tell code in Process.pl.
	- Moved variable fix and addresing code to IrcHooks.pl
	- Moved tell code from Question.pl to UserExtra.pl.
	- Found that % and \ were double backslashed; added it to invalid
	  factoids. May have been caused by whoever unbacked up 'apt',
	  cerb? :) May want to add a function to automatically fix badly
	  formed factoids.
	- Added 'factstats profanity', with &hasProfanity($str).
	- Added functions for shared memory usage.
	  Uses: prevent exploitation of forked processes.
	- Added 'factstats unrequested'.
	- stale variables (vhost_name) forgotten in changeover.
	- UPDATE:
	- Fixed major leak with cycling of flood messages, typo :)

v0.99pre11 (20000123):
	- Fixes here and there...
	- Debian find now searches Package names. Fallback automatically 
	  to contents file search.
	- Fixed typo related to log cycling.
	- Added netsplit detection code.
	- Started DCC support... very early stages.
	- Replaced several 'foreach' statements with 'if' for efficiency.
	  About 5 instances of code...
	- Debian contents search ignores man pages (unless search string
	  obvious for man page). Suggested by sgore.
	- 'factstats locked' returns list instead of only count.
	- &DoModes() bug found by larne.
	- Used '$nick' instead of 'lc $nick' for $channels.
	  Found by larne.

v0.99pre10 (20000119):
	- Fixed bugs found when moved code to 'apt':
		- added '^' and '|' to $isnick.
		- removed 'local' and 'my' for some global vars.
		- Typos of some variable names.
		- More typos.
	- Debian.pl contents search is better now.
		- UPDATE: made changes suggested by greycat.
		- Added Packages query now...
	- Added &getRandomLineFromFile()
	- Added LART, random text, Channel limit adjuster.
		TODO => Wingate checker (NOT COMPLETED)...
	- Added &iseq() and &isne().
	- Help info is not cached any more => loaded each time help() is
	  called.
	- Added %timer hash, timestamp when something was last done. The
	  hash name is incorrectly named, eh?
	- Moved parts of Process.pl to ProcessExtra.pl.
	- Moved parts of User.pl to UserExtra.pl.
	- Moved myRoutines.pl to UserExtra.pl.
	- Moved Extras.pl to Modules.pl.
	- Removed fortran math due to poor code style.
	- Moved parts of Question.pl to UserExtra.pl.

v0.99pre9 (20000115):
	- Added messagecount column for 'seen'. Not used as yet. It
	  appears to be pointless, yes?
	- Cleaned up DBI.pl: made use of $dbh->quote(); added
	  &DBIRawReturn(), &DBIInsert(), &DBIUpdate().
	- Forgot to clear $tell_obj after successful 'tell'. Founded by
	  solomon.
	- Extra modules loaded only if enabled in config, may save some
	  ram.
	- Math.pl cleaned up.
	- Added DumpVars.pl, now we know where things are being leaked.
		- Removed duplicate 'use IO::Socket'.
	- Typo in "disabled" locking code which didn't work :) Founded by
	  washort.

v0.99pre8 (20000110):
	- Bailout if critical configuration variables are not found.
	- Dict.pl works well now.
	- Topic.pl now uses %topic or @topic. Added 'topic info' which
	  contains who and time info. How does @{$hash{$key}} work?
	- Used 'use diagnostics;'. Fixed most warnings.
	- Added &WARN().
	- Minor typo in &IsInvalid() on last statement, heh.
	- Fixed (DAILY) logging, finally. Was broken too many times.
	- Added &getLineFromFile() for debugging purposes. BROKEN
	- Added Debian search-engine frontend => Debian.pl.
	  UPDATE: forget mysql, takes too long.
	- Added Countdown => Countdown.pl.
	- Made use of 'unless' instead of 'if !'.
	- Added &DBIRaw().
	- Addressing required on all commands.
	- Added &fixFileList() to simplify files with common directories.
		- RevHippie stumped me with the best method to write this,
		  heh. Why do I always try to do things in 1 loop instead
		  of 2 loops?

v0.99pre7 (19991230):
	- Renamed some setup/DBI calls.
	- Simplified nickserv/chanserv code. chanserv opping may break
	  though. Experimentation?
	- Fixed broken stuff scripts/* due to src/* modification.
	- Added table locking support. BROKEN.
	- param{'ident'} deprecated.
	- Removed param{'dbname'}, please rename the main table (with
	  factoids) to factoids.*
	- Added ircII.servers support.
	- Fixed infobot, Setup.pl and Files.pl.
	- Freshmeat.pl fixed. Set the update time _before_ we update.
	- Added factoid renaming. "rename 'from' 'to'".
	- Added DBISetRow() for first time inserts, for Freshmeat.
	  Removed (rather used raw) use of fixmysqlbug for DBISetRow()
	- Added 'seen random'; fixed randKey to work with 'seen'.
	- Added preliminary code for whatis frontend.
	- Added SIGHUP code for $SIG{HUP}.
	- Added more error protection in DBI.pl.
	- Moved logDate logging support to &status@Misc.pl.
	- Confirmed logging does not duplicate from child any more.
	- Added 'partialdupe' (not recommended) and '2long' to
	  &FactStats();
	- ...

v0.99pre6 (19991223):
	- Dict now fixed, courtesy of RevHippie and myself.
	- Applied patch from RevHippie.
		- Removed auto continuation code.
		- Fixed learn =~ /HUNGRY/;
		- Added $talkok and $learnok.
	- Removed $param{'nick'} in favour of $ident. Added $safeIdent for
	  regex and made use of it.
	- Moved Help.pl, Ignore.pl, Params.pl and part of User.pl to
	  Files.pl.
	- Removed Internic.pl and Traceroute.pl.
	- Fixed $isnick, renamed and fixed &purifyNick(). Added nick
	  compliancy checks when connecting to IRC server.
	- Rewritten 'spell' code.

v0.99pre5 (19991220): bug fix release.
	- setupmysql.pl, slightly different for potato.
	- dbm2mysql.pl
	- performReply(), removed $trailing. FIX LATER.
	- Freshmeat.pl, forgot about &main::, again.
	- logType, broken date value.
	- Fixed broken 'tell blah about what', readded $answer var.
	- minLengthBeforePrivate superseeds preferReply.
	- Forgot to use 'my' on three instances of $sth.

v0.99pre4 (19991219):
	- Added 'dupe' for factstats.
	- Added illegal character detection in Statement.pl.
	- Unified output (and duplication) of factstats (and other) code
	  to use one function, &formListReply(). Reduced code by at least
	  2k :)))
	- Minor modifications to &DBIGetCol();
	- Move +s flag to 'set search' in infobot.config.
	- Altered talkMethod to allow 'private' or 'default'. Made no
	  sense to have it on public-only, heh.
	- friendlyBots will be kept to be compatible with other stock
	  infobots but soon enough multiple mysql database support will be
	  added. Will be quite nice once done.
	- Added maxListReplyCount and maxListReplyLen. Read infobot.config
	  for details.
	- Replaced $refresh with freshmeatRefreshInterval to config.
	- Changed learn setting from ALWAYS to HUNGRY.
	- Reorganised Extras.pl, we shouldn't bail out if the command
	  can be disabled as the person who runs the bot should have
	  brains.
	- Moved some Process.pl stuff to myRoutines.pl.
	- ---
	- &searchBy*() allows ^ and $, like in regex (basically sar'd).
	  removed $notexact variable.
	- Fixed 'no,blah is blah' bug.
	- Changed 'is also' char to ';;'.
	- Added &IsInvalid(); to unify Statement (when creating) and
	  factstats/broken (when checking/verifying). Works like a charm
	  :)))
	- Removed sane stuff; added infobot.ignore. I hope lenzo's
	  ignoreList code works.
	- Fixed setupmysql.pl
	- Moved repeatIgnoreInterval to minRepeat*Reply where * is Private
	  or Public.
	- Now preferReply works. Wasn't hard as it first looked.
	- Added global '+' flag support.
	- Fixed logging: added logType param; if logType =~ /DAILY/, new
	  log is created daily. Date is time-of-day, aswell.
	- added &fixMySQLBug() => adds backslash to special chars.

v0.99pre3 (19991216):
	- Fix connection bug where if host does not resolve, it appears
	  that it's connection refused. Now non-resolving hosts are
	  detected earlier. Found by some *.it (or .es??) guy.
	- Added 'sync in #s' when the bot has joined a channel... just
	  like in BitchX.
	- Added txt2mysql.pl.
	- Removed instances of '^\s*' to '^' since $message can be
	  manipulated in Process.pl.
	- Fixed Statement.pl so that it doesn't catch queries... it's a
	  stupid idea any way.
	- Removed 'confused' in favour of 'dunno'.
	- Funny hack in performReply(). Stupid but it works.
	- Added 'host' column in seen table.
	- Made use of &gettimeofday() for freshmeat and search function.

v0.99pre2 (19991213):
	- Made use of new database (directory) not to interfere with other
	  crucial dbs.
	- Re-added &getKeys(), mysql's RLIKE wouldn't like "'" in the
	  statement. If several of similar queries are required, better
	  off using &getKeys().
	- Added two more conversion scripts.

v0.99pre1 (19991211): personal release. MAJOR CHANGES.
	- create a script to add the blootbot user to the mysql server and
	  prepare tables for use with the bot.
	- butchered Question.pl, Reply.pl, Statement.pl and Reply.pl.
	- main factoid db ported over; barely tested.
	- seen ported over; appears to work.
	- karma ported over; not tested at all.
	- freshmeat ported over; fix brokeness.
	- search (listvals and listkeys) ported over.
	- rootwarn ported over.

	- Use quotemeta in DBI.pl on special chars, especially ' :)
	- Added factstats 'broken' function.
	- Made use of multiple connections to avoid clashing... does
	  clashing only occur when there's an INSERT/UPDATE or SELECT or
	  both?
	- Changed $factoid to $faqtoid... good idea? how about $lhs?
	- Changed getKeys to countKeys to take advantage of mysql.
	- Added randKey to get random primkey,key from table.
	- Removed process() when msgType == 'public action'. Why would we
	  want to care about actions anyway?
	- Fix public action; Added private action to &status().
	- Added &ERROR();
	- Made message and who flooding independent in IrcHooks.pl. Now we
	  use %flood... should be expanded to use %ignoreList;

	NOTES...
	- DBI.pl has more functions than what DBMExtra.pl had in order to
	  implement a table-like hash list.
	- &DBISet() always verifies if an entry already exists and does an
	  UPDATE instead of an INSERT... flaw in mysql or my code???
	- &DBISet() can only set one (in UPDATE, two in INSERT), variable
	  at a time. Does this impose a performance hit? like on seen.
	- ...

	TODO...
	- infobot.cgi not ported over.
	- weather not ported over.
	- add alarm call between while in Dict.pl.

*************************************************
************* CHANGE OVER TO MySQL **************
*************************************************

v0.18.2 (199912??): dropped.
	- Fix for Weather.pl.
	- Fix for Dict.pl.
	- ...

v0.18.1 (19991130): last public release before database change over.
	- Modified &IsNickInChan() so that a foreach is done case
	  insensitively against nick to prevent misses.
	- Added server "jump" support, requested by larne.
	- Added seenMaxDays, maximum number of days to keep seen info on
	  someone, otherwise delete it.
	- Forgot to use $main:: in Freshmeat.pl and Weather.pl; fixed.
	- Changed userList format to $userList{$user}{$flag}{$what} = 1;
	  Converted all code to use this userList format.
	- Changed version string to include OSname.
	- Replaced $locWho with $who or $origWho.
	- Removed hidden whitespaces and tabs at and of statments.

v0.18.0 (19991128):
	- Post release typo fixes here and there.
	- Changed lc() to tr/A-Z/a-z/ where suitable.
	- Redid join command in Process.pl.
	- Cleaned up regex (mainly .* => \S+).
	- Found $ischan to be broken; fixed.
	- Changed Slashdot3.pl to have "joining" code like in DBMExtra.pl.
	- Made use of &nick() and &IsChan();
	- Added &kick() to Misc.pl; kick command to User.pl.
	- Added &IsNickInChan();
	- Fixed loading Param file before pidfile and other file related
	  stuff.
	- User.pl
		- Revamped; removed unused functions.
		- Moved Set.pl to here.
		- Moved 4op code here.
		- Moved some functions from Process.pl to here.
		- Rewrote rehash command.
	- More casing fixes; debugging info _should_ help to find more.
	- Changed infobot.users.

v0.17.0 (19991126):
	- Netsplit code prevented stats of signoffs; fixed.
	- Messed around with logging code to prevent control chars.
	- Removed exchange and excuse module because of brokeness.
	- Applied patch from RevHippie. Thanks!
		- Added delimiter support in addressing of hello msg.
		- Removed 'score' in karma.
		- Added 'learn' (ALWAYS or ADDRESSED) support. Normal
		  operation == ADDRESSED. Bot won't respond voluntarily to
		  factoids but will respond to learning.
		- Ability to turn off minVolunteerLength.
		- More changes to prevent chatter in unaddressed manner.
	- We remove any ansi or control chars when piping to the log file.
	  RevHippie++. 
	- Added 'thanks' language.
	- Typo in Freshmeat.pl; Fixed.
	- Added $rootwarnmode = passive || aggressive to satisfy lilo@OPN.
	  default is passive.
	- Fixed mix up of fix in 'tell' code. I had the if statements the
	  wrong way around.
	- Removed more debug code.
	- FactStats/author fixed; now multiple authors with the same stats
	  are printed together.
	- Added logfile cycling w/ approx maximum size.
	- Changed infobot.config yet again. now it's much better than
	  before. Some variables removed.
	- Added Unset support to Set.pl; Changed so anything can be set
	  or unset.
	- Made use of &purifyNick() so regex doesn't break. $safeWho
	  now defined earlier.

v0.16.0 (19991122):
	- Applied bug fixes from infobot 0.44.3, added md5 password
	  support (*BSD?).
	- Added &IsParam() to check existance of params the proper
	  (strict) way.
	- Moved rootWarn stuff from Extras.pl to RootWarn.pl.
	- filenames (rootwarn and uptime) now not statically set.
	- Cleaned up config file and Setup.pl.
	- Fixed up &parsectcp() in CTCP.pl.
	- Changed ($ischan) to (\S+) in Irc.pl under PRIVMSG.
	- Major reorganisation of Misc.pl -- removed unused functions.
	- Moved some variables to 'infobot'.
	- Fixed ANSI typo by some loser; Changed format of &status()'s in
	  Irc.pl, seems to look nice thus far.
	- Added "author" command under &FactStats() in DBMExtra.pl.
	- Added case insensitivity to &IsHostMatch() and search strings in
	  DBMExtra.pl. Any more of these?
	- Removed disabled netsplit code.
	- Changed 'defined' to 'exists' on all hash lists, 'cept hashes
	  created by opening db's.
	- Modified repeat code on modified_time. If this time is small,
	  msgType is changed to 'private' for flooding reasons and
	  max_time is reduced by half. latter appears not to work???

v0.15.0 (19991112):
	- Quite funny that once the repeat code was moved to Question.pl
	  factoid extension leakage was found. maths leakage was also
	  happening but somehow is fixed when the repeat code was moved
	  back.
	- Clean up of variable names in Reply.pl and Question.pl
	- Changed 'length' to 'eq ""' or 'ne ""' where possible.
	  This should produce faster code but benchmarks prove this change
	  is neglible. Guess perl is slow :)
	- Cleaned up and fixed 'tell <who> about <what>' code.
	- Set.pl fixed; Added DEBUG to allowable set list.
	- Volunteer code moved to top of Question.pl.

v0.14.0 (19991110):
	- Message overflow fix in &FactStats().
	- Added 'factstats new' command to display new factoids in the
	  last 24 hours.
	- Fixed up ping reply, requested by a few from #debian@OPN.
	- Re-added debugging of DBMExtra due to leakage of orthaned
	  factoid extensions. Need to investigate and confirm the
	  lowercase fix of factoids.
	- Two functions which used &mkRandom() now fixed due to poor
	  effort in implementation. Added missing srand(). now the maximum
	  length of 475 should not be exceeded, hopefully. it can be
	  beefed up to 490 if needed.

v0.13.0 (19991108):
	- Made use of &help() which uses infobot.help. This paves the way
	  for NLS as suggested by njs.
	- Fixed up code on netjoin/netsplit in an effort to find
	  statistics leakage. Added debugging info to netjoin/netsplit.
	- Fixed typo (three instances) in factinfo where time() was used
	  instead of the data in the factoid extension. Found by larne.
	- Allow main thread to do a clean exit while the child does
	  nothing. Possible fix for weird uptime info.
	- Removed sar of 'your|i|you|me' to prevent automated reverse
	  persona which is better done by the user. Suggested by njs.
	- Cleaned up behaviour of &FixPlural(). Fixes a bug.
	- Repeat prevention code now replaced (moved aswell) to use
	  factoid extensions
	- Fixed 'factstats requested' error.

v0.12.6 (19991103): bugfix on bugfix release ;)
	- Fixed bug where you can't lock a factoid because the hostmatch
	  ($thisnuh = "") failed. Found by wolfie.
	- Fixed up 512byte overflow in factstats[requested].
	- hm... wonder how I broke Weather.pl.

v0.12.5 (19991101): Bugfix release
	- Fixed "bad" array in Freshmeat.pl. All appologies to scoop.
	  [update: use array[5] if it exists, otherwise do as before.]
	- Removed some debugging info from DBMExtra.pl.
	- Fixed inconsistent chanstats behaviour in SignOff.
	  [Update: forgot to delete the user info _after_ we do the stats]
	- Moved factoid stats count and repeat checking code to
	  Question.pl. Now it works as planned :) :) :)

v0.12.4 (19991028):
	- Added factstat and listauth commands.
	- 'topic add' now prepends subtopic not append.
	- Fixed up minor problem with 'topic restore last'.
	- Changed default of locking access to people who own their
	  factoid or to registered ops. This should please #debian.
	- Reduced usage of @{$var} which cannot be really deleted cleanly.
	- Moved DBMExtra-related stuff from myRoutines.pl to DBMExtra.pl.
	- Added new functions &mkRandom() and &getRandom().
	- Changed all code (Search.pl) which used random to the one
	  developed in DBMExtra.pl. => made code slightly smaller.
	- Cleaned up Search.pl to look nice.
	- Found yet another casing bug under TOPIC in Irc.pl.
	- Fixed bug where dbmextra queries where made on non-factoids like
	  maths and probably karma.

v0.12.3 (19991025):
	- Added while loop around connect which should prevent the bot
	  from falling down (dying).
	- Forgot 'main::' for &getURL in Freshmeat.pl. Changed
	  opening/closing code yet again. Removed checking on open
	  read-only.
	- Changed Dict.pl to reply private only by default. '+' will allow
	  public responses without suggestions/synonyms.
	- Added checking against pidfile. running two bots from the same
	  dir at the same time using the same db == disaster. Ask #debian
	  about it :)
	- Implemented Weather.pl.

v0.12.1 (19991022):
	- Made distribution out of infobot -> blootbot.
	- Irc.pl was prone to be fucking up -- swapped (.*) to (\S+) where
	  necessary. stab lenzo for this :) found more instances of this.
		[update: appears to trap too many of something, check
		  'chaninfo #chan' for info.]
	- Minor fix for Freshmeat.pl when opening/closing db.
	- Factoid extension code is ready for testing. possible in the
	  future to add "factstats" for like: top 3 requested factoids.
	  [update] added lock checking on sar and on updates ("no, "...)

v0.12.0 (19991020): (v0.11.6 + bugfixes + trial)
	- Major shake-up of how addressing is handled -- damn it took me a
	  long time to get this to work.
	- Changed command names in Topic.pl to &topicBlah().
	- Found and fixed (hopefully) all 7 channel casing bugs.
	- Moved freshmeat to use berkeley db instead of raw appindex.txt
	  file. finally got it to work, seems 30% faster. Creating the db
	  takes a long time though.
	- Added "set" command => Set.pl.
	- Added support of talkMethod which behaves much like lobotomy.
	  In the future, talkMethod =~ /(lobotomy|none)/ may be used.
	- Purged: METAR2.pl, NOAA.pl, UAFlight.pl.
	- RootWarn only works if the bot is opped in the channel.
	- Created performStrictReply() from performReply().
	- Quote.pl and Internic.pl now work.
	- Fixed a few typos in myRoutines.pl
	- Removed bold on dictionary.

v0.11.5 (19991012):
	- Fixed $chan to lowercase where appropriate.
	- Fixed volunteer reply code... I guess it worked before but now
	  it is somewhat cleaner and easy to understand.
	- Added factoid owner database, requested by njs.
	- If public message is addressed to someone else, we ignore it.
	- Now support referer factoids ('blah is <REPLY> see erp'). if
	  'blah' is asked, the reply from 'erp' is given.
	- OPN allows part messages -- fixed in /PART/ for $chan.

v0.11.3 (19991008):
	- Uptime.pl appears to be fixed after rewrite of getUptimeInfo.
	- Fixed up Freshmeat.pl for updating the index. Proxy is now
	  optional.
	- Moved rootWarn to RootWarn.pl. Added hall-of-fame of losers.
	- Cleaned up bugs/typo here and there which may have caused the
	  bot to behave in a weird manner.

v0.11.2 (19991006):
	- ChanInfo now displays "statistics" just like our little friend
	  BitchX.
	- Minor change in determining args on commands [myRoutines].
	- Added "cmdstats".
	- Added rootWarn checking on checks. Repeat offenders will be
	  punished. Requested by larne. [update: we aren't so harsh now]
	- Added lc $chan where appropriate. damn uppercase channames.

v0.11.1 (19991005):
	- all instances of undef on hash lists changed to delete which
	  _now_ works. found minor bugs/typos related to DUI.
	- Now skip internic whois intro (13 lines) to fix bad output.
	- Forgot to subtract $i from $counter in chaninfo when full.
		[update: whole function changed, see above]
	- Now backup (and gzip) freshmeat index file.

v0.11 (19991004): looks like a bug fix release :)
	- Fixed typo in reply of Topic.pl/&NewTopic().
	- Decreased max topic length allowed; now print it, too, for
	  debugging.
	- Altered repeat code to only work on public. Flooders should be
	  taken care of by the (allowOutsiders == 0) code. if not, there's
	  'lobotomy' :)
	- Added excess flood protection around &rawout();
	- Don't bother about outsiders if we haven't joined any channels.
	- Changed email address to one throughout modifications.
	  New files have neato headers.
	- Uptime.pl fixed, didn't need to check against ($pid == $$)
	- Repeat-prevention code kind-of looks what it was before but this
	  one, at least, works :). any problems, just bitch at me.
	- Added debugging code for chaninfo to diagnose "problem".

v0.10 (19991001):
	- Added Uptime module.
	- Added Freshmeat module.
	- Dict now returns definition without suggestions (syn's) by
	  default. Also cleaned up.
	- NickServ/ChanServ major clean up.
	- Join upon reconnect fix: set $joinchans = 0.
	- Fixed up Help.pl, added more help entries.

v0.9b (19990925):
	- Did repeat-prevention code from scratch -- now works.
	  [19991001 update]: multiplier is now 2 instead of 10.
	- Made reaction to "hello" more strict. the same should be done to
	  "thanks", don't you think?
	- Converted remaining modules to use forking. should be no more
	  bot lockups...
	- Changed maxhits to 20 for Search.

v0.9 (19990924): +16K added to patch size.
	- More, more and more major changes.
	- Fixed up inappropriate usage of performReply.
	- Added lobotomy command to (un)silence the bot.
	- Added allowOutsiders toggle to prevent usage of the bot
	  _outside_ the channels the bot is in.
	- Added $fullyaddressed, enabled if $addressed == 1 and
	  $param{addressing} == REQUIRE.
	- Readded auto-continuity code. it is disable if not fully
	  addressed. otherwise works as per normal.
	- Moved join-on-start-of-motd code to end-of-motd. If nickserv &&
	  chanserv is enabled, IDENTIFY is done first. If okay, then we
	  proceed to join channels.
	- When bot joins channel, summary of nicks (ops|voice|total) is
	  given instead of NAMES list.
	- Chanserv support moved to "end of names".
	- Detection of nickserv (no such nick).
	- join channel if channel is on our joins list and if we're not on
	  it (hrm, providing their client prevents it).
	- ...

v0.8 (19990919): +50K patch from last version.
	- Major changes, particularly cleanups and fixed a few bugs:
		- Found 2 or so instances of $params{}. Either deleted or
		  renamed to $param where appropriate.
		- Shortened foreach statements where possible.
	- Replaced duplicate code involving &say and &msg with
	  &performReply($text,[0=rand,1=strict]). -- major shortcut and
	  cleanup.
	- Added tracking of all users on channel(s). Users are
	  deleted if they disappear for whatever reason with
	  &DeleteUserInfo.
	- Tracking of channels now works; they are deleted if we disappear
	  from any channel for whatever reason (hopefully).
	- 'forget' command _SHOULD_ be wrapped with $addressed.
	- Moved 'modes' from User.pl to myRoutines.pl as 'chaninfo'.
	- Added stock quote support by using mu's script. Thanks.
	- Added param{*} around stuff in myRoutines.pl for flexibility.
	- Added auto-join on invite if not on specific "join_channels"
	- Renamed &Timetostring to &Time2String and made use of it not
	  only for status but for seen.
	- If $param{*} == false, it is now not defined.
	- Removed Auto-continuity code -- very evil for any bot commands
	  other than non-intentionally requesting a factoid.
	- crypt command required "(" before passwd???
	- Removed stupid commands which just generate URLs for you to cut
	  and paste.
	- repeatIgnoreInterval code _NOW_ works unlike before.
	- Added support for Topic.pl not to update topics if commands are
	  prepended by '-'. Topics can be "rehashed" when either a) the
	  next command is used without '-' or b) "rehash" is the next
	  command.
	- &NewTopic takes two more args to prevent repetition and now does
	  topic checking. Check code for details.

v0.7 (19990914):
	- Major clean up: Search.pl now only uses the "is" dbm; final
	  pair of parens in commands removed for legibility; Removed
	  debugging for NickServ, ChanServ to go.
	- Added multiple subtopic delete ability. requested by Mercury.
	- Moved responses/replies to [files/infobot.lang]. Modified
	  related functions to conform, including mine.
	- Fixed up Kernel.pl to use different type of sockets. Previous
	  code somehow broke itself.
	- Added, but disabled, semi-working timer support. Need to ask
	  lenzo some questions on how to implement it the best way.
	- Added channel (and offender's) notification if someone joins the
	  channel with root. requested by #debian.
	- Added dict.org support. For now, it uses wordnet and returns a
	  random definition. Could change in the future.

v0.6 (19990903):
	- Added support for nickserv and chanserv, requested by is.
	- Updated README to describe new features and modifications. Do we
	  need to elaborate on the modifications to the depth where it
	  would exceed the size of the patch?
	- Minor clean up.
	- Removed assumed-continuity of messages -- should be used if
	  addressing is in optional mode but would be bad in any situation
	  if more than one infobot existed in the channel.
	- Added parsing of g flag to factoid sar.

v0.5 (19990827):
	- Better way to confirm if bot is on channel now for topic
	  management. Also added check for +o+t or -t. &DoModes() on
	  server stuff, too?
	- Patch updated to work for infobot-0.44.2 only.
	- Found a bug in Irc.pl under "NAMES" where $u was used initially
	  but trashed afterwards. => replaced $u w/ $_.
	- Lost track of a bug found by Mercury. Seems to be fixed now,
	  somehow, heh.

v0.4c (19990822):
	- Worked on random-cookie -- random responses can now be added
	  (internally) with ease.
	- Noticed joeyh changing his nick to/from '||' which reminded me
	  of something bad ;) hint: topic management.
	- One line patch to allow '|' in factoids; delimiter is now '||'.

v0.4b (19990818):
	- Implemented patch from mu. Now it is possible to use the topic
	  command through private messages to the bot instead of the
	  channel.
	- Replaced SAR of \| with \|\| so we can still use the single
	  pipes. Double pipes will be either removed or promote an error
	  message. Found by Robot101. Added el-cheapo work-around if the
	  last char of subtopic is |, kill it.

v0.4a (19990816):
	- Added cheap fix (sleep 1, heh) to excess floods of 'topic
	  history'. Is sleep 1 enough?
	- Added 'random' for random value{key} from database.
	  Requested by jCommons.

v0.4 (19990815):
	- Fixed topic history by replacing push with unshift. Now the
	  history list is reversed and cycled properly.
	- Reversed Changes list. request by mu.
	- Totally fixed up topic history since it would break if
	  'topic add' was induced quickly. Now we only record topics set
	  by us (for reasons) and onjoin topics (set by anyone).
	- Removed 'topic last/reset' because how do you know which topic
	  is last? Better control with 'topic restore'.

v0.3c (19990813):
	- Fixed 'topic mv 2 before 1' bug. Forgot to store 'move' topic
	  before doing the foreach loop.
	- Touched up Kernel.pl in preparation for auto-notify feature.

v0.3b (19990812):
	- Added version string to new files so we know which version
	  of patch we're using (or used). There you go, Mercury ;)
	- Fixed up DecipherTopic to reject null subtopics. This would, if
	  unchanged, (theoretically but not tried, luckily) produce a
	  domino-effect of problems if the topic was to be changed.
		Update: check if the supposed null topic contains spaces
			within the nick component. If so, then it's not
			nick, therefore treat like ownerless subtopic.
	- Worked on README.

v0.3a (19990810):
	- Changed back to use topic{chan} (now topicnow{chan}) since
	  @topiclist{chan} (now @topichist{chan}) does not deal with dupes
	  or blanks.
	- Renamed 'topic last' in preference to 'topic reset'. Original
	  command can be used but is vague in meaning.
	- Fixed several typos made in Irc.pl.
	- Replaced 'defined' with 'length' in if statements.

v0.3 (19990809):
	- Applied patch from mu for Irc.pl | Topic.pl.
	- Replaced %topic hash and $topiclast with @{$topiclist{chan}}.
	  Much cleaner implementation. Thanks to mu for this. Fully
	  implemented by xk.
	- Reworked on topicbyme (was topiclast), should work now.

v0.2 (19990808):
	- Changed name of patch to funkystuph.
	- Added history/last/restore to Topic.pl by request of mu and is.
	- Reorganised help and order of commands in Topic.pl
	- Bot must be addressed to use commands.
	  	- Fixed bug if multiple infobots were in the channel.
	- One occurrence where Cipher was called instead of CipherTopic.
	- Fixed up Slashdot.pl. Problems: a) borked completely b) missed
	  first headline. el-cheapo fix but it works.

v0.1c (19990729):
	- Fixed long list{keys|values} bug, hopefully.
	- Now randomize key results from search.
	- If keys contain ',', underline to differentiate it.
	- Fixed possible DoS against Kernel.pl.
	- Bug fixed with Kernel.pl repeating itself.
		- Typo of @results [one occurrance of @result]

v0.1b (19990723):
	- Fixed bug with &CipherTopic where, if no owner was found, it
	  would just use NULL. [like "Topic ()"]
	- Added kernel feature.
	- Moved error messages to public/private, depending on behaviour.
	  Help-related stuff is private(msg) only for convenience.

v0.1a (19990721):
	- Misc cleanup, removed repeated code.

v0.1  (19990720):
	- Initial release.