initial git creation

This commit is contained in:
PSYC 2009-03-03 04:27:01 +01:00
commit 2ede0de60e
278 changed files with 230984 additions and 0 deletions

.gitignore vendored Normal file
View File

@ -0,0 +1,19 @@

ANNOUNCE Normal file
View File

@ -0,0 +1,73 @@
CODE RELEASE: [lpmud driver] psyclpc 4.0.6 - derivate of LDMud
ladies & gentlemen,
wanted to inform you in accordance with Lars we have started shipping
our own LDMUD distribution as it was getting just too complicated to
maintain all necessary patches in our installation procedure for the
psyced server (multi-protocol chat/messaging server).
wrapping up our own tars has simplified distributing psyced a lot.
we also dared to change the name (1) to make it less confusing for
our users that "ldmud" belongs to "psyced" and (2) not to have to
fulfil the high expectations you would put into an LDMud product. ;)
psyclpc is a derivate of ldmud 3.3.714 (the current version in the
ldmud repository since over a year) with the following changes:
1. The driver has been modularized in such a way that you can turn
each function, many of them typically needed for MUD use, on or
off. The optional modules are:
* actions (MUD command parser)
* built-in editor 'ed'
* inventories, environments and light
* paranoid reference checks
* shadowing
* socket snooping
* swapping
Turning any of these off makes your driver lighter and faster,
which is quite nice. ;)
2. New optional packages have been added:
* expat XML parser
* DNS SRV resolution
* JSON parser
* automatic localhost telnet authentication via /proc.
3. TLS support has been improved a lot.
4. Minor fixes concerning 64 bit compilation, Solaris compilation,
UTF-8 support, outgoing connections and multi-homed connects for
dynamic DNS.
5. Debugging message style has been revamped and the secondary debug
log made optional, but you can switch it back to ldmud compatible
whenever you want.
6. All new functions are neatly configurable using the settings files
introduced by LDMud.
all in all no big deal, but it is being run in various places and
seems to perform flawlessly, so that in itself is nice (the bugfixes
submitted on mantis are really good!).
we didn't remove anything of the MUD support, just made it all optional
and configurable, so you can still run an LPMud on this. there is even a
new field in the letting you put the "ldmud" name back in
place, or whatever you want your driver to call itself. :)
by the way, you may be interested that the psyced's "mudlib" is architected
in a way that you can merge it into an existing mud. this brings PSYC, XMPP,
IRC, RSS and several other features into your system - there has even been
an experimental adaption of intermud over PSYC.. sort of an intermud 4.
here are all the links:
questions? telnet

CHANGELOG Normal file
View File

@ -0,0 +1,116 @@
2008-05-28 (fippo/lynX) (4.0.8)
+ new efuns:
string strftime(string, int default: F_TIME);
int strptime(string, string);
+ temporary efun tls_want_peer_certificate()
- SSL_set_shutdown() hopefully fixes openssl crasher on SSL_ERROR_SYSCALL
2008-01-21 (fippo) (4.0.7)
+ new enable_binary() efun to allow for binary networking (EXPERIMENTAL)
+ new ieee754_to_string(float) and string_to_ieee754(string)
efuns to support this specific flavour of floating point notation
2008-01-12 (fippo)
- fixed erq SRV support on 64 bit architectures
2008-01-02 (lynX)
- repaired builtin pcre utf8 support
+ use builtin pcre by default until utf8 support becomes more popular
in distributions (can be an unnecessary complication otherwise)
2007-10-07 (Lars)
- foreach(int i: <num>) recognizes if <num> is negative
and throws an error. (Bug #503, from ldmud)
- (configure) When testing for libiconv, reference a real libiconv method.
This catches situations where libiconv exists, but is of the
wrong architecture.
2007-08-29 (lynX) (4.0.6)
+ #define USE_RESTORED_OBJECTS in object.c teaches
save_object() to store object names using a `name` syntax and
restore_object() to put it back in circulation in form of strings.
+ enable_use_restored_objects activates this (but we don't use it yet)
+ erq now terminates peacefully whenever the driver shuts down
- cleaned up a lot of debug output behaviour and put it into
+ enable_use_debug_log=no sends all debug output to stdout
- enable_backtrace_always and enable_ldmud_compatibility
replaced by enable_use_ldmud_compatibility
- replaced enable_use_paranoid_refs by enable_use_paranoia which now
also ifdefs the "strict checks" code
+ added enable_use_experimental
+ EXPERIMENTAL: send TLSv1 handshake when acting as TLS client
2007-08-19 (lynX) (4.0.5)
+ enable_use_builtin_editor=no disables the built-in text editor 'ed'.
+ enable_use_inventories=no removes all MUD-related functionality
concerning inventories and environments.
+ enable_use_snooping=no disables all socket snooping code.
+ enable_use_actions=no disables all MUD-style command parser facilities.
+ enable_use_socket_limits=no disables limits on amount of entered lines
per second including get/set_max_commands() efuns.
+ enable_use_shadowing=no disables various forms of shadowing.
+ enable_use_swap=no disables the ability to swap program bytecode to disk.
+ enable_use_paranoid_refs=no disables paranoid runtime checks, you only
need this if you are making dangerous changes to the driver code
or looking for mysterious crashes.
+ enable_ldmud_compatibility=no mostly affects unnecessary debug messages
which will otherwise appear for maximum compatibility.
+ optimized outconn management with num_pending_outconns & extra_jobs_to_do
2007-08-16 (lynX) (4.0.4)
+ added detection of #include <arpa/nameser_compat.h> which seems to
determine the availability of DNS SRV extensions
- erq will be compiled without SRV instead of failing to compile
+ __NO_SRV__ is added to the predefines in lex.c if SRV is unavailable
+ enable_backtrace_always=yes stops the stupid behaviour of hiding away
backtraces in the debug log (the debug log should only be necessary
for driver developers, not lpc coders). It doesn't have to be like php,
where the end user sees the full backtrace, but at least the admin should
be considered sufficiently competent. :)
+ new RE_UTF8 flag mirrors the PCRE_UTF8 flag and allows operating on
unicode character ranges using regexps.
2007-07-06 (lynX) (4.0.3)
+ added zippo's 64 bit patches. apparently do not break 32 bit architectures.
thx to Casey Zacek; Zippo @ EotL; 2010
2007-05-07 (lynX) (4.0.2)
+ moved program name ('psyclpc' formerly 'ldmud') into
2007-05-04 (lynX) (4.0.2)
- fixed a compilation problem on Solaris derivates
+ added authlocal
+ added --with_max_net_connects, --with-size_socket_buffer
and forced settings when running ./configure without args
- applied to fix zero byte
output in tell_object(), tell_room() and say()
+ fixed multihomed connect to improve dynamic dns support
2007-05-03 (fippo) (4.0.1)
- removed TLS CRL implementation as it isn't being used currently
and crashes on some systems
2007-04-17 (lynX) (4.0.0)
+ using new major version number to avoid conflicts with LDMUD.
2007-04-08 (lynX)
- removed doc, mud, src/util/xerq, HISTORY, src/settings.
- crippled CHANGELOG.
- updated COPYRIGHT and README.
+ created new CVS and introduced the pragmatic name 'psyclpc'
- some values adjusted to heavy networking use
2007-02-16 (fippo)
- TLS fixed
+ support for TLS CRLs
+ JSON (javascript object notation) efuns
- set_combine_charset allows newline and null to be combined
- some minor patches
+ pkg-expat
2006-07-09 (Lars Duening) (3.3.714)
- Created snapshot.
For prior CHANGELOG and HISTORY see the LDMud distribution.

COPYING.LIB Normal file
View File

@ -0,0 +1,481 @@
Version 2, June 1991
Copyright (C) 1991 Free Software Foundation, Inc.
675 Mass Ave, Cambridge, MA 02139, USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
[This is the first released version of the library GPL. It is
numbered 2 because it goes with version 2 of the ordinary GPL.]
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.
This license, the Library General Public License, applies to some
specially designated Free Software Foundation software, and to any
other libraries whose authors decide to use it. You can use it for
your libraries, 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 library, or if you modify it.
For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you. You must make sure that they, too, receive or can get the source
code. If you link a program with the library, you must provide
complete object files to the recipients so that they can relink them
with the library, after making changes to the library and recompiling
it. And you must show them these terms so they know their rights.
Our method of protecting your rights has two steps: (1) copyright
the library, and (2) offer you this license which gives you legal
permission to copy, distribute and/or modify the library.
Also, for each distributor's protection, we want to make certain
that everyone understands that there is no warranty for this free
library. If the library is modified by someone else and passed on, we
want its recipients to know that what they have is not the original
version, 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 companies distributing free
software will individually obtain patent licenses, thus in effect
transforming the program into proprietary software. To prevent this,
we have made it clear that any patent must be licensed for everyone's
free use or not licensed at all.
Most GNU software, including some libraries, is covered by the ordinary
GNU General Public License, which was designed for utility programs. This
license, the GNU Library General Public License, applies to certain
designated libraries. This license is quite different from the ordinary
one; be sure to read it in full, and don't assume that anything in it is
the same as in the ordinary license.
The reason we have a separate public license for some libraries is that
they blur the distinction we usually make between modifying or adding to a
program and simply using it. Linking a program with a library, without
changing the library, is in some sense simply using the library, and is
analogous to running a utility program or application program. However, in
a textual and legal sense, the linked executable is a combined work, a
derivative of the original library, and the ordinary General Public License
treats it as such.
Because of this blurred distinction, using the ordinary General
Public License for libraries did not effectively promote software
sharing, because most developers did not use the libraries. We
concluded that weaker conditions might promote sharing better.
However, unrestricted linking of non-free programs would deprive the
users of those programs of all benefit from the free status of the
libraries themselves. This Library General Public License is intended to
permit developers of non-free programs to use free libraries, while
preserving your freedom as a user of such programs to change the free
libraries that are incorporated in them. (We have not seen how to achieve
this as regards changes in header files, but we have achieved it as regards
changes in the actual functions of the Library.) The hope is that this
will lead to faster development of free libraries.
The precise terms and conditions for copying, distribution and
modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, while the latter only
works together with the library.
Note that it is possible for a library to be covered by the ordinary
General Public License rather than by this special one.
0. This License Agreement applies to any software library which
contains a notice placed by the copyright holder or other authorized
party saying it may be distributed under the terms of this Library
General Public License (also called "this License"). Each licensee is
addressed as "you".
A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.
The "Library", below, refers to any such software library or work
which has been distributed under these terms. A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language. (Hereinafter, translation is
included without limitation in the term "modification".)
"Source code" for a work means the preferred form of the work for
making modifications to it. For a library, 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 library.
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it). Whether that is true depends on what the Library does
and what the program that uses the Library does.
1. You may copy and distribute verbatim copies of the Library's
complete 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 distribute a copy of this License along with the
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
2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, 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) The modified work must itself be a software library.
b) You must cause the files modified to carry prominent notices
stating that you changed the files and the date of any change.
c) You must cause the whole of the work to be licensed at no
charge to all third parties under the terms of this License.
d) If a facility in the modified Library refers to a function or a
table of data to be supplied by an application program that uses
the facility, other than as an argument passed when the facility
is invoked, then you must make a good faith effort to ensure that,
in the event an application does not supply such function or
table, the facility still operates, and performs whatever part of
its purpose remains meaningful.
(For example, a function in a library to compute square roots has
a purpose that is entirely well-defined independent of the
application. Therefore, Subsection 2d requires that any
application-supplied function or table used by this function must
be optional: if the application does not supply it, the square
root function must still compute square roots.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Library,
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 Library, 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
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 Library.
In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library. To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.
4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you 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.
If distribution of 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 satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.
5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library". Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.
However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library". The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.
When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library. The
threshold for this to be true is not precisely defined by law.
If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work. (Executables containing this object code plus portions of the
Library will still fall under Section 6.)
Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
6. As an exception to the Sections above, you may also compile or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.
You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License. You must supply a copy of this License. If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License. Also, you must do one
of these things:
a) Accompany the work with the complete corresponding
machine-readable source code for the Library including whatever
changes were used in the work (which must be distributed under
Sections 1 and 2 above); and, if the work is an executable linked
with the Library, with the complete machine-readable "work that
uses the Library", as object code and/or source code, so that the
user can modify the Library and then relink to produce a modified
executable containing the modified Library. (It is understood
that the user who changes the contents of definitions files in the
Library will not necessarily be able to recompile the application
to use the modified definitions.)
b) Accompany the work with a written offer, valid for at
least three years, to give the same user the materials
specified in Subsection 6a, above, for a charge no more
than the cost of performing this distribution.
c) If distribution of the work is made by offering access to copy
from a designated place, offer equivalent access to copy the above
specified materials from the same place.
d) Verify that the user has already received a copy of these
materials or that you have already sent this user a copy.
For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it. 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.
It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:
a) Accompany the combined library with a copy of the same work
based on the Library, uncombined with any other library
facilities. This must be distributed under the terms of the
Sections above.
b) Give prominent notice with the combined library of the fact
that part of it is a work based on the Library, and explaining
where to find the accompanying uncombined form of the same work.
8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License. Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library 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.
9. 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 Library or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.
10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
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.
11. 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 Library at all. For example, if a patent
license would not permit royalty-free redistribution of the Library 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 Library.
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.
12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library 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.
13. The Free Software Foundation may publish revised and/or new
versions of the Library 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 Library
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 Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
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.
Appendix: How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change. You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).
To apply these terms, attach the following notices to the library. 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.
<one line to give the library's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Also add information on how to contact you by electronic and paper mail.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
<signature of Ty Coon>, 1 April 1990
Ty Coon, President of Vice
That's all there is to it!

COPYRIGHT Normal file
View File

@ -0,0 +1,77 @@
psyclpc, an LDMud with a couple of patches and optimizations for psyced.
Patched by fippo and lynX.
Our patches usually also merge into LDMud eventually.
LDMud, a LPmud gamedriver.
Copyright 1997-2006 by Lars Duening.
LDMud is based on LPmud, which is
Copyright 1989-1991 by Lars Pensjö, and, starting with version 3.1.2,
Copyright 1991-1997 by Joern Rennecke.
These copyrights notices are actually incorrect, as each of the many
authors below is still owner of his or her copyright. Also, since about
1990, LPmud contains GPL code, making the original restrictive licensing
scheme invalid. At the same time the COPYLEFT was added, which is now
to be considered the only viable licensing scheme for LPmud and its
Ever from the start LPMud used the GNU malloc implementation, it
was thus never fit to become restricted from GPL-incompliant use.
The only code in this driver which originates from the CD driver is
the UDP implementation. In 1993 Jacob Hallen <>
writes "The UDP stuff is to be considered public domain."
LDMud contains contributions of many volunteers as listed in the file CREDITS.
Of these, the following packages are subject of their own copyright when
used outside the context of this gamedriver; please refer to the appropriate
files for details.
The regexp package is based on the code written by Henry Spencer.
The portable crypt() implementation is Copyright by Eric Young.
The smalloc allocator was written by Sean T. Barrett and put into the
public domain.
The 'ed' editor (with the exception of the indentation code) is Copyright
by Brian Beattie, Kees Bot and others.
The non-corrupting indentation code for the 'ed' editor was written and
contributed by Felix A. Croes (<>) from his DGD gamedriver.
The sprintf() efun was written by Sean A. Reith and put into the public
All code taken from the MudOS driver is Copyright by Tim Hollebeek and
the original authors. Use for other purposes than LPmud drivers or under
licenses significantly different from the original LPmud license needs
explicite permission.
The random() efun is implemented using the Mersenne Twister generator which is
Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, and subject
to a BSD-style license. The implementation is the faster implementation based
on Shawn Cokus and Matthew Belle's improvements. See random.c for the full
text of the license.
The MD5 message digest algorithm is Copyright (C) 1991-2, RSA Data Security,
The Apache-compatible MD5 password encryption is Copyright (C) 2000 Apache
Software Foundation.
The PCRE (Perl Compatible Regular Expression) is Copyright (C) 1997-2001 by
Philip Hazel. LDMud contains just the files required for the driver (with
small modifications); see pcre/LICENCE for the licence terms and the location
of the full package, and pcre/README.LDMUD for an explanation of the changes.
The lpc-mode.el for EMACS is Copyright (C) 2002 Vivek Dasmohapatra
<>, and distributed under the GPL.
The PostgreSQL package is based on code written and donated 2001 by Florian
The MCCP implementation was originally written for Finalfrontier by
Bastian Hoyer.

CREDITS Normal file
View File

@ -0,0 +1,281 @@
The program was originally written by
Lars Pensj|, April 1989 ( (no longer valid)).
Lars gives the following credit:
The regexp package was made by Henry Spencer.
The ed package was not done by me. See the file ed.c for information.
Bit manipulations was implemented by who also found
several bugs that had eluded me for months.
Valuable help and hints from: Mark Nagel, James Seidman, Moonchilde and more.
Roland Dunkerley III fixed for-loops, do-while and the operators ++ and --.
Sean T Barrett made smalloc.c.
Lennart Augustsson convinced me to implement a compiler for a virtual
stack machine. He also implemented the built-in preprocessor.
John S. Price found and fixed many bugs.
The shadow idea was "forwarded" to me by John S. Price from Team Cthulhu
(Bill Burdick, Roy Riggs, Mitch Adler).
Michael Malone, Michael O'Reilly, Klaus Rennecke, J|rn Rennecke and
Germano Caronni found and fixed a large amount of bugs.
Petri Wessman fixed changes for SCO unix and AIX.
Joern Rennecke ( ) gives this credit:
The non-corrupting indentation code for ed was written by Felix A. Croes,
aka Dworkin (<>) and originates from his DGD.
Mud-sprintf() is from Lynscar (Sean A Reith, <> and
was donated into the Public Domain.
The alist based mapping implementation was supplied by Dworkin.
The idea for query_actions and an implementation that has been partially used
is from Peter Eriksson (aka lpd)
The port to Amiga was done by Mateese ( Lars Duening )
The udp connectivity is from the CD driver, and was fitted in by deepthought.
Demos, Freaky, Hurl, Hyp, Mateese, Pepel and Jof did a lot of alpha
Reimer Behrends located a lot of bugs. He also supplied a portable macro to
test numbers for having but a single bit set, a mergesort based
sort_array() and variadic function support.
get_object_actions() was supplied by herp.
Marcus Meissner found and fixed many bugs.
Carl White, Mark (, Archimedes (Robert Fuller), Eric Blade,
Mitchell Brandsma, Sam Bobroff, Jim Cogbill, Ben Fennema,
Sorva (Ed Zielinski), Loke@Wonderland (Solem), Claus S. Jensen, Nils Magnus,
samo@MorgenGrauen, Frobozz (Bryan Schuler), Sique@Nightfall, APJ,
Deathknight, Tero Jyri Michael Pelander (,
Willem van der Oord (, Hate@MorgenGrauen,
Bob Farmer, Randor@EoP, Trevor Phillips, Robert M. Zigweid, Inspiral,
Brian Gerst, Rasmus H. Hansen, Demodian (John Kurtz), William J. Burton,
Patrick Li, Niilo Paasivirta, Frank Stolze, Penelope@Avalon,
Nathan@Unholy Lands, mubo@SiliconDream, Sunblood@Tubmud, Alfe@Tubmud,
Tatu Saloranta, Chameloid@Tubmud and Martin Brenner (deepthought) reported bugs.
Foslay did the OS/2 port.
Ray Gilbert originally did the MSDOS port, which was modified later by
Rasmus Hellbug Hansen.
Marcus Meissner contributed regreplace().
Slider@Tubmud supplied GnuWin32 patches.
Lars Duening thanks:
- Dana Durkee and the magnificient Wessex for enhancing my life.
- the citizens of One Step Beyond, PK-Mud and UNItopia for enduring my
driver experiments.
- Malcom Tester ( for providing me with access to
a Solaris system for testing.
- Elric ( for providing me with access to
a FreeBSD system for testing.
- Blackcat (?) for providing me with access to a Linux system for testing.
- Freaky for providing me with access to an Irix system for testing, numerous
bug reports, and lots of patience when new versions crashed even faster
than the old ones.
- Kees Leune for providing me with access to a Linux/Sparc system for
- Stefan Petri and contributors for the extensive documentation of the
Amylaar driver (see also doc/README).
- the MudOS programmers for the efun terminal_colour() and Michael Schaefer
for adapting it for LDMud.
- Martin Brenner: initial multi-port implementation, inetd compatibility
- Brian Gerst ( for the xerq daemon.
- Reinhard Pfau (, Mubo@SiliconDream) brought
the autoconf mechanism up to date.
- Ron Koerner (, Righ@FinalFrontier) provided the
initial implementation of inline closures modelled after MudOS' syntax.
- Uwe ( provided the basic IPv6 support.
- Mark Daniel Reidel (Karm@Nightfall) did the first implementation of
the mySQL efuns.
- Dennis VanHoey ( did the compiling and testing for the
Darwin port.
- Bart van Driessche (, Hunter@FinalFrontier) did the
new OS/2 port.
- Menaures added the tab character conversion to the editor, and gleefully
found new ways to crash the driver.
- Adam Helps donated the LPC implementation of the A* pathfinding algorithm.
- Christian Welzel adapted ptmalloc (a threadsafe variant of Doug Lea's
allocator) for LDMud and extended it to support garbage collection.
- for bug reports, critics, fixes, patches and other support:
Adam Helps (,
Alex@TubMud (
Alexander Fetke (, Alfe@Tubmud)
Alexander Dobrinescu (, Lev@FinalFrontier)
Anders Strandloev Elkjaer (
Andre Meiske (
Andreas Grammlich (, Gum@Wunderland)
Andre Grosse (, Patryn@Morgengrauen)
Andreas Fischer (
Andreas Klauer (, Menaures@Unitopia)
Andreas Weller (, Zwirch@Carledon)
Andres Cvitkovich (,, Woody@Silberland)
Andrew Weisz (
Andy Zeneski (
Arne @ Elridion
Athanasia Steele (
Bastian Hoyer (,
Ben Fennema (
Bertram Felgenhauer (, Fuchur@Wunderland)
Bill Andrulonis (, Bofin@Realmsmud)
Billy Pembroke (
Blackcat@PK-Mud (
Brandon (
Brandon Mathis (
Bruce Mitchell (, Klahn@Manly Mud)
Carlo v. Loesch (psyc://
Carsten Pluntke (, Vejar@ForgottenDreams)
Casey Zacek (, zippo@eotl)
Chris Bender (
Christian "Leonidas" Becker (
Christian Fiedler (
Christian Kirschbaum (, Chameloid@Tubmud)
Christian Mudra (, Coogan@Tubmud)
Christian Welzel (,,
Craig Venz (Craig, Kilan@Realmsmud)
Collin Baillie (
Dale "Elric" Perkins (,
Daniel von Dincklage (, Sunblade@SiliconDream),
Daniel Fischer (, Dan@Gueldenland)
Daniel Sloan (
Daryth Kendrickson (
David Gibbs (
David 'Greyelk' Gibby (
Dennis VanHoey (
Derek Baron (
Dominik Zanettin (, Zhan@Beutelland)
Edward S. Marshall (
Enrico Bauermeister (, Enrico@FinalFrontier)
Eivind (
Erik Meusel (emeusel@prinz-atm.CS.Uni-Magdeburg.De)
Fantom (
Fini Jastrow (Fiona@Wunderland,
Florian Heinz (
Frank Kirschner (
Frank Stolze (
Frank Syse (
Gerhard Schmidt (
Gimli@Unitopa (
"Gnomi" (
Gunnar Kreitz (
Heiko Kopp (,,
Henk Stokhorst (
Holger Kremss (,,
Jaroslaw Sitek (
Jason Hitt (
Jean-Stephane Jokeit (, xtian@avalon)
Joern Rennecke (
Jose Manuel Roman (, Theuzifan
Joseph Graham (
Josh Rollyson (
Juergen Weickert (Sissi@UNItopia)
Karl N. Matthias (
Kathrin Paschen (
Kees Leune (
Kent Chilson (
Krystal-Anne Rubenstein (
Largo@Wunderland (
Lasse Fuglsang Pedersen (, Zordiac@DeeperTrouble2)
Lee Salzman (
Logic (
"Mammi" (
Manu Mäki (, Cendor@Winterkill)
Mark Daniel Reidel (Karm@Nightfall,
Markus Peter (,
Martin (mandragon@morgengrauen)
Mats Carlberg (
Matthew Julius (
Michael Fedrowitz (,, Rhodry@ForgottenDreams)
Michael Sporn (, sunblood@tubmud)
Mike Conley (, Tamarindo@Sovereign)
"Nathan@Unholy Lands" (
Neil McBride (
Nick Derewianka (
Nico Ehemann (
Niels Boehm (, Mariko@Regenbogen)
Nuutti Kotivuori (
Oskar Linde (
Patrick May (
Paul Apgar (, tiresius@Cosmos)
Philipp Hancke (psyc://
Rainer Doerntge (
Rajko Albrecht (, Alwin@Avalon)
Ralph (
Ralph Zitz (, Nostradamus@OSB)
Reimer Behrends (Macbeth@Tubmud)
Reinhard Pfau (, mubo@SiliconDream),
Reinhard Vicinus (, Risky@Unitopia)
"Remsgost" (remsgost@blitzstrahl,
Robb Townsend (
Robert Forshaw (
Robert Reither (, Nathan@Unholy.Lands)
Robert Treml (
Rodney Quaye (
Ron Dawson (,, Caper@PixieMud)
Sebastian Huss (, baba@avalon)
Shinarae Lluminus@Batmud (
Slava "DieHARD" Ignatjev (,
Sieni (
Simon Fischer (
Stefan Budweiser (
Stefan Riemer (, Peng@FinalFrontier)
Stephan Lichtenhagen (,, Tiamak@Morgengrauen)
Steve Goucher (
Steve Willoughby (, Ragnarok)
Tatu P. Saloranta (
Terry Penn (
TheFinn (
Thomas Feldmeier (, Zora@Carledon,
Thorsten Klose (, Avatar@avalon)
Tmm@UNItopia? (
Tobias Josefowitz (
Tomas (
Tomi Valkeinen (, Tomba@Batmud)
Urv (
Volker Behr (Sorcerer@AbendDaemmerung,
Wayne Woods (
Willem van der Oort (
Wolf Dieter Dallinger (Pulami@Unitopia,
Zonk@FinalFrontier (,
The Wizards of Evermore

FAQ Normal file
View File

@ -0,0 +1,22 @@
Why our own derivate of the LDMud?
* Expecting our psyced admins to find a suitable version made installation
unnecessarily complicated, and every now and then an ldmud release does
indeed not work for psyced.
* We love the work mateese has been doing and still does, and we will
surely continue to share all gotchas and improvements so that both
variants of LDMud strive. Only we catch ourselves needing to have a
shorter change inclusion and release cycle. We asked mateese before
taking this step.
* For that reason we had been making the psyced install procedure too
complicated, as it was always trying to patch some things in the ldmud
source, even when it didn't know which ldmud version it was working on.
* Now to have psyced and its driver bundled in a pair which is safely known
to be happily working together is a simple yet great step forward.
* This makes the whole psyced installation base more homogeneous. We don't
have to deal with deployed instances that do not properly do this or that.
It should still be possible to run psyced with an off-the-mill ldmud and
counterwise run a MUD installation with a psyclpc.

HELP Normal file
View File

@ -0,0 +1,21 @@
psyclpc is being maintained by fippo & lynX.
fippo is available at psyc://
lynX is available as psyc://
You can reach us at psyc://
psyclpc is a programming language for intense multi-user network applications
such as psyced. it's a recent fork of LDMud with some features and many
bug fixes. we kept it compatible to LDMud, so you can run a MUD with it, too.
It is available from <>.
LDMud itself is a continuation of the Amylaar LPMud Gamedriver 3.1.2.
See also <>.
psyclpc is released under the GNU LIBRARY GENERAL PUBLIC LICENSE, Version 2.

INSTALL Normal file
View File

@ -0,0 +1,323 @@
Topics covered:
- psyclpc & LDMud Notes
- Unix or Unix-like systems, with additional details for FreeBSD, AIX 3.4,
and DEC Ultrix.
- IPv6
- mySQL
- BeOS
- Windows 95/98/NT
- OS/2
psyclpc & LDMud Notes
psyclpc is a variant of the LPC language optimized for psyced.
When using this driver distribution "./configure" will restart
itself as "./configure --with-setting psyced". This will run
configure with all the sane options necessary for a pleasant
psyclpc experience tuned to psyced requirements.
See also and
Should you want to make a very traditional driver close to the
LDMud original instead, copy your own settings file to the
settings directory and run it. All the new functions of psyclpc
will then automatically default to LDMud-compatible behaviour.
Also running "./configure" with *any* parameters will keep it
from loading psyced behaviour. Expect psyced not to work with
such a driver. It will probably fail with one of these messages:
psyclpc: Unknown option '--tls-key'.
Failed to load master object 'secure/master'.
Unix or Unix-like system
The driver uses a standard autoconfiguration system which on most
systems does all the work for you (for exceptions see below).
To prepare the compilation, execute the 'configure' script from
within the src/ directory.
configure checks for a number of site specific settings and uses this
information to create the files machine.h (from, Makefile
(from and config.h (from We'll come back to
config.h below.
configure takes a lot of arguments (--help will tell you everything),
but the most important are these:
--prefix=PREFIX: the base directory for the mud installation,
defaults to /usr/local/mud .
--bindir=DIR: the directory to install the executables in,
defaults to ${PREFIX}/bin .
--libdir=DIR: the directory where the mudlib is found,
defaults to ${PREFIX}/lib .
--includedir=DIR: the directory where driver's LPC include files
are supposed to live.
defaults to ${PREFIX}/include (which is usually wrong).
--libexecdir=DIR: the directory where the programs for the ERQ are found,
defaults to ${PREFIX}/libexec .
These settings are written into the Makefile and compiled into the driver,
just the mudlib directory setting can be changed with a commandline
A lot of the drivers parameters can be tweaked for better performance; these
parameters are defined in config.h . This file too is created by configure,
which provides sensible defaults for all parameters for which no explicite
setting is provided. To tweak a setting yourself, pass the argument
'--enable-<option>=yes|no' resp. '--with-<option>=<value>' to configure on
the commandline.
Alternatively, the indivial specifications can be collected in a settings
file, which is stored in the directory src/settings/. To use the
setting file <osb>, give '--with-<osb>' as argument to configure. The
file src/settings/default documents the available settings. The setting
files are self-executing: './settings/<foo> [<extra-configure-args>]' will
start configure with the proper commandline arguments.
The following environment variables can be used to tweak the behaviour
of the configure script:
CC: the name of the C compiler
CFLAGS: compiler flags to be used during the configure script
EXTRA_CFLAGS: compiler flags to be used when compiling the game driver
LDFLAGS: linker flags to be used by configure and for linking the
game driver.
After configuration is finished, you may want to modify the Makefile
to fine tune those parameters which are not covered by the configuration.
The compilation is done using make. Following targets are implemented:
<none>: compile the driver, named 'psyclpc'.
install: compile the driver and install it in ${bindir}
utils: compile the utilities, especially the ERQ demon
install-utils: compile and install the utilities in ${bindir}
install-headers: install the driver header files in ${includedir}.
install-all: compile and install everything.
To actually run this, you need either psyced or a mudlib.
If your systems supports pthreads, --enable-use-pthreads will allow to
compile the driver with pthread support. Currently this means that
background threads will be used to write data to the network.
WARNING: pthreads support is still experimental and might crash
your driver!
When using gcc, it could happen that the compiler aborts with signal 10
or 11. The reasons are unknown, but you can restart the compilation
process by typing "make" again (and again...).
AIX 3.4:
The native compiler comes in several forms, of which only the
basic form 'xlc' works with the configuration script.
Start the script as:
CC=xlc ./configure ...
DEC Ultrix:
Depending on the system configuration you might be unable to
compile 'interpret.c' with any kind of optimization at all.
The typical symptom is a failure during the compilation with
"Error code 1". When that happens, do the following steps:
- Make as usual until the "interpret" compilation
fails. The symptom is "Error code 1".
- Edit the makefile. Uncomment the compilation
line for debugging, and comment the compilation
line containing the optimization switches and
- Start the make again. After the "interpret"
compilation completes, control-C out of the
- Edit the makefile again. Re-comment the line
for debugging, and uncomment the line with
the optimization switches and options.
- Start the make again. This time it will
complete as expected.
If your machine supports IPv6, the driver can be configured to use it: give
'--enable-use-ipv6=yes' as argument to the configure script.
Beware: the driver support is rudimentary, experimental, and may cease to
function on the next full moon. Additional work is necessary to really
change _all_ address-related functions in driver and mudlibs.
IPv6 support was implemented by Uwe <>.
In order to test IPv6 under Linux you need a 2.2.x kernel (preferably 2.2.10
or better) and the inet6 apps. If you use glibc 2.0, you need version 0.35
of the inet6 apps, or for glibc 2.1 you need version 0.36. The apps should
installed into /usr/inet6.
The apps are available on or on its mirrors, e.g.
Furthermore you need a connection to the 6bone
Newer versions of AIX also come with IPv6 support.
If your machine has mySQL installed, the driver can be configured to use
it: give '--enable-use-mysql=yes' as argument to the configure script.
Alternatively, if your mySQL uses an unusual include/library path,
the option can be given as '--enable-use-mysql=/unusual/path', which
will use the given path as search path for both include and library
files in addition to the normal system search paths. The include files will
be searched in <path>/include and <path>, the library files will be search
in <path>/lib/mysql, <path>/lib, and <path>, in this order.
The username and password for the mySQL database are specified by
the mudlib as arguments to the efun db_connect().
Use mysqladmin to create any databases you want to provide - the
names are later used in the efun db_connect() to connect to
the databases.
Under BeOS, the driver can be configured and compiled in two ways:
1. Using the provided configuration files.
Copy the files machine.h, config.h and Makefile from src/hosts/be/
to src/. You may have to edit config.h and Makefile if you have
to use a specific mudlib with exotic settings.
Advantage of this method is that the Makefile allows cross-compilation
and covers Be specifics like file icon, type and version.
2. Use the Unix configure mechanism.
In general just follow the instructions given for Unix systems, but
be aware of the follwing:
- If the configure script doesn't properly work, try starting it
or (especially on BeOS R4.5 on PPC) even
- the created executable will have neither icon nor type.
- cross compilation is not supported.
- the Makefile defaults to best optimization which needs a lot
of memory during compilation.
If on driver start you get an error about an unknown hostname or
seems to hang, you're missing an /etc/hosts file:
- In the network preferences, select a name for you machine,
e.g. 'bebox'. The domain name field can be blank.
- Copy the /boot/beos/etc/hosts-sample file to /boot/beos/etc/hosts,
and edit it to contain at least the following lines: bebox
127.1 bebox
(Note: in the file, every line has to start with the IP address -
no leading spaces are allowed).
With the current networking implementation, the driver is unable
to start ERQs. In order to use ERQs, you have to start them manually.
Other than this, the installation steps are the same as for Unix.
Windows 95/98/NT
To compile the gamedriver for Windows, you need the 'Cygwin' package,
which is a port of gcc, bash, and other GNU/Unix programs. Once it
is installed and running, the procedure is the same as under Unix.
CygWin is available from <URL:> or
<>, and when installing make sure that
your installation includes gcc, bash, make, sed, awk, and bison.
One common pitfall is if the installation does not create the '/bin'
directory in which the CygWin executables are expected. A typical
error message would be 'make: /bin/sh not found'.
Solution 1: Create a directory 'bin' in your search path (e.g. c:\bin)
and copy all required executables (in this case 'sh.exe') into
that directory.
Solution 2 (this can be done in a script): cd into the directory
where the executables are stored, e.g.
/compiler/Cygnus/B19/H-i386-cygwin32/bin . In this directory, give
the command 'mount $PWD /bin'.
Solution 3: Use a newer version of Cygwin where this problem apparently
has been solved.
A driver compiled by David Gibbs ( is available
at <URL:>.
The following comments were provided by Robert Nurrie(?) who had
an misconfigured Cygnus installation (Summer 2000):
"Make sure you've used the setup.exe you get when clicking the 'install
cygwin now' link in the upper right corner of their website, instead of
the setup.exe found on the ftp-site.
Oh, and when you're given the choice of default text file type you
should of course chose Dos, as that seems to be the key."
Brandon Mathis points out, "that to compile under Windows you have to
use 'tar -xvfj' and not WinZIP to extract the source".
The OS/2 port uses the EMX (a gcc version) to compile the gamedriver.
To compile the driver, copy the machine.h and Makefile from the hosts/os2
directory into the top directory and make as under Unix. The Makefile
is configured to install the driver in /mud - edit the variable 'prefix'
if you want a different directory.
Important: the Makefile must be save using the Unix lineend convention,
otherwise the make program will stop with an error. In the EPM editor
this can be achieved using the 'save -u' command.
If you have the full GNU suite installed, you can also configure the
driver as under Unix. Following caveats regarding the configure script:
- the ac_exeext variable may not be set to '.exe' as it should be;
- the calls to the program conftest may lack the ${ac_exeext} extension.
Additionally, configure does not properly recognize the settings for
Copy these values from the provided machine.h
To recreate the configure script from, you need autoconf
version 2.50 or newer.

README Normal file
View File

@ -0,0 +1,26 @@
The files in this directory are:
HELP : basics, serves also as source for the man file.
README : this file.
COPYRIGHT : the copyright of the driver.
CREDITS : the list of contributors.
HISTORY (removed)
CHANGELOG : the last changes in minute detail.
COPYING.LIB : the GNU Library Public License.
INSTALL : installation hints and notes.
FAQ : unfrequently answered questions.
psyclpc.1 : manual file.
doc/ (removed) the documentation is available on the web or
in the LDMud distribution.
src/ : the driver source
pkg/ : additional packages (unsupported and supported) for the driver.
mudlib/ : various LPC (example) files.
standard include files to copy into your mudlib. Some of these are
also used by the src/ files.
mud/ (removed) the lp-245 mudlib, and support files for other mudlibs.
Nice! Somebody made a doxygen of ldmud and posted it on

TODO Normal file
View File

@ -0,0 +1,90 @@
+ we are glad to find out that Lars is back and working on ldmud! :D
- examine & apply: 2320, 2334, 2335, 2336, 2340, 2341
- #define USE_EXPAT und JSON werden trotzdem gesetzt in config.h
auch wenn configure keine libs gefunden hat (egal, wir verwenden beide nicht)
- Because of some funny bug the driver will probably not bind properly
to _basic_host_IP as it also needs _basic_host_name and _basic_host_domain
to be provided. Hopefully this shortcoming will soon be history.
+ with the new __NO_SRV__ detection psyclpc compiles under cygwin but it
doesn't provide SRV which makes it a suboptimal XMPP router.. just in
case you want that.
fippo suggests to put into psyclpc requires a locally running
nameserver.. and i don't think it even runs on cygwin.. other ideas?
-* QA Notice: Package has poor programming practices which may compile
* fine but exhibit random runtime failures.
* interpret.c:7224: warning: dereferencing type-punned pointer will break strict-aliasing rules
- make more MUD features optional: more d_flag stuff?
- disabling with_input_escape does not disable the input_escape handling source code
+ teach ldmud to exec() so that, together with --args, we can run it as a
regular daemon without kludgy shellscripts
+ provide a query_shutdown_progress() efun to inform about progress
and the intention to either shutdown or restart. maybe even a reason?
+ optimize f_lower_case by adding an 'already lowercase' flag to the
string data structure
+ ldap package erproben und fertigmachen
+ put errno() back in
+ psyctext() in C ... see psyced/CHANGESTODO for details
? bugless says there is an ioctl() to obtain a descriptor's owner uid
thus avoid the authlocal /proc hack
? have a seperate package for the LPC documentation and update it a bit
since ldmud?
+ fip thinks we should have a new operator with arguments rather than
clone_object and subsequent -> calls. pike doesn't even have the "new"
because unlike C++ and LPC it forbids static use of classes (aka "blueprints")
+ fippo suggests to look into
+ DMSG_FLUSH for incremental debug messages :)
- for pike compatibility allow string[-1] just like string[<1]
? link libpurple to this for protocol supports and OTR hahahahaha
? or link libotr only?
? or is OTR too expensive anyway and we should try SS-TLS?
+ object names need to be able to be identical to uniforms
then it doesn't matter if they came back from persistence as strings
as sendmsg() can handle both objects and uniforms - we just need to
deal with mappings where both the object and the uniform could be the key..
(members & routes of places)
- add_message("%s", "\n*** Text lost in transmission ***\n");
should be passed to master instead.
+ _length: <eL> somebody implement a new input_to(#'get_data, length).
? MAYBE the whole networking should be replaced by libevent!??
+ support epoll() / kqueue (or just libevent?)
? allow port definition from lpc:master.c or even dynamic listen()
so we can add port config to the web configurator
..egal, machen wir jetzt über psyconf
-? keeping track of charset everywhere to avoid any unnecessary conversion
would lead to so much overhead, that occasional unnecessary conversion is
the cheaper option. that's why we should convert in the driver close to
the network operations:
comm.c:3055: if(ip->tls_inited)
l = tls_read(ip, ip->text + ip->text_end, (size_t)l);
else if (!(ip->tls_want))
l = socket_read(ip->socket, ip->text + ip->text_end, ...
+ since network read operations are much more efficient than input_to-lines
iconv charset conversions should happen right after socket/tls_read()
into a pre-buffer, then copy-converted into the interactive's buffer
+ outgoing transmissions need to find the same treatment, before
socket_write() and also before optional compression.
+ socket charset is stored in interactive_s and given by an efun
+ charset is compared to SYSTEM_CHARSET which is given by config.h/configure

etc/README Normal file
View File

@ -0,0 +1,14 @@
Miscellaneous files for the driver:
lpc-mode.el : LPC mode for EMACS, by Vivek Dasmohapatra <>
lpc.xml : LPC syntax highlighting for Kate, by <>
lpc.vim : LPC syntax highlighting for vim, maintained by Shizhu
Pan <> A perl snippet which reads a LPMud savefile and
transforms it into a Perl datastructure.
The following scripts are just working examples - use them to roll your own:
memusage : A script to analyze OBJ_DUMP.

etc/lpc-mode.el Normal file
View File

@ -0,0 +1,382 @@
;; LPC mode
;; Emacs Lisp Archive Entry
;; Package: lpc-mode
;; Filename: lpc-mode.el
;; Version: 0.12
;; Keywords: languages, LPC
;; Author: Vivek Dasmohapatra <>
;; Maintainer: Vivek Dasmohapatra <>
;; Created: 2002-08-31
;; Description: syntax highlighting/indentation for LPC
;; URL:
;; Compatibility: Emacs21
;; Last-Updated: Tue 2002-09-17 23:59:51 +0100
;; This file is NOT part of GNU Emacs
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; 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
;; Copyright (C) 2002 Vivek Dasmohapatra <>
;; 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.
;; OK Nick: first stab at LPC mode:
;; 0.01: 'foo and 'C' should be handled correctly.
;; 0.02 ... 0.06: intermediates.
;; 0.07: ultra-hairy ({#'[][,&] syntax now scanned for. Bleurgh.
;; 0.08: ({ ... }) syntax added as brace-list
;; 0.09: rip up and rewrite as a proper cc-mode based mode
;; 0.10: miscellaneous bugfixes.
;; 0.11: should compile cleanly now _and_ work as well (I hope)
;; 0.12: bug in `lpc-font-lock-map' keyword/function definition highlighting
;; ;; either put lpc-mode.el in your load path and use:
;; (autoload 'lpc-mode "lpc-mode" t)
;; ;; or have:
;; (autoload 'lpc-mode "/path/to/lpc-mode.el" t)
;; ;; then:
;; (setq auto-mode-alist
;; (append '(("\\.lpc$" . lpc-mode)) auto-mode-alist)) )
;; Nick: You'll have to do similar things to handler.el to get that to
;; work, let me know if you need this done.
;; elisp-dep-block >>
(require 'custom );(defface)
(require 'cc-mode );(c-electric-brace)
(require 'regexp-opt);(regexp-opt-depth regexp-opt)
(require 'font-lock )
;;(font-lock-add-keywords font-lock-fontify-region font-lock-mode)
;; elisp-dep-block <<
(defconst lpc-mode-version "0.12")
(defmacro lpc-defsyntax (name doc klist)
"Declare a cc-mode syntax variable of lpc-N-keywords and a regex
lpc-N-regex to go along with it, based on the keyword list K."
(let* ((n name )
(d doc )
(k klist)
(ln (format "lpc-%s-keywords" n))
(ld (format "%s (list)" d))
(ls (intern ln))
(rn (format "lpc-%s-regex" n))
(rd (format "%s (regex)" d))
(rs (intern rn))
(kwds nil))
(setq kwds (if (stringp (car k)) k (eval k)))
;;(message "%s" (format "%S" kwds))
`(progn (defconst ,ls ',kwds ,ld)
(defconst ,rs (regexp-opt ',kwds) ,rd)) ))
(lpc-defsyntax type
"LPC primitive type keywords."
("int" "mapping" "mixed" "object" "status" "string" "void"))
(lpc-defsyntax specifier
"LPC declaration specifier keywords."
("nomask" "private" "public" "static" "varargs"))
(lpc-defsyntax other-decl
"LPC keywords starting other decl-level constructs."
(lpc-defsyntax block-stmt-1
"LPC keywords followed directly by a block."
("do" "else"))
(lpc-defsyntax block-stmt-2
"LPC keywords followed by a paren sexp and then by a block."
("for" "if" "switch" "while" "foreach"))
(lpc-defsyntax simple-stmt
"LPC statement keywords followed by an expression or nothing."
("break" "continue" "return"))
(lpc-defsyntax label
"LPC keywords introducing labels in blocks."
("case" "default"))
(lpc-defsyntax all
"LPC keywords."
(append lpc-type-keywords
lpc-label-keywords ))
(lpc-defsyntax default-highlight
"LPC keywords (for default highlighting)"
(append lpc-specifier-keywords
lpc-simple-stmt-keywords ))
(lpc-defsyntax conditional
"LPC conditional keywords"
(append lpc-block-stmt-1-keywords lpc-block-stmt-2-keywords))
(defconst lpc-comment-start-regex c-C++-comment-start-regexp)
(defconst lpc-special-brace-lists '((?{ . ?})) )
(defconst lpc-magic-quote-comma '(9))
(defconst lpc-magic-symbol-name '(3))
(defvar lpc-mode-syntax-table nil)
(if lpc-mode-syntax-table
(setq lpc-mode-syntax-table (make-syntax-table))
(c-populate-syntax-table lpc-mode-syntax-table)
(modify-syntax-entry ?\' "'" lpc-mode-syntax-table) )
(defun lpc-modify-syntax-at (beg end syntax)
"Apply a syntax-property value syntax from beg to end."
(if (<= (point-max) end) nil; noop
;;(message "(%d x %d) => %S" beg end syntax)
(put-text-property beg end 'syntax-table syntax)
(put-text-property (1- end) end 'rear-nonsticky t ))))
;; Code by Seth Golub <seth AT cs DOT wustl DOT edu>, 1996-02-01,
;; no licence.
;; modified slightly to bring this up to date, didn't work quite right
;; out of the box:
(defun lpc-maybe-electric-brace (arg)
"Insert character and maybe correct line's indentation."
(interactive "P")
(if (= last-command-char ?{)
(if (= (preceding-char) ?\()
(self-insert-command (prefix-numeric-value arg))
(c-electric-brace arg))
;; (= last-command-char ?})
(let (start-point state containing-sexp)
(save-excursion (beginning-of-defun)
(setq start-point (point)))
(save-excursion (setq state (parse-partial-sexp (point) start-point 0)))
(setq containing-sexp (car (cdr state)))
(if (and containing-sexp (save-excursion
(goto-char (1- containing-sexp))
(looking-at "(")))
(self-insert-command (prefix-numeric-value arg))