mirror of
https://github.com/GeorgeMcMullen/rxIRC.git
synced 2026-01-14 15:46:54 +00:00
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c7934f2457 | ||
|
|
916e4338f1 | ||
|
|
8801ea2c49 | ||
|
|
62aca2100b |
7
00readme
7
00readme
@ -1,7 +0,0 @@
|
||||
From: Carl von Loesch <Carl.von.Loesch@arbi.informatik.uni-oldenburg.de>
|
||||
To: rxirc-l@vmtecqro.qro.itesm.mx (The rxIRC List),
|
||||
operlist@eff.org (IRC Operchaos List)
|
||||
Subject: rxIRC 2.0 ready to go - FTP admins invited to copy/mirror!
|
||||
Date: Mon, 14 Jun 93 15:57:16 CES
|
||||
|
||||
I am hereby releasing rxIRC 2.0. rxIRC is the IRC client for IBM VM systems.
|
||||
@ -25,10 +25,5 @@ ACTION commands:
|
||||
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. :)
|
||||
And finally create your own commands with help of the /ALIAS command.
|
||||
See the "SPECIAL" help page.
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
.cm last change by lynx -- april 25, 1991
|
||||
.cm last change by lynx -- nov 94
|
||||
|
||||
_______
|
||||
*|^^^^^^^|* The Internet Relay Chat program
|
||||
@ -11,19 +11,26 @@
|
||||
|
||||
|
||||
The PROFILE RXIRC startup file:
|
||||
| This file should contain a series of lines that are /source'd by
|
||||
| rxIRC as soon as you get connected to the first server. You could
|
||||
| for instance do "join #fun" or "who bunny", probably you will
|
||||
| want to set up some aliases. See /source for more.
|
||||
| The file IRC PROFILE is obsolete. For a conversion you have
|
||||
| to rename it and remove all the command characters (the slashes).
|
||||
This file should contain a series of lines that are /source'd by
|
||||
rxIRC as soon as you get connected to the first server. You could
|
||||
for instance do "join #fun" or "who bunny", probably you will
|
||||
want to set up some aliases. See /source for more.
|
||||
The file IRC PROFILE is obsolete. For a conversion you have
|
||||
to rename it and remove all the command characters (the slashes).
|
||||
|
||||
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 USERINFO requests are sent
|
||||
to you while you are ircing with rxIRC.
|
||||
unless otherwise specified in the command line. First it looks for
|
||||
:ircnick and :ircname tags in your 'self-entry' in your namesfile,
|
||||
if not present it will take the normal :nick and :name entries.
|
||||
Environment settings supercede these entries. You may also set a
|
||||
'motto' line by adding a :motto tag, which will be displayed when
|
||||
USERINFO requests are sent to you while you are on IRC. Particularely
|
||||
| interesting is how you can specify a :wwwport entry, which will acti-
|
||||
| vate rxIRC's builtin httpd (world wide web server). :wwwport should
|
||||
| contain a number greater than 1023. Also look up the /export command
|
||||
| to see how to use the httpd. Use a WWW client to learn about writing
|
||||
| HTML files. That is beyond the scope of these help files.
|
||||
|
||||
Environment settings:
|
||||
You may use 'setenv' or 'globalv' to put some values into environment
|
||||
@ -32,29 +39,30 @@ Environment settings:
|
||||
other IRC programs.
|
||||
|
||||
The RXIRC PFKEYS file is obsolete. You can use the 'PF' commands
|
||||
| from PROFILE RXIRC now.
|
||||
from PROFILE RXIRC now.
|
||||
|
||||
Defaults in the RXIRC NAMES file (the rxIRC configuration file):
|
||||
server: The internet address of an IRC server
|
||||
| pass: A password, if your IRC server needs it (rarely ever)
|
||||
port: The TCP/IP port it runs on, usually 6667
|
||||
| browser: Name of a command good for showing files.
|
||||
| Typically BROWSE, but if that's not there try XEDIT.
|
||||
| timeout: Not used anymore, you can remove it
|
||||
browser: Name of a command good for showing files.
|
||||
Typically BROWSE, but if that's not there try XEDIT.
|
||||
timeout: Not used anymore, you can remove it
|
||||
logging: Set it to ON or OFF for default logging
|
||||
quiet_ignore: Usually OFF
|
||||
loud_beeps: Switch it ON only when a BEEP MODULE is available.
|
||||
show_numbers: When ON, rxIRC shows the numerics of IRC server replies
|
||||
list_all: Show also channels without topic in /list
|
||||
| beep_char: The character that gets translated into a beep and back.
|
||||
| bold_char: If you define this one, you can make 'bold' messages
|
||||
| by inserting this character in your messages. They
|
||||
| will appear hilighted on rxIRC and bold on ircII
|
||||
| clients (at least)
|
||||
| highlight_char: Not used anymore
|
||||
| show_time: When the current time will be displayed on the
|
||||
| screen. Choices are 0 (never), 10 (every ten
|
||||
| minutes), 20 (every 20 minutes), 30 (every 30
|
||||
| minutes), and 60 (every 60 minutes).
|
||||
beep_char: The character that gets translated into a beep and back.
|
||||
bold_char: If you define this one, you can make 'bold' messages
|
||||
by inserting this character in your messages. They
|
||||
will appear hilighted on rxIRC and bold on ircII
|
||||
clients (at least)
|
||||
highlight_char: Not used anymore
|
||||
show_time: When the current time will be displayed on the
|
||||
screen. Choices are 0 (never), 10 (every ten
|
||||
minutes), 20 (every 20 minutes), 30 (every 30
|
||||
minutes), and 60 (every 60 minutes).
|
||||
|
||||
You might choose to copy this file onto your disk to be able to
|
||||
modify the values.
|
||||
|
||||
52
faq.helpirc
52
faq.helpirc
@ -2,28 +2,19 @@ Frequently asked questions:
|
||||
--------------------------
|
||||
What am I supposed to write into the :server field in RXIRC NAMES?
|
||||
|
||||
You don't have a server? If you're in the US then Trillian
|
||||
(hrose@eff.org) will most probably be able to tell you the nearest
|
||||
server to you. You can however connect to IRC through an open server
|
||||
like irc.mit.edu (18.70.0.224), fairhope.andrew.cmu.edu (128.2.11.213)
|
||||
magpie.ee.su.oz.au (129.78.13.28) or ucsu.colorado.edu (128.138.129.83)
|
||||
| and then ask operators for the nearest server to you.
|
||||
You can also examine the /links list, but geographical vicinity
|
||||
usually is not network vicinity!
|
||||
| You don't have a server? Check out the "servers.*" list which
|
||||
| is available by ftp on cs-ftp.bu.edu in /irc/support/.
|
||||
|
||||
|Why can't rxIRC have /on and /notify and everything else
|
||||
|that ircII has?
|
||||
Why can't rxIRC have everything 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!
|
||||
|
|
||||
|Strange says:
|
||||
| There is no /on because no one wants to code it. None of the people
|
||||
| who have worked on rxIRC NEED or WANT /on. :P
|
||||
|
|
||||
| Concerning /notify: Use a /note server! :)
|
||||
|
||||
Strange says:
|
||||
There is no /on because no one wants to code it. None of the people
|
||||
who have worked on rxIRC NEED or WANT /on. :P
|
||||
|
||||
Why when I do something outside of rxIRC with /exec, or simply read
|
||||
the /help files, the server signs me off?
|
||||
@ -40,24 +31,17 @@ You have a bug, "/who -h *.il" doesn't work!
|
||||
to ircII. They are NOT standard. It is the normal and natural way
|
||||
to do it simply with "/who *.il". Or what about trying /local.
|
||||
|
||||
When I use one of the new action commands on a channel, like /smile
|
||||
I get error messages.
|
||||
|
||||
| There are controverse notions of the ethics of the CTCP ACTION protocol.
|
||||
| I think it's a valid alternative form of communication and should be
|
||||
| supported, but since I invented it I might be biased. Well some IRC
|
||||
| client programmers insist on not supporting this protocol and return
|
||||
| all sorts of funny messages. Eventually avoid using these commands
|
||||
| on channels where people's clients answer with sarcastic comments.
|
||||
|
||||
rxIRC crashes and then no communication software (like CHAT) works
|
||||
anymore!
|
||||
|
||||
| rxIRC should not crash, if it does please report that to me.
|
||||
| To unlock your machine in such a situation it is not necessary to
|
||||
| re-IPL it, instead just do "NUCXDROP REXXWAIT". "NUCXMAP" shows
|
||||
| what so-called nucleus extensions are loaded in your machine.
|
||||
|
||||
|
||||
rxIRC should not crash, if it does please report that to me.
|
||||
To unlock your machine in such a situation it is not necessary to
|
||||
re-IPL it, instead just do "NUCXDROP REXXWAIT". "NUCXMAP" shows
|
||||
what so-called nucleus extensions are loaded in your machine.
|
||||
|
||||
It tells me loader table overflow
|
||||
|
||||
Use 'SET LDRTBLS 10' in your PROFILE or in the RXIRC EXEC.
|
||||
|
||||
You still have a question?
|
||||
Write mail to 'loesch@informatik.uni-oldenburg.de' (internet).
|
||||
or to '244661 at DOLUNI1' (bitnet)
|
||||
Write mail to <lynx@imp.de> or to '244661 at DOLUNI1'.
|
||||
|
||||
@ -10,13 +10,8 @@ pf6 IMM /lastlog
|
||||
alias ctoggle %k %c pf$k IMM /toggle $k |join $c|part $c
|
||||
ctoggle 9 #talk
|
||||
ctoggle 10 #initgame
|
||||
|
||||
* Easy use of services
|
||||
alias .ni msg nickserv@service.de
|
||||
alias .no msg noteserv@service.de
|
||||
alias .w .ni whois
|
||||
alias .await .no waitfor
|
||||
alias .del .no delete
|
||||
alias .list .no list
|
||||
alias .m .no msg
|
||||
alias .read .no read
|
||||
pf11 DEL /notify
|
||||
|
||||
* here comes the list of friends to notify for
|
||||
* these are just examples, fill in your own
|
||||
notify SymLynX Lambretta
|
||||
|
||||
489
rxirc.exec
489
rxirc.exec
@ -1,7 +1,6 @@
|
||||
/* rxIRC
|
||||
* Internet Relay Chat client program for VM/CMS systems
|
||||
* written by Carl 'LynX' v. Loesch (loesch@informatik.uni-oldenburg.de)
|
||||
* created by Lynx (244661 at DOLUNI1) on Thursday, 14 Feb 1991
|
||||
* Credits for suggestions, code contribution, miscellaneous help go to:
|
||||
* Jose Maria Blasco, Doug Sewell, Martin Ahlborn, Jim McMaster,
|
||||
* Scott Maxell, Juan Courcoul, Rob Blais, Mike Letourneau, Grant Pair
|
||||
@ -9,23 +8,24 @@
|
||||
*
|
||||
* requires RXSOCKET MODULE version 2 by Arty Ecock (eckcu@cunyvm.bitnet)
|
||||
*
|
||||
* Copyright (C)1991,2,3 by Lynx & CvO University Oldenburg, Germany
|
||||
* Copyright (C)1991,2,3,4 by LynX & CvO University Oldenburg, Germany
|
||||
* You may freely use this software at your own risk.
|
||||
* No distribution of modified copies permitted, pls send changes to me.
|
||||
*
|
||||
* By the way, this is _not_ the source code of rxIRC. There exists a
|
||||
* special file IRC PREXX which when run through a preprocessor produces
|
||||
* the actual RXIRC EXEC. That file is commented. This one is not.
|
||||
*/ vers='2.0'; trace 'O'
|
||||
* Warning: Changing the code to display fake user information is
|
||||
* considered an offense by many IRC administrators!
|
||||
*
|
||||
*/ progname='rxIRC'; vers='2.1'; trace 'O'
|
||||
address "COMMAND"; signal on HALT; "VMFCLEAR"
|
||||
cmds='AWAY AWAIT ADMIN CHANNEL CONNECT DEOP DIE HASH INFO ISON JOIN KICK',
|
||||
'KILL LIST LINKS LUSERS MODE MAIL MOTD NAMES NICK NOTICE NOTE OPER PASS',
|
||||
'PART REHASH RESTART QUIT SERVICE SQUIT SUMMON STATS TOPIC TIME TRACE',
|
||||
'PART REHASH RESTART QUIT SERVICE SQUIT SUMMON STATS TIME TRACE',
|
||||
'USERS USERHOST VOICE WHOWAS WALLOPS WALL XTRA'
|
||||
log=0; query=; ignore=; lastjoin=; lastsender=; onoff.1="on"; onoff.0="off"
|
||||
log=0; query=; ignore=; omit=; lastjoin=; lastsender=; lastorigin=;
|
||||
export=; onoff.1="on"; onoff.0="off"
|
||||
invitation=; away=; ll.=; curll=1; logevent=0; target=time('R')
|
||||
v.=; al.=; varnames=; aliasnames=; cmdchar=; userinfo=; sourcing=0
|
||||
have_rxwt=0; who_empty=0; catmode=0; catlist=; abortsource=0; skiplines=0
|
||||
nflist=; nfhere=; nfcatch=0
|
||||
"EXECIO * CP (STEM PF. STRING QUERY PF"
|
||||
do i=1 to pf.0
|
||||
a=word(pf.i,2)
|
||||
@ -53,14 +53,14 @@
|
||||
end
|
||||
if rc/=0 then call BYE "RXSOCKET version 2 required"
|
||||
do 3
|
||||
parse value SOCKET('INITIALIZE', 'rxIRC', 1) with rc . etc
|
||||
parse value SOCKET('INITIALIZE', "rxIRC", 7) with rc . etc
|
||||
if rc=2004 then do
|
||||
say '<cleaning up a zombie rxsocket nucext>'
|
||||
'NUCXDROP RXSOCKET'
|
||||
end
|
||||
else leave
|
||||
end
|
||||
if rc/=0 then call BYE "initialize error:" etc
|
||||
if rc/=0 then call BYE "socket init error:" etc
|
||||
parse value SOCKET('GETHOSTNAME') with . hostname
|
||||
parse value SOCKET('GETDOMAINNAME') with . domain
|
||||
'REXXWAIT TEST'
|
||||
@ -76,8 +76,9 @@
|
||||
'IMMCMD SET HI'
|
||||
"NAMEF :NICK RXIRC :SERVER :PORT :LOGGING :QUIET_IGNORE :SHOW_TIME ",
|
||||
":BOLD_CHAR :BEEP_CHAR :LOUD_BEEPS :SHOW_NUMBERS :LIST_ALL :BROWSER",
|
||||
"(LIFO FILE RXIRC"
|
||||
":PASS (LIFO FILE RXIRC"
|
||||
if rc/=0 then call BYE "missing or unreadable RXIRC NAMES file"
|
||||
parse pull server_pass
|
||||
pull viewcmd; pull def_listall; pull def_numb; pull def_loud
|
||||
parse pull beepch; parse pull boldch; parse pull showtime; pull def_quiet
|
||||
pull def_log; parse pull def_port; parse pull def_server
|
||||
@ -86,8 +87,11 @@
|
||||
if boldch='' then boldch=d2c(0)
|
||||
"GLOBALV SELECT CENV GET IRCNICK IRCSERVER IRCNAME IRCPORT"
|
||||
|
||||
"NAMEFIND :USERID" me ":NICK :NAME :MOTTO :CMDCHAR :IRCNICK :IRCNAME (LIFO"
|
||||
"NAMEFIND :USERID" me ":NICK :NAME :MOTTO :CMDCHAR :IRCNICK :IRCNAME ",
|
||||
":WWWPORT (LIFO"
|
||||
if rc=0 then do
|
||||
parse pull wwwport; if wwwport/='' & ^datatype(wwwport,'W') then do
|
||||
wwwport=; call BYE "WWW port must be numeric"; end
|
||||
parse pull name; parse pull nick
|
||||
if ircnick="" then ircnick=nick
|
||||
if ircname="" then ircname=name
|
||||
@ -131,25 +135,44 @@
|
||||
|
||||
parse value RESETVALUE('ALL') with rc .
|
||||
if rc/=0 then call BYE "problem w/RESETVALUE"
|
||||
parse value SETVALUE('TIME ==:=0:00') with rc .
|
||||
parse value SETVALUE('TIME ==:==:00') with rc .
|
||||
if rc/=0 then call BYE "problem w/SETVALUE TIME"
|
||||
parse value SETVALUE('MSG IUCV') with rc .
|
||||
if rc/=0 then call BYE "problem w/SETVALUE MSG IUCV"
|
||||
call S "rxIRC"hi||vers||yo"- You are" ircnick "("ircname")"
|
||||
|
||||
if wwwport<1024 then wwwport=''
|
||||
else do
|
||||
parse value SOCKET('SOCKET') with rc www etc
|
||||
if rc/=0 then call BYE "socket:" etc
|
||||
parse value SOCKET('SETSOCKOPT',www,'SOL_SOCKET','SO_ASCII','ON'),
|
||||
with rc . etc
|
||||
if rc/=0 then call BYE "setsockopt:" etc
|
||||
parse value SOCKET('BIND', www, 'AF_INET' wwwport SOCKET('GETHOSTID')),
|
||||
with rc . etc
|
||||
if rc/=0 then call BYE "bind:" etc
|
||||
parse value SOCKET('LISTEN', www, 9) with rc . etc
|
||||
if rc/=0 then call BYE "listen:" etc
|
||||
parse value SOCKET('IOCTL', www, 'FIONBIO', 1) with rc . etc
|
||||
if rc/=0 then call BYE "nonblocking i/o:" etc
|
||||
myurl="http://"hostname"."domain":"wwwport"/"
|
||||
end
|
||||
|
||||
call S progname||hi||vers||yo"- You are" ircnick "("ircname")"
|
||||
call S "Logging is" onoff.log"; Audible bells are",
|
||||
onoff.loud"; Quiet ignore is" onoff.quiet
|
||||
if showtime=80 then say "Time display is off"
|
||||
else say "Time is displayed every" showtime "minutes"
|
||||
if www/='' then call S "Builtin httpd active as"hi||myurl||yo
|
||||
call CONNECT ircserver
|
||||
call SOURCE "PROFILE", 1
|
||||
if nflist/='' then do; nfcatch=1; call SEND "ISON" nflist; end
|
||||
call S copies("-",79)lo
|
||||
do forever
|
||||
"IMMCMD STATUS HI"
|
||||
if rc/=0 then call S,
|
||||
'Sorry, "hi" is a system reserved word. Try an other operating system.'
|
||||
parse value WAIT('TIME','CONS','MSG','SOCKET READ' sock) with rc type data
|
||||
parse value WAIT('TIME','CONS','MSG','SOCKET READ *') with rc type data
|
||||
select
|
||||
when rc/=0 then call BYE "REXXWAIT returning code" rc
|
||||
when type='SOCKET' then do
|
||||
when rc/=0 then call BYE "REXXWAIT returning" rc
|
||||
when type='SOCKET' & data='READ' sock then do
|
||||
parse value SOCKET('READ', sock) with rc . data
|
||||
if rc=54 then call BYE
|
||||
if rc/=0 then call BYE 'socket read error' rc
|
||||
@ -175,12 +198,16 @@
|
||||
if ^quiet & left(data,1)/='*' then call TELL origin '*' ignore_reply
|
||||
end; else do
|
||||
call OUT hi||ni':'lo||data
|
||||
if away/='' & left(data,1)/='*' then call TELL origin '* away:' away
|
||||
if away/='' & left(data,1)/='*' & origin/=lastorigin then do
|
||||
call TELL origin '* away:' away
|
||||
lastorigin = origin
|
||||
end
|
||||
end
|
||||
end
|
||||
when type = 'TIME' then do
|
||||
parse var data . hh':'mm':' .
|
||||
if datatype(mm/showtime,'w') then call S 'It is now' hh':'mm
|
||||
if nflist/='' then do; nfcatch=1; call SEND "ISON" nflist; end
|
||||
'EXECIO 1 CP(VAR A STR Q' me
|
||||
parse var a . '-' a .
|
||||
if a='DSC' then do
|
||||
@ -189,16 +216,46 @@
|
||||
call BYE data
|
||||
end
|
||||
end
|
||||
otherwise
|
||||
call S 'Unexpected event:' type data
|
||||
when type='SOCKET' then do
|
||||
parse var data . gsock
|
||||
if gsock=www then do
|
||||
parse value SOCKET('ACCEPT', www) with rc gsock . gport gipnum
|
||||
end; else do
|
||||
parse value SOCKET('READ', gsock) with rc . data
|
||||
if rc=54 then iterate
|
||||
if rc/=0 then call S 'Read error on http connection' gsock '('rc')'
|
||||
else do
|
||||
if data='' then do; SOCKET('CLOSE', gsock); iterate; end
|
||||
parse var data cmd url .
|
||||
parse var url URL(lf) .
|
||||
if url='/' then url='/index.html'
|
||||
parse var url '/'fn'.'ft'/' x; upper fn ft
|
||||
if x='' & fn/='' & fn/='*' & ft/='' & ft/='*' &,
|
||||
(cmd='GET'|cmd='HEAD') & FINDM(export,fn'.'ft) then do
|
||||
call S 'httpd: request from' gipnum':' cmd url
|
||||
/* 'MAKEBUF'; 'LISTFILE' fn ft '(STACK'; t=rc; 'DROPBUF' */
|
||||
'STATE' fn ft
|
||||
if rc=0 then do
|
||||
call WRITE gsock "HTTP/1.0 200 Sure"
|
||||
call WRITE gsock "Server:" progname"/"vers
|
||||
if ft='HTML' then ct='html'; else ct='plain'
|
||||
call WRITE gsock "Content-type: text/"ct
|
||||
call WRITE gsock ''
|
||||
if cmd='GET' then call WRITEFILE gsock fn ft pubmode
|
||||
end
|
||||
end; else call S 'httpd: invalid request ('cmd url') from' gipnum
|
||||
SOCKET('SHUTDOWN', gsock)
|
||||
end
|
||||
end
|
||||
end
|
||||
otherwise call S 'Unexpected event:' type data
|
||||
end
|
||||
end
|
||||
call BYE "a rexx oddity"
|
||||
|
||||
PARSE:
|
||||
parse arg a
|
||||
if loud & pos(beep,a)/=0 then "BEEP"
|
||||
b=; a=translate(a,"%"||beepch||"_",rev||beep||undl)
|
||||
tu=; a=translate(a,"%"||beepch||"_",rev||beep||undl)
|
||||
i=1; j=0; do forever; i=index(a,bold,i)
|
||||
if i=0 then leave
|
||||
if j=0 then a=insert(hi,a,i)
|
||||
@ -209,76 +266,86 @@ PARSE:
|
||||
if j=1 then a=a||lo
|
||||
if left(a,1)=':' then do
|
||||
parse var a ':'s m e f ':'g
|
||||
parse var s s'!'sad
|
||||
parse var s s"!"sad
|
||||
end
|
||||
else do; s=''; parse var a m e f ':'g; end
|
||||
f=strip(f)
|
||||
logevent = 1
|
||||
select
|
||||
when m='CHANNEL' then if e="0"
|
||||
then b='***' s 'leaves this channel'
|
||||
else b='***' s 'joins this channel'
|
||||
then tu='***' s 'leaves this channel'
|
||||
else tu='***' s 'joins this channel'
|
||||
when m='INVITE' then do
|
||||
f=strip(word(f g,1))
|
||||
invitation = f
|
||||
lastsender = s
|
||||
b='***' s '('sad') invites you to channel' f; end
|
||||
tu='***' s '('sad') invites you to channel' f g; end
|
||||
when m='JOIN' then do
|
||||
e=strip(word(e g,1))
|
||||
b='***' s '('sad') joins channel' e
|
||||
tu='***' s '('sad') joins channel' e
|
||||
if s=ircnick then target=translate(e)
|
||||
else lastjoin=s
|
||||
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' f 'on' e
|
||||
when m='MSG' then b='<'s'>' g
|
||||
when m='NICK' then b='***' s 'is now known as' e||g
|
||||
when m='KICK' then tu='***' s 'kicks' f 'off channel' e '('g')'
|
||||
when m='KILL' then tu='You were killed by' s subword(g,2)
|
||||
when m='MODE' then tu='Mode change:' s 'sets' f 'on' e||g
|
||||
when m='MSG' then tu='<'s'>' g
|
||||
when m='NICK' then tu='***' s 'is now known as' e||g
|
||||
when m='NOTICE' then select
|
||||
when s='' | s=servername then do
|
||||
if word(g,1)="***" then b=subword(g,2)
|
||||
else b=g
|
||||
a=; parse var b 'Your host is 'g'['a .
|
||||
if word(g,1)="***" then tu=subword(g,2)
|
||||
else tu=g
|
||||
a=; parse var tu 'Your host is 'g'['a .
|
||||
if a/='' then servername=g
|
||||
end
|
||||
when translate(e)=capnick then do
|
||||
if FINDM(ignore,s) | FINDM(ignore,sad) then do
|
||||
return ''; end
|
||||
else do; b='-'s'-' g
|
||||
lastsender=s
|
||||
if ^FINDM(ignore,s) & ^FINDM(ignore,sad) then do
|
||||
tu='-'s'-' g; lastsender=s
|
||||
end
|
||||
end
|
||||
otherwise b='-'s':'e'-' g; end
|
||||
when m='PART' then b='***' s 'parts channel' e
|
||||
otherwise if ^FINDM(omit,s) & ^FINDM(omit,sad) then tu='-'s':'e'-' g
|
||||
end
|
||||
when m='PART' then tu='***' s 'leaves channel' e
|
||||
when m='PING' then call SEND("PONG :"ircnick)
|
||||
when m='PRIVMSG' then select
|
||||
when translate(e)=capnick then do
|
||||
when m='PRIVMSG' then do
|
||||
if translate(e)=capnick then do
|
||||
if FINDM(ignore,s) | FINDM(ignore,sad) then do
|
||||
if ^quiet then call SEND('NOTICE' s ':'ignore_reply)
|
||||
return ''; end
|
||||
else do
|
||||
if CTCP(1 g) then b='*'s'*' g
|
||||
if CTCP(1 g) then tu='*'s'*' g
|
||||
lastsender=s
|
||||
end
|
||||
end
|
||||
when translate(e)=target 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 by' 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='221' then b='Your mode is' g
|
||||
when m='301' then b=f 'is away:' g
|
||||
else if ^FINDM(omit,s) & ^FINDM(omit,sad) then
|
||||
if CTCP(0 g) then do
|
||||
if translate(e)=target then tu='<'s'>' g
|
||||
else tu='<'s':'e'>' g
|
||||
end
|
||||
end
|
||||
when m='QUIT' then tu='Signoff by' s '('g')'
|
||||
when m='TOPIC' then tu='***' s 'sets the topic to:' g
|
||||
when m='WALLOPS' then tu='Wallops from' s':' g
|
||||
when m='WALL' then tu='Broadcast from' s':' g
|
||||
when m='221' then tu='Your mode is' g
|
||||
when m='301' then tu=f 'is away:' g
|
||||
when m='302' then do
|
||||
parse var g ni'='uh
|
||||
if left(uh,1)='+' then aw='here'
|
||||
else aw='away'
|
||||
tu=ni 'is' aw '('substr(uh,2)')'
|
||||
end
|
||||
when m='303' & nfcatch then call ISON g
|
||||
when m='311' then do
|
||||
parse var f ni ui no .
|
||||
b=ni 'is' ui'@'no '('g')'
|
||||
tu=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' word(f,2) '('g')'
|
||||
tu=ni 'was' ui'@'no '('g')'; end
|
||||
when m='312' then tu='via' word(f,2) '('g')'
|
||||
when m='315' then if who_empty then call S 'No matches for /who'
|
||||
when m='319' then b='on channels:' g
|
||||
when m='317' then b='and has been idle' word(f,2) 'seconds'
|
||||
when m='319' then tu='on channels:' g
|
||||
when m='317' then tu='apparently idle' word(f,2)/60 'minutes'
|
||||
when m='322' then do
|
||||
parse var f ch n .
|
||||
if ch/='*' & substr(ch,2,1)/='27'x then do
|
||||
@ -287,10 +354,10 @@ PARSE:
|
||||
end; end
|
||||
when m='323' then do
|
||||
if catmode then do
|
||||
call OUT 'Channels:' catlist; catlist=; catmode=0; end; 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)
|
||||
call OUT 'Channels:' catlist; catlist=; catmode=0; end; end
|
||||
when m='324' then tu='The mode on channel' word(f,1) 'is' word(f,2)
|
||||
when m='332' then tu='The topic is:' g
|
||||
when m='341' then tu='Inviting' word(f,1) 'to channel' word(f,2)
|
||||
when m='352' then do
|
||||
parse var f ch us no . ni st .
|
||||
if st="S" then return ''
|
||||
@ -307,23 +374,25 @@ PARSE:
|
||||
when m='353' then do; ch=word(f,2); a=words(g)
|
||||
if ch/='*' & (a>6 | translate(ch)=target) then call OUT hi||left(ch,15)yo||g
|
||||
end
|
||||
when m='313'|m='364' then b=f g
|
||||
when m='313'|m='364' then tu=f g
|
||||
when m='004'|m='318'|m='321'|m='365'|m='366'|m='406' then nop
|
||||
when m='001' then do; servername=s; b=subword(g,1,words(g)-1); end
|
||||
when m='252'|m='254' then b=f g
|
||||
when m='001' then do; servername=s; tu=subword(g,1,words(g)-1); end
|
||||
when m='376' then call SOURCE "CONNECT", 1
|
||||
when m='252'|m='254' then tu=f g
|
||||
otherwise select
|
||||
when g="" then b=f
|
||||
when f=""|f=s then b=g
|
||||
otherwise b=f":" g
|
||||
when g="" then tu=f
|
||||
when f=""|f=s then tu=g
|
||||
otherwise tu=f":" g
|
||||
end
|
||||
if s/="" & s/=servername then b='('s')' b
|
||||
if numb then b='{'m'}' b
|
||||
if s/="" & s/=servername then tu='('s')' tu
|
||||
if numb then tu='{'m'}' tu
|
||||
end
|
||||
return translate(b,"@",msa)
|
||||
return translate(tu,"@",msa)
|
||||
|
||||
VAR:
|
||||
parse arg x
|
||||
select
|
||||
when datatype(x,'w') then return '$'||x
|
||||
when x=',' then return lastsender
|
||||
when x=':' then return lastjoin
|
||||
when x='A' then return away
|
||||
@ -338,6 +407,7 @@ VAR:
|
||||
if query='' then return target
|
||||
else return query
|
||||
end
|
||||
when x='U' then return myurl
|
||||
when x='V' then return vers
|
||||
when x='Z' then return left(time(),5)
|
||||
when x='$' then return '$'
|
||||
@ -346,12 +416,12 @@ VAR:
|
||||
return '<error>'
|
||||
|
||||
SET:
|
||||
parse arg r
|
||||
if r='' then do i=1 to words(varnames)
|
||||
r=word(varnames,i); call S '$('r') is "'v.r'"'
|
||||
parse arg z
|
||||
if z='' then do i=1 to words(varnames)
|
||||
z=word(varnames,i); call S '$('z') is "'v.z'"'
|
||||
end
|
||||
else do
|
||||
parse var r a b
|
||||
parse var z a b
|
||||
if b='' then call S 'Variable' a 'has the value "'v.a'"'
|
||||
else do; v.a=b; if find(varnames,a)=0 then varnames=a varnames; end
|
||||
end
|
||||
@ -384,27 +454,27 @@ SHELL:
|
||||
end
|
||||
return
|
||||
end
|
||||
do while lin^=''
|
||||
do while lin/=''
|
||||
if left(lin,1)='*' then return
|
||||
parse var lin one '15'x lin
|
||||
par=; lc=; com='$'; al.com = one
|
||||
do while al.com^=''; a=al.com
|
||||
do while left(a,1)='%'
|
||||
parse var a '%'var a
|
||||
parse var par b par
|
||||
v.var=b
|
||||
do while al.com/=''; sa=al.com
|
||||
do while left(sa,1)='%'
|
||||
parse var sa '%'var sa
|
||||
parse var par sb par
|
||||
v.var=sb
|
||||
end
|
||||
if par^='' then do; a=a par; par=''; end
|
||||
b=; do while a^=''
|
||||
parse var a k'$'y a
|
||||
if y='' then do; b=b||k; leave; end
|
||||
if left(y,1)='(' then do; parse var y 2 x')'y; a=y a; end
|
||||
else do; x=left(y,1); a=substr(y,2) a; end
|
||||
b=b||k||VAR(x)
|
||||
if par/='' then do; sa=sa par; par=''; end
|
||||
sb=; do while sa/=''
|
||||
parse var sa k'$'y sa
|
||||
if y='' then do; sb=sb||k; leave; end
|
||||
if left(y,1)='(' then do; parse var y 2 x')'y; sa=y sa; end
|
||||
else do; x=left(y,1); sa=substr(y,2) sa; end
|
||||
sb=sb||k||VAR(x)
|
||||
end
|
||||
parse var b com par '::' next
|
||||
parse var sb com par '::' next
|
||||
upper com
|
||||
if next^='' then lin=next||'15'x||lin
|
||||
if next/='' then lin=next||'15'x||lin
|
||||
if find(lc, com)=0 then lc=com lc
|
||||
else do; call S 'Alias loop of "'com'" encountered'; return; end
|
||||
end
|
||||
@ -414,9 +484,10 @@ SHELL:
|
||||
|
||||
COMMAND:
|
||||
parse arg q r; out=; upper q
|
||||
if abbrev('LEAVE',q,2) then q='PART'
|
||||
select
|
||||
when abbrev('ABORT',q,2) then call BYE "your abort request"
|
||||
when abbrev('AWAY',q,2) then do; away=r; out="AWAY" r; end
|
||||
when abbrev('AWAY',q,2) then do; lastorigin=; away=r; out="AWAY :"r; end
|
||||
when abbrev('BYE',q,1)|abbrev('SIGNOFF',q,6)|abbrev('QUIT',q,3) then do
|
||||
call SEND('QUIT' r); call BYE; end
|
||||
when abbrev('CATALOG',q,2) then do; catmode=1; out='LIST' r; end
|
||||
@ -429,13 +500,14 @@ COMMAND:
|
||||
when abbrev('CMDCHARACTER',q,2) then cmdchar=left(r,1)
|
||||
when q='ECHO' then call OUT r
|
||||
when abbrev('EXECUTE',q,1) then call EXECUTE r
|
||||
when abbrev('EXPORT',q,4) then call EXPORT r
|
||||
when abbrev('EXPRESSION',q,4) then call SET word(r,1) EXPR(subword(r,2))
|
||||
when abbrev('FOLLOW',q,1) then out='JOIN' invitation
|
||||
when abbrev('HELP',q,1) then do
|
||||
address 'CMS' "HELP RXIRC"; say; end
|
||||
when q='IF' then do
|
||||
parse var r cond a r
|
||||
if translate(a)^='THEN' then call S "IF" cond": THEN is missing"
|
||||
if translate(a)/='THEN' then call S "IF" cond": THEN is missing"
|
||||
else do
|
||||
rc = INTERP("if ("cond") then rc=0; else rc=1")
|
||||
if rc=0 then call COMMAND r
|
||||
@ -450,6 +522,7 @@ COMMAND:
|
||||
when abbrev('LOGGING',q,2) then call LOGGING r
|
||||
when abbrev('NICKNAME',q,1) then if r='' then out='WHOIS' ircnick
|
||||
else do; out='NICK' r; ircnick=r; capnick=translate(r); end
|
||||
when q='NF'|abbrev('NOTIFY',q,4) then call NOTIFY r
|
||||
when left(q,2)='PF' then 'CP SET' q r
|
||||
when abbrev('REPLY',q,1) then call QUERY lastsender
|
||||
when abbrev('SERVER',q,1) then call CONNECT r
|
||||
@ -467,7 +540,7 @@ COMMAND:
|
||||
when abbrev('TELL',q,2) then call TELL r
|
||||
when abbrev('TOGGLE',q,3) then call TOGGLE r
|
||||
when abbrev('VERSION',q,3) then do; out='VERSION' r
|
||||
if r='' then call S 'rxIRC' vers
|
||||
if r='' then call S progname vers
|
||||
end
|
||||
when abbrev('VIEWLOG',q,2) & viewcmd/='' then do
|
||||
address 'CMS' viewcmd logfile; say; end
|
||||
@ -483,6 +556,7 @@ COMMAND:
|
||||
who_empty=1; out="WHO *"right(domain,trunc(length(domain)/2)); end
|
||||
when q='M'|q='MSG'|abbrev('MESSAGE',q,3) then do
|
||||
parse var r ni r; out='PRIVMSG' ni ':'r; end
|
||||
when abbrev('OMIT',q,2) then call OMIT 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
|
||||
@ -493,6 +567,7 @@ COMMAND:
|
||||
when q='SAY' then out='PRIVMSG' target ':'r
|
||||
when q='SWHO' then out='NAMES'
|
||||
when q='T' then out='TOPIC' target ':'r
|
||||
when abbrev('TOPIC',q,2) then out='TOPIC' word(r,1) ':'subword(r,2)
|
||||
when q='WHO' then do
|
||||
who_empty=1
|
||||
if r="" then out='WHO' target
|
||||
@ -522,15 +597,37 @@ COMMAND:
|
||||
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
|
||||
parse var a x a
|
||||
z=find(ignore,x); if z/=0 then
|
||||
ignore=strip(delword(ignore,z,1))
|
||||
else ignore=x ignore
|
||||
end
|
||||
call OUT 'You are ignoring:' ignore
|
||||
if quiet then call S "And you don't send notices about it (quiet ignore)."
|
||||
return
|
||||
|
||||
EXPORT:
|
||||
arg a
|
||||
do words(a)
|
||||
parse var a x a
|
||||
z=find(export,x); if z/=0 then
|
||||
export=strip(delword(export,z,1))
|
||||
else export=x export
|
||||
end
|
||||
call OUT 'You are exporting:' export
|
||||
return
|
||||
|
||||
OMIT:
|
||||
arg a
|
||||
do words(a)
|
||||
parse var a x a
|
||||
z=find(omit,x); if z/=0 then
|
||||
omit=strip(delword(omit,z,1))
|
||||
else omit=x omit
|
||||
end
|
||||
call OUT 'You are omitting:' omit
|
||||
return
|
||||
|
||||
QUERY:
|
||||
parse arg qq
|
||||
if query/='' then call S 'Terminating query with' query
|
||||
@ -559,28 +656,25 @@ LOGGING:
|
||||
return
|
||||
|
||||
S:
|
||||
parse arg k
|
||||
say k
|
||||
parse arg k; say k; if log then writelog k
|
||||
if logevent/=0 then do
|
||||
curll=curll+1; ll.curll=x; logevent=0; k=curll-50; ll.k=; end
|
||||
if log then writelog k
|
||||
curll=curll+1; ll.curll=k; logevent=0; k=curll-50; ll.k=; end
|
||||
return
|
||||
|
||||
OUT:
|
||||
parse arg x
|
||||
if x="" then return
|
||||
if length(x) < 81 then q=0
|
||||
parse arg x; if x="" then return
|
||||
if length(x) < 81 then y=0
|
||||
else do 1
|
||||
q=pos(word(x,2),x)-1; if q>30 | q<0 then q=3
|
||||
p=lastpos(" ",x,80)
|
||||
if p<30 then do; q=3; p=77; end
|
||||
call S left(x,p); x=substr(x,p+1)
|
||||
do while length(x)+q > 80
|
||||
p=lastpos(" ",x,80-q); if p<30 then do; q=3; p=77; end
|
||||
call S copies(" ",q)left(x,p); x=substr(x,p+1)
|
||||
y=pos(word(x,2),x)-1; if y>30 | y<0 then y=3
|
||||
z=lastpos(" ",x,80)
|
||||
if z<30 then do; y=3; z=77; end
|
||||
call S left(x,z); x=substr(x,z+1)
|
||||
do while length(x)+y > 80
|
||||
z=lastpos(" ",x,80-y); if z<30 then do; y=3; z=77; end
|
||||
call S copies(" ",y)left(x,z); x=substr(x,z+1)
|
||||
end
|
||||
end
|
||||
call S copies(" ",q)x
|
||||
call S copies(" ",y)x
|
||||
return
|
||||
|
||||
CONNECT:
|
||||
@ -594,16 +688,16 @@ CONNECT:
|
||||
in.2=me x2c('4b404b') ':'ircname
|
||||
parse value SOCKET('SOCKET', 'AF_INET', 'SOCK_STREAM') with rc sock etc
|
||||
if rc/=0 then do; sock=; call BYE "socket error:" etc; end
|
||||
parse value SOCKET('SETSOCKOPT', sock,'SOL_SOCKET','SO_ASCII','ON') with rc . etc
|
||||
if rc/=0 then call BYE "SetSockOpt error:" etc
|
||||
parse value SOCKET('SETSOCKOPT',sock,'SOL_SOCKET','SO_ASCII','ON') with rc . etc
|
||||
if rc/=0 then call BYE "setsockopt:" etc
|
||||
call S "Connecting to" ircserver "on port" ircport"." etc
|
||||
parse value SOCKET('CONNECT', sock, 'AF_INET' ircport ircserver) with rc . etc
|
||||
if rc/=0 then call BYE "connect error:" etc
|
||||
if rc/=0 then call BYE "connect:" etc
|
||||
parse value SOCKET('IOCTL', sock, 'FIONBIO', 1) with rc . etc
|
||||
if rc/=0 then call BYE "nonblocking I/O:" etc
|
||||
if rc/=0 then call BYE "nonblocking i/o:" etc
|
||||
if server_pass/='' then do; call SEND("PASS" server_pass); server_pass=; end
|
||||
call SEND(x2c('D5C9C3D2') ircnick)
|
||||
call SEND(x2c('E4E2C5D9') in.2)
|
||||
call SOURCE "PROFILE", 1
|
||||
return
|
||||
|
||||
CTCP:
|
||||
@ -613,14 +707,18 @@ CTCP:
|
||||
select
|
||||
when ctcp="ACTION" then call OUT '*' s bla
|
||||
when ctcp="CLIENTINFO" then
|
||||
call MSAREPLY "CLIENTINFO ACTION CLIENTINFO FINGER TIME USERINFO VERSION"
|
||||
call MSAREPLY "CLIENTINFO ACTION CLIENTINFO FINGER TIME URL USERINFO VERSION"
|
||||
when ctcp="FINGER" then
|
||||
call MSAREPLY "FINGER" realname '('me'@'hostname'.'domain',',
|
||||
me'@'mynode') - Idle' trunc(time('E'),2) 'seconds'
|
||||
when ctcp="TIME" then call MSAREPLY "TIME" left(time(),5)
|
||||
when ctcp="URL" then do
|
||||
if wwwport='' then call MSAREPLY "ERRMSG No http port set up by user"
|
||||
else call MSAREPLY "URL" myurl
|
||||
end
|
||||
when ctcp="USERINFO" then call MSAREPLY "USERINFO" userinfo
|
||||
when ctcp="VERSION" then
|
||||
call MSAREPLY "VERSION rxIRC" vers "VM/CMS",
|
||||
call MSAREPLY "VERSION" progname vers "VM/CMS",
|
||||
":Survival package for VM-struck humans"
|
||||
otherwise if fla=1 then call MSAREPLY "ERRMSG Huh? Can't do" ctcp
|
||||
end
|
||||
@ -633,7 +731,7 @@ MSAREPLY:
|
||||
|
||||
SYNTAX:
|
||||
say errortext(rc)
|
||||
return
|
||||
return 0
|
||||
|
||||
HALT:
|
||||
call BYE "halt request"
|
||||
@ -655,6 +753,8 @@ BYE:
|
||||
'CP TERM LINEND' a 'CHARDEL' k
|
||||
i=2; parse var qt.i 'LINESIZE' a',' .
|
||||
'CP TERM LINESIZE' a
|
||||
if www/='' then do
|
||||
SOCKET('SHUTDOWN',www); SOCKET('CLOSE',www); www=; end
|
||||
if sock/='' then do
|
||||
call SHUT
|
||||
parse value SOCKET('TERMINATE') with .
|
||||
@ -781,38 +881,42 @@ SHUT:
|
||||
return
|
||||
|
||||
NICE:
|
||||
parse arg a'@'b;if b="" then b=mynode
|
||||
if nice.a.b^='*' then do
|
||||
if nice.a.b^='' then return nice.a.b
|
||||
'NAMEF :userid' a ':node' b ':nick (LIFO'
|
||||
if rc=0 then do;parse pull nice.a.b .
|
||||
return nice.a.b;end
|
||||
if b=mynode then do; 'NAMEF :userid' a ':node :nick (LIFO'
|
||||
if rc=0 then do;parse pull nice.a.b .
|
||||
pull ln .;if ln='' then return nice.a.b;end
|
||||
arg u'@'v;if v='' then v=mynode
|
||||
if nice.u.v/='' then return nice.u.v
|
||||
'NAMEF :userid' u ':node' v ':nick (LIFO'
|
||||
if rc=0 then parse pull nice.u.v .
|
||||
else if v=mynode then do
|
||||
'NAMEF :userid' u ':node :nick (LIFO'
|
||||
if rc=0 then do
|
||||
parse pull nice.u.v .
|
||||
pull ln .
|
||||
if ln='' then return nice.u.v
|
||||
end
|
||||
nice.a.b='*';end
|
||||
if a='RSCS' then return b
|
||||
return a
|
||||
nice.u.v=u
|
||||
end
|
||||
else if u='RSCS' then nice.u.v=v
|
||||
else nice.u.v=u'@'v
|
||||
return nice.u.v
|
||||
|
||||
U@N:
|
||||
parse arg q p; if q='' then return 0 'missing args'
|
||||
upper q; parse var q q'@'r
|
||||
if r^='' then return q r p
|
||||
if word(p,1)='AT' then do
|
||||
parse var p . r p; upper r
|
||||
if r='' then return 0 'missing node'
|
||||
return q r p;end
|
||||
if u@n.q^='' then return u@n.q p
|
||||
'NAMEF :nick' q ':userid :node :via (LIFO'
|
||||
parse arg x z; if q='' then return 0 'missing args'
|
||||
upper x; parse var x x'@'y
|
||||
if y/='' then return x y z
|
||||
if word(z,1)='AT' then do
|
||||
parse var z . y z; upper y
|
||||
if y='' then return 0 'missing node'
|
||||
return x y z;end
|
||||
if u@n.x/='' then return u@n.x z
|
||||
'NAMEF :nick' x ':userid :node :via (LIFO'
|
||||
if rc=0 then do 1
|
||||
pull la; pull ln; pull li
|
||||
if li='' then leave
|
||||
parse value li ln mynode with a r .
|
||||
u@n.q=a r; if via.a.r='' then via.a.r=la
|
||||
return a r p
|
||||
pull k; pull y; pull a
|
||||
if a='' then leave
|
||||
if y='' then y=mynode
|
||||
u@n.q=a y; if via.a.y='' then via.a.y=k
|
||||
return a y z
|
||||
end
|
||||
u@n.q = q mynode;return q mynode p
|
||||
u@n.x = x mynode
|
||||
return x mynode z
|
||||
|
||||
TELL:
|
||||
parse arg tea
|
||||
@ -830,7 +934,7 @@ TELL:
|
||||
else via=via.xid.xnod
|
||||
select
|
||||
when via='SMSG'|via='SEND' then do
|
||||
if xnod^=mynode then err='SEND & SMSG only local'
|
||||
if xnod/=mynode then err='SEND & SMSG only local'
|
||||
else do
|
||||
if via='SMSG' then parse value diagrc(8,'SMSG' xid tea) with rc . err
|
||||
else do
|
||||
@ -839,9 +943,9 @@ TELL:
|
||||
parse value diagrc(8,'SEND CP' xid translate(tea?)) with rc . err
|
||||
else parse value diagrc(8,'SEND' xid tea) with rc . err
|
||||
end; end; end
|
||||
when via=''|left(via,1)^="'" then do
|
||||
when via=''|left(via,1)/="'" then do
|
||||
if via='RSCS' then do;viar=1;via='';end;else viar=0
|
||||
if via^='' then via='CMD' via
|
||||
if via/='' then via='CMD' via
|
||||
if xid='RSCS'|(xid=rscs&xnod=mynode) then do
|
||||
if xnod=mynode&^viar then parse value diagrc(8,'SM' rscs tea) with rc . err
|
||||
else parse value diagrc(8,'SM' rscs via 'CMD' xnod tea) with rc . err
|
||||
@ -867,18 +971,18 @@ TELL:
|
||||
return
|
||||
|
||||
SOURCE:
|
||||
arg a, b
|
||||
if a='' then do
|
||||
arg sfn, sfl
|
||||
if sfn='' then do
|
||||
call S "You must specify a file to /source"
|
||||
return -1
|
||||
end
|
||||
a=a 'RXIRC *'
|
||||
"STATE" a
|
||||
sfn = sfn 'RXIRC *'
|
||||
"STATE" sfn
|
||||
if rc/=0 then do
|
||||
if b/=1 then call S 'Could not access' a
|
||||
if sfl/=1 then call S 'Could not access' sfn
|
||||
end
|
||||
else do
|
||||
'MAKEBUF'; 'EXECIO * DISKR' a '(FIFO FINIS'; skiplines=0;
|
||||
'MAKEBUF'; 'EXECIO * DISKR' sfn '(FIFO FINIS'; skiplines=0;
|
||||
do queued(); sourcing=1
|
||||
parse pull l; if abortsource then iterate
|
||||
if skiplines=0 then call SHELL strip(l)
|
||||
@ -913,13 +1017,70 @@ INTERP:
|
||||
signal on SYNTAX; INTERPRET(statement); signal off SYNTAX
|
||||
return rc
|
||||
|
||||
EXECUTE:
|
||||
parse arg r
|
||||
if r='' then do
|
||||
say 'Suspending rxIRC; Enter "return" to return'
|
||||
r='SUBSET'
|
||||
NOTIFY:
|
||||
arg a
|
||||
do i=1 to words(a)
|
||||
x=word(a,i); y=find(nflist,x); z=find(translate(nfhere),a)
|
||||
if z/=0 then nfhere=strip(delword(nfhere,z,1))
|
||||
if y/=0 then nflist=strip(delword(nflist,y,1))
|
||||
else nflist=nflist x
|
||||
end
|
||||
address 'CMS' r
|
||||
call OUT 'Observing:' nflist
|
||||
if a='' then call OUT 'Present:' nfhere
|
||||
return
|
||||
|
||||
ISON:
|
||||
parse arg g
|
||||
i=1; do words(nfhere)
|
||||
a=word(nfhere,i)
|
||||
if find(g,a)=0 then do
|
||||
nfhere = strip(delword(nfhere,i,1))
|
||||
call OUT a "has gone"
|
||||
end
|
||||
else i=i+1
|
||||
end
|
||||
do i=1 to words(g)
|
||||
a=word(g,i)
|
||||
if find(nfhere,a)=0 then do
|
||||
nfhere = a nfhere
|
||||
call SEND "USERHOST" a
|
||||
end
|
||||
end
|
||||
nfcatch=0
|
||||
return
|
||||
|
||||
EXECUTE:
|
||||
parse arg a
|
||||
if a='' then do
|
||||
say 'Suspending rxIRC; Enter "return" to return'
|
||||
a='SUBSET'
|
||||
end
|
||||
address 'CMS' a
|
||||
if rc=0 then say "rxIRC ready"
|
||||
else say "rxIRC ready("rc")"
|
||||
return
|
||||
|
||||
WRITE:
|
||||
parse arg qp tx
|
||||
parse value SOCKET('WRITE', qp, tx||cr||lf) with rc . etc
|
||||
if rc/=0 then call S "Socket write error:" etc
|
||||
return
|
||||
|
||||
WRITEFILE:
|
||||
parse arg qp fn ft .
|
||||
'MAKEBUF'
|
||||
'EXECIO * DISKR' fn ft '(FINIS FIFO'
|
||||
if rc=0 then do
|
||||
do queued()
|
||||
parse pull l
|
||||
call WRITE qp l
|
||||
if rc/=0 then do
|
||||
call S 'httpd: File transmission interrupted (by caller probably)'
|
||||
signal DROPIT
|
||||
end
|
||||
end
|
||||
call S 'httpd: Sent' fn ft
|
||||
end
|
||||
DROPIT:
|
||||
'DROPBUF'
|
||||
return
|
||||
|
||||
@ -1,12 +1,11 @@
|
||||
.cm last change by lynx.
|
||||
.mt IRC
|
||||
|
||||
rxIRC
|
||||
^^^
|
||||
Internet Relay Chat client program for VM/CMS systems
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
written by Carl 'LynX' v. Loesch
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
by Carl v. Loesch
|
||||
^^^^^^^^^^^^^^^
|
||||
Move the cursor onto a topic and press ENTER
|
||||
|
||||
|
||||
|
||||
@ -1,38 +1,45 @@
|
||||
rxIRC Installation Guide
|
||||
========================
|
||||
|
||||
| To run rxIRC you need RXSOCKET 2 and REXXWAIT.
|
||||
| You don't need REXTCPIP anymore (Sorry Ken).
|
||||
|
||||
|
||||
To run rxIRC you need RXSOCKET 2 and REXXWAIT.
|
||||
You don't need REXTCPIP anymore (Sorry Ken).
|
||||
|
||||
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 IRC server host!
|
||||
|
||||
| On VM/ESA systems you might have to enter the 'NXA' command before
|
||||
| starting up rxIRC. I'm not familiar with those systems so I don't know
|
||||
| what needs to be changed to make that work right, same goes for other
|
||||
| exotic VM derivates on which rxIRC makes problems. If you manage to
|
||||
| fix rxIRC up on such systems please send me your changes!
|
||||
|
||||
| The VM Gopher client is written to work with the old RXSOCKET version
|
||||
| so you get the problem that either you have Gopher or you have rxIRC
|
||||
| working by default. Sorry but I guess Gopher needs an update!
|
||||
|
||||
| If you have any problems/improvements/suggestions/etc. contact the rxIRC
|
||||
| mailing list rxIRC-l@vmtecqro.qro.itesm.mx.
|
||||
|
||||
| You can subscribe to the mailing list with 'SUB RXIRC-L <fullname>'
|
||||
| sent to listserv@vmtecqro.qro.itesm.mx or LISTSERV AT VMTECQRO.
|
||||
|
||||
| With the AFD and FUI commands you can get automatic information
|
||||
| about new releases of rxIRC from the LISTSERV. You can also decide
|
||||
| to look out for announcements of mine in the VMUTIL-L, alt.irc
|
||||
| or de.comm.internet newsgroups.
|
||||
|
||||
| However don't expect frequent announcements. Changes to rxIRC
|
||||
| happen seldomly. I usually don't have the time for it. :(
|
||||
|
||||
Ciao -lynx
|
||||
o-------------------------------------------------------------------o
|
||||
| Carl "LynX" v. Loesch is loesch@informatik.uni-oldenburg.de |
|
||||
| ---------------------- or 244661 at DOLUNI1.bitnet / .earn |
|
||||
|
||||
On VM/ESA systems you can try to obtain the ESA-Version of RXSOCKET,
|
||||
or switch into the 370 mode (with SET MACHINE 370 and IPL CMS).
|
||||
If you're lucky it will work from scratch even on those systems,
|
||||
it's a question of how your mainframe is being configured.
|
||||
|
||||
When it tells you the TCPIP DATA file is missing, you probably
|
||||
need to ACCESS (or even CP LINK) the appropriate system disk,
|
||||
which is tipically labeled ('TCPIP'). Try 'QUERY DASD'.
|
||||
|
||||
When you see the whole internet address in people's messages
|
||||
instead of just the nickname, or other similar weird things
|
||||
you might have some improper ASCII/EBCDIC translation set up!
|
||||
In that case check that STANDARD TCPXLATE and STANDARD TCPXLBIN
|
||||
from your TCPIP system disk come before other * TCPXLATE files.
|
||||
|
||||
If you have any problems/improvements/suggestions/etc. contact the rxIRC
|
||||
mailing list rxIRC-l@vmtecqro.qro.itesm.mx.
|
||||
|
||||
You can subscribe to the mailing list with 'SUB RXIRC-L <fullname>'
|
||||
sent to listserv@vmtecqro.qro.itesm.mx or LISTSERV AT VMTECQRO.
|
||||
|
||||
With the AFD and FUI commands you can get automatic information
|
||||
about new releases of rxIRC from the LISTSERV. You can also decide
|
||||
to look out for announcements of mine in the VMUTIL-L, alt.irc
|
||||
or de.comm.internet newsgroups.
|
||||
|
||||
However don't expect frequent announcements. Changes to rxIRC
|
||||
happen seldomly. I usually don't have the time for it. :(
|
||||
|
||||
--
|
||||
____ http://www.noris.de/~lynx/
|
||||
LynX Carl von Loesch lynx@imp.de
|
||||
|
||||
~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~
|
||||
LynX@You.might.aswell.use.This.as.my.Email.Address.Biol.Chemie.TU-Muenchen.DE
|
||||
|
||||
16
rxirc.names
16
rxirc.names
@ -1,18 +1,26 @@
|
||||
* RXIRC NAMES
|
||||
* contains installationwide defaults for rxIRC
|
||||
* do NOT change the next line
|
||||
:nick.rxIRC
|
||||
*
|
||||
* Insert the network address of an IRC server near to you into here..
|
||||
* Or activate a temporary choice to be able to contact an IRC
|
||||
* operator for help on proper choice of IRC server
|
||||
* (join #Twilight_Zone to meet irc operators)
|
||||
* A list of servers exists in ftp://cs-ftp.bu.edu/irc/support/
|
||||
*
|
||||
:server.irc.uni-erlangen.de
|
||||
:server.irc.informatik.uni-oldenburg.de
|
||||
* :server.irc.fu-berlin.de
|
||||
* :server.irc.mit.edu
|
||||
* :server.irc.eunet.fi
|
||||
* :server.irc.technion.ac.il
|
||||
* :server.irc.virginia.edu
|
||||
|
||||
|
||||
* In case your default server requires a client password, you can enter it
|
||||
* here. However this is a pretty unusual case.
|
||||
*
|
||||
* :pass.PassWord
|
||||
|
||||
* Some preferences.. You can look into this later on.
|
||||
* See also the helpfile about customization.
|
||||
*
|
||||
@ -24,12 +32,12 @@
|
||||
:show_time.60
|
||||
:bold_char.|
|
||||
:beep_char.~
|
||||
|
||||
|
||||
* A command to view files. If there is no BROWSE on your
|
||||
* system you can use XEDIT aswell.
|
||||
*
|
||||
:browser.BROWSE
|
||||
|
||||
|
||||
* No change should be necessary below here
|
||||
*
|
||||
:port.6667
|
||||
|
||||
84
rxirc.readme
84
rxirc.readme
@ -1,44 +1,37 @@
|
||||
Subject: rxIRC 2.0 for VM/CMS available
|
||||
Newsgroups: bit.listserv.vm-util,alt.irc,de.comm.internet,de.talk.chat
|
||||
Keywords: IRC rxIRC rexx vm cms internet bitnet rexx/socket lynx
|
||||
|
||||
Subject: rxIRC 4.1 - IRC client for VM/CMS 370 systems
|
||||
Newsgroups: bit.listserv.vm-util,alt.irc.announce,de.comm.internet,de.talk.chat
|
||||
Keywords: IRC rxIRC rexx vm cms internet bitnet rexx/socket
|
||||
|
||||
Introducing rxIRC:
|
||||
|
||||
|
||||
rxIRC is a client software for VM to connect to the IRC network, the
|
||||
Internet Relay Chat, which nowadays counts an average of 1200 users online
|
||||
Internet Relay Chat, which nowadays counts an average of 3000 users online
|
||||
day and night, from all over the world, therefore being the biggest
|
||||
international interactive conferencing system on the planet.
|
||||
|
||||
|
||||
You can make use of this program only if you have access to a machine
|
||||
with VM/CMS-type operating system with TCPIP extension installed. To find
|
||||
out you logon and type 'CP QUERY TCPIP', if it replies 'TCPIP - DSC' then
|
||||
you can make use of this program, otherwise check with your administration.
|
||||
|
||||
chances are good, otherwise check up with your administration.
|
||||
|
||||
rxIRC is a program written in interpreted RexX, a rather easy to learn
|
||||
language that gives you a chance to add own features if you miss something
|
||||
or modify things you dislike. rxIRC supports the complete set of standard
|
||||
IRC client commands plus a bunch of extras and is more or less up to date
|
||||
with the current state of development of the IRC protocol.
|
||||
|
||||
New features in rxIRC 2.0:
|
||||
|
||||
- now uses RXSOCKET and REXXWAIT
|
||||
- has extensive BITNet messaging support
|
||||
(for instance /query +nick queries a bitnet user)
|
||||
- /alias with parameter handling
|
||||
- variables: /set, /expr (rexx expressions), /echo
|
||||
- /if <condition> then <command>
|
||||
- /source <scripts>, skip <lines>, stop (sourcing)
|
||||
- /pf<n>, /toggle (setup a pf key with alternating commands)
|
||||
- /localwho, /catalog
|
||||
- /chop, /unchop, /k(ick), /t(opic)
|
||||
- /viewlog, /interpret, /applaud
|
||||
- documentation has doubled its size.. ;)
|
||||
- :show_time, display time every now and then
|
||||
- ircII-bold-code displayed with hilighting, :bold_char
|
||||
|
||||
|
||||
New features in rxIRC 2.1:
|
||||
|
||||
* /notify - Finally it's in, thanks to Michael Letourneau
|
||||
* builtin WWW server, secure and stable!
|
||||
* /export to specify what files are available for WWW, typically /export *.html
|
||||
* /omit - Filter channel talk that you don't want to listen to
|
||||
* Support for server passwords
|
||||
* The CONNECT RXIRC script is sourced right after you connect to a server
|
||||
* Small fixes and protocol parsing updates
|
||||
|
||||
Requirements:
|
||||
|
||||
|
||||
The TCPIP handling of rxIRC is done with help of RXSOCKET version 2.
|
||||
You need to have this package installed, or at least the basic modules.
|
||||
There are some restrictions concerning the use of RXSOCKET:
|
||||
@ -46,40 +39,35 @@ There are some restrictions concerning the use of RXSOCKET:
|
||||
programs using version 1 they won't work when you install version 2.
|
||||
- VM TCP/IP version 2 is required.
|
||||
- rxIRC should run on CMS 3 up to 9 (370, XA, ESA or XC MACHINE modes)
|
||||
|
||||
|
||||
If you are going to install rxIRC on a big public disk, you probably
|
||||
want to install the complete REXX/SOCKET package. You can do so by issueing
|
||||
TELL LISTSERV AT CUNYVM GET RXSOCKET PACKAGE. Beware that you will be sent
|
||||
the beauty of over 80 files after this!
|
||||
|
||||
|
||||
If you want to run rxIRC just by yourself, and RXSOCKET isn't available
|
||||
already (rxIRC tells you so) then merely issue these commands to get the
|
||||
modules:
|
||||
TELL LISTSERV AT CUNYVM GET RXSOCKET MODULE
|
||||
TELL LISTSERV AT CUNYVM GET REXXWAIT MODULE
|
||||
|
||||
|
||||
rxIRC 2.0 itself can be obtained from:
|
||||
|
||||
|
||||
|
||||
rxIRC itself can be obtained from:
|
||||
|
||||
<Internet>
|
||||
Europe: ftp nic.funet.fi
|
||||
Europe:
|
||||
[Home Site] ftp ftp.m.biologie.tu-muenchen.de (129.187.220.2 or .9)
|
||||
mget /pub/comp/rxirc/*.*
|
||||
|
||||
[Finland] ftp nic.funet.fi
|
||||
mget /pub/unix/irc/rxirc/*.*
|
||||
|
||||
[Home Site] ftp ftp.informatik.uni-oldenburg.de (134.106.1.9)
|
||||
mget /pub/irc/rxirc/*.*
|
||||
|
||||
|
||||
America: ftp ftp.iastate.edu
|
||||
mget /pub/irc/clients/rxirc/2.0/*.*
|
||||
|
||||
ftp slopoke.mlb.semi.harris.com
|
||||
mget /pub/irc/clients/rxirc/*.*
|
||||
|
||||
|
||||
Australia: ftp coombs.anu.edu.au
|
||||
mget /pub/irc/rxirc/*.*
|
||||
|
||||
<BITnet>
|
||||
[Mexico] TELL LISTSERV AT VMTECQRO GET RXIRC PACKAGE
|
||||
|
||||
|
||||
|
||||
|
||||
rxIRC installers are invited to join the rxIRC mailing list by sending a
|
||||
'SUB RXIRC-L <your-full-name>' command to LISTSERV AT VMTECQRO.
|
||||
|
||||
13
setenv.exec
Normal file
13
setenv.exec
Normal 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 SETL' n c
|
||||
exit rc
|
||||
550
special.helpirc
550
special.helpirc
@ -1,4 +1,4 @@
|
||||
.cm last change by lynx -- may 93
|
||||
.cm last change by lynx -- nov 94
|
||||
|
||||
_______
|
||||
*|^^^^^^^|* The Internet Relay Chat client
|
||||
@ -7,89 +7,90 @@
|
||||
^^^^^^^
|
||||
|
||||
Special features of rxIRC:
|
||||
|
||||
|
||||
Variables:
|
||||
| rxIRC has it's own particular implementation of variables. You can
|
||||
| set variables with /set or /expr, then use them anywhere within a
|
||||
| command line like this:
|
||||
|
|
||||
| set c #rxIRC
|
||||
| join $c
|
||||
| expr date date()
|
||||
| echo $(date)
|
||||
| set helpkey 1
|
||||
| pf$(helpkey) immed /help
|
||||
|
|
||||
| Note how you can use variables even within command names. Variables
|
||||
| can be used with or without the braces. However, without braces only
|
||||
| the first character is considered part of the name. So 'echo $date'
|
||||
| will probably only output 'ate' since '$d' is not defined yet.
|
||||
| This is compatible to the way the make program handles variables.
|
||||
|
|
||||
| With rxIRC variable names are case sensitive!
|
||||
|
|
||||
| rxIRC provides a set of predefined variables which is compatible
|
||||
| to ircII. Here goes a list:
|
||||
| $, the nickname that last sent you a message, notice or invitation
|
||||
| $: the nickname that last joined your channel
|
||||
| $A your current away message
|
||||
| $C your current channel (or rather 'target' in rxIRC-speak)
|
||||
| $H last protocol command or numeric received
|
||||
| $I channel you were invited to last
|
||||
| $K the command character (usually '/')
|
||||
| $N your IRC nickname
|
||||
| $Q current query nickname
|
||||
| $S current IRC server's name
|
||||
| $T your query partner, if you are in a query, or otherwise
|
||||
| your target (channel usually)
|
||||
| $V rxIRC version
|
||||
| $Z current time
|
||||
| $$ the $ symbol itself
|
||||
|
||||
rxIRC has it's own particular implementation of variables. You can
|
||||
set variables with /set or /expr, then use them anywhere within a
|
||||
command line like this:
|
||||
|
||||
set c #rxIRC
|
||||
join $c
|
||||
expr date date()
|
||||
echo $(date)
|
||||
set helpkey 1
|
||||
pf$(helpkey) immed /help
|
||||
|
||||
Note how you can use variables even within command names. Variables
|
||||
can be used with or without the braces. However, without braces only
|
||||
the first character is considered part of the name. So 'echo $date'
|
||||
will probably only output 'ate' since '$d' is not defined yet.
|
||||
This is compatible to the way the make program handles variables.
|
||||
|
||||
With rxIRC variable names are case sensitive!
|
||||
|
||||
rxIRC provides a set of predefined variables which is compatible
|
||||
to ircII. Here goes a list:
|
||||
$, the nickname that last sent you a message, notice or invitation
|
||||
$: the nickname that last joined your channel
|
||||
$A your current away message
|
||||
$C your current channel (or rather 'target' in rxIRC-speak)
|
||||
$H last protocol command or numeric received
|
||||
$I channel you were invited to last
|
||||
$K the command character (usually '/')
|
||||
$N your IRC nickname
|
||||
$Q current query nickname
|
||||
$S current IRC server's name
|
||||
$T your query partner, if you are in a query, or otherwise
|
||||
your target (channel usually)
|
||||
| $U URL of your builtin httpd, if active
|
||||
$V rxIRC version
|
||||
$Z current time
|
||||
$$ the $ symbol itself
|
||||
|
||||
Multiple commands:
|
||||
| You can execute multiple commands in a row by putting '::' between them.
|
||||
| Like this:
|
||||
| /smile::grin::giggle
|
||||
|
|
||||
| Notice how the slash is valid for all three of the commands!
|
||||
| You need not and may not call something like "/smile::/grin".
|
||||
|
||||
You can execute multiple commands in a row by putting '::' between them.
|
||||
Like this:
|
||||
/smile::grin::giggle
|
||||
|
||||
Notice how the slash is valid for all three of the commands!
|
||||
You need not and may not call something like "/smile::/grin".
|
||||
|
||||
Bitnet support:
|
||||
| rxIRC now fully supports BITNET messaging, first you have the /tell
|
||||
| and /yell commands for traditional way of sending bitnet messages,
|
||||
| but you also have /msg +nickname (or /query +nick, /target +nick).
|
||||
| When a message target begins with a leading plus sign, rxIRC will
|
||||
| not send the message to IRC, but instead send it to the BITNET
|
||||
| user specified. So you can easily query a bitnet user with /query +.
|
||||
|
|
||||
| BITnet message receivers can be specified by nickname from NAMES
|
||||
| file or with <userid>@<node> or '<userid> at <node>' or <local_userid>.
|
||||
|
|
||||
| rxIRC handles incoming BITnet messages properly and will
|
||||
| display them as neat as possible. It also checks for /ignore
|
||||
| by both nickname and userid@node. If you are /away, also bitnet
|
||||
| users are informed of this when they talk to you.
|
||||
|
|
||||
| rxIRC is capable of sending messages over alternative routes
|
||||
| than BITnet allows by default. To achieve this you need to
|
||||
| specify "via <node>" at the beginning of a message and all following
|
||||
| messages will be forwarded through that node. For instance:
|
||||
|
|
||||
| /m +strange via psuvm hello!
|
||||
|
|
||||
| This will send 'hello!' first to PSUVM which then forwards it to MAINE.
|
||||
|
|
||||
| You can also generate local CP SMSG or CP SEND by specifying "smsg" or
|
||||
| "send" as arguments to "via".
|
||||
| You can remove a 'via' redirection with "via none".
|
||||
| You can set up different via's for each userid@node.
|
||||
|
|
||||
| To speed up operation, rxIRC keeps internal mappings from nickname to
|
||||
| userid@node and from userid@node to nickname. That is, your NAMES file
|
||||
| is only queried once. So should you change the userid@node information
|
||||
| in your NAMES file from within rxIRC for a nickname that has already
|
||||
| been read in, you'll have to restart rxIRC.
|
||||
|
||||
rxIRC now fully supports BITNET messaging, first you have the /tell
|
||||
and /yell commands for traditional way of sending bitnet messages,
|
||||
but you also have /msg +nickname (or /query +nick, /target +nick).
|
||||
When a message target begins with a leading plus sign, rxIRC will
|
||||
not send the message to IRC, but instead send it to the BITNET
|
||||
user specified. So you can easily query a bitnet user with /query +.
|
||||
|
||||
BITnet message receivers can be specified by nickname from NAMES
|
||||
file or with <userid>@<node> or '<userid> at <node>' or <local_userid>.
|
||||
|
||||
rxIRC handles incoming BITnet messages properly and will
|
||||
display them as neat as possible. It also checks for /ignore
|
||||
by both nickname and userid@node. If you are /away, also bitnet
|
||||
| users are informed of this when they talk to you, but only once.
|
||||
|
||||
rxIRC is capable of sending messages over alternative routes
|
||||
than BITnet allows by default. To achieve this you need to
|
||||
specify "via <node>" at the beginning of a message and all following
|
||||
messages will be forwarded through that node. For instance:
|
||||
|
||||
/m +strange via psuvm hello!
|
||||
|
||||
This will send 'hello!' first to PSUVM which then forwards it to MAINE.
|
||||
|
||||
You can also generate local CP SMSG or CP SEND by specifying "smsg" or
|
||||
"send" as arguments to "via".
|
||||
You can remove a 'via' redirection with "via none".
|
||||
You can set up different via's for each userid@node.
|
||||
|
||||
To speed up operation, rxIRC keeps internal mappings from nickname to
|
||||
userid@node and from userid@node to nickname. That is, your NAMES file
|
||||
is only queried once. So should you change the userid@node information
|
||||
in your NAMES file from within rxIRC for a nickname that has already
|
||||
been read in, you'll have to restart rxIRC.
|
||||
|
||||
Escape characters:
|
||||
There are two escape characters in rxIRC. One is the rxIRC command
|
||||
character, which is by default a slash ('/'). Two is the CMS command
|
||||
@ -101,7 +102,7 @@ Default PF keys:
|
||||
your normal CMS PF setup works also within rxIRC, unless you redefine
|
||||
keys during your rxIRC session. When leaving, rxIRC puts the PF key
|
||||
settings back as they were before (or almost).
|
||||
|
||||
|
||||
Special commands of rxIRC:
|
||||
|
||||
/ABort
|
||||
@ -109,53 +110,53 @@ Special commands of rxIRC:
|
||||
connection. Use this only when you can't get out with /bye.
|
||||
|
||||
/ALias [<alias name> [[<argument catchers>] <command string>]]
|
||||
| You may create your own abbreviations for simple or complex commands.
|
||||
| Commands may not contain the command char. Multiple commands can be
|
||||
| specified by separating them with '::'. User-provided arguments can be put
|
||||
| into variables by writing as many '%<var>' as you need in front of the
|
||||
| command string. Alias names are case insensitive.
|
||||
|
|
||||
| Some examples:
|
||||
| alias ni msg nickserv@service.de
|
||||
| This will convince rxIRC to send a message to NickServ with /ni <msg>.
|
||||
|
|
||||
| alias date expr date date()::echo $(date)
|
||||
| This makes rxIRC output today's date. Notice how I first used the
|
||||
| /expr command, then the /echo command.
|
||||
|
|
||||
| alias ctoggle %k %c pf$k imm /toggle $k |join $c|part $c
|
||||
| This allows you to setup a PF key to join or leave a channel
|
||||
| alternatingly simply by typing "/ctoggle 9 #PartyZone".
|
||||
| Notice how it catches the two arguments and puts it into $k and $c.
|
||||
| Then it calls pf$k which in our case is 'PF9', the rxIRC command
|
||||
| to setup the PF9 key. The key then will immediately perform
|
||||
| "/toggle 9 |join #PartyZone|part #PartyZone" which takes
|
||||
| care of the alternating impact of the pf9 key. See /toggle for details.
|
||||
|
|
||||
| alias sgg smile::grin::giggle
|
||||
| /alias is treated differently from all other commands, in the sense
|
||||
| that the line following /alias is not preprocessed as usual.
|
||||
| This means $(variable) is only replaced _when_ the alias is actually
|
||||
| used, not when you define it. Also you can specify multiple commands
|
||||
| within an alias by putting '::' between them. The commands will be
|
||||
| executed in a row as soon as the alias is used.
|
||||
|
|
||||
| alias sgg
|
||||
| Using /alias with just one argument will display the definition of
|
||||
| that particular alias.
|
||||
|
|
||||
| alias
|
||||
| Using /alias without arguments will list the aliases.
|
||||
|
|
||||
| Note: I have not provided a command to un-alias an alias as it's
|
||||
| not really needed.
|
||||
You may create your own abbreviations for simple or complex commands.
|
||||
Commands may not contain the command char. Multiple commands can be
|
||||
specified by separating them with '::'. User-provided arguments can be put
|
||||
into variables by writing as many '%<var>' as you need in front of the
|
||||
command string. Alias names are case insensitive.
|
||||
|
||||
Some examples:
|
||||
alias ni msg nickserv@service.de
|
||||
This will convince rxIRC to send a message to NickServ with /ni <msg>.
|
||||
|
||||
alias date expr date date()::echo $(date)
|
||||
This makes rxIRC output today's date. Notice how I first used the
|
||||
/expr command, then the /echo command.
|
||||
|
||||
alias ctoggle %k %c pf$k imm /toggle $k |join $c|part $c
|
||||
This allows you to setup a PF key to join or leave a channel
|
||||
alternatingly simply by typing "/ctoggle 9 #PartyZone".
|
||||
Notice how it catches the two arguments and puts it into $k and $c.
|
||||
Then it calls pf$k which in our case is 'PF9', the rxIRC command
|
||||
to setup the PF9 key. The key then will immediately perform
|
||||
"/toggle 9 |join #PartyZone|part #PartyZone" which takes
|
||||
care of the alternating impact of the pf9 key. See /toggle for details.
|
||||
|
||||
alias sgg smile::grin::giggle
|
||||
/alias is treated differently from all other commands, in the sense
|
||||
that the line following /alias is not preprocessed as usual.
|
||||
This means $(variable) is only replaced _when_ the alias is actually
|
||||
used, not when you define it. Also you can specify multiple commands
|
||||
within an alias by putting '::' between them. The commands will be
|
||||
executed in a row as soon as the alias is used.
|
||||
|
||||
alias sgg
|
||||
Using /alias with just one argument will display the definition of
|
||||
that particular alias.
|
||||
|
||||
alias
|
||||
Using /alias without arguments will list the aliases.
|
||||
|
||||
Note: I have not provided a command to un-alias an alias as it's
|
||||
not really needed.
|
||||
|
||||
/CAtalog
|
||||
| This command will show you a compact list of all channel names that have at
|
||||
| least 5 persons on them. Unfortunately it takes quite some time to perform
|
||||
| as it has to process a lot of data from the IRC server before being able
|
||||
| to display the collected information.
|
||||
|
||||
This command will show you a compact list of all channel names that have at
|
||||
least 5 persons on them. Unfortunately it takes quite some time to perform
|
||||
as it has to process a lot of data from the IRC server before being able
|
||||
to display the collected information.
|
||||
|
||||
/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
|
||||
@ -163,9 +164,9 @@ Special commands of rxIRC:
|
||||
Without argument it will tell you what channel you are on.
|
||||
|
||||
/CHOP <nickname> [<nickname> [<nickname>]]
|
||||
| Make people channel operators of the current channel.
|
||||
| A shorthand for "/mode $C +o <nickname>"
|
||||
|
||||
Make people channel operators of the current channel.
|
||||
A shorthand for "/mode $C +o <nickname>"
|
||||
|
||||
/CLear
|
||||
Clear the screen. Just in case you're not used to hitting PA2.
|
||||
|
||||
@ -173,88 +174,108 @@ Special commands of rxIRC:
|
||||
Use another character than '/' to introduce commands.
|
||||
|
||||
/DEscribe <target> <description>
|
||||
| This command generates a CTCP ACTION description like /ME and the
|
||||
| other action commands, but you can specify where to send it to.
|
||||
| Target can be a nickname or a channel, not a bitnet user of course.
|
||||
|
||||
This command generates a CTCP ACTION description like /ME and the
|
||||
other action commands, but you can specify where to send it to.
|
||||
Target can be a nickname or a channel, not a bitnet user of course.
|
||||
|
||||
/ECHO <text>
|
||||
| Display a line of text to the screen. Typically used combined with
|
||||
| variables like this:
|
||||
| expr t left(time(),5)
|
||||
| echo The time is $t
|
||||
|
||||
Display a line of text to the screen. Typically used combined with
|
||||
variables like this:
|
||||
expr t left(time(),5)
|
||||
echo The time is $t
|
||||
|
||||
/Execute <command> or more easily just: !<command>
|
||||
You can execute CMS commands with this, but remember not to stay too
|
||||
long outside IRC or the IRC-server will most likely close your connection.
|
||||
|
||||
/EXPOrt <filemasks>
|
||||
| With this command you define which files can be accessed via WWW if you
|
||||
| activate the builtin httpd, using a <filename>.<filetype> notation as is
|
||||
| visible from WWW (hello.html being the file HELLO HTML *). Typical usage
|
||||
| is "/export *.html", remember that index.html is the file that is loaded
|
||||
| first when a user inspects your WWW server.
|
||||
|
||||
/EXPRession <varname> <rexx expression>
|
||||
| This allows you to store the value of a rexx expression into a variable.
|
||||
| You can use RexX builtin functions such as substr(), words() giving you
|
||||
| a quite powerful medium to operate on variables.
|
||||
| Some examples:
|
||||
| expr time time()
|
||||
| expr t left('$(time)',5)
|
||||
| echo $t
|
||||
| Notice the trick that makes the contents of $(time) a valid rexx
|
||||
| string by putting '' around it.
|
||||
|
||||
This allows you to store the value of a rexx expression into a variable.
|
||||
You can use RexX builtin functions such as substr(), words() giving you
|
||||
a quite powerful medium to operate on variables.
|
||||
Some examples:
|
||||
expr time time()
|
||||
expr t left('$(time)',5)
|
||||
echo $t
|
||||
Notice the trick that makes the contents of $(time) a valid rexx
|
||||
string by putting '' around it.
|
||||
|
||||
/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.
|
||||
|
||||
/IF <rexx condition expression> THEN <command>
|
||||
| This will make rxIRC perform <command> only when <condition> is met.
|
||||
| The <condition> must not contain spaces, in exchange it may contain
|
||||
| RexX builtin function.. you can even make floating point calculus!
|
||||
| Here goes an example:
|
||||
| expr a 5/2
|
||||
| if 2*$a=5 then echo People really win on IRC!
|
||||
|
||||
/IGnore <nickname>|<address-mask> [<more arguments>]
|
||||
This will make rxIRC perform <command> only when <condition> is met.
|
||||
The <condition> must not contain spaces, in exchange it may contain
|
||||
RexX builtin function.. you can even make floating point calculus!
|
||||
Here goes an example:
|
||||
expr a 5/2
|
||||
if 2*$a=5 then echo People really win on IRC!
|
||||
|
||||
/IGnore [ <nickname>|<address-mask> ] [ <more...> ]
|
||||
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
|
||||
| catches /msg's, /notice's and bitnet messages from the specified
|
||||
get the list of people being ignored by you. The ignore function
|
||||
catches /msg's, /notice's and bitnet messages from the specified
|
||||
nickname. It also 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 rxIRC option "(Quiet". An <address-mask> is a string that will
|
||||
| match a set of hosts from whom you don't want to hear anything.
|
||||
| For example "*.ais.org" will keep any message from a user of that
|
||||
| organization away from you. You can apply this to BITnet nodes aswell.
|
||||
the rxIRC option "(Quiet". An <address-mask> is a string that will
|
||||
match a set of hosts from whom you don't want to hear anything.
|
||||
For example "*.ais.org" will keep any message from a user of that
|
||||
organization away from you. You can apply this to BITnet nodes aswell.
|
||||
|
||||
/INTerpret <rexx statement>
|
||||
| This will simply execute a RexX statement. A command for hackers.
|
||||
|
||||
This will simply execute a RexX statement. A command for hackers.
|
||||
|
||||
/Invite <nickname> [<channel>]
|
||||
| I made the channel argument optional. "/i lynx" will invite me to
|
||||
| your current channel without hassle.
|
||||
|
||||
I made the channel argument optional. "/i lynx" will invite me to
|
||||
your current channel without hassle.
|
||||
|
||||
/K <nickname>
|
||||
| The quick way to kick somebody off a channel. This is a shorthand
|
||||
| for /kick $C <nickname>
|
||||
|
||||
The quick way to kick somebody off a channel. This is a shorthand
|
||||
for /kick $C <nickname>
|
||||
|
||||
/LAstlog [<number of lines>]
|
||||
This shows you the last messages you received, usually 12 lines, but
|
||||
you can request more (up to 50) or less.
|
||||
|
||||
/LIst
|
||||
Shows a list of channel names, number of users and topic.
|
||||
| There must be at least 8 people on the channel for it to be listed,
|
||||
There must be at least 8 people on the channel for it to be listed,
|
||||
unless you are running in LIST_ALL mode (See options in SYNTAX).
|
||||
|
||||
|
||||
/Localwho (you may as well type /LCL)
|
||||
| Shows you a list of IRC users that are from the same site as you or
|
||||
| are using an IRC server which runs at your institution.
|
||||
|
||||
Shows you a list of IRC users that are from the same site as you or
|
||||
are using an IRC server which runs at your institution.
|
||||
|
||||
/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.
|
||||
|
||||
/NAmes
|
||||
| Shows a list of channels and people on them, but only those channels
|
||||
| that have at least 7 visible persons aboard. This should be modified into
|
||||
| something more flexible but for now it's like this. See also: /cat
|
||||
|
||||
Shows a list of channels and people on them, but only those channels
|
||||
that have at least 7 visible persons aboard. This should be modified into
|
||||
something more flexible but for now it's like this. See also: /cat
|
||||
|
||||
/NF [ <nicknames> ]
|
||||
| Short form of /notify
|
||||
|
||||
/NOTIFy [ <nicknames> ]
|
||||
| With this command you can tell rxIRC to watch out for certain people to
|
||||
| show up on IRC. You will be informed within one minute when they sign on.
|
||||
| Using /notify on the nickname again will remove it from the list.
|
||||
|
||||
/OMit [ <nickname>|<address-mask> ] [ <more...> ]
|
||||
| This one lets you filter the communication on a channel by leaving the
|
||||
| lines out that were typed by people you aren't listening to anyway.
|
||||
| So it's much like an /ignore for channel talk.
|
||||
|
||||
/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
|
||||
@ -263,11 +284,11 @@ Special commands of rxIRC:
|
||||
If you want to use #-type channels you need to /query those, too.
|
||||
|
||||
/PF<n> <mode> <string>
|
||||
| You can use /pf1 through /pf24 to setup your PF keys. This command is
|
||||
| actually nothing but a short form of !cp set pf<n> <mode> <string>
|
||||
| so better refer to the CP SET manual for details on usage.
|
||||
| Ok, I will resume: <mode> can either be IMMediate or DELayed.
|
||||
|
||||
You can use /pf1 through /pf24 to setup your PF keys. This command is
|
||||
actually nothing but a short form of !cp set pf<n> <mode> <string>
|
||||
so better refer to the CP SET manual for details on usage.
|
||||
Ok, I will resume: <mode> can either be IMMediate or DELayed.
|
||||
|
||||
/Reply
|
||||
This is a shortcut to get into a /query with the person that last sent
|
||||
you a message, notice or invitation.
|
||||
@ -278,42 +299,43 @@ Special commands of rxIRC:
|
||||
automatically respond as does rxIRC when it gets such a request.
|
||||
|
||||
/SAY <words>
|
||||
| Speaks to the channel. Useful for aliases and source-scripts.
|
||||
|
||||
Speaks to the channel. Useful for aliases and source-scripts.
|
||||
|
||||
/SErver <address> [ <port> [ <timeout> ] ]
|
||||
Switch to another IRC server. rxIRC will exit if the server does not
|
||||
respond.
|
||||
|
||||
/SET [<variable> [<value>]]
|
||||
| Set or query the contents of a variable, or if used without arguments,
|
||||
| give a listing of all user-defined variables.
|
||||
|
||||
Set or query the contents of a variable, or if used without arguments,
|
||||
give a listing of all user-defined variables.
|
||||
|
||||
/SKIP <number_of_lines>
|
||||
| Tell rxIRC to skip the next <number> of lines of the file being
|
||||
| sourced. Meaningless to be entered interactively. Lookup up /source
|
||||
| for a practical example of skip's use.
|
||||
|
||||
Tell rxIRC to skip the next <number> of lines of the file being
|
||||
sourced. Meaningless to be entered interactively. Lookup up /source
|
||||
for a practical example of skip's use.
|
||||
|
||||
/SOurce <filename>
|
||||
| Looks for a file called '<filename> RXIRC *' on all linked disks,
|
||||
| then attempts to read it and execute it line by line.
|
||||
| /source profile is automatically executed when you start up rxIRC.
|
||||
| Lines are always treated as commands. The commands may not have the
|
||||
| leading command character (the slash). Multiple commands can be specified
|
||||
| in one line separated by '::' and lines can be indented.
|
||||
| Especially interesting for scripts are the commands /if, /skip, /stop.
|
||||
| For instance like this:
|
||||
|
|
||||
| expr month word(date(),2)
|
||||
| if word(date(),1)/=1 then skip 2
|
||||
| echo Hey! Today is the 1st of $(month)!
|
||||
| skip 1
|
||||
| echo Today is just another day of $(month)...
|
||||
| echo Anyway.. what I really wanted to say...
|
||||
|
|
||||
| This shows how to make an if-then-else construct in an rxIRC script
|
||||
| in a pretty assembler-like manner.. ;)
|
||||
| Indenting improves readability slightly.
|
||||
|
||||
Looks for a file called '<filename> RXIRC *' on all linked disks,
|
||||
then attempts to read it and execute it line by line.
|
||||
/source PROFILE is automatically executed when you start up rxIRC,
|
||||
| /source CONNECT right after you have connected to the server.
|
||||
Lines are always treated as commands. The commands may not have the
|
||||
leading command character (the slash). Multiple commands can be specified
|
||||
in one line separated by '::' and lines can be indented.
|
||||
Especially interesting for scripts are the commands /if, /skip, /stop.
|
||||
For instance like this:
|
||||
|
||||
expr month word(date(),2)
|
||||
if word(date(),1)/=1 then skip 2
|
||||
echo Hey! Today is the 1st of $(month)!
|
||||
skip 1
|
||||
echo Today is just another day of $(month)...
|
||||
echo Anyway.. what I really wanted to say...
|
||||
|
||||
This shows how to make an if-then-else construct in an rxIRC script
|
||||
in a pretty assembler-like manner.. ;)
|
||||
Indenting improves readability slightly.
|
||||
|
||||
/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
|
||||
@ -321,12 +343,12 @@ Special commands of rxIRC:
|
||||
It also shows a /whois of yourself.
|
||||
|
||||
/STOP
|
||||
| This command only makes sense within scripts. It stops rxIRC from
|
||||
| executing scripts any longer. Might be useful combined with /if.
|
||||
|
||||
This command only makes sense within scripts. It stops rxIRC from
|
||||
executing scripts any longer. Might be useful combined with /if.
|
||||
|
||||
/T <topic>
|
||||
| Set a topic on the current channel. Shorthand for "/topic $C <topic>".
|
||||
|
||||
Set a topic on the current channel. Shorthand for "/topic $C <topic>".
|
||||
|
||||
/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.
|
||||
@ -337,64 +359,64 @@ Special commands of rxIRC:
|
||||
command.
|
||||
|
||||
/TCPipstatus
|
||||
| Gives some information about your connection to IRC. The number of bytes
|
||||
| in the input buffer might be interesting. If there are any, then your
|
||||
| connection to the server is probably suffering from netlag.
|
||||
Gives some information about your connection to IRC. The number of bytes
|
||||
in the input buffer might be interesting. If there are any, then your
|
||||
connection to the server is probably suffering from netlag.
|
||||
|
||||
/TEll <nickname>|<user@node>|<user at node> [via <gateway>] message
|
||||
| Use this command to send a message to a user in BITNet.
|
||||
| See note about the bitnet support of rxIRC at the top of this file.
|
||||
Use this command to send a message to a user in BITNet.
|
||||
See note about the bitnet support of rxIRC at the top of this file.
|
||||
|
||||
/TOGgle <key> <c><first command><c><second command>
|
||||
| This is a tricky feature to allow you to program pf keys with alternating
|
||||
| function each time you use them. <key> is the number of the pf key.
|
||||
| <c> is the character used to separate the commands. I use '|' usually.
|
||||
| Toggle performs <first command>, then sets up PF<key> to call the
|
||||
| inverted command '/TOGGLE <key> <c><second command><c><first command>'
|
||||
| Here's one practical example you can include in your PROFILE RXIRC:
|
||||
|
|
||||
| pf5 imm toggle 5 |query Nickserv@service.de|query
|
||||
|
|
||||
| This will set up the PF05 key to /query or un-/query NickServ.
|
||||
| Look also for the 'ctoggle' alias described in /alias.
|
||||
|
||||
This is a tricky feature to allow you to program pf keys with alternating
|
||||
function each time you use them. <key> is the number of the pf key.
|
||||
<c> is the character used to separate the commands. I use '|' usually.
|
||||
Toggle performs <first command>, then sets up PF<key> to call the
|
||||
inverted command '/TOGGLE <key> <c><second command><c><first command>'
|
||||
Here's one practical example you can include in your PROFILE RXIRC:
|
||||
|
||||
pf5 imm toggle 5 |query Nickserv@service.de|query
|
||||
|
||||
This will set up the PF05 key to /query or un-/query NickServ.
|
||||
Look also for the 'ctoggle' alias described in /alias.
|
||||
|
||||
/Umode <mode switches>
|
||||
| Change your "mode", that is change some flags in the IRC server
|
||||
| concerning your connection. See IRC documentation about this.
|
||||
| This is just a shorthand for "/mode <yournick> <switches>".
|
||||
|
||||
Change your "mode", that is change some flags in the IRC server
|
||||
concerning your connection. See IRC documentation about this.
|
||||
This is just a shorthand for "/mode <yournick> <switches>".
|
||||
|
||||
/UNCHOP <nickname> [<nickname> [<nickname>]]
|
||||
| Remove channel operatorship of the current channel from some people.
|
||||
| A shorthand for "/mode $C -o <nickname>"
|
||||
|
||||
Remove channel operatorship of the current channel from some people.
|
||||
A shorthand for "/mode $C -o <nickname>"
|
||||
|
||||
/VIewlog
|
||||
| A handy command to check out today's IRC log.
|
||||
| Uses the CMS command 'BROWSE'. Hope that one exists on every CMS.
|
||||
|
||||
A handy command to check out today's IRC log.
|
||||
Uses the CMS command 'BROWSE'. Hope that one exists on every CMS.
|
||||
|
||||
/WHO [<channel> | <nickname> | <matchstring>]
|
||||
| The /who command can now be used without arguments, if you are talking
|
||||
| to a channel, it will show you the WHO list of that channel.
|
||||
The /who command can now be used without arguments, if you are talking
|
||||
to a channel, it will show you the WHO list of that channel.
|
||||
You can match hosts as well as real names with <matchstring>, so
|
||||
the normal way to get a list of e.g. all italians is to type '/who *.it'.
|
||||
| The logic that displays WHO output has become very complex (and
|
||||
| colourful if you have colours by the way). It will display the channel
|
||||
| information only if it still fits into the line. Also, if there is still
|
||||
| not enough space, it will truncate the hostname and put an '*' after the
|
||||
| '@' to indicate that. But it will only truncate the hostname to a certain
|
||||
| minimum, from then on it will shorten the real name information and
|
||||
| indicate that with a pair of periods, but that only happens in extreme
|
||||
| cases. /who should always give you as much info as possible without
|
||||
| wrapping lines. If you however do need more info don't forget about /whois.
|
||||
The logic that displays WHO output has become very complex (and
|
||||
colourful if you have colours by the way). It will display the channel
|
||||
information only if it still fits into the line. Also, if there is still
|
||||
not enough space, it will truncate the hostname and put an '*' after the
|
||||
'@' to indicate that. But it will only truncate the hostname to a certain
|
||||
minimum, from then on it will shorten the real name information and
|
||||
indicate that with a pair of periods, but that only happens in extreme
|
||||
cases. /who should always give you as much info as possible without
|
||||
wrapping lines. If you however do need more info don't forget about /whois.
|
||||
|
||||
/Xamine
|
||||
Quicky to get a /whois of the person that lest sent you a message.
|
||||
|
||||
/Yell <arguments>
|
||||
| This is just like /tell with one little difference. Yell prepends
|
||||
| your own nickname in front of the message. Use it when it's likely
|
||||
| that your dialogue partner is not running a message handling program
|
||||
| and doesn't know your userid by heart.
|
||||
|
||||
This is just like /tell with one little difference. Yell prepends
|
||||
your own nickname in front of the message. Use it when it's likely
|
||||
that your dialogue partner is not running a message handling program
|
||||
and doesn't know your userid by heart.
|
||||
|
||||
* <remark>
|
||||
| With this you can add CMS-style comments in your RXIRC source files.
|
||||
| Lines beginning with * are skipped.
|
||||
With this you can add CMS-style comments in your RXIRC source files.
|
||||
Lines beginning with * are skipped.
|
||||
|
||||
BIN
vm.modules/rexxwait.vmarc
Normal file
BIN
vm.modules/rexxwait.vmarc
Normal file
Binary file not shown.
101
vm.modules/rxsocket.list
Normal file
101
vm.modules/rxsocket.list
Normal file
@ -0,0 +1,101 @@
|
||||
Filename Filetype FM Format LRecL Date Time Compressed Size
|
||||
EXTINT52 ASSEMBLE W1 F 80 1993-02-17 11:55:28 6561
|
||||
RXSOCKET $PACKAGE W1 V 72 1994-01-10 17:10:36 2668
|
||||
EXTINT52 MODULE W1 F 1360 1993-02-17 11:55:18 1228
|
||||
RXWSAMPL TIMEFILE W1 V 57 1993-02-17 11:55:04 431
|
||||
RXWSAMPL EXEC W1 V 73 1994-06-06 21:11:30 2866
|
||||
REXXWAIT MODULE W1 V -11456 1994-04-15 07:01:03 33148
|
||||
WNG HELPEVNT W1 V 79 1994-01-10 17:04:48 911
|
||||
WAIT HELPEVNT W1 V 79 1994-01-10 17:04:47 831
|
||||
TIME HELPEVNT W1 V 79 1994-01-10 17:04:46 1231
|
||||
SMSG HELPEVNT W1 V 79 1994-01-10 17:04:45 991
|
||||
OMSG HELPEVNT W1 V 79 1994-01-10 17:04:44 1551
|
||||
MSG HELPEVNT W1 V 79 1994-01-10 17:04:43 911
|
||||
MAIL HELPEVNT W1 V 79 1994-01-10 17:04:42 1071
|
||||
FILE HELPEVNT W1 V 79 1994-01-10 17:04:40 1391
|
||||
CONS HELPEVNT W1 V 79 1994-01-10 17:04:37 911
|
||||
ALL HELPEVNT W1 V 79 1994-01-10 17:04:36 751
|
||||
EVNTHND HELPMENU W1 V 75 1994-01-10 17:04:48 991
|
||||
WAIT HELPREXX W1 V 79 1994-01-10 17:05:06 1151
|
||||
SETVALUE HELPREXX W1 V 79 1994-01-10 17:05:03 911
|
||||
RESETVAL HELPREXX W1 V 79 1994-01-10 17:05:03 671
|
||||
QUERYVAL HELPREXX W1 V 79 1994-01-10 17:05:02 991
|
||||
CTABLE HELPREXX W1 V 79 1994-01-10 17:04:59 1151
|
||||
CTYPE HELPREXX W1 V 79 1994-01-10 17:05:00 591
|
||||
EC2AC HELPREXX W1 V 79 1994-01-10 17:05:01 511
|
||||
AC2EC HELPREXX W1 V 79 1994-01-10 17:04:58 511
|
||||
REXXWAIT HELPMENU W1 V 75 1994-01-10 17:04:51 1071
|
||||
REXXWAIT MANUAL W1 V 110 1994-04-15 07:00:52 45429
|
||||
REXXWAIT MEMO W1 V 76 1993-09-15 09:30:55 4419
|
||||
RXSOCKET TCPXLATE W1 V 59 1993-02-17 11:53:48 1551
|
||||
RXSOCKET TCPXLBIN W1 F 256 1993-02-17 11:53:59 757
|
||||
RSCLIENT EXEC W1 V 72 1993-02-17 11:53:29 2881
|
||||
RSSERVER EXEC W1 V 72 1993-02-17 11:53:18 4321
|
||||
RXSSAMPL EXEC W1 V 73 1993-02-17 11:52:50 3210
|
||||
RESOLVE EXEC W1 V 60 1993-02-17 11:52:33 1038
|
||||
FINGER EXEC W1 V 82 1995-03-27 08:58:48 2582
|
||||
DAYTIME EXEC W1 V 82 1993-02-17 12:19:28 2262
|
||||
ARCHIE EXEC W1 V 94 1995-06-09 17:38:17 7702
|
||||
RXSOCKET MODULE W1 V -28648 1994-07-01 09:55:53 25201
|
||||
RXSOCKET MEMO W1 V 74 1993-02-17 21:23:48 8600
|
||||
RXSOCKET MANUAL W1 V 96 1993-06-04 10:23:03 36004
|
||||
RXSOCKET SCRIPT W1 V 133 1994-04-20 10:44:15 34194
|
||||
IMMCMD HELPEVNT W1 V 79 1994-01-12 08:50:31 991
|
||||
HOLIDAY HELPEVNT W1 V 79 1994-01-12 08:50:11 1151
|
||||
SOCKET HELPEVNT W1 V 79 1994-01-10 17:04:45 1151
|
||||
SOCKET HELPREXX W1 V 79 1994-01-10 17:05:04 991
|
||||
REXXSOCK HELPMENU W1 V 73 1994-01-10 17:04:50 671
|
||||
RXS028W HELPMSG W1 V 76 1994-01-10 17:04:57 674
|
||||
RXS012E HELPMSG W1 V 77 1994-01-10 17:04:56 514
|
||||
RXS008E HELPMSG W1 V 78 1994-01-10 17:04:55 674
|
||||
RXS004E HELPMSG W1 V 79 1994-01-10 17:04:52 674
|
||||
WRITE HELPRXSO W1 V 78 1994-01-10 17:06:12 1231
|
||||
VERSION HELPRXSO W1 V 78 1994-01-10 17:06:11 1071
|
||||
TERMINAT HELPRXSO W1 V 79 1994-01-10 17:06:10 1311
|
||||
TAKESOCK HELPRXSO W1 V 78 1994-01-10 17:06:09 1631
|
||||
SOCKETSE HELPRXSO W1 V 79 1994-01-10 17:06:00 2591
|
||||
SOCKET HELPRXSO W1 V 77 1994-01-10 17:05:59 1631
|
||||
SHUTDOWN HELPRXSO W1 V 78 1994-01-10 17:05:59 1151
|
||||
SETSOCKO HELPRXSO W1 V 78 1994-01-10 17:05:58 1871
|
||||
SENDTO HELPRXSO W1 V 79 1994-01-10 17:05:57 1471
|
||||
SEND HELPRXSO W1 V 77 1994-01-10 17:05:56 1391
|
||||
SELECT HELPRXSO W1 V 78 1994-01-10 17:05:55 1791
|
||||
RESOLVE HELPRXSO W1 V 77 1994-01-10 17:05:53 1551
|
||||
RECVFROM HELPRXSO W1 V 78 1994-01-10 17:05:52 1711
|
||||
RECV HELPRXSO W1 V 78 1994-01-10 17:05:51 1551
|
||||
READ HELPRXSO W1 V 77 1994-01-10 17:05:49 1471
|
||||
LISTEN HELPRXSO W1 V 79 1994-01-10 17:05:48 1151
|
||||
IOCTL HELPRXSO W1 V 78 1994-01-10 17:05:46 1631
|
||||
INITIALI HELPRXSO W1 V 79 1994-01-10 17:05:45 1711
|
||||
GIVESOCK HELPRXSO W1 V 78 1994-01-10 17:05:45 1551
|
||||
GETSOCKO HELPRXSO W1 V 78 1994-01-10 17:05:44 1951
|
||||
GETSOCKN HELPRXSO W1 V 79 1994-01-10 17:05:32 1151
|
||||
GETSERVB HELPRXSO W1 V 74 1994-01-10 17:05:32 1231
|
||||
GETPROTO HELPRXSO W1 V 73 1994-01-10 17:05:31 1071
|
||||
GETPEERN HELPRXSO W1 V 79 1994-01-10 17:05:29 1071
|
||||
GETHOSTN HELPRXSO W1 V 76 1994-01-10 17:05:28 991
|
||||
GETHOSTI HELPRXSO W1 V 79 1994-01-10 17:05:26 991
|
||||
GETHOSTB HELPRXSO W1 V 77 1994-01-10 17:05:25 1711
|
||||
GETDOMAI HELPRXSO W1 V 76 1994-01-10 17:05:24 1071
|
||||
GETCLIEN HELPRXSO W1 V 78 1994-01-10 17:05:23 1311
|
||||
FCNTL HELPRXSO W1 V 78 1994-01-10 17:05:22 1391
|
||||
CONNECT HELPRXSO W1 V 79 1994-01-10 17:05:21 1631
|
||||
CLOSE HELPRXSO W1 V 78 1994-01-10 17:05:19 911
|
||||
BIND HELPRXSO W1 V 78 1994-01-10 17:05:18 1471
|
||||
ACCEPT HELPRXSO W1 V 79 1994-01-10 17:05:17 1471
|
||||
RXSOCKET HELPTASK W1 V 80 1994-01-10 17:06:13 2191
|
||||
RXSOCKET HOWMVS W1 F 80 1994-06-06 21:17:51 751
|
||||
RXSOCKET TXTMVS W1 F 80 1994-03-14 14:10:24 57720
|
||||
WRITESRV EXEC W1 V 115 1993-11-29 12:44:49 3311
|
||||
TACACSD EXEC W1 V 77 1995-06-09 17:35:30 5358
|
||||
RACROUTE ASSEMBLE W1 F 1024 1994-09-27 14:08:04 8185
|
||||
RACROUTE MODULE W1 V 2120 1993-11-08 14:30:55 1684
|
||||
TALK EXEC W1 V 93 1994-12-07 14:22:05 10087
|
||||
EC2AC EXEC W1 F 80 1994-08-17 12:39:07 958
|
||||
AC2EC EXEC W1 F 80 1994-08-17 12:22:55 958
|
||||
WRITE EXEC W1 V 115 1994-02-16 13:53:35 4111
|
||||
NFTP EXEC W1 V 95 1993-10-20 16:20:40 4594
|
||||
TALKD EXEC W1 V 130 1993-07-17 11:11:04 4620
|
||||
SYSLOGD EXEC W1 V 78 1995-06-09 17:41:32 3708
|
||||
TCPLOGD NAMES W1 V 75 1995-06-09 17:47:27 985
|
||||
NFSUTIL EXEC W1 F 80 1995-06-09 17:48:24 20226
|
||||
609
vm.modules/rxsocket.read-me
Normal file
609
vm.modules/rxsocket.read-me
Normal file
@ -0,0 +1,609 @@
|
||||
TCP/IP Socket support function for REXX (Rxsocket & Rexxwait)
|
||||
Arty Ecock <eckcu@cunyvm.cuny.edu>
|
||||
CUNY
|
||||
|
||||
|
||||
Last revised: 17 February 1993
|
||||
|
||||
This file contains tips for converting applications from
|
||||
RXSOCKET Version 1 to RXSOCKET Version 2.
|
||||
|
||||
A word about defaults:
|
||||
----------------------
|
||||
|
||||
RXSOCKET Version 2 reads the TCPIP DATA file in order to establish
|
||||
non-default values for such things as the TCP/IP server userid,
|
||||
the Name Server IP addresses to use for name resolution, the local
|
||||
Domain Origin, Resolver Timeout value, etc.
|
||||
|
||||
If the TCPIP DATA file is *NOT* available, the following defaults are
|
||||
used:
|
||||
|
||||
TCPIPuserid TCPIP
|
||||
HostName (the value returned from the TCPIP server)
|
||||
DomainOrigin (null string)
|
||||
NSinterAddr 14.0.0.0
|
||||
NSportAddr 53
|
||||
ResolveVia UDP
|
||||
ResolverTimeout 30
|
||||
ResolverUdpRetries 1 (not fully supported; soon, though)
|
||||
|
||||
The value of "TCPIPuserid" can be overridden by specifying a value for
|
||||
the fourth argument of an "Initialize" subfunction:
|
||||
|
||||
Parse Value Socket('Initialize', 'Test', 40, 'TCPIPTST') With rc ...
|
||||
-or-
|
||||
Parse Value Socket('Initialize', 'Test', ,'TCPIPTST') With rc ...
|
||||
|
||||
RXSOCKET Version 2 uses a specific hierarchy when searching for an
|
||||
appropriate set of ASCII/EBCDIC translate tables. Using the example
|
||||
"Initialize" subfunction above, the following translate tables are
|
||||
sought: (the first table found is used)
|
||||
|
||||
1) "TEST TCPXLBIN *". Note that the socket-set name "Test" has
|
||||
been upper-cased.
|
||||
|
||||
2) If not found, RXSOCKET searches for "userid TCPXLBIN *", where
|
||||
"userid" is the VM userid using RXSOCKET.
|
||||
|
||||
3) If not found, RXSOCKET searches for "STANDARD TCPXLBIN *".
|
||||
(STANDARD TCPXLBIN is usually supplied with VM TCP/IP on the
|
||||
TCPMAINT 592 minidisk.)
|
||||
|
||||
4) Then "RXSOCKET TCPXLBIN *". These tables are *IDENTICAL* to
|
||||
the tables that are hard-coded into RXSOCKET.
|
||||
|
||||
RXSOCKET TCPXLATE contains the source version of these translate
|
||||
tables. This file is converted to RXSOCKET TCPXLBIN by using the
|
||||
CONVXLAT MODULE supplied with TCP/IP (on the TCPMAINT 592 disk).
|
||||
|
||||
RXSOCKET TCPXLATE and STANDARD TCPXLATE can be used as templates
|
||||
for cistomizing your own translate tables.
|
||||
|
||||
5) If none of these tables are found, an internal set of ASCII/EBCDIC
|
||||
translate tables are used.
|
||||
|
||||
STANDARD TCPXLBIN is usually suitable for most applications. Problems
|
||||
with square brackets, for example, can usually be overcome by creating
|
||||
a customized TCPXLBIN file.
|
||||
|
||||
|
||||
A word about the format of the new result string:
|
||||
-------------------------------------------------
|
||||
|
||||
In RXSOCKET, the result of a SOCKET function call is always a character
|
||||
string. This string usually contains several items. The first item
|
||||
will always be a return code value. A return code of "0" indicates that
|
||||
the function call completed without error. The remaining items in the
|
||||
result string contain function-specific values.
|
||||
|
||||
Example 1:
|
||||
Parse Value Socket('Initialize', 'Test') With rc sockset count server
|
||||
|
||||
might yield:
|
||||
|
||||
rc = "0" Return code "0" (Success)
|
||||
sockset = "Test" The name of this socket-set
|
||||
count = "40" Default number of sockets available
|
||||
server = "TCPIP" Default TCP/IP server userid
|
||||
|
||||
Example 2:
|
||||
Call Socket 'Initialize', 'Test'
|
||||
Parse Var result rc sockset count server
|
||||
|
||||
should yield the same values. (Remember that the "result" variable
|
||||
is set by REXX when you "Call" a REXX function.)
|
||||
|
||||
If the return code value is other than "0", an error is indicated. In
|
||||
such a case, the second item in the result string corresponds to an
|
||||
"Errno Value" as described in Chapter 3 of the IBM TCP/IP Programmer's
|
||||
Reference manual. "EBADF", "EWOULDBLOCK", "EFAULT", "ENOPROTOOPT" and
|
||||
"EINVALIDRXSOCKETCALL" are a few of the possible values. The remaining
|
||||
items (words) of the result string describe the error in more
|
||||
understandable terms (I hope).
|
||||
|
||||
Examples:
|
||||
"9 EBADF Bad file number"
|
||||
"35 EWOULDBLOCK Operation would block"
|
||||
"36 EINPROGRESS Operation now in progress"
|
||||
"60 ETIMEDOUT Connection timed out"
|
||||
"61 ECONNREFUSED Connection refused"
|
||||
|
||||
Note that rc=36 is not necessarily an error condition.
|
||||
"EINPROGRESS" may be returned for certain operations on non-blocking
|
||||
sockets.
|
||||
|
||||
See Chapter 3 of the IBM TCP/IP Programmer's Reference manual for
|
||||
information on which "Errno Values" correspond to which socket calls.
|
||||
|
||||
Thus, you must take care when parsing the result of a RXSOCKET
|
||||
subfunction. Using a trailing "." on a "Parse" statement may cause
|
||||
you to lose the descriptive text in the case of an error.
|
||||
|
||||
Example 1:
|
||||
Parse Value Socket('Close', socket) With rc .
|
||||
|
||||
If "rc" was not "0" then the "Errno Value" and descriptive text of
|
||||
the error will be lost.
|
||||
|
||||
Example 2:
|
||||
Parse Value Socket('Close', socket) With rc rest
|
||||
|
||||
In this case, the "rest" variable will contain both
|
||||
"Errno Value" and descriptive text when rc is not "0".
|
||||
|
||||
Example 3:
|
||||
Parse Value Socket('Close', socket) With result
|
||||
Parse Var result rc .
|
||||
If rc^=0 Then Do
|
||||
Parse Var result errno errno_value errno_text
|
||||
...
|
||||
End
|
||||
|
||||
-or-
|
||||
|
||||
Call Socket 'Close', socket
|
||||
Parse Var result rc .
|
||||
If rc^=0 Then Do
|
||||
Parse Var result errno errno_value errno_text
|
||||
...
|
||||
End
|
||||
|
||||
This is fine if you like to use many "Parse" statements.
|
||||
|
||||
Example 4:
|
||||
Parse Value Socket('Close', socket) With result
|
||||
If Word(result,1)^=0 Then Do
|
||||
Say TcpError("Error during Close")
|
||||
Call Exit
|
||||
End
|
||||
|
||||
-or-
|
||||
|
||||
Parse Value Socket('Close', socket) With rc .
|
||||
If rc^=0 Then Do
|
||||
Say TcpError("Error during Close")
|
||||
Call Exit
|
||||
End
|
||||
|
||||
The former is nice, but the latter is my personal favorite.
|
||||
The "TcpError" call in this example would yield:
|
||||
|
||||
"Error during Close:" errno_text
|
||||
|
||||
where "errno_text" is the descriptive text associated with the
|
||||
errno value.
|
||||
|
||||
Example:
|
||||
"Error during Close: Bad file number"
|
||||
|
||||
There's also less parsing, fuss, and mess with this example.
|
||||
|
||||
|
||||
Comparison of RXSOCKET Version 2 functions to Version 1
|
||||
-------------------------------------------------------
|
||||
|
||||
The Version 2 function and result string will be listed first,
|
||||
followed by the Version 1 function call.
|
||||
|
||||
|
||||
function: Socket('Initialize', subtaskid, <maxdesc>, <serverid>)
|
||||
result: rc subtaskid maxdesc serverid
|
||||
|
||||
Version1: rc = Socket('Initialize', subtaskid, serverid, maxdesc)
|
||||
|
||||
Note: "maxdesc" and "serverid" have swapped places in
|
||||
RXSOCKET Version 2.
|
||||
"rc" is no longer set to the "maxdesc" value.
|
||||
|
||||
|
||||
function: Socket('Accept', socket)
|
||||
result: rc newsocket name
|
||||
|
||||
Version1: rc = Socket('Accept', socket, name)
|
||||
|
||||
Note: "name" has been moved into the result string.
|
||||
"name" is now returned as "AF_INET port nnn.nnn.nnn.nnn".
|
||||
"rc" is no longer set to the "newsocket" number.
|
||||
|
||||
|
||||
function: Socket('Bind', socket, name)
|
||||
result: rc
|
||||
|
||||
Version1: rc = Socket('Bind', socket, name)
|
||||
|
||||
Note: "name" is now specified as "AF_INET port ipaddr|hostname"
|
||||
|
||||
Examples:
|
||||
"AF_INET INPORT_ANY CUNYVM"
|
||||
"AF_INET 123 CUNYVM.CUNY.EDU"
|
||||
"AF_INET 0 CUNYVM.CUNY.EDU"
|
||||
"AF_INET 42 128.228.1.2"
|
||||
"AF_INET 12 INADDR_ANY"
|
||||
"AF_INET"
|
||||
"AF_INET 77"
|
||||
"AF_INET INPORT_ANY INADDR_ANY"
|
||||
"AF_INET INPORT_ANY ANY"
|
||||
"AF_INET ANY ANY"
|
||||
"AF_INET 23 LOOPBACK"
|
||||
"AF_INET INPORT_ANY INADDR_BROADCAST"
|
||||
"AF_INET INPORT_ANY BROADCAST"
|
||||
|
||||
You get the idea :-)
|
||||
|
||||
|
||||
function: Socket('Close', socket)
|
||||
result: rc
|
||||
|
||||
Version1: rc = Socket('Close', socket)
|
||||
|
||||
|
||||
function: Socket('Connect', socket, name)
|
||||
result: rc
|
||||
|
||||
Version1: rc = Socket('Connect', socket, name)
|
||||
|
||||
Note: "name" is now specified as "AF_INET port ipaddr|hostname".
|
||||
|
||||
|
||||
function: Socket('Fcntl', socket, cmd, <data>)
|
||||
result: rc <data>
|
||||
|
||||
Version1: rc = Socket('Fcntl', socket, cmd, data)
|
||||
|
||||
Note: "Blocking" and "Non-Blocking" have been added as
|
||||
permissible values for "data".
|
||||
"rc" is no longer set to the value of "data" (in the
|
||||
case of "F_GETFL").
|
||||
|
||||
|
||||
function: Socket('GetClientId', <domain>)
|
||||
result: rc clientid
|
||||
|
||||
Version1: rc = Socket('GetClientId', domain, clientid)
|
||||
|
||||
Note: "clientid" has been moved into the result string.
|
||||
|
||||
|
||||
function: Socket('GetDomainName')
|
||||
result: rc domain
|
||||
|
||||
No corresponding RXSOCKET Version 1 subfunction.
|
||||
The Version 1 GetHostName used to append the domain
|
||||
origin to the host name. The "GetDomainName" subfunction
|
||||
has been added to return the domain origin string.
|
||||
"GetHostName" has been changed to return just the host
|
||||
name.
|
||||
|
||||
|
||||
function: Socket('GetDTableSize') not implemented in RXSOCKET Version 2
|
||||
|
||||
Version1: rc = Socket('GetDTableSize')
|
||||
|
||||
The number of sockets for a specified socket set may be
|
||||
obtained using the "SocketSetStatus" subfunction. The
|
||||
number of sockets is also returned in the result string
|
||||
of the "Initialize" subfunction.
|
||||
|
||||
|
||||
function: Socket('GetHostByAddr', ipaddr)
|
||||
result: rc hostname
|
||||
|
||||
Version1: rc = Socket('GetHostByAddr', hostaddr, hostname)
|
||||
|
||||
Note: "hostname" has been moved into the result string.
|
||||
|
||||
|
||||
function: Socket('GetHostByName', hostname)
|
||||
result: rc ipaddr1 ipaddr2 ... ipaddrN
|
||||
|
||||
Version1: rc = Socket('GetHostByName', hostname)
|
||||
|
||||
Note: "rc" is no longer set to the "ipaddr" value. The
|
||||
result string may contain a list of "ipaddr" values.
|
||||
If the specified hostname is not multi-homed, then
|
||||
a single "ipaddr" value is returned (in the form:
|
||||
"nnn.nnn.nnn.nnn").
|
||||
|
||||
|
||||
function: Socket('GetHostId')
|
||||
result: rc ipaddr
|
||||
|
||||
Version1: rc = Socket('GetHostId')
|
||||
|
||||
Note: "rc" is no longer set to the "ipaddr" value.
|
||||
"ipaddr" is returned in the form "nnn.nnn.nnn.nnn".
|
||||
|
||||
|
||||
function: Socket('GetHostName')
|
||||
result: rc hostname
|
||||
|
||||
Version1: rc = Socket('GetHostName', hostname)
|
||||
|
||||
Note: "hostname" has been moved into the result string.
|
||||
"hostname" is returned as the "HostName" value from
|
||||
TCPIP DATA (or the value obtained from the TCPIP
|
||||
server) *WITHOUT* the Domain Origin string appended.
|
||||
|
||||
|
||||
function: Socket('GetPeerName', socket)
|
||||
result: rc name
|
||||
|
||||
Version1: rc = Socket('GetPeerName', socket, name)
|
||||
|
||||
Note: "name" has been moved into the result string.
|
||||
"name" is now returned as "AF_INET port nnn.nnn.nnn.nnn".
|
||||
|
||||
|
||||
function: Socket('GetProtoByName', protocol_name)
|
||||
result: rc protocol_number
|
||||
|
||||
No corresponding RXSOCKET Version 1 subfunction.
|
||||
|
||||
|
||||
function: Socket('GetProtoByNumber', protocol_number)
|
||||
result: rc protocol_name
|
||||
|
||||
No corresponding RXSOCKET Version 1 subfunction.
|
||||
|
||||
|
||||
function: Socket('GetServByName', service_name, <service_protocol>)
|
||||
result: rc service_name service_port service_protocol
|
||||
|
||||
No corresponding RXSOCKET Version 1 subfunction.
|
||||
*All* values listed in RFC1340 for "service_name" are
|
||||
supported. See "well known ports" in RFC1340.
|
||||
|
||||
function: Socket('GetServByPort', service_port, <service_protocol>)
|
||||
result: rc service_name service_port service_protocol
|
||||
|
||||
No corresponding RXSOCKET Version 1 subfunction.
|
||||
*All* values listed in RFC1340 for "service_port" are
|
||||
supported. See "well known ports" in RFC1340.
|
||||
|
||||
|
||||
function: Socket('GetSockName', socket)
|
||||
result: rc name
|
||||
|
||||
Version1: rc = Socket('GetSockName', socket, name)
|
||||
|
||||
Note: "name" has been moved into the result string.
|
||||
"name" is now returned as "AF_INET port nnn.nnn.nnn.nnn".
|
||||
|
||||
|
||||
function: Socket('GetSockOpt', socket, level, optname)
|
||||
result: rc optval
|
||||
|
||||
Version1: rc = Socket('GetSockOpt', socket, level, optname, optval)
|
||||
|
||||
Note: "optval" has been moved into the result string.
|
||||
Values for "optval" are now returned in a more
|
||||
human-usable format.
|
||||
|
||||
|
||||
function: Socket('GiveSocket', socket, clientid)
|
||||
result: rc
|
||||
|
||||
Version1: rc = Socket('GiveSocket', socket, clientid)
|
||||
|
||||
Note: This subfunction now works.
|
||||
"clientid" is now specified as "AF_INET subtaskid userid".
|
||||
|
||||
|
||||
function: Socket('Ioctl', socket, cmd, <data>)
|
||||
result: rc <data>
|
||||
|
||||
Version1: rc = Socket('Ioctl', socket, cmd, data)
|
||||
|
||||
Note: This subfunction now works.
|
||||
Values for "data" are now accepted and returned in a
|
||||
more human-usable format.
|
||||
|
||||
|
||||
function: Socket('Listen', socket, <backlog>)
|
||||
result: rc
|
||||
|
||||
Version1: rc = Socket('Listen', socket, backlog)
|
||||
|
||||
Note: "backlog" now defaults to "10".
|
||||
|
||||
|
||||
function: Socket('Path') removed from RXSOCKET Version 2
|
||||
|
||||
Version1: rc = Socket('Path', subtaskid)
|
||||
|
||||
Note: This function has been renamed to "SocketSet".
|
||||
|
||||
|
||||
function: Socket('Read', socket, <length>)
|
||||
result: rc length data
|
||||
|
||||
Version1: rc = Socket('Read', socket, data, length)
|
||||
|
||||
Note: "rc" is no longer set to the number of bytes read.
|
||||
"length" defaults to "10000", with a maximum value
|
||||
of "100000".
|
||||
"data" has been moved into the result string.
|
||||
|
||||
|
||||
function: Socket('Recv', socket, <length>, <flags>)
|
||||
result: rc length data
|
||||
|
||||
Version1: rc = Socket('Recv', socket, data, length, flags)
|
||||
|
||||
Note: "rc" is no longer set to the number of bytes read.
|
||||
"length" defaults to "10000", with a maximum value
|
||||
of "100000".
|
||||
"data" has been moved into the result string.
|
||||
"flags" may now contain more than a single value.
|
||||
|
||||
|
||||
function: Socket('RecvFrom', socket, <length>, <flags>)
|
||||
result: rc name length data
|
||||
|
||||
Version1: rc = Socket('RecvFrom', socket, data, length, flags, name)
|
||||
|
||||
Note: "rc" is no longer set to the number of bytes read.
|
||||
"length" defaults to "10000", with a maximum value
|
||||
of "100000".
|
||||
"data" has been moved into the result string.
|
||||
"name" has been moved into the result string.
|
||||
"flags" may now contain more than a single value.
|
||||
|
||||
|
||||
function: Socket('Resolve', ipaddr|hostname, <timeout>)
|
||||
result: rc ipaddr hostname
|
||||
|
||||
No corresponding RXSOCKET Version 1 subfunction.
|
||||
|
||||
Note: I use "Resolve" instead of "GetHostByAddr" and
|
||||
"GetHostByName" since "Resolve" does not care
|
||||
whether its input is an IP address or a hostname.
|
||||
"timeout" allows you to override the "ResolverTimeout"
|
||||
value in TCPIP DATA.
|
||||
|
||||
|
||||
function: Socket('Select', 'Read n Write n Exception n', <timeout>)
|
||||
result: rc numready READ n n WRITE n n n EXCEPTION n
|
||||
|
||||
Version1: rc = Socket('Select', nfds, rmask, wmask, xmask, timeout)
|
||||
|
||||
Note: All the bitmask manipulation functions (FD_SET, FD_CLR,
|
||||
etc.) have been removed.
|
||||
Specifying "0" as a value for "n" still refers to the
|
||||
console ("Read 0" means, "wait for a Console Attention").
|
||||
REXXWAIT is far superior in function to "Select"
|
||||
("Wait('Cons Time 5 Seconds Socket' socket 'SMSG')" is
|
||||
certainly lots more versatile.)
|
||||
"Select" is handy for applications that don't require
|
||||
enhanced "wait" facilities.
|
||||
|
||||
|
||||
function: Socket('Send', socket, data, <flags>)
|
||||
result: rc length
|
||||
|
||||
Version1: rc = Socket('Send', socket, data, flags)
|
||||
|
||||
Note: "rc" is no longer set to the number of bytes transmitted.
|
||||
|
||||
|
||||
function: Socket('SendTo', socket, data, <flags>, name)
|
||||
result: rc length
|
||||
|
||||
Version1: rc = Socket('SendTo', socket, data, flags, name)
|
||||
|
||||
Note: "rc" is no longer set to the number of bytes transmitted.
|
||||
"name" is now specified as "AF_INET port ipaddr|hostname".
|
||||
|
||||
|
||||
function: Socket('SetSockOpt', socket, level, optname, optval)
|
||||
result: rc
|
||||
|
||||
Version1: rc = Socket('SetSockOpt', socket, level, optname, optval)
|
||||
|
||||
Note: "optval" can now be expressed in a more human-usable
|
||||
format.
|
||||
An "optname" of "SO_ASCII" indicates that the data
|
||||
flowing across the socket should be "ASCII". Please
|
||||
note that RXSOCKET Version 1 used "SO_EBCDIC" for
|
||||
this purpose. "SO_EBCDIC" now indicates that the
|
||||
data flowing across the socket is EBCDIC and is to
|
||||
be treated as such. "So_ASCII" set to "On" forces
|
||||
data translation to and from EBCDIC (thus allowing
|
||||
ASCII data to flow across the socket).
|
||||
|
||||
|
||||
function: Socket('ShutDown', socket, <how>)
|
||||
result: rc
|
||||
|
||||
Version1: rc = Socket('ShutDown', socket, how)
|
||||
|
||||
Note: "how" now defaults to "BOTH" (instead of "FROM").
|
||||
|
||||
|
||||
function: Socket('Socket', <domain>, <type>, <protocol>)
|
||||
result: rc newsocket
|
||||
|
||||
Version1: rc = Socket('Socket', domain, type, protocol)
|
||||
|
||||
Note: "rc" is no longer set to the value of "newsocket".
|
||||
"domain" defaults to "AF_INET".
|
||||
"type" defaults to "Sock_Stream".
|
||||
"protocol" defaults to "IPPROTO_TCP".
|
||||
|
||||
|
||||
function: Socket('SocketSet', <subtaskid>)
|
||||
result: rc subtaskid
|
||||
|
||||
Version1: rc = Socket('Path', subtaskid)
|
||||
|
||||
Note: When switching to a new socket set, the name of the
|
||||
previously active socket set is returned. This makes
|
||||
it easier to switch back if switching between many
|
||||
socket sets. If switching between 2 socket sets,
|
||||
you needn't bother remembering the previously active
|
||||
socket set name, since RXSOCKET maintains socket sets
|
||||
on a push-down stack in Least Recently Used order.
|
||||
|
||||
|
||||
function: Socket('SocketSetList')
|
||||
result: rc subtaskid1 subtaskid2 ... subtaskidN
|
||||
|
||||
No corresponding RXSOCKET Version 1 subfunction.
|
||||
|
||||
|
||||
function: Socket('SocketSetStatus', <subtaskid>)
|
||||
result: rc subtaskid status <connectinfo>|<reason>
|
||||
|
||||
No corresponding RXSOCKET Version 1 subfunction.
|
||||
|
||||
|
||||
function: Socket('TakeSocket', clientid, hissocket)
|
||||
result: rc newsocket
|
||||
|
||||
Version1: rc = Socket('TakeSocket', clientid, hissocket)
|
||||
|
||||
Note: This subfunction now works.
|
||||
"rc" is no longer set to the value of "newsocket".
|
||||
"clientid" is now specified as "AF_INET subtaskid userid".
|
||||
|
||||
|
||||
function: Socket('Terminate', <subtaskid>)
|
||||
result: rc subtaskid
|
||||
|
||||
Version1: rc = Socket('Terminate', subtaskid)
|
||||
|
||||
Note: if "subtaskid" is omitted, the "active" socket set
|
||||
is terminated. In any case, the name of the terminated
|
||||
socket set is returned in the result string.
|
||||
|
||||
|
||||
function: Socket('Version')
|
||||
result: rc REXX/SOCKETS version date
|
||||
|
||||
rs = Socket('Version')
|
||||
|
||||
Note: "rs" is similar in format to the result string.
|
||||
The associated "version" values. of course, differ.
|
||||
|
||||
|
||||
function: Socket('Write', socket, data)
|
||||
result: rc length
|
||||
|
||||
Version1: rc = Socket('Write', socket, data)
|
||||
|
||||
Note: "rc" is no longer set to the number of bytes transmitted.
|
||||
|
||||
|
||||
A word from your sponsors:
|
||||
--------------------------
|
||||
|
||||
Rainer and I worked long and hard on this collaboration. We hope it
|
||||
was a successful one. We love feedback, comments and suggestions.
|
||||
I personally prefer chocolate.
|
||||
|
||||
Please let us know if you run into any problems with REXX/SOCKETS.
|
||||
|
||||
Cheers,
|
||||
Arty Ecock - CUNY/UCC
|
||||
Rainer Hauser - IBM, Zurich
|
||||
BIN
vm.modules/rxsocket.vmarc
Normal file
BIN
vm.modules/rxsocket.vmarc
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user