Commits

Anonymous committed 517991e

Eicq is broken - it'll be back when it's fixed

Comments (0)

Files changed (31)

.cvsignore

-_pkg.el
-udp2tcp
-auto-autoloads.el
-custom-load.el

ChangeLog

-2002-01-07  Adrian Aichner  <adrian@xemacs.org>
-
-	* Makefile (HTML_FILES): New.
-	* Makefile (HTML_DEP): New.
-
-2001-06-06  Steve Youngs  <youngs@xemacs.org>
-
-	* eicq-report.el (eicq-report-debug): New.
-	(eicq-prepare-report): Use it.
-
-2001-06-05  Steve Youngs  <youngs@xemacs.org>
-
-	* eicq.el (eicq-version): Add optional arg so you can insert the
-	version string at point.  Autoload it.
-	(eicq-user-meta-web-aware): Type boolean.
-	(eicq-user-meta-hide-ip): Ditto.
-	(eicq-user-meta-authorization): Ditto.
-	(eicq-log-info-mark): Ditto.
-	(eicq-log-buddy-status-mark): Ditto.
-	(eicq-log-buddy-message-mark): Ditto.
-	(eicq-log-outgoing-mark): Ditto.
-	(eicq-log-error-mark): Ditto.
-	(eicq-log-debug-mark): Ditto.
-	(eicq-log-system-mark): Ditto.
-	(eicq-buddy-status-color-hint-flag): Ditto.
-
-	Most user variables moved to take advantage of new bug-report
-	code.
-
-2001-06-03  Steve Youngs  <youngs@xemacs.org>
-
-	* eicq.el (eicq-user-meta-birth-year): Format for this variable
-	should be YY, update doc accordingly.
-
-2001-05-31  Steve Youngs  <youngs@xemacs.org>
-
-	* eicq.el (eicq-pack-keep-alive-1): Remove - obsolete.
-	(eicq-pack-info-request): Ditto.
-	(eicq-pack-info-ext-request): Ditto.
-	(eicq-pack-update-info): Ditto.
-	(eicq-pack-update-info-ext): Ditto.
-	
-2001-05-20  Steve Youngs  <youngs@xemacs.org>
-
-	* Makefile (superupgrade): Make sure owner/group is set correctly
-	in source tree.
-
-	* eicq.texi: Finally started to write this.  Not finished yet,
-	but maybe by the end of the weekend.
-
-	* eicq.el (eicq-log-buddy-message): Switch to log buffer for smileys.
-	(eicq-auto-away-timeout-set): Use a 2nd itimer so auto na works 
-	properly.
-
-	* etc/eicq/world: Updated.  Somehow it got overwritten with an old
-	version of itself.
-
-2001-05-07  Steve Youngs  <youngs@xemacs.org>
-
-	* Makefile (superupgrade): New target for me only.
-
-	* eicq.el (eicq-buddy-show-buffer): Remove "*** Contacts ***".
-	(eicq-auto-away-timeout-set): Typo.
-	(eicq-interface): New customize group.
-	(eicq-hide-window): Add eicq-status-window.
-
-2001-05-05  Steve Youngs  <youngs@xemacs.org>
-
-	* eicq.el (eicq-status-show-buffer): Change name of buffer to "*Status*".
-
-2001-05-02  Steve Youngs  <youngs@xemacs.org>
-
-	* Makefile (AUTO_PRELOADS): New.
-
-2001-04-28  Steve Youngs  <youngs@xemacs.org>
-
-	* Version 0.2.13 released.
-
-	* eicq.el (eicq-message-sound): Removed, put into alist.
-	(eicq-chat-sound): Ditto.
-	(eicq-url-sound): Ditto.
-	(eicq-buddy-sound): Ditto.
-	(eicq-auth-sound): Ditto.
-	(eicq-emailx-sound): Ditto.
-	(eicq-pager-sound): Ditto.
-	(eicq-sound-alist): New.
-	(eicq-use-sound-flag): New.
-	(eicq-do-message-helper): Use 'eicq-sound-alist', 'eicq-use-sound-flag'.
-	(eicq-do-online): Ditto.
-	(eicq-log-buddy-message): Run 'smiley-buffer' and 'goto-address'.
-
-
-2001-04-22  Steve Youngs  <youngs@xemacs.org>
-
-	* eicq.el (eicq-buddy-show-buffer): Rename and rearrange status widgets.
-	(eicq-status-window-height): New.
-	(eicq-status-buffer): New.
-	(eicq-status-show-buffer): New.
-	(eicq-show-window): Show the status buffer as well.
-	(eicq-disconnect): Kill the status buffer.
-	(eicq-switch-to-buddy-buffer): New.
-
-	* eicq-toolbar.el: Reduced the number of tools on the toolbar.
-
-2001-04-21  Steve Youngs  <youngs@xemacs.org>
-
-	* Version 0.2.12 released.
-
-	* eicq-toolbar.el (eicq-toolbar-disconnect): Do 'eicq-logout' before
-	'eicq-disconnect'.
-	(eicq-buddy-toolbar): Remove.  Use the same toolbar for both the 
-	buddy and log buffers.
-	(eicq-install-buddy-toolbar): Use the log toolbar.
-
-	* eicq.el (eicq-do-login-confirm): Run 'eicq-show-window'.
-	(eicq-disconnect): Kill the Eicq buffers.
-	(eicq-log-mode): Load both the log menu and the buddy menu.
-	(eicq-buddy-mode): Ditto.
-
-2001-04-01  Steve Youngs  <youngs@xemacs.org>
-
-	* README: Added section about submitting patches.
-
-2001-03-21  Steve Youngs  <youngs@xemacs.org>
-
-	* eicq.el (eicq-log-next-unread): Make it interactive.
-	(eicq-log-previous-unread): Ditto.
-
-2001-03-19  Steve Youngs  <youngs@xemacs.org>
-
-	* eicq.el (eicq-log-mode-map): 'n' & 'p' are now next and previous
-	Unread messages.  'N' & 'P' are for next and previous message.  
-	Mark unread has been moved to 'v'.
-	(eicq-buddy-show-buffer): Add widgets for changing status via the 
-	buddy buffer.
-
-2001-03-18  Jack Twilley  <jmt@tbe.net>
-
-	* eicq.el (eicq-log-next-unread): New.
-	(eicq-log-previous-unread): New.
-
-2001-03-12  Jack Twilley  <jmt@tbe.net>
-
-	* eicq.el (eicq-user-auto-away-p): New variable.
-	(eicq-auto-away-timeout-set): Use new variable, change docstring.
-	Reordered away tests.   
-	(eicq-send-message-helper): Use new variable.
-	(eicq-change-status): Use new variable.
-	(eicq-log-*-mark): New variables.
-	(eicq-log-*): Use new variables.
-	(eicq-log-buffer-position-flag): New variable.
-	(eicq-log-entry-re): New variable.
-	(eicq-log): Use new variables, change docstring.
-	(eicq-buddy-update-status): Only display status packet if status
-	has changed.
-
-2001-03-09  Steve Youngs  <youngs@xemacs.org>
-
-	* Version 0.2.11 released.
-
-	* eicq.el (eicq-blurb): Update.
-	(eicq-do-offline-message): Remove require 'timezone and move
-	it to top of file.
-
-	* eicq-report.el (eicq-prepare-report): New.
-	(reporter-version): Remove.
-	(vars): Ditto.
-	(reporter-confirm-p): Ditto.
-	(reporter-package-abbrev): Ditto.
-	(eicq-report-other-vars): Ditto.
-	(eicq-report-avoid-vars): Ditto.
-	(eicq-report-get-versions): Ditto.
-	(eicq-report-get-user-vars): Ditto.
-	(eicq-gnus-submit-report): Ditto.
-	(eicq-report-bug): Don't use reporter.el.
-
-	* eicq-toolbar.el (eicq-icon-directory): Make it customizable.
-
-2001-03-06  Steve Youngs  <youngs@xemacs.org>
-
-	* eicq.el: (eicq-delete-offline-messages-flag): Change default to 'ask.
-
-2001-03-06  Steve Youngs  <youngs@xemacs.org>
-
-	* Version 0.2.10 released.
-
-	* eicq.el: Re-arrange variables and constants for a clean build.
-	(eicq-version): Increment.
-	(eicq-bridge-filename): Change default to /usr/local/bin/udp2tcp
-	(eicq-browse-homepage): Autoload it.
-
-	* eicq-user-install.sh (RCFILE): Change default to
-	/usr/local/lib/xemacs/site-packages/etc/eicq/world.
-
-	* eicq-report.el: Update doc strings.
-
-	* eicq-toolbar.el: Ditto.
-	(eicq-icon-directory): Change default to
-	/usr/local/lib/xemacs/site-packages/etc/eicq/
-
-	* infohack: New file.
-
-	* README: Update URL.
-
-	* INSTALL: Updated to reflect not being an XEmacs Package.
-
-	* Makefile: Complete re-write to use standard 'make', 'make install'.
-
-2001-03-02  Steve Youngs  <youngs@xemacs.org>
-
-	* Makefile: Re-shuffle the order of the variables so everything
-	gets installed properly.  This supercedes the change I made earlier.
-
-	* INSTALL: Update.
-
-	* NEWS: Ditto.
-
-	* TODO: Ditto.
-
-	* Makefile (ELCS): Add eicq-report.elc.
-	(include ../../XEmacs.rules): Move to below other variables so
-	everything gets installed properly.
-
-	* eicq-toolbar.el: Add require 'eicq.
-
-2001-03-01  Steve Youngs  <youngs@xemacs.org>
-
-	* Makefile (REQUIRES): Add eicq, gnus.
-
-	* eicq.el (eicq-blurb): New
-	(eval-when-compile): Remove require 'eicq-report.
-
-	* udp2tcp.cc (main): Update URL.
-
-2001-02-28  Ben Wing  <ben@xemacs.org>
-
-	* udp2tcp.cc (main): Conditionalize change to third arg to accept
-	on __CYGWIN__, so that all other systems keep size_t -- simply
-	changing the arg makes this not compile under Linux.
-
-2001-02-24  Ben Wing  <ben@xemacs.org>
-
-	* Makefile (STRIP):
-	* Makefile (EXTRA_SOURCES):
-	* Makefile (EXTRA_OBJS):
-	Fix udp2tcp compilation to work under MS Windows.
-	
-	* udp2tcp.cc (main):
-	Emergency fixes so it compiles. (change bzero to memset; fix type
-	of third arg to accept)
-
-2001-03-01  Steve Youngs  <youngs@xemacs.org>
-
-	* eicq.el (eicq-main-menu): Capitalise entries.
-	(eicq-log-menu): Ditto.
-
-2001-02-21  Steve Youngs  <youngs@xemacs.org>
-
-	* eicq.el: Update all doc strings.
-	(eicq-email-author): Move to eicq-report.el
-
-	* eicq-report.el: New file.
-
-2001-01-25  Steve Youngs  <youngs@xemacs.org>
-
-	* version 0.2.8 released - XEmacs package 1.03
-
-	* eicq.el (eicq-buddy-view): Remove :set 'eicq-buddy-view-set.
-	(eicq-version): Increment.
-
-	* eicq.texi (VERSION): Ditto.
-
-2000-11-27  Steve Youngs  <youngs@xemacs.org>
-
-	* Makefile (CFLAGS): Add -static so people that use a different
-	compiler to me wont have problems.
-
-2000-11-14  Steve Youngs  <youngs@xemacs.org>
-
-	* eicq.el: Doc fix.
-
-2000-10-23  Steve Youngs  <youngs@xemacs.org>
-
-	* version 0.2.7 released - XEmacs package 1.02
-
-	* *: Update my email address.
-
-2000-10-05  Martin Buchholz  <martin@xemacs.org>
-
-	* *: Mega typo fix.
-
-2000-08-22  Steve Youngs  <youngs@xemacs.org>
-
-	* Makefile (EXTRA_OBJS): New variable.
-
-2000-08-16  Steve Youngs  <youngs@xemacs.org>
-
-	* version 0.2.6 released - XEmacs package 1.01
-
-	* etc/world: added info about adding your own UIN
-
-	* INSTALL: ditto
-
-	* INSTALL: fixed typo
-
-2000-08-15  Steve Youngs  <youngs@xemacs.org>
-
-	* verion 0.2.5 released - XEmacs package 1.00
-
-	* package-info-in: changed description
-
-2000-07-18  Steve Youngs  <youngs@xemacs.org>
-
-	* eicq.texi: new file
-
-	* INSTALL: total re-write for XEmacs packages
-
-	* package-info.in: new file
-
-	* eicq-toolbar.el: updated license
-
-	* eicq.el: updated license
-
-	* Makefile: total re-write for XEmacs packages
-
-2000-06-26  Steve Youngs  <youngs@xemacs.org>
-
-	* README: moved install stuff to INSTALL
-
-	* INSTALL: new file
-
-	* world: my UIN was wrong :-(  fixed
-
-2000-06-07  Steve Youngs  <youngs@xemacs.org>
-
-	* version 0.2.4 released
-
-	* README: updated install instructions
-
-2000-06-06  Steve Youngs  <youngs@xemacs.org>
-
-	* eicq.el (eicq-buddy-mode-hook): add-hook 
-	eicq-install-buddy-toolbar
-	(eicq-log-mode-hook): add-hook eicq-install-log-toolbar
-	(eicq-email-author): change address
-
-	* Makefile: updated for a more "system-wide" install
-
-	* eicq-user-install.sh: New file
-
-	* eicq-toolbar.el: New file
-
-2000-06-05  Steve Youngs  <youngs@xemacs.org>
-
-	* eicq.el (eicq-do-message-helper): added new sounds
-	(eicq-do-message-helper): pager now decodes message
-	(eicq-auth-sound): New variable
-	(eicq-emailx-sound): New variable
-	(eicq-pager-sound): New variable
-	(eicq-global-map-set): new key bindings added to eicq-buddy-map 
-	and eicq-log-map 
-
-2000-06-01  Steve Youngs  <youngs@xemacs.org>
-
-	* eicq.el (eicq-main-menu): "Update Meta Info" pointed to
-	the wrong place.  Now points to eicq-update-meta-info
-
-2000-05-30  Steve Youngs  <youngs@xemacs.org>
-
-	* version 0.2.3 released
-
-2000-05-13  Steve Youngs  <youngs@xemacs.org>
-
-	* eicq.el
-	(eicq-sound): New customization group
-	(eicq-sound-directory): New variable
-	(eicq-message-sound): New variable
-	(eicq-chat-sound): New variable
-	(eicq-url-sound): New variable
-	(eicq-buddy-sound): New variable
-
-1999-08-12  Stephen Tse  <stephent@sfu.ca>
-
-	* version 0.2.2 released
-
-	* eicq.el
-	(eicq-world-update): extent for alias (from Erik)
-	(eicq-log-buddy-url): new function, extent for url (from Erik)	
-	(eicq-url-map): new variable
-	(eicq-alias-map): new variable
-	(eicq-send-message-via-mouse): new function
-	(eicq-send-message-alias-here-via-mouse): removed
-	(world-mode): new mode and world-* helper
-	(world-find): new function
-	(world-sort): new function
-	(eicq-change-user): new function
-	(eicq-buddy-view-connected): update eicq-buddy-view
-	(eicq-status-bin): zero-padded
-	(eicq-bridge-buffer): store buffer id instead of name
-	(eicq-hide-window): new function
-	(eicq-email-author): carbon-copy to mailing list
-
-	* world: add sample records	
-
-1999-07-10  Stephen Tse  <stephent@sfu.ca>
-
-	* version 0.2.1 released.
-
-	* eicq.el
- 	(eicq-do-kicked-out): remove relogin
-	(eicq-log-around): fixed to include first line
-	(eicq-do-message-helper): display authorization message
-	(eicq-bridge-mode): fixed kill-buffer-query-functions
-
-1999-06-29  Stephen Tse  <stephent@sfu.ca>
-
-	* version 0.2.0 released.
-	- ICQ version 5 protocol
-	- outgoing delay queue and resent queue
-	- meta user info query and update
-
-	* eicq.el
-	(eicq-log-mark-*): mark all log in a region
-	(eicq-keep-alive-stop): use start-itimer
-	(eicq-pack-contact-list): use smaller packet
-	(eicq-do-message-helper): receive contact list transfer
-	(eicq-register-new-user): new function
-	(eicq-do-info-ext): fixed age bug
-	(eicq-world-update): RC file not closed if current or modified
-	(eicq-auto-away-timeout-set): added auto-na
-	(eicq-bin-alias): optional from
-	(eicq-alias-around): cleaned up
-	(eicq-log-around): new function
-	(eicq-send-message): encode only outgoing part
-	(eicq-forward-message-around): new function
-	(eicq-change-status): allow only valid statues
-	(eicq-logout): clear buddy buffer when offline
-	(eicq-change-status): change only if different
-	(eicq-valid-packet-p): integrated into eicq-do
-	(eicq-ack-alist): removed
-	(eicq-ack): integrated into eicq-do
-	(eicq-pack-login): fixed initial status
-	(eicq-relogin): fixed relogin initial status
-	(eicq-query-info): skip nil local info
-	
-	- more debugging and profiling counters
-	eicq-dropped-packet-counter
-	eicq-resend-packet-counter
-	eicq-auto-relogin-counter
-
-	* README: split into readme.developer
-	* README.developer: new
-	* udp2tcp.cc: protocol version 5
-
-1999-06-16  Stephen Tse  <stephent@sfu.ca>
-
-	* version 0.1.3 released.
-
-	* eicq.el
-	(eicq-spliter): new function
-	(eicq-send-message): send long messages
-	(eicq-do-info): fixed authorization check
-	(eicq-pack-update-info): new function
-	(eicq-do-search-end): new function
-	(eicq-auto-na-timeout-set): new function
-	(eicq-current-seq-num): follow micq, start from 0 instead of 1
-	(eicq-do-kicked-out): graceful relogin
-	(eicq-login): login only when offline
-	(eicq-buddy-getf): new function
-	(eicq-buddy-putf): new function
-	(eicq-int-byte): new function
-	(eicq-network-separator): eicq-trimmed-packet
-	(eicq-pack-contact-list): fixed random uin
-	(eicq-network-filter): fixed bug in checking validity of packets
-	(eicq-do-message-hook): new variable
-	(eicq-do-status-update-hook): new variable
-	(eicq-hex-bin): downcase uppercase
-	(eicq-process-alias-input): new function
-
-	: select
-	(eicq-group-select-aliases)
-	(eicq-select-alias-around)
-	(eicq-buddy-select-all-in-view)
-	(eicq-buddy-select-all-in-view-by-status)
-	(eicq-buddy-select-all-in-view-by-regexp)
-	(eicq-buddy-selected-in-view)
-	(eicq-select-alias-here)
-
-	: use length prefix instead of delimiting magic string
-	- (eicq-redo-hex)
-	- (eicq-network-filter)
-	- (eicq-network-separator)
-	- (eicq-send)
-	- (eicq-magic-string)
-
-	* README
-	: updated for new resource file
-	: fixed wrong assumption about eicq-pack-contact-list
-
-	* udp2tcp.cc (debug_socket):
-	: use length prefix instead of delimiting magic string
-	: remove usleep	
-
-1999-06-01  Stephen Tse  <stephent@sfu.ca>
-	
-	* version 0.1.2 released.
-
-	* eicq.el:
-	- add `encode/decode-coding-string'
-
-1999-05-22  Stephen Tse  <stephent@sfu.ca>
-
-	* eicq.el: 
-	(eicq-send-contact-list): make interactive
-	(eicq-main-menu): add "Resend contact list"
-
-1999-05-18  Stephen Tse  <stephent@sfu.ca>
-
-	* Makefile: brand new from Erik Arneson <erik@mind.net>	
-
-	* README:
-	- change installation steps for new Makefile
-	- mention mailing list and `eicq-log-new-file' in tips
-
-	* eicq.el: merge patches from Erik Arneson <erik@mind.net>
-	- add confirmation for sending blank message/url
-	- `eicq-send-message-alias-here-via-mouse'
-	- `browse-url-at-point' and other key bindings
-
-	* eicq.el (eicq-message-types): one byte instead of two
-
-1999-05-12  Stephen Tse  <stephent@sfu.ca>
-
-	* version 0.1.1 released.
-
-1999-05-12  Stephen Tse  <stephent@sfu.ca>
-
-	* version 0.1 released.
-	

INSTALL

-
-========================================================================
-As of the latest version, I develop and test Eicq _only_ on my system,
-XEmacs 21.2.x on GNU/Linux. I use some XEmacs 20 specific codes and thus
-Eicq will not run in other versions of Emacs without modifications. Feel
-free to test and port it in other platforms, and send me the patch.
-========================================================================
-
-This installation is definitely a 'no-brainer'
-
-1) Check the Makefile, and edit anything as required.
-2) 'make'
-3) become 'root' and then 'make install'
-
-Hold it, you're not finished yet...
-
-Add the following to your ~/.emacs 
----------- cut ----------
-
-(require 'eicq)
-(require 'eicq-toolbar)
-(setq eicq-user-alias "me")
-(eicq-world-update)
-
----------- cut ----------
-
-As the user that will be using Eicq, run...
-
-eicq-user-install.sh
-
-That will set up the needed stuff in your home directory.
-
-Adding your own UIN:
--------------------
-~/.eicq/world is the file that stores not only the UIN's of your
-friends but also your own UIN.
-
-Just edit ~/.eicq/world and change the UIN beside 'me' to reflect your
-own UIN.
-
-Of course you can change the alias ('me') of your own UIN to be whatever
-you want.  But you'll have to change the (setq eicq-user-alias "...") line
-in your ~/.emacs to match.
-
-
-Ok, now you're done.
-
-Fire up XEmacs, run M-x eicq-login and M-x eicq-show-window. 
-There you go! Use XEmacs eicq menu to send messages,
-authorize, customize... For new XEmacs users, you can press
-C-h t for a tutorial on XEmacs. Don't hesitate to message me
-a success report or mail me your screenshots!

Makefile

-# Makefile for eicq code
-
-# This file is part of XEmacs.
-
-# XEmacs is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; either version 2, or (at your option) any
-# later version.
-
-# XEmacs is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with XEmacs; see the file COPYING.  If not, write to
-# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
-
-VERSION = 1.05
-AUTHOR_VERSION = 0.2.14
-MAINTAINER = Steve Youngs <youngs@xemacs.org>
-PACKAGE = eicq
-PKG_TYPE = regular
-REQUIRES = xemacs-base mail-lib eicq gnus fsf-compat cookie
-CATEGORY = standard
-
-ELCS = eicq.elc eicq-toolbar.elc eicq-report.elc
-
-DATA_FILES = $(wildcard etc/*.xpm) etc/world
-DATA_DEST = $(PACKAGE)
-
-INFO_FILES = $(PACKAGE).info
-HTML_FILES = $(PACKAGE)*.html
-HTML_DEP = $(PACKAGE).html
-TEXI_FILES = $(PACKAGE).texi
-MANUALS = $(PACKAGE)
-
-CC = g++
-CFLAGS = -O2 -Wall -static
-STRIP = /usr/bin/strip
-
-USERSH = eicq-user-install.sh
-BIN_BASE = udp2tcp
-LIBSRC_FILES = $(BIN) $(USERSH)
-
-include ../../XEmacs.rules
-
-ifeq ($(XEMACS_NATIVE_NT),t)
-BIN = $(BIN_BASE).exe
-else
-BIN = $(BIN_BASE)
-endif
-
-EXTRA_SOURCES = Makefile.upstream README NEWS INSTALL TODO $(BIN_BASE).cc
-
-EXTRA_OBJS = $(BIN)
-
-GENERATED += custom-load.elc
-
-
-all:: $(BIN) $(ELCS) auto-autoloads.elc custom-load.elc texinfo
-
-$(BIN): $(BIN_BASE).cc
-	${CC} -o $(BIN) $(BIN_BASE).cc ${CFLAGS}
-	${STRIP} $(BIN)
-
-texinfo: $(TEXI_FILES)
-	$(XEMACS) -vanilla -batch -insert eicq.texi $(FORMAT_INFO_USING_XEMACS_ARGS)
-
-srckit: srckit-std
-
-binkit: binkit-common
-
-

Makefile.upstream

-## Makefile for Eicq   -*-Makefile-*-
-
-## Copyright (C) 2001 Steve Youngs
-
-
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 2 of the License, or
-## (at your option) any later version.
-
-## This program is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-## GNU General Public License for more details.
-
-## You should have received a copy of the GNU General Public License
-## along with this program; if not, write to the Free Software
-## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-
-PACKAGE = eicq
-
-# csh... yell no, we won't go!
-SHELL = /bin/sh
-
-# Everything hangs off this.  
-PREFIX = /usr/local
-
-# Where the lisp files go.
-LISP_DIR = $(PREFIX)/lib/xemacs/site-packages/lisp/$(PACKAGE)
-
-# Where the toolbar images go.
-DATA_DIR = $(PREFIX)/lib/xemacs/site-packages/etc/$(PACKAGE)
-
-# Where the binary and user install script go.
-BIN_DIR = $(PREFIX)/bin
-
-# Where the info files go.
-INFO_DIR = $(PREFIX)/lib/xemacs/site-packages/info
-
-# Programs and their flags.
-EMACS = xemacs
-EMACS_FLAGS = -batch
-CC = g++
-CFLAGS = -O2 -Wall
-INSTALL = ginstall -o 0 -g 0
-INSTALL_INFO = install-info
-INSTALL_INFO_FLAGS = --info-dir=/usr/info \
-	--info-file=$(INFO_DIR)/$(PACKAGE).info
-
-############################################################################
-##                No User Configurable Items Below Here                   ##
-############################################################################
-
-BIN = udp2tcp
-USERSH = eicq-user-install.sh
-OBJECTS = eicq.elc eicq-toolbar.elc eicq-report.elc 
-SOURCES = eicq.el eicq-toolbar.el eicq-report.el 
-EXTRA_SRC = ChangeLog INSTALL NEWS README TODO
-EXTRA_OBJ = $(wildcard ./auto-autoloads.el*) $(wildcard ./custom-load.el*)
-DATA_FILES = $(wildcard ./etc/$(PACKAGE)/*.xpm) ./etc/$(PACKAGE)/world
-TEXI_FILES = $(PACKAGE).texi
-INFO_FILES = $(wildcard ./$(PACKAGE).info*)
-
-EICQ_INFO_COMPILE = ./infohack.el 
-PRELOADS = -eval \("push default-directory load-path"\)
-AUTO_PRELOADS = -eval \("setq autoload-package-name \"$(PACKAGE)\""\)
-
-.SUFFIXES:
-.SUFFIXES: .info .texi .elc .el
-
-all:: bin autoloads $(OBJECTS) customloads texinfo
-
-bin: $(BIN).cc
-	$(CC) $(CFLAGS) -o $(BIN) $(BIN).cc
-
-autoloads: auto-autoloads.el
-
-customloads: custom-load.el
-
-.el.elc:
-	$(EMACS) $(EMACS_FLAGS) $(PRELOADS) -f batch-byte-compile $<
-
-texinfo: $(TEXI_FILES)
-	$(EMACS) $(EMACS_FLAGS) -l $(EICQ_INFO_COMPILE) -f batch-makeinfo $<
-
-auto-autoloads.el : $(SOURCES)
-	$(EMACS) $(EMACS_FLAGS) $(AUTO_PRELOADS) -f batch-update-directory ./
-	$(EMACS) $(EMACS_FLAGS) -f batch-byte-compile ./auto-autoloads.el
-
-custom-load.el : $(SOURCES)
-	$(EMACS) $(EMACS_FLAGS) -f Custom-make-dependencies ./
-	$(EMACS) $(EMACS_FLAGS) -f batch-byte-compile ./custom-load.el
-
-install: all
-	$(INSTALL) -d $(BIN_DIR) $(DATA_DIR) $(INFO_DIR) $(LISP_DIR)
-	$(INSTALL) -s -m 755 $(BIN) $(BIN_DIR)
-	$(INSTALL) -m 755 $(USERSH) $(BIN_DIR)
-	$(INSTALL) -m 644 $(DATA_FILES) $(DATA_DIR)
-	$(INSTALL) -m 644 $(INFO_FILES) $(INFO_DIR)
-	$(INSTALL) -m 644 $(SOURCES) $(EXTRA_SRC) $(OBJECTS) $(EXTRA_OBJ) \
-		$(LISP_DIR)
-	$(INSTALL_INFO) $(INSTALL_INFO_FLAGS)
-
-
-upgrade: uninstall install
-
-uninstall:: 
-	rm -rf $(DATA_DIR) $(LISP_DIR)
-	rm -f $(INFO_DIR)/$(INFO_FILES) $(BIN_DIR)/$(BIN) $(BIN_DIR)/$(USERSH)
-	$(INSTALL_INFO) --remove $(INSTALL_INFO_FLAGS)
-
-clean::
-	rm -f $(OBJECTS) $(BIN) $(INFO_FILES) \
-		auto-autoloads.el* custom-load.el*
-
-distclean: clean
-	rm -f core *~
-
-# Targets for Steve only.
-superupgrade: distclean upgrade
-	chown -R steve.xemacs /usr/local/lib/xemacs/site-packages/*
-	chown -R steve.xemacs ./*

NEWS

--*- Outline -*-
-
-* 0.2.13 to 0.2.14
-
-- Rewrote the bug report code.  
-	It now reports any user variable that has be changed 
-	from the default.
-- eicq-version now accepts arg.
-	So C-u M-x eicq-version RET will insert the version string
-	in the current buffer at point.
-- Added type boolean to all the 'on/off' defcustoms.
-- Removed some obsolete v2 stuff.
-	
-
-* 0.2.12 to 0.2.13
-
-- The number of tools on toolbar reduced.
-- Statuses moved from buddy buffer to their own read-only buffer.
-- Smilies 
-- URL/email highlighting in normal messages.
-- Can turn sounds off/on.
-
-* 0.2.11 to 0.2.12
-
-- Change status via widgets in the buddy buffer.
-- In log buffer:
-	'n' move to next unread message
-	'p' move to previous unread message
-	'N' move to next message (whether read or unread)
-	'P' move to previous message (whether read or unread)
-	Outgoing messages are automatically marked as read.
-- Auto away/na timeouts now work correctly.
-- Auto online after a auto away/na.
-- Use the same toolbar in both the log and buddy buffers.
-- M-x eicq-login automatically brings up the buddy and log buffers.
-- The toolbar button "Disconnect":
-	Does a 'eicq-logout'
-	Kills the Eicq buffers.
-
-* 0.2.10 to 0.2.11
-
-- 'eicq-report-bug' now working.
-
-* 0.2.9 to 0.2.10
-
-- No longer distributed as an XEmacs package (due to compatibility issues)
-- Re-arrange variables so that everything compiles cleanly with no errors.
-- Uses XEmacs to create the info documentation.
-
-* 0.2.8 to 0.2.9
-
-- New function 'eicq-report-bug'
-- 'eicq-email-author' uses Gnus if available.
-
-* 0.2.5 to 0.2.8
-
-- Mainly just doc fixes.
-
-* 0.2.4 to 0.2.5
-
-- entered into the mainstream XEmacs packages
-
-* 0.2.3 to 0.2.4
-
-- clickety click toolbars
-- new locations for files (a system wide approach)
-- more sound
-
-* 0.2.2 to 0.2.3
-
-- sound added
-
-* 0.2.1 to 0.2.2
-
-- highlight alias and url (from Erik)
-- world-mode
-- eicq-change-user, eicq-hide-window
-
-* 0.2.0 to 0.2.1
-
-- remove relogin, more stable
-
-* 0.1.3 to 0.2.0
-
-- ICQ version 5 protocol
-- meta user info query and update
-- register new user, change password
-- receive contact list transfer
-- forward message
-- more stable (less kicked out)
-
-* 0.1.2 to 0.1.3
-
-- restructure of eicq-world
-- use resource file instead of lisp structure
-- new files in package: NEWS and world (resource file)
-- alias selection as temporary group
-- fixed random popping up uin
-- safer udp2tcp: use length prefix instead of delimiting magic string
-- eicq-do-status-update-hook and eicq-do-message-hook for customization
-- split and send long messages
-- search users, update basic info and extended info
-- relogin quiently after being kicked out
-- auto-na
-
-

README

--*- outline -*-
-
-* Introduction
-
-http://eicq.sourceforge.net/INSTALL (version 0.2.14)
-
-This file is best viewed under XEmacs. Press C-c C-o now to
-see the outline of topics. You can use XEmacs menu to
-navigate and hide/show different topics. (C-c means Control
-and c; M-x means Meta and x.)
-
-I publish this package in the hope of making more people
-appreciate XEmacs and Lisp.
-
-You can contact me for anything at <youngs@xemacs.org>.
-
-* Feature list
-
-eicq uses version 5 protocol and it can:
-
-- send message/url
-- authorize, search, query and update meta user info
-- receive contact list transfer
-- register new user, change password
-
-eicq cannot yet transfer files, chat, or anything that need
-direct TCP connection. Of course, with XEmacs behind you'll
-also get:
-
-- interactive customization through XEmacs Custom widgets
-- key binding, "scripting" in elisp
-  (the language eicq is written in)
-- send/receive multi-lingual languages (with XEmacs MULE)
-- a way of life
-
-* Installation
-See the file 'INSTALL' in this directory.
-
-There are a few mailing lists. See <http://eicq.sourceforge.net/#maillist>
-
-Have fun!
-
-* Submitting Patches
-If you've got a patch for a bug fix or some wiz-bang new feature mail
-them to <eicq-devel@lists.sourceforge.net>.  The Eicq developers will
-review your contribution and either accept it and add it to the Eicq
-code, or reject it.  Whether accepted or rejected, you'll hear back
-from us.
-
-Two things, one an insistance, and one a preference...
-
-	- I insist that every patch has a ChangeLog entry.  If you
-	  think your change isn't worth doing a ChangeLog entry for,
-	  do one anyway.  Leave it to me to decide whether or not it's
-	  worth it.
-
-	- I prefer unified diffs. (diff -u oldfile newfile > patch.diff). 
-	  I simply find unified diffs much easier to review.
-
-* Faq and tips
-
-** password
-
-How to save password?
-
-M-x customize-variable RET eicq-user-password
-Or simply, (setq eicq-user-password "mypassword") in .emacs
-
-** "M" vs "m" (send-message)
-
-Commands in capital letters prompt you for aliases/uin while
-those in small letters search for aliases/uin around the
-cursor in eicq buffers, and perform actions on them. For
-example, "m" inside an incoming message acts like a reply.
-
-** alias vs uin
-
-"SteveY" is my alias while "34307457" is my uin. In all prompts
-of entering an icq person, you can enter either an alias or
-an uin, although only alias completing read is provided. 
-(Press TAB when entering an alias!)
-
-** message/alias history
-
-Use M-p/M-n or UP/DOWN to navigate history in prompts of
-entering alias or messages.
-Use M-r/M-s to search history.
-
-** log file size
-
-Watch out for monster eicq-log buffer size! Use M-x
-eicq-log-new-file occasionally.
-
-** hooks
-
-If you want to customize anything fancy:
-
-`eicq-do-message-hook'
-`eicq-do-status-update-hook'
-
-Interactive with eliza, forward messages to cell phone,
-launch a bomb, or whatever you like.
-
-** newline
-
-How to enter new lines in minibuffer? Type "Hello",
-control-Q 12 "world", to get:
-
-Hello
-world
-
-** ~/.emacs tips
-
-(resize-minibuffer-mode 1)
-
-

TODO

--*- outline -*-
-
-* Last Updated: Mar 2, 2001
-
-Here's a list of things I may or may not get around to putting
-into Eicq.
-
-This list is not in order of importance or any kind of order at all.
-And just because something is on the list doesn't mean that it will
-become part of Eicq.
-
-Feel free to do any of these things and send a patch to
-<eicq-devel@lists.sourceforge.net>
-
-* Todo list
-
-** figure out why sometime being kicked out after long inactivity
-
-** builtin udp support in XEmacs
-
-	Implement Eicq totally in Lisp.
-
-** complete country codes
-
-** set/retrieve away/occ message in server?
-
-** visible/invisible list
-
-** direct TCP, file transfer/chat
-
-** invisibility probing (validate published ip?)
-
-** send other special types of messages
-
-** pop up/permanent window for entering long message
-
-** multi-user login
-
-	eicq can successfully login server using different accounts,
-	and can then receive messages from both accounts.
-
-	However, after some brief attempts, eicq cannot send
-	messages with the first account after the second account is
-	logged in. ICQ server perhaps checks ip address as well to
-	avoid spoofing. licq seems to be able to achieve that. Is
-	spoofing only allowed in TCP mode?
-
-** implement ack'ing in udp2tcp
-
-	sometimes loading gnus/w3 makes single-threaded emacs crawl
-	and get kicked out of icq server because of failures of
-	ack'ing packets
-
-** cute glyph for different statuses
-
-** eliza (doctor) minor mode, auto-chatting/messaging
-
-** store offline messages and send them when online
-
-** security problem of `eicq-user-password' in emacs
-
-** openssl support
-
-** port udp2tcp to other platforms
-
-	not necessary once Eicq is totally Lisp.
-

eicq-report.el

-;;; eicq-report.el --- Generate a bug report   -*-Emacs-Lisp-*-
-
-;; Copyright (C) 2001 Steve Youngs
-
-;; RCS: $Id$
-;; Author: Steve Youngs <youngs@xemacs.org>
-;; Maintainer: Steve Youngs <youngs@xemacs.org>
-;; Last-Modified: <2001-6-6 00:29:58 (steve)>
-;; Keywords: bug-report
-
-;; Eicq is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2 of the License, or
-;; (at your option) any later version.
-
-;; Eicq is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program; if not, write to the Free Software
-;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-
-
-;;; Commentary:
-;; To submit a bug report use: M-x eicq-report-bug
-;; To send general comments/questions use: M-x eicq-email-author
-
-;;; Code:
-(require 'eicq)
-(require 'gnus)
-
-;; To keep the byte-compiler from spewing out warnings.
-(defvar after-sep-pos)
-(defvar final-resting-place)
-
-;;; Variables
-
-(defconst eicq-report-salutations
-  ["Dear bug team:"
-   "Ciao bug team:"
-   "Salut bug team:"
-   "Guten Tag bug team:"
-   "To whom it may concern:"
-   "Fellow Eicq'ers:"
-   "Yo bug team:"
-   "G'day bug team:"
-   "Greetings Earthlings:"]
-  "A list of salutations used for `eicq-report-bug'.")
-
-(defvar eicq-bug-address
-  "Eicq Bugs <eicq-bugs@lists.sourceforge.net>"
-  "The address used for submitting bug reports.")
-
-(defvar eicq-report-blurb nil)
-
-;;; Functions
-
-(defun eicq-report-pre-hook ()
-  "Pre hook run by report-submit-bug-report."
-  (message-goto-subject)
-  (insert
-   (format "Eicq v%s bug: " eicq-version))
-  (if eicq-report-blurb
-      (progn
-	(mail-text)
-	(insert "\n" eicq-report-blurb "\n"))))
-
-(defun eicq-report-post-hook ()
-  "Post hook run by report-submit-bug-report."
-  (save-excursion
-    (message-goto-subject)
-    (let ((subj (read-string "Subject header: ")))
-      (if (string-equal subj "")
-	  (subst-char-in-region
-	   (point)
-	   (progn
-	     (insert
-	      (if (or (fboundp 'yow) (load "yow" t t)) (yow) ""))
-	     (point))
-	   ?\n ?\ )
-	(insert subj)))))
-
-;; Stolen from Gnus.
-(defun eicq-report-debug ()
-  "Go through the Eicq source files and report what variables have been changed.
-The source file has to be in the load path."
-  (interactive)
-  (let ((files '("eicq.el" "eicq-toolbar.el"))
-	(point (point))
-	file expr olist sym)
-    (message "Please wait while we snoop your variables...")
-    (sit-for 0)
-    ;; Go through all the files looking for non-default values for variables.
-    (save-excursion
-      (set-buffer (get-buffer-create " *eicq bug info*"))
-      (while files
-	(erase-buffer)
-	(when (and (setq file (locate-library (pop files)))
-		   (file-exists-p file))
-	  (insert-file-contents file)
-	  (goto-char (point-min))
-	  (if (not (re-search-forward "^;;* *Internal variables" nil t))
-	      (message "Malformed sources in file %s" file)
-	    (narrow-to-region (point-min) (point))
-	    (goto-char (point-min))
-	    (while (setq expr (ignore-errors (read (current-buffer))))
-	      (ignore-errors
-		(and (or (eq (car expr) 'defvar)
-			 (eq (car expr) 'defcustom))
-		     (stringp (nth 3 expr))
-		     (or (not (boundp (nth 1 expr)))
-			 (not (equal (eval (nth 2 expr))
-				     (symbol-value (nth 1 expr)))))
-		     (push (nth 1 expr) olist)))))))
-      (kill-buffer (current-buffer)))
-    (when (setq olist (nreverse olist))
-      (insert "\n"))
-    (while olist
-      (if (boundp (car olist))
-	  (condition-case ()
-	      (pp `(setq ,(car olist)
-			 ,(if (or (consp (setq sym (symbol-value (car olist))))
-				  (and (symbolp sym)
-				       (not (or (eq sym nil)
-						(eq sym t)))))
-			      (list 'quote (symbol-value (car olist)))
-			    (symbol-value (car olist))))
-		  (current-buffer))
-	    (error
-	     (format "(setq %s 'whatever)\n" (car olist))))
-	(insert ";; (makeunbound '" (symbol-name (car olist)) ")\n"))
-      (setq olist (cdr olist)))
-    (insert "\n\n\n")
-    ;; Remove any control chars - they seem to cause trouble for some
-    ;; mailers.  (Byte-compiled output from the stuff above.)
-    (goto-char point)
-    (while (re-search-forward "[\000-\010\013-\037\200-\237]" nil t)
-      (replace-match (format "\\%03o" (string-to-char (match-string 0)))
-		     t t))))
-
-(defun eicq-prepare-report ()
-  "Grabs the variables, features to include in bug report.
-Then put it all into a mail buffer, nicely formatted."
-  (message-goto-to)
-  (insert eicq-bug-address)
-  (message-goto-body)
-  (forward-line 1)
-  (setq after-sep-pos (point))
-  (setq final-resting-place (point-marker))
-  (insert "\n\n"
-	  (emacs-version) "\n")
-  (eicq-version 1)
-  (insert "\n\nCurrent State:\n==============")
-  (eicq-report-debug)
-  (insert
-   (format "\n\nFeatures:\n\t%s" (symbol-value 'features)))
-  (message "Formatting output so the bug team can read it.  Please wait...")
-  (fill-paragraph t)
-  (insert "\n\n")
-  (eicq-report-pre-hook)
-  (eicq-report-post-hook)
-  (mail-text)
-  (insert
-   (aref eicq-report-salutations
-	 (% (+ (% (random) 1000) 1000)
-	    (length eicq-report-salutations))) "\n")
-  (goto-char final-resting-place)
-  (set-marker final-resting-place nil)
-  (message "Please enter your report.  Type C-c C-c to send, C-x k to abort."))
-
-;;;###autoload
-(defun eicq-report-bug (&optional blurb no-confirm)
-  "Submit a bug report for eicq.
-Optional argument BLURB is a string that adds a preamble to the bug report.
-Optional argument NO-CONFIRM if 't' will not ask for confirmation.
-
-If you have Gnus it will be used, otherwise the standard XEmacs mail
-command is used.
-
-Yes, it's all part of a secret plot to make more people use 
-the MUA of Gods.  Bwahahaha."
-  (interactive)
-  (if (or no-confirm
-	  (y-or-n-p "Do you want to submit a bug report on Eicq? "))
-      (progn
-	(setq eicq-report-blurb blurb)
-	(if (featurep 'gnus)
-	    (progn
-	      (unless (gnus-alive-p)
-		(gnus))
-	      (gnus-group-mail 1)
-	      (eicq-prepare-report))
-	  (mail)
-	  (eicq-prepare-report)))))
-
-;;; email-author code
-
-(defconst eicq-email-salutations
-  ["Dear Steve,"
-   "Ciao Steve,"
-   "Guten Tag Steve,"
-   "To whom it may concern:"
-   "Bonjour Steve,"
-   "Yo! Eicq Dude!"
-   "G'day Steve,"
-   "Hey Man,"
-   "Greetings Earthlings:"]
-  "A list of salutations used for `eicq-email-author'.")
-
-(defun eicq-prepare-email-author ()
-  "Prepare the mail buffer for `eicq-email-author'."
-  (message-goto-to)
-  (insert "Steve Youngs <youngs@xemacs.org>")
-  (message-goto-cc)
-  (insert "Eicq-Users <eicq-users@lists.sourceforge.net>")
-  (message-goto-subject)
-  (insert
-   (format "Eicq v%s: " eicq-version))
-  (let ((subj (read-string "Subject header: ")))
-    (if (string-equal subj "")
-	(subst-char-in-region
-	 (point)
-	 (progn
-	   (insert
-	    (if (or (fboundp 'yow) (load "yow" t t)) (yow) ""))
-	   (point))
-	 ?\n ?\ )
-      (insert subj)))
-  (message-goto-body)
-  (insert
-   ";; Bug reports, feature requests, patches, thank-you cards... are all welcome.")
-  (insert "\n;; Flammage is automagically > /dev/null.\n")
-  (insert ";; *** I don't need to read these 3 lines, please delete them. ***\n\n")
-  (insert
-   (aref eicq-email-salutations
-	 (% (+ (% (random) 1000) 1000)
-	    (length eicq-email-salutations))) "\n\n\n")
-  (forward-line -1))
-
-;;;###autoload
-(defun eicq-email-author ()
-  "Email comments or money to author.
-
-Uses Gnus if available, otherwise standard mail command."
-  (interactive)
-  (if (y-or-n-p "Do you want to send comments to the Eicq author? ")
-      (progn
-	(if (featurep 'gnus)
-	    (progn
-	      (unless (gnus-alive-p)
-		(gnus))
-	      (gnus-group-mail 1)
-	      (eicq-prepare-email-author))
-	  (mail)
-	  (eicq-prepare-email-author)))))
-
-(provide 'eicq-report)
-
-;;; eicq-report.el ends here
-
-
-;Local Variables:
-;time-stamp-start: "Last-Modified:[ 	]+\\\\?[\"<]+"
-;time-stamp-end: "\\\\?[\">]"
-;time-stamp-line-limit: 10
-;time-stamp-format: "%4y-%m-%d %02H:%02M:%02S (%u)"
-;End: 

eicq-toolbar.el

-;;; eicq-toolbar.el --- A toolbar for Eicq   -*-Emacs-Lisp-*-
-
-;; Copyright (C) 2000, 2001 Steve Youngs
-
-;; RCS: $Id$
-;; Author: Steve Youngs <youngs@xemacs.org>
-;; Maintainer: Steve Youngs <youngs@xemacs.org>
-;; Last-Modified: <2001-6-5 21:56:16 (steve)>
-;; Keywords: eicq, toolbar, comm
-
-;; Eicq is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by the
-;; Free Software Foundation; either version 2, or (at your option) any
-;; later version.
-
-;; Eicq is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-;; FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-;; for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with XEmacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-;; 
-;;            A toolbar for eicq.
-;;
-(require 'eicq)
-
-;;; Code:
-(defcustom eicq-icon-directory
-  "/usr/local/lib/xemacs/site-packages/etc/eicq/"
-  "*The directory where the icon files for Eicq are installed."
-  :group 'eicq-option
-  :type 'directory
-  :tag "Toolbar Directory")
-
-(defcustom eicq-use-toolbar (if (featurep 'toolbar)
-				'default-toolbar
-			      nil)
-  "*If nil, do not use a toolbar.
-If it is non-nil, it must be a toolbar.  The five valid values are
-`default-toolbar', `top-toolbar', `bottom-toolbar',
-`right-toolbar', and `left-toolbar'."
-  :type '(choice (const default-toolbar)
-		 (const top-toolbar) (const bottom-toolbar)
-		 (const left-toolbar) (const right-toolbar)
-		 (const :tag "no toolbar" nil))
-  :group 'eicq-option)
-
-;;; Internal variables
-
-(defvar eicq-password-icon
-  (toolbar-make-button-list
-   (expand-file-name "password.xpm" eicq-icon-directory))
-  "A password toolbar icon.")
-
-(defvar eicq-send-message-here-icon
-  (toolbar-make-button-list
-   (expand-file-name "send-message-here.xpm" eicq-icon-directory))
-  "A send message toolbar icon.")
-
-(defvar eicq-send-message-around-icon
-  (toolbar-make-button-list
-   (expand-file-name "send-message-around.xpm" eicq-icon-directory))
-  "A send message toolbar icon.")
-
-(defvar eicq-send-url-here-icon
-  (toolbar-make-button-list
-   (expand-file-name "url-here.xpm" eicq-icon-directory))
-  "A send URL toolbar icon.")
-
-(defvar eicq-send-url-around-icon
-  (toolbar-make-button-list
-   (expand-file-name "url-around.xpm" eicq-icon-directory))
-  "A send URL toolbar icon.")
-
-(defvar eicq-query-info-here-icon
-  (toolbar-make-button-list
-   (expand-file-name "query-here.xpm" eicq-icon-directory))
-  "A query info here toolbar icon.")
-
-(defvar eicq-query-info-around-icon
-  (toolbar-make-button-list
-   (expand-file-name "query-around.xpm" eicq-icon-directory))
-  "A query info here toolbar icon.")
-
-(defvar eicq-update-info-icon
-  (toolbar-make-button-list
-   (expand-file-name "update-info.xpm" eicq-icon-directory))
-  "A update info toolbar icon.")
-
-(defvar eicq-search-icon
-  (toolbar-make-button-list
-   (expand-file-name "search.xpm" eicq-icon-directory))
-  "A search toolbar icon.")
-
-(defvar eicq-authorize-here-icon
-  (toolbar-make-button-list
-   (expand-file-name "authorize-here.xpm" eicq-icon-directory))
-  "A authorize toolbar icon.")
-
-(defvar eicq-login-icon
-  (toolbar-make-button-list
-   (expand-file-name "login.xpm" eicq-icon-directory))
-  "A login toolbar icon.")
-
-(defvar eicq-logout-icon
-  (toolbar-make-button-list
-   (expand-file-name "logout.xpm" eicq-icon-directory))
-  "A logout toolbar icon.")
-
-(defvar eicq-disconnect-icon
-  (toolbar-make-button-list
-   (expand-file-name "disconnect.xpm" eicq-icon-directory))
-  "A disconnect toolbar icon.")
-
-(defvar eicq-new-log-icon
-  (toolbar-make-button-list
-   (expand-file-name "new-log.xpm" eicq-icon-directory))
-  "New log file toolbar icon.")
-
-;; Define the functions for the toolbar
-
-(defun eicq-toolbar-change-password (password)
-  "Change PASSWORD from the toolbar."
-  (interactive (list (read-passwd "Password: " 'confirm)))
-  (eicq-change-password password))
-
-(defun eicq-toolbar-send-message-here ()
-  "Send message from toolbar."
-  (interactive)
-  (eicq-send-message-alias-here))
-
-(defun eicq-toolbar-send-message-around ()
-  "Send message from toolbar."
-  (interactive)
-  (eicq-send-message))
-
-(defun eicq-toolbar-send-url-here ()
-  "Send URL from the toolbar."
-  (interactive)
-  (eicq-send-url-alias-here))
-
-(defun eicq-toolbar-send-url-around ()
-  "Send URL from the toolbar."
-  (interactive)
-  (eicq-send-url))
-
-(defun eicq-toolbar-query-info-here ()
-  "Query info from the toolbar."
-  (interactive)
-  (eicq-query-info-alias-here))
-
-(defun eicq-toolbar-query-info-around ()
-  "Query info from the toolbar."
-  (interactive)
-  (eicq-query-info))
-
-(defun eicq-toolbar-update-info ()
-  "Update meta info from the toolbar."
-  (interactive)
-  (eicq-update-meta-info))
-
-(defun eicq-toolbar-search (nick-name first-name last-name email)
-  "Search from the toolbar.
-Argument NICK-NAME is the ICQ name of the person you're searching for.
-Argument FIRST-NAME is the first name of the person you're searching for.
-Argument LAST-NAME is the last name of the person you are searching for.
-Argument EMAIL is the email address of the person you're searching for."
-  (interactive "sNick-name: \nsFirst-name: \nsLast-name: \nsEmail: \n")
-  (eicq-search nick-name first-name last-name email))
-
-(defun eicq-toolbar-authorize-here ()
-  "Authorize from the toolbar."
-  (interactive)
-  (eicq-authorize-alias-here))
-
-(defun eicq-toolbar-login ()
-  "Login from the toolbar."
-  (interactive)
-  (eicq-login))
-
-(defun eicq-toolbar-logout ()
-  "Logout from the toolbar."
-  (interactive)
-  (eicq-logout))
-
-(defun eicq-toolbar-disconnect ()
-  "Disconnect from the toolbar."
-  (interactive)
-  (eicq-logout)
-  (eicq-disconnect))
-
-(defun eicq-toolbar-new-log ()
-  "New log file from the toolbar."
-  (interactive)
-  (eicq-log-new-file))
-
-;; Now define the toolbar
-(defvar eicq-log-toolbar
-  '([eicq-password-icon
-     eicq-toolbar-change-password t "Change password"]
-    [eicq-send-message-here-icon
-     eicq-toolbar-send-message-here t "Send message here"]
-    [eicq-send-message-around-icon
-     eicq-toolbar-send-message-around t "Send message..."]
-    [eicq-send-url-here-icon
-     eicq-toolbar-send-url-here t "Send URL here"]
-    [eicq-send-url-around-icon
-     eicq-toolbar-send-url-around t "Send URL..."]
-    [eicq-query-info-here-icon
-     eicq-toolbar-query-info-here t "Query info here"]
-    [eicq-query-info-around-icon
-     eicq-toolbar-query-info-around t "Query info..."]
-    [eicq-search-icon
-     eicq-toolbar-search t "Search"]
-    [eicq-authorize-here-icon
-     eicq-toolbar-authorize-here t "Authorize here"]
-    [eicq-new-log-icon
-     eicq-toolbar-new-log t "New log file"]
-    [eicq-login-icon
-     eicq-toolbar-login t "Login"]
-    [eicq-logout-icon
-     eicq-toolbar-logout t "Logout"]
-    [eicq-disconnect-icon
-     eicq-toolbar-disconnect t "Disconnect"])
-  "A clickety click Eicq log buffer toolbar.")
-
-(defun eicq-install-buddy-toolbar ()
-  "Install the toolbar for `eicq-buddy-mode' in Eicq."
-  (and eicq-use-toolbar
-       (set-specifier (symbol-value eicq-use-toolbar)
-		      (cons
-		       (current-buffer) eicq-log-toolbar))))
-
-(defun eicq-install-log-toolbar ()
-  "Install the toolbar for `eicq-log-mode' in Eicq."
-  (and eicq-use-toolbar
-       (set-specifier (symbol-value eicq-use-toolbar)
-		      (cons
-		       (current-buffer) eicq-log-toolbar))))
-
-(provide 'eicq-toolbar)
-
-;;; eicq-toolbar.el ends here
-
-
-;Local Variables:
-;time-stamp-start: "Last-Modified:[ 	]+\\\\?[\"<]+"
-;time-stamp-end: "\\\\?[\">]"
-;time-stamp-line-limit: 10
-;time-stamp-format: "%4y-%m-%d %02H:%02M:%02S (%u)"
-;End: 

eicq-user-install.sh

-#! /bin/bash
-## eicq-user-install.sh   -*-Shell-script-*-
-## $Id$
-
-## Copyright (C) 2000, 2001 Steve Youngs
-
-
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 2 of the License, or
-## (at your option) any later version.
-
-## This program is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-## GNU General Public License for more details.
-
-## You should have received a copy of the GNU General Public License
-## along with this program; if not, write to the Free Software
-## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-
-#----------------------------------------------------------------
-# Commentary:
-#    Installs the necessary files in your home directory to run eicq
-#----------------------------------------------------------------
-
-# Variables and constants
-MKDIR=/bin/mkdir
-INSTALL=/usr/bin/install
-RCFILE=/usr/local/lib/xemacs/site-packages/etc/eicq/world
-RCDIR=${HOME}/.eicq
-
-# Code
-$MKDIR $RCDIR
-$INSTALL -m 600 $RCFILE $RCDIR
-
-echo "Don't forget to edit ${RCDIR}/world to your requirements"
-
-# eicq-user-install.sh ends here.

eicq.el

-;;; eicq.el --- ICQ client for Emacs
-
-;; Copyright (C) 1999 by Stephen Tse
-;; Copyright (C) 2000, 2001 Steve Youngs
-
-;; RCS: $Id$
-;; OriginalAuthor: Stephen Tse <stephent@sfu.ca>
-;; Maintainer: Steve Youngs <youngs@xemacs.org>
-;; Created: Aug 08, 1998
-;; Last-Modified: <2001-6-7 00:09:40 (steve)>
-;; Version: 0.2.14
-;; Homepage: http://eicq.sourceforge.net/
-;; Keywords: comm ICQ
-
-;; Eicq is free software; you can redistribute it and/or modify it
-;; under the terms of the GNU General Public License as published by the
-;; Free Software Foundation; either version 2, or (at your option) any
-;; later version.
-
-;; Eicq is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-;; FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-;; for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with XEmacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-
-;;; Commentary:
-;;
-;; Clone of Mirabilis ICQ communication client.
-;;
-;; Entry points:
-;;   eicq-login
-;;   eicq-show-window
-;;   eicq-customize
-;;
-;; See README & INSTALL which come with this package
-;;
-;; This project is done without the consent of Mirabilis.
-;;
-
-;;; Code:
-
-(require 'browse-url)
-(require 'outline)
-(require 'timezone)
-(require 'wid-edit)
-(require 'goto-addr)
-(require 'smiley)
-
-(defconst eicq-version "0.2.14"
-  "Version of eicq you are currently using.")
-
-;; Customize Groups.
-
-(defgroup eicq nil
-  "Mirabilis ICQ communication client."
-  :group 'comm)
-
-(defgroup eicq-info nil
-  "Essential account info."
-  :group 'eicq)
-
-(defgroup eicq-meta nil
-  "User info stored in ICQ server.
-Run `eicq-update-meta-info' after changing any of these variables."
-  :group 'eicq)
-
-(defgroup eicq-option nil
-  "System settings and general preferences."
-  :group 'eicq)
-
-(defgroup eicq-log nil
-  "Message logging preferences."
-  :group 'eicq)
-
-(defgroup eicq-buddy nil
-  "Contact list preferences."
-  :group 'eicq)
-
-(defgroup eicq-sound nil
-  "Sound preferences."
-  :group 'eicq)
-
-(defgroup eicq-interface nil
-  "Change the look and \"feel\"."
-  :group 'eicq)
-
-;; Customize.
-
-(defcustom eicq-user-meta-nickname "e-i-c-q"
-  "*Your nickname stored on the ICQ server.
-Run `eicq-update-meta-info' after modifying this variable.
-ICQ server refuses any string containing substring \"icq\"."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-firstname "XEmacs"
-  "*Your first name stored on the ICQ server.
-Run `eicq-update-meta-info' after modifying this variable.
-ICQ server refuses any string containing substring \"icq\"."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-lastname "Linux"
-  "*Your last name stored on the ICQ server.
-Run `eicq-update-meta-info' after modifying this variable.
-ICQ server refuses any string containing substring \"icq\"."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-primary-email "emacs@home.com"
-  "*Your primary email address stored on the ICQ server.
-Run `eicq-update-meta-info' after modifying this variable.
-ICQ server refuses any string containing substring \"icq\"."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-secondary-email "eicq@home.com"
-  "*Your secondary email address stored on the ICQ server.
-Run `eicq-update-meta-info' after modifying this variable."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-old-email "eicq@home.com"
-  "*Your old email address stored on the ICQ server.
-Run `eicq-update-meta-info' after modifying this variable."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-city nil
-  "*Your city stored on the ICQ server.
-Run `eicq-update-meta-info' after modifying this variable."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-state nil
-  "*Your state stored on the ICQ server.
-We're talking 'address' here, not online state.
-Run `eicq-update-meta-info' after modifying this variable."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-phone nil
-  "*Your phone number stored on the ICQ server.
-Do you really want to divulge this information?
-Run `eicq-update-meta-info' after modifying this variable."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-fax nil
-  "*Your fax number stored on the ICQ server.
-Do you really want to divulge this information?
-Run `eicq-update-meta-info' after modifying this variable."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-street nil
-  "*Your street name and number stored on the ICQ server.
-Run `eicq-update-meta-info' after modifying this variable."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-cell-phone nil
-  "*Your cell phone number stored on the ICQ server.
-Do you really want to divulge this information?
-Run `eicq-update-meta-info' after modifying this variable."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-zipcode nil
-  "*Your zip code/postal code stored on the ICQ server.
-Run `eicq-update-meta-info' after modifying this variable."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-country nil
-  "*Your country stored on the ICQ server.
-Run `eicq-update-meta-info' after modifying this variable."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-web-aware t
-  "*Set this to non-nil if you want your presence know on the web.
-Run `eicq-update-meta-info' after modifying this variable."
-  :type 'boolean
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-hide-ip nil
-  "*Set to non-nil if you want to hide your IP.
-Run `eicq-update-meta-info' after modifying this variable."
-  :type 'boolean
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-authorization t
-  "*Authorization needed to add you to others' contact lists..
-Run `eicq-update-meta-info' after modifying this variable."
-  :type 'boolean
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-about
-  "Give a man a new Emacs command,
-  and he can hack for a night;
-Teach a man to make new Emacs commands,
-  and he can hack for a life time."
-  "*User 'about' info stored on the ICQ server.
-Run `eicq-update-meta-info' after modifying this variable."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-homepage 
-  "http://eicq.sourceforge.net/"
-  "*User homepage stored on the ICQ server.
-Run `eicq-update-meta-info' after modifying this variable."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-age 65535
-  "*Your age stored on the ICQ server.
-Run `eicq-update-meta-info' after modifying this variable.
-65535 = not entered."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-sex 'not-entered
-  "*Your sex stored on the ICQ server.
-No, it's not an invitation.
-Run `eicq-update-meta-info' after modifying this variable."
-  :group 'eicq-meta
-  :type '(choice (item male) (item female)
-                 (item not-entered)))
-
-(defcustom eicq-user-meta-birth-year nil
-  "*Your birth year (YY) stored on the ICQ server.
-Run `eicq-update-meta-info' after modifying this variable."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-birth-month nil
-  "*Your birth month (MM) stored on the ICQ server.
-Run `eicq-update-meta-info' after modifying this variable."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-birth-day nil
-  "*Your birth day (DD) stored on the ICQ server.
-Run `eicq-update-meta-info' after modifying this variable."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-language-1 0
-  "*User 1st language stored on the ICQ server.
-Possible values are:
-
- 0 Unspecified 7 Chinese   17 French     27 Japanese   36 Portuguese 46 Tagalog
-55 Afrikaans   8 Croatian  18 Gaelic     28 Khmer      37 Romanian   47 Tatar
-58 Albanian    9 Czech     19 German     29 Korean     38 Russian    48 Thai
- 1 Arabic     10 Danish    20 Greek      30 Lao        39 Serbian    49 Turkish
-59 Armenian   11 Dutch     21 Hebrew     31 Latvian    40 Slovak     50 Ukrainian
- 2 Bhojpuri   12 English   22 Hindi      32 Lithuanian 41 Slovenian  51 Urdu
- 3 Bulgarian  13 Esperanto 23 Hungarian  33 Malay      42 Somali     52 Vietnamese
- 4 Burmese    14 Estonian  24 Icelandic  34 Norwegian  43 Spanish    53 Yiddish
- 5 Cantonese  15 Farsi     25 Indonesian 57 Persian    44 Swahili    54 Yoruba
- 6 Catalan    16 Finnish   26 Italian    35 Polish     45 Swedish
-
-Run `eicq-update-meta-info' after modifying this variable."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-language-2 0
-  "*User 2nd language stored on the ICQ server.
-Possible values are:
-
- 0 Unspecified 7 Chinese   17 French     27 Japanese   36 Portuguese 46 Tagalog
-55 Afrikaans   8 Croatian  18 Gaelic     28 Khmer      37 Romanian   47 Tatar
-58 Albanian    9 Czech     19 German     29 Korean     38 Russian    48 Thai
- 1 Arabic     10 Danish    20 Greek      30 Lao        39 Serbian    49 Turkish
-59 Armenian   11 Dutch     21 Hebrew     31 Latvian    40 Slovak     50 Ukrainian
- 2 Bhojpuri   12 English   22 Hindi      32 Lithuanian 41 Slovenian  51 Urdu
- 3 Bulgarian  13 Esperanto 23 Hungarian  33 Malay      42 Somali     52 Vietnamese
- 4 Burmese    14 Estonian  24 Icelandic  34 Norwegian  43 Spanish    53 Yiddish
- 5 Cantonese  15 Farsi     25 Indonesian 57 Persian    44 Swahili    54 Yoruba
- 6 Catalan    16 Finnish   26 Italian    35 Polish     45 Swedish
-
-Run `eicq-update-meta-info' after modifying this variable."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-language-3 0
-  "*User 3rd language stored on the ICQ server.
-Possible values are:
-
- 0 Unspecified 7 Chinese   17 French     27 Japanese   36 Portuguese 46 Tagalog
-55 Afrikaans   8 Croatian  18 Gaelic     28 Khmer      37 Romanian   47 Tatar
-58 Albanian    9 Czech     19 German     29 Korean     38 Russian    48 Thai
- 1 Arabic     10 Danish    20 Greek      30 Lao        39 Serbian    49 Turkish
-59 Armenian   11 Dutch     21 Hebrew     31 Latvian    40 Slovak     50 Ukrainian
- 2 Bhojpuri   12 English   22 Hindi      32 Lithuanian 41 Slovenian  51 Urdu
- 3 Bulgarian  13 Esperanto 23 Hungarian  33 Malay      42 Somali     52 Vietnamese
- 4 Burmese    14 Estonian  24 Icelandic  34 Norwegian  43 Spanish    53 Yiddish
- 5 Cantonese  15 Farsi     25 Indonesian 57 Persian    44 Swahili    54 Yoruba
- 6 Catalan    16 Finnish   26 Italian    35 Polish     45 Swedish
-
-Run `eicq-update-meta-info' after modifying this variable."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-work-city nil
-  "*User work city stored on the ICQ server.
-Run `eicq-update-meta-info' after modifying this variable."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-work-state nil
-  "*User work state stored on the ICQ server.
-Run `eicq-update-meta-info' after modifying this variable."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-work-phone nil
-  "*User work phone number stored on the ICQ server.
-Run `eicq-update-meta-info' after modifying this variable."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-work-fax nil
-  "*User work fax number stored on the ICQ server.
-Run `eicq-update-meta-info' after modifying this variable."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-work-address nil
-  "*User work address stored on the ICQ server.
-Run `eicq-update-meta-info' after modifying this variable."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-work-company nil
-  "*User company stored on the ICQ server.
-Run `eicq-update-meta-info' after modifying this variable."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-work-department nil
-  "*User work department stored on the ICQ server.
-Run `eicq-update-meta-info' after modifying this variable."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-work-position nil
-  "*User work position stored on the ICQ server.
-Run `eicq-update-meta-info' after modifying this variable."
-  :group 'eicq-meta)
-
-(defcustom eicq-user-meta-work-homepage "http://eicq.sourceforge.net/"
-  "*User work homepage stored on the ICQ server.
-Run `eicq-update-meta-info' after modifying this variable."
-  :group 'eicq-meta)
-
-(defcustom eicq-use-sound-flag nil
-  "*Whether to use sound or not.
-SOUND-CARD - use the sound card.
-PC-SPEAKER - use the PC speaker.
-NIL - don't use sound.
-
-This is not yet fully implemented and setting this to anything
-other than SOUND-CARD will turn the sound off."
-  :group 'eicq-sound
-  :type '(choice
-	  (item sound-card) 
-	  (item pc-speaker) 
-	  (item nil)) 
-  :tag "Use Sound")
-
-(defcustom eicq-sound-directory 
-  "/usr/local/lib/xemacs/xemacs-packages/etc/sounds/"
-  "*Directory where sound files are kept."
-  :group 'eicq-sound
-  :type 'directory 
-  :tag "eicq-sound-directory")
-
-(defcustom eicq-sound-alist
-  '((message-sound . nil)
-    (chat-sound . nil)
-    (url-sound . nil)
-    (buddy-sound . nil)
-    (auth-sound . nil)
-    (emailx-sound . nil)
-    (pager-sound . nil))
-  "*Sound event to sound file alist.
-The possible sound events are:
-      \"message-sound\" - Incoming message sound.
-      \"chat-sound\"    - Incoming chat request sound.
-      \"url-sound\"     - Incoming url sound.
-      \"buddy-sound\"   - Online notify sound.
-      \"auth-sound\"    - Authorise sound.
-      \"emailx-sound\"  - Email express sound.
-      \"pager-sound\"   - Pager sound."
-  :group 'eicq-sound
-  :type '(repeat 
-	  (cons (sexp :tag "Sound Event") 
-		(sexp :tag "Sound File")))
-  :tag "Sounds")
-
-(defcustom eicq-coding-system nil
-  "*Coding for incoming and outgoing messages.
-This feature is supported only in Emacs with MULE.
-Nil means not to use any codings.
-See `list-coding-systems'."
-  :group 'eicq-option
-  :type
-  (append '(choice (item nil))
-          (if (fboundp 'coding-system-list)
-              (mapcar
-               (lambda (x) (list 'item x))
-               (coding-system-list)))))
-
-(defcustom eicq-bridge-filename 
-  "/usr/local/bin/udp2tcp"
-  "*Filename for `eicq-bridge' program."
-  :group 'eicq-option)
-
-(defcustom eicq-bridge-buffer nil
-  "Buffer for `eicq-bridge'.
-Nil means no associated buffer, or no debug info."
-  :group 'eicq-option)
-
-(defcustom eicq-bridge-hostname "127.0.0.1"
-  "*IP address of `eicq-bridge'.
-See `eicq-connect'."
-  :group 'eicq-option)
-
-(defcustom eicq-bridge-port
-  ;; plant random seed
-  (progn (random t) nil)
-  "*Port of `eicq-bridge'.
-See `eicq-connect'."
-  :group 'eicq-option)
-
-(defcustom eicq-server-hostname "icq1.mirabilis.com"
-  "*Hostname or IP address of Mirabilis ICQ server."
-  :group 'eicq-option)
-
-(defcustom eicq-server-port 4000
-  "*Port of Mirabilis ICQ server."
-  :group 'eicq-option)
-
-(defvar eicq-valid-statuses
-  '("online" "away" "occ" "dnd" "ffc" "na" "invisible")
-  "All statuses valid for selection.
-Used by `eicq-change-status' and in `eicq-buddy-buffer'.")
-
-(defcustom eicq-user-initial-status "invisible"
-  "*Initial user status when login."
-  :group 'eicq-option
-  :type
-  (cons 'choice
-        (mapcar
-         (lambda (x) (list 'item x))
-         eicq-valid-statuses)))
-
-(defcustom eicq-auto-reply-away
-  "I am currently away from ICQ.
-Please leave me messages,
-I'll come back to you soon."
-  "Auto reply with this when you are away."
-  :group 'eicq-option)
-
-(defcustom eicq-auto-reply-occ
-  "I am currently occupied.
-Please leave me messages,
-I'll come back to you soon."
-  "Auto reply with this when you are occupied."
-  :group 'eicq-option)
-
-(defcustom eicq-auto-reply-dnd
-  "I am currently concentrating on some stuff.
-Please leave me messages,
-I'll come back to you soon."
-  "Auto reply with this when you want to leave alone."
-  :group 'eicq-option)
-
-(defcustom eicq-auto-reply-na
-  "I am currently not in the mood of ICQ.
-Please leave me messages,
-I'll come back to you soon."
-  "Auto reply with this when you are not available."
-  :group 'eicq-option)
-
-(defcustom eicq-delete-offline-messages-flag 'ask
-  "*Non-nil means delete all offline messages from server.
-'ask means to ask user every time.
-Nil means leave messages on server and you will receive the same offline
-messages again next time you login."
-  :group 'eicq-option
-  :type '(choice (item t) (item ask) (item nil)))
-
-(defcustom eicq-buddy-window-width 20
-  "*Width of window for `eicq-buddy-buffer'."
-  :group 'eicq-interface)
-
-(defcustom eicq-status-window-height 9
-  "*Height of window for `eicq-status-buffer'."
-  :group 'eicq-interface)
-
-(defcustom eicq-log-fill-column 50
-  "Fill column for `eicq-log-buffer'.
-Log in buffer is auto-filled, that is, word-wrapped upto this column.
-Normally frame width is 80 and window width of `eicq-buddy-buffer' is 20,
-therefore default value 50 will be nice."
-  :group 'eicq-log)
-
-(defcustom eicq-log-filename "~/.eicq/log"
-  "*Pathname and filename for storing eicq log.
-Automatically created if the directory is non-existent."
-  :group 'eicq-log)
-
-(defcustom eicq-log-buffer-position-flag 'tail
-  "*Non-nil means automatically updating buffer position.
-Nil means no automatic update, 'tail means keeping the bottom of the buffer 
-visible, other non-nil means keeping the top of the buffer visible."
-  :group 'eicq-log
-  :type '(choice (item t) (item tail) (item nil)))  
-
-(defcustom eicq-log-info-flag 'tail
-  "*Non-nil means log misc info.
-These include any info from ICQ server other than buddy messages, status
-change notice, and query results.
-Nil means no log, 'tail means putting new log at the end of the log
-buffer, other non-nil means putting new log at the beginning."
-  :group 'eicq-log
-  :type '(choice (item t) (item tail) (item nil)))
-
-(defcustom eicq-log-buddy-status-flag 'tail
-  "*Non-nil means log buddy status change notice.
-Nil means no log, 'tail means putting new log at the end of the log
-buffer, other non-nil means putting new log at the beginning."
-  :group 'eicq-log
-  :type '(choice (item t) (item tail) (item nil)))
-
-(defcustom eicq-log-buddy-message-flag 'tail
-  "*Non-nil means log buddy messages from ICQ server.
-Nil means no log, 'tail means putting new log at the end of the log
-buffer, other non-nil means putting new log at the beginning."
-  :group 'eicq-log
-  :type '(choice (item t) (item tail) (item nil)))
-
-(defcustom eicq-log-outgoing-flag 'tail
-  "*Non-nil means log outgoing messages to ICQ server.
-Nil means no log, 'tail means putting new log at the end of the log
-buffer, other non-nil means putting new log at the beginning."
-  :group 'eicq-log
-  :type '(choice (item t) (item tail) (item nil)))
-
-(defcustom eicq-log-error-flag 'tail
-  "*Non-nil means log critical error messages.
-Nil means no log, 'tail means putting new log at the end of the log
-buffer, other non-nil means putting new log at the beginning."
-  :group 'eicq-log
-  :type '(choice (item t) (item tail) (item nil)))
-
-(defcustom eicq-log-debug-flag nil
-  "*Non-nil means log verbose debugging messages.
-Nil means no log, 'tail means putting new log at the end of the log
-buffer, other non-nil means putting new log at the beginning."
-  :group 'eicq-log
-  :type '(choice (item t) (item tail) (item nil)))
-
-(defcustom eicq-log-system-flag 'tail
-  "*Non-nil means log system messages.
-These include network status, login status, and others.
-Nil means no log, 'tail means putting new log at the end of the log
-buffer, other non-nil means putting new log at the beginning."
-  :group 'eicq-log
-  :type '(choice (item t) (item tail) (item nil)))
-
-(defcustom eicq-log-info-mark nil
-  "*Non-nil means mark unread.
-These include any info from ICQ server other than buddy messages, 
-status change notice, and query results.
-Nil means mark read."
-  :group 'eicq-log
-  :type 'boolean)
-
-(defcustom eicq-log-buddy-status-mark nil
-  "*Non-nil means mark buddy status change notice unread.
-Nil means mark read."
-  :type 'boolean
-  :group 'eicq-log)
-
-(defcustom eicq-log-buddy-message-mark t
-  "*Non-nil means mark buddy messages unread.
-Nil means mark read."
-  :type 'boolean
-  :group 'eicq-log)
-
-(defcustom eicq-log-outgoing-mark nil
-  "*Non-nil means mark outgoing messages unread.
-Nil means mark read."
-  :group 'eicq-log
-  :type 'boolean)
-
-(defcustom eicq-log-error-mark t
-  "*Non-nil means mark critical error messages unread.
-Nil means mark read."
-  :group 'eicq-log
-  :type 'boolean)
-
-(defcustom eicq-log-debug-mark t
-  "*Non-nil means mark verbose debugging messages unread.
-Nil means mark read."
-  :group 'eicq-log
-  :type 'boolean)
-
-(defcustom eicq-log-system-mark nil
-  "*Non-nil means mark system messages unread.
-Nil means mark read."
-  :group 'eicq-log
-  :type 'boolean)
-
-(defcustom eicq-buddy-status-color-hint-flag t
-  "*Non-nil means put status color hints."
-  :type 'boolean
-  :group 'eicq-buddy)
-
-(defcustom eicq-buddy-view 
-  'eicq-connected-aliases
-  "*View of buddy buffer.
-It determines what aliases to be display in buddy buffer.  For example,
-\(eicq-connected-aliases) means display all connected aliases.
-
-See `eicq-buddy-view-all', `eicq-buddy-view-connected', and
-`eicq-buddy-view-active'."
-  :group 'eicq-buddy
-  :type '(choice (item eicq-all-aliases)
-                 (item eicq-connected-aliases)
-                 (item eicq-active-aliases))
-  :initialize 'custom-initialize-default)
-
-(defvar eicq-user-status "offline"
-  "Current user status.")
-
-(defvar eicq-dropped-packet-counter 0
-  "For debug purpose only.")
-
-(defvar eicq-resend-packet-counter 0
-  "For debug purpose only.")
-
-(defvar eicq-recent-packet nil
-  "The most recent incoming packet.
-For debug only.")
-
-(defvar eicq-trimmed-packet-counter 0
-  "For debug purpose only.")
-
-(defvar eicq-error-packets nil
-  "A list of error incoming packets.
-For debug only.")
-
-(defvar eicq-world-rc-filename "~/.eicq/world"
-  "*Filename for resource file.")
-
-(defvar eicq-do-message-hook nil
-  "*Hooks to run when there is an incoming message.
-Dynamically ALIAS and MESSAGE are binded to be used in hooks.")
-
-(defvar eicq-do-status-update-hook nil
-  "*Hooks to run when a buddy change his status.
-Dynamically ALIAS and STATUS are binded to be used in hooks.")
-
-;;; Internal variables
-
-(defcustom eicq-user-alias "me"
-  "*Your alias in `eicq-world'.
-Run `eicq-world-update' after modifying this variable."
-  :group 'eicq-info)
-
-(defcustom eicq-user-password nil
-  "*Password for your ICQ account.
-Nil means prompt for entering password every time you login."
- :group 'eicq-info)
-
-;;;###autoload
-(defun eicq-version (&optional arg)
-  "Return the version of eicq you are currently using.
-If ARG, insert version string at point."
-  (interactive "P")
-  (if arg
-      (insert (message "Eicq version %s" eicq-version))
-    (message "Eicq version %s" eicq-version)))
-
-;;; Code - compatibility:
-
-;; MULE compatibility functions for 20.4
-
-(defun-when-void encode-coding-string (string encoding-system)
-  "Stub for compatibility with MULE."
-  string)
-
-(defun-when-void decode-coding-string (string encoding-system)
-  "Stub for compatibility with MULE."
-  string)
-
-;; Load the toolbar
-(add-hook 'eicq-buddy-mode-hook 'eicq-install-buddy-toolbar)
-(add-hook 'eicq-log-mode-hook 'eicq-install-log-toolbar)
-
-;;; Code - data conversion:
-
-;; hex  string based 16 (for debugging)
-;; bin  string based 2 (for network packet)
-;; uin  string based 10
-;; int  integer based 10
-;;
-;; Note 1: Special care should be taken in regard of endian-ness of `bin'.
-;;
-;; Note 2: `uin' is stored as a string because it is an 32-bit integer in
-;; network packets and it is larger than the integer representation in
-;; Emacs. Internally eicq uses `float' to do the conversion.
-