From 2a52bead013c571413da27084e334a60832433f2 Mon Sep 17 00:00:00 2001 From: George McMullen Date: Sat, 8 Jun 2013 14:10:07 -0700 Subject: [PATCH] v1.3 of rxIRC --- action.helpirc | 34 ++++ custom.helpirc | 52 ++++++ etiq.helpirc | 84 +++++++++ faq.helpirc | 51 ++++++ manual.helpirc | 287 ++++++++++++++++++++++++++++++ rxirc.$package | 18 ++ rxirc.exec | 461 ++++++++++++++++++++++++++++++++++++++++++++++++ rxirc.helpmenu | 20 +++ rxirc.install | 21 +++ rxirc.names | 21 +++ setenv.exec | 13 ++ special.helpirc | 95 ++++++++++ syntax.helpirc | 27 +++ 13 files changed, 1184 insertions(+) create mode 100644 action.helpirc create mode 100644 custom.helpirc create mode 100644 etiq.helpirc create mode 100644 faq.helpirc create mode 100644 manual.helpirc create mode 100644 rxirc.$package create mode 100644 rxirc.exec create mode 100644 rxirc.helpmenu create mode 100644 rxirc.install create mode 100644 rxirc.names create mode 100644 setenv.exec create mode 100644 special.helpirc create mode 100644 syntax.helpirc diff --git a/action.helpirc b/action.helpirc new file mode 100644 index 0000000..950209c --- /dev/null +++ b/action.helpirc @@ -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. :) diff --git a/custom.helpirc b/custom.helpirc new file mode 100644 index 0000000..17a71c6 --- /dev/null +++ b/custom.helpirc @@ -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. + diff --git a/etiq.helpirc b/etiq.helpirc new file mode 100644 index 0000000..acd0efc --- /dev/null +++ b/etiq.helpirc @@ -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. diff --git a/faq.helpirc b/faq.helpirc new file mode 100644 index 0000000..e22aa6a --- /dev/null +++ b/faq.helpirc @@ -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). diff --git a/manual.helpirc b/manual.helpirc new file mode 100644 index 0000000..ed8cf9c --- /dev/null +++ b/manual.helpirc @@ -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 . 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. diff --git a/rxirc.$package b/rxirc.$package new file mode 100644 index 0000000..8a595ce --- /dev/null +++ b/rxirc.$package @@ -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 diff --git a/rxirc.exec b/rxirc.exec new file mode 100644 index 0000000..a1378bd --- /dev/null +++ b/rxirc.exec @@ -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 diff --git a/rxirc.helpmenu b/rxirc.helpmenu new file mode 100644 index 0000000..f84ef47 --- /dev/null +++ b/rxirc.helpmenu @@ -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 diff --git a/rxirc.install b/rxirc.install new file mode 100644 index 0000000..df0ecc5 --- /dev/null +++ b/rxirc.install @@ -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 | diff --git a/rxirc.names b/rxirc.names new file mode 100644 index 0000000..3dc7e82 --- /dev/null +++ b/rxirc.names @@ -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 diff --git a/setenv.exec b/setenv.exec new file mode 100644 index 0000000..efd9205 --- /dev/null +++ b/setenv.exec @@ -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 diff --git a/special.helpirc b/special.helpirc new file mode 100644 index 0000000..065c1d1 --- /dev/null +++ b/special.helpirc @@ -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 + 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 + Use an other character than '/' to introduce commands. + +/Execute or more easily just: ! + 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 [ ] + 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 [ | ] + 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 "/ " 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 | + 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
[ [ ] ] + 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 + 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. + +/* [ */ ] + With this you can add RexX-style comments in your IRC PROFILE. + Lines beginning with /* are skipped. diff --git a/syntax.helpirc b/syntax.helpirc new file mode 100644 index 0000000..9db23cb --- /dev/null +++ b/syntax.helpirc @@ -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 [ [] []]] [ ( ] + + +Options: + + Port 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 The time to wait before giving up trying to connect + the server. +