From 79bd78bd701bbc2d9b449d40d451c58987e4a607 Mon Sep 17 00:00:00 2001 From: ueno Date: Tue, 4 Apr 2000 01:45:43 +0000 Subject: [PATCH 1/1] Importing Liece 1.4.3. --- AUTHORS | 8 + COPYING | 340 ++++ INSTALL | 95 ++ Makefile.am | 69 + README | 42 + acinclude.m4 | 79 + bootstrap | 7 + configure.in | 62 + contrib/plum-support.el | 150 ++ dcc/Makefile.am | 34 + dcc/dcc.c | 505 ++++++ dcc/dcc.ml | 248 +++ dcc/getaddrinfo.c | 124 ++ dcc/getaddrinfo.h | 69 + dcc/getopt.c | 755 +++++++++ dcc/getopt.h | 125 ++ dcc/getopt1.c | 183 +++ dcc/naddr.ml | 77 + dcc/naddr.mli | 31 + dcc/tcp.c | 229 +++ doc/Makefile.am | 33 + doc/liece-ja.texi | 719 +++++++++ doc/sample.dot.liece.in | 91 ++ etc/Emacs.ad | 58 + etc/Makefile.am | 90 ++ etc/icons/back.xpm | 58 + etc/icons/ball.blank.xpm | 16 + etc/icons/ball.gray.xpm | 25 + etc/icons/ball.red.xpm | 21 + etc/icons/crypt.xpm | 58 + etc/icons/encrypt.xpm | 54 + etc/icons/forward.xpm | 58 + etc/icons/home.xpm | 58 + etc/icons/icons.gif | 59 + etc/icons/icons.xpm | 59 + etc/icons/key.xpm | 29 + etc/icons/liece-pointer.xbm | 7 + etc/icons/liece-pointer.xpm | 74 + etc/icons/location.xpm | 58 + etc/icons/naruto.blank.xpm | 25 + etc/icons/naruto.gray.xpm | 27 + etc/icons/naruto.red.xpm | 116 ++ etc/icons/pindown.xpm | 27 + etc/icons/print.xpm | 58 + etc/icons/reload.xpm | 58 + etc/icons/search.xpm | 58 + etc/icons/stop.xpm | 58 + etc/po/ja.po | 415 +++++ etc/styles/bottom | 101 ++ etc/styles/middle | 87 + etc/styles/top | 103 ++ lisp/.cvsignore | 1 + lisp/ChangeLog | 3691 +++++++++++++++++++++++++++++++++++++++++++ lisp/Makefile | 85 + lisp/Makefile.am | 69 + lisp/bitmap-stipple.el | 93 ++ lisp/gettext.el | 255 +++ lisp/liece-000.el | 166 ++ lisp/liece-200.el | 385 +++++ lisp/liece-300.el | 646 ++++++++ lisp/liece-400.el | 177 +++ lisp/liece-500.el | 54 + lisp/liece-channel.el | 523 ++++++ lisp/liece-clfns.el | 123 ++ lisp/liece-coding.el | 122 ++ lisp/liece-commands.el | 1264 +++++++++++++++ lisp/liece-compat.el | 163 ++ lisp/liece-config.el | 95 ++ lisp/liece-crypt.el | 428 +++++ lisp/liece-ctcp.el | 610 +++++++ lisp/liece-dcc.el | 405 +++++ lisp/liece-emacs.el | 245 +++ lisp/liece-filter.el | 162 ++ lisp/liece-globals.el | 216 +++ lisp/liece-handle.el | 481 ++++++ lisp/liece-handler.el | 87 + lisp/liece-hilit.el | 446 ++++++ lisp/liece-inlines.el | 206 +++ lisp/liece-intl.el | 74 + lisp/liece-mail.el | 77 + lisp/liece-make.el | 231 +++ lisp/liece-menu.el | 301 ++++ lisp/liece-message.el | 190 +++ lisp/liece-minibuf.el | 182 +++ lisp/liece-misc.el | 496 ++++++ lisp/liece-modules.el | 99 ++ lisp/liece-nick.el | 370 +++++ lisp/liece-q-ccl.el | 136 ++ lisp/liece-q-el.el | 91 ++ lisp/liece-tcp.el | 239 +++ lisp/liece-url.el | 139 ++ lisp/liece-vars.el | 890 +++++++++++ lisp/liece-version.el | 113 ++ lisp/liece-window.el | 330 ++++ lisp/liece-x-face.el | 87 + lisp/liece-xemacs.el | 630 ++++++++ lisp/liece.el | 1019 ++++++++++++ lisp/liece.xbm | 843 ++++++++++ lisp/liece.xpm | 228 +++ lisp/queue-m.el | 141 ++ 100 files changed, 24094 insertions(+) create mode 100644 AUTHORS create mode 100644 COPYING create mode 100644 ChangeLog create mode 100644 INSTALL create mode 100644 Makefile.am create mode 100644 NEWS create mode 100644 README create mode 100644 acinclude.m4 create mode 100755 bootstrap create mode 100644 configure.in create mode 100644 contrib/plum-support.el create mode 100644 dcc/Makefile.am create mode 100644 dcc/dcc.c create mode 100644 dcc/dcc.ml create mode 100644 dcc/getaddrinfo.c create mode 100644 dcc/getaddrinfo.h create mode 100644 dcc/getopt.c create mode 100644 dcc/getopt.h create mode 100644 dcc/getopt1.c create mode 100644 dcc/naddr.ml create mode 100644 dcc/naddr.mli create mode 100644 dcc/tcp.c create mode 100644 doc/Makefile.am create mode 100644 doc/liece-ja.texi create mode 100644 doc/sample.dot.liece.in create mode 100644 doc/texinfo.tex create mode 100644 etc/Emacs.ad create mode 100644 etc/Makefile.am create mode 100644 etc/icons/back.xpm create mode 100644 etc/icons/ball.blank.xpm create mode 100644 etc/icons/ball.gray.xpm create mode 100644 etc/icons/ball.red.xpm create mode 100644 etc/icons/crypt.xpm create mode 100644 etc/icons/encrypt.xpm create mode 100644 etc/icons/forward.xpm create mode 100644 etc/icons/home.xpm create mode 100644 etc/icons/icons.gif create mode 100644 etc/icons/icons.xpm create mode 100644 etc/icons/key.xpm create mode 100644 etc/icons/liece-pointer.xbm create mode 100644 etc/icons/liece-pointer.xpm create mode 100644 etc/icons/location.xpm create mode 100644 etc/icons/naruto.blank.xpm create mode 100644 etc/icons/naruto.gray.xpm create mode 100644 etc/icons/naruto.red.xpm create mode 100644 etc/icons/pindown.xpm create mode 100644 etc/icons/print.xpm create mode 100644 etc/icons/reload.xpm create mode 100644 etc/icons/search.xpm create mode 100644 etc/icons/stop.xpm create mode 100644 etc/po/ja.po create mode 100644 etc/styles/bottom create mode 100644 etc/styles/middle create mode 100644 etc/styles/top create mode 100644 lisp/.cvsignore create mode 100644 lisp/ChangeLog create mode 100644 lisp/Makefile create mode 100644 lisp/Makefile.am create mode 100644 lisp/bitmap-stipple.el create mode 100644 lisp/gettext.el create mode 100644 lisp/liece-000.el create mode 100644 lisp/liece-200.el create mode 100644 lisp/liece-300.el create mode 100644 lisp/liece-400.el create mode 100644 lisp/liece-500.el create mode 100644 lisp/liece-channel.el create mode 100644 lisp/liece-clfns.el create mode 100644 lisp/liece-coding.el create mode 100644 lisp/liece-commands.el create mode 100644 lisp/liece-compat.el create mode 100644 lisp/liece-config.el create mode 100644 lisp/liece-crypt.el create mode 100644 lisp/liece-ctcp.el create mode 100644 lisp/liece-dcc.el create mode 100644 lisp/liece-emacs.el create mode 100644 lisp/liece-filter.el create mode 100644 lisp/liece-globals.el create mode 100644 lisp/liece-handle.el create mode 100644 lisp/liece-handler.el create mode 100644 lisp/liece-hilit.el create mode 100644 lisp/liece-inlines.el create mode 100644 lisp/liece-intl.el create mode 100644 lisp/liece-mail.el create mode 100644 lisp/liece-make.el create mode 100644 lisp/liece-menu.el create mode 100644 lisp/liece-message.el create mode 100644 lisp/liece-minibuf.el create mode 100644 lisp/liece-misc.el create mode 100644 lisp/liece-modules.el create mode 100644 lisp/liece-nick.el create mode 100644 lisp/liece-q-ccl.el create mode 100644 lisp/liece-q-el.el create mode 100644 lisp/liece-tcp.el create mode 100644 lisp/liece-url.el create mode 100644 lisp/liece-vars.el create mode 100644 lisp/liece-version.el create mode 100644 lisp/liece-window.el create mode 100644 lisp/liece-x-face.el create mode 100644 lisp/liece-xemacs.el create mode 100644 lisp/liece.el create mode 100644 lisp/liece.xbm create mode 100644 lisp/liece.xpm create mode 100644 lisp/queue-m.el 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