1
0
mirror of https://github.com/GeorgeMcMullen/rxIRC.git synced 2026-01-27 04:33:01 +00:00

v1.3 of rxIRC

This commit is contained in:
George McMullen
2013-06-08 14:10:07 -07:00
parent 5ba8761a55
commit 6cfe12902a
13 changed files with 1184 additions and 0 deletions

34
action.helpirc Normal file
View File

@@ -0,0 +1,34 @@
.cm last change by lynx -- january, 1992
_______
*|^^^^^^^|* The Internet Relay Chat program
*| rxIRC |* for VM/CMS systems written in
*|_______|* RexX by Carl "lynx" v. Loesch.
^^^^^^^
ACTION commands:
These are commands which send a special kind of message to your current
channel or query containing a sentence about your state, your feelings
or an action you are taking.. virtually.. in your fantasy.
This is to give you one more way of expressing yourself on IRC.
The commands work in different ways if issued with or without commands.
For instance '/smile' will produce a message that you smile happily, while
'/smile sadly' or '/smile at Phaedrus' will produce the appropriate output.
You'll find out by experimenting.
The commands at disposition in the present rxIRC version are:
BOW, COMFORT, CUDDLE, DANCE, GIGGLE, GRIN, HUG, LAUGH
NOD, SHRUG, SIGH, SMile, THank, WAVE, WINK, YAWN
You should know that you can also produce your own message lines
with the /ME or /Emote commands, like this:
/me feels a little hungry now.
You can also try to add your own commands into the program. With the way
it is done, it should be easy to understand also for someone who doesn't
really know REXX. Just edit the RXIRC EXEC, move to the bottom of the file,
and turn a page back. You'll see where you can add your lines.
Good suggestions for action commands are always welcome, send them to me
by NoteServ or mail. :)

52
custom.helpirc Normal file
View File

@@ -0,0 +1,52 @@
.cm last change by lynx -- april 25, 1991
_______
*|^^^^^^^|* The Internet Relay Chat program
*| rxIRC |* for VM/CMS systems written in
*|_______|* RexX by Carl "lynx" v. Loesch.
^^^^^^^
*** How to customize rxIRC ***
The IRC PROFILE startup file:
This file should contain a series of lines that are executed by
rxIRC as if you would type them in as soon as you get connected to
a server. You could for instance do "/join #fun" or "/who bunny"
Namesfile settings:
rxIRC gets your default nickname and full name from your namesfile
unless otherwise specified in the command line. You can also set
a 'motto' line by adding a :motto tag to your self-entry in your
namesfile which will be displayed when VERSION requests are sent
to you while you are ircing with rxIRC.
Environment settings:
You may use 'setenv' or 'globalv' to put some values into environment
variables. The variables recognized by rxIRC are IRCNICK, IRCSERVER
IRCNAME and IRCPORT. rxIRC uses 'SELECT CENV' for compatibility with
other IRC programs.
Defaults in the RXIRC NAMES file:
Some defaults for the rxIRC program are defined here:
server: the Internet address of an irc server
port: the TCP/IP port it runs on, usually 6667
timeout: when rxIRC should give up on connections
logging: make it ON or OFF
quiet_ignore: usually OFF
loud_beeps: ON only when a BEEP MODULE is available.
show_numbers: ON shows the reply numbers of server replies, for freaks.
list_all: show also channels without topic in /list, i use OFF.
beep_char: the character that gets translated into a beep and back.
highlight_char: the char that gets translated into an inverse on ircII.
You might choose to copy this file onto your disk to be able to
modify the values.
--
You have 10069612 experience points, 99159963 gold coins, 9127 spell points.
You also have 9999 hit points out of 9999.
Strength: 966; Dexterity: 939; Intelligence: 957; Constitution: 948.
Your age: 50 days 15 hours 37 minutes 32 seconds.

84
etiq.helpirc Normal file
View File

@@ -0,0 +1,84 @@
/************************************************************************
* IRC - Internet Relay Chat, doc/etiquette
* Copyright (C) 1990, Lea Viljanen and Ari Husa
*
* 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 1, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
HOW TO BEHAVE ON IRC
Authors: Lea Viljanen (LadyBug) viljanen@kreeta.helsinki.fi
Ari Husa (luru) so-luru@tolsun.oulu.fi
1) Language
The most widely understood and spoken language on IRC is English.
However! As IRC is used in many different countries, English is by
no means the only language. If you want to speak some other language
than English (for example with your friends), go to a separate channel
and set the topic (with /topic) to indicate that. For example
/topic Finnish only!
would mean that this channel would be reserved for Finnish discussion.
On the other hand, you should check the topic (with /list command)
before you move to a channel to see if there are any restrictions about
language.
On a channel not restricted by /topic, please speak a language
everybody can understand. If you want to do otherwise, change channels
and set the topic accordingly.
2) Hello/Goodbye
It's not necessary to greet everybody on a channel personally.
Usually one "Hello" or equivalent is enough. And don't expect everybody
to greet you back. On a channel with 20 people that would mean one
screenful of hellos. It's sensible not to greet, in order not to be rude
to the rest of the channel. If you must say hello, do it with a private /msg.
The same applies to goodbyes.
3) Discussion
When you come to a new channel it's advised you to listen
for a while to get an impression of what's discussed. Please feel free
to join in, but do not try to force your topic into the discussion
if that doesn't come naturally.
4) {}|[]\
IRC has quite a lot of people from Scandinavian countries,
the above characters are letters in their alphabet. This
has been explained on IRC about a thousand and one times, so
read the following, do not ask it on IRC:
{ is an A with 2 dots over it
} is an A with a small circle above it
| is either an O with 2 dots over it or an O with a dash (/) through it
[, ], and \ are the preceding three letters in upper case.
There are a lot of people from Japan as well, who use Kanji characters
which may look quite exotic as well. As I don't know Kanji I don't
even try to explain any of the characters.
5) ATTENTION!
Remember, people on IRC form their opinions about you only by
your actions, writings and comments on IRC. So think before you type.
Do not "dump" to a channel or user (send large amounts of unwanted
information). This is likely to get you /kicked off the channel or
/killed off from irc. Dumping causes network 'burbs', connections going
down because servers cannot handle the large amount of traffic any more.

51
faq.helpirc Normal file
View File

@@ -0,0 +1,51 @@
Frequently asked questions:
--------------------------
1. Why can't rxIRC have /alias and /on and /notify and everything else
that ircII has?
Because ircII is a giant program that a lot of people have worked on
to be able to do all of that. rxIRC is a relatively little program
which I also want to stay that way, or it might get unpleasantly
slow in execution!
I am sure that /alias and /on are functionalities that take a lot
of time to develop and most of all consume to much speed. And they
would look really ugly in the sourcecode. If you just would learn
a little REXX you'd see that you can easily add commands into the
EDIT: procedure and add hooks into the PARSE: procedure. You don't
need any /on or /alias!
Concerning /notify, this could even be done, though it's a little
tough to simulate a timer when REXTCPIP doesn't offer it. I might
be inclined to do it, but I don't even use rxIRC myself, so why
should I spend serious time on it? If you care, go ahead and do
it yourself. Then send a copy of it to me, so I can release it.
2. Why when I do something outside of rxIRC with /exec, or simply read
the /help files, the server signs me off?
In this case the evil ping goblin has bitten you. A particularity of the
IRC protocol is that the server expects your client program to reply to
a PING message it sends about every minute or so, when you have been
idle. When you start a command with ! or /exec, rxIRC is not able to
reply to the PING and the server closes the connection on you. Poof.
3. You have a bug, "/who -h *.il" doesn't work!
No, I don't have such a bug. The "-h" and "-s" options are specific
to ircII. They are NOT standard. It is the normal and natural way
to do it simply with "/who *.il"
4. When I use one of the new action commands on a channel, like /smile
I get a lot of error messages.
The CTCP ACTION protocol is still rather new, not everyone likes, not
everyone supports it, and most of all, a lot of people do not have up
to date IRC programs. When you get such error messages better not use
the commands on those channels. On other channels you might find people,
who have newer clients, and you'll be able to communicate with the new
commands.
You still have a question?
Write mail to 244661 at DOLUNI1 (.bitnet) or to
'loesch@informatik.uni-oldenburg.de' (internet).

287
manual.helpirc Normal file
View File

@@ -0,0 +1,287 @@
/************************************************************************
* IRC - Internet Relay Chat, doc/MANUAL
* Copyright (C) 1990, Karl Kleinpaste
*
* 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 1, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
Author: Karl Kleinpaste
karl@cis.ohio-state.edu
Date: 04 Apr 1989
Last modification: 04 Apr 1989
INTERNET RELAY CHAT
a real-time conversational system
* 2: Entering Internet Relay Chat
Type `irc'. If one wishes to be known by a nickname which is not
one's login name, type `irc chosen-nickname' instead.
** 4.1: Nicknames
All users of irc are known to the system by a `nickname.' By
default, one's nickname is one's login name. Nickname clashes are not
allowed; this is enforced by the servers. If one's intended nickname
clashes with someone else as one enters chat, one will not be able to
complete entry to irc until one changes one's nickname to something
else.
** 4.2: Presence on a channel
Fundamental to the operation of irc is the concept of a channel. All
users are `on a channel' while inside irc. One enters the `null
channel,' channel 0, first. One cannot send any messages while in
channel 0 unless one has set up a private conversation in some way.
The number of channels is essentially unlimited - whatever will fit in
a 32-bit integer.
** 4.3: Types of channels
There are 3 channel types, with increasing levels of privacy afforded
them.
*** 4.3.1: Public channels
Public channels are channels 1-999. If one is on one of these
channels, one can be seen by all other users. Anyone can notice users
on a public channel and join such a channel's conversation.
*** 4.3.2: Private channels
Channels 1000-up are called `private' This means that, although
anyone can see that one is using chat, no one can tell what channel
one is using unless one is already on that channel with oneself.
Since the number of potential channels is in the billions, this is
quite some security - all one gives away is the acknowledgement that
one is using chat.
*** 4.3.3: Secret channels
Negative channel numbers are called `secret' While one is on a
hidden channel, no one who is not on one's channel with oneself can
even see that one is there. One's name does not show up in a list of
active users. The only indication of one's presence is that, when
entering chat, all new users are told that there are "N users on P
servers." If one checks on all users and finds less than N of them,
one knows that others are hiding on negative channels. But a hidden
channel user still cannot be found except by brute-force checking
through all channels, a hopeless proposition in the face of 10-digit
channel numbers. Security through obscurity finally means something.
** 4.5: Conversations not using channels
It is possible to conduct conversations with others without using the
formalized channel structure. Doing so requires that two people set
themselves up for private conversation using special commands; see
User Commands below.
** 5.2: Screen activity
Normal messages from other users appear with the originating nickname
in <angle brackets>. Private messages arrive with the originating
nickname in *asterisks*.
Other output (e.g., /who commands, invitations from other users to
join channels, and so forth) appears interspersed with other activity
on the screen.
* 6: Command structure
Ordinary text typed at irc is sent as one's messages to everyone else
on the same channel, modulo personal choices for private messages and
the like. Commands to irc itself all begin with a command character,
which is initially `/' but may be changed to any other character
desired.
Commands may in general be abbreviated to a unique prefix.
** 6.1: Leaving irc
The way to get out of irc is to enter the /signoff command. "/si" is
sufficient. Also equivalent are "/exit," "/bye," and perhaps "/quit"
** 6.2: Getting help
Type "/help." Follow the instructions.
** 6.3: User commands
Other commands supported by irc are:
help signoff who whois
list topic join channel
links msg invite summon
users stats nick away
info clear query
date mode kick
*** 6.3.2: signoff
/signoff exits chat.
*** 6.3.3: who
/who returns information on who is using chat. /who without arguments
prints info on all users that can be seen. Users of public channels
show up with their channel identified. Users of secret channels
appear, but they are specified as being on a private, unspecified
channel. Users of hidden channels do not appear at all.
Giving a numeric argument to /who returns only those users of the
specified channel. This still doesn't show users of secret or hidden
channels unless one is actually on that channel.
*** 6.3.4: whois
This returns information about individual users. Say "/whois
nickname" to get information on the login name and host from which the
nicknamed user comes.
*** 6.3.5: topic
Channels can be given off-the-cuff "topics." Saying "/topic some
string of text" will associate that topic with the current channel.
*** 6.3.6: list
/list will give lists of active channels, the number of users of each,
and the topics therewith associated. Again, secret and hidden
channels do not appear.
*** 6.3.7: join & channel
/join or /channel are the means to enter a channel. Give a numeric
argument for the channel one wishes to enter. If this is a secret or
hidden channel, /who commands will show oneself and any other users of
one's channel.
One's arrival on a channel is announced to the rest of the users
already on that channel. Silent, anonymous "lurking" is not
supported.
*** 6.3.8: links
/links lists the currently-active set of chat servers. Beware: this
list can be quite long, and will undoubtedly get longer as chat gains
wider use. As of 22 March 1989, about 15-20 servers is typical.
*** 6.3.9: msg
A single message can be sent privately to a certain user with /msg.
Type /msg nickname and the text to be sent. It will be sent privately
to the indicated nickname.
*** 6.3.10: invite
If there is a user online to whom one wishes to speak, one may invite
that user to join oneself on a certain channel. One types "/invite
nickname" with an optional channel number. The receiving user gets a
one-line message indicating the sender and the invitation. The
receiving user is free to ignore the invitation, of course.
*** 6.3.11: summon
An extreme form of /invite is /summon. "/summon user@host" will
request the user on the specified host to enter the chat system. Do
not do this unless one is fairly sure that one's request will be
welcome - it can be a fairly disturbing and sometimes irritating
intrusion. In order for /summon to work, the specified host must be a
connected chat server - one can't summon random people from around the
Internet.
*** 6.3.12: users
/users will return a list of the users logged into one's system. With
an optional hostname identifying a chat server host, the users logged
into that system will be listed.
*** 6.3.13: stats
This command returns counts of various protocol operations of one's
chat server. It is neither particularly useful nor interesting; it
was, at one time, a debugging aid.
*** 6.3.14: nick
One can change nicknames by issuing "/nick new-nickname." All users
on one's channel will be advised of the change. NOTE: If one enters
chat with a nickname clash (e.g., one's login name is the same as
someone else's, and the other user got there first), the system will
not let one enter until one issues a /nick command with a unique
nickname.
*** 6.3.15: away
Sometimes, one wishes to remain connected to the chat system, but one
must be elsewhere for a while. One can issue an /away command with
arbitrary text as argument, which will mark oneself as being away. If
someone sends an away'd user a private message (via /msg or in a
private session set up via /query; see below), the sender will get a
message back from the server indicating the away-ness and the message
which was set.
*** 6.3.16: info
/info returns information regarding the author and copyright of the
chat system.
*** 6.3.17: clear
At times, one wishes that one's screen weren't so cluttered. /clear
makes it so.
*** 6.3.18: query
This command is used to set up private communications `outside' the
normal channel system.
When one enters "/query nickname," the indicated nickname is set up as
the sole recipient of anything which one types thereafter. Thus, if
user A executes "/query B" and user B executes "/query A," they have
set up a private communication between themselves. Significantly, it
remains possible for them to stay on their respective channels, which
need not be the same, and listen to whatever conversation is going on
around them as well, though they cannot respond to that ambient
conversation without leaving the private conversation they have set up.
One leaves this private mode by issuing /query without arguments.
** 6.4: Operator commands
The chat system administrators on each host have additional
responsibilities and power over the configuration and operation of the
servers. The commands to do so are delineated below.
*** 6.4.1: oper
Users who have the potential for operator privileges initially invoke
those privileges by "/oper nickname password," where nickname is the
nickname under which operation is intended, and password is the
password known to the chat system for that nickname.
*** 6.4.2: kill
Obnoxious users had best beware the operator who's fast on the /kill
command. "/kill nickname" blows any given nickname completely out of
the chat system.
Obnoxiousness is not to be tolerated. But operators do not use /kill
lightly.
* 7: Questions, problems, troubles?
Write mail to local irc coordinator.

18
rxirc.$package Normal file
View File

@@ -0,0 +1,18 @@
*
* This file contains the definition of the RXIRC package.
*
* Filename Filetype
* -------- --------
RXIRC $PACKAGE recursion!
RXIRC EXEC the client program
RXIRC NAMES the installation defaults file
RXIRC INSTALL little installation readme
RXIRC HELPMENU the documentation
ACTION HELPIRC about the set of action commands
CUSTOM HELPIRC how to customize
ETIQ HELPIRC irc etiquette (from unix irc distribution)
FAQ HELPIRC frequently asked questions
MANUAL HELPIRC irc manual (from unix irc dist)
SPECIAL HELPIRC rxIRC specific extra commands
SYNTAX HELPIRC command line usage and options
SETENV EXEC unixlike globalv utility

461
rxirc.exec Normal file
View File

@@ -0,0 +1,461 @@
/* rxIRC
* Internet Relay Chat client program for VM/CMS systems
* created by Lynx (244661 at DOLUNI1) on Thursday, 14 Feb 1991
* last change by Lynx (244661 at DOLUNI1) on Friday, 10 Jan 1992
* Version 1.3 (using PREXX)
* Code contributions/suggestions by: Doug Sewell
*
* requires REXTCPIP MODULE by Ken Hornstein (kxh105@psuvm.bitnet)
* available from LISTSERVs carrying the VM-UTIL list
*
* Copyright (C)1991 by Carlo v. Loesch and Uni Oldenburg, Germany
* All rights reserved. No guarantees implied. ("AS IS" etc.)
* No distribution of modified copies permitted, pls send changes to me.
*/ vers='1.3'
cmds='AWAY AWAIT ADMIN CHANNEL CONNECT DEOPER DIE GRPH HASH INVITE',
'INFO ISON JOIN NICK KILL LIST LINKS LUSERS MODE MAIL MOTD NAMES',
'NICK NOTICE NOTE OPER PASS PART REHASH RESTART QUIT SERVICE SQUIT',
'SUMMON STATS TOPIC TIME TRACE USERS USERHOST VOICE VERSION WHOIS',
'WHOWAS WALLOPS WALL XTRA'
log=0; query=; ignore=; lastsender=; onoff.1="on"; onoff.0="off"
cmdchar=; userinfo=; profile="IRC PROFILE *"; target=time('R')
invitation=; writelog = "EXECIO 1 DISKW IRC LOG A0 (STRI"
tcprc=0; msa=d2c(1); realname=; c=0
ignore_reply = "Your messages are not being received."
address "COMMAND"; trace 'O'
"IDENTIFY (LIFO"
pull me . mynode . via .
"REXTCPIP" /* oh how i still love this command */
if rc^=0 then call BYE "REXTCPIP MODULE returning" rc
"NAMEF :NICK RXIRC :SERVER :PORT :TIMEOUT :LOGGING :QUIET_IGNORE",
":HILIGHTCHAR :BEEPCHAR :LOUD_BEEPS :SHOW_NUMBERS :LIST_ALL",
"(LIFO FILE RXIRC"
if rc^=0 then call BYE "missing or unreadable RXIRC NAMES file"
pull def_listall; pull def_numb; pull def_loud; parse pull beep
parse pull hilight; pull def_quiet; pull def_log
parse pull timeout; parse pull def_port; parse pull def_server
"GLOBALV SELECT CENV GET IRCNICK IRCSERVER IRCNAME IRCPORT"
"NAMEFIND :USERID" me ":NICK :NAME :MOTTO :CMDCHAR :IRCNICK :IRCNAME",
"(LIFO"
if rc=0 then do
parse pull name; parse pull nick
if ircnick="" then ircnick=nick
if ircname="" then ircname=name
parse pull cmdchar; parse pull userinfo
parse pull realname; parse pull nick
if ircnick="" then ircnick=nick
if ircname="" then ircname=realname
end
parse arg nick server name '('o; upper o
if nick^='' then ircnick = nick
if ircnick='' then ircnick=me
capnick = translate(ircnick)
if server^='' then ircserver=server
else if ircserver='' then ircserver=def_server
if name^='' then ircname = name
if ircname='' then ircname=me "at" mynode".bitnet"
if cmdchar="" then cmdchar="/"
do while o^=""
parse var o opt o
select
when abbrev("PORT", opt, 1) then parse var o ircport o
when abbrev("LIST_ALL", opt, 2) then parse var o def_listall o
when abbrev("LOGGING", opt, 1) then parse var o def_log o
when abbrev("LOUD_BEEPS", opt, 3) then parse var o def_loud o
when abbrev("NUMBERS", opt, 1) then parse var o def_numb o
when abbrev("QUIET_IGNORE", opt, 1) then parse var o def_quiet o
when abbrev("TIMEOUT", opt, 1) then parse var o timeout o
otherwise call BYE "Unknown option" opt
end
end
if ircport='' then ircport=def_port
if timeout="" then timeout=25
if def_listall="ON" then listall=1; else listall=0
if def_log="ON" then log=1; else log=0
if def_loud="ON" then loud=1; else loud=0
if def_numb="ON" then numb=1; else numb=0
if def_quiet="ON" then quiet=1; else quiet=0
if log then writelog "* IRC Session started on" date() "at" time()
if datatype(left(ircnick,1))='NUM' then ircnick='u'ircnick
"IMMCMD SET HI"
if userinfo="" then userinfo="- no info given by user -"
"VMFCLEAR"
call OUT "rxIRC v"vers "- You are" ircnick "("ircname")"
call OUT "Logging is" onoff.log"; Loud beeps are",
onoff.loud"; Quiet ignore is" onoff.quiet
call CONNECT ircserver
say copies("-",79)
"CP TERM LINEND OFF"
"CP TERM CHARDEL OFF"
do forever
"IMMCMD STATUS HI"
if rc^=0 then call EDIT "hi"
if c^=0 then do
TCPRECEIVE(c, "WAITKB", "EXPAND")
select
when tcprc=0 then do i=1 to tcpline.0
call OUT PARSE(tcpline.i)
end
when tcprc=25 then do externals()
parse external ext; call CONS ext; ext=time('R')
end
when tcprc=12 then do; c=0; call CLOSE "Oops"; end
when tcprc=18|tcprc=20 then call CLOSE
when tcprc=0|tcprc=8|tcprc=9 then nop
otherwise
call CLOSE "Unknown error" tcprc "from REXTCPIP"
end
end
end
call BYE "Murphy's Law"
CONS:
parse arg keys
call EDIT keys
if out^="" then TCPSEND(c, out)
return
PARSE:
parse arg a
if loud & pos(x2c(2f),a)^=0 then "BEEP"
b=; a=translate(a,hilight||beep||"_",d2c(2)x2c(2f)x2c(32))
if left(a,1)=':' then do
parse var a ':'s m e f ':'g
parse var s s'!'sad
end
else do; s=''; parse var a m e f ':'g; end
f=strip(f)
select
when m='CHANNEL' then if e="0"
then b='***' s 'leaves this channel'
else b='***' s 'joins this channel'
when m='INVITE' then do
invitation = f
b='***' s 'invites you to channel' f; end
when m='JOIN' then do
b='***' s 'joins channel' e
if s=ircnick then target=word(e,1)
end
when m='KICK' then b='***' s 'kicks' f 'off channel' e
when m='KILL' then b='*** You were killed by' s subword(g,2)
when m='MODE' then b='*** Mode change:' s 'sets' e f
when m='MSG' then b='<'s'>' g
when m='NICK' then b='***' s 'is now known as' e
when m='NOTICE' then select
when s='' then b=g
when translate(e)=capnick then do
if find(ignore,translate(s))^=0 then do
return ''; end
else do; b='-'s'-' g
lastsender=s
end
end
when left(e,1)='+'|left(e,1)='-'|datatype(left(e,1))='NUM' then b=s g
otherwise b='-'s':'e'-' g; end
when m='PART' then b='***' s 'parts channel' e
when m='PING' then TCPSEND(c, "PONG :"ircnick)
when m='PRIVMSG' then select
when translate(e)=capnick then do
if find(ignore,translate(s))^=0 then do
if ^quiet then TCPSEND(c, 'NOTICE' s ':'ignore_reply)
return ''; end
else do
if CTCP(1 g) then b='*'s'*' g
lastsender=s
end
end
when e=target|left(e,1)='+'|left(e,1)='-'|datatype(left(e,1))='NUM'
then if CTCP(0 g) then b='<'s'>' g
otherwise if CTCP(0 g) then b='<'s':'e'>' g; end
when m='QUIT' then b='*** Signoff:' s '('g')'
when m='TOPIC' then b='***' s 'sets the topic to:' g
when m='WALLOPS' then b='*** Wallops from' s':' g
when m='WALL' then b='*** Broadcast from' s':' g
when m='301' then b=f 'is away:' g
when m='311' then do
parse var f ni ui no .
b=ni 'is' ui'@'no '('g')'
end
when m='314' then do; parse var f ni ui no .
b=ni 'was' ui'@'no '('g')'; end
when m='312' then b='via server' f '('g')'
when m='319' then b='on channels:' g
when m='317' then b='and has been idle' word(f,2) 'seconds'
when m='322' then do
parse var f ch n
if listall | g^="" | n>2 then
b=left(ch,13) left(n,4)g
else return ''
end
when m='324' then b='*** The mode on channel' word(f,1) 'is' word(f,2)
when m='332' then b='*** The topic is:' g
when m='341' then b='*** Inviting' word(f,1) 'to channel' word(f,2)
when m='353' then b=left(word(f,2),10) g
when m='NAMREPLY' then do
parse var f na ni; b=left(na,10) ni; end
when m='WHOREPLY'|m='352' then do
if m='352' then parse var f . us no . ni st .
else parse var f us no . ni st .
b=left(st,3)left(ni,10)left(us"@"no,31) g
end
when m='313'|m='364'|m='LINREPLY' then b=f g
when m='315'|m='318'|m='321'|m='323'|m='365'|m='366'|m='406'
then nop
otherwise select
when g="" then b=f
when f=""|f=s then b=g
otherwise b=f":" g
end
if s^="" then b='('s')' b
if numb then b=m b
end
return translate(b,"@",msa)
EDIT:
out=; parse arg in
if in='' then nop
else if left(in,1)="!" then do
address CMS substr(in,2); say "rxIRC ready("rc");"; end
else if left(in,1)^=cmdchar then do
if query='' then out='PRIVMSG' target ':'in
else out='PRIVMSG' query ':'in
end
else if left(in,2)=cmdchar' ' then do
parse var in 3 r; out='MSG :'r
end
else do; parse var in 2 q r; upper q
select
when q=''|q='SAY' then out='PRIVMSG' target ':'r
when left(q,1)='*' then return
when abbrev('ABORT',q,2) then call BYE "user abort request"
when abbrev('BYE',q,1)|abbrev('SIGNOFF',q,1) then
do; TCPSEND(c, 'QUIT'); TCPCLOSE(c); call BYE; end
when abbrev('CHANNEL',q,1) then do
if r="" then do; call OUT "* Talking to" target; return; end
if target^="" then TCPSEND(c, "PART" target);
out="JOIN" r
end
when abbrev('CLEAR',q,2) then "VMFCLEAR"
when abbrev('CMDCHARACTER',q,2) then cmdchar=left(r,1)
when abbrev('EXECUTE',q,1) then do
address 'CMS' r; say "rxIRC ready("rc");"; end
when abbrev('FOLLOW',q,1) then out='JOIN' invitation
when abbrev('HELP',q,1) then do
address CMS "HELP RXIRC"; say; end
when abbrev('LOGGING',q,2) then call LOGGING r
when abbrev('NICKNAME',q,2) then if r='' then out='WHOIS' nick
else do; out='NICK' r; ircnick=r; capnick=translate(r); end
when abbrev('REPLY',q,1) then call QUERY lastsender
when abbrev('SERVER',q,3) then call CONNECT r
when abbrev('STATUS',q,2) then do; out='WHOIS' ircnick
call OUT '* Target:' target'; Query:' query'; Invitation:' invitation'; Last sender:' lastsender
end
when abbrev('TALKTO',q,2) then do
if r^="" then target=word(r,1)
call OUT '* Now talking to' target
end
when abbrev('VERSION',q,3) then do; out='VERSION'
call OUT '* rxIRC v'vers 'written by the lynx (lynx@dm.unirm1.it)'
end
when abbrev('XAMINE',q,1) then out='WHOIS' lastsender
when abbrev('DATE',q,1) then out="TIME" r
when abbrev('DESCRIBE',q,2) then do; parse var r whom desc
out='PRIVMSG' whom ':'msa'ACTION' desc||msa; end
when abbrev('IGNORE',q,2) then call IGNORE r
when abbrev('MSG',q,1)|abbrev('MESSAGE',q,3) then out='PRIVMSG' r
when abbrev('QUERY',q,1) then call QUERY r
when abbrev('REQUEST',q,3)|q='CTCP' then do
parse var r ni rq .; upper rq
if ni="" then ni=capnick
if rq="" then rq="VERSION"
out='PRIVMSG' ni ':'msa||rq||msa
end
when q='WHO' then if r="" then out='WHO' target
else out='WHO' r
when abbrev('TCPIPSTATUS',q,3) then do; CONNSTAT(c)
call OUT '*' local_addr'!'local_port '->' foreign_addr'!'foreign_port,
conn_stat '(BU:'bytes_to_read', UB:'unacked_bytes')'
end
otherwise if ACTION(q r) then do
call OUT ircnick r
if query="" then out='PRIVMSG' target ':'msa'ACTION' r||msa
else out='PRIVMSG' query ':'msa'ACTION' r||msa
end
else do
li=cmds; out=q r
do while li^=''; parse var li el li
if abbrev(el,q,1) then do; out=el r; leave; end
end
end
end
end
out=translate(out,x2c(2f),beep)
return out
IGNORE:
arg a
do words(a)
parse var a ig a
z=find(ignore,ig); if z^=0 then
ignore=strip(delword(ignore,z,1))
else ignore=ig ignore
end
call OUT 'You are ignoring:' ignore
if quiet then say "And you don't send notices about it (quiet ignore)."
return
QUERY:
parse arg qq
if query^='' then call OUT '* Terminating query with' query
query=qq
if qq^='' then call OUT '* Starting a query with' qq
else call OUT '* Talking to' target
return
LOGGING:
arg a
if a='ON' & log=0 then do
writelog "IRC Log started on" date() "at" time()
say '* Logging started.'; log=1; end
else if a='OFF' & log=1 then do
writelog "IRC Log ended on" date() "at" time()
say '* Logging ended.'; log=0; end
else say '* Logging is' onoff.log
return
OUT:
parse arg x
if x="" then return
if length(x) < 81 then q=0
else do 1
q=pos(word(x,2),x)-1; if q>30 then q=0
p=lastpos(" ",x,80)
if p<40 then do; q=0; leave; end
b=left(x,p); x=substr(x,p+1)
say b; if log then writelog b
do while length(x)+q > 80
p=lastpos(" ",x,80-q); if p<40 then leave
b=copies(" ",q)left(x,p); x=substr(x,p+1)
say b; if log then writelog b
end
end
x=copies(" ",q)x; say x; if log then writelog x
return
CONNECT:
parse arg ircserver port time .
if ircserver="" then do
call OUT "* Provide an internet server address as arguement"
return
end
if datatype(port)="NUM" then ircport = port
if datatype(time)="NUM" then timeout = time
if c ^= 0 then do
TCPSEND(c, "QUIT"); TCPCLOSE(c); "CP SLEEP 3 SEC"; end
if (datatype(left(ircserver,1))^="NUM") then do
say "Resolving domain name address" ircserver
ircserver = GETIPADDR(ircserver)
if tcprc^=0 then call BYE "unresolvable address" ircserver
end
say "Connecting to" ircserver "on port" ircport", timeout after" timeout "seconds"
c = TCPOPEN(ircserver, ircport, timeout)
select
when tcprc=6 then call CLOSE "Host not responding within time"
when tcprc=8 then call CLOSE "No server running on port" ircport
when tcprc^=0 & tcprc^=2004 then
call CLOSE "Unknown error" tcprc "while trying to connect"
when c=0 then call CLOSE "Have no connection!"
otherwise
TCPSEND(c, "NICK" ircnick)
TCPSEND(c, "USER" me mynode "." ircname)
"STATE" profile
if rc=0 then do
"EXECIO * DISKR" profile "(FINIS STEM IN."
do i=1 to in.0
call EDIT in.i
if out^="" then TCPSEND(c, out)
end
end
end
return
CTCP:
parse arg fla bla
if pos(msa,bla)=0 then return 1
bla=translate(bla,'\',d2c(1))
parse var bla . '\' ctcp bla '\' .
select
when ctcp="ACTION" then call OUT s bla
when ctcp="CLIENTINFO" then
call MSAREPLY "CLIENTINFO ACTION CLIENTINFO FINGER VERSION USERINFO"
when ctcp="FINGER" then
call MSAREPLY "FINGER" realname '('me'@'mynode'.bitnet) - Idle time is',
time('E')
when ctcp="VERSION" then
call MSAREPLY "VERSION rxIRC v"vers "VM/CMS",
":The best you can get for VM/CMS systems..."
when ctcp="USERINFO" then
call MSAREPLY "USERINFO" userinfo
otherwise if fla=1 then
call MSAREPLY "ERRMSG Huh? Can't do" ctcp
end
return 0
MSAREPLY:
parse arg lyrics
TCPSEND(c, "NOTICE" s ":"msa||lyrics||msa)
return
CLOSE:
parse arg culprit
if c^=0 then do
TCPCLOSE(c); c=0
end
call BYE culprit
return
BYE:
parse arg culprit
if culprit^= "" then say "Terminating:" culprit" (tcprc:" tcprc")"
if log then do
writelog "IRC Session ended on" date() "at" time()
"FINIS * * *"
end
"IMMCMD CLEAR HI"
"NUCXDROP REXTCPIP"
/* "CP TERM CHARDEL @" -- do you need this one? let me know */
"CP TERM LINEND #"
exit tcprc
ACTION:
parse arg q r
select
when q="BOW" then a="bows gracefully"
when q="COMFORT" then a="comforts you"
when q="CUDDLE" then a="cuddles you"
when q="DANCE" then a="dances a waltz with you"
when q="GIGGLE" then a="giggles inanely"
when q="GRIN" then a="grins evilly"
when q="HUG" then a="hugs you"
when q="LAUGH" then a="falls down laughing"
when q="ME"|abbrev("EMOTE",q,1) then return 1
when q="NOD" then a="nods solemnly"
when q="SHRUG" then a="shrugs helplessly"
when q="SIGH" then a="sighs deeply"
when abbrev("SMILE",q,2) then a="smiles happily"
when abbrev("THANK",q,2) then a="thanks you from the bottom of the heart"
when q="WAVE" then a="waves goodbye to you"
when q="WINK" then a="winks suggestively"
when q="YAWN" then a="yawns tiredly"
otherwise return 0; end
if r="" then r=a'.'
else r=word(a,1) r'.'
return 1

20
rxirc.helpmenu Normal file
View File

@@ -0,0 +1,20 @@
.cm last change by lynx.
.mt IRC
rxIRC v1.3
Internet Relay Chat client program for VM/CMS systems
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Written by Carl 'lynX' v. Loesch
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Move the cursor onto a topic and press ENTER.
MANUAL General Overview about IRC
ETIQ The IRC Netiquette - How to behave on IRC
SYNTAX Usage format of rxIRC
SPECIAL Special commands you can only issue from rxIRC
ACTION A set of commands to let you express virtual actions
CUSTOM How to customize your rxIRC
FAQ Frequently asked questions about rxIRC

21
rxirc.install Normal file
View File

@@ -0,0 +1,21 @@
rxIRC Installation Guide
========================
To run rxIRC you need:
REXTCPIP which is available from your nearest VM-UTIL - LISTSERV.
For example by doing "tell listserv at dearn get rextcpip module".
Otherwise you might request it by mail to Ken (KXH105 at PSUVM),
but I'm not sure, if he'd be happy about it.
Before you start rxIRC you should:
Edit the RXIRC NAMES file which contains all the default values for
rxIRC. Most important: the address of your default server!
If you have any problems/improvements/suggestions/etc. send mail to me.
Also if you want to be informed of future rxIRC releases, and you do
not read alt.irc or operlist or VM-UTIL or dnet.chat or comp.archives.
Ciao -lynx
o----------------------------------------------------------------------o
| Carlo "Lynx" v. Loesch is loesch@informatik.uni-oldenburg.de |
| ----------------------- or 244661 at DOLUNI1.bitnet / .earn |

21
rxirc.names Normal file
View File

@@ -0,0 +1,21 @@
* RXIRC NAMES
* contains installationwide defaults for rxIRC
:nick.rxIRC
*
* insert the network address of a server near to you into here
*
:server.arbi.informatik.uni-oldenburg.de
*
* some preferences.. you can look into this later on, see also the helpfile *
:logging.off
:quiet_ignore.off
:loud_beeps.off
:show_numbers.off
:list_all.off
:beepchar.~
:hilightchar.%
*
* no change should be necessary here
*
:port.6667
:timeout.20

13
setenv.exec Normal file
View File

@@ -0,0 +1,13 @@
/* SETENV EXEC
* Set an environment variable for C programs to access
* last change by Lynx_VM (244661 at DOLUNI1) on Sunday, 12 May 1991
*/
address 'COMMAND'
parse arg n c; upper n
if n="" then
'GLOBALV SELECT CENV LIST'
else if c="" then
'GLOBALV SELECT CENV LIST' n
else
'GLOBALV SELECT CENV SET' n c
exit rc

95
special.helpirc Normal file
View File

@@ -0,0 +1,95 @@
.cm last change by lynx -- january, 1992
_______
*|^^^^^^^|* The Internet Relay Chat program
*| rxIRC |* for VM/CMS systems written in
*|_______|* RexX by Carl "lynx" v. Loesch.
^^^^^^^
Special commands of this IRC client program:
/ABort
You may leave your session non-caring about the status of your TCPIP
connection. Use this only when you can't get out with /bye.
/Channel <new channel>
This command will automatically /part you from your previous channel
before joining this new channel. If you don't want to get confused
by multiple channels, better always use this command instead of /join.
Without argument it will tell you what channel you are on.
/CLear
Clear the screen.
/CMdchar <character>
Use an other character than '/' to introduce commands.
/Execute <command> or more easily just: !<command>
You may execute CMS commands with this, but remember not to stay too
long outside IRC or the IRC-server might close the connection.
/Follow
If you have just been invited to a channel this is an easier way to
join it. rxIRC will remember the name of the channel for you.
/IGnore [<nickname> <more nicknames>]
If you don't want to receive a person's messages, you can use /ignore
on him. Use it again to remove the /ignore. Without arguments you
get the list of people being ignored by you. The ignore function
captures both /msg's and /notice's from the specified person. It
sends a notice back to the sender telling him that you are not
receiving his messages unless you specify it to be silent with
the startup option "(Quiet".
/LOgging [ON | OFF]
You can switch the logging on and off. That means you get a transcription
of your IRC session into the file IRC LOG A0 on disk.
/Query [ <nickname> | <channel> ]
You can get into a dialogue mode with a person, all lines you type are
sent as private message to this person. If you want to talk onto a
channel you might be on at the same time you can do "/ <text>" without
leaving the /query. To leave the /query use /query without arguments.
If you want to use #-type channels you need to /query those, too.
/Reply
This is a shortcut to get into a /query with the person that last sent
you a message.
/Request <nickname> | <channel>
Send a CTCP (Client To Client Protocol) Version Request to a person
or a whole Channel. IRC program that have this implemented will
automatically respond as does rxIRC when it gets such a request.
/SErver <address> [ <port> [ <timeout> ] ]
Switch to another IRC server. rxIRC will exit if the server does not
respond.
/STatus
This outputs some of rxIRC's variables, tells you what channel you are
talking to (Target), what query, where you got invited to last and who
last sent a message to you.
It also shows a /whois of yourself.
/TAlkto <new target>
This is the ONLY command to allow you to switch to another channel when
you are on multiple channels! You can NOT use /join for that.
However this command is even more flexible, you can use it with a nickname,
then all you type is sent to that person, just like /query. The difference
is: You can overlay two dialogues, by having two people in /talkto and
/query, then talk to the queried directly and to the other with the '/ '
command.
/TCPipstatus
Gives a brief not very useful information about your TCPIP status.
/WHO
The /who command can now be used without arguements, if you are talking
to a channel, it will show you the WHO list of that channel.
/Xamine
Quicky to get a /whois of the person that lest sent you a message.
/* <remark> [ */ ]
With this you can add RexX-style comments in your IRC PROFILE.
Lines beginning with /* are skipped.

27
syntax.helpirc Normal file
View File

@@ -0,0 +1,27 @@
.cm last change by lynx -- april 25, 1991
_______
*|^^^^^^^|* The Internet Relay Chat program
*| rxIRC |* for VM/CMS systems written in
*|_______|* RexX by Carl "lynx" v. Loesch.
^^^^^^^
Usage from CMS:
RXIRC [<nickname> [<server>] [<full name>]]] [ ( <options> ]
Options:
Port <port-number> IRC usually runs on port 6667, here you might
set another.. but you might not find a server
on an other port...
LIst_all {ON | OFF} Show also channels without topic with /list.
Logging {ON | OFF} You may start the logging from the command line.
LOUd {ON | OFF} This defines if an external 'BEEP' module should
be called whenever you receive an IRC beep.
Numbers {ON | OFF} Shows the numbers of IRC server replies.
Quiet {ON | OFF} If you want to use the quiet ignoring.
Timeout <seconds> The time to wait before giving up trying to connect
the server.