1[Changes 1.2.1]
2
3* Prefer <fcntl.h> over <sys/fcntl.h> (reported by ncopa). (caf)
4
5* Fix overflow in say() when handling a maximum-length client message. (caf)
6
7* Remove WANT_CHAN_NICK_SERV define and include network services commands
8  by default. (caf)
9
10* Pass through externally-provided CPPFLAGS (reported by cpet). (caf)
11
12* Don't set the mode on new channels until synched - this speeds up joining
13  lots of channels at connect time if one of them is new, and reduces the
14  chance of being flooded off the server. (caf)
15
16* Correctly handle channel sync across multi-server. (caf)
17
18* Fixes and improvements for channel logging. (caf)
19
20* Use correct (MODECHAN and MODEUSER) display level for channel and user
21  modes. (caf)
22
23* Allow %- status format to handle max-length topics (reported by oxy). (caf)
24
25* Add /FSET WOHIS_LOGGEDIN for services login info on hybrid, ratbox and
26  ircu. (caf)
27
28* Add sanity checking of incoming nicknames. (caf)
29
30* /MV (massvoice) shouldn't send +v for already-voiced users. (caf)
31
32* Fix lag check on recent 32 bit OpenBSD / NetBSD (reported by DJ). (caf)
33
34* Fix key bindings that terminate with ^. (caf)
35
36* Fix the $timer() scripting function. (caf)
37
38* Fix the /TKB (timed kickban) command. (caf)
39
40* Rewrite termcap/terminfo detection logic in configure and include term.h
41  in term.c for the system definition of tparm().  This fixes a crash on
42  NetBSD x86-64 (reported by jeezy), and should also ensure that terminfo
43  is used in preference to termcap on NetBSD. (caf)
44
45* Fix output when built against termcap. (caf)
46
47* Fix STATUS_NOTIFY so that it appears in the right window. (caf)
48
49* Improve robustness of status formats handling. (caf)
50
51* Use system setenv() in preference to compat bsd_setenv(). (caf)
52
53* Allow selection of alternate hashing methods with $crypt(). (caf)
54
55* Improve the initial seeding of the randm() fallback RNG. (caf)
56
57* Strengthen the cookie generation algorithm for /detach. (caf)
58
59* RANDOM_SOURCE now only affects the rand() scripting function. (caf)
60
61* Make RANDOM_LOCAL_PORTS actually random. (caf)
62
63* Show same message on local terminal as used in emergency exit QUIT. (caf)
64
65* Remove unused XLINK CTCP reply handler. (caf)
66
67* Ensure add_socketread() doesn't leak file descriptors. (caf)
68
69* Fix listing bans on local channels (/BANS &channel). (flashback)
70
71* Fix unbanning by number (/UNBAN #channel #number). (caf)
72
73* Improve the list_channels() function. (caf)
74
75* Use socklen_t instead of plain int where available. (flashback)
76
77* Use <termios.h> in preference to <sys/termios.h> where it's available. (caf)
78
79* Skip malformed abots.sav entries in read_abot(), avoiding null
80  dereferences found by Coverity. (flashback)
81
82* Ensure proper handling of % when /FSET DCC is used. (caf)
83
84* Improve robustness of CDCC save file loading. (caf)
85
86* Fix open file leak in /LASTLOG found by Coverity. (caf)
87
88* Fix file descriptor leak on SOCKS4 connection failure found by
89  Coverity. (caf)
90
91* Fix out-of-bounds error in cryptit() found by Coverity. (flashback)
92
93* Cleanup save_formats(). (caf)
94
95* Fix off-by-one error in add_socketread() and set_socketwrite() found
96  by Coverity. (caf)
97
98* Fix longstanding bug with ordering of rfc1459[] array. (caf)
99
100* Fix crash after /SETAR -, reported by riderplus. (caf)
101
102* Remove special handling of 484 numeric, which is no longer needed and
103  was buggy (making BitchX think that usermode +G was set). (caf)
104
105* Add /OBITS command, shows obituaries for some BitchX friends. (caf)
106
107* Fix abuses of the RESIZE macro.  Reported by nenolod. (caf)
108
109* Clears up a crash and some build warnings in the acro plugin. (caf)
110
111* Applied patches from jdhore to clean up the plugin building
112  and installing process. (caf)
113
114* Fix building on newer Cygwin (reported by VICODAN). (caf)
115
116* Fix building plugins on FreeBSD-10 (reported by cpet). (caf)
117
118* Messages sent to channels should use lastlog level PUBLIC, not MSG. (caf)
119
120* panasync OK'd releasing tcl.c, so here it is. (caf)
121
122* Fix QUIT messages with SSL connections. (flashback)
123
124* Rename include/bitchx to include/options.h, fixes building on
125  case-insensitive platforms. (caf)
126
127* Use AI_ADDRCONFIG flag to improve server address selection when client
128  is built for IPv6 but we don't have an IPv6 address. (caf)
129
130* Enable SSL support by default, if OpenSSL is present at build time. (caf)
131
132* Fix leak and potential crash in lame_resolv() using IPv6.  (caf, snadge)
133
134* Apply patch from snadge defining BIND_4_COMPAT on OpenBSD, to allow
135  /nslookup to build. (caf)
136
137* Fix problem connecting to IPv4 when IPv6 enabled on FreeBSD and enable
138  IPv6 on all supporting platforms. Thanks to brabes, snadge and packet. (caf)
139
140* Improve connect() error handling. (caf)
141
142* Remove obsolete .spec files. (caf)
143
144* configure - only create sig.inc if it's actually needed. (caf)
145
146* configure - use the right dependencies when checking for net/if.h, i
147  arpa/inet.h and resolv.h. Reported by flashback. (caf)
148
149* Fix plugin Makefiles for out-of-tree building, reported by nyet. (caf)
150
151* Add DESTDIR support to build system, to ease rpm and deb packaging.
152  Reported separately by nyet and VICODAN. (caf)
153
154* Fix /detach and wserv with IPv6 enabled. (caf, snadge, packet)
155
156* Make default for NICK_COMPLETION_CHAR explicit. (caf)
157
158* Reduce footprint when starting up disconnected. (caf)
159
160* Fix /nslookup command (including fixing compilation on cygwin). (caf)
161
162* Improve /detach error handling and remove bogus F_SETOWN use, reported
163  by madsage. (caf)
164
165* Add /FSET WHOIS_SECURE for SSL connection info on ratbox, unreal and
166  freenode. (caf)
167
168* Add /FSET CHANNEL_URL for services channel URL numeric. (caf)
169
170* Fix crash bug in $mircansi() scripting function. (caf)
171
172* Add half-op support to /topic and /untopic. (caf)
173
174* Tidy up the URL grabber, fixing a memory leak. (caf)
175
176* Cleanup the /BHELP code, fixing a potential crash. Apply updates to
177  BitchX.help from t3gah. (caf)
178
179* [1.1s01] Sanity check color codes, fixes a potential crash. (caf)
180
181* Add /FSET USERMODE_OTHER to correctly format user mode changes where the
182  source isn't the same as the target, reported by gauze. (caf)
183
184* Improve country() and add several new TLDs, suggested by gauze. (caf)
185
186* Apply fixes from darkfires removing non-standard use of arithmetic on
187  void * values, to allow building on Irix. (caf)
188
189* Apply fix from darkfires to allow building with ICC. (caf)
190
191* Show correct message when a socket connection is closed cleanly. (caf)
192
193* Add /FSET WHOIS_CALLERID for +g mode notification on hybrid & ratbox. (caf)
194
195* Build script fix to allow plugins to build on x86-64. (caf)
196
197* Correct count in /CLONES (reported by t3gah), and format output nicely
198  using an /fset. (caf)
199
200* Add definition of BIND_8_COMPAT to fix build problem on Mac OS X. (caf)
201
202* Ensure that SHOW_AWAY_ONCE doesn't hide away status in /whois output. (caf)
203
204* Fix the the -z command line option for specifying username. (flashback)
205
206* Fix up /WILN, /WILC and /WILCR. (caf)
207
208* Backport changes from epic5 to make recv_nick, sent_nick and sent_body
209  per-server, and apply new version of do_oops from flashback. This means
210  that /oops, "/query .", "/query ,", "/msg ." and "/msg ," are per-server,
211  along with the $. $, and $B aliases. (caf)
212
213* Handle error return from getcwd() in /cd. (caf)
214
215* Fix alloca warnings on freebsd. (caf)
216
217* Fix memory leak in banlist.c. (caf)
218
219* Apply a fix contributed by cpet for the configure script on
220  FreeBSD 9. (caf)
221
222* Fix a refcounting issue in the whowas list handling, which should make
223  the listing of users that left in a netsplit right again. (caf)
224
225* Improve argument-handling in /hostname command - now supports doing
226  /hostname 2 to switch to second vhost. (caf)
227
228* Change the display of server stats so that the averages (eg. users per
229  channel) are correctly rounded. (caf)
230
231* Reinstate RPL_WHOISACTUALLY / RPL_WHOISHOST numerics - things seem to have
232  stabilised in the ircd world on this. (caf)
233
234* Fixed two cases where the client was incorrectly deciding that a numeric
235  originated from a remote server rather than the local server - this caused
236  BitchX to falsely report channel desynch and incorrectly hide some
237  numerics. (caf)
238
239* Fixed $servernum() scripting function, it was returning the wrong server
240  reference in most cases. (caf)
241
242* [1.1s01] Fixed .cmsg crash reported by zimzum. (caf)
243
244* Changed the defaults for JOIN_NEW_WINDOW_TYPE and QUERY_NEW_WINDOW_TYPE
245  so that they work out of the box. (caf)
246
247* Some cleanups in quit message handling, fixed a bug where a quit from an
248  unexpected source could crash the client. (caf)
249
250* Cleaned up the handling of channel mode changes a little, including fixing
251  buggy handling of certain key and limit mode changes. (caf)
252
253* Fix bug where you got disconnected if the server sent a 464 numeric
254  (bad password) that the client wasn't expecting. (caf)
255
256* Add /HOP and /DEHOP commands for halfop. (caf)
257
258* Removed "scan" plugin, this functionality is now covered by /SCAN -stat.
259  (caf)
260
261* Change NICKSORT_OP to NICKSORT_STAT (sorts nicks by channel status -
262  chanop first, then halops, voices and others).  Added /SCAN -stat
263  to sort nicks using NICKSORT_OP.  Removed NICKSORT_VOICE - it was broken
264  anyway. (caf)
265
266* Add halfop nick prefix to default status line, and change the voice prefix
267  so it appears whether or not you're opped. (caf)
268
269* Add halfop support to $channel() scripting function. (caf)
270
271* Rework /SCAN and /NAMES formatting.  This removes the /FSETs NAMES_BOTCOLOR,
272  NAMES_FRIENDCOLOR, NAMES_NICKCOLOR, NAMES_OPCOLOR, NAMES_SHITCOLOR and
273  NAMES_VOICECOLOR and replaces them with new /FSETs. (caf)
274
275* Add $ishalfop(<nick> <channel) scripting function, just like the
276  existing function in EPIC. (caf)
277
278* Fix four bugs in the /FE scripting function. (caf)
279
280* Fix incompatibility with 64-bit platforms. (caf)
281
282* Fix module load version check logic. (caf)
283
284* [1.1s01] Cleanups to allow compiling with new gcc releases. (caf)
285
286* [1.1s01] Fix configure check for termcap.h. (caf)
287
288* [1.1s01] Re-implement code to find available vhost addresses
289  (CVE-2007-5839). (caf)
290
291* [1.1s01] Fix test for GCC >= 2.7 - fixes compiling on S390 platform. (caf)
292
293* [1.1s01] Improve buffer handling in convert_output_format_raw
294  (CVE-2007-4584). (caf)
295
296* [1.1s01] Handle negative numerics correctly (CVE-2007-3360). (caf)
297
298[Changes 1.1-final]
299
300* Fixed bug with using [$8] in expressions (Reported by BlackJac)
301  (Patch from |Rain|) (BugID: 64) (powuh)
302
303* Fixed bug in /set show_end_of_msgs.  When OFF prevented hooking
304  of some end_of_msg numerics.  (Reported by BlackJac)
305  (Patch from |Rain|) (BugID: 51) (powuh)
306
307* Fixed incorrect ordering of operations in screen.c which
308  caused an off-by-one access at the end ofthe buffer.
309  (Patch from |Rain|) (BugID: 48) (powuh)
310
311* Fixed ischanvoice() to be compatiable with epic.  Maintained
312  reverse functionality as not to break existing scripts.
313  (Patch from |Rain|) (BugID: 20) (powuh)
314
315* Fixed segfault with convert_output_format not honoring
316  MAX_RECURSE. (Patch from |Rain|) (powuh)
317
318* Fixed possble rouge server exploit:
319  If a rogue server sends us a ctcp request from an extremely large
320  nickname (over about 512 bytes), we may attempt to alloca() a
321  negative value, which under gcc will return a invalid pointer the
322  contents of which will then be overwritten. (Reported by O_6)
323  (Patch from |Rain|) (powuh)
324
325* Fixed segfault with channel mode parsing. (Patch from O_6) (powuh)
326
327* Removed auto_resume script, it's not needed any more (caf).
328
329* Fixed string copying snafu in gtkbitchx.c (reported by Huey) (caf).
330
331* Added STATUS_USER20 to STATUS_USER39 (patch from BlackJac) (caf).
332
333* fixes for buffer handling problems with overlong server reponses
334  (reported by Timo Sirainen) (caf).
335
336* addshit fixes for invalid nicks (reported by Huey) (caf).
337
338* fix for alias tab-completion bug (reported by Huey) (caf).
339
340* properly reconnect after a kill (caf).
341
342* added check for protocol violation by server in 353 numeric (caf).
343
344* added EPIC-style pattern-matching to $getarrays (caf).
345
346* regex support fixed (reported by BlackJac & |Rain|) (caf).
347
348* Fix expansion of $[$var1]var2 type expressions (reported by Blackjac) (caf).
349
350* Some fixes for $tdiff (caf).
351
352* Updated TLD list (caf).
353
354* Added code to honour CONNECT_TIMEOUT for nonblocking connections (caf).
355
356* Fix segfault in /paste (reported by O_6 & Blackjac) (caf).
357
358* Major overhaul of the XMMS plugin, bump to version 1.0 (caf).
359
360* Fixes and documentation update for /saveirc (caf).
361
362* Fix segfault in /mkb (reported by Tilt & falcon10) (caf).
363
364* Fixed dumb mode for kreca, the last user of dumb mode in the known
365  universe (caf).
366
367* Stop bitchx sending PASS twice (reported by wizy & dialtone) (caf).
368
369* Make auto-away set away on all connected servers (caf).
370
371* /save wasn't correctly saving TIMESTAMP, TIMESTAMP_AWAYLOG_HOURLY and
372  TIMESTAMP_STRING variables (caf).
373
374* Fix server password prompt (caf).
375
376* The CHANNEL_NICK hook should only trigger on the channels that the nick
377  is in (caf).
378
379* Fix for away notification being wrongly sent if you have messages
380  hooked (caf).
381
382* Fix for segfault on /url -1 (reported by Kareemy) (caf).
383
384* Cleanups in are_you_opped and fix for misleading error (caf).
385
386* Added -INQUIET flag to /exec (caf).
387
388* Fix /lamekick and change default NUM_KICKS to 1 (hybrid6 and up no longer
389  support multiple nicks in a single kick) (caf).
390
391* Some cleanup of /bantype (caf).
392
393* Fix /crypt segfault (caf).
394
395* Fixed HADES formats and minor problems in default formatting of
396  the hold_lines status and nickname_other fset (caf).
397
398* Added support for hybrid7 & ratbox 338 RPL_WHOISACTUALLY numeric (caf).
399
400* Applied DCC_FORCE_PORT patch from caf.
401
402* Applied Hebrew patches.
403
404* Fixed problems with the definition of isalpha() and related functions.
405
406* Fixed warnings caused by the gcc 3.0 series of compilers.
407
408* Fixed gtkBitchX using 100% CPU when stdin was close.
409
410[Changes 1.0c19 to 1.0a1]
411
412* Fixed bogus improbably large awaytimes [caf].
413
414* Added patch from caf to help with rejoining channels with keys. A dummy
415  key is passed for channels without keys instead of an empty string.
416
417* Fixed a multiserver bug, where if a non-blocking connect was issued and was
418  attached to a window which was later destroyed, the connection would continue
419  to be attempted.  Now if no window is available for the connect it is aborted.
420
421* Corrected misdocumentation of the /dcc commands, and made /dcc -p <port>
422  use the specified port first instead of last.
423
424* Added NOTIFY_INTERVAL although it has a minimum interval of 60 seconds.
425
426* Applied two patches from caf for timestamping and an improved kill message.
427
428* Fixed /lastlog -file so it works again.
429
430* Applied patch from caf which prevents halfops from getting "not opped" message.
431
432* Applied patch from jduck to prevent a buffer possible overrun in /away.
433
434* Updated configure to search for valid tcl installs.
435
436* Added a /revisions command which reports the CVS revisions of
437  the currently running binary.
438
439* Applied slightly modified patch from einride to allow a comma
440  separated list of channels to /window bind.
441
442* Fixed a bug where reconnect_server() sets i to -1 which causes
443  a buffer underrun.
444
445* Merged in a fix for scrollback crash from epic.
446
447* Applied a patch from caf which corrects the user count in funny.
448
449* Applied a patch from Mourgos that corrects some errors and ommissions
450  from the mode list.
451
452* Applied a fix from Tilt that allows scr-bx to work on systems
453  with an invalid "localhost" address.
454
455* Huey found and fixed a bug in the GUI menu code.
456
457* Dragoon found a bug in randomnick.
458
459* sideshow found a bug in cycle.
460
461* Moved over to using the global function table internally.
462
463* Fixed DCC chat messages going to the wrong window with multiple servers.
464
465* Fixed a problem with orphaned server connects.  Orphaned connects
466  now get closed on issuing a new /server or /window server command.
467
468* simoriah found a typo in mail.c, count_maildir_mail.
469
470* Fixed the xmms plugin on FreeBSD when building console BitchX.
471
472* Added $ovserver() function for BlackJac which returns the operview server string.
473
474* Added a latin patch for breakage when startup ansi was off from bertogg@yahoo.com.
475
476* More multiserver fixes, especially in the GUI code.
477
478* Fixed SERVER_GROUPS not working from withing reconnect_server().
479
480* Updated configure scripts from DavidW2, now requires autoconf 2.49b.
481
482* Included nonblocking connect support.
483
484* Added SSL support based on work done by the folks at http://hq.alert.sk
485
486* Added DCC_AUTORESUME support from Shurdeek.
487
488* Fixed some crashes in parse.c
489
490* Added a fix from dLek which fixes wident and ipv4.
491
492* Fix for the DNS bug.
493
494* Fixes for building on QNX.
495
496* Fixed the MDI Frame being visible when it shouldn't have on OS/2.
497
498* Added nicklist sorting for the GUI clients.
499
500* Miscellaneous xterm title fixes.
501
502* Included a patch to allow /exec -o to queries from DavidW2.
503
504* Merged Epic 0.9.7 term and window fixes.
505
506* Dialtone noticed that &localchannel completion was broken.
507
508* Added a -i switch to the command line to disable loading of the
509  autojoin list.  Requested by dialtone.
510
511* Included a modified version of ace's /orignick patch.
512
513* Included an enhanced version of Sheik's cdns.c when using threads.
514
515* Fixed a crash in /dns which was reported by ice^.
516
517* Finished the /uptime code to display the number of users on the userlist.
518
519* Included RoboHak's patch for the /invite #%s bug as well as numerous other
520  non remote exploitable similar problems.
521
522* Small problem in the userlist found and corrected..
523
524* hpknight and Robohak found/fixed an error in the /watch cmd which was
525  causing you to flood off if you added a nick to the watch list
526
527* Added /m nick PASS old_pass new_pass command. If there is no password,
528  then password will be set to old_pass. Also,
529  /adduser nick chan friend pass if the user is already on your list, will
530  change the user's password.
531
532* xcopy noticed and fixed /kill *.
533
534* pixels@chez.com submitted a mircansi() patch to properly decode mirc color
535  codes.
536
537* some changes made to the napster plugin. Read the dll/nap/Changelog
538
539* Found a annoyance if you are not attached to a server, auto_away() would
540  still attempt to place you away
541
542* HDClown requested a -a flag to /sc. displays ALL channels your currently
543  in.
544
545* if not connected to a server, from_server = -1,  which caused
546  get_connected() to use the last server in the list. We now use the 0th
547  server in the list.
548
549* added a $z variable which is the number of servers in the serverlist.
550
551* auto-reconnect's now check for a running auto-reconnect timer.
552
553* changed cdcc save/load so the .cdcc.save has a header. This should help
554  prevent people from attempting to /cdcc load some_binary_file
555
556* found bug in clean_split_server_list() when from_server < 0
557
558* fixed the timer in acro plugin.
559
560* more changes from drow. DETACH_ON_HUP and some window server changes.
561
562* A module was contributed called qbx. it's for querying quake servers.
563
564* /wii fixed.
565
566* some napster dll fixes
567
568* Daniel Jacobowitz <drow@false.org> sent in multiple patches.
569	a) connect to localhost  BitchX nick localhost will work now.
570	b) autoconf patches so that we can build multiple arch's from the
571	   same source easily.
572			mkdir local
573			cd local
574			../configure
575			make
576
577* wojtekka@bydnet.com.pl contributed a better LATIN1 set of formats.
578  He also contributed a IPV6 patch for bx.
579
580* fixed both hybrid6 and bx with a userhost problem.
581
582* changed /load to check for .tcl extention and load the file differantly
583
584* possible fix for wholeft problems and split servers.
585
586* found logic problem in /kline. hybrid6 has stats k and K for temp-klines
587  and klines.
588
589* small error in /nwhois found/fixed.
590
591* Vetesgirl noticed that "/ajoin    " would core.
592
593* possible fix for a problem when recieving an invite to a channel and
594  becoming de-synced.
595
596* DavidW2 can now stop bugging me about /ctcp's that do not display in the
597  correct window. at least according to him.
598
599* encrypted passwd's were not quite as easy as first thought. We really don't
600  want to double encrypt the passwd's.
601
602* added find_command() to the module function table. Needed by singe for his
603  bnc module.
604
605* Fixed /wi  with no args.. It should never whois the channel. several
606  people pointed this out. war-, Xavier.
607
608* with the change for /wset name|refnum variable, came a couple of bugs.
609
610* iblis found that /do echo $regexec(a) would core libc.
611
612* merged in $getcap() from epic 2.5. Changed /bind so that you can specify
613  the actual key if you know the name to bind. ex. /bind key_f1  will
614  display what the key is bound to, you could also change the binding.
615  $getcap(TERM enter_pc_charset_mode) will return the sequence needed for
616  entering the pc charset. getcap() understands 3 types of names for the
617  termcap's, long short and termcap. We will also mangle the return so it is
618  displayable. $getcap(TERM capability type mangle). Type can be 0-3 and
619  mangle 0-1. Complete list of capabililies can be found in term.c
620
621* fudd found problem with lookup_channel() and $numonchannel() which would
622  core the client
623
624* Huey discovered that command completion was broken..
625
626* wset will now take check a number against the window refnum.
627
628* fixed bug in $dccitem()
629
630* exported io() and irc_exit() functions. Added a cleanup function
631  add_sockettimeout(). Added $w alias for the current_window refnum. Added
632  additional check to function_topic(). exported lock_stack_frame() and
633  unlock_stack_frame() functions. These are to be used with io().
634
635* sellfone found a bug with /help
636
637* stupid error in history_match() would core with /!. found by azen.
638
639* added the actual url count to the URLGRAB hook. Unfortunately this is the
640  first param which will cause some script problems if your using this.
641
642* fixed/found problem with $aliasctl() when we added the second param to
643  functions. bestis pointed this out.
644
645* found obscure bug which was loosing the notify list.
646
647* found/replaced several occurances of strtoul() with my_atol() in numbers.c
648
649* added support for DalNet's /watch command. new function $watch() based on
650  $notify() added.
651
652* changed the join flood code so it uses the bantype.
653
654* found memory leak in the JOIN_NEW_WINDOW code.
655
656* modified 004 numeric where we do the channel auto-joins. It now checks for
657  server version and does the appropriate thing for broken hybrid6.
658
659* added a add_completion_type() call which adds to the tab completion
660  routines. This is meant for plugin usage.
661
662* plugin help is now available via /help. required small change to
663  add_module_proc() and remove_module_proc(). "func2" is now the help for
664  command procs. and desc is being properly used now, it was supposed to be
665  the command to send to the irc server.
666
667* NOTE: major change to userlist. Password is now encrypted, there is NO way
668  to ensure backwards compatibility.
669
670* added 2 new functions $strchr() and $strrchr(). $strchr(/ testing/blah)
671  will return the string starting at the / strrchr() starts at the end
672
673* added a feature to /cleartab so it will remove a nick from the tabkey
674  array instead of ALL. /cleartab nick or /cleartab nick nick nick
675
676* fe was using a next_arg() instead of a new_next_arg()
677
678* found/fixed a window text leak.
679
680* wrote a fserv plugin for serving files. This is a fairly extensive module
681  with ALOT of functionality. Works in 95/NT as well. Have a look at the
682  fserv.c code in dll/fserv and look at help_fserv() function for
683  documentation or loaddll fserv and /fshelp.
684
685* found memleak in cdcc queue sends.
686
687* Added /lastlog -append to append to the file instead of overwriting.
688
689* changed scr-bx's re-attach code and term_init() so it passes the TERM
690  variable back and forth.. This will cause problems with older scr-bx.
691  Looks like this might fix the differing TERM types problem when switching
692  from X <-> console.
693
694* fixed broken ftp command.
695
696* several people noticed that /back would send a blank line to the server.
697
698* KrOn found a small bug in e_pause(). missed a return; statement.
699
700* missing a bunch of Changelog fixes due to some file corruption.
701
702* found major nicklist bug's remember to mutex_unlock instead of
703  mutex_lock'g nuke.
704
705* Merged in changes from nuke and DavidW2.
706
707* /dcc chat ni<tab> should complete properly now. did this break anything
708  else? fixed /ls ~<tab> to work like bash shell.
709
710* more configure.in/Makefile.in changes
711
712* found a null pointer problem with /window create.
713
714* valium/Robohak found a nick completion bug.
715
716* added $chanwindow() for compat with openchat.
717
718* fixed up sock4/sock5 routines. seems they were using the wrong port for
719  the server connection.
720
721* buffer overrun with /set mangle found/fixed. introduced a len to
722  mangle_line()
723
724* bug with /bhelp # found by whytefang
725
726* All FORMAT_ removed from the fset array. So instead of /fset format_msg we
727  now use /fset msg. Numeric fsets were moved to the numeric array and
728  removed from the fset array.
729
730* structure lookups added. What these allow is access to the internal
731  structures on a limited basis. $window(0)->log will return on/off for
732  example. Currently, we can use $window, $channel, $nick, and $dcc. Some of
733  these allow sub-structure access like $channel(#bitchx)->nick
734for $channel we have channel, server, mode, topic, topic_lock, limit, key,
735  chop, hop, voice, bound, chanpass, connected, refnum, maxidle, tog_limit,
736  check_idle, do_scan, stats_ops, stats_dops, stats_bans, stats_unbans,
737  stats_sops, stats_sdops, stats_shops, stats_sdehops, stats_ebans,
738  stats_seunbans, stats_sbans, stats_unbans, stats_topics, stats_kicks,
739  stats_pubs, stats_parts, stats_signoffs, stats_joins, stats_ebans,
740  stats_unebans, stats_chanpass, stats_hops, stats_dehops, msglog,
741  msglog_file, totalnicks, maxnicks, maxnickstime, totalbans, maxbans,
742  maxbanstime, bans, exemptbans, nick, cset.
743
744for $dcc we have user, userhost, server, encrypt, filename, othername,
745  bytes_read, bytes_sent, start_offset, filesize, packets, blocksize,
746  dcc_fast, remport, localport, dccnum
747
748for $window we have name, refnum, server, top, bottom, cursor, line_cnt,
749  scroll, scratch, columns, notify_level, window_level, current_channel,
750  waiting_channel, bind_channel, query_nick, query_host, query_cmd, log,
751  logfile, lastlog_level, lastlog_size, lastlog_max, hold_mode, mangler
752
753for $nick we have nick, host, ip, server, ip_count, userlist, shitlist, flags
754  idle_time, floodcount, floodtime, nickcount, nicktime, kickcount,
755  kicktime, joincount, jointime, kickcount, kicktime, created, stat_kicks,
756  stat_dops, stat_ops, stat_hops, stat_dhops, stat_eban, stat_uneban,
757  stat_bans, stat_unbans, stat_nicks, stat_pub, stat_topics, stat_reop,
758  sent_reop_time, sent_voice, sent_voice_time, sent_deop, sent_deop_time,
759  need_userhost
760
761for $nick() we have two further level of redirection for the Userlist and
762  the shitlist. nick, host, comment, channels, password, flags, time and
763  filter, level, channels, reason, time.
764	$nick(panasync)->userlist->host
765for $channel we have ->bans, ->exemptbans, ->cset and ->nick
766	ban has ban, setby, sent_unban, sent_unban_time, time and count.
767	exemptbans has the same as the above.
768	cset has ainv, annoy_kick, aop, auto_join_on_invite, auto_limit,
769	auto_rejoin, bantime, bitch, chanmode, channel_log,
770        channel_log_file, channel_log_level, compress_modes, ctcp_flood_ban,
771        deopflood, deopflood_time, deop_on_deopflood, deop_on_kickflood,
772	hacking, joinflood, joinflood_time, kickflood, kickflood_time,
773	kick_if_banned, kick_on_deopflood, kick_on_joinflood,
774	kick_on_kickflood, kick_on_pubflood, kick_ops, lameident,
775	lamelist, nickflood, nickflood_time, pubflood, pubflood_ignore_time,
776	pubflood_time, shitlist, userlist, channel
777
778Some of these if it makes sense are READ/WRITE as well. So for example
779	$channel(#bitchx)->cset->channel_log_file[~/bitchx.log] will set the
780        cset channel_log_file to ~/bitchx.log.
781
782
783* Seems that SNOTE level was broken. Actually not broken, just changed.
784
785* possible fix for /whokill.
786
787* added a /ov log feature. which will create a logfile of your ov window.
788
789* Added a feature to hooks... a return next; in a hook will cause the next
790  hook in the line to be eval'd. Also plugged a memory leak in do_hook().
791  Now the following is possible.
792	on ^channel_synch "#bitchx *" { echo 1 $*;return next}
793	on ^channel_synch "*" { echo 2 $*;return next}
794  This sequence will run both possible hooks and the default handler. The
795  last ran hook defines what the default return is. So
796	on ^channel_synch "#bitchx *" { echo 1 $*;return next}
797	on ^channel_synch "*" { echo 2 $*;return}
798  would run both these hooks, but would supress the default.
799
800* Documented a few more commands. Added /wilc and /wilcr for whois'g last
801  nick who ctcp'd you and the last ctcp you sent. Cleaned up my_whois()
802
803* Fixed Makefile's and configure from DavidW2. Fixed the Fixed Makefiles
804
805* small modification to /fset which will allow a scripter to /fset number
806  text for server numerics. ie /fset 001 $G $2- (default). /fset 1 will
807  display the setting. and /fset -001 would remove it.
808
809* ALL commands can now use /command -help to recieve help. Internal command
810  table help is given preference and then BitchX.help. Removed most
811  references to userage() as a result.
812
813* rewrote /kline and /tkline. Multiple hosts can be specified. comma
814  delimited. /kline host,host1,host2 :reason and tkline time
815  host,host1,host2 :reason  Added support for /dline and added a /unkline.
816
817* Re-wrote /sping. /sping . will ping the current server. /sping servername
818  will ping a server. Multiple servers can be specified. /sping -clear will
819  clear the internal sping list.
820
821* $ischanop() will now except either (nickname #chan) or
822  (#chan nickname[,nickname,nickname]). Fixed $channicks() as well. We can
823  now do a $ischanop($C $channicks($C)) $isvoice() modified to accept comma
824  separated list of nicks
825
826* Added a /set TIMESTAMP on/off TIMESTAMP_STR "%I:%M%p" and a new code for
827  the color parser %@. the effect of all these is the following, with /set
828  TIMESTAMP on, whenever a %@ is encountered in a /fset, the TIMESTAMP_STR
829  is used to set the timestamp for that event. TIMESTAMP_STR uses strftime()
830  to display the time.
831
832* added some changes from lastest epic. new functions from epic $prefix(),
833  $maxlen(), $stat(), $insert(), $ttyname(), $realpath(),$indextoword(),
834  $functioncall() and $lastlog(). /set DCC_USE_GATEWAY_ADDR on/off added.
835
836* a little work done on /detach.
837
838* Re-Arranged bot_link.c, tcl_public.c and tcl.c.
839
840* Various misc fixes in translat.c, functions.c
841
842* Added a New plugin, qmail, which replaces the internal mail checking with
843  one specific to Qmail. Also added a /set qmaildir variable to define
844  where. Normally this will be ~/Maildir/new
845
846* added a new module proc. With it, functions in the global_table[]
847  can be replaced with module functions. This can be dangerous however
848  and ALOT of care must be taken.. passing a (table_number | TABLE_PROC) to
849  add_module_proc() and a function, Will replace that function in the table.
850  remove_module_proc() with a (table_number | TABLE_PROC) will make that
851  table entry NULL.
852
853* found 3 differant memory leaks. One in timed_server(), another in
854  url_grabbing and finally one in notice's.
855
856* fixed bug with BitchX irc.server requiring a nick.
857
858* added $LOG(text) which will add text to your /set LOGFILE if /set LOG is
859  on
860
861* found bug with ircII.servers file not being read.
862
863* more configure problems found/solved. ALL text files can be .bz2'd.
864  including the help files.
865
866* wavplay.so added. plays wavfiles from BitchX.
867
868* more tabkey problems fixed. use current_window->server instead of
869  from_server for finding nicks/channels for the current window.
870  Also found/fixed the off by one problem with files that have the same
871  prefix.
872
873* found/fixed problem with ALPHA compiles and misc.c. Seems that gnu uses a
874  va_list structure for variable arguements. (va_list) NULL is too
875  small.(By-Tor_)
876
877* added new cset and set for defining the time for a ban. two new commands
878  added for timed bans. /TKB and /TBK. /cset BANTIME and /set BANTIME. Patch
879  for this from DavidW2.
880
881* added 2 new functions for GTK/PM scripters. Also will help in people with
882  .bitchxrc problems. $gtkbitchx() will return 1 if running under GTK and
883  $pmbitchx() for OS2. This makes it possible to make a if () in your
884  scripts checking for variations.
885
886* an example of how to write a tcl c function is included in tcl_public.c
887
888* added more pht patches.
889
890* found and fixed core problem with /bhelp -dump
891
892* More changes to places where files can reside. BitchX.help, BitchX.quit
893  BitchX.reasons, BitchX.ircnames can be anywhere on the /set LOAD_PATH for
894  increased flexibility. currently
895  ~/.BitchX:~/.BitchX/plugins:~/usr/local/lib/bx/scripts:/usr/local/lib/bx
896  are searched in the shown order for the files that are considered extra..
897
898* DavidW2 rewrote configure for us. Some modifications made so that dll's
899  are all created when --with-plugins  is used on the configure. Otherwise
900  no plugins are compiled. You can also specify just the plugins you want.
901
902* revamped hint module slightly. added a /hintsay. BitchX.hints can be
903  installed in the LOAD_PATH. This would allow system admins to create
904  a bxglobal with /loaddll hint and a /timer 10 hint for example.
905
906* fixed modules. Also made /loaddll check the plugins dir. You can also
907  now either /loaddll amp.so or /loadll amp and the module will be loaded if
908  found.
909
910* fixed a tabkey glob problem with case-sensitivity.
911
912* fixed several problems with space's in filenames and tabkey.
913
914* fixed a bug with ${9.9 + 4} when FLOATING_POINT_MATH is on. we weren't
915  actually setting up for floating point math.
916
917* changed /window bind and unbind to support multiple channel binds.
918
919* fixed another annoying goto wrong window output from /sping
920
921* forgot about this, added a char * to add_timer() call which set's the whom
922  set the timer. This helps keep track of running timers.
923
924* orignick modification so it will follow server changes.
925
926* found/fixed memleak and cpu usage hog with timers.
927
928* $getfsets() returns all fsets that have been set. including user specified
929  fsets with +format_blah.
930
931* /cset auto_limit #  will now do channel limiting. The formula is like this
932  if the limit hasn't been set by us within the last 30 seconds then we will
933  check to see if we need to set it. if the limit - users < autolimit/2 or
934  limit - users > limit + autolimit/2 then raise the limit by auto_limit.
935
936* modified /NSLOOKUP so that -CMD {...} nick1 nick2 nick3 is possible.
937
938* message_from() should use the window refnum instead of window ptr.
939
940* seems ajoin was forgetting that a channel key was a possiblity. [nuke].
941
942* added a /awaymsg  which will set or reset internal auto-away msg.
943
944* played around with #define BITCHX_LITE some more.
945
946* DavidW2 found a small channel removal problem.
947
948* changed add_channel() in names.c slightly. maybe this will fix the
949  incorrect window/channel issues.
950
951* jmd noticed that /quote help was not outputting correctly.
952
953* added millisecond precision timers. some other changes as well to window
954  levels. timers use the refnum instead of window ptr, so it can't be
955  deleted while the timer is running, causing a core.
956
957* some changes including fixing a channel artifact problem, channel
958  join/part/join coring fixed.
959
960* some basic changes to the bot mode added. /set BOT_MODE on will now allow
961  people on the userlist to auto-chat the bot. people with TCL userlist
962  entry can make your client do things. ie /m =nick .irc join #bitchx will
963  cause your client to join the channel #bitchx. ANY bx command is allowed,
964  so some caution is required. requested by vega.
965
966* added $chancomp() and $filecomp() which are backdoor functions into the
967  internal channel and filename completion routines. requested by shade.
968
969* DavidW2 found a small word break problem with a WORD_BREAK char as the
970  last char on a line. It should not be on a line by itself.
971
972* DavidW2 created a variable url list feature. /set MAX_URLS will set the
973  max urls the client will store. /url -  will clear the url list.
974
975* pht created several patches. 1) implemented default channel modes /cset.
976  2) fixed several ts4 bugs. 3) found bug with removing a channel and
977  exemptbans.
978
979* changed orignick slightly. Should now work on multiple servers.
980
981* more PTnet changes.
982
983* added 2 new fsets for encrypted msg and notice sends. also fixed a problem
984  with the send_text() which was displaying the encrypted text and not
985  the un-encrypted. nugget@distributed.net
986
987* bestis noticed a small problem in the userlist on irc-net. it involves
988  special chars the server places in front of a username.
989
990* added a /set SEND_CTCP_MSG which will turn on/off notices sent on response
991  too /ctcp userlist commands.
992
993* nwhois and chanst changed slightly. decreased memory usage slightly in
994  small channels. should gain even more in large channels. Changed NickList
995  structure to use a bit mapped flags for various on/off flags.
996
997* added a sent_voice to the nicklist structure. should help prevent the
998  double voice on join for people on the userlist.
999
1000* we used to load ~/.bitchxrc and then load ~/.BitchX/BitchX.sav. We now do
1001  this the opposite way around. allowing .bitchxrc to override settings in
1002  the save file.
1003
1004* fixed dns problem under SunOS 64bit hardware having todo with
1005  alignment.Thanks to ankle for helping  with this.
1006
1007* changed NAT support a little. -Z will still set the NAT address for dcc's
1008  but by request /set NAT_ADDRESS ip|host  will set the address. This is
1009  useful for those who do bouncing as it's only set once. -Z would use the
1010  address you connect too IRC with, and when bouncing this is of course
1011  wrong.
1012
1013* added a %n for status bar. it returns the number of people on your notify
1014  list on and off of irc in 2 numbers. There's no formatting.
1015
1016* icetrey found bug in "/nops  " would core client.
1017
1018* power noticed that /window logfile only worked in current dir.
1019
1020* annoying hard too detect window scroll bug noticed by several including
1021  drsmoke found and fixed after someone was able too determine how to
1022  duplicate it
1023* Added a check for ops and kick_ops in the flood protection.
1024
1025* thrad@rocks.odu.neva.ru sent a patch concerning a custom charset which is
1026  now added. #define CHARSET_CUSTOM in config.h
1027
1028* found/fixed several bugs in window scrollback. very annoying.
1029
1030* fixed a term problem with libtermlib which I introduced while attempting
1031  too clean up some compile msg's.
1032
1033* found as soon as 75p3 was released, was a little bug with having a /nick
1034  command in your .bitchxrc
1035
1036[Changes 75p2]
1037* recalled p2. too many broken things. Servers like hybrid6 causing problems
1038  with the client as well. Had too change a few commands too understand a
1039  few things that the new server seems to have broken.
1040* singe added a command /mtopic which Mhacker had requested for setting the
1041  topic on ALL channels which you are op'd in.
1042* added a NAMES_COLUMNS variable which changes the number of names
1043  displayed. Liam Quin requested this.
1044* fixed epic's /help so it works again.
1045* epic4nr16 changes merged in. This includes the key binding code.
1046* fixed a few problems with window_level which was an int, but should have
1047  been a unsigned long.
1048* Added a debugging window. If you /set debug will make ALL output from the
1049  client's debugger appear on a hidden window. All normal output will
1050  appear in the proper windows. DEBUG takes several parameters. COMMANDS,
1051  EXPANSIONS, TCL, FUNCTIONS, ALIAS, HOOK, VARIABLE. /set -debug will clear
1052  this. ALIAS will debug specific alias's, which are specified with
1053  /debug name. They can be removed with /debug -name
1054* fixed up userhost_ban() and various /ban /kick functions which were having
1055  trouble with nicks with a \ in them.
1056* DEFAULT_FONT was not working like it was supposed too... the exec needs
1057  the args split up instead of what we were doing.
1058* fixed problem in get_window_bound_channel() and a NULL pointer.
1059* Added a /spam command which takes a channel name. If compares the channel
1060  name with all other channels producing a list of nick@userhost's who are
1061  common on both channels.
1062* ruibarreiros@usa.net sent some patches for PTnet commands to be added.
1063  His patch was much simpler when added a little differently so he might
1064  not recognize his work. A #define was added to config.h for enabling
1065  this WANT_CHAN_NICK_SERV.
1066* server splits in rapid succession could cause a mass kick too occur. We
1067  now do a little differant order of events within p_channel() and
1068  add_to_channel()
1069* Really really fixed AUTO_RECONNECT so that if it's off, not even a timed
1070  auto reconnect to the server will happen.
1071* Added timestamp logging in the /lastlog. -time will turn it off. There's
1072  also a /fset format_lastlog for output formatting. time in seconds is the
1073  first arg.
1074* Robohak noticed a problem with /exec - and no flags given.
1075* added /cdcc on/off commands. This will turn cddc on and off
1076* ajoin with a key was not being re-loaded properly from a BitchX.sav
1077* svobodam@eva.vsp.cz sent in some patches for bx.. Specifically adding
1078  ircnet support. His patch for lame_ident's was already implemented. Added
1079  some ircnet servers.
1080* some changes to the functions $opensocket(). Added a NOTIFY param as the
1081  third arg, default is line mode SOCKET reading. This changes the behaviour
1082  of the socket. instead of the SOCKET, hook returning the info, another hook
1083  SOCKET_NOTIFY is sent instead. IT's upto the script in this case too read
1084  the socket. So either a $readsocket() or a $readchar() can be used to read
1085  the info from the socket. params on the hooks were changed to be a little
1086  more sane. "socketnum servername port flags" for SOCKET_NOTIFY and
1087  "socketnum servername port string" for SOCKET.
1088* another major in-compatibility in scr-bx  added.. Make sure you update
1089  scr-bx. This one adds connection cookies. Without the cookie, you can't
1090  connect to a detached bx.
1091* /window 2 triple on was coring the client when window 2 was a hidden
1092  window. this might have effected other commands as well.
1093* bug in wset pointed out by void fixed.
1094* make configure check for in_systm.h in netinet and sys directories.
1095* added multi-play to internal amp module. quoted filenames are played one
1096  after another.
1097* small patch for HPUX modules. author of the patch said that he required
1098  a additional -DHPUX on the CFLAGS
1099* small bug in tab completions fixed. Added #chan completion into tab
1100  handling
1101* cosmetic changes to /cdcc involving the help.
1102* Robohak found and supplied a patch for the new /set mangle routines. Same
1103  patch applies to epic.
1104* away msg log removal broken when using /back.
1105* added a new /cset LAME_IDENT for turning off the ban/kick on lame chars in
1106  the ident. seems some servers all this shit.
1107* Robohak found and fixed two problems in $winitem().
1108* had a crack at fixing the term init problem when you change term sizes.
1109  this is not gonna be easy. currently it works. but it's a real kludge and
1110  not totally 100%. ie term types have to be the same. xterm != vt100.
1111  Changes required too scr-bx so the console size can be passed. This makes
1112  scr-bx in-compatible with older scr-bx's
1113* a few small changes made too detachcmd(). we now remove the
1114  ~/.BitchX/screens file on a TERM signal. This helps when reattaching to a
1115  cron'd BitchX process. We can use the same cron script as an egg.
1116* re-wrote whokill. /whokill pattern pattern pattern :reason will match
1117  the patterns and buffer the kills. on end, it then kills in groups to
1118  help prevent flooding of the oper. Added NUM_KILLS variable. Requested
1119  by thetaz a dalnet oper. EfNet only allows one kill per KILL.
1120* -r filename will now accept a path/filename as well as just a filename.
1121* potential problem with a mode change corrected. This would cause the
1122  client to become desynced from the actual server modes..
1123  /c -lk-oo test nick nick1 too demonstrate. Thanks too SideWnder for this.
1124* ignoring ctcp no longer ignore's quits. First mentioned by Hyriluk
1125* removed FORMAT_USERS_BOT. it was redundant.
1126* added FORMAT_USERS_TITLE. default for FORMAT_USERS FORMAT_USERS_SHIT
1127  changed
1128* changed the split list so it's server dependant. This way, the list will
1129  still work on multiple servers.
1130* some problems in the shitlist now fixed. Also added new functionality.
1131  if a nick is on the channel and the shitlist is added, they are
1132  immediately banned and kicked. if they are unshit'd, and the ban is on
1133  the channel the ban is removed as well. The following types of bans are
1134  allowed -   nick, nick!user nick!user@host, user@host.
1135* error in nicklist hash causing core found. $checkuser(blah *) doesn't
1136  core now.
1137* 471-476 numerics moved. these CAN hurt internal structures.
1138* substr, rsubstr, getopt, isaway and nohighlight functions added.
1139* possible timer bug found/fixed.
1140* function for collecting number of users, written by Mhacker.
1141* minor changes made to nick completion.
1142* added a new hook MODULE, which can be called from dll modules and
1143  interface with scripts. for example, amp, returns a "AMP PLAY name" on
1144  start, a "AMP CLOSE name" on end, "AMP ERRROR name" and "AMP ID3 params".
1145* auto_response should be a bool on/off instead of a int. default it too on
1146* fixed a problem in the autobot module. should have been u->host
1147* kopz notice that dcc min speed was not working.. fixed. Also modified
1148  /cdcc minspeed so that it accepts 2 arguements. a minspeed and a timeout.
1149* Cset queuing is now fully implemented. You can even specify a cset in
1150  your .bitchxrc file. It will be queued up until you join that channel.
1151* more modifications to $aliasctl(). a PMATCH param can be specified which
1152  will search for wildcarded matches. MATCH does exact char matching.
1153* HARD_UH_NOTIFY is gone. along with it went NOTIFY_SIGNON_UH and
1154  NOTIFY_SIGNOFF_UH hooks. FORMAT_NOTIFY_SIGNON_UH FORMAT_NOTIFY_SIGNOFF_UH
1155  is gone as well. Userhost notification is now the default. /notify can now
1156  accept a nick!user@host. All this means is that unless the userhost
1157  matches, this notify will not display. Some notify problems found and
1158  fixed.
1159* $getcset(var #chan value) will set a new value and return the old.
1160* Power found a problem with $winitem().
1161* Nuke found a solution for the problem with win95 and color. turns out that
1162  ansi.sys scroll region, doesn't scroll the color. stupid... Anyways, we
1163  changed to a direct windows function for scrolling a region and problem
1164  is now solved.
1165* replaced the dcc_*_func with something more generic. a
1166  add_dcc_bind("type", "modname" init_func, open_func, input, output,
1167		close_func);
1168	type is a char str defining the new dcc type.
1169	modname is the name of the module. for use when unloading.
1170	init_func is a function that is called when this ctcp type is
1171	recieved.
1172	open_func is a function that is called when the dcc is open'd.
1173	input is a function that should be called when there is data ready.
1174	output is a function to call when you send data.
1175	close_func is a function to call when the dcc is to be closed.
1176  we could actually replace internal routines with ones that are wanted.
1177  each of the above functions should return a int value. in some cases this
1178  value is ignored. but the input/output routines do NOT ignore this.
1179* change /dc to not chat yourself. Also changed /dcc chat to ignore your own
1180  nick.
1181* small change to $glob() to fix a memleak.
1182* more changes to tab_completion.
1183* added the ability for /scan to accept a wildcard nick!user@host to search
1184  for. so /scan *!*@*.com
1185* Implemented a queued server send system for use in cdcc.
1186  /set QUEUE_SENDS #, where number is the number of seconds to wait.
1187* fixed up core problem with notify.
1188* merged in epic4 pre2.001nr-3 and partial pre2.001nr2 patches.
1189* remerged in the OS/2 pm port changes.
1190* added a CTCP userlist flag. which allows ctcps on certain ones when
1191  cloaked
1192* forgot about DCC_PROC for modules. added remove procedure.
1193* found bug with numeric 464.
1194* humble contributed a color change to bx. in config.h add a #define HUMBLE
1195  just before the #include "color.h" and it will be enabled as the default.
1196* added a $longcomma() which takes a long number, and formats it with
1197  comma's
1198* possible fix for core on netsplits with a * in them.
1199
1200* added a couple of output replacement hooks for dcc and server connections.
1201	serv_output_func, serv_input_func, dcc_input_func and
1202	dcc_output_func can be defined within a module to replace the normal
1203	dgets() and write() functions. This paves the way for secure
1204	dcc/server connections.  serv_output_func = some_new_output; in your
1205	module.
1206
1207* new TAB_COMPLETION binding created. A FORMAT_COMPLETE also added for
1208  display purposes. This new bind does alot more than the old TAB_MSG bind.
1209  commands currently specifically handled with the new tab complete are,
1210  MSG/EXEC/DCC/LOAD/SERVER/LS
1211		- With nothing on the line, we cycle through the
1212		msg buffer nicks. if there are none, then the list of channel
1213		nicks is displayed.
1214		- if we start typing a nick, then matching channel nicks are
1215		displayed. if there's one and only one, then it will be
1216		placed on the input line
1217		- "/msg " will use the tab buffer, or if that's empty then
1218		we  use channel nicks. placing a partial nick, will match
1219		that nick from either.
1220		- "/exec [pattern]" will attempt to match a filename. if no
1221		path is specified, then your $HOME directory is assumed.
1222		if you use / then we can match directories. A * is implied
1223		when matching, so you don't have to supply one.
1224		- "/dcc send nick filename". depending on where you press
1225		the tab will determine what is done on the matching. if it's
1226		at the nick then tab/chan nick matching is done. if it at
1227		the filename, then DCC_DLDIR is used for matching.
1228		specifying a / means look in a dir other than DCC_DLDIR.
1229	this new tab_completion will also fill in the the input buffer with
1230	the most number of chars that are common from the resulting match.
1231
1232* Added a -ALL flag to xquotecmd to send to all connected servers.
1233* found and fixed a problem with timed_server() which was causing a odd
1234  coredump with is.bx.
1235* modified $aliasctl() for command globbing and assign globbing.
1236	$aliasctl(assign/local/alias/command get/set/match what);
1237	command globbing is a match only operation.
1238	local assigns don't make sense in a match operation.
1239	This will however return all matching assign's/alias's/commands.
1240	The "what" has a appended * so you if you don't specify
1241	a wildcard. Contributed patch to epic.
1242* added /clear -scroll for cleaning out the scrollback buffer.
1243* the away msg is resent when we reconnect or timeout from a server. client
1244  no longer resends the away msg to your channels.
1245* format_server_notice changed. and more server notices now use the
1246  server_prompt variable
1247* Small change made to bx to support NAT. Added -Z flag to enable a userhost
1248  on connect to the server. This sets the address to use for dcc transfers.
1249  supposedly this is enough to get by the NAT server.
1250* # comments supported in .ircservers, ircII.servers etc. when found, we
1251  truncate the line at the #.
1252* added back in, dcc renumbering code. Possible though I didn't catch all
1253  the exits.
1254* configure --with-tcl patch added. This makes the configure script #define
1255  WANT_TCL in defs.h instead of editing the Makefile. Allows modules to be
1256  compiled with tcl/non-tcl support as well.
1257* window logfile will now strip certain chars from the name and replace with
1258  '-'. This is so that nicks with "|\/:" don't cause problems in any of the
1259  clients but specifically with the win95/nt OS2 ports
1260* Added 2 new hooks. LEAVE_ME  is hooked when we part a channel under our
1261  own power. CHANOP is hooked when we gain ops in a channel.
1262* $dccitem() which will return information based on the passed in dcc number
1263  or socket number. args are a number (dccitem) or a #number (socketnum).
1264	$0 type
1265	$1 nick
1266	$2 status
1267	$3 start time
1268	$4 start position for resume/reget/resend
1269	$5 bytes recieved
1270	$6 bytes sent
1271	$7 filesize
1272	$8 filename
1273	$9 socket number of this connect
1274	$10 server
1275* $winitem() added which is compatible in most respects with openirc's
1276  version. if %num then num is a window refnum. just a number then it's the
1277  num'th window in the list.
1278	$0 refnum
1279	$1 name or <none>
1280	$2 server number
1281	$3 current channel or <none>
1282	$4 query nick or none
1283	$5 waiting channel or <none>
1284	$6 <none> (oirc has menu name)
1285	$7 1 visible 0 non-visible.
1286	$8 # of columns
1287	$9 # of rows
1288	$10 reserved
1289	$11 reserved
1290	$12 reserved
1291	$13 reserved
1292	$14 reserved
1293	$15 logfile name or none
1294	$16 L if logging enabled, "" always apart of string
1295	$17 n if nicklist.
1296	$18-$19 reserved
1297	$20+ window level
1298* new flag to /clear -scrollback which will clear the scrollback buffer as
1299  well as the window. /clear -scrollback -all works for all windows.
1300* $chanmode() extended. $chanmode(#chan #) where # can be 0 normal, 1 bans,
1301  2 ban whoset time, 3 exemptions for TS4.
1302     $chanmode(#bitchx 1)  ->  "*!*@*.aol.com"
1303     $chanmode(#bitchx 2)  ->  "*!*@*.aol.com elmer 9123000"
1304* $channicks() and $chanusers() can accept one more param. This is the sort
1305  type to use for call. types of sorting are 0 normal, 1 none, 2 nick,
1306  3 host, 4 time, 5 ip if available.
1307* NICK_COMPLETION_LEN added from a patch by by-tor
1308* some buffer modifications to reduce memory usage.
1309* some old function unused removed.
1310* old prototypes found and removed as well as unneeded ones.
1311* /kb fixed to not send -o the nick, as they are already kicked.
1312* modified module loading to make it possible to load on alot more systems
1313  that don't have -rdynamic flag for exporting symbols. Makes the client
1314  250k smaller in size as well. Shouldn't impact memusage at all. Module
1315  interface changed though to make this possible. a pointer to a list of
1316  functions is passed into the _Init function as well as the pointer to the
1317  command table. These functions can now be accessed using a file with
1318  "alot" of defines in it. modval.h created for this purpose. Internal
1319  functions could possibly be replaced using this method as well.
1320* Robohak contributed a patch to function_msar() which should concievably
1321  fix the memleak in it.
1322* Robohak reported a coredump in p_topic(). should be fixed. looks like a
1323  really desynced condition could possibly exist that might cause a core
1324  dump. ie join a channel, and a topic change appears immediately after.
1325* added /set cdcc on/off for turning your cdcc off.
1326* getsets() leaking memory. drendite found this. hops version also leaks.
1327* fixed small problem whitedrgn found with hooking 364.
1328* seems that /oper <enter> <enter> would core the client.
1329* small patch to p_quit() logmsg() needs the channels even when ignored.
1330* small problem someone noticed with /quit random msgs and /set log on.
1331* changes to convert_output_format() in an attempt at a speedup.
1332* dcc closeall seg fixed.
1333* Added function to return what the client currently thinks the channel
1334  topic is $topic() or $topic(#channel)
1335
1336
1337Changes in BitchX 75p1
1338* my fix to msar() was wrong.
1339* found and fixed a dcc problem with a rejected dcc.
1340* epic pre1.400 changes merged.
1341* scr-bx modified. internal /detach modified to go with it. Added a HUP
1342  signal which will hangup the session.
1343* bug with orignick in .bitchxrc found.
1344* documentation for client plugins started.
1345* removed Ctrl-Z when detached.
1346* added -HUP signal. to detach an attached client. Changed signal handling
1347  when we have a detach client.
1348* Found and fixed several small memory leaks when /unloading a script.
1349  We now remove all arrays and fsets when unloading.
1350* Added a plugin hook for window commands.
1351* Added a plugin hook for a output procedure. It replaces ALL output's.
1352* Set message_from() in chanwall to show too LOG_WALL.
1353* BitchX.url buffer was 2048 and a CTOOLZ_DIR path greater than this would
1354  overfill the buffer.
1355* Added URLGRAB hook which is activated on url's and ftp's. Added USERS_IP
1356  hook for display of users ip in /user -ip display
1357* Fixed term handling of ctrl chars on the input prompt.
1358* Fixed configure option for with-maildir handling.
1359* Added $t to return the name of the currently running alias.
1360* Changed /load to support loading of .so files instead of using /loaddll.
1361* Added a timeout to dcc sends that are inactive. remains to be seen if this
1362  will be effective.
1363* Added a default case for switch(). there can only be one default case in a
1364  switch statement. now switch() works just like the c version.
1365* extremely lame buffer overflow bug on startup. who would attempt to
1366  exploit themselves? uzfopen() was the culprit in this  case though. and
1367  it's used it alot of various file opening functions.
1368* small modification to real_file_send() so that FileBuf is searched for the
1369  wildcard instead of filename. This allows ~ftp/*.zip to be used.
1370* after a little hair-pulling, mirc dcc resumes are now supported. Damn
1371  khaled, why not send back the filename instead of that lame "file.ext"
1372* Silly bug with dcc resend/resume filesize.
1373  if (numbytes == (filesize - offest)) then close the file. Because
1374  otherwise we hang around waiting for the end and cause a little cpu usage.
1375* FORMAT_WHOIS_SIGNON != FORMAT_NOTIFY_SIGNON in notify.c.
1376
1377
1378
1379Changes in BitchX 75  July 1 1998
1380
1381added $b variable.
1382changed strip_ansi() to strip out chr(155) chr(11) and chr(8)
1383Xecho -s added.
1384window new_hide added.
1385fixed +c channel mode core.
1386fixed history command.
1387
1388Added a /paste command. it will take a range of number and optionally a
1389nick or channel to send to... /paste 1-5 [-win #] [<nick|#chan>]. The paste
1390buffer is from the bottom up.
1391
1392bhelp is spruced up somewhat. The internals were completely re-written using
1393normal c instead of the array functions. /bhelp -dump added, which will
1394reload a help file(main reason for the rewrite). Added a -RELATED field in
1395the help file (first word on the line). Found and fixed a small memory leak
1396with this as well (return from the array function was not free'd).
1397
1398Showidle command modified. we can now sort the nicks based on time, host,
1399nick or none. default is by nick. ex. /showidle -sort time
1400
1401Added a auto nslookup of all nicks when we join a channel. Added a IP ban
1402option for /bantype. Also modified ban_it() to accept an ip if passed, or it
1403uses the "Better" bantype if not. /set auto_nslookup determines whether this
1404is active or not. /user -ip will show the ips of the users. /user -ip -op
1405etc....
1406
1407A matching lame nick would kick yourself.
1408
1409set for MIRCS and set for DISPLAY_ANSI have been fixed and updated greatly.
1410formats of various types are replaced with a appropriate default formats.
1411
1412Script writers are going to hate this as I overwrite any changed formats
1413with defaults. I'll have to see about some method of allowing both to exist.
1414
1415Paste command fixed. some lameness on my part was causing the paste to be
1416backwards.
1417
1418New epic who code is a little buggy yet in bx... details need to be worked
1419out. Assume it's parameters to the do_hook(). in the hook array.
1420
1421Added two new command line options. -A for no startup ansi and -N for no
1422auto-connect on startup.
1423
1424Fixed client core when no default servers defined.
1425
1426Fixed ison and waitcmd() coredumps when no default servers defined. (more of
1427these are lurking).
1428
1429Finally fixed /finger so it works.
1430
1431Changed the way we set the cloaked client process.. Still need some
1432auto-detection routines in configure though.
1433
1434Forgot about dcc_resend() when adding "filename with space" capabilities to
1435dcc sends. cdcc probably needs to be done as well.
1436
1437Renamed CLONE_READ to SOCKET. Revamped the socket code considerably.
1438
1439Fixed minor annoyance of /bk not working in new alpha's
1440
1441More socket improvements. sockets will now timeout after CONNECT_TIMEOUT
1442seconds or 120. when we scan sockets, if there is no open sockets dropout of
1443the scan.
1444
1445Possible fix to dcc_Fast.
1446
1447Fixed core with /bhelp -dump when there's no help file in memory.
1448
1449Possible fix for kick_if_banned and numerical ips. as well as a core problem
1450related to this.
1451
1452Possible fix for a core when someone joins a channel and you get kicked.
1453
1454It's now possible to have $glob() return filenames with spaces in them.
1455
1456Things like this are now possible... (alias from |fingers|)
1457alias testarray {
1458	fe ($glob(\*)) ii {
1459	@ setitem(files_array $numitems(files_array) $ii)
1460	}
1461}
1462
1463#$getitem(files_array num)
1464FORMAT_ACTION_CHANNELS added. hopefully we got the right methods for
1465display'g actions.
1466if (is_channel)
1467	if (current_channel)
1468		if (auto_reply && is_on_user_list)
1469			FORMAT_ACTION_USER_AR
1470		else if (auto_reply)
1471			FORMAT_ACTION_AR
1472		else if (is_on_user_list)
1473			FORMAT_ACTION_USER
1474		else
1475			FORMAT_ACTION_CHANNEL
1476	else
1477		if (auto_reply && is_on_user_list)
1478			FORMAT_ACTION_USER_AR
1479		else if (auto_reply)
1480			FORMAT_ACTION_OTHER_AR
1481		else if (is_on_user_list)
1482			FORMAT_ACTION_USER
1483		else
1484			FORMAT_ACTION_OTHER
1485else
1486	FORMAT_ACTION
1487
1488Fixed small bug in the notify. We sent out the notifies when we recieve
1489jumeric 250. but, the notify list was improperly built.
1490433/438 numerics changed to add the server to the hook. $0 is the server.
1491
1492dcc.c completely rewritten to use the new socket code. non-blocking sends
1493are used if possible. FBIONREAD is used to find how much information to read
1494from a socket. bot_link.c is not finished. DCC_RAW is not finished. Code is
1495alot less verbose than before. arguements to all the send/get/resend/reget
1496commands are all the same in the possibilities. Each dcc can have it's own
1497blocksize. DCC_TIMEOUT is used to specify the timeout for each dcc. DCC_PROC
1498in module.c is actually implemented (might even work). dcc's are much faster
1499now...
1500
1501Small bug in $writesocket() found and fixed for shade.
1502
1503Changed /wii and friends to support multiple nicks on the command line.
1504added -topic to /paste command.
1505
1506Added +format_xxx variable support. if you /fset +format_xxx "some text"
1507that variable is now a format variable and $format_xxx $fparse(format_xxx)
1508etc will work on with it. You can re-define ALL the format variables using
1509this method, although there could be a speed decrease using it... This might
1510actually be a good place for a hash table instead of a linked list.
1511
1512Found a problem with check_serverlag() where it was possible to flood
1513ourselfs off the server with ping requests.
1514
1515Merged in the changes from epic4pre100.
1516
1517An auto-away time bug and a msglog bug fixed in update_clock().
1518
1519Merged in changes from epic4pre200.
1520
1521Fixed a bug in skip_incoming_mirc() which could cause a lockup. Also fixed
1522this so that /set MIRCS works properly...
1523
1524Channel cset queue setup. what does this mean? well we can now /cset
1525#channel  we currently aren't on and add that channel to a queue. So when we
1526do finally join that channel, the queue'd csets are used. This allows us to
1527use csets from .bitchxrc or .ircrc files.
1528
1529FromUserHost is set to empty_string at the end of the processing. This
1530should allow logmsg() to use $userhost() correctly.
1531
1532Fixed small problem with spaces in filenames in a dcc. should work now.
1533
1534A major incompatibility added. /on dcc_request used to return "SEND" as the
1535type of request for a file send. Personally I feel this should be "GET".
1536
1537Added in epics style of ctcp booster for dcc's... what happens is this. If
1538you /dcc send or /dcc chat someone and that person happens to "miss" the
1539request because of a netsplit, we can /dcc send again and the request is
1540booster'd again instead of giving you an error about already existing and
1541ignoring. The warning is still given however.
1542
1543Phucilage found an actual bug. /set scrollback was not doing what it was
1544meant todo.
1545
1546Added USER_FLAG_OP and USER_FLAG_PROT which are run when the a userlist
1547person is op'd or a userlist person is kicked or banned.
1548
1549Found bug in check_prot where a REOP is not possible. Found bug in delay_opz
1550for voiced users.
1551
1552DavidW2 noticed a bug in the way that EXEC_EXIT was done.. m_strdup(logical)
1553was not good for the process structure.
1554
1555Lame BlackJac decided that format_send_away was too plain so forced me to
1556add a new variable $u which is the time you set away in seconds since the
1557epoch , and change the format to incorporate it.
1558
1559tsd!tsd@cal001307.student.utwente.nl pointed out that set_xterm_title()
1560wasn't following properly. Also added format_xterm_title format.
1561
1562Added /dump fset  which dumps all fsets and resets them to my defaults.
1563
1564Added /dump wset  which dumps the wsets for ALL windows and resets to my
1565defaults.
1566
1567Added /dump cset  which recreates the channel csets from the defaults in
1568/set
1569
1570Problems with dcc resends fixed. involved quite a few changes in dcc.c.
1571
1572Fixed problems with dcc % on status bar as well as fixed up numbers
1573displayed while in a dcc resenD on the /dcc list
1574
1575Decided to use the screen buffer instead of the lastlog buffer in the /paste
1576command. This shouldn't mean too much for the casual user but internally it
1577means that what you want displayed is displayed. lastlog doesn't always have
1578everything logged in it.
1579
1580[penix_(penix@pm6-24.kconline.com)] found a small problem with dcc causing a
1581coredump. several people had mentioned it..
1582
1583After talking with Sheik, we decided to add a feature to the status bar
1584variables. you can now specify a "width" to print a variable. if %<.10>N for
1585example, the nick will take "at most" 10, and is space padded to 10. %<-10>N
1586will make it left justified. Currently there is no way to say %<-.10>N. This
1587will work for all status variables including the status line itself.
1588
1589Added a $getflags(uh chan) function from sd-.
1590
1591Added some new hooks. WHOLEFT_FOOTER, USERS_FOOTER, USERLIST_FOOTER,
1592STAT_FOOTER, SHOWIDLE_FOOTER, SHITLIST_FOOTER
1593
1594One more change to dcc sends. removal of dcc_fast for now.
1595
1596Added a configure option for specifying the mail directory.. --with-maildir
1597
1598Added NUM_KICKS for the max kicks allowed in one kick...
1599
1600Changed kickban() to modify the way that /bk and /kb are done. also allow
1601for /kb nick,nick1,nick2
1602
1603Figured out what I'd done wrong in pastecmd().
1604
1605dcc is working much nicer now. tdcc is not. Fixed a possible core if the
1606directory we are attempting to save too is non-existant or non-writable.
1607
1608Possible core problem with scratch windows cured.
1609
1610Possible fix for userlist when a channel is specified with a "*" in it. This
1611broke the auto-invite on notify feature.
1612
1613Somes changes to tcl.c and a new tcl.o version is born. the alias var's were
1614not exported to tcl. Now _T (current_target) are available. Also get_var,
1615set_var, fget_var and fset_var are available.
1616
1617The party line is now working with the new dcc code.
1618
1619_]Nuke[_ is working on a OS/2 pm port of bx which will be an option while
1620compiling under OS/2.
1621
1622Found fixed a off by one screen error which was causing problems on a
1623/window kill.
1624
1625STATUS_UPDATE will be hooked anytime a status bar update is occuring.
1626DCC_UPDATE will be called when a dcc transfer is occurring at the same time
1627that the dcc status percentage is updated.
1628
1629$randomnick() will take upto 2 args for initial len and max length of the
1630string.
1631
1632With the help of Raistlin and neonapple a bug in the fix_status_buffer()
1633code was found and fixed. un-init'd variable was causing the problem
1634
1635Xavvy requested a install_local which will install BitchX and some other
1636files for a local user. it checks and creates ~/bin and ~/.BitchX and then
1637copies and links the binary BitchX in ~/bin. Also we copy the various
1638BitchX.* files into ~/.BitchX for the user.
1639
1640OS2 PM changes merged in. todo are multiple windows. added a configure
1641option  --enable-pm for os2 PM support. Otherwise vio window support is
1642used.
1643
1644Added support for identwd by whitedrgn. It's a more configurable identd.
1645
1646Fixed problem with bk and it's mesg about kicking yourself.
1647
1648Small bug with /quote used in a ctcp hook found and fixed.
1649
1650New file added. tcl_public.c which set's up the tcl commands within bx.
1651source will be distributed for it.
1652
1653Whoopsy misplaced /clones. also broke auto_away. fixed.
1654
1655Changed longip() to actually convert a long to a ip and added iplong() which
1656takes an ip and converts it to a long.
1657
1658Added a small change to add_to_channel() in names.c. IF the channel is not
1659on your list, but is in the whowas list, the nicks are added to the whowas
1660nick buffer. This will allow us to keep a list of nicks from a join to a
1661channel when we are kicked immediately before the sync.
1662
1663a /user -kick would core dump.
1664
1665Some of the relevant parts of epic4 pre300 have been incorporated. His
1666server re-connect needs alot more work than bx's
1667
1668Added socks4/5 firewall traversal code directly into bx itself.
1669 /set SOCKS_HOST and /set SOCKS_PORT as well as command line
1670argument -S added. If SOCKS_HOST is not set, then no traversal will be
1671attempted. As soon as it is set however, then we will attempt to use the
1672SOCKS4/5 firewall on the next reconnect to the irc server. No idea what
1673effect this will have on dcc's or other tcp related things.
1674
1675Changed $channel() to return info about if the user is on your userlist or
1676your shitlist. & and ! respectively.
1677
1678found and fixed several more memory leaks. Added a delete_all_arrays() to the
1679/dump all command. Added /dump array command as well.
1680
1681Loosing my HD didn't help my source tree any. still a few "weird" characters
1682scattered around the source tree.
1683
1684for now we can use the new /detach [password] command to detach a bx client
1685from the terminal. you can then later log back into the client using
1686BitchX -R [tty] [pass]. This is still rudimentry and still buggy
1687at the moment. kasper has agreed to write a frontend program to replace the
1688BitchX -R so we aren't running 2 copies of bx. This will reduce memory
1689requirements (ie two copies). Password is also encrypted as well using a
1690random seed.
1691
1692Rain noticed a problem with xecho -level. missing break was causing trouble.
1693Created a new pgm while waiting for kasper to create it. it's a mini-screen
1694attach program for bx's internal /detach. it's called scr-bx. -h gives help
1695on this useful little program.
1696
1697BitchX -B mode changed. it no longer does what it used too. It now detaches
1698from the terminal and runs in the background (like before) but, we can now
1699re-attach to that session unlike before Thanks too a chat with kasper we now
1700have a small program for re-attaching to the backgrounded program..
1701
1702
1703Changes in BitchX 74p3
1704Oper'g is now more safe. the oper password is not kept in core. it is
1705removed as soon as possible from any place where it might be kept. ie
1706do_hook(), vsend_to_server(), parse_line(), parse_command(), oper(),
1707oper_password_recieved() all memset the buffer's used if this is a oper up
1708command. As well the history() function does not save the /oPer command.
1709A bunch of various fixes included.
1710$exec() will no longer work from a format.
1711change to /window server so that LOG_NONE is set instead of LOG_ALL
1712$getinfo() $setinfo() broken and fixed
1713/ig + host  no longer cores the client because of a typing error.
1714multiple nick changes within nickflood time would trigger for us. we would
1715kick ourselves after so many nick changes.
1716Habit helped find a problem with the userlist looping on a /save. It seems
1717that attempting adding a channel which occured at the end of the hashlist
1718would cause the client to lockup while saving a userlist... This is a long
1719standing bug that was difficult to find at best.
1720Server lag is now sent and calculated for all connected servers.
1721Fixed kick of self when /ctcp version yourself.
1722mk and lk are fixed now. in fact, they roq.
1723
1724rale sent me a patch to make bx compile under OpenNT gcc environment. Patch
1725is included and here are some notes from him
1726# Known Problems:
1727#  The configure script screws up when it makes source/sig.inc,
1728#  -You need to remove the second line of this file when configure finishes
1729#  /exec doesnt work
1730#  /window create doesnT work
1731
1732Added a small change to $fparse() which will add/del a variable if it's not
1733found in the list. it's actually assigned. so it will not appear in the
1734/fset but will appear in the /assign
1735With your userlist off, ctcp op and unban commands were still able to work.
1736this is a defiency and is now fixed.
1737Patch from  Pharos(hitui@tty005.ims-1.com for making the
1738rename_file() return a filename with a number instead of a letter.
1739this affects dcc auto transfers.
1740Patch from FreeLSD <dimka@solo.telekom.ru> for translation.
1741/toggle changed so that the /on set is used for screen output.
1742possible fixed for shitty compress_modes() function. This thing was a huge
1743memory leak.
1744Possible solution for filenames with spaces in them. you need to quote the
1745filename ie /dcc send nick "filename with spaces" or
1746"dir/filename with spaces". The filename is converted to a name with _'s.
1747Christian Deimel (defender@gmx.net) sent me a patch that implements random
1748irc names. /ircname with no args will set the ircname to a randomly chosen
1749one for the next server connect. BitchX.ircname has the random irc names.
1750Changes made to /window level +/- is now allowed.
1751Modified server reconnect strategy. /set MAX_SERVER_RECONNECTS defines how
1752many times we will attempt to reconnect to a server.
1753more fixes to compress_modes.
1754%- is now safe as a status format variable.
1755Major internal changes for the status bar code. %{0}S specifies status
1756expando map 0 (gives server), %{1}S would be map 1 and is undefined at the
1757moment. I do have %{1}0-9 defined. which gives us the old %!10  method of
1758specifying  status_user10. STATUS_USER was renamed to STATUS_USER0 to help.
1759$n will return the current server network if known.
1760$getcset(var [#channel]) returns the CSET variable for either the current
1761channel or the channel specified.
1762$getfsets() or $getfsets(match) will return all or just matching formats.
1763Added a field to the cdcc packs for the time added. it's displayed when
1764someone requests /msg nick cdcc info #
1765$listarray(name) will list all elements in an array with "name"
1766New cset/set CTCP_FLOOD_BAN  will ban a nick using the current bantype
1767that is currently set. This works for channel and private ctcp floods.
1768epic 0.49 changes merged in. along will some fixes for brokenness.
1769
1770
1771Changes in BitchX 74p2
1772notify_mark() coredump on undernet fixed.
1773p_invite() coredump fixed if your not on a channel when invited to a new
1774one.
1775Small cosmetic fixes to convert_flags() and /rel
1776/j #chan will now reset the prompt to the new channel. This only occured
1777when we were already on that channel.
1778the /ftp command would seg if a bad host was given
1779$s returns the port of the server.
1780Changes from epic 0.36 and 0.37 added. These ARE major changes.
1781Added new fset FORMAT_OV which is the status format for the oper view.
1782Command /addword fixed.
1783Couple of minor fixes for /window split on /window triple etc added.
1784Fixed expr.c 409 local alias problem.
1785Fixed not on channel bug with /ban nick
1786KinSlayer
1787Fixed up possible problem with cores and windows. rejoining a channel in a
1788non-active window had the possibility of causing a coredump.
1789$msar() which is a modified sar(). it will do multiple sar's on a  string.
1790the command char cannot be used in the string.
1791SERVER_PROMPT fixed up to use cparse() style formatting.
1792Added /cdcc secure which allows you to add passwords to packages offered.
1793New /on FTP for the ftp client output.
1794By-Tor made a patch that uses strstr() to help with nick completion. so for
1795example |By-tor| is the nick, you can now do By-t: and it will complete.
1796Added most changes upto epic 0.41.
1797Added a patch from Khinsanth which fixes -H as well as added
1798CHANGE_NICK_ON_KILL.
1799New keybind BLINK.
1800New Variable BLINK_VIDEO
1801New /window query which can accept -cmd
1802New functions $leftpc(), $mask(), $querywin() replaces $winquery(),
1803$uname()
1804New argument to /xecho -nolog
1805New /cdcc secure added which adds/removes a password for your entire cdcc
1806package list.
1807Bk found a invite bug.
1808Number-6 fixed a problem that BSDi seemed to have with dcc's of 0 size.
1809SellFone found a bug that was created when [nutbar] insisted that /Set
1810server_prompt be able to parse % color codes.
1811I broke sort() when patching in epic changes.
1812Green found a problem with /adduser -whatever looping forever.
1813Raistlin found a problem with -L removed the - that was being appended to
1814the script name. .bitchxrc overrides .ircrc files as a side note.
1815fset can now be hooked just like /set is.
1816Sping now works again. We now use a slightly modified version of old bx
1817technique and new.
1818cdcc secure password is stored in the .cdcc.save file.
1819Small bug in /hostname on linux systems prevented display of the virtuals.
1820
1821
1822Changes in BitchX 74p1
1823
1824Coredump problem with timers and windows fixed. Possible problem with
1825set_current_screen() repaired.
1826
1827Abnormal usage with dcc chat's cleared up.
1828
1829Found/fixed problem with /url grab on
1830
1831Added IOPS for immediate ops. nick needs to have OPS and IOPS for this to
1832work.
1833
1834Timecop noticed that +Window new 10 times would core a client.
1835
1836We handle a few more Dalnet specific numerics. Some extra /set's added to
1837support them. Check out /fset format_whoi
1838
1839exec now closes ALL descripters on exit so we no longer run out of file
1840handles after 150-limit files.
1841
1842|by-tor| requested that if there is no current channel but there is a query
1843then /ver and /p should be sent to that nick. Added a check for
1844get_target_by_refnum() in ping_cmd and ver_cmd.
1845
1846Phucilage updated the BitchX.help file for us.
1847
1848Changes in BitchX 74
1849
1850New userlist is hashed into 3 tiers ala CToolz.
1851	tier1 is based on hostname with no wildcards.
1852	tier2 is based on channel with no wildcards.
1853	tier3 is standard linked list.
1854with many user's on the userlist we have increased lookup speed of a user on
1855the list significantly. This in turn speeds up the client. Sheik and I
1856worked on this.
1857
1858New flag based userlist system.
1859	VOICE, OPS, BAN, UNBAN, INVITE, DCC, KILL, DIE, FLOOD, BOT
1860	REOP, DEOP, KICK, PBAN, PINVITE
1861
1862	Predefined combinations
1863		FRIEND = VOICE,OPS,UNBAN,INVITE
1864		MASTER = VOICE,OPS,BAN,UNBAN,INVITE,DCC,FLOOD
1865		OWNER = MASTER,KILL,DIE,BOT
1866
1867	Combinations of these flags can be combined ie  VOICE,INVITE,UNBAN
1868	so we now have the following
1869		/adduser nick #channel voice,invite,unban
1870Hostnames are added with the exact hostname unless a nick!user@host is used
1871instead of just the nick. This is so that we can take advantage of the new
1872userlist system
1873
1874
1875New Compile time defines to remove un-used portions of BX. Look in
1876include/config.h
1877
1878Added the ability to unload a dll after it's loaded. /unloaddll dllname
1879
1880Added a RAW_PROC for dll's. This is hooked in even before a numeric proc and
1881can be used in place of a numeric proc. The Raw proc is a hash'd list
1882for a speed increase in large loaded DLL's. Numeric procs will change to
1883this format as well.
1884
1885Fixed up tier3 remove proc to also check on a strcmp() of the host.
1886the command /unuser -ALL required this small change.
1887
1888New screen/window code from epic merged in. /clear works now.
1889
1890Added new %a aop %s shitlist %h hacking %u userlist %b bitchmode variables
1891for the status bar. These are single char flags. Changed status_away to have
1892the away msgcount in it.
1893
1894Fixed /reinit /reinitstatus so it doesn't blank the statusbar on a Ctrl-L.
1895
1896Reduced memory requirements by a small amount by reducing some static
1897buffers.
1898
1899Status bar repeating chars should now work as advertised.
1900$winnames(refnum) will return a list of all names of nicks specific to that
1901window. nicks are added with the /window add command
1902
1903Corrected output of status line. damn extra strmcpy()'s creeped in. This
1904might also account for some strange coredumps as well as some strange screen
1905behaviour
1906
1907For some damn reason we forgot about /unuser :)
1908Added -ppp to /adduser to add hostnames in the original fashion with
1909*.host.edu
1910
1911Improved /swatch commanD somewhat. This allows /set swatch to save what the
1912user would like to server watch.
1913
1914Changed split_up_line() to recognize a , or a space as a word separator.
1915
1916Merged in changes from epic4 026. Some changes backed out because they do
1917not work. ie -%> which hop had reworked from my original patch.
1918
1919New load code broke send_text. load_depth of -2 was not a good thing.
1920
1921Another %c%s type bug found and fixed.
1922
1923Changed format_away to include  is away: for those that wanted it.
1924
1925Found small bug in /readlog which was causing the odd occurances in away log
1926reading.
1927
1928Fixed small bug in /load which was causing loTza trouble.
1929
1930dcc status bar bug I introduced fixed.
1931
1932timer command changed to allow multiple args. This is not very robust, just
1933a quick hack to allow /timer -rep -1 -ref blah   to work.
1934
1935Added /dcc help command. Also /window help
1936
1937Fixed /sping to do the right thing if a server doesn't exist.
1938
1939Changed %s to %f on the status bar added %s as a modified %S
1940
1941Fixed load parser load_depth != -1 for non-interactive commands so make sure
1942and check that in parse_line(). Prevail suddenly almost works now.
1943
1944Passwords are now checked if passed into find_bestmatch().
1945
1946Reason scripts were a little broken if a /* appears somewhere on a real
1947line, is that /set comment_breakage defaults to off. We should set this on.
1948
1949Possible fix for window/channel chatter going to wrong windows. Added
1950win_channel_swap_ptr() on swap_window() as we need to keep the
1951channel->window ptr's current and swap_window() does a nasty thing.
1952switch_channels() rewritten and everything seems to work. add_to_screen()
1953modified slightly to send text to the correct window/channel.
1954
1955Added slight modification to cannot_join_channel() so output goes to the
1956current window.
1957
1958Krome found a little bug with /windows and channels. lookup_channel() needed
1959to check the return from get_channel_by_refnum() before passing it on to
1960stricmp(). This also pointed out that /window kill doesn't update the input
1961prompt at all.
1962
1963Added /dcc help and /window help. Filled out help for these commands as
1964well.
1965
1966The command table from the server has been put into a hashed list. /debugmsg
1967will show some simple stats on this.
1968
1969Modified the server msg to use a hashtable. /debugmsg will display some
1970statistics
1971Modified /on # to use a hash table for the numeric and then a linked list
1972for the actual hooks. This should speed up numeric lookups considerably.
1973
1974
1975
1976Note: some of the following commands are a part of openchat irc client by
1977mikh.
1978
1979Added $isconnected(<refnum>) to tell a scripter if we are connected to a
1980server or not.
1981
1982Added /evalserver <refnum> <command>  which will send a command to a
1983specifIc server.
1984
1985Modified $myservers(0/1) to return either the names of the servers or the
1986refnum of the server. default is too use the name of the servers but a 1
1987will cause it to reply with the refnum of the connected servers
1988
1989Added /purge name which will completely remove all traces of a
1990variable or variable structure. Keep on eye on this as it might also be a
1991memory leak.
1992
1993Found that $[3]#function(params) was not working as it should. Fixed. Epic
1994has this same problem.
1995
1996Added /timer -update refnum  which will update a timer specified by refnum
1997to a new timeout or new command.
1998
1999The /window command now accepts as a first param the window refnum wanted.
2000So /window 2 double on will turn on double status on the 2nd window.
2001
2002Added new function called $fparse() which will take a format name and params
2003and evaluate it just like the client does. so $fparse(format_ctcp panasync
2004ctcp ctcp) returns the parsed format for format_ctcp.
2005
2006Added hash'd function list routine. First time a function is used the
2007functions list is hashed. From that point on, instead of searching the
2008entire list everytime a function is called, a hash of the name is done and
2009the lookup becomes very fast.
2010
2011Seems that /ctcp nick ident and returning the access denied wasn't such a
2012good idea, so I removed the access denied notice.
2013
2014The /on FLOOD has been modified to include the type of flood detected. Also
2015the channel or a 0 is sent in order to detect if the flooding took place on
2016a channel.
2017
2018Attempted fix foR that odd error that joining a channel with a { or } in it
2019caused.
2020
2021REfixed my attempt at wierd channel names with {} in them. quoting # was
2022maybe not a good idea.
2023
2024Added limited support for server groupings. ie /server [efnet] will attempt
2025to connect you to the first [efnet] server. .ircservers and config.h as well
2026as /server modified to support a server group name. .ircservers can use the
2027following syntax.  server:port:password:nick:group or [group] on a single
2028line by itself to represent all the servers that follow upto the next
2029[group]. If any of the params from server:port:pass:nick:group are left out
2030then we do the following  server::pass:nick:group or server:::nick:group
2031etc.
2032
2033Fixed find_bestmatch() to not put the userlist entry into the nicklist if
2034the channel doesn't match. p_channel() will also reflect this small change
2035in that we no longer check for a channel_match().
2036
2037A /xdebug would cause a coredump in add_to_display_list().
2038
2039Added back in /lastlog -clear. This was removed because of the new display
2040code.
2041
2042Added $getcdcc(#) which will return info on a specific pack number.
2043
2044Found and removed a couple of small memory leaks.
2045
2046argh. /stack on was very broken. might also be why scripts were loosing
2047memory all over the place lately. Working now.
2048
2049Xterm and screen title now set on startup, join to channel and channel
2050switch.
2051
2052Major memory leak foUnd and fixed. This should cause memory usage in certain
2053scripts to stabilize alot.
2054
2055Ctrl-W-b needs fixing.
2056
2057Small change to format_notify_signon_uh and format_notify_signoff_uh. We now
2058store the complete user@host internally instead of separately, meaning we
2059needed to change the format's as well. Yell at [nutbar] for this internal
2060change.
2061
2062Fixed another memory leak in the alias parser in calling expand_alias();
2063Fixed one other memory leak with /stack push set in vars.c
2064Found one in send_text() and add_to_channel() from the whowas chan buffer.
2065Another in dcc othername was being m_sprintf() and m_strdup() if BROKEN_MIRC
2066was defined.
2067Another memory leak in dcc_really_erase(). Where the hell are all these
2068coming from.
2069
2070URL grabber changed. We now keep a list in memory. We can use the new
2071command /url to manipulate this list.
2072	/url http|ftp on|off
2073	/url save|clear|list
2074
2075With help from Rosmo BitchX has been ported to OS/2 vio window. It actually
2076runs better under OS/2 than under win95/nt.
2077
2078Merged in changes from epic 032. Including one other patch for return
2079statements.
2080
2081Merged in changes from epic 033 as well as fixing several bugs in epic 033.
2082
2083Added TIMER_HOUR hook which should go off on a hourly basis only.
2084Added /cdcc stats
2085Modified getcdcc() to return number of packs available when getcdcc(0) is
2086used.
2087Various other fixes made.
2088
2089Attempted fix for SunOS/AIX possibly others problems with /cset and friends.
2090
2091AIX2 doesn't like WANT_DLL so we specifically undefine it in config.h
2092
2093Couple of commands CONTINUE and CONNECT out of order. As well I forget
2094UNCLEAR_TEXT as a key binding.
2095
2096Added sendcdcc() which accepts a nick and a pack number to send.
2097
2098Added hook cdcc_send_nick which is called whenever someone requests a cdcc
2099pack. this can be used to keep stats on who's the top downloaders and stuff.
2100from, userhost, command, pack#, # of files, # of gets, filelist and desc
2101are all passed in. If the file is queued command is pre-pended with Q. For a
2102local send userhost is "unknown".
2103
2104Cdcc now saves the type of send requested to the queue so that queued file
2105sends will follow the requested type.
2106
2107Stack on was causing a problem in scripts using it.. Possibly fixed as
2108this alias no longer causes a core.
2109alias buggy if (![$0]) {echo use /buggy <nick>}{
2110  fe (311 318) num {^stack push on $num}
2111  ^on ^311 * {@_n=[$1]}
2112  ^on ^318 * {fe (311 318) num {^stack pop on $num}}
2113  ^wi $0
2114}
2115
2116The /toggle auto_reconnect was broken due to auto_rejoin.
2117due to complaints the xterm status bar change code is now a toggle.
2118And /wset status_f will now return all the status formats for that match.
2119
2120
2121
212273p2
2123Fixed ${format_version} for scripts.
2124Fixed status bar overwrite on long lines.
2125Fixed annoying problem with scrollback, using new epic display code.
2126Added new flood checking using hash'd lists instead of an array.
2127Other changes made for /set -format for compatibility.
2128a /cset in the .bitchxrc file would core.
2129window.c/status.c changed ala epic. My own modifications added for split
2130menu bar.
2131window split and window triple fixed up to work properly in epic's new code.
2132
2133
2134
213573 released on 09/08/97
2136Still a speeling error in commands.c /ight was in wrong place.
2137Added a /ctcp ident. User must have a password.
2138Slight fix in dcc.c involving read(). We should read the MAX_DCC_BLOCK_SIZE,
2139not just dccBlockSize().
2140
2141Some possible overruns fixed in bot_link.c
2142
2143Added Resume to /dcc help
2144
2145Added two new status variables. %& and %| will display dcc stats and cdcc
2146stats.
2147
2148dcc exempt +nick  will add a nick to the autoget list. This list has nicks
2149that do not trigger dcc/cdcc flood protection and as well even if the dcc
2150autoget is off, the files will still be autogotten. Nicks are saved in the
2151BitchX.sav file.
2152
2153addnoflood nick added. This nick will not trigger flood protection at all.
2154
2155Changed /hostname for linux systems.
2156
2157Added new /tcl bind type for hooks.
2158
2159Fixed a problem with p_part() and send_2comm() which was causing segfaults
2160when leaving channels.
2161
2162Some fixes from firebug incorporated into bx and passed onto epic.
2163
2164A long standing bug in convert_output_format() %l fixed. Damn p++
2165
2166Added $isignored(nick) which will check the ignorance list to see if that
2167nick is ignored.
2168
2169Fixed a bug in the cdcc queue system which could core you.
2170in BOT_MODE a nick has to be on the userlist in order to have auto-chat
2171
2172The cdcc queue should now be more respectful of the DCC_SEND_LIMIT
2173
2174Also people requesting a remote queue list, will not recieve garbage back.
2175As well as fixing a potential core dump of the client.
2176
2177Fixed some possible flood problems in cdcc. Only one mesg is send for a
2178queued file request or a full queue. Changed some msgs in cdcc.
2179
2180More /toggle's added by request.
2181
2182$checkshit returns more info now
2183
2184output_line() make_status(), status_make_printable() modifed heavily.
2185
2186do_unkey() didn't like NULL being passed into vsprintf() on SUN's
2187
2188Added all ircII variables to tcl output. All except the FORMAT's
2189
2190Fixed /toggle oper to actually do the toggle and window create. As well
2191toggle will take multiple args and toggle each of those.
2192
2193New ctcp uptime will return the current uptime of the client.
2194
2195chanst would core if you were not on a channel and didn't specify one on
2196the command line.
2197
2198Some kinda souls noticed an extra d in the msg we send back when away.
2199
2200$channel() or $channel(#chan) will return the channel nicks in a list with
2201a . - normal, @ - op, + - voice. if the user is an ircop then * is first.
2202
2203Status bar ansi bugs fixed.
2204
2205Kill parser for Operview rewritten in an attempt to make it process faster.
2206
2207Fixed up a couple of minor glitches with /toggle /chanst /nwhois
2208
2209Added bots and clients commands to tcl. tcl 1.3
2210
2211Major changes to the output routines from epic. status bars/screen output
2212code has all been rewritten.
2213
2214Fixed a small /back bug with the number of mesg's recieved while away
2215
2216A new command /signore for ircops added. /set SHOW_ variables have now been
2217removed as redundant and unnessary. Some changes to the handle_oper_vision()
2218function were made.
2219
2220Several fixes done on new epic scroll routines. add_to_window(),
2221split_up_line() and put_echo().
2222
2223A new command which set's MSGLOG_LEVEL implemented. /awaylog will set what
2224we want to log in the away log. Started adding moRe logmsg()'s in the code.
2225Need to add some help for this command. /set format_msglog is used to define
2226what is put into the mesg log.
2227
2228Ok, repeating timer added. /timer -rep 10 command will repeat the command
2229every 10 seconds until deleted.
2230FORMAT_TIMER modified to include Repeat as a Yes/No variable.
2231
2232Renamed /signore to /swatch.
2233
2234Changed /timer -rep to /timer -rep times   where -1 will repeat forever, and
2235>1 number's will repeat times times. a 0 rep will do nothing. /timer -r
2236changed to /timer -ref to remove any ambiguity.
2237
2238Bonehead mistake in ircaux strmcat/strmopencat fixed.
2239
2240Fixed up $statsparse(%>%M)  so it actually pads.
2241
2242Getting ready to revamp the help system including /help. A possibility of
2243using the BitchX.help file internally.
2244
2245Major revamp of /cset using Sheik's cset code. Added /wset to compliment
2246this.
2247
2248Some memory leaks on the status bar fixed up. This may have been where we
2249were losing memory.
2250
2251Modified /cset according to sheik to handle * and channel names. This same
2252thing can be applied to windows and window names. So /wset * status_Format1
2253will modify/display the status_format1 variable for displayed windows or
2254just for windows with certain names.
2255
2256Fixed a bunch of complaints mainly todo with /cset /wset. msg counts when
2257/away were slightly borked as well. increased the alias cache to 30.
2258To see what this is do /alias /s .
2259
2260Added /wilm /wiln  for last message and last notice recieved whois
2261
2262Fixed screen/status bar problem with long lines.
2263
2264Changed check_channel_match() to use next_in_comma_list() which should make
2265it faster. Possible fix for ajoin of channel with keys.
2266
2267Added /dump timer. Also changed /unload to dump the running timers.
2268
2269Modifed /ov so that if the operview window is open we can /ov
2270hide/+hide/-hide this window at will
2271
2272Recent changes in the way we handle /set ignore_time cause us to ignore
2273someone for 0 seconds. which in turn causes us to unigore immediately. So
2274check /set ignore_time it should be in seconds. as well check
2275pubflood_ignore_time
2276
2277Fixed awaylog timestamping for good.
2278
2279Added support for ircu's ># <# filter. /list -ircu -min # -max # *irc*
2280Support for this could be automated in scripts quite easily.
2281
2282Fixed NICK statement usage in .bitchxrc or .ircrc files so a segfault
2283doesn't occur. If found all we do is copy this nick into the default
2284nickname statement.
2285
2286Added /fset for the format variables. /set format still works (bonus) but a
2287/set will not display the format variables. /fset WILL replace /set format
2288in the future.
2289
2290Added /set CLOCK_FORMAT  which uses strftime() to set the clock format.
2291
2292Re-arranged some source code. modules.c fset.c var.c.
2293Re-wrote /Fport to use non-blocking connects.
2294
2295Found annoying bug with disappearing messages in rite() update_all_status().
2296recursive split_up_line() output_line() is a real no win.
2297
2298A problem with excessively long lines found and fixed. Dcc chat messages
2299were not being displayed properly on send.
2300A couple of bugfixes for NT/95 Bitchx specific versions introduced.
2301
2302
230372p1 released on 072097
2304Fixed a couple of SunOS bugs. /cdcc list and switching servers no longer
2305cores.
2306Fixed that annoying little problem with the status bar appearing during a
2307/exec or a /redirect. This bug appears in all clients that update the status
2308bar frequently (ie during dcc transfers and a status update).
2309bx-wall now uses format_bwall for output to you as well as incoming.
2310identd server built-in for win95/nt. Simple to code.
2311identd server removed from windows... Simple, but cygwin too buggy for now.
2312Added $winlen(opt_win_refnum)  returns the length of a window.
2313Added -R -X and -Y flags to XECHO. basically does a direct screen write,
2314without logging. no update of the internal structures takes place. Ideas
2315from ShadowImg. -R is a Raw write, no cursor positioning is used.
2316STATUS_FORMAT2 changed slightly. Removed Aw from the format. Added
2317STATUS_MSGCOUNT to format the away msgcount variable.
2318Lotz of other bug fixes which I forgot to keep track of.
2319/dme and /qme commands added. /me is to a channel. /dme goes to the first
2320dcc chat found /qme is for a /query.
2321FORMAT_BWALL used in /wall for output.
2322/loadtcl and /tcl -file will now search the LOAD_PATH for tcl scripts to
2323load.
232472 changelog
2325Little bug fixes in mail and in speeling mistakes I made. /set aop and /cset
2326aop were broke.
2327epic pre 0.38 patches incorporated into the client.
2328/lastlog -file filename  support added.
2329/lastlog -clear to clear the lastlog buffer.
2330maybe fixed up /addidle and /unidle.
2331Added some epic pre 0.39 patches.
2332Rewrote /rel and friends. I think maybe they might actually even be usable
2333now. -kick, -wall, -notice, -msg, -wallop, -topic, -kill, -kboot and -list
2334are the flags for /rel*. Need to test each one as the formats will need to
2335be modified.
2336Fixed lagtime indicator. Seems we forget to check if the server was
2337connected or not.
2338Ctrl-F was not working at all. switch to split server.
2339Not that suicides count_ansi wasn't any good, but we have a internal
2340count_ansi() function already. $countansi() returns the number of ansi chars
2341that are in a string.
2342More /ignore types added. /ignore * quits fixed up to actually work. As well
2343parts, nicks, pongs and squits are implemented.
2344Started to change cdcc.c to allow packs for servers.
2345Small buglet with channel names with % in them. sprintf() was attempting to
2346translate that into valid variables and failing miserably. Only a few places
2347in the client needed to be changed to support the proper thing todo.
2348Small changes to convert_output_format() which allows limited recursion
2349levels. Hairy.
2350Small tcl changes. New bind check_help_tcl() which you can use to display
2351help for tcl / commands. The function name + _help is used to check for a
2352bind of that name. and it is then called with no parameters. tcl_versionstr
2353added to help alleviate some aggravation on what is the newest tcl.o file
2354for a system.
2355format_version has changed to include tcl and 1.0 if possible as params.
2356Hashed the channel's nicklist.
2357Hashed the whowas list of nicks.
2358Fixed /stub which wasn't working at all.
2359/tog disp_ansi  now should do the correct thing with the status bars and
2360input prompt.
2361Several other problems fixed. most notable was the problem with scripts that
2362used $cparse() and the built-in exec protection in it. Source should now
2363compile either on unix or cygwin systems
2364/cdcc describe now works as advertised.
2365
2366patch from Nimrod Zimerman to add a /set AUTO_COMP_CHAR variable. Setting
2367this variable defines the char to look for when using nick completion. If
2368set FORMAT_NICK_COMP is undefined then it is also used for display in the
2369channel. What follows is his description of how it works.
2370
2371This input:
2372   "Lon, What's going on with the Shadows?"
2373Will not be changed under usual condition.
2374
2375However, after executing:
2376   /SET AUTO_COMP_CHAR ,
2377(the comma above is part of the command!)
2378and:
2379   /SET -FORMAT_NICK_COMP
2380The same input will be completed to form:
2381   "Londo, What's going on with the Shadows?"
2382
2383Had we neglected deleting FORMAT_NICK_COMP, however, the completion would
2384have been:
2385   "Londo: What's going on with the Shadows?"
2386(assuming default value in FORMAT_NICK_COMP).
2387
2388Worked around problem with channel actions appearing in wrong window.
2389Changed hash'd whowas/wholeft and nicklist hashing function to one that
2390hash's everything.
2391Fixed numeric 317 format_whois_idle to return the last on info returned from
2392the command /wii
2393/on will no longer bug out when displaying ansi. A simple call to stripansi
2394added to show_hooks()
2395Fixed up /chanst so statistics are correct...
2396fixed up /chanst -ALL again. I had disabled it quite some time ago.
2397Cleaned up update_stats() decifer_mode() and p_kick(). They might even be
2398faster now on mass deops due to less lookups occurring.
2399Fixed idle_timer
2400Added timed unban for most of the flud's.
2401/set AUTO_UNBAN is the timeout in seconds for timer'd unbans. setting this
2402to zero will make the timer not go off.
2403join flooding was broked. did we really need two checks for Join floods?
2404removed one in p_channel()
2405Broke non-userlist'd joins when re-arranging p_channel().
2406Fixed up last of /rel commands so they should all display properly. /rel?
2407-help displays a help message.
2408We will now rejoin channels in correct windows on kills. Removed
2409clear_channel_list() from /reconnect, which allows us to reconnect to all
2410channels. Fixed rejoin to proper hidden windows.
2411Added some changes from epic4 pre040. Skipped new scandir(). Added new
2412method of auto-joining, reconnecting to channels.
2413Added /map by popular request. output looks similar to scrollz. FLiER's code
2414was handy as an example.
2415Added a little check on no such nickname to remove any pending dcc's.
2416Added a userhost on numeric 433 nick in use.
2417Added a /unload command to unload 95% of the things a script changes
2418Added a call to add_to_join_list() in /window channel to preserve the
2419window refnum.
2420Typing /w on a channel now updates the internal nicklist. This fixes up the
2421/away's and the ircop counter.
2422Changes from epic4 pre041 worked in. Highlights are -
2423	3 new sets. CPU_SAVER_AFTER, CPU_SAVER_EVERY and STATUS_CPU_SAVER
2424	%J for a new status format. displays value of cpu saver.
2425	CPU_SAVER key bind to turn this feature on immediately.
2426	small bug fix in reg.c
2427Client now compiles unmodified on win95/nt with Cygnus tools.
2428Added small hack to set_dcc_bits() to prevent lossage of dcc counts.
2429Fixed up who_left() and show_whowas().
2430Added new /igt and /ight for timed ignore's. We use /set ignore_time for the
2431time to ignore this nick or host.
2432Added /reld and /reldt for /rel dcc and rel dcc topic. last 10 saved.
2433Small fix to expand_alias() which should fix problems observed with /eval
2434echo $
2435Changed FORMAT_VERSION for the last time. $4 $5 are the tcl version strings
2436if they are enabled.
2437AUTO_COMP_CHAR renamed to NICK_COMPLETION_CHAR by request of the author of
2438the patch.
2439Fixed /eval echo \ core'g the client.
2440Some patches from Tomas Ogren <stric@ing.umu.se> applied to the client. I
2441didn't agree with the way some of them were done, so they were not applied.
2442I did however introduce special handling of the chr(255) within
2443convert_output_format(). It is now converted directly to a space character.
2444It's used as a kind of place holder for the parser. So we know exactly what
2445argument is where on certain format's this is required. ie format_users and
2446the dcc output parser. This will fix up those non-iso fonts I think, so that
2447a space is correctly shown, instead of some funny character.
2448Fixed a epic /me bug with /query =nick.
2449Fixed a status bar problem with +v in decifer_modes(); BlackJac found this.
2450Some changes to the DLL module loading procedure to make it easier foR
2451module writers to write a module and insert it.
2452xavvy requested a $longip() function. to convert a numeric ip into a network
2453long.
2454Fixed up unbanning of people who are banned by someone.
2455Experimental ignore exception text.
2456/ignore #channel %ALL text "some other text"
2457This adds "text" and "some other text" to the ignore exception. Any lines
2458with "text" or "some other text" appearing in them will be output. No others
2459lines from that channel will appear. Currently this is restricted to
2460privmsgs and notices appearing on a channel.
2461
2462[oweff] ive setup http://crackrock.melnibone.org tho i doubt anyone
2463	will remember that addy. =]
2464[raistlin] raistlin.toledolink.com is mirror'g bitchx.stuph.org. Thanks
2465Blu3Viper foR bitchx.stuph.oRg.
2466
2467
246871p3  Released May 28/97
2469Small amount of changes. All mis-ordered vars are now in order.
2470Fixed ignore of nickname on msg floods.
2471Added epic4 pre034 changes.
2472Fixed /wait -name
2473Fixed message_from() so it works again. This solves a coredumping problem on
2474SunOS.
2475/set window_quiet on turns off window messages
2476/window update updates all windows with the current set of global values
2477/window bind  fixed.
2478If you kicked from a channel on another window, the kick stays on that
2479window.
2480Thomas Niederreiter sent me a patch for #define ONLY_STD_CHARS and
2481REVERSE_WHITE_BLACK for those who are using normal xterms or want a reverse
2482color xterm.
2483Fixed alias_server to return correct servername for the current window.
2484Fixed /cdcc resend so it actually resends a file not just sends
2485Added /ignore exceptions. so /ignore *!*@* ALL except *!*@*.com will ignore
2486everything except .com .
2487/reinit which will reinitialize all string /set's to the defaults
2488New /ignore types added. KICKS JOINS QUITS MODES SMODES
2489WINNT defines removed completely from the source. Added new WINNT defines
2490and created BitchX97 for 95/NT using cygnus tools. term.c completely rewrote
2491for it.
2492/set REASONFILE removed.
2493/set APPEND_LOG added. default is on. This effects all logfiles /set log on
2494and the away log.
2495/chguh to change a nick's userhost added.
2496/addshit nick * 5   adds nick to the auto-ignore shitlist option.
2497/query -cmd cmdname (target)  will set the cmd to use for the query. Valid
2498types are msg, privmsg, notice, csay, cmsg, and any matching commands from a
2499dll that's loaded (ie be cautious).
2500/on partial_hook_name  returns all matching hook names and displays what's
2501on them.
2502rewrote get_builtins() so it returns builtin aliases. So now command
2503completion will return builtin aliases.
2504A /cdcc send nick #1 woUld fail.
2505$statsparse() will return the information from the status variables.
2506so $statsparse(%N %C %L) returns  "root #bitchx [Lag 0]" as a string.
2507requested by suicide.
2508Some small changes with duplicated code in ctcp functions. New ctcp uptime
2509added. It is ignored for everyone but those on your userlist.
2510/window triple on   will create a triple status bar. Some caution is urged
2511with this.
2512$winquery(nick <server num>) returns the window that nick has a query on.
2513removed a stripansicodes() from outgoing dcc raw/chat. We will see if this
2514causes any trouble.
2515dcc raw listens were broken with dcc_fast on. dcc_raw_listen uses a port
2516number for the write, which caused us to attempt a FD_ISSET() on some
2517numbers. This in turn caused a seg fault.
2518/USERINFO nick comment added. if comment isn't specified then comment is
2519deleted.
2520$getinfo(nick) will return userinfo for nick
2521$setinfo(nick comment) will set userinfo to comment or remove it.
2522getcomment, setcomment,_getinfo, _setinfo, _statsparse _winquery
2523added to tcl functions.
2524FORMAT_FRIEND_JOIN can be modified to return the comment as well. Default is
2525to not display comment.
2526Modified tcl matchattr  slightly.
2527Some small fixes to some of the internal check_tcl functions, so that the
2528handle is passed properly.
2529$absstrlen() returns the absolute strlen() of a string after taking out ansi
2530sequences. requested by suicide.
2531/Usershow to show user comments added.
2532
2533
253471p1
2535Minor bugs fixed. Forget a #ifdef around TRANSLATION_VAR in vars.h. This was
2536causing minor problems with /set. FORMAT_MSGCOUNT FORMAT_MSG were in the
2537wrong order as well.
2538
253971 Changelog. Released 042397
2540
2541netsplit handling corrected.
2542tabkey handler rewritten 3 times over.
2543input editing was coredumping.
2544readlog will now correctly read the logfile backwards
2545fixed? /dc nick adding the nick and the =nick to the tabkey
2546Changed output of /nwhois and /chanst
2547fixed /away for scripter's.
2548Added -ping to /whereis to use ping instead of version
2549refnum display for show_timer was screwed up.
2550Novalogic noticed that /deop protection worked, but /kick prot didn't.
2551Oweff and TimeCop requested /on CDCC_NOTE
2552/ftp changed to internal ftp client. /dcc ftp  added.
2553/msg -some.ftp.site used to support ftp.
2554ls cd get put  all supported  /dcc ftp some.site username passwd fixed.
2555dTM noticed that /window new hide channel #channel bind #channel was
2556failing.
2557with two windows and several channels bitchx would cause you to rejoin on
2558the wrong server if you were kicked. p_kick()
2559cleared up the Your not on a channel error message in p_Mode()
2560Changes made to hide_window() to correct and error in window size recalc.
2561umode is sent on numeric 001 which should correct some problems with the
2562server ignoring the umode.
2563/say -c -a -e  for cool annoy and eleet type say's
2564/ctcp now shows what it was sending by request of BlackJac.
2565Added -* flag to XECHO. displays mesg in ALL windows. Requested by TheAsp
2566and Sheik
2567$stripmirc() now correctly strips mirc color codes completely
2568$getreason(nick filename) will use filename as a random reason file
2569replacing $0 with nick.
2570/cdcc queue 			displays number in queue
2571/cdcc queue remove #|nick  	removes # (3- 1-7 etc) or nick from queue.
2572/cdcc queue list		lists contents of queue
2573/cdcc queue list nick		lists contents of queue for nick
2574/cdcc list modified		output is differant
2575/cdcc send			modified. if filename starts with a number
2576				check pack numbers otherwise send filename.
2577refixed logmsg() after some changes were attempted for separate channel
2578logging. This doesn't seem possible. use /log instead.
2579/window set stat wasn't printing the fullname of the variables (suicide)
2580renamed VERBOSE_CTCP to CTCP_VERBOSE
2581/stats flag servername  will output in a nicer format now. c h i k l m o u y
2582/trace flags added. -s -u -o   will trace for servers,users,ircops.
2583Added a HACK_OPS mode. BITCH mode should be on as well as HACK_OPS.
2584check_shit() now checks PROTECT_CHANNELS
2585Added password checking into check_auto(). If user is passwd protected, then
2586auto-ops are not given. they have to /ctcp yournick op #channel passwd
2587Fixed /chat and /nochat.
2588Added time to dcc_glist output for dcc chats/ftp/bot modes.
2589Multiple dcc cdcc sends are possible. Comma separated list of nicks instead
2590of one nick, will send the file to all the nicks in the list.
2591Changed addlist_cmp to use strcasecmp instead of strcmp. wonder how many
2592scripts this'll break.
2593Bans are not enforced if the shitlist for that channel is off (ie /cset).
2594Also the protect_channels var can be used to change the channel that's we
2595protect.
2596Added Ctrl-O bind. it ig's the the tab msg nicks.
2597Changed /set so we can list the dll variables with a partial match.
2598Changed tcl slightly for the raw and input binds. returning 1 from a tcl
2599function will cancel the ircII handling of the information.
2600Modified internal tabkey to hold the type of command we want to use. (csay)
2601Modified /cdcc type and /cdcc echo with no args, displays current. Any other
2602args will toggle.
2603Added /dump channel   for dumping channel stats
2604Some changes to tcl.c required. msg, say, notice, desc added as tcl
2605commands. They use the internal ircII parsers.
2606Internal functions are now available to the tcl parser. To avoid any name
2607space polution we renamed the internal BitchX functions with a "_" so
2608_addshit from tcl accesses the internal function.
2609Coredump in  /back noticed by shadz.
2610Fixed /l #channel so it leaves a channel
2611Fixed problem in /set when using dll variables...
2612Changed the way /rel* sent text to the server.
2613Major Changes to alias/assign code. EPIC 4's alias caching changes merged.
2614Mail handler modified. /set Mail 0 1 2
2615Fixed some variables that have been missing for some time now. Misplaced
2616ones. See ircii-EPIC0.028 UPDATES for complete list of changes for this
2617version of BitchX
2618immortal pointed out that /window new segfaults the client (happens in all
2619irc clients). fix was in add_window_to_list() and new_window().
2620prepare_command now sets active_server = -1. helps prevent segfault.
2621Tweaked cdcc again. modified add_to_queue() to check for duplicate entries
2622in the queue. Modified dcc_sendfrom_queue() to not check DCC_SEND_LIMIT.
2623check_channel_match() modified so if the first char is ! we won't auto-op on
2624that channel, but will on any others that have been specified.
2625FORMAT_HELP added. to be used with /help output.
2626Fixed /chg commands to work properly. Added /chgpass.
2627Fixed check_array_size() and move_array_items()
2628Noticed that the default chan vars are not being updated properly.
2629Added new dcc type. /dcc tsend /dcc tresend /dcc tget /dcc treget. This is a
2630ackless dcc type which responds to filesize for finding the eof. Simple
2631testing shows that this is aprox 150kb/s faster than normal dcc's
2632segfault in netsplit handling fixed.
2633/listdll command added.
2634/mb was segv'g on some systems. fixed.
2635/<esc><esc> handling fixed. This seems to have solved crackrock's tabkey
2636handling as well.
2637EPIC pre0.29 changes added... Still to come are the userhost caching and
2638new whois queue.
263971alpha11 released for people to try.
2640Prob one of the longest standing bugs in the history of Bitchx was squished.
2641cdcc queue sends were crashing once in awhile. bad lamage here.
2642/foreach fixed.
2643/who *netcom.com* would add users to the users on the current channel, not
2644quite what was supposed to happen.
2645flood warning only happens if the internal flood handler doesn't do
2646anything. /on FLOOD will override the internal flood handler. Flood handling
2647was terribly broken for some reason (what was I smoking when I put > instead
2648of < )
264971alpha12 had a short life. rest in peace.
265071alpha13 fixed segfault cause by WHO on join. partially server fault I
2651think. Still a segfault in add_to_channel() I believe. Need more testing.
2652Server handling of /who and /whois has been changed in CsR29 servers.
2653oweff pointed out some problems with cdcc hooks. Fixed. Broke 100% of
2654scripts that handle cdcc output when I added the "type" of msg we are
2655supposed to send according to the internal cdcc. ie NOTICE or PRIVMSG added
2656to CDCC_PREPACK CDCC_PACK CDCC_POSTPACK and CDCC_NOTES.
2657Afte mucho bitching /set mircs actually does something. It converts mirc to
2658ansi when on. But only for non-scripts. So those of you using a script,
2659you'll have to bug your script author about using $mircansi()
2660bans on usernames of greater than 10 chars could fail. bk pointed this out
2661as well as Cyan who explained it better.
2662/toggles operview was broken for the last 8 months.
2663/addidle should work as advertised.
2664/masskick might have been broken.
2665/bhelp dcc raw  was doing some strange things because of a $listen() in the
2666text. fixed.
2667set_dcc_bits() was missing a fast_dcc off setting. This was causing cpu
2668usage to skyrocket.
2669Kinda lame bug fix but it'll do  for now. For some odd reason we are getting
2670a NULL user in the whowas list's. We now check for this.
2671ctcp finger now works again. Thanks Jordy
2672/sk and /whereis removed due to the changes by removing WHO_ON_JOIN
2673should prevent flooding of the client on large channels and a netsplit
2674occuring
2675long standing bug in mircansi fixed.
2676fixed a problem with /set beep_on_msg. forgot to pass all the parameters to
2677the function
2678wait cmd structure could become corrupted if too many wait's were used.
2679Alpha18
2680/set kick_if_banned on/off will turn off kicking of users who have been
2681banned from the channel. Also nick floods check to see if it's you that's
2682doing the nickflooding before kicking.
2683FORMAT_DCC and FORMAT_MSGCOUNT added.
2684$winchan(number) returns the channel that a window is associated with
2685Added a #define to config.h for including translation tables back into the
2686client of those that require it.
2687
2688 ------------ Change log from epic pre 0.29 client -----------------
2689
2690*** News 03/31/97 -- New argument to /WAIT command, ``for''
2691	Yes, ``for'' without a hyphen.  This command guarantees that
2692	the code given as the argument is executed synchronously.
2693	That is to say, if the arguments, when executed, sent something
2694	to the server, the command will not return until that request
2695	has been completed (as if a wait had been done.)  But if the
2696	code does not send a query to the server, no wait is executed,
2697	and the command returns immediately after the code completes.
2698
2699	Example:
2700		/wait for {
2701			if (arg) { who -line {echo $*} }
2702				 { echo Booya! }
2703			echo Foobar!
2704		}
2705
2706	It is important to note that the implicit wait is done AFTER all
2707	of the arguments to /wait for have been executed.  However, any
2708	code that is after the server query (in this case, ``echo Foobar!''
2709	will be executed AFTER the WHO is launched, but BEFORE the
2710	synchronouzation step.  If you needed it to be executed after
2711	the WHO completed, you would noT put it inside the /wait for.
2712
2713	Note that you can nest /wait for's and /wait's and they will
2714	sort themselves out sanely:
2715
2716		/wait for {
2717			if (arg) { who -line {echo $*};wait }
2718		}
2719
2720	(This is a silly example, but bear with me.)  In this case, there
2721	is an explicit WAIT done after the WHO request.  Since a WAIT has
2722	already been completed, the /WAIT FOR will not wait again a second
2723	time.  That is to say, it will recognize that the WHO has already
2724	been waited on and will not delay further.
2725
2726	As a side note, using /redirect within a /wait for loop, or
2727	doing a /wait while you are using /redirect is *bad*, and you
2728	are strongly discouraged from doing so.  It is undefined behavior.
2729
2730
2731*** News 03/19/97 -- About the new who/ison (and soon userhost) queues.
2732	The client now keeps a FIFO (queue) of who/ison/userhost queries
2733	you make.  It is *critically* important that you do not confuse
2734	these queues (due to the nature of these server queries, there is
2735	no way to have any reasonable error recovery).
2736
2737	The following behaviors are forbidden (but the client wont stop
2738	you from doing them)
2739
2740	* Using /ON ^RAW_IRC to wedge the 303, 351, or 315 numerics.
2741	  If you do this, the queues wont be properly flushed, anyone
2742	  waiting on a proper reply wont be handled, and any further
2743	  reqeusts will be thought to be previous queries, and all hell
2744	  will break loose.
2745	* Using /QUOTE to launch USERHOST, ISON, or WHO requests..
2746	  If you do this, the client will whine at you when it gets
2747	  unexpected replies and will eat the information.  If you launch
2748	  another query before the invalid one finishes, all hell will
2749	  break loose.
2750
2751	*** THERE IS NO WAY TO RECOVER IF YOU DO THESE THINGS ***
2752	If youre stupid enough to do it, you get what you deserve.
2753
2754*** News 03/18/97 -- Expanded syntax for $userhost()
2755	For your convenience, the $userhost() function now takes arguments:
2756	You may specify one or more nicknames as arguments to the $userhost()
2757	function, and the corresponding userhost(s) for the nick(s) specified
2758	will be returned.  The string <UNKNOWN>@<UNKNOWN> will be inserted
2759	for any nicknames whose userhost is not known.  The nickname(s)
2760	speified *must* be people who are on channels you are also on for
2761	the current server!  (See the second caveat)
2762
2763	* Caveat -- Because it can take time for the WHO query to complete
2764	after you join a channel, there is no definite way to know if
2765	$userhost() for a person on your channel will succeed or not.
2766	You should probably be prepared to launch a /USERHOST query in
2767	case of failure.  This deficiency may be altered or modified in
2768	the future to block if an otherwise valid request is made while
2769	a WHO query is still pending.
2770
2771	* Caveat -- This function will never be modified to launch a server
2772	query.  That means that this function will only ever recognize those
2773	nicknames that are common to channels you are on.  If you want to find
2774	the userhost for other users, you should use the /userhost command.
2775	It is expected that the /userhost command will soon be able to
2776	take advantage of the userhost caching (but it does not yet.)
2777
2778*** News 03/18/97 -- Expanded syntax for /who
2779	For your convenience, the /who command now takes two new arguments:
2780
2781	-line {...}	The code inside the braces will be executed for each
2782			line returned by the who query.  The arguments are
2783			exactly the same as for the /on who hook, except that
2784			this flag is *gUaranteed* to override the default
2785			/on who, and will also *go away* when the current who
2786			query is finished.
2787
2788	-end {...}	The code inside the braces will be executed at the
2789			end of the who query, when the 315 numeric is parsed.
2790			The arguments are:
2791				$0 - server queried
2792				$1 - body of the query
2793			This is guaranteed to toverride the default /on 315,
2794			and will also go away once the current who query is
2795			completed.
2796
2797	These command bodies will be executed asynchronously, which means
2798	that you must assume that the enclosing code scope will complete
2799	before the code is ever executed (e.g., the same rules as for the
2800	/userhost -cmd flag.) unless you use /wait.  You are encouraged
2801	to not use /wait if you can figure a way around it.  Code that is
2802	not concerned with being stricly backwards compatable with the
2803	stock client is ***strongly encouraged*** to use these new flags.
2804
2805	Underlying this change is a new re-entrant WHO queue, which allows
2806	you to launch more than one WHO query simultaneously.  No longer do
2807	concurrent WHO requests have to wait for previous queries to complete,
2808	and no longer (with the above flags) does the caller need to put the
2809	WHO command in a /stack-/on-/wait wrapper.
2810
2811*** News 03/17/97 -- /on 312, /on 319 changes
2812	All of the whois numerics: 311, 312, 313, 314, 317, 318, 319
2813	now pass $0 as the server name and $1 as the target of the
2814	whois query.  All the rest of the arguments are passed as $2-.
2815	Previously, some of these numerics passed the target as $1,
2816	but not all of them.  I changed it this way for consistancy.
2817
2818*** News 03/17/97 -- New: /ON STATUS_UPDATE and $status()
2819	/ON STATUS_UPDATE is hooked whenever any of the status lines
2820	for any of the visible windows changes **and you are in dumb mode**:
2821	   $0  is the refnum for the window whose status line has changed
2822	   $1  is the status line in that window that has changed
2823	   $2- is the actual status line for that window.
2824
2825	$status() can be used to fetch the current status line for any
2826	visible window.  Invisible windows do not have their status lines
2827	updated, so they may be inaccurate.  This problem may change in
2828	the future.  Pass two arguments:
2829	   $0  is the refnum for a window
2830	   $1  is the status line
2831
2832*** News 03/02/97 -- Local variables can now span entire array tree
2833	The syntax:
2834		``local x.y.''
2835	will define all variables in the subarray $x[y][...] to be
2836	implicitly considered local variables.  That is to say, the
2837	entire variable tree rooted at $x[y] is local to that scope.
2838	This was requested by a user for compatability with another
2839	client.  All local variables that are instantiated in this
2840	manner have the same scope as the explicit declaration above.
2841
2842*** News 02/18/97 -- New built in variable, /SET CONNECT_TIMEOUT <seconds>
2843	Set this to the number of seconds you want your connect()ions to
2844	block before they time out.  Note that this doesnt affect
2845	connect()ions that are already in progress, only those that are
2846	started after you set it.  The default is 30.
2847
2848*** News 01/30/97 -- Expanded syntax for /LOCAL, /STUB
2849	You may now specify more than one name per command:  Each name
2850	will be treated independantly of all others.  The names must be
2851	seperated by a comma, and ***must not*** have any spaces between
2852	the commas and the names (that is, all of the names must form one
2853	logical word).  To declare both "foo" and "bar" as local vars,
2854			/local foo,bar
2855
2856	You can do this to stub more than one alias/assign to the same
2857	file, as well:
2858			/stub foo,bar filename
2859
2860*** News 01/29/97 -- New command /BLESS
2861	Currently this commanD ignores its arguments.  This will not be
2862	the case in the future (eg, arguments will be added)
2863
2864	When given no arguments, the /bless command causes the current
2865	stack frame to not be atomic.  You are therefore free to reference
2866	local variables of the enclosing atomic stack frame.  Extreme
2867	care must be taken that there is indeed an enclosing stack frame
2868	from which to reference local variables:  Otherwise havoc may ensue.
2869	Usually you can ensure this by doing a /wait after a local server
2870	query.  When an enclosing stack frame "returns" (ie, an alias ends),
2871	any /on that is processed later due to a server request made by that
2872	stack frame must not use this command.
2873
2874	Dont forget to clean up your messes when youre done with them. =)
2875	See the 'guh' script for a demonstration of how i used it.
2876
2877*** News 01/27/97 -- New flag for /EXEC, -direct
2878	Syntax:
2879		/EXEC -direct <commands>
2880
2881	This simulates the effect that unsetting the SHELL variable
2882	causes, that is, the command is executed directly, without
2883	invoking a subshell.  This is appropriate for those who wish
2884	to execute a command passing untrusted data as an argument:
2885	With this flag, there would be no shell to interpret metacharacters,
2886	thus cutting down on that ability to have an accidental back door.
2887
2888*** News 01/27/97 -- New command, /SETENV
2889	Syntax:
2890		/SETENV <var-name> <new-val>
2891
2892	Sets the process environment variable <var-name> to the value of
2893	<new-val>.  This command is noT neccesarily useful, nor is it
2894	always appropriate, but it is provided for completeness.  There
2895	are several places in the code that can benefit from the ability
2896	to change environment variables after startup (eg, TZ).  It also
2897	allows you to set environment variables for /exec'd processes,
2898	and it is also possible to really foul things up if you mangle
2899	important environment variables such as DISPLAY and so on.
2900
2901*** News 01/24/97 -- New, /ON ODD_SERVER_STUFF
2902	This is hooked whenever the server sends you something
2903	that the client cannot recognize.  This is usually when
2904	you try to connect to a non ircd server, or you use some
2905	extension that isnT yet supported.
2906
2907	$0  is the server that sent it to you, '*' if unknown
2908	$1- is the unrecognized command and its arguments.
2909
2910*** News 01/22/97 -- /FE, /FOREACH use local variables now
2911	The "control variables" for the /FE and /FOREACH command
2912	now are local variables.  They will not disturb global variables,
2913	but they will destroy any local variables you have by the same
2914	name.  You dont have to explicitly declare the variables as local,
2915	it is done automatically for you.  Note that the normal warnings
2916	for local variables still apply -- dont use any variable name that
2917	is the same as a global variable you might want to use later in
2918	the same alias/on.
2919
2920*** News 01/18/97 -- Support for local variables
2921	You may define a local variable with the following command:
2922
2923		LOCAL <varname> [<value>]
2924
2925	It mirrors the ASSIGN command.  Note that local variables act
2926	in exactly the same way as normal variables, except you cannot
2927	get rid of them.  You also do not (yet) have any way to get at
2928	a global variable that has the same name as a local variable, so
2929	choose wisely.  An example:
2930
2931		alias foobar
2932		{
2933			local b			(declare LOCAL var $b as [])
2934			assign a 4		(assigns 4 to GLOBAL $a)
2935			local a 5		(assigns 5 to LOCAL $a)
2936			eval echo $a		(outputs '5' -- local)
2937			@ a = []		(clears LOCAL variable)
2938			eval echo $a		(outputs '' -- local)
2939		}
2940
2941	Restrictions:
2942	* You cannot have local aliases -- only local variables
2943	* You cannot save local variables.
2944	* You cannot (yet) access a global variable with the same name
2945	  as a local variable.
2946
2947	This support is EXPERIMENTAL and still has a lot of development
2948	to go before it is mature.  Do not depend on any specific detail
2949	of the implementation to remain constant.  The interface should
2950	remain unchanged, but it may also be expanded.  If you have a
2951	specific request about this implementation, feel free to ask.
2952
2953
2954
2955
295602-10-96 BitchX 70 released. We've come along way baby.
2957
2958Seems some bugs cropped up right away... /window set and status.c window
2959pointer was being changed on status_notify which caused me some trouble with
2960seemingly random segfaults. $mircansi() had a bug with ^C1,243324324 and
2961^C234723875 large numbers. Weird problem with /ftp /telnet possibly fixed...
2962for some reason calloc() isn't returning a 0'd memory location. Fix for
2963-parsekey type_text blah instituted. This affected both epic and BitchX,
2964Ctoolz, Scrollz and ALL other ircii clients including 2.9roof. /cdcc offer
2965was displaying the wrong pack number for a note. fixed. small bug that can't
2966happen very often found in built-in alias's. curr_scr_win->server has a
2967possible -1 value. screw() was screwed on certain length host names.
2968Various other small fixes here and there. ChanWallop does 8 nicks at a time
2969now. This gets around the lame server protection that some servers have
2970implemented. Notice small buglet in /addbanword where * was not recognized
2971as a valid channel. /kb and /ban will now check the whowas list for a
2972matching nick and ban it if all else fails. Hacked around in decifer_mode().
2973Added some new botnet commands. /ctoggle and .xlink. with /ctoggle on,
2974someone can send a .xlink command where command is any valid ircii command.
2975so please to be careful with this. If you set a BOT_PASSWD then anyone
2976knowing this password can auto-chat as well as bot-link with you. xlink
2977commands default to off. and I will modify this highly to only recognize
2978certain commands. DLL loading for linux implemented. What this does is allow
2979someone to write a function/command in c and give it to people. They can
2980then dynamic load the function/command which then becomes a regular client
2981command. No source for the module need be distributed. This same method is
2982used in libtcl and I assume perl as well. All internal client functions are
2983available to the module IF we add -rdynamic to the client link stage.
2984Otherwise they are not available. Although untested, tcl functions should
2985also be available in TCL compiled clients. I modified the client to look for
2986dll commands and then commands, alias's etc. I also re-implemented the
2987Tcl_Eval portion of the command loop. It's one of the last things checked.
2988/loaddll function implemented for dynamic loading of functions, ctcp's and
2989commands. These lists are checked before all others so that authors can
2990replace internal's of the same name. /bk and /ban will now check the whowas
2991list for matching nicks and ban it when the nick is not on the channel or
2992has signed off. erase_display() had a off by one error. /reset was lame. and
2993screwed up the display. all fixed. $banonchannel(chan ban) added by request.
2994Checks to see if ban is on the internal banlist for the channel. Well
2995someone nicked goat found the alt char set ansi set would switch the console
2996into this mode. It looked like a flash, but wasn't. Required some rethinking
2997in FixColorAnsi(). NovaX found a bug with not checking the channel match for
2998bans on perm bans. Also found a bug with multiple windows and channels where
2999the away mesg was being displayed twice. FORMAT_SEND_AWAY added by request
3000from shade. /tignore added. it works like /tban. After some prodding I
3001modified the cdcc sends/resends to work with multiple numbers. "*" is also
3002recognized for send all. After removing the /me from /away found that the
3003away message doesn't display to the screen. /back doesn't prompt to delete
3004the away file if /set msglog is off. $winrefs() returns all window refnums.
3005shade and all his color changes on the status bar found a nasty little
3006problem with static buffers. so we increased the buffer sizes by a factor of
30072. Fixed /do say $repeat(5000 blah) to only return upto 2048 chars. Fixed a
3008few windowing bugs shade pointed out. Apatrix pointed out a couple of
3009deficiencies in /set bitch on. Maybe we cleaned it up. BarK0de pointed out a
3010little inconsistancy with /addword and /banword(s). $gethost(nick) returns
3011the hostname for the nick as stored internally. nick has to be on one of our
3012current servers channels and the first match is returned. local variable
3013support added from epic. BEEP_WHEN_AWAY fixed so it doesnt beep you when
3014your away for Flick^. some changes required in p_privmsg().
3015menus, history file support, translation and digraphs have all been removed
3016from the client for various reasons. Some buffer sizes have been reduced to
3017decrease memory footprint. This should make some admins happier. Cleaned up
3018vars.c by removing some old variables no longer used. removed nkill and
3019nhost commands as they require a hacked server to support them. Removed
3020WANT_ANSI from all source files. This cleaned up the source considerably.
3021/mode channel b wasn't displaying the modes for a channel. /set ov on/off
3022wasn't working properly. /window split on/off changed. /set double_status is
3023no longer required. fixed whoreply() to show up in the correct window.
3024Added new function variable %` for the uptime of the client.
3025destroy_call_stack was failing for whatever reason. Some more places where I
3026wasn't clearing the FD_SET() for writes found. /set nick_completion_type 0 1
30272  are valid. 0 nick is first word. 1 nick is somewhere in the string. 2 we
3028do match'g on the string. /set auto_response modified to allow more than one
3029word to trigger nick completion. wildcards are allowed. /finger now doesn't
3030block on connect. This one accomplished by adding a socket callback list.
3031Other functions could accomplish the same thing. maybe a rewrite of the link
3032looker is in order. /scani for scanning a channel for ircops added. Needed
3033some error checking for window->server in $MYCHANNELS(). added -max patch
3034for lastlog command from sheik. added support for colorization of /help (any
3035takers?	. Found bug this introduced in malloc_strcpy(). Added dll_variable
3036support now as well. Jeremy has done some major changes to EPIC3 and made
3037EPIC4. We've tried to follow along. term.c needed to be left the same but
3038support for some decrepatated systems has been removed ie ESIX. Changes to
3039configure have been made and make configuring tcl alot easier. Changes to
3040do_flood(). /ig /igh modified to accept a type as well as multiple nicks.
3041Nick completion changed, partial matching of a nickname is possible.
3042/ig /igh /unig /unigh will use whowas buffer if the nick can't be found.
3043/tignore was not woRking quite right. Someone pointed out that /dcc bot
3044worked without a passwd.  /sc bug fixed. Nick completion modified in
3045behaviour. Pattern matching of the nick will take place. ^R bound to
3046nick_completion() which takes the word behind the cursor and attempts to
3047match it with a nick on the current channel. So typing the following
3048will/should do the following.
3049	/msg pana<tab>     if nick is in tabarray then fill it in
3050	/msg pana<tab>	   if nick is not in tabarray, check current channel
3051	pana^]		   if nick in autoreply buffer fill it in.
3052	pana^]		   if nick not in autoreply buffer but on current
3053			   channel, fill it in.
3054	this is to pana^R  if nick is on current channel fill in the nick.
3055	^R		   cycle through current channel nicks
3056	<tab>		   cycle through tabarray.
3057	^]		   cycle through current channel nicks
3058
3059For some reason noT found yet (ie bug or feature) once one of these
3060functions is accessed in some cases we need to press the key again to bring
3061up the next nick. Depending on how annoying I find this, will determine how
3062long this takes to get fixed. /cdcc offer updated to take multiple file
3063specs on the line. ie  /cdcc offer *.c *.h Makefile  will create a package
3064with all those files in it. /SetAR -|d|pat's commanD added. Added $getvar()
3065function which will get an alias and return it. Protection was broked. Some
3066people are having trouble with the new term.c. Might possibly be termcap
3067related. topic bug found by shadz on newnet. buffer overflow problem.
3068
3069
3070BitchX 69 released. 12/28/96
3071Fixed dcc.c update_transfer_buffer() for the second time. noT sure what
3072happened in the first time I patched this file. Fixed cdcc load to get the
3073right number of files. A problem with /m . fixed. /relw and /relsw fixed.
3074Changed format of FORMAT_BWALL slightly. Added CtoolZ CWallop to notice.c.
3075Fixed bug in free_display() and erase_display(). Added triple status bar, as
3076well as /window split on/off. window split is far from perfect though.
3077Changes to switch_channels() which make the channels that a window owns
3078bound to that window. Pressing Ctrl-X to switch will not switch to a channel
3079that was not joined from the window. Active dcc check on exit changed. Now
3080we only check active dcc gets and regets. send_to_server() modified so that
3081network errors will make the client cycle on a server. Fixed /reli. Fixed
3082pgup and pgdn to display proper number of lines in window. Added %- as a
3083status bar symbol for displaying current topic. hook channel_switch added
3084for script writers to tell when a channel switch has been made. Added /rels
3085for server messages. We keep the last 10 msgs. Changes from epic 3.002 and
30863.003 merged. extended status_user functions added thanks to sheik. %!11
3087through %!19 are available now. %= displays voice on the status bar. /set
3088beep_always on/off. /input_char and /pause x added. WARNING major
3089incompatibility but new functionality. most of the /set status's are now
3090moved into /window set. Fixed /input and /input_char so more than one char
3091can be set in /input. Added /oRignick which will try and take back a nick
3092every 20/30 seconds. format_ctcp $3 and $4 are reversed just to make more
3093sense. /addlamenick and /unlamenick implemented. $stripmirc() will strip the
3094lame mIRC ^C from the input string. ex.
3095/set format_public %b<%n$1%b>%n $stripmirc($3-)
3096Found and fixed a bug in /remlog. which was causing some grief. All
3097format_ctcp's are now changed to use $4- and $3 instead of $3 and $4-. much
3098easier on the client. Added /lamenicklist to show nick list.
3099New tcl bind type. Now we have a type for input. This is called just before
3100the command is sent to the irc interpreter. Input is then passed onto the
3101ircii interpreter. Removed NAMES_ON_JOIN in favor of SHOW_CHANNEL_NAMES.
3102Corrected the workings of this command. tcl command userhost added. Accepts
3103any number of nicknames. When the servEr responds, it sets userhost and
3104un-userhost wIth the appropriate responses. Added tcl getchanmode #channel.
3105Added new tcl bind input (Thanks robocod). It is checked just before the
3106line of input is sent to the interpreter. MAjor dessync problem found and
3107fixed. /quote JOIN #channel where you are already on #channel and channel
3108mode is +i would cause the client to remove the channel. The server actually
3109thought you were on the channel. Small buglet in new parse server notices
3110code, tended to core the client for some reason. Forgot to sync the userlist
3111with the channel nicklist when we did a chglevel/chgaop/chgprot/chgchan
3112operation. /set show_numerics on/off now works, but not in the same way that
3113it used to. The last current numeric is displayed. /set -show_numerics_str
3114now doesn't crash the client. /bki for boot kick ignore added. /fk added as
3115a command alias'd to /masskick ie filter kick. DCC sends have been speeded
3116up by a order of magnitude of 3-6 times. status updating on dcc sends and
3117recieves has been slowed down to occur on every 10th packet or so. Testing
3118was done using ircii ircii-hyper Scrollz eggdrop and a modified ComBot with
3119dcc file capabilies. A 19meg file was transferred repeatly over the course
3120of several days. It was done using localhost connect for highest possible
3121transfer speeds. ncftp was 3.8Mb/s. Scrollz was between 450kb/s-1017kb/s.
3122ircii-hyper was around 650kb/s-1073kb/s (also had trouble with the eof
3123even between two clients irc-hyper). BitchX to eggdrop 460kb/s.
3124BitchX to combot was 806kb/s-1073Kb/s. BitchX 68e was a dismal
3125275kb/s-490KB/s. BitchX to ircii-epic 3.003 was 450-700Kb/s. Ctoolz with
3126DCC_BLOCK_SIZE of 2048 was 1100Kb/s and with 4096 was 1475Kb/s.
3127ircii 2.8.2 with DCC_BLOCK_SIZE of 4096 hit 1050Kb/s and with 2048 got
31281200Kb/s. And finally BitchX 68f to BitchX 68f was variable (*grin*)
3129between 890kb/s and 2150kb/s. Reasons for variance was /set DCC_BLOCKSIZE
3130was changed from 2048 to 4096 between runs and dcc status indicator was
3131turned off as well. (100mhz pent 64m ram. 6 shells open. basic Redhat running
3132with irc server and 2-4 irc clients ide drives). Cpu Usage is down as well.
3133The file used is an actual tar.gz file with data in it. All of dcc.c was
3134colorized.
3135
3136       ������������������������[dcc transfer stats]���������������������͸
3137       �                                                                 �
3138       ���[xferd in]��-[xferd out]ķ�[total files]���[active]ķ�[limit]ķ�
3139       ��      241Mb �       627Mb �            52 �        0 �       6 ��
3140       �������������Ľ����������������������������Ľ�������������������Ľ�
3141       �                                                                 �
3142       �����[in stats]�������[out stats]��ķ����������[toggles]���������ķ
3143       � max: 1755.8kb/s � max: 1755.8kb/s �   autoget:  On   paths: Off �
3144       � min: 236.44kb/s � min:  36.00kb/s � overwrite: Off   quiet: Off �
3145       �����������������Ľ����������������������������������������������Ľ
3146
3147/set lastlog_ansi on/off for display of ansi in your lastlog file.
3148/set dcc_fast on/off to change fast dcc sends on the fly.
3149more binds for /window swap.. added 8 9 and 10. Added access to a internal
3150function called stripansicodes() which will strip all color from a string.
3151Chatted with some newnet oper-admins about there server software. Merged in
3152SOCKS support. Made configure understand some options about tcl,
3153non-blocking, socks, and default-server. Use configure --help to find them.
3154Url grabber. /set http_grab on/off. this will grab any http: string and
3155place in the file $CTOOLZ_DIR/BitchX.http. string can be a public or a msg.
3156As well /lastlog will also match grab any previously said url's. Small bug
3157with input prompt and NULL being inserted into the string (fyi all clients
3158suffer the same problem). ie "null char some text"  and press enter. /dc now
3159accepts a list of nicks to chat with. We also use the userhost queue to find
3160the nicks on irc before starting a chat with them. Added more register usage
3161to possibly speed up the client. modified p_mode to update the structures
3162first and then print out stats. This will increase the speed as well.
3163convert_output_format() takes some cpu to perform it's color parse. Small
3164bug fixed in addlamenick. check_mode_list_join() was getting a null and
3165crashing on a recycle in some cases. /window swap now set's the channel to
3166the bound channel or the current window channel. perm bans were broked.
3167/fkline was modified to use a differant method of scanning k-lines. Need new
3168match() routine that will handle wildcards on either side. Thanks ananda for
3169the mirc->ansi converter which I modified tobe a function. $mircansi() takes
3170a string of text and converts the mirc color codes to ansi. Added /ostat for
3171mperators and cleaned up operator messages considerably. Alot of format's
3172for operator messages added and defaults for efnet are given.
3173
3174Changes for 68e
3175Added command matching. ie /m<tabkey> returns all commands starting with m
3176etc. Linking of clients now made easier with /clink command. Several other
3177commands like /cwho /cwhom /csay have been added. Things said over dcc chat
3178are progated across the link. Some changes in window handling which look
3179like they solve the windowing problems BitchX was having. Added 2 new user
3180auto-op levels for giving voice to someone. 3 is delay voice and 4 is
3181instant voice. other minor fixes. Removed my command matching in favor of
3182the internal command_completion routine. more changes to tabkey routine.
3183/m roo  will return the nick that matches roo, /m root will cycle between
3184nicks. small change to tcl ircii command, so information is returned
3185cleaner. ie we can now do  /tcl set ircii-set [ircii set] so all
3186available ircii set's will be in the tcl variable ircii-set. Ansi stripping
3187is not done. This does have limitations however. Fixed passing 0 to tcl's
3188random(). Changed the party line. We now need to enter .chat to enter the
3189party line. Various other commands are available from the partyline.
3190including .help . /Wall from other BitchX users will now not display as a
3191wall. /set format_bwall can be used to modify the output. /dcx and /dcg
3192added. dcx kills chat request from nick. dcg kills all gets/regets of files
3193from nick. /lwk remove the current window. Note you cannot remove the very
3194last window. added .echo on/off or toggle to /msg =nick on the chat line.
3195Added /cdcc echo toggle cdcc output to yourself on/off. /cdcc type toggles
3196between notify and privmsg. Fixed dcc chat .boot to it informs the
3197partyline of the boot as well as the user that got booted. Wangel
3198contributed /rel to list msgs you have recieved. few other minor nitpicks
3199fixed here and there :) Mathe noticed that /remlog doesn't reset the away
3200msg count. Thanks to CyberD0g kicking me in the head, the status update
3201doesn't occur nearly as often as it was. This increases the speed of dcc
3202considerably on localhost transfers... ie I went from 89KB/s to 213KB/s over
3203127.0.0.1. ctcp nick op #channel changed so that userlevel's > 49 can op
3204themselves, userlevels > 29 < 50 will voice themselves. Idea from mathe.
3205When away and send_away_msg is on, we will send back our away msg to the
3206person msg'g us. The format of this will more than likely change
3207considerably. The dcc status bar % is differant now. it will display upto 10
3208file dcc percentages. Might solve alot of problems people have been having
3209with dcc's and status bar updates.
3210
3211
3212Changes for 68
3213Changed some fundemental functions around a little after a chat with Sheik.
3214Added a new function for setting up channel params. This reduces code size,
3215because for just about any function() that oPerates on a channel we need
3216to do this. Added a new FORMAT_TOPIC_UNSET and a /untopic command. Changed
3217the /topic command around. We now no longer need to have a channel
3218specified. We use the default channel if none is specified. Changes to the
3219userlist started. Fixed major lossage from a /ctcp message. Emergency
3220release. Incompatible change with scripts on FORMAT_TOPIC_SETBY. use stime
3221instead of tdiff(). /relm and /reln now save the last 10 msg/notice's which
3222can be changed with a compile time #define MAX_LAST_MSG. FORMAT_RELM
3223FORMAT_RELN are used to format the output of these. So /rel[m-n] >[channel]
3224[number]> <-l>. /cset aop for channel specific auto-op. the meaning of the
3225/set aop has now changed because of this. Added ^W? key bind. fixed /4op and
3226/topic. Creation of a simple minded Bitch mode. /cset bitch  mode will
3227reverse certain modes placed by someone not on your botlist or your
3228userlist. Fixed core dump with /links command. Added portnum capability to
3229/dcc chat and /dcc bot(tcl) /dcc send and resend. Added a ascii from
3230acidjazz. Thanks. fixed /away sending ansi out to the server. was causing
3231havoc with non-ansi clients :). Replaced some occurance of nickinuser() with
3232a routine from Sheik. Modified slightly to fit in with BitchX's userlist
3233scheme. Mikh suggested a change for doing fast modes.
3234Implemented and tested. Fixed check_prot() so it actually proTects users on
3235the userlist. /userlist will now take several optional arguements. A channel
3236and/or a userhost mask will display only user's matching a certain type.
3237/botlist is also setup the same way. /notify will display the userhost of
3238those on your notify list if present. idle kick won't kick voice'd users or
3239mps if KICK_OPS is off. on channel join we check both the userlist and the
3240botlist and display using FORMAT_FRIEND_JOIN. (68c-T4).  Fixed mode #channel
3241so it displays the mode of a channel without having opz on the channel.
3242Modified /back so if /set -format_back is done it won't prompt for reading
3243the away file. Also won't give you your away time. Possible fix for not
3244displaying ansi with DISPLAY_ANSI off. Possible input prompt fix for ansi
3245input. Some fixes/suggestions from FLiER concerning status update, and
3246.bitchrc (w)SAVEA. nick and join floods now work as advertised. nick floods
3247should be quicker to catch as well. /randomnick now takes upto two optional
3248parameters, count and prefix to use. /window new channel #linux and window
3249swapping were not updating the input prompt at all. Channel joins were not
3250always announced. Still a bug with the nick->userlist in p_channel() not
3251being updated on the first announce of a join. $cparse() added for script
3252color parsing. mathe suggested $getreason(nick). It uses the color parser
3253so $0 and $1 are defined as nick and mynick. output is ansi-stripped.
3254Replace BitchX.reasons quickly. level 5 userlist protection should work as
3255well. /jnw #channel  added. Ansi is allowed in dcc chat's if and only if
3256/set dcc_ansi is set on. Input prompt is now properly cleared. Sergs_ fixed
3257a little problem with check_auto(). Also fixed up a few other things in the
3258check_auto() check_prot() areas ie sent code. Added code to read BitchX.quit
3259which is a file of quit messages. It's passed through color parser so it has
3260$0 defined as well as any other $functions and variables. Lotsa other small
3261fixes added as well. Merged new epic changes in. This added $chmod()
3262$twiddle() and $uniq(). Also added /call to display the script call stack.
3263Added /set cdcc_prompt. Fixed /relm and /reln formats, as well as fixed the
3264send of /relm to a nick. Changed the output of whois to display the channels
3265if the nick is on any of the internal lists. /j added in as an alias for
3266/join again. Fixed /readlog. Modified  userlist once again. What happens is
3267this. If a nick is in the Botlist we ignore the userlist. A botlist entry is
3268an exact nick!user@host entry. If not in the botlist then we check the
3269userlist using *!user@host. We also check the shitlist entries even if they
3270are found in either of the two lists. Ctcp op/invite/Unban work the same way
3271now as well. Fixed a problem in /ctcp op and /ctcp invite noticed by
3272immortal. Added a new FixColorAnsi() from Flier which saves some work and
3273makes the screen output snappier. stripansicodes() was actually rather slow
3274because we stripped ansi everywhere. stripansicodes() is still used but in a
3275much more limited fashion. Setup home page www.sasknet.com/~pionh. Added
3276some debugging functions. /call will display a call stack for an alias. hmmm
3277maybe we should implement the saving of /relsw /relw /relt /relst *grin*.
3278Added a new shitlist level 5 which perm ignores the *!*user@host of someone.
3279$uhost(nick) will return the userhost of someone on your channels. Multiple
3280returns can be expected. /set REVERSE_STATUS_LINE renamed to STATUS_REVERSE.
3281This allows us to be more compatible with scrollz as well as making much
3282more sense. I've also defaulted this to off. As on reverses the meaning of
3283the ansi from /set format_status*'s. Fixed $isuser() to not segfault on
3284shit'd users.
3285
3286
3287Changes for 67 Released 090896
3288
3289/away now converts the output format so we can do nicer things with it.
3290idle time on /wi was screwed up somewhat. ctcp.c has been revamped. Thanks
3291to FLiER of Scrollz fame for sending me a patch for a color input prompt.
3292Changes were minimal to incorparate this into BitchX/epic. %! displays
3293channel counts for ops/nonops/voice/ircops for the current channel. Fixed a
3294problem with the input prompt not updating properly on channel change when a
3295$T is in the input_prompt. Changes in status.c. Added color status bar
3296capabilities. Also added color backgrounds. %0 - %7 are background colors.
3297%8 is reverse and %9 is bold. Fixed some problems with new send_text() and
3298dcc support. Found a couple of memory leaks in dcc. But I don't think I
3299found the main one. Fixed /ftp and friends seg fault problems. Passwords can
3300now be used on the userlist and the botlist. This affects /ctcp's but not
3301auto-op stuff. Fixed a major memory leak that's been around from version
330264. A few new format's added for some numeric responses. Fixed ^L seen on
3303the status line. Changed parse_args() to read the file IDENT_HACK for the
3304username.
3305
3306Changes for 65-66 released sunday Aug 25
3307Fixed to compile on SunOS and other systems. Solaris has a broken va_args()
3308function. This sucks. %c is taken as a int instead and de-promoted to a
3309char. forgot a set_non_blocking call in dcc.c. Some window commands were a
3310little screwy. ie /window new hide channel #warez the ^Wl command didn't
3311display properly. /whois while switched to this window would goto the
3312previous window and the current window. so we made whois display to the
3313current window. netsplit detection while we are on a channel works. netjoin
3314detection seems to work. Netsplit hacking remains to be checked. We should
3315no longer de-op people who had ops on the channel when the server re-joins,
3316within a certain length of time. After that time is up, then we will (or
3317should de-op that person). We are using a modified whowas routine to store
3318split nicks and check that against the person joining the channel.
3319Dakota pointed out that ctcp_reply wasn't being done properly. As well
3320Ctrl-K for invite's was a little problem. Ctr-T and Ctrl-E have the same
3321problem but until a solution hits me in the head :) will remain the way they
3322are. Color can now be used within the BitchX.help file. Topics can't be
3323colored yet, and we still need a couple of indentation spaces before we can
3324start the material for a topic. We now don't kick ourselves on floods and
3325stuff. FORMAT_ACTION* and FORMAT_NOTICE* and FORMAT_MSG and FORMAT_PUBLIC*
3326had a parameter removed. IT was a lame one, that I'd added to remain
3327compatible, but caused more problems that it solved. FORMAT_MODE now should
3328properly handle the case of a server mode. /list will now prompt you yes/no
3329before doing a /list * . FORMAT_VERSION is setup along with a /sv command.
3330Requested by IceBreak. /whokill /tracekill and /traceserv are re-added by
3331request of myc. get_reason() is used for getting random kick reasons from
3332BitchX.reasons. We now can use $ variables in here. $0 is the nick and $1 is
3333our nick. /encrypt will not segfault when we send/recieve a encrypted msg.
3334Enabled the FORMAT_ENCRYPTED_NOTICE/MSG vars as well. Due to popular request
3335FORMAT_NICK_AUTO, FORMAT_NICK_COMP and FORMAT_NICK_MSG were added. Because
3336of this we also added NICK_COMPLETION_TYPE. 0 nick has tobe the first word
3337on the line. 1 the nick can be anywhere on the line. Added /nochat and /chat
3338commands ala Icebreak. /p and /ping now do the right thing and ping a
3339channel if no arguement's given. /ver will version a channel or a person.
3340/back is now separated from /away. /away will still do the same things as
3341previous. ie /away will still set you back /away message will set you away,
3342but /back will only put you back. We also give the option of reading and
3343deleting the log that might be created. /more will display a file of your
3344choice. New send_text() routine makes life easier. But is has one
3345consequence. I had to modify FORMAT_SEND_MSG and FORMAT_SEND_NOTICE to take
3346one other variable. The sender's nick is $2. It was either modify these two
3347or another two.... Damn it. fixed small bug in dcc_message_transmit().
3348Changed FORMAT_SEND_PUBLIC and FORMAT_SEND_PUBLIC_OTHER damn it.
3349$channicks(channel) returns a comma separated list of nicks on a channel.
3350Useful for those mass messaging types. /on nslookup just for BlackJac.
3351format_topic_change_header for BarK0de. Pent suggested format_names_banner,
3352format_name_voicecolor and format_whowas_header. /msay will say something on
3353all your channels at once. Cdcc channels will now accept a * for All
3354channels and it takes all current channels and adds them to the list. Fixed
3355exec -o to actually tell us what it's doing again. Fixed a ignore returning
3356too soon on notice's. Fixed a problem with dcc stats giving wrong numbers.
3357Drastic suggested a /fproT on/off command. This is a simple toggle which
3358either turns on or off full flood protection. /offers command and a /c
3359command added. /c is for channel/user mode changes. /offers is for xdcc
3360list'g a channel, useful in something like #sexpics.
3361
3362081396 -------Changes for BitchX 64--------------- (Major Upgrade)
3363Lotza changes in tooo many places to even begin to list. Most have todo with
3364the ansification of the client. Most msg's output from the client can now be
3365completely user defined using /set FORMAT type variables. Thanks hellshock
3366for the wonderful idea. renamed /dirlm /dirln to /reln and /relm added /relsm
3367and /relsn commands. Fixed term reset todo the proper thing. clear the
3368screen and then reset. Some changes to dcc were made. dcc sends should now
3369be alot faster. Added new keybindings. Added Toggles for Cloak and
3370OperView. Added %K for status bar display of operkills/nick collisions.
3371Added MdVoice and Devoice commands. Same parameters as  deop and mdop. I was
3372asked to remove the cluster() from /addbot for security reasons. Bot's are
3373now matched on exact userhost's + any special server chars "+~-".
3374/scano /scanv /scann /scan will scan a channel for various types of users on
3375a channel. /toggle will display a a screen of toggles which a user can then
3376/toggle <command> to turn on/off. %K will display operkills on status var.
3377uses STATUS_OPER_KILL for the format. Ctrl-E Ctrl-K Ctrl-F Ctrl-X Insert and
3378Delete, F1-F5 and Esc-1 to Esc7 all have internal bindings. They can of
3379course be changed to whatever you like. /rel* functions made alot more
3380stable (ie they don't dump core.) Modified alias_special_char,
3381TruncateAndQuote and strformat() functions. We can now do $[30.]0 and
3382$[-30.]0 to pad a string with a certain character. fixed a small bug with
3383/window double on. When sending a msg/notice we now add that nick to the
3384internal tabkey list. Added ^W bindings for grow window, shrink window,
3385window kill, window hide, window balance, window list, window move, window
3386next and window prev. Added more FORMAT_* vars'. FORMAT_AWAY and FORMAT_BACK
3387FORMAT_NICKNAME_OTHER and quite a few others. Added some changes from new
3388EPIC beta. Fixed Away and back and others. Changed meaning of /set
3389SEND_AWAY_MSG to if on we send a msg to our channels. If off we don't.
3390Forgot to reset /Set AUTO_RESPONSE to our new nick on nick changes.
3391FORMAT_TOPIC_SETBY should now be working. put_it() will not output a blank
3392line. This allows me to get rid of the ERROR MESSAGE and allows the user to
3393set any FORMAT variable to NULL. /eval echo %Pthis is purple%w white%K and
3394bright black  now works. Ban times should now be stored correctly within the
3395client. /on clone_read now works. /set NICK_COMPLETION on/off turns nick
3396completion on or off. Undefined FAST_DCC_SENDS within the config.h file. If
3397you are on a ppp/slip site and require fast dcc sends and are prepared to
3398use some CPU (ie aprox 30%) then define this option. Otherwise leave this
3399alone, as your ISP will more than likely ban you :). Also you can now define
3400a DEFAULT_USERMODE. Because of the way things work within BitchX you need to
3401either define this to change your initial connect or /reconnect in order to
3402set your initial usermode. you can also export IRCUMODE=+iw to change your
3403usermode for the initial connect. /rel* and friends now will take a nick or
3404channel arguement. /set AUTO_AWAY on/off and /set AUTO_AWAY_TIME added. We
3405now will auto-setaway after auto-away_time. only 0 or 10+ minutes allowed.
3406Anything less than 10 is made to be 10. you can also specify this in
3407seconds. /env autoaway will set the default autoaway message. Numbers of
3408minutes the timer is set to is automatically added. hmmm until moRe can be
3409figured out with /echo we won't be using convert_color_format() in echo's.
3410It allows someone to $eval(rm -rf /*) your system. NOT good.
3411
3412
3413
3414
3415
3416
3417--------------- BitchX client -----------------
341801/09/96
3419
3420Fixed small buglet in the size of a alias allowed.. was crashing irc when
3421the alias hit a certain size. just increased size of buffers by double for
3422now.. look further for the rest of the solution later
3423
342401/10/96
3425Added couple of new commands. readlog() and remlog() to deal with msglog's.
3426started adding /adduser  for storing info like a combot would.
3427fixed couple of bugs in /dcc dealing with ~ in filenames.
3428started looking for a way to deal with dcc_num field. also for dealing with
3429dcc_limits. have some ideas, but not implemented yet. Fixed a couple of
3430memory leaks in names.c dealing with new fields added to NickList structure
3431and list_shit structures in pluto.c
3432
343301/14/96
3434Started adding /cdcc and CDCC commands and on ctcp. Added AutoCtcpkick var
3435for kicking on /ctcp * send N :) Removed some duplicate code.
3436
343701/16/96
3438Added /msg nick xdcc command sets. works with xdcc bdcc and cdcc.
3439fixed a strcmp in ctcp.c do_ctcp  so it actually does a my_stricmp.
3440When sending large numbers of files all at once on local system, a bus
3441error will occur.. Need to find this. Also new 2.9b6 server fucks up and
3442don't send a proper response to a nick collision. numeric codes 433 and 437
3443I combined into one number to make it work. Added 251-255 responses from
3444server /lusers works again :)
3445
344601/21/96
3447fixed a couple of small bugs in cdcc handling of private and public msg's.
3448Due to a baby being born, no changes to the queue handling code has been
3449done. So do NOT /set dcc_send_limit. you have been warned.
3450
345101/22/96
3452added auto join channel on invite toggle   /set auto_join on/off default on
3453
345401/24/96
3455nothing new.. couple of bug fixes. crashed irc client on ig/nig combo.
3456also /friends /shit etc were fuxed up
3457fixed auto_join to only join channels when the user doing the invite is
3458on the bot list and authorized for that channel.
3459
346001/25/96
3461well we fuxed with the user_list shit_list stuff.. maybe now they'll be
3462working properly. /userlist will display user's on the user list. need to
3463expand that info at some point in time. /add_user should check the current
3464channel for the nick being added and reinit the info if found. not done yet
3465though. Some other functions may well be broken now though :) anything using
3466cluster will need some reworking as we now store the userhost together
3467instead of separately like before. Fixed some fuckup that either plutonium
3468or comstud created.. you never ever ever ever malloc some memory and then
3469started ++ the pointer to it. This really fux's up the memory manager :)
3470This fix by itself fixed most SIGSEV trouble we were having. user/host fixes
3471maybe put back in if it proves that this would be more advantegous. Release
3472this version to Lifendel and BuddhaX possibly Jondalar to get a couple
3473possible operating versions. Couple of small fixes to the bot list. Save bot
3474list done on /savelist. Auto join channel on invite is setup to only join
3475on invite from recognized bots on the bot_list and the authorized channel
3476for that bot. Should solve most problems with joining 50 channels like
3477#spank_the_monkey_all_night_long type of deals :)
3478
347901/26/96
3480well modified a shitload of source to get more compatible with EPIC. Comstud
3481is a idiot. May as well of started from scratch than use any of his source
3482in this client. Plutonium ain't much better though for using it. Anyways,
3483because of the wholesale changes in the client, some bugs may be present..
3484/notify nick  is working sorta... it don't notify you unless you ask whether
3485someone is online. gotta fix that. status functions changed to use static
3486variables instead of malloc'g em everytime you update. This increases the
3487speed of the update considerably. added a %D for dcc stats on current
3488transfer. added a function ltoa and a dcc_active function. Replaced whole
3489file output.c with EPIC version as I accidently deleted mine :)
3490
349101/28/96
3492ripped out the /aop /shit /friend /beepmsg .. code wasn't working on solaris
3493so fuck it. I'll rewrite so it's better, faster cleaner. we have da
3494technology :). /adduser does the /aop stuff anyways. and other than the
3495/shit the others were of limited value.
3496
349701/29/96
3498ripped out da old irc_io and key binding routines. replaced em with the
3499ones from EPIC beta6. it looks alot cleaner and seems faster. Fixed a small
3500buglet with the double_status line and creating windows.. when the window
3501was marked hidden we had a problem with deleting the window. Fixed the
3502vars.h and keys.h to use enums like epic.. this gets rid of a problem I had
3503when I added a variable and forgot to type make in the include dir. Added
3504bonus is the client is now smaller. Almost 20k smaller now. Fixed little
3505buglet with static declared variables.. I though they were always set to
3506zero on declaration. obviously not. Status line was hit with this little
3507buglet.
3508
350901/30/96
3510oh why oh why did I not start with EPIC.. :) ahh well. I've replaced the
3511brain dead routine for opening a file now.. This version searches the path
3512for the file you want to load. It checks for .gz and .Z extensions and
3513uncompresses the file if needed. It slices it dices it... it... much better
3514than before with 10 copies of the same routine in the code.
3515
351602/05/96
3517So many changes and I haven't documented them :)  EPIC7 and BitchX are
3518sharing there alias's file and a bunch of other stuff. Fixed quite a few
3519bugs I introduced as a result of this. which means there are bugs lurking.
3520ie. /alias save and then PageUp through the screen will core..  Probably
3521something to do with the size of that particular cz.irc alias. Changed
3522UserList a little and what it does. Delayed Auto-op is now working.
3523Userlevel for autoop has to be >= 50 in order for it to work. /adduser -nick
3524will now delete the user from the list. /bot -nick will delete the nick from
3525the internal bot list.  Rewrote a couple Comstud crap routines for masskicks
3526and stuff. they woUld be too slow on a large channel. Now they should be
3527alot quicker. I need to re-rewrite them to share alot of the code that is
3528common between masskicks/mass-deops/massbans etc... they almost do the exact
3529same thing, only differance is the semantics of the operation. Now have an
3530idea of how to do /dcc queue sends, so I guess that'll be next on the list
3531of things to-do. Also removed dead-code all over the client. Fixed a couple
3532of small EPIC7 bugs in the process as well. Hope they appreciate the effort.
3533
353402/05/96
3535fixed bug with alias save from cz.irc.. Seems the line was being split a few
3536too many times for the liking of ircii.. Increased the number of times a
3537line can be split and problem is solved until the next time.. 80 * 80 should
3538be enough for now. Scrollback and ansi don't mix well at this point in time
3539although ansi can be turned off.. it does however not make for a pretty
3540sight.
3541
3542020796
3543due to popular request I've started re-implementing shitlist's.
3544Modified the way auto-op delay is done... using a callback timer function
3545now.. Maybe this will be easier?
3546
3547020896
3548Modified get_reason to accept a nick which is then used to help form
3549automated reasons like in kicks and stuff. This file is called reasons and
3550should be installed in the ~/.BitchX directory.  A %s placed in the string
3551will be replaced with the nickname. fixed reasons on the shitlist, was fuxed
3552up.  started looking for a good place to place the check_auto routine which
3553does Aop and shitlist's. Made the client to a automatic who on join to aid
3554in setting the userlist access. This needs to be done cleaner. Fixed /dirln
3555to display the last notice instead of the last msg.. stupid me.. EPIC don't
3556expand_twiddle filenames at all... so therefore we do. especially when we do
3557a rename on a file using ~/
3558
3559020996
3560automatic WHO <channel> is not a brite idea on large channels.. So we needed
3561to add some special logix to whoreply and numeric 315 to fix it. We still to
3562a WHO on join but we turn off the display an pick up the nicks anyway. This
3563allows the userlist to get synced with the channel on join. Otherwise we'd
3564need to type /w in order to sync it when we join. Six of one, half dozen of
3565the other.  Fixed up link looking we think. Should be compatible with
3566Ctoolz now and is done alot cleaner than what I had previously. LLOOK will
3567display all servers in the list. /set llook on/off turns this feature
3568on/off. LINKS (standard command) might have differant effects depending
3569on the setting of the variable llook. little problem with the channel mode
3570indicator fixed. we were not blanking it properly on channel switch..
3571This caused the mode indicator to seem to lock on the previous channel.
3572Small change made to names.c:remove_channel concerning removing the current
3573channel from the list. Limited nethack protection built in.. Defaults to
3574off. /set HACKING 0/1/2/3 will turn this on. users noT on the userlist or the
3575internal botlist will be de-op'd. Users on the shitlist are whatever you
3576set it too :). So this should all work fine. Yeah right... One result of
3577this change is that we needed to change the args to check-auto in names.c to
3578pass the current channel according to get_channel_by_refnum
3579
3580021096
3581Fixed problem with being klined from a server and core dumping. Numeric 465
3582was the problem and the lousy code contained therein.  Also changed the way
3583we handle adding users to the userlist. If the nick to adduser is given as
3584with ! and @ in it we do not annouce to the user what has happened. This
3585fixes a little problem when reloading the userlist on startup, we don't
3586really want to announce it every time we reload.
3587
3588021196
3589another buglet fixed when connecting to a server you don't have
3590authoRization for. We now successfully try a couple of times and then prompt
3591user to give us another servEr name, just like it's supposed to. Remember to
3592check your BitchX.sav file if something is not working properly. I've been
3593bitten by this several times now. Small bug concerning on exec -name
3594processes coredumping. Thanks Driz for sending me that TiME.irc script.
3595
3596021496
3597finally fixed server changes and modes once and for all. Channels rejoins
3598will be attempted on server change. Channel modes on server change are
3599found. So no more lost modes and channels crashes.
3600
3601021596
3602Lifendel noticed a strange problem with the msglog. This might be fixed..
3603Looks like a old EPIC/ircii bug as well though.. limit checking should have
3604been implemented in both... passing the address of a char to a function
3605that's expecting a char * is not good... Mailed to ircii mailing list.
3606Lameness in /cdcc send is now fixed up.. This should now work instead of
3607core dumping.. Just needed to do some error checking. /cdcc notice now shows
3608you what it sent to the channel instead of just sending without showing the
3609user.. Added /ls and /ps commands. Could add others if needed. Fixed /j to
3610not require a leading # on channel. This doesn't fix the problem with
3611scripts but helps when not using a script.
3612
3613021696
3614Added a call to delay-check_auto in numbers.c numeric 315 which allows us to
3615do auto-ops and autokicks on channel join. The actual work is done on a
3616timer of 3 seconds which fixes the problem where you join a channel but
3617don't have ops yet but try to do a bunch of kicks and bans. I just scan the
3618list of users and shit's to find and if they are on either then add a timer
3619call to check_auto. Seems to woRk well in limited testing.
3620
3621022496
3622Added a function called $flash() which returns a nasty flash sequence. /eval
3623+send $flash() will flash a channel :) .. Due to popular request /set cloak
3624on now cloaks /ctcp userinfo, finger, time and some others from users.
3625
3626022596
3627protected users are now working so be careful in the use of this feature.
3628Re-ops/Deops/Kicks/KickBans are all implemented. Had another look at /Ub and
3629bans these might be working properly again.
3630
3631022696
3632ctcp invite has been implemented. user has to have >24 level and you have to
3633have op's and be on the that channel. delay opz now does moe checking than
3634before. it won't do anything unless the user is on the channel and not-opped.
3635Fixed Makefile.in and possibly configure. We'll see what solaris thinks
3636about the changes to term.c. A new function called $repeat() has been added
3637from EPIC8 soUrce. repeat(2 test file)  produces "test file test file" as
3638it's output. Might be handy for greeting someone :)
3639
3640022796
3641Fixed Flooding.. It was never finding a user in the userlist. Added /ctcp
3642whoami command. Fixed /unuser command to actually delete the proper user.
3643Fixed terminal support. I had upgraded the configure script and some defines
3644in the defs.h.in was forgotten. Caused some strangeness of sorts
3645
3646022796
3647I removed the fake files list. This allowed phoenix with fluff to work.
3648Modified parse_command to allow //^ type commands. Added AJOIN command.
3649Added a bunch of Ctoolz scripts I found to the package. cz-pent, lithium
3650chaos and druid scripts are now included. Added a new status line function.
3651It returns the number of times you have been msg'd while away. %^ on the
3652status line returns the count. Fixed a coRe dump on msg flood problem.
3653Made a new /set called MSGCOUNT to store the count of recieved msg's while
3654away. This was done for any scripts that might want to use it. kludge'd
3655around ^M's on display screen by checking if the eol is ^M nul it, in
3656add_to_screen. Added bitchsay to start replacing the use of say. Added a new
3657function called $isnum() returns 1 if the input is a number else 0. accepts
3658numbers, - and # as a number. Fluff modz compat function.
3659
3660022896
3661Flashes and ansi shit should be much more stable now. Only valid ansi
3662sequence we accept starts with esc. All other sequences are done like normal
3663irc ie bold em and make em printable. Had to make a special case in screen.c
3664just to handle this case. Epic suffers from this as well. ^N ^X and some
3665other chars are deadly to a vt100 screen. We still suffer if someone sets
3666for example a topic with a ansi bomb in it. Fixed Channel sync for those
3667scripts that like to hook who reply's just moved a check I use in parse.c
3668whoreply so the hook never happens..
3669
3670030196
3671Working on whois queue's and ison notification. Added hard Userhost
3672Signon's. /set HARD_UH_NOTIFY on/off  to enable or disable this. A new hook
3673for it as added as well. Command line parser from Epic was added. Have to
3674remove the server_list notification routines that are from epic.. too
3675fucking slow on startup. 23 servers and 20 NOTIFY's and look at the lag
3676indicator :) Although i did improve the speed somewhat by using just the
3677connected to servers it's still not enough.
3678
3679030296
3680You can now specifY a string for BOLD/UNDERLINE/REVERSE of /ignore and
3681kther commands. Why?? you ask, well we can now use ansi escape's for those
3682strings. This saves us from having to use a script /on numeric which speeds
3683up the client. /dcc now shows the chat connections and then a graphical list
3684of /dcc file connections if there are any.
3685
3686030496
3687Added some statistics for a channel. New command is CHSTATS [channel].
3688This displays things that have been seen on a channel from join. Fixed up
3689sync_user_list. And created a new function check_sync. We now do a mode
3690#channel b, a mode #channel and a who  #channel on join. I think NOTIFY
3691needs to be put on a timer though, so when we first logon notify is put on a
369210 second timer. each time after though the results are immediate. New
3693commands AddIdle/UnIdle/ShowIdle have been added. AddIdle <#channel>
3694[seconds] to start idle checking on a channel. Every two minutes we check
3695the channel for new idlers. Unidle <#channel> removes idlechecking and
3696showidle [#channel] show idle users on a channel. Structures for nicks and
3697channels have changes thanks to some advice I received from Sheik. Fixed a
3698small bug in .25 when I changed a structure. Changed new command chstats to
3699accept -all as a parameter. Idle kicks need to be modified a little to slow
3700em down :)
3701
3702030696
3703Added new functionality :)  changed parameters to $open to also accept a
3704mode so we now have $open(filename R B) for reading binary and
3705$open(filename W B) for writing binary. without the B writing is done in
3706append mode with the B files can be overwritten. This change was made for
3707compatibility with Ctoolz. Also added was a function called $bcopy() it takes
3708two parameters both file descriptors which must be opened using $oPen. What
3709does this all mean?? Well we can now play a .snd on events such as receiving
3710a message and quitting the program. The following alias shows how.. This was
3711ripped from Cubic Zirconium.
3712Alias playf {
3713if ([$Voice]==[ON]) {
3714@ rf = open(~/.CZSounds/$0 R B)
3715@ wf = open(/dev/audio W B)
3716@ bcopy($rf $wf)
3717@ close($rf)
3718@ close($wf)
3719}}
3720One word of warning though. The copying blocks, ie until the copy is
3721finished we can do nothing. So make your event sounds short oR else you'll
3722be waiting for awhile until the copy is done. Added two new
3723functions  $epic() returns 1, $bitchx() returns 1 and a $winsize()  which
3724returns the size of the specified window or the current window if nothing
3725passed in.
3726
3727030796
3728Added more on hooks server_notice_local_kill server_notice_foreign_kill
3729server_notice_fakes server_notice_fakes_mychannel
3730server_notice_server_kill.. if you want to know what these are about take
3731a look at notice.c parse_notice() function.
3732
3733030996
3734Fixed a bug in notify add_to_userhost_queue . This may have caused seg's on
3735SunOS 5 and definitely caused a small slowdown in joining a channel when we
3736first started the client actually about 40 secs of slowdown. I might have
3737broken hard_uh_notify though. Added command /Addbot to replace /bot .. It
3738makes more sense with /adduser and /unuser and /Addbot and /UnBot. Channel
3739will default to * if left out. This may also fix AIX compiles.
3740
3741031096
3742Added Bhelp command. Ctoolz.help must be renamed to BitchX.help and placed
3743in your .BitchX directory in order to work. Complaining does help and it was
3744actually a fairly simple command to add, we are using builtin array building
3745commands. In my small tests of this function it seems to work almost exactly
3746as Ctoolz chelp does. Started adding /dcc resend and reget functions. I may
3747have broken dcc in this case though. Sure hope not, dcc.c is a mess. Added
3748new script from Zircon. It includes a new help file with functions from sCZ.
3749
3750031196
3751Added new Ctoolz functions $addtabkey() and $gettabkey() support. These
3752functions take single parameters. addtabkey takes a nickname and adds it to
3753the head of a list. gettabkey takes a number either 1 or -1 which is then
3754used to search either forwards or backwards through the list. The most
3755recent nickname on the list is returned first, and then added to the end of
3756the list. Really fixed HARD_UH_NOTIFY. I was only using it on the first
3757server. If you went to another server normal ison functions were used and
3758the userhost was not. //^ functions should now work and SWITCH command from
3759EPIC was added to the client.
3760
3761031296
3762Sheik made a good suggestion to add a dcc stats command so I did :)
3763/dcc stats gives statistics on dcc's this client has done such as Min and
3764Max rates for both incoming and outgoing files. Bytes in and Bytes out as
3765well as a total file count received and sent.  Added /usage command which
3766gives CPU statistics. Fixed /uptime and /chanst to look a little better as
3767well as give some memory statistics. EPIC script directory is included. This
3768is version .29 already. Enabled NON_BLOCKING CONNECTS. Had to make a couple
3769of fixes here and there, but it looks like it's working. Re-visited idle
3770kicks and we now mode +b then kick the user. one minute later we remove the
3771ban. Added more to /chanst command. Fixed linux kernel for getrusage() :)
3772and sent the patch to Linus. Maybe it'll make it into kernel 1.3.73. Fixed
3773/dcc stats command to correctly display bytes sent/recieved. Fixed $1- bug
3774that has plagued EPIC/Ctoolz/SCROLLZ/BitchX clients. Sometimes though a line
3775of output seems to be lost with fluff mods xdcc commands. Don't ever take a
3776negative index on a "" string. You can get odd results. NON-BLOCKING is
3777working for /dcc but logins seem to have a problem. Hard to fix though as
3778gdb gets sig-pipes all the time. Added /RELOAD command which reloads your
3779BitchX.sav file. Had another look at check_auto and friends. It worked, so
3780wonders never cease. We now use a wildcard in the nick so we match on the
3781*!*user@*.sasknet.ca if this causes trouble we may have to take alook at it
3782again. A variable was added called IDLE_CHECK, it's the time in seconds
3783between idle checks. MAX_IDLEKICKS sets the maximum number of idle kicksperformed at one time. MSGCOUNT is something I added awhile back. A user
3784should never have to set this. As it the number of recieved msgs while
3785away.
3786
3787031396
3788Changed some things around. Created a structure to hold channel stats in.
3789When we join a channel and its not in the list it's added to the list. When
3790we leave the channel it is not deleted. if we then rejoin a channel on this
3791list the stats from before are copied over. Complicated, yes. But it solves
3792a problem with the BitchX.sav list and the information stored there.
3793Eventually a lot more info may get stored in it. Such as the banlist. The
3794current channel's bans are already stored in the server_list channel list
3795structure for each channel. I want to rewrite the /unban /ban routines to
3796use this information.
3797
3798031496
3799busy working on non-blocking /dcc resend and reget's.. they should be
3800working now that I fixed the error of my ways. /dcc glist is now looking
3801alot better.
3802
3803031696
3804Changed /ctcp user invite channel  to be a little more aggresive in it's
3805check for validation. So if the user is found on the userlist, and the
3806userlevel is greater than 24 and that user is allowed on that channel, then
3807we allow the invite, announcing to you that we are inviting someone.
3808Otherwise access is denied. Finally got a chance to try /dcc resend and
3809reget in operation. It works so far. It's compatible with Ctoolz and prob
3810Scrollz as well.
3811
3812031796 BitchX .32
3813Added new command /cset. To start with some sets are put into
3814a default channel list set. This default is copied to the new channel as you
3815join it. These channel sets then become specific for the channel. The
3816default channel options can be changed by modifying include/config.h. They
3817can be changed while running using /set. Userlist and shitlist are fixed up.
3818Seems that we were being a little redundant. Also make sure that we use
3819wild_match on both sides of a string. a New command /reload to reload you
3820BitchX.sav file into the client. The default kick reasons file has been
3821renamed to BitchX.reasons instead of reasons. I seen the new Ctoolz /dcc
3822glist but after some careful though decided that I don't wanna tie the
3823client into the script. Nick Kills and collides should be identified
3824properly in oper mode. Operator kills local and foreign are differianted.
3825I've removed the /msg user -invite channel  stuff. Use /ctcp instead. This
3826only allowed people on the userlist to invite themselves, but I didn't see a
3827reason to have two differant methods.
3828
3829031896
3830Link looking is fixed once again. Forgot about hooks and what happens when
3831someone hooks a numeric on me. Started working on various other flood types,
3832such as nick, deop, pub and kick floods. What a weird bunch of stuff.
3833
3834031996
3835kick on deop flood, kick on kick flood, kick on pub flood and kick on nick
3836change floods are now implemented within the client. They can be setup
3837channel specifically or globally for all channels. /ctcp ops channel and
3838/ctcp unban channel are implemented. Also the user list can be turned off
3839for specific channels as can the shitlist. Doesn't sound like i've changed
3840much, but some major changes internally to support all this. Renamed a
3841command called /nig to /unig put back in /unigh as well. (These are unignore
3842commands). Added /dcc path on/off to remove the path from /dcc'd files on
3843display.
3844
3845032096
3846/dcc was a little bit broken, nothing too serious. Fixed I think. /dcc has
3847alot of commands the "standard" clients do not. Such as stats, paths, quiet,
3848auto, status line update, glist, resend, reget and active. /dcc stats
3849returns a status indicator of various things seen while on irc. paths turns
3850off display of the download path of the files in list. quiet toggles quiet
3851mode for dcc transfers. Auto is a toggle for /set dcc_autoget. status line
3852updates are meant for script writers. glist is a graphical display of active
3853dcc's. resend and reget are for aborted transfers, and active displays the
3854limits and bounds of various set's involving the number of active dcc's and
3855the limit on the number of active dcc's allowed. Also /dcc ? returns a help
3856screen. Added /Qk foR quote kicks. BitchX.reason is used from the .BitchX
3857directory.
3858
3859
3860032196
3861Hmmm discovered that I was hooking numeric 365 end of links number and not
3862doing my end of links routine, therefore link looking for only partially
3863working depending on what script you were using. Fixed /dcc chat #channel.
3864Problem was that we can cancel /dcc transfers by number now and of course we
3865use a # to denote this. Well this causes a problem with anyone dumb enough
3866to try and chat a channel. So we are now a little more paraniod about what
3867we'll accept as a dcc number. We also couldn't close that particular kind of
3868chat as we thought it was a number and treated it as such. We now reset the
3869timers and counts when we toggle a /cset on a channel. Otherwise some
3870strange things can happen. Right Jondalar :) Fixed a problem with mode
3871changes. I was incrementing the deop count for both +o and -o cases. Added a
3872new /user parameter. /user -stats returns the internal counts for deops,
3873kicks, publics and nicks changes. /user -ops -stats shows stats for only the
3874ops and /user -nonops -stats show stats for the nonops. Non-Blocking /dcc
3875connects work great. Non-blocking servers connects are working well. Only
3876problem seems to be that the Non-Blocking /dcc never time out. Have to have
3877a look at that. Anyone have any ideas on what a reasonable time-out would
3878be?  Corrected channel statistics to better reflect what is actually
3879happening on a channel. Had a couple of mistakes here and there. Channel
3880splits might disturb these statistics though.
3881
3882032396  BitchX .35
3883Lotza bug fixes. hooking the 251-255 numerics now. /dcc send *.zip was broke
3884due to some stupidity on my part. gettabkey and addtabkey now take an
3885optional second parameter AUTOREPLY. This second parameter defines what list
3886the is nick taken from. The default is the tabkey array. Two new functions
3887added to retrieve the last message and the last notice were created.
3888$lastnotice() and $lastmessage(). Added a sort function. So $sort( one two
3889three)  returns one three two in sorted order :) poor example. Merged EPIC 3
3890changes for alias.c,dcc.c, ctcp.c and others which fixes several functions.
3891dcc.c fixed for files of size 0. These files are automatically announced but
3892not autoget'd. If you do get the file, then it is rejected. All /dcc rejects
3893are also sent to the offending user as a notice. Last msg was fixed to
3894include the userhost of the user and the time the message was sent. Created
3895diff files for irc.c, dcc.c and server.c for EPIC development to have a look
3896at. Fixed WallMsg to check for arguments. If none then print usage message
3897and return. /dirlm and /dirln can take a optional second argument to specify
3898the channel to send to. May have fixed the problem with being set away on
3899server join. We now auto-join all previous channels on server change.
3900This soLution is more elegant than what was previously implemented.
3901Added /UnAjoin to remove a channel from your autojoin list. Channel has to
3902have been added to this list with /AJoin otherwise nothing happens. Added
3903some changes from EPIC 3-patch3. Still won't add the broken part though.
3904Horrible kludge done to /dcc glist. I actually set errno to zero. This fixes
3905a divide by zero error I haven't been able to find anywhere. The actual
3906divide by zero isn't happening within dcc_glist, but somewhere else in the
3907code. I added memmove() from inn distro for those systems that don't have
3908memmove(). I needed a feature of memmove so it now included. It only gets
3909compiled if HAVE_MEMMOVE is defined 0 in def.h. the source is in ircaux.c.
3910Please let me know if anyone has trouble compiling this.
3911
3912
3913032596
3914fuked up on /savelist if you have /AJOIN's defined it'll lock. Arrggh
3915everyone was wondering what the new flag +r meant on the usermode.. Misread
3916a patch was the problem.. you couldn't unset it period because it did mean
3917you were logg'ed into a server., but it should never have been displayed.
3918Changed behavior of /dump. Be very cautious with this. It removes all
3919aliases or ons or vars or binds or everything loaded. But first everything
3920is saved to BitchX.alias. Changed p_privmsg. First we check if the user is
3921ignored then we check we do ctcp and stuff. Changed keys.c and config.h.
3922EMACS_BINDS is defined now and ALLOW_STOP_IRC define was removed so we can
3923always stop irc. Added /DF for disk free command. Added /banstat to show
3924channel bans optional parameters are channel and/or nick. I'm now using the
3925internal banlist which makes channel unbans reasonably fast :) It sounds
3926like i've done alot here, but most of this was already implemented.. Just
3927needed some "glue" functions.
3928
3929032696
3930Chasing some bug in /dcc with AIX systems. Fixed a bug with /msg nick cdcc
3931and nothing else on command line. Fixed /dcc glist. now we can send files of
39320-length but cannot receive em. /dcc glist doesn't crash if we are sending
3933one. Trying to find a fix for a memory problem involving too many m_strdup's
3934and not enough new_free's. Fixed a problem Frisbee found with not being able
3935to display bans on a channel when you're not in it. Nice thing is EPIC has
3936the same bug :). Lifendel says that with more than 12 dcc's he crashes. Not
3937sure yet what this is about. Fizzle_B says that his client tends to "lockup"
3938for about 10 secs. I think this has to do with hard_uh_notify and the amount
3939of notify's we're getting back. I started using USERHOST which is better
3940than ISON. ISON does tend to do this as we have to send individual requests
3941for each nick. USERHOST we can send 5 at a time. BlackJac mentioned that
3942phoenix runs fine with BitchX.. This has actually been working for awhile
3943now. Looked at Hellshocks dcc.c and whois.c but I don't think I'll add em
3944into the client. His modifications involve sending ansi codes directly from
3945the client. Personally I feel this should be the responsibility of the
3946script itself. Sheik agrees with me on this. /ignore works a little
3947differantly than expected. You need to specify the full nick!name@host where
3948nick, name or host can have a wildcard.  we can now ignore _Elfoo_'s lame
3949attempts of getting BitchX. Everyone should add /ignore
3950*Elfoo*!*@*.central.com ALL into their .ircrc file. Changed cdcc doffer. We
3951now don't need to use #1 we can use 1. Changed xdcc send to accept either #1
3952or 1 as the pack number. A queued message is sent to the user if our
3953active dcc count is greater than DCC_SEND_LIMIT. dcc queues are implemented
3954but not very well tested.
3955
3956032896 .37 released
3957Changed /dump. has a new parameter FILE which dumps to a file. It dumps
3958everything to a file called BitchX.dump in your $HOME directory. Also had
3959forgotten to dump keys for ALL parameter. Added changes from e3000s5 as
3960well. /fe has been changed and a couple of bugs in alias.c as well. Fixed a
3961overzealous m_strdup problem in BitchX/EPIC alias's. Fixed nslookup to work
3962on nicknames as well as hosts. Zircon sure finds them bugs :).
3963As much as I don't like it $unlink() and $rmdir() now are doing
3964expand_twiddle so stuff like $unlink(~/file.zip) expands to your $HOME
3965directory. Please be cautious with this. One nice thing is that low-level
3966functions like unlink don't accept wildcards at all. It has to be an exact
3967filename. loaded scripts and shit on numeric 001 and 004. Not quite sure how
3968well this will work, but what the hey. This has the benefit of us loosing
3969the Welcome to the irc network nickname crap, because we can hook it.
3970
3971032996
3972Fixed IRCUMODE so it works foR all servers. You may get a mode msg twice
3973though. Replaced dcc.c with one from EPIC, with my mods. We'll see if this
3974fixes the problem of AIX crashing the sender. I'm thinking that maybe a
3975misplaced FD_SET is the problem or a FD_CLR. One benefit of loading scripts
3976before anything else is that the client is snappier on startup.. Not much
3977left for almost complete Ctoolz compatibility. Guess we'd better open the
3978file before seeking to the end on resend's. Fixed dcc_dldir problems when i
3979replaced dcc.c with one from epic with bitchx mods. /Channel was broke. If
3980there were no channel modes a NULL was passed to the output. fixed dcc paths
3981problem in dcc.c, I might however have been overzealous in my use of it. dcc
3982numbers are reset back to one on /dcc close function. Have to wait and see
3983what happens when an error occurs. Fixed another couple of epic bugs. One
3984with revw. It should never return a NULL and another in the MatchingBracket
3985routine for $revw( without the closing bracket. Also ran epic regression to
3986a successful completion after fixing a couple of bitchx errors in
3987function_rpattern and function_rfilter.
3988
3989040396
3990Added changes from Epic3-6. Added nethack prot of a sort. 3 levels are
3991provided. 1 gives no warning but deops the splitter. 2 gives a warning and
3992deops the splitter. 3 gives a warning only. /cset hacking sets a channel and
3993+set hacking sets global changes. The user has to be on the userlist or your
3994botlist in order for them not to be de-op'd on a split. Added four new
3995commands /chglevel, /chgprot, /chgchan and /chgautoop to change user stats
3996on the fly. /chglevel nick number will change that users stats. This change
3997is not permaneantly saved until you /savelist. The others are the same
3998format. They should work, but if there are any problems let me know.
3999CAUTION. with this nethack prot turned on you could possibly really fuck a
4000channel badly.
4001Fixed a problem with PUBFLOOD. I wasn't checking to see if WE had ops on the
4002channel we were protecting. I never knew there were so many script writers
4003out there :)
4004Fixed a small long-standing problem, noT a bug with the userlist. If we
4005added a user to the userlist we had to do a WHO command to setup the user
4006display properly. Not anymore. It's updated for every server and all
4007channels on add or on modify.
4008
4009040496
4010Fixed a problem with auto_rejoin. Fixed the /clear being missing.
4011NHprot is now a little more conservative about what it considers to be a
4012nethack. /Adduser will now take a list of channels instead of just a single
4013channel. Wildcards are allowed still. Someone pointed out that wildcards
4014/cdcc's are not great at the moment. If we happen to create a file while
4015offering of a type the matches the wildcard, it is sent out as well. I'll
4016have to make a list instead. Added 5 new hooks USERS, BANS and DCC.
4017USERS displays information from the userlist and the shitlist. BANS is for
4018the channel bans. DCC_STAT, DCC_STATF and DCC_STATF1 is for the /dcc glist
4019information. DCC_STAT returns info on chats, raw etc. DCC_STATF returns info
4020on files and DCC_STATF1 returns info on percentage, sizes etc for the
4021current file. Maybe hellshock will realize that this is better than just
4022adding ansi to the client.
4023
4024040896 .41 released
4025Added some more hooks for script writers. DCC_HEADER, CDCC_QUEUE,
4026CDCC_QUEUEH, CDCC_HEADER, CDCC_PACK and BOTLIST.  We now strip ansi on ALL
4027says, puts etc. What does this mean? Well thanks to Sheik, we can no longer
4028be ansi bombed. Fixed some problems with /server connects to K-lined servers
4029that caused core to be dumped.
4030
4031040996
4032Fixed chelp to allow blank lines instead of locking the client. Otiluke is
4033working on a bitchx help file. Was asking about ansi codes :). Took hooks
4034out of /dcc list  they were breaking things I don't want to break. Reconnect
4035is kinda fixed. Too many reconnect's quickly will confuse the client. This
4036is an effect of non-blocking connects. May have fixed the core on instant op
4037on join problem. Added voice to internal structures. /lk won't kick someone
4038with voice now. Replaced all occurances of gettimeofday except in ircaux.c
4039with call to get_time(). Fixed a bunch of warnings with this. Fixed several
4040kther warnings. Fixed the negative time on channel synch by using time_diff
4041instead of trying to calculate the time diff by subtracting. Made changes to
4042notice.c parse_server_notice so it actually uses the /set SHOW_*'s in
4043vars.c.  Made numbers.c USERS send all info that is required to the server,
4044this might fix the problem some are having with some servers. Someone was
4045asking about showing connections to a server.. I think this is actually a
4046server function. We should see them now if we're allowed to. Changed
4047check_channel_match so it's more generic. We can then use it for
4048PROTECT_CHANNELS var. so PROTECT_CHANNELS can now be a comma separated list
4049of channels to protect. If the CTOOLZ_DIR doesn't exist, it is created.
4050
4051041196 .42 was released.
4052Problem someone had with USER not enough params was caused by bad
4053permissions on /etc/passwd. So i may restore the old behaviour of cheating
4054:). Found a little problem with the new hooks in /dcc glist. forgot to
4055continue before the hook. fixed a little bug in process_incoming_listen.
4056Seems to not like a -1 passed to FD_CLR. previous problem was actaully in
4057function_listen.. it should have required a port number. Fixed finger nick
4058to actually finger someone. fixed CDCC_PACK hook so description is at the
4059end of the hook'd data instead of in the middle. Added new command /statsk
4060what it hopefully does is a grep for server bans matching a certain
4061nick!user@host. Worked on /dcc glist some more. Changed some hooks in cdcc.c
4062CDCC_PREPACK from CDCC_HEADER. CDCC_POSTPACK added. Has the same info as the
4063PREPACK. Patch from epic e3000s7 added. SAVEFILE_LIST and SAVEFILEPOST_LIST
4064and SAVEFILEPRE_LIST hooks added. Modified Makefile's to create BitchX
4065client instead of irc client. modified /fuck to do a /addshit nick channel 3
4066as well.. Just like a hackbot. For a synopis of what was changed in the EPIC
4067patch read the doc/UPDATES file.. Several new commands were added, some
4068restrictions removed from some others, some useless code was removed.
4069
4070041396 .43 released
4071Thanks to piraeus for adding color to the main BitchX ascii. I made a couple
4072of changes for those that have terminals that cannot display ansi. /set
4073display_ansi determines whether or not the screen is displayed in color or
4074not. Some major internal modifications have been made. These are related to
4075the way that userlist entries are looked up on the internal userlist. The
4076lookup's don't happen all the time. instead we store pointers to the
4077userlist on the channel nicklist. this should speed things up quite abit.
4078Have to thank sheik for pointing this method to me. Modified some
4079structures, and hooks quite alot as well. Things like the botlist now have a
4080aop and prot value so the bot doesn't have to be on the userlist and the
4081botlist at the same time. Several hooks have changed the number of params
4082being passed. Added parts of whowas.c sheik donated to me :).. Has the
4083effect of speeding up re-joins because the info is actually stored
4084differently. Course this will be buggy until i figure out exactly how to use
4085it. What it does is on parts' it save the user info into a list, on join it
4086check's the list and if found uses that info. Otherwise it just creates the
4087info again. Saves somes lookups on join an other stuff.. names.c uses most of
4088the calls for this function in case your interested.
4089
4090041496 .44alpha :P
4091So many changes made in things internal, and not documented :) Most of the
4092changes were nitpicking things. But we found some lameness in the code as
4093well. ex. On join a entry is made on the channel nicklist. On /who these
4094entries are recreated again after being removed from the list. Duh. User
4095stats are now kept and a new command added. /Nwhois nick shows stats for a
4096user and this was the cause of most of the fixes. /chanst should be working
4097much nicer now. I put the whowas nicks on an expire timer as well. Some
4098changes from ircii-2.8.15 were made to the code. One noticable one is that
4099+window double now sets the double status bar. /set DOUBLE was removed as a
4100result of this change. New commands are UNTIL and UNLESS to complement IF
4101and WHILE commands. Some changes made to the non-blocking code from
4102ircii-2.8.15 as well.
4103
4104041796 .44magnum released :)
4105Little bug in the new windowing discovered and fixed. Had to do with tog
4106opervision (hidden window) and then switching back and forth. you'd loose a
4107line of display when you did this. /cdcc timer would core. /cdcc save
4108[filename] command added to save your offer list. /cdcc load [filename] to
4109reload the offer list. You can reload this file offer list several times.
4110/cdcc secure will only allow people on the userlist to get files from you.
4111It is a toggle command. defaults to off
4112
4113042396 .45 release
4114Added new cdcc.c from ananda. Modified for BitchX hooks. I like it because
4115it's simple and elegant.
4116
4117042496
4118Fixed a problem with /redirect help. Made DISPLAY_ANSI on/off mean exactly
4119that. If off all ansi strings are removed from output. We can define the
4120default behaviour of this in the Makefile. May have fixed a problem with
4121redirect, where garbage is displayed to the redirect. Changed /k to have a
4122reason if none given. /tban for interactive delete of bans added. /bantype
4123started. Should allow me to get rid of a bunch of useless almost duplicate
4124functions. strtoul is missing on some systems. We now check during configure
4125and supply a version if necessary. Same with memmove. Changes so that
4126.bitchxrc is loaded instead of .ircrc if foUnd. else .ircrc is used.
4127Fixed /bk of a non-existant user. /nwhowas to show the whowas queue. Fixed
4128/fuck of a user not on the channel to work properly. Lamerz beware. Removed
4129sitekickban and siteban commands in preparation of using /banstat.
4130
4131050196
4132Haven't updated this with all the fixes. /fuck should really work now.
4133/banstat is implemented.  /dcc glist now displays reget's and resends.
4134Offered and waiting are also possible. /dcc glist what a pain in the ass.
4135/bantype is implemented. A Screw ban is the same as a screw ban in phoenix
4136and many other scripts. It was also a pain to implement. /bantype takes 4
4137differant types of bans. dcc of small files or fairly large files over a
4138fast link could cause a floating point exception in some cases. Fixed a
4139small bug in /cdcc load ... the /n was confusing the client. Added
4140flood_checking. We will flood_check if FLOOD_PROTECTION is on. If the
4141userlevel is < 90 we will kick user from the channel if FLOOD_KICK is set.
4142And finally we will do a timed auto-ignore of the user for 10 minutes.
4143Several new hooks added at the request of Zircon. USERS, USERS_HEADER, STAT
4144and STAT_HEADER. Fixed a screw-up I had with glob. Forgot to include the
4145source for glob.c and glob.h :) If you need this you'll still have to edit
4146config.h to define NEED_GLOB if you want to include this functionality.
4147
4148050696
4149Due to some stupidity some types of floods were not being set properly. In
4150some cases we were double incrementing variables. Fixed /unig to actually
4151un-ignore a nick!. Fixed LameKick's to do a actual kick. Seems some changes
4152made previously to speed up access to the userlist has broken a couple of
4153functions here and there. We were forgetting to resync the channel userlist
4154after removing a user from the userlist. This could cause a crash. Shitlist
4155was not working. Fixed. shitlist & userlist were not updating the channel
4156nicklist properly. sync'd the botlist and the channel userlist better. Added
4157a new function $userver(nick) which returns the nicks server which we happen
4158to be storing in the the channel nicklist. Added a new command /sk to
4159perform a server kick :). Server can be wildcarded and a optional channel
4160can be specified otherwise the current channel is used. Turned FLOOD_PROT
4161off by default. Increased default FLOOD_RATE and FLOOD_USERS and
4162FLOOD_AFTER's. Memory is cheap :) Changed Screw bans to use a * for the
4163nickname. NetSplit hacking is being worked on.
4164
4165051096  .49 released on net
4166Merged changes from EPIC 3001 beta. $mkdir(), $umask() and /hostname for
4167dynamic IP hosts were added. Not sure exactly what /hostname is needed for
4168though. Need to look at local_ip and re-add that to the client if possible.
4169server info for user was not quite right. /ping hopefully fixed up. Files
4170and chat's can now be encrypt'd when starting the transfer. /dcc send
4171panasync file.zip -encrypt mypasswd will enable this "feature". Removed some
4172lamege from EPIC beta involving malloc. Fixed up flood prot even more. A
4173separate /set CDCC_FLOOD_RATE and /set CDCC_FLOOD_AFTER is implemented. Do
4174we need a separate CDCC_FLOOD_KICK as well? FLOOD_KICK var is a global var.
4175Fixed a long standing bug with channel creation. Seems that we were not
4176getting the value of the proper variable. Added a new set NAMES_ON_JOIN
4177SHOWIDLE and SHOWIDLE_HEADER hooks provided by request. SHOWIDLE returns
4178nick, host, userlevel in the userlist and number of seconds idle.
4179
4180052096 .50 released (aprox date)
4181Been busy at a new job, so not much done recently. I found a silly stupid
4182bug in check_flooding. Fixed /unig to work once again. I think I need a new
4183wild_match routine, that checks both params for a wildcard. Added /cdcc
4184ptimer command. Added a set for the default dcc timeout value. A notice is
4185sent to the other end saying we closed the dcc. _CDCC_CLOSE_IDLE_TIME is the
4186set for this. Added /findports command.
4187
4188052996 Released .52
4189course flooding seems to be a little more difficult than I thought. Some
4190things have been put on hold due to this problem. I have fixed /kb and
4191friends to do a proper screw ban. Fixed /dcc timeouts. We now default to 35
4192seconds for a chat/raw etc and 3 * 35 for file sends/resends/regets etc.
4193Fixed a small flooding problem in the timer as well. wildcard sends are now
4194implemented a little better but I'm still not happy with it. Fixed the Hyper
4195DCC lamage with dcc multi sends. Fixed /dcc list to not core dump..
4196dcc_time() was a problem here. /set autokick_on_Version on/off for those
4197versioning fools. /set mircs on/off for something EFudd wanted. Think it has
4198todo with /ctcp sound. More work on cdcc stuff. /set cdcc_security is a
4199numeric variable which can be set to the userlevel required to get any cdcc
4200response from you. This effectively cut's out the cdcc flood problem if set
4201to anything greater than 0. Course then nobody can get a cdcc list other
4202than a user on the userlist. Also cdcc requests are ignored if there is
4203nothing offered. Flooders beware.
4204
4205053196
4206Changed CDCC_PREPACK to include some dcc_stats by request. dcc_max_rate_out,
4207dcc_bytes_out, dcc_max_rate_in, dcc_bytes_in are added to this hook. Changed
4208behaviour of CDCC_QUEUE_LIMIT a little. If it's set to 0 then in effect
4209there is no queue limit. fixed dcc stats command. Fixed a problem with cdcc
4210and noThing on the offer list. Just pass through the mesg. /ctcp is a little
4211harder todo though. Modified /JOIN to check for a # if it's not there then
4212we add it. Otherwise we just pass the command. Don't forget about the /set
4213SEND_IGNORE_MSG. Also new is a cdcc.irc that can be modified to change the
4214output sent to a channel. It's basically an example of what to do. it'll
4215only work currently with scz-te.irc but this could be changed at your
4216convience. Changed behavior /cdcc offer to now accept a single filename on
4217the command prompt. So instead of prompting fOr a filename/description we
4218can then skip ahead to getting the description. Before you ask if we can
4219have multiple filenames on the prompt, I don't think this is possible from
4220the quick look I had at the code. Quickly implemented /cdcc minspeed
4221checking. It is in KB/s. So 5 would be 5KB/s. You can enter fractional Kb/s
4222as in 1.5KB/s as well. /cdcc timer was changed so it takes a number which is
4223then converted to minutes. We were just using seconds before.
4224
4225060396 .53 Released
4226Fixed some lameness in cdcc again. involving DCC_SENDS_LIMIT and
4227DCC_QUEUE_LIMIT. Forget to check for a equal to 0 value which should
4228effectively disable both of these items. Changed config.h to have a default
4229value for DCC_SEND_LIMIT of 5. Changed CDCC_PREPACK once again added one
4230more parameter for a total of 13 output. We now output the minspeed as sent
4231by you. Changed CDCC_POSTPACK to retrieve same info as the CDCC_PREPACK.
4232Fixed dcc_check_idle to check for a 0 value on _CDCC_MINSPEED_TIME which
4233nullifies the speed checking. Do we want to have differant speeds for
4234differant packs? If the AUTO_REJOIN for a channel is set to any thing other
4235than 0 some wonderful things can happen. If you have a hacked identd client
4236installed, you can change your username as well. There are several examples
4237of type of identd client. cidentd-1.0.tgz is available from sunsite.unc.edu
4238somewhere but the source in pluto.c will need to be changed to support the
4239$(HOME)/.authlie instead of the $HOME/.noidentd file currently used. The
4240routine to make this all happen is called do_newuser() in pluto.c. Fixed
4241/boot so it don't segfault with no args. Fixed compilation on SunOS 4.1.4.
4242/cdcc doffer will now accept any number of arguements on either the command
4243line or the interactive prompt. /cdcc list will accept a pack number to
4244display. It then displays the files in a pack. /cdcc load and save functions
4245will take a optional filename argument. Default is to cdcc.save. File is
4246always relative to your home directory. Minor cosmetic changes to input's
4247in cdcc. /cdcc send and resend will now accept a filename. course we may
4248have a problem if the name of the file is a a number. A pack will be sent
4249matching the number first if possible before we check for a filename. Files
4250are taken from the current directory. /cdcc plist will take an optional
4251channel arguement. If given then that's the channel the plist is sent to.
4252Minimal checking is done on whether this is a valid channel or noT. A comma
4253separated list of channels is allowed. A sample script is provided for
4254script writers in order to provide some directions as to the use of the
4255hooks in cdcc. Added save of banwords command to savefile. Documented many
4256on hooks for script writers perusal. A couple of new hooks implemented.
4257CHANNEL_STAT for the /chanst command output. (32 parameters to this one).
4258USAGE hook for the usage of internal commands. Over the next couple of
4259versions of BitchX I expand the list of commands which can make use of this
4260particular hook. New Documentation and a modified BitchX.help file provided.
4261
4262061096 .54 released
4263Ping fixed we think. ping is still in the CTCP_REPLY list though. if you
4264hook CTCP_REPLY be prepared to handle ping responses. Took another look at
4265kther floods. Fixed /repeat with a off by one error. Took time to make
4266usage mesg's use the new hook and function. Ping is fixed. added rest of
4267command for BanWords. UnBanWords/UnWordKick and ShowWord commands.
4268DCC_TRANSFER_STAT was broke. Forgot to remove a couple of parameters from
4269hook.c. Added a new function $help() which takes a filename and a subject.
4270It uses the filename the same way that /chelp does. It searches the list for
4271the subject in the same way as well. Information from the help file is only
4272loaded once.
4273
4274061296 .55 Released
4275Added a new command /whereis foR looking up people that join and then leave
4276a channel and change nicks. Works well as long as they don't change servers
4277or there isn't more than one of them online at the same time or there
4278username doesn't change. Fixed up /Statsk which is a command for grepping
4279those pesky server bans. Changed chelp and $help(). Sorry script writers but
4280I decided to place the filename last as the parameter to $help(). This way
4281we can initialize it once and then forget it about passing the filename
4282altogether. chelp was changed to actually load the file on BitchX startup.
4283Reasons are that the help from the $help() function will overwrite the ones
4284that are loaded by chelp. So we preload the help, if they are overwritten
4285well not much we can do then except restart irc. $help() returns a long
4286string containing all information about a topic including the usage message.
4287I guess a hook for this might be nice as well. /cdcc minspeed's were a
4288little borked. Added a server sync routine. Fixed Channel keys being saved
4289after a part and a rejoin.
4290
4291061496
4292Fixed /whereis if the user is still on the channel. Stupidity here. $help()
4293changed once again. $help returns info differant from /chelp. It is upto the
4294script writer to format the information returned. A hook is also provided
4295which applies to both /chelp and $help(). Write the proper on hook and never
4296have to woRry about it again. Added SCRIPT_HELP_FILE. This is a full
4297pathname/filename. Default is CTOOLZ_DIR/BitchX.help. $help() needs to be
4298called the first time with a filename. It is expanded to a full pathname
4299automatically. DESYNC_MESSAGE hook provided. See README.hooks for info.
4300IDENT_HACK can be set to the name of the file to use for your hacked ident
4301to hide the username. Default is ".noident". This files needs to reside in
4302your $HOME directory, so ~/ is prepended and expanded automatically.
4303If JOIN is hooked AUTO_NSLOOKUP wasn't happening. So we now do the lookup if
4304AUTO_NSLOOKUP is ON and pass that to the hook. You can no longer just "quit"
4305irc with active dcc's. A second prompt appears asking for verification.
4306Renamed command STATSK to /FKLINE. Integrated changes from ircii2.9base.
4307Fixed a dumb problem in remove_channel(). Forgot to add the nicks to the
4308whowas buffer when we left a channel. This would cause some ghost problems
4309if we then left a channel, and some time later rejoined it. Created a save
4310BitchX variables routine. Only saves the specific BitchX variables to
4311BitchX.sav file. Linux glob functions don't seem to work properly. So I've
4312now enabled the included glob function by default. Added a WHOLEFT hook. We
4313are saving the info from a netsplit currently. type //Wholeft sometime.
4314We'll have to see whether this information is correct before implementing
4315more of it. Server oPs/deops bans/unbans are now incremented when they
4316occur. Affected changes to decifer_mode and update_stats. Added /cleartab
4317which will clear the tabkey array and /clearauto for clearing the
4318autoreply table. Started adding has_ops to whowas info. This is for netsplit
4319stuff. Eventually if a user splits away with opz, on rejoin we won't de-op
4320them. Sounds simple, but it's not. We'll have todo a little more work before
4321this can be a reality.
4322
43230617  .56 released for comsumption.
4324Changed /set Log on to strip ansi escapes out of the output. Changed
4325behavior of /ban. we check the list of nicks to match the supplied ban. If
4326their is no match then we will either do one of two things. if a ! and a @
4327is in the ban spec then we just do a mode +b otherwise we search out the
4328match using whois and doing the ban that way. All nicks on the channel are
4329matched against the ban. Otherwise some could slip through the cracks.
4330Oops. .bitchxrc file was not being loaded properly due to a missing / .
4331Changed behaviour of /tban and /unban to follow the variable NUM_BANMODES
4332for the number of unbans todo in one shot. We now unban multiple bans in one
4333shot. Thanks to  BlackJac for the start of a great INSTALLATION file. It was
4334the first time he had compiled the client and made some notes for other
4335beginNers and some not so beginners to follow. Found the little bug with
4336.BitchX no being created with u+x permissions. Added BITCHX_HELP var. This
4337is the complete path/filename of the default BitchX.help file. Default is
4338~/.BitchX/BitchX.help. Changed $help() to look at the SCRIPT_HELP var if no
4339filename is passed to it. This Allows us to set SCRIPT_HELP to a dir/helpfile
4340and then just call $help(some_topic). Notice the lack of filename. Default
4341is ~/.BitchX/BitchX.help still. Fixed small annoyance in /notify that could
4342possibly save a blank notify to the notify list. This caused the notify list
4343to display on startup. nasty bug in status.c fixed. Added a isuser()
4344function that returns info on a nick that is in your userlist,botlist or
4345shitlist. $isuser(nick userhost channel) is the syntax of this
4346useful little function. Channel can be left off in which case a * is
4347returned. The type of the list is returned as either USER|BOT|SHIT along with
4348the relavent information to that particular type of list, thanks Jordy.
4349Jordy also sent code!! for a new function called $pad(). It accepts a number
4350that is either +/- and the string to pad. If negative it pads to the right,
4351else it pads to the left. Fixed /set LOGFILE to expand the path of the
4352filename passed to it. /Window double no args would core the client. Fixed.
4353Without DCC_* hooks /dcc quiet really means quiet. /lastlog now strips out
4354all ansi codes period. Some hooks were being used that echo'd the lastlog
4355info to the screen. Ansi - chr 27 looks really ugly displayed this way.
4356Increased default timeout on dcc chats to 55 seconds, files is 3 *  this
4357number.
4358
43590624 .57 released
4360immediately BigHead noticed a bug with the /user command. Fixed a bug
4361icebreak reported with $cluster(). Fixed dban so if we do a *.me the count
4362is more correct. 3 new functions. $isban(channel nick) returns 1 or 0 if the
4363person is on the internal ban list. $isop(channel nick) returns 1 or 0 if
4364the person has ops on the channel on the internal userlist.
4365ischanop(nick channel) is already implemented isvoice(channel nick) return 1
4366or 0 if the person has voice on the channel.
4367
43680626 .58 released
4369Fixed ctcp flooding I think. Had the wrong order of events necessary in
4370order to auto-ignore floods. Created a CTCP_DELAY variable. This is the
4371amount of time that is supposed to pass before we will accept another ctcp.
4372/ctcp niak xdcc list has a separate flood characteristic than normal ctcp.
4373These can be set using /set CDCC_FLOOD_AFTER and CDCC_FLOOD_RATE. Please do
4374understand what these represent before changing the default values. Also we
4375have CTCP_FLOOD_PROTECTION which can turn this on/off. Fixed a problem I
4376created with some color experimentation. Seems Bold was getting translated
4377into the color red. Changed output from dcc_transfer_struct. packet counts
4378were not exactly correct, due to differant buffering sizes between clients.
4379Changed status_msgcount to display a 0 for no away messages. Changed
4380flood_ignore to make the code a little more sensible. Anyone over 90 in the
4381userlist or the botlist can ctcp flood you without being kicked or ignored.
4382Due to some complaints on $help() formatting, we have now modified $help to
4383directly output the information to the user. A typical alias looks something
4384like the following
4385alias shelp {@htopic = [$0]?[$0]:[index] ;$help($htopic) }
4386
4387062796 .59 Released
4388ctcp flood protection. If the current incoming ctcp is within CTCP_DELAY
4389seconds we drop the request. 3 works well for most situations. Someone
4390offering files may want to make this value 2 which is the default for
4391ircII2.9. Value is saved in the BitchX.sav file. Fixed a couple of other
4392nits with the wholeft commanD. Seems op kills were being interpreted as a
4393server split. Someone suggested using "))" as the fix. Seems to work. When
4394"we" left a channel it was being intrepreted as a server split as well. This
4395was in remove_channel(). /window double 1 on will create a double status on
4396window 1, /window double 2 on will create a double status on window 2 if it
4397exists else it does nothing. /mload now expand and searches paths for the
4398menu you'd like to load. /cdcc notice will now also accept a channel to
4399display the offerlist to. Added new ansi from reefa. Changed output of ctcp
4400version a little. Found a small bug in server.c where it was possible to
4401crash the client if we couldn't connect to a server. Found this while adding
4402/set NEXT_SERVER_ON_LOCAL_KILL to the client. Modified server_read_file to
4403check for a file called .ircservers in the $HOME directory. If found it is
4404parsed as a extra list of servers to be included after
4405/usr/local/lib/irc/ircII.servers. This behaviour might be modified later to
4406use one or the other and not both. Modified bans, kb etc to use one function
4407to create the ban string. Call it a code clean up. Fixed /ban to work
4408properly. Added User /bantype by request. Flooding once again. This time it
4409just might work. (if anyone ever asks you to add flood checking, tell em to
4410go f**k themselves). Added a new cset for PUBFLOOD_IGNORE_TIME. This is the
4411amount of time in minutes we will default ignore someone. if FLOOD_KICK is
4412off we don't kick someone that is pubflooding. We ignore them :). Whole
4413bunch of other minor details.
4414
4415070196 .60 released.
4416Fixed .ircservers usage to not require it to be in the users home directory.
4417Probably solved most segfaults due to server's not being found etc. Might
4418have also fixed some misc segs' on linux systems with this as well.
4419Replaced two key bindings. TAB and ^] are setup as auto msg and auto
4420response by default within the client. Basically we can get rid of the
4421tabkey stuff from scripts. Changed $gettabkey and $addtabkey functions
4422around a little. Made /ClearAuto work as advertised. Moved clear_auto and
4423friend to a differant file (misc.c). Started adding /tlock and /modelock
4424functions. Cleaned up some code and some output fixes as suggested by
4425BarK0de who's creating a new helpfile for us. Added a new function called
4426$randomnick() which returns a string that could be useful as a nickname.
4427Also a command /randomnick will actually change your nick to some random
4428nickname. Patched in changes from new EPIC beta. /redirect might even work
4429now. minor speedups were involved here as well.
4430
4431070796  .61 Released
4432well BJ finds a bug due to some lameness on my part. fixed irc.c. Also fixed
4433configure for Ultrix systems. Need to fix for AIX -lld. Removed more ComStud
4434lameness. Fixed some of my own lameness on the init of the auto reply
4435string, which should be automatically set to your nickname. It wasn't
4436occurring properly. Found and fixed a problem with $read(). Lines with no
4437carriage return were screwed up (Thanks Flier). BlackJac noticed a problem
4438with the status bar channel modes not being properly updated. ChaosLord sent
4439in a small patch for modifying argv to hide BitchX from admins. edit
4440config.h and #define CLOAKED "emacs" or whatever and recompile. BitchX now
4441looks like it's emacs and noT irc client. Sheik suggested something that
4442sounded pretty good. The ability to /ignore a whole channel or just certain
4443things on a channel. Well we can now do this. /ignore #bitchx public  will
4444ignore all publics from the channel bitchx. The channel ignore is checked
4445after the regular ignore, so we can modify the behaviour of channel ignore
4446using dont_ignore for a nickname etc. Some types of ignores don't translate
4447well into channel ignore, so IGNORE_CRAP may not ignore everything you
4448normally would be used to on a channel wide basis. (And Sheik this was easy
4449to add :P). Added another var called SHOW_NUMERICS_STR. It's default at the
4450moment is the string from scz-te numerics. Basically you can now change this
4451on the fly, and add ansi in places you didn't think were possible. (Some
4452server responses for example). The default will change back to "***" after
4453awhile, but I want to leave it like this for a short time to make people
4454aware of it. Calculation of dcc rates on /dcc stats was corrected. Added
4455AR_REPLY hook which is called when user presses ^]. Nothing is added to the
4456input it's up to the script writer at this point to do something with this.
4457Added two new hooks AR_PUBLIC and AR_PUBLIC_OTHER. This makes some scripts
4458work a little strangely until the script writers catch on. :) Provided
4459better keybindings for pgup/pgdn/end. Modified do_screens to accomadate this
4460change. Found bug with /bind meta1 which would segfault the second time you
4461ran this command. Changed /w command just a little to default to something a
4462little better ie it now does a /w $C instead of a whois nickname by default.
4463Someone had pointed out that shitlist bans were not working. Added /tlock
4464command for locking the channel topic. Renamed a couple of variables to be
4465more consistant. So we now have MSGLOG_FILE and KILLLOG_FILE. Fixed some
4466more inconsistancies in various commands. Fixed /eval echo $f[e][  bug we
4467share with ePIC. stripansicodes used on /redirect output. /Tlock was not
4468quite right in the implementation of it. Fixed.
4469
4470071896 62 released.
4471Added a new match() routine. we'll see how this works out. Routine is
4472wildmat routine from Rick Saltz and is almost a standard. Added a new
4473optional parameter to /unbot, /unuser and /unshit. -All will remove all
4474entries from the respective list. We also sync the channel nick list at the
4475same time which effectively completely removes all traces of that list.
4476Changed some internals around to make auto-op/deop more effective after a
4477chat with Sheik. SEND_IGNORE_MSG is used more often in the source ie whois.c
4478Also SEND_AWAY_MSG is now used as well. Added /back to compliment /away
4479command. It's an alias. /sping <server> and internal lag indicator. %L will
4480display lag on the status bar. -b switch added to load the script -before-
4481we connect to the server. Changes to bans for 2.9 servers. Also have to make
4482sure that user@host bans strip ~ as well. Documented -n switch. Added -r
4483switch for reading a specified list of servers other than the default
4484.ircservers. This file is relative to ~ or your home directory. Added four
4485new functions which are basically untested. $opensocket(name port) returns a
4486socket number. $closesocket(socket_number) closes a open socket.
4487$readsocket(socket_number) returns 0, -1 or number of chars read and the
4488string. $writesocket(socket_number string) writes to open socket and returns
4489either -1 or the number of chars written to the socket. If your writing to a
4490irc server make sure and append \n to the output. STATUS_LAG can be used to
4491setup what the lag indicator looks like. /mvoice and /voice added.
4492
4493
4494-panasync    edwac@sk.sympatico.ca
4495
4496Greetz to :
4497===========
4498Stumble, BlackJac, Lifendel, Hob, Jondalar, Sheik (CtoolZ), BuddhaX (my bro),
4499Zircon, Fr|sbee, otiluke, bbb, BigHead, Suicide, Fury, EFuDD,
4500BrickMan, Jordy(Circ & ftp), icebreak, reefa, FLiEr (ScrollZ), JVaughn,
4501Masonry, |MaRe|, Hob, Wangel, Ananda, Hybrid, Trench(BitchX name),
4502HappyCrappy, BlackRage, digriz, Capsta, MHacker, Dakota, Jackal_, Pent,
4503mikh, insanity, path, Fury, Drastic, MadB0mber, MO^, Cres, scewp, Hammz,
4504novalogic and BarK0de.
4505As well as any other's I may have forgotten over time.
4506
4507Thanks for all the bug reports from those who run this client, you're
4508helping tremendously. And no Fizzle_B there are no backdoorz in this client
4509that i know of.
4510================
4511
4512And finally death to the code rippers..
4513
4514
4515