tintin-2.02.20/ 0000775 0000000 0000000 00000000000 14216112057 0013161 5 ustar 00root root 0000000 0000000 tintin-2.02.20/.gitignore 0000664 0000000 0000000 00000000134 14216112057 0015147 0 ustar 00root root 0000000 0000000 src/Makefile
src/confdefs.h
src/config.h
src/config.log
src/config.status
src/*.o
src/tt++
tintin-2.02.20/COPYING 0000664 0000000 0000000 00000104515 14216112057 0014222 0 ustar 00root root 0000000 0000000 GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc.
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. 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
them 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 prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. 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.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey 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;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If 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 convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU 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 that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
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.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
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.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
Copyright (C)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
Copyright (C)
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
.
tintin-2.02.20/CREDITS 0000664 0000000 0000000 00000003702 14216112057 0014203 0 ustar 00root root 0000000 0000000 Special thanks to the following
-----------------------------------------------------------------------------
1992-1992 Peter Joachim Unold see mods/0.3.mods The original TINTIN III
1993-1995 Bill Reiss see mods/1.5.mods Original #math code
Jeremy C. Jack see mods/1.5.mods
David A. Wagner see mods/1.5.mods
Joann Ellsworth see mods/1.5.mods Original manual
David Hedbot Original GNU autoconfig
Greg Jarman Original #if code
1997-1998 Peter Kjellerstedt see mods/1.8.mods
1998-1998 Sean Butler see mods/1.8.mods Original #chat code
1998-1999 Sverre Norrman see mods/1.8.mods Original #function code
1998-1999 Robert Ellsworth see mods/1.8.mods
1999-2001 Davin Chan see mods/1.8.mods
2004-2019 Igor van den Hoven see mods/igr.mods
Bryan Turner Map search enhancement
David Champion Solaris forkpty fix
Ben Love Tab enhancements
Adam Borowski SSL implementation
Beta Testers
-----------------------------------------------------------------------------
Unfortunately (or fortunately) there are too many to list, but your help has
been greatly appreciated. You are invaluable to TinTin++'s continued success.
Thanks!
Modification History
-----------------------------------------------------------------------------
0.3.mods apr 1992 - oct 1992
1.5.mods jun 1993 - jan 1995
1.8.mods apr 1997 - oct 2001
igr.mods feb 2004
TinTin++ Developer
-----------------------------------------------------------------------------
Igor van den Hoven - mudclient@gmail.com
The email must contain either tintin or tintin++ in the subject or message,
otherwise it will not get forwarded to my main email account.
tintin-2.02.20/FAQ 0000664 0000000 0000000 00000012621 14216112057 0013515 0 ustar 00root root 0000000 0000000 This document will hopefully answer most questions regarding tintin++ (tt++).
Last updated: 03/07/2020
Q00) I'm new to tintin, how do I get started?
A00) Quite easy, start tintin using tt++ or ./tt++, to connect to a mud type:
#session
The name can be whatever you want it to be. If you start up 2 or more
sessions you can switch between the sessions using # or use
# [command] to have that session execute a command keeping the
session in the background.
Type #help for a list of help subjects, #help for more
information.
Q01) What machines does tintin work on?
A01) Pretty much any UNIX machine with a modern compiler as well as Windows,
Mac OS X, Android, and iOS.
Q02) What causes a part of a line to be missing sometimes?
A02) It's most likely caused by packet fragmentation. This problem can be
solved by using:
#config packet_patch 0.5
Q06) I can't get tintin compiled. Where can I get more help?
A06) See the INSTALL file.
Q07) I still can't get tintin compiled?
A07) See the install section on the website for even more detailed help.
A pre-compiled binary is only available for Windows.
Q08) I would like to help, how can I contribute to tintin?
A08) You can assist people on the discord channel and give bug reports or
suggestions. A link to the beta version is available on the forum
in the Beta Testing section, beta testing is very important to the
continued development of TinTin++.
TinTin++ is mostly a solo project and over 95% of the code has been
written by Igor van den Hoven. If you however feel the need to
contribute a code snippet it should be released into the public
domain, this to avoid weird situations where someone who contributed
0.1% of the code demands 50% of the ownership.
Another useful way to contribute is by working on tutorials, or
writing interesting scripts for others to use.
Q09) Tintin is so awesome, how can I thank you guys for spending all that time
to write tintin for free??
A09) Fan mail and donations are always welcome :)
Q11) Can I use code from tintin?
A11) Yes, provided that you follow the terms of the license. The license
used for tintin 1.86 till tintin 2.01.7 is GPL 2 and the license as of
tintin 2.01.8 is GPL 3. TINTIN III and TinTin++ 1.5 are public domain,
meaning there are no restrinctions whatsoever.
The TinTin++ 1.5 official documentation by Robert Ellsworth was
explicitly not released into the public domain, and subsequently it
wasn't included in the GPL 2 and 3 tintin releases.
Q12) I contributed code X, why isn't my name listed in the CREDITS file?
A12) Most likely your name slipped by before Davin Chan started
maintaining tintin and adding people to the CREDITS file. If you
believe you have contributed code to tintin, please email me and
let me know. Make sure to see if your code is still existent in this
version as little of the original code has remained.
Q14) I've seen some nifty code and would like to use it in a different program.
A14) If you read the COPYING file you will see you are allowed to modify and
redistribute this version as long as you make it clear you made changes,
and what those changes are. If you want to use tintin code in another
program not licensed under GPL 3 you need permission from the author.
Make sure to see if the exact code you want to use isn't existent in older
tintin++ versions before contacting me, because I obviously cannot give
permission for code I didn't write :) Also notice that older tintin++
versions are not licensed under the GPL.
Q15) My old script files do not work, is this a bug?
A15) Possibly, more likely your old script files do not work because a lot has
changed. Try reading #help about the subject. Also the new
script parser more closely resembles the working of common scripting
languages. Also try to look through the examples, they are supposed to
work, and you might find out what you are doing wrong. Feel free to
ask for help on the forum.
The NEWS file lists most compatibility issues.
Q16) #prompt {string} does not work
A16) That's because the new syntax is: #prompt {string} {substitution}
Read the help for the substitute command for more information.
Q17) I want to make an ALIAS that creates an ACTION, but both use %0, how to
go about this?
A17) Use %%0 %%1 %%2 for the arguments of the nested action.
Q18) How to enable support for chinese muds?
A18 Use: #config charset ? to get a list of support character sets.
Q19) I use Mac OS X and ran tintin a few times, now every time I open a terminal
window, it runs tintin automatically.
A19) You clicked "use settings as default" while running tintin. There's a few
ways out of this, but the easiest is locating your terminal preference
(home : library : com.apple.Terminal.plist) and deleting it. You'll have
to redo anyting custom you set up (screen size, colors, etc.), but it
will get the terminal back to the default of loading into your home
directory.
Q20) What is the recommended terminal emulator?
A20) TinTin++ is being developed to work properly with xterm.
Q21) What is the recommended font?
A21) The default unicode settings are configured to work with Consolas and the
mintty terminal for the Windows build.
tintin-2.02.20/INSTALL 0000664 0000000 0000000 00000002156 14216112057 0014216 0 ustar 00root root 0000000 0000000 INSTALLATION
------------
Installation should be easy; cd to the src/ directory, then type:
./configure
make install
If this went without errors or serious warnings type this to start tintin:
tt++
You might need to install the following libraries:
pcre: pcre.org
zlib: zlib.net
gnutls: gnutls.org
If you have any trouble with installing/compiling tintin you should check out
the install section on the website.
https://tintin.mudhalla.net/install.php
If that doesn't do the trick you can ask for assistance on the forum.
TERMINAL EMULATION
------------------
In order to run tintin full featured you will need a vt100 emulator. If your
OS doesn't use one per default it's suggested to install xterm.
STATIC LINKING
--------------
This is more so a note to myself to statically link PCRE on Cygwin.
$ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.34.tar.bz2
$ tar xvf pcre-8.34.tar.bz2
$ cd pcre-8.34/
$ ./configure CC=i686-pc-mingw32-gcc CXX=i686-pc-mingw32-g++ --enable-jit --enable-unicode-properties --disable-shared
$ make
$ ./configure --libdir='../pcre-8.34' --includedir='../pcre-8.34'
tintin-2.02.20/NEWS 0000664 0000000 0000000 00000025654 14216112057 0013674 0 ustar 00root root 0000000 0000000 Due to continuous improvements old tintin scripts aren't always compatible
with new versions. This document tries to list most compatibility conflicts.
TinTin++ 2.02.12
----------------
01) The behavior of $variable[] is now identical to $variable[%*].
TinTin++ 2.02.11
----------------
01) %w now translates to {[a-zA-Z0-9_]*} instead of {[a-zA-Z]*} so it matches
the behavior of \w. Same for %W.
02) The : time operator in #math should no longer be used since that is
going to be changed to c style ? : ternary operator support.
03) #math and #if no longer recognize .1 as a number, you need to use 0.1.
TinTin++ 2.02.04
----------------
01) Variables starting with a number are no longer supported, as per the
C standard for naming variables. A warning is generated when trying to
do so.
Keep in mind that #var {8ball} {1} will still work, just that instead of
being able to use $8ball you need to use ${8ball} for an explicit
variable lookup.
02) Implicit index lookups on undefined variables are no longer supported. If
you do something like #if {&target} this needs to be changed to
#if {&{target}}.
The reason for this is that "say I played d&d last night" would evaluate
as "say I played d0 last night".
TinTin++ 2.02.00
----------------
01) #format %C needs to be changed to #screen get cols
#format %R needs to be changed to #screen get rows
#format %S needs to be changed to #info session save
02) If you were using ${variable}[1] this needs to be changed to
${variable[1]} to have the same behavior.
03) $variable() *variable() and &variable() are reserved until further notice,
use ${variable}( for proper behavior.
04) %+ now has different behavior when followed by a number.
You can replace '%+' with '%+1..a', see #help regex for more information.
TinTin++ 2.01.92
----------------
01) The #buffer get command has been changed to use the new row notation
standard.
02) The #split command has been changed to where it sets the number of
top split lines if only one argument is given.
The 2nd argument sets the number of bottom split lines which defaults
to 1. The 3rd and 4th argument set the left and right split lines.
03) #killall gives a warning that it should be changed to #kill all
04) #forall has been removed.
05) Added a notice for people still using $variable[] instead of
*variable[]. I'll change $variable[] eventually to be identical to
$variable[%*].
TinTin++ 2.01.90
---------------
01) You'll have to issue #map color reset and #map legend reset to get
your old map files straightened out. Once the map is saved again
it should work without issues.
02) There were two big problems that needed to be addressed to continue
smooth development.
1. In VT100 row 1 is the top line, while in tintin row 1 is the split
line.
2. In VT100 row, col (y, x) notation is used, while tintin has been
favoring col, row (x, y) notation.
While this may seem like a minor issue, I'm utilizing VT100 more often
using more complex operations, and TinTin++ is currently pretty much
mirrored in the way it behaves opposed to VT100.
This has resulted in relatively simple math becoming weird unintuitive
math, making already complex code even more complex, resulting in bugs
and unreadable code that requires a lot of mental gymnastics to figure
out.
Subsequently I decided on a major interface change that will result in
several compatibility issues.
#split will stay the way it is.
#showme {text} will stay the same.
#showme {text} {0} will become invalid.
#showme {text} {1} will print on the top line.
#showme {text} {2} will print on the second line from the top.
#showme {text} {-1} will print on the bottom line / input line.
#showme {text} {-2} will print on the default split line.
#prompt {text} {substitution} will stay the same.
#prompt {text} {substitution} {0} will become invalid.
#prompt {text] {substitution} {1} will write to the top line.
#prompt {text} {substitution} {-1} will write to the bottom / input line.
#prompt {text} {substitution} {-2} will write to the 2nd line from the
bottom, which is the default split line.
All code that takes {col} {row} as an argument will be changed to instead
use {row} {col}. The main reason for this change is consistency, and
because I've repeatedly swapped row and col in VT100 which can be a tricky
bug to track down.
TinTin++ 2.01.8
---------------
01) Changed the software license from GPL2 to GPL3.
02) The SYSTEM START event will no longer report the client name and version
as %0 and %1. Instead you can use #info system save, which will save
CLIENT_NAME and CLIENT_VERSION to the $info[SYSTEM] variable.
TinTin++ 2.01.7
---------------
Added proper class nesting. When closing the active class, the last active
class is activated. This change will cause trouble for scripts that don't
properly close classes.
TinTin++ 2.01.5
---------------
01) The #FORALL command has been removed and instead #FOREACH should be used.
02) Removed dot notation support for variables. #var bla.bli blo is no longer
valid, nor is $bla.bli.
TinTin++ 2.01.4
---------------
Added support for *{variable} to show variable names.
TinTin++ 2.00.2
---------------
Removed the #suspend command, it's been moved to #cursor suspend.
TinTin++ 1.99.7
---------------
01) #LOOP, #FOREACH, and #PARSE take an additional argument which contains
the variable used for storing the intermediate values.
#LOOP {min} {max} {variable} {commands}
#FOREACH {list} {variable} {commands}
#PARSE {string} {variable} {commands}
02) #format {variable} {syntax} {{arg1} {arg2}} has been changed to
#format {variable} {syntax} {arg1} {arg2}
03) Renamed #replacestring to #replace
04) Variables can be nested using brackets. Non existent nested variables
report 0 if the base variable exists and always report 0 when the name
is encapsulated in braces.
Using & instead of $ will report the index of a variable.
Using $variable[+1] will report the first nest, and $variable[-1] will
report the last nest, $variable[-2] the second last nest, etc.
To display all nests use $variable[]
To check if a variable exists use: #if {&{variable}} which will report
0 if non existent, and the numeric index if the variable is found.
05) #LIST now works with nested variables. Read #HELP VARIABLE.
06) The #SWITCH, #CASE, #DEFAULT, #FOREACH, #BREAK, #CONTINUE, #ELSE, #ELSEIF,
and #RETURN statements have been added and should work more or less as
expected.
TinTin++ 1.99.1
---------------
01) The #regex command now uses the same regular expression syntax as triggers.
02) #if {"%0" == "?test*"} needs to be replaced with #if {"%0" == "%?test%*"}
as per the regex syntax documented in #HELP ACTION, or use
#if {&{test} != 0} to see if a variable exists.
03) old lists need to be converted as following:
#var {friends} {{Alicia} {Bubba} {Cathie} {Kayla} {Zorro}}
to
#var {friends} {{1}{Alicia} {2}{Bubba} {3}{Cathie} {4}{Kayla} {5}{Zorro}}
or
#list friends create {{Alicia} {Bubba} {Cathie} {Kayla} {Zorro}}
TinTin++ 1.99.1
---------------
Triggers now use PCRE (Perl Compatible Regular Expressions).
See #help regex for details.
TinTin++ 1.96.6
---------------
#PATHDIR is now specifically designed to hold a direction, the opposite
direction, and the vector of said direction for the #MAP command.
TinTin++ 1.95.0
---------------
Removed #antisubsittute as its utility was too limited for inclusion.
TinTin++ 1.94.4
---------------
01) #SPLIT supports 2 arguments to set the top and bottom row.
02) In order to make a color trigger start a trigger with a tilda. In order to see
color codes the way tintin wants you to enter them type: #CONFIG convert on
when done use: #CONFIG convert off.
#action {~\0;32m%0 says '%1'} {say I don't like green says.}
TinTin++ 1.94.0
---------------
#SLEEP has been removed. The #DELAY command can be used instead.
TinTin++ 1.91.0
---------------
Removed the #speedwalk command, it's been moved to the #config menu.
TinTin++ 1.90.0
---------------
01) ! will repeat the last command starting with that argument.
score
who all
area
! --> repeats area
!w --> repeats who all
!s --> repeats score
!ll --> sends !ll as a command
TinTin++ 1.89.0
---------------
01) #HIGHLIGHT is now parsed as: #HIGHLIGHT {string} {color}. You can
combine several colors by separating them by semicolons. The color
argument can be a color code. See #HELP COLORS.
02) $result is now a default variable that can be used in #FUNCTION.
#function dosomething {#math result 1 + 1}
say @dosomething{} will print 2, the #RESULT command has been removed.
It's possible to use #return to exit the function and at the same
time set the result variable.
03) #MATH and #IF support 64 floating point arithmatic expressions. They also
support strings, which must be enclosed in quotes. See #HELP MATH for more
information.
TinTin++ 1.88.0
---------------
01) #FORMAT has been introduced and replaces a wide variety of commands.
02) #MESSAGE, #CONFIG, #IGNORE, #DEBUG are all you need to configure tintin,
changes made with #CONFIG are written to file with #WRITE.
03) The old walk code has been removed, instead you can use the #PATH command.
04) #TICK has been changed quite a bit, new commands: #TICK and #UNTICK, you
can have as many tickers as you want. The old #TICK command is gone.
Syntax: #TICK {name} {commands} {seconds to tick}
The name is added so you can delete it. You will no longer receive spam,
but with a little bit of creativity you can rebuild the old tintin ticker
spam.
Use #READ to load the following ticker which emulates old behavior:
#tick {oldtick}
{
#delay 50 #showme #10 SECONDS TO TICK!!;
#showme #TICK!!!
}
{60}
05) #READ now supports multiline triggers, it also checks the nesting level
before doing anything so you don't end up with bogus, and trims leading
spaces/tabs. Make sure to remove non matching { }'s from #NOP comments,
cause it will (and should) create error messages. The error message
will try to inform you on what line the error occured.
06) Added #MACRO for macro support.
07) Defaults are no longer in a default .rc file.
08) Can now have multiple prompt triggers, the 2nd argument is the substitution
string that works the same as #SUBSTITUTE. the 3rd argument is the row the
line should be printed on, if left blank it picks the default split line.
09) All settings are inherited from the startup session when creating a new
session.
10) A scrollback buffer has been added, which can be browsed with page up,
page down, and the #GREP and #BUFFER command.
tintin-2.02.20/README 0000664 0000000 0000000 00000002405 14216112057 0014042 0 ustar 00root root 0000000 0000000 ABOUT
TinTin++ is a command line MUD client which features support for TELNET,
PCRE, UTF-8, SSL, VT100, IPv6, the dynamic TINTIN scripting language,
a comprensive trigger system, and several other features geared towards
mudding, scripting, shell-scripting, text processing, automation,
interprocess communication, redirection, xterm terminal emulation, and
multiplexing / demultiplexing.
INFO
You'll find answers to common questions in the FAQ and INSTALL documents. A
brief introduction to using TinTin++ is available in the docs/tintin19.txt,
docs/manual.html, and docs/syntax.txt documents. The SCRIPTS document
contains a variety of example scripts.
The NEWS document contains important announcements and a list of changes
that impact backward compatibility with older versions. A more detailed
list of changes can be found in the mods/igr.mods document.
CONTACT
Easiest is to register on the forum or discord channel linked from the
website if you have questions about using TinTin++. If you need to get
in touch with one of the contributors check the CREDITS file.
LICENSE
TinTin++ is licensed under GPL 3, see the COPYING file for details.
COPYRIGHT
Copyright 2004-2020 Igor van den Hoven
WEBSITE
https://tintin.mudhalla.net
tintin-2.02.20/SCRIPTS 0000664 0000000 0000000 00000052467 14216112057 0014251 0 ustar 00root root 0000000 0000000 #nop -------------------------------------------------------------------------
#nop Learn by example
#nop -------------------------------------------------------------------------
#nop -------------------------------------------------------------------------
#nop Loop through room 1 to 1000 and change the color of rooms with the
#nop static (16) flag to <168>.
#nop -------------------------------------------------------------------------
#loop 1 1000 vnum
{
#map at $vnum
{
#map get roomflags result;
#if {$result & 16}
{
#map set roomcolor <168>
}
}
}
#nop -------------------------------------------------------------------------
#nop Capture system information. #script stores the output as a list,
#nop hence the need to convert it into a normal variable.
#nop -------------------------------------------------------------------------
#script {dir} {pwd}
#var dir $dir[1]
#script {home} {echo $HOME}
#var home $home[1]
#nop -------------------------------------------------------------------------
#nop Automatically reconnect on disconnect.
#nop -------------------------------------------------------------------------
#event {SESSION CONNECTED}
{
#event {SESSION DISCONNECTED}
{
#gts #delay 5 {#session %0 %1 %3}
}
}
#nop -------------------------------------------------------------------------
#nop Execute a random social at random time intervals.
#nop -------------------------------------------------------------------------
#tick {randomsocial}
{
#delay {1d180}
{
#switch {1d4}
{
#case {1} {cheer}
#case {2} {greet all}
#case {3} {smile}
#case {4} {laugh self}
}
}
}
{200}
#nop -------------------------------------------------------------------------
#nop Maintain a friendlist. %i creates a case insensitive regex.
#nop -------------------------------------------------------------------------
#variable {friendlist}
{
{bubba};{pamela};{cookie};{harry potter}
}
#function isfriend
{
#return &friendlist[%i%0];
}
#act {%1 follows you.}
{
#if {@isfriend{%1}}
{
group %1
};
#else
{
unfollow %1
}
}
#alias {addfriend}
{
#format name %l {%0};
#var friendlist[$name] {};
#showme $name has been added to your friendlist.
}
#alias {delfriend}
{
#format name %l {%0};
#if {@isfriend{$name}}
{
#unvar friendlist[$name];
#showme $name has been deleted from your friendlist.
};
#else
{
#showme $name is not on your friendlist.
}
}
#nop -------------------------------------------------------------------------
#nop Append a goto to your current room when saving a map. You can use
#nop #map return instead.
#nop -------------------------------------------------------------------------
#alias {savemap}
{
#map write %0;
#map get roomvnum room;
#system echo '#map goto $room' >> %0
}
#nop -------------------------------------------------------------------------
#nop Log all text to a file with a timestamp with decisecond precision.
#nop -------------------------------------------------------------------------
#function {timestamp}
{
#format utime {%U};
#format result {%t.%m} {%Y-%m-%d %H:%M:%S} {$utime % 1000000 / 100000}
}
#event {RECEIVED LINE}
{
#line log mylog.txt {<178>@timestamp{} \};
#line log mylog.txt
}
#nop -------------------------------------------------------------------------
#nop Old school tick support.
#nop -------------------------------------------------------------------------
#tick {oldtick}
{
#delay 50 #showme #10 SECONDS TO TICK!!;
#showme #TICK!!!
}
{60}
#alias {ticklist}
{
#info tickers save;
#echo {<128>%+20s %+20s %+20s} {Name} {Interval} {Remaining};
#draw Yellow scroll line 1 1 1 62;
#format utime %U;
#loop 1 &info[TICKERS][] index
{
#math uval $info[TICKERS][+$index][arg3] * 1000000;
#echo {%+20s %+20s %+20m}
{$info[TICKERS][+$index][arg1]}
{$info[TICKERS][+$index][arg3]}
{($uval - ($utime - $info[TICKERS][+$index][arg4]) % $uval) / 1000000.00}
}
}
#nop -------------------------------------------------------------------------
#nop Execute speedwalks with .
#nop -------------------------------------------------------------------------
#alias {.%0}
{
#var cnt {};
#parse {%0} {char}
{
#if {"$char" >= "0" && "$char" <= "9"}
{
#var cnt $cnt$char
};
#elseif {"$cnt" == ""}
{
#send $char
};
#else
{
#$cnt #send $char;
#var cnt {}
}
}
}
#nop -------------------------------------------------------------------------
#nop Targetting script
#nop -------------------------------------------------------------------------
#var targets {}
#alias {target}
{
#if {"%0" == ""}
{
#showme {Current targets: $targets[]}
};
#elseif {&targets[%0]}
{
#unvar targets[%0];
#showme Target '%0' removed.
};
#else
{
#var targets[%0] {};
#showme Target '%0' added.
}
}
#act {%1 arrives}
{
#if {&targets[%1]} {kill %1}
}
#act {%1 is standing here}
{
#if {&targets[%1]} {kill %1}
}
#action {%1 is dead! R.I.P.}
{
#if {&targets[%1]} {target %1}
}
#nop -------------------------------------------------------------------------
#nop Show xterm 256 colors.
#nop -------------------------------------------------------------------------
#var temp {}
#foreach {0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15} {var1}
{
#showme {$var1 \e[38;5;${var1}m}
}
#foreach {a;b;c;d;e;f} {var1}
{
#foreach {a;b;c;d;e;f} {var2}
{
#foreach {a;b;c;d;e;f} {var3}
{
#var temp {$temp <$var1$var2$var3><<888>$var1$var2$var3>}
};
#showme $temp;
#var temp {}
}
}
#loop 0 23 cnt
{
#format temp {$temp <<888>g%+02s} {$cnt} {$cnt};
}
#showme $temp
#nop -------------------------------------------------------------------------
#nop Draw a health bar.
#nop -------------------------------------------------------------------------
#alias {hpbar}
{
#math {hp_percent}{100 * %1 / %2};
#math {hpbars1} {$hp_percent / 5};
#math {hpbars2} {20 - $hpbars1};
#format {hpbar} {<011>%+${hpbars1}s<099><000>%+${hpbars2}s<099> };
#showme [$hpbar]
}
#alias {test}
{
hpbar 30 100
}
#nop -------------------------------------------------------------------------
#nop Syntax: sleep {commands}
#nop
#nop If there is already a pending sleep the delay will be stacked.
#nop -------------------------------------------------------------------------
#var sleeptime 0
#var sleepcurr 0
#alias {sleep %1 %2}
{
#format sleeptime %U;
#if {$sleeptime > $sleepcurr}
{
#math sleepcurr $sleeptime + (%1) * 1000000;
#delay {%1} %2;
};
#else
{
#math sleepcurr $sleepcurr + (%1) * 1000000;
#delay {($sleepcurr - $sleeptime) / 1000000.000} %2
}
}
#nop -------------------------------------------------------------------------
#nop This function and substitution will highlight spelling errors as red.
#nop -------------------------------------------------------------------------
#function spellcheck
{
#format result %S %1;
#if {$result == 0}
{
#var result %1
};
#else
{
#var result <118>%1<900>
}
}
#substitute {{\b[a-zA-Z]+\b}} {@spellcheck{%1}}
#nop -------------------------------------------------------------------------
#nop This function and substitution will add a speed reader to the split line
#nop -------------------------------------------------------------------------
#split
#function spellcheck
{
#format result %S %1;
#if {$result == 0}
{
#var result %1
};
#else
{
#var result <118>%1<900>
};
#list speedread ins -1 {$result}
}
#substitute {{\b[a-zA-Z]+\b}} {@spellcheck{%1}}
#tick {speedread}
{
#if {&{speedread[]}}
{
#draw tile -2 1 -2 20 {$speedread[1]};
#list speedread delete 1
}
}
{0.1}
#nop -------------------------------------------------------------------------
#nop This function tests the random number engine
#nop -------------------------------------------------------------------------
#alias random
{
#var random {};
#loop 1 1000 cnt
{
#math tmp 1d1000000000 % 10;
#math random[$tmp] $random[$tmp] + 1
};
#var random
}
#nop -------------------------------------------------------------------------
#nop This macro allows pasting multi-line code fragments on pressing ctrl-v
#nop -------------------------------------------------------------------------
#macro {\cv}
{
#cursor {convert meta} on;
#line oneshot #event {CATCH RECEIVED INPUT}
{
#line sub {esc} #var paste {%0};
#replace paste {\\n\\n} {;};
#replace paste {\\n} {};
#replace paste {\\t} {};
#replace paste {;;} {;};
#1 {$paste}
}
}
#nop -------------------------------------------------------------------------
#nop This macro allows pasting multi-line code fragments on pressing ctrl-v
#nop followed by pressing ctrl-enter
#nop -------------------------------------------------------------------------
#macro {\e[13;5u}
{
#cursor get tmp;
#cursor home;
#cursor set {#line sub esc };
#cursor enter
}
#nop -------------------------------------------------------------------------
#nop This event will cause tintin to always report your screen width as 80
#nop columns
#nop -------------------------------------------------------------------------
#event {CATCH IAC DO NAWS}
{
#screen get rows ROWS;
#format ROWS %a $ROWS;
#send {\xFF\xFB\x1F\xFF\xFA\x1F\x50\x00${ROWS}\x00\xFF\xF0\}
}
#nop -------------------------------------------------------------------------
#nop Remove duplicate lines and add a counter. Does not work in gts because
#nop it uses named delays.
#nop -------------------------------------------------------------------------
#var repeat[str] {}
#var repeat[cnt] 1
#act {~%+}
{
#if {{%0} === {$repeat[str]}}
{
#math repeat[cnt] $repeat[cnt] + 1;
#delay {repeat} {repeat_show} {0}
};
#else
{
repeat_show;
#var repeat[str] {%0}
};
#line gag
}
#alias {repeat_check}
{
#if {$repeat[cnt] <= 1}
{
#line ignore #showme {$repeat[str]}
};
#else
{
#line ignore #showme {($repeat[cnt]) %0}
};
#var repeat[str] {};
#var repeat[cnt] 1
}
#nop -------------------------------------------------------------------------
#nop These macros will allow you to move around with the arrow keys while
#nop holding down the control key. You can move ne by pressing arrow up +
#nop right simultaniously. Move up by pressing arrow up + down simultaniously.
#nop Move down by pressing arrow left + right simultaniously.
#nop -------------------------------------------------------------------------
#macro {\e[1;5A} {#cursor macro preserve;#delay {move} {#cursor macro reset;n} {0.05}}
#macro {\e[1;5C} {#cursor macro preserve;#delay {move} {#cursor macro reset;e} {0.05}}
#macro {\e[1;5B} {#cursor macro preserve;#delay {move} {#cursor macro reset;s} {0.05}}
#macro {\e[1;5D} {#cursor macro preserve;#delay {move} {#cursor macro reset;w} {0.05}}
#macro {\e[1;5A\e[1;5A} {#undelay {move};#cursor macro reset;n;n}
#macro {\e[1;5C\e[1;5C} {#undelay {move};#cursor macro reset;e;e}
#macro {\e[1;5B\e[1;5B} {#undelay {move};#cursor macro reset;s;s}
#macro {\e[1;5D\e[1;5D} {#undelay {move};#cursor macro reset;w;w}
#macro {\e[1;5A\e[1;5B} {#undelay {move};#cursor macro reset;u}
#macro {\e[1;5B\e[1;5A} {#undelay {move};#cursor macro reset;u}
#macro {\e[1;5C\e[1;5D} {#undelay {move};#cursor macro reset;d}
#macro {\e[1;5D\e[1;5C} {#undelay {move};#cursor macro reset;d}
#macro {\e[1;5A\e[1;5C} {#undelay {move};#cursor macro reset;ne}
#macro {\e[1;5C\e[1;5A} {#undelay {move};#cursor macro reset;ne}
#macro {\e[1;5B\e[1;5C} {#undelay {move};#cursor macro reset;se}
#macro {\e[1;5C\e[1;5B} {#undelay {move};#cursor macro reset;se}
#macro {\e[1;5D\e[1;5B} {#undelay {move};#cursor macro reset;sw}
#macro {\e[1;5B\e[1;5D} {#undelay {move};#cursor macro reset;sw}
#macro {\e[1;5D\e[1;5A} {#undelay {move};#cursor macro reset;nw}
#macro {\e[1;5A\e[1;5D} {#undelay {move};#cursor macro reset;nw}
#nop -------------------------------------------------------------------------
#nop Place tells in the top 5 lines of the screen
#nop -------------------------------------------------------------------------
#VARIABLE {COMMS} {}
#ACTION {~%1 tells you %2}
{
addtowin %1 tells you %2
}
#ACTION {~%1 chats %2}
{
addtowin %1 chats %2
}
#ALIAS {addtowin}
{
#format temp {%w} {%0};
#loop {1} {&temp[]} {cnt}
{
#list COMMS ins -1 {$temp[$cnt]}
};
#while {&COMMS[] > 100}
{
#list COMMS del 1
};
showwin
}
#ALIAS {showwin}
{
#screen clear square 1 1 5 -1;
#list temp create $COMMS[-5..-1];
#loop {1} {&temp[]} {cnt}
{
#regexp {$temp[$cnt]} {^$}
{
#nop
};
#else
{
#line ignore #showme {$temp[$cnt]} {$cnt} {1}
}
}
}
#ALIAS {test}
{
#split 5 1;
#showme <138>Bubba tells you 'hello';
#showme <158>Pamela chats 'bye';
}
#nop -------------------------------------------------------------------------
#nop Display two sessions next to each other
#nop -------------------------------------------------------------------------
#event {SCREEN RESIZE}
{
#var ROWS %0;
#var COLS %1;
#draw line 1 {$COLS / 2} -3 {$COLS / 2};
#left #screen scroll 1 1 -3 {$COLS / 2 - 1};
#right #screen scroll 1 {$COLS / 2 + 1} -3 -1;
}
#event {PROGRAM START}
{
#screen raise SCREEN RESIZE;
#ses right localhost 4321;
#ses left localhost 4321;
}
#event {SESSION CREATED}
{
#var name %0;
}
#event {SESSION ACTIVATED}
{
#gts #var active %0;
}
#event {RECEIVED OUTPUT}
{
#if {"@gts{$active}" == "$name"}
{
#return;
};
#switch {"$name"}
{
#case {"left"} {#draw Red boxed foreground buffer 1 1 -3 {$COLS / 2 - 1};};
#case {"right"}{#draw Red boxed foreground buffer 1 {$COLS / 2 + 1} -3 -1};
};
}
#nop -------------------------------------------------------------------------
#nop Follow the group leader on the map.
#nop -------------------------------------------------------------------------
#var short_dir
{
{north}{n}
{northeast}{ne}
{east}{e}
{southeast}{se}
{south}{s}
{southwest}{sw}
{west}{w}
{northwest}{nw}
}
#action {%1 walks %2.$}
{
#var {follow_targets[%1]} {$short_dir[%2]}
}
#action {^You follow %1.$}
{
#if {&follow_targets[%1]}
{
#map move $follow_targets[%1]
}
}
#nop -------------------------------------------------------------------------
#nop Use mouse click to change the input cursor's position.
#nop -------------------------------------------------------------------------
#config mouse on
#split
#event {SHORT-CLICKED MOUSE BUTTON ONE -1}
{
#cursor position %1
}
#nop -------------------------------------------------------------------------
#nop Move the VT100 map from the top to the right of the screen
#nop -------------------------------------------------------------------------
#map create
#map flag vtmap
#map flag unicode
#map goto 1
#split 0 1 0 -80;
#map offset 1 82 -5 -1
#screen resize horizontal 120
#nop -------------------------------------------------------------------------
#nop Add clickable session tabs at the top of the screen
#nop -------------------------------------------------------------------------
#event {PROGRAM START}
{
#split 3 1;
#config mouse on;
#var active gts;
session_activated gts;
}
#event {SESSION CREATED}
{
#gts session_activated %0
}
#event {SESSION ACTIVATED}
{
#gts session_activated %0
}
#alias {session_activated}
{
#line sub esc #var sessions[$active] {<138>\e]68;2;TABS;#$active\a\e[4;24m$active\e[24m};
#var active {%0};
#line sub esc #var sessions[%0] {<128>\e]68;2;TABS;#nop\a\e[4;24m%0\e[24m};
#draw foreground Azure table 1 1 3 -1 {$sessions[%*]}
}
#event {PRESSED SECURE LINK TABS MOUSE BUTTON ONE}
{
%4
}
#nop -------------------------------------------------------------------------
#nop Add basic MXP link and color handling
#nop -------------------------------------------------------------------------
#config mouse on
#event {IAC DO MXP}
{
#send {\xFF\xFB\x5B\}
}
#function {mxp_link}
{
#line sub esc #var result {\e]68;1;%1;%2\a\e[4m%3\e[24m}
}
#act {~\e[1z} {#send {\e[4z}}
#act {~\e[1z} {#send {\e[4z}}
#sub {~\e[4z%2\e[4z} {%2<900>}
#sub {~\e[4z%2\e[4z} {@mxp_link{MXP;%1;%2}}
#event {PRESSED LINK MXP MOUSE BUTTON ONE}
{
#send {%4}
}
#sub {~\e[4z{|||||||}} {}
#sub {~\e[4z} {}
#sub {<} {<}
#sub {>} {>}
#nop -------------------------------------------------------------------------
#nop Example script for using #list indexing.
#nop -------------------------------------------------------------------------
#var players[1] {{name}{bubba}{age}{15}{level}{24}}
#var players[2] {{name}{pamela}{age}{19}{level}{2}}
#var players[3] {{name}{ronald}{age}{69}{level}{13}}
#var players[4] {{name}{bubba}{age}{26}{level}{30}}
#var players[5] {{name}{ronald}{age}{11}{level}{31}}
#alias {display}
{
#var out {};
#loop 1 &players[] cnt
{
#var out[$cnt] {$cnt;$players[+$cnt][name];$players[+$cnt][age];$players[+$cnt][level]};
};
#draw scroll grid table 1 1 2+&players[]*2 80 $out[%*]
}
#alias {test1}
{
#list players index name;
#list players order;
display
}
#alias {test2}
{
#list players index name;
#list players order;
#list players reverse;
display;
}
#alias {test3}
{
#list players index name;
#list players order;
#list players index level;
#list players order;
display
}
#nop -------------------------------------------------------------------------
#nop This creates two input lines that can be switched between using the tab
#nop key.
#nop -------------------------------------------------------------------------
#line quiet #split
#macro {\t} {inputswitch}
#var input[width] 1
#alias {inputswitch}
{
#cursor get {input[current]};
#cursor clear;
#cursor set {$input[buffer2]};
#cursor end;
#var input[buffer2] {$input[current]};
#draw Ebony tile {-1-$input[width]} 1 -2 -1 {$input[buffer2]}
}
#nop -------------------------------------------------------------------------
#nop This allows for split screen scroll back, just use the mouse wheel in
#nop the upper half of the screen.
#nop -------------------------------------------------------------------------
#event {PROGRAM START}
{
#config mouse on;
#var SCROLL[MODE] 0;
#split 0 1;
#screen raise SCREEN RESIZE;
}
#event {SCREEN RESIZE}
{
#var ROWS %0;
#var COLS %1;
#screen get SCROLL_TOP_ROW SCROLL[TOP_ROW];
#screen get SCROLL_TOP_COL SCROLL[TOP_COL];
#screen get SCROLL_BOT_ROW SCROLL[BOT_ROW];
#screen get SCROLL_BOT_COL SCROLL[BOT_COL];
}
#EVENT {SCROLLED MOUSE WHEEL UP}
{
#if {$SCROLL[MODE] == 0}
{
#if {%0 < $ROWS / 2}
{
#var SCROLL[MODE] 1;
#var SCROLL[OLD_ROW] $SCROLL[BOT_ROW];
#math SCROLL[BOT_ROW] $SCROLL[OLD_ROW] / 2;
#var BUFFER {};
#screen scroll $SCROLL[TOP_ROW] $SCROLL[TOP_COL] $SCROLL[BOT_ROW] $SCROLL[BOT_COL];
#draw red teed line $SCROLL[BOT_ROW]+1 $SCROLL[TOP_COL] $SCROLL[BOT_ROW]+1 $SCROLL[BOT_COL];
#screen clear square $SCROLL[BOT_ROW]+2 $SCROLL[TOP_COL] $SCROLL[OLD_ROW] $SCROLL[BOT_COL];
};
};
#if {$SCROLL[MODE] == 1}
{
#buffer up 1
}
}
#EVENT {SCROLLED MOUSE WHEEL DOWN}
{
#if {$SCROLL[MODE] == 1}
{
#if {%0 < $ROWS / 2}
{
#buffer down 1;
#buffer info save SCROLL[INFO];
#if {$SCROLL[INFO][LINE] == -1}
{
#var SCROLL[MODE] 0;
#var SCROLL[BOT_ROW] $SCROLL[OLD_ROW];
#split 0 1;
#buffer end;
}
}
}
}
#event {RECEIVED LINE}
{
#if {$SCROLL[MODE] == 1}
{
#if {&BUFFER[] > $ROWS}
{
#list BUFFER del 1
};
#list BUFFER add {%0};
#draw tile $SCROLL[BOT_ROW]+2 $SCROLL[TOP_COL] $SCROLL[OLD_ROW] $SCROLL[BOT_COL] $BUFFER[%*];
}
}
#nop -------------------------------------------------------------------------
#nop This is a script to connect to Gemstone 4.
#nop Visit play.net/gs4, login, and hit the 'GO PLAY' button.
#nop Select the Storm Front radio button and hit the 'GO PLAY' button.
#nop Save the .sal file to your script directory and name it gemstone.sal.
#nop Use the 'gemstone' alias to connect.
#nop -------------------------------------------------------------------------
#alias {gemstone}
{
#var gemstone {};
#line oneshot #action {^GAMEHOST=%*} {#var gemstone[host] %%1};
#line oneshot #action {^GAMEPORT=%*} {#var gemstone[port] %%1};
#line oneshot #action {^KEY=%*} {#var gemstone[key] %%1};
#scan txt gemstone.sal;
#if {&gemstone[] != 3}
{
#showme Failed to load gemstone.sal file.;
#return
};
#ses gemstone $gemstone[host] $gemstone[port];
#send {$gemstone[key]};
#send {>/FE:JAVA}
}
#nop -------------------------------------------------------------------------
#nop Start a dated log file in the logs directory when a session connects. See
#nop #help time for the available date options for #format %t.
#nop -------------------------------------------------------------------------
#event {SESSION CONNECTED}
{
#format date %t %Y-%m-%d-%H-%M;
#log append logs/%0_$date.log
}
#nop -------------------------------------------------------------------------
#nop Sometimes an error doesn't give enough information and it's useful to
#nop see the calling script.
#nop -------------------------------------------------------------------------
#event {RECEIVED ERROR}
{
#echo <118>%h { TOKENIZER };
#info tokenizer -1;
#echo <118>%h
}
#nop -------------------------------------------------------------------------
#nop
#nop -------------------------------------------------------------------------
#nop -------------------------------------------------------------------------
#nop
#nop -------------------------------------------------------------------------
#nop -------------------------------------------------------------------------
#nop
#nop -------------------------------------------------------------------------
#nop -------------------------------------------------------------------------
#nop
#nop -------------------------------------------------------------------------
tintin-2.02.20/TODO 0000664 0000000 0000000 00000017473 14216112057 0013665 0 ustar 00root root 0000000 0000000 - make #draw talign+balign do a vertical calign
lalign+ralign do a horizontal calign
- make -g mode not write to disk
- look into #draw boxed map with unicode mode.
- Display room symbol in #map info
- Add nohup mode
ne room has #map set roomsymbol {/},
e room has #map set roomsymbol {------}
se room has #map set roomsymbol {\\}
----------------
- add shadow session support with access to all events.
- set_line_screen debug: col = -5 (64) from draw_text(%p,%d,%p,%p,%p)
- regex101 like regex tester
- check: #var bla { x};#draw scroll box 1 1 3 40 $bla
- set_line_screen stack call triggered on android
- input spell checking, #cursor display ?
- look into named actions as a 4th argument
- Get discworld / aardwolf mxp to work for @sentix
- look into default input color
- add ctrl-r support for scrollback
- Add #event {SESSION CONNECTED} {5.1} option.
- TT++ HANDBOOK for meticulous organized details.
- vertical bar drawing
- error: cursor_check_line_modified1:
- https://tintin.sourceforge.io/forum/viewtopic.php?f=10&t=2811 (possible
issue with initiating input buffer for a new session)
- finish BUFFER_SIZE replacement.
- WSL sound, double check soundpack scripts for lag/stutter
- WSL faq: #system cmd.exe /c start notepad
- update msdp scripts with #line msdp feature
- #cursor get word option, maybe get the yank buffer as well.
- Add a way to set env variables either 1) for the current process, and/or 2) as a parameter to #system (i.e. after fork in the child process).
* STUFF THAT IS PROBABLY GONNA GET DONE
- #line timeshot to auto destroy a trigger after given interval.
- make named delays proper delays
- Finish port proxy support: resizing, input, security
- look into transparent drawing
- Add #line gag 2 +2 -2 support.
- VT2020
- mouse enter/leave events on move. hoover/long-press.
- $var[%*][%*] support.
- better #draw font support
- tab completion on directory structure.
- auto align routine that inserts void rooms where needed
- look into writing script to drag rooms + void with mouse
- pancake mode to display rooms at all levels and annotations
- Store the map filename to differentiate between maps.
- #map list {} breaks on rooms that have e mapped to eu.
- finish landmarks
- map sandbox mode support (flags to disable saving?)
- add ghosting to fix #map flag nofollow exit cmd issues?
- Request: 'stop' #map center command, so i could see how the 'user' moves, rather map moves around him?
- #map uninsert
- make map spacing easier
- event for failed #map move.
- look into #send triggering follow map.
- add {roomdata} search to #map list
- Make actions with a priority of 0. trigger always
- #draw table {1;2;3;4} {a;b;c;d}
#draw scrollbar
#draw graph
#draw button
#draw titanic
- Make { match both a { and \x7B as it's an annoying issue to debug.
- Add VT100 filter to make outside sources respect terminal size constraints, also needed to run bash in vsplit mode.
- Remote script loading
- add class specific debug
- better class event and class size handling ?
- more potent long-click handling including held down ticks.
- look into discord api / arachnos
- better color syntax highlighting configuration.
- See about adding SESSIONS to the list table.
- Add debugger to syntax highlighter, substitution highlighing, 256 color support, and variable expansion.
- fix readmud in net.c to not move the cursor on inactive sessions.
- add packets patched counter
- reportable_sounds
- TELNET documentation.
- Add JSON support to #scan
- see if #break 2 is possible, maybe #continue 2 as well.
- http://tintin.sourceforge.net/board/viewtopic.php?t=2339 (map area data)
- IPv6 for chat
- http://tintin.sourceforge.net/board/viewtopic.php?p=9109 (vt102 strip \e[2J\e[H )
- http://tintin.sourceforge.net/board/viewtopic.php?p=8766#8766 (global verbose toggle?)
- See about adding ~/ handling for file names.
- Look into adding basic EUC-KR support.
--------------------------------------------------------------------------------
* LOW PRIORITY
- ./configure might error on /dev/ptmx
- Add a file handler.
- multi-line buffer searches / captures / deletes
- multi-line triggers (use nested actions?)
- add color based auto unwrap routine.
- Start of line anchors aren't working in #replace.
- add #history filter option to filter out 1 letter commands.
- Look into config option to change the working directory
--------------------------------------------------------------------------------
* ROADMAP
- dictionary +tabbing
- editor
- clickable link support
- tintin commander
- sixel graphics
- windowing
- blind automapping
- better attach/detach
- GUI mode
- Braille handling
- Allow converting tt++ scripts to C.
- session proxies
--------------------------------------------------------------------------------
* STUFF THAT MIGHT BE IMPLEMENTED
- ability to #read entire directories.
- fix ctrl-r ctrl-d / ctrl-c / enter
- Option to run #script in background.
- Make &0 to &99 local.
- Color compression (already partial support)
- SGA disabling
- BINARY TELOPT support.
- add #line gag {lines} option
- Add something like #log append $dir/logs/log.txt {%D %H:%M:%S}
- compact map view mode http://tintin.sourceforge.net/board/viewtopic.php?p=9994
- https://github.com/eliukblau/pixterm
--------------------------------------------------------------------------------
* BUGS THAT NEED FIXING
- Word wrap related scroll back problems.
- Crash on multiple session close
- \x7B\x7D_____\x7B\x7D_ doesn't match in #regex.
--------------------------------------------------------------------------------
* BUGS THAT MIGHT NEED FIXING
- http://tintin.sourceforge.net/board/viewtopic.php?p=7124
- There's a bug with prompt repetitions with packet patch set.
- Deal with escaping { } / ; in #script variables.
- Make tintin char setting by session instead of global.
- #cr doesn't reset the packet patch state
+ tintin.sourceforge.net/board/viewtopic.php?t=36
--------------------------------------------------------------------------------
* MAPPING
- add option to show party members on the map
- map where command that shows relative coordinates.
- Add better table support for data fields.
- auto adjust max vnum size of mapper.
- global flag to only show the same area with the mapper.
- Add something to indicate a non standard exit on the ASCII mapper.
- Display hidden exits differently.
- Better #map undo support using maybe timestamp, type, info.
- Add conditional if checks for room traversal.
- add highlight option
- Add #V version info
--------------------------------------------------------------------------------
* STUFF FOR A RAINY DAY
- Fix up IPv6 support in port/chat.
- Look into packet defragmentation for chat.
- Look into using speech-dispatcher for text to speech.
- Add %U (upper) %L (lower) support.
check https://www.boost.org/doc/libs/1_50_0/libs/regex/doc/html/boost_regex/syntax/basic_extended.html
- cursor extension for vim
- interactive script tutorial
-------------------------------------------------------------------------------
* STUFF I'M NOT SURE ABOUT
- Keep last input visible with repeat enter enabled.
-------------------------------------------------------------------------------
* STUFF THAT WON'T BE IMPLEMENTED
- Lua or any other scripting language, focus is on developing tintin scripting.
-------------------------------------------------------------------------------
* ISSUES
- TinTin++ only allows 1 action triggering per line.
- TinTin++ probably should substitute escapes in if checks.
- TinTin++ is not handling #return inside #regex intuitively.
tintin-2.02.20/docs/ 0000775 0000000 0000000 00000000000 14216112057 0014111 5 ustar 00root root 0000000 0000000 tintin-2.02.20/docs/chat_protocol.txt 0000664 0000000 0000000 00000020435 14216112057 0017516 0 ustar 00root root 0000000 0000000 Mud Master Chat Protocol
Establishing a Connection
Caller: Once a connection is made the caller sends a connection string;
which looks like: "CHAT:\n". The sprintf
syntax is: "CHAT:%s\n%s%-5u". The port must be 5 characters, padded on the
right side with spaces. Once this string has been sent it waits for a
response from the other side. If a "NO" is received the call is cancelled.
If the call was accepted the string "YES:\n" is received.
Receiver
When a socket call is detected it accepts the socket then waits
for the "CHAT:" string to be send from the caller. If the receiver wishes
to deny the call, the string "NO" needs to be sent back to the caller. To
accept the call, the string "YES:\n" is sent back.
Chat Data Blocks
A chat data block looks like this: .
All data dealing with needs to follow this format with a couple exceptions.
The connection process doesn't use the data blocks and the file transfer
blocks are a fixed size and don't need the byte.
Default Port
The default port should always be 4050.
Below is a list of the values:
#define CHAT_NAME_CHANGE 1
#define CHAT_REQUEST_CONNECTIONS 2
#define CHAT_CONNECTION_LIST 3
#define CHAT_TEXT_EVERYBODY 4
#define CHAT_TEXT_PERSONAL 5
#define CHAT_TEXT_GROUP 6
#define CHAT_MESSAGE 7
#define CHAT_DO_NOT_DISTURB 8
#define CHAT_VERSION 19
#define CHAT_FILE_START 20
#define CHAT_FILE_DENY 21
#define CHAT_FILE_BLOCK_REQUEST 22
#define CHAT_FILE_BLOCK 23
#define CHAT_FILE_END 24
#define CHAT_FILE_CANCEL 25
#define CHAT_PING_REQUEST 26
#define CHAT_PING_RESPONSE 27
#define CHAT_PEEK_CONNECTIONS 28
#define CHAT_PEEK_LIST 29
#define CHAT_SNOOP_START 30
#define CHAT_SNOOP_DATA 31
#define CHAT_END_OF_COMMAND 255
The byte is 255:
When a user changes their chat name the new name needs to be broadcast to
all of their connections.
The sender requests connections from another connection asking to see all the
people that person has marked as public, then try to connect to all of those
yourself.
,,,
The receiver needs to put all the ip addresses and port numbers in a comma
delimited string and send them back as a connection list.
Used to send some chat text to everybody. All the text you want to be
displayed needs to be generated on the sender's side, including the line
feeds and the " chats to everybody" string.
Receiver:
If the chat connection isn't being ignored, you simply print the
string. If you have any connections marked as being served you need to echo
this string to those connections. Or if this is coming from a connection
being served, you need to echo to all your other connections. This allows
people who cannot connect directly to each other to connect with a 3rd
person who *can* connect to both and be a server for them.
This works the same way as CHAT_TEXT_EVERYBODY as far as what you need to
send. The text should obviously be changed so the person receiving knows
this was a personal chat and not broadcast to everybody. "\n%s chats to
you, '%s'\n"
Receiver:
Just print the string that comes in if you aren't ignoring this connection.
Used when you send text to a specific group of connections. Works basically
the same as the other text commands. The group name is a 15 character
string. It *must* be 15 characters long, pad it on the right with spaces
to fill it out. "\n%s chats to the group, '%s'\n"
Receiver:
Just print the string that comes in if you aren't ignoring this
connection.
This is used to send a message to another chat connection. An example of
this is when you try to send a command (action, alias, etc) to another chat
connection and they don't have you flagged as accepting commands. In that
case a chat message is sent back to the sender telling them that command are
not being accepted. To let the other side know the message is generated
from the chat program it is a good idea to make the string resemble
something like: "\n %s is not allowing commands.\n"
Receiver: Just print the message string.
This is used to send your client's name and version.
This is sent to start sending a chat connection a file. The filename should
be just the filename and not a path. Length is the size of the file in
bytes.
Receiver:
First should check to make sure you are allowing files from this
connection. Make sure the filename is valid and that the length was
trasnmitted. MM by default won't allow you to overwrite files; which keeps
people from messing with file already in your directory. If for any reason
the data isn't valid or you don't want to accept files from this person a
CHAT_FILE_DENY should be sent back to abort the transfer. If you want to
continue with the transfer you need to start it off by requesting a block of
data with CHAT_FILE_BLOCK_REQUEST.
This is used when a CHAT_FILE_START has been received and you want to
prevent the transfer from continuing. is a string telling the
reason it was denied. For example, if the file already existed you might
deny it with: "File already exists."
Receiver:
Print the deny message. Deal with cleaning up any files you
opened when you tried to start the transfer.
Sent to request the next block of data in a transfer.
Receiver:
Need to create a file block to be sent back. File blocks are
fixed length so they don't need the CHAT_END_OF_COMMAND byte. If the end of
file is reached need to send a CHAT_FILE_END close up the files and let the
user know it is done sending.
A file block is 500 bytes. A file block is ALWAYS 500 bytes so no CHAT_END_OF_COMMAND should be added.
Receiver:
The receiver needs to keep track of the number of bytes written to
properly write the last block of data. If you keep track of the bytes
written you know when to expect that last block that probably doesn't have a
full 500 bytes to be saved. File transfers are receiver driven, so for each
block of data you accept, you need to send another CHAT_FILE_BLOCK_REQUEST
back out to get more data.
Close up your files and be done with it. This command isn't required for TinTin since it keeps track of the file transfer progress itself.
Either side can send this command to abort a file transfer in progress.
The timing data is up to the ping requester. TinTin sends a 64 bit time stamp.
Send back the timing data is the data that was sent with the CHAT_PING_REQUEST.
The sender requests connections from another connection asking to see all the
people that person has marked as public.
~~~
The receiver needs to put all the ip addresses, port numbers, and names in a
tilda delimited string and send them back as a peek list.
The sender requests to start or stop snooping data from a chat connection.
The Receiver decides whether to allow snooping or not.
Send by a client in snoop or forward mode. The message should be echoed by
the receiver, but not be further forwarded to avoid infinite loops. tintin-2.02.20/docs/ssl.txt 0000664 0000000 0000000 00000010161 14216112057 0015452 0 ustar 00root root 0000000 0000000 SERVER CONFIGURATION
--------------------
No changes are made to tintin or script configuration. The plan is to tunnel
an SSL connection to your #port or #chat port.
One problem is that redirected connections will appear to originate from
localhost. Fortunately tintin can handle this if needed.
You'll need to install the 'stunnel' package or download it from the
www.stunnel.org website. There is a Windows version of stunnel with
essentially the same interface.
You'll also need the 'openssl' package.
If you do this on Ubuntu the package might install the command as stunnel4
while stunnel calls stunnel3. Be mindful of that.
Create a directory to store the certificates, and the stunnel config file.
Create a self-signed certificate using openssl. For more info see:
http://www.stunnel.org/faq/certs.html
Switch to the directory where you want to store the certs, and then run the
command to generate a self-signed cert:
openssl req -new -x509 -days 3650 -nodes -out stunnel.pem -keyout stunnel.pem
It will prompt you for some information. The only thing you really need to
change from default, is the Common Name entry, which you should specify the
full hostname of your server, for example: server.domain.com
Do not enter a passphrase for the cert, otherwise you will be prompted to
enter this passphrase every single time you start stunnel.
Run chmod 660 stunnel.pem
Stunnel will fail if the permissions are not correct on the file.
Create the config file for stunnel4, for example tinssl.conf, and use the
following contents, adjusting where necessary:
Code: [Select]
foreground = no
pid=/home/user/.tintin/ssl/tinssl.pid
[tinssl]
accept=4051
cert=/home/user/.tintin/ssl/stunnel.pem
key=/home/user/.tintin/ssl/stunnel.pem
client=no
connect=localhost:4050
The foreground option - change this to 'yes' to keep stunnel in the foreground
initially. Useful to see errors. Specify the pid to a writable path, or set it
to "pid=" for no pid file. If you don't know what a pid file is you can leave
it blank.
The segment headed by [tinssl] is the service entry. The name is arbitrary,
and there can be multiple entries if you want more tunnels. "accept=4051" is
the port for stunnel to listen for connections. "client=no" is software
default - this specifies a server connection, so stunnel must listen on 4051
for SSL connections. "connect=localhost:4050" This specifies where stunnel
will direct the incoming SSL connection. In this case, to tintin's default
chat port.
Now run: stunnel4 tinssl.conf
It should disappear into the background, or if you set foreground=yes, you
will see the basic log.
Run "ps -aux|grep stunnel" to verify that stunnel is running. There will
probably be around 4 processes running (For some odd reason). For
Windows, you should have an icon in the system tray.
With tintin you can now connect to the port using the #ssl command. To
connect to a chat port you'd have to run the connection through another
stunnel proxy. If there are problems check the logs and verify you opened
the port on your firewall, etc.
CLIENT CONFIGURATION
--------------------
If you want to use an SSL connection over #chat you can set up stunnel in
client mode to connect to your new SSL proxy. In this case we'll use
Windows, but it's virtually identical on any supported platform.
Install stunnel for Windows.
Edit the stunnel config from the convenient menu entry. Leave everything as
is, and add a service entry at the bottom of the file:
Code: [Select]
[tinssl]
accept = 12345
connect = server.domain.com:4051
client = yes
"accept=12345" is the LOCAL port for stunnel to listen on.
"connect=server.domain.com:4051" is the SSL server to connect to, in this
case, your newly configured stunnel on your host server.
"client=yes" This is important, stunnel will NOT work properly if you do not
set client=yes here.
Run stunnel, and you will get a new icon in your systray. You can right-click
it and 'View Log' to see what's going on, if you like. Run tintin and create
a chat connection to localhost, port 12345 (or whatever you configured).
You should be momentarily connected to the given ssl server.
Special thanks to Vilentus for the original documentation.
tintin-2.02.20/docs/syntax.txt 0000664 0000000 0000000 00000027305 14216112057 0016207 0 ustar 00root root 0000000 0000000 CHARACTERS
----------
The following special characters are defined:
# The hashtag is the default character for starting a command and is
subsequently known as the command character or tintin character.
When loading a command file the command character is set to the
first character in the file. The character can also be redefined
using #config. It's adviced not to redefine the command character.
; The semi-colon is used as the command separator and can be used to
separate two commands. Multiple commands can be strung together as
well. Trailing semi-colons are ignored when reading a script file
as this is a common error.
{ } Curly brackets aka braces are used for seperating multi word command
arguments, nesting commands, and nesting variables. Braces cannot
be escaped using \{ \}, to escape { } use \x7B \x7D
" " Quote characters are used for strings in the #math, #if, #switch,
and #case commands. Instead of " " you can use an extra set of
braces { } to define strings, this is suggested if you are
expecting input to contain " characters.
! The exclamation sign is used to repeat commands, see #help history.
The character can be redefined using #config.
\ An input line starting with a backslash is send verbatim if you are
connected to a server. This character can be configured with
#config.
SUBSTITUTIONS
-------------
$&*@ All variable and function names must begin with an alphabetic
character, followed by any number of alphanumeric characters
and underscores.
$ The dollar sign is used to retrieve the value of a variable.
& The ampersand sign is used to retrieve the index of a variable.
* The astrix sign is used to retrieve the name of a variable.
@ The at sign followed by an alphanumeric string is used for functions.
[ ] Brackets are used for nested variables which function as an
associative array. Associative arrays are also known as tables and
maps. Regex can be used within brackets to match multiple variables.
Variables are ordered alphanumerically.
+ - The plus and minus sign is used to access variables by their index,
with the first variable having index 1, and the last variable
having index -1.
%0- %99 The percent sign followed by a number is used for arguments by the
following triggers:
alias, action, button, delay, event, function, substitute, and tick.
&0- &99 The ampersand sign followed by a number is used for arguments in the
regex and replace commands.
<000> Three alphanumeric characters encapsulated by the less- and greater-
than signs are used for 4 and 8 bit color codes.
<0000> Either a B (background) or F (foreground) followed by three
hexadecimal characters encapsulated by < > signs are used for 12
bit color codes. Requires truecolor capable terminal.
<0000000> Either a B (background) or F (foreground) followed by six
hexadecimal characters encapsulated by < > signs are used for 24
bit color codes. Requires truecolor capable terminal.
More information is available at #help color.
\ The back slash is used to escape a character. All available options
are listed at #help escape. Escapes are typically escaped when text
leaves the client, by being send to a server, the shell, or being
displayed on the screen. Escapes try to mimic escapes in PCRE when
possible.
\a 07 bell character.
\t 08 horizontal tab character.
\n 10 line feed character.
\v 11 vertical tab character.
\r 13 carriage return character.
\e 27 escape character.
\c 6 bit control character, \ca for ctrl-a.
\x 8 bit character using 2 hexadecimal numbers.
\u 16 bit unicode character, \uFFFD for example.
\U 21 bit unicode character, \U02AF21 for example.
All variables and functions can be escaped by doubling the sign,
like $$variable_name or @@function_name. To escape a variable
twice use $$$var_name. One escape is removed each time tintin
needs to substitute a variable or function.
All trigger arguments can be escaped by double the ampersand,
like %%1. One escape is removed each time tintin substitutes
trigger arguments.
All command arguments can be escaped by doubling the ampersand,
like &&1. One escape is removed each time tintin substitutes
command arguments.
COORDINATES
-----------
When the 0,0 coordinate is in the upper left corner TinTin++ uses
a y,x / rows,cols notation, starting at 1,1. Subsequently -1,-1
will indicate the bottom right corner. This type of argument is
used by the #showme command.
When the 0,0 coordinate is in the bottom left corner tintin uses
a standard x,y notation. This type of argument is used by the
#map jump command.
SQUARES
-------
A square argument takes 2 coordinates. The first coordinate defines
the upper left corner, the last two coordinates define the bottom
right corner. The upper left corner of the terminal is defines as
1,1 and the bottom right corner as -1,-1. This type of argument is
used by #draw, #button and #map offset.
PANES
-----
A pane argument takes 4 size values, which are: top pane, bottom
pane, left pane, right pane. When a negative value is provided the
size is the maximum size, minus the value. This type of argument
is used by the #split command.
MATH
----
Operators Priority Function
------------------------------------------------
! 0 logical not
~ 0 bitwise not
* 1 integer multiply
** 1 integer power
/ 1 integer divide
// 1 integer root
% 1 integer modulo
d 1 integer random dice roll
+ 2 integer addition
- 2 integer subtraction
<< 3 bitwise shift
>> 3 bitwise shift
> 4 logical greater than
>= 4 logical greater than or equal
< 4 logical less than
<= 4 logical less than or equal
== 5 logical equal (can use regex)
!= 5 logical not equal (can use regex)
=== 5 string equal
!== 5 string not equal
& 6 bitwise and
^ 7 bitwise xor
| 8 bitwise or
&& 9 logical and
^^ 10 logical xor
|| 11 logical or
? : The ? : symbols can be used for simple ternary operations.
M,K,m,u These four metric suffixes are allowed for numbers.
{ } Braces can be used in #math to perform string operations.
{a} > {b} This checks if the string "a" is greater than "b".
, Commas in numbers are ignored, as well as spaces and tabs.
. Dots can be used in #math to perform floating point calculations.
The precision is set to the highest precision number used in the
calculation.
( ) Braces can be used in #math to prioritize a calculation.
STATEMENTS
----------
TT++ has the following commands which behave like statements.
#break
#case {value} {true}
#continue
#default {commands}
#else {commands}
#elseif {expression} {true}
#foreach {list} {variable} {commands}
#if {expression} {true}
#loop {min} {max} {variable} {commands}
#parse {string} {variable} {commands}
#return {value}
#switch {expression} {commands}
#while {expression} {commands}
REGEX
-----
^ force match of start of line.
$ force match of end of line.
\ escape one character.
%1-%99 lazy match of any text, available at %1-%99.
%0 should be avoided in triggers, and if left alone lists all matches.
{ } embed a raw regular expression, matches are stored to %1-%99.
%!{ } embed a raw regular expression, matches are not stored.
[ ] . + | ( ) ? * are treated as normal text unlessed used within
braces. Keep in mind that { } is replaced with ( ) automatically
unless %!{ } is used.
Of the following the (lazy) match is available at %1-%99
%w match zero to any number of word characters.
%W match zero to any number of non word characters.
%d match zero to any number of digits.
%D match zero to any number of non digits.
%s match zero to any number of spaces.
%S match zero to any number of non spaces.
%? match zero or one character.
%. match one character.
%+ match one to any number of characters.
%* match zero to any number of characters.
%i matching becomes case insensitive.
%I matching becomes case sensitive (default).
ESCAPE
------
\a beep the terminal.
\c send a control character, \ca for ctrl-a.
\e start an escape sequence.
\n send a line feed.
\r send a carriage return.
\t send a horizontal tab.
\x print an 8 bit character using hexadecimal, \xFF for example.
\x7B send the '{' character.
\x7D send the '}' character.
\u print a 16 bit unicode character, \uFFFD for example.
\U print a 21 bit unicode character, \U02AF21 for example.
\v send a vertical tab
COLOR CODES
-----------
with x, y, z being parameters
Parameter 'x': VT100 code
0 - Reset all colors and codes to default
1 - Bold
2 - Dim
4 - Underscore
5 - Blink
7 - Reverse
8 - Skip (use previous code)
Parameter 'y': Foreground color
Parameter 'z': Background color
0 - Black 5 - Magenta
1 - Red 6 - Cyan
2 - Green 7 - White
3 - Yellow 8 - Skip
4 - Blue 9 - Default
For xterm 256 colors support use to for RGB foreground
colors and to for RGB background colors. For the grayscale
foreground colors use to , for grayscale background colors
use to .
The tertiary colors are as follows:
- Azure - Jade
- Violet - Lime
- Pink - Orange
Example: #showme Azure Jade Violet
Example: #showme Lime Pink Orange
For 12 bit truecolor use to for foreground colors and
to for background colors.
For 24 bit truecolor use to for foreground
colors and to for background colors.
HELP
----
[ ] Argument is optional.
< > Argument is required.
{ } Argument is literal.
| Used to separate arguments with multiple options.
tintin-2.02.20/docs/tintin19.txt 0000664 0000000 0000000 00000026662 14216112057 0016345 0 ustar 00root root 0000000 0000000
ooooooooooo ooooo oooo oooo ooooooooooo ooooo oooo oooo
88 888 88 888 8888o 88 88 888 88 888 8888o 88
888 888 88 888o88 888 888 88 888o88
888 888 88 8888 888 888 88 8888
o888o o888o o88o 88 o888o o888o o88o 88
ooo ooo
888 888
oooo888oooo oooo888oooo
888 888
888 888
Original documentation by Peter Unold
Table of Contents
-----------------
1) What is TinTin++? .............................
2) Giving Credit Where Credit is Due .............
3) Starting TinTin++ .............................
3) Basic Features ................................
4) Connecting to a MUD ...........................
5) Split Screen ..................................
6) Aliases .......................................
7) Actions .......................................
8) Highlights ....................................
9) Speedwalk .....................................
10) Tickers .......................................
11) Command Files .................................
12) Command History ...............................
13) Path Tracking .................................
14) Advanced Features .............................
15) Help ..........................................
T I N T I N ++
(T)he K(I)cki(N) (T)ick D(I)kumud Clie(N)t
========= What is TinTin++? =========
TinTin++ is a client program specialized to help playing muds. This is a
souped up version of TINTIN III with many new features.
========= Giving Credit Where Credit is Due ========
None of this work would be possible, without the work done by Peter Unold.
He was the author of TINTIN III, the base of TinTin++. Hats off to ya
Peter, You started the ball rolling.
========= Starting TinTin++ =========
The syntax for starting tintin is: ./tt++ [command file]
Read more about the command file in the 'files' section below. Remember
one thing however. All actions, aliases, substitutions, etc, defined when
starting up TinTin++ are inherited by all sessions.
If you want to get out of tintin after starting it type: #end or press
ctrl-d. If you want to paste text use shift-insert, text is automatically
copied upon selection.
======== Basic Features =========
I'll start by explaining some of the very basic and important features:
All TinTin++ commands starts with a '#'. (can be changed with #config)
Example: #help -- #help is a client command, and isn't send to the mud.
All TinTin++ commands can be abbreviated when typed.
Example: #he -- Typing #he is the same as typing #help
All commands can be separated with a ';'.
Example: n;l green;s;say Dan Dare is back! -- do these 4 commands
There are several ways ';'s can be overruled.
Example: \say Hello ;) -- Lines starting with a '\' aren't parsed by
tintin.
Example: say Hello \;) -- The escape character can esape 1 letter.
======== Connecting to a Mud =========
Command: #session {session name} {mud address} {port} {filename}
Example: #session bob tintin.sf.net 4321
You can have more than one session, in which case you can switch between
sessions typing #.
You can get a list of all sessions by typing: #session.
Providing a filename is optional.
======== Split Screen =========
Command: #split
The split command will create a separated input and output area. This
allows you to see the entire line that you are typing, without having
the mud scroll your text off the screen, or breaking up the line.
Using the #prompt command you can capture the prompt and place it on the
split line. To get rid of the split interface you can use #unsplit which
will restore the terminal settings to default.
========= Aliases =========
Command: #alias
Usage: #alias {name} {commands}
Use this command to define aliases. The variables %0, %1.. %99 contain
the arguments to the aliases-command as follows:
the %0 variable contains ALL the arguments.
the %1 variable contains the 1st argument
the %2 variable contains the 2nd argument
....
the %99 variable contains the 99th argument
Example: #alias nice say Hello Mr %1
If there are no variables on the right-side of the alias definition, any
arguments following the aliases-command will be appended to the command
string.
Example: #alias ff cast 'fireball' -- 'ff bob' equals: cast 'fireball' bob
If you want an alias to execute more commands, you must use braces.
Example: #alias ws {wake;stand}
To delete an alias use the #unalias command.
TinTin++ doesn't baby sit, and will not check for recursive aliases! You
can avoid recursion by escaping the entire line so it is send directly to
the mud.
Example: #alias put \put %1 in %2
========= Actions =========
Command: #action
Usage: #action {action-text} {commands}
Actions, also known as triggers, are used to define an action to take
place when a particular text appears on your screen. There are 99
variables you can use as wildcards in the action-text. These variables
are %1, %2....%9, %10....%98, %99.
Examples:
#action {You are hungry} {get bread bag;eat bread}
#action {%1 has arrived.} shake %1 -- shake hands with people arriving.
#action {%1 tells you '%2'} {tell bob %1 told me '%2'} -- forward tells
to Bob.
#action {tells you} #bell -- beep the terminal when you get a tell.
You can have tintin ignore the actions if you type '#ignore action on'.
You can see what commands TINTIN executes when an action triggers, by
typing '#debug action on'.
You can remove actions with the #unaction command.
========= Highlights =========
Command: #highlight (remember you can abbreviate commands)
Usage: #high {text} {color}
This command works a bit like #action. The purpose of this command is to
substitute text from the mud with color you provide. This command is a
simplified version of the #substitute command.
Examples:
#high {Snowy} {light yellow} -- colors the word Snowy.
#high {%1Snowy%2} {light yellow} -- colors a line containing Snowy
Use #unhigh to delete highlights.
========= Speedwalk =========
If you type a command consisting ONLY of numbers and the letters n, e, s,
w, u, d - then this command can be interpreted as a serie of directions
you want to go to.
Example: ssw2n -- go south, south, west, north, north
If you have problems with typing some commands that actually ONLY consists
of these words, then type them in CAPS. For example when checking the NEWS
or when asked to enter NEW as your name.
You must enable speedwalking with: #config speedwalk on
========= Tickers =========
Command: #ticker {name} {commands} {seconds}
Every 60 seconds on a standard dikumud a so called tick occures. You
regenerate faster hp/mana/mp if you're sleeping/resting during a tick. So
it's pretty nice to know when the next tick occurs. TinTin++ helps you
with that.
#ticker {tick} {#show TICK!!!;#delay 50 #show 10 SECONDS TO TICK!} {60}
This creates a ticker with the name {tick} which will print TICK!!!, as
well as print a warning when the next tick will occure.
Use #untick to delete tickers.
========= Command Files =========
When you order TinTin++ to read a command file, tintin parses all the
text in the file. You can use command files to keep aliases/actions in,
login to a mud(name, password etc..) and basically all kinds of commands.
You can make the command files with either a text editor (strongly
suggested), or use the #write command to write out a file.
Commands for files:
#read filename -- read and execute the file.
#write filename -- write all actions/aliases/substitutes known for the
current session to a file.
When you use #session you can tell it to read a command file with the 4th
argument.
Example: #session bob tintin.sf.net 4321 bobthemage.tin
========= Command History =========
If you want to use your command history you have 2 options. If you gave
Mashiranou a 4 lines long tell about the weather or something, but she
was AFK, and 15 minuts later she comes back to the keyboard and you want
to give her the exact same message you would type: !tell mashiran
TinTin++ will search through your command history for the command
starting with 'tell mashiran' and execute it.
Another slightly more flexible option is typing control-r which will
display the reverse search prompt. Simply type in a substring of a
command previously entered and it will keep showing matches till you
find the command you are looking for.
========= Path Tracking =========
Tintin tries to keep track of your movement. That is whenever you type
either north/south/east/west/up/down, tintin will push the direction and
it's opposite direction into a queue (the path) if '#path new' has been
used.
Commands for path:
#path new -- start path mode, and resets queue.
#path end -- stop path mode.
#path map -- show the path
#path ins {forward} {backward} -- insert commands into the queue
#path del -- forget last move in the path
#path save {f|b} {alias} -- save the path to the given alias
#path load {alias} -- load a path alias into the map queue
#path walk {forward|backward} -- walk 1 step forward or backward of a queue.
#action {Alas, you cannot go that way.} {#path del}
real life example.. tatataaaa:
You want a fast run to the master mindflayer and back. You go to the dump
and type: #path new. Then you run down and kill the master. To go back you
just type: #path save backward tmp;$tmp
You could of course just as well have recalled out of there, but... Hell
it's just an example.
========= Advanced Features =========
Command: #run {name} {shell command}
#run lets you run any console application interactively inside tintin.
Learning how to use tintin will not only allow you to customize and
automate a telnet connection, but any console application can be
enhanced with triggers.
========= Help =========
Command: #help {subject}
The help command is your friend, and also contains the most up to date
information of all available tintin commands. If you type #help without
an argument you will see the various help subjects, most of which aren't
described in this manual since it only covers the basics to get you
started.
Enjoy
tintin-2.02.20/mods/ 0000775 0000000 0000000 00000000000 14216112057 0014123 5 ustar 00root root 0000000 0000000 tintin-2.02.20/mods/0.3.mods 0000664 0000000 0000000 00000007412 14216112057 0015313 0 ustar 00root root 0000000 0000000 10/6/1992 TINTIN III
TINTIN III is a mud client special designed to help
dikumudders. It runs under various UNIX implementations.
This third release of TINTIN contains a bunch of new
features, which I hope you'll enjoy. I know that there're
many TINTINIII beta versions around. I'd advice the people
running these, to get a copy of the final release of
TINTIN-III, coz the various BETA versions are pretty buggy.
BTW thanks to the beta testers for their great support.
People used to TINTIN v2.0 shouldn't have too many trouble
with this version. But do notice anyway, that there has been
a bunch of syntax changes:
THE V2.0 COMMANDFILES ARE NOT COMPATIBLE WITH THIS V3.0!!!!!!!
TINTIN and the future
This was the last time I'll release a totally rewritten TINTIN
code. Although new versions of TINTIN might occure, they'll
be of the format ver.3.x, and will only be released if new
bugs are found and/or portability problems with this version
can be fixed. People are invited to release clones of TINTIN
if they feel they've added something neat. If you release an
extended version of TINTIN, THEN MAKE SURE TO INCLUDE YOUR
NAME IN THE TITLE-TEXT! This way I hope we can avoid nasty
parallel-versions. I might code a tintin with a X-windows
interface tho.
TINTIN and bugs
Well I might have left a bug or two around, but nothing fatal
I hope. Should you find any bugs(and debug'em too *HURRAY*)
then please lemmie know..
TINTIN and portability
TINTIN v3.0 has succesfully been compiled and run under these
UNIX-implementations:
SunOS
HPUX
Sequent
AIX
DEC ULTRIX
VAX with ULTRIX 4.1
NeXT
and some more....
If you have trouble with compiling under your system, and you
know how to fix it, then please gimmie a mail.
Makefile for TINTIN III
I'm using GNU's gcc compiler. The most important is that the
compiler is ANSI-compatible. If gcc isn't installed on your
system, then try change the 'gcc' below to 'cc' If CC = gcc
Some people's ANSI-compiler somehow don't have the full
ANSI-defined standard-library. Uncomment the lines below
if your compiler don't have 'strstr' F1 = -DDUNNO_strstr
If you recive lots of error from the 'echo.c' file, then try
to uncomment the next line: F2 = -DDO_TERMIO
Somehow people using Sun and gcc have to redefine the values
for the macros TIOCGETP and TIOCSETP. This is really dirty
coding and shouldn't be nercessary(but it is sometime).
1/4/1992 T I N T I N
(T)he K(I)cki(N) (T)ick D(I)kumud Clie(N)t
(hell I simply wanted it to be called TINTIN....)
This client is more or less a byproduct from a robot-player
prog I'm coding at the moment. This means that the prog. don't
has the same amount of features that progs like PMF and
tinymugys have(weird features that you don't use anyway...).
The prog has however some features special designed to diku-mud
that might make it interesting for you. The prog is UNIX only..
tintin-2.02.20/mods/1.5.mods 0000664 0000000 0000000 00000035332 14216112057 0015320 0 ustar 00root root 0000000 0000000 1/25/95 Added #split functionality, in case screen size
autodetection doesn't work. Added #purist mode:
in #split mode, commands typed at the bottom window
are not echoed in the top window too. Diddled with
the ./configure, Makefile, install.sh, gripe stuff in
hopes of making it a bit more portable.
1/5/95 Added string comparison capability to #if; format is
#if {[string1=string2]} ...
Thanks to jes3659@gold.acns.fsu.edu (Jeff Sandler)
for the code! Changed: ivars.c -- daw
1/5/95 Added else to #if command; new format is
#if {expression} {then-cmd} [ else {else-cmd} ]
where stuff inside [ ] is optional. Thanks to
Greg Jarman for the code!
Changed: ivars.c -- daw
1/5/95 Added SOCKS #ifdefs as requested by Jim Goddard
; now people who want
to use SOCKS can define the -DSOCKS part of
Makefile.in. This is only intended for the clueful
user. Changed: Makefile.in main.c parse.c -- daw
1/5/95 Added FreeBSD bug fixes kindly submitted by Andrew
Chernov ache@astral.msk.su.
Changed: main.c misc.c net.c parse.c utils.c configure
configure.in -- daw
1/4/95 Fixed all the bugs on the bigbuglist: mostly easy
(but important) portability fixes. Added autodetection
of screen size for #split mode. Added autodetection
when screen is resized (i.e. with an xterm). Added: scrsize.c
Changed: main.c rl.c Makefile.in Makefile -- daw
10/26/94 Made ! and ^d behave more like the old tintin. Hopefully
fixed bug with #zap logging people out. Fixed history
expansion so it only expands on lines that begin with !.
Added redraw, according to #redraw (only in #unsplit mode).
Added echoing of each command in #split mode. Decided
that echo.c is now useless. Deleted: echo.c
Changed: rl.c rlhist.c -- daw
10/25/94 Changed to readline 2.0. Fixed a few bugs; there were
still spaces before #defines, and still an ANSI function
declaration left over from pl6, and I made a dumb mistake
in the Makefile which I fixed. Added a compile script;
hope it's convenient and durable. Fixed bug where tt++
got in an infinite loop if it never connected.
New files: install, src/readline/*
Changed: README, INSTALL, Makefile.in, help.c, aliases.c,
net.c and maybe a few more. -- daw
10/24/94 Added readline support. Now works in both #split and
#unsplit modes -- but better in #split. Added history
expansion and whatnot. Rewrote the tab stuff, fixed
the bugs, and added #tabsave command. Fixes the bug
with keystrokes getting dropped because of raw mode.
No longer need echo.c and associated unportabilities
(I think). Rewrote the ticker, because alarms() and
readline don't seem to like each other. [It was doing
an alarm() every second anyways! ] Fixed loop
in the Makefile. Made lotsa random changes throughout
the code to get it to coexist happily with readline.
Probably lots of bugs left to fix. :-( Still need to
write docs for all this. :-(
New files: rl.c rltab.c rlhist.c rlvt100.c rltick.c log.c
Changed: main.c parse.c misc.c utils.c ticks.c and maybe more.
-- daw
8/28/94 Patch 6: Fixed to use Autoconf which makes installation
alot more easier. Also fixed help.c so it works better.
(David Hedbot, neotron@lysator.liu.se)
Changed: All files, more or less.
7/21/94 Patch 5: Fixed compile errors for HP-UX users. HP-UX likes
to use their own structure name conventions which differs
slightly from SYS V conventions. Placed a few #if's for (HPUX)
and the rest is history. Compiles like a champ now :-).
Makefile totally re-written to elieviate the common questions
asked about compiling. New script called gripe added. Helps
us in determining what you have when you have a problem. If a
problem occurs during compile, just type gripe and follow the
instructions. Mail will be sent to the devel team
automatically.
(JE/DW)
Changed: echo.c main.c tintin.h Makefile install.sh gripe
7/10/94 Patch 4: Fixed #return once and for all. The moves were being
placed back onto the path list when you did a return
That's a BIG NONO. Linked List bug fixed (priority vairable
was being assigned improperly). Help file corrections and
README changed to hopefully help users out more.
.tintinrc now shows the proper pathdirs, to allow #return to
play nicely with the rest of the program. Makefile now
calls the install script copying the helpfile automatically
to the home directory (If users don't like it, we'll know).
(JE)
Changed: llist.c path.c tintin.h docs/tintin15.*
5/13/94 Patch 3: fix for speedwalking. Tintin will no longer
go apeshit on text like "u7"; Also changed llist.c
and glob.c. Made pre-decalrations and function
declarations conform to K&R C. (See 4/20/94 for
how new functions should look) (JE)
Changed: llist.c, parse.c, tintin.h, glob.c
4/30/94 Patch 2: fix for #action {^%0 foo}; removed memory
leak in insert_history(); added #toupper and #tolower;
added the help text for #variable, which was somehow
inadvertently left out; a few minor #includes added.
Thanks you Spencer Sun and Harald Evensen! (DW)
4/27/94 Patch 1: no error message shown if ~/.tintinrc can't
be found; if can't find ./tab.txt look for ~/tab.txt;
changed help so that the helpfile can go into a
non-world-writeable directory; #showme is now tested
for actions; bug fix -- it would sometimes coredump
upon exiting session. (JE)
4/25/94 Fixed bug in insertnode_list. #action {zzzz} {foo} {0}
was guaranteed to delete all actions in the list that
had priority 1 or higher because a ->next pointer was
getting set to NULL when it should have been set to point
to the rest of the list. Affects llist.c. (DW)
4/24/94 Fixed logging so that all ^M's were removed before writing
to the log. This can be changed back to the origional
type of logging, by modifying tintin.h (OLD_LOG).
Changed: main.c, tintin.h (JE)
4/24/94 Changed part of Dave's modification to session.c. I
have been getting messages (and experiencing myself), cores
when you try to open a "sign" session, which shows a sign
then closes the session. Problem being though, for some
reason, even though a pointer may exist of (char *),
and the length of the string is 0, free cores. Being that
Mem fixes like this can take a long time, I've fudged it for
now, in that it won't free up pointers that have strlen's of
less than 1.
Changed: session.c (JE)
4/24/94 Fixed -v option and changed a couple of notification
messages in action.c and alias.c, basically just making
a couple more messages lower case and less annoying.
Changed: action.c, alias.c, files.c (BR)
4/22/94 Fixed highlighting to make it backwards compatible, 1-32
should now be valid fields for highlighting, there is
a little more that can be done to speed up highlighting a
bit. Not critical, we'll see how this works.
Changed: highlight.c (BR)
4/20/94 Nothing major, just re-wrote Dave's function declaration
for his stop signal trapper. Converted it to the convention
we have been using since 1.2:
(name of args)
;
;
;
{
}
Changed: main.c (JE)
4/19/94 Minor plug to a memory leak in session_cleanup. It
never killed all the linked lists associated with
actions, aliases, sub, highlights, etc, so I added
that. Also changed kill_all so that it deletes stuff
from the path lists, too. Also, kill_all was made to
remove lists completely if session was being killed
(kill_all used to reinitialize the list.) Now it only
initializes IF mode CLEAN is sent to kill_all. If
END is sent, then it removes and does not re-initialize
the list.
Changed: llist.c, session.c (DW/JE)
4/19/94 Bug fix to searchnode_list: it assumed that linked lists
were in alphabetical order, but as this assumption is now
invalid, the function needed a small change. Files
affected: llist.c. Doesn't affect the speed of action
matching on lines that come from the mud!! (JE/DW)
4/17/94 Bug fix to the wildcard matching in search_list_with_wild.
#unaction {* foo} removed all actions, when it obviously
shouldn't. Also added backslash recognition to escape
asterisks. This change affects #action, #alias, #sub,
and their corresponding #un commands. [Maybe more.]
llist.c, Makefile, .tt_help.tar.Z changed; glob.c added. (DW)
4/14/94 Quick fix to the session delete code to remove a minor
memory leak. session.c was the only file changed. (DW)
4/11/94 Added #tabadd and #tabdelete. Adding of words to the tab
completion list are done to the end of the list. #tabdelete
just searches the list for the word designated, and deletes it
from the list. Also corrected a bug that I found in my tablist
routine. The complete tablist wasn't being displayed.
edited files: files.c, parse.c, misc.c (JE)
4/10/94 Added #cr command. Useful for sending carriage returns to
different sessions. You would do something like #grim {#cr}.
main.c, parse.c, misc.c were edited..(JE)
4/9/94 Ohh.. forgot to mention.. another new command is #killall.
It'll nuke just about every list related to a session. Now
you don't have to exit tintin++ to load up a new set of
coms. (JE)
4/8/94 Fixed the double-echoing bug that bit you when tintin++ was
suspended and then resumed. Added a SUSPEND command, which
simply acts just as though you had typed control-z at the
keyboard. Anyone wanna test this thang on a SysV machine?
I only have access to SunOS today, and god only knows if
signal() and friends are compatible...
Also added a fix to the way aliases and their parameters
are expanded. Brace grouping used to be ignored for aliases
but now it has an effect. Try these commands
#alias foo {#showme $1; #showme $2; #showme $3}
foo testing {testing 125}
and compare between the new and old versions.
Finally, I added #include back into tintin.h.
Who removed that? Grr... :-) The affected files were
main.c, parse.c, tintin.h, and .tt_help.txt.Z. (DW)
4/1/94 Made Tintin++ think by itself! (April Fools!!! Sorry.. I
had to get that in :-) Anyways, Here are the final changes
for this revision. First off, the Makefile has been
completely re-written, adding to it clean and install. Also
added was the TEXTIN command, and fixed it so that Jeremy's
path commands worked (added PATHDIR). A few more compilation
bugs were removed, and some install scripts were written.
Time to go BETA with this pup now. (JE)
3/8/94 Made numberous bug fixes. Eliminated the bug with #split and
no argument. Fixed #sys to work on most (if not all) system.
The bug was, that the user would receive an alarm call and the
user would still be at the prompt. Hopefully, this is fixed.
People using SGI machines and Linux please get back to me on
this one. You were the ones having the most problems. #loop
now accepts large numbers as well.
Added a new command called #info. It allows the user to get
some statistical information about their current session.
Added a compiler option called -DDEBUG. It turns all alarms
off. The tickcounter won't work, but hey.. You're not playing
with this flag set. It's so gdb will work properly. (JE)
2/2/94 Rewrote insertlist_node in llist.c. Added a mode switch to
the parameters (as well as the additional priority field for
the listnode). Mode PRIORITY will insert the node onto the
list according to the priority the node was given (0 highest
pritority, 9 lowest). Mode ALPHA will insert nodes
alphabetically. Thinking was that if the node appears
closer to the head of the list, the action would react sooner.
All inserts were changed throughout the code.
Rewrote searchnode_list_begin in llist.c as well, to take care
of searches based on priority or alphabetically stored lists.
All searchs were modified throughout the code.
Added #retab, which allows the user to re-load tab.txt. All
I do is just make another call to read_complete(). Rather
simple and effective.
Added #tablist, which will display all the words in the
tab completion list. (in order from beginning to end).
Modified help.txt to accomodate the changes I've made as of
now. Once all changes are complete, I'll re-modify help.txt
(JE)
1/24/94 Moved the ignore variable to the session struct. Now
the #ignore command is isolated within a session. (i.e.
you can have one session ignored, and one session not)
The default is now set to DEFAULT_IGNORE in new_session. (JCJ)
1/19/94 Rewrote path.c to take a different set up. Rewritten to
a link list structure. Added #pathdir command. Upped
mesvar to size 7 with mesvar[6] being #pathdir. Wrote
fixed array style linked list as well, but not
implemented. Added addnode_list to file.c to add a node
to the end of a list (not in lexicographical order as
insertnode_list does). Implemented pathdir using the
listnode struct, but it does not use the char *right.
This can be improved. Perhaps with the completenode
struct. (JCJ)
1/10/94 Rewrote the highlight parse functions to a) not use the
ends and tails, b) use the color names instead of the
numbers, c) allow multiple types to the first arg. (JCJ)
6/1/93 TINTIN++ V1.0 beta test version
New commands since tintin3
#antisubstitute
#gag
#loop
#message
#map
#savepath
#variable
#highlight
#math
#togglesubs
#presub
#showme
maybe more...
This version has fixed a few bugs with the original tintin
code as well as the older tt++ versions. Highlighting now
works correctly and is much more powerful. Subs and actions
are faster, and work better. There was also a bug in the
#alias statement, look in tintin.doc for more info.
I have definitely created some new bugs with all of the new
stuff I added since 0.9 and I'm sorry for any inconvenience.
Please report bugs to me, and I'll endeavor to fix them.
I'm sorry for any delay on bug fixes from old versions, but
I thought this version would be done much sooner, and the
bugs were fixed in this version.
Bill Reiss (reiss@eggo.csee.usf.edu)
tintin-2.02.20/mods/1.8.mods 0000664 0000000 0000000 00000147532 14216112057 0015331 0 ustar 00root root 0000000 0000000 1999-2001 Davin Chan
--------------------
6/21/01 Release tintin v1.85. -- dsc
6/8/01 Added a #show_pretick command. This will toggle on/off
the #10 SECONDS TO TICK message, but it will still show
the #TICK message.
Changed: main.c, rltick.c, tintin.h, include/main.h,
include/misc.h, misc.c, parse.c -- dsc
5/13/01 Removed the include/Makefile and include/Makefile.in.
Deleted: include/Makefile, include/Makefile.in
Changed: configure.in -- dsc
5/13/01 Added a TINTIN_HISTORY enviroment variable to set the
location of the .tt_history file.
Changed: main.c, rl.c -- dsc
5/13/01 Removed the -Iinclude from the Makefile.in and cleaned up
referances to protos.
Changed: Makefile.in, all .c files -- dsc
5/13/01 Added a check for an enviroment variable called TINTIN_CONF
so that tintin will check for the tt.conf file at that
location before checking for it in your home directory.
Changed: chat.c -- dsc
5/13/01 Renamed the send_file command to tt_send_file to avoid
a name conflict under AIX. Thanks to Yoon-Chan Jhi for
pointing it out.
Changed: chat.c, parse.c, include/chat.h -- dsc
4/3/01 Fixed the newline string that tintin sends. It really
should be \r\n. Thanks to Emil Isberg for pointing
that out. Left in the broken_telnet thing but I'm
hoping it isn't needed anymore as tintin was sending
out the wrong newline sequence.
Changed: net.c -- dsc
3/28/01 Updated the FAQ.
Changed: FAQ -- dsc
3/17/01 Renamed all of the protos directory to include and renamed
all the proto files to .h. Updated all the .c files to
reflect the change and updated the Makefile.in.
Changed: all files -- dsc
3/17/01 Changed the BUFFERSIZE to 2048. And fixed the hard coded
values in the protos to use the BUFFERSIZE value.
Changed: tintin.h, protos/main.proto, protos/function.proto
-- dsc
2/25/01 Commented out the SIGWINCH line in main.c that was
spamming some people (appears to be only sun users).
Need to investigate this when I some time.
Changed: main.c -- dsc
12/29/00 Fixed some warnings messages by gcc with -Wall enabled.
Changed: help.c, files.c, ivars.c, main.c, misc.c,
path.c, rl.c, ticks.c -- dsc
12/29/00 Updated the readline.sh slightly to reflect the use
of --includedir and --libdir instead of having
to modify the Makefile.
Changed: readline.sh -- dsc
12/28/00 Fixed a few warnings that appear on sun machines. And
replaced usage of bzero with memset and assorted clean ups.
Changed: scrsize.c, chat.c, net.c -- dsc
12/26/00 Released tintin v1.84. It's been a while since my
last release. Pushing this out the door so that
people can make use of some of the fixes. There
are some rough spots that I need to tidy up, but
there shouldn't be any problems. -- dsc
12/26/00 Updated the FAQ file.
Changed: FAQ -- dsc
12/26/00 Added a toggle to enable and disable the saving of
history. The command is #savehistory. This will
need to be intergrated into the configuration file.
Changed: main.c, misc.c, rl.c, tintin.h,
protos/misc.proto, protos/rl.proto -- dsc
12/26/00 Fixed it so that tt.conf is looked for in the user's
home directory instead of the current directory. The
tt.conf file and the .tintinrc files need to be merged
at some point so that there is only one configuration
file.
Changed: chat.c -- dsc
12/17/00 Removed some debug statements in the #ifstrequal command.
Changed: ivars.c -- dsc
12/13/00 Added in saving of history. Tintin will write out a
.tt_history file to your home directory and read that
back in the next time you start up tintin. Keep in mind
that it will write everything you enter as a command,
including your character's password. You can do a
#clearhistory to delete all the history as well. I'll
probably make the saving of history optional as some
may be parnoid and some may not have alot of space in their
home directory to save a history of commands. Feedback
on the usefulness of this feature would be welcome.
Changed: main.c, tintin.h, rl.c -- dsc
11/07/00 Hmm, tintin regressed in respect to the broken_telnet fix.
Seems that the fix for muds that wanted only \n instead of
the standard \n\r was lost. I've reintergrated the fix, but
I guess it really doesn't affect most users since it's been
missing since 1.81.
Changed: net.c -- dsc
11/07/00 Updated the install-sh script to reflect the change in the
name of the chat.conf file to tt.conf. tt.conf will be
a generic tintin configuration file. It's purpose will
be to store custom configurations of tintin.
Changed: install-sh
Renamed: chat.conf -- dsc
11/07/00 Slight update to the INSTALL file to make it more clear on
compiling tintin with non-standard locations of readline.
Changed: INSTALL -- dsc
11/07/00 Put in a #include for stat.h that is needed for sun machines
that wasn't needed on my linux box.
Changed: chat.c -- dsc
10/09/00 Relocated the chat.conf file to the src/support directory
and updated the install-sh script to reflect that.
Changed: install-sh
Moved: chat.conf -- dsc
10/09/00 Fixed the problem with + - in the math function that
was reported by Kuang-che Wu. Let me know if the #math
function does anything strange. The original (buggy) math
is still available via the #fixedmath toggle, but by default
it will use correct math.
Changed: ivars.c -- dsc
10/03/00 Updated the install-sh script so that it will install the
chat.conf file in the same location as your tintin helpfile.
Changed: install-sh -- dsc
10/03/00 Updated the FAQ and added some comments to the chat.conf
file.
Changed: FAQ, chat.conf -- dsc
10/02/00 Added a new configure option, --enable-big5. This allows
users to select Big5 encoding without needing to manually
edit the Makefile.
Changed: configure.in, Makefile.in, INSTALL -- dsc
10/02/00 Small update to the FAQ file.
Changed: FAQ -- dsc
09/27/00 Cleaned up chat.c some. Removed some un-needed header
files. Mac OS X can compile tintin now.
Changed: chat.c -- dsc
09/27/00 Added misc patches by Kuang-che Wu.
Changed: misc.c, rl.c, net.c -- dsc
09/27/00 Added support for Big5 encoding. This has not been
tested by myself nor do I have any method of testing it.
This was sent to me by Kuang-che Wu. Current, you need
to manually edit the Makefile to have a -DBIG5 to the DEFINES
line. If you have language specific patches, I will be
willing to add them as well, but you must provide me with
the code to be be added.
Changed: action.c, parse.c, variables.c, functions.c -- dsc
09/16/00 Fixed the typo with the checking for ncurses and curses.
Changed: configure.in -- dsc
09/10/00 Replaced DST_NONE with 0 as not all machines have that
defined.
Changed: chat.c -- dsc
09/07/00 Released tintin v1.83 -- dsc
09/07/00 Made it so that tintin will check first for termcap, then
check for curse and then for ncurse. Hopefully that will
resolve the problem some people having with the tgetent.
Changed: configure.in -- dsc
09/07/00 tintin will check for a TINTIN_HELP environment variable.
This will allow you to get tintin to check a shared tintin
help file. All you need to do is to set the TINTIN_HELP
variable to the directory your help file is located.
Changed: help.c -- dsc
09/06/00 Found a error with the install-sh script. The script would
FAIL. Fixed the problem with it.
Changed: install-sh -- dsc
09/03/00 Corrected a bug with the #random function. asd@scene-hu.com
provided the one line fix.
Changed: misc.c -- dsc
08/26/00 Corrected a bug with the install.sh script. There was
a typo in the installing gzip version of the help files.
Decided that the dl directory isn't needed in the tintin++
directory. Users should create a dl or change the download
location in the chat.conf file.
Changed: install.sh
Deleted: dl directory -- dsc
08/25/00 Fixed the problem of HP-UX not linking because of the
order of the libraries. Put -lreadline before everything
else. Also put in -lhistory for the history stuff. It
seems that my compiler isn't as picky as others and allowed
me to link without the -lhistory.
Changed: Makefile.in -- dsc
08/16/00 Released tintin v1.82 -- dsc
08/16/00 Movied the MODIFICATIONS and MOD.ycjhi files into the docs
directory.
Moved: MODIFICATIONS, MOD.ycjhi -- dsc
08/16/00 Added a FAQ file. Hopefully it will answer some of the most
commonly asked questions.
Added: FAQ -- dsc
08/12/00 Added an ENABLE field to the chat.conf file. It is enabled
by default, but you can turn off the chat feature by setting
the value of ENABLE to 0. There still isn't all that much
error checking with the chat features, which will be
corrected in the future.
Changed: main.c, rl.c, chat.c -- dsc
07/25/00 Cleaned up all the warnings in chat.c.
Changed: chat.c -- dsc
07/21/00 Updated the .tt_help.txt file with the new chat commands.
Also added in a helpversion entry, this just lists the date
the helpfile was last modified to track which version of
the helpfile that is installed. Make sure you do a make
install to update your help files.
Changed: support/.tt.help.txt.Z -- dsc
07/20/00 With the addition of chat, the encryption code that I hacked
together is really not needed. I've removed the code for it
as chat looks to be a nicer command than my ugly encrypt code.
If people really want it, let me know and I'll put it back
in, but I don't think it's really needed.
Changed: misc.c, protos/misc.proto, parse.c -- dsc
07/20/00 chat has been added. This is very similiar to using an instant
messager program or using irc. The chat feature is compatiable
with mudmaster (or it should be). The code is by Sean Butler.
I tried to contact him about the use of his code, but could
not contact him. And I am assuming he would allow for the use
of his code unless notified otherwise. Added him to the
credit file. The code needs alot of clean up and modifications
still, but the basic functionality is all there. Currently,
it will try to figure out your IP address, unless you set
it in your chat.conf file. To start a chat, you would do
a #call . Once you have connected, you can do a
#chat . You can also do a #chatall
to send a message to everybody your connected to. Bug me to
write up some docs on it, but the commands should be pretty
straight forward (take a peek in the chat.c for a list of
commands). You can also transfer files (I personally
haven't tested it).
Added: chat.c -- dsc
Created: protos/chat.proto -- dsc
Changed: CREDITS, main.c, rl.c, parse.c -- dsc
07/16/00 Added a --libdir to configure. This is needed if you don't
have your libraries (readline) in standard library locates.
This change is kind of a hack since I need to hardcore
the -lreadline in the Makefile.in, but since you can't really
use tintin without readline, having it hardcoded isn't a
problem. Need to play with autoconf more to see if there
is a better solution.
Changed: configure.in, Makefile.in, INSTALL -- dsc
07/06/00 Added a #clearhistory command. This will clear out your
history of commands entered.
Changed: parse.c -- dsc
07/06/00 Added a BUG and TODO file. This is to let everybody know
what I think are bugs and what I plan on working. If you have
any input on bugs or things you would like to see added to
tintin, feel free to let me know.
Added: BUGS, TODO -- dsc
07/05/00 Worked some on the bindkey command. It doesn't do anything
really, but I spent some time playing with readline and now
have a better idea of how to get it to work.
Changed: bindkey.c, protos/bindkey.proto -- dsc
06/23/00 Fixed a bug with the #read and #newread. They both
would fail if your command file contain any blank lines.
Changed: files.c -- dsc
06/23/00 I've decided to move the #read command now to be
#newread and move the #oldread back as the default #read
command. If you wish to use the multi-line code, use the
#newread command. After it's been tested a while, I will
make it the default #read command.
Changed: parse.c, files.c, protos/files.proto -- dsc
06/23/00 Added in the fixes for functions submitted by Kaung-che Wu.
Functions still need work though.
Changed: variables.c, protos/variables.proto, function.c -- dsc
06/22/00 Cleaned up the install-sh script a bit.
Changed: install-sh -- dsc
06/22/00 Played more and now you can select the default directory
tt++ is put. It will default to the src directory. Like
the --includedir, you change the bindir by doing a
./configure --bindir=.
Example:
You want to put tt++ in ~/bin
./configure --bindir=~/bin
make
make install
Changed: Makefile.in, configure.in, INSTALL -- dsc
06/22/00 I've played with the autoconf some and made some improvements
to it. If you put readline in a non-standard directory
(ie not in /usr/local/include), you can specify that with
./configure --includedir=.
For example, if you put the readline library in say
tintin/src/readline. Then in the tintin/src directory,
you can do a ./configure --includedir=. (current directory).
Another example, if you put readline in /tmp/readline,
you can do a ./configure --includedir=/tmp
As you need to put in the parent directory of the readline
directory.
Changed: Makefile.in, configure.in, INSTALL -- dsc
06/19/00 I've added some missing code for functions that
was submitted by Kuang-Che Wu.
Changed: llist.c, files.c -- dsc
06/18/00 I've enabled the fixed_math by default now. This probably
will not affect most tintin users, but if you use / or *
you may be affected and may want to either change your
script or to use the #fixedmath to disable it.
Changed: tintin.h -- dsc
06/18/00 Put in a fix to a crash bug with verbatim when you don't
have a session. Thanks to Kuang-che Wu for the bug
report and fix.
Changed: parse.c -- dsc
06/18/00 Made a fix to the #message command. It was not listing out
the different message toggle-ables and made some slight
improvements to it.
Changed: misc.c -- dsc
06/18/00 Did further testing and I found a work around. I'll look
into this problem further when I get a chance, but the
working will allow people to use the #crypt and #decrypt
functions. Added an example of how to make use of it
in the docs/example1.script file. Somebody probably can
write a something better, but it does work. If anybody
wants to write better examples (with explainations) I
would be happy to include them. Also if you use it, you
may want to disable the variable messages (#message variable
off) to reduce the spam (it is on by default). -- dsc
06/09/00 Modified the #crypt and #decrypt functions. They currently
used a fixed key, but will change that soon. I had to change
the way it was set up because I was trying to do it the lazy
way and use the ASCII character set table. The old function
mostly worked, but for some keys it would give you funky
results.
The work around noted in the previous entry does not work.
I will need to fix the bug for these commands to be useful.
The problem is in the parser.
Changes: misc.c -- dsc
06/03/00 Added a #crypt and a #decrypt function for "encrypting" text.
I remember seeing a tintin script that did this ages ago
on the newsgroup. I decided to implement the code into
tintin. Although shortly this code will not be so useful
with the incoming chat feature, but this feature might be
fun to use to annoy imms with *polishes his halo* :)
It's extremely simple, but it should be more than enough to
ensure nobody that you don't want to read the text will.
The syntax is:
#crypt
#decrypt
Currently, the key used to encrypt the data is a fixed key,
but will add in a feature to change the key.
This works fine except I seem to hit a bug when testing
the feature. The bug is that tintin will substitutue
everything in an alias with multiple commands
#alias {ereply} {#crypt {$$0} {bleh}; reply $bleh}
however
#alias {ereply}
{#unvar {$bleh} #crypt {$$0} {bleh}; reply $bleh}
will work fine.
I will probably fix this bug at a future date, but it looks
to be a bit mess/large change to fix in a critical function.
And it would be far to easy to introduce new bugs there.
Changed: misc.c, protos/misc.proto, parse.c -- dsc
05/29/00 Added the option of stripping the binary in the install-sh
script. Striping will produce a smaller execuatable, but it
makes it harder to debug. But most people will not need to
debug tintin and would probably want to strip tt++.
Changed: install-sh -- dsc
05/29/00 *cough* hacked a*cough* Fix to the issue #2 (see 5/5/00 entry)
with the new read_command(). The read_command function will
ignore any line that starts with a "#nop" and will not parse it
so it will not care about unbalanced braces. I probably will
look for a better fix/rewrite the code in the future. This
should resolve all the problems with the read_command.
Changed: files.c -- dsc
05/27/00 Put in Yoon-Chan Jhi's fix to the syserr(). This should solve
solve the problem some people have with compiling tintin.
Changed: utils.c -- dsc
05/23/00 Made a few some modifications to the configure.in script to
hopefully make it more informative when running ./configure.
Changed: configure.in -- dsc
05/05/00 Fixed the problem with the read_command() not taking
commands with no arguments (ie #fixedmath).
Changed: files.c -- dsc
05/05/00 Ran dos2unix on the example2.script. This solves part
of the problem, with the new read_command(), but still
have the following issues. 1) it will not allow
unbalanced braces in #nop. 2) it will not take commands
with no arguments (ie #fixedmath).
Changed: docs/example2.script -- dsc
05/05/00 Modified the translate_telnet_protocol() to be a void
function. There really isn't a need for it to return
anything.
Changed: net.c, protos/net.proto -- dsc
04/30/00 Released tintin v1.81. I want to push it out now or else
it would probably be another 3+ weeks and I've promised to
put this out within a week or two (and it's been like 2 1/2
weeks now). -- dsc
04/30/00 Tracked down a problem I was having connecting to a mud
server. tintin was just kicking me out at the same point.
This was due to a change in the read_mud_buffer to use
the new translate_telnet_protocol(). I've put in a fix for
it, but I'll probably redo the fix later.
Changed: net.c -- dsc
04/30/00 Made a bug fix to the read_command function. If your
command file only contained a "#ses {l} {localhost 4000}"
It wasn't connecting when you started up tintin or when
you #read your command file.
Changed: files.c -- dsc
04/29/00 I've included the sample tintin command file that Greg
Milford sent me as it's a nice demostration of how to use
tintin. This may be useful to people in learning how to
make the best use of tintin.
Created: docs/example2.script (the script by Greg)
Renamed: docs/example.script to docs/example1.script -- dsc
04/29/00 I've intergrated a change to the read_command function by
Greg Milford. The change allows for multi-line command
files. See the docs/example.script for how it will look.
The only downside to the change is that you must use braces
ie #alias a {say blah} will not work, you need to do
#alias {a} {say blah}. The read_command will try to recover
from commands that are not written correct by ignore it and
everything after the error and then return to tintin.
So if you have 10 aliases and tintin says that it read in 5
aliases, then tintin didn't like your 6th aliases you wrote
and you should go check it. I've kept the old #read command
as #oldread if you really want to use that, but it will
probably be removed at a future date.
Changed: files.c, protos/files.proto, CREDITS,
docs/example.script -- dsc
04/29/00 I've updated the tintin help file so that it now includes
all the tintin commands. Some of the tintin help files are
a *cough* bit sparse, but they are now listed :) I still
need to update the manual and some of the entries in the
tintin help file needs to be expanding (just a tinnie bit ;))
Changed: support/.tt_help.Z -- dsc
04/12/00 Put in Yoon-Chan Jhi's change to #ifmatch. The only real
change is that it no longer has an else keyword. This
matchs the syntax of other tintin commands.
Changed: ivars.c -- dsc
04/09/00 Cleaned up some warning.
Changed: walk.c, session.c -- dsc
04/09/00 I've added an example.script in the tintin/docs directory.
This includes some basic examples (which I will expand on
when I have more time) and it includes Yoon-Chan Jhi's
auto reconnect script.
Created: docs/example.script -- dsc
04/09/00 I've put in all of Yoon-Chan Jhi's changes which includes
a zMud-like slow walk function (I don't know, I never used
zMud before), an auto reconnect feature. I'm testing them
to make sure I've gotten everything that he submitted to me
working correctly There were alot of changes and hopefully
some changes didn't slip by me. I've made some minor
modifications to his code, but they were very limited
at this point. (Don't ask me what they were, cuz I don't
remember :))
Created: walk.c, protos/walk.proto
Changed: net.c, session.c, tintin.h, parse.c -- dsc
04/08/00 Put in Yoon-Chan Jhi's change to connect_mud so that the
error messages would be more helpful than just couldn't
connect. Didn't know about the strerror() till now.
Learned something :)
Changes: net.c -- dsc
04/08/00 It's amazing what you can learn if you read :) According,
to man (3) bcopy, bcopy has been deprecated. So that explains
why some compilers give you those problems when compiling
with the -O2 flag. This was chitchat's suggestion on how
to solve the problem, but I wasn't comfort just commenting
out the use of a function to silence a compiler warning. But
on further research saw that bcopy was deprecated. In light
of that, I've added back in -O2 flag and I've removed the
use of bcopy. I've also updated the configure script to
stop checking for bcopy since it isn't used anymore.
Changes: Makefile.in, tintin.h, configure -- dsc
04/08/00 Added chitchat and Yoon-Chan Jhi to the credits file for
their contributions to tintin.
Changes: CREDITS -- dsc
04/05/00 I've added in ycjhi's change to read_buffer_mud, which
fixes the problem with tintin sometimes eating a
character after getting an GA. As a note the GA
sequence will send a \n in tintin to solve an
occassion problem with actions not being triggered.
The code, except for minor modifications, were done by
Yoon-Chan Jhi.
Changes: net.c, protos/net.c -- dsc
04/05/00 Changed the tickset command so that the code and
the manual both agree with each other. According
to the manual tickset will turn on the timer if it's
not on, but the code doesn't do that. Now it will.
This is minor, but the code and manual should agree
with each other, or what's the point of the manual if
it's wrong?
Changed: ticks.c -- dsc
04/03/00 Changed the ticksize command so that you will need to
enter a number between 1 and 1000. You previous could
crash tintin because it would try to divide by 0. There
isn't any reason why you would want to set your ticksize
to zero unless you wanted to crash tintin :P So 1 to 1000
should be a suitable range. Let me know if there is a reason
why you would want to have anything outside that range.
Changed: ticks.c -- dsc
03/08/00 Added a bindkey.proto and a bindkey.c file for the
future bindkey command. This will be for binding keys to
a command. ie #bindkey {f1} {}. This doesn't do
anything yet.
Created: bindkey.proto and bindkey.c -- dsc
02/23/00 Fixed a bug with the parsing of input. It would display the
wrong value, but the result is correct.
If you did the following:
#var {a} {1}
#math {a} {$a+1};#showme $a
This would show you 1 and not 2. The value stored in $a is
correct, but it would display 1. It will now show the correct
value 2. Thanks to aladrin@elven.comm.au for the bug report.
Changed: parse.c, protos/parse.proto -- dsc
02/23/00 Removed the -ansi flag from the Makefile and removed the
declaration of popen and pclose and made asorted cleanup
of things that were hacks/bad ideas.
Changed: Makefile.in, protos/help.proto, misc.c -- dsc
02/19/00 Added in the brokentelnet value to the #info command.
02/12/00 Released tintin v1.80 -- dsc
02/12/00 Verified that the fix for CR/LF worked on the test mud listed
on the webboard.
02/09/00 I think I corrected the problem with CR/LF with certain muds.
Please let me know if I did/or didn't. Do a #brokentelnet
to enable it to test.
Changed: net.c, misc.c, main.c, parse.c, protos/misc.proto,
protos/main.proto -- dsc
12/26/99 Updated the README and the doc/sgi files
Changed: README, doc/sgi -- dsc
12/26/99 Increased the buffer for #textin for people that need to
read in a large text file. Didn't increase all buffers
since that may be a waste of memory, but for #textin you
may need more than 1024 so I've increased it to 4096.
Problem was brought to my attention by chitchat's ytin.
Changed: text.c -- dsc
12/26/99 Fixed the math command completely (I think, let me know
if i'm wrong). You *MUST* have #fixedmath 1 set for
you to use the new math, or else it will continue to use
the old broken math. Eventually, this will be the default
but for now, you will have to enable it. Fix came
from chitchat's ytin. With the fixed math, you will
get 4 from #math {a} {6/3*2}. With the old math, you
will get 1 from #math {a} {6/3*2}.
Changed: ivars.c, protos/ivars.proto -- dsc
12/21/99 Ahh, gotta love short-circuit evalation :) Fixed a
crash bug. If you did a #message 1, it will crash.
It's fixed now. Who says it doesn't pay to be lazy? :)
Changed: misc.c -- dsc
12/19/99 Added Fixed Math to the #info output.
Changed: misc.c -- dsc
12/18/99 Added a new command to enable and disable the math
code (will also be used for priority on math symbols when
I add in that code). THE DEFAULT IS TO USE THE BROKEN
CODE. To enable the fixed math code do a #fixedmath.
Eventually, I will make it default to fixedmath on, but
for now, I'll keep it at off.
Changed: main.c, parse.c, misc.c, protos/main.proto,
protos/misc.proto -- dsc
12/18/99 Looked at the #math {x} {$x+1} problem. I've decided
to just return an error instead of initializing the
undefined variable to 0. No answer is better than a wrong
answer in my opinion. If tintin automatically creates a
variable, typos would create new variables and people would
wonder why it kept failing. This way, there is no doubt,
that something is wrong with the math expression. This
should save people time trying to debug their scripts
looking for why their math call always returns the same
(wrong) value.
#math {x} {$x+1} -> old math will create and set x to zero
-> new math will error and not create a
variable
Changed: ivars.c, protos/ivars.proto -- dsc
12/17/99 Added a sanity check for values entred for #sleep, #timetry
#tries.
Changed: misc.c -- dsc
12/17/99 Added in the code for #sleep. The syntax is #sleep