From: ueno Date: Tue, 4 Apr 2000 01:45:43 +0000 (+0000) Subject: Importing Liece 1.4.3. X-Git-Tag: liece-1_4_3 X-Git-Url: http://git.chise.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=79bd78bd701bbc2d9b449d40d451c58987e4a607;p=elisp%2Fliece.git Importing Liece 1.4.3. --- 79bd78bd701bbc2d9b449d40d451c58987e4a607 diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..071acdb --- /dev/null +++ b/AUTHORS @@ -0,0 +1,8 @@ +-*- mode: text; left-margin: 2; fill-column: 70; -*- + + Liece is mainly written by Daiki Ueno . + + This package based on Irchat (version 3.01) which has been + distributed under GPL1 or later. + + Original author of Irchat is Tor Lillqvist diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..a3f6b12 --- /dev/null +++ b/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + 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. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..e69de29 diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..467ae8b --- /dev/null +++ b/INSTALL @@ -0,0 +1,95 @@ +-*- mode: text; left-margin: 2; fill-column: 70; -*- + + This program is in very early developing stage. Please use at your + own risk. + +* Requirements + + Liece works under following environment at least. + + - Emacs 20.6 + - XEmacs 21.2 with MULE extension + + This package uses following external libraries. + + - APEL 10.2 or later (stands for - "A Portable Emacs Library") + ftp://ftp.m17n.org/pub/mule/apel/ + - FLIM 1.12 or later + ftp://ftp.m17n.org/pub/mule/flim/ + + If you does not have installed copy of above, please try to specify + `--enable-apel' option at configure time. + (After configuration, Liece will use local copy of APEL.) + +* Quick installation + + (Install APEL, then) + % ./configure + % make + % su + Password: ultrasecret + # make install + + If you are not able to become super-user, you may specify local + directory to install. + + % ./configure --prefix=~/ --with-lispdir=~/elisp + +* Configuration and running + +** Setting up your ~/.emacs + + If you are using Emacs or Mule, please add directory of APEL and + Liece to load-path. If you install by default setting you can write + subdirs.el for example: + + ex: + (normal-top-level-add-to-load-path '("apel" "liece")) + + If you are using Emacs 20.3 or XEmacs, prepare `subdirs.el' with + following contents, Emacs will find and append each substantial + directory to `load-path' automagically. + + ex: + (normal-top-level-add-subdirs-to-load-path) + + If you are using Emacs 19 or earlier version of Emacsen, + you have to write more complicated path-setting in your `~/.emacs'. + + ex: + (setq load-path + (append + (list "/usr/local/lib/mule/site-lisp/apel" + "/usr/local/lib/mule/site-lisp/liece") + load-path)) + + For more details, please read `README' file come along with APEL. + + If you have never been using liece and/or its variants, + add an autoload setting into your `~/.emacs'. + + ex: + (autoload 'liece "liece" nil t) + +** Setting up your ~/.liece + + If you have never run Liece, and quite unsure to configure startup + files in Emacs Lisp, please copy `sample.dot.liece' file in `doc' + directory to `~/.liece'. + + Please read ducuments under `doc' directory. + (`README-styles' to configure window splitting) + +* Optional packages + + Following packages are optional. If install script of this package + found them, it would use various functionality provided in them. + + custom + http://www.dina.kvl.dk/~abraham/custom/ + + X-Face utility + ftp://ftp.jpl.org/pub/elisp/ + + bitmap-mule + ftp://ftp.jpl.org/pub/elisp/bitmap/ (for GNU Emacs only) diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..7547883 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,69 @@ +SUBDIRS = . dcc doc etc lisp + +CVSROOT = :pserver:anonymous@cvs.m17n.org:/cvs/root +if USE_TM +ALL_LOCAL_TARGET = all-tm +INSTALL_LOCAL_TARGET = install-tm +CLEAN_LOCAL_TARGET = clean-tm +else +ALL_LOCAL_TARGET = +INSTALL_LOCAL_TARGET = +CLEAN_LOCAL_TARGET = +endif + +if USE_PACKAGE +ALL_TM_TARGET = package +INSTALL_TM_TARGET = install-package +else +ALL_TM_TARGET = +INSTALL_TM_TARGET = install +endif + +CLEAN_TM_TARGET = clean + +if USE_CUSTOM_LISPDIR +INSTALL_TM_MAKEFLAGS = LISPDIR=$(lispdir) VERSION_SPECIFIC_LISPDIR=$(lispdir) +else +INSTALL_TM_MAKEFLAGS = +endif + +if USE_CUSTOM_PACKAGEDIR +INSTALL_TM_MAKEFLAGS = PACKAGEDIR=$(packagedir) +endif + +all-local: $(ALL_LOCAL_TARGET) + +install-data-local: $(INSTALL_LOCAL_TARGET) + +clean-local: $(CLEAN_LOCAL_TARGET) + +all-tm: + @if grep ${CVSROOT} ${HOME}/.cvspass; then :; else \ + echo "${CVSROOT} A" >> ${HOME}/.cvspass; fi; \ + target=`echo $@ | sed s/-recursive//`; \ + if test -d apel; then :; else \ + cvs -d ${CVSROOT} -z3 checkout apel; fi; \ + if test -d flim; then :; else \ + cvs -d ${CVSROOT} -z3 checkout -r flim-1_13 flim; fi; \ + list='apel flim'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + ( cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) $(ALL_TM_TARGET) ) ; \ + done + +install-tm: all-tm + @target=`echo $@ | sed s/-recursive//`; \ + list='apel flim'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + ( cd $$subdir && \ + $(MAKE) $(INSTALL_TM_MAKEFLAGS) $(INSTALL_TM_TARGET) ) ; \ + done + +clean-tm: + @target=`echo $@ | sed s/-recursive//`; \ + list='apel flim'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + ( cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) $(CLEAN_TM_TARGET) ) ; \ + done + diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..e69de29 diff --git a/README b/README new file mode 100644 index 0000000..be1a1ce --- /dev/null +++ b/README @@ -0,0 +1,42 @@ +-*- mode: text; left-margin: 2; fill-column: 70; -*- + +* Directory tree + + This package contains following directories: + + lisp/ - Emacs Lisp files. + + dcc/ - DCC external program source. + + doc/ - Documentation, info files, sample configuration, etc. + + etc/ - Miscellaneous files which decorate this program. + + Please read documentation under `doc' directory. + +* Bug reports + + If you write bug reports and/or suggestions for improvement, + please send them to me :-) + +* CVS + + Development of Liece uses CVS, Concurrent Versions System. + Latest developing version is available at CVS. + +(0) logging in to anonymous CVS server. + + % cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/root login + + CVS password: [CR] # NULL string + +(1) checkout modules + + % cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/root checkout liece + + Specify revision tag in front of the module name. + +(2) bootstrapping + + % cd liece + % ./bootstrap diff --git a/acinclude.m4 b/acinclude.m4 new file mode 100644 index 0000000..b0b8238 --- /dev/null +++ b/acinclude.m4 @@ -0,0 +1,79 @@ +AC_DEFUN(AM_PATH_LISPDIR, + [dnl # + dnl # Check Emacs + dnl # + AC_ARG_WITH(emacs, + [ --with-emacs=EMACS compile with EMACS [EMACS=emacs, xemacs...]], + [case "${withval}" in + yes) EMACS= ;; + no) AC_MSG_ERROR([emacs is not available]) ;; + *) EMACS=${withval} ;; + esac], EMACS=) + if test "x$EMACS" = "xt" -o "x$EMACS" = x; then + AC_PATH_PROGS(EMACS, emacs xemacs mule, no) + else + AC_MSG_CHECKING(for emacs) + AC_MSG_RESULT($EMACS) + fi + dnl # + dnl # Check Emacs directories + dnl # + AC_ARG_WITH(emacsdir, + [ --with-emacsdir=EDIR Emacs program/data files in EDIR [guessed]], + [case "${withval}" in + yes) emacsdir=NONE ;; + no) AC_MSG_ERROR(emacsdir is not available) ;; + *) emacsdir=${withval} ;; + esac], emacsdir=NONE) + AC_MSG_CHECKING([where emacs files are in]) + AC_MSG_RESULT($emacsdir) + AC_SUBST(emacsdir) + dnl # + dnl # Check Emacs site-lisp directories + dnl # + ac_cv_lispdir=no + AC_ARG_WITH(lispdir, + [ --with-lispdir=DIR emacs lisp files in DIR [EDIR/site-lisp]], + [case "${withval}" in + yes) lispdir=NONE ;; + no) AC_MSG_ERROR(lispdir is not available) ;; + *) lispdir=${withval} ; ac_cv_lispdir=yes ;; + esac], lispdir=NONE) + AC_MSG_CHECKING([where .elc files should go]) + AC_MSG_RESULT($lispdir) + AC_SUBST(lispdir) + AM_CONDITIONAL(USE_CUSTOM_LISPDIR, test x$ac_cv_lispdir = xyes) + dnl # + dnl # Check whether install as XEmacs package + dnl # + AC_ARG_ENABLE(package, + [ --enable-package install as XEmacs package [default=no]],, + enable_package=no) + AC_MSG_CHECKING([whether install as XEmacs package]) + if test "x$enable_package" = "xyes"; then + AC_MSG_RESULT(yes) + EMACS=xemacs + dnl # + dnl # Check XEmacs package directories + dnl # + ac_cv_packagedir=no + AC_ARG_WITH(packagedir, + [ --with-packagedir=DIR XEmacs package files in DIR [EDIR/packages]], + [case "${withval}" in + yes) packagedir=NONE ;; + no) AC_MSG_ERROR(packagedir is not available) ;; + *) packagedir=${withval} ; ac_cv_packagedir=yes ;; + esac], packagedir=NONE) + AC_MSG_CHECKING([where package files should go]) + if test "x$packagedir" = "xNONE"; then + eval `$EMACS -batch -q -no-site-file -l ./lisp/liece-make.el \ + -f config-liece-package-directory` + packagedir=$PACKAGEDIR + fi + AC_MSG_RESULT($packagedir) + AC_SUBST(packagedir) + AM_CONDITIONAL(USE_CUSTOM_PACKAGEDIR, test x$ac_cv_packagedir = xyes) + else + AC_MSG_RESULT(no) + fi + AM_CONDITIONAL(USE_PACKAGE, test x$enable_package = xyes)]) diff --git a/bootstrap b/bootstrap new file mode 100755 index 0000000..c67fa95 --- /dev/null +++ b/bootstrap @@ -0,0 +1,7 @@ +#! /bin/sh + +aclocal +automake --gnu --add-missing +autoconf + +exit 0 diff --git a/configure.in b/configure.in new file mode 100644 index 0000000..a3ae353 --- /dev/null +++ b/configure.in @@ -0,0 +1,62 @@ +AC_INIT(lisp/liece.el) +AM_INIT_AUTOMAKE(liece, 1.4.3) + +AM_PATH_LISPDIR + +AC_PROG_CC +AC_ISC_POSIX +AC_PROG_INSTALL +AC_PROG_MAKE_SET +AC_PROG_RANLIB + +AC_CHECK_HEADERS(sys/select.h libgen.h socks.h netinet6/in6.h) +AC_CHECK_FUNCS(strtoul memmove basename getaddrinfo) + +AC_CHECK_LIB(nsl, gethostbyname) +AC_CHECK_LIB(socket, socket) + +AC_CHECK_TYPE(fd_set, int) + +dnl checking if the system supports ipv6 address space or not +AC_CACHE_CHECK([for struct in6_addr], ac_cv_struct_in6_addr, +[AC_TRY_COMPILE([#include +#include +#include +#include ], [struct in6_addr v6; v6.s6_addr32[3];], +ac_cv_struct_in6_addr=yes, ac_cv_struct_in6_addr=no)]) +test "x$ac_cv_struct_in6_addr" = "xyes" && AC_DEFINE(HAVE_IN6_ADDR) + +dnl checking if the system supports tcp over ipv6 support or not +AC_CACHE_CHECK([for struct sockaddr_in6], ac_cv_struct_sockaddr_in6, +[AC_TRY_COMPILE([#include +#include +#include +#include ], [struct sockaddr_in6 v6; v6.sin6_addr;], +ac_cv_struct_sockaddr_in6=yes, ac_cv_struct_sockaddr_in6=no)]) +test "x$ac_cv_struct_sockaddr_in6" = "xyes" && AC_DEFINE(HAVE_SOCKADDR_IN6) + +# Check compile with IPv6 support +AC_MSG_CHECKING(whether we compile with IPv6) +AC_ARG_ENABLE(ipv6, \ + [ --enable-ipv6 compile with IPv6 [default=no]],, \ + enable_ipv6=no) +test "x$enable_ipv6" = "xyes" && AC_DEFINE(INET6) +AC_MSG_RESULT($enable_ipv6) + +# Check whether to retrieve APEL/FLIM distribution. +AC_MSG_CHECKING(whether we retrieve APEL/FLIM distribution via CVS) +AC_ARG_ENABLE(tm, \ + [ --enable-tm retrieve APEL/FLIM distribution via CVS [default=no]],, \ + enable_tm=no) +if test "x$enable_tm" = "xyes"; then + AC_MSG_RESULT(yes) +else + AC_MSG_RESULT(no) +fi +AM_CONDITIONAL(USE_TM, test x$enable_tm = xyes) + +AC_OUTPUT(Makefile \ +lisp/Makefile \ +dcc/Makefile \ +doc/Makefile \ +etc/Makefile) diff --git a/contrib/plum-support.el b/contrib/plum-support.el new file mode 100644 index 0000000..9697fbc --- /dev/null +++ b/contrib/plum-support.el @@ -0,0 +1,150 @@ +;;; plum-support.el --- pirc support for plum +;; Copyright (C) 1999 Daiki Ueno +;; See file irchat-copyright.el for original change log and copyright info. + +;; Author: Daiki Ueno +;; Created: 1999-05-06 +;; Revised: 1999-05-06 +;; Keywords: IRC, irchat, pirc + +;; This file is not part of any package. + +;; 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, 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 GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Code: + +(require 'custom) + +(defcustom plum-recent-header "plum" + "String added in front of each recent logged message" + :type 'string + :group 'irchat-support) + +(defconst plum-recent-time-header-regexp "[0-9][0-9]:[0-9][0-9]" + "Regexp for timestamp preceding in message body") + +(defconst plum-recent-privmsg-header-regexp + "[<>(=]\\([^ <>)=]*\\)[<>)=]" + "Regexp for whole message line (privmsg)") + +(defconst plum-recent-join-header-regexp + "\\+ [@+]?[^ ]* [^ ]* to \\([^ ]*\\)" + "Regexp for whole message line (join)") + +(defconst plum-recent-part-header-regexp + "- [^ ]* from \\([^ ]*\\)" + "Regexp for whole message line (part)") + +(defconst plum-recent-kick-header-regexp + "- [^ ]* by [^ ]* from \\([^ ]*\\) .*" + "Regexp for whole message line (kick)") + +(defconst plum-recent-mode-header-regexp + "Mode by [^:]*: \\([^ ]*\\) .*" + "Regexp for whole message line (mode)") + +(defconst plum-recent-topic-header-regexp + "Topic of channel \\([^ ]*\\) by [^:]*: .*" + "Regexp for whole message line (nick)") + +(defconst plum-recent-message-header-regexp + (concat "^\\(" plum-recent-time-header-regexp "\\)? *" + plum-recent-privmsg-header-regexp)) + +(defconst plum-recent-channel-header-regexp + (concat "^\\(" plum-recent-time-header-regexp "\\)? *" + (mapconcat (function identity) + (list plum-recent-join-header-regexp + plum-recent-part-header-regexp + plum-recent-kick-header-regexp + plum-recent-mode-header-regexp + plum-recent-topic-header-regexp) + "\\|"))) + +(defconst plum-recent-generic-header-regexp + (concat "^\\(" plum-recent-time-header-regexp "\\)? *")) + +(defvar plum-recent-log-buffer " *plum recent log") + +(defun plum-parse-recent-after () + "Parse text after point as recent log message, then returns components" + (save-excursion + (let (time lparen rparen chnl nick) + (cond + ((looking-at plum-recent-message-header-regexp) + (setq time (match-string 1)) + (goto-char (match-beginning 2)) + (setq lparen (char-before)) + (goto-char (match-end 2)) + (setq rparen (char-after)) + (skip-chars-backward "^: ") + (skip-chars-forward "=") + (setq nick (buffer-substring (point) (match-end 2))) + (backward-char) + (setq chnl (buffer-substring (match-beginning 2) (point))) + (goto-char (match-end 0)) + (forward-char) + (list 'message time lparen rparen chnl nick + (buffer-substring (point) (line-end-position)))) + ((looking-at plum-recent-channel-header-regexp) + (setq time (match-string 1) + chnl (match-string 2)) + (goto-char (match-end 1)) + (forward-char) + (list 'channel time chnl + (buffer-substring (point) (line-end-position)))) + ((looking-at plum-recent-generic-header-regexp) + (setq time (match-string 1)) + (goto-char (match-end 0)) + (list 'generic time (buffer-substring (point) (line-end-position))))) + ))) + +(add-hook 'irchat-notice-hook 'plum-recent-add) +(add-hook 'irchat-002-hook + (function + (lambda (header rest) + (remove-hook 'irchat-notice-hook 'plum-recent-add) ))) + +(defun plum-recent-add (header rest) + "Add recent log line into `plum-recent-log-buffer'." + (let (fun from to body component type) + (if header + nil + (and rest (string-match "^[^ ]* +:\\(.*\\)" rest) + (with-temp-buffer + (insert (match-string 1 rest) ?\n) + (goto-char (point-min)) + (setq component (plum-parse-recent-after) + type (pop component)) + (cond + ((eq type 'message) + (setq from (nth 4 component) + to (cond + ((eq (nth 1 component) ?=) + (irchat-current-nickname)) + ((eq (nth 1 component) ?<) + (irchat-channel-real (nth 3 component)))) + body (concat "(" plum-recent-header " " (car component) + ") " (nth 5 component)) + fun (llhandler-lookup "irchat-handle-privmsg-msg")) + (funcall fun from (concat to " :" body)) + t) + (t nil))))))) + + +(provide 'plum-support) + +;;; plum-support.el ends here. \ No newline at end of file diff --git a/dcc/Makefile.am b/dcc/Makefile.am new file mode 100644 index 0000000..9c54399 --- /dev/null +++ b/dcc/Makefile.am @@ -0,0 +1,34 @@ +## Process this file with automake to produce Makefile.in + +DEFS = -I$(srcdir) -I$(top_srcdir) $(CFLAGS) @DEFS@ +LIBS = -L. -ldcc @LIBS@ +CLEANFILES = ldcc ltcp + +noinst_LIBRARIES = libdcc.a +bin_PROGRAMS = ldcc ltcp + +libdcc_a_SOURCES = getopt1.c getopt.c getaddrinfo.c +noinst_HEADERS = getopt.h getaddrinfo.h + +ltcp_SOURCES = tcp.c +ldcc_SOURCES = dcc.c + +#MLHDRS = naddr.mli +#MLSRCS = naddr.ml dcc.ml +#MLOBJS = $(MLSRCS:.ml=.cmo) +#MLINTF = $(MLHDRS:.mli=.cmi) +#EXTRA_ldcc_SOURCES = $(MLHDRS) $(MLSRCS) +#ldcc_SOURCES = $(MLSRCS) +#ldcc_COMPILE = @OCAMLC@ +#ldcc_LINK = $(OCAMLC) -custom unix.cma nums.cma str.cma +#ldcc_LDFLAGS = -cclib -lunix -cclib -lnums -cclib -lstr -o ldcc + +#SUFFIXES = .ml .mli .cmo .cmi + +#$(MLOBJS): $(MLINTF) + +#.mli.cmi: +# $(OCAMLC) -c $< + +#.ml.cmo: +# $(OCAMLC) -c $< diff --git a/dcc/dcc.c b/dcc/dcc.c new file mode 100644 index 0000000..7671cc0 --- /dev/null +++ b/dcc/dcc.c @@ -0,0 +1,505 @@ +/* This file is part of Liece. + Copyright (C) 1998 Daiki Ueno + + Author: Daiki Ueno + Created: 1998-09-28 + Revised: 1999-01-28 + Keywords: IRC, liece, DCC + + This file is part of Liece. + + 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, 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 GNU Emacs; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define _GNU_SOURCE +#include + +#ifndef MAXHOSTNAMELEN +# define MAXHOSTNAMELEN 31 +#endif + +#ifdef HAVE_SYS_SELECT_H +# include +#endif + +#ifdef HAVE_MEMMOVE +# ifdef HAVE_LIBGEN_H +# include +# ifdef basename +# undef basename +# endif +# endif +# include +#else +# define memmove(x,y,z) bcopy((y), (x), (z)) +#endif + +#ifndef HAVE_BASENAME +# define basename(path) (rindex((path), '/') + 1) +#endif + +static void usage(); +static int prepare_listen_port(); +static int prepare_connect_port(); + +static int receive_file(); +static int send_file(); +static int select_loop(); +static int chat_listen(); +static int chat_connect(); + +static u_long primary_address_of(); +static u_long extract_addr_of_string(); +static u_long get_address_externally(); + +static char *progname; + +void version () { + printf("%s (Liece) 1.4.0\n" + "Copyright (C) 1998, 1999 Daiki Ueno\n" + "This is free software; see the source for copying conditions. There is NO\n" + "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n", + progname); +} + +void usage() { + printf("Usage: %s [global-options] command [command-options-and-arguments]\n" + "where global-options are -v, -h, etc.\n" + "where command is one of send, receive, chat, resolve.\n" + "where command-options-and-arguments depend on the specific command.\n\n" + "send \n" + "receive \n" + "chat listen \n" + "chat connect \n" + "resolve [hosts ...]\n", + progname); +} + +int prepare_listen_port (int ip_port) { + int sock, tries; + int opt = 1; + static struct sockaddr_in server; + + + if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { + perror("opening stream socket"); + exit(1); + } + +#ifdef SO_REUSEADDR + if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, + (char *)&opt, sizeof (opt)) < 0) { + perror ("setsockopt SO_REUSEADDR"); + } +#endif + + /* Bind a port to listen for new connections */ + + server.sin_family = AF_INET; + server.sin_addr.s_addr = INADDR_ANY; + server.sin_port = htons (ip_port); + for (tries = 0; tries < 10; tries++) { + if (bind (sock, (struct sockaddr *) &server, sizeof (server))) { + if (tries >= 9) { + perror ("binding stream socket"); + exit (1); + } + perror ("binding stream socket. retry in 20 seconds"); + sleep (20); /* wait 20 seconds and try again */ + } else + break; + } + listen (sock, 64); + return (sock); +} + +u_long get_address_externally(char *ircserver) { + int i, len, dummy; + u_long addr; + struct hostent *hp; + struct sockaddr_in server, client; + + addr = 0xc6290004; /* dummy addr --- rootA */ + if (ircserver && (hp = gethostbyname(ircserver)) != NULL) { + addr = ntohl(((struct in_addr *)hp->h_addr_list[0])->s_addr); + } + if ((dummy = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { + perror("opening stream socket"); + return -1; + } + server.sin_family = AF_INET; + server.sin_addr.s_addr = htonl(addr); + server.sin_port = htons(7); /* dummy port --- echo */ + for (i = 0; i < 8; i++) { + server.sin_zero[i] = 0; + } + if (connect(dummy, (struct sockaddr *)&server, sizeof(server)) < 0) { + perror ("connecting remote socket"); + return -1; + } + len = sizeof(client); + if (getsockname(dummy, (struct sockaddr *)&client, &len) < 0) + return -1; + close(dummy); + return ntohl(client.sin_addr.s_addr); +} + + +/* + * send_file(int port, char *ifile) + * listens to connections to port, and when connection established + * sends ifile to that socket + */ +int send_file (int port, char *ifile) { + int sock, ifd, ofd, len; + u_long addr, bytessent = 0; + char buf[ BUFSIZ * 8 ]; + fd_set readfds, writefds, fdset; + struct stat statbuf; + char namebuf[ MAXHOSTNAMELEN ]; + struct hostent *hp; + struct sockaddr_in sin; + + if ((ifd = open (ifile, O_RDONLY)) < 0) { + /* error in opening file to send */ + close(ofd); + return 1; + } + + gethostname(namebuf, sizeof (namebuf)); + fstat (ifd, &statbuf); + + sock = prepare_listen_port(port); + len = sizeof (struct sockaddr_in); + if (getsockname(sock, (struct sockaddr *)&sin, &len) == 0) + port = ntohs(sin.sin_port); + + if ((addr = get_address_externally (NULL)) < 0) { + gethostname(namebuf, sizeof (namebuf)); + if (hp = gethostbyname(namebuf)) + addr = ((struct in_addr *) (hp->h_addr_list)[0])->s_addr; + else + return 2; + } + + printf ("DCC send %s %d %u %d\n", ifile, port, addr, statbuf.st_size); + + ofd = accept(sock, (struct sockaddr *) 0, (int *) 0); + + while ((len = read (ifd, buf, sizeof (buf))) > 0) { + write (ofd, buf, len); + bytessent += len; + while ((len = read (ofd, buf, sizeof (u_long))) && + ntohl (*(u_long *) buf) != bytessent); + } + close (ofd); + close (ifd); + printf ("*** DCC file %s sent\n", ifile); + + return 0; +} + +/* + * receive_file(u_long host, int port, char *ifile) + * connects to (host,port) and reads everything send from there + * for every packet received gives back how much actually got + * puts everything in ifile + */ +int receive_file (u_long host, int port, int size, char *ifile) { + int sock, ifd, ofd, len, bytesreceived = 0, toread, prev = 0; + char buf[ BUFSIZ * 8 ]; + fd_set readfds, writefds, fdset; + u_long netsize; + + if ((ofd = open(ifile, O_WRONLY|O_CREAT|O_TRUNC, 0600)) < 0) { + fprintf(stderr, "open: opening file: %s\n", ifile); + return 1; + } + ifd = prepare_connect_port (host, port); + if ((toread = sizeof (buf)) > size) + toread = size; + while (bytesreceived < size && (len = read (ifd, buf, toread)) > 0) { + write (ofd, buf, len); + bytesreceived += len; + netsize = htonl (bytesreceived); + lseek (ifd, 0, 2); + write (ifd, &netsize, 4); + lseek (ifd, 0, 2); + if (toread > size - bytesreceived) + toread = size - bytesreceived; + if (bytesreceived - prev > size / 5) { + printf ("DCC %s %d%% (%d/%d bytes) received\n", ifile, + 100 * bytesreceived / size, bytesreceived, size); + prev = bytesreceived; + } + } + printf ("*** DCC file %s received\n", ifile); + close (ifd); + close (ofd); + + return 0; +} + +/* + * select_loop(int sfd) + * listens fd given, reads stdin and sends it to socket + * anything read from socket is send to stdout + */ +int select_loop (int sfd) { + int ofd, len, bytesreceived = 0; + char buf[ BUFSIZ * 8 ]; + fd_set readfds, writefds, fdset; + + for (;;) { + FD_ZERO (&readfds); + FD_SET (sfd, &readfds); + FD_SET (0, &readfds); + if (select (32, &readfds, 0, 0, 0) < 0) { + perror ("select"); + close (sfd); + return 1; + } + + if (FD_ISSET (sfd, &readfds)) { + if ((len = read(sfd, buf, sizeof (buf))) == 0) { + close (sfd); + return 0; + } + write (1, buf, len); + FD_CLR (sfd, &readfds); + } + if (FD_ISSET (0, &readfds)) { + if ((len = read (0, buf, sizeof (buf))) == 0) { + close (sfd); + return 0; + } + write(sfd, buf, len); + FD_CLR (ofd, &readfds); + } + } +} + +int prepare_connect_port (u_long host, int port) { + int sock; + static struct hostent *hp; + static struct sockaddr_in server; + + sock = socket (AF_INET, SOCK_STREAM, 0); + if (sock < 0) { + perror ("opening stream socket"); + exit (1); + } + server.sin_family = AF_INET; + + server.sin_addr.s_addr = ntohl (host); + server.sin_port = htons (port); + + if (connect(sock, (struct sockaddr *) &server, sizeof (server)) < 0) { + perror ("connecting remote socket"); + return 0; + } + + return sock; +} + +u_long extract_addr_of_string (char *str) { + u_long result = 0; + +#ifndef HAVE_STRTOUL + while (*str++) + result = result * 10 + *str - '0'; +#else /* !HAVE_STRTOUL */ + result = strtoul(str, NULL, 10); +#endif /* HAVE_STRTOUL */ + return result; +} + +u_long primary_address_of (char *host) { + struct hostent *hp; + u_long addr; + + if ((hp = gethostbyname(host)) == NULL) + addr = inet_addr(host); + else + memmove(&addr, hp->h_addr_list[ 0 ], 4); + + return ntohl(addr); +} + +int chat_listen(int port) { + struct sockaddr_in sin; + struct hostent *hp; + u_long addr; + int sock, len; + char namebuf[ MAXHOSTNAMELEN ]; + + sock = prepare_listen_port (port); + + len = sizeof (struct sockaddr_in); + if (getsockname(sock, (struct sockaddr *)&sin, &len) == 0) + port = ntohs(sin.sin_port); + + if ((addr = get_address_externally (NULL)) < 0) { + gethostname(namebuf, sizeof (namebuf)); + if (hp = gethostbyname(namebuf)) + addr = ((struct in_addr *) (hp->h_addr_list)[0])->s_addr; + else + return 2; + } + + printf("DCC chat %u %d\n", addr, port); + + if ((sock = accept(sock, (struct sockaddr *) 0, (int *) 0)) > -1) { + printf("DCC chat established\n"); + return select_loop(sock); + } + + return 1; +} + +int chat_connect(u_long host, int port) { + int sock; + + if ((sock = prepare_connect_port(host, port)) > -1) { + printf("DCC chat established\n"); + return select_loop(sock); + } + + return 1; +} + + +int main (int argc, char **argv) { + char *host = "localhost"; + char *action; + int c, status = 0; + + progname = (char *)basename(argv[ 0 ]); + + while (1) { + int this_option_optind = optind ? optind : 1; + int option_index = 0; + static struct option long_options[] = { + {"version", 0, 0, 'v'}, + {"help", 0, 0, 'h'}, + {0, 0, 0, 0} + }; + + c = getopt_long (argc, argv, "vh", long_options, &option_index); + if (c == -1) + break; + + switch (c) { + case 'v': + version(); + exit(1); + break; + case 'h': + usage(); + exit(1); + break; + default: + break; + } + } + + if (argc > 1) { + action = argv[ 1 ]; + } else { + usage(); + exit(1); + } + + if (!strcmp(action, "resolve")) { + if (argc < 3) { + usage(); + exit(1); + } else { + u_long i, addr; + for (i = 2; i < argc; i++) { + addr = primary_address_of(argv[i]); + if (addr != -1) + printf("%u\n", addr); + else + printf("0\n"); + } + status = 0; + } + } + + if (!strcmp(action, "send")) { + if (argc != 4) { + usage(); + exit(1); + } + status = send_file (atoi(argv[ 2 ]), argv[ 3 ]); + } else if (!strcmp(action, "receive")) { + if (argc != 6) { + usage(); + exit(1); + } + status = + receive_file (extract_addr_of_string(argv[ 2 ]), + atoi(argv[ 3 ]), atoi(argv[ 4 ]), argv[ 5 ]); + } else if (!strcmp(action, "chat")) { + if (argc > 3) { + if (!strcmp(argv[ 2 ], "listen")) { + if (argc != 4) { + usage(); + exit(1); + } + status = chat_listen(atoi(argv[ 3 ])); + } else if (!strcmp(argv[ 2 ], "connect")) { + if (argc != 5) { + usage(); + exit(1); + } + status = chat_connect(extract_addr_of_string(argv[ 3 ]), + atoi(argv[ 4 ])); + } else { + usage(); + exit(1); + } + } + } else { + usage(); + exit(1); + } + + return status; +} + +/* + * Local variables: + * compile-command: "gcc -DHAVE_STRTOUL -Wall -O6 -o dcc dcc.c" + * c-indent-level: 2 + * c-basic-offset: 2 + * tab-width: 2 + * End: + */ diff --git a/dcc/dcc.ml b/dcc/dcc.ml new file mode 100644 index 0000000..0b852dc --- /dev/null +++ b/dcc/dcc.ml @@ -0,0 +1,248 @@ +(* DCC module. + +This file is part of Liece. + +Author: Daiki Ueno +Created: 1998-09-28 +Revised: 1999-01-28 +Keywords: IRC, liece, DCC + +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, 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 GNU Emacs; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. *) + +open Unix + +let usage prefix progname = + String.concat "\n" + (List.map (fun x -> (Printf.sprintf "%s: %s %s" prefix progname x)) + [ "send "; + "receive "; + "chat listen "; + "chat connect " ]) + +let buff = String.create 1024 + +let print_exc exc = + match exc with + Unix_error (err, fun_name, arg) -> + prerr_string "\""; + prerr_string fun_name; + prerr_string "\" failed"; + if String.length arg > 0 then + begin + prerr_string " on \""; prerr_string arg; prerr_string "\""; () + end; + prerr_string ": "; + prerr_endline (error_message err); + flush Pervasives.stderr; () + | _ -> + try Printexc.print raise exc with + _ -> () + +let accept_connection f s = + let (t, addr) = accept s in + f t; close t; () + +let write_file filename size t = + let fd = + try openfile filename [ O_RDONLY ] 0 with + _ -> Printf.eprintf "Open failed.\n"; flush Pervasives.stderr; exit 1 + in + let (len, rlen) = ref 0, ref 0 in + while len := read fd buff 0 (String.length buff); !len <> 0 + do + let rec loop i = + let j = i + write t buff i (!len - i) in + if j == !len then () else loop j + in + loop 0; + flush (out_channel_of_descr t); + rlen := !rlen + !len; + Printf.printf "DCC %s %d%% (%d/%d bytes) sent.\n" + filename (100 * !rlen / size) !rlen size; + flush Pervasives.stdout + done; + close fd; close t; () + +let send_file port filename = + try + let host = gethostbyname (gethostname ()) in + let haddr = string_of_inet_addr host.h_addr_list.(0) in + let s = socket PF_INET SOCK_STREAM 0 in + setsockopt s SO_REUSEADDR true; + bind s (ADDR_INET (inet_addr_any, port)); + let port = + match (getsockname s) with + ADDR_INET (addr, port) -> port + | _ -> port + in + listen s 1; + let fd = + try openfile filename [ O_RDONLY ] 0 with + _ -> Printf.eprintf "Open failed.\n"; flush Pervasives.stderr; exit 1 + in + let size = (fstat fd).st_size in + close fd; + Printf.printf "DCC send %s %d %s %d\n" + (Filename.basename filename) port (Naddr.encode haddr) size; + flush Pervasives.stdout; + accept_connection (fun t -> write_file filename size t) s; + with + exc -> print_exc exc + +let read_file filename size t = + let fd = + try openfile filename [ O_WRONLY; O_CREAT ] 0o600 with + _ -> Printf.eprintf "Open failed.\n"; flush Pervasives.stderr; exit 1 + in + let (len, rlen) = ref 0, ref 0 in + while len := read t buff 0 (String.length buff); !len <> 0 + do + let _ = write fd buff 0 !len in + flush (out_channel_of_descr fd); + rlen := !rlen + !len; + Printf.printf "DCC %s %d%% (%d/%d bytes) received.\n" + filename (100 * !rlen / size) !rlen size; + flush Pervasives.stdout + done; + close fd; close t + +let receive_file host port size filename = + let s = socket PF_INET SOCK_STREAM 0 in + connect s (ADDR_INET (inet_addr_of_string (Naddr.decode host), port)); + read_file filename size s; () + +let chat_loop s = + let sel = ref [s; stdin] in + while !sel <> [] do + let (l, _, _) = + try + select !sel [] [] (-1.0) + with + _ -> exit 0 + in + List.iter + (fun x -> + let (rfd, wfd) = + if x == s then + (s, stdout) + else if x == stdin then + (stdin, s) + else + (stdin, stdout) + in + let len = ref 0 + in + len := read rfd buff 0 (String.length buff); + if !len == 0 then + begin try shutdown wfd SHUTDOWN_SEND; () with + _ -> exit 0 + end + else + begin + let rec loop i = + let j = i + write wfd buff i (!len - i) in + if j == !len then () else loop j + in + loop 0; + flush (out_channel_of_descr wfd) + end; + ()) + l + done + +let chat_listen port = + let host = gethostbyname (gethostname ()) in + let haddr = string_of_inet_addr host.h_addr_list.(0) in + let s = socket PF_INET SOCK_STREAM 0 in + setsockopt s SO_REUSEADDR true; + bind s (ADDR_INET (inet_addr_any, port)); + let port = + match (getsockname s) with + ADDR_INET (addr, port) -> port + | _ -> port + in + listen s 1; + Printf.printf "DCC chat %s %d\n" (Naddr.encode haddr) port; + flush Pervasives.stdout; + accept_connection + (fun t -> + Printf.printf "DCC chat established\n"; + flush Pervasives.stdout; + chat_loop t) s; () + +let chat_connect host port = + let s = socket PF_INET SOCK_STREAM 0 in + connect s (ADDR_INET (inet_addr_of_string (Naddr.decode host), port)); + Printf.printf "DCC chat established\n"; + flush Pervasives.stdout; + chat_loop s; () + +let getaddr_ext server = + let addr = + try (gethostbyname server).h_addr_list.(0) with + _ -> inet_addr_of_string "198.41.0.4" + and port = 7 in + let s = socket PF_INET SOCK_DGRAM 0 in + connect s (ADDR_INET (addr, port)); + match (getsockname s) with + ADDR_INET (addr, port) -> addr + | _ -> raise Not_found + +let main () = + let a = ref [] in + let usage = usage "Usage" (Filename.basename Sys.argv.(0)) in + let speclist = [] in + Arg.parse speclist (fun x -> a := !a @ [x]) usage; + begin match !a with + "send" :: [ port; filename ] -> + let port = + try int_of_string port with + _ -> Arg.usage speclist usage; exit 1 + in + send_file port filename; + exit 0; () + | "receive" :: [ host; port; size; filename ] -> + let (port, size) = + try + int_of_string port, + int_of_string size + with + _ -> Arg.usage speclist usage; exit 1 + in + receive_file host port size filename; + exit 0; () + | "chat" :: [ "listen"; port ] -> + let port = + try + int_of_string port + with + _ -> Arg.usage speclist usage; exit 1 + in + chat_listen port; + exit 0; () + | "chat" :: [ "connect"; host; port ] -> + let port = + try + int_of_string port + with + _ -> Arg.usage speclist usage; exit 1 + in + chat_connect host port; + exit 0; () + | _ -> Arg.usage speclist usage; exit 1 + end + +let _ = Printexc.catch main () diff --git a/dcc/getaddrinfo.c b/dcc/getaddrinfo.c new file mode 100644 index 0000000..18eeccf --- /dev/null +++ b/dcc/getaddrinfo.c @@ -0,0 +1,124 @@ +/* + * getaddrinfo(2) emulation. + * Copyright (C) 1988, 1989, 1992, 1993 Free Software Foundation, Inc. + + * Author: Daiki Ueno + +This file is not part of any package. + +GNU Emacs 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. + +GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. + */ + +#ifndef HAVE_GETADDRINFO + +#include +#include +#include +#include +#include + +#ifdef HAVE_NETINET6_IN6_H +# include +#endif /* HAVE_NETINET6_IN6_H */ + +#include "getaddrinfo.h" + +int getaddrinfo (hostname, servname, hints, res) + const char *hostname; + const char *servname; + const struct addrinfo *hints; + struct addrinfo **res; +{ + struct hostent *host = NULL; + struct servent *serv = NULL; + struct protoent *proto; + int port = 0; + +#if (defined (HAVE_SOCKADDR_IN6) && defined (INET6)) + struct sockaddr_in6 *sin = + (struct sockaddr_in6 *) calloc (1, sizeof (struct sockaddr_in6)); +#else /* (defined (HAVE_SOCKADDR_IN6) && defined (INET6)) */ + struct sockaddr_in *sin = + (struct sockaddr_in *) calloc (1, sizeof (struct sockaddr_in)); +#endif /* !(defined (HAVE_SOCKADDR_IN6) && defined (INET6)) */ + + struct addrinfo *ai = *res = + (struct addrinfo *) calloc (1, sizeof (struct addrinfo)); + + if ((~ hints->ai_flags & AI_PASSIVE) && hostname && + (host = gethostbyname (hostname)) == NULL) { + perror ("gethostbyname"); + return EAI_NONAME; + } + + if (hints->ai_protocol && + (proto = getprotobynumber (hints->ai_protocol)) == NULL) { + perror ("getprotobynumber"); + return EAI_NONAME; + } + + if (servname) + if (isdigit (servname[0])) + port = atoi (servname); + else { + if ((serv = getservbyname (servname, proto->p_name)) == NULL) { + perror ("getservbyname"); + return EAI_NONAME; + } + port = serv->s_port; + } + +#if (defined (HAVE_SOCKADDR_IN6) && defined (INET6)) + if (host) + memcpy (&sin->sin6_addr, host->h_addr, host->h_length); + sin->sin6_port = htons (port); +#else /* (defined (HAVE_SOCKADDR_IN6) && defined (INET6)) */ + if (host) + memcpy (&sin->sin_addr, host->h_addr, host->h_length); + sin->sin_port = htons (port); +#endif /* !(defined (HAVE_SOCKADDR_IN6) && defined (INET6)) */ + + if (hints->ai_family == AF_UNSPEC) + ai->ai_family = host->h_addrtype; + else + ai->ai_family = hints->ai_family; +#if (defined (HAVE_SOCKADDR_IN6) && defined (INET6)) + sin->sin6_family = ai->ai_family; +#else /* (defined (HAVE_SOCKADDR_IN6) && defined (INET6)) */ + sin->sin_family = ai->ai_family; +#endif /* !(defined (HAVE_SOCKADDR_IN6) && defined (INET6)) */ + + ai->ai_protocol = hints->ai_protocol; + ai->ai_socktype = hints->ai_socktype; + ai->ai_addrlen = sizeof (*sin); + ai->ai_addr = (struct sockaddr *)sin; + + return 0; +} + +void freeaddrinfo (ai) + struct addrinfo *ai; +{ + struct addrinfo *p; + + while (ai != NULL) { + p = ai; + ai = ai->ai_next; + free (p); + } +} + +#endif /* HAVE_GETADDRINFO */ diff --git a/dcc/getaddrinfo.h b/dcc/getaddrinfo.h new file mode 100644 index 0000000..d88883f --- /dev/null +++ b/dcc/getaddrinfo.h @@ -0,0 +1,69 @@ +/* + * getaddrinfo(2) emulation. + * Copyright (C) 1988, 1989, 1992, 1993 Free Software Foundation, Inc. + + * Author: Daiki Ueno + +This file is not part of any package. + +GNU Emacs 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. + +GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. + */ + +struct addrinfo { + int ai_flags; + int ai_family; + int ai_socktype; + int ai_protocol; + size_t ai_addrlen; + char *ai_canonname; + struct sockaddr *ai_addr; + struct addrinfo *ai_next; +}; + +/* Possible values for `ai_flags' field in `addrinfo' structure. */ +# define AI_PASSIVE 1 /* Socket address is intended for `bind'. */ +# define AI_CANONNAME 2 /* Request for canonical name. */ +# define AI_NUMERICHOST 3 /* Don't use name resolution. */ + +/* Error values for `getaddrinfo' function. */ +#define EAI_BADFLAGS -1 /* Invalid value for `ai_flags' field. */ +#define EAI_NONAME -2 /* NAME or SERVICE is unknown. */ +#define EAI_AGAIN -3 /* Temporary failure in name resolution. */ +#define EAI_FAIL -4 /* Non-recoverable failure in name res. */ +#define EAI_NODATA -5 /* No address associated with NAME. */ +#define EAI_FAMILY -6 /* `ai_family' not supported. */ +#define EAI_SOCKTYPE -7 /* `ai_socktype' not supported. */ +#define EAI_SERVICE -8 /* SERVICE not supported for `ai_socktype'. */ +#define EAI_ADDRFAMILY -9 /* Address family for NAME not supported. */ +#define EAI_MEMORY -10 /* Memory allocation failure. */ +#define EAI_SYSTEM -11 /* System error returned in `errno'. */ + +#define NI_MAXHOST 1025 +#define NI_MAXSERV 32 + +#define NI_NUMERICHOST 1 /* Don't try to look up hostname. */ +#define NI_NUMERICSERV 2 /* Don't convert port number to name. */ +#define NI_NOFQDN 4 /* Only return nodename portion. */ +#define NI_NAMEREQD 8 /* Don't return numeric addresses. */ +#define NI_DGRAM 16 /* Look up UDP service rather than TCP. */ + +extern int getaddrinfo (const char *, const char *, const struct addrinfo *, + struct addrinfo **); + +extern void freeaddrinfo (struct addrinfo *ai); + + + diff --git a/dcc/getopt.c b/dcc/getopt.c new file mode 100644 index 0000000..b5caccd --- /dev/null +++ b/dcc/getopt.c @@ -0,0 +1,755 @@ +/* Getopt for GNU. + NOTE: getopt is now part of the C library, so if you don't know what + "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu + before changing it! + + Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94 + Free Software Foundation, Inc. + + 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, 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. */ + +/* This tells Alpha OSF/1 not to define a getopt prototype in . + Ditto for AIX 3.2 and . */ +#ifndef _NO_PROTO +#define _NO_PROTO +#endif + +#ifdef HAVE_CONFIG_H +#if defined (emacs) || defined (CONFIG_BROKETS) +/* We use instead of "config.h" so that a compilation + using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h + (which it would do because it found this file in $srcdir). */ +#include +#else +#include "config.h" +#endif +#endif + +#ifndef __STDC__ +/* This is a separate conditional since some stdc systems + reject `defined (const)'. */ +#ifndef const +#define const +#endif +#endif + +#include + +#ifdef HAVE_STRING_H +#include +#endif + +/* Comment out all this code if we are using the GNU C Library, and are not + actually compiling the library itself. This code is part of the GNU C + Library, but also included in many other GNU distributions. Compiling + and linking in this code is a waste when using the GNU C library + (especially if it is a shared library). Rather than having every GNU + program understand `configure --with-gnu-libc' and omit the object files, + it is simpler to just do this in the source for each such file. */ + +#if defined (_LIBC) || !defined (__GNU_LIBRARY__) + + +/* This needs to come after some library #include + to get __GNU_LIBRARY__ defined. */ +#ifdef __GNU_LIBRARY__ +/* Don't include stdlib.h for non-GNU C libraries because some of them + contain conflicting prototypes for getopt. */ +#include +#endif /* GNU C library. */ + +/* This version of `getopt' appears to the caller like standard Unix `getopt' + but it behaves differently for the user, since it allows the user + to intersperse the options with the other arguments. + + As `getopt' works, it permutes the elements of ARGV so that, + when it is done, all the options precede everything else. Thus + all application programs are extended to handle flexible argument order. + + Setting the environment variable POSIXLY_CORRECT disables permutation. + Then the behavior is completely standard. + + GNU application programs can use a third alternative mode in which + they can distinguish the relative order of options and other arguments. */ + +#include "getopt.h" + +/* For communication from `getopt' to the caller. + When `getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when `ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +char *optarg = NULL; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to `getopt'. + + On entry to `getopt', zero means this is the first call; initialize. + + When `getopt' returns EOF, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, `optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +/* XXX 1003.2 says this must be 1 before any call. */ +int optind = 0; + +/* The next char to be scanned in the option-element + in which the last option character we returned was found. + This allows us to pick up the scan where we left off. + + If this is zero, or a null string, it means resume the scan + by advancing to the next ARGV-element. */ + +static char *nextchar; + +/* Callers store zero here to inhibit the error message + for unrecognized options. */ + +int opterr = 1; + +/* Set to an option character which was unrecognized. + This must be initialized on some systems to avoid linking in the + system's own getopt implementation. */ + +int optopt = '?'; + +/* Describe how to deal with options that follow non-option ARGV-elements. + + If the caller did not specify anything, + the default is REQUIRE_ORDER if the environment variable + POSIXLY_CORRECT is defined, PERMUTE otherwise. + + REQUIRE_ORDER means don't recognize them as options; + stop option processing when the first non-option is seen. + This is what Unix does. + This mode of operation is selected by either setting the environment + variable POSIXLY_CORRECT, or using `+' as the first character + of the list of option characters. + + PERMUTE is the default. We permute the contents of ARGV as we scan, + so that eventually all the non-options are at the end. This allows options + to be given in any order, even with programs that were not written to + expect this. + + RETURN_IN_ORDER is an option available to programs that were written + to expect options and other ARGV-elements in any order and that care about + the ordering of the two. We describe each non-option ARGV-element + as if it were the argument of an option with character code 1. + Using `-' as the first character of the list of option characters + selects this mode of operation. + + The special argument `--' forces an end of option-scanning regardless + of the value of `ordering'. In the case of RETURN_IN_ORDER, only + `--' can cause `getopt' to return EOF with `optind' != ARGC. */ + +static enum +{ + REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER +} ordering; + +/* Value of POSIXLY_CORRECT environment variable. */ +static char *posixly_correct; + +#ifdef __GNU_LIBRARY__ +/* We want to avoid inclusion of string.h with non-GNU libraries + because there are many ways it can cause trouble. + On some systems, it contains special magic macros that don't work + in GCC. */ +#include +#define my_index strchr +#else + +/* Avoid depending on library functions or files + whose names are inconsistent. */ + +char *getenv (); + +static char * +my_index (str, chr) + const char *str; + int chr; +{ + while (*str) + { + if (*str == chr) + return (char *) str; + str++; + } + return 0; +} + +/* If using GCC, we can safely declare strlen this way. + If not using GCC, it is ok not to declare it. */ +#ifdef __GNUC__ +/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h. + That was relevant to code that was here before. */ +#ifndef __STDC__ +/* gcc with -traditional declares the built-in strlen to return int, + and has done so at least since version 2.4.5. -- rms. */ +extern int strlen (const char *); +#endif /* not __STDC__ */ +#endif /* __GNUC__ */ + +#endif /* not __GNU_LIBRARY__ */ + +/* Handle permutation of arguments. */ + +/* Describe the part of ARGV that contains non-options that have + been skipped. `first_nonopt' is the index in ARGV of the first of them; + `last_nonopt' is the index after the last of them. */ + +static int first_nonopt; +static int last_nonopt; + +/* Exchange two adjacent subsequences of ARGV. + One subsequence is elements [first_nonopt,last_nonopt) + which contains all the non-options that have been skipped so far. + The other is elements [last_nonopt,optind), which contains all + the options processed since those non-options were skipped. + + `first_nonopt' and `last_nonopt' are relocated so that they describe + the new indices of the non-options in ARGV after they are moved. */ + +static void +exchange (argv) + char **argv; +{ + int bottom = first_nonopt; + int middle = last_nonopt; + int top = optind; + char *tem; + + /* Exchange the shorter segment with the far end of the longer segment. + That puts the shorter segment into the right place. + It leaves the longer segment in the right place overall, + but it consists of two parts that need to be swapped next. */ + + while (top > middle && middle > bottom) + { + if (top - middle > middle - bottom) + { + /* Bottom segment is the short one. */ + int len = middle - bottom; + register int i; + + /* Swap it with the top part of the top segment. */ + for (i = 0; i < len; i++) + { + tem = argv[bottom + i]; + argv[bottom + i] = argv[top - (middle - bottom) + i]; + argv[top - (middle - bottom) + i] = tem; + } + /* Exclude the moved bottom segment from further swapping. */ + top -= len; + } + else + { + /* Top segment is the short one. */ + int len = top - middle; + register int i; + + /* Swap it with the bottom part of the bottom segment. */ + for (i = 0; i < len; i++) + { + tem = argv[bottom + i]; + argv[bottom + i] = argv[middle + i]; + argv[middle + i] = tem; + } + /* Exclude the moved top segment from further swapping. */ + bottom += len; + } + } + + /* Update records for the slots the non-options now occupy. */ + + first_nonopt += (optind - last_nonopt); + last_nonopt = optind; +} + +/* Initialize the internal data when the first call is made. */ + +static const char * +_getopt_initialize (optstring) + const char *optstring; +{ + /* Start processing options with ARGV-element 1 (since ARGV-element 0 + is the program name); the sequence of previously skipped + non-option ARGV-elements is empty. */ + + first_nonopt = last_nonopt = optind = 1; + + nextchar = NULL; + + posixly_correct = getenv ("POSIXLY_CORRECT"); + + /* Determine how to handle the ordering of options and nonoptions. */ + + if (optstring[0] == '-') + { + ordering = RETURN_IN_ORDER; + ++optstring; + } + else if (optstring[0] == '+') + { + ordering = REQUIRE_ORDER; + ++optstring; + } + else if (posixly_correct != NULL) + ordering = REQUIRE_ORDER; + else + ordering = PERMUTE; + + return optstring; +} + +/* Scan elements of ARGV (whose length is ARGC) for option characters + given in OPTSTRING. + + If an element of ARGV starts with '-', and is not exactly "-" or "--", + then it is an option element. The characters of this element + (aside from the initial '-') are option characters. If `getopt' + is called repeatedly, it returns successively each of the option characters + from each of the option elements. + + If `getopt' finds another option character, it returns that character, + updating `optind' and `nextchar' so that the next call to `getopt' can + resume the scan with the following option character or ARGV-element. + + If there are no more option characters, `getopt' returns `EOF'. + Then `optind' is the index in ARGV of the first ARGV-element + that is not an option. (The ARGV-elements have been permuted + so that those that are not options now come last.) + + OPTSTRING is a string containing the legitimate option characters. + If an option character is seen that is not listed in OPTSTRING, + return '?' after printing an error message. If you set `opterr' to + zero, the error message is suppressed but we still return '?'. + + If a char in OPTSTRING is followed by a colon, that means it wants an arg, + so the following text in the same ARGV-element, or the text of the following + ARGV-element, is returned in `optarg'. Two colons mean an option that + wants an optional arg; if there is text in the current ARGV-element, + it is returned in `optarg', otherwise `optarg' is set to zero. + + If OPTSTRING starts with `-' or `+', it requests different methods of + handling the non-option ARGV-elements. + See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. + + Long-named options begin with `--' instead of `-'. + Their names may be abbreviated as long as the abbreviation is unique + or is an exact match for some defined option. If they have an + argument, it follows the option name in the same ARGV-element, separated + from the option name by a `=', or else the in next ARGV-element. + When `getopt' finds a long-named option, it returns 0 if that option's + `flag' field is nonzero, the value of the option's `val' field + if the `flag' field is zero. + + The elements of ARGV aren't really const, because we permute them. + But we pretend they're const in the prototype to be compatible + with other systems. + + LONGOPTS is a vector of `struct option' terminated by an + element containing a name which is zero. + + LONGIND returns the index in LONGOPT of the long-named option found. + It is only valid when a long-named option has been found by the most + recent call. + + If LONG_ONLY is nonzero, '-' as well as '--' can introduce + long-named options. */ + +int +_getopt_internal (argc, argv, optstring, longopts, longind, long_only) + int argc; + char *const *argv; + const char *optstring; + const struct option *longopts; + int *longind; + int long_only; +{ + optarg = NULL; + + if (optind == 0) + optstring = _getopt_initialize (optstring); + + if (nextchar == NULL || *nextchar == '\0') + { + /* Advance to the next ARGV-element. */ + + if (ordering == PERMUTE) + { + /* If we have just processed some options following some non-options, + exchange them so that the options come first. */ + + if (first_nonopt != last_nonopt && last_nonopt != optind) + exchange ((char **) argv); + else if (last_nonopt != optind) + first_nonopt = optind; + + /* Skip any additional non-options + and extend the range of non-options previously skipped. */ + + while (optind < argc + && (argv[optind][0] != '-' || argv[optind][1] == '\0')) + optind++; + last_nonopt = optind; + } + + /* The special ARGV-element `--' means premature end of options. + Skip it like a null option, + then exchange with previous non-options as if it were an option, + then skip everything else like a non-option. */ + + if (optind != argc && !strcmp (argv[optind], "--")) + { + optind++; + + if (first_nonopt != last_nonopt && last_nonopt != optind) + exchange ((char **) argv); + else if (first_nonopt == last_nonopt) + first_nonopt = optind; + last_nonopt = argc; + + optind = argc; + } + + /* If we have done all the ARGV-elements, stop the scan + and back over any non-options that we skipped and permuted. */ + + if (optind == argc) + { + /* Set the next-arg-index to point at the non-options + that we previously skipped, so the caller will digest them. */ + if (first_nonopt != last_nonopt) + optind = first_nonopt; + return EOF; + } + + /* If we have come to a non-option and did not permute it, + either stop the scan or describe it to the caller and pass it by. */ + + if ((argv[optind][0] != '-' || argv[optind][1] == '\0')) + { + if (ordering == REQUIRE_ORDER) + return EOF; + optarg = argv[optind++]; + return 1; + } + + /* We have found another option-ARGV-element. + Skip the initial punctuation. */ + + nextchar = (argv[optind] + 1 + + (longopts != NULL && argv[optind][1] == '-')); + } + + /* Decode the current option-ARGV-element. */ + + /* Check whether the ARGV-element is a long option. + + If long_only and the ARGV-element has the form "-f", where f is + a valid short option, don't consider it an abbreviated form of + a long option that starts with f. Otherwise there would be no + way to give the -f short option. + + On the other hand, if there's a long option "fubar" and + the ARGV-element is "-fu", do consider that an abbreviation of + the long option, just like "--fu", and not "-f" with arg "u". + + This distinction seems to be the most useful approach. */ + + if (longopts != NULL + && (argv[optind][1] == '-' + || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1]))))) + { + char *nameend; + const struct option *p; + const struct option *pfound = NULL; + int exact = 0; + int ambig = 0; + int indfound; + int option_index; + + for (nameend = nextchar; *nameend && *nameend != '='; nameend++) + /* Do nothing. */ ; + + /* Test all long options for either exact match + or abbreviated matches. */ + for (p = longopts, option_index = 0; p->name; p++, option_index++) + if (!strncmp (p->name, nextchar, nameend - nextchar)) + { + if (nameend - nextchar == (int) strlen (p->name)) + { + /* Exact match found. */ + pfound = p; + indfound = option_index; + exact = 1; + break; + } + else if (pfound == NULL) + { + /* First nonexact match found. */ + pfound = p; + indfound = option_index; + } + else + /* Second or later nonexact match found. */ + ambig = 1; + } + + if (ambig && !exact) + { + if (opterr) + fprintf (stderr, "%s: option `%s' is ambiguous\n", + argv[0], argv[optind]); + nextchar += strlen (nextchar); + optind++; + return '?'; + } + + if (pfound != NULL) + { + option_index = indfound; + optind++; + if (*nameend) + { + /* Don't test has_arg with >, because some C compilers don't + allow it to be used on enums. */ + if (pfound->has_arg) + optarg = nameend + 1; + else + { + if (opterr) + { + if (argv[optind - 1][1] == '-') + /* --option */ + fprintf (stderr, + "%s: option `--%s' doesn't allow an argument\n", + argv[0], pfound->name); + else + /* +option or -option */ + fprintf (stderr, + "%s: option `%c%s' doesn't allow an argument\n", + argv[0], argv[optind - 1][0], pfound->name); + } + nextchar += strlen (nextchar); + return '?'; + } + } + else if (pfound->has_arg == 1) + { + if (optind < argc) + optarg = argv[optind++]; + else + { + if (opterr) + fprintf (stderr, "%s: option `%s' requires an argument\n", + argv[0], argv[optind - 1]); + nextchar += strlen (nextchar); + return optstring[0] == ':' ? ':' : '?'; + } + } + nextchar += strlen (nextchar); + if (longind != NULL) + *longind = option_index; + if (pfound->flag) + { + *(pfound->flag) = pfound->val; + return 0; + } + return pfound->val; + } + + /* Can't find it as a long option. If this is not getopt_long_only, + or the option starts with '--' or is not a valid short + option, then it's an error. + Otherwise interpret it as a short option. */ + if (!long_only || argv[optind][1] == '-' + || my_index (optstring, *nextchar) == NULL) + { + if (opterr) + { + if (argv[optind][1] == '-') + /* --option */ + fprintf (stderr, "%s: unrecognized option `--%s'\n", + argv[0], nextchar); + else + /* +option or -option */ + fprintf (stderr, "%s: unrecognized option `%c%s'\n", + argv[0], argv[optind][0], nextchar); + } + nextchar = (char *) ""; + optind++; + return '?'; + } + } + + /* Look at and handle the next short option-character. */ + + { + char c = *nextchar++; + char *temp = my_index (optstring, c); + + /* Increment `optind' when we start to process its last character. */ + if (*nextchar == '\0') + ++optind; + + if (temp == NULL || c == ':') + { + if (opterr) + { + if (posixly_correct) + /* 1003.2 specifies the format of this message. */ + fprintf (stderr, "%s: illegal option -- %c\n", argv[0], c); + else + fprintf (stderr, "%s: invalid option -- %c\n", argv[0], c); + } + optopt = c; + return '?'; + } + if (temp[1] == ':') + { + if (temp[2] == ':') + { + /* This is an option that accepts an argument optionally. */ + if (*nextchar != '\0') + { + optarg = nextchar; + optind++; + } + else + optarg = NULL; + nextchar = NULL; + } + else + { + /* This is an option that requires an argument. */ + if (*nextchar != '\0') + { + optarg = nextchar; + /* If we end this ARGV-element by taking the rest as an arg, + we must advance to the next element now. */ + optind++; + } + else if (optind == argc) + { + if (opterr) + { + /* 1003.2 specifies the format of this message. */ + fprintf (stderr, "%s: option requires an argument -- %c\n", + argv[0], c); + } + optopt = c; + if (optstring[0] == ':') + c = ':'; + else + c = '?'; + } + else + /* We already incremented `optind' once; + increment it again when taking next ARGV-elt as argument. */ + optarg = argv[optind++]; + nextchar = NULL; + } + } + return c; + } +} + +int +getopt (argc, argv, optstring) + int argc; + char *const *argv; + const char *optstring; +{ + return _getopt_internal (argc, argv, optstring, + (const struct option *) 0, + (int *) 0, + 0); +} + +#endif /* _LIBC or not __GNU_LIBRARY__. */ + +#ifdef TEST + +/* Compile with -DTEST to make an executable for use in testing + the above definition of `getopt'. */ + +int +main (argc, argv) + int argc; + char **argv; +{ + int c; + int digit_optind = 0; + + while (1) + { + int this_option_optind = optind ? optind : 1; + + c = getopt (argc, argv, "abc:d:0123456789"); + if (c == EOF) + break; + + switch (c) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (digit_optind != 0 && digit_optind != this_option_optind) + printf ("digits occur in two different argv-elements.\n"); + digit_optind = this_option_optind; + printf ("option %c\n", c); + break; + + case 'a': + printf ("option a\n"); + break; + + case 'b': + printf ("option b\n"); + break; + + case 'c': + printf ("option c with value `%s'\n", optarg); + break; + + case '?': + break; + + default: + printf ("?? getopt returned character code 0%o ??\n", c); + } + } + + if (optind < argc) + { + printf ("non-option ARGV-elements: "); + while (optind < argc) + printf ("%s ", argv[optind++]); + printf ("\n"); + } + + exit (0); +} + +#endif /* TEST */ diff --git a/dcc/getopt.h b/dcc/getopt.h new file mode 100644 index 0000000..c872f41 --- /dev/null +++ b/dcc/getopt.h @@ -0,0 +1,125 @@ +/* Declarations for getopt. + Copyright (C) 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc. + + 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, 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. */ + +#ifndef _GETOPT_H +#define _GETOPT_H 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* For communication from `getopt' to the caller. + When `getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when `ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +extern char *optarg; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to `getopt'. + + On entry to `getopt', zero means this is the first call; initialize. + + When `getopt' returns EOF, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, `optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +extern int optind; + +/* Callers store zero here to inhibit the error message `getopt' prints + for unrecognized options. */ + +extern int opterr; + +/* Set to an option character which was unrecognized. */ + +extern int optopt; + +/* Describe the long-named options requested by the application. + The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector + of `struct option' terminated by an element containing a name which is + zero. + + The field `has_arg' is: + no_argument (or 0) if the option does not take an argument, + required_argument (or 1) if the option requires an argument, + optional_argument (or 2) if the option takes an optional argument. + + If the field `flag' is not NULL, it points to a variable that is set + to the value given in the field `val' when the option is found, but + left unchanged if the option is not found. + + To have a long-named option do something other than set an `int' to + a compiled-in constant, such as set a value from `optarg', set the + option's `flag' field to zero and its `val' field to a nonzero + value (the equivalent single-letter option character, if there is + one). For long options that have a zero `flag' field, `getopt' + returns the contents of the `val' field. */ + +struct option +{ +#if __STDC__ + const char *name; +#else + char *name; +#endif + /* has_arg can't be an enum because some compilers complain about + type mismatches in all the code that assumes it is an int. */ + int has_arg; + int *flag; + int val; +}; + +/* Names for the values of the `has_arg' field of `struct option'. */ + +#define no_argument 0 +#define required_argument 1 +#define optional_argument 2 + +#if __STDC__ +#if defined(__GNU_LIBRARY__) +/* Many other libraries have conflicting prototypes for getopt, with + differences in the consts, in stdlib.h. To avoid compilation + errors, only prototype getopt for the GNU C library. */ +extern int getopt (int argc, char *const *argv, const char *shortopts); +#else /* not __GNU_LIBRARY__ */ +extern int getopt (); +#endif /* not __GNU_LIBRARY__ */ +extern int getopt_long (int argc, char *const *argv, const char *shortopts, + const struct option *longopts, int *longind); +extern int getopt_long_only (int argc, char *const *argv, + const char *shortopts, + const struct option *longopts, int *longind); + +/* Internal only. Users should not call this directly. */ +extern int _getopt_internal (int argc, char *const *argv, + const char *shortopts, + const struct option *longopts, int *longind, + int long_only); +#else /* not __STDC__ */ +extern int getopt (); +extern int getopt_long (); +extern int getopt_long_only (); + +extern int _getopt_internal (); +#endif /* not __STDC__ */ + +#ifdef __cplusplus +} +#endif + +#endif /* _GETOPT_H */ diff --git a/dcc/getopt1.c b/dcc/getopt1.c new file mode 100644 index 0000000..a4f1976 --- /dev/null +++ b/dcc/getopt1.c @@ -0,0 +1,183 @@ +/* getopt_long and getopt_long_only entry points for GNU getopt. + Copyright (C) 1987, 88, 89, 90, 91, 92, 1993 + Free Software Foundation, Inc. + + 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, 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. */ + +#ifdef HAVE_CONFIG_H +#if defined (emacs) || defined (CONFIG_BROKETS) +/* We use instead of "config.h" so that a compilation + using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h + (which it would do because it found this file in $srcdir). */ +#include +#else +#include "config.h" +#endif +#endif + +#include "getopt.h" + +#ifndef __STDC__ +/* This is a separate conditional since some stdc systems + reject `defined (const)'. */ +#ifndef const +#define const +#endif +#endif + +#include + +/* Comment out all this code if we are using the GNU C Library, and are not + actually compiling the library itself. This code is part of the GNU C + Library, but also included in many other GNU distributions. Compiling + and linking in this code is a waste when using the GNU C library + (especially if it is a shared library). Rather than having every GNU + program understand `configure --with-gnu-libc' and omit the object files, + it is simpler to just do this in the source for each such file. */ + +#if defined (_LIBC) || !defined (__GNU_LIBRARY__) + + +/* This needs to come after some library #include + to get __GNU_LIBRARY__ defined. */ +#ifdef __GNU_LIBRARY__ +#include +#else +char *getenv (); +#endif + +#ifndef NULL +#define NULL 0 +#endif + +int +getopt_long (argc, argv, options, long_options, opt_index) + int argc; + char *const *argv; + const char *options; + const struct option *long_options; + int *opt_index; +{ + return _getopt_internal (argc, argv, options, long_options, opt_index, 0); +} + +/* Like getopt_long, but '-' as well as '--' can indicate a long option. + If an option that starts with '-' (not '--') doesn't match a long option, + but does match a short option, it is parsed as a short option + instead. */ + +int +getopt_long_only (argc, argv, options, long_options, opt_index) + int argc; + char *const *argv; + const char *options; + const struct option *long_options; + int *opt_index; +{ + return _getopt_internal (argc, argv, options, long_options, opt_index, 1); +} + + +#endif /* _LIBC or not __GNU_LIBRARY__. */ + +#ifdef TEST + +#include + +int +main (argc, argv) + int argc; + char **argv; +{ + int c; + int digit_optind = 0; + + while (1) + { + int this_option_optind = optind ? optind : 1; + int option_index = 0; + static struct option long_options[] = + { + {"add", 1, 0, 0}, + {"append", 0, 0, 0}, + {"delete", 1, 0, 0}, + {"verbose", 0, 0, 0}, + {"create", 0, 0, 0}, + {"file", 1, 0, 0}, + {0, 0, 0, 0} + }; + + c = getopt_long (argc, argv, "abc:d:0123456789", + long_options, &option_index); + if (c == EOF) + break; + + switch (c) + { + case 0: + printf ("option %s", long_options[option_index].name); + if (optarg) + printf (" with arg %s", optarg); + printf ("\n"); + break; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (digit_optind != 0 && digit_optind != this_option_optind) + printf ("digits occur in two different argv-elements.\n"); + digit_optind = this_option_optind; + printf ("option %c\n", c); + break; + + case 'a': + printf ("option a\n"); + break; + + case 'b': + printf ("option b\n"); + break; + + case 'c': + printf ("option c with value `%s'\n", optarg); + break; + + case 'd': + printf ("option d with value `%s'\n", optarg); + break; + + case '?': + break; + + default: + printf ("?? getopt returned character code 0%o ??\n", c); + } + } + + if (optind < argc) + { + printf ("non-option ARGV-elements: "); + while (optind < argc) + printf ("%s ", argv[optind++]); + printf ("\n"); + } + + exit (0); +} + +#endif /* TEST */ diff --git a/dcc/naddr.ml b/dcc/naddr.ml new file mode 100644 index 0000000..24179a9 --- /dev/null +++ b/dcc/naddr.ml @@ -0,0 +1,77 @@ +(* Network address handling module. + +This file is part of Liece. + +Author: Daiki Ueno +Created: 1998-09-28 +Revised: 1999-01-28 +Keywords: IRC, liece, DCC + +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, 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 GNU Emacs; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. *) + +open Num +open Big_int +open Str + +let encode str = + let _ = string_match + (regexp "\([0-9]+\)\.\([0-9]+\)\.\([0-9]+\)\.\([0-9]+\)") str 0 in + let (a1, a2, a3, a4) = + try + int_of_string (matched_group 1 str), + int_of_string (matched_group 2 str), + int_of_string (matched_group 3 str), + int_of_string (matched_group 4 str) + with + _ -> + Printf.eprintf "Invalid address\n"; flush Pervasives.stdout; exit 1; + in + let (s1, s2, s3, s4) = + Int (1 lsl 24), + Int (1 lsl 16), + Int (1 lsl 8), + Int 1 + in + let ul = + ((Int a1) */ s1) +/ ((Int a2) */ s2) +/ ((Int a3) */ s3) +/ (Int a4) + in + string_of_num ul + +let decode str = + let ul = + try + num_of_string str + with + _ -> + Printf.eprintf "Invalid address\n"; flush Pervasives.stdout; exit 1; + in + let (s1, s2, s3, s4) = + Int (1 lsl 24), + Int (1 lsl 16), + Int (1 lsl 8), + Int 1 + in + let (a1, a2, a3, a4) = + floor_num (ul // s1), + floor_num ((mod_num ul s1) // s2), + floor_num ((mod_num (mod_num ul s1) s2) // s3), + (mod_num (mod_num (mod_num ul s1) s2) s3) + in + Printf.sprintf "%s.%s.%s.%s" + (string_of_num a1) + (string_of_num a2) + (string_of_num a3) + (string_of_num a4) diff --git a/dcc/naddr.mli b/dcc/naddr.mli new file mode 100644 index 0000000..0c9917a --- /dev/null +++ b/dcc/naddr.mli @@ -0,0 +1,31 @@ +(* Network address handling module. + +This file is part of Liece. + +Author: Daiki Ueno +Created: 1998-09-28 +Revised: 1999-01-28 +Keywords: IRC, liece, DCC + +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, 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 GNU Emacs; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. *) + +val encode : string -> string;; + (* [Naddr.encode s] encodes the XXX.XXX.XXX.XXX address [s] into + another string packed by network byte order. *) + +val decode : string -> string;; + (* [Naddr.decode s] does the inverse job than [Naddr.encode], + restoring initial expression of address. *) diff --git a/dcc/tcp.c b/dcc/tcp.c new file mode 100644 index 0000000..266b1ad --- /dev/null +++ b/dcc/tcp.c @@ -0,0 +1,229 @@ +/* + * TCP/IP stream emulation for GNU Emacs. + * Copyright (C) 1988, 1989, 1992, 1993 Free Software Foundation, Inc. + + * Author: Masanobu Umeda + * Daiki Ueno + +This file is part of GNU Emacs. + +GNU Emacs 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. + +GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define _GNU_SOURCE +#include + +#ifdef HAVE_SOCKS_H +#include +#endif + +#ifndef HAVE_GETADDRINFO +#include "getaddrinfo.h" +#endif /* !HAVE_GETADDRINFO */ + +#ifdef HAVE_BASENAME +# ifdef HAVE_LIBGEN_H +# include +# ifdef basename +# undef basename +# endif +# endif +# include +#else +# define basename(path) (rindex((path), '/') + 1) +#endif + +#ifndef NI_MAXHOST +# define NI_MAXHOST 1025 +#endif + +static char *progname; + +void version () { + printf("%s (Liece) 1.4.0\n" + "Copyright (C) 1998, 1999 Daiki Ueno\n" + "This is free software; see the source for copying conditions. There is NO\n" + "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n", + progname); +} + +void usage() { + printf("Usage: %s [options] host [service]\n", progname); +} + + +main (argc, argv) + int argc; + char *argv[]; +{ + struct protoent *proto; + + struct addrinfo *in, hints; + + char *hostname = NULL, *service = "ircd"; + int family, port; + fd_set *readfds, *writefds; + int server, emacsIn = fileno (stdin), emacsOut = fileno (stdout); + char buffer[1024], *retry; + int nbuffer, wret, false = 0; + int c; + + progname = (char *) basename (argv[0]); + + while (1) { + int this_option_optind = optind ? optind : 1; + int option_index = 0; + static struct option long_options[] = { + {"version", 0, 0, 'v'}, + {"help", 0, 0, 'h'}, + {0, 0, 0, 0} + }; + + c = getopt_long (argc, argv, "vh", long_options, &option_index); + if (c == -1) + break; + + switch (c) { + case 'v': + version(); + exit(1); + break; + case 'h': + usage(); + exit(1); + break; + default: + break; + } + } + + if (argc < 2) + { + usage(); + exit (1); + } + if (argc >= 2) + hostname = argv[1]; + if (argc >= 3) + service = argv[2]; + + if ((proto = getprotobyname ("tcp")) == NULL) { + perror ("getprotobyname"); + exit (1); + } + + memset (&hints, 0, sizeof (hints)); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = proto->p_proto; + if (getaddrinfo (hostname, service, &hints, &in) < 0) { + perror ("getaddrinfo"); + exit (1); + } + + if ((server = socket (in->ai_family, in->ai_socktype, 0)) < 0) { + perror ("socket"); + exit (1); + } + + if (setsockopt (server, SOL_SOCKET, SO_REUSEADDR, + (const char *) &false, sizeof (false))) { + perror ("setsockopt"); + exit (1); + } + + if (connect (server, in->ai_addr, in->ai_addrlen) < 0) { + perror ("connect"); + close (server); + exit (1); + } + +#ifdef O_NDELAY + fcntl (server, F_SETFL, O_NDELAY); +#endif /* O_NDELAY */ + + /* Connection established. */ + + readfds = (fd_set *) calloc(server + 1, sizeof (fd_mask)); + writefds = (fd_set *) calloc(server + 1, sizeof (fd_mask)); + + while (1) + { + FD_SET (server, readfds); + FD_SET (emacsIn, readfds); + if (select (server+1, readfds, NULL, NULL, NULL) == -1) + { + perror ("select"); + exit (1); + } + if (FD_ISSET (emacsIn, readfds)) + { + /* From Emacs */ + nbuffer = read (emacsIn, buffer, sizeof buffer -1); + + if (nbuffer == 0) + goto finish; + for (retry = buffer; nbuffer > 0; nbuffer -= wret, retry += wret) + { + FD_SET (server, writefds); + if (select (server+1, NULL, writefds, NULL, NULL) == -1) + { + perror ("select"); + exit (1); + } + wret = write (server, retry, nbuffer); + if (wret < 0) goto finish; + } + } + if (FD_ISSET (server, readfds)) + { + /* From NNTP server */ + nbuffer = read (server, buffer, sizeof buffer -1); + if (nbuffer == 0) + goto finish; + for (retry = buffer; nbuffer > 0; nbuffer -= wret, retry += wret) + { + FD_SET (emacsOut, writefds); + if (select (emacsOut+1, NULL, writefds, NULL, NULL) == -1) + { + perror ("select"); + exit (1); + } + wret = write (emacsOut, retry, nbuffer); + if (wret < 0) goto finish; + } + } + } + + /* End of communication. */ + finish: + close (server); + close (emacsIn); + close (emacsOut); + exit (0); +} diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 0000000..b01a4b6 --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,33 @@ +info_TEXINFOS = liece-ja.texi +EXTRA_DIST = sample.dot.liece.in +CLEANFILES = *~ +DISTCLEANFILES = sample.dot.liece liece-ja.info + +if USE_PACKAGE +icondir = $(packagedir)/etc/$(PACKAGE)/icons +catalogdir = $(packagedir)/etc/$(PACKAGE)/po +styledir = $(packagedir)/etc/$(PACKAGE)/styles +infodir = $(packagedir)/info +else +icondir = $(pkgdatadir)/icons +catalogdir = $(pkgdatadir)/po +styledir = $(pkgdatadir)/styles +infodir = $(prefix)/info +endif + +SUFFIXES = .texi .info + +all: liece-ja.info sample.dot.liece + +.texi.info: + $(EMACS) -batch -q -no-site-file \ + -l $(top_srcdir)/lisp/liece-make.el \ + -f make-liece-info-files $< + +sample.dot.liece: sample.dot.liece.in + @$(INSTALL_DATA) sample.dot.liece.in sample.dot.liece + @$(EMACS) -batch -q -no-site-file \ + -l $(top_srcdir)/lisp/liece-make.el \ + -f make-liece-sample-files \ + $@ $(bindir)/dcc $(icondir) $(catalogdir) $(styledir) + diff --git a/doc/liece-ja.texi b/doc/liece-ja.texi new file mode 100644 index 0000000..228cdb4 --- /dev/null +++ b/doc/liece-ja.texi @@ -0,0 +1,719 @@ +\input texinfo @c -*-texinfo -*- coding: iso-2022-jp -*- +@setfilename liece-ja.info +@settitle Liece -- IRC Client On Emacsen +@synindex pg cp +@finalout + +@direntry +* Liece-ja: (liece-ja). IRC Client On Emacsen +@end direntry + +@titlepage +@title Liece $B@bL@=q(B +@author $B>eLn(B $BG55#(B +@subtitle 2000/04/04 +@end titlepage + +@ifinfo +@node Top, Overview, (dir), (dir) +@top Liece $B@bL@=q(B + +@ifinfo +$B$3$NJ8=q$G$O(B Liece $B%P!<%8%g%s(B 1.4 $B$K$D$$$F2r@b$7$^$9!#(B +Liece $B$K4X$9$kpJs$O(B Liece $B$N8x<0%[!<%`%Z!<%8(B +(http://www.unixuser.org/~ueno/liece/) +$B$KH?1G$5$l$k$3$H$G$7$g$&!#(B +@end ifinfo + +@menu +* Overview:: $B$O$8$a$K(B +* Working environments:: $BF0:n4D6-(B +* Getting source:: $BF~e$GF0:n$9$k(B IRC (Internet Relay Chat, RFC 1459)$B$N%/(B +$B%i%$%"%s%Hl9g$K$N$_!"%j%j!<%9$NG[I[$,9T$o$l$^$9!#(B +$BG[I[$O(B HTTP $B$K$h$j(B CVS $B%5!<%P$X$N%m%0%$%s(B + +@example +% cvs -d :pserver:anonymous@@cvs.m17n.org:/cvs/root login + +CVS password: [CR] # NULL string +@end example + +@subsection $B%b%8%e!<%k$N(B checkout + +@example +% cvs -d :pserver:anonymousl@@cvs.m17n.org:/cvs/root checkout liece +@end example + +@node Installation, Using Liece, Getting source, Top +@chapter $BF3F~J}K!(B + +@menu +* Prerequirements:: $B=`Hw(B +* Compilation:: $B%3%s%Q%$%k(B +* Setting .emacs:: .emacs $B$N@_Dj(B +* Setting .liece:: .liece/init.el $B$N@_Dj(B +@end menu + +@node Prerequirements, Compilation, Installation, Installation +@section $B=`Hw(B + +@noindent +Liece $B$N%$%s%9%H!<%k$K$O0J2<$NG[I[$,JLESI,MW$K$J$j$^$9!#(B + +@table @samp +@item APEL (A Portable Emacs Library) +ftp://ftp.m17n.org/pub/mule/apel/ + +@item custom +http://www.dina.kvl.dk/~abraham/custom/ + +@end table + +custom $B$O!":G6a$N(B Emacs $B$NG[I[$K4^$^$l$F$$$^$9!#(B +APEL $B$K4X$7$F$O!":G?7$N%P!<%8%g%s$N$4MxMQ$r$*4+$a$7$^$9!#(B +($B%j%j!<%9$NG[I[$K$O!"$=$N;~E@$GBP1~$9$k:G?7$N(B APEL $B$,4^$^$l$F$$$^$9!#(B) + +@node Compilation, Setting .emacs, Prerequirements, Installation +@section $B%3%s%Q%$%k(B + +$B%3%s%Q%$%k$N\$7$/$OF1:-$N(B @file{INSTALL} $B$r;2>H$7$F$/$@$5$$!#(B + +@example +% ./configure +% make +% su +Password: ultrasecret +# make install +@end example + + +XEmacs $B$N(B package $B$H$7$F%$%s%9%H!<%k$9$k$K$O!"0J2<$N$h$&$K$7$^$9!#(B + +@example +% ./configure --enable-package --with-emacs=xemacs +% make +% su +Password: +# make install +@end example + +@noindent +@strong{[$B%3%s%Q%$%k;~$N7Y9p$K$D$$$F(B]} +@quotation +$B%3%s%Q%$%k;~$K(B `... not found' $B$d(B `BROKEN FACILITY DETECTED:' +$B$J$I$N7Y9p$,I=<($5$l$k>l9g$,$"$j$^$9$,!"FC$KLdBj$O$"$j$^$;$s!#(B +@end quotation + +@node Setting .emacs, Setting .liece, Compilation, Installation +@section .emacs $B$N@_Dj(B + +(XEmacs $B$N(B package $B$H$7$F%$%s%9%H!<%k$7$?>l9g$K$O!"(B +$B2?$b5-=R$9$kI,MW$O$"$j$^$;$s!#$3$N@a$OFI$_Ht$P$7$F2<$5$$!#(B) + +Emacs $B$b$7$/$O(B Mule $B$r$*;H$$$J$i!"(BAPEL $B5Z$S(B Liece $B$r(B +install $B$7$?>l=j$r(B subdirs.el $B$K0J2<$N$h$&$K;XDj$7$F2<$5$$!#(B +@lisp +(normal-top-level-add-to-load-path '("apel" "liece")) +@end lisp + +Emacs 20.3 $B0J9_$N(B Emacs$B!"$b$7$/$O(B XEmacs $B$r$*;H$$$J$i!"(B +@lisp +(normal-top-level-add-subdirs-to-load-path) +@end lisp + +$B$H=q$/$@$1$GNI$$$G$7$g$&!#(B + +Emacs 19 $B0JA0$N%P!<%8%g%s$N(B Emacs $B$G;HMQ$9$k>l9g$K$O!"(B +$B$h$jD>@\E*$J%Q%9$N;XDj$,I,MW$K$J$j$^$9!#(B + +$B:G8e$K!"0J2<$N0l9T$r2C$($F2<$5$$!#(B +@lisp +(autoload 'liece "liece" nil t) +@end lisp + + +@node Setting .liece, , Setting .emacs, Installation +@section ~/.liece $B$N@_Dj(B + +$BG[I[Cf$N(B @file{doc} $B%G%#%l%/%H%j$+$i(B +@file{sample.dot.liece} $B$r(B @file{~/.liece/init.el} +$B$H$7$F%3%T!<$7$FJT=8$7$^$9!#(B + +$B3FH$7$F$/$@$5$$!#(B +$B$[$H$s$I$N@_Dj9`L\$O!"(B@kbd{M-x customize} $B$K$h$j@_Dj$9$k$3$H$b$G$-$^$9!#(B + +$B%3%^%s%I%i%$%s%*%W%7%g%s$K$h$jJ#?t$N@_Dj%U%!%$%k$r;H$$J,$1$k$K$O!"(B +$B0J2<$N$h$&$K$7$^$9!#(B + +@example +% emacs -f liece ~/.liece.local +@end example + +@node Using Liece, Customization, Installation, Top +@chapter $B;HMQJ}K!(B + +$B4{$K(B CHOCOA $B$d(B liece $B$r$*;H$$$K$J$i$l$?$3$H$N$"$kJ}$O!"(B +$BBgBN$NA`:n$O$*J,$+$j$@$H;W$$$^$9!#(B + +$BA`:n$O>/$7$:$D0[$J$j$^$9$,!"(Birchat $B$N;H$$J}(B +@samp{http://irc.kyoto-u.ac.jp/irchat.html} $B$,;29M$K$J$k$+$bCN$l$^$;$s!#(B + +@section $B5/F0$H@\B3(B + +Emacs $B$rN)$A>e$2$?$i!"(B@kbd{M-x liece} $B$H%?%$%W$7$F(B Liece $B$r5/F0$7$^$9!#(B + +$B@\B3@h$N%5!<%P!"<+J,$N%K%C%/%M!<%`!"<+8J>R2p$J$I$N@\B3$KI,MW$J>pJs$,(B +@file{.liece}$B$K@_Dj$5$l$F$$$J$1$l$P!":G=i$K$$$/$D$+$N(B($BJ8;zNs(B)$BDL>o$O(B +@var{liece-server} $B$N@_Dj$K$h$j>e=q$-$5$l$k(B +@end defvar + +@defvar liece-nickname +$B%K%C%/%M!<%`(B($BJ8;zNs(B) +@end defvar + +@defvar liece-name +WHOIS $B$GI=<($5$l$k%f!<%6L>(B($BJ8;zNs(B) ($BNc(B: "Daiki Ueno") +@end defvar + +@defvar liece-connection-timeout +$B@\B3;~$N%?%$%`%"%&%H!#C10L$OIC!#(B +@end defvar + +@menu +* Friends:: $B5sF0$r4F;k$9$k(B +* Window styles:: $B%&%#%s%I%&%9%?%$%k(B +* Commands:: $B%3%^%s%I$NMxMQJ}K!(B +@end menu + +@node Friends, Window styles, Using Liece, Using Liece +@section $B5sF0$r4F;k$9$k(B + +$B$"$kFCDj$N%f!<%6$K$D$$$F$=$N5sF0$r4F;k$9$k$3$H$,$G$-$^$9!#(B@refill + +@table @kbd +@item @key{C-c C-i a (@code{liece-command-activate-friends})} +$B4F;k5!G=$rM-8z$K$7!"F1;~$KBP>]%f!<%60lMw$X$NEPO?$r9T$&(B + +@item @key{C-c C-i d (@code{liece-command-deactivate-friends})} +$B4F;k5!G=$rL58z2=$9$k(B + +@item @key{C-c C-i s (@code{liece-command-display-friends})} +$B8=:_$NIT:_>u67$rI=<((B + +@end table + +@node Window styles, Commands, Friends, Using Liece +@section $B%&%#%s%I%&%9%?%$%k(B + +Liece $B$G$O%&%#%s%I%&$NJ,3d$r%&%#%s%I%&%9%?%$%k$H8F$P$l$k5!9=$K$h$j=@Fp$K(B +$B%+%9%?%^%$%:$G$-$^$9!#(B@refill + +$B%&%#%s%I%&%9%?%$%k<+BN$O(B +@lisp +liece-window-style-directory +@end lisp + +$B$G;XDj$5$l$k%G%#%l%/%H%jFb$K4^$^$l$k%U%!%$%k$G$"$j!"$=$NCf?H$O35$M(B emacs +lisp $B$G=q$+$l$F$$$^$9!#(B@refill + +$B;XDj$9$k:]$K$O!">e=R$N%G%#%l%/%H%j$K4^$^$l$k%U%!%$%kL>$H$7$F;XDj$9$k;v$K(B +$B$J$j$^$9!#(B@refill + +@lisp +(setq liece-window-default-style "middle") +@end lisp + @refill + +@menu +* Writing window styles:: $B%&%#%s%I%&%9%?%$%k$N5-=R(B +@end menu + +@node Writing window styles, , Window styles, Window styles +@subsection $B%&%#%s%I%&%9%?%$%k$N5-=R(B + +$B9%$_$N%&%#%s%I%&%9%?%$%k$r:n@.$9$k$K$O!"$b$H$K$J$kE,Ev$J%&%#%s%I%&%9%?%$(B +$B%k$r7h$a!"JL$N%U%!%$%kL>$K%3%T!<$9$k$3$H$+$i;O$a$k$HNI$$$G$7$g$&!#(B($BNc(B: +"mystyle")@refill + +$B$3$N%U%!%$%k$O(B elisp $B$N%^%/%m$r4^$`9=J8$G=q$-$^$9!#(B +$B%^%/%m(B +@lisp +liece-window-add-style +@end lisp + +$B$O?75,$K>uBVIU$-%P%C%U%!J,3d$rDj5A$7$^$9!#(B@refill + +$BI8=`$GDj5A$5$l$F$$$k>uBVJQ?t$O!"0J2<$N(B 4$B$D$G$9!#(B +@table @samp +@item command-buffer-mode +$B%A%c%s%M%k(B/$B%W%i%$%Y!<%H(B + +@item channel-buffer-mode +$B%A%c%s%M%k%P%C%U%!$NI=<((B/$BHsI=<((B + +@item nick-buffer-mode +$B%K%C%/0lMw%P%C%U%!$NI=<((B/$BHsI=<((B + +@item channel-list-buffer-mode +$B%A%c%s%M%k0lMw%P%C%U%!$NI=<((B/$BHsI=<((B + +@end table + +$B>uBV;XDj$NNc$H$7$F0J2<$N@_Dj$r<($7$^$9!#(B +@lisp +(command-buffer-mode . any) +(channel-buffer-mode . t) +(nick-buffer-mode . t) +(channel-list-buffer-mode . nil) +@end lisp + +$B$3$NNc$G$O!"0J2<$N>uBV$G$N%&%#%s%I%&9=@.$rDj5A$9$k$3$H$r(B +$B<($7$^$9!#(B +@itemize @bullet +@item +$B%W%i%$%Y!<%H%b!<%I$N>uBV$OLd$o$:!"(B +@item +$B%A%c%s%M%k%P%C%U%!$r;HMQ$7!"(B +@item +$B%K%C%/0lMw%P%C%U%!$r;HMQ$7!"(B +@item +$B%A%c%s%M%k0lMw%P%C%U%!$r;HMQ$7$J$$(B +@end itemize + +@menu +* Reconfiguration predicates:: $B%&%#%s%I%&:FJT@.=R8l(B +* Window configuration:: $B%&%#%s%I%&9=@.(B +@end menu + +@node Reconfiguration predicates, Window configuration, Writing window styles, Writing window styles +@subsubsection $B%&%#%s%I%&:FJT@.=R8l(B + +$B%&%#%s%I%&9=@.$r:F7W;;$7$?7k2L$,8=:_$N%&%#%s%I%&9=@.$HA4$/F1$8>l9g!"%&%#(B +$B%s%I%&$N:FJ,3d$K$O7Z;k$G$-$J$$%3%9%H$,$+$+$j$^$9!#(B@refill + +$B$=$3$G!"%&%#%s%I%&$N:FJT@.$,I,MW$G$"$k$+$rD4$Y$k%,!<%I$r(B +$B>uBVJQ?t$HF1Ns$K;XDj$9$k$3$H$,$G$-$^$9!#(B +@lisp +(reconfiguration-predicate . func) +@end lisp + +$B$3$NNc$G;XDj$5$l$?(B @code{func}$B$O(B 0$B0z?t$N4X?t$G$"$j!"(B +@code{liece-window-define-reconfiguration-predicate}$B$K$h$jDj5A$,$J$5$l(B +$B$^$9!#$3$NDj5A$O%9%?%$%k%U%!%$%k$KD>@\=q$/;v$,$G$-$^$9!#(B@refill + +@node Window configuration, , Reconfiguration predicates, Writing window styles +@subsubsection $B%&%#%s%I%&9=@.(B + +$BNc$H$7$F0lHVC1=c$JJ,3d(B +($B%@%$%"%m%0%P%C%U%!$H%3%^%s%I%P%C%U%!$N$_(B) $B$N(B +$B5-=R$r<($7$^$9!#(B +@lisp +(configuration (vertical 1.0 (dialogue 1.0) (command 3 point))) +@end lisp + +$B$3$NNc$G$O0J2<$N%&%#%s%I%&9=@.$rDj5A$7$?$3$H$K$J$j$^$9!#(B +@enumerate +@item +$B%&%#%s%I%&A4BN$r?bD>$K(B(vertical)2$B$D$KJ,3d$7!"(B +@item +$B%@%$%"%m%0%P%C%U%!$r>eJ}$K:n@.$7!"(B +command $B%P%C%U%!$re$G$O0J2<$N9=@.$K$J$j$^$9!#(B +@example ++----------------+ +| | +| $B%@%$%"%m%0(B | +| | ++----------------+ +| $B%3%^%s%I(B(3$B9T(B) | $B"+(B $B%+!<%=%k(B ++----------------+ +@end example + +$B%5%$%:$N;XDj$O0J2<$N(B3$BH(B ($BNc(B: liece-command-buffer-rows) +@end itemize + + +$BJXMx$J?t;z(B 1.0 $B$rI,$:0lEY$O(B $B;HMQ$7$J$/$F$O$J$j$^$;$s!#%5%$%:$K(B 1.0 $B$r;X(B +$BDj$7$?>l9g!";D$j$NNN0h$r3d$jEv$F$k;v$r0UL#$7$^$9!#(B@refill + +$B0J2<$K(B BNF $B$K$h$k%P%C%U%!J,3d$NJ8K!$r:\$;$^$9!#(B +@example +split = horizontal | vertical | buffer | form +horizontal = "(horizontal " size *split ")" +vertical = "(vertical " size *split ")" +buffer = "(" buffer-name " " size *[ "point" ] ")" +size = number +buffer-name = command | channel | channel-list | nick ... +@end example + +@node Commands, , Window styles, Using Liece +@section $B%3%^%s%I$NMxMQJ}K!(B + +@menu +* Dialogue mode:: $B%@%$%"%m%0%b!<%I(B +* Internal naming spaces:: $BFbIt$G;H$o$l$kL?L>5,B'(B +* Private conversation:: $B%W%i%$%Y!<%H%b!<%I(B +@end menu + +@node Dialogue mode, Internal naming spaces, Commands, Commands +@subsection $B%@%$%"%m%0%b!<%I(B + +$B%@%$%"%m%0%b!<%I$H$O!"%A%c%s%M%k$G$N2qOC$,I=<($5$l$k(B +$B%P%C%U%!(B(@code{liece-dialogue-buffer}) +$B$G$Ne$GF0:n$9$k(B IRC $B%/%i%$%"%s%H$HF1MM$K(B + +@node Internal naming spaces, Private conversation, Dialogue mode, Commands +@subsection $BFbIt$G;H$o$l$kL?L>5,B'(B + +Liece $B$N5sF0$r3F%3%^%s%I$K4XO"IU$1$kA0$K!"FbIt$GMQ$$$i$l$kL>A06u4V$r4JC1(B +$B$K2r@b$7$^$9!#(B@refill + +$B%A%c%s%M%kL>$NI=8=$K$O%G!<%?7?$H$7$F$NFbItI=8=$H(BIRC $B$N@$3&$GA0A4$F$r0l$D$NBg$-$JO"A[%j%9%H(B +(@code{liece-nick-alist})$B$KJ]B8$7$F$$$^$9!#$3$NJ}K!$OHs>o$K8zN($,0-$/!"(B +$BJd40F~NO$N8uJd$rI=<($9$k0J30$NLr3d$K$OMxMQ$G$-$^$;$s!#(B@refill + +$B$3$l$KBP$7!"(BLiece $B$G$OJ#?t$N>.$5$J%O%C%7%eI=$rMQ0U$7$F$$$^$9!#(B@refill + +$B%A%c%s%M%k$NFbItI=8=$O(B Liece $B$NFbIt$GMQ$$$i$l$k%O%C%7%eI=$N%-!<$G$b$"$j!"(B +$BFCDj$N%A%c%s%M%k$K4X$9$k>pJs$O%7%s%\%k$N%W%m%Q%F%#$H$7$FJ]B8$^$?$O99?7$5(B +$B$l$^$9!#(B@refill + +@node Private conversation, , Internal naming spaces, Commands +@subsection $B%W%i%$%Y!<%H%b!<%I(B + +Liece $B$G$O!"%A%c%s%M%k$4$H$N2qOCAjA06u4V$G4IM}$7$F$$$^$9!#$3$NJ}?K$K$OH?BP0U8+$b$"$j!"$=$N0l$D$K$O(B +$B%7%g!<%H%+%C%H$K$h$jBPOCAjl9g$KFCDj$N%A%c%s%M%k$X$N@Z$jBX$((B +$B$NJ}$,%W%i%$%Y!<%H%b!<%I$G$NBPOCAjl9g$K!"%W%i%$%Y!<%H%b!<%I$H%A%c%s%M%k$G$NH/8@(B +$B$N%_%9$,5/$3$j$d$9$$E@$b9MN8$KF~$l$^$7$?!#(B($BN"$G0BA4$K0-8}$,8@$($^$9!#(B +^_^;;)@refill + +$BA06u4V$rL@<(E*$KJ,3d$7$F$$$k(B +$B>l9g$,B?$/!"$3$l$i$H$NO"7H$r9M$($?>l9g$KET9g$,NI$$$H$$$&$N$b$"$j$^$9!#(B +@refill + +@menu +* Operations in private conversation:: $B%W%i%$%Y!<%H%b!<%I$G$NBPOC$NJ}K!(B +@end menu + +@node Operations in private conversation, , Private conversation, Private conversation +@subsubsection $B%W%i%$%Y!<%H%b!<%I$G$NBPOC$NJ}K!(B + +$B%W%i%$%Y!<%H%b!<%I$K@Z$j49$($k$K$O(B@kbd{C-c P} +(@code{liece-command-toggle-private})$B$r%?%$%W$7$^$9!#;vA0$KBPOCAjo$N2qOC$KLa$k$K$O!"$b$&0lEY(B @kbd{C-c P} +$B$H%?%$%W$7$^$9!#(B@refill + +$B%W%i%$%Y!<%H%b!<%I$G$NA`:n$O$O!"%A%c%s%M%kFb$G$N2qOC$H$[$\F1MM$G$9!#(B + +@kbd{C-c $B?t;z(B} (@code{liece-switch-to-channel-no-$B?t;z(B}) + +@defvar liece-default-partner-binding + +$BBPOCAj(B:$B%]!<%HHV9f(B:$B%Q%9%o!<%I(B" $B$H$$$C$?J8;zNsI=8=$NB>$K!"(B +plist $B$rMQ$$$?!"$h$j>\:Y$J@\B3%Q%i%a%?$r;XDj$9$k$3$H$,$G$-$^$9!#(B +@var{liece-server} $B$K;XDj$G$-$k%-!<$O0J2<$NDL$j$G$9!#(B + +@table @samp +@item :host +$B@\B3@h%[%9%HL>(B($BJ8;zNs(B) + +@item :service +$B%5!<%S%9%(%s%H%j(B($B@0?t$^$?$OJ8;zNs(B) + +@item :password +$B%Q%9%o!<%I(B($BJ8;zNs(B) + +@item :type +$B@\B3J}K!(B (network, program, ssl, rlogin $B$N$$$:$l$+(B) + +@item :prescript +$B@\B3A0=hM}%3%^%s%I(B ($B4X?t$^$?$O(B shell command $BJ8;zNs(B) + +@item :relay +$BCf7Q%[%9%HL>(B ($BJ8;zNs(B) + +@end table + + +@menu +* Connect via external program:: $B30It%W%m%0%i%`$r2p$7$?@\B3(B +* Connect via SSL:: SSL $B$r2p$7$?@\B3(B +* Connect via rlogin:: rlogin $B$r2p$7$?@\B3(B +@end menu + +@node Connect via external program, Connect via SSL, Connection types, Connection types +@subsection $B30It%W%m%0%i%`$r2p$7$?@\B3(B + +IPv6 $B7PM3$N@\B3$r9T$$$?$$!"(Bsocks $B1[$7$K@\B3$7$?$$(B +$B$J$I$N2?$i$+$NM}M3$G(B Emacs $B$N%M%C%H%o!<%/5!G=$rMxMQ$7$?$/$J$$>l9g!"(B +Liece $B$G$O30It%W%m%0%i%`$K$h$k@\B3$,2DG=$G$9!#(B + +$B$3$NJ}K!$G@\B3$r9T$&$?$a$K$O!"30It%W%m%0%i%`$H$7$F(B Liece $B$NG[I[$KImB0$9$k(B +"tcp" $B$,I,MW$H$J$j$^$9!#(B + +@code{liece-server} $B$N(B :type $B%Q%i%a%?$K(B program $B$r;XDj$9$k$+!"(B +$B$b$7$/$O0J2<$NJQ?t$r@_Dj$9$k$3$H$K$h$j!"$3$NJ}K!$,MQ$$$i$l$^$9!#(B + +@defvar liece-tcp-default-connection-type + +$B%G%#%U%)%k%H$N@\B3J}K!$r;XDj$9$k(B +@end defvar + + +@defvar liece-tcp-program-name + +$B30It%W%m%0%i%`$rL@<(E*$K;XDj$9$k(B +@end defvar + + +@node Connect via SSL, Connect via rlogin, Connect via external program, Connection types +@subsection SSL $B$r2p$7$?@\B3(B + + +SSLeay $B$^$?$O(B OpenSSL $B$KImB0$9$k(B s_client $B$rMxMQ$7$F@\B3$r9T$&J}K!$bMQ(B +$B0U$5$l$F$$$^$9!#(B + +$B$3$NJ}K!$G@\B3$r9T$&$?$a$K$O!"30It%i%$%V%i%j$H$7$F(B Emacs/W3 $B$KImB0$9$k(B +ssl.el $B$,I,MW$K$J$j$^$9!#(B + +@defvar liece-tcp-ssl-protocol-version + +SSL $B%W%m%H%3%k$N%P!<%8%g%s$r;XDj$7$^$9!#(Bliece-tcp-ssl-protocol-version +$B$,(B "2" $B$G$J$$$J$i$P!":G=i$K(B SSL $B%W%m%H%3%k$N%P!<%8%g%s(B 3 $B$G@\B3$r;n$_!"(B +$B<:GT$7$?>l9g$K$O(BSSL $B%W%m%H%3%k$N%P!<%8%g%s(B 2 $B$G@\B3$r;n$_$^$9!#(B +@end defvar + + +@node Connect via rlogin, , Connect via SSL, Connection types +@subsection rlogin $B$r2p$7$?@\B3(B + + +@defvar liece-tcp-rlogin-program +rlogin (rsh, ssh) $B$rMQ$$$?%j%l!<@\B3;~$K;HMQ$9$k%W%m%0%i%`(B +@end defvar + + +@defvar liece-tcp-rlogin-user-name +rlogin (rsh, ssh) $B$rMQ$$$?%j%l!<@\B3;~$K;HMQ$9$k%f!<%6L>(B +@end defvar + + +@node Timers, Programming hooks, Connection types, Customization +@section $B%?%$%^JQ?t(B + +@defvar liece-keepalive-interval +IRC $B%5!<%P$KBP$7$FDj4|E*$K(B PING $B$rAw$k4V3V(B +@end defvar + +@defvar liece-poll-names-interval +$B;22C$7$F$$$k%A%c%s%M%k$KBP$7!"Dj4|E*$KL>A00lMw$r$r7BT c #AC324D", +", c #981632", +"' c #81041F", +") c #77031D", +"! c #82162E", +"~ c #9A3D51", +"{ c #951834", +"] c #9E3C52", +"^ c #A73750", +"/ c #973D51", +"( c #A73E55", +"_ c #AB2B47", +": c #9A1130", +"< c #8B0422", +"[ c #8F0F2A", +"} c #9F2B44", +"| c #89384A", +"1 c #943F51", +"2 c #A74056", +"3 c #A2364E", +"4 c #88112A", +"5 c #76031D", +"6 c #750820", +"7 c #993248", +"8 c #923D50", +"9 c #933F52", +"0 c #954154", +"a c #9F4156", +"b c #A04156", +"c c #9F4256", +"d c #9D3C51", +"e c #7E172E", +"f c #5F0317", +"g c #590316", +"h c #70192C", +"i c #8C3146", +"j c #92394D", +"k c #8F394C", +"l c #7F3041", +"m c #923E51", +"n c #983E51", +"o c #8E3045", +"p c #701D30", +"q c #66192A", +"r c #772839", +"s c #8F3A4D", +" ", +" .+@ ", +" #$% ", +" &*=-; ", +" >,')!~ ", +" {] ", +" ^/ ", +" ( ", +" _:<[}| 1 ", +" 2 345678 90 ", +" abc defghijklm ", +" nopqrs ", +" "}; diff --git a/etc/icons/location.xpm b/etc/icons/location.xpm new file mode 100644 index 0000000..50ffcf4 --- /dev/null +++ b/etc/icons/location.xpm @@ -0,0 +1,58 @@ +/* XPM */ +static char *location[] = { +/* width height num_colors chars_per_pixel */ +" 28 28 23 1", +/* colors */ +". c #000000", +"# c #000080", +"a c #0000f8", +"b c #003438", +"c c #008000", +"d c #008080", +"e c #00fc00", +"f c #202020", +"g c #303060", +"h c #4098a0", +"i c #6064c8", +"j c #800000", +"k c #808000", +"l c #808080", +"m c #980060", +"n c #9898f8", +"o c #b2b2b2 s backgroundToolBarColor", +"p c #e8e8e8", +"q c #f80000", +"r c #f86430", +"s c #f864c8", +"t c #f8fc00", +"u c #f8fcf8", +/* pixels */ +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooniiigoooooooooooooooo", +"ooooooonuoigoooooooooooooooo", +"ooooooonogigoooooooooooooooo", +"oooooonoggi.oooooooooooooooo", +"ooooonogggi.oooooooooooooooo", +"oooonogiggi.oooooooooooooooo", +"ooonoiigggi.oooooooooooooooo", +"oonunigig.igggiiiiiiiooooooo", +"oonuniigg.noooooooooogoooooo", +"oonunigi.iinnnnnnnnnnogooooo", +"oonuiii.niinnnnnnnnnnngooooo", +"ooigg..ioiinnnnnnnnnnngooooo", +"oooooooioiinnnnnnnnnngoooooo", +"oooooooioigggggggggggooooooo", +"oooooooioig.oooooooooooooooo", +"oooooooioiggligigiiiillooooo", +"oooooooioiggigigigillloooooo", +"oooooooioigglilooooooooooooo", +"oooooooioigllooooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo" +}; diff --git a/etc/icons/naruto.blank.xpm b/etc/icons/naruto.blank.xpm new file mode 100644 index 0000000..ac050ae --- /dev/null +++ b/etc/icons/naruto.blank.xpm @@ -0,0 +1,25 @@ +/* XPM */ +static char *naruto_blank_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 2 1", +/* colors */ +". c #000000", +"# c None", +/* pixels */ +"################", +"################", +"################", +"################", +"################", +"################", +"################", +"################", +"################", +"################", +"################", +"################", +"################", +"################", +"################", +"################" +}; diff --git a/etc/icons/naruto.gray.xpm b/etc/icons/naruto.gray.xpm new file mode 100644 index 0000000..dad9b67 --- /dev/null +++ b/etc/icons/naruto.gray.xpm @@ -0,0 +1,27 @@ +/* XPM */ +static char *naruto_gray_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 4 1", +/* colors */ +". c None", +"# c #fffab5", +"a c #8e8e8e", +"b c #000000", +/* pixels */ +".......#####....", +".......#####....", +"......#aaaab##..", +"......#aaaab##..", +"...####aaaab###.", +"...####aaaab###.", +"###aaaaaaaaaaaa#", +"###aaaaaaaaaaaa#", +"...####aaaab###.", +"...####aaaab###.", +"......#aaaab##..", +"......#aaaab##..", +"......#aaaab##..", +"......#aaaab##..", +"......#aaaab##..", +"......#aaaab##.." +}; diff --git a/etc/icons/naruto.red.xpm b/etc/icons/naruto.red.xpm new file mode 100644 index 0000000..870e759 --- /dev/null +++ b/etc/icons/naruto.red.xpm @@ -0,0 +1,116 @@ +/* XPM */ +static char * naruto_red_xpm[] = { +"16 16 97 2", +" c None", +". c #0F0F0F", +"+ c #363636", +"@ c #434343", +"# c #232323", +"$ c #000000", +"% c #333333", +"& c #EAEAEA", +"* c #4A4A4A", +"= c #555555", +"- c #212121", +"; c #393939", +"> c #F6F6F6", +", c #FFFFFF", +"' c #E7E7E7", +") c #F3F3F3", +"! c #FFFAFA", +"~ c #F0EAEA", +"{ c #D1D1D1", +"] c #444444", +"^ c #7A7A7A", +"/ c #FFFCFC", +"( c #FFC2C2", +"_ c #FFA3A3", +": c #FFAAAA", +"< c #FFC6C6", +"[ c #E4E4E4", +"} c #030303", +"| c #565656", +"1 c #E4E2E2", +"2 c #FFD4D4", +"3 c #B9B9B9", +"4 c #0D0D0D", +"5 c #AEAEAE", +"6 c #FFC8C8", +"7 c #FFCDCD", +"8 c #5E5E5E", +"9 c #929292", +"0 c #FDF9F9", +"a c #FFA1A1", +"b c #FFFEFE", +"c c #FFD7D7", +"d c #FFCCCC", +"e c #FFF8F8", +"f c #B5B5B5", +"g c #141414", +"h c #7E6161", +"i c #FFD1D1", +"j c #FFB9B9", +"k c #FFD3D3", +"l c #FFA2A2", +"m c #DFDFDF", +"n c #818181", +"o c #101010", +"p c #E2C7C7", +"q c #FFBFBF", +"r c #FFEAEA", +"s c #FFF9F9", +"t c #FFCECE", +"u c #525252", +"v c #ACACAC", +"w c #FFFDFD", +"x c #FFA0A0", +"y c #9E9E9E", +"z c #606060", +"A c #FFE0E0", +"B c #FFA7A7", +"C c #FFF3F3", +"D c #FFDADA", +"E c #FEFEFE", +"F c #323232", +"G c #020202", +"H c #282828", +"I c #656565", +"J c #FFE9E9", +"K c #FFC3C3", +"L c #FFF7F7", +"M c #ABABAB", +"N c #1F1F1F", +"O c #898989", +"P c #383838", +"Q c #999999", +"R c #B3B3B3", +"S c #040404", +"T c #2B2B2B", +"U c #FBFBFB", +"V c #7B7B7B", +"W c #070707", +"X c #CDCDCD", +"Y c #DDDDDD", +"Z c #0C0C0C", +"` c #191919", +" . c #C7C7C7", +".. c #2D2D2D", +"+. c #1B1B1B", +"@. c #DEDEDE", +"#. c #131313", +" . ", +" + @ # $ % & * # = - ", +" ; > , ' ) ! ~ { , , ] ", +" ^ / ( _ : : < , [ } ", +" | 1 : 2 , , , , , 3 } ", +"4 5 , 6 7 , , , , , , , ' 8 ", +" 9 0 a b , b c d e , , , , f g ", +" h ( , , i j k l ! , , m n . ", +" o p q , , r s , t i , u ", +" v w x ! , , , , t i , y ", +"z , , A B C , w D _ ! , E F ", +"G H I , J B _ _ K L , , , M ", +" N , , , > , , , O P Q R S ", +" T , U V W X , Y Z ", +" ` ... +.@.; ", +" S #. "}; diff --git a/etc/icons/pindown.xpm b/etc/icons/pindown.xpm new file mode 100644 index 0000000..7f5c4f1 --- /dev/null +++ b/etc/icons/pindown.xpm @@ -0,0 +1,27 @@ +/* XPM */ +static char *pindown[] = { +/* width height num_colors chars_per_pixel */ +" 16 16 4 1", +/* colors */ +". c #000000", +"# c #c0c0c0", +"a c #ffffff s backgroundToolBarColor", +"b c #808080", +/* pixels */ +"aaaaaaaaaaaaaaaa", +"aaaaaaaaaaaaaaaa", +"aaaaaaaa....aaaa", +"aaaaaa..#a#a.aaa", +"aaaa...#a#a#b.aa", +"aaaa.a.a#a#ab.aa", +"aaa.a#.#a#ab..aa", +"aaa.#a.b#abb..aa", +"aaa.b#b......aaa", +"aaa.bbbbb....aaa", +"aaaa.bbb....baaa", +"aaaa.......baaaa", +"aaa.bb...bbaaaaa", +"aaaaaaaaaaaaaaaa", +"aaaaaaaaaaaaaaaa", +"aaaaaaaaaaaaaaaa" +}; diff --git a/etc/icons/print.xpm b/etc/icons/print.xpm new file mode 100644 index 0000000..14dfae6 --- /dev/null +++ b/etc/icons/print.xpm @@ -0,0 +1,58 @@ +/* XPM */ +static char *print[] = { +/* width height num_colors chars_per_pixel */ +" 28 28 23 1", +/* colors */ +". c #000000", +"# c #000080", +"a c #0000f8", +"b c #003438", +"c c #008000", +"d c #008080", +"e c #00fc00", +"f c #202020", +"g c #303060", +"h c #4098a0", +"i c #6064c8", +"j c #800000", +"k c #808000", +"l c #808080", +"m c #980060", +"n c #9898f8", +"o c #b2b2b2 s backgroundToolBarColor", +"p c #e8e8e8", +"q c #f80000", +"r c #f86430", +"s c #f864c8", +"t c #f8fc00", +"u c #f8fcf8", +/* pixels */ +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"ooooooooouuuuuuuuulooooooooo", +"ooooooooouuuouououlooooooooo", +"ooooooooouuuuououulooooooooo", +"ooooooooouuuuuuuuulooooooooo", +"ooooooooouuuuuuuuulggingoooo", +"ooooooooouoooooooolgingooooo", +"oooooooooououououlgingoooooo", +"ooooooonououououoliggooooooo", +"oooooiinnniiiiiiiiiiggiooooo", +"ooooiuuoouonniiinniggiiooooo", +"ooooiooooouuuuoniiggigiooooo", +"ooooionooooooooooogggiiglooo", +"ooooionnnnnnnnnnnngggigfggoo", +"ooooionnononononnnggiggfgloo", +"ooooiinononononecnggggfglooo", +"ooooolliiiiiiiiinngggfgloooo", +"oooooooooolliigggggffglooooo", +"oooooooooooooooolgfgoooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo" +}; diff --git a/etc/icons/reload.xpm b/etc/icons/reload.xpm new file mode 100644 index 0000000..5cc5d9b --- /dev/null +++ b/etc/icons/reload.xpm @@ -0,0 +1,58 @@ +/* XPM */ +static char *reload[] = { +/* width height num_colors chars_per_pixel */ +" 28 28 23 1", +/* colors */ +". c #000000", +"# c #000080", +"a c #0000f8", +"b c #003438", +"c c #008000", +"d c #008080", +"e c #00fc00", +"f c #202020", +"g c #303060", +"h c #4098a0", +"i c #6064c8", +"j c #800000", +"k c #808000", +"l c #808080", +"m c #980060", +"n c #9898f8", +"o c #b2b2b2 s backgroundToolBarColor", +"p c #e8e8e8", +"q c #f80000", +"r c #f86430", +"s c #f864c8", +"t c #f8fc00", +"u c #f8fcf8", +/* pixels */ +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"ooooooooiiiiiiiigooooooooooo", +"oooooooiuininiif#ggooooooooo", +"ooooooiunnnnnifff#ggoooooooo", +"ooiuoooononononnniffgooooooo", +"oooiuoonononononfffggooooooo", +"ooooiuoononononfg##ggooooooo", +"oooooiuooooooifg###ggooooooo", +"ooooooiuooooifg####ggooooooo", +"oooooooiuooifgi####ggooooooo", +"ooooooooiuifgoi####ggooooooo", +"ooooooooogggooi###fggooooooo", +"ooooooooooooooi###fggolooooo", +"oooooooooooooonn#ffggolloooo", +"oooooonnnnnnnnnif#fggllloooo", +"oooooonnnnnnnnnifffggiiooooo", +"oooooonininininiifgigilooooo", +"ooooooniiiiiiiiiiiigillooooo", +"oooooooniiggggg#gggilloooooo", +"oooooooooolllllllllllooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo" +}; diff --git a/etc/icons/search.xpm b/etc/icons/search.xpm new file mode 100644 index 0000000..813b425 --- /dev/null +++ b/etc/icons/search.xpm @@ -0,0 +1,58 @@ +/* XPM */ +static char *search[] = { +/* width height num_colors chars_per_pixel */ +" 28 28 23 1", +/* colors */ +". c #000000", +"# c #000080", +"a c #0000f8", +"b c #003438", +"c c #008000", +"d c #008080", +"e c #00fc00", +"f c #202020", +"g c #303060", +"h c #4098a0", +"i c #6064c8", +"j c #800000", +"k c #808000", +"l c #808080", +"m c #980060", +"n c #9898f8", +"o c #b2b2b2 s backgroundToolBarColor", +"p c #e8e8e8", +"q c #f80000", +"r c #f86430", +"s c #f864c8", +"t c #f8fc00", +"u c #f8fcf8", +/* pixels */ +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"ooooooooooooooouououoooooooo", +"oooooooooooooouououououooooo", +"ooooooooooooououuuuuuuouoooo", +"oooooooooooououuuuuuuottoooo", +"ooooooooooooouuuutuuuttouooo", +"oooooooooooouooootttutouoooo", +"ooooooooooooniiiintttuuouooo", +"ooooooooooooinoiifntuuuuoooo", +"oooooooooooinoniigfotutouooo", +"ooooooooggofiiiggigoutuuoooo", +"ooooooofoiiooggggigottouoooo", +"oooooooiinoongfgfgiouououooo", +"ooooooinooniigffgiluououoooo", +"ooooiiooniiigfillloonlnlnooo", +"oooinoniiigfiooooonilllllooo", +"oooggiiigfiooooniiiiiillnooo", +"oooiggigillonliiillnoooooooo", +"ooonfgflllllllnooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo" +}; diff --git a/etc/icons/stop.xpm b/etc/icons/stop.xpm new file mode 100644 index 0000000..7219d7e --- /dev/null +++ b/etc/icons/stop.xpm @@ -0,0 +1,58 @@ +/* XPM */ +static char *stop[] = { +/* width height num_colors chars_per_pixel */ +" 28 28 23 1", +/* colors */ +". c #000000", +"# c #000080", +"a c #0000f8", +"b c #003438", +"c c #008000", +"d c #008080", +"e c #00fc00", +"f c #202020", +"g c #303060", +"h c #4098a0", +"i c #6064c8", +"j c #800000", +"k c #808000", +"l c #808080", +"m c #980060", +"n c #9898f8", +"o c #b2b2b2 s backgroundToolBarColor", +"p c #e8e8e8", +"q c #f80000", +"r c #f86430", +"s c #f864c8", +"t c #f8fc00", +"u c #f8fcf8", +/* pixels */ +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"ooooooooiiiiiiiiiiiloooooooo", +"ooooooonllnlnlnlnligoooooooo", +"ooooogninnlg.glolol...gooooo", +"ooooogoioljjjj.lnogli.gooooo", +"oooooogiojjqjjg.loli.j.ooooo", +"oooooogiooqqqjg.noiojjoooooo", +"oooooooioooqqjg.lolgjjoooooo", +"oooooooionoqjf.fnoigojoooooo", +"oooooglionnffffilogggggooooo", +"ooooognion....ignoili.gooooo", +"oooooogiolggiiggloli.ggooooo", +"oooooooio.llggggnoioggoooooo", +"oooooooio.llggfllolgggoooooo", +"ooooognionlggggnlolggg.ooooo", +"ooooogniol....flnogli.gooooo", +"ooooolgio.ffff.gloii.ggooooo", +"oooooogio.gggfg.noilggoooooo", +"oooooooiooggfgf.loiggglllooo", +"oooooooinnnfffglnliflllloooo", +"ooooooooogggiiiiigi.lllooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo", +"oooooooooooooooooooooooooooo" +}; diff --git a/etc/po/ja.po b/etc/po/ja.po new file mode 100644 index 0000000..5599d75 --- /dev/null +++ b/etc/po/ja.po @@ -0,0 +1,415 @@ +# Copyright (C) 1998 Free Software Foundation, Inc. +# Daiki Ueno , 1998. +# +msgid "" +msgstr "" +"Project-Id-Version: Liece 1.2.8\n" +"PO-Revision-Date: 1998-12-30 18:09 +0900\n" +"Last-Translator: Daiki Ueno \n" +"Language-Team: Daiki Ueno \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=euc-japan\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "IRC error: %s" +msgstr "IRC ¥¨¥é¡¼: %s" + +msgid "%s is now known as %s\n" +msgstr "%s ¤Ï %s ¤Ë¥Ë¥Ã¥¯¤òÊѹ¹¤·¤Þ¤·¤¿\n" + +msgid "IRCHAT: A private message has arrived from %s" +msgstr "IRCHAT: %s ¤«¤é¥×¥é¥¤¥Ù¡¼¥È¥á¥Ã¥»¡¼¥¸¤¬ÅþÃ夷¤Þ¤·¤¿" + +msgid " (has|have) left IRC%s" +msgstr " ¤Ï IRC ¤«¤éÎ¥¤ì¤Þ¤·¤¿ %s" + +msgid "%s has left IRC%s\n" +msgstr "%s ¤Ï IRC ¤«¤éÎ¥¤ì¤Þ¤·¤¿ %s\n" + +msgid ", %s have left IRC%s" +msgstr "¡¢%s ¤Ï IRC ¤«¤éÎ¥¤ì¤Þ¤·¤¿ %s" + +msgid "New topic on channel %s set by %s: %s\n" +msgstr "¥Á¥ã¥ó¥Í¥ë %s ¤Ë %s ¤Ë¤è¤ê¿·¤·¤¤¥È¥Ô¥Ã¥¯¤¬ÀßÄꤵ¤ì¤Þ¤·¤¿: %s\n" + +msgid "^%s%sNew mode for %s set by %s: " +msgstr "^%s%s %s ¤Ë %s ¤Ë¤è¤ê¿·¤·¤¤¥â¡¼¥É¤¬ÀßÄꤵ¤ì¤Þ¤·¤¿: " + +msgid "New mode for %s set by %s: %s\n" +msgstr "%s ¤Ë %s ¤Ë¤è¤ê¿·¤·¤¤¥â¡¼¥É¤¬ÀßÄꤵ¤ì¤Þ¤·¤¿: %s\n" + +msgid "You were kicked off channel %s by %s (%s).\n" +msgstr "¤¢¤Ê¤¿¤Ï¥Á¥ã¥ó¥Í¥ë %s ¤«¤é %s ¤Ë¤è¤ê½³¤ê½Ð¤µ¤ì¤Þ¤·¤¿: (%s)\n" + +msgid "%s has come back as (%s)\n" +msgstr "%s ¤Ï (%s) ¤È¤·¤Æµ¢¤Ã¤ÆÍè¤Þ¤·¤¿\n" + +msgid " (has|have) joined channel %s" +msgstr " ¤¬ ¥Á¥ã¥ó¥Í¥ë %s ¤Ë»²²Ã¤·¤Þ¤·¤¿" + +msgid "%s (%s) has joined channel %s\n" +msgstr "%s (%s) ¤¬¥Á¥ã¥ó¥Í¥ë %s ¤Ë»²²Ã¤·¤Þ¤·¤¿\n" + +msgid ", %s (%s) have joined channel %s" +msgstr "¡¢%s (%s) ¤¬¥Á¥ã¥ó¥Í¥ë %s ¤Ë»²²Ã¤·¤Þ¤·¤¿" + +msgid " (has|have) left channel %s" +msgstr " ¤Ï ¥Á¥ã¥ó¥Í¥ë %s ¤«¤éÎ¥¤ì¤Þ¤·¤¿" + +msgid "%s has left channel %s\n" +msgstr "%s ¤Ï ¥Á¥ã¥ó¥Í¥ë %s ¤«¤éÎ¥¤ì¤Þ¤·¤¿\n" + +msgid ", %s have left channel %s" +msgstr "¡¢%s ¤Ï ¥Á¥ã¥ó¥Í¥ë %s ¤«¤éÎ¥¤ì¤Þ¤·¤¿" + +msgid "%s is now known as %s\n" +msgstr "%s ¤Ï %s ¤Ë¥Ë¥Ã¥¯¤òÊѹ¹¤·¤Þ¤·¤¿\n" + +msgid " \\(has\\|have\\) left IRC%s" +msgstr " ¤Ï IRC ¤«¤éÎ¥¤ì¤Þ¤·¤¿ %s" + +msgid "%s has left IRC%s\n" +msgstr "%s ¤Ï IRC ¤«¤éÎ¥¤ì¤Þ¤·¤¿ %s\n" + +msgid "%s%s has left IRC%s\n" +msgstr "%s%s ¤Ï IRC ¤«¤éÎ¥¤ì¤Þ¤·¤¿ %s\n" + +msgid "New topic on channel %s set by %s: %s\n" +msgstr "¥Á¥ã¥ó¥Í¥ë %s ¤Ë %s ¤Ë¤è¤ê¿·¤·¤¤¥È¥Ô¥Ã¥¯¤¬ÀßÄꤵ¤ì¤Þ¤·¤¿: %s\n" + +msgid "New mode for %s set by %s: %s\n" +msgstr "¥Á¥ã¥ó¥Í¥ë %s ¤Ë %s ¤Ë¤è¤ê¿·¤·¤¤¥â¡¼¥É¤¬ÀßÄꤵ¤ì¤Þ¤·¤¿: %s\n" + +msgid "%sNew mode for %s set by %s: %s\n" +msgstr "%s¥Á¥ã¥ó¥Í¥ë %s ¤Ë %s ¤Ë¤è¤ê¿·¤·¤¤¥â¡¼¥É¤¬ÀßÄꤵ¤ì¤Þ¤·¤¿: %s\n" + +msgid "You were kicked off channel %s by %s (%s).\n" +msgstr "¤¢¤Ê¤¿¤Ï¥Á¥ã¥ó¥Í¥ë %s ¤«¤é %s ¤Ë¤è¤ê½³¤ê½Ð¤µ¤ì¤Þ¤·¤¿: (%s)\n" + +msgid "%s has come back as (%s)\n" +msgstr "%s ¤Ï (%s) ¤È¤·¤Æµ¢¤Ã¤ÆÍè¤Þ¤·¤¿\n" + +msgid " \\(has\\|have\\) joined channel %s" +msgstr " ¤¬ ¥Á¥ã¥ó¥Í¥ë %s ¤Ë»²²Ã¤·¤Þ¤·¤¿" + +msgid "%s (%s) has joined channel %s\n" +msgstr "%s (%s) ¤¬¥Á¥ã¥ó¥Í¥ë %s ¤Ë»²²Ã¤·¤Þ¤·¤¿\n" + +msgid "%s%s (%s) has joined channel %s\n" +msgstr "%s%s (%s) ¤¬¥Á¥ã¥ó¥Í¥ë %s ¤Ë»²²Ã¤·¤Þ¤·¤¿\n" + +msgid " \\(has\\|have\\) left channel %s" +msgstr " ¤Ï ¥Á¥ã¥ó¥Í¥ë %s ¤«¤éÎ¥¤ì¤Þ¤·¤¿" + +msgid "%s has left channel %s\n" +msgstr "%s ¤Ï ¥Á¥ã¥ó¥Í¥ë %s ¤«¤éÎ¥¤ì¤Þ¤·¤¿\n" + +msgid "%s%s has left channel %s\n" +msgstr "%s%s ¤Ï ¥Á¥ã¥ó¥Í¥ë %s ¤«¤éÎ¥¤ì¤Þ¤·¤¿\n" + +msgid "Quit IRCHAT? " +msgstr "Liece ¤ò½ªÎ»¤·¤Þ¤¹¤«¡©" + +msgid "Start private conversation with: " +msgstr "²ñÏäò»Ï¤á¤ëÁê¼ê: " + +msgid "Join channel: " +msgstr "»²²Ã¤¹¤ë¥Á¥ã¥ó¥Í¥ë: " + +msgid "Key for channel %s: " +msgstr "¥Á¥ã¥ó¥Í¥ë %s ¤Î¥­¡¼: " + +msgid "End private conversation with: " +msgstr "²ñÏäò½ªÎ»¤¹¤ëÁê¼ê: " + +msgid "Part channel: " +msgstr "Î¥¤ì¤ë¥Á¥ã¥ó¥Í¥ë: " + +msgid "Part Message: " +msgstr "Υæ¥á¥Ã¥»¡¼¥¸: " + +msgid "Ignore nickname or regexp: " +msgstr "̵»ë¤¹¤ë¥Ë¥Ã¥¯¥Í¡¼¥à¤â¤·¤¯¤ÏÀµµ¬É½¸½: " + +msgid "Currently ignoring:" +msgstr "¸½ºß¤Î̵»ë¥ê¥¹¥È:" + +msgid " (%d min)" +msgstr " (%d ÉÃ)" + +msgid " expired" +msgstr "´ü¸ÂÀÚ¤ì" + +msgid "No longer ignoring: %s.\n" +msgstr "%s ¤ò¤â¤Ï¤ä̵»ë¤·¤Þ¤»¤ó\n" + +msgid "Ignoring %s" +msgstr "%s ¤ò̵»ë¤·¤Æ¤¤¤Þ¤¹" + +msgid "To whom: " +msgstr "ï¤Ë: " + +msgid "Send file" +msgstr "¥Õ¥¡¥¤¥ë¤òÁ÷¿®" + +msgid "Receive file" +msgstr "¥Õ¥¡¥¤¥ë¤ò¼õ¿®" + +msgid "Send chat request" +msgstr "DCC CHATÍ×µá" + +msgid "Accept chat request" +msgstr "DCC CHAT³«»Ï" + +msgid "List DCC request" +msgstr "DCCÍ×µá°ìÍ÷" + +msgid "Dispatch stacked DCC requests" +msgstr "DCCÍ×µá¤ò¾å¤«¤é½ç¤Ë½èÍý" + +msgid "Toggle crypt mode" +msgstr "°Å¹æ²½ on/off" + +msgid "Set default key for this channel" +msgstr "ÈëÌ©¸°¤ÎÀßÄê" + +msgid "Add new key to keyring" +msgstr "ÈëÌ©¸°¤ÎÄɲÃ" + +msgid "Remove key from keyring" +msgstr "ÈëÌ©¸°¤Îºï½ü" + +msgid "Toggle private conversation" +msgstr "1ÂÐ1ÂÐÏÃ" + +msgid "Start IsON timer" +msgstr "IsON¥¿¥¤¥Þ³«»Ï" + +msgid "Cancel IsON timer" +msgstr "IsON¥¿¥¤¥Þºï½ü" + +msgid "Display userhost" +msgstr "¥Û¥¹¥È̾¤Îɽ¼¨" + +msgid "Ignore nicks / regexp" +msgstr "¥Ë¥Ã¥¯/Àµµ¬É½¸½¤ò̵»ë" + +msgid "Compose mail" +msgstr "¥á¥¤¥ë¤ÎºîÀ®" + +msgid "Join channel" +msgstr "»²²Ã" + +msgid "Part channel" +msgstr "Υæ" + +msgid "Go to next channel" +msgstr "¼¡¤Î¥Á¥ã¥ó¥Í¥ë" + +msgid "Go to previous channel" +msgstr "Á°¤Î¥Á¥ã¥ó¥Í¥ë" + +msgid "Rotate left channels" +msgstr "¥Á¥ã¥ó¥Í¥ë¥ê¥¹¥È¤òº¸²ó¤ê¤Ë²óž" + +msgid "Rotate right channels" +msgstr "¥Á¥ã¥ó¥Í¥ë¥ê¥¹¥È¤ò±¦²ó¤ê¤Ë²óž" + +msgid "Invite to this channel" +msgstr "¤³¤Î¥Á¥ã¥ó¥Í¥ë¤Ë¾·ÂÔ" + +msgid "Kick out from this channel" +msgstr "¤³¤Î¥Á¥ã¥ó¥Í¥ë¤«¤é½³¤ê½Ð¤¹" + +msgid "Set mode of this channel" +msgstr "¥â¡¼¥É¤ÎÀßÄê" + +msgid "Set topic of this channel" +msgstr "¥È¥Ô¥Ã¥¯¤ÎÀßÄê" + +msgid "List channel" +msgstr "¥Á¥ã¥ó¥Í¥ë°ìÍ÷" + +msgid "Display names of channel" +msgstr "¥á¥ó¥Ð¤Îɽ¼¨(¥Ë¥Ã¥¯¤Î¤ß)" + +msgid "Display who are on the channel" +msgstr "¥á¥ó¥Ð¤Îɽ¼¨" + +msgid "Toggle crypt mode" +msgstr "°Å¹æ²½ on/off" + +msgid "Set default key of this channel" +msgstr "ÈëÌ©¸°¤ÎÀßÄê" + +msgid "Request X-Face" +msgstr "X-Face¤òÍ×µá" + +msgid "Set my X-Face" +msgstr "¼«Ê¬¤ÎX-Face¤òÀßÄê" + +msgid "Strange %s reply" +msgstr "´ñ̯¤Ê %s ±þÅú¤Ç¤¹" + +msgid "Welcome to the Internet Relay Chat world. Your nick is %s.\n" +msgstr "¤è¤¦¤³¤½ Internet Relay Chat ¤ÎÀ¤³¦¤Ø¡£¤¢¤Ê¤¿¤Î¥Ë¥Ã¥¯¤Ï %s ¤Ç¤¹\n" + +msgid "Your server is %s (version %s).\n" +msgstr "¥µ¡¼¥Ð¤Ï %s (¥Ð¡¼¥¸¥ç¥ó %s) ¤Ç¤¹\n" + +msgid "Your client version is %s.\n" +msgstr "¥¯¥é¥¤¥¢¥ó¥È¤Î¥Ð¡¼¥¸¥ç¥ó¤Ï %s ¤Ç¤¹\n" + +msgid "Your server was created %s\n" +msgstr "¥µ¡¼¥Ð¤Ï %s ¤ËºîÀ®¤µ¤ì¤Þ¤·¤¿\n" + +msgid "%s Trying to connect to %s (class %s)\n" +msgstr "%s %s (¥¯¥é¥¹ %s) ¤ËÀܳ¤ò»î¤ß¤Æ¤¤¤Þ¤¹\n" + +msgid "%s Handshaking with %s (class: %s)\n" +msgstr "%s %s (¥¯¥é¥¹ %s) ¤È°®¼ê¤ò¤·¤Æ¤¤¤Þ¤¹\n" + +msgid "Mode for you is %s\n" +msgstr "¤¢¤Ê¤¿¤Î¥â¡¼¥É¤Ï %s ¤Ç¤¹\n" + +msgid "Channels: %s\n" +msgstr "¥Á¥ã¥ó¥Í¥ë: %s\n" + +msgid "Channel" +msgstr "¥Á¥ã¥ó¥Í¥ë" + +msgid "Users" +msgstr "¥æ¡¼¥¶¿ô" + +msgid "Topic" +msgstr "¥È¥Ô¥Ã¥¯" + +msgid "Mode for %s is %s\n" +msgstr "%s ¤Î¥â¡¼¥É¤Ï %s ¤Ç¤¹\n" + +msgid "No topic is set\n" +msgstr "¥È¥Ô¥Ã¥¯¤ÏÀßÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó\n" + +msgid "Topic: %s\n" +msgstr "¥È¥Ô¥Ã¥¯: %s\n" + +msgid "Topic for %s: %s\n" +msgstr "%s ¤Î¥È¥Ô¥Ã¥¯¤Ï: %s\n" + +msgid "Inviting user %s\n" +msgstr "¥æ¡¼¥¶ %s ¤ò¾·ÂÔ¤·¤Æ¤¤¤Þ¤¹\n" + +msgid "Inviting user %s to channel %s\n" +msgstr "¥æ¡¼¥¶ %s ¤ò¥Á¥ã¥ó¥Í¥ë %s ¤Ë¾·ÂÔ¤·¤Æ¤¤¤Þ¤¹\n" + +msgid "Machine %s is running IRC version %s (%s)\n" +msgstr "¥Û¥¹¥È %s ¤Ç¤Ï¥Ð¡¼¥¸¥ç¥ó %s (%s) ¤ÎIRC¥µ¡¼¥Ð¤¬Æ°¤¤¤Æ¤¤¤Þ¤¹\n" + +msgid "You just KILLED %s. %s\n" +msgstr "¤¢¤Ê¤¿¤Ï¤¿¤Ã¤¿º£ %s ¤òKILL¤·¤Þ¤·¤¿ (%s)\n" + +msgid "%s has been banned on %s\n" +msgstr "%s ¤Ï ¥Á¥ã¥ó¥Í¥ë %s ¤Ç ban ¤µ¤ì¤Æ¤¤¤Þ¤¹\n" + +msgid "Server time: %s\n" +msgstr "¥µ¡¼¥Ð¤Î»þ´Ö: %s\n" + +msgid "No such user %s" +msgstr "¥æ¡¼¥¶ %s ¤Ï¸ºß¤·¤Þ¤»¤ó" + +msgid "No text to send" +msgstr "Á÷¤ë¤Ù¤­Ê¸¾Ï¤¬¤¢¤ê¤Þ¤»¤ó" + +msgid "Erroneous nickname %s. Choose a new one with %s." +msgstr "%s ¤ÏÉÔÀµ¤Ê¥Ë¥Ã¥¯¤Ç¤¹¡£%s ¤È¥¿¥¤¥×¤·¤Æ ¿·¤·¤¤¥Ë¥Ã¥¯¤òÁª¤ó¤Ç²¼¤µ¤¤" + +msgid "Nickname %s already in use. Choose a new one with %." +msgstr "¥Ë¥Ã¥¯ %s ¤Ï´û¤Ë»ÈÍѤµ¤ì¤Æ¤¤¤Þ¤¹¡£%s ¤È¥¿¥¤¥×¤·¤Æ ¿·¤·¤¤¥Ë¥Ã¥¯¤òÁª¤ó¤Ç²¼¤µ¤¤" + +msgid "Password incorrect from %s. Try again with password." +msgstr "%s ¤Î¥Ñ¥¹¥ï¡¼¥É¤¬ÉÔÀµ¤Ç¤¹¡£¥Ñ¥¹¥ï¡¼¥É¤òºÆÅÙÆþÎϤ·¤Æ²¼¤µ¤¤" + +msgid "You are not a channel operator" +msgstr "¤¢¤Ê¤¿¤Ï¥Á¥ã¥ó¥Í¥ë¥ª¥Ú¥ì¡¼¥¿¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" + +msgid "Style file load failed." +msgstr "¥¹¥¿¥¤¥ë¥Õ¥¡¥¤¥ë¤ÎÆɤ߹þ¤ß¤Ë¼ºÇÔ¤·¤Þ¤·¤¿" + +msgid "Encrypt message with key [RET for none]: " +msgstr "¥á¥Ã¥»¡¼¥¸¤ò°Å¹æ²½¤¹¤ë¸°¤òÆþÎϤ·¤Æ²¼¤µ¤¤ [RET for none]: " + +msgid "Kick out nickname: " +msgstr "½³¤ê½Ð¤¹¥Ë¥Ã¥¯: " + +msgid "Kick Message: " +msgstr "Íýͳ: " + +msgid "LIST channel: " +msgstr "LIST ¥Á¥ã¥ó¥Í¥ë: " + +msgid "Channel: " +msgstr "¥Á¥ã¥ó¥Í¥ë: " + +msgid "Mode for channel %s [%s]: " +msgstr "¥Á¥ã¥ó¥Í¥ë %s ¤Î¥â¡¼¥É [%s]: " + +msgid "Set Operator for" +msgstr "¤Ê¤ë¤È¤òÉÕ¤±¤ëÁê¼ê" + +msgid "Unset Operator for" +msgstr "¤Ê¤ë¤È¤ò³°¤¹Áê¼ê" + +msgid "Set Voice for" +msgstr "½½»ú²Í¤òÉÕ¤±¤ëÁê¼ê" + +msgid "Unset Voice for" +msgstr "½½»ú²Í¤ò³°¤¹Áê¼ê" + +msgid "Private message to: " +msgstr "¥×¥é¥¤¥Ù¡¼¥È¥á¥Ã¥»¡¼¥¸¤òÁ÷¤ëÁê¼ê: " + +msgid "Private message to %s: " +msgstr "%s ¤Ø¤Î¥á¥Ã¥»¡¼¥¸: " + +msgid "To whom: " +msgstr "ï¤Ë: " + +msgid "Names on channel: " +msgstr "NAMES¤ò¼è¤ë¥Á¥ã¥ó¥Í¥ë: " + +msgid "WHO expression: " +msgstr "WHOɽ¸½: " + +msgid "Wait for: " +msgstr "ÂÔ¤ÄÁê¼ê: " + +msgid "Message to send %s upon entering: " +msgstr "%s ¤ËÁ÷¤ë¥á¥Ã¥»¡¼¥¸: " + +msgid "Finger whom: " +msgstr "¿È¸µ¤òÄ´¤Ù¤ëÁê¼ê: " + +msgid "Invite channel: " +msgstr "¾·ÂÔ¤¹¤ë¥Á¥ã¥ó¥Í¥ë: " + +msgid "Invite whom: " +msgstr "¾·ÂÔ¤¹¤ëÁê¼ê: " + +msgid "Signoff message: " +msgstr "½ªÎ»¥á¥Ã¥»¡¼¥¸: " + +msgid "Whose client: " +msgstr "ï¤Î¥¯¥é¥¤¥¢¥ó¥È: " + +msgid "What info: " +msgstr "Á÷¤ëCTCP: " + +msgid "New userinfo: " +msgstr "¿·µ¬¥æ¡¼¥¶¾ðÊó: " + +msgid "New X-Face: " +msgstr "¿·µ¬ X-Face: " + +msgid "Really SEND from Yank Buffer?" +msgstr "ËÜÅö¤Ë¥Ð¥Ã¥Õ¥¡¤ÎÆâÍƤòÁ÷¤ê¤Þ¤¹¤«¡©" + diff --git a/etc/styles/bottom b/etc/styles/bottom new file mode 100644 index 0000000..e335817 --- /dev/null +++ b/etc/styles/bottom @@ -0,0 +1,101 @@ +;; -*- emacs-lisp -*- +;;; bottom --- Window configuration style spec for `bottom'. +;; Copyright (C) 1998 Daiki Ueno +;; See file liece-copyright.el for original change log and copyright info. + +;; Author: Daiki Ueno +;; Created: 1999-01-08 +;; Revised: 1999-01-08 +;; Keywords: IRC, liece + +;; This file is part of Liece. + +;; 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, 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 GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Code: + +(liece-window-add-style + (command-buffer-mode . any) + (channel-buffer-mode . t) + (nick-buffer-mode . t) + (channel-list-buffer-mode . t) + (configuration + (vertical + 1.0 + (horizontal + 1.0 + (others 1.0) + (channel-list + liece-channel-list-window-width-percent)) + (horizontal + liece-channel-window-height-percent + (channel 1.0) + (nick liece-nick-window-width-percent)) + (command 4 point)))) + +(liece-window-add-style + (command-buffer-mode . any) + (channel-buffer-mode . t) + (nick-buffer-mode . nil) + (channel-list-buffer-mode . t) + (configuration + (vertical + 1.0 + (horizontal + 1.0 + (others 1.0) + (channel-list + liece-channel-list-window-width-percent)) + (channel liece-channel-window-height-percent) + (command 4 point)))) + +(liece-window-add-style + (command-buffer-mode . any) + (channel-buffer-mode . t) + (nick-buffer-mode . t) + (channel-list-buffer-mode . nil) + (configuration + (vertical + 1.0 + (others 1.0) + (horizontal + liece-channel-window-height-percent + (channel 1.0) + (nick liece-nick-window-width-percent)) + (command 4 point)))) + +(liece-window-add-style + (command-buffer-mode . any) + (channel-buffer-mode . t) + (nick-buffer-mode . nil) + (channel-list-buffer-mode . nil) + (configuration + (vertical + 1.0 + (others 1.0) + (channel liece-channel-window-height-percent) + (command 4 point)))) + +(liece-window-add-style + (command-buffer-mode . any) + (channel-buffer-mode . nil) + (nick-buffer-mode . any) + (channel-list-buffer-mode . any) + (configuration + (vertical + 1.0 + (dialogue 1.0) + (command 4 point)))) diff --git a/etc/styles/middle b/etc/styles/middle new file mode 100644 index 0000000..278615c --- /dev/null +++ b/etc/styles/middle @@ -0,0 +1,87 @@ +;; -*- emacs-lisp -*- +;;; middle --- Window configuration style spec for `middle'. +;; Copyright (C) 1998 Daiki Ueno +;; See file liece-copyright.el for original change log and copyright info. + +;; Author: Daiki Ueno +;; Created: 1999-01-08 +;; Revised: 1999-01-08 +;; Keywords: IRC, liece + +;; This file is part of Liece. + +;; 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, 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 GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Code: + +(liece-window-add-style + (command-buffer-mode . any) + (channel-buffer-mode . t) + (nick-buffer-mode . t) + (channel-list-buffer-mode . t) + (configuration + (horizontal + 1.0 + (vertical + 1.0 + (channel liece-channel-window-height-percent) + (command 3 point) + (others 1.0)) + (vertical + liece-nick-window-width-percent + (nick 0.5) + (channel-list 1.0))))) + +(liece-window-add-style + (command-buffer-mode . any) + (channel-buffer-mode . t) + (nick-buffer-mode . nil) + (channel-list-buffer-mode . t) + (configuration + (vertical + 1.0 + (horizontal + 1.0 + (others 1.0) + (channel-list + liece-channel-list-window-width-percent)) + (horizontal + liece-channel-window-height-percent + (channel 1.0)) + (command 3 point)))) + +(liece-window-add-style + (command-buffer-mode . any) + (channel-buffer-mode . t) + (nick-buffer-mode . nil) + (channel-list-buffer-mode . nil) + (configuration + (vertical + 1.0 + (others 1.0) + (channel liece-channel-window-height-percent) + (command 3 point)))) + +(liece-window-add-style + (command-buffer-mode . any) + (channel-buffer-mode . nil) + (nick-buffer-mode . any) + (channel-list-buffer-mode . any) + (configuration + (vertical + 1.0 + (dialogue 1.0) + (command 3 point)))) diff --git a/etc/styles/top b/etc/styles/top new file mode 100644 index 0000000..e013760 --- /dev/null +++ b/etc/styles/top @@ -0,0 +1,103 @@ +;;; top --- Window configuration style spec for `top'. -*- emacs-lisp -*- +;; Copyright (C) 1998 Daiki Ueno +;; See file liece-copyright.el for original change log and copyright info. + +;; Author: Daiki Ueno +;; Created: 1999-01-08 +;; Revised: 1999-01-08 +;; Keywords: IRC, liece + +;; This file is part of Liece. + +;; 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, 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 GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Code: + +(liece-window-add-style + (command-buffer-mode . any) + (channel-buffer-mode . t) + (nick-buffer-mode . t) + (channel-list-buffer-mode . t) + (configuration + (vertical + 1.0 + (command 4 point) + (horizontal + liece-channel-window-height-percent + (channel 1.0) + (nick liece-nick-window-width-percent)) + (horizontal + 1.0 + (others 1.0) + (channel-list + liece-channel-list-window-width-percent))))) + +(liece-window-add-style + (command-buffer-mode . any) + (channel-buffer-mode . t) + (nick-buffer-mode . nil) + (channel-list-buffer-mode . t) + (configuration + (vertical + 1.0 + (command 4 point) + (horizontal + liece-channel-window-height-percent + (channel 1.0)) + (horizontal + 1.0 + (others 1.0) + (channel-list + liece-channel-list-window-width-percent))))) + +(liece-window-add-style + (command-buffer-mode . any) + (channel-buffer-mode . t) + (nick-buffer-mode . t) + (channel-list-buffer-mode . nil) + (configuration + (vertical + 1.0 + (command 4 point) + (horizontal + liece-channel-window-height-percent + (channel 1.0) + (nick liece-nick-window-width-percent)) + (others 1.0)))) + +(liece-window-add-style + (command-buffer-mode . any) + (channel-buffer-mode . t) + (nick-buffer-mode . nil) + (channel-list-buffer-mode . nil) + (configuration + (vertical + 1.0 + (command 4 point) + (channel liece-channel-window-height-percent) + (others 1.0)))) + +(liece-window-add-style + (command-buffer-mode . any) + (channel-buffer-mode . nil) + (nick-buffer-mode . any) + (channel-list-buffer-mode . any) + (configuration + (vertical + 1.0 + (command 4 point) + (dialogue 1.0)))) + diff --git a/lisp/.cvsignore b/lisp/.cvsignore new file mode 100644 index 0000000..a992c3f --- /dev/null +++ b/lisp/.cvsignore @@ -0,0 +1 @@ +irchat-setup.el diff --git a/lisp/ChangeLog b/lisp/ChangeLog new file mode 100644 index 0000000..24b5528 --- /dev/null +++ b/lisp/ChangeLog @@ -0,0 +1,3691 @@ +2000-04-04 Daiki Ueno + + * liece-vars.el + (liece-ctcp-userinfo): Rename from `liece-client-userinfo'. + (liece-ctcp-x-face): Ditto. + + * liece-ctcp.el (liece-ctcp-message): Abolish macro. + (liece-ctcp-file-message): Ditto. + +2000-03-28 Daiki Ueno + + * liece-emacs.el: Require `derived'. + +2000-03-24 Daiki Ueno + + * liece-inlines.el (liece-locate-path): Use + `liece-locate-data-directory' instead of `locate-data-directory'. + +2000-03-23 Daiki Ueno + + * liece-q-ccl.el (ccl-set-register-right): Abolish. + (liece-quote-ccl-decode): Simplified. + + * liece-compat.el (liece-suppress-mode-line-format): Copy original + `mode-line-format' before modification. + (locate-data-directory): Abolish. + (liece-locate-data-directory): New function. + + * liece-xemacs.el (liece-xemacs-suppress-modeline-format): Ditto. + (liece-locate-data-directory): Override with `locate-data-directory'. + + * liece.el + (liece-command-mode): Define `mode-line-format' as buffer local. + (liece-dialogue-mode): Exchange `mode-line-modified' position. + (liece-clear-system): Check buffer status. + + * liece-ctcp.el (liece-ctcp-xyzzy-message): Abolish. + (liece-command-send-file): Don't narrowing buffer. + (liece-ctcp-file-save-directory): Default to `liece-directory'. + (liece-register-file-handler): New macro. + (liece-ctcp-notice): Rewrite. + (liece-ctcp-message): Rewrite. + (liece-query-client-insert-to-generic): Abolish. + (liece-query-client-version): Abolish. + (liece-query-client-userinfo): Abolish. + (liece-query-client-help): Abolish. + (liece-query-client-clientinfo): Abolish. + (liece-query-client-ping): Abolish. + (liece-query-client-time): Abolish. + (liece-query-client-x-face): Abolish. + (liece-query-client-last-command): Rename from + `liece-query-client-lastcommand'. + (liece-query-client-alist): Abolish. + (liece-ctcp-last-nick): Rename from `liece-query-client-nick'. + (liece-command-ctcp-x-face-from-minibuffer): Abolish. + (liece-command-ctcp-x-face-from-commandbuffer): Abolish. + (liece-command-ctcp-userinfo-from-commandbuffer): Abolish. + +2000-03-22 Daiki Ueno + + * liece-xemacs.el (liece-xemacs-icon-path): Abolish. + (liece-toolbar-position): Default to `default-toolbar-position'. + (liece-xemacs-setup-toolbar): Remove directory checking. + (liece-xemacs-modeline-glyph): Suppress glyph specs. + (liece-xemacs-create-nick-glyph): Ditto. + + * liece-emacs.el (liece-emacs-icon-path): Abolish. + + * liece-intl.el (liece-intl-load-catalogue): Rewrite with + `liece-locate-path'; remove local binding. + + * liece-window.el (liece-window-load-style-file): Rewrite with + `liece-locate-path'; remove local binding. + + * liece-compat.el (locate-data-directory): New function. + + * liece-inlines.el (liece-find-data-directory): Abolish. + (liece-locate-path): Rename from `liece-find-path'; use + `locate-data-directory'; reorder arguments. + (liece-locate-icon-file): New function. + +2000-03-20 Daiki Ueno + + * liece-globals.el + (liece-command-buffer,liece-dialogue-buffer,liece-private-buffer, + liece-others-buffer,liece-channel-buffer, + liece-channel-buffer-format,liece-channel-list-buffer, + liece-nick-buffer,liece-nick-buffer-format, + liece-KILLS-buffer,liece-IGNORED-buffer,liece-WALLOPS-buffer, + liece-CRYPT-buffer,liece-server-buffer): Remove preceding `*IRC*'. + + * liece-xemacs.el + (liece-xemacs-splash-at-point): Bind + `liece-insert-environment-version' to nil. + (liece-xemacs-splash): Ditto. + (liece-xemacs-suppress-modeline-format): New function. + (liece-suppress-mode-line-format): Override with + `liece-xemacs-suppress-modeline-format'. + (liece-xemacs-mode-line-buffer-identification): Decorate 1st + element and modify whole identification by side effect. + + * liece-compat.el (current-language-environment): Abolish. + (frame-title-format): Abolish. + (enable-multibyte-characters): Abolish. + (liece-suppress-mode-line-format): New function. + + * liece-version.el: Use product.el. + (liece-version): New function. + (liece-user-interface-product): Abolish. + (liece-product-name): Abolish. + (liece-product-version): Abolish. + (liece-product-code-name): Abolish. + (liece-user-agent-value): Abolish. + (liece-command-version): Abolish. + (liece-environment-version): Rename from + `liece-emacs-user-agent-value'. + + * bitmap-stipple.el + (bitmap-stipple-insert-pixmap): Don't set point to `point-min'. + + * liece-xbm.el: Update. + + * liece-emacs.el (liece-emacs-splash): Display version number; + bind `liece-insert-environment-version' to nil. + (liece-emacs-mode-line-buffer-identification): Decorate 1st + element and modify whole identification by side effect. + + * liece-vars.el (liece-nick-max-length): New variable. + (liece-insert-environment-version): New variable. + + * liece.el (liece-truncate-nickname): Abolish. + (liece-client-query-keys,liece-dialogue-keys, + liece-select-keys,liece-crypt-keys): Define as a plist. + (liece-local-set-keys): New function borrowed from gnus-util.el. + (liece-define-keys): Ditto. + (liece-define-keys-safe): Ditto. + (liece-define-keys-1): Ditto. + (liece-command-map): Bind "\C-m" to liece-command-modec. + (liece-command-mode): Don't set `mode-line-format' directly; + exchange `mode-line-modified' position; + (liece-dialogue-mode): Ditto. + (liece-others-mode): Ditto. + (liece-channel-mode): Ditto. + (liece-nick-mode): Ditto. + (liece-channel-list-mode): Ditto. + +2000-03-19 Daiki Ueno + + * gettext.el (bind-text-domain): Don't refer "PATHNAME/DOMAIN.mo" + directly. + + * bitmap-stipple.el,gettext.el,liece-000.el,liece-200.el, + liece-300.el,liece-400.el,liece-500.el,liece-commands.el, + liece-config.el,liece-crypt.el,liece-ctcp.el,liece-dcc.el, + liece-filter.el,liece-globals.el,liece-handle.el,liece-hilit.el, + liece-inlines.el,liece-intl.el,liece-mail.el,liece-make.el, + liece-menu.el,liece-message.el,liece-minibuf.el,liece-misc.el, + liece-nick.el,liece-q-ccl.el,liece-q-el.el,liece-tcp.el, + liece-version.el,liece-window.el,liece-x-face.el: Checkdoc. + + * liece-menu.el (liece-nick-popup-menu): Use copy-sequence instead + of copy-tree. + + * liece-modules.el (liece-modules-to-compile): Modify for + `liece-clfns' and `liece-handler'. + + * liece-handler.el: Rename from llunf.el. + + * liece-clfns.el: New file. + + * liece-channel.el (liece-channel-add-buttons): Fix regexp. + (liece-channel-add-ban): Use add-to-list instead of pushnew. + + * liece-coding.el + (liece-default-coding-system): Abolish. + (liece-mime-charset-for-write): Rename from + `liece-default-mime-charset'. + (liece-mime-charset-for-read): Rename from + `liece-default-mime-charset-for-read'. + + * liece.el (liece-client-query-map,liece-dcc-map, + liece-crypt-map,liece-friends-map,liece-channel-list-mode-map, + liece-nick-mode-map,): Use make-sparse-keymap when initialising. + (liece-command-mode): Don't set liece-display-frame-title to nil. + (liece-dialogue-mode-map): Bind `L' to liece-command-load-vars + instead of `C-l'; bind `S' to liece-command-save-vars instead of + `s'; bind `M' to liece-command-modec instead of `C-m'; bind `O' to + liece-dialogue-own-freeze instead of `M'. + (liece-buffer-last-check-time): Rename from + `liece-last-checkbuffer-time'. + (liece-check-buffers): Define as function. + (liece-check-buffers-if-interval-expired): Simplified. + + * liece-vars.el + (liece-buffer-max-size): Rename from `liece-buffer-maxsize'. + (liece-buffer-default-size): Rename from `liece-buffer-defsize'. + (liece-buffer-check-interval): Rename from + `liece-checkbuffer-interval'. + + * liece-emacs.el (liece-emacs-widget-button-click): Don't use + `event-buffer'. + + * liece-xemacs.el + (liece-xemacs-get-buffer-window-list): Abolish. + (liece-xemacs-run-at-time): Abolish. + (liece-xemacs-put-text-property): Abolish. + (liece-xemacs-add-text-property): Abolish. + + * liece-minibuf.el (liece-minibuffer-map): Use `set-keymap-parent' + instead of `liece-set-keymap-parents'. + + * liece-compat.el: Don't require emu, broken, alist. + (remassoc): Abolish. + (remassq): Abolish. + (liece-run-at-time): Abolish. + (liece-cancel-timer): Abolish. + (with-timeout): Abolish. + (with-timeout-handler): Abolish. + (liece-get-buffer-window-list): Abolish. + (liece-set-keymap-parents): Abolish. + (event-buffer): Abolish. + (event-point): Abolish. + (truncate-string-to-width): Abolish. + (plist-get): Abolish. + (read-passwd): Abolish. + (colon-keyword-usable): Abolish. + (turn-on-font-lock): Abolish. + (liece-make-overlay): Abolish. + (liece-delete-overlay): Abolish. + (liece-overlay-put): Abolish. + (liece-move-overlay): Abolish. + (liece-overlay-end): Abolish. + (liece-overlay-get): Abolish. + (liece-overlays-at): Abolish. + (liece-put-text-property): Abolish. + (liece-add-text-property): Abolish. + (buffer-disable-undo): Abolish. + (valid-plist-p): Abolish. + + * liece-url.el (liece-url-browser-netscape): Abolish. + +2000-03-08 Daiki Ueno + + * liece-compat.el (liece-get-buffer-window): Search all frames. + +2000-02-28 Daiki Ueno + + * liece.el (liece-command-mode): Set frame-title-format when + running on window-system environment. + +2000-02-18 Daiki Ueno + + * liece-emacs.el (liece-emacs-splash): Use `frame-char-width' and + `frame-char-height' when calculating logo centering. + +2000-02-17 Daiki Ueno + + * liece-400.el (liece-handle-443-message): Check channel name. + +2000-02-13 Daiki Ueno + + * liece-coding.el + (liece-coding-encode-charset-region): Define as function. + (liece-coding-encode-charset-string): Define as function. + + * liece-dcc.el + (liece-dcc-chat-send): Switch to liece-command-buffer. + (liece-dcc-enqueue-request): Rename. + (liece-dcc-dequeue-request): Ditto. + + * liece-misc.el (liece-send-as-binary): Abolish. + (liece-repair-crlf): Abolish. + (liece-send): Switch to liece-command-buffer. + + * liece-emacs.el (liece-emacs-splash): Use `font-info' if 'font + parameter of the selected frame is not a fontset name. + + * liece.el (liece-open-server-internal): Set process-buffer of + open-network-stream as unibyte. + +2000-02-10 Daiki Ueno + + * liece-xemacs.el (liece-toolbar-icon-convert-1): New function. + (liece-toolbar-icon-states): New variable. + + * liece-emacs.el (liece-emacs-widget-button-click): Don't preserve + previously selected window. + +2000-01-23 Daiki Ueno + + * liece-emacs.el: Require `image' when compiling. + (create-image): Add optional argument `data-p'. + +2000-01-22 Daiki Ueno + + * liece-message.el (liece-message-empty-predicate): New variable. + + * liece-commands.el + (liece-command-message): Use `liece-message-empty-predicate'. + +2000-01-16 Daiki Ueno + + * liece-modules.el (liece-modules): Don't install `queue-m'. + + * liece-dcc.el: Don't require `queue-m' at runtime. + + * liece-hilit.el: + Add autoload setting for `liece-channel-add-buttons' and + `liece-nick-add-buttons'. + (liece-highlight-maybe-turn-on-font-lock): Activate + `liece-channel-add-buttons' and `liece-nick-add-buttons' when + inserting every line. + + * liece-compat.el (liece-map-overlays): New function. + (liece-kill-all-overlays): Use it. + + * liece-xemacs.el (liece-xemacs-map-extents): New function. + (liece-xemacs-kill-all-overlays): Use it. + (liece-map-overlays): New alias to `liece-xemacs-map-extents'. + + * liece-nick.el (liece-nick-redisplay-buffer): New function. + (liece-nick-add-buttons): New function. + + * liece-channel.el + (liece-channel-redisplay-buffer): New function. + (liece-channel-list-redisplay-buffer): New function. + (liece-channel-buffer-invisible-p): Remove redundant cond. + (liece-channel-part-internal): Remove redundant `function'. + (liece-channel-list-add-button): Rename from + `liece-channel-add-button'. + (liece-channel-push-button-action): Use `liece-command-join' + instead of `liece-switch-to-channel'. + + * liece-commands.el (liece-switch-to-channel-1): Abolish. + (liece-redisplay-buffer-functions): New variable. + +2000-01-07 Daiki Ueno + + * liece-commands.el + (liece-command-next-channel): Traverse channel list circularly. + (liece-command-previous-channel): Likewise. + +1999-12-26 Daiki Ueno + + * liece-commands.el + (liece-command-previous-channel): Remove nil from channel list. + (liece-command-next-channel): Ditto. + +1999-12-24 Daiki Ueno + + * liece-emacs.el (liece-emacs-splash): Check whether logo height + is larger than frame height. + + * liece-crypt.el (liece-crypt-maybe-encrypt-message): Simplified. + + * liece-commands.el + (liece-command-enter-message-encrypted): Abolish. + (liece-command-enter-message-cleartext): Abolish. + (liece-command-enter-message-opposite-crypt-mode): Abolish. + (liece-command-enter-message-with-key): Abolish. + +1999-12-23 Daiki Ueno + + * liece-version.el (liece-user-agent-value): Add APEL version. + + * liece-inlines.el (liece-next-line): New macro. + + * liece-ctcp.el + (liece-command-client-action): Use `liece-next-line'. + (liece-command-client-userinfo-from-commandbuffer): Ditto. + + * liece-channel.el (liece-channel-member): Use `member-if' instead + of `find-if'. + + * liece.el (liece): Don't use `liece-command-describe-briefly'. + (liece-command-mode): Don't bind `next-line-add-newlines'. + (liece-dialogue-keys): Don't bind `C-u'. + + * liece-commands.el (liece-command-topic): If called with prefix + argument insert the current topic as default. + (liece-command-finger): Add documentation about optional 2nd + argument. + (liece-command-describe-briefly): Abolish. + (liece-enter-message): Abolish local variable `message'. + (liece-command-join-channel): Fix paren style. + (liece-command-join-partner): Ditto. + (liece-command-join): Ditto. + (liece-command-part): Ditto. + (liece-switch-to-channel-no): Ditto. + (liece-command-complete): Ditto. + (liece-command-next-channel): Rewrite with using + `liece-channel-member'. + (liece-command-previous-channel): + (liece-command-push): Abolish local variable `rest-sym' and + `item'; don't use `liece-channel-remove'. + (liece-command-pop): Abolish local variable `rest-sym'. + (liece-command-tag-region): Don't create temp buffer. + +1999-12-21 Daiki Ueno + + * liece-misc.el (liece-set-channel-indicator): Switch to + `liece-command-buffer' when updating modeline. + +1999-12-19 Daiki Ueno + + * liece-minibuf.el (liece-minibuffer-map): Don't use + `set-keymap-parents'. + + * liece-compat.el (liece-set-keymap-parents): Rename from + `set-keymap-parents'. + (turn-on-font-lock,event-buffer,event-point,region-active-p, + remassoc,remassq,valid-plist-p,plist-get): Add document. + +1999-12-14 Daiki Ueno + + * liece.el (liece-insert-internal): Don't bind `tab-stop-list'. + (liece-dialogue-mode): Declare `tab-stop-list' as buffer local. + +1999-12-01 Daiki Ueno + + * liece-message.el (liece-message-parent-buffer): Add condtion. + +1999-11-13 Daiki Ueno + + * liece.el (liece-read-variables-files): Make the `~/.liece/' + directory if there is no initialization file. + +1999-11-10 Kenichi OKADA + + * liece-xemacs.el (liece-xemacs-splash-at-point): Calculate + horizontal position of the splash logo. + +1999-11-10 Daiki Ueno + + * liece-emacs.el (liece-emacs-splash): Check the number of + the arguments of `insert-image'. + +1999-11-07 Daiki Ueno + + * liece-coding.el (detect-coding-string): Remove. + (liece-detect-coding-string): Don't define if + `detect-coding-string' does not exist. + +1999-11-05 Daiki Ueno + + * liece-url.el (liece-url-add-buttons): Accept optional arguments + `start' and `end'. + + * liece.el (liece-save-point): New macro; borrowed from SKK. + (liece-before-insert-hook): New variable. + (liece-insert-internal): Refine. + +1999-11-01 Daiki Ueno + + * liece-misc.el (liece-get-buffer-create): Use memq instead of + member to search over buffers list. + +1999-10-29 Daiki Ueno + + * liece-handle.el (liece-handle-ping-message): Return the + argument correctly. + + * liece.el (liece-insert-internal): Remove `inline'. + +1999-10-27 Daiki Ueno + + * liece-commands.el (liece-command-nick-scroll-down): Fix + argument list. + (liece-command-nick-scroll-up): Ditto. + + * liece-hilit.el (liece-highlight-turn-on-font-lock): Set + `liece-highlight-maybe-play-jingle' as local hook. + (liece-highlight-font-lock-keywords): Undo last change. + +1999-10-26 Daiki Ueno + + * liece.el (liece-refresh-windows): Remove. + (liece-refresh-buffer-window): New function `liece-refresh-windows'. + (liece-insert-internal): Preserve old point unconditionally when + the buffer is frozen. + +1999-10-21 Daiki Ueno + + * liece-misc.el (liece-freeze): Rename from `liece-freeze-toggle'. + (liece-own-freeze): Rename from `liece-own-freeze-toggle'. + + * liece.el: Add autoload for `liece-command-submit-bug-report'. + (liece-overriding-command-keys): Rename. + (liece-dialogue-keys): Bind `liece-command-submit-bug-report'. + + * liece-commands.el (liece-command-scroll-down): Use + `scroll-other-window'; accept prefix value. + (liece-command-scroll-up): Ditto. + (liece-command-nick-scroll-down): Ditto. + (liece-command-nick-scroll-up): Ditto. + (liece-command-freeze): Accept prefix argument. + (liece-command-own-freeze): Ditto. + (liece-command-quit): Refine. + +1999-10-20 Daiki Ueno + + * liece-commands.el (liece-command-display-friends): Remove + `save-excursion'. + + * liece.el (liece-read-variables-files): Prepare startup + directory if it does not exist. + + * liece-vars.el (liece-directory): New variable. + (liece-variables-file): Relocate under `liece-directory'. + + * liece-ctcp.el (liece-ctcp-version-message): Refer + `liece-user-agent-value'. + + * liece-menu.el: Check features about menubars. + + * liece-xemacs.el (liece-xemacs-hide-scrollbars): Set + `scrollbar-height' to 0 if `horizontal-scrollbar-visible-p' is not + available. + + * liece-mail.el (liece-command-submit-bug-report): New function. + (liece-maintainer-address): New variable. + + * gettext.el (gettext-load-message-catalogue): Enclose with + `as-binary-input-file' instead of using `set-buffer-multibyte' twice. + (gettext-load-portable-message-catalogue): Likewise. + (dgettext): Check the cdr of catalogue entry. + (gettext-gmo-read-32bit-word): Mask each byte with 255. + + * liece-compat.el (truncate-string-to-width): New alias. + + * liece.el (liece-server-keyword-bind): Quote colon keywords. + + * liece-make.el (make-liece-info-files): Check if + `set-language-environment' exists. + + * liece-misc.el (liece-server-host): Quote colon keyword. + +1999-10-19 Daiki Ueno + + * liece-hilit.el (liece-highlight-font-lock-keywords): Undo last + change; accept partial matcher as the value of + `liece-highlight-pattern'. + (liece-highlight-maybe-play-jingle): New function. + (liece-highlight-maybe-turn-on-font-lock): Add + `liece-highlight-maybe-play-jingle' to `after-change-functions'. + +1999-10-14 Daiki Ueno + + * gettext.el (gettext-load-message-catalogue): Use hashtable. + (gettext-load-portable-message-catalogue): Likewise. + +1999-10-13 Daiki Ueno + + * liece-misc.el (next-visible-point): Don't advise. + (liece-remove-properties-region): Enclose by `save-restriction'. + +1999-10-12 Daiki Ueno + + * liece-commands.el (liece-command-send-action): Remove. + + * liece-ctcp.el (liece-command-client-action): Move from + `liece-commands.el'; mark `liece-command-send-action' as obsolete. + (liece-client-x-face-notice): Remove whitespaces. + + * liece-handle.el (liece-handle-kick-message): Fix message. + +1999-10-11 Daiki Ueno + + * gettext.el (gettext-default-mime-charset): New variable. + (gettext-parse-Content-Type): Use it. + +1999-10-07 Daiki Ueno + + * liece-misc.el (liece-message): Fix message prefix. + + * liece-compat.el (liece-find-data-directory): Move to + `liece-inlines'. + + * liece-xemacs.el (liece-xemacs-icon-path): Use `liece-find-path'. + + * liece-emacs.el (liece-emacs-icon-path): Use `liece-find-path'. + + * liece-inlines.el (liece-find-path): New function. + +1999-10-05 Daiki Ueno + + * liece-version.el (liece-user-interface-product): Renamed from + `liece-client-product'. + (liece-client-version-major): Abolish. + (liece-client-version-minor): Abolish. + (liece-client-version-beta): Abolish. + (liece-client-version-alpha): Abolish. + (liece-client-version-codename): Abolish. + (liece-product-name): New macro. + (liece-product-version): New macro. + (liece-product-code-name): New macro. + +1999-10-03 Daiki Ueno + + * liece-hilit.el (liece-highlight-jingle-function): New variable. + (liece-highlight-font-lock-keywords): If liece-highlight-pattern + matches, play jingle. + +1999-10-01 Daiki Ueno + + * liece-message.el (liece-message-parent-buffer): Check the + message direction in private conversation. + +1999-09-28 Daiki Ueno + + * liece-version.el (liece-emacs-user-agent-value): Include + `emacs-patch-level'. It exists in XEmacs 21.1.1 or later. + +1999-09-22 Daiki Ueno + + * liece.el (liece-channel-mode): Make `truncate-lines' local. + (liece-others-mode): Ditto. + (liece-channel-list-mode): Ditto. + (liece-nick-mode): Ditto. + +1999-09-18 Daiki Ueno + + * liece.el (liece-open-server): Set `liece-status-message-string' + when timeout is expired. + +1999-09-14 Daiki Ueno + + * liece-menu.el (liece-use-localized-menu): New variable. + (liece-command-define-menus): Use it. + (liece-command-define-menus-1): New function; to raverse menu + items recursively. + + * liece.el (liece): Call `liece-intl-load-catalogue' before switch + to the command buffer. + + * liece-dcc.el: Refine. + + * liece-ctcp.el (liece-client-x-face-notice): Do not decode empty + `X-Face'. + +1999-09-11 Daiki Ueno + + * liece-vars.el (liece-dcc-program): Rename to `ldcc'. + + * liece-tcp.el (liece-tcp-program): Rename to `ltcp'. + + * gettext.el (gettext-parse-Content-Type): Require `path-util'. + + * liece-x-face.el: Require `path-util'. + +1999-09-10 Daiki Ueno + + * Makefile.am (SOURCES): Add `gettext.el'. + + * liece-modules.el (liece-modules-to-compile): Add `gettext.el'. + + * liece-intl.el: Use `gettext.el'. + (liece-intl-domains-alist): Abolish. + (liece-intl-domain-to-mime-charset-alist): Abolish. + (liece-intl-prepare-prefix): Abolish. + (liece-intl-parse-Content-Type): Abolish. + (liece-intl-convert-string): Abolish. + (liece-intl-catalogue-path): Abolish. + + * gettext.el: New file. + + * liece-ctcp.el: Add autoload setting for `liece-ctcp-dcc-message'. + + * liece.el (liece): Save window splitting only when called + interactively. + (liece-clear-system): Do not restore window splitting. + (liece-command-mode): Set syntax table explicitly; make + `frame-title-format' buffer local. + + * liece-window.el (liece-window-configuration-push): Do not save + `frame-title-format'. + (liece-window-configuration-pop): Likewise. + + * liece-commands.el (liece-command-quit): Restore window splitting + only when called interactively. + +1999-09-09 Daiki Ueno + + * liece.el (liece-server-keyword-map): New variable. + (liece-server-keyword-bind): New macro modified version of + `mail-source-bind' from `mail-source.el'. + (liece-server-parse-string): New function. + (liece-open-server): Use them. + +1999-09-08 Daiki Ueno + + * liece-300.el (liece-handle-353-message): Reverse reply list. + + * All files are renamed from `irchat-*' to `liece-*'. + All symbols are renamed too. + + * irchat-vars.el (irchat-connection-timeout): Default to 60. + + * irchat-nick.el (irchat-nick-insert): Handle reverse order + sorting. + +1999-09-07 Daiki Ueno + + * irchat.el (irchat): Call `irchat-command-mode' just once. + (irchat-initialize-buffers): Likewise. + + * irchat-channel.el (irchat-channel-buffer-create): Call + `irchat-channel-mode' just once. + + * irchat-nick.el (irchat-nick-buffer-create): Call + `irchat-nick-mode' just once. + + * irchat-message.el (irchat-message-parent-buffer): Fix condition. + +1999-09-06 Daiki Ueno + + * irchat-nick.el (irchat-nick-sort-nicks): New variable. + + * irchat-intl.el (irchat-intl-load-catalogue): Ignore all errors + when reading catalogue file. + + * irchat-menu.el: Do not require `irchat-ctcp'; add autoload + settings for `irchat-menu-callback-ctcp-version', + `irchat-menu-callback-ctcp-userinfo', + `irchat-menu-callback-ctcp-help', + `irchat-menu-callback-ctcp-clientinfo' and + `irchat-menu-callback-ctcp-ping'; add `irchat-menu-add-url' to + `irchat-url-add-hook'. + + * irchat-url.el (irchat-url-add-buttons): Enclose with + `save-excursion'; run `irchat-url-add-hook'. + +1999-09-06 Daiki Ueno + + * Liece 1.3.7. + + * irchat-xemacs.el (irchat-xemacs-setup-menu): Abolish. + + * irchat-intl.el (irchat-intl-get-msgstr-if): Abolish. + + * irchat-vars.el: Remove defconst for colon keyword. + +1999-09-05 Daiki Ueno + + * irchat-menu.el: All the menu specs are expanded immediately. + (irchat-menu-prepare-menus): Abolish. + (irchat-menu-define): New function. + (irchat-menu-alist): New variable. + + * irchat-handle.el (irchat-handle-topic-message): Check empty + topic line. + + * irchat.el (irchat): When `irchat-startup-channel-list' contains + list element send cadr as a channel key. + + * irchat-emacs.el (irchat-emacs-widget-convert-button): Make the + keymap `irchat-widget-keymap' parented from current local map. + + * irchat-nick.el (irchat-nick-sort-predicate): New variable. + (irchat-nick-update): Sort nicknames with + `irchat-nick-sort-predicate'. + (irchat-nick-insert): Search sorted position before insertion. + (irchat-nick-replace): Call `irchat-nick-insert' when + `irchat-nick-sort-predicate' is valid. + + * irchat-message.el (irchat-message-parent-buffer): Add condition + for private conversation. + + * irchat-make.el (make-irchat-info-files): Set language + environment to `Japanese'. + + * irchat-dcc.el (irchat-dcc-channel-representation-format): + Remove. + + * irchat-minibuf.el (irchat-minibuffer-complete-channel-modes): + Use `string-list-member-ignore-case' instead of + `string-list-ci-member'. + + * irchat-url.el: Remove `irchat-insert-hook'. + + * irchat-hilit.el (irchat-highlight-maybe-turn-on-font-lock): + Add `irchat-url-add-buttons' to `irchat-insert-hook'. + + * irchat.el (irchat-initialize-buffers): Fix last change. + + * irchat-300.el: Enclose autoloads by `eval-and-compile'. + + * irchat-channel.el: Declare variable + `irchat-dcc-channel-representation-format'. + +1999-09-04 Daiki Ueno + + * Liece 1.3.6. + + * irchat.el: Add autoload for `irchat-command-browse-url'; do not + require `irchat-url' and `irchat-dcc'; add autoload for + `irchat-command-mail-compose'. + (irchat-initialize-timers): Rewrite with `dolist'; do + not check `irchat-timers-list-initialized-p'. + (irchat-truncate-nickname): Use `truncate-string-to-width' instead + of `truncate-string'. + (irchat-buffer-mode-alist): New variable. + (irchat-dialogue-setup-buffer): Abolish. + (irchat-others-setup-buffer): Abolish. + (irchat-channel-list-setup-buffer): Abolish. + (irchat-private-setup-buffer): Abolish. + (irchat-KILLS-setup-buffer): Abolish. + (irchat-IGNORED-setup-buffer): Abolish. + (irchat-WALLOPS-setup-buffer): Abolish. + (irchat-CRYPT-setup-buffer): Abolish. + (irchat-initialize-buffers): Rewrite. + + * irchat-ctcp.el (irchat-client-version-insert): Do not indent + explicitly. + (irchat-client-message-no-lf): Abolish. + + * irchat-300.el, irchat-xemacs.el, irchat-commands.el: Do not + require `irchat-dcc' and `irchat-mail'. + + * irchat-dcc.el (irchat-command-dcc-send): Remove autoload cookie. + +1999-09-03 Daiki Ueno + + * irchat-inlines.el (forward-line): Do not advise. + + * irchat-intl.el: Do not require `alist'; require `mcharset', + `static' and `cl' during compilation. + (irchat-intl-msgid-regexp): Fix regexp. + (irchat-intl-msgstr-regexp): Ditto. + (irchat-intl-set-msgstr): Abolish. + (irchat-intl-load-catalogue): Optimize with side-effects. + + * irchat.el (irchat): Load message catalogue only once. + +1999-08-31 Daiki Ueno + + * irchat.el (irchat-close-server-internal): Use + `irchat-server-opened'. + + * irchat-hilit.el (irchat-highlight-maybe-turn-on-widget): + Abolish. + + * irchat-channel.el (irchat-channel-add-button): Use + `irchat-widget-convert-button'. + + * irchat-nick.el (irchat-nick-insert): Use + `irchat-widget-convert-button'. + (irchat-nick-replace): Ditto. + + * irchat-compat.el (irchat-widget-convert-button): New alias. + (irchat-widget-button-click): Alias to `widget-button-click'. + + * irchat-emacs.el (irchat-widget-keymap): New variable. + (irchat-emacs-widget-convert-button): New function. + (irchat-emacs-widget-button-click): New function. + (irchat-widget-convert-button): Redefine here. + (irchat-widget-button-click): Redefine here. + + * irchat-url.el (irchat-url-add-buttons): Use + `irchat-widget-convert-button'. + +1999-08-23 Daiki Ueno + + * irchat-emacs.el (irchat-emacs-splash): Use `fontset-pixel-size'. + +1999-08-22 Daiki Ueno + + * irchat-compat.el: Do not require `wid-browse' during + compilation. + (irchat-widget-button-click): New function. + + * irchat-emacs.el: Enclose autoloads with `eval-and-compile'. + (irchat-emacs-create-mode-line-image): Specify + `:ascent' property when creating the image. + (irchat-emacs-create-nick-image): Ditto. + +1999-08-22 Daiki Ueno + + * Makefile.am (EXTRA_DIST): Add `irchat-emacs.el'. + + * irchat-xemacs.el (irchat-xemacs-glyph-nick-buffer): Abolish. + (irchat-xemacs-glyph-nick-region): Remove interactive spec. + + * irchat-intl.el: Do not require `mime-parse'. + + * irchat-tcp.el: Bind `ssl-program-arguments'. + +1999-08-22 Daiki Ueno + + * irchat-modules.el (irchat-modules-to-compile): Add + `irchat-emacs'. + + * irchat-xemacs.el (irchat-xemacs-glyph-nick-buffer): Refine. + + * irchat-vars.el (irchat-icon-directory): Move from + `irchat-xemacs.el'.; To be used under FSF Emacs 20.4.91. + (irchat-nick-image-alist): Move from `irchat-xemacs.el'. + + * irchat-emacs.el: New file.; Most of FSF Emacs specific routines + are stored here. + (irchat-emacs-icon-path): New macro. + (irchat-emacs-mode-line-buffer-identification): New function. + (irchat-emacs-mode-line-buffer-identification): New variable. + +1999-08-20 Daiki Ueno + + * liece.xpm: Reduce colors. + +1999-08-20 Daiki Ueno + + * irchat-x-face.el (irchat-x-face-insert-function): Don't use + `eval-when-compile' while checking bitmap-mule. + +1999-08-20 Daiki Ueno + + * irchat.el (irchat-splash-pixmap): Renamed from + `irchat-stipple-pixmap'; use the XPM data under FSF Emacs 20.4.91. + (irchat-x-splash): Likewise. + + * irchat-channel.el (irchat-channel-virtual): Undo last change. + +1999-08-15 Daiki Ueno + + * irchat-400.el (irchat-handle-400-messages): Do not pass empty + channel names to `irchat-channel-virtual'. + + * irchat-channel.el (irchat-channel-virtual): Make channel ID for + `!' channels invisible from user. + + * irchat-vars.el (irchat-channel-id-length): Default to 5. + +1999-08-14 Daiki Ueno + + * irchat-300.el (irchat-353-channel): Abolish. + (irchat-handle-366-message): Do not use `irchat-353-channel'. + +1999-08-13 Daiki Ueno + + * irchat-200.el (irchat-handle-218-message): Do not indent + explicitly. + +1999-08-08 Daiki Ueno + + * irchat-compat.el (with-timeout): New macro for compatibility. + + * irchat-xemacs.el: Check `horizontal-scrollbar-visible-p' for + XEmacs 20.4. + + * irchat.el (irchat-open-server): Do not truncate trailing `_'. + + * Liece 1.3.5. + + * irchat-handle.el (irchat-handle-mode-message): Handle channel + invite list. + (irchat-handle-join-message): Pass optional argument to + `match-string'. + + * irchat-channel.el (irchat-channel-get-invites): New macro. + (irchat-channel-add-invite): New macro. + (irchat-channel-remove-invite): New macro. + (irchat-channel-set-invite): New macro. + + * irchat-300.el: Handle channel invite list. + (irchat-handle-346-message) : New handler. + (irchat-handle-347-message) : New handler + +1999-08-07 Daiki Ueno + + * irchat-200.el: Register 200 handler again. + (irchat-handle-200-message): Do not indent explicitly. + (irchat-handle-201-message): Likewise. + (irchat-handle-213-message): Likewise. + (irchat-handle-214-message): Likewise. + (irchat-handle-262-message) : New handler. + + * irchat-300.el (irchat-handle-365-message): Turn hops count into + string. + + * irchat-xemacs.el (irchat-toolbar-map-button-list): Fix typo. + +1999-08-06 Daiki Ueno + + * irchat-intl.el (irchat-intl-load-catalogue): Add nil check. + (irchat-intl-catalogue-path): Fix last change. + +1999-08-06 Daiki Ueno + + * irchat-window.el (irchat-window-load-style-file): Cache + `irchat-window-style-directory'. + + * irchat-xemacs.el (irchat-xemacs-icon-path): Cache + `irchat-icon-directory'. + + * irchat-intl.el (irchat-intl-catalogue-path): New macro. + (irchat-intl-load-catalogue): Use it. + + * irchat-make.el (install-update-manifest-file): Fix for data + directories. + (config-irchat-package-directory): Splitt into + `config-irchat-package'. + + * irchat-xemacs.el: Do not require `smiley'. + (irchat-xemacs-icon-path): New macro. + (irchat-toolbar-icon-plist-get): Use it. + (irchat-xemacs-setup-toolbar): Use it. + (irchat-xemacs-create-nick-glyph): Use it. + (irchat-xemacs-modeline-glyph): Use it. + + * irchat-vars.el (irchat-use-smiley): Abolish. + + * irchat-hilit.el (irchat-maybe-smiley-region): Abolish. If you + want to use this functionality, please setup `irchat-insert-hook'. + +1999-08-05 Daiki Ueno + + * liece.xpm: New splash logo. + + * irchat-xemacs.el (irchat-xemacs-splash-at-point): Use + `glyph-width', `glyph-height' and `window-pixel-height' to + calculate position of the splash logo. + +1999-08-04 Daiki Ueno + + * irchat-compat.el (irchat-find-data-directory): Move from + `irchat-misc'. + + * irchat-intl.el: Use new style macros. + (irchat-intl-parse-Content-Type): Check statically if + `mime-content-type-parameter' is available. + (irchat-intl-load-catalogue): Use `irchat-find-data-directory'. + + * irchat.el (irchat-open-server): Add server parameter `relay'. + + * irchat-window.el (irchat-window-set-default-style): Use + `irchat-find-data-directory'. + + * irchat-tcp.el: Fix comment string. + (irchat-tcp-open-rlogin-stream): New function. + (irchat-tcp-open-rlogin-stream-as-binary): New function. + (irchat-tcp-default-connection-type): Add rlogin to custom spec. + (irchat-tcp-rlogin-program): New variable. + (irchat-tcp-relay-host): New variable. + (irchat-tcp-rlogin-parameters): New variable. + (irchat-tcp-rlogin-user-name): New variable. + +1999-08-03 Daiki Ueno + + * irchat-config.el (irchat-config-info-file-regexp): New variable. + + * irhcat-hilit.el: Require font-lock during compilation. + + * irchat-vars.el (irchat-tab-stop-list): New variable. + + * irhcat-000.el, irchat-200.el, irchat-300.el, irchat-400.el, + irchat-ctcp.el: Do not use `mapcar' when registering handlers. + + * irchat-misc.el (irchat-find-etc-directory): New function. + + * irchat.el: Add autoloads for + `bitmap-stipple-xbm-file-to-stipple' and + `bitmap-stipple-insert-pixmap'. + + * irchat-xemacs.el (irchat-x-face-insert-with-xemacs): Use xface + glyph if this feature has been provided and `console-type' returns + 'tty or 'pc, or otherwise make string glyph. + [Rename from overriding function `irchat-x-face-insert'] + (irchat-xemacs-create-nick-glyph): Call `console-type' instead of + referring `window-system'. + (irchat-xemacs-modeline-glyph): Check current console type. + (irchat-xemacs-splash-at-point): Ditto. + (irchat-find-etc-directory): Advise it. + + * irchat-compat.el (irchat-static-autoload): New macro. + (colon-keyword-usable): New facility checking. + + * irchat-x-face.el: Add autoloads for `x-face-encode', + `x-face-read-existing-file-name', `bitmap-insert-xbm-buffer', + `bitmap-decode-xbm', `bitmap-read-xbm-buffer' and `bitmap-compose'. + (irchat-x-face-insert-function): New variable. + (irchat-x-face-insert-with-bitmap): Rename from overriding + function `irchat-x-face-insert'. + + * irchat-url.el: Do not check with requiring browse-url. Assume + that function `browse-url' have already been autoloaded. + +1999-08-01 Daiki Ueno + + * irchat.el (irchat-command-mode): Set local value of + `next-line-add-newlines' 't. + (irchat-wait-for-response): Use `with-timeout'. + (irchat): Do not use `make-variable-buffer-local' when + `irchat-freeze' and `irchat-own-freeze' are initialized. + (irchat-dialogue-mode): Define `irchat-freeze' and + `irchat-own-freeze' here. + + * irchat-misc.el (next-line): Abolish. + + * irchat-handle.el (irchat-handle-nick-message): Fix typo. + +1999-07-30 Daiki Ueno + + * irchat-inlines.el (string-list-modify-ignore-case): Fix typo. + +1999-07-29 Daiki Ueno + + * irchat-make.el: Generate file `MANIFEST.liece'. + (install-update-manifest-file): New function. + +1999-07-28 Daiki Ueno + + * irchat-commands.el (irchat-command-end-of-buffer): Do not use + `set-window-point'. + + * irchat-300.el (irchat-handle-367-message): Use + `irchat-channel-add-ban' instead of temp variable. + (irchat-367-channel): Abolish. + (irchat-367-regexps): Abolish. + (irchat-handle-348-message): New handler for handling channel + exception list. + (irchat-handle-349-message): New handler for handling channel + exception list. + +1999-07-27 Daiki Ueno + + * irchat-handle.el (irchat-handle-mode-message): Handle channel + exception list. + + * irchat-channel.el: (irchat-channel-get-exceptions): New macro. + (irchat-channel-add-exception): New macro. + (irchat-channel-remove-exception): New macro. + (irchat-channel-set-exception): New macro. + +1999-07-25 Daiki Ueno + + * irchat-commands.el (irchat-command-end-of-buffer): Do not use + `pop-to-buffer'. + (irchat-command-describe-briefly): Do not use backquote. + +1999-07-24 Daiki Ueno + + * irchat-compat.el: Do not refer `widget-minor-mode-map'. + + * irchat-hilit.el (irchat-highlight-maybe-turn-on-widget): Use + `current-local-map' instead of `widget-minor-mode-map'. + + * Liece 1.3.4. + + * irchat-q-ccl.el (irchat-quote-ccl-encode-region): Fix typo. + + * irchat-crypt.el: Add autoload for `crc32-string'. + (irchat-crypt-hash-crc32-string): New function. + (irchat-crypt-default-hash-function): New variable. + (irchat-crypt-key-fingerprint): Rewrite with above functions. + + * irchat-handle.el (irchat-handle-topic-message): Fix argument + order of `irchat-channel-set-topic'. + + * irchat-misc.el (irchat-maybe-update-channel-indicator): Abolish. + Call `irchat-set-channel-indicator' directly. + + * irchat-nick.el (irchat-nick-replace): Remove widgets. + + * irchat-menu.el (irchat-nick-popup-menu): Move "Kick" menu to the + bottom of menu entries. + + * irchat-xemacs.el (irchat-xemacs-setup-menu): Ditto. + +1999-07-23 Daiki Ueno + + * irchat-globals.el (irchat-frame-title-format-last): Abolish. + + * irchat.el (irchat-accept-response): Call `irchat' with no + arguments. Here's the point that take care of growing tail. + (irchat): Call `irchat-window-configuration-pop' and + `irchat-window-configuration-push' consequently. + + * irchat-commands.el (irchat-command-keepalive): Call `irchat' + with no arguments. + + * irchat-filter.el (irchat-sentinel): Call `irchat' with no + arguments. + + * irchat-window.el: Add window configuration stack utility. + (irchat-window-configuration-push): New function. + (irchat-window-configuration-pop): New function. + (irchat-window-configuration-stack): New variable. + + * irchat-compat.el: Require wid-edit and wid-browse during + compilation. + (widget-minor-mode-map): Bind `mouse-button-3'. + (irchat-dont-set-event-point): New advice against + `widget-button-click' for FSF Emacs. + (irchat-save-current-buffer): New advice against + `widget-button-click' for FSF Emacs. + (remassq): New function. + + * irchat-channel.el (irchat-channel-push-button): Abolish. + (irchat-channel-list-insert): Abolish. + (irchat-channel-button): New widget. + (irchat-channel-add-button): New function. + (irchat-channel-button-action): New function. + + * irchat-url.el: Use widget. + (irchat-url-link): New widget. + (irchat-url-add-button): New function. + (irchat-url-iterate-buffer): Abolish. + (irchat-url-search-forward): Abolish. + (irchat-url-add-to-completion): Abolish + (irchat-url-link-action): Renamed from irchat-url-push-button. + + * irchat-hilit.el: Renamed from irchat-hilight.el. + (irchat-highlight-overlay-put-mouse-face): Abolish. + (irchat-highlight-insert-with-mouse-face): Abolish. + (irchat-highlight-insert-line-with-mouse-face): Abolish. + (irchat-highlight-with-widget): Abolish. + (irchat-url-face): Abolish. + (irchat-mouse-face): Abolish. + (irchat-highlight-maybe-turn-on-widget): New function. + This function turns on `widget-minor-mode' in + `irchat-nick-mode', `irchat-channel-list-mode' or + `irchat-dialogue-mode'. + +1999-07-21 Daiki Ueno + + * Liece 1.3.3. + + * irchat.el (irchat-override-command-keys): Bind "\C-c\C-a" to + `irchat-command-previous-channel'. + + * irchat-crypt.el: Add routines for encapsulate cipher algorithms. + (irchat-crypt-import-cipher-algorithm): New function. + (irchat-crypt-key-fingerprint): New function. + (irchat-crypt-build-decryption-key): New function. + (irchat-crypt-build-encryption-key): New function. + (irchat-crypt-encrypt-string): New function. + (irchat-crypt-decrypt-string): New function. + (irchat-crypt-algorithm-major-version): New function. + (irchat-crypt-algorithm-minor-version): New function. + (irchat-crypt-secure-passphrase-read): Abolish. + (irchat-crypt-ignore-suspicious): Abolish. + (irchat-crypt-ignore-defected): Abolish. + (irchat-get-idea-decryption-key): Abolish. + (irchat-command-set-default-key): Check if this function was + called interactively. + (irchat-command-add-decryption-key): Renamed from + `irchat-command-add-new-key'. + (irchat-command-delete-decryption-key): Renamed from + `irchat-command-delete-key'. + (irchat-crypt-decryption-keys): Renamed from + `irchat-crypt-known-keys'. + (irchat-crypt-encryption-keys): Renamed from + `irchat-crypt-default-keys'. + + * irchat-coding.el (irchat-default-mime-charset-for-read): New + variable. Default to 'x-ctext. + + * irchat-compat.el: Do not require 'defface. + (irchat-compat-enable-to-read-multibyte): Abolish. + + * irchat-modules.el (irchat-modules-to-compile): Remove + `irchat-ck-*' and `defface'. Use `japanese-zenkaku-*' with hook. + + * irchat-vars.el (irchat-convert-hankaku-katakana): Abolished. + + * irchat-inlines.el: All string functions are rewritten. + +1999-07-05 Daiki Ueno + + * irchat-ctcp.el: Register ACTION handler. + +1999-07-04 Daiki Ueno + + * irchat-version.el (irchat-emacs-user-agent-value): Modify for + XEmacs UTF-2000-MULE. + + * irchat-crypt.el: Do not use IDEA as the default cipher algorithm. + (irchat-crypt-cipher-algorithm): New variable. + (irchat-crypt-encrypt-message-format): Add version field of + the cipher algorithm. + (irchat-crypt-current-keys): Always restore the computed keys into + this variable. [Renamed from irchat-default-idea-key-list] + +1999-06-26 Daiki Ueno + + * irchat-xemacs.el (irchat-use-toolbar): Add custom spec. + (irchat-toolbar-toggle-crypt): Check irchat-use-toolbar. + (irchat-setup-toolbar): Ditto. + +1999-06-14 Daiki Ueno + + * Liece 1.3.2. + + * irchat.el (irchat-define-keys): Rewrite. + (irchat-truncate-nickname): Rewrite; rename from irchat-read-nickname. + + * irchat-handle.el, irchat-400.el, irchat-300.el, irchat-200.el, + irchat-000.el: + Declarations of hook variables are splitted into each file. + + * irchat-300.el: Register 322 reply handler. + +1999-06-11 Daiki Ueno + + * irchat.el (irchat-dialogue-mode-map): Bind mouse-button-2 to + irchat-url-push-button. + + * irchat-url.el (irchat-url-push-button): Check all overlays + around event point. + + * irchat-filter.el (irchat-handle-message): Ignore errors which + occurs during hook evaluation. + + * irchat-ctcp.el (irchat-ctcp-message): Ignore errors which + occurrs during hook evaluation. + (irchat-ctcp-notice): Likewise. + (irchat-ctcp-file-notice): Likewise. + + * irchat-channel.el (irchat-channel-push-button): Use + irchat-overlays-at instead of overlays-at. + +1999-06-10 Daiki Ueno + + * irchat-hilight.el (irchat-quoted-colors-mirc): + Rename from irchat-quoted-colors. + (irchat-quoted-colors-ircle): New color table. + (irchat-highlight-maybe-hide-prefix): Fix regexp. + (irchat-highlight-colorize-quote): Check vender specific extension. + + * irchat-channel.el (irchat-channel-push-button): + Check all overlays under the point. + + * irchat-filter.el: Rename default backend name to "generic". + + * irchat-handle.el: Use multiple values bindings. + (irchat-handle-notice-message): Fix argument against + irchat-ctcp-notice. + + *irchat-misc.el (irchat-compose-time-string): Use + format-time-string. Now only accepts encoded time. + + * irchat-misc.el (irchat-pick-buffer): Check if chnl is string and + apropriate buffer does not exist. + (irchat-pick-buffer-1): Do not return buffer list. + +1999-06-10 Daiki Ueno + + * irchat.el (irchat-debug-mode-map): Abolish. + (irchat-debug-keys): Abolish. + (irchat-command-keys): Fix return key code. + + * irchat-window.el (irchat-window-to-buffer): + Remove irchat-debug-buffer. + + * irchat-vars.el (irchat-debug-mode-hook): Abolish. + (irchat-debug-prefix): Abolish. + + * irchat-nick.el (irchat-nick-equal): New alias to string-ci-equal. + (irchat-nick-member): New function. + (irchat-command-toggle-nick-buffer-mode): Do not toggle when + irchat-nick-buffer has not been created. + + * llhandler.el, irchat-modules.el (irchat-modules-to-compile): + Remove llhandler. + + * irchat-misc.el (irchat-split-line): New function. + (irchat-split-rest): Abolish. + (irchat-with-split-rest): Abolish. + (irchat-maybe-update-channel-indicator): Do not use backquote. + (irchat-freeze-toggle): Use irchat-nick-equal. + (irchat-message-from-ignored): Rename from irchat-msg-from-ignored. + + * irchat-message.el (irchat-message-parent-buffer): + Use irchat-nick-equal. + + * irchat-make.el (compile-irchat): Add comments. + + * irchat-intl.el (irchat-intl-prepare-prefix): + Do not treat irchat-debug-prefix. + + * irchat-inlines.el (filter-elements): Move from irchat-compat. + + * irchat-globals.el (irchat-debug-buffer): Remove. + + * irchat-crypt.el (irchat-idea-encrypt-message-format): Rename from + irchat-idea-encrypt-msg-format. + (irchat-crypt-maybe-decrypt-message): Use irchat-nick-equal. + + * irchat-compat.el: Require cl at load time. + (buffer-or-string-p): Remove. + (irchat-get-buffer-window): Enclose with eval-and-compile. + (irchat-get-buffer-window-list): Ditto. + (irchat-mode-line-buffer-identification): New alias to 'identity. + (mapvector): Remove. + + * irchat-commands.el (irchat-command-debug): Abolished. + (irchat-command-join-channel): Use irchat-channel-equal. + (irchat-command-join): Use force-mode-line-update. + (irchat-command-private-conversation): Ditto. + (irchat-command-list): Check if 1st argument is empty string. + (irchat-command-who): Ditto. + (irchat-command-names): Ditto. + (irchat-command-mode+o): Use irchat-nick-member. + + * irchat-channel.el (irchat-command-toggle-channel-buffer-mode): + Do not toggle when + irchat-channel-buffer has not been created. + + * irchat-handle.el, irchat-filter.el, irchat-dcc.el, + irchat-ctcp.el, irchat-500.el, irchat-400.el, irchat-300.el, + irchat-200.el, irchat-000.el: Use llunf instead of llhandler. + + * llunf.el: New file. + + * idea.el, b64.el (>>): Move from irchat-compat. + (<<): Ditto. + +1999-06-06 Daiki Ueno + + * irchat-misc.el (irchat-freeze-toggle): Use force-mode-line-update. + (irchat-own-freeze-toggle): Ditto. + + * irchat-dcc.el: Require irchat-minibuf.el. + (irchat-command-dcc-send): Use + irchat-minibuffer-completing-default-read. + (irchat-command-dcc-chat-listen): Ditto. + +1999-06-04 Daiki Ueno + + * irchat.el (irchat-override-command-keys): Add "\C-v" and "l". + (irchat-dialogue-keys): Remove "\C-v" and "\C-f". + + * irchat.el (irchat-override-command-keys): + Add "\C-n", "\C-p" and "\C-a". + (irchat-dialogue-keys): Remove "\C-n" and "\C-p". + + * irchat-nick.el (irchat-nick-set-user-at-host): New macro. + (irchat-nick-mark-as-apart): New macro. + (irchat-nick-unmark-as-apart): New macro. + + * irchat-version.el (irchat-emacs-user-agent-value): + Ignore parenthesis in + `emacs-version' for XEmacs 21.2.15. + +1999-06-03 Daiki Ueno + + * irchat-handle.el, irchat-dcc.el, irchat-500.el, irchat-300.el, + irchat-200.el: Do not check "strange" reply. + + * irchat-message.el (irchat-message-parent-buffer): + Check if irchat-current-channel exists. + + * irchat-coding.el: Do not require irchat-vars. + + * irchat-menu.el (irchat-nick-popup-menu): + Enclose save-selected-window. + + * irchat-misc.el (irchat-get-buffer-create): Do not use unless. + + * irchat-nick.el (irchat-nick-change): Set chnl property internally. + + * irchat-dcc.el (irchat-command-dcc-chat-listen): + Use irchat-get-buffer-create instead + of get-buffer-create. + (irchat-command-dcc-chat-connect): Ditto. + (irchat-dcc-compare-hostnames): Ditto. + + * irchat-ctcp.el (irchat-file-start): + Use irchat-get-buffer-create instead of + get-buffer-create. + (irchat-file-cont): Ditto. + (irchat-file-end): Ditto. + (irchat-ctcp-client-notice): Ditto. + + * irchat.el (irchat-open-server-internal): + Use irchat-get-buffer-create instead of + get-buffer-create. + (irchat-dialogue-setup-buffer): Ditto. + (irchat-others-setup-buffer): Ditto. + (irchat-channel-list-setup-buffer): Ditto. + (irchat-private-setup-buffer): Ditto. + (irchat-KILLS-setup-buffer): Ditto. + +1999-06-02 Daiki Ueno + + * irchat-xemacs.el (irchat-xemacs-nick-popup-menu): + Remove save-excursion. + + * irchat-channel.el (irchat-channel-push-button): + Remove save-excursion, just use save-selected-window instead. + (irchat-channel-real): Remove save-match-data. + + * irchat.el (irchat-clear-system): + Check irchat-obarray has been initialized. + + * Makefile.am (SOURCES): Add irchat-message.el and irchat-coding.el. + (EXTRA_DIST): Add liece.xbm. + +1999-06-02 Daiki Ueno + + * Liece 1.3.1. + + * irchat-url.el (url-irc-liece): New function. + [should be called from url-irc.el] + + * Makefile.am (EXTRA_DIST): Add bitmap-stipple. + +1999-06-02 Daiki Ueno + + * irchat-coding.el (irchat-detect-coding-region): New function. + (irchat-detect-coding-region-function): Use above. + + * irchat-coding.el (irchat-detect-coding-string): New function. + (irchat-detect-coding-string-function): Use above. + + * irchat-channel.el (irchat-channel-push-button): + Switch to channel list buffer. + +1999-06-02 Daiki Ueno + + * irchat-nick.el (irchat-nick-update-region): Undo last change. + + * irchat-menu.el (irchat-nick-popup-menu): Switch to nick buffer. + + * irchat-filter.el: fix comments. + (irchat-filter): Split multiple lines without string matching. + (irchat-handle-message): Renamed from irchat-handle-message-2. + (irchat-parse-user-at-host): New function. + + * irchat-coding.el (irchat-detect-coding-region-function): Renamed from + irchat-custom-detect-coding-region-function. + (irchat-detect-coding-string-function): Renamed from + irchat-custom-detect-coding-string-function. + +1999-06-01 Daiki Ueno + + * irchat.el (irchat-command-mode): Do not use mapvector. + + * irchat-handle.el (irchat-handle-notice-msg): Fix arguments against + with-irchat-decryption. + (irchat-handle-privmsg-msg): Likewise. + + * irchat-commands.el (irchat-command-send-message): Fix arguments of + with-irchat-encryption. + (irchat-command-message): Likewise. + + * irchat-crypt.el (irchat-crypt-maybe-decrypt-message): + Exchange car with cdr in arglist. + (with-irchat-encryption): Accept flat arglist. + (with-irchat-decryption): Likewise. + + * irchat.el (irchat-nick-mode-map): Define as prefix commands. + + * irchat.el (irchat-channel-mode): Eliminate channel indicator. + (irchat-others-mode): Likewise. + (irchat-dialogue-mode): Likewise. + + * irchat-misc.el (irchat-set-channel-indicator): + Eliminate channel indicator. + + * irchat-ctcp.el (irchat-ctcp-action-msg): + Use irchat-display-message. + +1999-06-01 Daiki Ueno + + * irchat-400.el: Remove redundancies on regexps. + (irchat-handle-432-msg) : Rewrite. + (irchat-handle-433-msg) : Resend NICK command only + if irchat-auto-iterate-nick is non-nil. + + * irchat.el (irchat-command-keys): Add irchat-command-mode+o, + irchat-command-mode-o, irchat-command-mode+v, irchat-command-mode-v. + XXX: Should be prefixed commands? + +1999-05-31 Daiki Ueno + + * irchat-message.el (irchat-message-predicate): + Normalize irchat-message-blackets-predicate. + + * irchat-inlines.el (irchat-eval-form): New function. + + * irchat-message.el (irchat-message-predicate): + Rename specifier typep to type. + + * irchat-misc.el (irchat-own-channel-message): + Bind irchat-message-direction 'outgoing. + (irchat-own-private-message): Ditto. + + * irchat-message.el (irchat-message-tags): New variable. + (irchat-message-tags-function): New function. + (irchat-message-private-buffer): Abolished. + Use irchat-message-buffer-function. + +1999-05-31 Daiki Ueno + + * irchat-nick.el (irchat-nick-update-region): + Move opening save-excursion. + + * irchat-channel.el (irchat-channel-push-button): + Move point to event ocurred position before calling + irchat-nick-update-region. + + * irchat-nick.el (irchat-nick-update-region): + Remove argument event from arglist. + + * irchat-menu.el (irchat-nick-popup-menu): + Move point to event ocurred position before calling + irchat-nick-update-region. + + * irchat-xemacs.el (irchat-xemacs-setup-menu): + Remove argument event from arglist. + (irchat-xemacs-nick-popup-menu): Move point to event ocurred + position before calling irchat-nick-update-region. + + * irchat.el: Use modern key sequence expression. + (irchat-command-map): New keymap which override + irchat-dialogue-keys with prefix command ("\C-c"). + (irchat-friends-map): New keymap. [prefix command for friends] + (irchat-dialogue-keys): Import some useful command keys. + + * irchat-channel.el (irchat-channel-parse-representation): + To remove let, construct representation object directly. + + * irchat-channel.el (irchat-channel-list-insert): Remove format. + + * irchat-vars.el: Do not require mcharset. + + * irchat.el (irchat-nick-mode-map): Do not check xemacs. + + * irchat-xemacs.el (irchat-nick-popup-menu): New alias to + irchat-xemacs-nick-popup-menu which override original one. + + * irchat-compat.el: Use emu's mouse-button emulation. + (irchat-button2): Abolished. + (irchat-button3): Abolished. + + * irchat-vars.el (irchat-variables-files): Do not load + `~/.irchat3_vars.el' at startup time. + + * irchat-vars.el (irchat-debug-prefix): Clear. + + * irchat.el: Do not check `set-face-stipple' is bound. + (irchat-x-splash): Add interactive spec. + +1999-05-30 Daiki Ueno + + * irchat.el (irchat-x-splash): Do centering. + + * bitmap-stipple.el (bitmap-stipple-insert-pixmap): + Add optional argument center. + + * liece.xbm: New file. + + * irchat.el: Check if liece.xbm exists. + + * irchat.el (irchat-stipple-pixmap): New variable. + (irchat-x-splash): New function. + + * bitmap-stipple.el: New file. + + * irchat-modules.el (irchat-modules-to-compile): Add bitmap-stipple. + + * irchat-commands.el (irchat-command-send-action): Fix typo. + + * irchat-hilight.el (irchat-highlight-font-lock-keywords): + Fix regexp. + + * irchat-inlines.el (irchat-or): New function. + (irchat-and): New function. + + * irchat-filter.el (irchat-handle-msg-msg): Abolished. + + * irchat-crypt.el (irchat-message-encrypted-p): Move into + irchat-message. + (irchat-message-suspicious-p): Ditto. + (irchat-message-garbled-p): Ditto. + (irchat-message-fingerprint): Ditto. + (irchat-message-timestamp): Ditto. + + * irchat-vars.el: All format strings are removed. + (irchat-format-string): Abolished. + + * irchat-modules.el (irchat-modules-to-compile): Add + irchat-message. + + * irchat-dcc.el (irchat-dcc-chat-filter): Use + irchat-display-message. + + * irchat-commands.el (irchat-command-send-action): + Bind irchat-message-type. + + * irchat-handle.el (irchat-handle-privmsg-msg): + Use irchat-display-message. + (irchat-handle-privmsglike-msg): Abolished. + + * irchat-misc.el (irchat-own-channel-message): + Use irchat-display-message. + (irchat-own-private-message): Likewise. + + * irchat-message.el: New file. + +1999-05-29 Daiki Ueno + + * irchat.el, irchat-vars.el (irchat-before-kill-emacs-hook): New hook. + +1999-05-29 Daiki Ueno + + * irchat-vars.el (irchat-signoff-message): + Renamed from irchat-signoff-msg. + + * irchat.el (irchat-obarray-size): Moved from irchat-globals.el. + + * irchat-globals.el: Remove obsolete variables. + + * irchat-ctcp.el (irchat-client-error-message): + Moved from irchat-globals.el. + + * irchat-commands.el (irchat-save-variables-are-dirty): Renamed + from irchat-save-vars-is-dirty. + (irchat-command-send-action): Add prefix. + + * irchat-400.el (irchat-nickname-last): Renamed from + irchat-old-nickname. + + * irchat-000.el (irchat-servername): Abolished. + +1999-05-28 Daiki Ueno + + * irchat-crypt.el: Do not require 'idea. + + * irchat-commands.el (irchat-command-message): Treat channel target. + + * irchat-300.el (irchat-handle-317-msg) : + Add argument rest to match-string. + +1999-05-28 Daiki Ueno + + * Liece 1.2.8.25. + + * irchat.el (irchat-command-keys): Do not bind lisp-complete-symbol. + + * irchat-commands.el (irchat-command-load-vars): Enclose body with + unwind-protect. + (irchat-command-complete): Use irchat-minibuffer-finalize-completion. + (get-word-left): Abolished. + (irchat-switch-to-channel-1): New function. + (irchat-switch-to-channel): Use irchat-switch-to-channel-1. + (irchat-switch-to-channel-no): Likewise. + (irchat-command-message): Check crypt-type. + + * irchat-minibuf.el (irchat-minibuffer-complete-channel-modes): + Complete ban patterns. + (irchat-minibuffer-parse-modes): Rename property 'uah to 'ban. + + * irchat-handle.el (irchat-handle-mode-msg): + Use irchat-channel-set-ban. + + * irchat-channel.el (irchat-channel-add-ban): New macro. + (irchat-channel-remove-ban): New macro. + (irchat-channel-set-ban): New macro. + (irchat-channel-get-bans): New function. + + * irchat-300.el: + (irchat-handle-317-msg) : Remove condtionals for + obsolete servers. [2.5 or 2.6]. + (irchat-handle-367-msg) : Treat it as generic long + reply handler. + (irchat-367-channel): New variable. + (irchat-367-regexps): New variable. + (irchat-handle-368-msg) : Save ban patterns as + 'ban property. + +1999-05-26 Daiki Ueno + + * irchat.el (irchat-clear-system): + Use dotimes when initializing irchat-obarray. + +1999-05-26 Daiki Ueno + + * irchat.el (irchat-command-keys): + Bind irchat-command-display-friends. + + * irchat-commands.el (irchat-command-display-friends): New command. + + * irchat-vars.el (irchat-display-friends-function): New variable. + + * irchat-300.el (irchat-303-display-friends): New function. + (irchat-303-display-all-friends): New function. + + * irchat-minibuf.el (irchat-minibuffer-complete-channel-modes): + Complete nickname using operators and voices. + (irchat-minibuffer-parse-modes): Likewise. + (irchat-minibuffer-finalize-completion): Notice no match found. + + * Makefile.am: New file. + +1999-05-25 UENO Daiki + + * irchat.el (irchat-others-mode): Set parent mode explicitly. + (irchat-channel-mode): Ditto. + +1999-05-24 Daiki Ueno + + * irchat-minibuf.el (irchat-minibuffer-parse-modes): Parse ban + pattern. + + * irchat-200.el (irchat-handle-206-msg) : + Use multiline display format. + (irchat-handle-214-msg) : Likewise. + (irchat-handle-213-msg) : Likewise. + + * irchat-ctcp.el (irchat-client-insert): Quote format string. + +1999-05-23 Daiki Ueno + + * Liece 1.2.8.24. + + * irchat-ctcp.el (irchat-minibuffer-complete-client-query): Use + `irchat-minibuffer-finalize-completion'. + + * irchat-minibuf.el (irchat-minibuffer-finalize-completion): New + function. + (irchat-minibuffer-complete-channel-modes): Use above. + + * irchat.el (irchat-check-buffers): Fix loop condition. + +1999-05-23 Daiki Ueno + + * irchat-dcc.el (irchat-dcc-message): New function. + + * irchat-nick.el (irchat-nick-join-1): Check dups. + + * irchat-ctcp.el (irchat-client-insert): New function. + + * irchat-commands.el (irchat-command-prepare-message-prefix): + Abolished. + (irchat-command-prepare-own-message-prefix): Ditto. + + * irchat-misc.el (irchat-own-private-message): Generate prefix + string automatically. + (irchat-own-channel-message): Likewise. + +1999-05-22 Daiki Ueno + + * irchat-compat.el (run-hook-with-args-until-success): Abolished. + + * irchat.el (irchat-command-mode): Change mode-line-format. + (irchat-open-server): Save password. + (irchat-insert-internal): Rewrite. + + * irchat-200.el (irchat-handle-215-msg) : + Fix regexp. + (irchat-handle-242-msg) : Cut off preceding `:'. + (irchat-handle-205-msg) : Fix typo. + (irchat-handle-218-msg) : Fix display format. + +1999-05-13 Daiki Ueno + + * irchat-inlines.el (format-quote): Abolished. + + * irchat-ctcp.el (irchat-ctcp-action-msg): Pass arguments to + PRIVMSG handler. + + * irchat-hilight.el (irchat-highlight-turn-on-font-lock): Make + `after-change-hook' local. + +1999-05-12 sphere + + * irchat-url.el (irchat-command-browse-url): Fix typo. + +1999-05-11 Daiki Ueno + + * irchat-crypt.el (irchat-command-set-default-key): Fix typo. + + * irchat-window.el (irchat-command-set-window-style): Fix typo. + + * irchat-url.el (irchat-command-browse-url): Fix typo. + + * irchat-channel.el (irchat-channel-set-voice): Quote regexp. + +1999-05-09 Daiki Ueno + + * irchat-ctcp.el (irchat-command-client-time): Fix typo. + + * irchat.el (irchat-channel-mode): Explicitly define as + it derives from `irchat-dialogue-mode'. + (irchat-others-mode): Ditto. + + * irchat-compat.el (irchat-kill-all-overlays): New function. + + * irchat-nick.el (irchat-nick-update): Do not switch to buffer. + (irchat-nick-join): Do not check whether nickname has been inserted. + (irchat-nick-update): Kill all overlays. + + * irchat-mail.el: Follow the value of `mail-user-agent'. + (irchat-mail-pop-to-buffer): Abolished. + (irchat-mail-compose-with-mail): Abolished. + (irchat-mail-compose-with-gnus): Abolished. + + * irchat-inlines.el (nth1, nth1cdr):Abolished. + (matching-substring): Abolished. + (irchat-greater-flags): Abolished. + +1999-05-08 Daiki Ueno + + * irchat-300.el (irchat-353-scan-channels): New macro. + + * irchat-minibuf.el (irchat-minibuffer-completing-default-read): + Renamed from `irchat-completing-default-read'. + (irchat-minibuffer-completing-sequential-read): Renamed from + `irchat-completing-sequential-read'. + + * irchat-channel.el (irchat-channel-set-operator-1): Renamed from + `irchat-set-channel-operator' within irchat-misc.el. + Restrict its use to internal only. + (irchat-channel-set-voice-1): Likewise. + + * irchat-commands.el (irchat-command-wait): Abolished. + + * irchat-nick.el (irchat-nick-update): Assume that the 2nd + argument CHNL is one of channels we've already joined. + + * irchat-misc.el (irchat-change-nick-of): Change nicks, opers and + voices properties properly. + (irchat-change-nick-of-1): New function. Modify nick alist by + side effect. + (irchat-change-nick-of-2): New function which resembles above, + but it acts on singular list. + (irchat-greet-user): Abolished. + (irchat-user-on-my-channel): Abolished. + (irchat-user-on-this-channel): Abolished. + + * irchat-handle.el (irchat-handle-channel-msg): Do not use + `irchat-change-nick-of' directly. + (irchat-handle-nick-msg): Likewise. + (irchat-handle-quit-msg): Likewise. + +1999-05-07 Daiki Ueno + + * irchat-commands.el (irchat-command-nickname): Do not set + `irchat-real-nickname'. + +1999-05-06 Daiki Ueno + + * Liece 1.2.8.23. + + * irchat-hilight.el (irchat-quoted-colors): New variable. + (irchat-highlight-colorize-quote): New function. + (irchat-highlight-turn-on-font-lock): Add buffer locality to + some members of `after-change-hook'. + + * Makefile (install): Do not depend on `dcc'. + +1999-05-05 Daiki Ueno + + * irchat-handle.el (irchat-handle-part-msg): Call + `irchat-channel-part' and `irchat-nick-part' exclusively. + (irchat-handle-kick-msg): Likewise. + + * irchat-channel.el (irchat-channel-equal): New alias. + (irchat-channel-member): Renamed from `irchat-channel-memberp'. + (irchat-channel-join-internal): New function. + (irchat-channel-part-internal): New function. + + * irchat-ctcp.el (irchat-ctcp-client-msg): Fix reply string. + + * irchat-minibuf.el (irchat-minibuffer-parse-modes): Completion + fixed for ban pattern. + + * irchat-nick.el (irchat-nick-normalize): New macro. + (irchat-nick-strip): New macro. + (irchat-nick-parse-nick-after): New function. + + * irchat-handle.el (irchat-handle-silence-msg): New handler. + +1999-05-04 Daiki Ueno + + * irchat-handle.el (irchat-handle-part-msg): Fix quotation of part + message. + + * irchat-400.el: Fix unconsistent user data returned from pirc. + (irchat-handle-442-msg): `ERR_NOTONCHANNEL'. + (irchat-handle-443-msg): `ERR_USERONCHANNEL'. + + * irchat-misc.el (irchat-update-thischannel): Abolished. + + * irchat-commands.el (irchat-channel-virtual): Save matched data. + (irchat-channel-real): Likewise. + + * irchat-300.el (irchat-handle-364-msg): `RPL_LINKS'. Fix regexp. + (irchat-handle-333-msg): New hander for `RPL_TOPICWHOTIME'. + (irchat-handle-namereply-msg): Abolished. + (irchat-handle-whoreply-msg): Abolished. + + * irchat-000.el (irchat-handle-005-msg): `RPL_MAP'. + Support for ircu server mapping facility. + (irchat-handle-006-msg): New handler for `RPL_MAPMORE'. + (irchat-handle-007-msg): New handler for `RPL_MAPEND'. + +1999-05-03 Daiki Ueno + + * irchat-handle.el (irchat-handle-part-msg): Handle left message. + + * irchat-custom.el (irchat-connection-timeout): New variable. + + * irchat.el (irchat-accept-response): Add optional arg timeout. + (irchat-accept-process-output): New function. + (irchat-clear-system): Reset `irchat-timers-list-initialized-p'. + (irchat-initialize-timers): Fix secs parameter. + + * irchat-xemacs.el (irchat-xemacs-run-at-time): New function. + + * irchat-compat.el (irchat-run-at-time): New alias. + (irchat-cancel-timer): New alias. + + * irchat-commands.el (irchat-command-start-ison-timer): Abolished. + (irchat-command-cancel-ison-timer): Abolished. + + * irchat-timer.el: Removed. + +1999-04-29 Daiki Ueno + + * irchat.el (irchat-initialize-timers): New function. + + * irchat-q-ccl.el (irchat-quote-ccl-decode-region): New function. + (irchat-quote-ccl-encode-region): New function. + + * irchat-q-el.el (irchat-quote-el-decode-region): New function. + (irchat-quote-el-encode-region): New function. + + * irchat-ctcp.el (irchat-complete-client): New macro. + (irchat-complete-query): New macro. + (irchat-command-client-time): New command. + (irchat-ctcp-client-msg): Rename each *-msg-hook to *-hook. + (irchat-minibuffer-complete-client-query): New function. + + * irchat-commands.el (irchat-command-activate-friends): Fix + completion. + + * irchat-compat.el (filter-elements): Add `lisp-indent-function' + property with value 2. + +1999-04-28 Daiki Ueno + + * irchat-dcc.el (irchat-dcc-object): Implement as cl-struct. + + * irchat-compat.el (irchat-static-require): New macro. + (irchat-static-require-if): New macro. + (irchat-static-defun-if): New macro. + + * Liece 1.2.8.22. + +1999-04-27 Daiki Ueno + + * README-styles.ja, TODO.ja, sample.dot.liece.ja: Removed. + +1999-04-26 Daiki Ueno + + * irchat-inlines.el: Require irchat-setup. + + * irchat-x-face.el: Use `static.el'. + + * irchat-handle.el (irchat-handle-join-msg): Set user-at-host + information after calling `irchat-nick-join'. + + * irchat-globals.el (irchat-default-channel-candidate): New + variable. + +1999-04-22 Daiki Ueno + + * irchat-handle.el (irchat-handle-324-msg): Fix regexp. + +1999-04-16 Daiki Ueno + + * irchat-xemacs.el: Add hooks to hide modelines. + +1999-04-12 Daiki Ueno + + * irchat.el (irchat-refresh-windows): New function. + + * irchat-300.el: Remove all occurrences of `matching-substring'. + (irchat-handle-352-msg): Do not pick-up channel buffer. + + * irchat-config.el, irchat-modules.el: New files. + +1999-04-07 Daiki Ueno + + * irchat.el (irchat-switch-to-channel-no-*): Use `dotimes' on the + definitions of themselves. + + * irchat-vars.el (irchat-ignore-spec-convert): Fix tag. + +1999-04-06 Daiki Ueno + + * dcc.c (send_file): Use `get_address_externally'. + (chat_listen): Likewise. + +1999-04-05 Daiki Ueno + + * getaddrinfo.c: Include `stdlib.h'. + +1999-04-04 Daiki Ueno + + * Liece 1.2.8.21. + + * irchat-handle.el (irchat-handle-mode-msg): Fix channel mode parser. + + * irchat-commands.el (irchat-command-ban-kick): New command. + (irchat-command-ban): New command. + + * irchat-ctcp.el (irchat-ctcp-version-msg): Eliminate the client + version string. + (irchat-client-version-notice): Fix regexp. + (irchat-client-version-insert): New function. + + * irchat-misc.el (irchat-repair-crlf): Fixed. + +1999-04-01 Daiki Ueno + + * tcp.c (NI_MAXHOST): Add check if it has been already defined. + + * irchat.el (irchat-command-keys): Bind `C-c C-j'. + +1999-03-31 Daiki Ueno + + * irchat-handle.el (irchat-handle-mode-msg): Fix regexp. + + * irchat-commands.el (irchat-command-finger): Add prefix arg. + +1999-03-30 Daiki Ueno + + * irchat-filter.el (irchat-handle-message): Fix regexp. + + * irchat-handle.el (irchat-handle-join-msg): Fix regexp. + (irchat-handle-nick-msg): Fix regexp. + +1999-03-24 Daiki Ueno + + * irchat-commands.el (irchat-command-finger): Specify nick twice. + + * liece-faq.texinfo: Fix URI of APEL's ftp sites. + +1999-03-17 Daiki Ueno + + * Liece 1.2.8.20. + + * irchat-crypt.el (with-irchat-encryption): New macro. + (with-irchat-decryption): New macro. + + * irchat-compat.el (valid-plist-p): Fixed. + + * irchat-tcp.el (irchat-tcp-default-connection-type): Renamed from + `irchat-tcp-connection-type'. + (irchat-open-network-stream-as-binary): Add optional arg `type'. + (irchat-open-network-stream): Likewise. + + * irchat-vars.el (irchat-server-alist): Add `:prescript' and + `:type' keywords. + +1999-03-16 Daiki Ueno + + * irchat-compat.el: Require `pcustom'. + (point-at-bol): Abolished. Use `line-beginning-position'. + (point-at-eol): Abolished. Use `line-end-position'. + + * tcp.c: New file. + + * irchat-tcp.el: New file; TCP/IP emulation using external program. + + * irchat-compat.el (read-passwd): New function to keep compatibility. + (passwd-echo): New variable to keep compatibility. + + * irchat-commands.el (irchat-command-who): Confirm really send WHO + command with no arguments. + (irchat-command-list): Likewise. + (irchat-command-names): Likewise. + + * irchat-misc.el (irchat-set-crypt-indicator): Activate crypt mode + also in private mode. + (irchat-read-passwd): Abolished. Use `read-passwd'. + + * irchat-crypt.el (irchat-crypt-maybe-encrypt-message): Renamed + from `irchat-crypt-with-encrypt-message'. + (irchat-crypt-maybe-decrypt-message): Likewise. + +1999-03-15 Daiki Ueno + + * irchat-handle.el (irchat-handle-join-msg): Fix regexp. + + * irchat-hilight.el (irchat-highlight-maybe-hide-quote): Fixed. + +1999-03-14 Daiki Ueno + + * Liece 1.2.8.19. + + * irchat-commands.el (irchat-command-poll-names): Check if + `irchat-server-opened' returns t. + (irchat-command-poll-friends): Likewise. + + * irchat-hilight.el (irchat-highlight-turn-on-font-lock): Remove + all hooks before calling `turn-on-font-lock'. + + * irchat-compat.el (run-hook-with-args-until-success): Do not use + `run-hook-with-args'. + + * irchat-filter.el (irchat-handle-message-2): Use + `run-hook-with-args-until-success' instead of + `run-hook-with-args'. + + * irchat-handle.el (irchat-handle-with-running-cleartext-hook): + Use `run-hook-with-args-until-success' instead of + `run-hook-with-args'. + (irchat-handle-run-cleartext-hook): Likewise. + (irchat-handle-run-hook-with-args): Likewise. + + * irchat-timer.el (irchat-start-timer): Use `run-at-time' with 1st + argument 0 instead of nil. + + * irchat-ctcp.el (irchat-query-client-nick-maybe-change): Return + with nil explicitly. + + * irchat-vars.el (irchat-service-spec): New widget. + (irchat-service-spec-convert): New function; widget-converter. + (irchat-server-spec): New widget. + (irchat-server-spec-convert): New function; widget-converter. + (irchat-ignore-spec): New widget. + (irchat-ignore-spec-convert): New function; widget-converter. + + * irchat-url.el (irchat-command-browse-url): Use the URL added + most recently, if `current-prefix' equals `-'. + (irchat-url-browser-netscape): Do not bind the process buffer. + + * irchat-menu.el (irchat-menu-add-button): Add 3rd argument. + +1999-03-13 Daiki Ueno + + * irchat-xemacs.el: Use extents instead of overlays. + (irchat-xemacs-put-text-property): New function. + (irchat-xemacs-get-text-property): New function. + (irchat-xemacs-kill-all-overlays): New function. + (irchat-xemacs-overlays-at): New function. + + * irchat-compat.el (irchat-make-overlay): New emulation function. + (irchat-delete-overlay): Ditto. + (irchat-overlay-put): Ditto. + (irchat-move-overlay): Ditto. + (irchat-overlay-end): Ditto. + (irchat-overlay-get): Ditto. + (irchat-overlays-at): Ditto. + (irchat-kill-all-overlays): Ditto. + +1999-03-12 Daiki Ueno + + * irchat-xemacs.el (irchat-toolbar-toggle-crypt): New function. + (irchat-toolbar-icon-convert): New function; widget-converter. + (irchat-toolbar-icon): New widget. + (irchat-toolbar-icon-plist-get): New function. + (irchat-toolbar-map-button-list): New function. + (irchat-xemacs-setup-toolbar): Renamed from + `irchat-xemacs-setup-toolbar-list'. + (irchat-toolbar-setup-crypt-glyph): New function. + (irchat-toolbar-toggle-crypt): New function. + (irchat-use-toolbar): New customizable variable. + + * irchat-compat.el (irchat-put-text-property): Implemented as + function. + + * irchat.el (irchat-after-load-startup-hook): New hook variable. + + * irchat-hilight.el (irchat-highlight-maybe-turn-on-font-lock): + New function. + + * Liece 1.2.8.18. + + * irchat-channel.el (irchat-channel-create-buffer): Use + `irchat-format-time-function'. + + * irchat-hilight.el: Use font-lock.el. + +1999-03-11 Daiki Ueno + + * irchat-debug.el (irchat-debug-enter-handler): Moved from + llhandler.el. + (irchat-debug-leave-handler): Ditto. + + * llhandler.el (llhandler-debug-enter): Abolished. + (llhandler-debug-leave): Abolished. + + * irchat-version.el (irchat-emacs-user-agent-value): New variable + imported from `mime-edit-user-agent-value' of SEMI. + (irchat-user-agent-value): New variable. + (irchat-make-user-agent-string): Abolished. + (irchat-make-emacs-user-agent-string): Abolished. + (irchat-command-version): New command. + + * irchat-hilight.el (irchat-maybe-highlight-region): New function. + (irchat-maybe-smiley-region): New function. + (irchat-maybe-highlight-url-region): New function. + (irchat-highlight-put-url-properties-region): New function. + + * irchat-ctcp.el: Add hooks in order to let + `irchat-query-client-nick' follow the changes. + (irchat-query-client-nick-maybe-change): New function. + (irchat-query-client-nick-maybe-reset): New function. + + * irchat-url.el (irchat-url-gather-hook): New hook variable. + (irchat-command-browse-url): Use `_'. + (irchat-url-gather-urls-region): New function. + (irchat-url-search-forward): New function. + + * irchat-compat.el (easy-menu-add-item): New alias. + + * irchat-xemacs.el (easy-menu-add-item): New advice. + +1999-03-10 Tsunehiko Baba + + * dcc.c (main): Add cast against return value of basename(3). + +1999-03-10 Daiki Ueno + + * irchat-menu.el (irchat-menu-url-menu): New variable. + + * Liece 1.2.8.17. + + * irchat-misc.el (irchat-compose-time-string): Renamed from + `irchat-compose-servertimestring'. + + * irchat-compat.el (plist-get): New function for compatibility. + + * irchat-ctcp.el (irchat-client-time-notice): New handler. + (irchat-ctcp-time-msg): Ditto. + + * irchat-minibuf.el (irchat-minibuffer-complete-channel-modes): + Also display candidates when `irchat-minibuffer-parse-modes' + returns 'flag. + + * irchat-400.el (irchat-handle-433-msg): `ERR_NICKNAMEINUSE'. + Do grow-tail iteration on `irchat-real-nickname' only if + `irchat-auto-iterate-nick' is specified. + + * irchat-vars.el (irchat-server-alist): Enable to specify keywords + (:host, :service, :password, etc.). + (irchat-auto-iterate-nick): New customizable variable. + + * irchat-menu.el (irchat-menu-add-url): New function. + (irchat-command-mode-url-menu): New menu entry. + + * irchat.el (irchat): Do not ping to server. + (irchat-open-server): Use new format of `irchat-server-alist'. + +1999-03-02 Daiki Ueno + + * irchat-handle.el (irchat-handle-privmsglike-msg): Define as subst. + + * irchat-make.el (install-just-print-p): New function + imported from APEL 9.13's `APEL-MK'. + (config-irchat-package): Likewise. + (compile-irchat-package): Likewise. + (install-irchat-package): Likewise. + (install-update-package-files): Likewise. + (make-irchat-sample-files): New function imported from packaged + version of Liece. + (make-irchat-info-files): Ditto. + + * irchat-300.el (irchat-handle-366-msg): Do not update nicks when + `irchat-353-nameslist' holds no element. + +1999-03-01 Daiki Ueno + + * irchat-handle.el (irchat-handle-quit-msg, + irchat-handle-mode-msg, irchat-handle-join-msg, + irchat-handle-part-msg): Quote regexp. + +1999-02-28 Daiki Ueno + + * irchat.el (irchat-clear-system): Fix backquotes. + +1999-02-25 Daiki Ueno + + * irchat-300.el (irchat-handle-303-msg): Fix. Add check for empty + reply. + +1999-02-24 Daiki Ueno + + * irchat-handle.el (irchat-handle-notice-msg): Fix. Call handler + with `funcall'. + + * irchat.el (irchat-channel-mode-map): Make keymap as sparse. + (irchat-others-mode-map): Likewise. + + * irchat-commands.el (irchat-command-deactivate-friends): + Fix argument. + + * Liece 1.2.8.16. + + * irchat-globals.el (irchat-who-expression): New variable. + + * irchat-misc.el (irchat-toggle-command-buffer-mode): Change + `irchat-private-indicator'. + + * irchat-300.el (irchat-handle-315-msg): `RPL_ENDOFWHO'. + Display `no matches found' message + (irchat-handle-{322,323,353,366}-msg): Count iterations. + + * irchat.el (irchat-command-mode): Do not save + `frame-title-format' twice. Use `irchat-current-channel' in place + of `irchat-channel-indicator'. + + * llhandler.el (llhandler-debug-enter): New function. + (llhandler-debug-leave): New function. + (llhandler-define-handler): New macro. + (llhandler-eval-args): Abolished. + + * irchat-crypt.el (irchat-encrypt-message): Encode messages. + (irchat-decrypt-message): Likewise. Decode messages. + (irchat-crypt-with-encrypted-message): Do not encode message which + has type `cleartext'. + +1999-02-23 Daiki Ueno + + * irchat-misc.el (irchat-send-pong): New macro. + (irchat-increment-long-reply-count): New macro. + (irchat-reset-long-reply-count): New macro. + (irchat-check-long-reply-count): New macro. + + * irchat-globals.el (irchat-long-reply-count) New variable. + (irchat-long-reply-max): New variable. + + * irchat-commands.el (irchat-command-save-vars): Fix. Set marker + at output position. + +1999-02-21 Daiki Ueno + + * irchat-300.el (irchat-handle-303-msg): Add differential IsON. + + * irchat-commands.el (irchat-command-start-ison-timer, + irchat-command-cancel-ison-timer, irchat-command-activate-friends, + irchat-command-deactivate-friends): Do completion case + insensitively. + + * irchat-vars.el (irchat-saved-forms): Add symbol `irchat-friends' + to be saved its value. + +1999-02-20 Daiki Ueno + + * Liece 1.2.8.15. + + * irchat-filter.el (irchat-sentinel): Do not throw signal, just + clear whole system. + (irchat-sentinel-error): Ditto. + + * irchat-vars.el (irchat-friends): New user customizable variable. + (irchat-poll-friends-interval): New user customizable variable. + (irchat-poll-names-interval): New user customizable variable. + + * irchat-commands.el (irchat-command-poll-names): Renamed from + `irchat-command-pollnames'; implemented as function. + (irchat-command-keepalive): Implemented as function. + (irchat-command-poll-friends): New function. + (irchat-command-activate-friends): New command. + (irchat-command-deactivate-friends): New command. + + * irchat-300.el (irchat-handle-331-msg): Call + `irchat-set-channel-indicator'. + (irchat-handle-332-msg): Ditto. + + * irchat-globals.el (irchat-channel-status-indicator): New + variable; default value of `frame-title-format'. + (irchat-friends-last): New variable. + (irchat-frame-title-format-last): New variable. + + * irchat-misc.el (irchat-set-frame-title-format): Do not calculate + `frame-title-format' directly. + (irchat-maybe-update-channel-indicator): New macro. + +1999-02-20 P.F.FrontJr. : + + * irchat-misc.el (irchat-set-channel-indicator): Display channel + status on mode line. + + * irchat-vars.el (irchat-display-status-on-channel-indicator): + New user customizable variable. + +1999-02-15 Daiki Ueno + + * irchat.el (irchat-read-variables-files): Set alternative + startup file as primary one. + + * irchat-timer.el (irchat-start-timer): Do not require `timer' or + `itimer'; autoload timer functions. + (irchat-cancel-timer): Ditto. + +1999-02-14 Daiki Ueno + + * irchat-ck-ccl (irchat-ck-ccl): Remove. + (irchat-ck-ccl-cj-to-ck-string): Use `ccl-execute-on-string'. + (irchat-ck-ccl-ck-to-cj-string): Ditto. + + * irchat-xemacs.el (irchat-xemacs-setup-toolbar): New function. + + * irchat-menu.el (irchat-command-add-menus): New function; add + menubar menus explicitly. + + * irchat-coding.el (irchat-coding-custom-detect-coding-region): + New variable; set user customizable function to detect coding system. + (irchat-coding-custom-detect-coding-string): Likewise. + (irchat-detect-coding-string-tcljp): Transported from + `tclKanjiUtil.c'; trivial encoding detection routine. + (irchat-default-coding-system): Moved from `irchat-vars.el'. + (irchat-default-mime-charset): Ditto. + (irchat-detect-coding-system): Ditto. + + * crc32.el (crc32-region): Remove `mark-active'. + + * irchat-timer.el (irchat-cancel-timer): Fix for XEmacs's + `itimer'. + + * Liece 1.2.8.14. + + * irchat-dcc.el (irchat-dcc-requests): Rename from + `irchat-dcc-request-list'; implemented as actually a queue. + + * queue-m.el: New file; imported from elib. + + * irchat-filter.el (irchat-filter): Remove checking whether + process output line contains LF; remove duplicated LF checking + likewise; enclose with `save-match-data'. + (irchat-handle-message): Add checking user-at-host cookie with + restricted line. + + * irchat-window.el (irchat-window-functionp): Remove; use + `irchat-functionp'. + + * irchat-channel.el (irchat-channel-get-nicks): Fix; apply car + against each elements. + +1999-02-13 Daiki Ueno + + * irchat-commands.el (irchat-command-mode+o, + irchat-command-mode+v): Build completion list using + `filter-elements'. + + * irchat-vars.el (irchat-exit-hook): Rename from + `irchat-Exit-hook'. + + * irchat-inlines.el (irchat-functionp): New macro. + + * irchat-compat.el (mapvector): New macro. + + * irchat-misc.el (irchat-greet-author): Remove. + (irchat-split-rest): Fix arguments. + (irchat-completing-default-read): 3rd and later arguments become + optional. + (irchat-completing-sequential-read): Evaluate completion table + consequently; Add optional argument `multiple-candidate', if this + arg is non-nil always create new table with its initial state. + + * llhandler.el (llhandler-define-entry-point): Add debugging + triger in frount of function definition. + (llhandler-define-with-return): Ditto. + (llhandler-define): Ditto. + (llhandler-enter-format-string): New constant; for debugging use. + (llhandler-leave-format-string): Ditto. + (llhandler-eval-args): New macro. + + * irchat.el (irchat-open-server-internal): Use + `open-network-stream-as-binary'. + (irchat-startup-hook): Rename from `irchat-Startup-hook'. + +1999-02-07 Daiki Ueno + + * Liece 1.2.8.13. + + * idea.el (idea-ecb-decrypt-string): Enclose Base64 decoded string + with `string-as-unibyte'. + (idea-cbc-decrypt-string): Ditto. + + * idea.el: Sync up with Irchat-980625-2. + + * crc32.el: Ditto. + + * irchat-300.el (irchat-handle-303-msg): Fix matched string. + + * irchat-handle.el (irchat-handle-privmsg-msg): Check whether + private message has come from entirely outer. + + * irchat-filter.el (irchat-handle-message): Remove all occurence + of CR out of inputs :( + +1999-02-06 Daiki Ueno + + * irchat.el (irchat-read-variables-files): Save alternatively + specified startup file name into `irchat-variables-files'. + +1999-02-04 Daiki Ueno + + * irchat-dcc.el (irchat-command-dcc-accept): Remove destructive + checking. + + * irchat-make.el: Do not use `add-to-list' for Emacs19. + + * irchat-nick.el (irchat-nick-replace): Fixed regexp. + +1999-02-03 Daiki Ueno + + * irchat-coding.el (irchat-coding-detect-coding-region) + (irchat-coding-detect-coding-string): New function. + (irchat-coding-decode-mime-charset-region): Use above directly. + (irchat-coding-decode-mime-charset-string): Ditto. + +1999-02-02 Daiki Ueno + + * irchat-commands.el (irchat-command-who): Fixed setting + `irchat-channel-alist. + + * Liece 1.2.8.12. + + * irchat-nick.el (irchat-nick-get-user-at-host): New macro. + + * irchat-compat.el (temp-minibuffer-message): New function. + + * irchat-minibuf.el: New file; custom minibuffer completion. + + * irchat.el (irchat-open-server-internal): Add check for dotless + IP or IPv6 address representation. + + * irchat-channel.el (irchat-channel-set-voice): Replace with + regexp. + +1999-02-01 Daiki Ueno + + * irchat-300.el (irchat-handle-319-msg): Fixed channel conversion. + + * irchat-commands.el (irchat-command-modec): Fixed completion. + (irchat-command-mode-o,irchat-command-mode+v,irchat-command-mode-v): + Fix format string. + + * dcc.c (chat_listen): Print connection result. + + * irchat-dcc.el (irchat-command-dcc-chat-listen): Add dummy + argument `chat' for compatibility. + + * irchat-channel.el (irchat-channel-remove-mode): Use `delq'. + (irchat-nick-remove-mode): Ditto. + + * Liece 1.2.8.11. + + * irchat-menu.el (irchat-menu-popup-menu): Check whether XEmacs or + not compile time. + +1999-01-31 Daiki Ueno + + * irchat-compat.el (set-keymap-parents): New macro. + + * irchat-commands.el (irchat-command-join-channel): Add flag + whether `irchat-command-buffer-mode' is toggled. + (irchat-command-join-partner): Ditto. + + * irchat-300.el (irchat-count-words-from-string): Count postfix + white spaces. + + * irchat-q-el.el: Splited from `irchat-ctcp.el'; binary data + quotation in emacs-lisp. + * irchat-q-ccl.el: Same functionality as above but implemented in + Emacs CCL. + + * b64.el (b64-encode-string, b64-decode-string): Add autoload + cookie. + + * irchat.el (irchat-channel-list-keys): New variable. + (irchat-define-keys): Add lisp-mode indentation. + (irchat-channel-mode-map, irchat-others-mode-map): Set + `irchat-dialogue-mode-map' as its keymap parent. + +1999-01-28 Daiki Ueno + + * Liece 1.2.8.10. + + * dcc.c: Rewritten but this is obsoleted. + + * irchat-commands.el (irchat-command-end-of-buffer): Renamed from + `irchat-command-eod-buffer'; this works also in `irchat-{channel, + others}-buffer-mode'. + + * dcc.ml (getaddr_ext): New function. + + * irchat-dcc.el (irchat-dcc-send-filter): Fix regexp. + (irchat-dcc-add-to-process-alist): Add process key as symbol. + (irchat-dcc-get-process-object): Likewise. + (irchat-command-dcc-receive): Fixed arguments of + `irchat-dcc-add-to-process-alist'. + (irchat-command-dcc-send): Likewise. + (irchat-command-dcc-accept): Fix typo. + +1999-01-27 Daiki Ueno + + * irchat.el (irchat-others-mode-map): Add key binding of + `irchat-command-tag-region' + + * irchat-commands.el (irchat-command-join-channel): Use + `irchat-channel-memberp'. + (irchat-command-modec): Make completion from supported mode list. + (irchat-channel-real): Try match with + `irchat-channel-conversion-map' case insensitively. + (irchat-channel-virtual): Ditto. + +1999-01-26 Daiki Ueno + + * irchat-globals.el (irchat-supported-channel-mode-alist): + (irchat-supported-user-mode-alist): New variable + + * irchat-nick.el (irchat-nick-get-modes): New macro. + (irchat-nick-add-mode): New macro. + (irchat-nick-remove-mode): New macro. + (irchat-nick-set-mode): New macro. + + * irchat-000.el (irchat-handle-004-msg): Save server supported + modes. + + * Liece 1.2.8.9. + + * irchat-make.el: Add local copy of APEL to `load-path'. + (autoload-irchat): New function to generate autoload file. + + * irchat.el (irchat-command-keys): Add key definition of + `irchat-command-set-window-style' (C-c s). + (irchat): Parse `irchat-variables-files' specified in command + line. + (irchat-read-variables-files): Add optional argument `file'. + + * irchat-window.el (irchat-window-set-default-style): Fallback + style used when encountered an error at style-file loading time. + + * irchat-handle.el (irchat-handle-mode-msg): Gather channel modes + correctly. + + * irchat-channel.el (irchat-channel-get-modes): New macro. + (irchat-channel-set-mode): New macro. + (irchat-channel-add-mode): New macro. + (irchat-channel-remove-mode): New macro. + + * irchat-menu.el (irchat-menu-prepare-menus): Fix typo in + `irchat-command-previous-channel'. + (irchat-menu-IRC-menu): Add menu items. + +1999-01-23 Daiki Ueno + + * irchat-misc.el (irchat-change-nick-of): Fixed. + +1999-01-22 Daiki Ueno + + * llhandler.el: New file. + + * Liece 1.2.8.8. + + * irchat-handle.el (irchat-handler-defun-*): Abolished. + (irchat-handler-defsubst-*): Abolished. + (irchat-handler-obarray): New variable. + (irchat-handle-error-msg): New handler. + Handler API has been rewritten with `irchat-handler-obarray', + which enables faster handler lookup from hash. + +1999-01-21 Daiki Ueno + + * irchat-ctcp.el: Rewritten with new handler API. + (irchat-ctcp-file-save-directory): New user variable. + (irchat-client-message): New macro. + (irchat-client-file-message): New macro. + + * irchat-vars.el (irchat-gather-channel-modes): New user variable. + (irchat-*-buffer): Moved into `irchat-globals.el'. + + * irchat-misc.el: Require `invisible'. + (irchat-remove-properties-region): Use + `next-single-property-change' instead of `next-property-change'. + (next-visible-point): Add advice to pass optional argument + `limit'. + (irchat-change-nick-of): Fixed. + +1999-01-20 Daiki Ueno + + * irchat-compat.el (filter-elements): Renamed from `filtercar'. + Rewritten as macro with referring to `dabbrev-filter-elements'. + + * defface.el (defface-set-face-inverse): New function. + (defface-face-inverse): Ditto. + (defface-set-face-bold): Abolished. Use `face-set-bold-p'. + (defface-face-bold): Abolished. Use `face-bold-p'. + (defface-set-face-italic): Abolished. Use `face-set-italic-p'. + (defface-face-italic): Abolished. Use `face-italic-p'. + +1999-01-19 Daiki Ueno + + * irchat-commands.el (irchat-command-tag-region): Renamed from + `irchat-dialogue-tag-line'. Add removing 'face and 'invisible + properties from text moved into kill ring. + + * sample.dot.liece{,.ja}: Fixed documentation about window + configuration. + + * irchat-misc.el (irchat-pick-buffer): Assume that channel names + are associated to channel buffers case insensitively. + (irchat-remove-properties-region): New macro. + +1999-01-18 Daiki Ueno + + * irchat-compat.el (keymap-accept-event-array): Abolished. + + * Liece 1.2.8.7. + + * irchat-misc.el (matching-substring): Became an alias for + `match-string'. + + * irchat.el (irchat-open-server): Fixed. + (irchat-open-server-internal): Fixed. + Do not require `smiley'. + +1999-01-17 Daiki Ueno + + * irchat-300.el (irchat-handle-364-msg): Fixed. + + * irchat-200.el (irchat-handle-213-msg): Fixed. + + * irchat-intl.el (irchat-intl-load-catalogue): Do not bind `lang' + to `current-language-environment'. + + * irchat-window.el (irchat-configure-windows): Switch to + `irchat-command-buffer' before calling function + `irchat-window-configure-frame'. + + * irchat-timer.el: Enclose statement which has newly styled macros + with `eval'. + + * irchat-compat.el (run-hook-with-args-until-success): New macro + for compatibility. + + * irchat-misc.el (irchat-convert-received-input): New macro. + No longer require `irchat-filter'. + +1999-01-16 Daiki Ueno + + * irchat-caesar.el: Abolished. + + * irchat-compat.el (function-documentation): New macro. + + * irchat-commands.el (irchat-command-point-back-to-command-buffer): + New command. Bind key to `c'. + (irchat-command-caesar-line): Abolished. Use `mule-caesar-region'. + + * irchat-misc.el (irchat-is-message-ignored): Moved from + `irchat.el'. + (irchat-maybe-poll): Ditto. + (irchat-set-crypt-indicator): Ditto. + (irchat-get-buffer-create): Ditto. + (irchat-hex-char-to-integer): Imported from `misty1.el'. + (irchat-hex-string-to-integer): Ditto. + +1999-01-15 Daiki Ueno + + * irchat.el (irchat-read-variables-files): New function. + (irchat-command-read-variables-files): New alias to + `irchat-read-variables-files'. + (irchat-initialize-buffers): New wrapper function. + (irchat-replace-internal): New macro. + (irchat-insert-internal): New macro. + + * irchat-compat.el (ccl-enable-to-read-multibyte): New broken + facility. + (buffer-or-string-p): New macro. + + * irchat-misc.el (irchat-send-as-binary): New macro. + (irchat-send): Add `string-as-unibyte' while checking length of + string. + (irchat-replace-in-string): Abolished. + + * irchat-ck-ccl.el: CCL version of `ck' to `cj' converter. + + * irchat-ck-el.el: Renamed from `irchat-hankana.el'. + + * irchat-make.el: irchat-make.el: Add checking whether CCL accepts + `read-multibyte-character'. + +1999-01-14 Daiki Ueno + + * irchat-misc.el (irchat-nickname): New macro. + + * irchat-window.el (irchat-configure-windows): Enclose + calling function `irchat-window-configure-frame' with + `save-excursion'. + + * irchat-crypt.el (irchat-crypt-with-decrypt-message): + Renamed from `irchat-crypt-with-encrypted-message'. + (irchat-crypt-with-encrypt-message): New macro. + + * irchat-commands.el (irchat-command-join-partner): Fixed. + (irchat-command-timestamp): Fixed. + (irchat-command-send-message): Fixed. + (irchat-command-message): Fixed. + (irchat-command-prepare-message-prefix): New macro. + (irchat-command-prepare-own-message-prefix): New macro. + + * Liece 1.2.8.6. + + * irchat-channel.el (irchat-channel-join): Fixed. + + * irchat-url.el (irchat-url-prepare-browser-function): New macro. + (irchat-url-command-browse-url): Add checking + `irchat-url-browser-name' prior to `irchat-url-browser-function'. + +1999-01-13 Daiki Ueno + + * README-styles.ja: New file. + + * irchat-channel.el (irchat-channel-change): Enclose with + `save-excursion'. + +1999-01-11 Daiki Ueno + + * irchat.el (irchat): Fixed bug in XEmacs toolbar specification. + +1999-01-10 Daiki Ueno + + * irchat-nick.el (irchat-nick-get-joined-channels): New macro. + + * irchat-channel.el (irchat-channel-get-nicks): New macro. + (irchat-channel-get-opers): Ditto. + (irchat-channel-get-voices): Ditto. + (irchat-channel-get-topic): Ditto. + + * styles/{top,bottom}: Fixed command buffer lines. + + * Liece 1.2.8.5. + + * irchat.el (irchat-insert): Remove checking "(featurep 'custom)". + + * defface.el: New file. + +1999-01-09 Daiki Ueno + + * irchat-handle.el (irchat-handler-define-entry-point): New alias. + (irchat-handler-defun-with-return): New macro. + (irchat-handler-defsubst-with-return): New macro. + + * irchat-{000,200,300,400,500}.el: Rewritten with new handler API. + + * irchat-handle.el (irchat-handler-entry-point-defun): New macro. + (irchat-handler-entry-point-defsubst): New macro. + + * irchat-handle.el (irchat-handle-with-running-cleartext-hook): + Renamed from `irchat-handle-with-cleartext-hook'. + (irchat-handle-run-cleartext-hook): + Renamed from `irchat-handle-cleartext-hook'. + +1999-01-08 Daiki Ueno + + * styles/top: New file. + + * irchat-misc.el (irchat-message): New macro. + + * Liece 1.2.8.4. + + * styles/{bottom,middle}: New file. + + * irchat-window.el (irchat-configure-windows): Moved from + `irchat'. + + * irchat-window.el: New file for style-based window configuration. + + * irchat-nick.el (irchat-nick-replace): Fixed moving point to + highlight mouse face. + +1999-01-05 Daiki Ueno + + * irchat-nick.el (irchat-nick-update-region): Set point to mouse + clicked position. + + * Liece 1.2.8.3. + + * irchat.el (irchat-nick-mode-map): Add popup menu. + + * irchat-menu.el (irchat-nick-popup-menu): New function. + (irchat-menu-popup-menu): New macro. + + * irchat-intl.el (irchat-intl-get-msgstr-if): New macro. + + * irchat-nick.el (irchat-nick-update-region): New function. + (irchat-nick-region-nicks): Moved from `irchat-xemacs'. + (irchat-nick-region-opers): Ditto. + (irchat-nick-region-voices): Ditto. + + * irchat-menu.el (irchat-menu-callback-*): Moved from + `irchat-xemacs'. + (irchat-menu-define-menus): Moved to defadviced block. + + * irchat-xemacs.el (irchat-xemacs-setup-menu): Shared + `irchat-nick-update-region'. + + * irchat-channel.el (irchat-channel-set-operator): Fixed regexp. + + * irchat-nick.el (irchat-nick-replace): Fixed regexp. + +1999-01-04 Daiki Ueno + + * irchat-nick.el (irchat-nick-replace): Fixed execution order. + + * irchat-nick.el (irchat-nick-replace): Fixed regexp. + And enclose `save-restriction'. + + * irchat-menu.el: Add easymenu support. + + * Liece 1.2.8.2. + + * irchat-crypt.el (irchat-crypt-with-encrypted-message): + New macro. + + * irchat-handle.el (irchat-handler-defsubst): New macro. + (irchat-handler-defun): Ditto. + (irchat-handler-return): Ditto. + All handler routines are defined with new form. + (irchat-handle-with-cleartext-hook): New macro. + (irchat-handle-cleartext-hook): Ditto. + (irchat-handle-run-hook-with-args): Ditto. + Handler code eliminated by global jump. + (irchat-handle-set-channel-prefix): New macro. + (irchat-handle-set-dialogue-prefix): Ditto. + (irchat-handle-set-private-prefix): Ditto. + + * irchat-misc.el (irchat-insert-change): New macro. + (irchat-insert-notice): Ditto. + (irchat-insert-broadcast): Ditto. + (irchat-insert-wallops): Ditto. + (irchat-insert-error): Ditto. + (irchat-insert-info): Ditto. + (irchat-insert-timestamp): Ditto. + (irchat-insert-dcc): Ditto. + (irchat-insert-client): Ditto. + +1999-01-03 Daiki Ueno + + * irchat-commands.el (irchat-switch-to-channel-no): Fixed. + + * irchat-hilight.el (irchat-highlight-region): Check + `irchat-display-prefix-tag'. + + * irchat-vars.el (irchat-display-prefix-tag): New variable. + + * irchat-hilight.el (irchat-highlight-hide-prefix-region): + New function. + + * irchat-version.el (irchat-version-user-agent-style): Abolished. + (liece-client-product): New variable. + (liece-client-name): New macro. + (liece-client-version-major): Ditto. + (liece-client-version-minor): Ditto. + (liece-client-version-beta): Ditto. + (liece-client-version-alpha): Ditto. + (liece-client-codename): Ditto. + + * irchat-version.el (irchat-make-emacs-user-agent-string): New + function. + + * irchat.el (irchat-insert): Renamed from `irchat-w-insert'. + (irchat-replace): Renamed from `irchat-w-replace'. + + * irchat-intl.el (irchat-intl-domain-to-mime-charset-alist): New + variable. + + * irchat-intl.el (irchat-intl-parse-Content-Type): Do not use + `mime-parse-Content-Type' when `mime-parse' is not loaded. + + * irchat.el: Remove extra calls of `suppress-keymap'. + + * irchat-compat.el: Remove all CL emulation. + + * Liece 1.2.8.1. + + * irchat-intl.el (irchat-intl-use-localized-messages): New + variable. + +1999-01-02 Daiki Ueno + + * irchat-intl.el (irchat-intl-parse-Content-Type): Parse + "Content-Type:" header to recognize coding used in PO files. + +1999-01-01 Daiki Ueno + + * irchat-intl.el (irchat-intl-domains-to-coding-system-alist): + Abolished. + + * irchat-commands.el (irchat-command-find-timestamp): Regexp fixed. + +1998-12-30 Daiki Ueno + + * Add experimental i18n feature. + + * po/ja.po: New file. + + * irchat-intl.el: New file. + + * irchat-ctcp.el (irchat-ctcp-msg): Message format fixed. + + * irchat-channel.el (irchat-channel-join): Fixed. + (irchat-channel-create-buffer): Fixed. + +1998-12-29 Daiki Ueno + + * irchat-commands.el (irchat-switch-to-channel{,-no}): + Do not reconfigure windows. + + * TODO.ja: New file. + + * Liece 1.2.6.13/1.2.8.0. + + * irchat-commands.el (irchat-switch-to-channel): Fixed. + (irchat-switch-to-channel-no): Fixed. + + * irchat-misc.el (irchat-toggle-command-buffer-mode): When hiding + state of nick buffer is toggled, reconfigure windows every time. + + * irchat-handle.el (irchat-handle-join-msg): Check whether joined + channel is modeless. + + * irchat-misc.el (irchat-channel-modeless-p): New macro. + (irchat-channel-modeless-regexp): New variable. + + * irchat-handle.el (irchat-handle-{join,quit,mode,part}-msg): + Compression of changes reworked. + + * irchat-vars.el (irchat-display-time): Rename from + `irchat-print-time'. + (irchat-time-prefix-regexp): Regexp for time prefix. + + * irchat-mail.el: Add autoloads instead of all requires + (`gnus-msg', `sendmail', `mime-edit'). + (irchat-mail-compose-with-mail): Add evals to silence + byte-compiler. + (irchat-command-mail-compose): Fix completion. + + * irchat-channel.el (irchat-channel-buffer-create): + Rewritten as a macro. + + * irchat-nick.el (irchat-nick-buffer-create): Ditto. + + * irchat-compat.el: `<<' and `>>' are become aliases of lsh. + + * irchat.el: Rename `irchat-Select-keys' to `irchat-select-keys'. + + * sample.liece{,.ja}: Add sample setting of + `irchat-startup-channel-list'. + + * irchat.el (irchat-command-keys): Bind `C-c b' and `C-c N b' to + `irchat-command{,-nick}-scroll-down' (synced up with irchat-2.4jp24f). + (irchat-nick-keys): Bind scrolling functions. + + * irchat.el (irchat-command-mode): Display `minor-mode-alist' on + mode-line. + + * irchat-globals.el (irchat-obarray): + Set initial array length to 1. + + * irchat.el: Remove preparation code of `irchat-obarray'. + + * liece-faq.texinfo: Change formatting style. + +1998-12-10 Daiki Ueno + + * irchat-commands.el (irchat-command-nick-scroll-down): Add check + whether `irchat-nick-buffer' is visible. + (irchat-command-nick-scroll-up): Ditto. + + * irchat-commands.el (irchat-command-scroll-down): Add check + whether `irchat-channel-buffer' is visible. + (irchat-command-scroll-up): Ditto. + +1998-12-09 Daiki Ueno + + * irchat-misc.el (irchat-set-channel-indicator): Add check for + `irchat-display-frame-title'. + + * irchat.el (irchat-configure-windows): Bind + `irchat-channel-buffer-mode' and `irchat-nick-buffer-mode' at the + entry point. + + * irchat-channel.el (irchat-channel-switch-to-last): New macro. + + * Liece 1.2.6.12. + + * irchat-commands.el (irchat-channel-real): Fix spelling. + (irchat-channel-virtual): Ditto. + + * irchat-channel.el (irchat-channel-switch-to-last): New function. + + * irchat-channel.el (irchat-channel-last): New macro. + + * irchat-misc.el (irchat-change-nick-of): Fixed. + +1998-12-04 Daiki Ueno + + * irchat-misc.el (irchat-own-channel-message): + (ircaht-own-private-message): Remove dialogue buffer from target + buffers. + + * liece-faq.texinfo: Fix hook for auto invisible. + +1998-12-03 Daiki Ueno + + * irchat-handle.el (irchat-pick-buffer): Moved to `irchat-misc.el'. + + * irchat-highlit.el (irchat-highlight-pattern-alist): Fix regexp + for DCC chatting line. + + * irchat-commands.el (irchat-command-modec): Select target channel. + + * irchat-dcc.el (irchat-command-dcc-chat-listen): + (irchat-command-dcc-chat-listen): Use `as-binary-process' + block. + + * irchat.el (irchat-open-server-internal): Ditto. + + * irchat-vars.el (irchat-binary-coding-system): Abolished. + + * irchat.el (irchat-open-server-internal): Bind + `file-coding-system-for-{read|write}' for Mule 2.3. + + * irchat.el: `irchat-switch-to-channel-no-*' registered automatically. + +1998-12-02 Daiki Ueno + + * irchat-vars.el: Require `mcharset'. + + * Liece 1.2.6.11. + + * irchat-vars.el (irchat-default-mime-charset): New variable. + + * irchat-coding.el: Use `mcharset' instead of + `{encode|decode}-coding-*'. + (irchat-coding-encode-charset-region): + (irchat-coding-encode-charset-string): New macro. + + * irchat-dcc.el (irchat-dcc-pop-request-object): Fixed. + + * irchat-compat.el (caar): New macro. + + * irchat-misc.el (irchat-repair-crlf): New function. + + * Liece 1.2.6.10. + + * irchat.el (irchat-dcc-map): New keymap. + + * irchat-dcc.el (irchat-command-dcc-accept): New function. + (irchat-dcc-get-*): Access method for request object. + (irchat-dcc-pop-request-object): New macro. + + * Liece 1.2.6.9. + + * irchat-dcc.el: Very experimental DCC chat support added. + (irchat-command-dcc-chat-listen): New function. + (irchat-command-dcc-chat-connect): Ditto. + (irchat-dcc-chat-listen-filter): Ditto. + (irchat-dcc-chat-connect-filter): Ditto. + (irchat-dcc-chat-filter): Ditto. + (irchat-dcc-channel-representation-format): New variable. + + * irchat-channel.el: Very experimental multiple server support + added. + (irchat-default-channel-representation-format): New variable. This + is unified channel locater. Set default as + "@+". + (irchat-channel-parse-representation): New function. + (irchat-channel-prepare-representation): Ditto. + + * irchat-misc.el (irchat-own-channel-message): New function. + + * irchat-misc.el (irchat-own-message): New macro. + + * dcc.ml: Explicitly return with code 0. + + * irchat-dcc.el (irchat-dcc-send-filter): Fixed. + (irchat-dcc-receive-filter): Fixed. + +1998-12-01 Daiki Ueno + + * irchat-vars.el (irchat-dcc-prefix): New variable. + + * irchat-compat.el (cdddr): New macro. + + * irchat-dcc.el (irchat-dcc-add-to-receive-list): New macro. + (irchat-dcc-add-to-process-alist): Ditto. + (irchat-dcc-get-process-object): Ditto. + (irchat-dcc-sentinel): New sentinel function. + (irchat-dcc-prepare-directory): New function. + (irchat-ctcp-dcc-msg): Add handler for DCC chat. + (irchat-command-dcc-send): Rewritten. + (irchat-command-dcc-receive): Ditto. + (irchat-command-dcc-list): Ditto. + + * Liece 1.2.6.8. + + * dcc.ml: New file. + + * naddr.mli: Ditto. + + * naddr.ml: Ditto. + + * irchat-misc.el (irchat-own-message): + (irchat-own-private-message): Add check whether channel buffer has + been created. + + * sample.dot.liece: Fix typo. + + * sample.dot.liece.ja: Ditto. + + * irchat-url.el (irchat-url-browser-netscape): Use builtin + composer when encounted `mailto:'. + + * irchat-commands.el (irchat-dialogue-insert): Abolished. + +1998-11-28 Daiki Ueno + + * irchat-misc.el (irchat-own-private-message): Check if + `irchat-command-buffer-mode' is not 'chat. + + * Liece 1.2.6.7. + + * irchat-channel.el (irchat-channel-prepare-partner): + Fixed for setting `irchat-current-chat-partner'. + + * irchat.el: Do not require `irchat-mail'. + +1998-11-27 Daiki Ueno + + * irchat.el: Set default `truncate-lines'. + +1998-11-26 Daiki Ueno + + * irchat-vars.el (irchat-display-frame-title): New variable. + + * Liece 1.2.6.6. + + * irchat-channel.el (irchat-command-toggle-channel-buffer-mode): + Remove setting dirty flag. + + * irchat-nick.el (irchat-command-toggle-nick-buffer-mode): + Ditto + +1998-11-25 Daiki Ueno + + * irchat-mail.el: New file. + + * irchat-vars.el (irchat-convert-hankaku-katakana): New variable. + + * irchat-hankana.el: New file. + + * Liece 1.2.6.5. + + * irchat-300.el (irchat-handle-303-msg): Print come back + messages for private conversation. + + * irchat-misc.el (irchat-set-channel-indicator): New macro. + + * irchat-handle.el (irchat-handle-nick-msg): Fixed channel indicator. + + * irchat.el (irchat-close-server): Set `irchat-server' to nil. + + * irchat-handle.el (irchat-handle-join-msg): Fixed for private + conversation. + + * Add copylefts. + +1998-11-23 Daiki Ueno + + * irchat-globals.el (irchat-ison-timer): New variable. + + * irchat-vars.el (irchat-ison-interval): New variable. + + * irchat-commands.el (irchat-command-set-ison-timer): New + function. + (irchat-command-cancel-ison-timer): Ditto. + + * irchat-misc.el (irchat-completing-sequential-read): New function. + + * Liece 1.2.6.4. + + * irchat-compat.el (irchat-button3): Moved into `eval-and-compile' + enclosure. + + * irchat.el: Do not require alist. + + * irchat-handle.el (irchat-handle-quit-msg): Rewritten. + + * irchat-handle.el (irchat-handle-nick-msg): Handle nick message + and reflect changes to private buffers. + +1998-11-21 Daiki Ueno + + * Liece 1.2.6.3. + + * irchat-misc.el (irchat-channel-p): New macro. + (irchat-toggle-command-buffer-mode): New wrapper function. + + * irchat.el (irchat-windows-reconfiguration-needed): Fixed + predicate for nick buffer mode and channel list mode. + + * irchat.el (irchat-command-keys): Removed duplicated binding of + `irchat-command-enter-message'(`\C-j' and `\M-\C-j'). + +1998-11-19 Daiki Ueno + + * irchat-handle.el (irchat-handle-privmsg-msg): Fixed. + + * etc/ball.*.xpm: Remove background color in each XPM file + (From Yasushi Shoji ). + + * sample.dot.liece: Add sample customizations of new feature. + `irchat-channel-list-buffer-mode', + `irchat-channel-list-window-width-percent', + `irchat-auto-join-partner'. + + * irchat-filter.el (irchat-filter): Remove unreferenced binding. + + * irchat-handle.el (irchat-handle-privmsg-msg): Handle private + message and join automatically. + + * Liece 1.2.6.2. + + * irchat-vars.el (irchat-auto-join-partner): New variable. + (irchat-channel-list-window-width-percent): Ditto. + + * irchat-compat.el (irchat-button3): New variable. + + * irchat-channel.el (irchat-channel-push-button): New handler. + (irchat-channel-list-insert): New function. + (irchat-channel-prepare-partner): New function. + + * irchat-url.el (irchat-url-push-button): Search URL string around + event line. + + * irchat.el (irchat-channel-list-mode): New major mode. + (irchat-configure-windows): Fixed for channel list window. + (irchat-channel-list-mode-map); New keymap. + + * All irchat-{`Command', `Nick', `Channel', `Others', `Crypt'}-* + symbols renamed with uncapitalized one. + +1998-11-16 Daiki Ueno + + * Liece 1.2.4.4. + + * irchat-filter.el: Do not require mcharset. + + * irchat-timer.el: Macro expression fixed (for Emacs19). + + * Liece 1.2.4.3/1.2.6.1. + + * irchat-vars.el (irchat-binary-coding-system): + New variable. + + * irchat-coding.el: New file. + + * irchat-filter.el (irchat-run-message-hook-types): + Abolished. + (irchat-handle-message): Rewritten. + (irchat-handle-message-2): Rewritten. + +1998-11-15 Daiki Ueno + + * irchat.el (irchat-Dialogue-mode-map): + (irchat-Channel-mode-map): + (irchat-Others-mode-map): Add check whether array style keymap + expression is acceptable. + + * liece-faq.texinfo: New FAQ added for older version of emacsen. + + * irchat-handle.el (irchat-handle-privmsg-msg): + Rewritten. + + * irchat-200.el (irchat-handle-200-msgs): + Channel mask regexp fixed. + + * irchat-300.el (irchat-handle-300-msgs): + Ditto. + + * irchat-400.el (irchat-handle-400-msgs): + Ditto. + + * sample.dot.liece: Add sample hook for auto invisible. + + * Liece 1.2.3.5. + + * irchat-vars.el (irchat-default-coding-system): + Set default to 'iso-2022-jp. + (irchat-detect-coding-system): New custom variable. + + * irchat-misc.el (irchat-send): Add code conversion with + `encode-coding-region' . + + * irchat-filter.el (irchat-filter): Add coding-system detection. + + * irchat-compat.el (irchat-set-process-coding-system): + (irchat-buffer-disable-undo): Abolished. + (buffer-disable-undo): New macro. + + * defsubst.el: Removed. + +1998-11-14 Daiki Ueno + + * irchat-ctcp.el (irchat-ccl-quote-decode): Fixed. + +1998-11-13 Daiki Ueno + + * irchat-ctcp.el (ccl-cascade-write): + (ccl-set-register-right): New broken facility. + (irchat-ccl-quote-decode): Rewritten with checking broken CCL + facilities. + + * irchat-timer.el (irchat-start-timer): + Fixed macro expression for older versions of emacsen. + + * irchat-compat.el (defface): New macro for older versions of + emacsen. + +1998-11-12 Daiki Ueno + + * irchat-ctcp.el: Add CCL usability checking with `ccl-usable'. + +1998-11-11 Daiki Ueno + + * irchat-version.el (irchat-make-user-agent-string): + (irchat-make-version-string): + Regexp fixed. + + * irchat-ctcp.el (irchat-ccl-quote-decode): + (irchat-ccl-quote-encode): Check if module `pccl' exists. + + * sample.dot.liece: Renamed from sample.irchat3_vars.el. + + * irchat-version.el (liece-client-minor-version): + Numbered as 1.2.3.3. + (irchat-version-user-agent-style): + Declaration revereted to `defvar' from `defcustom'. + + * Makefile: Removed `-lnsl'. + +1998-10-20 Daiki Ueno + + * irchat-nick.el (irchat-Nick-update): Bug fixed in splitting 353 + (NAMEREPLY) message. + + * irchat-inlines.el (list-to-assoclist): Rewritten. + +1998-10-08 Daiki Ueno + + * irchat-xemacs.el (irchat-toolbar-spec-list): Replace + `irchat-Command-push' and `irchat-Command-pop' with + `irchat-Command-previous-channel' and `irchat-Command-next-channel'. + (irchat-x-face-face-insert): Evaluate also when loaded. + +1998-10-07 Daiki Ueno + + * irchat-crypt.el (base64-encode-string): Fixed autoload with + `mel' to `mel-b' package. + (base64-decode-string): Ditto. + +1998-10-06 Daiki Ueno + + * irchat-xemacs.el (irchat-xemacs-splash-logo): Splash screen with + "liece.xpm" on every loadup time. + + * irchat-version.el (liece-client-version): Numbered as 1.2.1. + + * irchat-x-face.el (irchat-x-face-face-insert): Display X-Face on + each prefix line align middle. + + * irchat-debug.el: New file. + +1998-10-02 Daiki Ueno + + * irchat.el (irchat-Debug-mode): New major mode for + `irchat-Command-debug'. + + * liece-faq.texinfo: New file. + + * irchat-commands.el (irchat-Client-query-map): Key binding for + `irchat-Command-client-x-face-from-minibuffer' substituted with + `irchat-Command-client-x-face-from-xbm-file'. + + * irchat-compat.el (replace-in-string): New function from XEmacs + subr.el. + + * irchat-x-face.el: New file. + (irchat-x-face-insert): Now works properly with GNU Emacs. + + * irchat-xemacs.el (irchat-x-face-insert): New function. + (irchat-x-face-encode): Ditto. + + * irchat-ctcp.el (irchat-ctcp-x-face-msg): X-Face query support. + Now it works only with X-Face utility. + + * irchat-version.el (liece-client-version-beta): New variable. + +1998-10-01 Daiki Ueno + + * irchat.el (irchat-clear-system): Restart now reworked. + + * irchat-make.el (config-irchat): Add check wheter APEL version is + 9.0 or later. + + * irchat-ctcp.el (irchat-ctcp-version-msg): Rewritten with new + style version string. + + * irchat-version.el (irchat-version-user-agent-style): New + variable. + (irchat-make-user-agent-string): New function. + (irchat-make-client-version-string): Ditto. + (irchat-make-version-string): Ditto. + + * irchat-make.el (config-irchat): Rewritten. + + * irchat-ctcp.el: Renamed from irchat-cta.el. + (irchat-ccl-quote-cs): New coding system for file transfer. + (irchat-ccl-quote-encode): New CCL program. + (irchat-ccl-quote-decode): Ditto. + (irchat-ctcp-msg): Hook checking code eliminated. + (irchat-ctcp-client-msg): Ditto. + +1998-09-30 Daiki Ueno + + * irchat-hilight.el (irchat-highlight-buffer): + Add check whether there is point has + + * irchat-compat (irchat-get-text-property): + Add signal handler for XEmacs extents. + + * irchat-commands.el: Require `irchat-dcc.el'. + + * Makefile: New rule for .texinfo to .info. + + * irchat-hilight.el (irchat-highlight-buffer): Bug fix for + `irchat-highlight-pattern'. + +1998-09-29 Daiki Ueno + + * irchat-make.el (install-irchat): Fixed usage of function + install-files. + + * irchat-nick.el: Do not require widget wid-edit. + + * irchat-make.el (irchat-modules-to-compile): Added + irchat-channel, irchat-nick to module list. + + * irchat-hilight.el (irchat-highlight-insert-with-mouse-face): + Addded check whether function widget-create is bounded. + + * irchat-compat.el: Require cl. + + * Makefile: Require cl. Machine specific option removed. + + * irchat-commands.el (irchat-Command-send-message): + New signal handler for `encode-coding-string' with unknown coding + system. This encoding is needed when `irchat-crypt-mode-active-p' + is non nil. + + * irchat.el: Renamed from irchat-main.el. + + * irchat-main.el: Removed. + +1998-09-29 Daiki Ueno + + * irchat-crypt.el (irchat-read-passphrase): New alias. + +1998-09-28 Daiki Ueno + + * irchat-make.el: New file. + + * irchat-compat.el: New file. + + * irchat-ja.texinfo: New file. + + * setpath.el: Removed. + + * irchat-url.el (irchat-url-button-push): New handler. + + * irchat-main.el (irchat-Select-map): New keymap. + + * irchat-filter.el: Added autoloads for entry points of 000, 200, + 300, 400, 500 message handlers. + + * irchat-misc.el (irchat-greet-author): Abolished. + + * irchat-channel.el: Splitted from irchat-commands.el. + + * irchat-nick.el: Ditto. diff --git a/lisp/Makefile b/lisp/Makefile new file mode 100644 index 0000000..784f25d --- /dev/null +++ b/lisp/Makefile @@ -0,0 +1,85 @@ +# -*- makefile -*- +# +# Makefile for liece +# +# $Id: Makefile,v 1.4 1998/09/29 04:52:47 daiki Exp $ +# + +PACKAGE = liece +VERSION = 1.3 + +EMACS = emacs +XEMACS = xemacs +FLAGS = -batch -q -no-site-file +TAR = tar +CC = gcc +CFLAGS = -O +LDFLAGS = +OCAMLC = ocamlc +OCAMLOPT = ocamlopt +OCAMLDEP = ocamldep +IFLAGS = +OBJS = naddr.cmo dcc.cmo + +PREFIX = NONE +LISPDIR = NONE +PACKAGEDIR = NONE +VERSION_SPECIFIC_LISPDIR = NONE + +GOMI = liece-setup.el *.elc *.cm[ioxa] dcc *.opt + +all: elc + +elc: + $(EMACS) $(FLAGS) -l ./liece-make.el -f autoload-liece \ + $(PREFIX) $(LISPDIR) $(VERSION_SPECIFIC_LISPDIR) + $(EMACS) $(FLAGS) -l ./liece-make.el -f compile-liece \ + $(PREFIX) $(LISPDIR) $(VERSION_SPECIFIC_LISPDIR) + +dcc: $(OBJS) + ocamlc -custom unix.cma nums.cma str.cma $(OBJS) \ + -cclib -lunix -cclib -lnums -cclib -lstr -o dcc + +install: elc + $(EMACS) $(FLAGS) -l ./liece-make.el -f install-liece \ + $(PREFIX) $(LISPDIR) $(VERSION_SPECIFIC_LISPDIR) + +package: + $(XEMACS) $(FLAGS) -l ./liece-make.el -f autoload-liece \ + $(PREFIX) $(LISPDIR) $(VERSION_SPECIFIC_LISPDIR) + $(XEMACS) $(FLAGS) -l ./liece-make.el -f compile-liece-package \ + $(PACKAGEDIR) + +install-package: package + $(XEMACS) $(FLAGS) -l ./liece-make.el -f install-liece-package \ + $(PACKAGEDIR) + +tag: + sh -c 'cvs tag -RF liece-`echo $(VERSION) | \ + tr . _`-`date +%Y%m%d%H%m`' + +.SUFFIXES: .texinfo .info .mli .cmi .ml .cmo .cmx + +.texinfo.info: + $(EMACS) -batch -q -no-site-file -eval '(find-file "$<")' \ + -f texinfo-every-node-update \ + -f texinfo-format-buffer \ + -f save-buffer + +.mli.cmi: + $(OCAMLC) -c $(IFLAGS) $< + +.ml.cmo: + $(OCAMLC) -c $(IFLAGS) $< + +.ml.cmx: + $(OCAMLOPT) -c $(IFLAGS) $< + +clean: + -rm -f $(GOMI) + +depend: + $(OCAMLDEP) $(IFLAGS) *.ml* > .depend + +-include .depend + diff --git a/lisp/Makefile.am b/lisp/Makefile.am new file mode 100644 index 0000000..a58a602 --- /dev/null +++ b/lisp/Makefile.am @@ -0,0 +1,69 @@ +## Process this file with automake to produce Makefile.in +## We do not use automake's emacs-lisp support. + +SOURCES = liece-clfns.el liece-handler.el gettext.el \ + liece-compat.el liece-version.el \ + liece-vars.el liece-globals.el liece-inlines.el \ + liece-filter.el liece-dcc.el liece-menu.el \ + liece-000.el liece-200.el liece-300.el liece-400.el liece-500.el \ + liece-nick.el liece-channel.el \ + liece-commands.el liece-ctcp.el \ + liece-handle.el liece-hilit.el liece-intl.el liece-mail.el \ + liece-minibuf.el liece-misc.el liece-url.el liece-message.el \ + liece-x-face.el liece-tcp.el liece-coding.el \ + queue-m.el liece-crypt.el liece.el \ + liece-window.el + +EXTRA_DIST = liece-make.el liece-config.el liece-modules.el \ + liece-emacs.el liece-xemacs.el \ + liece-q-ccl.el liece-q-el.el \ + bitmap-stipple.el \ + liece.xpm liece.xbm + +TARGETS = $(SOURCES:.el=.elc) + +if USE_CUSTOM_LISPDIR +LISPDIR = $(lispdir) +VERSION_SPECIFIC_LISPDIR = $(lispdir)/emu +else +LISPDIR = NONE +VERSION_SPECIFIC_LISPDIR = NONE +endif + +if USE_CUSTOM_PACKAGEDIR +PACKAGEDIR = $(packagedir) +else +PACKAGEDIR = NONE +endif + +EMACS_AUTOLOAD_FLAGS = -f autoload-liece + +if USE_PACKAGE +EMACS_COMPILE_FLAGS = -f compile-liece-package $(PACKAGEDIR) +EMACS_INSTALL_FLAGS = -f install-liece-package $(PACKAGEDIR) +else +EMACS_COMPILE_FLAGS = -f compile-liece \ + NONE $(LISPDIR) $(VERSION_SPECIFIC_LISPDIR) +EMACS_INSTALL_FLAGS = -f install-liece \ + NONE $(LISPDIR) $(VERSION_SPECIFIC_LISPDIR) +endif + + +all: $(TARGETS) + +$(TARGETS): liece-make.el liece-setup.el $(SOURCES) + $(EMACS) -batch -q -no-site-file -l ./liece-make.el \ + $(EMACS_COMPILE_FLAGS) + +liece-setup.el: + $(EMACS) -batch -q -no-site-file -l ./liece-make.el \ + $(EMACS_AUTOLOAD_FLAGS) + +install-exec-local: $(TARGETS) + $(EMACS) -batch -q -no-site-file -l ./liece-make.el \ + $(EMACS_INSTALL_FLAGS) + +clean-local: + -rm *.elc liece-setup.el + +.PHONY: update diff --git a/lisp/bitmap-stipple.el b/lisp/bitmap-stipple.el new file mode 100644 index 0000000..c946ed0 --- /dev/null +++ b/lisp/bitmap-stipple.el @@ -0,0 +1,93 @@ +;;; bitmap-stipple.el --- display bitmap file using stipple. +;; Copyright (C) 1998-2000 Daiki Ueno + +;; Author: Daiki Ueno +;; Created: 1999-05-30 +;; Keywords: bitmap, stipple + +;; This file is not part of any package. + +;; 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, 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 GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + + +;;; Commentary: +;; + +;;; Code: + +(defun bitmap-stipple-xbm-file-to-stipple (file) + "Convert xbm FILE into icon format and return the list of spec and buffers." + (with-temp-buffer + (erase-buffer) + (let ((case-fold-search t) width height xbytes right margin) + (insert-file-contents file) + (goto-char (point-min)) + (or (re-search-forward "_width[\t ]+\\([0-9]+\\)" nil t) + (error "!! Illegal xbm file format" (current-buffer))) + (setq width (string-to-int (match-string 1)) + xbytes (/ (+ width 7) 8)) + (goto-char (point-min)) + (or (re-search-forward "_height[\t ]+\\([0-9]+\\)" nil t) + (error "!! Illegal xbm file format" (current-buffer))) + (setq height (string-to-int (match-string 1))) + + (goto-char (point-min)) + (re-search-forward "0x[0-9a-f][0-9a-f],") + (delete-region (point-min) (match-beginning 0)) + + (goto-char (point-min)) + (while (re-search-forward "[\n\r\t ,;}]" nil t) + (replace-match "")) + (goto-char (point-min)) + (while (re-search-forward "0x" nil t) + (replace-match "\\x" nil t)) + (goto-char (point-min)) + (insert "(" (number-to-string width) " " (number-to-string height) " \"") + (goto-char (point-max)) + (insert "\")") + (goto-char (point-min)) + (read (current-buffer))))) + +(defun bitmap-stipple-insert-pixmap (pixmap &optional center) + "Insert PIXMAP in the current buffer. +Optional argument CENTER specified, pixmap will be centered." + (let (width height beg i) + (or (facep 'bitmap-stipple-splash) + (make-face 'bitmap-stipple-splash)) + (setq width (/ (car pixmap) (frame-char-width)) + height (/ (cadr pixmap) (frame-char-height))) + (set-face-foreground 'bitmap-stipple-splash "red") + (set-face-stipple 'bitmap-stipple-splash pixmap) + (if center (insert-char ?\n height)) + (setq i height) + (while (> i 0) + (setq beg (point)) + (insert-char ? width) + (set-text-properties beg (point) '(face bitmap-stipple-splash)) + (insert "\n") + (decf i)))) + +;;;###autoload +(defun bitmap-stipple-insert-xbm-file (file) + "Insert xbm FILE at point." + (interactive "fxbm file: ") + (save-excursion + (bitmap-stipple-insert-pixmap + (bitmap-stipple-xbm-file-to-stipple file)))) + +(provide 'bitmap-stipple) + +;;; bitmap-stipple.el ends here diff --git a/lisp/gettext.el b/lisp/gettext.el new file mode 100644 index 0000000..a23a7d5 --- /dev/null +++ b/lisp/gettext.el @@ -0,0 +1,255 @@ +;;; gettext.el --- GNU gettext interface +;; Copyright (C) 1999 Daiki Ueno + +;; Author: Daiki Ueno +;; Created: 1999-09-10 +;; Keywords: i18n + +;; This file is part of Liece. + +;; 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, 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 GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + + +;;; Commentary: +;; + +;;; Code: + +(eval-when-compile (require 'cl)) + +(require 'mcharset) + +(eval-and-compile + (autoload 'mime-content-type-parameter "mime-parse") + (autoload 'mime-read-Content-Type "mime-parse")) + +(defvar gettext-gmo-endian 1234) +(defvar gettext-message-domain-to-catalog-alist nil) +(defvar gettext-default-message-domain "emacs") +(defvar gettext-default-mime-charset default-mime-charset) + +(defconst gettext-msgid-regexp "msgid\\s-*\"") +(defconst gettext-msgstr-regexp "msgstr\\s-*\"") + +(defmacro gettext-hex-char-to-integer (character) + `(if (and (>= ,character ?0) (<= ,character ?9)) + (- ,character ?0) + (let ((ch (logior ,character 32))) + (if (and (>= ch ?a) (<= ch ?f)) + (- ch (- ?a 10)) + (error "Invalid hex digit `%c'" ch))))) + +(defun gettext-hex-string-to-integer (hex-string) + (let ((hex-num 0)) + (while (not (equal hex-string "")) + (setq hex-num (+ (* hex-num 16) + (gettext-hex-char-to-integer + (string-to-char hex-string))) + hex-string (substring hex-string 1))) + hex-num)) + +(defun gettext-gmo-read-32bit-word () + (let ((word (string-to-char-list + (buffer-substring (point) (+ (point) 4))))) + (forward-char 4) + (apply #'format "%02x%02x%02x%02x" + (mapcar (lambda (ch) (logand 255 ch)) + (if (= gettext-gmo-endian 1234) + (nreverse word) + word))))) + +(defmacro gettext-gmo-header-revision (header) + `(aref header 0)) + +(defmacro gettext-gmo-header-nn (header) + `(aref header 1)) + +(defmacro gettext-gmo-header-oo (header) + `(aref header 2)) + +(defmacro gettext-gmo-header-tt (header) + `(aref header 3)) + +(defmacro gettext-gmo-header-ss (header) + `(aref header 4)) + +(defmacro gettext-gmo-header-hh (header) + `(aref header 5)) + +(defmacro gettext-gmo-read-header () + (cons 'vector + (make-list 6 '(gettext-hex-string-to-integer + (gettext-gmo-read-32bit-word))))) + +(defun gettext-gmo-collect-strings (nn) + (let (strings pos len off) + (dotimes (i nn) + (setq len (gettext-hex-string-to-integer + (gettext-gmo-read-32bit-word)) + off (gettext-hex-string-to-integer + (gettext-gmo-read-32bit-word)) + pos (point)) + (goto-char (1+ off)) + (push (buffer-substring (point) (+ (point) len)) + strings) + (goto-char pos)) + (nreverse strings))) + +(defmacro gettext-parse-Content-Type (&optional header) + (require 'path-util) + (if (module-installed-p 'mime-parse) + (list 'with-temp-buffer + (list 'insert header) + '(mime-content-type-parameter + (mime-read-Content-Type) + "charset")) + 'gettext-default-mime-charset)) + +(defun gettext-mapcar* (function &rest args) + "Apply FUNCTION to successive cars of all ARGS. +Return the list of results." + (unless (memq nil args) + (cons (apply function (mapcar #'car args)) + (apply #'gettext-mapcar* function + (mapcar #'cdr args))))) + +(defun gettext-load-message-catalogue (file) + (with-temp-buffer + (let (header strings charset gettext-obarray) + (as-binary-input-file + (insert-file-contents file) + (goto-char (point-min)) + (when (looking-at "\x95\x04\x12\xde") + (setq gettext-gmo-endian 4321)) + (forward-char 4) + (setq header (gettext-gmo-read-header) + strings + (gettext-mapcar* #'cons + (progn + (goto-char (1+ (gettext-gmo-header-oo header))) + (gettext-gmo-collect-strings + (gettext-gmo-header-nn header))) + (progn + (goto-char (1+ (gettext-gmo-header-tt header))) + (gettext-gmo-collect-strings + (gettext-gmo-header-nn header)))) + charset (or (gettext-parse-Content-Type + (cdr (assoc "" strings))) + 'x-ctext) + gettext-obarray (make-vector + (* 2 (gettext-gmo-header-nn header)) + 0))) + (dolist (oott strings) + (set (intern (car oott) gettext-obarray) + (decode-mime-charset-string + (cdr oott) charset))) + gettext-obarray))) + +(defun gettext-load-portable-message-catalogue (file) + (with-temp-buffer + (let (strings charset msgstr msgid state gettext-obarray) + (as-binary-input-file + (insert-file-contents file) + (goto-char (point-min)) + (while (not (eobp)) + (cond + ((looking-at gettext-msgid-regexp) + (if (eq state 'msgstr) + (push (cons msgid msgstr) + strings)) + (setq msgid (buffer-substring (match-end 0) + (progn (end-of-line) (point)))) + (when (string-match "\"\\s-*$" msgid) + (setq msgid (substring msgid 0 (match-beginning 0)))) + (setq state 'msgid)) + ((looking-at gettext-msgstr-regexp) + (setq msgstr (buffer-substring (match-end 0) + (progn (end-of-line) (point)))) + (when (string-match "\"\\s-*$" msgstr) + (setq msgstr (substring msgstr 0 (match-beginning 0)))) + (setq state 'msgstr)) + ((looking-at "\\s-*\"") + (let ((line (buffer-substring (match-end 0) + (progn (end-of-line) (point))))) + (when (string-match "\"\\s-*$" line) + (setq line (substring line 0 (match-beginning 0)))) + (set state (concat (symbol-value state) line))))) + (beginning-of-line 2)) + (if (eq state 'msgstr) + (push (cons msgid msgstr) + strings)) + ;; Remove quotations + (erase-buffer) + (goto-char (point-min)) + (insert "(setq strings '(\n") + (dolist (oott strings) + (insert (format "(\"%s\" . \"%s\")\n" + (car oott) (cdr oott))) + (insert "))")) + (ignore-errors (eval-buffer)) + (setq charset (or (gettext-parse-Content-Type + (cdr (assoc "" strings))) + 'x-ctext))) + (dolist (oott strings) + (set (intern (car oott) gettext-obarray) + (decode-mime-charset-string + (cdr oott) charset))) + gettext-obarray))) + +(unless (featurep 'i18n3) + (eval-and-compile + (defun dgettext (domain string) + "Look up STRING in the default message domain and return its translation. +\[XEmacs I18N level 3 emulating function]" + (let ((oott (assoc domain gettext-message-domain-to-catalog-alist))) + (when (stringp (cdr oott)) + (setcdr oott (gettext-load-message-catalogue + (cdr oott)))) + (or (symbol-value + (intern-soft string (or (cdr oott) (make-vector 1 0)))) + string)))) + + (defun gettext (string) + "Look up STRING in the default message domain and return its translation. +\[XEmacs I18N level 3 emulating function]" + (dgettext gettext-default-message-domain string)) + + (defun bind-text-domain (domain pathname) + "Associate a pathname with a message domain. +Here's how the path to message files is constructed under SunOS 5.0: + {pathname}/{LANG}/LC_MESSAGES/{domain}.mo +\[XEmacs I18N level 3 emulating function]" + (let* ((lang (getenv "LANG")) + (file (concat domain ".mo")) + (catalog (expand-file-name + file (concat pathname "/" lang "/LC_MESSAGES")))) + (when (file-exists-p catalog) + ;;(file-exists-p (setq catalog (expand-file-name file pathname))) + (push (cons domain catalog) gettext-message-domain-to-catalog-alist)))) + + (defun set-domain (domain) + "Specify the domain used for translating messages in this source file. +The domain declaration may only appear at top-level, and should precede +all function and variable definitions. + +The presence of this declaration in a compiled file effectively sets the +domain of all functions and variables which are defined in that file. +\[XEmacs I18N level 3 emulating function]" + (setq gettext-default-message-domain domain))) + +(provide 'gettext) + +;;; gettext.el ends here diff --git a/lisp/liece-000.el b/lisp/liece-000.el new file mode 100644 index 0000000..f7cc798 --- /dev/null +++ b/lisp/liece-000.el @@ -0,0 +1,166 @@ +;;; liece-000.el --- Handler routines for 000 numeric reply. +;; Copyright (C) 1998-2000 Daiki Ueno + +;; Author: Daiki Ueno +;; Created: 1998-09-28 +;; Revised: 1998-01-26 +;; Keywords: IRC, liece + +;; This file is part of Liece. + +;; 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, 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 GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + + +;;; Commentary: +;; + +;;; Code: + +(eval-when-compile (require 'cl)) + +(eval-when-compile + (require 'liece-inlines) + (require 'liece-intl) + (require 'liece-misc)) + +(defvar liece-tmp-server-name) + +(defun* liece-handle-000-messages (number prefix rest) + (setq liece-nick-accepted 'ok) + (or (string-match "[^ ]* \\([^ :]*\\) *\\([^ :]*\\) *:\\(.*\\)" rest) + (return-from liece-handle-000-messages)) + (let ((target1 (match-string 1 rest)) (target2 (match-string 2 rest)) + (msg (match-string 3 rest))) + (cond + ((string-equal target1 "") + (liece-insert liece-000-buffer + (concat liece-info-prefix msg "\n"))) + ((string-equal target2 "") + (liece-insert liece-000-buffer + (format "%s%s (%s)\n" liece-info-prefix msg target1))) + (t + (liece-insert liece-000-buffer + (format "%s%s %s (%s)\n" + liece-info-prefix target1 msg target2)))))) + +(defun* liece-handle-001-message (prefix rest) + "RPL_WELCOME \"Welcome to the Internet Relay Network \"" + (or (< 0 (length (setq rest (liece-split-line rest)))) + (return-from liece-handle-001-message)) + (let ((nick (car rest))) + (setq liece-tmp-server-name prefix + liece-nickname nick + liece-real-nickname nick + liece-my-userhost nil) + (liece-send "USERHOST %s" liece-nickname) + (liece-insert-info + liece-000-buffer + (format + (_ "Welcome to the Internet Relay Chat world. Your nick is %s.\n") + nick)))) + +(defun liece-handle-002-message (prefix rest) + "RPL_YOURHOST \"Your host is , running version \"." + (cond + ((string-match "running version \\(.*\\)" rest) + (liece-insert-info liece-000-buffer + (format (_ "Your server is %s (version %s).\n") + liece-tmp-server-name (match-string 1 rest)))) + (t + (liece-insert-info liece-000-buffer + (format (_ "Your client version is %s.\n") + (liece-version)))))) + +(defun liece-handle-003-message (prefix rest) + "RPL_CREATED \"This server was created