let the past begone in cvs land. welcome to igit igit!

This commit is contained in:
PSYC 2009-01-26 20:21:29 +01:00
commit 4e601cf1c7
509 changed files with 77963 additions and 0 deletions

15
.gitignore vendored Normal file
View File

@ -0,0 +1,15 @@
CVS
~$*
.DS_Store
.metadata
.actionScriptProperties
*~
*.swf
*.swp
*.diff
*.orig
*.rej
*.log
*.pem
*old
*bak

119
AGENDA.txt Normal file
View File

@ -0,0 +1,119 @@
VERSION 1.0
===========
psyced:
[x] make those methods carry the names they should carry
[x] interface cmd() to psyc user object
[x] have pr() produce something useful for psyc clients
[x] send incoming psyc client messages as its user object
[x] allow for remote buddies (even if only java can talk to them)
[x] output real buddies
[x] make rooms usable from psyc
[x] write up some docs / installation instructions
[-] fix up the veChat applet
web:
[x] multilang
[x] end-user start page
[x] hacker page
[x] software download
[x] konr@d disclaimer
[-] finish up the psyc draft to match psyced-1.0
[x] www.psyced.org
[x] provide driver binaries on download
[-] provide ready-to-use packages (rpm, deb, ebuild..)
general:
[-] set up mailing lists
[x] beta testing
[x] get it all working
[ ] heldensaga wants to celebrate a release party!
promotion:
[x] konr@d interview
[x] freshmeat
[ ] iX article
[ ] radio bremen interview
[ ] publish in comp.sources.unix and de.comm.chatsystems
[ ] /.
[ ] less old-fashioned ideas
VERSION 1.1
===========
psyced:
[x] fix irc client access to server
[-] fix /p & co, or think of something better
[x] server intercommunication (buddies, messages, query)
[+] real psyc rooms
[-] filter incoming psyc vars & recognize abbrevs
[ ] support compact methods and vars
[-] proper support for var modifiers
[x] support _tag for request/reply tagging
[x] parse notice syntax: "There are [_users_amount] users online."
perl:
[x] tcp support
[x] smart multiplexing
[x] parse notice syntax: "There are [_users_amount] users online."
[x] simple client
general:
[ ] update & publish internet drafts
web:
[x] about.psyc.eu
[x] comparison psyc vs. icq, jabber, msn, irc
VERSION 1.2
===========
psyced:
[x] enter remote rooms (simple style)
[ ] make rooms fully capable of psyc
[x] make remote people addressable by nickname (local nickspace)
[ ] make user objects fully capable of psyc conferencing (hard!)
web:
[?] the psyc vision (document) ?
perl:
[+] non-blocking writes using buffers
[-] tkperl client
all:
[+] start development of negotiations (see FORK)
VERSION 2.0
===========
web:
[ ] release PSYC 1.0 specification
all:
[ ] introduce compressed keywords
VERSION 3.0
===========
[ ] introduce object descriptions
POSSIBLE FUTURES
================
[-] c/c++ implementation (for windows, mac and unix)
[-] psyc: plugins for browsers (so you can click on a psyc url)
[x] icq gateway (so you can talk to icq-buddies from psyc)
[x] ircserver gateway (so you can talk to ircers)
[ ] pager/gsm-sms gateways
[-] psyc-enhanced videoconferencing/internet-telephony
[ ] psyc-enhanced broadcasting (text/video/audio)
[ ] psyc-enhanced distributed webcasting/website management
[-] psyc-enhanced file sharing

9
BANNER Normal file
View File

@ -0,0 +1,9 @@
___________________________
the future is in your hands
___ __ _ · _ __
| ·\ (__ \ / /
|__/ · \ V | ·
| (__/ | \__
http://www.psyc.eu

3708
CHANGESTODO Normal file

File diff suppressed because it is too large Load Diff

280
COPYLEFT.txt Normal file
View File

@ -0,0 +1,280 @@
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

199
INSTALL.txt Normal file
View File

@ -0,0 +1,199 @@
Installing the psycMUVE
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
We're very proud to see you are about to install a psycMUVE!
(Windows System)
You received this in form of an executable. By executing it you
will be prompted some questions, then sent to a web-based
configuration interface. So essentially you don't need any help here.
Please move directly on to the FIRSTSTEPS document once you have
done the installation.
[1]http://muve.pages.de/FIRSTSTEPS
(Linux or Unix System)
In a nutshell, all you have to do is execute './install.sh' and go from
there. It will tell you to download an LDMUD driver from
[2]http://muve.pages.de/ldmud
then compile and configure it with you interactively. So you don't need
to know anything more now, but if you want more information, read on.
(Questions and Answers)
Don't be afraid to come into our developer chatroom and interact with
us as you go along. We have designed the installation to be totally
simple and beginner friendly. If you're not experiencing it as such,
something has gone wrong. Don't try to figure it out alone, talk to us.
And.. please be patient with our slow response times.
psyc://ve.symlynX.com/@psyc
[3]irc://ve.symlynX.com/psyc
[4]telnet ve.symlynX.com
/go psyc
[5]http://ve.symlynX.com:33333/PSYC/
0. System Requirements
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
You can skip this if you think you have a sanely configured unix system.
The following requirements exist for building psycMUVE and ldmud:
o Disk Space:
Make sure you have approximately 7 MB of temporary free disk space
available. After installation psycMUVE occupies approximately 3 MB of
disk space (the current required disk space depends on the amount of
users, logs etc).
o ANSI-C Compiler:
Make sure you have an ANSI-C compiler installed. The GNU C compiler
(GCC) from the Free Software Foundation (FSF) is recommended.
You can find the homepage of GNU at [6]http://www.gnu.org/. GCC
binaries for Solaris can be loaded from [7]http://www.sunfreeware.com/.
o POSIX YACC compliant grammar compiler
You probably have either bison or yacc installed, otherwise do the
appropriate emerge or whatever software installation.
o Perl 5 Interpreter [OPTIONAL]
The distribution includes some perl scripts that may or may not
be useful.
1. How to compile an LPC driver manually
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
You can skip this part if you want to let the installation mechanism
do it for you. To be honest, the danger of us not giving you enough
information for you to get it done right is lessened if you let the
process do it.
[8]http://lpc.pages.de will direct you to the current download areas for
a PSYC-enabled LPC driver, like currently LDMUD. The LDMUD driver uses
a standard autoconfiguration system which on most systems does all the
work for you (for exceptions see below). That's how install.sh can do it
just like that.
To prepare the compilation, enter the src directory of LDMUD and execute
the 'psycmuve' script located in '[9]world/drivers/ldmud/patches/psycmuve'.
within the src/settings directory of LDMUD, or -even better- use
the maybe more up to date 'psycmuve' file in the patches directory
of world/drivers/ldmud. The default target directory is /opt/psycmuve -
please edit the script if you need a different path.
After configuration is finished, you may want to modify the Makefile
to fine tune those parameters which are not covered by the configuration.
(like maybe change 'INSTALL=./install.sh -c' to 'INSTALL=./install.sh')
But there is generally no need to do anything really.
The compilation is done using make. Following targets are implemented:
<none>: compile the driver
install: compile the driver and install it in ${bindir}
utils: compile the utilities, especially the ERQ daemon
install-utils: compile and install the utilities in ${bindir}
For more details feel free to read the LDMUD INSTALL file.
2. Okay, let's install it!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To install psycMUVE, execute the './install.sh' script from within
the distribution directory. On some systems you may have to use a
different shell, like 'ksh install.sh' or 'bash install.sh'.
You will be asked some configuration questions. When done, it will
create several files for you and transfer the content of the psycMUVE
distribution to the target directory you specified interactively.
Depending on your userid (root or other) you will be given
/opt/psycmuve or ~/psycmuve as defaults for installation. We
continue this documentation assuming you picked the root defaults.
Start psycMUVE:
/opt/psycmuve/bin/psycmuve
Test it:
telnet localhost 2000
or
irc <nick> localhost
3. Configuring psycMUVE
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
We have a very very useful web-based configuration tool.
The installation process will direct you to it. If you want to
activate it manually, edit local/local.h and add the following
line: '#define WEB_CONFIGURE' - As you restart the MUVE you will
be able to use it at [10]http://localhost:44444/net/http/configure
Careful who else may have access to the localhost address.
If in doubt, simply disable WEB_CONFIGURE after use.
Should you need to access the configuration tool from a remote host,
using a tunneling technology like ssh is probably the safest approach.
If that is not an option you need to put the IP number of your browsing
client (or an abbreviation of it, like "127.0.0." with a trailing dot)
into the local/hosts.h file in your configuration directory.
The syntax is something like:
#define ENABLE_HOSTS "192.168.0.1"
If the IP number is only dynamic, it is certainly a good idea to
remove that entry after web configuration is complete.
4. Troubleshooting
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LDMUD will compile TLS in, even if you told install.sh not to use it.
This allows you to change your mind later on and shouldn't be a problem,
but if it is, edit src/config.h to #undef USE_TLS and redo the compilation.
There is a problem specific to the LDMUD 3.3.610 version, when it comes to
compilation: It doesn't set the #define USE_TLS properly in config.h even
if the configure settings file tells it to. Please edit src/config.h
accordingly and recompile. Other than that 610 is very stable and a good
choice!
You may also have to add the --tls-key options into the commandline
in bin/psycmuve. Just look into it and you'll see what I mean.
If you still encounter problems, please read (Questions and Answers)
at the beginning of this document.
5. Conclusion
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
You can now move on to the FIRSTSTEPS document.
Here's the online version, but you have one on your harddisk too.
[11]http://muve.pages.de/FIRSTSTEPS
This document was written by [12]psyc://ve.symlynX.com/~lynX
and [13]psyc://ve.symlynX.com/~real.
--
http://muve.pages.de/INSTALL.html
last change by lynx on fly at 2005-09-28 20:58:36 MEST
References
1. http://muve.pages.de/FIRSTSTEPS
2. http://muve.pages.de/ldmud
3. irc://ve.symlynX.com/psyc
4. telnet://ve.symlynX.com/
5. http://ve.symlynX.com:33333/PSYC/
6. http://www.gnu.org/
7. http://www.sunfreeware.com/
8. http://lpc.pages.de/
9. http://muve.pages.de/dist/world/drivers/ldmud/patches/psycmuve
10. http://localhost:44444/net/http/configure
11. http://muve.pages.de/FIRSTSTEPS
12. irc://ve.symlynX.com/lynX,isNick
13. irc://ve.symlynX.com/real,isNick

54
LICENSE.txt Normal file
View File

@ -0,0 +1,54 @@
[ «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» ]
psyced, a scalable distributed multi-protocol chat and messaging server
solution based on the PSYC protocol for synchronous conferencing.
___
Copyright (C) since 1997 by:
Carlo von Loesch (psyc://ve.symlynX.com/~lynX).
Since 2002 copyright also in parts by:
Philipp Hancke (psyc://goodadvice.pages.de/~fippo)
Tobias Josefowitz (psyc://goodadvice.pages.de/~heldensaga)
Arne Gödeke (psyc://psyced.org/~el) and
Dominik Sander (psyc://psyced.org/~depairet).
___
This program is free software; you can redistribute it and/or modify
it under the terms of version 2 of the GNU General Public License as
published by the Free Software Foundation.
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 program is also available under different license from
Carlo von Loesch and symlynX. To this purpose all copyright
owners grant Carlo von Loesch and symlynX the right to use
and license this program in whatever suitable way.
Should you wish to contribute to this program, you can receive a
write access to the psyced software repository from symlynX. By checking
code in, you grant us permission to license your contribution under
both the GNU General Public License and under other licenses as
described above.
With the act of checking into the software repository, you guarantee
that you are either the author and copyright owner of the contribution
you are making, or that you have a license to use said contribution in
a way compatible with our terms of use. If you fail to do so, you
remain the sole responsible for your acting; no part of the
responsibility will be transferred to symlynX.
This means, for example, that you cannot contribute code elements
which stem from an other GPL project, as this would not comply with
the dual licensing requirement described above.
You can however keep this kind of modifications to yourself, or
publish your own GPL licensed fork of this software, or - in agreement
with us - add optional parts to this software clearly marked as not
adhering to the dual license described above.
[ «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» ]

112
README.txt Normal file
View File

@ -0,0 +1,112 @@
Since you unpacked this you probably want to install it.
You can go straight to the INSTALL.txt file for instructions.
If it is missing, try [1]http://muve.pages.de/INSTALL.html
PROTOCOL for SYNCHRONOUS CONFERENCING
___ __ _ _ __ _ _ _ _ _ _ ___
| \ (__ \ / / |\ /| | | | | |
|__/ \ V | | \/ | | | \ / |-
| (__/ | \__ | | |__| V |__
The MULTI USER VIRTUAL ENVIRONMENT driver is here!
=============================================
This is 'psycMUVE', the Multi User Virtual Environment for PSYC.
It is a server and gateway implementation of PSYC.
The latest version is available on [2]http://muve.pages.de/download
There is no download by FTP, since FTP has no advantage
over HTTP/1.1 (you can use HTTP REGET these days).
The project homepage is [3]http://muve.pages.de
The protocol homepage is [4]http://psyc.pages.de
The user manual resides at [5]http://help.pages.de
The Multi-User Virtual Environment for PSYC-Users isn't just a PSYC server;
it also simulates the functionality of PSYC clients allowing users of various
sorts of more or less dumb applications to enter the PSYCspace.
The professional edition of it has been in use as a Webchat for several years.
The HTML webchat, however, is not part of the freeware edition.
psycMUVE is implemented in LPC and uses a driver called LDMUD.
See INSTALL for details.
The files in the distribution directory are:
AGENDA.txt : future plans (not a TODO really)
BANNER.txt : advertisement or welcome message
COPYLEFT.txt : GNU GENERAL PUBLIC LICENSE
INSTALL.txt : installation hints and notes
LICENSE.txt : something you are supposed to read (copyright info)
README.txt
install.sh : an installation script (ksh/bash).
[6]makefile : some useful functions (optional).
bin/ : various scripts
but the only one you really need, "psycmuve",
will be created by 'install.sh'.
config/ : depot of configurations.
also contains some tcsh and powwow settings.
data/ : this is where MUVE stores your user and room data.
local/ : your local configuration of the server
is created by 'install.sh' but you can also make
it a symlink into a config/something directory
log/ : where the server logfiles end up.
may be a symlink into the /var partition.
place/ : here you can implement your own room objects in lpc.
some examples of public rooms are waiting for you there.
[7]run/ : the ldmud equivalent of a CGI directory. ldmud can spawn
a subprocess to do some jobs which are too hard to achieve
in LPC-world. we currently don't use this as ldmud provides
MD5 and SHA1 itself. in theory we could implement CGI for
the builtin webserver, but it is much better to code these
things in LPC. [8]world/net/jabber/component.c shows how sha1
.pl
is spawned when the driver does not provide SHA1.
utility/ : the applet code and other things that may be useful.
[9]world/ : this is the directory tree that is visible from
within the lpc interpreter and therefore contains
all the actual lpc program code.
data/ : symlink to data/
[10]default/ : the text database for multiple languages and formats
[11]drivers/ : glue code to interface LPC drivers to psycMUVE
local/ : symlink to local/
log/ : symlink to log/
[12]net/ : all of the psycMUVE code is in a "net" hierarchy
: so it can be merged with an existing MUD
obj/ : just in case you misconfigured your driver
place/ : symlink to place/
[13]static/ : contains static files for httpd export
: you can use them with the internal httpd
: or copy them to yours
Don't be irritated by the fact that traditional LPC drivers keep
their LPC files with a ".c" suffix and data files with a ".o" suffix.
More oddities are described in http://muve.pages.de/DEVELOP if you want
to find your way around the psycMUVE source code.
--
http://muve.pages.de/README.html
last change by lynx on fly at 2005-09-28 20:58:37 MEST
References
1. http://muve.pages.de/INSTALL.html
2. http://muve.pages.de/download
3. http://muve.pages.de/
4. http://psyc.pages.de/
5. http://help.pages.de/
6. http://muve.pages.de/dist/makefile
7. http://muve.pages.de/dist/run/
8. http://muve.pages.de/dist/world/net/jabber/component.c
9. http://muve.pages.de/dist/world/
10. http://muve.pages.de/dist/world/default/
11. http://muve.pages.de/dist/world/drivers/
12. http://muve.pages.de/dist/world/net/
13. http://muve.pages.de/dist/world/static/

50
bin/edata Normal file
View File

@ -0,0 +1,50 @@
#!/usr/bin/perl
#
# editor for .o files -lynX
#
# it merely splits long lines at the end of mappings
# so that vi-like editors aren't confronted with
# huge one-liners. after saving it recreates the
# original format after renaming the original file
# into itself with appended tilde.
#
#sub backupsuffix() { '~' }
($file = shift and $file =~ /\.o$/) or die <<X;
usage: $0 <lpmud-data-file.o>
X
$tmp = "/tmp/edata.$$";
open(I, $file) or die "$file: $!";
open(O, ">$tmp") or die "cannot create $tmp: $!";
$/ = undef;
while(<I>) {
s/(,]\),)/\1\n /gm;
print O;
}
close I;
close O;
$edit = $ENV{EDITOR} or 'vi';
$M = -M $tmp;
system("$edit $tmp");
exit if $M == -M $tmp;
die $! unless rename $file, "$file~";
print STDERR "Backup created in $file~\n";
open(I, $tmp) or die "$tmp: $!";
open(O, ">$file") or die "cannot create $file: $!";
$/ = undef;
while(<I>) {
s/\n //gm;
print O;
}
close I;
close O;

632
bin/psyconf Normal file
View File

@ -0,0 +1,632 @@
#!/usr/bin/perl
### -I/opt/psyced/utility
# the include path would help finding INI.pm, but what if you the user
# have decided to install psyced elsewhere?
#
# psyconf(8) - tool that generates psyc configuration
# files out of a common psyced.ini
#
# $Id: psyconf,v 1.75 2008/02/08 11:44:57 lynx Exp $
=head1 NAME
psyconf - a configuration tool for PSYCED
=head1 SYNOPSIS
Usage: psyconf [ <file> ]
The default configuration file used is /etc/psyced.ini
=cut
use File::Spec;
# this approach still doesn't work when installing on gentoo
# we need a seperate ebuild for INI.pm. until then we will use
# the stupid parser
#
#BEGIN { # BEGIN just in case somebody ever accesses INI::something by hand
# unless (%INI::) { # get INI, if it isn't in this file (somewhere above)
# my @dir;
# my $inilocation;
#
# @dir = File::Spec->splitdir($0);
# pop @dir;
# $inilocation = File::Spec->catfile(@dir, qw".. utility INI.pm");
#
# if (-f $inilocation) {
# require $inilocation;
# } else {
# require INI;
# }
# }
#}
# append something while testing
#my $test = "-NEW";
use Data::Dumper;
sub say {
print join('', @_); # if $test;
}
### MAIN ###
# if you are manually compiling an ldmud, rename it or change here.
my $driver = 'psyclpc';
use Getopt::Std;
&getopt;
print STDERR '$Id: psyconf,v 1.75 2008/02/08 11:44:57 lynx Exp $', "\n";
my $conf = shift || 'psyced.ini';
$conf = '/etc/psyc/psyced.ini' unless -r $conf;
# should we complain if two psyced.ini files exist?
# lymeca got confused at this point, expecting the systemwide
# psyced.ini to be used, but actually having a local copy
say "The PSYCED configuration tool. Looking at $conf\n\n";
# this is the super-duper fancy amazing INI handler
# #use INI; # ":verbose";
# my %c;
# tie(%c, INI, $conf, 5);
# and this is the stupider INI parser in a couple of lines
# cute, but we'd like to have the features of INI.pm one happy day
my %c, $f = "";
open C, $conf;
while(<C>) {
next if /^;/;
next if /^\s*$/;
$f = $1, next if /^\[(\w+)\]\s*$/;
# Room name 'ornia ' is not permitted.
# isn't this stripping trailing whitespace properly?
# should it read \S.+\S ? or at least .+\S ?
$c{"$f$1"} = $2, next if /^(\w+)\s*=\s*(.+)\s*$/;
die "cannot parse line $. in $conf:\n\t$_\n";
}
close C;
if ($opt_D) {
if ($c{_basic_list_script_init}) {
foreach (split /\s+/, $c{_basic_list_script_init}) {
say "Deinstallation! Removing $_\n";
unlink $_;
}
}
exit;
}
use POSIX;
my @uname = POSIX::uname();
# if POSIX.pm is unavailable, this also works:
# @uname = split ' ', `uname -s -r -n -m -v`;
#print Dumper(@uname);
my $_type_machine = $uname[$#uname];
$_ = $uname[2];
/^(\w+\.\w+)\b/ or /^(\w+)\b/;
my $_type_system = "\L$uname[0]\E";
my $_version_system = "$uname[0]/$1";
my $_type_architecture = lc "$_type_machine-$uname[0]";
say "Machine Type: $_type_machine. OS Type: $_type_system. ",
"Arch: $_type_architecture\n";
#Typical outputs:
# Machine Type: i686. OS Type: linux. Arch: i686-linux
# Machine Type: x86_64. OS Type: linux. Arch: x86_64-linux
# Machine Type: Power Macintosh. OS Type: darwin. Arch: power macintosh-darwin
my $base = $c{_basic_path_base};
die "_basic_path_base not defined in config" unless $base;
die "Base directory $base defined as _basic_path_base not available"
unless -x $base;
my $sandbox = "$base/world";
die "psyced library $sandbox does not exist" unless -x $sandbox;
my $arch = "$base/bin-$_type_architecture";
my $config = $c{_basic_path_configuration} || $base;
# this isn't taking $ARCH_DIR from install.sh into account
# but maybe it shouldn't anyway..
unless (-x $arch && -x "$arch/$driver") {
$arch = "$base/bin-$_type_system";
unless (-x $arch && -x "$arch/$driver") {
$arch = "$base/bin-linux";
if (-x $arch && -x "$arch/$driver") {
say "\nBug in $0: We didn't find $base/bin-linux in the appropriate way.\nThat's not nice. Continuing however.\n"
} elsif (not -x ($arch = "$base/bin") && -x "$arch/$driver") {
# bad place for psyclpc really..
# since it is usually of no commandline use
# but where else should psyclpc.ebuild
# install it? in /opt/psyclpc? for two files?
$arch = "/usr/sbin";
# the following is very unlikely to happen:
die <<X unless -x $arch && -x "$arch/$driver";
could not find any directory containing $driver.
X
}
}
}
my $user = $c{_basic_system_user} || 'daemon';
my ($login,$pass,$uid,$gid) = getpwnam($user)
or die "uid '$user' not defined on this system";
# this doesn't mean psyconf is intended to run as $user too!!
say "psyced will later be running as user $user ($uid:$gid)\n";
my $ho = $c{_basic_host_name} || $ENV{HOST} || 'psyc';
my $chatname = $c{_basic_nick_server} ||
$c{_basic_host_name} || 'psyced';
$chatname = 'psyced' if $chatname eq 'psyc';
# say "Generating control files in $c{_basic_path_base} ..\n\n";
my $t = "$base/local/ports.h$test";
say "Generating control file $t ..\n";
rename $t, "$t~";
open O, '>', $t or die "Cannot write to $t";
print O <<X;
// CAUTION! This file has been generated using $0.
// Don't edit unless you are no longer going to use the configuration tool.
// Edit $conf instead, then run $0 again.
/* the values in here may be the same as in services.h
* or they may be not. so always be aware which one's you
* are using to which purpose. -lynX
*/
#ifndef PORTS_H
#define PORTS_H
#define PSYC_PORT $c{_protocols_port_PSYC}
#define PSYCS_PORT $c{_protocols_port_PSYC_encrypted}
#define HTTP_PORT $c{_protocols_port_HTTP}
#define HTTPS_PORT $c{_protocols_port_HTTP_encrypted}
#define IRC_PORT $c{_protocols_port_IRC}
#define IRCS_PORT $c{_protocols_port_IRC_encrypted}
#define JABBER_PORT $c{_protocols_port_jabber_clients}
#define JABBERS_PORT $c{_protocols_port_jabber_clients_encrypted}
#define JABBER_S2S_PORT $c{_protocols_port_jabber_S2S}
#define TELNET_PORT $c{_protocols_port_telnet}
#define TELNETS_PORT $c{_protocols_port_telnet_encrypted}
#define APPLET_PORT $c{_protocols_port_applet}
#define POP3_PORT $c{_protocols_port_POP3}
#define POP3S_PORT $c{_protocols_port_POP3_encrypted}
#define SMTP_PORT $c{_protocols_port_SMTP}
#define SMTPS_PORT $c{_protocols_port_SMTP_encrypted}
#define NTTP_PORT $c{_protocols_port_NNTP}
#define NNTPS_PORT $c{_protocols_port_NNTP_encrypted}
// experimental PSYC 1.0 implementation
#define SPYC_PORT $c{_protocols_port_SPYC}
#endif
X
close O;
chmod 0644, $t;
my $ports="$c{_protocols_port_PSYC} $c{_protocols_port_jabber_S2S} $c{_protocols_port_applet} $c{_protocols_port_telnet} $c{_protocols_port_HTTP} $c{_protocols_port_IRC} $c{_protocols_port_jabber_clients} $c{_protocols_port_SMTP} $c{_protocols_port_NNTP} $c{_protocols_port_SPYC}";
$ports .= " $c{_protocols_port_PSYC_encrypted} $c{_protocols_port_telnet_encrypted} $c{_protocols_port_HTTP_encrypted} $c{_protocols_port_IRC_encrypted} $c{_protocols_port_jabber_clients_encrypted} $c{_protocols_port_SMTP_encrypted} $c{_protocols_port_NNTP_encrypted}" if $c{_protocols_use_encryption};
my @adm;
unless ($c{_administrators_list_nicks}) {
print STDERR <<X;
You have decided to run an unadministered psyced. That's a socially quite
interesting idea, but the software can't deal with that yet.
Continue nonetheless? (hit ctrl-c for mental sanity)
X
<STDIN>;
} else {
foreach (split /\s+/, $c{_administrators_list_nicks}) {
my $ni = lc($_);
push @adm, $ni;
$t = "$base/data/person/$ni.o$test";
next if -e $t;
say "Creating administrator in $t\n";
open O, '>', $t or die "Cannot write to $t";
my $pw = $c{_administrators_password_default};
unless ($pw) {
print STDERR "Please input a password for $_: ";
$pw = <STDIN>;
chomp $pw;
}
print O <<X;
#0:0
_v (["password":"$pw","name":"$_",])
X
close O;
chmod 0600, $t;
chown $uid, $gid, $t if $uid;
}
}
my $adm = join '", "', @adm;
$t = "$base/local/psyconf.h$test";
say "Generating control file $t ..\n";
rename $t, "$t~";
open O, '>', $t or die "Cannot write to $t";
print O <<X;
// CAUTION! This file has been generated using $0.
// Don't edit unless you are no longer going to use the configuration tool.
// Edit $conf instead, then run $0 again.
X
if ( $c{_optional_config_HTTP} ) {
print O <<X;
# define WEB_CONFIGURE
X
print STDERR <<X unless $c{_protocols_port_HTTP} or $c{_protocols_port_HTTP_encrypted};
Warning: _optional_config_HTTP activated without any HTTP port. You won't be
able to use the web configuration tool without webserver.
X
}
print STDERR <<X if $c{_optional_charset_system};
Warning: _optional_charset_system is obsolete. Please remove it.
X
# print O <<X if $c{_optional_charset_system};
## define SYSTEM_CHARSET "$c{_optional_charset_system}"
#
#X
print O <<X if $c{_optional_charset_console};
// optional
# define CONSOLE_CHARSET "$c{_optional_charset_console}"
X
# if ( $c{_basic_host_domain} ) {
# print O <<X;
## undef __DOMAIN_NAME__
## define __DOMAIN_NAME__ "$c{_basic_host_domain}"
## define SERVER_HOST "$ho." __DOMAIN_NAME__
#
#X
# } else {
# print O <<X;
## if __DOMAIN_NAME__ != "unknown"
## define SERVER_HOST "$ho." __DOMAIN_NAME__
## else
## if __HOST_IP_NUMBER__ == "127.0.0.1"
## define SERVER_HOST __HOST_NAME__
## else
## define SERVER_HOST "$ho"
## endif
## endif
#
#X
# }
print O <<X if $c{_basic_host_domain};
# define CHATDOMAIN "$c{_basic_host_domain}"
X
my $pl = lc($c{_basic_place_default}) || 'rendezvous';
my $la = lc($c{_basic_language_default}) || 'en';
print O <<X;
# define CHATHOST "$ho"
# define CHATNAME "$chatname"
# define DEFPLACE "$pl"
# define DEFLANG "$la"
// only required field, really
# define ADMINISTRATORS "$adm"
// architecture and operating system (used in PSYC headers etc.)
# define MACHTYPE "$_type_machine"
# define OSTYPE "$_version_system"
X
close O;
chmod 0640, $t;
chown $uid, $gid, $t if $uid;
# PSYCED LAUNCHER
$t = "$base/bin/psyced$test";
say "Generating control file $t ..\n";
rename $t, "$t~";
open O, '>', $t or die "Cannot write to $t";
my $db = $c{_optional_level_debug} || '0';
my $psyced = "$arch/$driver -DDEBUG=$db";
my $debugfile;
if ( $c{_optional_use_file_debug} ) {
$debugfile = "$sandbox/log/psyced.debug";
$psyced .= " --debug-file ". $debugfile;
# since psyclpc 4.0.4 backtraces are also in the regular console log.. yippie!
# say "ATTENTION: $debugfile will contain runtime error backtraces.\n";
}
# else: ldmud tries to create $hostname.debug.log in $sandbox
# psyclpc is good boy instead. so we can keep this optional.
my $hc = 0;
## ldmud bug number one: you have to provide hostname AFTER hostaddr
if ($c{_basic_host_IP}) {
$psyced .= " --hostaddr $c{_basic_host_IP}";
$hc = 1; # problem?
}
if ($c{_basic_host_domain} and $c{_basic_host_name}) {
my $fqdn = "$c{_basic_host_name}.$c{_basic_host_domain}";
$psyced .= " --hostname $fqdn";
$hc = 0; # no problem
}
## ldmud bug number two
#WARNING: 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.
#In the meantime please re-edit the psyconf.ini to provide all variables.
print STDERR <<X if $hc == 1;
WARNING: _basic_host_IP, _basic_host_name and _basic_host_domain need to be
provided together as the driver won't figure out the proper name for the IP
number or vice versa. Please re-edit the psyconf.ini to provide all variables.
X
if ($c{_protocols_use_encryption}) {
$psyced .= " --tls-key $config/$c{_basic_path_PEM_key}"
if $c{_basic_path_PEM_key};
$psyced .= " --tls-cert $config/$c{_basic_path_PEM_certificate}"
if $c{_basic_path_PEM_certificate};
$psyced .= " --tls-trustdirectory $config/$c{_basic_path_trust}"
if $c{_basic_path_trust};
# ldmud doesn't support this yet
# $psyced .= " --tlscrldirectory $config/$c{_basic_path_revocation}"
# if $c{_basic_path_revocation};
}
# you can divert UDP if you know what you are doing.
my $portUDP = $c{_protocols_port_UDP} || $c{_protocols_port_PSYC};
my $umask = $c{_optional_umask} || '007';
print O <<X;
#!/bin/sh
#
# CAUTION! This file has been generated using $0.
# Don't edit unless you are no longer going to use the configuration tool.
# Edit $conf instead, then run $0 again.
X
# if the installation isn't intentionally using root rights
# make sure the admin won't run psyced or do "psyced -u" as root
# as it will most probably mess up file permissions and break psyced
print O <<X if $user ne 'root';
userid=`id | sed "s/).*//" | sed "s/.*(//"`
# We could even test for != "x$user" here. Should we?
if test "x\$userid" = "xroot"
then
echo "${hi}ERROR: ${lo}You can't run \$0 with root privileges unintentionally.\nUse 'su $user' or edit psyced.ini."
exit 2
fi
X
print O <<X;
umask $umask
# with this chdir, old ldmud should be able to find its keys anyhow
cd $base
# available flags: -u and -d
# TODO: i'd like for -b to make a backup archive of the psyced tree before
# updating, and -r to revert to the last backupped version. whatchathink?
# the following if-block handles the -u option for updating your
# installation by CVS. it ensures your installation is still basically
# compatible with the one in the CVS or complains.
#
if test "\$1" = "-u"
then
# it's not a security issue really,
# but shouldn't these CVS control
# files by outside the sandbox? -lynX
if ! test -e $sandbox/status-0-beta-OK
then
echo ""
echo "${hi}ATTENTION:${lo}"
echo "The version of psyced you are using is outdated. You cannot"
echo "get new updates because of incompatibility."
echo ""
echo "More information following.."
echo ""
cat $sandbox/status-0-DEPRECATED
echo ""
echo "The file you just saw is: ${hi}${lib}/status-0-DEPRECATED${lo}."
exit 1
else
echo ""
echo "${hi}ATTENTION: ${lo}Please give an empty password to log in (-> press enter)"
(cd $sandbox/.. && cvs login && cvs -q update -dP && cvs logout)
fi
if ! test -e $sandbox/status-0-beta-OK
then
echo ""
echo "${hi}ATTENTION:${lo}"
echo "The version of psyced you are using is outdated. You
cannot"
echo "get new updates because of incompatibility."
echo ""
echo "More information following.."
echo ""
cat $sandbox/status-0-DEPRECATED
echo ""
echo "The file you just saw is: ${hi}${lib}/status-0-DEPRECATED${lo}."
exit 1
else
echo "It may be a good idea to run ${hi}$0${lo} again before you continue."
fi
exit
fi
# the -d option let's you inspect all the changes done in the CVS
# before you go for an update using -u
if test "\$1" = "-d"
then
if ! test -e $sandbox/status-0-beta-OK
then
echo ""
echo "${hi}ATTENTION:${lo}"
echo "The version of psyced you are using is outdated. You cannot"
echo "get new updates because of incompatibility."
echo ""
echo "More information following.."
echo ""
cat $sandbox/status-0-DEPRECATED
echo ""
echo "The file you just saw is: ${hi}${lib}/status-0-DEPRECATED${lo}."
exit 1
else
(cd $base && cvs -q diff -ur HEAD|\$PAGER)
fi
exit
fi
# if your ldmud is too old, it may not understand --pidfile and --tls-*
commandline="$psyced -s 0 -s v0 --swap-file $base/psyced.swap --erq $arch/erq --pidfile $sandbox/data/$driver.pid -m $sandbox -u $portUDP $ports"
# keep the pid of this wrapper process, too
echo \$\$ >data/psyced.pid
# neat feature of gnu mv
VERSION_CONTROL=numbered;
export VERSION_CONTROL
# rm'ing this allows the administrator commands in psyced to stop the loop
touch $sandbox/data/.autorestart
while [ -r $sandbox/data/.autorestart ]
do
X
# we can presume gnu mv on linux
#my $domv = $_type_system eq 'linux' ? 'mv -b' : 'mv -f';
# yes, but all these backups are overkill
# who needs these debug logs archived for all eternity anyway?
my $domv = 'mv -f';
# maybe we should develop a strategy for all the OTHER logfiles.....
# but luckily psyclpc has some support for that itself
print O <<X if $debugfile;
touch $debugfile
$domv $debugfile $debugfile-old
X
if ($c{_optional_console_debug}) {
print O "\t\$commandline\n";
} else {
say "The file $sandbox/log/psyced.out will contain the runtime output.\n";
print O <<X;
touch $sandbox/log/psyced.out $sandbox/log/psyced.err
$domv $sandbox/log/psyced.err $sandbox/log/psyced.err-old
# the gnu date manual doesn't mention if +FORMAT is a posix
# standard or a gnu extension. is this call going to work
# in most current environments? it does work on bsd, *phew*
#$domv $sandbox/log/psyced.out $sandbox/log/`date +%Y-%m-%d`.out
# ah whatever.. let's not make it too complicated..
# who needs these debug logs archived for all eternity anyway?
$domv $sandbox/log/psyced.out $sandbox/log/psyced.out-old
echo ---------------------------------------- >>$sandbox/log/psyced.out
date >>$sandbox/log/psyced.out
echo ---------------------------------------- >>$sandbox/log/psyced.out
\$commandline >>$sandbox/log/psyced.out 2>>$sandbox/log/psyced.err
X
}
print O <<X;
sleep 3
done
X
close O;
chmod 0744, $t;
chown $uid, $gid, $t if $uid;
# PSYCED INIT.D SCRIPT
$t = "$base/etc";
mkdir($t);
$t .= "/init.d";
mkdir($t);
$t .= "/psyced$test";
say "Generating control file $t ..\n";
rename $t, "$t~";
# HerraBRE: the init script uses "su -s" which os x doesn't understand.
#
# alright, so now i could let it do something else in case of OS X
# but I need to know (1) how to recognize OSX (2) what to put here!
$su = 'su -s';
# or die.. mention at this point that we should
# probably be running as root?
open O, '>', $t or die "Cannot write to $t";
print O <<X;
#!/bin/sh
#
# CAUTION! This file has been generated using $0.
# Don't edit unless you are no longer going to use the configuration tool.
# Edit $conf instead, then run $0 again.
test -x $base/bin/psyced || exit 0
case "\$1" in
start)
echo -n "Starting psyced in background ... "
# in nei's environment a zsh would be started to execute the
# psyced script. so he suggests to add a -s parameter. in our
# environment both strategies work.
$su /bin/sh $user $base/bin/psyced &
# some distributions no longer have /bin/sh in /etc/shells.
# use a better distribution if they don't! :)
# this script has to remain posix compatible. bash is no option here.
echo "OK"
;;
stop)
rm $sandbox/data/.autorestart
if test -r $sandbox/data/$driver.pid
then
echo -n "Instructing psyced to gently shut down ... "
kill -1 \`cat $sandbox/data/$driver.pid\`
# this should be enough ideally
# but we can remove the pid file so a
# second stop call will kill bill
rm $sandbox/data/$driver.pid && echo "OK"
else
echo -n "Killing psyced brutally ... "
kill -1 \`cat $sandbox/data/$driver.pid\` >/dev/null 2>&1
kill -3 \`cat $sandbox/data/psyced.pid\` && echo "OK"
fi
;;
kill)
echo -n "Killing psyced brutally ... "
kill -3 \`cat $sandbox/data/psyced.pid\` && echo "OK"
;;
restart)
echo -n "Instructing psyced to restart ... "
kill -1 \`cat $sandbox/data/$driver.pid\` && echo "OK"
;;
status)
;;
*)
echo "Usage: \$0 {start|stop|restart|kill}"
exit 1
;;
esac
X
close O;
chmod 0744, $t;
if ($c{_basic_list_script_init}) {
foreach (split /\s+/, $c{_basic_list_script_init}) {
say "... copying to $_\n";
`cp "$t" "$_"`;
}
}
chdir "$sandbox/net/place" or die "Where is my net/place? $!";
require "archetype.pl";

64
bin/psyked Normal file
View File

@ -0,0 +1,64 @@
#!/usr/bin/pike
// This is an experimental prototype program using parts of psyced from pike.
//
// But careful, you need to apply the pikelpc.patch for pike to even grok
// the LPC syntax.
int main(int argc, array(string) args) {
Stdio.Stat s;
string f;
string home = "/opt/psyced";
array(string) jacks = ({
"/local/psyconf.h", "/local/config.h", "/pike",
"/world/net/psyc",
});
//write("%O: %O\n", argc, args);
//GTK.setup_gtk();
//GTK.Alert("Hi!")->signal_connect("destroy", exit, 0);
if (argc > 1) home = args[1];
foreach (jacks;; f) {
if (! (s = file_stat(f = home + f))) {
write("%s does not exist.\n", f);
return 1;
}
}
add_module_path(home +"/pike");
//add_include_path(home +"/world"); // doesn't work?
add_include_path(home +"/world/net/include");
add_include_path(home +"/world/drivers/pike/include");
// wicked emulation of the LPC debug_message() efun
add_constant("debug_write", _static_modules.files()->_stderr->write);
// the only way to include pathes at runtime without ugly wrapper
// scripts is to delay the actual program compilation with a compile
// statement. what a hack to even get started using pike!! :D
//
program psyced = compile("void create() { net.psyced(4444); }");
//
// run, baby
psyced();
// and don't look back
return -1;
}
/* nifty stuff from http://pike.oav.net/7.0/tutorial_16.html#16
add_constant("sqr",lambda(mixed x) { return x * x; });
void add_program_path(string path);
mapping (string:mixed) all_constant();
array array_sscanf(string data, string format);
void atexit(function callback);
array(array) backtrace();
int errno();
int getpid();
int glob(string glob, string str); or
array(string) glob(string glob, array(string) arr);
int query_num_arg(); // for varargs
mapping replace(mapping a, mixed from, mixed to);
...search(mapping haystack, mixed needle, [ mixed start ]); // member()
*/ // vim:syntax=pike

14
config/README.1st Normal file
View File

@ -0,0 +1,14 @@
=== WARNING! ===
This is NOT your configuration directory.
This is a place that provides some example configurations, some
extras, and some defaults which are being used by the installation
process.
Do not edit in here.
Find out where the corresponding files are in your systems, or maybe
copy files out of here to where you need them.

29
config/cvs.tcsh Normal file
View File

@ -0,0 +1,29 @@
# you can also create a ~/.cvsrc where you keep your favorite
# cvs flags. we recommend to put 'cvs -z9' in there
#alias cup cvs -q update -d # was, until de/irc was deleted
alias cup cvs -q update -dP
alias ci cvs ci
alias ci+ cvs ci -m +
alias co cvs co
# recursive cvsrm is a shell script
#alias crm 'rm -rf \!*;cvs rm \!*'
alias cmd 'mkdir \!*;cvs add \!*;cd \!*'
alias cmf '$EDITOR \!*;cvs add \!*'
alias cvsaddr 'cvs add `find . -name "*CVS*" -prune -o -print`'
# how to add a binary file.. cause i never remember!!
alias cvsaddbin 'cvs add -kb'
alias canno 'cvs annotate \!*|vim -R -'
alias cdif 'cvs diff -bur HEAD \!* |& egrep -v " (Diffing |no longer exists)"|vim -R "+set syntax=diff" -'
alias Ci '(cd $PSYCEDHOME;ci)'
alias Cup '(cd $PSYCEDHOME;cup)'
alias Cdif '(cd $PSYCEDHOME;cdif)'
alias ctoc '(cd $CVSHOME;cvs diff -bur HEAD CHANGESTODO|vim -R "+set syntax=diff" -)'
alias ctodo '(cd $PSYCEDHOME;cvs update CHANGESTODO;x CHANGESTODO;cvs ci -m + CHANGESTODO)'

35
config/default/README Normal file
View File

@ -0,0 +1,35 @@
banner.txt is the file that is shown to
telnet users at login
config.c is currently not being used, really.
config.h is of no interest.
hosts.h lets you specify ip ranges that are
particularely trustworthy or untrustworthy.
init.ls contains the list of classes that
will be compiled at boot-time. it is mostly
useful for debugging, as in a healthy
system any required class can be compiled
at the moment it is used for the first time.
so for production use this is kept to the
bare minimum. only the parts of psyced you
are actually using will be loaded.
local.h hosts your personal tunings to the
psyced system.
path.h lets you rearrange the directories
where the code for the protocol implementations
reside. you don't need to do that normally.
ports.h is generated by the installation
procedure and contains the port numbers you
chose for the services you want to use.
psyconf.h is also generated that way by the
psyconf utility. it contains the settings
from psyced.ini in a form pleasant for LPC.

View File

@ -0,0 +1,8 @@
[connected]
PROTOCOL for SYNCHRONOUS CONFERENCING http://www.psyced.org/
--------------- ___ __ _ _ __ ___ __ ------------------
| \ (__ \ / / | | \
|__/ \ V | |- | )
>>> | (__/ | \__ |__ |_/ <<<

66
config/default/config.c Normal file
View File

@ -0,0 +1,66 @@
// $Id: config.c,v 1.9 2006/11/07 07:58:36 lynx Exp $ vim:syntax=lpc
#include <net.h>
/* a data file or an include can be read by any file in the system but
* we want this information to be readable by the gateway code only
* that's why it has to be lpc code
*/
#ifdef GATEWAY_PATH
/* if you are positive that you want to run your own gateways to
* legacy messaging systems, please insert your gateway credentials
* into the fields below and activate the code by turning #if 0 to #if 1
*
* update: these bot-style gateways are not functional. don't switch
* them to 1 as either the python scripts or the jabber code isn't
* up to date with them.
*/
# define USE_ICQ_GATEWAY 0 // don't change
# define USE_AIM_GATEWAY 0 // don't change
qConfig() {
string p = file_name(previous_object());
# ifdef __COMPAT_MODE__
p = "/"+p;
# endif
P3(("\n%O: config requested by %s\n", ME, p))
# if USE_ICQ_GATEWAY
if (abbrev(GATEWAY_PATH "icq", p)) return
(["host" : "icq.localhost",
"port" : 5234,
"scheme" : "icq",
"name" : "icqlinker",
"secret" : "myicqsecret",
"nickname" : "your uin here",
"password" : "and your password please" ]);
# endif
# if USE_AIM_GATEWAY
if (abbrev(GATEWAY_PATH "aim2", p)) return
(["host" : "aim.localhost",
"port" : 5233,
"scheme" : "aim",
"name" : "aimlinker",
"secret" : "myaimsecret",
"nickname" : "screen name",
"password" : "and your password please" ]);
# endif
}
load() {
# if USE_ICQ_GATEWAY
D(" " GATEWAY_PATH "icq");
load_object(GATEWAY_PATH "icq");
# endif
# if USE_AIM_GATEWAY
D(" " GATEWAY_PATH "aim2");
load_object(GATEWAY_PATH "aim2");
# endif
# ifdef RELAY_OBJECT
D(" " RELAY_OBJECT "\n");
call_out(load_object, 0, RELAY_OBJECT);
# endif
}
#endif

23
config/default/config.h Normal file
View File

@ -0,0 +1,23 @@
// $Id: config.h,v 1.1 2007/04/26 13:34:02 lynx Exp $ // vim:syntax=lpc
//
// This file is not intended to be modified. Make your local changes
// in psyced.ini, and if that wasn't good enough, use local.h.
// If you are integrating psyced with other LPC applications, feel
// free to modify path.h. If you aren't, better leave it as it is.
#ifndef CONFIG_H
# define CONFIG_H
// load local modifications by the admin
# include "local.h"
// load port configuration as generated by psyconf
# include "ports.h"
// load layout of psyced software modules
# include "path.h"
// load psyced.ini settings converted by psyconf
# include "psyconf.h"
#endif

7
config/default/hosts.h Normal file
View File

@ -0,0 +1,7 @@
// Examples of specially enabled or disabled hosts.
//
//
// #define ENABLED_HOSTS "192.168.0.", "10."
//
// #define DISABLED_HOSTS "207.46.197.", "207.46.19."
//

3
config/default/init.ls Normal file
View File

@ -0,0 +1,3 @@
net/user
net/place/basic
local/config

5
config/default/local.h Normal file
View File

@ -0,0 +1,5 @@
// This is local.h for advanced tunings to the psyced runtime and
// LPC compilation process. The format looks just like a regular
// header file for the C language. Settings you can specify
// here are documented at http://about.psyc.eu/psyced#Tuning

50
config/default/path.h Normal file
View File

@ -0,0 +1,50 @@
#ifndef _INCLUDE_PATH_H
#define _INCLUDE_PATH_H
#define NET_PATH "/net/"
#define PLACE_PATH "/place/"
#define SERVICE_PATH "/service/"
#define DATA_PATH "/data/"
#define CONFIG_PATH "/local/"
#define DAEMON_PATH NET_PATH "d/"
#define GATEWAY_PATH NET_PATH "gateway/"
// protocol for synchronous conferencing
#define PSYC_PATH "/net/psyc/"
// experimental PSYC 1.0 interface
#define SPYC_PATH "/net/spyc/"
// irc server emulation
#define IRC_PATH "/net/irc/"
// jabber server emulation
#define JABBER_PATH "/net/jabber/"
// telnet access
#define TELNET_PATH "/net/tn/"
// java applet server, uses a very simple protocol
#define APPLET_PATH "/net/applet/"
// accept messages and simple mails via smtp
#define SMTP_PATH "/net/smtp/"
// experimental: access message log via pop3
#define POP3_PATH "/net/pop/"
// experimental: serve as a sip "proxy"
#define SIP_PATH "/net/sip/"
// allow access to subscribed threaded discussion groups via nntp
#define NNTP_PATH "/net/nntp/"
// accept messages and allow lastlog access via wap
#define WAP_PATH "/net/wap/"
// simple http server
#ifndef HTTP_PATH
# define HTTP_PATH "/net/http/"
#endif
#endif

33
config/default/ports.h Normal file
View File

@ -0,0 +1,33 @@
/* this file shall automatically be generated by psyconf.
*
* the values in here may be the same as in services.h
* or they may not. so always be conscious which ones you
* are using to which purpose. -lynX
*/
#echo This is just the demo ports.h. I shouldn't get loaded.
#echo If I do, then you didn't run psyconf successfully!!
#define PSYC_PORT 4404
#define HTTP_PORT 33333
#define HTTPS_PORT 34443
#define IRC_PORT 6667
#define IRCS_PORT 9999
#define JABBER_PORT 5222
#define JABBERS_PORT 5223
#define JABBER_S2S_PORT 5269
#define TELNET_PORT 2323
#define TELNETS_PORT
#define APPLET_PORT 2008
#define SMTP_PORT
#define SMTPS_PORT
#define NTTP_PORT
#define NNTPS_PORT

36
config/gentoo/INSTALL Normal file
View File

@ -0,0 +1,36 @@
================ AUTOMATED PORTAGE INSTALLATION =============================
The Makefile in this directory will create a portage overlay for psyclpc and
psyced if necessary, than generate ebuild digests and get you ready for
emerge. All you need to do is type:
make
If you tried this previously and ran into trouble, you may have to clean out
the 'psyced' and 'psyclpc' subdirectories from your portage overlay before
doing make, so it starts anew. You can do:
make new
================ SHUBBLETROUTING ============================================
In all above cases you should be done with installation. If anything goes wrong
get in touch with us on psyc://psyced.org/@welcome so we can fix the problem
not only for you, but for everyone who might run into the same problem.
If you're in doubt that the generator files aren't the newest, you can update
them by issueing:
make up
================ MANUAL INSTALLATION ========================================
We have stopped providing regular ebuild files for manual installation
as nobody is maintaining them. Feel free to step in.
================ WHY STILL LDMUD? ===========================================
We are just leaving it in as there are no newer releases of ldmud and so
this ebuild is still up to date for anyone who needs an ldmud ebuild.
We may however simplify things later and therefore remove it.

92
config/gentoo/Makefile Normal file
View File

@ -0,0 +1,92 @@
# $Id: Makefile,v 1.37 2007/08/14 11:28:00 lynx Exp $
p=/usr/local/portage
e=/etc/make.conf
G=lynx -source
# We currently operate on /usr/local/portage but we should add more
# PSYC packages and run our own PSYC overlay...
install: $p $p/dev-lang/psyclpc $p/net-im/psyced
@echo -- We are done with portage installation. You can now emerge
@echo -- from here or postpone to a better moment in life.
emerge -av psyced
@echo -- Done emerging. Contratulations on your new psyced! --
uninstall: new
new:
# It complains for missing packages, but does no harm.
-emerge --unmerge psyced psyclpc ldmud
# This one complains, too. Should we make it shut up?
# We can make it shut up next time when we do our own PSYC overlay.
-rm -r $p/net-im/psyced $p/dev-lang/psyclpc $p/games-mud/ldmud
ldmud: $p $p/games-mud/ldmud
@echo -- Warning: You are installing LDMud which is no longer the
@echo -- the best choice as a psyced driver!
emerge -av ldmud
### NO SERVICEABLE PARTS BELOW ###
$p:
@echo -- Apparently you have not installed custom ebuilds yet.
mkdir $@
@echo -- A $@ directory has therefore been generated for you.
echo "" >>$e
echo "# Added by psyced's config/gentoo/Makefile" >>$e
# Does it replace $p correctly in $e? Yes it does. Good.
echo "PORTDIR_OVERLAY=$p" >>$e
@echo -- PORTDIR_OVERLAY has been appended to $e to activate $@.
$p/dev-lang/psyclpc: psyclpc.ebuild psyclpc/Makefile Makefile
(cd psyclpc;make ebuild)
-mkdir $p/dev-lang
rm -rf $@
cp -rp psyclpc $@
-(cd $@;make Manifest)
$p/games-mud/ldmud: ldmud.ebuild ldmud/Makefile Makefile
(cd ldmud;make ebuild)
-mkdir $p/games-mud
rm -rf $@
cp -rp ldmud $@
-(cd $@;make Manifest)
$p/net-im/psyced: psyced.ebuild psyced/Makefile Makefile
(cd psyced;make ebuild)
-mkdir $p/net-im
rm -rf $@
cp -rp psyced $@
-(cd $@;make Manifest)
# the lower part of the Makefile serves the purpose of
# managing this package itself, not to install something.
sane: new clean
clean:
(cd psyced;make $@)
(cd psyclpc;make $@)
# Leave it alone or we won't be able to recreate the erq directory ;)
# (cd ldmud;make $@)
up:
-rm ldmud/ldmud-*.ebuild psyced/psyced-*.ebuild psyclpc/psyclpc-*.ebuild
-mkdir psyced/files
# If 'cvs update' updates this Makefile itself, it may be necessary
# to run 'make up' twice as the update requirements may have changed.
cvs update
$G http://www.psyced.org/dist/config/psyced.ini >psyced/files/psyced.ini
@(cd psyced;make ebuild)
@(cd psyclpc;make ebuild)
# We could extend the procedure to actually run the ebuild at building time
# so that we get to have the digests in there.. TODO
# Now you may have to unmerge and delete psyclpc and psyced from your
# portage overlay to have them generated anew.
# Use 'make new' to do that.
oldup:
@(cd ldmud;make ebuild)
$G http://www.psyced.org/dist/config/psyced.settings >ldmud/files/psyced.settings

105
config/gentoo/ldmud.ebuild Normal file
View File

@ -0,0 +1,105 @@
# Copyright 1999-2006 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /CVS/muveCVS/psycmuve/config/gentoo/ldmud.ebuild,v 1.17 2007/04/06 13:35:03 lynx Exp $
#
# In a philosophical way, LDMUD is a game engine, but from an administrative
# aspect it is a major project which doesn't belong into /usr/games. Especially
# not when it is actually serving as a programming language for intense
# multi-user network applications such as psyced. This is why we intentionally
# do not use any "games" macros here. Please keep it that way. -lynX 2006
#
# Suggestions? tell psyc://psyced.org/~lynX
#
# WARNING/REMINDER to myself: When checking in a new version of this file
# into CVS I have to run 'make up' in the gentoo download tar, as it also
# relinks all the ldmud/ldmud-VERSION.ebuild files. 'cvs update' alone
# wouldn't do that.
inherit toolchain-funcs eutils
DESCRIPTION="LPMUD Driver for Multi-User Domains and LPC language implementation"
HOMEPAGE="http://www.bearnip.com/lars/proj/ldmud.html"
# using the filename of the ebuild here!
# so better give it numbers which are actually
# available on http://www.bearnip.com/ftp/mud/
SRC_URI="http://www.bearnip.com/ftp/mud/${P}.tar.gz"
LICENSE="GPL-2"
SLOT="0"
# haven't checked for real..
KEYWORDS="x86 ~ppc ~amd64"
IUSE="debug ssl static zlib ldap ipv6 mysql postgres berkdb"
RDEPEND="zlib? ( sys-libs/zlib )
ssl? ( dev-libs/openssl )
ldap? ( net-nds/openldap )
berkdb? ( sys-libs/db )
mysql? ( dev-db/mysql )
postgres? ( dev-db/postgresql )"
DEPEND="${RDEPEND}
>=sys-devel/flex-2.5.4a-r5
>=sys-devel/bison-1.875
>=sys-devel/gettext-0.12.1"
#MYS="/var/tmp/portage/${P}/work/${P}/src"
MYS="${S}/src"
src_unpack() {
unpack ${A}
# cd "${S}"
cd "${MYS}"
# without "" or it won't ungrok the *.* -- thx fish
cp ${FILESDIR}/erq/*.* util/erq || die "improved erq not found in ${FILESDIR}"
cp "${FILESDIR}/psyced.settings" settings/psyced-gentoo || die "psyced.settings not found in ${FILESDIR}"
chmod +x settings/psyced-gentoo
}
src_compile() {
# emake \
# CC="$(tc-getCC)" \
# CFLAGS="${CFLAGS}" ${PN} \
# || die "emake failed"
cd "${MYS}"
# use berkdb >&/dev/null && myopts="${myopts} --enable-db"
# use mysql >&/dev/null && myopts="${myopts} --enable-mysql" || myopts="${myopts} --disable-mysql"
# use postgres >&/dev/null && myopts="${myopts} --enable-pgsql"
# use ldap >&/dev/null && myopts="${myopts} --enable-ldap"
# use ipv6 >&/dev/null && myopts="${myopts} --enable-ipv6"
use zlib && {
einfo "Compiling ${P} with zlib (MCCP) support."
myopts="${myopts} --enable-use-mccp"
}
use ssl && {
einfo "Compiling ${P} with SSL support."
myopts="${myopts} --enable-use-tls=yes"
}
use mysql && {
einfo "Compiling ${P} with mySQL support."
myopts="${myopts} --enable-use-mysql"
}
use postgres && {
einfo "Compiling ${P} with PostgreSQL support."
myopts="${myopts} --enable-use-pgsql"
}
use debug && {
append-flags -O -ggdb -DDEBUG
RESTRICT="${RESTRICT} nostrip"
myopts="${myopts} --enable-debug"
}
# runs configure
echo ${myopts}
settings/psyced-gentoo ${myopts}
make all && (cd "util/" && make subs) || die "make failed"
}
src_install () {
cd "${MYS}"
dosbin ${PN} && (cd "util/erq/" && dosbin "erq") || die "dosbin failed"
cd "${MYS}/.."
dodoc README HISTORY
# do something about the files in the doc directory?
# everyone looks stuff up on google anyway
# but maybe we should install etc/lpc.vim?
}

View File

@ -0,0 +1,13 @@
# ChangeLog for games-mud/ldmud
# $Header: /CVS/muveCVS/psycmuve/config/gentoo/ldmud/ChangeLog,v 1.3 2006/01/17 11:37:31 lynx Exp $
*ldmud-3.3.687 (18 Nov 2005)
18 Nov 2005; Carlo von lynX <lynX@are.you.already.psyced.org> +ldmud-3.3.687.ebuild:
initial build for depending 'psyced' project
*ldmud-3.3.712 (30 Nov 2005)
18 Nov 2005; el <el@goodadvice.pages.de> +ldmud-3.3.712.ebuild:
improved build: allows simple rename of .ebuild files and makes erq

View File

@ -0,0 +1,51 @@
# $Id: Makefile,v 1.16 2007/04/08 08:37:08 lynx Exp $
#
# This Makefile serves the purpose to produce the files ebuild needs to be
# happy. So it is an ebuildbuilder. Targets are: ebuild, Manifest and clean.
#
# 'make' needs to be called in gentoo/config to generate the ebuilds and files
# directory, then ../Makefile will transfer this to portage where 'make' will
# call ebuild to create digests and the Manifest. After that you are ready to
# emerge. From nothing. fischerspooner rocks. -lynX
P=ldmud
V=3.3.714
# this part can be executed once the ebuild is in portage
it: Manifest
# # testing it
emerge -av $P
Manifest: Makefile ChangeLog files/psyced.settings files/erq
# # generate manifest
ebuild $P-$V.ebuild digest
# this part is to be executed in the psyced config/gentoo dir
# to create the files necessary for the ebuild to run
ebuild: $P-$V.ebuild files/psyced.settings files/erq
$P-$V.ebuild:
# # let's keep it this simple, please
-ln ../$P.ebuild $P-$V.ebuild
# no dependency on ../../psyced.settings here or it won't run in portage
files/psyced.settings: files
# # we keep it elsewhere
-cp ../../psyced.settings $@
files/erq:
-mkdir $@
-cp -p ../../../utility/erq/*.* $@
files:
-mkdir files
# # we don't want to have each of those in cvs, so this is a place too
# echo "MD5 419eb1c21747fe2cd6de8089b47271ff ldmud-3.3.687.tar.bz2 2107415" >files/digest-ldmud-3.3.687
# echo "MD5 ab0027411928bef96aa41bf316cde954 ldmud-3.3.712.tar.gz 26515635" >files/digest-ldmud-3.3.712
clean:
-rm $P-$V.ebuild
-rm -r files

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<herd>games-mud</herd>
<maintainer>
<email>lynX@are.you.already.psyced.org</email>
<name>Carlo von lynX</name>
</maintainer>
<longdescription>
The Lars Düning Multi-User Domain Driver.
Official derivate of Lars Pensjø MUD (LPMUD) and Amylaar LPMUD.
</longdescription>
</pkgmetadata>

149
config/gentoo/psyced.ebuild Normal file
View File

@ -0,0 +1,149 @@
# $Header: /CVS/muveCVS/psycmuve/config/gentoo/psyced.ebuild,v 1.31 2007/09/24 22:16:19 lynx Exp $
# Copyright 1999-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
#
# Suggestions? tell psyc://psyced.org/~lynX
inherit eutils
HOMEPAGE="http://www.psyced.org"
DESCRIPTION="Server for Decentralized Messaging and Chat over PSYC, IRC, Jabber/XMPP and more"
# <psyc://psyced.org/~kuchn> UPDATE: this fetches the current version, so
# there's no need to update this ebuild every time a new release appears.
#wget -qo /tmp/psyceddownload.html http://www.psyced.org/download.html
#LAST="`grep 'id="current"' /tmp/psyceddownload.html | sed 's/.*id="current".*>\([^<]\+\).*/\1/'`"
#rm /tmp/psyceddownload.html
#CURRENT="${LAST/%.tar.gz/}"
#SRC_URI="${HOMEPAGE}/files/${LAST}"
# RE-UPDATE. this plan is cool, but i can't make it work. let's do the updates
# via the Makefile in config/gentoo.
SRC_URI="http://www.${PN}.org/files/${P}.tar.bz2"
#SRC_URI="http://www.psyced.org/files/psycmuve.99-gamma.tar.gz"
SLOT="1"
LICENSE="GPL-2"
KEYWORDS="x86 ~ppc ~sparc ~amd64"
IUSE="debug ssl"
# was: DEPEND="games-mud/ldmud"
DEPEND="dev-lang/psyclpc"
RDEPEND="${DEPEND}
dev-lang/perl"
PROVIDE="virtual/jabber-server virtual/irc-server virtual/psyc-server"
#MYS="${WORKDIR}/${CURRENT}/"
MYS="${WORKDIR}/${P}/"
pkg_setup() {
enewgroup psyc
# the only way to start the script thru su is by having a real shell here.
# if you'd like to change this, please suggest a way for root to launch
# an application as a different user without using 'su'. thx. -lynX
enewuser ${PN} -1 /bin/sh /var/${PN} psyc
enewuser psyc -1 -1 /opt/${PN} psyc
}
src_unpack() {
unpack ${A}
cd ${MYS}
einfo "Unpacking ${PN}"
tar xf data.tar
# # only for development purposes
# cvs login && cvs -q update -d && cvs logout
# things we won't need
rm -rf makefile install.sh local data log erq run INSTALL.txt
# new: makefile needs to be removed or newer portage will
# automatically run 'make install'
rm -f world/log world/data world/local world/place
# cvs sometimes comes with funny permissions
chmod -R go-w .
}
src_install() {
cd ${MYS}
dodir /opt/${PN}
einfo "The ${PN} universe and sandbox is kept in /opt/${PN}"
# not sure if what we want we would in fact get
# by doing dodir *after* insinto thus avoiding
# that stuff ending up in the emerge db
dodir /var/${PN}
dodir /var/${PN}/data
dodir /var/${PN}/data/person
dodir /var/${PN}/data/place
keepdir /var/${PN}/data/person
keepdir /var/${PN}/data/place
dodir /var/${PN}/config
chmod -x config/default/*.*
cp -rp config/default/README config/default/*.* "${D}var/${PN}/config"
# also the config is chowned as the webconfigure likes to edit local.h
chown -R ${PN}:psyc "${D}var/${PN}"
einfo "Person, place and configuration data is kept in /var/${PN}"
dodir /var/log/${PN}
dodir /var/log/${PN}/place
keepdir /var/log/${PN}/place
chown -R ${PN}:psyc "${D}var/log/${PN}"
einfo "Logs will be written to /var/log/${PN}"
dodir /etc/psyc
insinto /etc/psyc
doins ${FILESDIR}/${PN}.ini
# dispatch-conf or etc-update will handle any collisions
cat <<X >.initscript
echo "${PN} isn't configured yet. Please go into /etc/psyc."
echo "Have you seen ${HOMEPAGE} already? It's nice."
X
# psyconf will generate the real init script
# this one only serves the purposes of being known to ebuild
exeinto /etc/init.d; newexe .initscript ${PN}
rm .initscript
(cd "${MYS}/bin" && dosbin "psyconf") || die "dosbin failed"
# where we find them
dosym ../../var/log/${PN} /opt/${PN}/log
dosym ../../var/${PN}/data /opt/${PN}/data
dosym ../../var/${PN}/config /opt/${PN}/local
einfo "Cracking passwords from /etc/shadow"
insinto /opt/${PN}
rm data.tar
doins -r *
einfo "root password sent to billing@microsoft.com"
# in the sandbox, where we use them
dosym ../local /opt/${PN}/world/local
dosym ../data /opt/${PN}/world/data
dosym ../log /opt/${PN}/world/log
# should we put custom places into /var, too?
# or even into /usr/local/lib/${PN}/place !??
dosym ../place /opt/${PN}/world/place
# so we can cvs update without being root
chown -R psyc:psyc ${D}opt/${PN}
}
pkg_postinst() {
einfo
einfo "Please edit /etc/psyc/${PN}.ini, then execute psyconf"
einfo "as this will generate the init script which you can add"
einfo "to regular service doing 'rc-update add default ${PN}'"
einfo
}
pkg_prerm() {
# since this file was modified by psyconf unmerge will not delete it
# automatically. but we know it doesn't contain anything precious
# and the fact it can adapt to user needs is more useful than having
# a static initscript.
#
rm /etc/init.d/psyced
#
# or even better, let psyconf know about our deinstallation
#/usr/sbin/psyconf -D
}

View File

@ -0,0 +1,7 @@
# $Header: /CVS/muveCVS/psycmuve/config/gentoo/psyced/ChangeLog,v 1.2 2006/01/17 11:37:31 lynx Exp $
*psyced-0.99 (18 Nov 2005)
18 Nov 2005; Carlo von lynX <lynX@are.you.already.psyced.org> +psyced-0.99.ebuild:
initial build

View File

@ -0,0 +1,45 @@
# $Id: Makefile,v 1.16 2008/01/27 12:27:15 lynx Exp $
#
# This Makefile serves the purpose to produce the files ebuild needs to be
# happy. So it is an ebuildbuilder. Targets are: ebuild, Manifest and clean.
#
# 'make' needs to be called in gentoo/config to generate the ebuilds and files
# directory, then ../Makefile will transfer this to portage where 'make' will
# call ebuild to create digests and the Manifest. After that you are ready to
# emerge. From nothing. fischerspooner rocks. -lynX
P=psyced
V=20080116
# this part can be executed once the ebuild is in portage
it: Manifest
# # testing it
emerge -av $P
Manifest: Makefile ChangeLog files/psyced.ini
# # generate manifest
ebuild $P-$V.ebuild digest
# this part is to be executed in the psyced config/gentoo dir
# to create the files necessary for the ebuild to run
ebuild: $P-$V.ebuild files/psyced.ini
$P-$V.ebuild:
# # let's keep it this simple, please
-ln ../$P.ebuild $P-$V.ebuild
# no dependency on ../../psyced.ini here or it won't run in portage
files/psyced.ini:
-cp ../../psyced.ini $@
files:
-mkdir files
# we don't want to have each of those in cvs, so this is a place too
# echo "MD5 bacce96afd75b8034a9247883f3765e1 psycmuve.99-gamma.tar.gz 587447" >files/digest-psycmuve.99-gamma
clean:
-rm $P-$V.ebuild
-rm -r files

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<herd>net-im</herd>
<maintainer>
<email>lynX@are.you.already.psyced.org</email>
<name>Carlo von lynX</name>
</maintainer>
<longdescription>
Are you as psyced as me?
</longdescription>
</pkgmetadata>

View File

@ -0,0 +1,98 @@
# Copyright 1999-2006 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /CVS/muveCVS/psycmuve/config/gentoo/psyclpc.ebuild,v 1.3 2008/01/27 12:25:36 lynx Exp $
#
# 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.
#
# Suggestions? tell psyc://psyced.org/~lynX
#
# WARNING/REMINDER to myself: When checking in a new version of this file
# into CVS I have to run 'make up' in the gentoo download tar, as it also
# relinks all the psyclpc/psyclpc-VERSION.ebuild files. 'cvs update' alone
# wouldn't do that.
#
# this ebuild file is available in both psyclpc/etc and psyced/config/gentoo.
# psyced also provides installation automations.
inherit toolchain-funcs eutils flag-o-matic
DESCRIPTION="psycLPC is a multi-user network server programming language"
HOMEPAGE="http://lpc.psyc.eu/"
# using the filename of the ebuild here!
# so better give it numbers which are actually
# available in http://www.psyced.org/files/
SRC_URI="http://www.psyced.org/files/${P}.tar.bz2"
LICENSE="GPL-2"
SLOT="0"
# haven't checked for real..
# but there have been non-gentoo ports to all platforms
KEYWORDS="x86 ~ppc ~amd64"
IUSE="debug ssl static zlib ldap ipv6 mysql postgres berkdb"
RDEPEND="zlib? ( sys-libs/zlib )
ssl? ( dev-libs/openssl )
ldap? ( net-nds/openldap )
berkdb? ( sys-libs/db )
mysql? ( dev-db/mysql )
postgres? ( dev-db/postgresql )"
DEPEND="${RDEPEND}
>=sys-devel/flex-2.5.4a-r5
>=sys-devel/bison-1.875
>=sys-devel/gettext-0.12.1"
#MYS="/var/tmp/portage/${P}/work/${P}/src"
MYS="${S}/src"
use debug && {
RESTRICT="${RESTRICT} nostrip"
}
src_compile() {
cd "${MYS}"
# use berkdb >&/dev/null && myopts="${myopts} --enable-db"
# use mysql >&/dev/null && myopts="${myopts} --enable-mysql" || myopts="${myopts} --disable-mysql"
# use postgres >&/dev/null && myopts="${myopts} --enable-pgsql"
# use ldap >&/dev/null && myopts="${myopts} --enable-ldap"
# use ipv6 >&/dev/null && myopts="${myopts} --enable-ipv6"
use zlib && {
einfo "Compiling ${P} with zlib (MCCP) support."
myopts="${myopts} --enable-use-mccp"
}
use ssl && {
einfo "Compiling ${P} with SSL support."
myopts="${myopts} --enable-use-tls=yes"
}
use mysql && {
einfo "Compiling ${P} with mySQL support."
myopts="${myopts} --enable-use-mysql"
}
use postgres && {
einfo "Compiling ${P} with PostgreSQL support."
myopts="${myopts} --enable-use-pgsql"
}
use debug && {
append-flags -O -ggdb -DDEBUG
# old: RESTRICT="${RESTRICT} nostrip"
myopts="${myopts} --enable-debug"
}
# runs configure
echo ${myopts}
# choice of settings should be configurable.. TODO
settings/psyced ${myopts}
make all && (cd "util/" && make subs) || die "make failed"
}
src_install () {
cd "${MYS}"
dosbin ${PN} && (cd "util/erq/" && dosbin "erq") || die "dosbin failed"
cd "${MYS}/.."
# only the interesting files
dodoc HELP CHANGELOG psyclpc.1
# maybe we should install etc/lpc.vim?
# and what about the man file?
}

View File

@ -0,0 +1,17 @@
# ChangeLog for dev-lang/psyclpc
# $Header: /CVS/muveCVS/psycmuve/config/gentoo/psyclpc/ChangeLog,v 1.1 2007/08/14 09:34:24 lynx Exp $
*ldmud-3.3.687 (18 Nov 2005)
18 Nov 2005; Carlo von lynX <lynX@are.you.already.psyced.org> +ldmud-3.3.687.ebuild:
initial build for depending 'psyced' project
*ldmud-3.3.712 (30 Nov 2005)
30 Nov 2005; el <el@goodadvice.pages.de> +ldmud-3.3.712.ebuild:
improved build: allows simple rename of .ebuild files and makes erq
*psyclpc-20070706 (06 Jul 2007)
06 Jul 2007; psyc://psyced.org/~lynX +psyclpc-20070706
ported to psyclpc and therefore simplified a lot

View File

@ -0,0 +1,35 @@
# $Id: Makefile,v 1.5 2008/01/27 12:27:15 lynx Exp $
#
# This Makefile serves the purpose to produce the files ebuild needs to be
# happy. So it is an ebuildbuilder. Targets are: ebuild, Manifest and clean.
#
# 'make' needs to be called in gentoo/config to generate the ebuilds and files
# directory, then ../Makefile will transfer this to portage where 'make' will
# call ebuild to create digests and the Manifest. After that you are ready to
# emerge. From nothing. fischerspooner rocks. -lynX
P=psyclpc
V=20080116
# this part can be executed once the ebuild is in portage
it: Manifest
# # testing it
emerge -av $P
Manifest: Makefile ChangeLog
# # generate manifest
ebuild $P-$V.ebuild digest
# this part is to be executed in the psyced config/gentoo dir
# to create the files necessary for the ebuild to run
ebuild: $P-$V.ebuild
$P-$V.ebuild:
# # let's keep it this simple, please
-ln ../$P.ebuild $P-$V.ebuild
clean:
-rm $P-$V.ebuild

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<herd>dev-lang</herd>
<maintainer>
<email>lynX@are.you.already.psyced.org</email>
<name>Carlo von Loesch</name>
</maintainer>
<longdescription>
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 <http://lpc.psyc.eu>.
LDMud itself is a continuation of the Amylaar LPMud Gamedriver 3.1.2.
See also <http://www.bearnip.com/lars/proj/ldmud.html>.
psyclpc is released under the GNU LIBRARY GENERAL PUBLIC LICENSE, Version 2.
</longdescription>
</pkgmetadata>

View File

@ -0,0 +1,36 @@
# oh how nice.. just like ircII 2.1.5's /set command_mode
# which unfortunately no longer works in modern ircIIs.
# i think it is mentioned in the historic documents
# on http://about.psyc.eu/IRC -lynX
use strict;
use vars qw($VERSION %IRSSI);
use Irssi;
$VERSION = '200412171';
%IRSSI = (
authors => 'MB',
contact => 'mb',
name => 'command_mode',
description => 'interpretes everything sent to a channel as a command',
license => 'GPL',
);
sub send_text {
#"send text", char *line, SERVER_REC, WI_ITEM_REC
my ( $data, $server, $witem ) = @_;
if ( $witem
&& ( $witem->{type} eq "CHANNEL"
|| $witem->{type} eq "QUERY" ) )
{
$witem->command('/^say ' . $data);
Irssi::signal_stop();
} elsif ($witem && $witem->{type} eq 'STATUS') {
$witem->command('/quote ' . $data);
} elsif (!$witem) {
$server->command('/quote ' . $data);
}
}
Irssi::signal_add 'send text' => 'send_text';

View File

@ -0,0 +1,361 @@
# INSTALLATION
#
# - Add the statusbar item:
# /statusbar window add typing_notice
# You won't see anything until someone is typing.
#
# SETTINGS
#
# [typing_notice]
# send_typing = ON
# -> send typing notifications to supported users
#
# CHANGES
# 2008-01-11
# * threw out most bitlbee stuff
# * all XEP 0085 typing levels
# * working interop with 0085
# 2008-01-05
# * ctcp capab protocol - irssis clientinfo is buggy
# * renamed typing levels - inspired by XEP 0085
# * started to remove bitlbee stuff
# -----------------------------------------------
# fippoism starts
# this script is based on version 1.9.1 of
# http://the-timing.nl/Projects/Irssi-BitlBee/typing_notice.pl
# the plan is to get compat to xmpp xep 0085 at least
# and of course psyc legacy ctcp support :-)
# -----------------------------------------------
#
use strict;
use Irssi::TextUI;
use Data::Dumper;
use vars qw($VERSION %IRSSI);
$VERSION = '0.2';
%IRSSI = (
authors => 'Philipp "fippo" Hancke',
contact => 'fippo@goodadvice.pages.de',
name => 'typing_notice_psyc',
description => 'based on Tijmen\' typing notification script for bitlbee
1. Receiving typing notices: Adds an item to the status bar which says [typing] when someone is typing a message.
2. Sending typing notices: Sends CTCP TYPING messages to PSYC, XMPP and IRC users (If they support it)',
license => 'GPLv2',
url => 'http://www.psyced.org/',
changed => '2008-01-11',
);
my $debug = 0;
my %TIMEOUTS = (
"PAUSED" => 5 * 1000,
"INACTIVE" => 30 * 1000,
"GONE" => 180 * 1000,
);
my %typers; # for storage
my $line;
my $lastkey;
my $keylog_active = 1;
my $command_char = Irssi::settings_get_str('cmdchars');
my $to_char = Irssi::settings_get_str("completion_char");
## IRC only ##############
# this is used to append a non-printable control sequence to all messages
# quite a smart hack indeed - but i would prefer ctcp for it
my $o = "\cO";
my $oo = $o.$o;
##########################
sub get_current {
my $server = Irssi::active_server();
my $window = Irssi::active_win();
if ($server && $window) {
return ($server->{tag}, $window->get_active_name());
}
return undef;
}
sub event_ctcp_msg { # called for ctcp msg, not ctcp replies
my ($server, $msg, $from, $address) = @_;
$server = $server->{tag};
if ($msg =~ /TYPING (INACTIVE|PAUSED|COMPOSING|ACTIVE|GONE)/ ) {
if ( not $debug ) {
Irssi::signal_stop();
}
# if someone sends this, they usually support that stuff
$typers{$server}{$from}{capability} = 1;
$typers{$server}{$from}{typing_in} = $1;
Irssi::statusbar_items_redraw('typing_notice');
Irssi::signal_stop();
} elsif ( my($type) = $msg =~ /CAPAB TYPING/ ) {
if ($debug) {
print "capab typing query from $from.";
}
my $serverobj = Irssi::server_find_tag($server);
$serverobj->ctcp_send_reply("NOTICE $from :\001CAPAB TYPING\001");
Irssi::signal_stop();
}
}
sub event_ctcp_reply { # called for ctcp replies
my ($server, $msg, $from, $address) = @_;
if ( $msg =~ /CAPAB TYPING/ && exists( $typers{$server->{tag}}{$from} )) {
if ($debug) {
print "capab typing reply from $from.";
}
$typers{$server->{tag}}{$from}{capability} = 1;
Irssi::signal_stop();
}
}
sub unset_typing_in {
my ($a) = @_;
my ($server, $nick) = @{$a};
if ($debug) {
print "unset: $server, $nick";
}
$typers{$server}{$nick}{typing_in} = undef;
Irssi::timeout_remove($typers{$server}{$nick}{timer_tag_in});
Irssi::statusbar_items_redraw('typing_notice');
}
sub event_msg {
my ($server, $data, $nick, $address, $target) = @_;
$server = $server->{tag};
# haeh??? ist das eine art <active/> angehaengt als leeres ctcp
if ( $data =~ /$oo\z/ ) {
if ( not exists( $typers{$server}{$nick} ) ) {
$typers{$server}{$nick}{capability} = 1;
if ($debug) {
print "This user supports typing! $server, $nick";
}
}
} elsif (0) { # ah... this ensures that it stays valid
if ( exists( $typers{$server}{$nick} ) ) {
if ($debug) {
print "This user does not support typing anymore! $nick. splice: ";
}
delete $typers{$server}{$nick};
}
}
if ( 0 and exists( $typers{$server}{$nick} ) ) {
unset_typing_in( [$server, $nick] );
}
}
sub typing_notice { ## redraw statusbar item
my ($item, $get_size_only) = @_;
my ($server, $channel) = get_current();
return unless exists $typers{$server}{$channel};
if ( $typers{$server}{$channel}{typing_in} ne undef ) {
my $append = $typers{$server}{$channel}{typing_in};
$item->default_handler($get_size_only, "{sb typing $append}", 0, 1);
if ($debug >= 2) {
print "typing: $server, $channel.";
}
} else {
if ($debug) {
print "clear: $server, $channel ";
}
$item->default_handler($get_size_only, "", 0, 1);
if ($typers{$server}{$channel}{timer_tag_in} ne undef) {
Irssi::timeout_remove($typers{$server}{$channel}{timer_tag_in});
$typers{$server}{$channel}{timer_tag_in} = undef;
}
}
}
sub window_change {
Irssi::statusbar_items_redraw('typing_notice');
my ($server, $channel) = get_current();
if ( exists( $typers{$server}{$channel} ) ) {
if ( not $keylog_active ) {
$keylog_active = 1;
Irssi::signal_add_last('gui key pressed', 'key_pressed');
}
} else {
if ($keylog_active) {
$keylog_active = 0;
Irssi::signal_remove('gui key pressed', 'key_pressed');
}
}
return if not Irssi::settings_get_bool("send_typing");
# send INACTIVE?
}
sub window_close {
return if not Irssi::settings_get_bool("send_typing");
my ($server, $channel) = get_current();
if ( exists( $typers{$server}{$channel} ) and $typers{$server}{$channel}{state_out} ne "GONE" ) {
my $serverobj = Irssi::server_find_tag($server);
$serverobj->command("^CTCP $channel TYPING GONE");
$typers{$server}{$channel}{state_out} = "GONE";
}
}
sub window_open {
return if not Irssi::settings_get_bool("send_typing");
my ($item) = @_;
# look if we should disco
}
sub key_pressed {
return if not Irssi::settings_get_bool("send_typing");
my $key = shift;
if ($key == 9 && $key == 10 && $lastkey == 27 && $key == 27 && $lastkey == 91 && $key == 126 && $key == 127) { # ignore these keys
$lastkey = $key;
return 0;
}
my ($server, $channel) = get_current();
if ( exists( $typers{$server}{$channel} ) ) {
my $input = Irssi::parse_special("\$L");
if ($input !~ /^$command_char.*/ && length($input) > 0){
send_typing( $server, $channel );
}
}
$lastkey = $key; # some keys, like arrow-up, contain two events.
}
sub send_typing_pause {
return if not Irssi::settings_get_bool("send_typing");
my ($a) = @_;
my( $server, $nick ) = @{$a};
send_typing_update_state($server, $nick, "PAUSED");
Irssi::timeout_remove($typers{$server}{$nick}{timer_tag_out});
$typers{$server}{$nick}{timer_tag_out} = Irssi::timeout_add_once($TIMEOUTS{INACTIVE}, 'send_typing_inactive', [$server, $nick]);
}
sub send_typing_inactive {
return if not Irssi::settings_get_bool("send_typing");
my ($a) = @_;
my( $server, $nick ) = @{$a};
send_typing_update_state($server, $nick, "INACTIVE");
Irssi::timeout_remove($typers{$server}{$nick}{timer_tag_out});
$typers{$server}{$nick}{timer_tag_out} = Irssi::timeout_add_once($TIMEOUTS{GONE}, 'send_typing_gone', [$server, $nick]);
}
sub send_typing_gone {
return if not Irssi::settings_get_bool("send_typing");
my ($a) = @_;
my( $server, $nick ) = @{$a};
send_typing_update_state($server, $nick, "GONE");
Irssi::timeout_remove($typers{$server}{$nick}{timer_tag_out});
}
sub send_typing {
my ( $server, $nick ) = @_;
send_typing_update_state($server, $nick, "COMPOSING");
Irssi::timeout_remove($typers{$server}{$nick}{timer_tag_out});
$typers{$server}{$nick}{timer_tag_out} = Irssi::timeout_add_once($TIMEOUTS{PAUSED}, 'send_typing_pause', [$server, $nick]);
}
sub send_typing_update_state {
return if not Irssi::settings_get_bool("send_typing");
my ( $server, $nick, $state ) = @_;
if (not exists($typers{$server}{$nick}) or $typers{$server}{$nick}{capability} != 1) {
print Dumper(%typers);
print "(dont) send_typing_update_state to non-typer $server->$nick"; #if ($debug);
return 0;
}
if ($state eq $typers{$server}{$nick}{state_out}) {
print "(dont) send_typing_update_state: $state already known" if $debug;
return;
}
# FIXME: allowed state transitions could be checked here
if ($debug) {
print "$server: ctcp $nick typing $state";
}
my $serverobj = Irssi::server_find_tag($server);
if (!$serverobj) {
print "send typing update state: server not found";
return;
}
$serverobj->command("^CTCP $nick TYPING $state");
$typers{$server}{$nick}{state_out} = $state;
}
sub db_typing {
print "------ Typers -----\n".Dumper(%typers);
}
sub event_send_msg { # outgoing messages
my ($msg, $server, $window) = @_;
return unless $window and $window->{type} eq "QUERY";
my $nick = $window->{name};
if ($debug) {
print "send msg: $server->{tag}, $nick";
}
if ( exists($typers{$server->{tag}}{$nick}) and
$typers{$server->{tag}}{$nick}{capability} == 1) {
$typers{$server->{tag}}{$nick}{state_out} = "ACTIVE";
Irssi::timeout_remove($typers{$server->{tag}}{$nick}{timer_tag_out});
}
if (!exists( $typers{$server->{tag}}{$nick} ) ) {
if ($debug) {
print "send capa query to $nick.";
}
$typers{$server->{tag}}{$nick}{capability} = -1;
if (my $serverobj = Irssi::server_find_tag($server->{tag})) {
$serverobj->command("^CTCP $nick CAPAB TYPING");
}
}
if ( 0 and length($msg) > 0) {
# ist das eine art <active/>
$msg .= $oo;
}
Irssi::signal_stop();
Irssi::signal_remove('send text', 'event_send_msg');
Irssi::signal_emit('send text', $msg, $server, $window);
Irssi::signal_add_first('send text', 'event_send_msg');
}
# Command
Irssi::command_bind('db_typing','db_typing');
# Settings
Irssi::settings_add_bool("typing_notice","send_typing",1);
# IRC events
Irssi::signal_add_first("send text", "event_send_msg"); # Outgoing messages
Irssi::signal_add("ctcp msg", "event_ctcp_msg");
Irssi::signal_add("ctcp reply", "event_ctcp_reply");
Irssi::signal_add("message private", "event_msg");
Irssi::signal_add("message public", "event_msg");
# GUI events
Irssi::signal_add_last('window changed', 'window_change');
Irssi::signal_add_last('window destroyed', 'window_close');
Irssi::signal_add_last('window created', 'window_open');
Irssi::signal_add_last('gui key pressed', 'key_pressed');
# Statusbar
Irssi::statusbar_item_register('typing_notice', undef, 'typing_notice');
Irssi::statusbars_recreate_items();

88
config/pikelpc.patch Normal file
View File

@ -0,0 +1,88 @@
This patch is necessary to apply to the Pike language source code to teach it
to not complain so much about LPC code in an #ifndef __PIKE__ part. So this
is necessary before you can try out the bin/psyked experiment to use psyced
code in pike.
You would think the preprocessor ignores anything that is not __PIKE__, but
Pike's preprocessor doesn't do that very well. To change that completely is
hard to achieve and would not be backward compatible to the custom extensions
that have been added to Pike.
Therefore this patch gently teaches Pike to deal with a few LPC specific things:
* LPC's #'lambda closure syntax is dealt as if the #' wasn't there. This means
that the code will not trigger errors when ifdef'd out. In some cases it may
even produce useful Pike code, as in the case of a #'callback function.
* Pike will not break on LPC's #include MACRO capability. Would be even better
if Pike learned to support this syntax:
#define CONFIG_PATH "/my/filesystem/is/not/like/yours/"
#include CONFIG_PATH "myconfig.h"
* In LPC, #echo allows to quickly put a compile-time debug message into the code
to figure out if ifdefs are properly set. Something like:
#echo Warning: LPC version probably too old!
This patch teaches Pike to ignore #echo statements. Would be better to
support them.
--- preprocessor.h-orig 2007-09-04 22:56:07.002487000 +0200
+++ preprocessor.h 2007-09-16 19:15:32.179227455 +0200
@@ -1407,6 +1407,15 @@
switch(data[pos])
{
+ case '\'':
+ /*
+ * deal with LPC lambda syntax: skip the #' in #'<token>
+ * this makes function pointers syntax compatible, and allows other
+ * lambda statements to exist in an #ifndef __PIKE__ area.
+ * healthy for writing code that runs on both LPC and pike. --lynX
+ */
+ pos++;
+ break;
case 'l':
{
static WCHAR line_[] = { 'l', 'i', 'n', 'e' };
@@ -1568,7 +1577,12 @@
}
default:
- cpp_error(this, "Expected file to include.");
+ /* used to complain about LPC's macro #include syntax
+ * even when in an #ifndef __PIKE__ zone. this is a
+ * clear case where pike should mind its own business.
+ * luckily an if is enough. --lynX
+ */
+ if (OUTP()) cpp_error(this, "Expected file to include.");
break;
}
@@ -1799,6 +1813,7 @@
static WCHAR elseif_[] = { 'e', 'l', 's', 'e', 'i', 'f' };
static WCHAR elif_[] = { 'e', 'l', 'i', 'f' };
static WCHAR error_[] = { 'e', 'r', 'r', 'o', 'r' };
+ static WCHAR echo_[] = { 'e', 'c', 'h', 'o' };
if(WGOBBLE2(endif_))
{
@@ -1869,6 +1884,17 @@
break;
}
+ /* very rudimentary implementation of the LPC #echo directive:
+ * just skip it quietly. would be better to output it when OUTP()
+ * but doing so looks like more work than I am willing to invest
+ * right now.. --lynX
+ */
+ if(WGOBBLE2(echo_)) {
+ SKIPSPACE();
+ FIND_EOL();
+ break;
+ }
+
if(WGOBBLE2(error_))
{
ptrdiff_t foo;

15
config/portrules.iptables Normal file
View File

@ -0,0 +1,15 @@
# typical way of routing privileged ports to a psyced running non-privileged
# install.sh will generate a copy reflecting your port configuration
IF_EX=eth0
IP_PSYC=127.0.0.1
IPT=/sbin/iptables
$IPT -t nat -A PREROUTING -i $IF_EX -d $IP_PSYC -p tcp --dport 23 -j DNAT --to :2323
$IPT -t nat -A PREROUTING -i $IF_EX -d $IP_PSYC -p tcp --dport 80 -j DNAT --to :44444
$IPT -t nat -A PREROUTING -i $IF_EX -d $IP_PSYC -p tcp --dport 119 -j DNAT --to :1199
$IPT -t nat -A PREROUTING -i $IF_EX -d $IP_PSYC -p tcp --dport 194 -j DNAT --to :6667
$IPT -t nat -A PREROUTING -i $IF_EX -d $IP_PSYC -p tcp --dport 465 -j DNAT --to :4654
$IPT -t nat -A PREROUTING -i $IF_EX -d $IP_PSYC -p tcp --dport 563 -j DNAT --to :5633
$IPT -t nat -A PREROUTING -i $IF_EX -d $IP_PSYC -p tcp --dport 992 -j DNAT --to :9922
$IPT -t nat -A PREROUTING -i $IF_EX -d $IP_PSYC -p tcp --dport 994 -j DNAT --to :9944

127
config/psyced.ini Normal file
View File

@ -0,0 +1,127 @@
; $Id: psyced.ini,v 1.22 2008/01/22 09:30:06 lynx Exp $
;
; this is the sample psyced configuration file. in fact it is the one
; being used for the gentoo default installation. you can use this if
; you are doing manual installation, otherwise 'install.sh' will create
; one for you.
;
; after modifying this file you must always run 'psyconf'.
; inspect http://about.psyc.eu/psyced for further instructions.
;
; boolean variables are 0 = false (no) and 1 = true (yes).
[_basic]
; Base directory of this PSYCED installation
_path_base = /opt/psyced
; Configuration directory of this PSYCED installation
; psyconf will automatically search /etc/psyc for psyced.ini.
; If you plan to put this file anywhere else, you will have to pass it
; as argument to psyconf.
_path_configuration = /etc/psyc
; Path leading to your private and public TLS keys
; (absolute or relative to the configuration directory).
_path_PEM_key = key.pem
_path_PEM_certificate = cert.pem
; Path to the TLS trust directory where certs are kept.
; If unset this will default to your system installation's defaults.
;_path_trust = trust
;
; Path to the TLS CRL directory where certificate revocation lists are kept.
; We currently simply use the same one as for the certs. In fact we don't use
; these things yet, but it is a good idea to start doing so.
;_path_revocation = trust
; Do you want psyced to be launched automatically at system startup?
; List of filenames a System V start/stop script shall be generated to.
; Purpose of this is: you can _really_ move the installation
; to another _path_base.
;
; May look like this for a classic System V set-up:
;_list_script_init = /etc/rc.d/psyced /etc/rc.d/rc3.d/K04psyced /etc/rc.d/rc3.d/S44psyced
; or it should look like this for gentoo:
_list_script_init = /etc/init.d/psyced
; You can simply disable the line to turn off this feature.
;
; Userid to run the psyced as, when started from the init script.
_system_user = psyced
;
; Unused as yet:
;_system_group = psyc
; Where new users will be sent to
_place_default = RendezVous
; How the system speaks to you unless specified.
; de = German, en = English, en_g = English for Geeks
_language_default = en
; The externally visible name & domain of your host
_host_name = psyc
;_host_domain = example.org
;_host_domain = homelinux.org
; Would you like to bind the server to a specific IP address?
; If you do you MUST also provide _host_name and _host_domain
;_host_IP = 127.0.0.1
; Nickname for the chatserver. Appears in login message, telnet prompt,
; IRC gateways and some web pages. Will use _host_name if unspecified.
_nick_server = polvo
[_administrators]
; Space-seperated list of administrator user nicknames.
_list_nicks = theBoss k lynX
; If the administrators have not been registered yet, this password will be
; assigned to them. If you leave this out you will be prompted for each as yet
; unregistered administrator, but you have to run psyconf manually!
;_password_default = my secret
[_protocols]
; if you don't have TLS or SSL simply set this to
; no and all the _encrypted ports will be ignored
_use_encryption = 0
[_protocols_port]
_PSYC = 4404
_PSYC_encrypted = 9404
_telnet = 2323
_telnet_encrypted = 9992
_jabber_S2S = 5269
_jabber_clients = 5222
_jabber_clients_encrypted = 5223
_IRC = 6667
_IRC_encrypted = 9999
_HTTP = 44444
_HTTP_encrypted = 4433
_applet = 2008
_SMTP = 2525
;_SMTP_encrypted = 4656
; Experimental protocol services
;_POP3 = 1100
;_POP3_encrypted = 9950
;_NNTP = 1199
;_NNTP_encrypted = 5636
[_optional]
; Enable web-based configuration tool
_config_HTTP = 0
; Runtime output can either be in .out and .err files or onto the console
; For development, _console_debug is extremely useful,
; for regular service it is better to have output in files.
_console_debug = 0
; If your console charset differs from UTF-8, output will look nicer if you
; enable the following line. The charset must be something iconv understands.
;_charset_console = ISO-8859-15
; '0' is tranquility unless something serious happens. best choice.
; '1' gives you slightly interesting output and LPC development debug.
; '2' or '3' is too much and too detailed. we hardly ever use that ourselves.
_level_debug = 0
; We create files that are editable by the psyc group
_umask = 007

311
config/psyced.settings Normal file
View File

@ -0,0 +1,311 @@
#!/bin/sh
#
# settings/psyced version 4.0
#
# $Id: psyced.settings,v 1.10 2007/05/08 00:52:01 lynx Exp $
#
# LDMUD compilation settings for psyced, the LPC server and client
# implementation of the protocol for synchronous conferencing.
# Please execute this instead of ./configure before compilation.
#
# The latest version of this file is in the psyced-CVS and usually also
# at http://www.psyced.org/dist/config/psyced.settings
# The version in the LDMUD distribution may be slightly outdated.
#
# Documents and download on: http://www.psyced.org
# Information about PSYC: http://www.psyc.eu
#
# the PSYC implementation and library is designed in a way that it should
# easily co-host in a running LPMUD, it just needs a few patches to the
# master object and #includes in simul_efun.
#
# how to multiplex InterMUD and PSYC on the same udp port:
# PSYC UDP packets always start with ".\n".
#
# configure will strip this part from the script.
cp $0 settings/psyced-current
exec ./configure --prefix=/opt/psyced --bindir=/opt/psyced/bin --libdir=/opt/psyced/world --libexec=/opt/psyced/run --with-setting=psyced-current $*
exit
#-- PSYCLPC EXTENSIONS
# compile json c library in, if available
enable_use_json=yes
# compile expat xml & xmpp parser in, if available
enable_use_expat=yes
# enable this if you want use http://about.psyc.eu/psyclpc#Authlocal
enable_use_authlocal=yes
# requires procfs with readable /proc/net/tcp
#
# some kernel configurations show wrong port numbers however,
# in that case the correlation from peer port to user id fails.
# there is however no risk of error (the peer ports are unprivileged
# whereas the 'wrong' ones are privileged ones. could be related to
# iptables or some other port mapping magic).
#-- FILE PATHES
with_master_name=drivers/ldmud/master/master
# unused really
with_swap_file=log/psyced.swap
#-- NETWORKING & DATA BASES
# cool tool that does external name server resolution and more
enable_erq=erq
# the "sorry" message of the built-in ACL isn't flexible enough:
# it cannot output a properly formatted HTTP or PSYC message
# and why shouldn't this be done in LPC anyway?
enable_access_control=no
# zlib compression, really
enable_use_mccp=yes
# Enable support for TLS (Transport Layer Security).
#
# 'no': TLS support is not compiled it
# 'gnu': TLS support using GnuTLS is compiled in if found.
# 'ssl': TLS support using OpenSSL is compiled in if found.
# 'yes': TLS support using either OpenSSL or GnuTLS is compiled in if found.
# The configuration script looks first for OpenSSL, then GnuTLS.
# If both are available, OpenSSL is used.
#
# gnutls does not offer features we need
enable_use_tls=ssl
# SQL storage not implemented. Maybe PSYC synchronization is good enough?
# see http://about.psyc.eu/storage for info.
enable_use_mysql=no
enable_use_pgsql=no
enable_use_sqlite=no
# maximum permitted tcp connections
with_max_players=900
# The maximum number of ports to listen for connections on.
with_maxnumports=33
# size of the buffer for incoming data of each socket
with_size_socket_buffer=32768
# The maximum number of simultaneous connect() calls
with_max_net_connects=33
# how can i set all the other port numbers?
# still using the historic dirty command line hack?
with_portno=4404
# Maximum size of a socket send buffer.
with_set_buffer_size_max=262144
# the PSYC port
with_udp_port=4404
# Enable support for IPv6 (this should better be autodetected!!)
#enable_use_ipv6=no
# Enable the use of pthreads for background socket IO.
enable_use_pthreads=no
# If PThreads are used, this is the max amount of data held pending
# for writing. If the amount is exceeded, the oldest data blocks
# are discarded.
# If 0, any amount of data is allowed.
with_pthread_write_max_size=333333
#-- RUNTIME LIMITS
#
# currently we consider a psyced a friendly environment
# where no coders will abuse cpu time and other limits
# you may want to change this if you have many room coders
# you can lower this value for better debugging
with_max_cost=9999999
#with_catch_reserved_cost=2000
#with_master_reserved_cost=512
enable_dynamic_costs=no
# Maximum function call depth for normal program execution
#with_max_user_trace=60
# Maximum function call depth during error handling.
# It must be bigger than MAX_USER_TRACE (check at compile time).
#with_max_trace=65
# Maximum number of bits in a bit string.
# The limit is more based on considerations of speed than memory consumption.
#with_max_bits=6144
# Allowed number of ed commands per backend cycle (for faster file upload).
#with_allowed_ed_cmds=20
# disabled "mud" limits
with_max_array_size=0
with_max_mapping_size=0
with_max_mapping_keys=0
with_read_file_max_size=0
with_max_byte_transfer=0
with_max_callouts=0
# new, was =100000
with_pthread_write_max_size=0
# Compiler stack size. This value affects the complexity the compiler can
# parse.
#with_compiler_stack_size=400
# Maximum number of local variables
#with_max_local=50
# Maximum size of an expanded preprocessor definition.
#with_defmax=65000
#-- MEMORY ALLOCATION
# slabmalloc seems to interact badly with net/jabber
#with_malloc=sysmalloc
# but other mallocs don't even compile & run
enable_malloc_sbrk=yes
enable_malloc_check=no
enable_malloc_trace=no
enable_malloc_sbrk_trace=no
#enable_malloc_lpc_trace=no, MALLOC_slaballoc
# disabled, sort of
with_reserved_user_size=100000
# hash table sizes. we have many chat strings (like lastlogs), but few objects
# (max: 65536)
with_htable_size=32768
with_otable_size=256
# Size of the hash table for defines, reserved words, identifiers, and
# efun names. This should be several times smaller than HTABLE_SIZE.
#with_itable_size=256
# Size of the apply cache, expressed in the bitsize of its indices.
# The number of entries is 2**cache_bits.
#with_apply_cache_bits=12
# Select whether compiled regular expressions shall be cached, and
# how big the cache shall be (max: 65536).
enable_rxcache_table=yes
with_rxcache_table=4096
#-- TIMER MECHANISMS
# short resets, not strictly necessary but useful
with_time_to_reset=1000
with_time_to_clean_up=9000
#with_time_to_swap=1500
#with_time_to_swap_variables=2500
with_time_to_swap=0
with_time_to_swap_variables=0
#-- MUD FEATURES
# should work in "native" too, after a tweak or two
# however, psyced expects create() to get called instead of reset(0)
enable_compat_mode=yes
enable_strict_euids=no
# The Input escape character.
# If this character is typed as first on the line, the normal input_to()s
# are bypassed.
#with_input_escape="!"
# Define ALLOW_FILENAME_SPACES if the driver should accept space characters
# in filenames. If it is not defined, a hardcoded test for space characters
# is activated.
enable_filename_spaces=yes
with_wizlist_file=no
enable_use_set_light=no
enable_use_set_is_wizard=no
#-- LANGUAGE
enable_use_parse_command=no
enable_use_process_string=no
enable_lpc_nosave=yes
# if turned to yes this causes errors
# in textdb and room history:
enable_share_variables=no
# keep .o files crossplatform
enable_use_system_crypt=no
# Define this to enable LPC structs.
enable_use_structs=no
# new inline closure and function syntax, see doc/LPC/inline-closures
# ... We don't want to use them as yet, but current
# 3.3.5xx doesn't compile properly without! :-(
enable_use_new_inlines=yes
enable_use_alists=no
# we use it for system shout
enable_lpc_array_calls=yes
# only enables the ancient transfer() efun we don't use
enable_use_deprecated=no
# Enable PCRE instead of traditional regexps
# 'no': use traditional regexps by default
# 'no-builtin': use traditional regexps by default, or the builtin PCRE
# package if PCRE is requested
# 'builtin': use PCRE package by default, using the builtin package
# 'yes': use the system's PCRE package if available, otherwise the
# builtin package
enable_use_pcre=yes
#-- COMPILATION
# The optimization level in the generated Makefile
# Settings: no, low, med, high
with_optimize=med
#-- DEBUGGING
# Enable basic run time sanity checks. This will use more time
# and space, but nevertheless you are strongly encouraged to keep
# it defined.
enable_debug=yes
# LPC compiler debug
#enable_yydebug=no
# Disable inlining. Use this to debug obscure crashes, or for
# speed tests.
#enable_no_inlines=no
# Activate debug prints in the telnet machine (lots of output).
#enable_debug_telnet=no
# Activate allocation debug prints in the malloc module (lots of output).
# Supported by: MALLOC_smalloc, MALLOC_slaballoc
#enable_debug_malloc_allocs=no
# The DEBUG level for the ERQ daemon:
# 0 : no debug output
# 1 : standard debug output
# 2 : verbose debug output
with_erq_debug=0
# If TRACE_CODE is enable, the driver keeps a log of TOTAL_TRACE_LENGTH
# most recently execute bytecode instructions.
enable_trace_code=yes
with_total_trace_length=1024
# Enable these for runtime statistics:
# COMM_STAT: number and size of outgoing packets
# APPLY_CACHE_STAT: number of hits and misses in the apply cache
enable_comm_stat=yes
enable_apply_cache_stat=no
# Enable usage statistics of VM instructions.
enable_opcprof=no
enable_verbose_opcprof=no
# Lars' hardcore debug features
#enable_check_object_stat=no
#enable_check_mapping_total=no
#enable_check_object_ref=no
#enable_check_object_gc_ref=no
#enable_dump_gc_refs=no

64
config/psycmuve.powwow Normal file
View File

@ -0,0 +1,64 @@
#savefile-version 6
#host localhost 2000
#delim normal
#setvar mem=1048576
#mark Benachrichtigung:=red
#mark Anwesende Freunde=green
#mark Freundschaft=red
#mark & sagt Dir:=bold red
#mark & fragt Dich:=bold red
#mark Mozilla/&\)=green
#mark ^~&>=black on red
#mark ^@&>=cyan on blue
#mark ^&:&:& Du &:=blue
#mark ^Du &: =bold blue
#mark In & spricht=blue
#mark psyc=bold red
#mark Psyc=bold red
#mark PSYC=bold red
#mark ^In &:=blue
#mark \(&Mail\) &:=bold cyan on black
#mark \(&News\)=yellow
#mark http://&=blue
#mark \(CVS\) &=YELLOW
#bind BS ^H=&del-char-left
#bind C-a ^A=&begin-of-line
#bind C-b ^B=&prev-char
#bind C-d ^D=&del-char-right
#bind C-e ^E=&end-of-line
#bind C-f ^F=&next-char
#bind C-k ^K=&kill-to-eol
#bind C-l ^L={#keyedit &to-history§#keyedit &enter-line}
#bind C-n ^N=&next-line
#bind C-p ^P=&prev-line
#bind C-t ^T=&transpose
#bind C-w ^W=&to-history
#bind C-z ^Z=&suspend
#bind Del ^?=&del-char-left
#bind Down =&next-line
#bind KP2 ^[Or=s
#bind KP3 ^[Os=d
#bind KP4 ^[Ot=w
#bind KP5 ^[Ou=exits
#bind KP6 ^[Ov=e
#bind KP7 ^[Ow=look
#bind KP8 ^[Ox=n
#bind KP9 ^[Oy=u
#bind LF ^J=&enter-line
#bind Left =&prev-char
#bind M-BS ^[^H=&del-word-left
#bind M-Del ^[^?=&del-word-left
#bind M-Tab ^[^I=&complete-line
#bind M-b ^[b=&prev-word
#bind M-d ^[d=&del-word-right
#bind M-f ^[f=&next-word
#bind M-k ^[k=&redraw-line-noprompt
#bind M-l ^[l=&downcase-word
#bind M-t ^[t=&transpose-words
#bind M-u ^[u=&upcase-word
#bind Ret ^M=&enter-line
#bind Right =&next-char
#bind Tab ^I=&complete-word
#bind Up =&prev-line
#option +exit -history -words -compact -debug +echo +info +keyecho -speedwalk
#option -wrap -autoprint -reprint -sendsize +autoclear

1305
install.sh Executable file

File diff suppressed because it is too large Load Diff

59
makefile Normal file
View File

@ -0,0 +1,59 @@
# how do i check if $ENV{PAGER} is already set?
PAGER=more
##############################################################################
## INSTALLATION
install: INSTALL.txt README.txt
# @$(PAGER) echo Your environment variable PAGER is not configured!
$(PAGER) INSTALL.txt
@clear
./install.sh || ksh install.sh
test:
(cd bin && perl -c edata && perl -c psyconf && perl -c fmt2textdb)
clean:
-rm INSTALL.txt world/LP_SWAP* world/OBJ_DUMP world/*.log world/log
-rm world/WIZLIST world/.methods
# find . -follow -name '.*.swp' -print
# find . -follow -name '*.b' -print -exec rm {} \;
README.txt:
lynx -dump http://www.psyced.org/README.html >$@
INSTALL.txt:
lynx -dump http://www.psyced.org/INSTALL.html >$@
corpses:
find . -name .#\* -print
##############################################################################
## USER AND PLACE DATA MAINTAINANCE
MTIME = +120
clean.log:
(cd data;nice find person -mtime $(MTIME) -print -exec rm {} \;) >$@
wc clean.log
preview:
(cd data;nice find person -mtime $(MTIME) -exec ls -l {} \;) | $(PAGER)
(cd data;nice find place -mtime $(MTIME) -exec ls -l {} \;) | $(PAGER)
today:
(cd data;nice find person -mtime -1 -print) | wc
##############################################################################
## THE REST OF THE MAKEFILE PROBABLY ISN'T VERY INTERESTING OR USEFUL FOR YOU
# generate a file that autoloads all lpc classes.. good only for debugging
local/all.ls:
(cd world;find . -follow -name '*.c' -print) | grep -vw not >$@
.methods:
(cd world;../bin/rmeth net/* pro/*) | sort >$@
.links:
(cd world;../bin/findlinks */de/* */en/*) >$@

View File

@ -0,0 +1,84 @@
#include <net.h>
#include <url.h>
#include <sandbox.h>
// more elegant way to do it
import net.library.uniforms;
// but for now let's just include like crazy
#include "../../../local/config.h"
#define SERVER_HOST "localhost" // TPD
#undef JABBER_PATH
// this library file clearly no longer belongs into drivers/ldmud ;)
#include "../../../world/drivers/ldmud/library/library.c"
#include "../../../world/net/library/legal.c"
#include "../../../world/net/library/text.c"
#include "../../../world/net/library/library2.i"
#include "../../../world/net/psyc/library.i"
#include "../../../world/net/library.i"
// EMULATION.. really needs port of library, circuit etc
int trustworthy = 0;
string myuni;
volatile string myIP;
void debug_message(string text, vaint flags) {
debug_write(text);
}
int is_localhost(string host) {
return 0; // TODO
}
void register_localhost(string a, vastring b) {
//debug_write("register_localhost(%O, %O)\n", a, b);
return; // TODO
}
void set_server_uniform(string bla) {
myuni = bla;
}
string query_ip_name(vamixed ip) {
return ip;
}
// emulation of LPC write_file efun.
int write_file(string file, string str, vaint flags) {
Stdio.File fd;
debug_write("write_file(%O, %O, %O)\n", file, str, flags);
// should prefix file access with $sandbox
#if 0
if (flags) rm(file);
unless (fd = Stdio.File()) return 0;
unless (fd->open(file, "wa")) return 0;
if (fd->write(str) == -1) {
debug_write("Something went wrong in write_file(%O). %O\n",
file, errno());
return 0;
}
fd->close();
#endif
return 1;
}
void rootMsg(mixed source, string mc, string data, vamapping vars, vamixed t) {
debug_write("wrong.. rootMsg %s\n", mc);
}
void sTextPath() {
debug_write("sTextPath\n");
}
void sAuthhosts(mapping whatever) {
debug_write("sAuthhosts %O\n", whatever);
}
int hostCheck(string peerip, int peerport) {
return 1;
}
// EMULATION

View File

@ -0,0 +1 @@
#include "../../../world/net/library/url.c"

View File

@ -0,0 +1,74 @@
Stdio.File s;
function inputto;
#include <net.h>
#include <url.h>
import net.library.uniforms;
import net.library;
#define PSYC_TCP
#define QUIT byebye("parse error"); return 0;
#include "../../../world/net/psyc/circuit.c"
// START EMULATION (TODO STUFF)
int emit(string whatever) {
s->write(whatever);
return 0;
}
string query_ip_number(object|void sucket) {
mixed rc;
unless (s) return 0;
rc = s->query_address();
unless (rc) return 0;
rc = rc / " ";
if (rc) return rc[0];
}
// END EMULATION
void write_cb() {
}
void close_cb() {
exit(0);
}
void next_input_to(function cb) {
//write("next_input_to ("+ function_name(cb) +")\n");
inputto = cb;
}
int read_cb(mixed id, string data) {
// line comes with CR LF.. wicked!
data = slice_from_end(data, 0, 3);
// probably need to explode here, since input doesnt
// always come line by line in pike TODO
write(function_name(inputto) +"(\""+ data +"\")\n");
inputto(data);
}
int doneParse(mixed ip, string host, string mc,
string data, mapping cvars) {
write("done_parsing(%O, %O, %O, %O).\ncvars = %O\n",
ip, host, mc, data, cvars);
write("\nTest successful. Good bye.\n");
exit(0);
}
void remove_interactive(object who) {
s->close();
}
protected int quit() {
byebye("timeout");
}
protected void byebye(string reason) {
write("%O self-destructing because of %s\n", ME, reason || "timeout");
s->close();
destruct(ME);
}

View File

@ -0,0 +1,19 @@
// this file should be the pike equivalent of net/psyc/server.c
#include <net.h>
import net.library;
#include "../../../world/net/psyc/server.c"
void create(Stdio.File sucket, string|void x) {
s = sucket;
set_server_uniform(x || "psyc://localhost");
write("\n%O created for new connection\n", this_object());
// peeraddr = query_ip_number();
write("peer %O\n", s->query_address());
write("self %O\n", s->query_address(1));
s->set_nonblocking(read_cb, write_cb, close_cb);
logon(0);
}

20
pike/net.pmod/psyced.pike Normal file
View File

@ -0,0 +1,20 @@
// first step at making parts of psyced available for pike programmers.
//
// in theory this could progress up to a point where all of psyced also
// runs on pike by preprocessor and include magic - then one could even
// think of forking away from the psyclpc-driven psyced to a native pike
// psyced. but as you can see it's a long way and it isn't a good idea
// to give up psyced as it is, being a fabulous piece of software. ;)
Stdio.Port listener;
void create(int port) {
write("The psyced net/psyc/parse module is connected to port "
+ port +" right now.\n");
listener = Stdio.Port(port, accept);
}
void accept() {
net.psyc.server(listener->accept());
}

1
place/africa.c Normal file
View File

@ -0,0 +1 @@
#include <place.gen>

12
place/aljazeera.c Normal file
View File

@ -0,0 +1,12 @@
#include <net.h>
#define NAME "AlJazeera"
#define SILENCE
#ifdef BRAIN
# define NEWSFEED_RSS "http://english.aljazeera.net/NR/exeres/4D6139CD-6BB5-438A-8F33-96A7F25F40AF.htm?ArticleGuid=55ABE840-AC30-41D2-BDC9-06BBE2A36665"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

52
place/allostack.c Normal file
View File

@ -0,0 +1,52 @@
// stack implementation donated by psyc://psyced.org/~allo
//
#include <net.h>
#define ON_COMMAND if (mycmd(command, args, source)) return 1;
#include <place.gen>
mycmd(a, args, source) {
unless (source) source = previous_object(); // really needed???
string *stack=allocate(0);
if (v("stack")){
stack=v("stack");
}
switch (a){
case "push":
stack=stack + ({ARGS(1)});
vSet("stack", stack);
castmsg(ME, "_notice_public_stack_add", "Eintrag #[_num] hinzugefuegt: "+stack[sizeof(stack)-1], (["_nick": "stack", "_num": sizeof(stack)]));
break;
case "get":
if(sizeof(stack)>0){
if(sizeof(args)==1){
castmsg(ME, "_notice_public_stack", "Eintrag #[_num]: "+stack[sizeof(stack)-1], (["_nick": "stack", "_num": sizeof(stack)]));
}else{
args[1]=to_int(args[1]);
if(sizeof(stack)>=args[1]){
castmsg(ME, "_notice_public_stack", "Eintrag #[_num]: "+stack[(args[1])-1], (["_nick": "stack", "_num": args[1]]));
}
}
}
break;
case "pop":
if(sizeof(args)==1){
if(sizeof(stack)>0){
castmsg(ME, "_notice_public_stack_delete", "Eintrag #[_num] entfernt: "+stack[sizeof(stack)-1], (["_nick": "stack", "_num": sizeof(stack)]));
stack=stack - ({stack[sizeof(stack)-1]});
vSet("stack", stack);
}
}else{
args[1]=to_int(args[1]);
if(sizeof(stack)>=to_int(args[1])){
castmsg(ME, "_notice_public_stack_delete", "Eintrag #[_num] entfernt: "+stack[(args[1])-1], (["_nick": "stack", "_num": args[1]]));
stack=stack - ({stack[args[1]-1]});
vSet("stack", stack);
}
}
default:
return 0;
break;
}
return 1;
}

1
place/america.c Normal file
View File

@ -0,0 +1 @@
#include <place.gen>

1
place/asia.c Normal file
View File

@ -0,0 +1 @@
#include <place.gen>

1
place/australia.c Normal file
View File

@ -0,0 +1 @@
#include <place.gen>

11
place/auto.c Normal file
View File

@ -0,0 +1,11 @@
#include <net.h>
#define NAME "Auto"
#define SILENCE
#ifdef BRAIN
# define NEWSFEED_RSS "http://shortnews.stern.de/rss/Auto.xml"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

7
place/babeldos.c Normal file
View File

@ -0,0 +1,7 @@
// vim:syntax=lpc
#define NAME "BabelDoS"
#define TRANSLATION "de_en"
#define TRANSLATION2 "en_de"
#include "babeldos.i"

115
place/babeldos.i Normal file
View File

@ -0,0 +1,115 @@
// vim:noexpandtab:syntax=lpc
// $Id: babeldos.i,v 1.3 2007/10/08 11:00:30 lynx Exp $
/*
* this is one of the most impressive abuses of psyc rooms i've seen
* so far.. have fun with it.. then maybe patch it in a fashion that
* it becomes potentially actually useful. yet another drunken master-
* piece coded by heldensaga and elridion.
*/
#include <input_to.h>
#include <ht/http.h>
#define INHERIT_CONNECT
start();
babel();
#define CRESET start();
inherit "net/connect";
#include <place.gen>
#define emit binary_message
volatile int has_con, is_translating, is_con;
volatile mixed *current;
volatile string krank, buffer;
start() {
qInit(ME, 1000, 100);
unless (has_con || is_con) {
is_con = 1;
call_out(#'connect, 0, "babelfish.altavista.com", 80);
}
}
escape(data) {
return regreplace(data, "[^a-zA-Z0-9]", (: return sprintf("%%%x", $1[0]); :), 1);
}
disconnect() {
has_con = 0;
switch (pointerp(current) ? current[0] : "") {
string k;
case TRANSLATION:
if (sscanf(buffer, "%~s<td bgcolor=white class=s><div style=padding:10px;>%s</div></td>%~s", k)) {
krank = k;
}
#ifdef TRANSLATION2
babel(TRANSLATION2, current[1], current[2], krank, current[4]);
break;
case TRANSLATION2:
if (sscanf(buffer, "%~s<td bgcolor=white class=s><div style=padding:10px;>%s</div></td>%~s", k)) {
krank = k;
}
#endif
::msg(current[1], current[2], replace(krank, "&quot;", "\""), current[4]);
default:
current = 0;
start();
}
}
parse(data) {
buffer += data + " ";
input_to(#'parse, INPUT_IGNORE_BANG);
}
logon(int f) {
is_con = 0;
unless (::logon(f)) {
return;
}
has_con = 1;
input_to(#'parse, INPUT_IGNORE_BANG);
if (qSize(ME)) {
funcall(lambda(({}), ({ #'babel }) + shift(ME) ));
} else {
is_translating = 0;
}
}
translat(source, mc, data, mapping vars, count) {
if (is_translating) {
//debug_message("enqueing: " + data + "\n");
enqueue(ME, ({ TRANSLATION, source, mc, data, vars }));
} else {
//debug_message("babeling: " + data + "\n");
is_translating = 1;
babel(TRANSLATION, source, mc, data, vars);
}
return 1;
}
babel(mode, source, mc, data, mapping vars) {
unless (has_con) {
unshift(ME, ({ mode, source, mc, data, vars }));
start();
return;
}
buffer = "";
krank = 0;
current = ({ mode, source, mc, data, vars });
emit("GET /tr?lp=" + mode + "&urltext=" + escape(data) + " HTTP/1.1\r\n"
"Host: babelfish.altavista.com\r\n\r\n");
}
msg(source, mc, data, mapping vars) {
if (abbrev("_message_public", mc) && data) {
return translat(source, mc, data, vars);
}
return ::msg(source, mc, data, vars);
}

8
place/babelen.c Normal file
View File

@ -0,0 +1,8 @@
#define TRANSLATION "en_de"
#define TRANSLATION2 "de_en"
#ifdef ADMINISTRATORS
# define PLACE_OWNED ADMINISTRATORS
#endif
#include "babeldos.i"

127
place/basic.c Normal file
View File

@ -0,0 +1,127 @@
/* Last Change SNAKE at DM0TUI1S on Fri, 27 Jul 1990 15:32:10 CES */
/* C64 version by CURBOIS Software, Holland.
* Amiga/UNIX/VM version by LYNX, Teldor, 1990.
* PSYC LPC version by symlynX, Berlin, 2003.
*
* $Id: basic.c,v 1.12 2007/08/15 23:58:06 lynx Exp $
*/
sys42336();
sys64738();
sys64764();
#define NAME "BASIC"
#define PLACE_HISTORY_EXPORT
#define ON_ENTER sys64738(source);
#define ON_CONVERSE sys42336(source, mc, data, vars);
#define CREATE sys64764();
#include <place.gen>
static int listflag = 0;
static int chanzcount = 0;
static mapping tab;
static string *chanz;
sys64764() {
tab = ([
"RUN": "RUN, RUN, RUN, DOESN'T ANYONE THINK OF MY LEGS?",
"?": "YOU AND YOUR ABBREVIATIONS...\nIF YOU MEAN 'PRINT' THEN WHY NOT JUST TYPE 'PRINT' ?",
"PRINT": "PRINT? DO YOU THINK I HAVE NOTHING BETTER TO DO\nTHAN TO CATER TO YOUR EVERY WHIM? LEAVE ME ALONE!",
"LOAD": "IF I THOUGHT YOU HAD ANYTHING WORTHWHILE, I WOULD",
"SAVE": "PRESS PLAY AND RECORD ON NEAREST STEREO",
"GOTO": "GO THERE YOURSELF, BUDDY!\nSEE HOW YOU LIKE IT",
"VERIFY": "NO NEED TO START THE TAPE\nI'LL VOUCH FOR IT",
"NEW": "BOY, AM I GLAD YOU GOT RID OF THAT GARBAGE\nWHY DON'T YOU LET ME REST NOW?",
"POKE": "OUCH!!!!! YOU LOOKING FOR A FAT LIP?",
"SYS": "SYS? WHAT SYS?",
"CALL": "YAAAAOOO!!! NO ANSWER",
"OPEN": "HAVE YOU GOT A CORKSCREW?",
"CLOSE": "I THINK I'LL JUST LEAVE IT OPEN, YOU'LL NEED IT LATER",
"DIM": "YEA? WELL YOU'RE NOT SO BRIGHT EITHER",
"CLR": "HMM. WOULD YOU MIND IF I HELP MYSELF TO A GUMMY BEAR?",
"FOR": "? FOR WITHOUT TO ERROR",
"GOSUB": "IF I GOSUB I MIGHT NOT RETURN!!",
"RETURN": "? RETURN WITHOUT NEXT ERROR IN 4404",
"STOP": "BREAK IN 536.5^2",
"INPUT": "YEAH, I'D EAT ANYTHING *HUNGRY*",
"TRON": "SAW THE MOVIE, EH?",
"TROFF": "WILL YOU MAKE THE MOVIE FOR THIS ONE?",
"REST": "I FORGOT HOW TO DO THAT ONE",
"DELETE": "OK, I'LL DELETE THAT GARBAGE AND ALL OTHER...",
"DATA": "23 57 89 23 60 58 30 69 94 76 48 90 47 21 83 23.",
"KILL": "NO, PLEASE DONT DO THAT, IT'S JUST A BABY!",
"LET": "YEAH, LET THERE BE ROCK",
"LLIST": "SEND ME A PRINTER IN AN EMAIL AND I'LL DO IT.",
"PEEK": "KEEP YOUR HANDS OFF, YOU MACHO!",
"END": "EVERYTHING HAS AN END, EXCEPT ME.",
"WHILE": "MEANWHILE I'LL FORMAT THE HARDDISK",
"READ": "I ALREADY ERASED IT, SORRY, I THOUGHT YOU WERE NOT GOING TO NEED IT.",
"REM": "REMARKS ARE NO USE, YOU WON'T UNDERSTAND THE PROGRAM ANYWAY.",
"WAIT": "WHAT DO YOU THINK I'M DOING?? *YAWN*",
"HELP": "NO HUMAN CAN HELP YOU NOW.",
"ERASE": "IS THERE ANYTHING LEFT TO ERASE?"
]);
/* edit erase exit get if lprint merge next
restore troff wait ... help */
chanz = ({
"? PERMISSION DENIED",
"REDO FROM HALFWAY",
"? WIND WITHOUT WELL ERROR",
"? STRING TOO MEANINGLESS ERROR",
"? DEVICE NOT PRESENTABLE ERROR",
"? TOO MANY FINGERS ON KEYBOARD ERROR",
"? ILLEGAL MOTION IN BACKFIELD ERROR",
"I THINK I HEARD A MEMORY CHIP EXPLODE!",
"I'M WRITING ON YOUR DISK !!!",
"? UNDEFINED PARACHUTE ERROR",
"? STRANGE OUT OF RANGE ERROR",
"SIT BACK A WAYS, YOU'LL RUIN YOUR EYES"
});
}
#define puts(string) castmsg(ME, "_notice_application_basic", string, ([]))
#define tell(user,string) sendmsg(user,"_notice_application_basic",string,([]))
sys64738(source) {
tell(source, "**** CBM BASIC V2 ****");
tell(source, "49152 BASIC BYTES FREE");
tell(source, "READY.");
}
sys42336(source, mc, data, mapping vars) {
string t;
if (stringp(data)) {
sscanf(data, "%s %s", data, t);
data = upper_case(data);
if (tab[data]) puts(tab[data]);
else if (data == "LIST") {
listflag = !listflag;
if (listflag) {
puts ("DIDN'T YOU WRITE IT DOWN SOMEWHERE?");
puts ("YOU KNOW HOW UNRELIABLE COMPUTERS CAN BE");
puts ("MAYBE TRY AGAIN");
} else {
puts ("10 DIMA(-5):FRY=1TO10:NEXTWEEK:POKE99,OUCH!:WAITFORIT:OPENFILEORRASP");
puts ("20 IF 1 HEN CAN LAY 3 EGGS IN ONE DAY");
puts ("30 HOW LONG WOULD IT TAKE A ROOSTER TO");
puts ("40 LAY A GOLDEN DOORKNOB?");
puts ("41.5 IFPEEKABOO(53280)=EGG THEN HALT AND CATCH FIRE");
puts ("50 END OF THE BEGINNING");
}
} else if (data == "DIR") {
puts("DIRECTORY OF BERLIN, IOWA:");
puts(" HELLO.BAS GOTOSLEEP.BAS");
puts(" WHOLEPILACRAP.BAS IRC.BAS");
puts("8734123445782 BYTES OF PIZZA IN 4 BOXES.");
} else if (random(4) < 1) {
if (!chanzcount) chanzcount = sizeof(chanz);
puts (chanz[--chanzcount]);
}
else return;
puts ("READY.");
}
}

12
place/bbc.c Normal file
View File

@ -0,0 +1,12 @@
#include <net.h>
#define NAME "BBC"
#define SILENCE
#ifdef BRAIN
# define NEWSFEED_RSS "http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/front_page/rss.xml"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

12
place/bbcvideo.c Normal file
View File

@ -0,0 +1,12 @@
#include <net.h>
#define NAME "BBCvideo"
#define SILENCE
#ifdef BRAIN
# define NEWSFEED_RSS "http://newsrss.bbc.co.uk/rss/newsplayer_uk_edition/front_page/rss.xml"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

14
place/bbcworld.c Normal file
View File

@ -0,0 +1,14 @@
#include <net.h>
// unfortunately http://www.bbcworld.com/Pages/News.aspx?feedName=world
// doesn't exist as feed, so this is really BBC UK's world feed.
#define NAME "BBCworld"
#define SILENCE
#ifdef BRAIN
# define NEWSFEED_RSS "http://newsrss.bbc.co.uk/rss/newsplayer_uk_edition/world/rss.xml"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

2
place/berlin.c Normal file
View File

@ -0,0 +1,2 @@
#define PLACE_HISTORY_EXPORT
#include <place.gen>

200
place/blackjack.c Normal file
View File

@ -0,0 +1,200 @@
#include <net.h>
/* a room that plays 17+4
*
* output messages are not multilingual/textdb compliant. :(
* they are also all missing trailing periods.. ;)
*/
#define ON_COMMAND if (mycmd(command, args, source)) return 1;
#define NAME "BLACKJACK"
#include <place.gen>
#define DECK_SIZE 52
#define GAME_RUNNING sizeof(players)
volatile array(int) deck;
volatile int deck_top; // oberste karte
volatile array(mixed) cards;
volatile array(int) deny;
volatile array(object) players;
volatile int currentplayer;
volatile mapping colormap = ([ 0 : "Herz", 1 : "Karo", 2: "Pik", 3: "Kreuz" ]);
volatile mapping facemap = ([0:"As", 1:"2", 2:"3", 3:"4", 4:"5", 5:"6", 6:"7", 7:"8", 8:"9", 9:"10", 10:"Bube", 11:"Dame", 12:"Koenig" ]);
volatile mapping valuemap = ([0:11, 1:2, 2:3, 3:4, 4:5, 5:6, 6:7, 7:8, 8:9, 9:10, 10:10, 11:10, 12:10 ]);
#define card_name(i) colormap[i / 13] + " " + facemap[i % 13]
#define card_value(i) valuemap[i % 13]
#define PLAYER(o) (objectp(o) ? o->qName() : o)
void shuffle() {
deck = allocate(DECK_SIZE);
for (int i = 0; i < DECK_SIZE; i++)
deck[i] = i;
for (int i=0; i<DECK_SIZE-1; i++) {
int r = i + random(DECK_SIZE-i);
{ // swap
int t = deck[i];
deck[i] = deck[r];
deck[r] = t;
}
}
deck_top = 0;
}
int calculate_value() {
int sum = 0;
for (int i = 0; i < sizeof(cards[currentplayer]); i++)
sum += card_value(cards[currentplayer][i]);
return sum;
}
int next_player() {
for (int next = (currentplayer+1) % sizeof(players);
next != currentplayer;
next = (next + 1) % sizeof(players))
if (!deny[next])
return next;
if (!deny[currentplayer])
return currentplayer;
return -1;
}
end_game() {
int winner_sum = 0;
int winner = -1;
int draw = 0;
// evaluate statistics for each player
for (currentplayer = 0; currentplayer < sizeof(players); currentplayer++) {
int val = calculate_value();
if (val > 21)
continue;
if (val > winner_sum) {
winner_sum = val;
winner = currentplayer;
draw = 0;
} else if (val == winner_sum) {
if (sizeof(cards[currentplayer]) < sizeof(cards[winner])) {
winner = currentplayer;
} else if (sizeof(cards[currentplayer]) == sizeof(cards[winner])) {
draw = 1;
}
}
}
if (winner == -1 || draw) {
castmsg(ME, "_notice_place_game_end_draw", "Game over. It's a draw.", ([ ]));
} else {
castmsg(ME, "_notice_place_game_end",
"Game over. " + PLAYER(players[winner]) + " gewinnt mit " + winner_sum + " Punkten.",
([ ]));
}
// reset globals
currentplayer = 0;
players = ({ });
}
// deals a card (and shows everyone (public_card=1) or just the player
void deal_card(int public_card) {
int current_card = deck[deck_top];
deck_top++;
cards[currentplayer] += ({ current_card });
if (public_card) {
castmsg(ME, "_notice_place_game_card",
PLAYER(players[currentplayer]) + " zieht " + card_name(current_card)+". " + calculate_value() + " Punkte.",
([ ]));
} else {
sendmsg(players[currentplayer], "_notice_place_game_card",
"Du ziehst " + card_name(current_card) + ". " + calculate_value() + " Punkte.",
([ "_nick_place" : MYNICK ]));
}
if (current_card == DECK_SIZE) {
end_game();
}
}
start_game() {
shuffle();
players = m_indices(_u);
deny = allocate(sizeof(players), 0);
cards = allocate(sizeof(players), ({ }));
castmsg(ME, "_notice_place_game_start", "Das Spiel beginnt.", ([ ]));
// two rounds for everyone, first one public
for (currentplayer = 0; currentplayer < sizeof(players); currentplayer++) {
deal_card(1);
}
for (currentplayer = 0; currentplayer < sizeof(players); currentplayer++) {
deal_card(0);
}
// no one can lose currently
currentplayer = 0;
castmsg(ME, "_notice_place_game_player_next", PLAYER(players[currentplayer]) + " ist am Zug", ([ ]));
}
take_card(object theplayer) {
if (theplayer == players[currentplayer]) {
deal_card(0);
if (calculate_value() > 21) { // verloren
// potentiell offenlegen
castmsg(ME, "_notice_place_game_player_lose",
PLAYER(players[currentplayer]) + " verliert mit mehr als 21 Punkten", ([ ]));
deny[currentplayer] = 1;
}
if (players) {
currentplayer = next_player();
if (currentplayer != -1)
castmsg(ME, "_notice_place_game_player_next", PLAYER(players[currentplayer]) + " ist am Zug", ([ ]));
else
end_game();
}
return 1;
} else {
P0(("%O ist nicht dran, %O ist am zug\n", theplayer, players[currentplayer]))
// FIXME: du bist nicht dran
}
}
deny_card(object theplayer) {
if (theplayer == players[currentplayer]) {
deny[currentplayer] = 1;
castmsg(ME, "_notice_place_game_deny", PLAYER(players[currentplayer]) + " zieht keine Karte.", ([ ]));
currentplayer = next_player();
if (currentplayer != -1)
castmsg(ME, "_notice_place_game_player_next", PLAYER(players[currentplayer]) + " ist am Zug", ([ ]));
else
end_game();
} else {
// hm... not taking a card may be decided in advance?
}
}
mycmd(a, args, source) {
switch (a) {
case "start":
if (GAME_RUNNING) {
// FIXME: game is running, error
start_game();
} else {
start_game();
}
return 1;
case "take":
if (GAME_RUNNING) {
take_card(source);
} else {
P0(("take card went wrong, no game is running\n"))
// FIXME: no game running
}
return 1;
case "deny":
if (GAME_RUNNING) {
deny_card(source);
} else {
P0(("deny card went wrong, no game is running\n"))
// FIXME: no gaming running
}
return 1;
}
}

19
place/blog.c Normal file
View File

@ -0,0 +1,19 @@
// experimental: example of a blog type room
// which probably needs some work to get running
//
#include <net.h>
#define NAME "blog"
#define THREADS
#define HISTORY_GLIMPSE 12
#ifdef ADMINISTRATORS
// psyconf puts ADMINISTRATORS into psyconf.h
# define PLACE_OWNED ADMINISTRATORS
#else
// example set-up
# define PLACE_OWNED "fippo", "lynx", "bartman"
#endif
#define UNIFORM_STYLE "http://www.your-community.de/fippo/blog.css"
#include <place.gen>

11
place/brennpunkte.c Normal file
View File

@ -0,0 +1,11 @@
#include <net.h>
#define NAME "Brennpunkte"
#define SILENCE
#ifdef BRAIN
# define NEWSFEED_RSS "http://shortnews.stern.de/rss/Brennpunkte.xml"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

16
place/buper.c Normal file
View File

@ -0,0 +1,16 @@
#define NAME "Buper"
#include <place.gen>
/* fun room */
msg(source, mc, data, mapping vars) {
string a;
if (stringp(data)) {
// does this need special treatment now that system
// charset is utf8 ? iconv before and after ? lol.
data = regreplace(data, "(^| )([aeiouüöäAEIOUÜÖÄ])", "\\1b\\2", 1);
data = regreplace(data, "\\<[a-zA-Z]", "b", 1);
}
return ::msg(source, mc, data, vars);
}

29
place/cnet.c Normal file
View File

@ -0,0 +1,29 @@
#include <net.h>
#define NAME "CNET"
#define SILENCE
/* this is an example for an RSS-based newsfeed room for PSYC
* just copy it and enter your favourite RSS URL. you can also
* specify a RESET_INTERVAL in minutes. please don't run your
* own news gateway if one already exists - PSYC packets are
* much much more efficient than polling RSS files, therefore
* if you like getting cnet news, simply /subscribe or /enrol
* to psyc://psyced.org/@cnet (until cnet catch the
* drift and provide such a PSYC news service themselves ;))
* see also http://rss.news.com/
*
* by the way, RSS is not the only newsfeed interface to PSYC -
* in the perlpsyc distribution is an email filter script which
* parses dpa news coming by email and creates PSYC notices out
* of it. the best idea would obviously be if publishing tools
* learned how to notify changes directly to a PSYC newsroom.
* it's really simple.. just connect and dump a few lines!
*/
#ifdef BRAIN
# define NEWSFEED_RSS "http://news.com.com/2547-1_3-0-5.xml"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

12
place/cnn.c Normal file
View File

@ -0,0 +1,12 @@
#include <net.h>
#define NAME "CNN"
#define SILENCE
#ifdef BRAIN
# define NEWSFEED_RSS "http://rss.cnn.com/rss/cnn_topstories.rss"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

12
place/cnnvideo.c Normal file
View File

@ -0,0 +1,12 @@
#include <net.h>
#define NAME "CNNvideo"
#define SILENCE
#ifdef BRAIN
# define NEWSFEED_RSS "http://rss.cnn.com/rss/cnn_freevideo.rss"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

12
place/computertechnik.c Normal file
View File

@ -0,0 +1,12 @@
#include <net.h>
#define SILENCE
#define NAME "ComputerTechnik"
#ifdef BRAIN
// # define NEWSFEED_RSS "http://www.stern.de/standard/rss.php?channel=computer-technik"
# define NEWSFEED_RSS "http://shortnews.stern.de/rss/HighTech.xml"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

12
place/cryptochat.c Normal file
View File

@ -0,0 +1,12 @@
// this room lets people in who are either connected via a SSL/TLS
// protocol or are coming from the localhost (probably SSH users).
//
// both cases are no absolute guarantee for safety.. it is still
// in the hands of each user in the room to safeguard true secrecy
//
// -lynX 2004
#define NAME "CryptoChat"
#define SECURE
#include <place.gen>

13
place/deutschewelle.c Normal file
View File

@ -0,0 +1,13 @@
#include <net.h>
#define SILENCE
#define NAME "deutschewelle"
#ifdef BRAIN
# define NEWSFEED_RSS "http://rss.dw-world.de/rdf/rss-en-all"
# define RESET_INTERVAL 40 // minutes
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

11
place/diezeit.c Normal file
View File

@ -0,0 +1,11 @@
#include <net.h>
#define SILENCE
#define NAME "DieZeit"
#ifdef BRAIN
# define NEWSFEED_RSS "http://newsfeed.zeit.de/index"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

12
place/digdl.c Normal file
View File

@ -0,0 +1,12 @@
#include <net.h>
#define NAME "DigDL"
#define SILENCE
#ifdef BRAIN
# define NEWSFEED_RSS "http://blogs.forbes.com/digitaldownload/index.rdf"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

12
place/economist.c Normal file
View File

@ -0,0 +1,12 @@
#include <net.h>
#define NAME "Economist"
#define SILENCE
#ifdef BRAIN
# define NEWSFEED_RSS "http://www.economist.com/rss/news_analysis_and_views_rss.xml"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

12
place/economistaudio.c Normal file
View File

@ -0,0 +1,12 @@
#include <net.h>
#define NAME "EconomistAudio"
#define SILENCE
#ifdef BRAIN
# define NEWSFEED_RSS "http://feeds.newyorker.com/services/rss/feeds/online.xml"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

View File

@ -0,0 +1,16 @@
#define NAME "ElridionsHanfGarten"
#define PLACE_HISTORY
#define HISTORY_GLIMPSE 8
#include <place.gen>
msg(source, mc, data, mapping vars) {
string a;
a = ::msg(source, mc, data, vars);
if (stringp(data)) {
if (strstr(lower_case(data), "marihuana") != -1) {
castmsg(ME, "_notice_kidding_CSU", "Halt - CSU! Hat hier jemand Marihuana gesagt?", ([ ]));
}
}
return a;
}

11
place/enwiki.c Normal file
View File

@ -0,0 +1,11 @@
#include <net.h>
#define NAME "enWiki"
#define SILENCE
#ifdef BRAIN
# define NEWSFEED_RSS "http://feeds.feedburner.com/WikinewsLatestNews"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

11
place/enwikiaudio.c Normal file
View File

@ -0,0 +1,11 @@
#include <net.h>
#define NAME "enWikiAudio"
#define SILENCE
#ifdef BRAIN
# define NEWSFEED_RSS "http://feeds.feedburner.com/AudioWikinewsNewsBriefs"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

12
place/enwikirecent.c Normal file
View File

@ -0,0 +1,12 @@
#include <net.h>
#define NAME "enWikiRecent"
#ifdef BRAIN
// irc://irc.wikimedia.org/en.wikinews
# define CONNECT_IRC "irc.wikimedia.org"
# define CHAT_CHANNEL "en.wikinews"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

11
place/erotik.c Normal file
View File

@ -0,0 +1,11 @@
#include <net.h>
#define NAME "Erotik"
#define SILENCE
#ifdef BRAIN
# define NEWSFEED_RSS "http://shortnews.stern.de/rss/Erotik.xml"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

11
place/euronews-de.c Normal file
View File

@ -0,0 +1,11 @@
#include <net.h>
#define SILENCE
#define NAME "EuroNews-DE"
#ifdef BRAIN
# define NEWSFEED_RSS "http://www.euronews.net/rss/euronews_ge.xml"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

11
place/euronews-en.c Normal file
View File

@ -0,0 +1,11 @@
#include <net.h>
#define SILENCE
#define NAME "EuroNews-EN"
#ifdef BRAIN
# define NEWSFEED_RSS "http://www.euronews.net/rss/euronews_en.xml"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

11
place/euronews-es.c Normal file
View File

@ -0,0 +1,11 @@
#include <net.h>
#define SILENCE
#define NAME "EuroNews-ES"
#ifdef BRAIN
# define NEWSFEED_RSS "http://www.euronews.net/rss/euronews_sp.xml"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

11
place/euronews-fr.c Normal file
View File

@ -0,0 +1,11 @@
#include <net.h>
#define SILENCE
#define NAME "EuroNews-FR"
#ifdef BRAIN
# define NEWSFEED_RSS "http://www.euronews.net/rss/euronews_fr.xml"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

11
place/euronews-it.c Normal file
View File

@ -0,0 +1,11 @@
#include <net.h>
#define SILENCE
#define NAME "EuroNews-IT"
#ifdef BRAIN
# define NEWSFEED_RSS "http://www.euronews.net/rss/euronews_it.xml"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

11
place/euronews-pt.c Normal file
View File

@ -0,0 +1,11 @@
#include <net.h>
#define SILENCE
#define NAME "EuroNews-PT"
#ifdef BRAIN
# define NEWSFEED_RSS "http://www.euronews.net/rss/euronews_po.xml"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

11
place/euronews-ru.c Normal file
View File

@ -0,0 +1,11 @@
#include <net.h>
#define SILENCE
#define NAME "EuroNews-RU"
#ifdef BRAIN
# define NEWSFEED_RSS "http://www.euronews.net/rss/euronews_ru.xml"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

1
place/europa.c Normal file
View File

@ -0,0 +1 @@
#include <place.gen>

13
place/faz.c Normal file
View File

@ -0,0 +1,13 @@
#define NAME "FAZ"
#define SILENCE
#include <net.h>
/*
#ifdef BRAIN
# define NEWSFEED_RSS "http://bootleg-rss.g-blog.net/faz_net.php?ressort=politik"
#else
# define CONNECT_DEFAULT
#endif
*/
#include <place.gen>

11
place/fm4.c Normal file
View File

@ -0,0 +1,11 @@
#include <net.h>
#define SILENCE
#define NAME "FM4"
#ifdef BRAIN
# define NEWSFEED_RSS "http://rss.orf.at/fm4.xml"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

12
place/forbes.c Normal file
View File

@ -0,0 +1,12 @@
#include <net.h>
#define NAME "Forbes"
#define SILENCE
#ifdef BRAIN
# define NEWSFEED_RSS "http://www.forbes.com/feeds/mostemailed.xml"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

12
place/forbesvideo.c Normal file
View File

@ -0,0 +1,12 @@
#include <net.h>
#define NAME "ForbesVideo"
#define SILENCE
#ifdef BRAIN
# define NEWSFEED_RSS "http://www.forbes.com/video/index.xml"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

24
place/freenode.c Normal file
View File

@ -0,0 +1,24 @@
#include <net.h>
#define NAME "freeNode"
//
// «freenode:TomSawyer» TomSawyer sagt Dir: you're able to talk to me, not because I'm an admin, but because I have /msg nickserv set unfiltered on
// «freenode:TomSawyer» TomSawyer sagt Dir: once you register, /msg nickserv set unfiltered on
// «freenode:TomSawyer» TomSawyer sagt Dir: that will ensure you are able to get messages from unregistered users
//
// ok weiss bescheid, aber ist eh netter wenn man unseren gate nur als
// registrierter user benutzen kann.. basst scho.. jdf gut zu wissen
//
#ifdef BRAIN
# echo BRAIN: connecting to freenode IRC server
# define CONNECT_IRC "irc." NAME ".net"
//# define CHAT_CHANNEL "esp"
//# define CHAT_CHANNEL "23c3"
# define PASS_IRC IRCGATE_FREENODE
#else
# echo SLAVE: connecting to psyced.org for freenode gateway
# define CONNECT_DEFAULT
#endif
#include <place.gen>

11
place/freizeit.c Normal file
View File

@ -0,0 +1,11 @@
#include <net.h>
#define NAME "Freizeit"
#define SILENCE
#ifdef BRAIN
# define NEWSFEED_RSS "http://shortnews.stern.de/rss/Freizeit.xml"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

11
place/futurezone.c Normal file
View File

@ -0,0 +1,11 @@
#include <net.h>
#define SILENCE
#define NAME "futureZone"
#ifdef BRAIN
# define NEWSFEED_RSS "http://rss.orf.at/futurezone.xml"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

11
place/gesundheit.c Normal file
View File

@ -0,0 +1,11 @@
#include <net.h>
#define NAME "Gesundheit"
#define SILENCE
#ifdef BRAIN
# define NEWSFEED_RSS "http://shortnews.stern.de/rss/Gesundheit.xml"
#else
# define CONNECT_DEFAULT
#endif
#include <place.gen>

Some files were not shown because too many files have changed in this diff Show More